@tea-agent/loop-agent 0.13.0-alpha.0 → 0.13.0-beta.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 (262) hide show
  1. package/AGENTS.md +155 -153
  2. package/CHANGELOG.md +326 -301
  3. package/README.md +345 -326
  4. package/bin/agent-worker.js +22 -22
  5. package/bin/loop-agent.js +21 -21
  6. package/dist/application/dag/generate-task-dag.js +28 -58
  7. package/dist/application/evaluation/candidate-hash.js +75 -0
  8. package/dist/application/evaluation/candidate.js +52 -0
  9. package/dist/application/evaluation/replay.js +289 -0
  10. package/dist/application/evaluation/types.js +130 -0
  11. package/dist/cli/command-definitions.js +17 -4
  12. package/dist/cli/program.js +8 -4
  13. package/dist/commands/cursor-prompt.js +6 -6
  14. package/dist/commands/eval.js +235 -0
  15. package/dist/commands/init.js +544 -506
  16. package/dist/commands/loop-benchmark.js +11 -11
  17. package/dist/commands/pi-reuse-benchmark.js +16 -16
  18. package/dist/executors/pi-sdk-executor.js +38 -24
  19. package/dist/executors/shell-executor.js +34 -2
  20. package/dist/executors/shell-presets.js +20 -0
  21. package/dist/executors/shell-verification.js +7 -0
  22. package/dist/governance/manifest-types.js +1 -0
  23. package/dist/infrastructure/evaluation/candidate-store.js +435 -0
  24. package/dist/infrastructure/evaluation/store.js +40 -0
  25. package/dist/sidecars/cursor-prompt/executor.js +1 -1
  26. package/dist/task/config-types.js +23 -0
  27. package/dist/task/runtime.js +27 -27
  28. package/dist/worker/observe/routes.js +18 -3
  29. package/dist/worker/observe/spec-evidence.js +1 -1
  30. package/dist/worker/observe/static/api.js +46 -46
  31. package/dist/worker/observe/static/app.js +150 -150
  32. package/dist/worker/observe/static/constants.js +148 -148
  33. package/dist/worker/observe/static/copy.js +67 -67
  34. package/dist/worker/observe/static/dag-helpers.js +172 -172
  35. package/dist/worker/observe/static/dag-layout.d.ts +31 -31
  36. package/dist/worker/observe/static/dag-layout.js +83 -83
  37. package/dist/worker/observe/static/dag-model.js +72 -72
  38. package/dist/worker/observe/static/dom.js +61 -61
  39. package/dist/worker/observe/static/format-pool.js +67 -67
  40. package/dist/worker/observe/static/format.js +292 -292
  41. package/dist/worker/observe/static/index.html +308 -308
  42. package/dist/worker/observe/static/kpi.js +94 -94
  43. package/dist/worker/observe/static/relations.js +133 -133
  44. package/dist/worker/observe/static/router.js +93 -93
  45. package/dist/worker/observe/static/run-processing.js +148 -148
  46. package/dist/worker/observe/static/shell-chrome.js +68 -68
  47. package/dist/worker/observe/static/state.js +253 -253
  48. package/dist/worker/observe/static/styles.css +1902 -1902
  49. package/dist/worker/observe/static/views/batch.js +227 -227
  50. package/dist/worker/observe/static/views/dag-graph.js +172 -172
  51. package/dist/worker/observe/static/views/dag-inspector.js +607 -596
  52. package/dist/worker/observe/static/views/dag.js +362 -362
  53. package/dist/worker/observe/static/views/dashboard.js +445 -445
  54. package/dist/worker/observe/static/views/failures.js +143 -143
  55. package/dist/worker/observe/static/views/feature.js +492 -492
  56. package/dist/worker/observe/static/views/pool.js +350 -350
  57. package/dist/worker/observe/static/views/run.js +453 -453
  58. package/dist/worker/observe/static/views/session-timeline.js +205 -205
  59. package/dist/worker/observe/static/views/shell.js +7 -7
  60. package/dist/worker/observe/static/views/task.js +314 -314
  61. package/dist/worker/observe/static/views/timeline.js +163 -163
  62. package/dist/workflows/dag/backend-test-analysis-contract.js +120 -0
  63. package/dist/workflows/dag/canvas-observer.js +275 -275
  64. package/dist/workflows/dag/dynamic-runtime/map.js +90 -2
  65. package/dist/workflows/dag/init-hybrid.js +1415 -200
  66. package/dist/workflows/dag/node-execution.js +9 -0
  67. package/dist/workflows/dag/prompt.js +9 -0
  68. package/dist/workflows/dag/report.js +35 -1
  69. package/dist/workflows/dag/runner.js +28 -2
  70. package/dist/workflows/dag/task-demand-routing.js +383 -0
  71. package/dist/workflows/dag/types.js +50 -13
  72. package/dist/workflows/dag/upstream-artifacts.js +1 -0
  73. package/dist/workflows/dag/validate.js +59 -1
  74. package/docs/README.md +106 -104
  75. package/docs/agent-dag-recovery-playbook.md +195 -193
  76. package/docs/agent-dag-runner.md +67 -67
  77. package/docs/architecture/README.md +26 -26
  78. package/docs/architecture/dag-execution.md +140 -140
  79. package/docs/architecture/evolution.md +54 -54
  80. package/docs/architecture/facts-and-state.md +71 -71
  81. package/docs/architecture/runtime-boundaries.md +191 -191
  82. package/docs/architecture/system-overview.md +93 -93
  83. package/docs/architecture/worker-and-feature.md +85 -85
  84. package/docs/cursor-prompt-sidecar.md +36 -36
  85. package/docs/decisions/README.md +18 -18
  86. package/docs/design/README.md +167 -85
  87. package/docs/development-principles.md +73 -73
  88. package/docs/exec-plans/README.md +6 -6
  89. package/docs/exec-plans/active/README.md +15 -11
  90. package/docs/exec-plans/completed/README.md +85 -74
  91. package/docs/feature-workflow.md +389 -339
  92. package/docs/harness-methodology-debugging.md +153 -153
  93. package/docs/harness-methodology-tdd.md +130 -130
  94. package/docs/harness-methodology-verification.md +27 -27
  95. package/docs/init-surface.manifest.json +289 -280
  96. package/docs/loop-agent-harness.md +142 -141
  97. package/docs/production-readiness.md +96 -96
  98. package/docs/progress/README.md +64 -58
  99. package/docs/reports/README.md +117 -100
  100. package/docs/skills/README.md +7 -7
  101. package/docs/skills/vetted-skill-registry.md +29 -27
  102. package/docs/templates/adr.md +60 -60
  103. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  104. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  105. package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -117
  106. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  107. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  108. package/docs/templates/agent-dag-report.schema.json +473 -473
  109. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  110. package/docs/templates/agent-dag.base.json +190 -190
  111. package/docs/templates/agent-dag.final-verification.json +185 -185
  112. package/docs/templates/agent-dag.schema.json +411 -383
  113. package/docs/templates/agent-dag.supervised-implementation.json +501 -501
  114. package/docs/templates/backend-test-analysis.schema.json +44 -0
  115. package/docs/templates/backend-test-dag.generate-pytest.prompt.md +202 -139
  116. package/docs/templates/backend-test-dag.json +311 -288
  117. package/docs/templates/backend-test-dag.retrospect.prompt.md +125 -125
  118. package/docs/templates/backend-test-dag.review-cases.prompt.md +81 -81
  119. package/docs/templates/exec-plan.md +64 -64
  120. package/docs/templates/feature-spec.md +53 -53
  121. package/docs/templates/frontend-design-contract.md +42 -33
  122. package/docs/templates/frontend-task-constraints.md +35 -25
  123. package/docs/templates/frontend-task-requirement.md +70 -61
  124. package/docs/templates/frontend-test-dag.generate-cases.prompt.md +5 -0
  125. package/docs/templates/frontend-test-dag.json +23 -0
  126. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +3 -0
  127. package/docs/templates/frontend-test-dag.retrospect.prompt.md +3 -0
  128. package/docs/templates/frontend-test-dag.review-cases.prompt.md +3 -0
  129. package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -0
  130. package/docs/templates/harness.schema.json +221 -221
  131. package/docs/templates/hybrid-dag.json +188 -188
  132. package/docs/templates/init-evolution-review.md +35 -35
  133. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  134. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -118
  135. package/docs/templates/knowledge-sync-dag.json +178 -177
  136. package/docs/templates/knowledge-sync-draft.schema.json +71 -71
  137. package/docs/templates/product-line/AGENTS.md +8 -8
  138. package/docs/templates/product-line/README.md +9 -9
  139. package/docs/templates/product-line/acceptance.yaml +14 -14
  140. package/docs/templates/product-line/closeout.yaml +9 -9
  141. package/docs/templates/product-line/design.md +13 -13
  142. package/docs/templates/product-line/links.md +10 -10
  143. package/docs/templates/product-line/requirement.md +17 -17
  144. package/docs/templates/product-line/task-graph.yaml +15 -15
  145. package/docs/templates/product-line/task.yaml +64 -64
  146. package/docs/templates/product-line/test-plan.md +7 -7
  147. package/docs/templates/production-readiness-checklist.md +57 -57
  148. package/docs/templates/progress-log.md +17 -17
  149. package/docs/templates/project-start-checklist.md +9 -9
  150. package/docs/templates/qa-report.md +48 -48
  151. package/docs/templates/sprint-contract.md +29 -29
  152. package/docs/templates/worker-dogfood-evidence.md +80 -80
  153. package/docs/templates/worker-dogfood-setup.md +68 -68
  154. package/docs/verification-matrix.md +70 -67
  155. package/examples/decision-gate-agent-dag.json +177 -177
  156. package/examples/example-dag.json +46 -46
  157. package/examples/hybrid-loop-agent-dag.json +189 -189
  158. package/harness.json +66 -66
  159. package/package.json +88 -52
  160. package/scripts/check-product-line-docs.sh +29 -29
  161. package/scripts/check-task-pool-root.sh +32 -32
  162. package/scripts/kb-bootstrap-init-skeleton.sh +240 -239
  163. package/scripts/kb-graph-incremental-prepare.mjs +386 -372
  164. package/scripts/kb-graph-incremental-prepare.sh +5 -5
  165. package/scripts/kb-graph-materialize.mjs +105 -105
  166. package/scripts/kb-graph-materialize.sh +4 -4
  167. package/scripts/kb-graph-promote.mjs +164 -153
  168. package/scripts/kb-graph-promote.sh +4 -4
  169. package/scripts/kb-query.mjs +554 -554
  170. package/scripts/kb-query.sh +5 -5
  171. package/skills/agent-worker/SKILL.md +39 -39
  172. package/skills/agent-worker/references/agent-worker-operator.md +60 -60
  173. package/skills/ai-engineering-context/SKILL.md +48 -48
  174. package/skills/analyze-product-dependencies/SKILL.md +67 -0
  175. package/skills/analyze-product-dependencies/agents/openai.yaml +4 -0
  176. package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -0
  177. package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -0
  178. package/skills/analyze-product-dependencies/references/example.md +76 -0
  179. package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -0
  180. package/skills/analyze-product-dependencies/references/input-contract.md +11 -0
  181. package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -0
  182. package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -0
  183. package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -0
  184. package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -0
  185. package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -0
  186. package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -0
  187. package/skills/analyze-product-requirements/SKILL.md +90 -0
  188. package/skills/analyze-product-requirements/agents/openai.yaml +4 -0
  189. package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -0
  190. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -0
  191. package/skills/analyze-product-requirements/references/example.md +86 -0
  192. package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -0
  193. package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -0
  194. package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -0
  195. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -0
  196. package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -0
  197. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -0
  198. package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -0
  199. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -0
  200. package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -0
  201. package/skills/code-review-core/SKILL.md +20 -20
  202. package/skills/codebase-scout/SKILL.md +19 -19
  203. package/skills/frontend-design-review/SKILL.md +66 -61
  204. package/skills/frontend-design-review/references/review-checklist.md +58 -37
  205. package/skills/frontend-implementation/SKILL.md +45 -52
  206. package/skills/frontend-implementation/references/code-standards.md +32 -34
  207. package/skills/frontend-implementation/references/design-spec.md +46 -46
  208. package/skills/frontend-implementation/references/node-contracts.md +76 -63
  209. package/skills/frontend-review/SKILL.md +59 -53
  210. package/skills/frontend-review/references/review-findings.md +47 -42
  211. package/skills/frontend-verification/SKILL.md +53 -40
  212. package/skills/frontend-verification/references/verification-checklist.md +68 -56
  213. package/skills/grill-me/SKILL.md +10 -10
  214. package/skills/grill-with-docs/SKILL.md +88 -88
  215. package/skills/grill-with-docs/adr-format.md +47 -47
  216. package/skills/grill-with-docs/context-format.md +60 -60
  217. package/skills/init-capability-evolution/SKILL.md +70 -70
  218. package/skills/loop-agent/SKILL.md +151 -151
  219. package/skills/loop-agent/references/README.md +67 -67
  220. package/skills/loop-agent/references/command-reference.md +505 -453
  221. package/skills/loop-agent/references/docs-converge.md +126 -126
  222. package/skills/loop-agent/references/harness-policy.md +263 -263
  223. package/skills/loop-agent/references/hybrid-dag.md +238 -233
  224. package/skills/loop-agent/references/learned/README.md +21 -21
  225. package/skills/loop-agent/references/long-running-loop.md +57 -57
  226. package/skills/loop-agent/references/model-routing.md +36 -36
  227. package/skills/loop-agent/references/multi-worktree.md +54 -54
  228. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  229. package/skills/loop-agent/references/orchestrator-and-interventions.md +169 -169
  230. package/skills/loop-agent/references/pi-prompt.md +23 -23
  231. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
  232. package/skills/loop-agent/references/post-implementation-and-patterns.md +44 -44
  233. package/skills/loop-agent/references/task-workflow.md +89 -89
  234. package/skills/loop-agent/references/verification-and-failure-handling.md +139 -139
  235. package/skills/playwright-cli/SKILL.md +420 -0
  236. package/skills/playwright-cli/references/element-attributes.md +23 -0
  237. package/skills/playwright-cli/references/playwright-tests.md +39 -0
  238. package/skills/playwright-cli/references/request-mocking.md +87 -0
  239. package/skills/playwright-cli/references/running-code.md +241 -0
  240. package/skills/playwright-cli/references/session-management.md +225 -0
  241. package/skills/playwright-cli/references/storage-state.md +275 -0
  242. package/skills/playwright-cli/references/test-generation.md +433 -0
  243. package/skills/playwright-cli/references/tracing.md +139 -0
  244. package/skills/playwright-cli/references/video-recording.md +143 -0
  245. package/skills/playwright-cli-case-generator/SKILL.md +74 -0
  246. package/skills/requesting-code-review/SKILL.md +101 -101
  247. package/skills/requesting-code-review/code-reviewer.md +168 -168
  248. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  249. package/skills/systematic-debugging/SKILL.md +296 -296
  250. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  251. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  252. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  253. package/skills/systematic-debugging/find-polluter.sh +63 -63
  254. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  255. package/skills/systematic-debugging/test-academic.md +14 -14
  256. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  257. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  258. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  259. package/skills/test-driven-development/SKILL.md +20 -20
  260. package/skills/using-git-worktrees/SKILL.md +215 -215
  261. package/skills/verification-before-completion/SKILL.md +154 -154
  262. package/skills/webapp-testing/SKILL.md +19 -19
