Skip to content

Commit 0525bb6

Browse files
authored
refactor(website): simplify hero run player (#43)
1 parent 4e859a3 commit 0525bb6

2 files changed

Lines changed: 89 additions & 114 deletions

File tree

website/theme/components/HomeLayout.tsx

Lines changed: 37 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -509,10 +509,10 @@ const runtimePlayerPhases = [
509509
code: '01',
510510
stage: { zh: '准备', en: 'PREPARE' },
511511
navTitle: { zh: '准备上下文', en: 'Prepare context' },
512-
title: { zh: '任务已进入 Session', en: 'The task is in the Session' },
512+
title: { zh: '正在准备上下文', en: 'Preparing context' },
513513
summary: {
514-
zh: 'A3S 创建本次 Run,并从历史、项目指令和记忆中选出模型需要的上下文。',
515-
en: 'A3S creates the run and selects the history, project instructions, and memory needed by the model.',
514+
zh: '已创建本次运行,并准备好项目指令、历史和可用工具。',
515+
en: 'The run is created with the project instructions, history, and available tools it needs.',
516516
},
517517
action: {
518518
zh: '取得运行权,组装 messages[] 与 tools[]',
@@ -532,12 +532,12 @@ const runtimePlayerPhases = [
532532
stage: { zh: '判断', en: 'DECIDE' },
533533
navTitle: { zh: '决定下一步', en: 'Choose next step' },
534534
title: {
535-
zh: '模型提出一次只读搜索',
536-
en: 'The model proposes a read-only search',
535+
zh: '模型选择只读搜索',
536+
en: 'The model chooses a read-only search',
537537
},
538538
summary: {
539-
zh: '模型根据任务选择 grep,只生成结构化调用;此时还没有读取或改动仓库。',
540-
en: 'The model selects grep and emits a structured call. It has not read or changed the repository yet.',
539+
zh: '模型选择 grep 搜索 TODO 和 FIXME;此时还没有改动仓库。',
540+
en: 'The model chooses grep for TODO and FIXME. The repository has not been changed.',
541541
},
542542
action: {
543543
zh: '生成 grep({ pattern: "TODO|FIXME" })',
@@ -557,12 +557,12 @@ const runtimePlayerPhases = [
557557
stage: { zh: '执行', en: 'EXECUTE' },
558558
navTitle: { zh: '执行工具', en: 'Run the tool' },
559559
title: {
560-
zh: '检查通过,Workspace 开始搜索',
561-
en: 'Checks pass and the workspace runs the search',
560+
zh: '正在工作区执行',
561+
en: 'Running in the workspace',
562562
},
563563
summary: {
564-
zh: 'ToolInvoker 校验参数和权限后,Workspace 执行 grep;模型调用不能绕过这一步。',
565-
en: 'ToolInvoker validates arguments and permissions before the workspace runs grep. Model calls cannot bypass this step.',
564+
zh: '参数与权限检查通过,A3S 完成只读搜索并找到 3 条匹配。',
565+
en: 'Argument and permission checks pass. A3S completes the read-only search and finds 3 matches.',
566566
},
567567
action: {
568568
zh: '参数 → 权限 → Workspace.grep()',
@@ -579,15 +579,15 @@ const runtimePlayerPhases = [
579579
{
580580
id: 'record',
581581
code: '04',
582-
stage: { zh: '留痕', en: 'RECORD' },
582+
stage: { zh: '完成', en: 'DONE' },
583583
navTitle: { zh: '保存记录', en: 'Save the record' },
584584
title: {
585-
zh: '结果和执行记录已保存',
586-
en: 'The result and run record are saved',
585+
zh: '检查完成',
586+
en: 'Inspection complete',
587587
},
588588
summary: {
589-
zh: '应用收到可以直接展示的结果;事件、Trace 和快照同时保留,后续可以排查或恢复。',
590-
en: 'The app receives a renderable result while events, traces, and the snapshot remain available for inspection or recovery.',
589+
zh: '结果、运行记录和快照已经保存,之后可以随时查看或恢复。',
590+
en: 'The result, run record, and snapshot are saved for later inspection or recovery.',
591591
},
592592
action: {
593593
zh: '发布事件并提交本次 generation',
@@ -669,7 +669,7 @@ const copy = {
669669
boundaryContract: 'API 与事件',
670670
boundaryHostLabel: '你的应用',
671671
boundaryHostRole: '账号、权限与界面',
672-
stackTitle: '一次真实运行',
672+
stackTitle: '一次执行',
673673
stackHint: '点击阶段查看过程',
674674
stackHintMobile: '点击步骤展开',
675675
stackTop: '产品',
@@ -678,12 +678,10 @@ const copy = {
678678
flowTask: '检查仓库并列出发布阻塞项',
679679
flowReplay: '重播',
680680
flowRunning: '回放中',
681-
flowComplete: '已完成 · 1.8s',
682-
flowStage: '当前阶段',
683-
flowAction: 'A3S 正在做',
684-
flowOutput: '本步结果',
685-
flowEvidence: '本次运行留下',
686-
flowEventCount: '7 个事件',
681+
flowStage: '阶段',
682+
flowSaved: '运行记录已保存',
683+
flowReplayable: '过程可回放',
684+
flowRecoverable: '结果可恢复',
687685
tutorialStep: '步骤',
688686
tutorialCode: '代码',
689687
tutorialLayers: '当前负责的层',
@@ -747,7 +745,7 @@ const copy = {
747745
boundaryContract: 'APIs + EVENTS',
748746
boundaryHostLabel: 'YOUR APP',
749747
boundaryHostRole: 'OWNS UI + ACCESS',
750-
stackTitle: 'One real run',
748+
stackTitle: 'One run',
751749
stackHint: 'SELECT A PHASE TO INSPECT IT',
752750
stackHintMobile: 'TAP A STEP TO EXPAND',
753751
stackTop: 'PRODUCT',
@@ -756,12 +754,10 @@ const copy = {
756754
flowTask: 'Inspect the repository and list release blockers',
757755
flowReplay: 'REPLAY',
758756
flowRunning: 'REPLAYING',
759-
flowComplete: 'DONE · 1.8s',
760-
flowStage: 'CURRENT PHASE',
761-
flowAction: 'A3S DOES',
762-
flowOutput: 'RESULT',
763-
flowEvidence: 'SAVED WITH THIS RUN',
764-
flowEventCount: '7 EVENTS',
757+
flowStage: 'PHASE',
758+
flowSaved: 'RUN RECORD SAVED',
759+
flowReplayable: 'REPLAYABLE',
760+
flowRecoverable: 'RECOVERABLE',
765761
tutorialStep: 'STEP',
766762
tutorialCode: 'CODE',
767763
tutorialLayers: 'ACTIVE LAYER',
@@ -877,38 +873,16 @@ function RuntimePlayerStage({
877873
data-phase={phase.id}
878874
key={phase.id}
879875
>
876+
<span className="a3s-run-player-stage-icon" aria-hidden="true">
877+
{phase.id === 'record' ? '✓' : phase.code}
878+
</span>
880879
<div className="a3s-run-player-stage-copy">
881880
<span>
882881
{labels.flowStage} {phase.code} / {localeValue(phase.stage, locale)}
883882
</span>
884883
<h2>{localeValue(phase.title, locale)}</h2>
885884
<p>{localeValue(phase.summary, locale)}</p>
886885
</div>
887-
888-
<div className="a3s-run-player-exchange">
889-
<div className="a3s-run-player-action">
890-
<small>{labels.flowAction}</small>
891-
<code>{localeValue(phase.action, locale)}</code>
892-
</div>
893-
<i aria-hidden="true" />
894-
<div className="a3s-run-player-result">
895-
<small>{labels.flowOutput}</small>
896-
<strong>{localeValue(phase.result, locale)}</strong>
897-
</div>
898-
</div>
899-
900-
<div className="a3s-run-player-stage-meta">
901-
<code className="a3s-run-player-command">{phase.command}</code>
902-
<code className="a3s-run-player-event">
903-
<i aria-hidden="true" />
904-
{phase.event}
905-
</code>
906-
<span>
907-
{phase.tags.map((tag) => (
908-
<code key={tag}>{tag}</code>
909-
))}
910-
</span>
911-
</div>
912886
</article>
913887
);
914888
}
@@ -987,8 +961,6 @@ function RuntimeExecutionFlow({
987961
.focus();
988962
}
989963

990-
const statusLabel = isPlaying ? labels.flowRunning : labels.flowComplete;
991-
992964
return (
993965
<div
994966
className="a3s-runtime-inspector a3s-runtime-inspector--player"
@@ -1002,22 +974,14 @@ function RuntimeExecutionFlow({
1002974
{labels.stackTitle}
1003975
</span>
1004976
<div>
1005-
<span
1006-
className={['a3s-run-player-status', isPlaying ? 'is-running' : '']
1007-
.filter(Boolean)
1008-
.join(' ')}
1009-
>
1010-
<i aria-hidden="true" />
1011-
{statusLabel}
1012-
</span>
1013977
<button
1014978
aria-pressed={isPlaying}
1015979
className={isPlaying ? 'is-playing' : ''}
1016980
onClick={playFlow}
1017981
type="button"
1018982
>
1019983
<i aria-hidden="true" />
1020-
{labels.flowReplay}
984+
{isPlaying ? labels.flowRunning : labels.flowReplay}
1021985
</button>
1022986
</div>
1023987
</header>
@@ -1028,7 +992,6 @@ function RuntimeExecutionFlow({
1028992
<small>{labels.flowTaskLabel}</small>
1029993
<strong>{labels.flowTask}</strong>
1030994
</div>
1031-
<code>session.stream()</code>
1032995
</section>
1033996

1034997
<nav aria-label={labels.stackHint} className="a3s-run-player-progress">
@@ -1059,8 +1022,7 @@ function RuntimeExecutionFlow({
10591022
>
10601023
<span>{phase.code}</span>
10611024
<span>
1062-
<small>{localeValue(phase.stage, locale)}</small>
1063-
<strong>{localeValue(phase.navTitle, locale)}</strong>
1025+
<strong>{localeValue(phase.stage, locale)}</strong>
10641026
</span>
10651027
</button>
10661028
))}
@@ -1074,17 +1036,13 @@ function RuntimeExecutionFlow({
10741036
/>
10751037

10761038
<footer className="a3s-run-player-evidence">
1077-
<div>
1078-
<small>{labels.flowEvidence}</small>
1079-
<strong>
1080-
<i aria-hidden="true" />
1081-
{labels.flowEventCount}
1082-
</strong>
1083-
</div>
1039+
<strong>
1040+
<i aria-hidden="true" />
1041+
{labels.flowSaved}
1042+
</strong>
10841043
<span>
1085-
{['RunRecord', 'Trace', 'Artifact', 'Snapshot'].map((item) => (
1086-
<code key={item}>{item}</code>
1087-
))}
1044+
<em>{labels.flowReplayable}</em>
1045+
<em>{labels.flowRecoverable}</em>
10881046
</span>
10891047
</footer>
10901048
</div>

0 commit comments

Comments
 (0)