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