@@ -1,46 +1,46 @@
1
- /** Fetch and artifact helpers (Observe UI R5). */
2
-
3
- export async function fetchJson(url) {
4
- try {
5
- const res = await fetch(url);
6
- if (!res.ok) return null;
7
- return await res.json();
8
- } catch {
9
- return null;
10
- }
11
- }
12
-
13
- /**
14
- * Read-only JSON fetch that preserves HTTP status so callers can distinguish
15
- * 404 (missing) from 409 (ambiguous task identity). Body is parsed best-effort.
16
- */
17
- export async function fetchJsonResult(url) {
18
- try {
19
- const res = await fetch(url);
20
- let body = null;
21
- try {
22
- body = await res.json();
23
- } catch {
24
- body = null;
25
- }
26
- return { ok: res.ok, status: res.status, body };
27
- } catch {
28
- return { ok: false, status: 0, body: null };
29
- }
30
- }
31
-
32
- export function artifactUrl(artifactPath) {
33
- return `/api/artifacts?path=${encodeURIComponent(artifactPath)}&tail=200`;
34
- }
35
-
36
- export function parseArtifactPreviewResponse(text) {
37
- const parsed = JSON.parse(text);
38
- if (!parsed || typeof parsed.content !== "string") {
39
- throw new Error("Artifact preview response is invalid");
40
- }
41
- return {
42
- content: parsed.content,
43
- truncated: parsed.truncated === true,
44
- };
45
- }
46
-
1
+ /** Fetch and artifact helpers (Observe UI R5). */
2
+
3
+ export async function fetchJson(url) {
4
+ try {
5
+ const res = await fetch(url);
6
+ if (!res.ok) return null;
7
+ return await res.json();
8
+ } catch {
9
+ return null;
10
+ }
11
+ }
12
+
13
+ /**
14
+ * Read-only JSON fetch that preserves HTTP status so callers can distinguish
15
+ * 404 (missing) from 409 (ambiguous task identity). Body is parsed best-effort.
16
+ */
17
+ export async function fetchJsonResult(url) {
18
+ try {
19
+ const res = await fetch(url);
20
+ let body = null;
21
+ try {
22
+ body = await res.json();
23
+ } catch {
24
+ body = null;
25
+ }
26
+ return { ok: res.ok, status: res.status, body };
27
+ } catch {
28
+ return { ok: false, status: 0, body: null };
29
+ }
30
+ }
31
+
32
+ export function artifactUrl(artifactPath) {
33
+ return `/api/artifacts?path=${encodeURIComponent(artifactPath)}&tail=200`;
34
+ }
35
+
36
+ export function parseArtifactPreviewResponse(text) {
37
+ const parsed = JSON.parse(text);
38
+ if (!parsed || typeof parsed.content !== "string") {
39
+ throw new Error("Artifact preview response is invalid");
40
+ }
41
+ return {
42
+ content: parsed.content,
43
+ truncated: parsed.truncated === true,
44
+ };
45
+ }
46
+
@@ -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
+ }