@zq-silk/yui 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +8 -2
  2. package/dist/cli/commandCatalog.js +32 -6
  3. package/dist/cli/commandDiscovery.js +4 -1
  4. package/dist/cli/interactionPolicy.js +4 -0
  5. package/dist/cli.js +23 -3078
  6. package/dist/commands/taskCommands.js +84 -28
  7. package/dist/commands/taskIntegrationCommands.js +8 -17
  8. package/dist/commands/taskUpstreamCommands.js +3 -1
  9. package/dist/context/runContextPack.js +132 -5
  10. package/dist/context/sourceRunContext.js +4 -2
  11. package/dist/context/taskContext.js +6 -1
  12. package/dist/controlPlaneCli.js +3099 -0
  13. package/dist/controller/clientRuntime.js +3 -2
  14. package/dist/controller/fileSchedulerStoreAdapter.js +19 -6
  15. package/dist/controller/jobControl.js +21 -0
  16. package/dist/executor/agentExecutor.js +1 -1
  17. package/dist/executor/effectiveLaunch.js +18 -5
  18. package/dist/executor/fileRoleLaunchPlanner.js +15 -19
  19. package/dist/integration/gitIntegrationService.js +58 -82
  20. package/dist/job/jobCleanupInspection.js +67 -0
  21. package/dist/message/messageContinuation.js +7 -2
  22. package/dist/nativeAgent/agent.js +176 -74
  23. package/dist/nativeAgent/cliDemo.js +37 -0
  24. package/dist/nativeAgent/codingTools.js +11 -0
  25. package/dist/nativeAgent/commandTool.js +215 -0
  26. package/dist/nativeAgent/compactionDemo.js +158 -0
  27. package/dist/nativeAgent/composition.js +71 -0
  28. package/dist/nativeAgent/context/budget.js +44 -0
  29. package/dist/nativeAgent/context/index.js +339 -0
  30. package/dist/nativeAgent/context/providerCompressor.js +103 -0
  31. package/dist/nativeAgent/demo.js +12 -1
  32. package/dist/nativeAgent/evaluation/cases.js +38 -0
  33. package/dist/nativeAgent/evaluation/checks.js +91 -0
  34. package/dist/nativeAgent/evaluation/demo.js +19 -0
  35. package/dist/nativeAgent/evaluation/files.js +54 -0
  36. package/dist/nativeAgent/evaluation/fixture.js +36 -0
  37. package/dist/nativeAgent/evaluation/index.js +239 -0
  38. package/dist/nativeAgent/executionOwner.js +209 -0
  39. package/dist/nativeAgent/filePatterns.js +170 -0
  40. package/dist/nativeAgent/fileToolsSupport.js +202 -0
  41. package/dist/nativeAgent/index.js +13 -0
  42. package/dist/nativeAgent/interaction/cli.js +358 -0
  43. package/dist/nativeAgent/interaction/contracts.js +1 -0
  44. package/dist/nativeAgent/interaction/index.js +3 -0
  45. package/dist/nativeAgent/interaction/memoryDemo.js +115 -0
  46. package/dist/nativeAgent/interaction/renderer.js +34 -0
  47. package/dist/nativeAgent/localSafety.js +258 -0
  48. package/dist/nativeAgent/model/anthropicMessages.js +204 -0
  49. package/dist/nativeAgent/model/chatCompletions.js +210 -0
  50. package/dist/nativeAgent/model/errors.js +47 -0
  51. package/dist/nativeAgent/model/gateway.js +423 -0
  52. package/dist/nativeAgent/model/index.js +7 -0
  53. package/dist/nativeAgent/model/observationAdapter.js +21 -0
  54. package/dist/nativeAgent/model/protocols.js +19 -0
  55. package/dist/nativeAgent/model/responses.js +263 -0
  56. package/dist/nativeAgent/model/types.js +1 -0
  57. package/dist/nativeAgent/model/wire.js +73 -0
  58. package/dist/nativeAgent/observability/index.js +220 -0
  59. package/dist/nativeAgent/product/catalog.js +82 -0
  60. package/dist/nativeAgent/product/config.js +295 -0
  61. package/dist/nativeAgent/product/facts.js +30 -0
  62. package/dist/nativeAgent/product/index.js +62 -0
  63. package/dist/nativeAgent/product/location.js +44 -0
  64. package/dist/nativeAgent/product/runtime.js +276 -0
  65. package/dist/nativeAgent/product/storage.js +49 -0
  66. package/dist/nativeAgent/product/tools.js +47 -0
  67. package/dist/nativeAgent/product/transport.js +54 -0
  68. package/dist/nativeAgent/projectGuidance/index.js +425 -0
  69. package/dist/nativeAgent/searchTools.js +305 -0
  70. package/dist/nativeAgent/session/backends.js +293 -0
  71. package/dist/nativeAgent/session/catalog.js +97 -0
  72. package/dist/nativeAgent/session/catalogDemo.js +87 -0
  73. package/dist/nativeAgent/session/contracts.js +1 -0
  74. package/dist/nativeAgent/session/format.js +269 -0
  75. package/dist/nativeAgent/session/index.js +5 -0
  76. package/dist/nativeAgent/session/location.js +36 -0
  77. package/dist/nativeAgent/session/sqliteFormat.js +134 -0
  78. package/dist/nativeAgent/session/store.js +248 -0
  79. package/dist/nativeAgent/textTools.js +270 -133
  80. package/dist/nativeAgent/toolManager/executor.js +290 -0
  81. package/dist/nativeAgent/toolManager/index.js +4 -0
  82. package/dist/nativeAgent/validation.js +2 -2
  83. package/dist/repository/gitWorkspace.js +41 -12
  84. package/dist/repository/taskWorkspaceCoordinator.js +72 -145
  85. package/dist/repository/taskWorkspacePreparer.js +39 -43
  86. package/dist/repository/workspaceCleanupInspection.js +88 -7
  87. package/dist/resources/resourceRegistrar.js +16 -10
  88. package/dist/runtime/integrationRuntimeIsolation.js +21 -0
  89. package/dist/runtime/taskRuntimeIsolation.js +91 -21
  90. package/dist/task/archiveDiagnostics.js +26 -8
  91. package/dist/task/archivePreflight.js +26 -9
  92. package/dist/task/leaderArchive.js +9 -15
  93. package/dist/task/taskAuthority.js +56 -0
  94. package/dist/web/assets/client/api.js +8 -0
  95. package/dist/web/assets/client/app.js +74 -9
  96. package/dist/web/assets/client/components.js +95 -36
  97. package/dist/web/assets/client/detail.js +110 -64
  98. package/dist/web/assets/client/dock.js +95 -11
  99. package/dist/web/assets/client/evidence.js +286 -94
  100. package/dist/web/assets/client/i18n.js +182 -62
  101. package/dist/web/assets/client/overview.js +9 -10
  102. package/dist/web/assets/client/records.js +142 -7
  103. package/dist/web/assets/client/sections.js +234 -198
  104. package/dist/web/assets/client/sidebar.js +31 -2
  105. package/dist/web/assets/icons.js +4 -0
  106. package/dist/web/assets/shell.js +2 -1
  107. package/dist/web/assets/styles/components.js +64 -15
  108. package/dist/web/assets/styles/layout.js +11 -4
  109. package/dist/web/assets/styles/responsive.js +16 -6
  110. package/dist/web/assets/styles/tokens.js +1 -1
  111. package/dist/web/assets/styles/views.js +62 -42
  112. package/dist/web/webServer.js +12 -1
  113. package/dist/web/webTaskSurface.js +8 -1
  114. package/docs/agent-result-consumption.md +16 -0
  115. package/docs/agent-result-consumption.zh-CN.md +13 -0
  116. package/docs/examples/agent-offline.mjs +194 -0
  117. package/docs/native-agent.md +283 -0
  118. package/docs/observability/README.md +13 -3
  119. package/docs/observability/README.zh-CN.md +10 -3
  120. package/docs/release-workflow.md +72 -9
  121. package/docs/release-workflow.zh-CN.md +55 -6
  122. package/docs/roles-and-configuration.md +32 -0
  123. package/docs/roles-and-configuration.zh-CN.md +26 -0
  124. package/docs/task-delivery.md +36 -8
  125. package/docs/task-delivery.zh-CN.md +24 -7
  126. package/i18n/README.zh-CN.md +3 -2
  127. package/package.json +1 -1
  128. package/skills/yui-leader/SKILL.md +9 -0
  129. package/skills/yui-leader/references/execution.md +2 -1
  130. package/skills/yui-leader/references/integration.md +20 -0
  131. package/skills/yui-operator/SKILL.md +4 -0
  132. package/skills/yui-reviewer/SKILL.md +8 -0
  133. package/skills/yui-runtime/SKILL.md +11 -0
  134. package/skills/yui-runtime/references/publication.md +20 -4
  135. package/skills/yui-worker/SKILL.md +3 -0
