@bastani/atomic 0.9.11-alpha.8 → 0.9.11

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 (1738) hide show
  1. package/CHANGELOG.md +209 -1
  2. package/README.md +1 -1
  3. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  4. package/dist/builtin/intercom/package.json +3 -3
  5. package/dist/builtin/intercom/subagent-relay.ts +8 -5
  6. package/dist/builtin/mcp/CHANGELOG.md +16 -0
  7. package/dist/builtin/mcp/commands.ts +7 -3
  8. package/dist/builtin/mcp/package.json +6 -6
  9. package/dist/builtin/subagents/CHANGELOG.md +29 -0
  10. package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
  11. package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
  12. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  13. package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
  14. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  15. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
  16. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  17. package/dist/builtin/subagents/agents/worker.md +2 -2
  18. package/dist/builtin/subagents/package.json +5 -5
  19. package/dist/builtin/subagents/src/agents/agent-discovery.ts +26 -15
  20. package/dist/builtin/subagents/src/agents/agent-loaders.ts +48 -34
  21. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +80 -31
  22. package/dist/builtin/subagents/src/agents/agent-management.ts +194 -55
  23. package/dist/builtin/subagents/src/agents/agent-overrides.ts +85 -32
  24. package/dist/builtin/subagents/src/agents/agent-paths.ts +4 -1
  25. package/dist/builtin/subagents/src/agents/agent-selection.ts +1 -1
  26. package/dist/builtin/subagents/src/agents/agent-serializer.ts +1 -4
  27. package/dist/builtin/subagents/src/agents/agents.ts +9 -9
  28. package/dist/builtin/subagents/src/agents/chain-serializer.ts +9 -5
  29. package/dist/builtin/subagents/src/agents/identity.ts +12 -3
  30. package/dist/builtin/subagents/src/agents/skills-paths.ts +64 -24
  31. package/dist/builtin/subagents/src/agents/skills.ts +29 -26
  32. package/dist/builtin/subagents/src/extension/doctor.ts +31 -20
  33. package/dist/builtin/subagents/src/extension/fanout-child.ts +27 -12
  34. package/dist/builtin/subagents/src/extension/index.ts +119 -43
  35. package/dist/builtin/subagents/src/extension/notification-content.ts +14 -9
  36. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +0 -1
  37. package/dist/builtin/subagents/src/extension/schemas.ts +304 -177
  38. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +137 -73
  39. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +49 -21
  40. package/dist/builtin/subagents/src/intercom/result-intercom.ts +76 -38
  41. package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +12 -6
  42. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +164 -57
  43. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +15 -18
  44. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +66 -27
  45. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +4 -14
  46. package/dist/builtin/subagents/src/runs/background/async-execution.ts +1 -1
  47. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +86 -32
  48. package/dist/builtin/subagents/src/runs/background/async-resume.ts +93 -36
  49. package/dist/builtin/subagents/src/runs/background/async-status.ts +82 -27
  50. package/dist/builtin/subagents/src/runs/background/completion-claims.ts +12 -5
  51. package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +3 -1
  52. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +3 -1
  53. package/dist/builtin/subagents/src/runs/background/notify.ts +56 -22
  54. package/dist/builtin/subagents/src/runs/background/parallel-groups.ts +28 -14
  55. package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +147 -79
  56. package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +20 -5
  57. package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +7 -2
  58. package/dist/builtin/subagents/src/runs/background/result-status.ts +11 -5
  59. package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +18 -5
  60. package/dist/builtin/subagents/src/runs/background/result-watcher.ts +104 -35
  61. package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +28 -7
  62. package/dist/builtin/subagents/src/runs/background/run-status.ts +120 -32
  63. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +98 -39
  64. package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +185 -37
  65. package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +23 -9
  66. package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +6 -2
  67. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +34 -18
  68. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +175 -26
  69. package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +68 -23
  70. package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +200 -49
  71. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +81 -49
  72. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +33 -11
  73. package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +16 -6
  74. package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +2 -3
  75. package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +11 -8
  76. package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +5 -2
  77. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +113 -31
  78. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +64 -55
  79. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +103 -37
  80. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +97 -62
  81. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +22 -10
  82. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +9 -6
  83. package/dist/builtin/subagents/src/runs/foreground/detached-cleanup-barrier.ts +22 -22
  84. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +45 -40
  85. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +6 -5
  86. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +118 -43
  87. package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +17 -7
  88. package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +5 -3
  89. package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +39 -35
  90. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +81 -42
  91. package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +27 -21
  92. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +2 -5
  93. package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +9 -4
  94. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +64 -27
  95. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +31 -18
  96. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +95 -62
  97. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +30 -9
  98. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +106 -96
  99. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +68 -37
  100. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +260 -84
  101. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +6 -1
  102. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +63 -40
  103. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +110 -59
  104. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +20 -3
  105. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +8 -6
  106. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +65 -47
  107. package/dist/builtin/subagents/src/runs/shared/chain-outputs.ts +37 -12
  108. package/dist/builtin/subagents/src/runs/shared/dynamic-fanout.ts +120 -34
  109. package/dist/builtin/subagents/src/runs/shared/final-drain.ts +12 -7
  110. package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +3 -2
  111. package/dist/builtin/subagents/src/runs/shared/long-running-guard.ts +8 -3
  112. package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +42 -19
  113. package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +8 -4
  114. package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +103 -38
  115. package/dist/builtin/subagents/src/runs/shared/nested-events-control.ts +30 -20
  116. package/dist/builtin/subagents/src/runs/shared/nested-events-core.ts +45 -20
  117. package/dist/builtin/subagents/src/runs/shared/nested-events-projection.ts +57 -23
  118. package/dist/builtin/subagents/src/runs/shared/nested-events-registry.ts +77 -29
  119. package/dist/builtin/subagents/src/runs/shared/nested-events-sanitize.ts +99 -42
  120. package/dist/builtin/subagents/src/runs/shared/nested-events.ts +32 -26
  121. package/dist/builtin/subagents/src/runs/shared/nested-path.ts +22 -17
  122. package/dist/builtin/subagents/src/runs/shared/nested-render.ts +31 -10
  123. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +9 -8
  124. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +54 -30
  125. package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +17 -13
  126. package/dist/builtin/subagents/src/runs/shared/run-history.ts +13 -6
  127. package/dist/builtin/subagents/src/runs/shared/single-output.ts +11 -6
  128. package/dist/builtin/subagents/src/runs/shared/spawn-env.ts +21 -0
  129. package/dist/builtin/subagents/src/runs/shared/structured-output.ts +33 -19
  130. package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +59 -48
  131. package/dist/builtin/subagents/src/runs/shared/subagent-prompt-runtime.ts +18 -11
  132. package/dist/builtin/subagents/src/runs/shared/workflow-graph.ts +41 -11
  133. package/dist/builtin/subagents/src/runs/shared/worktree-post-create.ts +46 -10
  134. package/dist/builtin/subagents/src/runs/shared/worktree-root.ts +21 -5
  135. package/dist/builtin/subagents/src/runs/shared/worktree.ts +89 -34
  136. package/dist/builtin/subagents/src/shared/artifacts.ts +137 -7
  137. package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +49 -13
  138. package/dist/builtin/subagents/src/shared/fast-mode.ts +13 -6
  139. package/dist/builtin/subagents/src/shared/fork-context.ts +7 -4
  140. package/dist/builtin/subagents/src/shared/formatters.ts +14 -9
  141. package/dist/builtin/subagents/src/shared/jsonl-writer.ts +2 -1
  142. package/dist/builtin/subagents/src/shared/model-info.ts +10 -3
  143. package/dist/builtin/subagents/src/shared/post-exit-stdio-guard.ts +7 -6
  144. package/dist/builtin/subagents/src/shared/session-tokens.ts +2 -1
  145. package/dist/builtin/subagents/src/shared/settings.ts +39 -43
  146. package/dist/builtin/subagents/src/shared/status-format.ts +10 -2
  147. package/dist/builtin/subagents/src/shared/types-async.ts +22 -19
  148. package/dist/builtin/subagents/src/shared/types-config.ts +1 -1
  149. package/dist/builtin/subagents/src/shared/types-depth.ts +23 -11
  150. package/dist/builtin/subagents/src/shared/types-results.ts +49 -6
  151. package/dist/builtin/subagents/src/shared/types-runtime.ts +16 -17
  152. package/dist/builtin/subagents/src/shared/types.ts +2 -2
  153. package/dist/builtin/subagents/src/shared/utils.ts +34 -20
  154. package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +44 -47
  155. package/dist/builtin/subagents/src/slash/saved-chain-mapping.ts +5 -7
  156. package/dist/builtin/subagents/src/slash/slash-bridge.ts +3 -3
  157. package/dist/builtin/subagents/src/slash/slash-commands.ts +78 -52
  158. package/dist/builtin/subagents/src/slash/slash-live-state.ts +59 -32
  159. package/dist/builtin/subagents/src/tui/render-chain-graph.ts +120 -32
  160. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +85 -22
  161. package/dist/builtin/subagents/src/tui/render-helpers.ts +16 -6
  162. package/dist/builtin/subagents/src/tui/render-layout.ts +8 -3
  163. package/dist/builtin/subagents/src/tui/render-result-compact.ts +125 -43
  164. package/dist/builtin/subagents/src/tui/render-result.ts +128 -85
  165. package/dist/builtin/subagents/src/tui/render-stable-output.ts +17 -13
  166. package/dist/builtin/subagents/src/tui/render-status-progress.ts +52 -20
  167. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +130 -28
  168. package/dist/builtin/subagents/src/tui/render-widget.ts +54 -27
  169. package/dist/builtin/subagents/src/tui/render.ts +10 -3
  170. package/dist/builtin/web-access/CHANGELOG.md +20 -0
  171. package/dist/builtin/web-access/content-tools.ts +1 -0
  172. package/dist/builtin/web-access/flat-string.ts +37 -0
  173. package/dist/builtin/web-access/github-api.ts +2 -1
  174. package/dist/builtin/web-access/github-extract.ts +3 -2
  175. package/dist/builtin/web-access/package.json +3 -3
  176. package/dist/builtin/workflows/CHANGELOG.md +87 -0
  177. package/dist/builtin/workflows/README.md +6 -0
  178. package/dist/builtin/workflows/builtin/goal-ledger.ts +6 -4
  179. package/dist/builtin/workflows/builtin/goal-runner.ts +2 -1
  180. package/dist/builtin/workflows/builtin/goal.ts +1 -1
  181. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +104 -40
  182. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +57 -26
  183. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +125 -12
  184. package/dist/builtin/workflows/builtin/ralph-core.ts +8 -9
  185. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +2 -4
  186. package/dist/builtin/workflows/builtin/ralph-models.ts +4 -4
  187. package/dist/builtin/workflows/builtin/ralph-runner.ts +5 -8
  188. package/dist/builtin/workflows/builtin/ralph.ts +2 -1
  189. package/dist/builtin/workflows/package.json +3 -3
  190. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +4 -1
  191. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-dom.js +5 -1
  192. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-session.js +7 -1
  193. package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +5 -2
  194. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +7 -1
  195. package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +5 -5
  196. package/dist/builtin/workflows/src/authoring/typebox-defaults.ts +160 -197
  197. package/dist/builtin/workflows/src/authoring/workflow.ts +137 -133
  198. package/dist/builtin/workflows/src/authoring.d.ts +3 -3
  199. package/dist/builtin/workflows/src/durable/backend.ts +507 -439
  200. package/dist/builtin/workflows/src/durable/boundary-lifecycle.ts +142 -118
  201. package/dist/builtin/workflows/src/durable/boundary-topology.ts +410 -355
  202. package/dist/builtin/workflows/src/durable/child-invocation.ts +6 -6
  203. package/dist/builtin/workflows/src/durable/child-primitive.ts +109 -101
  204. package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +234 -194
  205. package/dist/builtin/workflows/src/durable/completed-catalog.ts +385 -372
  206. package/dist/builtin/workflows/src/durable/completed-inspection.ts +117 -116
  207. package/dist/builtin/workflows/src/durable/completed-subtree.ts +24 -20
  208. package/dist/builtin/workflows/src/durable/dbos-backend.ts +484 -418
  209. package/dist/builtin/workflows/src/durable/dbos-embedded-postgres-root.ts +86 -87
  210. package/dist/builtin/workflows/src/durable/dbos-embedded-postgres.ts +171 -149
  211. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +400 -324
  212. package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +117 -121
  213. package/dist/builtin/workflows/src/durable/dbos-local-postgres.ts +75 -68
  214. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +138 -119
  215. package/dist/builtin/workflows/src/durable/dbos-prompt-reservations.ts +316 -259
  216. package/dist/builtin/workflows/src/durable/dbos-sdk-handle.ts +138 -117
  217. package/dist/builtin/workflows/src/durable/dbos-status-transition.ts +48 -43
  218. package/dist/builtin/workflows/src/durable/dbos-tombstone.ts +14 -14
  219. package/dist/builtin/workflows/src/durable/durable-hash.ts +9 -11
  220. package/dist/builtin/workflows/src/durable/factory.ts +45 -46
  221. package/dist/builtin/workflows/src/durable/format-version.ts +1 -1
  222. package/dist/builtin/workflows/src/durable/index.ts +69 -70
  223. package/dist/builtin/workflows/src/durable/local-command.ts +47 -43
  224. package/dist/builtin/workflows/src/durable/prompt-reservation-state.ts +156 -149
  225. package/dist/builtin/workflows/src/durable/prompt-reservations.ts +16 -16
  226. package/dist/builtin/workflows/src/durable/resume-catalog.ts +11 -11
  227. package/dist/builtin/workflows/src/durable/resume-eligibility.ts +69 -25
  228. package/dist/builtin/workflows/src/durable/resume-runtime.ts +262 -228
  229. package/dist/builtin/workflows/src/durable/retention-policy.ts +31 -30
  230. package/dist/builtin/workflows/src/durable/run-timing.ts +42 -41
  231. package/dist/builtin/workflows/src/durable/scoped-backend.ts +249 -228
  232. package/dist/builtin/workflows/src/durable/stage-primitive.ts +456 -398
  233. package/dist/builtin/workflows/src/durable/stage-topology-validation.ts +199 -186
  234. package/dist/builtin/workflows/src/durable/stage-topology.ts +40 -40
  235. package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +37 -37
  236. package/dist/builtin/workflows/src/durable/tool-outcome.ts +95 -85
  237. package/dist/builtin/workflows/src/durable/tool-primitive.ts +614 -410
  238. package/dist/builtin/workflows/src/durable/types.ts +219 -216
  239. package/dist/builtin/workflows/src/durable/ui-primitive.ts +241 -208
  240. package/dist/builtin/workflows/src/durable/workflow-child-result.ts +40 -37
  241. package/dist/builtin/workflows/src/durable/workflow-status-transition.ts +16 -15
  242. package/dist/builtin/workflows/src/engine/graph-inference.ts +76 -76
  243. package/dist/builtin/workflows/src/engine/options.ts +35 -36
  244. package/dist/builtin/workflows/src/engine/primitives/chain.ts +27 -22
  245. package/dist/builtin/workflows/src/engine/primitives/exit.ts +1 -1
  246. package/dist/builtin/workflows/src/engine/primitives/parallel.ts +64 -52
  247. package/dist/builtin/workflows/src/engine/primitives/task.ts +110 -95
  248. package/dist/builtin/workflows/src/engine/primitives/ui.ts +46 -50
  249. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +194 -160
  250. package/dist/builtin/workflows/src/engine/replay.ts +6 -6
  251. package/dist/builtin/workflows/src/engine/run-durable-admission.ts +30 -30
  252. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +64 -47
  253. package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +29 -23
  254. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +246 -219
  255. package/dist/builtin/workflows/src/engine/run-returned-status.ts +60 -57
  256. package/dist/builtin/workflows/src/engine/run-terminal-event.ts +25 -23
  257. package/dist/builtin/workflows/src/engine/run-terminal-failure.ts +45 -42
  258. package/dist/builtin/workflows/src/engine/run-tool-admission-boundary.ts +99 -0
  259. package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +179 -0
  260. package/dist/builtin/workflows/src/engine/run-tool-execution-tracker.ts +144 -132
  261. package/dist/builtin/workflows/src/engine/run-tool-node-lifecycle.ts +134 -69
  262. package/dist/builtin/workflows/src/engine/run.ts +679 -473
  263. package/dist/builtin/workflows/src/engine/runtime.ts +160 -153
  264. package/dist/builtin/workflows/src/engine/workflow-activity.ts +7 -3
  265. package/dist/builtin/workflows/src/engine/workflow-tool-abort.ts +92 -0
  266. package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +123 -120
  267. package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +108 -112
  268. package/dist/builtin/workflows/src/extension/companions.ts +116 -116
  269. package/dist/builtin/workflows/src/extension/completed-stage-intercom-ask.ts +123 -111
  270. package/dist/builtin/workflows/src/extension/config-file-loader.ts +153 -148
  271. package/dist/builtin/workflows/src/extension/config-loader.ts +264 -283
  272. package/dist/builtin/workflows/src/extension/discovery-loaders.ts +81 -84
  273. package/dist/builtin/workflows/src/extension/discovery.ts +267 -272
  274. package/dist/builtin/workflows/src/extension/dispatcher.ts +214 -217
  275. package/dist/builtin/workflows/src/extension/extension-factory.ts +102 -108
  276. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +118 -116
  277. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +417 -396
  278. package/dist/builtin/workflows/src/extension/hil-answer-notifications.ts +273 -261
  279. package/dist/builtin/workflows/src/extension/index.bundle.mjs +34971 -32989
  280. package/dist/builtin/workflows/src/extension/index.ts +37 -37
  281. package/dist/builtin/workflows/src/extension/lifecycle-notification-delivery.ts +64 -64
  282. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +387 -378
  283. package/dist/builtin/workflows/src/extension/mcp.ts +35 -35
  284. package/dist/builtin/workflows/src/extension/postmortem-deps.ts +32 -35
  285. package/dist/builtin/workflows/src/extension/public-types.ts +160 -182
  286. package/dist/builtin/workflows/src/extension/render-call.ts +85 -88
  287. package/dist/builtin/workflows/src/extension/render-component.ts +9 -11
  288. package/dist/builtin/workflows/src/extension/render-result.ts +440 -386
  289. package/dist/builtin/workflows/src/extension/renderers.ts +35 -35
  290. package/dist/builtin/workflows/src/extension/runtime-active-block-claim.ts +37 -37
  291. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +142 -143
  292. package/dist/builtin/workflows/src/extension/runtime.ts +346 -264
  293. package/dist/builtin/workflows/src/extension/status-writer.ts +95 -95
  294. package/dist/builtin/workflows/src/extension/ui-surface.ts +224 -222
  295. package/dist/builtin/workflows/src/extension/wiring.ts +307 -283
  296. package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +109 -108
  297. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +253 -227
  298. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +84 -84
  299. package/dist/builtin/workflows/src/extension/workflow-command-utils.ts +126 -132
  300. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +213 -208
  301. package/dist/builtin/workflows/src/extension/workflow-model-catalog.ts +19 -21
  302. package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +104 -104
  303. package/dist/builtin/workflows/src/extension/workflow-policy.ts +7 -9
  304. package/dist/builtin/workflows/src/extension/workflow-ports.ts +30 -34
  305. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +13 -13
  306. package/dist/builtin/workflows/src/extension/workflow-reload-coordinator.ts +46 -46
  307. package/dist/builtin/workflows/src/extension/workflow-reload-report.ts +28 -25
  308. package/dist/builtin/workflows/src/extension/workflow-resume-picker-rows.ts +61 -46
  309. package/dist/builtin/workflows/src/extension/workflow-resume-shadow.ts +29 -31
  310. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +531 -453
  311. package/dist/builtin/workflows/src/extension/workflow-schema.ts +149 -92
  312. package/dist/builtin/workflows/src/extension/workflow-stage-results.ts +182 -194
  313. package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +147 -157
  314. package/dist/builtin/workflows/src/extension/workflow-targets.ts +155 -128
  315. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +204 -224
  316. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +485 -372
  317. package/dist/builtin/workflows/src/extension/workflow-tool-inspection.ts +124 -150
  318. package/dist/builtin/workflows/src/extension/workflow-tool-registration.ts +43 -46
  319. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +333 -292
  320. package/dist/builtin/workflows/src/extension/workflow-tool.ts +113 -129
  321. package/dist/builtin/workflows/src/intercom/intercom-bridge.ts +17 -20
  322. package/dist/builtin/workflows/src/intercom/intercom-routing.ts +62 -62
  323. package/dist/builtin/workflows/src/intercom/result-intercom.ts +123 -123
  324. package/dist/builtin/workflows/src/runs/background/cancellation-registry.ts +72 -59
  325. package/dist/builtin/workflows/src/runs/background/durable-resume-transition.ts +45 -45
  326. package/dist/builtin/workflows/src/runs/background/job-tracker.ts +69 -34
  327. package/dist/builtin/workflows/src/runs/background/quit-tool-node.ts +71 -0
  328. package/dist/builtin/workflows/src/runs/background/quit.ts +360 -138
  329. package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +70 -69
  330. package/dist/builtin/workflows/src/runs/background/run-inspect.ts +90 -85
  331. package/dist/builtin/workflows/src/runs/background/runner.ts +122 -121
  332. package/dist/builtin/workflows/src/runs/background/startup-admission.ts +56 -60
  333. package/dist/builtin/workflows/src/runs/background/status.ts +325 -294
  334. package/dist/builtin/workflows/src/runs/background/workflow-lifecycle-aggregate.ts +24 -17
  335. package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +311 -309
  336. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +228 -201
  337. package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +56 -51
  338. package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +168 -152
  339. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +258 -220
  340. package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +178 -173
  341. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +273 -269
  342. package/dist/builtin/workflows/src/runs/foreground/executor-inputs.ts +59 -56
  343. package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +372 -361
  344. package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +123 -127
  345. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +355 -339
  346. package/dist/builtin/workflows/src/runs/foreground/executor-queued-user-message.ts +47 -47
  347. package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +125 -104
  348. package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +191 -189
  349. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +309 -250
  350. package/dist/builtin/workflows/src/runs/foreground/executor-stage-context.ts +141 -127
  351. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +218 -213
  352. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +410 -364
  353. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +143 -127
  354. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +49 -49
  355. package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +1 -1
  356. package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +153 -153
  357. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +155 -117
  358. package/dist/builtin/workflows/src/runs/foreground/executor.ts +10 -10
  359. package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +168 -141
  360. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +356 -379
  361. package/dist/builtin/workflows/src/runs/foreground/stage-delivery-activity.ts +53 -53
  362. package/dist/builtin/workflows/src/runs/foreground/stage-queued-user-messages.ts +95 -0
  363. package/dist/builtin/workflows/src/runs/foreground/stage-runner-candidate.ts +8 -8
  364. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +276 -230
  365. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +636 -493
  366. package/dist/builtin/workflows/src/runs/foreground/stage-runner-message-admission.ts +182 -181
  367. package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +80 -80
  368. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +78 -78
  369. package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +235 -106
  370. package/dist/builtin/workflows/src/runs/foreground/stage-runner-pause.ts +178 -173
  371. package/dist/builtin/workflows/src/runs/foreground/stage-runner-replacement.ts +31 -32
  372. package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +114 -105
  373. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +29 -29
  374. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +44 -52
  375. package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +63 -58
  376. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +157 -148
  377. package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +27 -23
  378. package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +10 -10
  379. package/dist/builtin/workflows/src/runs/foreground/stage-tool-execution-buffer.ts +33 -31
  380. package/dist/builtin/workflows/src/runs/shared/concurrency.ts +53 -53
  381. package/dist/builtin/workflows/src/runs/shared/graph-inference.ts +1 -1
  382. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +257 -245
  383. package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +378 -363
  384. package/dist/builtin/workflows/src/runs/shared/prompt-callsite.ts +55 -55
  385. package/dist/builtin/workflows/src/runs/shared/validate-inputs.ts +75 -84
  386. package/dist/builtin/workflows/src/runs/shared/worktree-cache-lifecycle.ts +1 -3
  387. package/dist/builtin/workflows/src/runs/shared/worktree-cwd.ts +96 -83
  388. package/dist/builtin/workflows/src/runs/shared/worktree-diff.ts +9 -2
  389. package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +21 -6
  390. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +60 -30
  391. package/dist/builtin/workflows/src/runs/shared/worktree-post-create.ts +12 -5
  392. package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +51 -30
  393. package/dist/builtin/workflows/src/runs/shared/worktree.ts +4 -4
  394. package/dist/builtin/workflows/src/sdk-surface.ts +38 -19
  395. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +11 -5
  396. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +299 -275
  397. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +23 -7
  398. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +292 -264
  399. package/dist/builtin/workflows/src/shared/expanded-workflow-graph.ts +379 -221
  400. package/dist/builtin/workflows/src/shared/flat-string.ts +33 -0
  401. package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +144 -0
  402. package/dist/builtin/workflows/src/shared/intercom-group.ts +22 -22
  403. package/dist/builtin/workflows/src/shared/persistence-compaction-policy.ts +30 -30
  404. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +432 -406
  405. package/dist/builtin/workflows/src/shared/persistence-restore.ts +187 -181
  406. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +211 -213
  407. package/dist/builtin/workflows/src/shared/prompt-callsite-context.ts +3 -3
  408. package/dist/builtin/workflows/src/shared/render-inputs-schema.ts +84 -91
  409. package/dist/builtin/workflows/src/shared/resume-continuation.ts +1 -1
  410. package/dist/builtin/workflows/src/shared/returned-run-status.ts +91 -77
  411. package/dist/builtin/workflows/src/shared/run-id.ts +36 -0
  412. package/dist/builtin/workflows/src/shared/run-visibility.ts +2 -2
  413. package/dist/builtin/workflows/src/shared/schema-introspection.ts +50 -60
  414. package/dist/builtin/workflows/src/shared/serializable.ts +72 -86
  415. package/dist/builtin/workflows/src/shared/session-transcript.ts +44 -39
  416. package/dist/builtin/workflows/src/shared/stage-prompt.ts +183 -202
  417. package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +270 -274
  418. package/dist/builtin/workflows/src/shared/store-factory.ts +8 -8
  419. package/dist/builtin/workflows/src/shared/store-internal.ts +197 -172
  420. package/dist/builtin/workflows/src/shared/store-observation.ts +10 -0
  421. package/dist/builtin/workflows/src/shared/store-prompt-methods.ts +196 -200
  422. package/dist/builtin/workflows/src/shared/store-public-types.ts +216 -204
  423. package/dist/builtin/workflows/src/shared/store-run-methods.ts +252 -231
  424. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +284 -285
  425. package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +43 -36
  426. package/dist/builtin/workflows/src/shared/store-types.ts +267 -263
  427. package/dist/builtin/workflows/src/shared/store.ts +7 -7
  428. package/dist/builtin/workflows/src/shared/timing.ts +36 -34
  429. package/dist/builtin/workflows/src/shared/types.ts +258 -213
  430. package/dist/builtin/workflows/src/shared/workflow-artifacts.ts +261 -0
  431. package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +10 -4
  432. package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +81 -59
  433. package/dist/builtin/workflows/src/shared/workflow-failures-classifier.ts +247 -227
  434. package/dist/builtin/workflows/src/shared/workflow-failures-contract.ts +45 -46
  435. package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +330 -351
  436. package/dist/builtin/workflows/src/shared/workflow-failures-signals.ts +192 -195
  437. package/dist/builtin/workflows/src/shared/workflow-failures.ts +10 -10
  438. package/dist/builtin/workflows/src/shared/workflow-run-ownership.ts +32 -36
  439. package/dist/builtin/workflows/src/tui/chat-surface-message.ts +157 -184
  440. package/dist/builtin/workflows/src/tui/chat-surface.ts +332 -355
  441. package/dist/builtin/workflows/src/tui/color-utils.ts +21 -30
  442. package/dist/builtin/workflows/src/tui/connectors.ts +57 -61
  443. package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +192 -200
  444. package/dist/builtin/workflows/src/tui/edge.ts +10 -9
  445. package/dist/builtin/workflows/src/tui/graph-canvas.ts +148 -134
  446. package/dist/builtin/workflows/src/tui/graph-theme.ts +139 -148
  447. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +9 -6
  448. package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +147 -183
  449. package/dist/builtin/workflows/src/tui/graph-view-input.ts +295 -323
  450. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +291 -327
  451. package/dist/builtin/workflows/src/tui/graph-view-render.ts +160 -193
  452. package/dist/builtin/workflows/src/tui/graph-view-state.ts +487 -326
  453. package/dist/builtin/workflows/src/tui/graph-view-types.ts +65 -59
  454. package/dist/builtin/workflows/src/tui/header.ts +140 -156
  455. package/dist/builtin/workflows/src/tui/host-input-form.ts +47 -45
  456. package/dist/builtin/workflows/src/tui/inline-form-card.ts +277 -266
  457. package/dist/builtin/workflows/src/tui/inline-form-editor-text.ts +61 -62
  458. package/dist/builtin/workflows/src/tui/inline-form-editor.ts +407 -412
  459. package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +203 -214
  460. package/dist/builtin/workflows/src/tui/inline-form-store.ts +24 -24
  461. package/dist/builtin/workflows/src/tui/inputs-overlay.ts +116 -129
  462. package/dist/builtin/workflows/src/tui/inputs-picker-editing.ts +111 -115
  463. package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +255 -269
  464. package/dist/builtin/workflows/src/tui/inputs-picker-render.ts +248 -236
  465. package/dist/builtin/workflows/src/tui/inputs-picker-types.ts +111 -140
  466. package/dist/builtin/workflows/src/tui/inputs-picker.ts +12 -12
  467. package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +49 -57
  468. package/dist/builtin/workflows/src/tui/layout.ts +130 -133
  469. package/dist/builtin/workflows/src/tui/mouse-input.ts +45 -47
  470. package/dist/builtin/workflows/src/tui/node-card.ts +247 -224
  471. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +383 -394
  472. package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +20 -19
  473. package/dist/builtin/workflows/src/tui/prompt-card-input.ts +183 -194
  474. package/dist/builtin/workflows/src/tui/prompt-card-render.ts +529 -318
  475. package/dist/builtin/workflows/src/tui/prompt-card-select.ts +76 -98
  476. package/dist/builtin/workflows/src/tui/prompt-card-state.ts +40 -40
  477. package/dist/builtin/workflows/src/tui/prompt-card-text.ts +76 -83
  478. package/dist/builtin/workflows/src/tui/prompt-card.ts +3 -3
  479. package/dist/builtin/workflows/src/tui/renderers.ts +6 -7
  480. package/dist/builtin/workflows/src/tui/run-detail.ts +307 -282
  481. package/dist/builtin/workflows/src/tui/run-identity-rows.ts +97 -0
  482. package/dist/builtin/workflows/src/tui/session-list.ts +19 -22
  483. package/dist/builtin/workflows/src/tui/session-overlays.ts +103 -87
  484. package/dist/builtin/workflows/src/tui/session-picker.ts +318 -282
  485. package/dist/builtin/workflows/src/tui/stage-chat-composer-drafts.ts +11 -11
  486. package/dist/builtin/workflows/src/tui/stage-chat-layout.ts +55 -62
  487. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +384 -263
  488. package/dist/builtin/workflows/src/tui/stage-chat-view-custom-ui.ts +91 -102
  489. package/dist/builtin/workflows/src/tui/stage-chat-view-delivery-activity.ts +51 -59
  490. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +189 -209
  491. package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +178 -208
  492. package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +32 -44
  493. package/dist/builtin/workflows/src/tui/stage-chat-view-pending-tools.ts +2 -4
  494. package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +82 -97
  495. package/dist/builtin/workflows/src/tui/stage-chat-view-render-settings.ts +33 -31
  496. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +468 -400
  497. package/dist/builtin/workflows/src/tui/stage-chat-view-status.ts +24 -25
  498. package/dist/builtin/workflows/src/tui/stage-chat-view-transcript.ts +181 -197
  499. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +128 -135
  500. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +211 -211
  501. package/dist/builtin/workflows/src/tui/status-helpers.ts +65 -69
  502. package/dist/builtin/workflows/src/tui/status-list.ts +349 -305
  503. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +214 -214
  504. package/dist/builtin/workflows/src/tui/submit-pane.ts +114 -130
  505. package/dist/builtin/workflows/src/tui/switcher.ts +116 -134
  506. package/dist/builtin/workflows/src/tui/text-helpers.ts +136 -145
  507. package/dist/builtin/workflows/src/tui/widget.ts +284 -295
  508. package/dist/builtin/workflows/src/tui/workflow-attach-pane-handle.ts +12 -17
  509. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +81 -82
  510. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +472 -445
  511. package/dist/builtin/workflows/src/tui/workflow-list.ts +130 -145
  512. package/dist/builtin/workflows/src/tui/workflow-notice-card.ts +127 -144
  513. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +231 -217
  514. package/dist/builtin/workflows/src/workflows/identity.ts +11 -11
  515. package/dist/builtin/workflows/src/workflows/registry.ts +66 -68
  516. package/dist/bun/cli.js.map +1 -1
  517. package/dist/bun/internal-intercom-broker.d.ts.map +1 -1
  518. package/dist/bun/internal-intercom-broker.js +1 -1
  519. package/dist/bun/internal-intercom-broker.js.map +1 -1
  520. package/dist/bun/register-bedrock.js +1 -1
  521. package/dist/bun/register-bedrock.js.map +1 -1
  522. package/dist/cli/args.d.ts.map +1 -1
  523. package/dist/cli/args.js +8 -1
  524. package/dist/cli/args.js.map +1 -1
  525. package/dist/cli/credential-print.d.ts +170 -0
  526. package/dist/cli/credential-print.d.ts.map +1 -0
  527. package/dist/cli/credential-print.js +513 -0
  528. package/dist/cli/credential-print.js.map +1 -0
  529. package/dist/cli/project-trust.d.ts +1 -1
  530. package/dist/cli/project-trust.d.ts.map +1 -1
  531. package/dist/cli/project-trust.js.map +1 -1
  532. package/dist/cli/startup-ui.d.ts.map +1 -1
  533. package/dist/cli/startup-ui.js +13 -6
  534. package/dist/cli/startup-ui.js.map +1 -1
  535. package/dist/config-self-update.d.ts.map +1 -1
  536. package/dist/config-self-update.js +5 -2
  537. package/dist/config-self-update.js.map +1 -1
  538. package/dist/config.d.ts.map +1 -1
  539. package/dist/config.js +1 -3
  540. package/dist/config.js.map +1 -1
  541. package/dist/core/agent-session-accessors.d.ts.map +1 -1
  542. package/dist/core/agent-session-accessors.js +130 -25
  543. package/dist/core/agent-session-accessors.js.map +1 -1
  544. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  545. package/dist/core/agent-session-auto-compaction.js +9 -2
  546. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  547. package/dist/core/agent-session-bash.d.ts +1 -1
  548. package/dist/core/agent-session-bash.d.ts.map +1 -1
  549. package/dist/core/agent-session-bash.js +3 -1
  550. package/dist/core/agent-session-bash.js.map +1 -1
  551. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  552. package/dist/core/agent-session-compaction.js +48 -8
  553. package/dist/core/agent-session-compaction.js.map +1 -1
  554. package/dist/core/agent-session-custom-message-commit.d.ts +1 -1
  555. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
  556. package/dist/core/agent-session-custom-message-commit.js +13 -9
  557. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  558. package/dist/core/agent-session-delivery-forwarding.d.ts +1 -1
  559. package/dist/core/agent-session-delivery-forwarding.d.ts.map +1 -1
  560. package/dist/core/agent-session-delivery-forwarding.js.map +1 -1
  561. package/dist/core/agent-session-events.d.ts.map +1 -1
  562. package/dist/core/agent-session-events.js +17 -9
  563. package/dist/core/agent-session-events.js.map +1 -1
  564. package/dist/core/agent-session-export.d.ts +1 -1
  565. package/dist/core/agent-session-export.d.ts.map +1 -1
  566. package/dist/core/agent-session-export.js.map +1 -1
  567. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  568. package/dist/core/agent-session-extension-bindings.js +12 -5
  569. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  570. package/dist/core/agent-session-message-queue.d.ts +6 -10
  571. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  572. package/dist/core/agent-session-message-queue.js +47 -24
  573. package/dist/core/agent-session-message-queue.js.map +1 -1
  574. package/dist/core/agent-session-methods.d.ts +8 -7
  575. package/dist/core/agent-session-methods.d.ts.map +1 -1
  576. package/dist/core/agent-session-methods.js.map +1 -1
  577. package/dist/core/agent-session-models.d.ts.map +1 -1
  578. package/dist/core/agent-session-models.js +1 -1
  579. package/dist/core/agent-session-models.js.map +1 -1
  580. package/dist/core/agent-session-persistent-custom-messages.d.ts +1 -1
  581. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
  582. package/dist/core/agent-session-persistent-custom-messages.js +12 -7
  583. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
  584. package/dist/core/agent-session-post-tool-compaction.d.ts +1 -1
  585. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  586. package/dist/core/agent-session-post-tool-compaction.js +11 -2
  587. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  588. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  589. package/dist/core/agent-session-prompt.js +5 -5
  590. package/dist/core/agent-session-prompt.js.map +1 -1
  591. package/dist/core/agent-session-queue-pause.d.ts.map +1 -1
  592. package/dist/core/agent-session-queue-pause.js +8 -7
  593. package/dist/core/agent-session-queue-pause.js.map +1 -1
  594. package/dist/core/agent-session-retry.d.ts.map +1 -1
  595. package/dist/core/agent-session-retry.js +30 -7
  596. package/dist/core/agent-session-retry.js.map +1 -1
  597. package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
  598. package/dist/core/agent-session-runtime-auth.js +3 -1
  599. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  600. package/dist/core/agent-session-runtime.d.ts +14 -3
  601. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  602. package/dist/core/agent-session-runtime.js +22 -4
  603. package/dist/core/agent-session-runtime.js.map +1 -1
  604. package/dist/core/agent-session-services.d.ts.map +1 -1
  605. package/dist/core/agent-session-services.js +4 -2
  606. package/dist/core/agent-session-services.js.map +1 -1
  607. package/dist/core/agent-session-state.d.ts +1 -1
  608. package/dist/core/agent-session-state.d.ts.map +1 -1
  609. package/dist/core/agent-session-state.js.map +1 -1
  610. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  611. package/dist/core/agent-session-tool-hooks.js +2 -6
  612. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  613. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  614. package/dist/core/agent-session-tool-registry.js +4 -3
  615. package/dist/core/agent-session-tool-registry.js.map +1 -1
  616. package/dist/core/agent-session-transfer.d.ts.map +1 -1
  617. package/dist/core/agent-session-transfer.js +6 -10
  618. package/dist/core/agent-session-transfer.js.map +1 -1
  619. package/dist/core/agent-session-tree.d.ts +1 -1
  620. package/dist/core/agent-session-tree.d.ts.map +1 -1
  621. package/dist/core/agent-session-tree.js +9 -0
  622. package/dist/core/agent-session-tree.js.map +1 -1
  623. package/dist/core/agent-session-types.d.ts +5 -1
  624. package/dist/core/agent-session-types.d.ts.map +1 -1
  625. package/dist/core/agent-session-types.js +4 -1
  626. package/dist/core/agent-session-types.js.map +1 -1
  627. package/dist/core/agent-session.d.ts +15 -10
  628. package/dist/core/agent-session.d.ts.map +1 -1
  629. package/dist/core/agent-session.js +9 -9
  630. package/dist/core/agent-session.js.map +1 -1
  631. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  632. package/dist/core/anthropic-thinking-guard.js +4 -2
  633. package/dist/core/anthropic-thinking-guard.js.map +1 -1
  634. package/dist/core/async/format.d.ts +1 -1
  635. package/dist/core/async/format.d.ts.map +1 -1
  636. package/dist/core/async/format.js +3 -1
  637. package/dist/core/async/format.js.map +1 -1
  638. package/dist/core/async/job-manager.d.ts.map +1 -1
  639. package/dist/core/async/job-manager.js +20 -5
  640. package/dist/core/async/job-manager.js.map +1 -1
  641. package/dist/core/async/session-manager.d.ts.map +1 -1
  642. package/dist/core/async/session-manager.js.map +1 -1
  643. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  644. package/dist/core/atomic-guide-command.js +1 -2
  645. package/dist/core/atomic-guide-command.js.map +1 -1
  646. package/dist/core/auth-guidance.d.ts.map +1 -1
  647. package/dist/core/auth-guidance.js.map +1 -1
  648. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  649. package/dist/core/auth-storage-backends.js +12 -1
  650. package/dist/core/auth-storage-backends.js.map +1 -1
  651. package/dist/core/auth-storage.d.ts +1 -1
  652. package/dist/core/auth-storage.d.ts.map +1 -1
  653. package/dist/core/auth-storage.js +4 -8
  654. package/dist/core/auth-storage.js.map +1 -1
  655. package/dist/core/bounded-model-refresh.d.ts +14 -0
  656. package/dist/core/bounded-model-refresh.d.ts.map +1 -0
  657. package/dist/core/bounded-model-refresh.js +38 -0
  658. package/dist/core/bounded-model-refresh.js.map +1 -0
  659. package/dist/core/builtin-packages.d.ts.map +1 -1
  660. package/dist/core/builtin-packages.js +1 -4
  661. package/dist/core/builtin-packages.js.map +1 -1
  662. package/dist/core/cache-stats.d.ts.map +1 -1
  663. package/dist/core/cache-stats.js +8 -6
  664. package/dist/core/cache-stats.js.map +1 -1
  665. package/dist/core/callback-activity.d.ts.map +1 -1
  666. package/dist/core/callback-activity.js.map +1 -1
  667. package/dist/core/codex-errors.d.ts.map +1 -1
  668. package/dist/core/codex-errors.js +1 -1
  669. package/dist/core/codex-errors.js.map +1 -1
  670. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  671. package/dist/core/codex-fast-mode.js.map +1 -1
  672. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  673. package/dist/core/compaction/branch-summarization.js +1 -1
  674. package/dist/core/compaction/branch-summarization.js.map +1 -1
  675. package/dist/core/compaction/compaction-boundary.d.ts.map +1 -1
  676. package/dist/core/compaction/compaction-boundary.js +10 -6
  677. package/dist/core/compaction/compaction-boundary.js.map +1 -1
  678. package/dist/core/compaction/compaction-runner.d.ts +1 -1
  679. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  680. package/dist/core/compaction/compaction-runner.js +2 -4
  681. package/dist/core/compaction/compaction-runner.js.map +1 -1
  682. package/dist/core/compaction/compaction.d.ts.map +1 -1
  683. package/dist/core/compaction/compaction.js +5 -1
  684. package/dist/core/compaction/compaction.js.map +1 -1
  685. package/dist/core/compaction/deleted-ranges.d.ts.map +1 -1
  686. package/dist/core/compaction/deleted-ranges.js.map +1 -1
  687. package/dist/core/compaction/fallback-planner.d.ts.map +1 -1
  688. package/dist/core/compaction/fallback-planner.js.map +1 -1
  689. package/dist/core/compaction/index.d.ts +6 -6
  690. package/dist/core/compaction/index.d.ts.map +1 -1
  691. package/dist/core/compaction/index.js +6 -6
  692. package/dist/core/compaction/index.js.map +1 -1
  693. package/dist/core/compaction/planner-outcome.d.ts.map +1 -1
  694. package/dist/core/compaction/planner-outcome.js.map +1 -1
  695. package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -1
  696. package/dist/core/compaction/range-planner-diagnostics.js +4 -2
  697. package/dist/core/compaction/range-planner-diagnostics.js.map +1 -1
  698. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  699. package/dist/core/compaction/range-planner.js +4 -1
  700. package/dist/core/compaction/range-planner.js.map +1 -1
  701. package/dist/core/compaction/transcript-serialization.d.ts.map +1 -1
  702. package/dist/core/compaction/transcript-serialization.js.map +1 -1
  703. package/dist/core/context-tool-pairing.d.ts +4 -4
  704. package/dist/core/context-tool-pairing.js +7 -7
  705. package/dist/core/context-tool-pairing.js.map +1 -1
  706. package/dist/core/copilot-env-routing.d.ts.map +1 -1
  707. package/dist/core/copilot-env-routing.js.map +1 -1
  708. package/dist/core/exec.d.ts.map +1 -1
  709. package/dist/core/exec.js +5 -0
  710. package/dist/core/exec.js.map +1 -1
  711. package/dist/core/experimental.d.ts.map +1 -1
  712. package/dist/core/experimental.js +2 -1
  713. package/dist/core/experimental.js.map +1 -1
  714. package/dist/core/extensions/api-types.d.ts +2 -2
  715. package/dist/core/extensions/api-types.d.ts.map +1 -1
  716. package/dist/core/extensions/api-types.js.map +1 -1
  717. package/dist/core/extensions/context-types.d.ts +7 -1
  718. package/dist/core/extensions/context-types.d.ts.map +1 -1
  719. package/dist/core/extensions/context-types.js.map +1 -1
  720. package/dist/core/extensions/index.d.ts +7 -7
  721. package/dist/core/extensions/index.d.ts.map +1 -1
  722. package/dist/core/extensions/index.js +2 -2
  723. package/dist/core/extensions/index.js.map +1 -1
  724. package/dist/core/extensions/loader-api.d.ts +1 -1
  725. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  726. package/dist/core/extensions/loader-api.js +4 -2
  727. package/dist/core/extensions/loader-api.js.map +1 -1
  728. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  729. package/dist/core/extensions/loader-core.js +2 -2
  730. package/dist/core/extensions/loader-core.js.map +1 -1
  731. package/dist/core/extensions/loader-discovery.d.ts.map +1 -1
  732. package/dist/core/extensions/loader-discovery.js.map +1 -1
  733. package/dist/core/extensions/loader-resources.d.ts.map +1 -1
  734. package/dist/core/extensions/loader-resources.js.map +1 -1
  735. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  736. package/dist/core/extensions/loader-runtime.js +23 -11
  737. package/dist/core/extensions/loader-runtime.js.map +1 -1
  738. package/dist/core/extensions/loader-virtual-modules.d.ts +17 -0
  739. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  740. package/dist/core/extensions/loader-virtual-modules.js +281 -20
  741. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  742. package/dist/core/extensions/loader.d.ts.map +1 -1
  743. package/dist/core/extensions/loader.js.map +1 -1
  744. package/dist/core/extensions/provider-types.d.ts +2 -2
  745. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  746. package/dist/core/extensions/provider-types.js.map +1 -1
  747. package/dist/core/extensions/reactive-widget.d.ts.map +1 -1
  748. package/dist/core/extensions/reactive-widget.js.map +1 -1
  749. package/dist/core/extensions/runner-context.d.ts +27 -1
  750. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  751. package/dist/core/extensions/runner-context.js +52 -0
  752. package/dist/core/extensions/runner-context.js.map +1 -1
  753. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  754. package/dist/core/extensions/runner-events.js.map +1 -1
  755. package/dist/core/extensions/runner.d.ts +1 -0
  756. package/dist/core/extensions/runner.d.ts.map +1 -1
  757. package/dist/core/extensions/runner.js +18 -6
  758. package/dist/core/extensions/runner.js.map +1 -1
  759. package/dist/core/extensions/runtime-types.d.ts +3 -1
  760. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  761. package/dist/core/extensions/runtime-types.js.map +1 -1
  762. package/dist/core/extensions/session-events.d.ts.map +1 -1
  763. package/dist/core/extensions/session-events.js.map +1 -1
  764. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  765. package/dist/core/extensions/tool-types.js.map +1 -1
  766. package/dist/core/extensions/types.d.ts +15 -2
  767. package/dist/core/extensions/types.d.ts.map +1 -1
  768. package/dist/core/extensions/types.js +1 -1
  769. package/dist/core/extensions/types.js.map +1 -1
  770. package/dist/core/extensions/ui-types.d.ts +16 -2
  771. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  772. package/dist/core/extensions/ui-types.js.map +1 -1
  773. package/dist/core/fallback-models.d.ts.map +1 -1
  774. package/dist/core/fallback-models.js +11 -2
  775. package/dist/core/fallback-models.js.map +1 -1
  776. package/dist/core/flattened-tool-arguments.d.ts.map +1 -1
  777. package/dist/core/flattened-tool-arguments.js.map +1 -1
  778. package/dist/core/footer-data-provider.d.ts +10 -0
  779. package/dist/core/footer-data-provider.d.ts.map +1 -1
  780. package/dist/core/footer-data-provider.js +5 -3
  781. package/dist/core/footer-data-provider.js.map +1 -1
  782. package/dist/core/http-dispatcher.d.ts.map +1 -1
  783. package/dist/core/http-dispatcher.js +26 -1
  784. package/dist/core/http-dispatcher.js.map +1 -1
  785. package/dist/core/keybindings.d.ts +1 -1
  786. package/dist/core/keybindings.d.ts.map +1 -1
  787. package/dist/core/keybindings.js.map +1 -1
  788. package/dist/core/messages.d.ts +18 -6
  789. package/dist/core/messages.d.ts.map +1 -1
  790. package/dist/core/messages.js +46 -18
  791. package/dist/core/messages.js.map +1 -1
  792. package/dist/core/model-capabilities.d.ts.map +1 -1
  793. package/dist/core/model-capabilities.js +1 -2
  794. package/dist/core/model-capabilities.js.map +1 -1
  795. package/dist/core/model-refresh-timeout.d.ts +9 -0
  796. package/dist/core/model-refresh-timeout.d.ts.map +1 -0
  797. package/dist/core/model-refresh-timeout.js +9 -0
  798. package/dist/core/model-refresh-timeout.js.map +1 -0
  799. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  800. package/dist/core/model-resolver-cli.js.map +1 -1
  801. package/dist/core/model-resolver-defaults.js.map +1 -1
  802. package/dist/core/model-resolver-initial.d.ts +1 -1
  803. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  804. package/dist/core/model-resolver-initial.js +1 -1
  805. package/dist/core/model-resolver-initial.js.map +1 -1
  806. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  807. package/dist/core/model-resolver-patterns.js.map +1 -1
  808. package/dist/core/model-resolver-scope.d.ts +1 -1
  809. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  810. package/dist/core/model-resolver-scope.js +12 -2
  811. package/dist/core/model-resolver-scope.js.map +1 -1
  812. package/dist/core/model-resolver-types.d.ts.map +1 -1
  813. package/dist/core/model-resolver-types.js.map +1 -1
  814. package/dist/core/model-resolver.d.ts +3 -3
  815. package/dist/core/model-resolver.d.ts.map +1 -1
  816. package/dist/core/model-resolver.js +1 -1
  817. package/dist/core/model-resolver.js.map +1 -1
  818. package/dist/core/model-runtime-auth.d.ts.map +1 -1
  819. package/dist/core/model-runtime-auth.js +5 -2
  820. package/dist/core/model-runtime-auth.js.map +1 -1
  821. package/dist/core/model-runtime-restoration.d.ts.map +1 -1
  822. package/dist/core/model-runtime-restoration.js +2 -2
  823. package/dist/core/model-runtime-restoration.js.map +1 -1
  824. package/dist/core/model-runtime-snapshot.d.ts +3 -0
  825. package/dist/core/model-runtime-snapshot.d.ts.map +1 -1
  826. package/dist/core/model-runtime-snapshot.js +59 -0
  827. package/dist/core/model-runtime-snapshot.js.map +1 -1
  828. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  829. package/dist/core/model-runtime-streaming.js.map +1 -1
  830. package/dist/core/model-runtime.d.ts +7 -1
  831. package/dist/core/model-runtime.d.ts.map +1 -1
  832. package/dist/core/model-runtime.js +79 -22
  833. package/dist/core/model-runtime.js.map +1 -1
  834. package/dist/core/oauth-login.d.ts.map +1 -1
  835. package/dist/core/oauth-login.js +7 -2
  836. package/dist/core/oauth-login.js.map +1 -1
  837. package/dist/core/oauth-provider-metadata.d.ts.map +1 -1
  838. package/dist/core/oauth-provider-metadata.js +20 -6
  839. package/dist/core/oauth-provider-metadata.js.map +1 -1
  840. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
  841. package/dist/core/output-guard.d.ts +44 -0
  842. package/dist/core/output-guard.d.ts.map +1 -1
  843. package/dist/core/output-guard.js +63 -0
  844. package/dist/core/output-guard.js.map +1 -1
  845. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  846. package/dist/core/package-manager-auto-resources.js +6 -1
  847. package/dist/core/package-manager-auto-resources.js.map +1 -1
  848. package/dist/core/package-manager-git.d.ts.map +1 -1
  849. package/dist/core/package-manager-git.js +27 -11
  850. package/dist/core/package-manager-git.js.map +1 -1
  851. package/dist/core/package-manager-npm.d.ts.map +1 -1
  852. package/dist/core/package-manager-npm.js +4 -2
  853. package/dist/core/package-manager-npm.js.map +1 -1
  854. package/dist/core/package-manager-operations.d.ts.map +1 -1
  855. package/dist/core/package-manager-operations.js +2 -2
  856. package/dist/core/package-manager-operations.js.map +1 -1
  857. package/dist/core/package-manager-paths.d.ts.map +1 -1
  858. package/dist/core/package-manager-paths.js.map +1 -1
  859. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  860. package/dist/core/package-manager-resolver.js +19 -16
  861. package/dist/core/package-manager-resolver.js.map +1 -1
  862. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  863. package/dist/core/package-manager-resource-collector.js +6 -6
  864. package/dist/core/package-manager-resource-collector.js.map +1 -1
  865. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  866. package/dist/core/package-manager-resource-files.js +4 -3
  867. package/dist/core/package-manager-resource-files.js.map +1 -1
  868. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  869. package/dist/core/package-manager-resource-patterns.js.map +1 -1
  870. package/dist/core/package-manager-settings.d.ts.map +1 -1
  871. package/dist/core/package-manager-settings.js +3 -2
  872. package/dist/core/package-manager-settings.js.map +1 -1
  873. package/dist/core/package-manager-source.d.ts.map +1 -1
  874. package/dist/core/package-manager-source.js +1 -1
  875. package/dist/core/package-manager-source.js.map +1 -1
  876. package/dist/core/package-manager.d.ts +1 -1
  877. package/dist/core/package-manager.d.ts.map +1 -1
  878. package/dist/core/package-manager.js +2 -3
  879. package/dist/core/package-manager.js.map +1 -1
  880. package/dist/core/prompt-templates-async.d.ts.map +1 -1
  881. package/dist/core/prompt-templates-async.js +15 -7
  882. package/dist/core/prompt-templates-async.js.map +1 -1
  883. package/dist/core/prompt-templates.d.ts.map +1 -1
  884. package/dist/core/prompt-templates.js +1 -3
  885. package/dist/core/prompt-templates.js.map +1 -1
  886. package/dist/core/provider-composer-internal.d.ts +1 -1
  887. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  888. package/dist/core/provider-composer-internal.js.map +1 -1
  889. package/dist/core/provider-composer.d.ts +1 -1
  890. package/dist/core/provider-composer.d.ts.map +1 -1
  891. package/dist/core/provider-composer.js.map +1 -1
  892. package/dist/core/provider-context-usage.d.ts.map +1 -1
  893. package/dist/core/provider-context-usage.js +2 -1
  894. package/dist/core/provider-context-usage.js.map +1 -1
  895. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  896. package/dist/core/resource-loader-assets.js +31 -7
  897. package/dist/core/resource-loader-assets.js.map +1 -1
  898. package/dist/core/resource-loader-context-files.d.ts +6 -0
  899. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  900. package/dist/core/resource-loader-context-files.js +83 -4
  901. package/dist/core/resource-loader-context-files.js.map +1 -1
  902. package/dist/core/resource-loader-core.d.ts +12 -3
  903. package/dist/core/resource-loader-core.d.ts.map +1 -1
  904. package/dist/core/resource-loader-core.js +36 -19
  905. package/dist/core/resource-loader-core.js.map +1 -1
  906. package/dist/core/resource-loader-discovery.d.ts.map +1 -1
  907. package/dist/core/resource-loader-discovery.js.map +1 -1
  908. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  909. package/dist/core/resource-loader-extensions.js +33 -21
  910. package/dist/core/resource-loader-extensions.js.map +1 -1
  911. package/dist/core/resource-loader-internals.d.ts +13 -6
  912. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  913. package/dist/core/resource-loader-internals.js.map +1 -1
  914. package/dist/core/resource-loader-package-resources.d.ts.map +1 -1
  915. package/dist/core/resource-loader-package-resources.js +1 -1
  916. package/dist/core/resource-loader-package-resources.js.map +1 -1
  917. package/dist/core/resource-loader-paths.js.map +1 -1
  918. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  919. package/dist/core/resource-loader-reload.js +28 -13
  920. package/dist/core/resource-loader-reload.js.map +1 -1
  921. package/dist/core/resource-loader-source-info.d.ts +1 -1
  922. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  923. package/dist/core/resource-loader-source-info.js +1 -1
  924. package/dist/core/resource-loader-source-info.js.map +1 -1
  925. package/dist/core/resource-loader-types.d.ts +9 -3
  926. package/dist/core/resource-loader-types.d.ts.map +1 -1
  927. package/dist/core/resource-loader-types.js.map +1 -1
  928. package/dist/core/resource-loader.d.ts +1 -1
  929. package/dist/core/resource-loader.d.ts.map +1 -1
  930. package/dist/core/resource-loader.js +1 -1
  931. package/dist/core/resource-loader.js.map +1 -1
  932. package/dist/core/sdk-exports.d.ts +1 -1
  933. package/dist/core/sdk-exports.d.ts.map +1 -1
  934. package/dist/core/sdk-exports.js +2 -2
  935. package/dist/core/sdk-exports.js.map +1 -1
  936. package/dist/core/sdk-types.d.ts +3 -3
  937. package/dist/core/sdk-types.d.ts.map +1 -1
  938. package/dist/core/sdk-types.js.map +1 -1
  939. package/dist/core/sdk.d.ts +1 -1
  940. package/dist/core/sdk.d.ts.map +1 -1
  941. package/dist/core/sdk.js +17 -23
  942. package/dist/core/sdk.js.map +1 -1
  943. package/dist/core/session-manager-archive.d.ts.map +1 -1
  944. package/dist/core/session-manager-archive.js +5 -2
  945. package/dist/core/session-manager-archive.js.map +1 -1
  946. package/dist/core/session-manager-classification.js +3 -3
  947. package/dist/core/session-manager-classification.js.map +1 -1
  948. package/dist/core/session-manager-core.d.ts +1 -1
  949. package/dist/core/session-manager-core.d.ts.map +1 -1
  950. package/dist/core/session-manager-core.js +5 -5
  951. package/dist/core/session-manager-core.js.map +1 -1
  952. package/dist/core/session-manager-entries.d.ts +2 -2
  953. package/dist/core/session-manager-entries.d.ts.map +1 -1
  954. package/dist/core/session-manager-entries.js +2 -1
  955. package/dist/core/session-manager-entries.js.map +1 -1
  956. package/dist/core/session-manager-history.d.ts.map +1 -1
  957. package/dist/core/session-manager-history.js +14 -6
  958. package/dist/core/session-manager-history.js.map +1 -1
  959. package/dist/core/session-manager-list.d.ts.map +1 -1
  960. package/dist/core/session-manager-list.js +1 -1
  961. package/dist/core/session-manager-list.js.map +1 -1
  962. package/dist/core/session-manager-migrations.js.map +1 -1
  963. package/dist/core/session-manager-storage.d.ts.map +1 -1
  964. package/dist/core/session-manager-storage.js.map +1 -1
  965. package/dist/core/session-manager-types.d.ts +3 -0
  966. package/dist/core/session-manager-types.d.ts.map +1 -1
  967. package/dist/core/session-manager-types.js.map +1 -1
  968. package/dist/core/session-manager.d.ts +4 -4
  969. package/dist/core/session-manager.d.ts.map +1 -1
  970. package/dist/core/session-manager.js +2 -2
  971. package/dist/core/session-manager.js.map +1 -1
  972. package/dist/core/settings-manager-core.d.ts.map +1 -1
  973. package/dist/core/settings-manager-core.js.map +1 -1
  974. package/dist/core/settings-manager-ui-accessors.js +2 -1
  975. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  976. package/dist/core/settings-storage.d.ts.map +1 -1
  977. package/dist/core/settings-storage.js +3 -3
  978. package/dist/core/settings-storage.js.map +1 -1
  979. package/dist/core/settings-types.d.ts.map +1 -1
  980. package/dist/core/settings-types.js.map +1 -1
  981. package/dist/core/skills-async.d.ts.map +1 -1
  982. package/dist/core/skills-async.js +18 -8
  983. package/dist/core/skills-async.js.map +1 -1
  984. package/dist/core/slash-commands.d.ts.map +1 -1
  985. package/dist/core/slash-commands.js +76 -19
  986. package/dist/core/slash-commands.js.map +1 -1
  987. package/dist/core/system-prompt.d.ts.map +1 -1
  988. package/dist/core/system-prompt.js +5 -19
  989. package/dist/core/system-prompt.js.map +1 -1
  990. package/dist/core/thinking-blocks.d.ts.map +1 -1
  991. package/dist/core/thinking-blocks.js +2 -2
  992. package/dist/core/thinking-blocks.js.map +1 -1
  993. package/dist/core/tools/artifact-protocol.d.ts.map +1 -1
  994. package/dist/core/tools/artifact-protocol.js.map +1 -1
  995. package/dist/core/tools/artifacts.d.ts.map +1 -1
  996. package/dist/core/tools/artifacts.js.map +1 -1
  997. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  998. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  999. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts +1 -1
  1000. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts.map +1 -1
  1001. package/dist/core/tools/ask-user-question/state/build-questionnaire.js +1 -1
  1002. package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
  1003. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  1004. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +2 -4
  1005. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  1006. package/dist/core/tools/ask-user-question/state/state-reducer.d.ts.map +1 -1
  1007. package/dist/core/tools/ask-user-question/state/state-reducer.js.map +1 -1
  1008. package/dist/core/tools/ask-user-question/view/body-residual-spacer.d.ts.map +1 -1
  1009. package/dist/core/tools/ask-user-question/view/body-residual-spacer.js.map +1 -1
  1010. package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts.map +1 -1
  1011. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
  1012. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts +1 -1
  1013. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts.map +1 -1
  1014. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
  1015. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts +1 -1
  1016. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts.map +1 -1
  1017. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js +1 -3
  1018. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
  1019. package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts.map +1 -1
  1020. package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
  1021. package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts.map +1 -1
  1022. package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
  1023. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts +1 -1
  1024. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts.map +1 -1
  1025. package/dist/core/tools/ask-user-question/view/dialog-builder.js +1 -1
  1026. package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
  1027. package/dist/core/tools/ask-user-question/view/props-adapter.d.ts.map +1 -1
  1028. package/dist/core/tools/ask-user-question/view/props-adapter.js +2 -4
  1029. package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
  1030. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts +1 -1
  1031. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts.map +1 -1
  1032. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js +2 -9
  1033. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
  1034. package/dist/core/tools/bash-async-execution.d.ts.map +1 -1
  1035. package/dist/core/tools/bash-async-execution.js +11 -4
  1036. package/dist/core/tools/bash-async-execution.js.map +1 -1
  1037. package/dist/core/tools/bash-async-jobs.d.ts.map +1 -1
  1038. package/dist/core/tools/bash-async-jobs.js +14 -2
  1039. package/dist/core/tools/bash-async-jobs.js.map +1 -1
  1040. package/dist/core/tools/bash-async-output.d.ts.map +1 -1
  1041. package/dist/core/tools/bash-async-output.js +6 -2
  1042. package/dist/core/tools/bash-async-output.js.map +1 -1
  1043. package/dist/core/tools/bash-interceptor.d.ts.map +1 -1
  1044. package/dist/core/tools/bash-interceptor.js +20 -4
  1045. package/dist/core/tools/bash-interceptor.js.map +1 -1
  1046. package/dist/core/tools/bash-leading-cd.d.ts.map +1 -1
  1047. package/dist/core/tools/bash-leading-cd.js +9 -3
  1048. package/dist/core/tools/bash-leading-cd.js.map +1 -1
  1049. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  1050. package/dist/core/tools/bash-pty-native.js.map +1 -1
  1051. package/dist/core/tools/bash-session-environment.d.ts.map +1 -1
  1052. package/dist/core/tools/bash-session-environment.js +24 -12
  1053. package/dist/core/tools/bash-session-environment.js.map +1 -1
  1054. package/dist/core/tools/bash.d.ts.map +1 -1
  1055. package/dist/core/tools/bash.js +123 -27
  1056. package/dist/core/tools/bash.js.map +1 -1
  1057. package/dist/core/tools/block-resolver.d.ts.map +1 -1
  1058. package/dist/core/tools/block-resolver.js.map +1 -1
  1059. package/dist/core/tools/conflict-registry.d.ts.map +1 -1
  1060. package/dist/core/tools/conflict-registry.js.map +1 -1
  1061. package/dist/core/tools/directory-tree.d.ts.map +1 -1
  1062. package/dist/core/tools/directory-tree.js +20 -4
  1063. package/dist/core/tools/directory-tree.js.map +1 -1
  1064. package/dist/core/tools/edit.d.ts.map +1 -1
  1065. package/dist/core/tools/edit.js +37 -13
  1066. package/dist/core/tools/edit.js.map +1 -1
  1067. package/dist/core/tools/fetch-url.d.ts.map +1 -1
  1068. package/dist/core/tools/fetch-url.js +127 -41
  1069. package/dist/core/tools/fetch-url.js.map +1 -1
  1070. package/dist/core/tools/find.d.ts.map +1 -1
  1071. package/dist/core/tools/find.js +176 -46
  1072. package/dist/core/tools/find.js.map +1 -1
  1073. package/dist/core/tools/grep.d.ts.map +1 -1
  1074. package/dist/core/tools/grep.js +43 -10
  1075. package/dist/core/tools/grep.js.map +1 -1
  1076. package/dist/core/tools/hashline-engine/apply.d.ts.map +1 -1
  1077. package/dist/core/tools/hashline-engine/apply.js +6 -6
  1078. package/dist/core/tools/hashline-engine/apply.js.map +1 -1
  1079. package/dist/core/tools/hashline-engine/block.js +1 -1
  1080. package/dist/core/tools/hashline-engine/block.js.map +1 -1
  1081. package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
  1082. package/dist/core/tools/hashline-engine/format.js +1 -1
  1083. package/dist/core/tools/hashline-engine/format.js.map +1 -1
  1084. package/dist/core/tools/hashline-engine/input.d.ts.map +1 -1
  1085. package/dist/core/tools/hashline-engine/input.js +7 -7
  1086. package/dist/core/tools/hashline-engine/input.js.map +1 -1
  1087. package/dist/core/tools/hashline-engine/parser.js +1 -1
  1088. package/dist/core/tools/hashline-engine/parser.js.map +1 -1
  1089. package/dist/core/tools/hashline-engine/patcher.js +5 -5
  1090. package/dist/core/tools/hashline-engine/patcher.js.map +1 -1
  1091. package/dist/core/tools/hashline-engine/prefixes.js +4 -4
  1092. package/dist/core/tools/hashline-engine/prefixes.js.map +1 -1
  1093. package/dist/core/tools/hashline-engine/recovery.d.ts.map +1 -1
  1094. package/dist/core/tools/hashline-engine/recovery.js +4 -2
  1095. package/dist/core/tools/hashline-engine/recovery.js.map +1 -1
  1096. package/dist/core/tools/hashline-engine/snapshots.js +5 -5
  1097. package/dist/core/tools/hashline-engine/snapshots.js.map +1 -1
  1098. package/dist/core/tools/hashline.d.ts.map +1 -1
  1099. package/dist/core/tools/hashline.js +24 -13
  1100. package/dist/core/tools/hashline.js.map +1 -1
  1101. package/dist/core/tools/index.d.ts +6 -6
  1102. package/dist/core/tools/index.d.ts.map +1 -1
  1103. package/dist/core/tools/index.js +6 -6
  1104. package/dist/core/tools/index.js.map +1 -1
  1105. package/dist/core/tools/ls.d.ts.map +1 -1
  1106. package/dist/core/tools/ls.js +2 -1
  1107. package/dist/core/tools/ls.js.map +1 -1
  1108. package/dist/core/tools/notebook.d.ts.map +1 -1
  1109. package/dist/core/tools/notebook.js +13 -3
  1110. package/dist/core/tools/notebook.js.map +1 -1
  1111. package/dist/core/tools/read-document-extract.d.ts.map +1 -1
  1112. package/dist/core/tools/read-document-extract.js +30 -10
  1113. package/dist/core/tools/read-document-extract.js.map +1 -1
  1114. package/dist/core/tools/read-selectors.d.ts.map +1 -1
  1115. package/dist/core/tools/read-selectors.js +59 -15
  1116. package/dist/core/tools/read-selectors.js.map +1 -1
  1117. package/dist/core/tools/read-url.d.ts.map +1 -1
  1118. package/dist/core/tools/read-url.js +41 -7
  1119. package/dist/core/tools/read-url.js.map +1 -1
  1120. package/dist/core/tools/read.d.ts.map +1 -1
  1121. package/dist/core/tools/read.js +306 -71
  1122. package/dist/core/tools/read.js.map +1 -1
  1123. package/dist/core/tools/resource-selectors.d.ts +4 -0
  1124. package/dist/core/tools/resource-selectors.d.ts.map +1 -1
  1125. package/dist/core/tools/resource-selectors.js +324 -84
  1126. package/dist/core/tools/resource-selectors.js.map +1 -1
  1127. package/dist/core/tools/search-details.d.ts.map +1 -1
  1128. package/dist/core/tools/search-details.js +13 -1
  1129. package/dist/core/tools/search-details.js.map +1 -1
  1130. package/dist/core/tools/search-line-ranges.d.ts.map +1 -1
  1131. package/dist/core/tools/search-line-ranges.js +5 -2
  1132. package/dist/core/tools/search-line-ranges.js.map +1 -1
  1133. package/dist/core/tools/search-native.d.ts.map +1 -1
  1134. package/dist/core/tools/search-native.js.map +1 -1
  1135. package/dist/core/tools/search.d.ts.map +1 -1
  1136. package/dist/core/tools/search.js +244 -90
  1137. package/dist/core/tools/search.js.map +1 -1
  1138. package/dist/core/tools/structured-output.d.ts +1 -1
  1139. package/dist/core/tools/structured-output.d.ts.map +1 -1
  1140. package/dist/core/tools/structured-output.js.map +1 -1
  1141. package/dist/core/tools/todos-execute.d.ts.map +1 -1
  1142. package/dist/core/tools/todos-execute.js +4 -4
  1143. package/dist/core/tools/todos-execute.js.map +1 -1
  1144. package/dist/core/tools/todos-locks.d.ts.map +1 -1
  1145. package/dist/core/tools/todos-locks.js.map +1 -1
  1146. package/dist/core/tools/todos-mutations.js +1 -1
  1147. package/dist/core/tools/todos-mutations.js.map +1 -1
  1148. package/dist/core/tools/todos-paths.js +2 -2
  1149. package/dist/core/tools/todos-paths.js.map +1 -1
  1150. package/dist/core/tools/todos-render.d.ts.map +1 -1
  1151. package/dist/core/tools/todos-render.js +2 -2
  1152. package/dist/core/tools/todos-render.js.map +1 -1
  1153. package/dist/core/tools/todos-storage.d.ts.map +1 -1
  1154. package/dist/core/tools/todos-storage.js +1 -2
  1155. package/dist/core/tools/todos-storage.js.map +1 -1
  1156. package/dist/core/tools/todos-types.d.ts.map +1 -1
  1157. package/dist/core/tools/todos-types.js +1 -11
  1158. package/dist/core/tools/todos-types.js.map +1 -1
  1159. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  1160. package/dist/core/tools/tool-definition-wrapper.js +2 -6
  1161. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  1162. package/dist/core/tools/url-ip-guards.d.ts.map +1 -1
  1163. package/dist/core/tools/url-ip-guards.js +27 -17
  1164. package/dist/core/tools/url-ip-guards.js.map +1 -1
  1165. package/dist/core/tools/write.d.ts.map +1 -1
  1166. package/dist/core/tools/write.js +88 -29
  1167. package/dist/core/tools/write.js.map +1 -1
  1168. package/dist/core/usage-totals.d.ts.map +1 -1
  1169. package/dist/core/usage-totals.js +5 -2
  1170. package/dist/core/usage-totals.js.map +1 -1
  1171. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  1172. package/dist/core/workflow-stage-admission.js +8 -2
  1173. package/dist/core/workflow-stage-admission.js.map +1 -1
  1174. package/dist/extensions/llama/provider.js +1 -1
  1175. package/dist/extensions/llama/provider.js.map +1 -1
  1176. package/dist/extensions/llama/ui.d.ts.map +1 -1
  1177. package/dist/extensions/llama/ui.js.map +1 -1
  1178. package/dist/index-extensions.d.ts +2 -2
  1179. package/dist/index-extensions.d.ts.map +1 -1
  1180. package/dist/index-extensions.js +1 -1
  1181. package/dist/index-extensions.js.map +1 -1
  1182. package/dist/index.d.ts +21 -21
  1183. package/dist/index.d.ts.map +1 -1
  1184. package/dist/index.js +23 -23
  1185. package/dist/index.js.map +1 -1
  1186. package/dist/main-app-mode.d.ts +1 -0
  1187. package/dist/main-app-mode.d.ts.map +1 -1
  1188. package/dist/main-app-mode.js +3 -0
  1189. package/dist/main-app-mode.js.map +1 -1
  1190. package/dist/main-deferred-startup.d.ts +1 -1
  1191. package/dist/main-deferred-startup.d.ts.map +1 -1
  1192. package/dist/main-deferred-startup.js +16 -15
  1193. package/dist/main-deferred-startup.js.map +1 -1
  1194. package/dist/main-early-input.js.map +1 -1
  1195. package/dist/main-first-time-setup.d.ts +1 -1
  1196. package/dist/main-first-time-setup.d.ts.map +1 -1
  1197. package/dist/main-first-time-setup.js.map +1 -1
  1198. package/dist/main-session-options.d.ts +1 -1
  1199. package/dist/main-session-options.d.ts.map +1 -1
  1200. package/dist/main-session-options.js.map +1 -1
  1201. package/dist/main-session.d.ts.map +1 -1
  1202. package/dist/main-session.js +4 -4
  1203. package/dist/main-session.js.map +1 -1
  1204. package/dist/main.d.ts +1 -1
  1205. package/dist/main.d.ts.map +1 -1
  1206. package/dist/main.js +149 -39
  1207. package/dist/main.js.map +1 -1
  1208. package/dist/migrations-config-values.d.ts.map +1 -1
  1209. package/dist/migrations-config-values.js +3 -1
  1210. package/dist/migrations-config-values.js.map +1 -1
  1211. package/dist/migrations.d.ts.map +1 -1
  1212. package/dist/migrations.js.map +1 -1
  1213. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  1214. package/dist/modes/interactive/chat-input-actions.js +3 -6
  1215. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  1216. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
  1217. package/dist/modes/interactive/components/atomic-banner.js +7 -5
  1218. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  1219. package/dist/modes/interactive/components/atomic-working-status.d.ts.map +1 -1
  1220. package/dist/modes/interactive/components/atomic-working-status.js +26 -13
  1221. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  1222. package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -1
  1223. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  1224. package/dist/modes/interactive/components/chat-message-renderer.js +6 -5
  1225. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  1226. package/dist/modes/interactive/components/chat-session-host-actions.d.ts +10 -4
  1227. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  1228. package/dist/modes/interactive/components/chat-session-host-actions.js +27 -22
  1229. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  1230. package/dist/modes/interactive/components/chat-session-host-editor.d.ts +7 -5
  1231. package/dist/modes/interactive/components/chat-session-host-editor.d.ts.map +1 -1
  1232. package/dist/modes/interactive/components/chat-session-host-editor.js +11 -6
  1233. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
  1234. package/dist/modes/interactive/components/chat-session-host-events.d.ts +3 -0
  1235. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  1236. package/dist/modes/interactive/components/chat-session-host-events.js +12 -10
  1237. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  1238. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +1 -1
  1239. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  1240. package/dist/modes/interactive/components/chat-session-host-rendering.js +22 -7
  1241. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  1242. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +9 -2
  1243. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  1244. package/dist/modes/interactive/components/chat-session-host-runtime.js +15 -13
  1245. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
  1246. package/dist/modes/interactive/components/chat-session-host-state.d.ts +2 -2
  1247. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  1248. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  1249. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts.map +1 -1
  1250. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js.map +1 -1
  1251. package/dist/modes/interactive/components/chat-session-host-types.d.ts +9 -2
  1252. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  1253. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
  1254. package/dist/modes/interactive/components/chat-session-host-utils.d.ts +1 -1
  1255. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
  1256. package/dist/modes/interactive/components/chat-session-host-utils.js +3 -8
  1257. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
  1258. package/dist/modes/interactive/components/chat-session-host.d.ts +20 -6
  1259. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  1260. package/dist/modes/interactive/components/chat-session-host.js +35 -6
  1261. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  1262. package/dist/modes/interactive/components/chat-transcript.d.ts +1 -1
  1263. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  1264. package/dist/modes/interactive/components/chat-transcript.js +5 -12
  1265. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  1266. package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
  1267. package/dist/modes/interactive/components/compaction-boundary-message.js +18 -7
  1268. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  1269. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  1270. package/dist/modes/interactive/components/config-selector-list.js +4 -2
  1271. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  1272. package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -1
  1273. package/dist/modes/interactive/components/config-selector-project-scope.js +2 -4
  1274. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
  1275. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  1276. package/dist/modes/interactive/components/config-selector.js +15 -6
  1277. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  1278. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  1279. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  1280. package/dist/modes/interactive/components/custom-editor.d.ts +11 -0
  1281. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  1282. package/dist/modes/interactive/components/custom-editor.js +21 -5
  1283. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  1284. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  1285. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  1286. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  1287. package/dist/modes/interactive/components/custom-message.js +1 -3
  1288. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  1289. package/dist/modes/interactive/components/diff.js +2 -2
  1290. package/dist/modes/interactive/components/diff.js.map +1 -1
  1291. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  1292. package/dist/modes/interactive/components/extension-editor.js +1 -1
  1293. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  1294. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  1295. package/dist/modes/interactive/components/first-time-setup.js +15 -4
  1296. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  1297. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  1298. package/dist/modes/interactive/components/footer.js +16 -15
  1299. package/dist/modes/interactive/components/footer.js.map +1 -1
  1300. package/dist/modes/interactive/components/host-input-form-mount.d.ts.map +1 -1
  1301. package/dist/modes/interactive/components/host-input-form-mount.js +4 -2
  1302. package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -1
  1303. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  1304. package/dist/modes/interactive/components/host-input-form.js +55 -21
  1305. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  1306. package/dist/modes/interactive/components/host-session-picker.d.ts.map +1 -1
  1307. package/dist/modes/interactive/components/host-session-picker.js +8 -3
  1308. package/dist/modes/interactive/components/host-session-picker.js.map +1 -1
  1309. package/dist/modes/interactive/components/index.d.ts +8 -7
  1310. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  1311. package/dist/modes/interactive/components/index.js +4 -4
  1312. package/dist/modes/interactive/components/index.js.map +1 -1
  1313. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  1314. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  1315. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  1316. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  1317. package/dist/modes/interactive/components/model-selector.d.ts +0 -1
  1318. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1319. package/dist/modes/interactive/components/model-selector.js +29 -36
  1320. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1321. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  1322. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  1323. package/dist/modes/interactive/components/oauth-selector.js +12 -6
  1324. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  1325. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  1326. package/dist/modes/interactive/components/scoped-models-selector.js +5 -1
  1327. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  1328. package/dist/modes/interactive/components/session-selector-list.d.ts +1 -1
  1329. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -1
  1330. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  1331. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  1332. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  1333. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  1334. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  1335. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  1336. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  1337. package/dist/modes/interactive/components/startup-identity.d.ts.map +1 -1
  1338. package/dist/modes/interactive/components/startup-identity.js.map +1 -1
  1339. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  1340. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  1341. package/dist/modes/interactive/components/tree-selector-model.js +1 -9
  1342. package/dist/modes/interactive/components/tree-selector-model.js.map +1 -1
  1343. package/dist/modes/interactive/components/tree-selector-viewport.d.ts.map +1 -1
  1344. package/dist/modes/interactive/components/tree-selector-viewport.js.map +1 -1
  1345. package/dist/modes/interactive/components/working-status.d.ts.map +1 -1
  1346. package/dist/modes/interactive/components/working-status.js +1 -1
  1347. package/dist/modes/interactive/components/working-status.js.map +1 -1
  1348. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  1349. package/dist/modes/interactive/external-editor.js.map +1 -1
  1350. package/dist/modes/interactive/interactive-agent-events.js +20 -13
  1351. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  1352. package/dist/modes/interactive/interactive-auth-login.js +6 -6
  1353. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  1354. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  1355. package/dist/modes/interactive/interactive-auth-routing.js +3 -6
  1356. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  1357. package/dist/modes/interactive/interactive-autocomplete.js +4 -10
  1358. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  1359. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
  1360. package/dist/modes/interactive/interactive-bash-compact.js +18 -8
  1361. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  1362. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  1363. package/dist/modes/interactive/interactive-deferred-startup.js +6 -2
  1364. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  1365. package/dist/modes/interactive/interactive-editor-actions.js +6 -10
  1366. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  1367. package/dist/modes/interactive/interactive-extension-context.js +4 -4
  1368. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  1369. package/dist/modes/interactive/interactive-extension-custom-ui.js +15 -8
  1370. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  1371. package/dist/modes/interactive/interactive-extension-dialogs.js +50 -24
  1372. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  1373. package/dist/modes/interactive/interactive-extension-runtime.js +9 -6
  1374. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  1375. package/dist/modes/interactive/interactive-extension-widgets.js +1 -1
  1376. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  1377. package/dist/modes/interactive/interactive-global-clear.d.ts +45 -1
  1378. package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -1
  1379. package/dist/modes/interactive/interactive-global-clear.js +60 -4
  1380. package/dist/modes/interactive/interactive-global-clear.js.map +1 -1
  1381. package/dist/modes/interactive/interactive-hotkeys-debug.js +2 -3
  1382. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  1383. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  1384. package/dist/modes/interactive/interactive-input-handling.js +56 -21
  1385. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  1386. package/dist/modes/interactive/interactive-key-identity.d.ts +22 -0
  1387. package/dist/modes/interactive/interactive-key-identity.d.ts.map +1 -0
  1388. package/dist/modes/interactive/interactive-key-identity.js +29 -0
  1389. package/dist/modes/interactive/interactive-key-identity.js.map +1 -0
  1390. package/dist/modes/interactive/interactive-mode-base.d.ts +7 -6
  1391. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  1392. package/dist/modes/interactive/interactive-mode-base.js +12 -12
  1393. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  1394. package/dist/modes/interactive/interactive-mode-deps.d.ts +20 -20
  1395. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  1396. package/dist/modes/interactive/interactive-mode-deps.js +16 -16
  1397. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  1398. package/dist/modes/interactive/interactive-mode-helpers.d.ts +1 -1
  1399. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  1400. package/dist/modes/interactive/interactive-mode-helpers.js +3 -9
  1401. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  1402. package/dist/modes/interactive/interactive-mode-surface.d.ts +12 -8
  1403. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  1404. package/dist/modes/interactive/interactive-mode-surface.js +1 -0
  1405. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  1406. package/dist/modes/interactive/interactive-mode-types.d.ts +2 -2
  1407. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  1408. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  1409. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
  1410. package/dist/modes/interactive/interactive-model-catalog-startup.js +2 -1
  1411. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
  1412. package/dist/modes/interactive/interactive-model-routing.js +10 -7
  1413. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  1414. package/dist/modes/interactive/interactive-onboarding.js +7 -7
  1415. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  1416. package/dist/modes/interactive/interactive-pause.d.ts +3 -1
  1417. package/dist/modes/interactive/interactive-pause.d.ts.map +1 -1
  1418. package/dist/modes/interactive/interactive-pause.js +5 -1
  1419. package/dist/modes/interactive/interactive-pause.js.map +1 -1
  1420. package/dist/modes/interactive/interactive-process-lifecycle.js +38 -8
  1421. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  1422. package/dist/modes/interactive/interactive-prompt-restore.d.ts +58 -0
  1423. package/dist/modes/interactive/interactive-prompt-restore.d.ts.map +1 -0
  1424. package/dist/modes/interactive/interactive-prompt-restore.js +87 -0
  1425. package/dist/modes/interactive/interactive-prompt-restore.js.map +1 -0
  1426. package/dist/modes/interactive/interactive-prompt-turn.js +18 -3
  1427. package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -1
  1428. package/dist/modes/interactive/interactive-queueing.js +6 -10
  1429. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  1430. package/dist/modes/interactive/interactive-render-chat.js +47 -36
  1431. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  1432. package/dist/modes/interactive/interactive-resource-disclosure.js +1 -3
  1433. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  1434. package/dist/modes/interactive/interactive-resource-paths.js +6 -19
  1435. package/dist/modes/interactive/interactive-resource-paths.js.map +1 -1
  1436. package/dist/modes/interactive/interactive-resource-rendering.js +15 -16
  1437. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  1438. package/dist/modes/interactive/interactive-selectors.js +3 -5
  1439. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  1440. package/dist/modes/interactive/interactive-session-routing.js +16 -4
  1441. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  1442. package/dist/modes/interactive/interactive-session-runtime.js +11 -0
  1443. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  1444. package/dist/modes/interactive/interactive-slash-commands.js +11 -6
  1445. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  1446. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  1447. package/dist/modes/interactive/interactive-startup.js +9 -11
  1448. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  1449. package/dist/modes/interactive/interactive-submission.d.ts +24 -0
  1450. package/dist/modes/interactive/interactive-submission.d.ts.map +1 -0
  1451. package/dist/modes/interactive/interactive-submission.js +10 -0
  1452. package/dist/modes/interactive/interactive-submission.js.map +1 -0
  1453. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts +1 -1
  1454. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -1
  1455. package/dist/modes/interactive/interactive-summarization-retry-events.js +4 -2
  1456. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
  1457. package/dist/modes/interactive/login-provider-options.d.ts.map +1 -1
  1458. package/dist/modes/interactive/login-provider-options.js +1 -2
  1459. package/dist/modes/interactive/login-provider-options.js.map +1 -1
  1460. package/dist/modes/interactive/theme/global-theme.d.ts +1 -1
  1461. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  1462. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  1463. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  1464. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  1465. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  1466. package/dist/modes/interactive/theme/theme-loading.js +1 -1
  1467. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  1468. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  1469. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  1470. package/dist/modes/interactive/theme/theme.d.ts +2 -2
  1471. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1472. package/dist/modes/interactive/theme/theme.js +2 -2
  1473. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1474. package/dist/modes/interactive/whimsical-messages.d.ts.map +1 -1
  1475. package/dist/modes/interactive/whimsical-messages.js.map +1 -1
  1476. package/dist/modes/interactive-engine/activity-watchdog.d.ts +16 -6
  1477. package/dist/modes/interactive-engine/activity-watchdog.d.ts.map +1 -1
  1478. package/dist/modes/interactive-engine/activity-watchdog.js +12 -6
  1479. package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
  1480. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts.map +1 -1
  1481. package/dist/modes/interactive-engine/create-isolated-runtime.js +5 -4
  1482. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  1483. package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -1
  1484. package/dist/modes/interactive-engine/engine-child-liveness.js +6 -4
  1485. package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -1
  1486. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +3 -2
  1487. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  1488. package/dist/modes/interactive-engine/engine-custom-ui.js +32 -11
  1489. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  1490. package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts +16 -0
  1491. package/dist/modes/interactive-engine/engine-diagnostic-view.d.ts.map +1 -0
  1492. package/dist/modes/interactive-engine/engine-diagnostic-view.js +19 -0
  1493. package/dist/modes/interactive-engine/engine-diagnostic-view.js.map +1 -0
  1494. package/dist/modes/interactive-engine/engine-dialog-host.d.ts +33 -0
  1495. package/dist/modes/interactive-engine/engine-dialog-host.d.ts.map +1 -0
  1496. package/dist/modes/interactive-engine/engine-dialog-host.js +129 -0
  1497. package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -0
  1498. package/dist/modes/interactive-engine/engine-generation.d.ts +29 -0
  1499. package/dist/modes/interactive-engine/engine-generation.d.ts.map +1 -0
  1500. package/dist/modes/interactive-engine/engine-generation.js +11 -0
  1501. package/dist/modes/interactive-engine/engine-generation.js.map +1 -0
  1502. package/dist/modes/interactive-engine/engine-health.d.ts +107 -0
  1503. package/dist/modes/interactive-engine/engine-health.d.ts.map +1 -0
  1504. package/dist/modes/interactive-engine/engine-health.js +250 -0
  1505. package/dist/modes/interactive-engine/engine-health.js.map +1 -0
  1506. package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -1
  1507. package/dist/modes/interactive-engine/engine-input-form.js +12 -3
  1508. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  1509. package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -1
  1510. package/dist/modes/interactive-engine/engine-monitor.js +7 -2
  1511. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
  1512. package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
  1513. package/dist/modes/interactive-engine/engine-render-service.js +11 -5
  1514. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  1515. package/dist/modes/interactive-engine/engine-session-picker.d.ts.map +1 -1
  1516. package/dist/modes/interactive-engine/engine-session-picker.js +4 -2
  1517. package/dist/modes/interactive-engine/engine-session-picker.js.map +1 -1
  1518. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +14 -3
  1519. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  1520. package/dist/modes/interactive-engine/extension-ui-bridge.js +32 -45
  1521. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  1522. package/dist/modes/interactive-engine/input-form-host.d.ts +1 -0
  1523. package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -1
  1524. package/dist/modes/interactive-engine/input-form-host.js +12 -2
  1525. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  1526. package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -1
  1527. package/dist/modes/interactive-engine/isolated-auth.js +2 -2
  1528. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
  1529. package/dist/modes/interactive-engine/isolated-runtime.d.ts +33 -6
  1530. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  1531. package/dist/modes/interactive-engine/isolated-runtime.js +129 -60
  1532. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  1533. package/dist/modes/interactive-engine/protocol.d.ts +20 -1
  1534. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  1535. package/dist/modes/interactive-engine/protocol.js +183 -55
  1536. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  1537. package/dist/modes/interactive-engine/remote-component.d.ts +38 -0
  1538. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  1539. package/dist/modes/interactive-engine/remote-component.js +111 -22
  1540. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  1541. package/dist/modes/interactive-engine/remote-input-ownership.d.ts +48 -0
  1542. package/dist/modes/interactive-engine/remote-input-ownership.d.ts.map +1 -0
  1543. package/dist/modes/interactive-engine/remote-input-ownership.js +42 -0
  1544. package/dist/modes/interactive-engine/remote-input-ownership.js.map +1 -0
  1545. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  1546. package/dist/modes/interactive-engine/remote-model-catalog.js +15 -5
  1547. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  1548. package/dist/modes/interactive-engine/remote-queue-pause.d.ts.map +1 -1
  1549. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
  1550. package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -1
  1551. package/dist/modes/interactive-engine/remote-renderer.js +38 -10
  1552. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  1553. package/dist/modes/interactive-engine/session-picker-host.d.ts +1 -0
  1554. package/dist/modes/interactive-engine/session-picker-host.d.ts.map +1 -1
  1555. package/dist/modes/interactive-engine/session-picker-host.js +4 -0
  1556. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
  1557. package/dist/modes/print-mode.d.ts.map +1 -1
  1558. package/dist/modes/print-mode.js.map +1 -1
  1559. package/dist/modes/rpc/jsonl.d.ts +7 -0
  1560. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  1561. package/dist/modes/rpc/jsonl.js +17 -1
  1562. package/dist/modes/rpc/jsonl.js.map +1 -1
  1563. package/dist/modes/rpc/queued-writer.d.ts +14 -0
  1564. package/dist/modes/rpc/queued-writer.d.ts.map +1 -1
  1565. package/dist/modes/rpc/queued-writer.js +33 -9
  1566. package/dist/modes/rpc/queued-writer.js.map +1 -1
  1567. package/dist/modes/rpc/rpc-bash-request-owners.js +1 -1
  1568. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
  1569. package/dist/modes/rpc/rpc-client-api.d.ts +3 -3
  1570. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  1571. package/dist/modes/rpc/rpc-client-api.js +63 -22
  1572. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  1573. package/dist/modes/rpc/rpc-client-process.d.ts +10 -0
  1574. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  1575. package/dist/modes/rpc/rpc-client-process.js +72 -15
  1576. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  1577. package/dist/modes/rpc/rpc-client-waits.d.ts +17 -1
  1578. package/dist/modes/rpc/rpc-client-waits.d.ts.map +1 -1
  1579. package/dist/modes/rpc/rpc-client-waits.js +25 -0
  1580. package/dist/modes/rpc/rpc-client-waits.js.map +1 -1
  1581. package/dist/modes/rpc/rpc-client.d.ts +61 -6
  1582. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  1583. package/dist/modes/rpc/rpc-client.js +200 -145
  1584. package/dist/modes/rpc/rpc-client.js.map +1 -1
  1585. package/dist/modes/rpc/rpc-command-handler.d.ts +2 -2
  1586. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  1587. package/dist/modes/rpc/rpc-command-handler.js +58 -20
  1588. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  1589. package/dist/modes/rpc/rpc-command-timeouts.d.ts +30 -0
  1590. package/dist/modes/rpc/rpc-command-timeouts.d.ts.map +1 -0
  1591. package/dist/modes/rpc/rpc-command-timeouts.js +52 -0
  1592. package/dist/modes/rpc/rpc-command-timeouts.js.map +1 -0
  1593. package/dist/modes/rpc/rpc-event-buffer.d.ts.map +1 -1
  1594. package/dist/modes/rpc/rpc-event-buffer.js +3 -1
  1595. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
  1596. package/dist/modes/rpc/rpc-extension-ui.d.ts +1 -1
  1597. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  1598. package/dist/modes/rpc/rpc-extension-ui.js +44 -16
  1599. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  1600. package/dist/modes/rpc/rpc-generation-buffer.d.ts +21 -0
  1601. package/dist/modes/rpc/rpc-generation-buffer.d.ts.map +1 -0
  1602. package/dist/modes/rpc/rpc-generation-buffer.js +35 -0
  1603. package/dist/modes/rpc/rpc-generation-buffer.js.map +1 -0
  1604. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  1605. package/dist/modes/rpc/rpc-input-scheduler.js +14 -7
  1606. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  1607. package/dist/modes/rpc/rpc-input.d.ts +7 -1
  1608. package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
  1609. package/dist/modes/rpc/rpc-input.js +14 -4
  1610. package/dist/modes/rpc/rpc-input.js.map +1 -1
  1611. package/dist/modes/rpc/rpc-keybindings-reload.d.ts.map +1 -1
  1612. package/dist/modes/rpc/rpc-keybindings-reload.js.map +1 -1
  1613. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1614. package/dist/modes/rpc/rpc-mode.js +17 -18
  1615. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1616. package/dist/modes/rpc/rpc-oauth-client.d.ts +1 -2
  1617. package/dist/modes/rpc/rpc-oauth-client.d.ts.map +1 -1
  1618. package/dist/modes/rpc/rpc-oauth-client.js +11 -4
  1619. package/dist/modes/rpc/rpc-oauth-client.js.map +1 -1
  1620. package/dist/modes/rpc/rpc-oauth-interaction.d.ts.map +1 -1
  1621. package/dist/modes/rpc/rpc-oauth-interaction.js.map +1 -1
  1622. package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -1
  1623. package/dist/modes/rpc/rpc-output-buffer.js +3 -1
  1624. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  1625. package/dist/modes/rpc/rpc-pending-requests.d.ts +37 -0
  1626. package/dist/modes/rpc/rpc-pending-requests.d.ts.map +1 -0
  1627. package/dist/modes/rpc/rpc-pending-requests.js +57 -0
  1628. package/dist/modes/rpc/rpc-pending-requests.js.map +1 -0
  1629. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  1630. package/dist/modes/rpc/rpc-provider-auth.js +24 -5
  1631. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  1632. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  1633. package/dist/modes/rpc/rpc-session-binding.d.ts +1 -1
  1634. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  1635. package/dist/modes/rpc/rpc-session-binding.js +7 -2
  1636. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  1637. package/dist/modes/rpc/rpc-terminal-drain.d.ts +52 -0
  1638. package/dist/modes/rpc/rpc-terminal-drain.d.ts.map +1 -0
  1639. package/dist/modes/rpc/rpc-terminal-drain.js +85 -0
  1640. package/dist/modes/rpc/rpc-terminal-drain.js.map +1 -0
  1641. package/dist/modes/rpc/rpc-transport-error.d.ts +49 -0
  1642. package/dist/modes/rpc/rpc-transport-error.d.ts.map +1 -0
  1643. package/dist/modes/rpc/rpc-transport-error.js +78 -0
  1644. package/dist/modes/rpc/rpc-transport-error.js.map +1 -0
  1645. package/dist/modes/rpc/rpc-types.d.ts +12 -9
  1646. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1647. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1648. package/dist/package-manager-cli-parser.js.map +1 -1
  1649. package/dist/package-manager-cli.d.ts.map +1 -1
  1650. package/dist/package-manager-cli.js +22 -11
  1651. package/dist/package-manager-cli.js.map +1 -1
  1652. package/dist/utils/child-process.d.ts.map +1 -1
  1653. package/dist/utils/child-process.js.map +1 -1
  1654. package/dist/utils/clipboard-image.js +1 -1
  1655. package/dist/utils/clipboard-image.js.map +1 -1
  1656. package/dist/utils/clipboard.d.ts.map +1 -1
  1657. package/dist/utils/clipboard.js.map +1 -1
  1658. package/dist/utils/fs-watch.d.ts.map +1 -1
  1659. package/dist/utils/fs-watch.js +1 -3
  1660. package/dist/utils/fs-watch.js.map +1 -1
  1661. package/dist/utils/git.js +1 -1
  1662. package/dist/utils/git.js.map +1 -1
  1663. package/dist/utils/interactive-engine-bootstrap.d.ts +67 -0
  1664. package/dist/utils/interactive-engine-bootstrap.d.ts.map +1 -0
  1665. package/dist/utils/interactive-engine-bootstrap.js +117 -0
  1666. package/dist/utils/interactive-engine-bootstrap.js.map +1 -0
  1667. package/dist/utils/interactive-engine-env.d.ts +41 -0
  1668. package/dist/utils/interactive-engine-env.d.ts.map +1 -0
  1669. package/dist/utils/interactive-engine-env.js +67 -0
  1670. package/dist/utils/interactive-engine-env.js.map +1 -0
  1671. package/dist/utils/markit.d.ts.map +1 -1
  1672. package/dist/utils/markit.js +15 -5
  1673. package/dist/utils/markit.js.map +1 -1
  1674. package/dist/utils/shell.js +2 -2
  1675. package/dist/utils/shell.js.map +1 -1
  1676. package/dist/utils/split-launcher.d.ts.map +1 -1
  1677. package/dist/utils/split-launcher.js +1 -2
  1678. package/dist/utils/split-launcher.js.map +1 -1
  1679. package/dist/utils/tools-manager.d.ts.map +1 -1
  1680. package/dist/utils/tools-manager.js +8 -34
  1681. package/dist/utils/tools-manager.js.map +1 -1
  1682. package/dist/utils/version-check.d.ts.map +1 -1
  1683. package/dist/utils/version-check.js +1 -1
  1684. package/dist/utils/version-check.js.map +1 -1
  1685. package/docs/changelog.mdx +11 -0
  1686. package/docs/custom-provider.md +29 -6
  1687. package/docs/development.md +14 -15
  1688. package/docs/extensions.md +62 -2
  1689. package/docs/index.md +10 -0
  1690. package/docs/keybindings.md +14 -2
  1691. package/docs/models.md +2 -0
  1692. package/docs/providers.md +21 -4
  1693. package/docs/quickstart.md +7 -1
  1694. package/docs/rpc.md +1 -1
  1695. package/docs/security.md +15 -0
  1696. package/docs/session-format.md +4 -0
  1697. package/docs/termux.md +3 -1
  1698. package/docs/usage.md +37 -2
  1699. package/docs/workflows.md +166 -53
  1700. package/examples/extensions/border-status-editor.ts +1 -6
  1701. package/examples/extensions/custom-compaction.ts +7 -2
  1702. package/examples/extensions/custom-footer.ts +1 -1
  1703. package/examples/extensions/custom-provider-anthropic/index.ts +14 -2
  1704. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  1705. package/examples/extensions/gondolin/index.ts +1 -1
  1706. package/examples/extensions/handoff.ts +2 -2
  1707. package/examples/extensions/hello.ts +1 -1
  1708. package/examples/extensions/minimal-mode.ts +6 -6
  1709. package/examples/extensions/overlay-qa-focus-components.ts +0 -1
  1710. package/examples/extensions/overlay-qa-streaming-input-components.ts +2 -2
  1711. package/examples/extensions/overlay-qa-tests.ts +16 -14
  1712. package/examples/extensions/overlay-qa-toggle-passive-components.ts +3 -5
  1713. package/examples/extensions/overlay-test.ts +3 -6
  1714. package/examples/extensions/plan-mode/index.ts +1 -1
  1715. package/examples/extensions/preset.ts +1 -1
  1716. package/examples/extensions/qna.ts +1 -1
  1717. package/examples/extensions/structured-output.ts +9 -9
  1718. package/examples/extensions/subagent/display.ts +115 -127
  1719. package/examples/extensions/subagent/index.ts +310 -349
  1720. package/examples/extensions/subagent/render.ts +244 -345
  1721. package/examples/extensions/subagent/runner.ts +223 -230
  1722. package/examples/extensions/subagent/schemas.ts +39 -46
  1723. package/examples/extensions/subagent/types.ts +22 -22
  1724. package/examples/extensions/summarize.ts +2 -2
  1725. package/examples/extensions/tic-tac-toe.ts +4 -4
  1726. package/examples/extensions/todo.ts +1 -1
  1727. package/examples/extensions/tool-override.ts +1 -1
  1728. package/examples/extensions/trigger-compact.ts +4 -1
  1729. package/examples/extensions/working-indicator.ts +2 -1
  1730. package/examples/rpc-extension-ui-components.ts +1 -2
  1731. package/examples/sdk/02-custom-model.ts +1 -1
  1732. package/examples/sdk/03-custom-prompt.ts +1 -6
  1733. package/examples/sdk/06-extensions.ts +1 -6
  1734. package/examples/sdk/07-context-files.ts +1 -6
  1735. package/examples/sdk/12-full-control.ts +1 -1
  1736. package/npm-shrinkwrap.json +336 -307
  1737. package/package.json +12 -12
  1738. package/dist/builtin/workflows/src/tui/toast.ts +0 -106
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-thinking-guard.js","sourceRoot":"","sources":["../../src/core/anthropic-thinking-guard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, AssistantMessage, Message, Model } from \"@earendil-works/pi-ai/compat\";\n\ntype JsonObject = Record<string, unknown>;\n\ntype AnthropicContentBlock = JsonObject & { type: string };\n\ntype ReplayThinkingBlock =\n\t| { type: \"thinking\"; thinking: string; signature: string }\n\t| { type: \"redacted_thinking\"; data: string };\n\nfunction isObject(value: unknown): value is JsonObject {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isAnthropicContentBlock(value: unknown): value is AnthropicContentBlock {\n\treturn isObject(value) && typeof value.type === \"string\";\n}\n\nfunction isThinkingLikeAnthropicBlock(value: unknown): boolean {\n\tif (!isAnthropicContentBlock(value)) return false;\n\treturn value.type === \"thinking\" || value.type === \"redacted_thinking\";\n}\n\nfunction isSameModelAssistant(message: AssistantMessage, model: Model<Api>): boolean {\n\treturn message.provider === model.provider && message.api === model.api && message.model === model.id;\n}\n\nfunction readReplayThinkingBlock(block: unknown, allowEmptySignature = false): ReplayThinkingBlock | undefined {\n\tif (!isObject(block) || typeof block.type !== \"string\") return undefined;\n\n\tif (block.type === \"redacted_thinking\") {\n\t\treturn typeof block.data === \"string\" ? { type: \"redacted_thinking\", data: block.data } : undefined;\n\t}\n\n\tif (block.type !== \"thinking\") return undefined;\n\n\tif (block.redacted === true) {\n\t\treturn typeof block.thinkingSignature === \"string\"\n\t\t\t? { type: \"redacted_thinking\", data: block.thinkingSignature }\n\t\t\t: undefined;\n\t}\n\n\tif (typeof block.thinking !== \"string\" || typeof block.thinkingSignature !== \"string\") return undefined;\n\tif (!allowEmptySignature && block.thinkingSignature.trim().length === 0) return undefined;\n\treturn { type: \"thinking\", thinking: block.thinking, signature: block.thinkingSignature };\n}\n\nfunction hasReplayThinkingBlock(message: AssistantMessage, allowEmptySignature: boolean): boolean {\n\treturn message.content.some((block) => readReplayThinkingBlock(block, allowEmptySignature) !== undefined);\n}\n\nfunction legacyProviderWouldEmitAssistantBlock(block: unknown): boolean {\n\tif (!isObject(block) || typeof block.type !== \"string\") return false;\n\n\tif (block.type === \"text\") {\n\t\treturn typeof block.text === \"string\" && block.text.trim().length > 0;\n\t}\n\n\tif (block.type === \"toolCall\") {\n\t\treturn true;\n\t}\n\n\tif (block.type !== \"thinking\") {\n\t\treturn false;\n\t}\n\n\tif (block.redacted === true) {\n\t\treturn true;\n\t}\n\n\tif (typeof block.thinking !== \"string\") return false;\n\tconst signature = typeof block.thinkingSignature === \"string\" ? block.thinkingSignature : undefined;\n\treturn block.thinking.trim().length > 0 || (signature !== undefined && signature.trim().length > 0);\n}\n\nfunction legacyProviderWouldEmitAssistant(message: AssistantMessage, model: Model<Api>): boolean {\n\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") return false;\n\n\t// This mirrors the relevant same-model branch in @earendil-works/pi-ai's\n\t// transformMessages() + Anthropic convertMessages() pipeline closely enough\n\t// to keep assistant ordinal mapping aligned with the provider payload.\n\tif (isSameModelAssistant(message, model)) {\n\t\treturn message.content.some((block) => legacyProviderWouldEmitAssistantBlock(block));\n\t}\n\n\treturn message.content.some((block) => {\n\t\tif (!isObject(block) || typeof block.type !== \"string\") return false;\n\t\tif (block.type === \"text\") return typeof block.text === \"string\" && block.text.trim().length > 0;\n\t\tif (block.type === \"toolCall\") return true;\n\t\tif (block.type !== \"thinking\") return false;\n\t\tif (block.redacted === true) return false;\n\t\treturn typeof block.thinking === \"string\" && block.thinking.trim().length > 0;\n\t});\n}\n\nfunction fallbackTextBlock(block: JsonObject): AnthropicContentBlock | undefined {\n\treturn typeof block.text === \"string\" && block.text.trim().length > 0\n\t\t? { type: \"text\", text: block.text }\n\t\t: undefined;\n}\n\nfunction fallbackToolUseBlock(block: JsonObject): AnthropicContentBlock | undefined {\n\tif (typeof block.id !== \"string\" || typeof block.name !== \"string\") return undefined;\n\treturn { type: \"tool_use\", id: block.id, name: block.name, input: block.arguments ?? {} };\n}\n\nfunction takeProviderBlock(\n\tproviderBlocks: readonly AnthropicContentBlock[],\n\tproviderIndex: number,\n\texpectedType: string,\n): { block: AnthropicContentBlock | undefined; nextProviderIndex: number } {\n\tconst providerBlock = providerBlocks[providerIndex];\n\tif (providerBlock?.type === expectedType) {\n\t\treturn { block: providerBlock, nextProviderIndex: providerIndex + 1 };\n\t}\n\treturn { block: undefined, nextProviderIndex: providerIndex };\n}\n\nfunction nonThinkingBlocksAlign(message: AssistantMessage, providerBlocks: readonly AnthropicContentBlock[]): boolean {\n\tconst sourceTypes = message.content.flatMap((block) => {\n\t\tif (!isObject(block) || typeof block.type !== \"string\") return [];\n\t\tif (block.type === \"text\") return typeof block.text === \"string\" && block.text.trim().length > 0 ? [\"text\"] : [];\n\t\treturn block.type === \"toolCall\" ? [\"tool_use\"] : [];\n\t});\n\tconst providerTypes = providerBlocks.filter((block) => !isThinkingLikeAnthropicBlock(block)).map((block) => block.type);\n\treturn sourceTypes.length === providerTypes.length && sourceTypes.every((type, index) => type === providerTypes[index]);\n}\n\nfunction repairAssistantContent(\n\toriginalMessage: AssistantMessage,\n\tproviderBlocks: readonly AnthropicContentBlock[],\n\tallowEmptySignature: boolean,\n): AnthropicContentBlock[] {\n\tconst repaired: AnthropicContentBlock[] = [];\n\tlet providerIndex = 0;\n\n\tfor (const originalBlock of originalMessage.content) {\n\t\tconst replayBlock = readReplayThinkingBlock(originalBlock, allowEmptySignature);\n\t\tif (replayBlock) {\n\t\t\tif (isThinkingLikeAnthropicBlock(providerBlocks[providerIndex])) {\n\t\t\t\tproviderIndex += 1;\n\t\t\t}\n\t\t\trepaired.push({ ...replayBlock });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isObject(originalBlock) || typeof originalBlock.type !== \"string\") continue;\n\n\t\tif (originalBlock.type === \"text\") {\n\t\t\tconst providerText = takeProviderBlock(providerBlocks, providerIndex, \"text\");\n\t\t\tif (providerText.block) {\n\t\t\t\trepaired.push(providerText.block);\n\t\t\t\tproviderIndex = providerText.nextProviderIndex;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fallback = fallbackTextBlock(originalBlock);\n\t\t\tif (fallback) repaired.push(fallback);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (originalBlock.type === \"toolCall\") {\n\t\t\tconst providerToolUse = takeProviderBlock(providerBlocks, providerIndex, \"tool_use\");\n\t\t\tif (providerToolUse.block) {\n\t\t\t\trepaired.push(providerToolUse.block);\n\t\t\t\tproviderIndex = providerToolUse.nextProviderIndex;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fallback = fallbackToolUseBlock(originalBlock);\n\t\t\tif (fallback) repaired.push(fallback);\n\t\t}\n\t}\n\n\tfor (; providerIndex < providerBlocks.length; providerIndex += 1) {\n\t\trepaired.push(providerBlocks[providerIndex]);\n\t}\n\n\treturn repaired;\n}\n\nfunction getAnthropicMessages(payload: unknown): unknown[] | undefined {\n\tif (!isObject(payload)) return undefined;\n\treturn Array.isArray(payload.messages) ? payload.messages : undefined;\n}\n\nfunction getAnthropicAssistantContent(message: unknown): AnthropicContentBlock[] | undefined {\n\tif (!isObject(message) || message.role !== \"assistant\") return undefined;\n\tif (!Array.isArray(message.content)) return undefined;\n\tconst content = message.content.filter(isAnthropicContentBlock);\n\treturn content.length === message.content.length ? content : undefined;\n}\n\n/**\n * Restore same-model Anthropic replay thinking blocks after provider payload\n * construction and extension payload hooks.\n *\n * Anthropic requires thinking/redacted_thinking blocks from replayed assistant\n * messages to remain byte-for-byte identical to the original response. The\n * upstream pi-ai Anthropic converter can sanitize thinking text and drop signed\n * empty thinking. convertToLlm normalizes raw redacted_thinking blocks in its\n * transient, non-mutating LLM-compatible messages before this hook, then this guard\n * restores exact same-model payloads while leaving non-Anthropic and cross-model\n * payloads unchanged.\n */\nexport function restoreAnthropicReplayThinkingBlocks(payload: unknown, sourceMessages: readonly Message[], model: Model<Api>): unknown {\n\tif (model.api !== \"anthropic-messages\") return payload;\n\n\tconst payloadMessages = getAnthropicMessages(payload);\n\tif (!payloadMessages) return payload;\n\n\tconst assistantPayloads = payloadMessages\n\t\t.map((message, index) => ({ message, index, content: getAnthropicAssistantContent(message) }))\n\t\t.filter(\n\t\t\t(entry): entry is { message: JsonObject; index: number; content: AnthropicContentBlock[] } =>\n\t\t\t\tentry.content !== undefined && isObject(entry.message),\n\t\t);\n\n\tif (assistantPayloads.length === 0) return payload;\n\n\tconst emittingSourceAssistants = sourceMessages.filter(\n\t\t(message): message is AssistantMessage => message.role === \"assistant\" && legacyProviderWouldEmitAssistant(message, model),\n\t);\n\t// Fail closed if pi-ai's converter emission behavior drifts from the model above;\n\t// ordinal restoration must never splice thinking into a different assistant.\n\tif (emittingSourceAssistants.length !== assistantPayloads.length) return payload;\n\n\tconst allowEmptySignature = isObject(model.compat) && model.compat.allowEmptySignature === true;\n\tlet nextPayloadMessages: unknown[] | undefined;\n\n\tfor (const [assistantPayloadOrdinal, sourceMessage] of emittingSourceAssistants.entries()) {\n\t\tconst payloadAssistant = assistantPayloads[assistantPayloadOrdinal];\n\n\t\tif (!isSameModelAssistant(sourceMessage, model) || !hasReplayThinkingBlock(sourceMessage, allowEmptySignature)) continue;\n\t\t// A second fail-closed guard verifies the non-thinking shape before replacing\n\t\t// signed blocks, protecting against equal-count ordinal misalignment.\n\t\tif (!nonThinkingBlocksAlign(sourceMessage, payloadAssistant.content)) continue;\n\n\t\tconst repairedContent = repairAssistantContent(sourceMessage, payloadAssistant.content, allowEmptySignature);\n\t\tif (JSON.stringify(repairedContent) === JSON.stringify(payloadAssistant.content)) continue;\n\n\t\tnextPayloadMessages ??= [...payloadMessages];\n\t\tnextPayloadMessages[payloadAssistant.index] = {\n\t\t\t...payloadAssistant.message,\n\t\t\tcontent: repairedContent,\n\t\t};\n\t}\n\n\tif (!nextPayloadMessages || !isObject(payload)) return payload;\n\treturn { ...payload, messages: nextPayloadMessages };\n}\n"]}
1
+ {"version":3,"file":"anthropic-thinking-guard.js","sourceRoot":"","sources":["../../src/core/anthropic-thinking-guard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, AssistantMessage, Message, Model } from \"@earendil-works/pi-ai/compat\";\n\ntype JsonObject = Record<string, unknown>;\n\ntype AnthropicContentBlock = JsonObject & { type: string };\n\ntype ReplayThinkingBlock =\n\t| { type: \"thinking\"; thinking: string; signature: string }\n\t| { type: \"redacted_thinking\"; data: string };\n\nfunction isObject(value: unknown): value is JsonObject {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isAnthropicContentBlock(value: unknown): value is AnthropicContentBlock {\n\treturn isObject(value) && typeof value.type === \"string\";\n}\n\nfunction isThinkingLikeAnthropicBlock(value: unknown): boolean {\n\tif (!isAnthropicContentBlock(value)) return false;\n\treturn value.type === \"thinking\" || value.type === \"redacted_thinking\";\n}\n\nfunction isSameModelAssistant(message: AssistantMessage, model: Model<Api>): boolean {\n\treturn message.provider === model.provider && message.api === model.api && message.model === model.id;\n}\n\nfunction readReplayThinkingBlock(block: unknown, allowEmptySignature = false): ReplayThinkingBlock | undefined {\n\tif (!isObject(block) || typeof block.type !== \"string\") return undefined;\n\n\tif (block.type === \"redacted_thinking\") {\n\t\treturn typeof block.data === \"string\" ? { type: \"redacted_thinking\", data: block.data } : undefined;\n\t}\n\n\tif (block.type !== \"thinking\") return undefined;\n\n\tif (block.redacted === true) {\n\t\treturn typeof block.thinkingSignature === \"string\"\n\t\t\t? { type: \"redacted_thinking\", data: block.thinkingSignature }\n\t\t\t: undefined;\n\t}\n\n\tif (typeof block.thinking !== \"string\" || typeof block.thinkingSignature !== \"string\") return undefined;\n\tif (!allowEmptySignature && block.thinkingSignature.trim().length === 0) return undefined;\n\treturn { type: \"thinking\", thinking: block.thinking, signature: block.thinkingSignature };\n}\n\nfunction hasReplayThinkingBlock(message: AssistantMessage, allowEmptySignature: boolean): boolean {\n\treturn message.content.some((block) => readReplayThinkingBlock(block, allowEmptySignature) !== undefined);\n}\n\nfunction legacyProviderWouldEmitAssistantBlock(block: unknown): boolean {\n\tif (!isObject(block) || typeof block.type !== \"string\") return false;\n\n\tif (block.type === \"text\") {\n\t\treturn typeof block.text === \"string\" && block.text.trim().length > 0;\n\t}\n\n\tif (block.type === \"toolCall\") {\n\t\treturn true;\n\t}\n\n\tif (block.type !== \"thinking\") {\n\t\treturn false;\n\t}\n\n\tif (block.redacted === true) {\n\t\treturn true;\n\t}\n\n\tif (typeof block.thinking !== \"string\") return false;\n\tconst signature = typeof block.thinkingSignature === \"string\" ? block.thinkingSignature : undefined;\n\treturn block.thinking.trim().length > 0 || (signature !== undefined && signature.trim().length > 0);\n}\n\nfunction legacyProviderWouldEmitAssistant(message: AssistantMessage, model: Model<Api>): boolean {\n\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") return false;\n\n\t// This mirrors the relevant same-model branch in @earendil-works/pi-ai's\n\t// transformMessages() + Anthropic convertMessages() pipeline closely enough\n\t// to keep assistant ordinal mapping aligned with the provider payload.\n\tif (isSameModelAssistant(message, model)) {\n\t\treturn message.content.some((block) => legacyProviderWouldEmitAssistantBlock(block));\n\t}\n\n\treturn message.content.some((block) => {\n\t\tif (!isObject(block) || typeof block.type !== \"string\") return false;\n\t\tif (block.type === \"text\") return typeof block.text === \"string\" && block.text.trim().length > 0;\n\t\tif (block.type === \"toolCall\") return true;\n\t\tif (block.type !== \"thinking\") return false;\n\t\tif (block.redacted === true) return false;\n\t\treturn typeof block.thinking === \"string\" && block.thinking.trim().length > 0;\n\t});\n}\n\nfunction fallbackTextBlock(block: JsonObject): AnthropicContentBlock | undefined {\n\treturn typeof block.text === \"string\" && block.text.trim().length > 0\n\t\t? { type: \"text\", text: block.text }\n\t\t: undefined;\n}\n\nfunction fallbackToolUseBlock(block: JsonObject): AnthropicContentBlock | undefined {\n\tif (typeof block.id !== \"string\" || typeof block.name !== \"string\") return undefined;\n\treturn { type: \"tool_use\", id: block.id, name: block.name, input: block.arguments ?? {} };\n}\n\nfunction takeProviderBlock(\n\tproviderBlocks: readonly AnthropicContentBlock[],\n\tproviderIndex: number,\n\texpectedType: string,\n): { block: AnthropicContentBlock | undefined; nextProviderIndex: number } {\n\tconst providerBlock = providerBlocks[providerIndex];\n\tif (providerBlock?.type === expectedType) {\n\t\treturn { block: providerBlock, nextProviderIndex: providerIndex + 1 };\n\t}\n\treturn { block: undefined, nextProviderIndex: providerIndex };\n}\n\nfunction nonThinkingBlocksAlign(message: AssistantMessage, providerBlocks: readonly AnthropicContentBlock[]): boolean {\n\tconst sourceTypes = message.content.flatMap((block) => {\n\t\tif (!isObject(block) || typeof block.type !== \"string\") return [];\n\t\tif (block.type === \"text\") return typeof block.text === \"string\" && block.text.trim().length > 0 ? [\"text\"] : [];\n\t\treturn block.type === \"toolCall\" ? [\"tool_use\"] : [];\n\t});\n\tconst providerTypes = providerBlocks\n\t\t.filter((block) => !isThinkingLikeAnthropicBlock(block))\n\t\t.map((block) => block.type);\n\treturn (\n\t\tsourceTypes.length === providerTypes.length && sourceTypes.every((type, index) => type === providerTypes[index])\n\t);\n}\n\nfunction repairAssistantContent(\n\toriginalMessage: AssistantMessage,\n\tproviderBlocks: readonly AnthropicContentBlock[],\n\tallowEmptySignature: boolean,\n): AnthropicContentBlock[] {\n\tconst repaired: AnthropicContentBlock[] = [];\n\tlet providerIndex = 0;\n\n\tfor (const originalBlock of originalMessage.content) {\n\t\tconst replayBlock = readReplayThinkingBlock(originalBlock, allowEmptySignature);\n\t\tif (replayBlock) {\n\t\t\tif (isThinkingLikeAnthropicBlock(providerBlocks[providerIndex])) {\n\t\t\t\tproviderIndex += 1;\n\t\t\t}\n\t\t\trepaired.push({ ...replayBlock });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isObject(originalBlock) || typeof originalBlock.type !== \"string\") continue;\n\n\t\tif (originalBlock.type === \"text\") {\n\t\t\tconst providerText = takeProviderBlock(providerBlocks, providerIndex, \"text\");\n\t\t\tif (providerText.block) {\n\t\t\t\trepaired.push(providerText.block);\n\t\t\t\tproviderIndex = providerText.nextProviderIndex;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fallback = fallbackTextBlock(originalBlock);\n\t\t\tif (fallback) repaired.push(fallback);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (originalBlock.type === \"toolCall\") {\n\t\t\tconst providerToolUse = takeProviderBlock(providerBlocks, providerIndex, \"tool_use\");\n\t\t\tif (providerToolUse.block) {\n\t\t\t\trepaired.push(providerToolUse.block);\n\t\t\t\tproviderIndex = providerToolUse.nextProviderIndex;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst fallback = fallbackToolUseBlock(originalBlock);\n\t\t\tif (fallback) repaired.push(fallback);\n\t\t}\n\t}\n\n\tfor (; providerIndex < providerBlocks.length; providerIndex += 1) {\n\t\trepaired.push(providerBlocks[providerIndex]);\n\t}\n\n\treturn repaired;\n}\n\nfunction getAnthropicMessages(payload: unknown): unknown[] | undefined {\n\tif (!isObject(payload)) return undefined;\n\treturn Array.isArray(payload.messages) ? payload.messages : undefined;\n}\n\nfunction getAnthropicAssistantContent(message: unknown): AnthropicContentBlock[] | undefined {\n\tif (!isObject(message) || message.role !== \"assistant\") return undefined;\n\tif (!Array.isArray(message.content)) return undefined;\n\tconst content = message.content.filter(isAnthropicContentBlock);\n\treturn content.length === message.content.length ? content : undefined;\n}\n\n/**\n * Restore same-model Anthropic replay thinking blocks after provider payload\n * construction and extension payload hooks.\n *\n * Anthropic requires thinking/redacted_thinking blocks from replayed assistant\n * messages to remain byte-for-byte identical to the original response. The\n * upstream pi-ai Anthropic converter can sanitize thinking text and drop signed\n * empty thinking. convertToLlm normalizes raw redacted_thinking blocks in its\n * transient, non-mutating LLM-compatible messages before this hook, then this guard\n * restores exact same-model payloads while leaving non-Anthropic and cross-model\n * payloads unchanged.\n */\nexport function restoreAnthropicReplayThinkingBlocks(\n\tpayload: unknown,\n\tsourceMessages: readonly Message[],\n\tmodel: Model<Api>,\n): unknown {\n\tif (model.api !== \"anthropic-messages\") return payload;\n\n\tconst payloadMessages = getAnthropicMessages(payload);\n\tif (!payloadMessages) return payload;\n\n\tconst assistantPayloads = payloadMessages\n\t\t.map((message, index) => ({ message, index, content: getAnthropicAssistantContent(message) }))\n\t\t.filter(\n\t\t\t(entry): entry is { message: JsonObject; index: number; content: AnthropicContentBlock[] } =>\n\t\t\t\tentry.content !== undefined && isObject(entry.message),\n\t\t);\n\n\tif (assistantPayloads.length === 0) return payload;\n\n\tconst emittingSourceAssistants = sourceMessages.filter(\n\t\t(message): message is AssistantMessage =>\n\t\t\tmessage.role === \"assistant\" && legacyProviderWouldEmitAssistant(message, model),\n\t);\n\t// Fail closed if pi-ai's converter emission behavior drifts from the model above;\n\t// ordinal restoration must never splice thinking into a different assistant.\n\tif (emittingSourceAssistants.length !== assistantPayloads.length) return payload;\n\n\tconst allowEmptySignature = isObject(model.compat) && model.compat.allowEmptySignature === true;\n\tlet nextPayloadMessages: unknown[] | undefined;\n\n\tfor (const [assistantPayloadOrdinal, sourceMessage] of emittingSourceAssistants.entries()) {\n\t\tconst payloadAssistant = assistantPayloads[assistantPayloadOrdinal];\n\n\t\tif (!isSameModelAssistant(sourceMessage, model) || !hasReplayThinkingBlock(sourceMessage, allowEmptySignature))\n\t\t\tcontinue;\n\t\t// A second fail-closed guard verifies the non-thinking shape before replacing\n\t\t// signed blocks, protecting against equal-count ordinal misalignment.\n\t\tif (!nonThinkingBlocksAlign(sourceMessage, payloadAssistant.content)) continue;\n\n\t\tconst repairedContent = repairAssistantContent(sourceMessage, payloadAssistant.content, allowEmptySignature);\n\t\tif (JSON.stringify(repairedContent) === JSON.stringify(payloadAssistant.content)) continue;\n\n\t\tnextPayloadMessages ??= [...payloadMessages];\n\t\tnextPayloadMessages[payloadAssistant.index] = {\n\t\t\t...payloadAssistant.message,\n\t\t\tcontent: repairedContent,\n\t\t};\n\t}\n\n\tif (!nextPayloadMessages || !isObject(payload)) return payload;\n\treturn { ...payload, messages: nextPayloadMessages };\n}\n"]}
@@ -1,3 +1,3 @@
1
- import type { ManagedAsyncBashJob, AsyncJobDeliveryMessage } from "./types.js";
1
+ import type { AsyncJobDeliveryMessage, ManagedAsyncBashJob } from "./types.js";
2
2
  export declare function formatAsyncResultForFollowUp(job: ManagedAsyncBashJob): AsyncJobDeliveryMessage;
3
3
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/core/async/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAwB/E,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,mBAAmB,GAAG,uBAAuB,CA2B9F"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/core/async/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAwB/E,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,mBAAmB,GAAG,uBAAuB,CA6B9F"}
@@ -24,7 +24,9 @@ export function formatAsyncResultForFollowUp(job) {
24
24
  const header = `Async bash job ${job.jobId} ${job.status}: ${job.command}`;
25
25
  const body = jobOutput(job);
26
26
  const status = statusLine(job);
27
- const inline = [header, body, status].filter((part) => part !== undefined && part.length > 0).join("\n\n");
27
+ const inline = [header, body, status]
28
+ .filter((part) => part !== undefined && part.length > 0)
29
+ .join("\n\n");
28
30
  let content = inline;
29
31
  if (inline.length > INLINE_OUTPUT_LIMIT && job.fullOutputPath) {
30
32
  const preview = truncateText(body, LARGE_OUTPUT_PREVIEW_LIMIT);
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/core/async/format.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEzC,SAAS,YAAY,CAAC,IAAY,EAAE,QAAgB;IACnD,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,GAAwB;IAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CAAC,GAAwB;IAC3C,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC;IAC5C,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC/E,OAAO,4BAA4B,GAAG,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAwB;IACpE,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;IAC9D,MAAM,MAAM,GAAG,kBAAkB,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3H,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,MAAM,CAAC,MAAM,GAAG,mBAAmB,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,uDAAuD,GAAG,CAAC,cAAc,GAAG,EAAE,MAAM,CAAC;aAC/G,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACvE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IACD,OAAO;QACN,UAAU,EAAE,kBAAkB;QAC9B,OAAO;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACR,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,UAAU,EAAE,SAAS;SACrB;KACD,CAAC;AACH,CAAC","sourcesContent":["import type { ManagedAsyncBashJob, AsyncJobDeliveryMessage } from \"./types.js\";\n\nconst INLINE_OUTPUT_LIMIT = 12_000;\nconst LARGE_OUTPUT_PREVIEW_LIMIT = 4_000;\n\nfunction truncateText(text: string, maxChars: number): string {\n\tif (text.length <= maxChars) return text;\n\treturn text.slice(0, maxChars).trimEnd();\n}\n\nfunction jobOutput(job: ManagedAsyncBashJob): string {\n\tconst output = job.output.trimEnd();\n\tif (output.length > 0) return output;\n\treturn job.error ? `(no output)\\n\\n${job.error}` : \"(no output)\";\n}\n\nfunction statusLine(job: ManagedAsyncBashJob): string | undefined {\n\tif (job.error) return `Error: ${job.error}`;\n\tif (job.exitCode !== undefined && job.exitCode !== null && job.exitCode !== 0) {\n\t\treturn `Command exited with code ${job.exitCode}`;\n\t}\n\treturn undefined;\n}\n\nexport function formatAsyncResultForFollowUp(job: ManagedAsyncBashJob): AsyncJobDeliveryMessage {\n\tconst elapsedMs = (job.endedAt ?? Date.now()) - job.startedAt;\n\tconst header = `Async bash job ${job.jobId} ${job.status}: ${job.command}`;\n\tconst body = jobOutput(job);\n\tconst status = statusLine(job);\n\tconst inline = [header, body, status].filter((part): part is string => part !== undefined && part.length > 0).join(\"\\n\\n\");\n\tlet content = inline;\n\tif (inline.length > INLINE_OUTPUT_LIMIT && job.fullOutputPath) {\n\t\tconst preview = truncateText(body, LARGE_OUTPUT_PREVIEW_LIMIT);\n\t\tcontent = [header, preview, `[Output truncated for async follow-up. Full output: ${job.fullOutputPath}]`, status]\n\t\t\t.filter((part): part is string => part !== undefined && part.length > 0)\n\t\t\t.join(\"\\n\\n\");\n\t}\n\treturn {\n\t\tcustomType: \"async-job-result\",\n\t\tcontent,\n\t\tdisplay: true,\n\t\tdetails: {\n\t\t\tjobId: job.jobId,\n\t\t\ttype: \"bash\",\n\t\t\tstatus: job.status,\n\t\t\tcommand: job.command,\n\t\t\texitCode: job.exitCode,\n\t\t\tfullOutputPath: job.fullOutputPath,\n\t\t\twallTimeMs: elapsedMs,\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/core/async/format.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEzC,SAAS,YAAY,CAAC,IAAY,EAAE,QAAgB;IACnD,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,GAAwB;IAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CAAC,GAAwB;IAC3C,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC;IAC5C,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC/E,OAAO,4BAA4B,GAAG,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAwB;IACpE,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;IAC9D,MAAM,MAAM,GAAG,kBAAkB,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;SACnC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACvE,IAAI,CAAC,MAAM,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,MAAM,CAAC,MAAM,GAAG,mBAAmB,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,uDAAuD,GAAG,CAAC,cAAc,GAAG,EAAE,MAAM,CAAC;aAC/G,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACvE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IACD,OAAO;QACN,UAAU,EAAE,kBAAkB;QAC9B,OAAO;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACR,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,UAAU,EAAE,SAAS;SACrB;KACD,CAAC;AACH,CAAC","sourcesContent":["import type { AsyncJobDeliveryMessage, ManagedAsyncBashJob } from \"./types.js\";\n\nconst INLINE_OUTPUT_LIMIT = 12_000;\nconst LARGE_OUTPUT_PREVIEW_LIMIT = 4_000;\n\nfunction truncateText(text: string, maxChars: number): string {\n\tif (text.length <= maxChars) return text;\n\treturn text.slice(0, maxChars).trimEnd();\n}\n\nfunction jobOutput(job: ManagedAsyncBashJob): string {\n\tconst output = job.output.trimEnd();\n\tif (output.length > 0) return output;\n\treturn job.error ? `(no output)\\n\\n${job.error}` : \"(no output)\";\n}\n\nfunction statusLine(job: ManagedAsyncBashJob): string | undefined {\n\tif (job.error) return `Error: ${job.error}`;\n\tif (job.exitCode !== undefined && job.exitCode !== null && job.exitCode !== 0) {\n\t\treturn `Command exited with code ${job.exitCode}`;\n\t}\n\treturn undefined;\n}\n\nexport function formatAsyncResultForFollowUp(job: ManagedAsyncBashJob): AsyncJobDeliveryMessage {\n\tconst elapsedMs = (job.endedAt ?? Date.now()) - job.startedAt;\n\tconst header = `Async bash job ${job.jobId} ${job.status}: ${job.command}`;\n\tconst body = jobOutput(job);\n\tconst status = statusLine(job);\n\tconst inline = [header, body, status]\n\t\t.filter((part): part is string => part !== undefined && part.length > 0)\n\t\t.join(\"\\n\\n\");\n\tlet content = inline;\n\tif (inline.length > INLINE_OUTPUT_LIMIT && job.fullOutputPath) {\n\t\tconst preview = truncateText(body, LARGE_OUTPUT_PREVIEW_LIMIT);\n\t\tcontent = [header, preview, `[Output truncated for async follow-up. Full output: ${job.fullOutputPath}]`, status]\n\t\t\t.filter((part): part is string => part !== undefined && part.length > 0)\n\t\t\t.join(\"\\n\\n\");\n\t}\n\treturn {\n\t\tcustomType: \"async-job-result\",\n\t\tcontent,\n\t\tdisplay: true,\n\t\tdetails: {\n\t\t\tjobId: job.jobId,\n\t\t\ttype: \"bash\",\n\t\t\tstatus: job.status,\n\t\t\tcommand: job.command,\n\t\t\texitCode: job.exitCode,\n\t\t\tfullOutputPath: job.fullOutputPath,\n\t\t\twallTimeMs: elapsedMs,\n\t\t},\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"job-manager.d.ts","sourceRoot":"","sources":["../../../src/core/async/job-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE/G,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAgD,MAAM,YAAY,CAAC;AAOlI,UAAU,sBAAsB;IAC/B,aAAa,EAAE,wBAAwB,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAeD,qBAAa,eAAe;;IAG3B,MAAM,CAAC,QAAQ,IAAI,eAAe,GAAG,SAAS,CAE7C;IAED,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAE3D;IAED,MAAM,CAAC,aAAa,IAAI,IAAI,CAE3B;IAkBD,YAAY,OAAO,EAAE,sBAAsB,EAK1C;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,UAAU,IAAI,OAAO,CAIxB;IAGD,eAAe,IAAI,MAAM,CAKxB;IAED,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQtC;IAGD,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAUpG;IAED,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE5C;IACD,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,uBAAuB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAcnG;IAED,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAMzC;IAED,qBAAqB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAUrD;IAED,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3C;IAED,aAAa,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,CAOhF;IAED,cAAc,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAG3G;IAED,OAAO,IAAI,IAAI,CAWd;CA2GD"}
1
+ {"version":3,"file":"job-manager.d.ts","sourceRoot":"","sources":["../../../src/core/async/job-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE/G,OAAO,KAAK,EACX,wBAAwB,EACxB,uBAAuB,EAGvB,MAAM,YAAY,CAAC;AAOpB,UAAU,sBAAsB;IAC/B,aAAa,EAAE,wBAAwB,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAeD,qBAAa,eAAe;;IAG3B,MAAM,CAAC,QAAQ,IAAI,eAAe,GAAG,SAAS,CAE7C;IAED,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAE3D;IAED,MAAM,CAAC,aAAa,IAAI,IAAI,CAE3B;IAkBD,YAAY,OAAO,EAAE,sBAAsB,EAK1C;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,UAAU,IAAI,OAAO,CAIxB;IAED,eAAe,IAAI,MAAM,CAKxB;IAED,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQtC;IAED,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAUpG;IAED,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE5C;IACD,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,uBAAuB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAkBnG;IAED,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAMzC;IAED,qBAAqB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAUrD;IAED,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3C;IAED,aAAa,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,CAOhF;IAED,cAAc,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAS3G;IAED,OAAO,IAAI,IAAI,CAWd;CAkID"}
@@ -137,7 +137,13 @@ export class AsyncJobManager {
137
137
  }
138
138
  retentionState() {
139
139
  this.#pruneRetention();
140
- return { jobs: this.#jobs.size, suppressions: this.#suppressedDeliveries.size, handlers: this.#deliveryHandlers.size, queued: this.#deliveries.length + this.#inFlightDeliveries.size, sessions: this.#sessions.size };
140
+ return {
141
+ jobs: this.#jobs.size,
142
+ suppressions: this.#suppressedDeliveries.size,
143
+ handlers: this.#deliveryHandlers.size,
144
+ queued: this.#deliveries.length + this.#inFlightDeliveries.size,
145
+ sessions: this.#sessions.size,
146
+ };
141
147
  }
142
148
  dispose() {
143
149
  this.#disposed = true;
@@ -158,7 +164,12 @@ export class AsyncJobManager {
158
164
  for (let index = this.#deliveries.length - 1; index >= 0; index -= 1)
159
165
  if (this.#deliveries[index]?.jobId === job.jobId)
160
166
  this.#deliveries.splice(index, 1);
161
- this.#deliveries.push({ jobId: job.jobId, message: formatAsyncResultForFollowUp(job), attempt: 0, nextAttemptAt: Date.now() });
167
+ this.#deliveries.push({
168
+ jobId: job.jobId,
169
+ message: formatAsyncResultForFollowUp(job),
170
+ attempt: 0,
171
+ nextAttemptAt: Date.now(),
172
+ });
162
173
  this.#pruneRetention();
163
174
  void this.#runDeliveryLoop();
164
175
  }
@@ -201,7 +212,8 @@ export class AsyncJobManager {
201
212
  if (!delivery || !this.#jobs.has(delivery.jobId) || this.#suppressedDeliveries.has(delivery.jobId))
202
213
  this.#deliveries.splice(index, 1);
203
214
  }
204
- while (this.#deliveries.length + this.#inFlightDeliveries.size > this.#maxRetainedJobs && this.#deliveries.length > 0)
215
+ while (this.#deliveries.length + this.#inFlightDeliveries.size > this.#maxRetainedJobs &&
216
+ this.#deliveries.length > 0)
205
217
  this.#deliveries.shift();
206
218
  for (const jobId of this.#deliveryHandlers.keys())
207
219
  if (!this.#jobs.has(jobId) || this.#suppressedDeliveries.has(jobId))
@@ -242,7 +254,9 @@ export class AsyncJobManager {
242
254
  this.#scheduleNextDelivery();
243
255
  }
244
256
  #startDelivery(delivery) {
245
- if (this.#suppressedDeliveries.has(delivery.jobId) || !this.#jobs.has(delivery.jobId) || this.#inFlightDeliveries.has(delivery.jobId))
257
+ if (this.#suppressedDeliveries.has(delivery.jobId) ||
258
+ !this.#jobs.has(delivery.jobId) ||
259
+ this.#inFlightDeliveries.has(delivery.jobId))
246
260
  return;
247
261
  const handler = this.#deliveryHandlers.get(delivery.jobId) ?? this.#onJobComplete;
248
262
  this.#inFlightDeliveries.set(delivery.jobId, delivery);
@@ -258,7 +272,8 @@ export class AsyncJobManager {
258
272
  return;
259
273
  delivery.attempt += 1;
260
274
  const jitter = Math.floor(Math.random() * DELIVERY_RETRY_JITTER_MS);
261
- delivery.nextAttemptAt = Date.now() + Math.min(DELIVERY_RETRY_MAX_MS, DELIVERY_RETRY_BASE_MS * 2 ** delivery.attempt) + jitter;
275
+ delivery.nextAttemptAt =
276
+ Date.now() + Math.min(DELIVERY_RETRY_MAX_MS, DELIVERY_RETRY_BASE_MS * 2 ** delivery.attempt) + jitter;
262
277
  this.#deliveries.push(delivery);
263
278
  })
264
279
  .finally(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"job-manager.js","sourceRoot":"","sources":["../../../src/core/async/job-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { COMPLETED_JOB_TTL_MS, MAX_MANAGED_BASH_JOBS, type ManagedBashJob } from \"../tools/bash-async-jobs.js\";\nimport { formatAsyncResultForFollowUp } from \"./format.js\";\nimport type { AsyncJobDeliveryCallback, AsyncJobDeliveryHandler, AsyncJobDeliveryMessage, ManagedAsyncBashJob } from \"./types.js\";\n\nconst DEFAULT_MAX_RUNNING_JOBS = 15;\nconst DELIVERY_RETRY_BASE_MS = 500;\nconst DELIVERY_RETRY_MAX_MS = 30_000;\nconst DELIVERY_RETRY_JITTER_MS = 200;\n\ninterface AsyncJobManagerOptions {\n\tonJobComplete: AsyncJobDeliveryCallback;\n\tmaxRunningJobs?: number;\n\tmaxRetainedJobs?: number;\n\tcompletedJobTtlMs?: number;\n}\n\ninterface Delivery {\n\tjobId: string;\n\tmessage: AsyncJobDeliveryMessage;\n\tattempt: number;\n\tnextAttemptAt: number;\n\tpromise?: Promise<void>;\n}\n\ninterface RegisteredSession {\n\tdisposed: boolean;\n\tactiveJobIds: Set<string>;\n}\n\nexport class AsyncJobManager {\n\tstatic #instance: AsyncJobManager | undefined;\n\n\tstatic instance(): AsyncJobManager | undefined {\n\t\treturn AsyncJobManager.#instance;\n\t}\n\n\tstatic setInstance(value: AsyncJobManager | undefined): void {\n\t\tAsyncJobManager.#instance = value;\n\t}\n\n\tstatic resetForTests(): void {\n\t\tAsyncJobManager.#instance = undefined;\n\t}\n\n\treadonly #jobs = new Map<string, ManagedBashJob>();\n\treadonly #deliveries: Delivery[] = [];\n\treadonly #suppressedDeliveries = new Set<string>();\n\treadonly #inFlightDeliveries = new Map<string, Delivery>();\n\treadonly #deliveryHandlers = new Map<string, AsyncJobDeliveryHandler>();\n\treadonly #jobSessions = new Map<string, symbol>();\n\treadonly #sessions = new Map<symbol, RegisteredSession>();\n\treadonly #onJobComplete: AsyncJobDeliveryCallback;\n\treadonly #maxRunningJobs: number;\n\treadonly #maxRetainedJobs: number;\n\treadonly #completedJobTtlMs: number;\n\t#timer: NodeJS.Timeout | undefined;\n\t#disposed = false;\n\t#runningDeliveryLoop = false;\n\t#disposeWhenUnused = false;\n\n\tconstructor(options: AsyncJobManagerOptions) {\n\t\tthis.#onJobComplete = options.onJobComplete;\n\t\tthis.#maxRunningJobs = Math.max(1, Math.floor(options.maxRunningJobs ?? DEFAULT_MAX_RUNNING_JOBS));\n\t\tthis.#maxRetainedJobs = Math.max(1, Math.floor(options.maxRetainedJobs ?? MAX_MANAGED_BASH_JOBS));\n\t\tthis.#completedJobTtlMs = Math.max(0, Math.floor(options.completedJobTtlMs ?? COMPLETED_JOB_TTL_MS));\n\t}\n\n\tget disposed(): boolean {\n\t\treturn this.#disposed;\n\t}\n\n\tget atCapacity(): boolean {\n\t\tlet running = 0;\n\t\tfor (const job of this.#jobs.values()) if (job.status === \"running\") running += 1;\n\t\treturn running >= this.#maxRunningJobs;\n\t}\n\n\n\tregisterSession(): symbol {\n\t\tif (this.#disposed) throw new Error(\"Async job manager is disposed\");\n\t\tconst sessionId = Symbol(\"async-job-session\");\n\t\tthis.#sessions.set(sessionId, { disposed: false, activeJobIds: new Set() });\n\t\treturn sessionId;\n\t}\n\n\treleaseSession(sessionId: symbol): void {\n\t\tconst session = this.#sessions.get(sessionId);\n\t\tif (!session) return;\n\t\tsession.disposed = true;\n\t\tthis.acknowledgeDeliveries([...session.activeJobIds]);\n\t\tthis.#sessions.delete(sessionId);\n\t\tif (this.#sessions.size === 0) this.#disposeWhenUnused = true;\n\t\tthis.#disposeIfUnused();\n\t}\n\n\n\ttransferSessionDeliveries(sourceId: symbol, targetId: symbol, handler: AsyncJobDeliveryHandler): void {\n\t\tconst source = this.#sessions.get(sourceId);\n\t\tconst target = this.#sessions.get(targetId);\n\t\tif (!source || !target || target.disposed) return;\n\t\tfor (const jobId of source.activeJobIds) {\n\t\t\tsource.activeJobIds.delete(jobId);\n\t\t\ttarget.activeJobIds.add(jobId);\n\t\t\tthis.#jobSessions.set(jobId, targetId);\n\t\t\tthis.#deliveryHandlers.set(jobId, handler);\n\t\t}\n\t}\n\n\tisSessionDisposed(sessionId: symbol): boolean {\n\t\treturn this.#disposed || this.#sessions.get(sessionId)?.disposed !== false;\n\t}\n\tregisterBashJob(job: ManagedBashJob, onComplete?: AsyncJobDeliveryHandler, sessionId?: symbol): void {\n\t\tif (this.#disposed) throw new Error(\"Async job manager is disposed\");\n\t\tthis.#pruneRetention();\n\t\tif (this.atCapacity) throw new Error(`Background job limit reached (${this.#maxRunningJobs}). Wait for running jobs to finish or cancel one.`);\n\t\tif (sessionId !== undefined && this.isSessionDisposed(sessionId)) throw new Error(\"Async job session is disposed\");\n\t\tthis.#suppressedDeliveries.delete(job.jobId);\n\t\tif (onComplete) this.#deliveryHandlers.set(job.jobId, onComplete);\n\t\telse this.#deliveryHandlers.delete(job.jobId);\n\t\tif (sessionId !== undefined) {\n\t\t\tthis.#jobSessions.set(job.jobId, sessionId);\n\t\t\tthis.#sessions.get(sessionId)?.activeJobIds.add(job.jobId);\n\t\t} else this.#jobSessions.delete(job.jobId);\n\t\tthis.#jobs.set(job.jobId, job);\n\t\tthis.#pruneRetention();\n\t}\n\n\tcompleteBashJob(job: ManagedBashJob): void {\n\t\tif (this.#disposed || this.#suppressedDeliveries.has(job.jobId)) return;\n\t\tif (job.status === \"running\") return;\n\t\tthis.#jobs.set(job.jobId, job);\n\t\tthis.#pruneRetention();\n\t\tif (this.#jobs.has(job.jobId)) this.#enqueueDelivery(job as ManagedAsyncBashJob);\n\t}\n\n\tacknowledgeDeliveries(jobIds: readonly string[]): void {\n\t\tfor (const jobId of jobIds) {\n\t\t\tthis.#suppressedDeliveries.add(jobId);\n\t\t\tfor (let index = this.#deliveries.length - 1; index >= 0; index -= 1) {\n\t\t\t\tif (this.#deliveries[index]?.jobId === jobId) this.#deliveries.splice(index, 1);\n\t\t\t}\n\t\t\tthis.#deliveryHandlers.delete(jobId);\n\t\t\tthis.#completeTrackedJob(jobId);\n\t\t}\n\t\tthis.#pruneRetention();\n\t}\n\n\tisDeliverySuppressed(jobId: string): boolean {\n\t\treturn this.#suppressedDeliveries.has(jobId);\n\t}\n\n\tdeliveryState(): { queued: number; delivering: boolean; pendingJobIds: string[] } {\n\t\tthis.#pruneRetention();\n\t\treturn {\n\t\t\tqueued: this.#deliveries.length,\n\t\t\tdelivering: this.#runningDeliveryLoop || this.#inFlightDeliveries.size > 0,\n\t\t\tpendingJobIds: [...this.#deliveries.map((delivery) => delivery.jobId), ...this.#inFlightDeliveries.keys()],\n\t\t};\n\t}\n\n\tretentionState(): { jobs: number; suppressions: number; handlers: number; queued: number; sessions: number } {\n\t\tthis.#pruneRetention();\n\t\treturn { jobs: this.#jobs.size, suppressions: this.#suppressedDeliveries.size, handlers: this.#deliveryHandlers.size, queued: this.#deliveries.length + this.#inFlightDeliveries.size, sessions: this.#sessions.size };\n\t}\n\n\tdispose(): void {\n\t\tthis.#disposed = true;\n\t\tif (this.#timer) clearTimeout(this.#timer);\n\t\tthis.#timer = undefined;\n\t\tthis.#deliveries.length = 0;\n\t\tthis.#inFlightDeliveries.clear();\n\t\tthis.#deliveryHandlers.clear();\n\t\tthis.#jobSessions.clear();\n\t\tthis.#sessions.clear();\n\t\tthis.#jobs.clear();\n\t\tthis.#suppressedDeliveries.clear();\n\t}\n\n\t#enqueueDelivery(job: ManagedAsyncBashJob): void {\n\t\tif (this.#inFlightDeliveries.has(job.jobId)) return;\n\t\tfor (let index = this.#deliveries.length - 1; index >= 0; index -= 1) if (this.#deliveries[index]?.jobId === job.jobId) this.#deliveries.splice(index, 1);\n\t\tthis.#deliveries.push({ jobId: job.jobId, message: formatAsyncResultForFollowUp(job), attempt: 0, nextAttemptAt: Date.now() });\n\t\tthis.#pruneRetention();\n\t\tvoid this.#runDeliveryLoop();\n\t}\n\n\n\t#completeTrackedJob(jobId: string): void {\n\t\tconst sessionId = this.#jobSessions.get(jobId);\n\t\tif (sessionId !== undefined) this.#sessions.get(sessionId)?.activeJobIds.delete(jobId);\n\t\tthis.#jobSessions.delete(jobId);\n\t}\n\t#disposeIfUnused(): void {\n\t\tif (!this.#disposeWhenUnused || this.#sessions.size > 0 || this.#inFlightDeliveries.size > 0) return;\n\t\tthis.dispose();\n\t\tif (AsyncJobManager.#instance === this) AsyncJobManager.#instance = undefined;\n\t}\n\t#pruneRetention(now = Date.now()): void {\n\t\tfor (const [jobId, job] of this.#jobs) {\n\t\t\tif (job.status !== \"running\" && job.endedAt !== undefined && now - job.endedAt > this.#completedJobTtlMs) {\n\t\t\t\tthis.#jobs.delete(jobId);\n\t\t\t\tthis.#completeTrackedJob(jobId);\n\t\t\t}\n\t\t}\n\t\tfor (const jobId of this.#suppressedDeliveries) {\n\t\t\tif (!this.#jobs.has(jobId)) this.#suppressedDeliveries.delete(jobId);\n\t\t}\n\t\tconst oldestTerminalJobs = [...this.#jobs.values()]\n\t\t\t.filter((job) => job.status !== \"running\")\n\t\t\t.sort((a, b) => (a.endedAt ?? a.startedAt) - (b.endedAt ?? b.startedAt));\n\t\twhile (this.#jobs.size > this.#maxRetainedJobs && oldestTerminalJobs.length > 0) {\n\t\t\tconst job = oldestTerminalJobs.shift();\n\t\t\tif (job) {\n\t\t\t\tthis.#jobs.delete(job.jobId);\n\t\t\t\tthis.#completeTrackedJob(job.jobId);\n\t\t\t}\n\t\t}\n\t\tfor (let index = this.#deliveries.length - 1; index >= 0; index -= 1) {\n\t\t\tconst delivery = this.#deliveries[index];\n\t\t\tif (!delivery || !this.#jobs.has(delivery.jobId) || this.#suppressedDeliveries.has(delivery.jobId)) this.#deliveries.splice(index, 1);\n\t\t}\n\t\twhile (this.#deliveries.length + this.#inFlightDeliveries.size > this.#maxRetainedJobs && this.#deliveries.length > 0) this.#deliveries.shift();\n\t\tfor (const jobId of this.#deliveryHandlers.keys()) if (!this.#jobs.has(jobId) || this.#suppressedDeliveries.has(jobId)) this.#deliveryHandlers.delete(jobId);\n\t\tfor (const session of this.#sessions.values()) for (const jobId of session.activeJobIds) if (!this.#jobs.has(jobId)) session.activeJobIds.delete(jobId);\n\t}\n\n\t#scheduleDeliveryLoop(delayMs: number): void {\n\t\tif (this.#disposed) return;\n\t\tif (this.#timer) clearTimeout(this.#timer);\n\t\tthis.#timer = setTimeout(() => {\n\t\t\tthis.#timer = undefined;\n\t\t\tvoid this.#runDeliveryLoop();\n\t\t}, delayMs);\n\t\tthis.#timer.unref?.();\n\t}\n\n\tasync #runDeliveryLoop(): Promise<void> {\n\t\tif (this.#runningDeliveryLoop || this.#disposed) return;\n\t\tthis.#runningDeliveryLoop = true;\n\t\ttry {\n\t\t\twhile (!this.#disposed) {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst delivery = this.#deliveries.find((candidate) => candidate.nextAttemptAt <= now);\n\t\t\t\tif (!delivery) break;\n\t\t\t\tthis.#deliveries.splice(this.#deliveries.indexOf(delivery), 1);\n\t\t\t\tthis.#startDelivery(delivery);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.#runningDeliveryLoop = false;\n\t\t}\n\t\tthis.#scheduleNextDelivery();\n\t}\n\n\t#startDelivery(delivery: Delivery): void {\n\t\tif (this.#suppressedDeliveries.has(delivery.jobId) || !this.#jobs.has(delivery.jobId) || this.#inFlightDeliveries.has(delivery.jobId)) return;\n\t\tconst handler = this.#deliveryHandlers.get(delivery.jobId) ?? this.#onJobComplete;\n\t\tthis.#inFlightDeliveries.set(delivery.jobId, delivery);\n\t\tdelivery.promise = (async () => handler(delivery.message))()\n\t\t\t.then(() => {\n\t\t\t\tif (!this.#suppressedDeliveries.has(delivery.jobId) && this.#jobs.has(delivery.jobId)) {\n\t\t\t\t\tthis.#deliveryHandlers.delete(delivery.jobId);\n\t\t\t\t\tthis.#completeTrackedJob(delivery.jobId);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tif (this.#disposed || this.#suppressedDeliveries.has(delivery.jobId) || !this.#jobs.has(delivery.jobId)) return;\n\t\t\t\tdelivery.attempt += 1;\n\t\t\t\tconst jitter = Math.floor(Math.random() * DELIVERY_RETRY_JITTER_MS);\n\t\t\t\tdelivery.nextAttemptAt = Date.now() + Math.min(DELIVERY_RETRY_MAX_MS, DELIVERY_RETRY_BASE_MS * 2 ** delivery.attempt) + jitter;\n\t\t\t\tthis.#deliveries.push(delivery);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.#inFlightDeliveries.delete(delivery.jobId);\n\t\t\t\tthis.#pruneRetention();\n\t\t\t\tthis.#scheduleNextDelivery();\n\t\t\t\tthis.#disposeIfUnused();\n\t\t\t});\n\t}\n\n\t#scheduleNextDelivery(): void {\n\t\tconst next = this.#deliveries.reduce<number | undefined>((soonest, delivery) => soonest === undefined ? delivery.nextAttemptAt : Math.min(soonest, delivery.nextAttemptAt), undefined);\n\t\tif (next !== undefined) this.#scheduleDeliveryLoop(Math.max(0, next - Date.now()));\n\t}\n}\n"]}
1
+ {"version":3,"file":"job-manager.js","sourceRoot":"","sources":["../../../src/core/async/job-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAuB,MAAM,6BAA6B,CAAC;AAC/G,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAQ3D,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAsBrC,MAAM,OAAO,eAAe;IAC3B,MAAM,CAAC,SAAS,CAA8B;IAE9C,MAAM,CAAC,QAAQ;QACd,OAAO,EAAe,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,KAAkC;QACpD,EAAe,CAAC,SAAS,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,aAAa;QACnB,EAAe,CAAC,SAAS,GAAG,SAAS,CAAC;IACvC,CAAC;IAEQ,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1C,WAAW,GAAe,EAAE,CAAC;IAC7B,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,mBAAmB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAClD,iBAAiB,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC/D,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;IACjD,cAAc,CAA2B;IACzC,eAAe,CAAS;IACxB,gBAAgB,CAAS;IACzB,kBAAkB,CAAS;IACpC,MAAM,CAA6B;IACnC,SAAS,GAAG,KAAK,CAAC;IAClB,oBAAoB,GAAG,KAAK,CAAC;IAC7B,kBAAkB,GAAG,KAAK,CAAC;IAE3B,YAAY,OAA+B;QAC1C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,qBAAqB,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,IAAI,oBAAoB,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,IAAI,UAAU;QACb,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC,CAAC;QAClF,OAAO,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC;IACxC,CAAC;IAED,eAAe;QACd,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5E,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,SAAiB;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED,yBAAyB,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAgC;QAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO;QAClD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IAED,iBAAiB,CAAC,SAAiB;QAClC,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,QAAQ,KAAK,KAAK,CAAC;IAC5E,CAAC;IACD,eAAe,CAAC,GAAmB,EAAE,UAAoC,EAAE,SAAkB;QAC5F,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,UAAU;YAClB,MAAM,IAAI,KAAK,CACd,iCAAiC,IAAI,CAAC,eAAe,mDAAmD,CACxG,CAAC;QACH,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAClD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,UAAU;YAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;;YAC7D,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;;YAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;IACxB,CAAC;IAED,eAAe,CAAC,GAAmB;QAClC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACxE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,gBAAgB,CAAC,GAA0B,CAAC,CAAC;IAClF,CAAC;IAED,qBAAqB,CAAC,MAAyB;QAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACtE,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK;oBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACjF,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACxB,CAAC;IAED,oBAAoB,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,aAAa;QACZ,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;YAC/B,UAAU,EAAE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC;YAC1E,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;SAC1G,CAAC;IACH,CAAC;IAED,cAAc;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI;YAC7C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI;YACrC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI;YAC/D,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SAC7B,CAAC;IACH,CAAC;IAED,OAAO;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM;YAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAED,gBAAgB,CAAC,GAAwB;QACxC,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACpD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;YACnE,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK;gBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACrB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,4BAA4B,CAAC,GAAG,CAAC;YAC1C,OAAO,EAAE,CAAC;YACV,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;SACzB,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC9B,CAAC;IAED,mBAAmB,CAAC,KAAa;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvF,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,gBAAgB;QACf,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO;QACrG,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,EAAe,CAAC,SAAS,KAAK,IAAI;YAAE,EAAe,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/E,CAAC;IACD,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1G,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACF,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACjD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjF,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACjG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OACC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB;YAC/E,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAE3B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;YAChD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3G,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3G,CAAC;IAED,qBAAqB,CAAC,OAAe;QACpC,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,IAAI,CAAC,MAAM;YAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACrB,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QACxD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC;gBACtF,IAAI,CAAC,QAAQ;oBAAE,MAAM;gBACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/D,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,QAAkB;QAChC,IACC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC9C,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YAE5C,OAAO;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;QAClF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvD,QAAQ,CAAC,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;aAC1D,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;QACF,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACX,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtG,OAAO;YACR,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,wBAAwB,CAAC,CAAC;YACpE,QAAQ,CAAC,aAAa;gBACrB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,sBAAsB,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YACvG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACnC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CACrB,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC3F,SAAS,CACT,CAAC;QACF,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;CACD","sourcesContent":["import { COMPLETED_JOB_TTL_MS, MAX_MANAGED_BASH_JOBS, type ManagedBashJob } from \"../tools/bash-async-jobs.js\";\nimport { formatAsyncResultForFollowUp } from \"./format.js\";\nimport type {\n\tAsyncJobDeliveryCallback,\n\tAsyncJobDeliveryHandler,\n\tAsyncJobDeliveryMessage,\n\tManagedAsyncBashJob,\n} from \"./types.js\";\n\nconst DEFAULT_MAX_RUNNING_JOBS = 15;\nconst DELIVERY_RETRY_BASE_MS = 500;\nconst DELIVERY_RETRY_MAX_MS = 30_000;\nconst DELIVERY_RETRY_JITTER_MS = 200;\n\ninterface AsyncJobManagerOptions {\n\tonJobComplete: AsyncJobDeliveryCallback;\n\tmaxRunningJobs?: number;\n\tmaxRetainedJobs?: number;\n\tcompletedJobTtlMs?: number;\n}\n\ninterface Delivery {\n\tjobId: string;\n\tmessage: AsyncJobDeliveryMessage;\n\tattempt: number;\n\tnextAttemptAt: number;\n\tpromise?: Promise<void>;\n}\n\ninterface RegisteredSession {\n\tdisposed: boolean;\n\tactiveJobIds: Set<string>;\n}\n\nexport class AsyncJobManager {\n\tstatic #instance: AsyncJobManager | undefined;\n\n\tstatic instance(): AsyncJobManager | undefined {\n\t\treturn AsyncJobManager.#instance;\n\t}\n\n\tstatic setInstance(value: AsyncJobManager | undefined): void {\n\t\tAsyncJobManager.#instance = value;\n\t}\n\n\tstatic resetForTests(): void {\n\t\tAsyncJobManager.#instance = undefined;\n\t}\n\n\treadonly #jobs = new Map<string, ManagedBashJob>();\n\treadonly #deliveries: Delivery[] = [];\n\treadonly #suppressedDeliveries = new Set<string>();\n\treadonly #inFlightDeliveries = new Map<string, Delivery>();\n\treadonly #deliveryHandlers = new Map<string, AsyncJobDeliveryHandler>();\n\treadonly #jobSessions = new Map<string, symbol>();\n\treadonly #sessions = new Map<symbol, RegisteredSession>();\n\treadonly #onJobComplete: AsyncJobDeliveryCallback;\n\treadonly #maxRunningJobs: number;\n\treadonly #maxRetainedJobs: number;\n\treadonly #completedJobTtlMs: number;\n\t#timer: NodeJS.Timeout | undefined;\n\t#disposed = false;\n\t#runningDeliveryLoop = false;\n\t#disposeWhenUnused = false;\n\n\tconstructor(options: AsyncJobManagerOptions) {\n\t\tthis.#onJobComplete = options.onJobComplete;\n\t\tthis.#maxRunningJobs = Math.max(1, Math.floor(options.maxRunningJobs ?? DEFAULT_MAX_RUNNING_JOBS));\n\t\tthis.#maxRetainedJobs = Math.max(1, Math.floor(options.maxRetainedJobs ?? MAX_MANAGED_BASH_JOBS));\n\t\tthis.#completedJobTtlMs = Math.max(0, Math.floor(options.completedJobTtlMs ?? COMPLETED_JOB_TTL_MS));\n\t}\n\n\tget disposed(): boolean {\n\t\treturn this.#disposed;\n\t}\n\n\tget atCapacity(): boolean {\n\t\tlet running = 0;\n\t\tfor (const job of this.#jobs.values()) if (job.status === \"running\") running += 1;\n\t\treturn running >= this.#maxRunningJobs;\n\t}\n\n\tregisterSession(): symbol {\n\t\tif (this.#disposed) throw new Error(\"Async job manager is disposed\");\n\t\tconst sessionId = Symbol(\"async-job-session\");\n\t\tthis.#sessions.set(sessionId, { disposed: false, activeJobIds: new Set() });\n\t\treturn sessionId;\n\t}\n\n\treleaseSession(sessionId: symbol): void {\n\t\tconst session = this.#sessions.get(sessionId);\n\t\tif (!session) return;\n\t\tsession.disposed = true;\n\t\tthis.acknowledgeDeliveries([...session.activeJobIds]);\n\t\tthis.#sessions.delete(sessionId);\n\t\tif (this.#sessions.size === 0) this.#disposeWhenUnused = true;\n\t\tthis.#disposeIfUnused();\n\t}\n\n\ttransferSessionDeliveries(sourceId: symbol, targetId: symbol, handler: AsyncJobDeliveryHandler): void {\n\t\tconst source = this.#sessions.get(sourceId);\n\t\tconst target = this.#sessions.get(targetId);\n\t\tif (!source || !target || target.disposed) return;\n\t\tfor (const jobId of source.activeJobIds) {\n\t\t\tsource.activeJobIds.delete(jobId);\n\t\t\ttarget.activeJobIds.add(jobId);\n\t\t\tthis.#jobSessions.set(jobId, targetId);\n\t\t\tthis.#deliveryHandlers.set(jobId, handler);\n\t\t}\n\t}\n\n\tisSessionDisposed(sessionId: symbol): boolean {\n\t\treturn this.#disposed || this.#sessions.get(sessionId)?.disposed !== false;\n\t}\n\tregisterBashJob(job: ManagedBashJob, onComplete?: AsyncJobDeliveryHandler, sessionId?: symbol): void {\n\t\tif (this.#disposed) throw new Error(\"Async job manager is disposed\");\n\t\tthis.#pruneRetention();\n\t\tif (this.atCapacity)\n\t\t\tthrow new Error(\n\t\t\t\t`Background job limit reached (${this.#maxRunningJobs}). Wait for running jobs to finish or cancel one.`,\n\t\t\t);\n\t\tif (sessionId !== undefined && this.isSessionDisposed(sessionId))\n\t\t\tthrow new Error(\"Async job session is disposed\");\n\t\tthis.#suppressedDeliveries.delete(job.jobId);\n\t\tif (onComplete) this.#deliveryHandlers.set(job.jobId, onComplete);\n\t\telse this.#deliveryHandlers.delete(job.jobId);\n\t\tif (sessionId !== undefined) {\n\t\t\tthis.#jobSessions.set(job.jobId, sessionId);\n\t\t\tthis.#sessions.get(sessionId)?.activeJobIds.add(job.jobId);\n\t\t} else this.#jobSessions.delete(job.jobId);\n\t\tthis.#jobs.set(job.jobId, job);\n\t\tthis.#pruneRetention();\n\t}\n\n\tcompleteBashJob(job: ManagedBashJob): void {\n\t\tif (this.#disposed || this.#suppressedDeliveries.has(job.jobId)) return;\n\t\tif (job.status === \"running\") return;\n\t\tthis.#jobs.set(job.jobId, job);\n\t\tthis.#pruneRetention();\n\t\tif (this.#jobs.has(job.jobId)) this.#enqueueDelivery(job as ManagedAsyncBashJob);\n\t}\n\n\tacknowledgeDeliveries(jobIds: readonly string[]): void {\n\t\tfor (const jobId of jobIds) {\n\t\t\tthis.#suppressedDeliveries.add(jobId);\n\t\t\tfor (let index = this.#deliveries.length - 1; index >= 0; index -= 1) {\n\t\t\t\tif (this.#deliveries[index]?.jobId === jobId) this.#deliveries.splice(index, 1);\n\t\t\t}\n\t\t\tthis.#deliveryHandlers.delete(jobId);\n\t\t\tthis.#completeTrackedJob(jobId);\n\t\t}\n\t\tthis.#pruneRetention();\n\t}\n\n\tisDeliverySuppressed(jobId: string): boolean {\n\t\treturn this.#suppressedDeliveries.has(jobId);\n\t}\n\n\tdeliveryState(): { queued: number; delivering: boolean; pendingJobIds: string[] } {\n\t\tthis.#pruneRetention();\n\t\treturn {\n\t\t\tqueued: this.#deliveries.length,\n\t\t\tdelivering: this.#runningDeliveryLoop || this.#inFlightDeliveries.size > 0,\n\t\t\tpendingJobIds: [...this.#deliveries.map((delivery) => delivery.jobId), ...this.#inFlightDeliveries.keys()],\n\t\t};\n\t}\n\n\tretentionState(): { jobs: number; suppressions: number; handlers: number; queued: number; sessions: number } {\n\t\tthis.#pruneRetention();\n\t\treturn {\n\t\t\tjobs: this.#jobs.size,\n\t\t\tsuppressions: this.#suppressedDeliveries.size,\n\t\t\thandlers: this.#deliveryHandlers.size,\n\t\t\tqueued: this.#deliveries.length + this.#inFlightDeliveries.size,\n\t\t\tsessions: this.#sessions.size,\n\t\t};\n\t}\n\n\tdispose(): void {\n\t\tthis.#disposed = true;\n\t\tif (this.#timer) clearTimeout(this.#timer);\n\t\tthis.#timer = undefined;\n\t\tthis.#deliveries.length = 0;\n\t\tthis.#inFlightDeliveries.clear();\n\t\tthis.#deliveryHandlers.clear();\n\t\tthis.#jobSessions.clear();\n\t\tthis.#sessions.clear();\n\t\tthis.#jobs.clear();\n\t\tthis.#suppressedDeliveries.clear();\n\t}\n\n\t#enqueueDelivery(job: ManagedAsyncBashJob): void {\n\t\tif (this.#inFlightDeliveries.has(job.jobId)) return;\n\t\tfor (let index = this.#deliveries.length - 1; index >= 0; index -= 1)\n\t\t\tif (this.#deliveries[index]?.jobId === job.jobId) this.#deliveries.splice(index, 1);\n\t\tthis.#deliveries.push({\n\t\t\tjobId: job.jobId,\n\t\t\tmessage: formatAsyncResultForFollowUp(job),\n\t\t\tattempt: 0,\n\t\t\tnextAttemptAt: Date.now(),\n\t\t});\n\t\tthis.#pruneRetention();\n\t\tvoid this.#runDeliveryLoop();\n\t}\n\n\t#completeTrackedJob(jobId: string): void {\n\t\tconst sessionId = this.#jobSessions.get(jobId);\n\t\tif (sessionId !== undefined) this.#sessions.get(sessionId)?.activeJobIds.delete(jobId);\n\t\tthis.#jobSessions.delete(jobId);\n\t}\n\t#disposeIfUnused(): void {\n\t\tif (!this.#disposeWhenUnused || this.#sessions.size > 0 || this.#inFlightDeliveries.size > 0) return;\n\t\tthis.dispose();\n\t\tif (AsyncJobManager.#instance === this) AsyncJobManager.#instance = undefined;\n\t}\n\t#pruneRetention(now = Date.now()): void {\n\t\tfor (const [jobId, job] of this.#jobs) {\n\t\t\tif (job.status !== \"running\" && job.endedAt !== undefined && now - job.endedAt > this.#completedJobTtlMs) {\n\t\t\t\tthis.#jobs.delete(jobId);\n\t\t\t\tthis.#completeTrackedJob(jobId);\n\t\t\t}\n\t\t}\n\t\tfor (const jobId of this.#suppressedDeliveries) {\n\t\t\tif (!this.#jobs.has(jobId)) this.#suppressedDeliveries.delete(jobId);\n\t\t}\n\t\tconst oldestTerminalJobs = [...this.#jobs.values()]\n\t\t\t.filter((job) => job.status !== \"running\")\n\t\t\t.sort((a, b) => (a.endedAt ?? a.startedAt) - (b.endedAt ?? b.startedAt));\n\t\twhile (this.#jobs.size > this.#maxRetainedJobs && oldestTerminalJobs.length > 0) {\n\t\t\tconst job = oldestTerminalJobs.shift();\n\t\t\tif (job) {\n\t\t\t\tthis.#jobs.delete(job.jobId);\n\t\t\t\tthis.#completeTrackedJob(job.jobId);\n\t\t\t}\n\t\t}\n\t\tfor (let index = this.#deliveries.length - 1; index >= 0; index -= 1) {\n\t\t\tconst delivery = this.#deliveries[index];\n\t\t\tif (!delivery || !this.#jobs.has(delivery.jobId) || this.#suppressedDeliveries.has(delivery.jobId))\n\t\t\t\tthis.#deliveries.splice(index, 1);\n\t\t}\n\t\twhile (\n\t\t\tthis.#deliveries.length + this.#inFlightDeliveries.size > this.#maxRetainedJobs &&\n\t\t\tthis.#deliveries.length > 0\n\t\t)\n\t\t\tthis.#deliveries.shift();\n\t\tfor (const jobId of this.#deliveryHandlers.keys())\n\t\t\tif (!this.#jobs.has(jobId) || this.#suppressedDeliveries.has(jobId)) this.#deliveryHandlers.delete(jobId);\n\t\tfor (const session of this.#sessions.values())\n\t\t\tfor (const jobId of session.activeJobIds) if (!this.#jobs.has(jobId)) session.activeJobIds.delete(jobId);\n\t}\n\n\t#scheduleDeliveryLoop(delayMs: number): void {\n\t\tif (this.#disposed) return;\n\t\tif (this.#timer) clearTimeout(this.#timer);\n\t\tthis.#timer = setTimeout(() => {\n\t\t\tthis.#timer = undefined;\n\t\t\tvoid this.#runDeliveryLoop();\n\t\t}, delayMs);\n\t\tthis.#timer.unref?.();\n\t}\n\n\tasync #runDeliveryLoop(): Promise<void> {\n\t\tif (this.#runningDeliveryLoop || this.#disposed) return;\n\t\tthis.#runningDeliveryLoop = true;\n\t\ttry {\n\t\t\twhile (!this.#disposed) {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst delivery = this.#deliveries.find((candidate) => candidate.nextAttemptAt <= now);\n\t\t\t\tif (!delivery) break;\n\t\t\t\tthis.#deliveries.splice(this.#deliveries.indexOf(delivery), 1);\n\t\t\t\tthis.#startDelivery(delivery);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.#runningDeliveryLoop = false;\n\t\t}\n\t\tthis.#scheduleNextDelivery();\n\t}\n\n\t#startDelivery(delivery: Delivery): void {\n\t\tif (\n\t\t\tthis.#suppressedDeliveries.has(delivery.jobId) ||\n\t\t\t!this.#jobs.has(delivery.jobId) ||\n\t\t\tthis.#inFlightDeliveries.has(delivery.jobId)\n\t\t)\n\t\t\treturn;\n\t\tconst handler = this.#deliveryHandlers.get(delivery.jobId) ?? this.#onJobComplete;\n\t\tthis.#inFlightDeliveries.set(delivery.jobId, delivery);\n\t\tdelivery.promise = (async () => handler(delivery.message))()\n\t\t\t.then(() => {\n\t\t\t\tif (!this.#suppressedDeliveries.has(delivery.jobId) && this.#jobs.has(delivery.jobId)) {\n\t\t\t\t\tthis.#deliveryHandlers.delete(delivery.jobId);\n\t\t\t\t\tthis.#completeTrackedJob(delivery.jobId);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tif (this.#disposed || this.#suppressedDeliveries.has(delivery.jobId) || !this.#jobs.has(delivery.jobId))\n\t\t\t\t\treturn;\n\t\t\t\tdelivery.attempt += 1;\n\t\t\t\tconst jitter = Math.floor(Math.random() * DELIVERY_RETRY_JITTER_MS);\n\t\t\t\tdelivery.nextAttemptAt =\n\t\t\t\t\tDate.now() + Math.min(DELIVERY_RETRY_MAX_MS, DELIVERY_RETRY_BASE_MS * 2 ** delivery.attempt) + jitter;\n\t\t\t\tthis.#deliveries.push(delivery);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.#inFlightDeliveries.delete(delivery.jobId);\n\t\t\t\tthis.#pruneRetention();\n\t\t\t\tthis.#scheduleNextDelivery();\n\t\t\t\tthis.#disposeIfUnused();\n\t\t\t});\n\t}\n\n\t#scheduleNextDelivery(): void {\n\t\tconst next = this.#deliveries.reduce<number | undefined>(\n\t\t\t(soonest, delivery) =>\n\t\t\t\tsoonest === undefined ? delivery.nextAttemptAt : Math.min(soonest, delivery.nextAttemptAt),\n\t\t\tundefined,\n\t\t);\n\t\tif (next !== undefined) this.#scheduleDeliveryLoop(Math.max(0, next - Date.now()));\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/core/async/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEnF,MAAM,WAAW,4BAA4B;IAC5C,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AACD,UAAU,oBAAoB;IAC7B,iBAAiB,CAChB,OAAO,EAAE,uBAAuB,EAChC,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;CACjB;AAGD,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAavJ;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,CASxG;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAIvH"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/core/async/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEnF,MAAM,WAAW,4BAA4B;IAC5C,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AACD,UAAU,oBAAoB;IAC7B,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjG;AAED,wBAAgB,iCAAiC,CAChD,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,eAAe,EACzB,SAAS,CAAC,EAAE,MAAM,GAChB,uBAAuB,CAazB;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,oBAAoB,GAAG,4BAA4B,CASxG;AAED,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC3B,IAAI,CAIN"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/core/async/session-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAgBnD,MAAM,UAAU,iCAAiC,CAAC,OAA6B,EAAE,OAAyB,EAAE,SAAkB;IAC7H,OAAO,KAAK,EAAE,OAAgC,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,GAAG,EAAE,CACpB,OAAO,EAAE,QAAQ,KAAK,IAAI;YAC1B,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI;YAC7D,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;QAC7E,IAAI,OAAO,EAAE;YAAE,OAAO;QACtB,MAAM,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE;YACxC,SAAS,EAAE,UAAU;YACrB,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,aAAa,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;SACvD,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAA6B;IACzE,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC;IAC/F,IAAI,OAAwB,CAAC;IAC7B,OAAO,GAAG,IAAI,eAAe,CAAC;QAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,iCAAiC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC;KACxF,CAAC,CAAC;IACH,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAoC,EAAE,SAA6B;IAChH,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;QAAE,OAAO;IACnC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,EAAE,KAAK,OAAO;QAAE,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACxG,CAAC","sourcesContent":["import type { SendMessageOptions } from \"../extensions/index.js\";\nimport { AsyncJobManager } from \"./job-manager.js\";\nimport type { AsyncJobDeliveryHandler, AsyncJobDeliveryMessage } from \"./types.js\";\n\nexport interface SessionAsyncJobManagerHandle {\n\tmanager: AsyncJobManager;\n\towns: boolean;\n\tsessionId: symbol;\n}\ninterface AsyncDeliverySession {\n\tsendCustomMessage(\n\t\tmessage: AsyncJobDeliveryMessage,\n\t\toptions?: SendMessageOptions,\n\t): Promise<void>;\n}\n\n\nexport function createSessionAsyncDeliveryHandler(session: AsyncDeliverySession, manager?: AsyncJobManager, sessionId?: symbol): AsyncJobDeliveryHandler {\n\treturn async (message: AsyncJobDeliveryMessage) => {\n\t\tconst isStale = () =>\n\t\t\tmanager?.disposed === true ||\n\t\t\tmanager?.isDeliverySuppressed(message.details.jobId) === true ||\n\t\t\t(sessionId !== undefined && manager?.isSessionDisposed(sessionId) === true);\n\t\tif (isStale()) return;\n\t\tawait session.sendCustomMessage(message, {\n\t\t\tdeliverAs: \"followUp\",\n\t\t\ttriggerTurn: true,\n\t\t\tstageAdmissionKey: `async-job:${message.details.jobId}`,\n\t\t});\n\t};\n}\n\nexport function createSessionAsyncJobManager(session: AsyncDeliverySession): SessionAsyncJobManagerHandle {\n\tconst existing = AsyncJobManager.instance();\n\tif (existing) return { manager: existing, owns: false, sessionId: existing.registerSession() };\n\tlet manager: AsyncJobManager;\n\tmanager = new AsyncJobManager({\n\t\tonJobComplete: (message) => createSessionAsyncDeliveryHandler(session, manager)(message),\n\t});\n\tAsyncJobManager.setInstance(manager);\n\treturn { manager, owns: true, sessionId: manager.registerSession() };\n}\n\nexport function disposeSessionAsyncJobManager(manager: AsyncJobManager | undefined, sessionId: symbol | undefined): void {\n\tif (!manager || !sessionId) return;\n\tmanager.releaseSession(sessionId);\n\tif (manager.disposed && AsyncJobManager.instance() === manager) AsyncJobManager.setInstance(undefined);\n}\n\n"]}
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/core/async/session-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAYnD,MAAM,UAAU,iCAAiC,CAChD,OAA6B,EAC7B,OAAyB,EACzB,SAAkB;IAElB,OAAO,KAAK,EAAE,OAAgC,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,GAAG,EAAE,CACpB,OAAO,EAAE,QAAQ,KAAK,IAAI;YAC1B,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI;YAC7D,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;QAC7E,IAAI,OAAO,EAAE;YAAE,OAAO;QACtB,MAAM,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE;YACxC,SAAS,EAAE,UAAU;YACrB,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,aAAa,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;SACvD,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAA6B;IACzE,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;IAC5C,IAAI,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC;IAC/F,IAAI,OAAwB,CAAC;IAC7B,OAAO,GAAG,IAAI,eAAe,CAAC;QAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,iCAAiC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC;KACxF,CAAC,CAAC;IACH,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC5C,OAAoC,EACpC,SAA6B;IAE7B,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;QAAE,OAAO;IACnC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,EAAE,KAAK,OAAO;QAAE,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACxG,CAAC","sourcesContent":["import type { SendMessageOptions } from \"../extensions/index.js\";\nimport { AsyncJobManager } from \"./job-manager.js\";\nimport type { AsyncJobDeliveryHandler, AsyncJobDeliveryMessage } from \"./types.js\";\n\nexport interface SessionAsyncJobManagerHandle {\n\tmanager: AsyncJobManager;\n\towns: boolean;\n\tsessionId: symbol;\n}\ninterface AsyncDeliverySession {\n\tsendCustomMessage(message: AsyncJobDeliveryMessage, options?: SendMessageOptions): Promise<void>;\n}\n\nexport function createSessionAsyncDeliveryHandler(\n\tsession: AsyncDeliverySession,\n\tmanager?: AsyncJobManager,\n\tsessionId?: symbol,\n): AsyncJobDeliveryHandler {\n\treturn async (message: AsyncJobDeliveryMessage) => {\n\t\tconst isStale = () =>\n\t\t\tmanager?.disposed === true ||\n\t\t\tmanager?.isDeliverySuppressed(message.details.jobId) === true ||\n\t\t\t(sessionId !== undefined && manager?.isSessionDisposed(sessionId) === true);\n\t\tif (isStale()) return;\n\t\tawait session.sendCustomMessage(message, {\n\t\t\tdeliverAs: \"followUp\",\n\t\t\ttriggerTurn: true,\n\t\t\tstageAdmissionKey: `async-job:${message.details.jobId}`,\n\t\t});\n\t};\n}\n\nexport function createSessionAsyncJobManager(session: AsyncDeliverySession): SessionAsyncJobManagerHandle {\n\tconst existing = AsyncJobManager.instance();\n\tif (existing) return { manager: existing, owns: false, sessionId: existing.registerSession() };\n\tlet manager: AsyncJobManager;\n\tmanager = new AsyncJobManager({\n\t\tonJobComplete: (message) => createSessionAsyncDeliveryHandler(session, manager)(message),\n\t});\n\tAsyncJobManager.setInstance(manager);\n\treturn { manager, owns: true, sessionId: manager.registerSession() };\n}\n\nexport function disposeSessionAsyncJobManager(\n\tmanager: AsyncJobManager | undefined,\n\tsessionId: symbol | undefined,\n): void {\n\tif (!manager || !sessionId) return;\n\tmanager.releaseSession(sessionId);\n\tif (manager.disposed && AsyncJobManager.instance() === manager) AsyncJobManager.setInstance(undefined);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"atomic-guide-command.d.ts","sourceRoot":"","sources":["../../src/core/atomic-guide-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,gCAAgC,qCACT,CAAC;AA6NrC,QAAA,MAAM,cAAc;mBAEV,UAAU;;oBAET,UAAU;0BACJ,oBAAoB;;;mBAI3B,WAAW;;oBAEV,WAAW;0BACL,iBAAiB;;;mBAIxB,SAAS;;oBAER,SAAS;0BACH,0BAA0B;;;mBAIjC,WAAW;;oBAEV,YAAY;0BACN,sBAAsB;;EASpC,CAAC;AAEJ,KAAK,kBAAkB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,KAAK,sBAAsB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,sBAAsB,CAAC;AAE9D,eAAO,MAAM,yBAAyB,EAAE,SAAS,qBAAqB,EACtB,CAAC;AAiBjD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,GACb,MAAM,IAAI,qBAAqB,CAEjC;AAoCD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAOtE;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,GACb,gBAAgB,EAAE,GAAG,IAAI,CAa3B;AAED,iBAAS,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CActD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,GACV,MAAM,CAGR;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,qBAAqB,GAC5B,eAAe,CAEjB"}
1
+ {"version":3,"file":"atomic-guide-command.d.ts","sourceRoot":"","sources":["../../src/core/atomic-guide-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,eAAO,MAAM,gCAAgC,qCAAqC,CAAC;AA6NnF,QAAA,MAAM,cAAc;mBAEZ,UAAU;;oBAET,UAAU;0BACJ,oBAAoB;;;mBAI3B,WAAW;;oBAEV,WAAW;0BACL,iBAAiB;;;mBAIxB,SAAS;;oBAER,SAAS;0BACH,0BAA0B;;;mBAIjC,WAAW;;oBAEV,YAAY;0BACN,sBAAsB;;EASlC,CAAC;AAEJ,KAAK,kBAAkB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,KAAK,sBAAsB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,sBAAsB,CAAC;AAE9D,eAAO,MAAM,yBAAyB,EAAE,SAAS,qBAAqB,EAErE,CAAC;AAcF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,qBAAqB,CAEvF;AA6BD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAKtE;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAW3F;AAED,iBAAS,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CActD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAEvF"}
@@ -258,8 +258,7 @@ export function isAtomicGuideHelpChoice(choice) {
258
258
  const ATOMIC_GUIDE_TRAILING_PUNCTUATION = "?!.,;:";
259
259
  function stripTrailingAtomicGuidePunctuation(value) {
260
260
  let end = value.length;
261
- while (end > 0 &&
262
- ATOMIC_GUIDE_TRAILING_PUNCTUATION.includes(value.charAt(end - 1))) {
261
+ while (end > 0 && ATOMIC_GUIDE_TRAILING_PUNCTUATION.includes(value.charAt(end - 1))) {
263
262
  end--;
264
263
  }
265
264
  return value.slice(0, end);
@@ -1 +1 @@
1
- {"version":3,"file":"atomic-guide-command.js","sourceRoot":"","sources":["../../src/core/atomic-guide-command.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from \"node:path\";\nimport type { AutocompleteItem } from \"@earendil-works/pi-tui\";\nimport { getChangelogPath, parseChangelog } from \"../utils/changelog.ts\";\n\nexport const ATOMIC_GUIDE_COMMAND_NAME = \"atomic\";\nexport const ATOMIC_GUIDE_COMMAND_DESCRIPTION =\n \"Atomic onboarding and help guide\";\n\nconst OVERVIEW = `# Atomic overview\n\nAtomic turns non-trivial work into executable, inspectable workflows. Default to a workflow for implementation, build, debugging, bug fixes, migrations, features, scoped multi-file changes, and validated docs/code work, or whenever a request has dependencies, handoffs, uncertainty, review gates, measurable done criteria, or evidence requirements. Use direct chat for tiny deterministic low-risk answers or edits. Loop-shaped prompts such as \\`do X until Y\\`, \\`review/fix until passing\\`, or \\`run checks and fix until green\\` are especially strong workflow signals. Workflow-first is not builtin-only or monolithic: use named workflows, direct modes, author a custom TypeScript \\`workflow({...})\\` inline, or import reusable project/package and builtin definitions from \\`@bastani/workflows/builtin\\` and nest them with \\`ctx.workflow(...)\\`. Nested children may compose further children within \\`maxDepth\\`, enabling powerful research → implementation → verification → approval graphs from reusable parts. Start Atomic in a project with \\`atomic\\`, then talk to it normally. Use \\`@file\\` to attach files, \\`!command\\` to run shell output through the model, and \\`!!command\\` to run shell output without adding it to context.\n\n## Core session commands\n\n| Command | Use |\n|---|---|\n| \\`/login\\` | configure auth |\n| \\`/model\\` | switch model |\n| \\`/settings\\` | thinking level, theme, message delivery, transport |\n| \\`/new\\`, \\`/resume\\` | start or resume sessions |\n| \\`/tree\\`, \\`/fork\\`, \\`/clone\\` | branch or navigate session history |\n| \\`/compact\\` | delete safe older context verbatim |\n| \\`/hotkeys\\`, \\`/changelog\\` | local help and release notes |\n\n## Examples of using Atomic\n\n| Goal | How to use |\n|---|---|\n| On-call / broken behavior | Use a focused workflow to reproduce, diagnose, repair, and validate; direct debugger/subagent calls remain useful as stages or for tiny deterministic diagnosis |\n| Research → spec → implementation | Chain \\`/skill:research-codebase\\` → \\`/skill:create-spec\\` → a named or custom implementation workflow with explicit validation and review |\n| Testing / regression hardening | Use a workflow for test/fix loops so retries, evidence, and the passing stop condition are tracked |\n| Large repo discovery | Run \\`/parallel codebase-locator \"map the area\" -> codebase-analyzer \"trace the current flow\" -> codebase-pattern-finder \"find patterns\" --bg\\`, or use repository-focused \\`fan-out-and-synthesize\\` branches plus a synthesis barrier |\n| UI / product polish | Run \\`/skill:impeccable\\` for interface critique and refinement, or \\`/workflow open-claude-design\\` for generation + refinement loops |\n\n## Built-in workflows\n\n| Workflow | When to use | How to run |\n|---|---|---|\n| \\`classify-and-act\\` | structured routing with a low-confidence human fallback | \\`/workflow classify-and-act prompt=\"Triage this request\"\\` |\n| \\`fan-out-and-synthesize\\` | independent slices or repository-focused research with artifact synthesis | \\`/workflow fan-out-and-synthesize prompt=\"Map payment retries by subsystem\"\\` |\n| \\`adversarial-verification\\` | fresh verification and bounded repair of a candidate | \\`/workflow adversarial-verification task=\"Verify the migration patch\"\\` |\n| \\`generate-and-filter\\` | generate many candidates and keep a distinct shortlist | \\`/workflow generate-and-filter prompt=\"Propose command names\"\\` |\n| \\`tournament\\` | compare whole solutions through balanced pairwise judging | \\`/workflow tournament prompt=\"Design the retry strategy\"\\` |\n| \\`loop-until-done\\` | iterate until explicit evidence passes or the bound is exhausted | \\`/workflow loop-until-done prompt=\"Repair failures until tests pass\"\\` |\n| \\`goal\\` | ledger-backed autonomous work with receipts and reviewer-gated completion | \\`/workflow goal objective=\"Update CLI docs and validate the docs build\"\\` |\n| \\`ralph\\` | research-first delegated implementation with bounded multi-model review | \\`/workflow ralph prompt=\"Implement specs/rate-limit.md\"\\` |\n| \\`open-claude-design\\` | UI and design-system generation and refinement | \\`/workflow open-claude-design prompt=\"Refresh the settings page hierarchy\"\\` |\n\nUse \\`/workflow list\\` to see what is available and \\`/workflow inputs <name>\\` to inspect inputs in your environment.\n\n## Top skills\n\n| Skill | When to use | How to run |\n|---|---|---|\n| \\`research-codebase\\` | write a grounded research artifact for one subsystem or question | \\`/skill:research-codebase how the rate limiter works in src/middleware/\\` |\n| \\`create-spec\\` | turn research into an implementation-ready plan | \\`/skill:create-spec from research/docs/<date>-<topic>.md\\` |\n| \\`tdd\\` | do test-first feature or bug work | \\`/skill:tdd\\` |\n| \\`prompt-engineer\\` | tighten a vague prompt before a long run | \\`/skill:prompt-engineer Draft a sharper implementation prompt for ...\\` |\n| \\`subagent\\` | learn delegation patterns and exact \\`/run\\`, \\`/parallel\\`, and \\`/chain\\` usage | \\`/skill:subagent\\` |\n| \\`impeccable\\` | critique or refine frontend and product UI | \\`/skill:impeccable\\` |\n\n## Subagents\n\nSubagents are focused child Atomic sessions you can point at one job inside the repo.\n\n| Built-in subagent | Use |\n|---|---|\n| \\`codebase-locator\\` | find relevant files, tests, entrypoints, and configs |\n| \\`codebase-analyzer\\` | explain current behavior with file:line refs |\n| \\`codebase-pattern-finder\\` | find existing code to model after |\n| \\`debugger\\` | reproduce, diagnose, and fix broken behavior |\n\nHow the direct commands map to repo work:\n- \\`/run\\` = one specialist on one job, for example \\`/run codebase-locator \"Map the webhook retry flow\"\\`\n- \\`/parallel\\` = several independent specialists at once, for example \\`/parallel codebase-locator \"map retry files\" -> codebase-pattern-finder \"find existing retry/backoff patterns\" -> codebase-online-researcher \"research current retry guidance\" --bg\\`\n- \\`/chain\\` = ordered handoffs, for example \\`/chain codebase-locator \"find the auth files\" -> codebase-analyzer \"trace the auth flow\" -> debugger \"patch the failing auth edge case\"\\`\n\n─────────────────────────────────────────────────────────────────\n\nWhere to next:\n\n\\`/atomic example\\` — see the pieces used on a code task\n\\`/atomic workflows\\` — learn when to use workflows`;\n\nconst EXAMPLE = `# Practical example\n\nThis example shows a spec-driven development process whose clearly delegated autonomous implementation benefits from durable workflow execution. For interactive or conversation-led work, stay inline or use bounded subagents while the parent remains in control. Type the examples below into the Atomic TUI chat after starting \\`atomic\\` in your project.\n\n## 1. Research what exists\n\nUse \\`/skill:research-codebase\\` for a scoped area, subsystem, or directory:\n\n\\`/skill:research-codebase how the rate limiter works in src/middleware/\\`\n\nFor repository-wide research, use \\`fan-out-and-synthesize\\` with distinct subsystem partitions, artifact outputs, and a synthesis prompt that cites concrete paths:\n\n\\`/workflow fan-out-and-synthesize prompt=\"Partition payment retries by subsystem and synthesize cited end-to-end findings\"\\`\n\nIf the research prompt is vague, tighten it first with \\`/skill:prompt-engineer\\`:\n\n\\`/skill:prompt-engineer Draft a sharper repo-research prompt for understanding payment retries end to end, including retries, queues, and failure handling.\\`\n\n## 2. Create a spec when requirements are fuzzy\n\nSkip this if the implementation request is already precise.\n\n\\`/skill:create-spec from research/docs/<date>-<topic>.md\\`\n\n## 3. Implement with review built in\n\nDefault to a workflow for non-trivial implementation and review. Use direct chat only for tiny deterministic low-risk edits; use focused subagents inside workflow stages or for bounded specialist passes. Choose an installed workflow when it fits, or author a custom TypeScript workflow inline from the starter patterns when the task needs a richer graph.\n\nFor implementation with review built in, author a task-specific worker → fresh verifier → reducer loop. Give it literal acceptance criteria, deterministic checks, evidence-backed repair payloads, and a bounded stop condition:\n\n\\`Create and run a workflow that implements specs/<date>-<topic>.md, runs focused tests, sends the patch to fresh verifiers, and repairs findings until the documented behavior passes or the iteration bound is reached.\\`\n\nLoop or stop-condition phrasing is a key workflow signal. Encode \\`do X until Y\\`, \\`review/fix until passing\\`, or \\`run checks and fix until green\\` as explicit bounded workflow gates rather than informal retries.\n\n## 4. Decide and land\n\nUse the workflow's deterministic evidence, verifier decision, remaining-work report, and bound-exhaustion state to decide whether to ship, repair, unblock, or clarify. Keep PR/MR creation, deployment, and publication as separately authorized post-approval actions.\n\nIf you implemented directly instead of using a workflow, you can still run:\n\n\\`/parallel-review current diff\\`\n\nAtomic will synthesize reviewer feedback and ask before applying fixes.\n\n─────────────────────────────────────────────────────────────────\n\nWhere to next:\n\n\\`/atomic workflows\\` — learn when to use workflows\n\\`/atomic overview\\` — quick refresh`;\n\nconst WORKFLOWS = `# Workflows primer\n\nA workflow is a TypeScript-defined pipeline exported from \\`workflow({...})\\`. It can run tasks, chains, parallel fan-out, human-in-the-loop prompts, background status, and model fallback chains.\n\nDefault to workflows for non-trivial work and requests with inherent structure plus a verifiable objective. Implementation, debugging, migrations, multi-file changes, validation, review, evidence requirements, and explicit stop conditions are workflow-shaped; use direct chat only for tiny deterministic low-risk answers or edits.\n\nWorkflow-first is not builtin-only or monolithic. Atomic can author custom TypeScript \\`workflow({...})\\` definitions inline, and workflows can import reusable project/package definitions or builtins from \\`@bastani/workflows/builtin\\`, then nest them with \\`ctx.workflow(...)\\`. Imported children can nest further children within \\`maxDepth\\`, so compose proven research, implementation, design, verification, and approval workflows instead of copying their stages. Use the documented starter patterns for classify-and-act routing, dynamic fan-out and synthesis, adversarial verification, candidate selection, and bounded convergence. Atomic writes the parent definition, reloads it, and runs the composed graph.\n\n## Built-in workflows\n\n| Workflow | When to use | How to run |\n|---|---|---|\n| \\`classify-and-act\\` | structured routing | \\`/workflow classify-and-act prompt=\"Triage this request\"\\` |\n| \\`fan-out-and-synthesize\\` | independent slices or repository research | \\`/workflow fan-out-and-synthesize prompt=\"Map payment retries by subsystem\"\\` |\n| \\`adversarial-verification\\` | fresh verification and bounded repair | \\`/workflow adversarial-verification task=\"Verify the patch\"\\` |\n| \\`generate-and-filter\\` | candidate generation and shortlisting | \\`/workflow generate-and-filter prompt=\"Propose command names\"\\` |\n| \\`tournament\\` | balanced whole-solution comparison | \\`/workflow tournament prompt=\"Design the retry strategy\"\\` |\n| \\`loop-until-done\\` | bounded convergence on explicit evidence | \\`/workflow loop-until-done prompt=\"Repair failures until tests pass\"\\` |\n| \\`goal\\` | durable ledger, bounded orchestration, and reviewer-gated completion | \\`/workflow goal objective=\"Update CLI docs and validate the docs build\"\\` |\n| \\`ralph\\` | research-first delegated implementation and iterative review | \\`/workflow ralph prompt=\"Implement specs/rate-limit.md\"\\` |\n| \\`open-claude-design\\` | frontend and product design | \\`/workflow open-claude-design prompt=\"Refresh the settings page hierarchy\"\\` |\n\nUse \\`/workflow inputs <name>\\` to inspect exact inputs. Goal and Ralph skip PR creation unless \\`create_pr=true\\` explicitly authorizes their post-approval final stage. Use \\`/skill:research-codebase\\` for one focused subsystem and repository-focused \\`fan-out-and-synthesize\\` for independent whole-repository slices.\n\nIf you are drafting research, reviewer, or synthesis prompts for a workflow, use \\`/skill:prompt-engineer\\` first. It is a good fit when a stage prompt feels vague, overloaded, or underspecified.\n\n## What good workflow authoring looks like\n\nA good workflow request is explicit about stage purpose, model choice, handoff, and the decision each step must return.\n\nFor workflow-owned side effects such as filesystem writes, network mutations, and external API actions, prefer \\`ctx.tool(name, args, fn)\\`: completed calls are durably cached, so resume returns the saved result without rerunning \\`fn\\`. Keep pure computation as ordinary TypeScript, and do not wrap agent-stage internals or every function call indiscriminately.\n\nExample: ask Atomic in chat with something like this:\n\n~~~text\nCreate a reusable workflow called review-changes.\n\nIt should accept one required text input called target for a diff, PR summary, or review target.\n\nRun two independent review stages in parallel with fresh context:\n- one reviewer focused on correctness, regressions, and missing tests using openai-codex/gpt-5.5 at xhigh thinking\n- one reviewer focused on edge cases, maintainability, and hidden risks using anthropic/claude-opus-4-8 at xhigh thinking\n\nThen add an aggregate stage that consolidates both reviews, deduplicates overlap, keeps only evidence-backed issues, and separates blockers from optional suggestions using openai/gpt-5.5 at high thinking.\n\nFinally add an adjudicate stage using anthropic/claude-sonnet-4 at high thinking that decides what to fix now, what to defer, and what to reject. Return a short action list with rationale.\n\nThe workflow should return structured output with consolidated_review and decision fields.\n~~~\n\nWhy this is good:\n- it names the workflow and required input\n- it specifies which stages are parallel vs sequential\n- each stage has one job\n- it defines the handoff and final outputs\n- it calls out model choice and thinking level where that matters\n\n## Run and inspect\n\n\\`/workflow list\\`\n\n\\`/workflow inputs fan-out-and-synthesize\\`\n\n\\`/workflow fan-out-and-synthesize prompt=\"Partition the settings flow by subsystem and synthesize cited findings\"\\`\n\n\\`/workflow inputs adversarial-verification\\`\n\n\\`/workflow adversarial-verification task=\"Verify the settings form validation patch\"\\`\n\n\\`/workflow status\\`\n\n\\`/workflow connect <run-id>\\`\n\n\\`/workflow interrupt <run-id>\\`\n\n\\`/workflow quit <run-id>\\`\n\n\\`/workflow resume <run-id>\\`\n\nWorkflows run as background tasks. Use F2 or \\`/workflow connect <run-id>\\` for the graph viewer. Human-in-the-loop prompts appear there, not as chat modals, and awaiting-input states do not wake the main chat agent. Completion and failure notices are steered back into the main chat; answers submitted in the workflow UI interrupt stale main-chat questions so the model does not ask again.\n\n## Author your own\n\nDescribe your workflow in plain chat — say what you want the workflow to accomplish, what inputs it should accept, what stages should run, and what final output or decision it should return. Atomic will use the workflow docs to scaffold a reusable definition under \\`.atomic/workflows/\\`, ask clarifying questions when stage purpose, models, or handoffs are ambiguous, and run \\`/workflow reload\\` so you can launch it immediately.\n\n─────────────────────────────────────────────────────────────────\n\nWhere to next:\n\n\\`/atomic example\\` — see workflows in a normal task flow\n\\`/atomic overview\\` — quick refresh`;\n\nconst GUIDE_SECTIONS = [\n {\n name: \"overview\",\n aliases: [],\n label: \"overview\",\n description: \"30-second overview\",\n render: () => OVERVIEW,\n },\n {\n name: \"workflows\",\n aliases: [\"workflow\"],\n label: \"workflows\",\n description: \"Workflow primer\",\n render: () => WORKFLOWS,\n },\n {\n name: \"example\",\n aliases: [\"examples\"],\n label: \"example\",\n description: \"Practical first workflow\",\n render: () => EXAMPLE,\n },\n {\n name: \"whats-new\",\n aliases: [\"what's new\", \"whats new\", \"news\", \"updates\", \"changelog\"],\n label: \"what's new\",\n description: \"Recent release notes\",\n render: readLatestStableChangelog,\n },\n] as const satisfies readonly {\n readonly name: string;\n readonly aliases: readonly string[];\n readonly label: string;\n readonly description: string;\n readonly render: (cwd: string) => string;\n}[];\n\ntype AtomicGuideSection = (typeof GUIDE_SECTIONS)[number];\ntype AtomicGuideSectionName = AtomicGuideSection[\"name\"];\n\nexport type AtomicGuideHelpChoice = AtomicGuideSection[\"label\"];\n\nexport type AtomicGuideMode = \"help\" | AtomicGuideSectionName;\n\nexport const ATOMIC_GUIDE_HELP_CHOICES: readonly AtomicGuideHelpChoice[] =\n GUIDE_SECTIONS.map((section) => section.label);\n\nconst GUIDE_SECTIONS_BY_NAME = new Map<\n AtomicGuideSectionName,\n AtomicGuideSection\n>(GUIDE_SECTIONS.map((section) => [section.name, section]));\nconst GUIDE_SECTIONS_BY_LABEL = new Map<string, AtomicGuideSection>(\n GUIDE_SECTIONS.map((section) => [section.label, section]),\n);\nconst GUIDE_SECTIONS_BY_INPUT = new Map<string, AtomicGuideSection>(\n GUIDE_SECTIONS.flatMap((section) =>\n [section.name, section.label, ...section.aliases].map(\n (input) => [input, section] as const,\n ),\n ),\n);\n\nexport function isAtomicGuideHelpChoice(\n choice: string,\n): choice is AtomicGuideHelpChoice {\n return GUIDE_SECTIONS_BY_LABEL.has(choice);\n}\n\nconst ATOMIC_GUIDE_TRAILING_PUNCTUATION = \"?!.,;:\";\n\nfunction stripTrailingAtomicGuidePunctuation(value: string): string {\n let end = value.length;\n while (\n end > 0 &&\n ATOMIC_GUIDE_TRAILING_PUNCTUATION.includes(value.charAt(end - 1))\n ) {\n end--;\n }\n return value.slice(0, end);\n}\n\nfunction getGuideSectionForChoice(\n choice: string,\n): AtomicGuideSection | undefined {\n return GUIDE_SECTIONS_BY_LABEL.get(choice);\n}\n\nfunction getGuideSectionForMode(\n mode: AtomicGuideSectionName,\n): AtomicGuideSection {\n const section = GUIDE_SECTIONS_BY_NAME.get(mode);\n if (!section) throw new Error(`Unknown Atomic guide section: ${mode}`);\n return section;\n}\n\nfunction getAtomicGuideHelpMenu(): string {\n const sectionHelp = GUIDE_SECTIONS.map(\n (section) => `- \\`${section.label}\\` — run \\`/atomic ${section.label}\\``,\n ).join(\"\\n\");\n return `# Atomic\\n\\nSelect where to start:\\n\\n${sectionHelp}`;\n}\n\nexport function normalizeAtomicGuideMode(args: string): AtomicGuideMode {\n const normalized = stripTrailingAtomicGuidePunctuation(\n args.trim().toLowerCase(),\n );\n if (!normalized) return \"help\";\n\n return GUIDE_SECTIONS_BY_INPUT.get(normalized)?.name ?? \"help\";\n}\n\nexport function getAtomicGuideArgumentCompletions(\n prefix: string,\n): AutocompleteItem[] | null {\n const query = prefix.trim().toLowerCase();\n const items = GUIDE_SECTIONS.map((section) => ({\n value: section.label,\n label: section.label,\n description: section.description,\n }));\n const filtered = query\n ? items.filter(\n (item) => item.value.startsWith(query) || item.label.startsWith(query),\n )\n : items;\n return filtered.length > 0 ? filtered : null;\n}\n\nfunction readLatestStableChangelog(cwd: string): string {\n const changelogPath = getChangelogPath();\n const stableSections = parseChangelog(changelogPath)\n .filter((entry) => entry.prerelease === null)\n .slice(0, 3)\n .map((entry) => entry.content.trim())\n .filter(Boolean);\n\n if (stableSections.length === 0) {\n return `# What's new\\n\\nNo stable release sections were found. Try \\`/changelog\\` for the interactive changelog viewer.\\n\\n─────────────────────────────────────────────────────────────────\\n\\nWhere to next:\\n\\n\\`/atomic example\\` — see a practical first workflow\\n\\`/atomic overview\\` — quick refresh`;\n }\n\n const relativePath = path.relative(cwd, changelogPath) || changelogPath;\n return `# What's new\\n\\n${stableSections.join(\"\\n\\n\")}\\n\\nSource: \\`${relativePath}\\`\\n\\n─────────────────────────────────────────────────────────────────\\n\\nWhere to next:\\n\\n\\`/atomic example\\` — see a practical first workflow\\n\\`/atomic overview\\` — quick refresh`;\n}\n\nexport function getAtomicGuideMessage(\n mode: AtomicGuideMode,\n cwd: string,\n): string {\n if (mode === \"help\") return getAtomicGuideHelpMenu();\n return getGuideSectionForMode(mode).render(cwd);\n}\n\nexport function atomicGuideModeForChoice(\n choice: AtomicGuideHelpChoice,\n): AtomicGuideMode {\n return getGuideSectionForChoice(choice)?.name ?? \"help\";\n}\n"]}
1
+ {"version":3,"file":"atomic-guide-command.js","sourceRoot":"","sources":["../../src/core/atomic-guide-command.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from \"node:path\";\nimport type { AutocompleteItem } from \"@earendil-works/pi-tui\";\nimport { getChangelogPath, parseChangelog } from \"../utils/changelog.ts\";\n\nexport const ATOMIC_GUIDE_COMMAND_NAME = \"atomic\";\nexport const ATOMIC_GUIDE_COMMAND_DESCRIPTION = \"Atomic onboarding and help guide\";\n\nconst OVERVIEW = `# Atomic overview\n\nAtomic turns non-trivial work into executable, inspectable workflows. Default to a workflow for implementation, build, debugging, bug fixes, migrations, features, scoped multi-file changes, and validated docs/code work, or whenever a request has dependencies, handoffs, uncertainty, review gates, measurable done criteria, or evidence requirements. Use direct chat for tiny deterministic low-risk answers or edits. Loop-shaped prompts such as \\`do X until Y\\`, \\`review/fix until passing\\`, or \\`run checks and fix until green\\` are especially strong workflow signals. Workflow-first is not builtin-only or monolithic: use named workflows, direct modes, author a custom TypeScript \\`workflow({...})\\` inline, or import reusable project/package and builtin definitions from \\`@bastani/workflows/builtin\\` and nest them with \\`ctx.workflow(...)\\`. Nested children may compose further children within \\`maxDepth\\`, enabling powerful research → implementation → verification → approval graphs from reusable parts. Start Atomic in a project with \\`atomic\\`, then talk to it normally. Use \\`@file\\` to attach files, \\`!command\\` to run shell output through the model, and \\`!!command\\` to run shell output without adding it to context.\n\n## Core session commands\n\n| Command | Use |\n|---|---|\n| \\`/login\\` | configure auth |\n| \\`/model\\` | switch model |\n| \\`/settings\\` | thinking level, theme, message delivery, transport |\n| \\`/new\\`, \\`/resume\\` | start or resume sessions |\n| \\`/tree\\`, \\`/fork\\`, \\`/clone\\` | branch or navigate session history |\n| \\`/compact\\` | delete safe older context verbatim |\n| \\`/hotkeys\\`, \\`/changelog\\` | local help and release notes |\n\n## Examples of using Atomic\n\n| Goal | How to use |\n|---|---|\n| On-call / broken behavior | Use a focused workflow to reproduce, diagnose, repair, and validate; direct debugger/subagent calls remain useful as stages or for tiny deterministic diagnosis |\n| Research → spec → implementation | Chain \\`/skill:research-codebase\\` → \\`/skill:create-spec\\` → a named or custom implementation workflow with explicit validation and review |\n| Testing / regression hardening | Use a workflow for test/fix loops so retries, evidence, and the passing stop condition are tracked |\n| Large repo discovery | Run \\`/parallel codebase-locator \"map the area\" -> codebase-analyzer \"trace the current flow\" -> codebase-pattern-finder \"find patterns\" --bg\\`, or use repository-focused \\`fan-out-and-synthesize\\` branches plus a synthesis barrier |\n| UI / product polish | Run \\`/skill:impeccable\\` for interface critique and refinement, or \\`/workflow open-claude-design\\` for generation + refinement loops |\n\n## Built-in workflows\n\n| Workflow | When to use | How to run |\n|---|---|---|\n| \\`classify-and-act\\` | structured routing with a low-confidence human fallback | \\`/workflow classify-and-act prompt=\"Triage this request\"\\` |\n| \\`fan-out-and-synthesize\\` | independent slices or repository-focused research with artifact synthesis | \\`/workflow fan-out-and-synthesize prompt=\"Map payment retries by subsystem\"\\` |\n| \\`adversarial-verification\\` | fresh verification and bounded repair of a candidate | \\`/workflow adversarial-verification task=\"Verify the migration patch\"\\` |\n| \\`generate-and-filter\\` | generate many candidates and keep a distinct shortlist | \\`/workflow generate-and-filter prompt=\"Propose command names\"\\` |\n| \\`tournament\\` | compare whole solutions through balanced pairwise judging | \\`/workflow tournament prompt=\"Design the retry strategy\"\\` |\n| \\`loop-until-done\\` | iterate until explicit evidence passes or the bound is exhausted | \\`/workflow loop-until-done prompt=\"Repair failures until tests pass\"\\` |\n| \\`goal\\` | ledger-backed autonomous work with receipts and reviewer-gated completion | \\`/workflow goal objective=\"Update CLI docs and validate the docs build\"\\` |\n| \\`ralph\\` | research-first delegated implementation with bounded multi-model review | \\`/workflow ralph prompt=\"Implement specs/rate-limit.md\"\\` |\n| \\`open-claude-design\\` | UI and design-system generation and refinement | \\`/workflow open-claude-design prompt=\"Refresh the settings page hierarchy\"\\` |\n\nUse \\`/workflow list\\` to see what is available and \\`/workflow inputs <name>\\` to inspect inputs in your environment.\n\n## Top skills\n\n| Skill | When to use | How to run |\n|---|---|---|\n| \\`research-codebase\\` | write a grounded research artifact for one subsystem or question | \\`/skill:research-codebase how the rate limiter works in src/middleware/\\` |\n| \\`create-spec\\` | turn research into an implementation-ready plan | \\`/skill:create-spec from research/docs/<date>-<topic>.md\\` |\n| \\`tdd\\` | do test-first feature or bug work | \\`/skill:tdd\\` |\n| \\`prompt-engineer\\` | tighten a vague prompt before a long run | \\`/skill:prompt-engineer Draft a sharper implementation prompt for ...\\` |\n| \\`subagent\\` | learn delegation patterns and exact \\`/run\\`, \\`/parallel\\`, and \\`/chain\\` usage | \\`/skill:subagent\\` |\n| \\`impeccable\\` | critique or refine frontend and product UI | \\`/skill:impeccable\\` |\n\n## Subagents\n\nSubagents are focused child Atomic sessions you can point at one job inside the repo.\n\n| Built-in subagent | Use |\n|---|---|\n| \\`codebase-locator\\` | find relevant files, tests, entrypoints, and configs |\n| \\`codebase-analyzer\\` | explain current behavior with file:line refs |\n| \\`codebase-pattern-finder\\` | find existing code to model after |\n| \\`debugger\\` | reproduce, diagnose, and fix broken behavior |\n\nHow the direct commands map to repo work:\n- \\`/run\\` = one specialist on one job, for example \\`/run codebase-locator \"Map the webhook retry flow\"\\`\n- \\`/parallel\\` = several independent specialists at once, for example \\`/parallel codebase-locator \"map retry files\" -> codebase-pattern-finder \"find existing retry/backoff patterns\" -> codebase-online-researcher \"research current retry guidance\" --bg\\`\n- \\`/chain\\` = ordered handoffs, for example \\`/chain codebase-locator \"find the auth files\" -> codebase-analyzer \"trace the auth flow\" -> debugger \"patch the failing auth edge case\"\\`\n\n─────────────────────────────────────────────────────────────────\n\nWhere to next:\n\n\\`/atomic example\\` — see the pieces used on a code task\n\\`/atomic workflows\\` — learn when to use workflows`;\n\nconst EXAMPLE = `# Practical example\n\nThis example shows a spec-driven development process whose clearly delegated autonomous implementation benefits from durable workflow execution. For interactive or conversation-led work, stay inline or use bounded subagents while the parent remains in control. Type the examples below into the Atomic TUI chat after starting \\`atomic\\` in your project.\n\n## 1. Research what exists\n\nUse \\`/skill:research-codebase\\` for a scoped area, subsystem, or directory:\n\n\\`/skill:research-codebase how the rate limiter works in src/middleware/\\`\n\nFor repository-wide research, use \\`fan-out-and-synthesize\\` with distinct subsystem partitions, artifact outputs, and a synthesis prompt that cites concrete paths:\n\n\\`/workflow fan-out-and-synthesize prompt=\"Partition payment retries by subsystem and synthesize cited end-to-end findings\"\\`\n\nIf the research prompt is vague, tighten it first with \\`/skill:prompt-engineer\\`:\n\n\\`/skill:prompt-engineer Draft a sharper repo-research prompt for understanding payment retries end to end, including retries, queues, and failure handling.\\`\n\n## 2. Create a spec when requirements are fuzzy\n\nSkip this if the implementation request is already precise.\n\n\\`/skill:create-spec from research/docs/<date>-<topic>.md\\`\n\n## 3. Implement with review built in\n\nDefault to a workflow for non-trivial implementation and review. Use direct chat only for tiny deterministic low-risk edits; use focused subagents inside workflow stages or for bounded specialist passes. Choose an installed workflow when it fits, or author a custom TypeScript workflow inline from the starter patterns when the task needs a richer graph.\n\nFor implementation with review built in, author a task-specific worker → fresh verifier → reducer loop. Give it literal acceptance criteria, deterministic checks, evidence-backed repair payloads, and a bounded stop condition:\n\n\\`Create and run a workflow that implements specs/<date>-<topic>.md, runs focused tests, sends the patch to fresh verifiers, and repairs findings until the documented behavior passes or the iteration bound is reached.\\`\n\nLoop or stop-condition phrasing is a key workflow signal. Encode \\`do X until Y\\`, \\`review/fix until passing\\`, or \\`run checks and fix until green\\` as explicit bounded workflow gates rather than informal retries.\n\n## 4. Decide and land\n\nUse the workflow's deterministic evidence, verifier decision, remaining-work report, and bound-exhaustion state to decide whether to ship, repair, unblock, or clarify. Keep PR/MR creation, deployment, and publication as separately authorized post-approval actions.\n\nIf you implemented directly instead of using a workflow, you can still run:\n\n\\`/parallel-review current diff\\`\n\nAtomic will synthesize reviewer feedback and ask before applying fixes.\n\n─────────────────────────────────────────────────────────────────\n\nWhere to next:\n\n\\`/atomic workflows\\` — learn when to use workflows\n\\`/atomic overview\\` — quick refresh`;\n\nconst WORKFLOWS = `# Workflows primer\n\nA workflow is a TypeScript-defined pipeline exported from \\`workflow({...})\\`. It can run tasks, chains, parallel fan-out, human-in-the-loop prompts, background status, and model fallback chains.\n\nDefault to workflows for non-trivial work and requests with inherent structure plus a verifiable objective. Implementation, debugging, migrations, multi-file changes, validation, review, evidence requirements, and explicit stop conditions are workflow-shaped; use direct chat only for tiny deterministic low-risk answers or edits.\n\nWorkflow-first is not builtin-only or monolithic. Atomic can author custom TypeScript \\`workflow({...})\\` definitions inline, and workflows can import reusable project/package definitions or builtins from \\`@bastani/workflows/builtin\\`, then nest them with \\`ctx.workflow(...)\\`. Imported children can nest further children within \\`maxDepth\\`, so compose proven research, implementation, design, verification, and approval workflows instead of copying their stages. Use the documented starter patterns for classify-and-act routing, dynamic fan-out and synthesis, adversarial verification, candidate selection, and bounded convergence. Atomic writes the parent definition, reloads it, and runs the composed graph.\n\n## Built-in workflows\n\n| Workflow | When to use | How to run |\n|---|---|---|\n| \\`classify-and-act\\` | structured routing | \\`/workflow classify-and-act prompt=\"Triage this request\"\\` |\n| \\`fan-out-and-synthesize\\` | independent slices or repository research | \\`/workflow fan-out-and-synthesize prompt=\"Map payment retries by subsystem\"\\` |\n| \\`adversarial-verification\\` | fresh verification and bounded repair | \\`/workflow adversarial-verification task=\"Verify the patch\"\\` |\n| \\`generate-and-filter\\` | candidate generation and shortlisting | \\`/workflow generate-and-filter prompt=\"Propose command names\"\\` |\n| \\`tournament\\` | balanced whole-solution comparison | \\`/workflow tournament prompt=\"Design the retry strategy\"\\` |\n| \\`loop-until-done\\` | bounded convergence on explicit evidence | \\`/workflow loop-until-done prompt=\"Repair failures until tests pass\"\\` |\n| \\`goal\\` | durable ledger, bounded orchestration, and reviewer-gated completion | \\`/workflow goal objective=\"Update CLI docs and validate the docs build\"\\` |\n| \\`ralph\\` | research-first delegated implementation and iterative review | \\`/workflow ralph prompt=\"Implement specs/rate-limit.md\"\\` |\n| \\`open-claude-design\\` | frontend and product design | \\`/workflow open-claude-design prompt=\"Refresh the settings page hierarchy\"\\` |\n\nUse \\`/workflow inputs <name>\\` to inspect exact inputs. Goal and Ralph skip PR creation unless \\`create_pr=true\\` explicitly authorizes their post-approval final stage. Use \\`/skill:research-codebase\\` for one focused subsystem and repository-focused \\`fan-out-and-synthesize\\` for independent whole-repository slices.\n\nIf you are drafting research, reviewer, or synthesis prompts for a workflow, use \\`/skill:prompt-engineer\\` first. It is a good fit when a stage prompt feels vague, overloaded, or underspecified.\n\n## What good workflow authoring looks like\n\nA good workflow request is explicit about stage purpose, model choice, handoff, and the decision each step must return.\n\nFor workflow-owned side effects such as filesystem writes, network mutations, and external API actions, prefer \\`ctx.tool(name, args, fn)\\`: completed calls are durably cached, so resume returns the saved result without rerunning \\`fn\\`. Keep pure computation as ordinary TypeScript, and do not wrap agent-stage internals or every function call indiscriminately.\n\nExample: ask Atomic in chat with something like this:\n\n~~~text\nCreate a reusable workflow called review-changes.\n\nIt should accept one required text input called target for a diff, PR summary, or review target.\n\nRun two independent review stages in parallel with fresh context:\n- one reviewer focused on correctness, regressions, and missing tests using openai-codex/gpt-5.5 at xhigh thinking\n- one reviewer focused on edge cases, maintainability, and hidden risks using anthropic/claude-opus-4-8 at xhigh thinking\n\nThen add an aggregate stage that consolidates both reviews, deduplicates overlap, keeps only evidence-backed issues, and separates blockers from optional suggestions using openai/gpt-5.5 at high thinking.\n\nFinally add an adjudicate stage using anthropic/claude-sonnet-4 at high thinking that decides what to fix now, what to defer, and what to reject. Return a short action list with rationale.\n\nThe workflow should return structured output with consolidated_review and decision fields.\n~~~\n\nWhy this is good:\n- it names the workflow and required input\n- it specifies which stages are parallel vs sequential\n- each stage has one job\n- it defines the handoff and final outputs\n- it calls out model choice and thinking level where that matters\n\n## Run and inspect\n\n\\`/workflow list\\`\n\n\\`/workflow inputs fan-out-and-synthesize\\`\n\n\\`/workflow fan-out-and-synthesize prompt=\"Partition the settings flow by subsystem and synthesize cited findings\"\\`\n\n\\`/workflow inputs adversarial-verification\\`\n\n\\`/workflow adversarial-verification task=\"Verify the settings form validation patch\"\\`\n\n\\`/workflow status\\`\n\n\\`/workflow connect <run-id>\\`\n\n\\`/workflow interrupt <run-id>\\`\n\n\\`/workflow quit <run-id>\\`\n\n\\`/workflow resume <run-id>\\`\n\nWorkflows run as background tasks. Use F2 or \\`/workflow connect <run-id>\\` for the graph viewer. Human-in-the-loop prompts appear there, not as chat modals, and awaiting-input states do not wake the main chat agent. Completion and failure notices are steered back into the main chat; answers submitted in the workflow UI interrupt stale main-chat questions so the model does not ask again.\n\n## Author your own\n\nDescribe your workflow in plain chat — say what you want the workflow to accomplish, what inputs it should accept, what stages should run, and what final output or decision it should return. Atomic will use the workflow docs to scaffold a reusable definition under \\`.atomic/workflows/\\`, ask clarifying questions when stage purpose, models, or handoffs are ambiguous, and run \\`/workflow reload\\` so you can launch it immediately.\n\n─────────────────────────────────────────────────────────────────\n\nWhere to next:\n\n\\`/atomic example\\` — see workflows in a normal task flow\n\\`/atomic overview\\` — quick refresh`;\n\nconst GUIDE_SECTIONS = [\n\t{\n\t\tname: \"overview\",\n\t\taliases: [],\n\t\tlabel: \"overview\",\n\t\tdescription: \"30-second overview\",\n\t\trender: () => OVERVIEW,\n\t},\n\t{\n\t\tname: \"workflows\",\n\t\taliases: [\"workflow\"],\n\t\tlabel: \"workflows\",\n\t\tdescription: \"Workflow primer\",\n\t\trender: () => WORKFLOWS,\n\t},\n\t{\n\t\tname: \"example\",\n\t\taliases: [\"examples\"],\n\t\tlabel: \"example\",\n\t\tdescription: \"Practical first workflow\",\n\t\trender: () => EXAMPLE,\n\t},\n\t{\n\t\tname: \"whats-new\",\n\t\taliases: [\"what's new\", \"whats new\", \"news\", \"updates\", \"changelog\"],\n\t\tlabel: \"what's new\",\n\t\tdescription: \"Recent release notes\",\n\t\trender: readLatestStableChangelog,\n\t},\n] as const satisfies readonly {\n\treadonly name: string;\n\treadonly aliases: readonly string[];\n\treadonly label: string;\n\treadonly description: string;\n\treadonly render: (cwd: string) => string;\n}[];\n\ntype AtomicGuideSection = (typeof GUIDE_SECTIONS)[number];\ntype AtomicGuideSectionName = AtomicGuideSection[\"name\"];\n\nexport type AtomicGuideHelpChoice = AtomicGuideSection[\"label\"];\n\nexport type AtomicGuideMode = \"help\" | AtomicGuideSectionName;\n\nexport const ATOMIC_GUIDE_HELP_CHOICES: readonly AtomicGuideHelpChoice[] = GUIDE_SECTIONS.map(\n\t(section) => section.label,\n);\n\nconst GUIDE_SECTIONS_BY_NAME = new Map<AtomicGuideSectionName, AtomicGuideSection>(\n\tGUIDE_SECTIONS.map((section) => [section.name, section]),\n);\nconst GUIDE_SECTIONS_BY_LABEL = new Map<string, AtomicGuideSection>(\n\tGUIDE_SECTIONS.map((section) => [section.label, section]),\n);\nconst GUIDE_SECTIONS_BY_INPUT = new Map<string, AtomicGuideSection>(\n\tGUIDE_SECTIONS.flatMap((section) =>\n\t\t[section.name, section.label, ...section.aliases].map((input) => [input, section] as const),\n\t),\n);\n\nexport function isAtomicGuideHelpChoice(choice: string): choice is AtomicGuideHelpChoice {\n\treturn GUIDE_SECTIONS_BY_LABEL.has(choice);\n}\n\nconst ATOMIC_GUIDE_TRAILING_PUNCTUATION = \"?!.,;:\";\n\nfunction stripTrailingAtomicGuidePunctuation(value: string): string {\n\tlet end = value.length;\n\twhile (end > 0 && ATOMIC_GUIDE_TRAILING_PUNCTUATION.includes(value.charAt(end - 1))) {\n\t\tend--;\n\t}\n\treturn value.slice(0, end);\n}\n\nfunction getGuideSectionForChoice(choice: string): AtomicGuideSection | undefined {\n\treturn GUIDE_SECTIONS_BY_LABEL.get(choice);\n}\n\nfunction getGuideSectionForMode(mode: AtomicGuideSectionName): AtomicGuideSection {\n\tconst section = GUIDE_SECTIONS_BY_NAME.get(mode);\n\tif (!section) throw new Error(`Unknown Atomic guide section: ${mode}`);\n\treturn section;\n}\n\nfunction getAtomicGuideHelpMenu(): string {\n\tconst sectionHelp = GUIDE_SECTIONS.map(\n\t\t(section) => `- \\`${section.label}\\` — run \\`/atomic ${section.label}\\``,\n\t).join(\"\\n\");\n\treturn `# Atomic\\n\\nSelect where to start:\\n\\n${sectionHelp}`;\n}\n\nexport function normalizeAtomicGuideMode(args: string): AtomicGuideMode {\n\tconst normalized = stripTrailingAtomicGuidePunctuation(args.trim().toLowerCase());\n\tif (!normalized) return \"help\";\n\n\treturn GUIDE_SECTIONS_BY_INPUT.get(normalized)?.name ?? \"help\";\n}\n\nexport function getAtomicGuideArgumentCompletions(prefix: string): AutocompleteItem[] | null {\n\tconst query = prefix.trim().toLowerCase();\n\tconst items = GUIDE_SECTIONS.map((section) => ({\n\t\tvalue: section.label,\n\t\tlabel: section.label,\n\t\tdescription: section.description,\n\t}));\n\tconst filtered = query\n\t\t? items.filter((item) => item.value.startsWith(query) || item.label.startsWith(query))\n\t\t: items;\n\treturn filtered.length > 0 ? filtered : null;\n}\n\nfunction readLatestStableChangelog(cwd: string): string {\n\tconst changelogPath = getChangelogPath();\n\tconst stableSections = parseChangelog(changelogPath)\n\t\t.filter((entry) => entry.prerelease === null)\n\t\t.slice(0, 3)\n\t\t.map((entry) => entry.content.trim())\n\t\t.filter(Boolean);\n\n\tif (stableSections.length === 0) {\n\t\treturn `# What's new\\n\\nNo stable release sections were found. Try \\`/changelog\\` for the interactive changelog viewer.\\n\\n─────────────────────────────────────────────────────────────────\\n\\nWhere to next:\\n\\n\\`/atomic example\\` — see a practical first workflow\\n\\`/atomic overview\\` — quick refresh`;\n\t}\n\n\tconst relativePath = path.relative(cwd, changelogPath) || changelogPath;\n\treturn `# What's new\\n\\n${stableSections.join(\"\\n\\n\")}\\n\\nSource: \\`${relativePath}\\`\\n\\n─────────────────────────────────────────────────────────────────\\n\\nWhere to next:\\n\\n\\`/atomic example\\` — see a practical first workflow\\n\\`/atomic overview\\` — quick refresh`;\n}\n\nexport function getAtomicGuideMessage(mode: AtomicGuideMode, cwd: string): string {\n\tif (mode === \"help\") return getAtomicGuideHelpMenu();\n\treturn getGuideSectionForMode(mode).render(cwd);\n}\n\nexport function atomicGuideModeForChoice(choice: AtomicGuideHelpChoice): AtomicGuideMode {\n\treturn getGuideSectionForChoice(choice)?.name ?? \"help\";\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-guidance.d.ts","sourceRoot":"","sources":["../../src/core/auth-guidance.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,IAAI,MAAM,CAM7C;AAED,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBvG;AAWD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMnE"}
1
+ {"version":3,"file":"auth-guidance.d.ts","sourceRoot":"","sources":["../../src/core/auth-guidance.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,IAAI,MAAM,CAM7C;AAED,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAgBvG;AAWD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-guidance.js","sourceRoot":"","sources":["../../src/core/auth-guidance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC,MAAM,UAAU,oBAAoB;IACnC,OAAO;QACN,8DAA8D;QAC9D,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,EAAE;QAC1C,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,EAAE;KACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC7C,OAAO,wBAAwB,oBAAoB,EAAE,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC3C,OAAO,yBAAyB,oBAAoB,EAAE,wCAAwC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAA4B;IACtE,MAAM,eAAe,GACpB,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,gBAAgB;QAC/E,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,QAAQ,CAAC;IACb,OAAO,wBAAwB,eAAe,QAAQ,oBAAoB,EAAE,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kCAAkC,CAAC,QAA4B,EAAE,KAAc;IAC9F,MAAM,eAAe,GACpB,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,gBAAgB;QAC/E,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,QAAQ,CAAC;IACb,MAAM,SAAS,GACd,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,gBAAgB;QAC/E,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,mBAAmB,QAAQ,sBAAsB,CAAC;IACtD,MAAM,MAAM,GACX,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClG,OAAO,CACN,yCAAyC,eAAe,8BAA8B;QACtF,sBAAsB,MAAM,4DAA4D;QACxF,oFAAoF;QACpF,kCAAkC,SAAS,QAAQ,oBAAoB,EAAE,EAAE,CAC3E,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,KAAK,GAAG,CAAC;IAC9E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,EAAE,GAAI,KAA0B,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,EAAE,GAAG,CAAC;IAC/D,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAc;IAC1D,OAAO,CACN,kBAAkB,oBAAoB,CAAC,KAAK,CAAC,gDAAgD;QAC7F,GAAG,oBAAoB,EAAE,MAAM;QAC/B,+CAA+C,CAC/C,CAAC;AACH,CAAC","sourcesContent":["import { join } from \"node:path\";\nimport { getDocsPath } from \"../config.ts\";\n\nconst UNKNOWN_PROVIDER = \"unknown\";\n\nexport function getProviderLoginHelp(): string {\n\treturn [\n\t\t\"Use /login to log into a provider via OAuth or API key. See:\",\n\t\t` ${join(getDocsPath(), \"providers.md\")}`,\n\t\t` ${join(getDocsPath(), \"models.md\")}`,\n\t].join(\"\\n\");\n}\n\nexport function formatNoModelsAvailableMessage(): string {\n\treturn `No models available. ${getProviderLoginHelp()}`;\n}\n\nexport function formatNoModelSelectedMessage(): string {\n\treturn `No model selected.\\n\\n${getProviderLoginHelp()}\\n\\nThen use /model to select a model.`;\n}\n\nexport function formatNoApiKeyFoundMessage(provider: string | undefined): string {\n\tconst providerDisplay =\n\t\tprovider === undefined || provider.length === 0 || provider === UNKNOWN_PROVIDER\n\t\t\t? \"the selected model\"\n\t\t\t: provider;\n\treturn `No API key found for ${providerDisplay}.\\n\\n${getProviderLoginHelp()}`;\n}\n\n/**\n * Message for the case where a provider only appears unauthenticated because the\n * credential store could NOT be loaded — e.g. `auth.json` was temporarily locked\n * by a concurrent process (ELOCKED) or held invalid JSON. This is distinct from\n * genuinely missing credentials: the stored credentials may well exist on disk\n * but could not be read, so an empty in-memory credential set is not\n * authoritative. Phrased to mention \"API key\"/\"auth\" so message-based failure\n * classifiers (such as the workflows model-fallback runtime) still treat it as a\n * recoverable/retryable auth failure, while making clear it is a load failure\n * rather than an absent key (issue #1431).\n */\nexport function formatAuthStorageLoadFailedMessage(provider: string | undefined, error: unknown): string {\n\tconst providerDisplay =\n\t\tprovider === undefined || provider.length === 0 || provider === UNKNOWN_PROVIDER\n\t\t\t? \"the selected model\"\n\t\t\t: provider;\n\tconst loginHint =\n\t\tprovider === undefined || provider.length === 0 || provider === UNKNOWN_PROVIDER\n\t\t\t? \"\"\n\t\t\t: ` or run '/login ${provider}' to re-authenticate`;\n\tconst detail =\n\t\terror instanceof Error && error.message.trim().length > 0 ? error.message.trim() : String(error);\n\treturn (\n\t\t`Could not load stored credentials for ${providerDisplay}: the auth credential store ` +\n\t\t`could not be read (${detail}). This is not a missing API key — stored credentials may ` +\n\t\t`exist but the credential store could not be read (it may be temporarily locked by ` +\n\t\t`another process). Retry shortly${loginHint}.\\n\\n${getProviderLoginHelp()}`\n\t);\n}\n\nfunction modelLabelForMessage(model: unknown): string {\n\tif (typeof model === \"string\" && model.trim().length > 0) return `\"${model}\"`;\n\tif (model !== null && typeof model === \"object\") {\n\t\tconst id = (model as { id?: unknown }).id;\n\t\tif (typeof id === \"string\" && id.length > 0) return `\"${id}\"`;\n\t}\n\treturn \"the selected model\";\n}\n\n/**\n * Message for a model that did not resolve to a real provider — e.g. an\n * unknown/unresolved model id that reached the prompt path as a bare string\n * (its `provider` is `undefined`). Surfaced instead of the misleading\n * \"No API key found for undefined\", and phrased with \"unknown model\" so callers\n * that classify failures by message (such as the workflows runtime) treat it as\n * a model-configuration error rather than a missing API key.\n */\nexport function formatUnresolvedModelMessage(model: unknown): string {\n\treturn (\n\t\t`Unknown model: ${modelLabelForMessage(model)} did not resolve to an available provider.\\n\\n` +\n\t\t`${getProviderLoginHelp()}\\n\\n` +\n\t\t\"Then use /model to select an available model.\"\n\t);\n}\n"]}
1
+ {"version":3,"file":"auth-guidance.js","sourceRoot":"","sources":["../../src/core/auth-guidance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAEnC,MAAM,UAAU,oBAAoB;IACnC,OAAO;QACN,8DAA8D;QAC9D,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,EAAE;QAC1C,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,EAAE;KACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC7C,OAAO,wBAAwB,oBAAoB,EAAE,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC3C,OAAO,yBAAyB,oBAAoB,EAAE,wCAAwC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAA4B;IACtE,MAAM,eAAe,GACpB,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,gBAAgB;QAC/E,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,QAAQ,CAAC;IACb,OAAO,wBAAwB,eAAe,QAAQ,oBAAoB,EAAE,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kCAAkC,CAAC,QAA4B,EAAE,KAAc;IAC9F,MAAM,eAAe,GACpB,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,gBAAgB;QAC/E,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,QAAQ,CAAC;IACb,MAAM,SAAS,GACd,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,gBAAgB;QAC/E,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,mBAAmB,QAAQ,sBAAsB,CAAC;IACtD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChH,OAAO,CACN,yCAAyC,eAAe,8BAA8B;QACtF,sBAAsB,MAAM,4DAA4D;QACxF,oFAAoF;QACpF,kCAAkC,SAAS,QAAQ,oBAAoB,EAAE,EAAE,CAC3E,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,KAAK,GAAG,CAAC;IAC9E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,EAAE,GAAI,KAA0B,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,EAAE,GAAG,CAAC;IAC/D,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAc;IAC1D,OAAO,CACN,kBAAkB,oBAAoB,CAAC,KAAK,CAAC,gDAAgD;QAC7F,GAAG,oBAAoB,EAAE,MAAM;QAC/B,+CAA+C,CAC/C,CAAC;AACH,CAAC","sourcesContent":["import { join } from \"node:path\";\nimport { getDocsPath } from \"../config.ts\";\n\nconst UNKNOWN_PROVIDER = \"unknown\";\n\nexport function getProviderLoginHelp(): string {\n\treturn [\n\t\t\"Use /login to log into a provider via OAuth or API key. See:\",\n\t\t` ${join(getDocsPath(), \"providers.md\")}`,\n\t\t` ${join(getDocsPath(), \"models.md\")}`,\n\t].join(\"\\n\");\n}\n\nexport function formatNoModelsAvailableMessage(): string {\n\treturn `No models available. ${getProviderLoginHelp()}`;\n}\n\nexport function formatNoModelSelectedMessage(): string {\n\treturn `No model selected.\\n\\n${getProviderLoginHelp()}\\n\\nThen use /model to select a model.`;\n}\n\nexport function formatNoApiKeyFoundMessage(provider: string | undefined): string {\n\tconst providerDisplay =\n\t\tprovider === undefined || provider.length === 0 || provider === UNKNOWN_PROVIDER\n\t\t\t? \"the selected model\"\n\t\t\t: provider;\n\treturn `No API key found for ${providerDisplay}.\\n\\n${getProviderLoginHelp()}`;\n}\n\n/**\n * Message for the case where a provider only appears unauthenticated because the\n * credential store could NOT be loaded — e.g. `auth.json` was temporarily locked\n * by a concurrent process (ELOCKED) or held invalid JSON. This is distinct from\n * genuinely missing credentials: the stored credentials may well exist on disk\n * but could not be read, so an empty in-memory credential set is not\n * authoritative. Phrased to mention \"API key\"/\"auth\" so message-based failure\n * classifiers (such as the workflows model-fallback runtime) still treat it as a\n * recoverable/retryable auth failure, while making clear it is a load failure\n * rather than an absent key (issue #1431).\n */\nexport function formatAuthStorageLoadFailedMessage(provider: string | undefined, error: unknown): string {\n\tconst providerDisplay =\n\t\tprovider === undefined || provider.length === 0 || provider === UNKNOWN_PROVIDER\n\t\t\t? \"the selected model\"\n\t\t\t: provider;\n\tconst loginHint =\n\t\tprovider === undefined || provider.length === 0 || provider === UNKNOWN_PROVIDER\n\t\t\t? \"\"\n\t\t\t: ` or run '/login ${provider}' to re-authenticate`;\n\tconst detail = error instanceof Error && error.message.trim().length > 0 ? error.message.trim() : String(error);\n\treturn (\n\t\t`Could not load stored credentials for ${providerDisplay}: the auth credential store ` +\n\t\t`could not be read (${detail}). This is not a missing API key — stored credentials may ` +\n\t\t`exist but the credential store could not be read (it may be temporarily locked by ` +\n\t\t`another process). Retry shortly${loginHint}.\\n\\n${getProviderLoginHelp()}`\n\t);\n}\n\nfunction modelLabelForMessage(model: unknown): string {\n\tif (typeof model === \"string\" && model.trim().length > 0) return `\"${model}\"`;\n\tif (model !== null && typeof model === \"object\") {\n\t\tconst id = (model as { id?: unknown }).id;\n\t\tif (typeof id === \"string\" && id.length > 0) return `\"${id}\"`;\n\t}\n\treturn \"the selected model\";\n}\n\n/**\n * Message for a model that did not resolve to a real provider — e.g. an\n * unknown/unresolved model id that reached the prompt path as a bare string\n * (its `provider` is `undefined`). Surfaced instead of the misleading\n * \"No API key found for undefined\", and phrased with \"unknown model\" so callers\n * that classify failures by message (such as the workflows runtime) treat it as\n * a model-configuration error rather than a missing API key.\n */\nexport function formatUnresolvedModelMessage(model: unknown): string {\n\treturn (\n\t\t`Unknown model: ${modelLabelForMessage(model)} did not resolve to an available provider.\\n\\n` +\n\t\t`${getProviderLoginHelp()}\\n\\n` +\n\t\t\"Then use /model to select an available model.\"\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-storage-backends.d.ts","sourceRoot":"","sources":["../../src/core/auth-storage-backends.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC3B,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,MAAM,WAAW,kBAAkB;IAClC;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,IAAI,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtD,mBAAmB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACpE,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC1F;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IAChE,QAAgB,QAAQ,CAAS;IACjC,QAAgB,SAAS,CAAW;IAEpC,YACC,QAAQ,GAAE,MAAyC,EACnD,SAAS,GAAE,MAAM,EAAe,EAIhC;IAED,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,cAAc;IAatB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAoBnB,IAAI,IAAI,MAAM,GAAG,SAAS,CAEzB;IAED,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAenD;IAEK,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqBvE;IAED,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAyBjE;IAEK,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAiD9F;CACD;AAED,qBAAa,0BAA2B,YAAW,kBAAkB;IACpE,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,YAAY,CAAoC;IAExD,IAAI,IAAI,MAAM,GAAG,SAAS,CAEzB;IAED,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAMjE;IAEK,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAgB9F;CACD"}
1
+ {"version":3,"file":"auth-storage-backends.d.ts","sourceRoot":"","sources":["../../src/core/auth-storage-backends.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC3B,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAWF,MAAM,WAAW,kBAAkB;IAClC;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,IAAI,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtD,mBAAmB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACpE,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC1F;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IAChE,QAAgB,QAAQ,CAAS;IACjC,QAAgB,SAAS,CAAW;IAEpC,YAAY,QAAQ,GAAE,MAAyC,EAAE,SAAS,GAAE,MAAM,EAAe,EAGhG;IAED,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,cAAc;IAatB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAiBnB,IAAI,IAAI,MAAM,GAAG,SAAS,CAEzB;IAED,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAenD;IAEK,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2BvE;IAED,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAyBjE;IAEK,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAiD9F;CACD;AAED,qBAAa,0BAA2B,YAAW,kBAAkB;IACpE,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,YAAY,CAAoC;IAExD,IAAI,IAAI,MAAM,GAAG,SAAS,CAEzB;IAED,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAMjE;IAEK,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAgB9F;CACD"}
@@ -4,6 +4,13 @@ import lockfile from "proper-lockfile";
4
4
  import { getAgentDir } from "../config.js";
5
5
  import { normalizePath } from "../utils/paths.js";
6
6
  const AUTH_FILE_WRITE_OPTIONS = { encoding: "utf-8", mode: 0o600 };
7
+ const AUTH_DELETE_LOCK_RETRY_OPTIONS = {
8
+ retries: 5,
9
+ factor: 2,
10
+ minTimeout: 100,
11
+ maxTimeout: 2_000,
12
+ randomize: true,
13
+ };
7
14
  export class FileAuthStorageBackend {
8
15
  constructor(authPath = join(getAgentDir(), "auth.json"), readPaths = [authPath]) {
9
16
  this.authPath = normalizePath(authPath);
@@ -114,7 +121,11 @@ export class FileAuthStorageBackend {
114
121
  for (const path of paths) {
115
122
  releases.push(await lockfile.lock(path, {
116
123
  realpath: false,
117
- retries: { retries: 10, factor: 2, minTimeout: 100, maxTimeout: 10000, randomize: true },
124
+ // Keep layered-file deletion below the logout RPC's 30-second
125
+ // deadline even if every auth path is actively locked. A caller
126
+ // then receives the actionable lock error instead of an abandoned
127
+ // request that poisons the engine's ordinary command lane.
128
+ retries: AUTH_DELETE_LOCK_RETRY_OPTIONS,
118
129
  stale: 30000,
119
130
  }));
120
131
  }