@tea-agent/loop-agent 0.13.0-beta.0 → 0.13.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 (282) hide show
  1. package/AGENTS.md +157 -155
  2. package/CHANGELOG.md +301 -322
  3. package/README.md +335 -345
  4. package/bin/agent-worker.js +22 -22
  5. package/bin/loop-agent.js +21 -21
  6. package/dist/commands/cursor-prompt.js +6 -6
  7. package/dist/commands/init.js +597 -528
  8. package/dist/commands/loop-benchmark.js +11 -11
  9. package/dist/commands/pi-reuse-benchmark.js +16 -16
  10. package/dist/executors/shell-executor.js +200 -21
  11. package/dist/infrastructure/evaluation/candidate-store.js +5 -1
  12. package/dist/sidecars/cursor-prompt/executor.js +1 -1
  13. package/dist/task/runtime.js +27 -27
  14. package/dist/worker/observe/static/api.js +46 -46
  15. package/dist/worker/observe/static/app.js +150 -150
  16. package/dist/worker/observe/static/constants.js +148 -148
  17. package/dist/worker/observe/static/copy.js +67 -67
  18. package/dist/worker/observe/static/dag-helpers.js +172 -172
  19. package/dist/worker/observe/static/dag-layout.d.ts +31 -31
  20. package/dist/worker/observe/static/dag-layout.js +83 -83
  21. package/dist/worker/observe/static/dag-model.js +72 -72
  22. package/dist/worker/observe/static/dom.js +212 -53
  23. package/dist/worker/observe/static/format-pool.js +67 -67
  24. package/dist/worker/observe/static/format.js +292 -292
  25. package/dist/worker/observe/static/index.html +308 -308
  26. package/dist/worker/observe/static/kpi.js +94 -94
  27. package/dist/worker/observe/static/relations.js +133 -133
  28. package/dist/worker/observe/static/router.js +93 -93
  29. package/dist/worker/observe/static/run-processing.js +148 -148
  30. package/dist/worker/observe/static/shell-chrome.js +68 -68
  31. package/dist/worker/observe/static/state.js +267 -253
  32. package/dist/worker/observe/static/styles.css +1902 -1902
  33. package/dist/worker/observe/static/views/batch.js +227 -227
  34. package/dist/worker/observe/static/views/dag-graph.js +172 -172
  35. package/dist/worker/observe/static/views/dag-inspector.js +627 -607
  36. package/dist/worker/observe/static/views/dag.js +371 -362
  37. package/dist/worker/observe/static/views/dashboard.js +509 -252
  38. package/dist/worker/observe/static/views/failures.js +143 -143
  39. package/dist/worker/observe/static/views/feature.js +492 -492
  40. package/dist/worker/observe/static/views/pool.js +350 -350
  41. package/dist/worker/observe/static/views/run.js +453 -453
  42. package/dist/worker/observe/static/views/session-timeline.js +219 -205
  43. package/dist/worker/observe/static/views/shell.js +7 -7
  44. package/dist/worker/observe/static/views/task.js +314 -314
  45. package/dist/worker/observe/static/views/timeline.js +163 -163
  46. package/dist/workflows/dag/backend-test-case-manifest.js +503 -0
  47. package/dist/workflows/dag/backend-test-execution-contract.js +353 -0
  48. package/dist/workflows/dag/backend-test-result-contract.js +568 -0
  49. package/dist/workflows/dag/canvas-observer.js +275 -275
  50. package/dist/workflows/dag/decision-envelope.js +57 -2
  51. package/dist/workflows/dag/frontend-implementation-contract.js +240 -0
  52. package/dist/workflows/dag/frontend-project-capability.js +309 -0
  53. package/dist/workflows/dag/frontend-repair.js +341 -0
  54. package/dist/workflows/dag/frontend-risk.js +161 -0
  55. package/dist/workflows/dag/frontend-verification-trace.js +190 -0
  56. package/dist/workflows/dag/init-hybrid.js +1020 -125
  57. package/dist/workflows/dag/repair-artifact.js +43 -3
  58. package/dist/workflows/dag/skill-instructions.js +4 -2
  59. package/dist/workflows/dag/types.js +29 -8
  60. package/docs/README.md +105 -104
  61. package/docs/agent-dag-recovery-playbook.md +195 -195
  62. package/docs/agent-dag-runner.md +67 -67
  63. package/docs/architecture/README.md +26 -26
  64. package/docs/architecture/dag-execution.md +140 -140
  65. package/docs/architecture/evolution.md +54 -54
  66. package/docs/architecture/facts-and-state.md +71 -71
  67. package/docs/architecture/runtime-boundaries.md +191 -191
  68. package/docs/architecture/system-overview.md +93 -93
  69. package/docs/architecture/worker-and-feature.md +85 -85
  70. package/docs/cursor-prompt-sidecar.md +36 -36
  71. package/docs/decisions/README.md +18 -18
  72. package/docs/design/README.md +167 -167
  73. package/docs/development-principles.md +73 -73
  74. package/docs/exec-plans/README.md +6 -6
  75. package/docs/exec-plans/active/README.md +1 -4
  76. package/docs/exec-plans/completed/README.md +106 -84
  77. package/docs/feature-workflow.md +414 -389
  78. package/docs/harness-methodology-debugging.md +153 -153
  79. package/docs/harness-methodology-tdd.md +130 -130
  80. package/docs/harness-methodology-verification.md +27 -27
  81. package/docs/init-surface.manifest.json +307 -289
  82. package/docs/loop-agent-harness.md +142 -142
  83. package/docs/production-readiness.md +96 -96
  84. package/docs/progress/README.md +76 -60
  85. package/docs/reports/README.md +150 -108
  86. package/docs/skills/README.md +7 -7
  87. package/docs/skills/vetted-skill-registry.md +29 -29
  88. package/docs/templates/adr.md +60 -60
  89. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  90. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  91. package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -117
  92. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  93. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  94. package/docs/templates/agent-dag-report.schema.json +473 -473
  95. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  96. package/docs/templates/agent-dag.base.json +190 -190
  97. package/docs/templates/agent-dag.final-verification.json +185 -185
  98. package/docs/templates/agent-dag.schema.json +411 -411
  99. package/docs/templates/agent-dag.supervised-implementation.json +620 -501
  100. package/docs/templates/backend-test-analysis.schema.json +44 -44
  101. package/docs/templates/backend-test-case-manifest.schema.json +190 -0
  102. package/docs/templates/backend-test-dag.classify.prompt.md +75 -0
  103. package/docs/templates/backend-test-dag.generate-pytest.prompt.md +204 -202
  104. package/docs/templates/backend-test-dag.json +559 -311
  105. package/docs/templates/backend-test-dag.retrospect.prompt.md +139 -125
  106. package/docs/templates/backend-test-dag.review-cases.prompt.md +83 -81
  107. package/docs/templates/backend-test-execution.schema.json +133 -0
  108. package/docs/templates/backend-test-result.schema.json +99 -0
  109. package/docs/templates/branch-merge-report.md +93 -0
  110. package/docs/templates/exec-plan.md +64 -64
  111. package/docs/templates/feature-spec.md +53 -53
  112. package/docs/templates/frontend-design-contract.md +42 -42
  113. package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -0
  114. package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -0
  115. package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -0
  116. package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -0
  117. package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -0
  118. package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -0
  119. package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -0
  120. package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -0
  121. package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -0
  122. package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -0
  123. package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -0
  124. package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -0
  125. package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -0
  126. package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -0
  127. package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -0
  128. package/docs/templates/frontend-eval/metrics.md +138 -0
  129. package/docs/templates/frontend-eval/smoke-targets.md +53 -0
  130. package/docs/templates/frontend-implementation-contract.schema.json +27 -0
  131. package/docs/templates/frontend-task-constraints.md +35 -35
  132. package/docs/templates/frontend-task-requirement.md +70 -70
  133. package/docs/templates/frontend-test-dag.generate-cases.prompt.md +5 -5
  134. package/docs/templates/frontend-test-dag.json +23 -23
  135. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +3 -3
  136. package/docs/templates/frontend-test-dag.retrospect.prompt.md +3 -3
  137. package/docs/templates/frontend-test-dag.review-cases.prompt.md +3 -3
  138. package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -3
  139. package/docs/templates/harness.schema.json +221 -221
  140. package/docs/templates/hybrid-dag.json +188 -188
  141. package/docs/templates/init-evolution-review.md +35 -35
  142. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  143. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -118
  144. package/docs/templates/knowledge-sync-dag.json +178 -178
  145. package/docs/templates/knowledge-sync-draft.schema.json +71 -71
  146. package/docs/templates/product-line/AGENTS.md +8 -8
  147. package/docs/templates/product-line/README.md +9 -9
  148. package/docs/templates/product-line/acceptance.yaml +14 -14
  149. package/docs/templates/product-line/closeout.yaml +9 -9
  150. package/docs/templates/product-line/design.md +13 -13
  151. package/docs/templates/product-line/links.md +10 -10
  152. package/docs/templates/product-line/requirement.md +17 -17
  153. package/docs/templates/product-line/task-graph.yaml +15 -15
  154. package/docs/templates/product-line/task.yaml +64 -64
  155. package/docs/templates/product-line/test-plan.md +7 -7
  156. package/docs/templates/production-readiness-checklist.md +57 -57
  157. package/docs/templates/progress-log.md +17 -17
  158. package/docs/templates/project-start-checklist.md +9 -9
  159. package/docs/templates/qa-report.md +48 -48
  160. package/docs/templates/sprint-contract.md +29 -29
  161. package/docs/templates/worker-dogfood-evidence.md +80 -80
  162. package/docs/templates/worker-dogfood-setup.md +68 -68
  163. package/docs/verification-matrix.md +70 -70
  164. package/examples/decision-gate-agent-dag.json +177 -177
  165. package/examples/example-dag.json +46 -46
  166. package/examples/hybrid-loop-agent-dag.json +189 -189
  167. package/harness.json +66 -66
  168. package/package.json +52 -88
  169. package/scripts/check-product-line-docs.sh +29 -29
  170. package/scripts/check-task-pool-root.sh +32 -32
  171. package/scripts/kb-bootstrap-init-skeleton.sh +240 -240
  172. package/scripts/kb-graph-incremental-prepare.mjs +386 -386
  173. package/scripts/kb-graph-incremental-prepare.sh +5 -5
  174. package/scripts/kb-graph-materialize.mjs +105 -105
  175. package/scripts/kb-graph-materialize.sh +4 -4
  176. package/scripts/kb-graph-promote.mjs +164 -164
  177. package/scripts/kb-graph-promote.sh +4 -4
  178. package/scripts/kb-query.mjs +554 -554
  179. package/scripts/kb-query.sh +5 -5
  180. package/skills/agent-worker/SKILL.md +39 -39
  181. package/skills/agent-worker/references/agent-worker-operator.md +60 -60
  182. package/skills/ai-engineering-context/SKILL.md +48 -48
  183. package/skills/analyze-product-dependencies/SKILL.md +67 -67
  184. package/skills/analyze-product-dependencies/agents/openai.yaml +4 -4
  185. package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -30
  186. package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -28
  187. package/skills/analyze-product-dependencies/references/example.md +76 -76
  188. package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -35
  189. package/skills/analyze-product-dependencies/references/input-contract.md +11 -11
  190. package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -61
  191. package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -267
  192. package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -101
  193. package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -142
  194. package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -76
  195. package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -146
  196. package/skills/analyze-product-requirements/SKILL.md +90 -90
  197. package/skills/analyze-product-requirements/agents/openai.yaml +4 -4
  198. package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -91
  199. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -56
  200. package/skills/analyze-product-requirements/references/example.md +86 -86
  201. package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -66
  202. package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -32
  203. package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -33
  204. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -35
  205. package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -193
  206. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -69
  207. package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -97
  208. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -98
  209. package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -156
  210. package/skills/browser-tools/SKILL.md +196 -0
  211. package/skills/browser-tools/browser-content.js +103 -0
  212. package/skills/browser-tools/browser-cookies.js +35 -0
  213. package/skills/browser-tools/browser-eval.js +53 -0
  214. package/skills/browser-tools/browser-hn-scraper.js +108 -0
  215. package/skills/browser-tools/browser-nav.js +44 -0
  216. package/skills/browser-tools/browser-pick.js +162 -0
  217. package/skills/browser-tools/browser-screenshot.js +34 -0
  218. package/skills/browser-tools/browser-start.js +86 -0
  219. package/skills/browser-tools/package-lock.json +2556 -0
  220. package/skills/browser-tools/package.json +19 -0
  221. package/skills/code-review-core/SKILL.md +20 -20
  222. package/skills/codebase-scout/SKILL.md +19 -19
  223. package/skills/frontend-design-review/SKILL.md +66 -66
  224. package/skills/frontend-design-review/references/review-checklist.md +58 -58
  225. package/skills/frontend-implementation/SKILL.md +49 -47
  226. package/skills/frontend-implementation/references/code-standards.md +32 -32
  227. package/skills/frontend-implementation/references/design-spec.md +46 -46
  228. package/skills/frontend-implementation/references/node-contracts.md +27 -76
  229. package/skills/frontend-review/SKILL.md +59 -59
  230. package/skills/frontend-review/references/review-findings.md +47 -47
  231. package/skills/frontend-verification/SKILL.md +53 -53
  232. package/skills/frontend-verification/references/verification-checklist.md +68 -68
  233. package/skills/grill-me/SKILL.md +10 -10
  234. package/skills/grill-with-docs/SKILL.md +88 -88
  235. package/skills/grill-with-docs/adr-format.md +47 -47
  236. package/skills/grill-with-docs/context-format.md +60 -60
  237. package/skills/init-capability-evolution/SKILL.md +70 -70
  238. package/skills/loop-agent/SKILL.md +151 -151
  239. package/skills/loop-agent/references/README.md +67 -67
  240. package/skills/loop-agent/references/command-reference.md +527 -505
  241. package/skills/loop-agent/references/docs-converge.md +126 -126
  242. package/skills/loop-agent/references/harness-policy.md +263 -263
  243. package/skills/loop-agent/references/hybrid-dag.md +243 -238
  244. package/skills/loop-agent/references/learned/README.md +21 -21
  245. package/skills/loop-agent/references/long-running-loop.md +57 -57
  246. package/skills/loop-agent/references/model-routing.md +36 -36
  247. package/skills/loop-agent/references/multi-worktree.md +54 -54
  248. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  249. package/skills/loop-agent/references/orchestrator-and-interventions.md +169 -169
  250. package/skills/loop-agent/references/pi-prompt.md +23 -23
  251. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
  252. package/skills/loop-agent/references/post-implementation-and-patterns.md +44 -44
  253. package/skills/loop-agent/references/task-workflow.md +89 -89
  254. package/skills/loop-agent/references/verification-and-failure-handling.md +141 -139
  255. package/skills/playwright-cli/SKILL.md +420 -420
  256. package/skills/playwright-cli/references/element-attributes.md +23 -23
  257. package/skills/playwright-cli/references/playwright-tests.md +39 -39
  258. package/skills/playwright-cli/references/request-mocking.md +87 -87
  259. package/skills/playwright-cli/references/running-code.md +241 -241
  260. package/skills/playwright-cli/references/session-management.md +225 -225
  261. package/skills/playwright-cli/references/storage-state.md +275 -275
  262. package/skills/playwright-cli/references/test-generation.md +433 -433
  263. package/skills/playwright-cli/references/tracing.md +139 -139
  264. package/skills/playwright-cli/references/video-recording.md +143 -143
  265. package/skills/playwright-cli-case-generator/SKILL.md +74 -74
  266. package/skills/requesting-code-review/SKILL.md +101 -101
  267. package/skills/requesting-code-review/code-reviewer.md +168 -168
  268. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  269. package/skills/systematic-debugging/SKILL.md +296 -296
  270. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  271. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  272. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  273. package/skills/systematic-debugging/find-polluter.sh +63 -63
  274. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  275. package/skills/systematic-debugging/test-academic.md +14 -14
  276. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  277. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  278. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  279. package/skills/test-driven-development/SKILL.md +20 -20
  280. package/skills/using-git-worktrees/SKILL.md +215 -215
  281. package/skills/verification-before-completion/SKILL.md +154 -154
  282. package/skills/webapp-testing/SKILL.md +19 -19