@@ -7,6 +7,8 @@ const EN = {
7
7
  "sidebar.noMatch": "No tasks match this filter.",
8
8
  "sidebar.activeRuns": "Open execution records",
9
9
  "sidebar.workItems": "Work items",
10
+ "sidebar.resize": "Resize task list",
11
+ "sidebar.resizeHint": "Drag to resize · double-click to reset",
10
12
  "search.label": "Search tasks",
11
13
  "search.placeholder": "Search title, ID, tag…",
12
14
  "filters.label": "Filter by status",
@@ -104,10 +106,9 @@ const EN = {
104
106
  "task.updated": "Updated",
105
107
  "tabs.label": "Task sections",
106
108
  "tabs.overview": "Overview",
107
- "tabs.work": "Work",
108
- "tabs.execution": "Execution",
109
- "tabs.history": "History",
110
- "tabs.details": "Details",
109
+ "tabs.delivery": "Delivery",
110
+ "tabs.runtime": "Runtime",
111
+ "tabs.records": "Records",
111
112
  "now.observed": "Observed",
112
113
  "now.reading": "Reading the live execution projection…",
113
114
  "now.unavailable": "Live execution observation is unavailable. Task facts below are still current.",
@@ -122,7 +123,6 @@ const EN = {
122
123
  "observation.waiting": "Observing…",
123
124
  "observation.available": "Observed",
124
125
  "observation.unavailable": "Observation unavailable",
125
- "observation.title": "Observations and raw runtime facts",
126
126
  "observation.help": "An open execution record is not proof of Agent activity. Native admission, runtime observation and Task progress are separate facts.",
127
127
  "input.kicker": "Question",
128
128
  "input.freeText": "Type your answer…",
@@ -144,8 +144,6 @@ const EN = {
144
144
  "progress.lastReport": "Last working report",
145
145
  "progress.briefUpdated": "Brief updated",
146
146
  "progress.none": "No progress summary in this read. No percentage or ETA is inferred.",
147
- "sessions.title": "Native Sessions",
148
- "sessions.hint": "This Task's selected Sessions. Activity is not delivery progress.",
149
147
  "sessions.unavailable": "Observation unavailable or not read yet — this does not mean zero running Sessions.",
150
148
  "sessions.none": "No selected native Session is recorded.",
151
149
  "sessions.unobserved": "unobserved",
@@ -175,7 +173,7 @@ const EN = {
175
173
  "decisions.title": "Key decisions",
176
174
  "decisions.hint": "Reports and recommendations are not user approval.",
177
175
  "decisions.none": "No current decision in this read.",
178
- "decisions.more": "All decisions in History",
176
+ "decisions.more": "All decisions in Records",
179
177
  "planning.title": "Planning",
180
178
  "planning.withheld": "This bounded snapshot withholds run details; read the original planning run.",
181
179
  "planning.none": "No planning run is included. Direct Session activity is shown separately.",
@@ -200,13 +198,11 @@ const EN = {
200
198
  "work.disposition": "Disposition",
201
199
  "work.outcome": "Outcome",
202
200
  "records.none": "No records yet.",
203
- "records.notIncluded": "Not included in this bounded read.",
204
201
  "reviews.title": "Reviews",
205
202
  "reviews.hint": "Review reports are evidence, not acceptance. Missing checks are not passes.",
206
203
  "review.reviewer": "Reviewer",
207
204
  "review.base": "Base",
208
205
  "review.run": "Run",
209
- "evidence.title": "Results and evidence",
210
206
  "evidence.files": "Saved files",
211
207
  "evidence.filesHint": "Loaded on request and read at a fixed revision.",
212
208
  "evidence.load": "Load file list",
@@ -223,31 +219,22 @@ const EN = {
223
219
  "evidence.copyManual": "Copy the reference above",
224
220
  "evidence.fixedNote": "This revision stays selected across refreshes. Reading or discussing it does not accept, publish or execute it.",
225
221
  "evidence.fixedText": "Fixed artifact text",
226
- "evidence.delivery": "Delivery, review and resources",
227
- "evidence.deliveryHint": "Local completion, review, remote delivery and cleanup are separate facts.",
228
- "evidence.readDelivery": "Read evidence",
229
222
  "evidence.observationUnavailable": "Delivery observation unavailable; original records below are still readable.",
230
223
  "evidence.remote": "Remote delivery",
231
224
  "evidence.expectedCommit": "Expected local commit",
232
225
  "evidence.verification": "Evidence",
233
226
  "evidence.adoption": "Adoption",
234
- "evidence.readingOriginal": "Reading original checks and review bindings…",
235
- "evidence.integrations": "Integration checks · exact recorded candidate",
227
+ "evidence.integrations": "Integration records",
236
228
  "evidence.noIntegrations": "No Integration check records. Direct Leader verification may be in the completion report.",
237
229
  "evidence.candidate": "Candidate",
238
230
  "evidence.noCandidate": "no check candidate",
239
231
  "evidence.noChecks": "No check outcomes recorded.",
240
- "evidence.reviews": "Review bindings · not semantic approval",
241
- "evidence.noReviews": "No Review records.",
242
232
  "evidence.readReport": "Read original report",
243
233
  "evidence.noReport": "No report recorded.",
244
- "evidence.workspaces": "Retained workspaces · recorded ownership only",
245
234
  "evidence.noWorkspaces": "No managed workspaces recorded.",
246
235
  "evidence.cleanupNote": "No physical cleanup inspection was run. The read-only preflight does not authorize archive or cleanup:",
247
236
  "evidence.originalUnavailable": "Original evidence unavailable:",
248
- "evidence.usage": "Usage",
249
237
  "roles.title": "Roles",
250
- "roles.noActiveRun": "No active run in this read; Session activity is a separate observation.",
251
238
  "role.session": "Session",
252
239
  "role.noSession": "no live Session",
253
240
  "role.desired": "Desired launch",
@@ -276,14 +263,13 @@ const EN = {
276
263
  "control.then": "Then-message reference (optional)",
277
264
  "control.thenPlaceholder": "an already saved task/message id",
278
265
  "control.submit": "Submit control",
279
- "runs.title": "Execution records",
280
- "runs.hint": "Record state and delivery evidence are separate facts.",
281
- "runs.filter": "Filter runs",
266
+ "runs.title": "Open execution",
267
+ "runs.hint": "Finished execution records are in Records. Record state and delivery evidence are separate facts.",
282
268
  "run.instruction": "Instruction",
283
269
  "run.output": "Output",
284
270
  "run.failure": "Failure",
285
271
  "run.lineage": "Lineage",
286
- "jobs.title": "Operations",
272
+ "jobs.title": "Open operations",
287
273
  "jobs.hint": "Original operation facts. Nothing here retries automatically.",
288
274
  "job.queued.note": "Queued.",
289
275
  "job.running.note": "Waiting for an explicit terminal receipt.",
@@ -300,16 +286,13 @@ const EN = {
300
286
  "usage.scope": "Task lifetime; only exactly attributable evidence is counted.",
301
287
  "usage.observedThrough": "Observed through",
302
288
  "usage.contextBytes": "Context bytes",
303
- "history.title": "History",
289
+ "history.title": "Timeline",
304
290
  "history.filter": "Filter history",
305
291
  "history.all": "All",
306
292
  "history.decision": "Decisions",
307
293
  "history.milestone": "Milestones",
308
- "history.message": "Messages",
309
- "history.omitted": "This bounded read may omit older records; each can be read by reference.",
310
- "history.resultOf": "Result of",
311
294
  "history.superseded": "Superseded because",
312
- "details.facts": "Task facts",
295
+ "details.facts": "Task information",
313
296
  "details.id": "ID",
314
297
  "details.status": "Status",
315
298
  "details.priority": "Priority",
@@ -357,7 +340,6 @@ const EN = {
357
340
  "discussion.source": "Recorded Task messages · not a Session transcript",
358
341
  "discussion.feed": "Recorded Task messages",
359
342
  "discussion.empty": "No recorded messages yet. Start the discussion below.",
360
- "discussion.omitted": "This bounded read may omit older messages; History lists their references.",
361
343
  "composer.label": "Message to the Task Leader",
362
344
  "composer.placeholder": "Message the Task Leader…",
363
345
  "composer.send": "Send",
@@ -549,7 +531,85 @@ const EN = {
549
531
  "usage.reason.tool-history-compacted": "Tool history compacted; retained calls only",
550
532
  "usage.reason.nonzero-session-baseline": "Initial nonzero Session counter excluded",
551
533
  "usage.reason.task-lifecycle-time-missing": "Task start/end evidence missing",
552
- "usage.reason.native-turn-history-compacted": "Complete retained Turns only"
534
+ "usage.reason.native-turn-history-compacted": "Complete retained Turns only",
535
+ // Delivery, Runtime and Records tabs
536
+ "work.openHint": "Open work items in full; finished ones are read when expanded.",
537
+ "work.noneOpen": "No open work items.",
538
+ "work.none": "No work items. Work the Leader does directly has no work item.",
539
+ "work.finished": "Finished work items",
540
+ "work.reading": "Reading finished work items…",
541
+ "reviews.none": "No reviews recorded.",
542
+ "delivery.title": "Integration and delivery",
543
+ "delivery.hint": "Integration checks, PR/MR and remote merge are separate facts; none of them is acceptance.",
544
+ "delivery.readAt": "Evidence read at",
545
+ "delivery.counts": "{merged}/{total} code projects merged · {verified}/{total} verified",
546
+ "delivery.noProjects": "No project is bound to this Task.",
547
+ "evidence.loading": "Reading original evidence…",
548
+ "evidence.report": "Original review report",
549
+ "workspaces.title": "Workspaces and cleanup",
550
+ "coverage.not-applicable": "not applicable",
551
+ "coverage.head-unavailable": "head unavailable",
552
+ "coverage.missing": "no PR/MR",
553
+ "coverage.missing-local-commit": "local commit missing",
554
+ "coverage.stale": "stale",
555
+ "coverage.head-mismatch": "head mismatch",
556
+ "coverage.open": "open",
557
+ "coverage.closed": "closed",
558
+ "coverage.merged": "merged",
559
+ "coverage.verified": "verified",
560
+ "publication.pull-request": "PR",
561
+ "publication.merge-request": "MR",
562
+ "publicationState.open": "open",
563
+ "publicationState.merged": "merged",
564
+ "publicationState.closed": "closed",
565
+ "verification.reported": "reported",
566
+ "verification.verified": "verified",
567
+ "integration.running": "Running",
568
+ "integration.validating": "Validating",
569
+ "integration.committed": "Committed",
570
+ "integration.conflicted": "Conflicted",
571
+ "integration.blocked": "Blocked",
572
+ "integration.failed": "Failed",
573
+ "integration.superseded": "Superseded",
574
+ "integration.source.work-item": "Work item",
575
+ "integration.source.upstream": "Upstream",
576
+ "check.passed": "passed",
577
+ "check.failed": "failed",
578
+ "check.skipped": "skipped",
579
+ "workspace.owner.task": "Task main",
580
+ "workspace.owner.work-item": "Work item",
581
+ "workspace.owner.review-round": "Review",
582
+ "workspace.owner.integration-attempt": "Integration",
583
+ "workspace.owner.execution-lane": "Execution lane",
584
+ "roles.hint": "Session activity is a separate observation, not delivery progress.",
585
+ "runs.none": "No open execution record.",
586
+ "runs.more": "{count} more open execution records are not listed here; see Records.",
587
+ "jobs.none": "No open operations.",
588
+ "diagnostics.title": "Diagnostics",
589
+ "diagnostics.meta": "observations · Session facts · raw runtime",
590
+ "history.hint": "Decisions, milestones, execution records and questions, newest first. Messages are in Discussion.",
591
+ "history.run": "Execution",
592
+ "history.question": "Questions",
593
+ "history.loaded": "{shown} of {total} read",
594
+ "history.more": "Load more",
595
+ "history.loading": "Reading records…",
596
+ "history.stale": "New records · refresh",
597
+ "history.retired": "retired",
598
+ "history.answer": "Answer",
599
+ "answeredBy.user": "by user",
600
+ "answeredBy.operator": "by Operator",
601
+ "answeredBy.agent-timeout": "recommended choice after timeout",
602
+ "inputStatus.open": "Open",
603
+ "inputStatus.answered": "Answered",
604
+ "inputStatus.cancelled": "Cancelled",
605
+ "inputStatus.auto-resolved": "Auto-resolved",
606
+ "records.unavailable": "Read failed:",
607
+ "advanced.title": "Advanced",
608
+ "advanced.meta": "Context cursor · capability panels",
609
+ "discussion.older": "Show {count} earlier messages",
610
+ "discussion.olderLoading": "Reading earlier messages…",
611
+ "record.raw": "Raw record",
612
+ "record.reading": "Reading the exact record…"
553
613
  };
554
614
  const ZH = {
555
615
  "app.title": "Yui",
@@ -560,6 +620,8 @@ const ZH = {
560
620
  "sidebar.noMatch": "没有符合筛选的任务。",
561
621
  "sidebar.activeRuns": "未结清的执行记录",
562
622
  "sidebar.workItems": "工作项",
623
+ "sidebar.resize": "调整任务列表宽度",
624
+ "sidebar.resizeHint": "拖拽调整宽度 · 双击恢复默认",
563
625
  "search.label": "搜索任务",
564
626
  "search.placeholder": "搜索标题、ID、标签…",
565
627
  "filters.label": "按状态筛选",
@@ -657,10 +719,9 @@ const ZH = {
657
719
  "task.updated": "更新于",
658
720
  "tabs.label": "任务分区",
659
721
  "tabs.overview": "概览",
660
- "tabs.work": "工作",
661
- "tabs.execution": "执行",
662
- "tabs.history": "历史",
663
- "tabs.details": "详情",
722
+ "tabs.delivery": "交付",
723
+ "tabs.runtime": "运行",
724
+ "tabs.records": "记录",
664
725
  "now.observed": "观察于",
665
726
  "now.reading": "正在读取实时执行投影…",
666
727
  "now.unavailable": "实时执行观察不可用;下方任务事实仍为当前读取。",
@@ -675,7 +736,6 @@ const ZH = {
675
736
  "observation.waiting": "观察中…",
676
737
  "observation.available": "已观察",
677
738
  "observation.unavailable": "观察不可用",
678
- "observation.title": "观察与原始运行事实",
679
739
  "observation.help": "执行记录未结清不等于 Agent 正在工作;原生准入、运行观察与任务进展分别呈现。",
680
740
  "input.kicker": "问题",
681
741
  "input.freeText": "输入你的回答…",
@@ -697,8 +757,6 @@ const ZH = {
697
757
  "progress.lastReport": "结束前的进展摘要",
698
758
  "progress.briefUpdated": "Brief 更新于",
699
759
  "progress.none": "本次读取没有进展摘要;不推算完成百分比或预计时间。",
700
- "sessions.title": "原生会话",
701
- "sessions.hint": "本任务当前选用的会话。活动不等于交付进展。",
702
760
  "sessions.unavailable": "观察不可用或尚未读取——不代表运行会话为零。",
703
761
  "sessions.none": "未记录当前选用的原生会话。",
704
762
  "sessions.unobserved": "未观测",
@@ -728,7 +786,7 @@ const ZH = {
728
786
  "decisions.title": "关键决定",
729
787
  "decisions.hint": "报告和建议不代表用户批准。",
730
788
  "decisions.none": "本次读取没有当前决定。",
731
- "decisions.more": "在「历史」查看全部决定",
789
+ "decisions.more": "在「记录」中查看全部决定",
732
790
  "planning.title": "规划",
733
791
  "planning.withheld": "当前受限快照未展开执行详情;请读取原始 planning 执行记录。",
734
792
  "planning.none": "本次读取未包含 planning 执行记录;直接会话活动单独展示。",
@@ -753,13 +811,11 @@ const ZH = {
753
811
  "work.disposition": "处置",
754
812
  "work.outcome": "成果",
755
813
  "records.none": "暂无记录。",
756
- "records.notIncluded": "本次有界读取未包含。",
757
814
  "reviews.title": "评审",
758
815
  "reviews.hint": "评审报告是证据,不是验收;缺失的检查不算通过。",
759
816
  "review.reviewer": "评审者",
760
817
  "review.base": "基线",
761
818
  "review.run": "执行",
762
- "evidence.title": "成果与证据",
763
819
  "evidence.files": "已保存文件",
764
820
  "evidence.filesHint": "按需读取,固定在指定版本。",
765
821
  "evidence.load": "读取文件列表",
@@ -776,31 +832,22 @@ const ZH = {
776
832
  "evidence.copyManual": "请复制上方引用",
777
833
  "evidence.fixedNote": "刷新后仍保留此版本。读取或讨论不会验收、发布或执行该成果。",
778
834
  "evidence.fixedText": "固定成果正文",
779
- "evidence.delivery": "交付、评审与资源",
780
- "evidence.deliveryHint": "本地完成、评审、远程交付和资源清理是不同事实。",
781
- "evidence.readDelivery": "读取证据",
782
835
  "evidence.observationUnavailable": "交付观察不可用;下方原始记录仍可读取。",
783
836
  "evidence.remote": "远程交付",
784
837
  "evidence.expectedCommit": "期望本地提交",
785
838
  "evidence.verification": "证据",
786
839
  "evidence.adoption": "采用记录",
787
- "evidence.readingOriginal": "正在读取原始检查与评审绑定…",
788
- "evidence.integrations": "集成检查 · 精确记录候选",
840
+ "evidence.integrations": "集成记录",
789
841
  "evidence.noIntegrations": "没有集成检查记录;Leader 直接执行的验证可能记录在完成报告中。",
790
842
  "evidence.candidate": "候选",
791
843
  "evidence.noCandidate": "无检查候选",
792
844
  "evidence.noChecks": "未记录检查结果。",
793
- "evidence.reviews": "评审绑定 · 不等于语义通过",
794
- "evidence.noReviews": "没有评审记录。",
795
845
  "evidence.readReport": "读取原始报告",
796
846
  "evidence.noReport": "未记录报告。",
797
- "evidence.workspaces": "保留工作区 · 仅已记录所有权",
798
847
  "evidence.noWorkspaces": "没有记录托管工作区。",
799
848
  "evidence.cleanupNote": "未执行物理清理检查。只读预检不授权归档或清理:",
800
849
  "evidence.originalUnavailable": "原始证据不可用:",
801
- "evidence.usage": "用量",
802
850
  "roles.title": "Role",
803
- "roles.noActiveRun": "此读取中没有活跃执行记录;会话活动属于独立观察。",
804
851
  "role.session": "会话",
805
852
  "role.noSession": "无在线会话",
806
853
  "role.desired": "期望启动配置",
@@ -829,14 +876,13 @@ const ZH = {
829
876
  "control.then": "打断后续消息引用(可选)",
830
877
  "control.thenPlaceholder": "已保存的 task/message 标识",
831
878
  "control.submit": "提交控制",
832
- "runs.title": "执行记录",
833
- "runs.hint": "记录状态与投递证据是不同事实。",
834
- "runs.filter": "筛选执行记录",
879
+ "runs.title": "进行中的执行",
880
+ "runs.hint": "已结束的执行记录在「记录」中。记录状态与投递证据是不同事实。",
835
881
  "run.instruction": "指令",
836
882
  "run.output": "输出",
837
883
  "run.failure": "失败",
838
884
  "run.lineage": "谱系",
839
- "jobs.title": "操作",
885
+ "jobs.title": "未结束的操作",
840
886
  "jobs.hint": "原始操作事实;这里不会自动重试。",
841
887
  "job.queued.note": "已排队。",
842
888
  "job.running.note": "等待明确终态回执。",
@@ -853,16 +899,13 @@ const ZH = {
853
899
  "usage.scope": "任务生命周期;仅计入可精确归属的证据。",
854
900
  "usage.observedThrough": "观察截至",
855
901
  "usage.contextBytes": "上下文字节",
856
- "history.title": "历史",
902
+ "history.title": "时间线",
857
903
  "history.filter": "筛选历史",
858
904
  "history.all": "全部",
859
905
  "history.decision": "决定",
860
906
  "history.milestone": "里程碑",
861
- "history.message": "消息",
862
- "history.omitted": "本次有界读取可能省略较早记录;每条都可按引用读取。",
863
- "history.resultOf": "结果来自",
864
907
  "history.superseded": "被替代原因",
865
- "details.facts": "任务事实",
908
+ "details.facts": "任务信息",
866
909
  "details.id": "ID",
867
910
  "details.status": "状态",
868
911
  "details.priority": "优先级",
@@ -910,7 +953,6 @@ const ZH = {
910
953
  "discussion.source": "已记录的任务消息 · 非会话完整记录",
911
954
  "discussion.feed": "已记录的任务消息",
912
955
  "discussion.empty": "尚无已记录消息,可在下方开始讨论。",
913
- "discussion.omitted": "本次有界读取可能省略较早消息;可在「历史」查看引用。",
914
956
  "composer.label": "发送给 Task Leader 的消息",
915
957
  "composer.placeholder": "给 Task Leader 发消息…",
916
958
  "composer.send": "发送",
@@ -1102,7 +1144,85 @@ const ZH = {
1102
1144
  "usage.reason.tool-history-compacted": "工具历史已压缩,仅计保留调用",
1103
1145
  "usage.reason.nonzero-session-baseline": "已排除会话首次非零累计基线",
1104
1146
  "usage.reason.task-lifecycle-time-missing": "缺少任务起止证据",
1105
- "usage.reason.native-turn-history-compacted": "仅计起止完整的保留 Turn"
1147
+ "usage.reason.native-turn-history-compacted": "仅计起止完整的保留 Turn",
1148
+ // Delivery, Runtime and Records tabs
1149
+ "work.openHint": "进行中的工作项完整展开;已结束的展开时再读取。",
1150
+ "work.noneOpen": "没有进行中的工作项。",
1151
+ "work.none": "没有工作项。Leader 直接完成的工作不会建工作项。",
1152
+ "work.finished": "已结束的工作项",
1153
+ "work.reading": "正在读取已结束的工作项…",
1154
+ "reviews.none": "没有评审记录。",
1155
+ "delivery.title": "集成与交付",
1156
+ "delivery.hint": "集成检查、PR/MR 与远程合并是不同事实,都不等于验收。",
1157
+ "delivery.readAt": "证据读取于",
1158
+ "delivery.counts": "已合入 {merged}/{total} 个代码项目 · 已验证 {verified}/{total}",
1159
+ "delivery.noProjects": "此任务未绑定项目。",
1160
+ "evidence.loading": "正在读取原始证据…",
1161
+ "evidence.report": "原始评审报告",
1162
+ "workspaces.title": "工作区与清理",
1163
+ "coverage.not-applicable": "不适用",
1164
+ "coverage.head-unavailable": "head 不可用",
1165
+ "coverage.missing": "缺少 PR/MR",
1166
+ "coverage.missing-local-commit": "缺少本地提交",
1167
+ "coverage.stale": "已过期",
1168
+ "coverage.head-mismatch": "head 不一致",
1169
+ "coverage.open": "未合并",
1170
+ "coverage.closed": "已关闭",
1171
+ "coverage.merged": "已合并",
1172
+ "coverage.verified": "已验证",
1173
+ "publication.pull-request": "PR",
1174
+ "publication.merge-request": "MR",
1175
+ "publicationState.open": "未合并",
1176
+ "publicationState.merged": "已合并",
1177
+ "publicationState.closed": "已关闭",
1178
+ "verification.reported": "已报告",
1179
+ "verification.verified": "已验证",
1180
+ "integration.running": "进行中",
1181
+ "integration.validating": "校验中",
1182
+ "integration.committed": "已提交",
1183
+ "integration.conflicted": "有冲突",
1184
+ "integration.blocked": "受阻",
1185
+ "integration.failed": "失败",
1186
+ "integration.superseded": "已被取代",
1187
+ "integration.source.work-item": "工作项",
1188
+ "integration.source.upstream": "上游",
1189
+ "check.passed": "通过",
1190
+ "check.failed": "失败",
1191
+ "check.skipped": "跳过",
1192
+ "workspace.owner.task": "任务主工作区",
1193
+ "workspace.owner.work-item": "工作项",
1194
+ "workspace.owner.review-round": "评审",
1195
+ "workspace.owner.integration-attempt": "集成",
1196
+ "workspace.owner.execution-lane": "执行通道",
1197
+ "roles.hint": "会话活动是独立观察,不等于交付进展。",
1198
+ "runs.none": "没有进行中的执行记录。",
1199
+ "runs.more": "另有 {count} 条进行中的执行未在此列出,可在「记录」查看。",
1200
+ "jobs.none": "没有未结束的操作。",
1201
+ "diagnostics.title": "诊断信息",
1202
+ "diagnostics.meta": "观察来源 · 会话依据 · 原始运行事实",
1203
+ "history.hint": "决定、里程碑、执行记录与问题,按时间倒序;消息在「讨论」中。",
1204
+ "history.run": "执行",
1205
+ "history.question": "问题",
1206
+ "history.loaded": "已读取 {shown} / 共 {total} 条",
1207
+ "history.more": "加载更多",
1208
+ "history.loading": "正在读取记录…",
1209
+ "history.stale": "有新记录 · 刷新",
1210
+ "history.retired": "已撤回",
1211
+ "history.answer": "回答",
1212
+ "answeredBy.user": "用户",
1213
+ "answeredBy.operator": "Operator",
1214
+ "answeredBy.agent-timeout": "超时后采用推荐项",
1215
+ "inputStatus.open": "待回答",
1216
+ "inputStatus.answered": "已回答",
1217
+ "inputStatus.cancelled": "已取消",
1218
+ "inputStatus.auto-resolved": "已自动处理",
1219
+ "records.unavailable": "读取失败:",
1220
+ "advanced.title": "高级",
1221
+ "advanced.meta": "Context 游标 · 能力面板",
1222
+ "discussion.older": "显示更早的 {count} 条消息",
1223
+ "discussion.olderLoading": "正在读取更早的消息…",
1224
+ "record.raw": "原始记录",
1225
+ "record.reading": "正在读取完整记录…"
1106
1226
  };
1107
1227
  export const I18N_SCRIPT = String.raw `
1108
1228
  const messages = ${JSON.stringify({ en: EN, "zh-CN": ZH })};
@@ -28,7 +28,8 @@ export function renderOverview(container, state, t, locale, actions) {
28
28
  metricTile(t("metrics.completed"), counts ? counts.completed : "—", { tone: "ok" }),
29
29
  metricTile(t("metrics.total"), counts ? counts.total : "—")));
30
30
 
31
- const grid = h("div.overview-grid");
31
+ // One reading column: the work path first (answer, in progress, recent),
32
+ // then catalog-wide signals and the explicit Session read.
32
33
  // Open questions: the catalog names the affected Tasks, never the questions.
33
34
  const inbox = card({ title: t("overview.inbox"), icon: "inbox", count: counts ? counts.openInputs : null });
34
35
  const items = state.attention || [];
@@ -41,9 +42,8 @@ export function renderOverview(container, state, t, locale, actions) {
41
42
  h("span.list-row-go", null, t("overview.answer"), icon("chevron", "icon-sm")));
42
43
  })));
43
44
  }
44
- grid.append(inbox);
45
45
 
46
- const catalog = card({ title: t("overview.catalog"), icon: "pulse", hint: t("overview.catalogHint") });
46
+ const catalog = card({ title: t("overview.catalog"), icon: "broadcast", hint: t("overview.catalogHint") });
47
47
  if (state.catalogAttention) {
48
48
  catalog.body.append(h("div.row-list", null, ATTENTION_KINDS.map(function (kind) {
49
49
  const value = state.catalogAttention[kind];
@@ -59,16 +59,15 @@ export function renderOverview(container, state, t, locale, actions) {
59
59
  })));
60
60
  catalog.body.append(note(t("overview.signalsHelp")));
61
61
  } else catalog.body.append(emptyState(t("loading.dashboard")));
62
- grid.append(catalog);
63
- page.append(grid);
64
62
 
65
63
  const active = (state.tasks || []).filter(function (task) { return task.status === "active"; });
66
64
  const recent = (state.tasks || []).filter(function (task) { return task.status !== "archived"; }).slice().sort(byNewest).slice(0, 8);
67
- const lists = h("div.overview-grid");
68
- lists.append(taskListCard(t("overview.activeNow"), "pulse", active, t("overview.activeEmpty"), t, locale, actions));
69
- lists.append(taskListCard(t("overview.recent"), "history", recent, t("sidebar.empty"), t, locale, actions));
70
- page.append(lists);
71
- page.append(sessionCard(state, t, locale, actions));
65
+ page.append(h("div.card-stack", null,
66
+ inbox,
67
+ taskListCard(t("overview.activeNow"), "pulse", active, t("overview.activeEmpty"), t, locale, actions),
68
+ taskListCard(t("overview.recent"), "history", recent, t("sidebar.empty"), t, locale, actions),
69
+ catalog,
70
+ sessionCard(state, t, locale, actions)));
72
71
  page.append(h("p.page-foot", null, t("overview.pageScope")));
73
72
  container.append(page);
74
73
  }