@@ -1,150 +1,150 @@
1
- /** Observe UI bootstrap: route wiring, listeners, compatibility re-exports. */
2
- import {
3
- parseHashRoute,
4
- parseHashRouteWithFilters,
5
- buildHashPath,
6
- parseRoute,
7
- } from "./router.js";
8
- import { parseArtifactPreviewResponse } from "./api.js";
9
- import {
10
- objectRouteLink,
11
- findFeatureInSnapshot,
12
- featureLookupState,
13
- buildObjectRelations,
14
- renderObjectRelationBar,
15
- } from "./relations.js";
16
- import { copyText, renderRecommendedCommand } from "./copy.js";
17
- import {
18
- isPageVisible,
19
- detailPollDelay,
20
- updateDagGraphViewportState,
21
- captureDagGraphViewportState,
22
- updateDagTimelineViewportState,
23
- computeFollowLatest,
24
- updateDagOutputViewportState,
25
- shouldReuseDagDetailShell,
26
- shouldPreserveDiagnosticsOpen,
27
- isInteractiveGestureActive,
28
- stopTimers,
29
- renderViewState,
30
- mountViewState,
31
- viewStateDescriptor,
32
- } from "./state.js";
33
- import { sortPoolTasks, poolStatusCounts } from "./format-pool.js";
34
- import {
35
- parseMarkdownBlocks,
36
- markdownLinkHref,
37
- badgeClass,
38
- formatMs,
39
- displayDurationMs,
40
- } from "./format.js";
41
- import {
42
- dagMetaVisibility,
43
- isDagRunActive,
44
- dashboardVisibleFeatures,
45
- findDagForRun,
46
- } from "./dag-model.js";
47
-
48
- import { renderFailures } from "./views/failures.js";
49
- import { startPoolPolling } from "./views/pool.js";
50
- import { startDashboardPolling } from "./views/dashboard.js";
51
- import { renderFeatureDetail } from "./views/feature.js";
52
- import { renderBatch } from "./views/batch.js";
53
- import { startTaskPolling } from "./views/task.js";
54
- import { startRunPolling } from "./views/run.js";
55
- import { startDagPolling } from "./views/dag.js";
56
- import { renderDagGraph } from "./views/dag-graph.js";
57
- import {
58
- selectDagNode,
59
- closeDagInspector,
60
- closeDagInspectorOnOutsideClick,
61
- renderDagInspector,
62
- } from "./views/dag-inspector.js";
63
- import {
64
- mergeSessionEvents,
65
- renderSessionTimeline,
66
- } from "./views/session-timeline.js";
67
-
68
- // Compatibility re-exports for poll-stable UI helpers (owned by state.js / views):
69
- // reuse-dag-detail-shell, reuse-dag-graph-wrap, existingGraphWrap?.parentNode === ranksEl,
70
- // existingDetails?.parentNode === metaEl, let pre = existingPre, computeFollowLatest,
71
- // updateDagOutputViewportState, isInteractiveGestureActive.
72
- export {
73
- detailPollDelay,
74
- parseMarkdownBlocks,
75
- markdownLinkHref,
76
- updateDagGraphViewportState,
77
- captureDagGraphViewportState,
78
- updateDagTimelineViewportState,
79
- computeFollowLatest,
80
- updateDagOutputViewportState,
81
- shouldReuseDagDetailShell,
82
- shouldPreserveDiagnosticsOpen,
83
- isInteractiveGestureActive,
84
- parseHashRoute,
85
- sortPoolTasks,
86
- poolStatusCounts,
87
- badgeClass,
88
- formatMs,
89
- dagMetaVisibility,
90
- displayDurationMs,
91
- objectRouteLink,
92
- findFeatureInSnapshot,
93
- featureLookupState,
94
- buildObjectRelations,
95
- renderObjectRelationBar,
96
- copyText,
97
- renderRecommendedCommand,
98
- isDagRunActive,
99
- dashboardVisibleFeatures,
100
- findDagForRun,
101
- parseArtifactPreviewResponse,
102
- renderViewState,
103
- mountViewState,
104
- viewStateDescriptor,
105
- parseHashRouteWithFilters,
106
- buildHashPath,
107
- renderDagGraph,
108
- selectDagNode,
109
- closeDagInspector,
110
- renderDagInspector,
111
- renderSessionTimeline,
112
- mergeSessionEvents,
113
- };
114
-
115
- function route() {
116
- stopTimers();
117
- const r = parseRoute();
118
- if (r.view === "dashboard") {
119
- startDashboardPolling(r.scrollTo);
120
- } else if (r.view === "batch") {
121
- void renderBatch(r.batchRunId);
122
- } else if (r.view === "run") {
123
- startRunPolling(r.workerRunId);
124
- } else if (r.view === "dag") {
125
- startDagPolling(r.dagRunId);
126
- } else if (r.view === "failures") {
127
- void renderFailures();
128
- } else if (r.view === "pool") {
129
- startPoolPolling();
130
- } else if (r.view === "task") {
131
- startTaskPolling(r.featureId, r.taskId);
132
- } else if (r.view === "feature") {
133
- void renderFeatureDetail(r.featureId);
134
- }
135
- }
136
-
137
- if (typeof window !== "undefined") {
138
- window.addEventListener("hashchange", route);
139
- window.addEventListener("load", route);
140
- document.addEventListener("pointerdown", closeDagInspectorOnOutsideClick);
141
- document.addEventListener("visibilitychange", () => {
142
- if (!isPageVisible()) return;
143
- const r = parseRoute();
144
- if (r.view === "dashboard") startDashboardPolling();
145
- if (r.view === "run") startRunPolling(r.workerRunId, false);
146
- if (r.view === "dag") startDagPolling(r.dagRunId, false);
147
- if (r.view === "pool") startPoolPolling();
148
- if (r.view === "task") startTaskPolling(r.featureId, r.taskId);
149
- });
150
- }
1
+ /** Observe UI bootstrap: route wiring, listeners, compatibility re-exports. */
2
+ import {
3
+ parseHashRoute,
4
+ parseHashRouteWithFilters,
5
+ buildHashPath,
6
+ parseRoute,
7
+ } from "./router.js";
8
+ import { parseArtifactPreviewResponse } from "./api.js";
9
+ import {
10
+ objectRouteLink,
11
+ findFeatureInSnapshot,
12
+ featureLookupState,
13
+ buildObjectRelations,
14
+ renderObjectRelationBar,
15
+ } from "./relations.js";
16
+ import { copyText, renderRecommendedCommand } from "./copy.js";
17
+ import {
18
+ isPageVisible,
19
+ detailPollDelay,
20
+ updateDagGraphViewportState,
21
+ captureDagGraphViewportState,
22
+ updateDagTimelineViewportState,
23
+ computeFollowLatest,
24
+ updateDagOutputViewportState,
25
+ shouldReuseDagDetailShell,
26
+ shouldPreserveDiagnosticsOpen,
27
+ isInteractiveGestureActive,
28
+ stopTimers,
29
+ renderViewState,
30
+ mountViewState,
31
+ viewStateDescriptor,
32
+ } from "./state.js";
33
+ import { sortPoolTasks, poolStatusCounts } from "./format-pool.js";
34
+ import {
35
+ parseMarkdownBlocks,
36
+ markdownLinkHref,
37
+ badgeClass,
38
+ formatMs,
39
+ displayDurationMs,
40
+ } from "./format.js";
41
+ import {
42
+ dagMetaVisibility,
43
+ isDagRunActive,
44
+ dashboardVisibleFeatures,
45
+ findDagForRun,
46
+ } from "./dag-model.js";
47
+
48
+ import { renderFailures } from "./views/failures.js";
49
+ import { startPoolPolling } from "./views/pool.js";
50
+ import { startDashboardPolling } from "./views/dashboard.js";
51
+ import { renderFeatureDetail } from "./views/feature.js";
52
+ import { renderBatch } from "./views/batch.js";
53
+ import { startTaskPolling } from "./views/task.js";
54
+ import { startRunPolling } from "./views/run.js";
55
+ import { startDagPolling } from "./views/dag.js";
56
+ import { renderDagGraph } from "./views/dag-graph.js";
57
+ import {
58
+ selectDagNode,
59
+ closeDagInspector,
60
+ closeDagInspectorOnOutsideClick,
61
+ renderDagInspector,
62
+ } from "./views/dag-inspector.js";
63
+ import {
64
+ mergeSessionEvents,
65
+ renderSessionTimeline,
66
+ } from "./views/session-timeline.js";
67
+
68
+ // Compatibility re-exports for poll-stable UI helpers (owned by state.js / views):
69
+ // reuse-dag-detail-shell, reuse-dag-graph-wrap, existingGraphWrap?.parentNode === ranksEl,
70
+ // existingDetails?.parentNode === metaEl, let pre = existingPre, computeFollowLatest,
71
+ // updateDagOutputViewportState, isInteractiveGestureActive.
72
+ export {
73
+ detailPollDelay,
74
+ parseMarkdownBlocks,
75
+ markdownLinkHref,
76
+ updateDagGraphViewportState,
77
+ captureDagGraphViewportState,
78
+ updateDagTimelineViewportState,
79
+ computeFollowLatest,
80
+ updateDagOutputViewportState,
81
+ shouldReuseDagDetailShell,
82
+ shouldPreserveDiagnosticsOpen,
83
+ isInteractiveGestureActive,
84
+ parseHashRoute,
85
+ sortPoolTasks,
86
+ poolStatusCounts,
87
+ badgeClass,
88
+ formatMs,
89
+ dagMetaVisibility,
90
+ displayDurationMs,
91
+ objectRouteLink,
92
+ findFeatureInSnapshot,
93
+ featureLookupState,
94
+ buildObjectRelations,
95
+ renderObjectRelationBar,
96
+ copyText,
97
+ renderRecommendedCommand,
98
+ isDagRunActive,
99
+ dashboardVisibleFeatures,
100
+ findDagForRun,
101
+ parseArtifactPreviewResponse,
102
+ renderViewState,
103
+ mountViewState,
104
+ viewStateDescriptor,
105
+ parseHashRouteWithFilters,
106
+ buildHashPath,
107
+ renderDagGraph,
108
+ selectDagNode,
109
+ closeDagInspector,
110
+ renderDagInspector,
111
+ renderSessionTimeline,
112
+ mergeSessionEvents,
113
+ };
114
+
115
+ function route() {
116
+ stopTimers();
117
+ const r = parseRoute();
118
+ if (r.view === "dashboard") {
119
+ startDashboardPolling(r.scrollTo);
120
+ } else if (r.view === "batch") {
121
+ void renderBatch(r.batchRunId);
122
+ } else if (r.view === "run") {
123
+ startRunPolling(r.workerRunId);
124
+ } else if (r.view === "dag") {
125
+ startDagPolling(r.dagRunId);
126
+ } else if (r.view === "failures") {
127
+ void renderFailures();
128
+ } else if (r.view === "pool") {
129
+ startPoolPolling();
130
+ } else if (r.view === "task") {
131
+ startTaskPolling(r.featureId, r.taskId);
132
+ } else if (r.view === "feature") {
133
+ void renderFeatureDetail(r.featureId);
134
+ }
135
+ }
136
+
137
+ if (typeof window !== "undefined") {
138
+ window.addEventListener("hashchange", route);
139
+ window.addEventListener("load", route);
140
+ document.addEventListener("pointerdown", closeDagInspectorOnOutsideClick);
141
+ document.addEventListener("visibilitychange", () => {
142
+ if (!isPageVisible()) return;
143
+ const r = parseRoute();
144
+ if (r.view === "dashboard") startDashboardPolling();
145
+ if (r.view === "run") startRunPolling(r.workerRunId, false);
146
+ if (r.view === "dag") startDagPolling(r.dagRunId, false);
147
+ if (r.view === "pool") startPoolPolling();
148
+ if (r.view === "task") startTaskPolling(r.featureId, r.taskId);
149
+ });
150
+ }
@@ -1,148 +1,148 @@
1
- /** Shared constants for Observe UI (R5). */
2
-
3
- export const ACTIVE_DETAIL_POLL_MS = 2000;
4
- export const HIDDEN_POLL_MS = 30000;
5
- export const DASHBOARD_POLL_MS = 5000;
6
- export const DAG_INSPECTOR_DEFAULT_WIDTH = 440;
7
- export const DAG_INSPECTOR_MIN_WIDTH = 360;
8
- export const DAG_INSPECTOR_MAX_WIDTH = 680;
9
- export const DAG_INSPECTOR_RIGHT_OFFSET = 24;
10
- export const DAG_INSPECTOR_VIEWPORT_MARGIN = 48;
11
- export const DAG_INSPECTOR_KEYBOARD_STEP = 24;
12
- /** Distance from bottom (px) at which output regions auto-follow latest content. */
13
- export const OUTPUT_FOLLOW_LATEST_PX = 48;
14
-
15
- export const UI_TEXT = {
16
- dashboard: "总览",
17
- dagRuns: "DAG 运行",
18
- failures: "异常 Task",
19
- batchDetail: "批次详情",
20
- runDetail: "运行详情",
21
- dagDetail: "DAG 详情",
22
- activeDags: "进行中的 DAG",
23
- recentDags: "最近 DAG 运行",
24
- batches: "Worker 批次",
25
- noActiveDags: "当前没有进行中的 DAG,启动后将出现在这里。",
26
- noRecentDags: "暂无 DAG 运行记录。",
27
- noBatches: "暂无 Worker 批次,运行后将出现在这里。",
28
- noNodes: "暂无节点。",
29
- noOutput: "暂无节点输出。",
30
- noSessionEvents: "该节点暂无过程日志",
31
- noArtifacts: "暂无产物记录。",
32
- noActiveCommand: "当前没有正在执行的命令。",
33
- noFailures: "当前没有异常 Task。",
34
- enterDetail: "查看详情 →",
35
- repoRoot: "仓库根目录",
36
- generatedAt: "生成时间",
37
- refreshStatus: "更新",
38
- failureInbox: "异常 Task",
39
- nearRealtime: "轮询刷新",
40
- };
41
-
42
- export const STATUS_LABELS = {
43
- running: "运行中",
44
- started: "已启动",
45
- pending: "等待中",
46
- queued: "排队中",
47
- succeeded: "成功",
48
- finished: "已完成",
49
- completed: "已完成",
50
- done: "完成",
51
- failed: "失败",
52
- error: "错误",
53
- partial_failed: "部分失败",
54
- partialfailed: "部分失败",
55
- blocked: "阻塞",
56
- stale: "心跳失联",
57
- reused: "复用",
58
- unknown: "未知",
59
- cancelled: "已取消",
60
- skipped: "已跳过",
61
- finished_upper: "已完成",
62
- error_upper: "错误",
63
- skipped_upper: "已跳过",
64
- };
65
-
66
- export const LIVENESS_LABELS = {
67
- active: "执行器正常",
68
- "node-quiet": "执行器正常,节点长时间无活动",
69
- quiet: "无输出(存活)",
70
- stale: "执行器心跳中断",
71
- "timeout-risk": "即将超时",
72
- orphaned: "执行器已退出",
73
- "unknown-host": "无法判断(在其他主机运行)",
74
- unknown: "无法判断(无心跳记录)",
75
- };
76
-
77
- export const DAG_EFFECTIVE_STATUS_LABELS = {
78
- pending: "等待执行",
79
- running: "正在执行",
80
- "running-quiet": "运行可疑",
81
- paused: "已暂停",
82
- interrupted: "执行已中断",
83
- "remote-unknown": "远端状态未知",
84
- finished: "已完成",
85
- failed: "执行失败",
86
- superseded: "任务已另行完成",
87
- abandoned: "已放弃",
88
- unknown: "状态未知",
89
- };
90
-
91
- export const STEP_LABELS = {
92
- preflight: "预检",
93
- materialize: "准备 Task 文件",
94
- "dag-run-task": "生成 DAG",
95
- "pi-model-override": "覆盖 Pi 模型",
96
- "dag-validate": "校验 DAG",
97
- "run-dag": "执行 DAG",
98
- "report-decision": "上报决策结果",
99
- "dag-doctor": "DAG 诊断",
100
- "closeout-draft": "失败收尾草稿",
101
- "promote-run": "提升运行",
102
- "closeout-task": "Task 收尾",
103
- };
104
-
105
- export const ARTIFACT_LABELS = {
106
- stdoutPath: "运行输出",
107
- stderrPath: "错误输出",
108
- resultPath: "结果",
109
- runRecordPath: "运行记录",
110
- reportMarkdown: "报告",
111
- doctorMarkdown: "诊断",
112
- closeoutDraft: "收尾草稿",
113
- dagPath: "DAG 路径",
114
- };
115
-
116
- export const STEP_ORDER = [
117
- "preflight",
118
- "materialize",
119
- "dag-run-task",
120
- "pi-model-override",
121
- "dag-validate",
122
- "run-dag",
123
- "report-decision",
124
- "dag-doctor",
125
- "closeout-draft",
126
- "promote-run",
127
- "closeout-task",
128
- ];
129
-
130
- export const TERMINAL_RUN_STATUSES = new Set([
131
- "finished",
132
- "completed",
133
- "succeeded",
134
- "failed",
135
- "partial_failed",
136
- "error",
137
- "cancelled",
138
- ]);
139
-
140
- export const ARTIFACT_KEYS = [
141
- "stdoutPath",
142
- "stderrPath",
143
- "resultPath",
144
- "runRecordPath",
145
- "reportMarkdown",
146
- "doctorMarkdown",
147
- "closeoutDraft",
148
- ];
1
+ /** Shared constants for Observe UI (R5). */
2
+
3
+ export const ACTIVE_DETAIL_POLL_MS = 2000;
4
+ export const HIDDEN_POLL_MS = 30000;
5
+ export const DASHBOARD_POLL_MS = 5000;
6
+ export const DAG_INSPECTOR_DEFAULT_WIDTH = 440;
7
+ export const DAG_INSPECTOR_MIN_WIDTH = 360;
8
+ export const DAG_INSPECTOR_MAX_WIDTH = 680;
9
+ export const DAG_INSPECTOR_RIGHT_OFFSET = 24;
10
+ export const DAG_INSPECTOR_VIEWPORT_MARGIN = 48;
11
+ export const DAG_INSPECTOR_KEYBOARD_STEP = 24;
12
+ /** Distance from bottom (px) at which output regions auto-follow latest content. */
13
+ export const OUTPUT_FOLLOW_LATEST_PX = 48;
14
+
15
+ export const UI_TEXT = {
16
+ dashboard: "总览",
17
+ dagRuns: "DAG 运行",
18
+ failures: "异常 Task",
19
+ batchDetail: "批次详情",
20
+ runDetail: "运行详情",
21
+ dagDetail: "DAG 详情",
22
+ activeDags: "进行中的 DAG",
23
+ recentDags: "最近 DAG 运行",
24
+ batches: "Worker 批次",
25
+ noActiveDags: "当前没有进行中的 DAG,启动后将出现在这里。",
26
+ noRecentDags: "暂无 DAG 运行记录。",
27
+ noBatches: "暂无 Worker 批次,运行后将出现在这里。",
28
+ noNodes: "暂无节点。",
29
+ noOutput: "暂无节点输出。",
30
+ noSessionEvents: "该节点暂无过程日志",
31
+ noArtifacts: "暂无产物记录。",
32
+ noActiveCommand: "当前没有正在执行的命令。",
33
+ noFailures: "当前没有异常 Task。",
34
+ enterDetail: "查看详情 →",
35
+ repoRoot: "仓库根目录",
36
+ generatedAt: "生成时间",
37
+ refreshStatus: "更新",
38
+ failureInbox: "异常 Task",
39
+ nearRealtime: "轮询刷新",
40
+ };
41
+
42
+ export const STATUS_LABELS = {
43
+ running: "运行中",
44
+ started: "已启动",
45
+ pending: "等待中",
46
+ queued: "排队中",
47
+ succeeded: "成功",
48
+ finished: "已完成",
49
+ completed: "已完成",
50
+ done: "完成",
51
+ failed: "失败",
52
+ error: "错误",
53
+ partial_failed: "部分失败",
54
+ partialfailed: "部分失败",
55
+ blocked: "阻塞",
56
+ stale: "心跳失联",
57
+ reused: "复用",
58
+ unknown: "未知",
59
+ cancelled: "已取消",
60
+ skipped: "已跳过",
61
+ finished_upper: "已完成",
62
+ error_upper: "错误",
63
+ skipped_upper: "已跳过",
64
+ };
65
+
66
+ export const LIVENESS_LABELS = {
67
+ active: "执行器正常",
68
+ "node-quiet": "执行器正常,节点长时间无活动",
69
+ quiet: "无输出(存活)",
70
+ stale: "执行器心跳中断",
71
+ "timeout-risk": "即将超时",
72
+ orphaned: "执行器已退出",
73
+ "unknown-host": "无法判断(在其他主机运行)",
74
+ unknown: "无法判断(无心跳记录)",
75
+ };
76
+
77
+ export const DAG_EFFECTIVE_STATUS_LABELS = {
78
+ pending: "等待执行",
79
+ running: "正在执行",
80
+ "running-quiet": "运行可疑",
81
+ paused: "已暂停",
82
+ interrupted: "执行已中断",
83
+ "remote-unknown": "远端状态未知",
84
+ finished: "已完成",
85
+ failed: "执行失败",
86
+ superseded: "任务已另行完成",
87
+ abandoned: "已放弃",
88
+ unknown: "状态未知",
89
+ };
90
+
91
+ export const STEP_LABELS = {
92
+ preflight: "预检",
93
+ materialize: "准备 Task 文件",
94
+ "dag-run-task": "生成 DAG",
95
+ "pi-model-override": "覆盖 Pi 模型",
96
+ "dag-validate": "校验 DAG",
97
+ "run-dag": "执行 DAG",
98
+ "report-decision": "上报决策结果",
99
+ "dag-doctor": "DAG 诊断",
100
+ "closeout-draft": "失败收尾草稿",
101
+ "promote-run": "提升运行",
102
+ "closeout-task": "Task 收尾",
103
+ };
104
+
105
+ export const ARTIFACT_LABELS = {
106
+ stdoutPath: "运行输出",
107
+ stderrPath: "错误输出",
108
+ resultPath: "结果",
109
+ runRecordPath: "运行记录",
110
+ reportMarkdown: "报告",
111
+ doctorMarkdown: "诊断",
112
+ closeoutDraft: "收尾草稿",
113
+ dagPath: "DAG 路径",
114
+ };
115
+
116
+ export const STEP_ORDER = [
117
+ "preflight",
118
+ "materialize",
119
+ "dag-run-task",
120
+ "pi-model-override",
121
+ "dag-validate",
122
+ "run-dag",
123
+ "report-decision",
124
+ "dag-doctor",
125
+ "closeout-draft",
126
+ "promote-run",
127
+ "closeout-task",
128
+ ];
129
+
130
+ export const TERMINAL_RUN_STATUSES = new Set([
131
+ "finished",
132
+ "completed",
133
+ "succeeded",
134
+ "failed",
135
+ "partial_failed",
136
+ "error",
137
+ "cancelled",
138
+ ]);
139
+
140
+ export const ARTIFACT_KEYS = [
141
+ "stdoutPath",
142
+ "stderrPath",
143
+ "resultPath",
144
+ "runRecordPath",
145
+ "reportMarkdown",
146
+ "doctorMarkdown",
147
+ "closeoutDraft",
148
+ ];