@bastani/atomic 0.9.11-alpha.5 → 0.9.11-alpha.7

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 (1127) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +12 -5
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  5. package/dist/builtin/mcp/README.md +3 -3
  6. package/dist/builtin/mcp/cli.js +0 -1
  7. package/dist/builtin/mcp/config.ts +0 -2
  8. package/dist/builtin/mcp/package.json +3 -3
  9. package/dist/builtin/mcp/types.ts +0 -1
  10. package/dist/builtin/subagents/CHANGELOG.md +12 -0
  11. package/dist/builtin/subagents/README.md +1 -1
  12. package/dist/builtin/subagents/agents/code-simplifier.md +47 -102
  13. package/dist/builtin/subagents/agents/codebase-analyzer.md +27 -130
  14. package/dist/builtin/subagents/agents/codebase-locator.md +24 -83
  15. package/dist/builtin/subagents/agents/codebase-online-researcher.md +60 -259
  16. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +29 -207
  17. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +28 -150
  18. package/dist/builtin/subagents/agents/codebase-research-locator.md +21 -118
  19. package/dist/builtin/subagents/agents/debugger.md +27 -65
  20. package/dist/builtin/subagents/agents/worker.md +23 -30
  21. package/dist/builtin/subagents/package.json +4 -4
  22. package/dist/builtin/subagents/prompts/gather-context-and-clarify.md +18 -11
  23. package/dist/builtin/subagents/prompts/parallel-cleanup.md +34 -33
  24. package/dist/builtin/subagents/prompts/parallel-context-build.md +22 -36
  25. package/dist/builtin/subagents/prompts/parallel-handoff-plan.md +20 -52
  26. package/dist/builtin/subagents/prompts/parallel-research.md +17 -41
  27. package/dist/builtin/subagents/prompts/parallel-review.md +23 -28
  28. package/dist/builtin/subagents/prompts/review-loop.md +18 -27
  29. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +1 -1
  30. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +23 -4
  31. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +2 -0
  32. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +10 -0
  33. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +1 -0
  34. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +2 -0
  35. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +8 -0
  36. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
  37. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +6 -0
  38. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +2 -0
  39. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +7 -0
  40. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +1 -0
  41. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +3 -0
  42. package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +1 -2
  43. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -0
  44. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +5 -3
  45. package/dist/builtin/subagents/src/shared/settings.ts +4 -0
  46. package/dist/builtin/web-access/package.json +2 -2
  47. package/dist/builtin/workflows/CHANGELOG.md +44 -0
  48. package/dist/builtin/workflows/README.md +72 -70
  49. package/dist/builtin/workflows/ambient.d.ts +0 -5
  50. package/dist/builtin/workflows/builtin/adversarial-verification-prompts.ts +7 -4
  51. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +1 -1
  52. package/dist/builtin/workflows/builtin/adversarial-verification.ts +2 -1
  53. package/dist/builtin/workflows/builtin/classify-and-act-prompts.ts +5 -2
  54. package/dist/builtin/workflows/builtin/classify-and-act-runner.ts +5 -7
  55. package/dist/builtin/workflows/builtin/classify-and-act.ts +3 -2
  56. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-prompts.ts +6 -3
  57. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-runner.ts +5 -5
  58. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +3 -2
  59. package/dist/builtin/workflows/builtin/generate-and-filter-prompts.ts +7 -4
  60. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +6 -3
  61. package/dist/builtin/workflows/builtin/generate-and-filter.ts +3 -2
  62. package/dist/builtin/workflows/builtin/goal-models.ts +14 -18
  63. package/dist/builtin/workflows/builtin/goal-orchestrator-prompts.ts +39 -78
  64. package/dist/builtin/workflows/builtin/goal-prompts.ts +64 -244
  65. package/dist/builtin/workflows/builtin/goal-runner.ts +32 -64
  66. package/dist/builtin/workflows/builtin/goal.ts +2 -1
  67. package/dist/builtin/workflows/builtin/index.d.ts +17 -112
  68. package/dist/builtin/workflows/builtin/index.ts +1 -2
  69. package/dist/builtin/workflows/builtin/loop-until-done-prompts.ts +20 -12
  70. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +3 -0
  71. package/dist/builtin/workflows/builtin/loop-until-done.ts +3 -2
  72. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +52 -55
  73. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +45 -52
  74. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +41 -46
  75. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +16 -21
  76. package/dist/builtin/workflows/builtin/open-claude-design.ts +2 -1
  77. package/dist/builtin/workflows/builtin/ralph-core.ts +61 -57
  78. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +41 -45
  79. package/dist/builtin/workflows/builtin/ralph-models.ts +33 -43
  80. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +35 -120
  81. package/dist/builtin/workflows/builtin/ralph-runner.ts +81 -108
  82. package/dist/builtin/workflows/builtin/ralph.ts +2 -1
  83. package/dist/builtin/workflows/builtin/shared-prompts.ts +110 -93
  84. package/dist/builtin/workflows/builtin/steering-context.ts +51 -0
  85. package/dist/builtin/workflows/builtin/tournament-prompts.ts +21 -12
  86. package/dist/builtin/workflows/builtin/tournament-runner.ts +3 -0
  87. package/dist/builtin/workflows/builtin/tournament.ts +3 -2
  88. package/dist/builtin/workflows/package.json +2 -2
  89. package/dist/builtin/workflows/skills/create-spec/SKILL.md +1 -1
  90. package/dist/builtin/workflows/skills/impeccable/SKILL.md +33 -129
  91. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +11 -3
  92. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +26 -0
  93. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +35 -0
  94. package/dist/builtin/workflows/skills/impeccable/reference/android.md +1 -1
  95. package/dist/builtin/workflows/skills/impeccable/reference/animate.md +72 -189
  96. package/dist/builtin/workflows/skills/impeccable/reference/audit.md +10 -9
  97. package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +2 -2
  98. package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +19 -108
  99. package/dist/builtin/workflows/skills/impeccable/reference/clarify.md +59 -253
  100. package/dist/builtin/workflows/skills/impeccable/reference/colorize.md +51 -222
  101. package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +45 -0
  102. package/dist/builtin/workflows/skills/impeccable/reference/craft.md +3 -121
  103. package/dist/builtin/workflows/skills/impeccable/reference/critique.md +28 -20
  104. package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +97 -0
  105. package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +23 -0
  106. package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +32 -0
  107. package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
  108. package/dist/builtin/workflows/skills/impeccable/reference/delight.md +47 -279
  109. package/dist/builtin/workflows/skills/impeccable/reference/distill.md +2 -2
  110. package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +53 -0
  111. package/dist/builtin/workflows/skills/impeccable/reference/document.md +60 -73
  112. package/dist/builtin/workflows/skills/impeccable/reference/harden.md +1 -12
  113. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +23 -12
  114. package/dist/builtin/workflows/skills/impeccable/reference/init.md +64 -163
  115. package/dist/builtin/workflows/skills/impeccable/reference/ios.md +1 -1
  116. package/dist/builtin/workflows/skills/impeccable/reference/layout.md +52 -153
  117. package/dist/builtin/workflows/skills/impeccable/reference/live.md +47 -36
  118. package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +105 -0
  119. package/dist/builtin/workflows/skills/impeccable/reference/{product.md → operate.md} +6 -5
  120. package/dist/builtin/workflows/skills/impeccable/reference/optimize.md +4 -4
  121. package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -4
  122. package/dist/builtin/workflows/skills/impeccable/reference/polish.md +68 -212
  123. package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +3 -3
  124. package/dist/builtin/workflows/skills/impeccable/reference/routing.md +18 -0
  125. package/dist/builtin/workflows/skills/impeccable/reference/shape.md +38 -144
  126. package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +48 -269
  127. package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +38 -0
  128. package/dist/builtin/workflows/skills/impeccable/scripts/command-metadata.json +1 -1
  129. package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +584 -0
  130. package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +117 -9
  131. package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +486 -59
  132. package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +16 -45
  133. package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +96 -10
  134. package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +143 -26
  135. package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +181 -12
  136. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +3187 -182
  137. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +102 -7
  138. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +282 -70
  139. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +183 -15
  140. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +22 -7
  141. package/dist/builtin/workflows/skills/impeccable/scripts/detector/findings.mjs +7 -1
  142. package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +16 -2
  143. package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +155 -42
  144. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +2988 -155
  145. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/constants.mjs +11 -0
  146. package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +336 -0
  147. package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +232 -0
  148. package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +92 -30
  149. package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +414 -120
  150. package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +25 -8
  151. package/dist/builtin/workflows/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
  152. package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +165 -0
  153. package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +329 -0
  154. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +20 -5
  155. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-paths.mjs +16 -8
  156. package/dist/builtin/workflows/skills/impeccable/scripts/lib/provider.mjs +1 -0
  157. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +455 -0
  158. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
  159. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +457 -0
  160. package/dist/builtin/workflows/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
  161. package/dist/builtin/workflows/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
  162. package/dist/builtin/workflows/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
  163. package/dist/builtin/workflows/skills/impeccable/scripts/live/completion.mjs +10 -1
  164. package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +15 -0
  165. package/dist/builtin/workflows/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
  166. package/dist/builtin/workflows/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
  167. package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +109 -32
  168. package/dist/builtin/workflows/skills/impeccable/scripts/live/source-lock.mjs +105 -0
  169. package/dist/builtin/workflows/skills/impeccable/scripts/live/source-search.mjs +105 -0
  170. package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +8 -6
  171. package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
  172. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +208 -68
  173. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +565 -115
  174. package/dist/builtin/workflows/skills/impeccable/scripts/live-commit-manual-edits.mjs +3 -0
  175. package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +198 -14
  176. package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +24 -6
  177. package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +6 -1
  178. package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +44 -14
  179. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +398 -33
  180. package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +9 -5
  181. package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +81 -67
  182. package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +7 -2
  183. package/dist/builtin/workflows/skills/impeccable/scripts/palette.mjs +76 -81
  184. package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +4 -4
  185. package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +890 -0
  186. package/dist/builtin/workflows/skills/impeccable/scripts/surface-brief.mjs +74 -0
  187. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +57 -252
  188. package/dist/builtin/workflows/skills/prompt-engineer/references/advanced_patterns.md +70 -226
  189. package/dist/builtin/workflows/skills/prompt-engineer/references/core_prompting.md +64 -103
  190. package/dist/builtin/workflows/skills/prompt-engineer/references/quality_improvement.md +81 -155
  191. package/dist/builtin/workflows/src/authoring.d.ts +5 -1
  192. package/dist/builtin/workflows/src/durable/backend.ts +68 -9
  193. package/dist/builtin/workflows/src/durable/boundary-lifecycle.ts +148 -0
  194. package/dist/builtin/workflows/src/durable/boundary-topology.ts +420 -0
  195. package/dist/builtin/workflows/src/durable/child-invocation.ts +14 -0
  196. package/dist/builtin/workflows/src/durable/child-primitive.ts +74 -44
  197. package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +250 -0
  198. package/dist/builtin/workflows/src/durable/completed-catalog.ts +205 -131
  199. package/dist/builtin/workflows/src/durable/completed-inspection.ts +8 -2
  200. package/dist/builtin/workflows/src/durable/completed-subtree.ts +31 -0
  201. package/dist/builtin/workflows/src/durable/dbos-backend.ts +28 -24
  202. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +130 -3
  203. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +18 -0
  204. package/dist/builtin/workflows/src/durable/scoped-backend.ts +64 -17
  205. package/dist/builtin/workflows/src/durable/stage-primitive.ts +60 -60
  206. package/dist/builtin/workflows/src/durable/stage-topology-validation.ts +234 -0
  207. package/dist/builtin/workflows/src/durable/stage-topology.ts +53 -0
  208. package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +49 -0
  209. package/dist/builtin/workflows/src/durable/tool-outcome.ts +120 -0
  210. package/dist/builtin/workflows/src/durable/tool-primitive.ts +367 -58
  211. package/dist/builtin/workflows/src/durable/types.ts +97 -0
  212. package/dist/builtin/workflows/src/durable/ui-primitive.ts +46 -0
  213. package/dist/builtin/workflows/src/durable/workflow-child-result.ts +58 -0
  214. package/dist/builtin/workflows/src/engine/options.ts +1 -0
  215. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +19 -10
  216. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +11 -1
  217. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +190 -18
  218. package/dist/builtin/workflows/src/engine/run-terminal-event.ts +37 -0
  219. package/dist/builtin/workflows/src/engine/run-terminal-failure.ts +50 -0
  220. package/dist/builtin/workflows/src/engine/run-tool-execution-tracker.ts +152 -0
  221. package/dist/builtin/workflows/src/engine/run-tool-node-lifecycle.ts +87 -0
  222. package/dist/builtin/workflows/src/engine/run.ts +111 -110
  223. package/dist/builtin/workflows/src/engine/runtime.ts +15 -2
  224. package/dist/builtin/workflows/src/extension/extension-factory.ts +1 -0
  225. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +11 -0
  226. package/dist/builtin/workflows/src/extension/index.bundle.mjs +6710 -4810
  227. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +16 -5
  228. package/dist/builtin/workflows/src/extension/render-result.ts +16 -2
  229. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +3 -0
  230. package/dist/builtin/workflows/src/extension/runtime.ts +4 -0
  231. package/dist/builtin/workflows/src/extension/wiring.ts +3 -1
  232. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +1 -0
  233. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +9 -3
  234. package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +18 -3
  235. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +22 -11
  236. package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +43 -0
  237. package/dist/builtin/workflows/src/extension/workflow-targets.ts +34 -30
  238. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +12 -5
  239. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +162 -63
  240. package/dist/builtin/workflows/src/runs/background/run-inspect.ts +7 -1
  241. package/dist/builtin/workflows/src/runs/background/status.ts +18 -8
  242. package/dist/builtin/workflows/src/runs/background/workflow-lifecycle-aggregate.ts +3 -11
  243. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +24 -21
  244. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +1 -1
  245. package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +30 -13
  246. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +102 -53
  247. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +13 -5
  248. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +49 -17
  249. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +11 -4
  250. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +1 -0
  251. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +4 -1
  252. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +7 -1
  253. package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +53 -4
  254. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +146 -17
  255. package/dist/builtin/workflows/src/runs/foreground/stage-delivery-activity.ts +86 -0
  256. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +18 -6
  257. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +45 -46
  258. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +5 -1
  259. package/dist/builtin/workflows/src/runs/foreground/stage-runner-pause.ts +195 -0
  260. package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +8 -0
  261. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +0 -13
  262. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +30 -2
  263. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +3 -143
  264. package/dist/builtin/workflows/src/sdk-surface.ts +1 -1
  265. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +6 -11
  266. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +6 -11
  267. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +57 -6
  268. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +76 -11
  269. package/dist/builtin/workflows/src/shared/expanded-workflow-graph.ts +206 -116
  270. package/dist/builtin/workflows/src/shared/intercom-group.ts +17 -10
  271. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +30 -0
  272. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +5 -0
  273. package/dist/builtin/workflows/src/shared/render-inputs-schema.ts +3 -3
  274. package/dist/builtin/workflows/src/shared/store-factory.ts +2 -0
  275. package/dist/builtin/workflows/src/shared/store-internal.ts +8 -0
  276. package/dist/builtin/workflows/src/shared/store-public-types.ts +8 -0
  277. package/dist/builtin/workflows/src/shared/store-run-methods.ts +9 -0
  278. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +2 -0
  279. package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +46 -0
  280. package/dist/builtin/workflows/src/shared/store-types.ts +34 -0
  281. package/dist/builtin/workflows/src/shared/types.ts +14 -24
  282. package/dist/builtin/workflows/src/shared/workflow-failures-classifier.ts +11 -5
  283. package/dist/builtin/workflows/src/shared/workflow-failures-signals.ts +58 -0
  284. package/dist/builtin/workflows/src/shared/workflow-run-ownership.ts +53 -0
  285. package/dist/builtin/workflows/src/tui/graph-view-input.ts +2 -8
  286. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +11 -4
  287. package/dist/builtin/workflows/src/tui/graph-view-render.ts +1 -0
  288. package/dist/builtin/workflows/src/tui/graph-view-state.ts +27 -9
  289. package/dist/builtin/workflows/src/tui/graph-view-types.ts +4 -3
  290. package/dist/builtin/workflows/src/tui/node-card.ts +4 -3
  291. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +0 -4
  292. package/dist/builtin/workflows/src/tui/run-detail.ts +53 -17
  293. package/dist/builtin/workflows/src/tui/session-list.ts +8 -4
  294. package/dist/builtin/workflows/src/tui/stage-chat-view-delivery-activity.ts +121 -0
  295. package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +42 -0
  296. package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +12 -0
  297. package/dist/builtin/workflows/src/tui/stage-chat-view-render-settings.ts +21 -1
  298. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +19 -19
  299. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +4 -0
  300. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +4 -2
  301. package/dist/builtin/workflows/src/tui/switcher.ts +13 -3
  302. package/dist/builtin/workflows/src/tui/workflow-attach-pane-handle.ts +1 -1
  303. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +0 -9
  304. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +16 -49
  305. package/dist/builtin/workflows/src/tui/workflow-status.ts +7 -0
  306. package/dist/builtin/workflows/src/workflows/identity.ts +1 -1
  307. package/dist/cli/args.d.ts +0 -1
  308. package/dist/cli/args.d.ts.map +1 -1
  309. package/dist/cli/args.js +1 -20
  310. package/dist/cli/args.js.map +1 -1
  311. package/dist/cli/config-selector.js +1 -1
  312. package/dist/cli/config-selector.js.map +1 -1
  313. package/dist/cli/list-models.d.ts.map +1 -1
  314. package/dist/cli/list-models.js +1 -2
  315. package/dist/cli/list-models.js.map +1 -1
  316. package/dist/cli/session-picker.d.ts.map +1 -1
  317. package/dist/cli/session-picker.js +2 -1
  318. package/dist/cli/session-picker.js.map +1 -1
  319. package/dist/cli/startup-ui.js +2 -2
  320. package/dist/cli/startup-ui.js.map +1 -1
  321. package/dist/config-self-update.js +1 -1
  322. package/dist/config-self-update.js.map +1 -1
  323. package/dist/config.d.ts +2 -0
  324. package/dist/config.d.ts.map +1 -1
  325. package/dist/config.js +34 -10
  326. package/dist/config.js.map +1 -1
  327. package/dist/core/agent-session-accessors.d.ts.map +1 -1
  328. package/dist/core/agent-session-accessors.js +2 -1
  329. package/dist/core/agent-session-accessors.js.map +1 -1
  330. package/dist/core/agent-session-auto-compaction.d.ts +4 -3
  331. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  332. package/dist/core/agent-session-auto-compaction.js +55 -59
  333. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  334. package/dist/core/agent-session-bash.d.ts +9 -6
  335. package/dist/core/agent-session-bash.d.ts.map +1 -1
  336. package/dist/core/agent-session-bash.js +32 -13
  337. package/dist/core/agent-session-bash.js.map +1 -1
  338. package/dist/core/agent-session-compaction.d.ts +11 -1
  339. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  340. package/dist/core/agent-session-compaction.js +87 -19
  341. package/dist/core/agent-session-compaction.js.map +1 -1
  342. package/dist/core/agent-session-custom-message-commit.d.ts +14 -0
  343. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -0
  344. package/dist/core/agent-session-custom-message-commit.js +141 -0
  345. package/dist/core/agent-session-custom-message-commit.js.map +1 -0
  346. package/dist/core/agent-session-delivery-forwarding.d.ts +9 -0
  347. package/dist/core/agent-session-delivery-forwarding.d.ts.map +1 -0
  348. package/dist/core/agent-session-delivery-forwarding.js +36 -0
  349. package/dist/core/agent-session-delivery-forwarding.js.map +1 -0
  350. package/dist/core/agent-session-events.d.ts +1 -1
  351. package/dist/core/agent-session-events.d.ts.map +1 -1
  352. package/dist/core/agent-session-events.js +45 -14
  353. package/dist/core/agent-session-events.js.map +1 -1
  354. package/dist/core/agent-session-extension-bindings.d.ts +2 -6
  355. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  356. package/dist/core/agent-session-extension-bindings.js +18 -11
  357. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  358. package/dist/core/agent-session-message-queue.d.ts +5 -2
  359. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  360. package/dist/core/agent-session-message-queue.js +91 -97
  361. package/dist/core/agent-session-message-queue.js.map +1 -1
  362. package/dist/core/agent-session-methods.d.ts +47 -39
  363. package/dist/core/agent-session-methods.d.ts.map +1 -1
  364. package/dist/core/agent-session-methods.js.map +1 -1
  365. package/dist/core/agent-session-models.d.ts +2 -38
  366. package/dist/core/agent-session-models.d.ts.map +1 -1
  367. package/dist/core/agent-session-models.js +5 -147
  368. package/dist/core/agent-session-models.js.map +1 -1
  369. package/dist/core/agent-session-persistent-custom-messages.d.ts +47 -0
  370. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -0
  371. package/dist/core/agent-session-persistent-custom-messages.js +267 -0
  372. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -0
  373. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  374. package/dist/core/agent-session-post-tool-compaction.js +34 -9
  375. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  376. package/dist/core/agent-session-prompt.d.ts +2 -0
  377. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  378. package/dist/core/agent-session-prompt.js +42 -16
  379. package/dist/core/agent-session-prompt.js.map +1 -1
  380. package/dist/core/agent-session-queue-pause.d.ts +10 -0
  381. package/dist/core/agent-session-queue-pause.d.ts.map +1 -0
  382. package/dist/core/agent-session-queue-pause.js +86 -0
  383. package/dist/core/agent-session-queue-pause.js.map +1 -0
  384. package/dist/core/agent-session-retry.d.ts +0 -11
  385. package/dist/core/agent-session-retry.d.ts.map +1 -1
  386. package/dist/core/agent-session-retry.js +8 -57
  387. package/dist/core/agent-session-retry.js.map +1 -1
  388. package/dist/core/agent-session-runtime-auth.d.ts +6 -0
  389. package/dist/core/agent-session-runtime-auth.d.ts.map +1 -0
  390. package/dist/core/agent-session-runtime-auth.js +26 -0
  391. package/dist/core/agent-session-runtime-auth.js.map +1 -0
  392. package/dist/core/agent-session-runtime.d.ts +13 -2
  393. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  394. package/dist/core/agent-session-runtime.js +32 -6
  395. package/dist/core/agent-session-runtime.js.map +1 -1
  396. package/dist/core/agent-session-services.d.ts +0 -2
  397. package/dist/core/agent-session-services.d.ts.map +1 -1
  398. package/dist/core/agent-session-services.js +6 -7
  399. package/dist/core/agent-session-services.js.map +1 -1
  400. package/dist/core/agent-session-state.d.ts.map +1 -1
  401. package/dist/core/agent-session-state.js +3 -0
  402. package/dist/core/agent-session-state.js.map +1 -1
  403. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  404. package/dist/core/agent-session-tool-hooks.js +6 -1
  405. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  406. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  407. package/dist/core/agent-session-tool-registry.js +2 -18
  408. package/dist/core/agent-session-tool-registry.js.map +1 -1
  409. package/dist/core/agent-session-transfer.d.ts +4 -0
  410. package/dist/core/agent-session-transfer.d.ts.map +1 -0
  411. package/dist/core/agent-session-transfer.js +71 -0
  412. package/dist/core/agent-session-transfer.js.map +1 -0
  413. package/dist/core/agent-session-tree.js +1 -1
  414. package/dist/core/agent-session-tree.js.map +1 -1
  415. package/dist/core/agent-session-types.d.ts +5 -11
  416. package/dist/core/agent-session-types.d.ts.map +1 -1
  417. package/dist/core/agent-session-types.js +0 -3
  418. package/dist/core/agent-session-types.js.map +1 -1
  419. package/dist/core/agent-session.d.ts +12 -2
  420. package/dist/core/agent-session.d.ts.map +1 -1
  421. package/dist/core/agent-session.js +8 -2
  422. package/dist/core/agent-session.js.map +1 -1
  423. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  424. package/dist/core/atomic-guide-command.js +31 -33
  425. package/dist/core/atomic-guide-command.js.map +1 -1
  426. package/dist/core/auth-storage.js +2 -2
  427. package/dist/core/auth-storage.js.map +1 -1
  428. package/dist/core/bash-executor.d.ts +5 -3
  429. package/dist/core/bash-executor.d.ts.map +1 -1
  430. package/dist/core/bash-executor.js +5 -4
  431. package/dist/core/bash-executor.js.map +1 -1
  432. package/dist/core/builtin-packages.d.ts.map +1 -1
  433. package/dist/core/builtin-packages.js +0 -6
  434. package/dist/core/builtin-packages.js.map +1 -1
  435. package/dist/core/compaction/branch-summarization.d.ts +8 -3
  436. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  437. package/dist/core/compaction/branch-summarization.js +17 -6
  438. package/dist/core/compaction/branch-summarization.js.map +1 -1
  439. package/dist/core/compaction/compaction-boundary.d.ts +18 -1
  440. package/dist/core/compaction/compaction-boundary.d.ts.map +1 -1
  441. package/dist/core/compaction/compaction-boundary.js +2 -2
  442. package/dist/core/compaction/compaction-boundary.js.map +1 -1
  443. package/dist/core/compaction/compaction-runner.d.ts +61 -6
  444. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  445. package/dist/core/compaction/compaction-runner.js +242 -18
  446. package/dist/core/compaction/compaction-runner.js.map +1 -1
  447. package/dist/core/compaction/compaction-types.d.ts +53 -2
  448. package/dist/core/compaction/compaction-types.d.ts.map +1 -1
  449. package/dist/core/compaction/compaction-types.js.map +1 -1
  450. package/dist/core/compaction/fallback-planner.d.ts +64 -0
  451. package/dist/core/compaction/fallback-planner.d.ts.map +1 -0
  452. package/dist/core/compaction/fallback-planner.js +75 -0
  453. package/dist/core/compaction/fallback-planner.js.map +1 -0
  454. package/dist/core/compaction/index.d.ts +3 -0
  455. package/dist/core/compaction/index.d.ts.map +1 -1
  456. package/dist/core/compaction/index.js +3 -0
  457. package/dist/core/compaction/index.js.map +1 -1
  458. package/dist/core/compaction/planner-outcome.d.ts +86 -0
  459. package/dist/core/compaction/planner-outcome.d.ts.map +1 -0
  460. package/dist/core/compaction/planner-outcome.js +122 -0
  461. package/dist/core/compaction/planner-outcome.js.map +1 -0
  462. package/dist/core/compaction/range-planner-diagnostics.d.ts +58 -6
  463. package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -1
  464. package/dist/core/compaction/range-planner-diagnostics.js +69 -31
  465. package/dist/core/compaction/range-planner-diagnostics.js.map +1 -1
  466. package/dist/core/compaction/range-planner.d.ts +36 -8
  467. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  468. package/dist/core/compaction/range-planner.js +136 -51
  469. package/dist/core/compaction/range-planner.js.map +1 -1
  470. package/dist/core/compaction/region-trimming.d.ts +34 -0
  471. package/dist/core/compaction/region-trimming.d.ts.map +1 -0
  472. package/dist/core/compaction/region-trimming.js +73 -0
  473. package/dist/core/compaction/region-trimming.js.map +1 -0
  474. package/dist/core/compaction/transcript-serialization.d.ts +8 -1
  475. package/dist/core/compaction/transcript-serialization.d.ts.map +1 -1
  476. package/dist/core/compaction/transcript-serialization.js +78 -27
  477. package/dist/core/compaction/transcript-serialization.js.map +1 -1
  478. package/dist/core/context-tool-pairing.d.ts +19 -0
  479. package/dist/core/context-tool-pairing.d.ts.map +1 -0
  480. package/dist/core/context-tool-pairing.js +50 -0
  481. package/dist/core/context-tool-pairing.js.map +1 -0
  482. package/dist/core/diagnostics.d.ts +8 -0
  483. package/dist/core/diagnostics.d.ts.map +1 -1
  484. package/dist/core/diagnostics.js.map +1 -1
  485. package/dist/core/extensions/context-types.d.ts +3 -0
  486. package/dist/core/extensions/context-types.d.ts.map +1 -1
  487. package/dist/core/extensions/context-types.js.map +1 -1
  488. package/dist/core/extensions/index.d.ts +2 -0
  489. package/dist/core/extensions/index.d.ts.map +1 -1
  490. package/dist/core/extensions/index.js.map +1 -1
  491. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  492. package/dist/core/extensions/loader-api.js +48 -27
  493. package/dist/core/extensions/loader-api.js.map +1 -1
  494. package/dist/core/extensions/loader-runtime.d.ts +2 -4
  495. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  496. package/dist/core/extensions/loader-runtime.js +199 -18
  497. package/dist/core/extensions/loader-runtime.js.map +1 -1
  498. package/dist/core/extensions/message-types.d.ts +7 -4
  499. package/dist/core/extensions/message-types.d.ts.map +1 -1
  500. package/dist/core/extensions/message-types.js.map +1 -1
  501. package/dist/core/extensions/provider-types.d.ts +9 -4
  502. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  503. package/dist/core/extensions/provider-types.js.map +1 -1
  504. package/dist/core/extensions/runner-context.d.ts +2 -0
  505. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  506. package/dist/core/extensions/runner-context.js +4 -0
  507. package/dist/core/extensions/runner-context.js.map +1 -1
  508. package/dist/core/extensions/runner.d.ts +1 -0
  509. package/dist/core/extensions/runner.d.ts.map +1 -1
  510. package/dist/core/extensions/runner.js +28 -20
  511. package/dist/core/extensions/runner.js.map +1 -1
  512. package/dist/core/extensions/runtime-types.d.ts +25 -0
  513. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  514. package/dist/core/extensions/runtime-types.js.map +1 -1
  515. package/dist/core/extensions/tool-types.d.ts +7 -3
  516. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  517. package/dist/core/extensions/tool-types.js.map +1 -1
  518. package/dist/core/extensions/ui-types.d.ts +14 -4
  519. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  520. package/dist/core/extensions/ui-types.js.map +1 -1
  521. package/dist/core/fallback-models.d.ts +37 -0
  522. package/dist/core/fallback-models.d.ts.map +1 -0
  523. package/dist/core/fallback-models.js +48 -0
  524. package/dist/core/fallback-models.js.map +1 -0
  525. package/dist/core/flattened-tool-arguments.d.ts +4 -7
  526. package/dist/core/flattened-tool-arguments.d.ts.map +1 -1
  527. package/dist/core/flattened-tool-arguments.js +4 -7
  528. package/dist/core/flattened-tool-arguments.js.map +1 -1
  529. package/dist/core/http-dispatcher.d.ts.map +1 -1
  530. package/dist/core/http-dispatcher.js +0 -5
  531. package/dist/core/http-dispatcher.js.map +1 -1
  532. package/dist/core/messages.d.ts +14 -2
  533. package/dist/core/messages.d.ts.map +1 -1
  534. package/dist/core/messages.js +28 -4
  535. package/dist/core/messages.js.map +1 -1
  536. package/dist/core/model-capabilities.d.ts +18 -0
  537. package/dist/core/model-capabilities.d.ts.map +1 -0
  538. package/dist/core/model-capabilities.js +23 -0
  539. package/dist/core/model-capabilities.js.map +1 -0
  540. package/dist/core/model-registry-auth.d.ts.map +1 -1
  541. package/dist/core/model-registry-auth.js +0 -2
  542. package/dist/core/model-registry-auth.js.map +1 -1
  543. package/dist/core/model-registry-builtins.d.ts +0 -2
  544. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  545. package/dist/core/model-registry-builtins.js +9 -76
  546. package/dist/core/model-registry-builtins.js.map +1 -1
  547. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  548. package/dist/core/model-registry-custom-loader.js +1 -12
  549. package/dist/core/model-registry-custom-loader.js.map +1 -1
  550. package/dist/core/model-registry-dynamic.d.ts.map +1 -1
  551. package/dist/core/model-registry-dynamic.js +3 -15
  552. package/dist/core/model-registry-dynamic.js.map +1 -1
  553. package/dist/core/model-registry-extension-refresh.d.ts +23 -0
  554. package/dist/core/model-registry-extension-refresh.d.ts.map +1 -0
  555. package/dist/core/model-registry-extension-refresh.js +32 -0
  556. package/dist/core/model-registry-extension-refresh.js.map +1 -0
  557. package/dist/core/model-registry-schemas.d.ts +118 -9
  558. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  559. package/dist/core/model-registry-schemas.js +10 -3
  560. package/dist/core/model-registry-schemas.js.map +1 -1
  561. package/dist/core/model-registry-types.d.ts +5 -5
  562. package/dist/core/model-registry-types.d.ts.map +1 -1
  563. package/dist/core/model-registry-types.js.map +1 -1
  564. package/dist/core/model-registry-validation.d.ts +7 -0
  565. package/dist/core/model-registry-validation.d.ts.map +1 -0
  566. package/dist/core/model-registry-validation.js +12 -0
  567. package/dist/core/model-registry-validation.js.map +1 -0
  568. package/dist/core/model-registry.d.ts +5 -3
  569. package/dist/core/model-registry.d.ts.map +1 -1
  570. package/dist/core/model-registry.js +34 -33
  571. package/dist/core/model-registry.js.map +1 -1
  572. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  573. package/dist/core/model-resolver-defaults.js +0 -1
  574. package/dist/core/model-resolver-defaults.js.map +1 -1
  575. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  576. package/dist/core/model-resolver-initial.js +9 -0
  577. package/dist/core/model-resolver-initial.js.map +1 -1
  578. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  579. package/dist/core/model-resolver-patterns.js +0 -2
  580. package/dist/core/model-resolver-patterns.js.map +1 -1
  581. package/dist/core/model-resolver-scope.d.ts +2 -0
  582. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  583. package/dist/core/model-resolver-scope.js +18 -4
  584. package/dist/core/model-resolver-scope.js.map +1 -1
  585. package/dist/core/model-resolver-types.d.ts +2 -0
  586. package/dist/core/model-resolver-types.d.ts.map +1 -1
  587. package/dist/core/model-resolver-types.js.map +1 -1
  588. package/dist/core/oauth-provider-bridge.d.ts +21 -0
  589. package/dist/core/oauth-provider-bridge.d.ts.map +1 -1
  590. package/dist/core/oauth-provider-bridge.js +68 -7
  591. package/dist/core/oauth-provider-bridge.js.map +1 -1
  592. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  593. package/dist/core/package-manager-auto-resources.js +12 -4
  594. package/dist/core/package-manager-auto-resources.js.map +1 -1
  595. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  596. package/dist/core/package-manager-resolver.js +42 -11
  597. package/dist/core/package-manager-resolver.js.map +1 -1
  598. package/dist/core/package-manager-types.d.ts +2 -0
  599. package/dist/core/package-manager-types.d.ts.map +1 -1
  600. package/dist/core/package-manager-types.js.map +1 -1
  601. package/dist/core/package-manager.d.ts +1 -1
  602. package/dist/core/package-manager.d.ts.map +1 -1
  603. package/dist/core/package-manager.js.map +1 -1
  604. package/dist/core/remote-catalog-provider.d.ts +1 -1
  605. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  606. package/dist/core/remote-catalog-provider.js +17 -11
  607. package/dist/core/remote-catalog-provider.js.map +1 -1
  608. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  609. package/dist/core/resource-loader-assets.js +30 -4
  610. package/dist/core/resource-loader-assets.js.map +1 -1
  611. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  612. package/dist/core/resource-loader-context-files.js +3 -1
  613. package/dist/core/resource-loader-context-files.js.map +1 -1
  614. package/dist/core/resource-loader-core.d.ts +2 -1
  615. package/dist/core/resource-loader-core.d.ts.map +1 -1
  616. package/dist/core/resource-loader-core.js +3 -0
  617. package/dist/core/resource-loader-core.js.map +1 -1
  618. package/dist/core/resource-loader-extensions.d.ts +1 -0
  619. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  620. package/dist/core/resource-loader-extensions.js +120 -7
  621. package/dist/core/resource-loader-extensions.js.map +1 -1
  622. package/dist/core/resource-loader-package-resources.d.ts.map +1 -1
  623. package/dist/core/resource-loader-package-resources.js +14 -1
  624. package/dist/core/resource-loader-package-resources.js.map +1 -1
  625. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  626. package/dist/core/resource-loader-reload.js +2 -1
  627. package/dist/core/resource-loader-reload.js.map +1 -1
  628. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  629. package/dist/core/resource-loader-source-info.js +6 -3
  630. package/dist/core/resource-loader-source-info.js.map +1 -1
  631. package/dist/core/sdk-types.d.ts +11 -10
  632. package/dist/core/sdk-types.d.ts.map +1 -1
  633. package/dist/core/sdk-types.js.map +1 -1
  634. package/dist/core/sdk.d.ts +1 -0
  635. package/dist/core/sdk.d.ts.map +1 -1
  636. package/dist/core/sdk.js +13 -84
  637. package/dist/core/sdk.js.map +1 -1
  638. package/dist/core/session-manager-core.d.ts +3 -3
  639. package/dist/core/session-manager-core.d.ts.map +1 -1
  640. package/dist/core/session-manager-core.js +18 -25
  641. package/dist/core/session-manager-core.js.map +1 -1
  642. package/dist/core/session-manager-entries.d.ts +2 -5
  643. package/dist/core/session-manager-entries.d.ts.map +1 -1
  644. package/dist/core/session-manager-entries.js +2 -8
  645. package/dist/core/session-manager-entries.js.map +1 -1
  646. package/dist/core/session-manager-history.d.ts +3 -3
  647. package/dist/core/session-manager-history.d.ts.map +1 -1
  648. package/dist/core/session-manager-history.js +49 -27
  649. package/dist/core/session-manager-history.js.map +1 -1
  650. package/dist/core/session-manager-storage.d.ts +6 -0
  651. package/dist/core/session-manager-storage.d.ts.map +1 -1
  652. package/dist/core/session-manager-storage.js +38 -5
  653. package/dist/core/session-manager-storage.js.map +1 -1
  654. package/dist/core/session-manager-types.d.ts +6 -6
  655. package/dist/core/session-manager-types.d.ts.map +1 -1
  656. package/dist/core/session-manager-types.js.map +1 -1
  657. package/dist/core/session-manager.d.ts +1 -1
  658. package/dist/core/session-manager.d.ts.map +1 -1
  659. package/dist/core/session-manager.js.map +1 -1
  660. package/dist/core/settings-manager-basic-accessors.d.ts +0 -4
  661. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  662. package/dist/core/settings-manager-basic-accessors.js +0 -50
  663. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  664. package/dist/core/settings-manager-core.d.ts +2 -4
  665. package/dist/core/settings-manager-core.d.ts.map +1 -1
  666. package/dist/core/settings-manager-core.js +5 -51
  667. package/dist/core/settings-manager-core.js.map +1 -1
  668. package/dist/core/settings-manager.d.ts +1 -1
  669. package/dist/core/settings-manager.d.ts.map +1 -1
  670. package/dist/core/settings-manager.js.map +1 -1
  671. package/dist/core/settings-storage.d.ts +3 -1
  672. package/dist/core/settings-storage.d.ts.map +1 -1
  673. package/dist/core/settings-storage.js +22 -0
  674. package/dist/core/settings-storage.js.map +1 -1
  675. package/dist/core/settings-types.d.ts +2 -4
  676. package/dist/core/settings-types.d.ts.map +1 -1
  677. package/dist/core/settings-types.js.map +1 -1
  678. package/dist/core/slash-commands.d.ts.map +1 -1
  679. package/dist/core/slash-commands.js +68 -22
  680. package/dist/core/slash-commands.js.map +1 -1
  681. package/dist/core/source-info.d.ts +3 -1
  682. package/dist/core/source-info.d.ts.map +1 -1
  683. package/dist/core/source-info.js +2 -0
  684. package/dist/core/source-info.js.map +1 -1
  685. package/dist/core/tools/ask-user-question/ask-user-question.js +1 -1
  686. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  687. package/dist/core/tools/bash-session-environment.d.ts +13 -0
  688. package/dist/core/tools/bash-session-environment.d.ts.map +1 -0
  689. package/dist/core/tools/bash-session-environment.js +35 -0
  690. package/dist/core/tools/bash-session-environment.js.map +1 -0
  691. package/dist/core/tools/bash.d.ts +4 -1
  692. package/dist/core/tools/bash.d.ts.map +1 -1
  693. package/dist/core/tools/bash.js +16 -8
  694. package/dist/core/tools/bash.js.map +1 -1
  695. package/dist/core/tools/tool-definition-wrapper.d.ts +3 -0
  696. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  697. package/dist/core/tools/tool-definition-wrapper.js +10 -2
  698. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  699. package/dist/extensions/index.js +1 -1
  700. package/dist/extensions/index.js.map +1 -1
  701. package/dist/extensions/llama/provider.d.ts +3 -2
  702. package/dist/extensions/llama/provider.d.ts.map +1 -1
  703. package/dist/extensions/llama/provider.js +9 -3
  704. package/dist/extensions/llama/provider.js.map +1 -1
  705. package/dist/index-extensions.d.ts +1 -1
  706. package/dist/index-extensions.d.ts.map +1 -1
  707. package/dist/index-extensions.js.map +1 -1
  708. package/dist/index.d.ts +2 -3
  709. package/dist/index.d.ts.map +1 -1
  710. package/dist/index.js +1 -2
  711. package/dist/index.js.map +1 -1
  712. package/dist/main-session-options.d.ts.map +1 -1
  713. package/dist/main-session-options.js +0 -4
  714. package/dist/main-session-options.js.map +1 -1
  715. package/dist/main-session.d.ts.map +1 -1
  716. package/dist/main-session.js +2 -1
  717. package/dist/main-session.js.map +1 -1
  718. package/dist/main.d.ts.map +1 -1
  719. package/dist/main.js +1 -17
  720. package/dist/main.js.map +1 -1
  721. package/dist/modes/index.d.ts +1 -1
  722. package/dist/modes/index.d.ts.map +1 -1
  723. package/dist/modes/index.js.map +1 -1
  724. package/dist/modes/interactive/chat-input-actions.d.ts +1 -1
  725. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  726. package/dist/modes/interactive/chat-input-actions.js +14 -96
  727. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  728. package/dist/modes/interactive/components/atomic-banner.d.ts +9 -8
  729. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
  730. package/dist/modes/interactive/components/atomic-banner.js +68 -24
  731. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  732. package/dist/modes/interactive/components/atomic-working-status.d.ts +52 -0
  733. package/dist/modes/interactive/components/atomic-working-status.d.ts.map +1 -0
  734. package/dist/modes/interactive/components/atomic-working-status.js +202 -0
  735. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -0
  736. package/dist/modes/interactive/components/chat-message-renderer.js +1 -1
  737. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  738. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  739. package/dist/modes/interactive/components/chat-session-host-actions.js +87 -7
  740. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  741. package/dist/modes/interactive/components/chat-session-host-editor.js +3 -3
  742. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
  743. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  744. package/dist/modes/interactive/components/chat-session-host-events.js +61 -9
  745. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  746. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  747. package/dist/modes/interactive/components/chat-session-host-rendering.js +23 -7
  748. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  749. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +27 -0
  750. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  751. package/dist/modes/interactive/components/chat-session-host-runtime.js +120 -18
  752. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
  753. package/dist/modes/interactive/components/chat-session-host-state.d.ts +9 -0
  754. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  755. package/dist/modes/interactive/components/chat-session-host-state.js +5 -0
  756. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  757. package/dist/modes/interactive/components/chat-session-host-types.d.ts +10 -0
  758. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  759. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
  760. package/dist/modes/interactive/components/chat-session-host.d.ts +13 -0
  761. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  762. package/dist/modes/interactive/components/chat-session-host.js +22 -1
  763. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  764. package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
  765. package/dist/modes/interactive/components/compaction-boundary-message.js +2 -1
  766. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  767. package/dist/modes/interactive/components/custom-message.d.ts +3 -1
  768. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  769. package/dist/modes/interactive/components/custom-message.js +9 -2
  770. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  771. package/dist/modes/interactive/components/extension-editor.d.ts +3 -2
  772. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  773. package/dist/modes/interactive/components/extension-editor.js +14 -43
  774. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  775. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  776. package/dist/modes/interactive/components/scoped-models-selector.js +18 -13
  777. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  778. package/dist/modes/interactive/components/startup-identity.d.ts +22 -0
  779. package/dist/modes/interactive/components/startup-identity.d.ts.map +1 -0
  780. package/dist/modes/interactive/components/startup-identity.js +58 -0
  781. package/dist/modes/interactive/components/startup-identity.js.map +1 -0
  782. package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -1
  783. package/dist/modes/interactive/components/tree-selector-content.js +0 -6
  784. package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
  785. package/dist/modes/interactive/components/tree-selector-model.d.ts.map +1 -1
  786. package/dist/modes/interactive/components/tree-selector-model.js +0 -1
  787. package/dist/modes/interactive/components/tree-selector-model.js.map +1 -1
  788. package/dist/modes/interactive/components/working-status.d.ts +5 -11
  789. package/dist/modes/interactive/components/working-status.d.ts.map +1 -1
  790. package/dist/modes/interactive/components/working-status.js +14 -15
  791. package/dist/modes/interactive/components/working-status.js.map +1 -1
  792. package/dist/modes/interactive/external-editor.d.ts +23 -0
  793. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  794. package/dist/modes/interactive/external-editor.js +120 -0
  795. package/dist/modes/interactive/external-editor.js.map +1 -0
  796. package/dist/modes/interactive/interactive-agent-events.js +33 -22
  797. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  798. package/dist/modes/interactive/interactive-auth-login.js +16 -6
  799. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  800. package/dist/modes/interactive/interactive-auth-routing.js +3 -0
  801. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  802. package/dist/modes/interactive/interactive-bash-compact.d.ts +2 -1
  803. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
  804. package/dist/modes/interactive/interactive-bash-compact.js +8 -0
  805. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  806. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  807. package/dist/modes/interactive/interactive-deferred-startup.js +49 -19
  808. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  809. package/dist/modes/interactive/interactive-editor-actions.js +4 -3
  810. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  811. package/dist/modes/interactive/interactive-extension-dialogs.js +1 -1
  812. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  813. package/dist/modes/interactive/interactive-extension-runtime.js +3 -2
  814. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  815. package/dist/modes/interactive/interactive-initial-session-binding.d.ts +4 -0
  816. package/dist/modes/interactive/interactive-initial-session-binding.d.ts.map +1 -0
  817. package/dist/modes/interactive/interactive-initial-session-binding.js +23 -0
  818. package/dist/modes/interactive/interactive-initial-session-binding.js.map +1 -0
  819. package/dist/modes/interactive/interactive-input-handling.d.ts +2 -1
  820. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  821. package/dist/modes/interactive/interactive-input-handling.js +27 -51
  822. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  823. package/dist/modes/interactive/interactive-mode-base.d.ts +11 -7
  824. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  825. package/dist/modes/interactive/interactive-mode-base.js +14 -6
  826. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  827. package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -4
  828. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  829. package/dist/modes/interactive/interactive-mode-deps.js +2 -4
  830. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  831. package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -8
  832. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  833. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  834. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  835. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  836. package/dist/modes/interactive/interactive-mode.js +1 -0
  837. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  838. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +2 -3
  839. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
  840. package/dist/modes/interactive/interactive-model-catalog-startup.js +3 -6
  841. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
  842. package/dist/modes/interactive/interactive-model-routing.js +26 -97
  843. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  844. package/dist/modes/interactive/interactive-pause.d.ts +4 -0
  845. package/dist/modes/interactive/interactive-pause.d.ts.map +1 -0
  846. package/dist/modes/interactive/interactive-pause.js +8 -0
  847. package/dist/modes/interactive/interactive-pause.js.map +1 -0
  848. package/dist/modes/interactive/interactive-process-lifecycle.js +5 -4
  849. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  850. package/dist/modes/interactive/interactive-prompt-turn.d.ts +2 -0
  851. package/dist/modes/interactive/interactive-prompt-turn.d.ts.map +1 -0
  852. package/dist/modes/interactive/interactive-prompt-turn.js +41 -0
  853. package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -0
  854. package/dist/modes/interactive/interactive-render-chat.js +20 -8
  855. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  856. package/dist/modes/interactive/interactive-resource-paths.js +11 -2
  857. package/dist/modes/interactive/interactive-resource-paths.js.map +1 -1
  858. package/dist/modes/interactive/interactive-resource-rendering.js +99 -0
  859. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  860. package/dist/modes/interactive/interactive-session-runtime.js +1 -1
  861. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  862. package/dist/modes/interactive/interactive-slash-commands.js +1 -1
  863. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  864. package/dist/modes/interactive/interactive-startup-chat-container.d.ts +20 -0
  865. package/dist/modes/interactive/interactive-startup-chat-container.d.ts.map +1 -0
  866. package/dist/modes/interactive/interactive-startup-chat-container.js +26 -0
  867. package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -0
  868. package/dist/modes/interactive/interactive-startup.d.ts +1 -1
  869. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  870. package/dist/modes/interactive/interactive-startup.js +30 -25
  871. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  872. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -1
  873. package/dist/modes/interactive/interactive-summarization-retry-events.js +9 -3
  874. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
  875. package/dist/modes/interactive/theme/catppuccin-frappe.json +1 -1
  876. package/dist/modes/interactive/theme/catppuccin-latte.json +1 -1
  877. package/dist/modes/interactive/theme/catppuccin-macchiato.json +1 -1
  878. package/dist/modes/interactive/theme/catppuccin-mocha.json +9 -1
  879. package/dist/modes/interactive/theme/dark.json +1 -1
  880. package/dist/modes/interactive/theme/light.json +1 -1
  881. package/dist/modes/interactive/theme/theme-class.d.ts +4 -0
  882. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  883. package/dist/modes/interactive/theme/theme-class.js +7 -0
  884. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  885. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  886. package/dist/modes/interactive/theme/theme-loading.js +4 -0
  887. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  888. package/dist/modes/interactive/theme/theme-schema.d.ts +32 -0
  889. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  890. package/dist/modes/interactive/theme/theme-schema.js +8 -0
  891. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  892. package/dist/modes/interactive/theme/theme-schema.json +15 -2
  893. package/dist/modes/interactive/whimsical-messages.d.ts +1 -0
  894. package/dist/modes/interactive/whimsical-messages.d.ts.map +1 -1
  895. package/dist/modes/interactive/whimsical-messages.js +2 -2
  896. package/dist/modes/interactive/whimsical-messages.js.map +1 -1
  897. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts.map +1 -1
  898. package/dist/modes/interactive-engine/create-isolated-runtime.js +3 -1
  899. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  900. package/dist/modes/interactive-engine/engine-args.d.ts.map +1 -1
  901. package/dist/modes/interactive-engine/engine-args.js +0 -1
  902. package/dist/modes/interactive-engine/engine-args.js.map +1 -1
  903. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  904. package/dist/modes/interactive-engine/engine-custom-ui.js +5 -17
  905. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  906. package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
  907. package/dist/modes/interactive-engine/engine-render-service.js +8 -19
  908. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  909. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -0
  910. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  911. package/dist/modes/interactive-engine/extension-ui-bridge.js +3 -0
  912. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  913. package/dist/modes/interactive-engine/isolated-auth.d.ts +10 -0
  914. package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -0
  915. package/dist/modes/interactive-engine/isolated-auth.js +14 -0
  916. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -0
  917. package/dist/modes/interactive-engine/isolated-runtime.d.ts +9 -1
  918. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  919. package/dist/modes/interactive-engine/isolated-runtime.js +46 -34
  920. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  921. package/dist/modes/interactive-engine/protocol.d.ts +1 -1
  922. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  923. package/dist/modes/interactive-engine/protocol.js +3 -10
  924. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  925. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +1 -0
  926. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  927. package/dist/modes/interactive-engine/remote-model-catalog.js +10 -1
  928. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  929. package/dist/modes/interactive-engine/remote-queue-pause.d.ts +13 -0
  930. package/dist/modes/interactive-engine/remote-queue-pause.d.ts.map +1 -0
  931. package/dist/modes/interactive-engine/remote-queue-pause.js +38 -0
  932. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -0
  933. package/dist/modes/interactive-engine/remote-renderer.d.ts +3 -1
  934. package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -1
  935. package/dist/modes/interactive-engine/remote-renderer.js +4 -1
  936. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  937. package/dist/modes/print-mode.d.ts.map +1 -1
  938. package/dist/modes/print-mode.js +5 -0
  939. package/dist/modes/print-mode.js.map +1 -1
  940. package/dist/modes/rpc/jsonl.d.ts +2 -7
  941. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  942. package/dist/modes/rpc/jsonl.js +7 -24
  943. package/dist/modes/rpc/jsonl.js.map +1 -1
  944. package/dist/modes/rpc/queued-writer.d.ts +19 -0
  945. package/dist/modes/rpc/queued-writer.d.ts.map +1 -0
  946. package/dist/modes/rpc/{bounded-writer.js → queued-writer.js} +7 -30
  947. package/dist/modes/rpc/queued-writer.js.map +1 -0
  948. package/dist/modes/rpc/rpc-bash-request-owners.d.ts +24 -0
  949. package/dist/modes/rpc/rpc-bash-request-owners.d.ts.map +1 -0
  950. package/dist/modes/rpc/rpc-bash-request-owners.js +45 -0
  951. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -0
  952. package/dist/modes/rpc/rpc-client-api.d.ts +8 -5
  953. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  954. package/dist/modes/rpc/rpc-client-api.js +10 -11
  955. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  956. package/dist/modes/rpc/rpc-client-process.d.ts +1 -4
  957. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  958. package/dist/modes/rpc/rpc-client-process.js +2 -14
  959. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  960. package/dist/modes/rpc/rpc-client.d.ts +8 -4
  961. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  962. package/dist/modes/rpc/rpc-client.js +21 -30
  963. package/dist/modes/rpc/rpc-client.js.map +1 -1
  964. package/dist/modes/rpc/rpc-command-handler.d.ts +7 -4
  965. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  966. package/dist/modes/rpc/rpc-command-handler.js +76 -93
  967. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  968. package/dist/modes/rpc/rpc-input-scheduler.d.ts +3 -3
  969. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  970. package/dist/modes/rpc/rpc-input-scheduler.js +7 -4
  971. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  972. package/dist/modes/rpc/rpc-mode.d.ts +1 -1
  973. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  974. package/dist/modes/rpc/rpc-mode.js +5 -5
  975. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  976. package/dist/modes/rpc/rpc-model-fallback-prompt.d.ts +4 -0
  977. package/dist/modes/rpc/rpc-model-fallback-prompt.d.ts.map +1 -0
  978. package/dist/modes/rpc/rpc-model-fallback-prompt.js +11 -0
  979. package/dist/modes/rpc/rpc-model-fallback-prompt.js.map +1 -0
  980. package/dist/modes/rpc/rpc-oauth-client.d.ts +22 -0
  981. package/dist/modes/rpc/rpc-oauth-client.d.ts.map +1 -0
  982. package/dist/modes/rpc/rpc-oauth-client.js +74 -0
  983. package/dist/modes/rpc/rpc-oauth-client.js.map +1 -0
  984. package/dist/modes/rpc/rpc-oauth-interaction.d.ts +9 -0
  985. package/dist/modes/rpc/rpc-oauth-interaction.d.ts.map +1 -0
  986. package/dist/modes/rpc/rpc-oauth-interaction.js +49 -0
  987. package/dist/modes/rpc/rpc-oauth-interaction.js.map +1 -0
  988. package/dist/modes/rpc/rpc-output-buffer.d.ts +2 -1
  989. package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -1
  990. package/dist/modes/rpc/rpc-output-buffer.js +4 -39
  991. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  992. package/dist/modes/rpc/rpc-provider-auth.d.ts +23 -0
  993. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -0
  994. package/dist/modes/rpc/rpc-provider-auth.js +145 -0
  995. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -0
  996. package/dist/modes/rpc/rpc-responses.d.ts +0 -1
  997. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -1
  998. package/dist/modes/rpc/rpc-responses.js +0 -14
  999. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  1000. package/dist/modes/rpc/rpc-types.d.ts +83 -27
  1001. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1002. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1003. package/dist/utils/clipboard.d.ts.map +1 -1
  1004. package/dist/utils/clipboard.js +21 -8
  1005. package/dist/utils/clipboard.js.map +1 -1
  1006. package/dist/utils/version-check.d.ts.map +1 -1
  1007. package/dist/utils/version-check.js +3 -1
  1008. package/dist/utils/version-check.js.map +1 -1
  1009. package/docs/changelog.mdx +12 -1
  1010. package/docs/compaction.md +101 -18
  1011. package/docs/custom-provider.md +13 -4
  1012. package/docs/docs.json +1 -0
  1013. package/docs/environment-variables.md +37 -0
  1014. package/docs/extensions.md +45 -9
  1015. package/docs/index.md +1 -0
  1016. package/docs/intercom.md +1 -1
  1017. package/docs/json.md +4 -4
  1018. package/docs/keybindings.md +4 -2
  1019. package/docs/llama-cpp.md +3 -1
  1020. package/docs/models.md +29 -43
  1021. package/docs/providers.md +18 -24
  1022. package/docs/quickstart.md +19 -16
  1023. package/docs/rpc.md +38 -85
  1024. package/docs/sdk.md +15 -22
  1025. package/docs/session-format.md +2 -15
  1026. package/docs/sessions.md +1 -1
  1027. package/docs/settings.md +10 -15
  1028. package/docs/skills.md +8 -0
  1029. package/docs/subagents.md +17 -9
  1030. package/docs/themes.md +10 -1
  1031. package/docs/tui.md +10 -5
  1032. package/docs/usage.md +21 -2
  1033. package/docs/windows.md +1 -1
  1034. package/docs/workflows.md +1096 -518
  1035. package/examples/extensions/README.md +1 -1
  1036. package/examples/extensions/handoff.ts +8 -1
  1037. package/examples/extensions/message-renderer.ts +2 -2
  1038. package/examples/extensions/summarize.ts +3 -0
  1039. package/examples/extensions/working-indicator.ts +2 -2
  1040. package/npm-shrinkwrap.json +40 -46
  1041. package/package.json +9 -7
  1042. package/dist/builtin/cursor/CHANGELOG.md +0 -281
  1043. package/dist/builtin/cursor/LICENSE +0 -26
  1044. package/dist/builtin/cursor/README.md +0 -24
  1045. package/dist/builtin/cursor/index.ts +0 -9
  1046. package/dist/builtin/cursor/package.json +0 -47
  1047. package/dist/builtin/cursor/src/auth.ts +0 -352
  1048. package/dist/builtin/cursor/src/catalog-cache.ts +0 -155
  1049. package/dist/builtin/cursor/src/config.ts +0 -123
  1050. package/dist/builtin/cursor/src/conversation-state.ts +0 -135
  1051. package/dist/builtin/cursor/src/cursor-models-raw.json +0 -412
  1052. package/dist/builtin/cursor/src/model-mapper.ts +0 -369
  1053. package/dist/builtin/cursor/src/model-reference.ts +0 -282
  1054. package/dist/builtin/cursor/src/models.ts +0 -54
  1055. package/dist/builtin/cursor/src/native-loader.ts +0 -71
  1056. package/dist/builtin/cursor/src/proto/README.md +0 -34
  1057. package/dist/builtin/cursor/src/proto/agent_pb.ts +0 -15294
  1058. package/dist/builtin/cursor/src/proto/protobuf-codec-base64.ts +0 -22
  1059. package/dist/builtin/cursor/src/proto/protobuf-codec-json.ts +0 -44
  1060. package/dist/builtin/cursor/src/proto/protobuf-codec-request.ts +0 -311
  1061. package/dist/builtin/cursor/src/proto/protobuf-codec-wire.ts +0 -248
  1062. package/dist/builtin/cursor/src/proto/protobuf-codec.ts +0 -200
  1063. package/dist/builtin/cursor/src/provider.ts +0 -301
  1064. package/dist/builtin/cursor/src/stream.ts +0 -494
  1065. package/dist/builtin/cursor/src/transport-errors.ts +0 -74
  1066. package/dist/builtin/cursor/src/transport-frame.ts +0 -56
  1067. package/dist/builtin/cursor/src/transport-http2.ts +0 -122
  1068. package/dist/builtin/cursor/src/transport-native-client.ts +0 -161
  1069. package/dist/builtin/cursor/src/transport-run-stream.ts +0 -188
  1070. package/dist/builtin/cursor/src/transport-timeouts.ts +0 -87
  1071. package/dist/builtin/cursor/src/transport-types.ts +0 -143
  1072. package/dist/builtin/cursor/src/transport.ts +0 -26
  1073. package/dist/builtin/workflows/builtin/deep-research-codebase-runner.ts +0 -492
  1074. package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +0 -383
  1075. package/dist/builtin/workflows/builtin/deep-research-codebase.d.ts +0 -35
  1076. package/dist/builtin/workflows/builtin/deep-research-codebase.ts +0 -47
  1077. package/dist/builtin/workflows/skills/impeccable/reference/brand.md +0 -108
  1078. package/dist/builtin/workflows/skills/impeccable/reference/codex.md +0 -105
  1079. package/dist/builtin/workflows/skills/impeccable/reference/interaction-design.md +0 -189
  1080. package/dist/builtin/workflows/skills/impeccable/scripts/hook-before-edit.mjs +0 -516
  1081. package/dist/core/context-window.d.ts +0 -54
  1082. package/dist/core/context-window.d.ts.map +0 -1
  1083. package/dist/core/context-window.js +0 -110
  1084. package/dist/core/context-window.js.map +0 -1
  1085. package/dist/core/copilot-anthropic-sse-repair.d.ts +0 -23
  1086. package/dist/core/copilot-anthropic-sse-repair.d.ts.map +0 -1
  1087. package/dist/core/copilot-anthropic-sse-repair.js +0 -340
  1088. package/dist/core/copilot-anthropic-sse-repair.js.map +0 -1
  1089. package/dist/core/copilot-errors.d.ts +0 -9
  1090. package/dist/core/copilot-errors.d.ts.map +0 -1
  1091. package/dist/core/copilot-errors.js +0 -32
  1092. package/dist/core/copilot-errors.js.map +0 -1
  1093. package/dist/core/copilot-gemini-payload-sanitizer.d.ts +0 -72
  1094. package/dist/core/copilot-gemini-payload-sanitizer.d.ts.map +0 -1
  1095. package/dist/core/copilot-gemini-payload-sanitizer.js +0 -296
  1096. package/dist/core/copilot-gemini-payload-sanitizer.js.map +0 -1
  1097. package/dist/core/copilot-gemini-reasoning.d.ts +0 -126
  1098. package/dist/core/copilot-gemini-reasoning.d.ts.map +0 -1
  1099. package/dist/core/copilot-gemini-reasoning.js +0 -265
  1100. package/dist/core/copilot-gemini-reasoning.js.map +0 -1
  1101. package/dist/core/copilot-gemini-tool-arguments.d.ts +0 -42
  1102. package/dist/core/copilot-gemini-tool-arguments.d.ts.map +0 -1
  1103. package/dist/core/copilot-gemini-tool-arguments.js +0 -159
  1104. package/dist/core/copilot-gemini-tool-arguments.js.map +0 -1
  1105. package/dist/core/copilot-hosts.d.ts +0 -12
  1106. package/dist/core/copilot-hosts.d.ts.map +0 -1
  1107. package/dist/core/copilot-hosts.js +0 -33
  1108. package/dist/core/copilot-hosts.js.map +0 -1
  1109. package/dist/core/copilot-model-catalog.d.ts +0 -114
  1110. package/dist/core/copilot-model-catalog.d.ts.map +0 -1
  1111. package/dist/core/copilot-model-catalog.js +0 -392
  1112. package/dist/core/copilot-model-catalog.js.map +0 -1
  1113. package/dist/core/copilot-model-static-fallbacks.d.ts +0 -43
  1114. package/dist/core/copilot-model-static-fallbacks.d.ts.map +0 -1
  1115. package/dist/core/copilot-model-static-fallbacks.js +0 -50
  1116. package/dist/core/copilot-model-static-fallbacks.js.map +0 -1
  1117. package/dist/core/copilot-model-synthesis.d.ts +0 -10
  1118. package/dist/core/copilot-model-synthesis.d.ts.map +0 -1
  1119. package/dist/core/copilot-model-synthesis.js +0 -91
  1120. package/dist/core/copilot-model-synthesis.js.map +0 -1
  1121. package/dist/modes/interactive/components/context-window-selector.d.ts +0 -53
  1122. package/dist/modes/interactive/components/context-window-selector.d.ts.map +0 -1
  1123. package/dist/modes/interactive/components/context-window-selector.js +0 -136
  1124. package/dist/modes/interactive/components/context-window-selector.js.map +0 -1
  1125. package/dist/modes/rpc/bounded-writer.d.ts +0 -27
  1126. package/dist/modes/rpc/bounded-writer.d.ts.map +0 -1
  1127. package/dist/modes/rpc/bounded-writer.js.map +0 -1
@@ -6,6 +6,9 @@ export * from "./compaction.ts";
6
6
  export * from "./compaction-types.js";
7
7
  export * from "./compaction-parameters.js";
8
8
  export * from "./compaction-boundary.js";
9
+ export * from "./planner-outcome.js";
10
+ export * from "./fallback-planner.js";
11
+ export * from "./region-trimming.js";
9
12
  export * from "./range-planner.js";
10
13
  export * from "./range-planner-diagnostics.js";
11
14
  export * from "./compaction-runner.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC"}
@@ -6,6 +6,9 @@ export * from "./compaction.js";
6
6
  export * from "./compaction-types.js";
7
7
  export * from "./compaction-parameters.js";
8
8
  export * from "./compaction-boundary.js";
9
+ export * from "./planner-outcome.js";
10
+ export * from "./fallback-planner.js";
11
+ export * from "./region-trimming.js";
9
12
  export * from "./range-planner.js";
10
13
  export * from "./range-planner-diagnostics.js";
11
14
  export * from "./compaction-runner.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/compaction/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC","sourcesContent":["/**\n * Compaction support utilities.\n */\n\nexport * from \"./branch-summarization.ts\";\nexport * from \"./compaction.ts\";\nexport * from \"./compaction-types.js\";\nexport * from \"./compaction-parameters.js\";\nexport * from \"./compaction-boundary.js\";\nexport * from \"./range-planner.js\";\nexport * from \"./range-planner-diagnostics.js\";\nexport * from \"./compaction-runner.js\";\nexport * from \"./deleted-ranges.js\";\nexport * from \"./transcript-serialization.js\";\nexport * from \"./utils.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/compaction/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC","sourcesContent":["/**\n * Compaction support utilities.\n */\n\nexport * from \"./branch-summarization.ts\";\nexport * from \"./compaction.ts\";\nexport * from \"./compaction-types.js\";\nexport * from \"./compaction-parameters.js\";\nexport * from \"./compaction-boundary.js\";\nexport * from \"./planner-outcome.js\";\nexport * from \"./fallback-planner.js\";\nexport * from \"./region-trimming.js\";\nexport * from \"./range-planner.js\";\nexport * from \"./range-planner-diagnostics.js\";\nexport * from \"./compaction-runner.js\";\nexport * from \"./deleted-ranges.js\";\nexport * from \"./transcript-serialization.js\";\nexport * from \"./utils.ts\";\n"]}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Typed outcomes for one compaction planner attempt.
3
+ *
4
+ * `planDeletedLineRanges` used to collapse ranked success, silent partial
5
+ * recovery, reasoning starvation, rate limiting, malformed output, and context
6
+ * overflow into "ranges or throw". Callers could not tell a throttle from
7
+ * garbage without string-matching an error message. This module makes each
8
+ * outcome a distinct value so the rung ladder, the `0600` diagnostic sidecar,
9
+ * and the UI can separate them.
10
+ *
11
+ * Cancellation is deliberately NOT a variant: an abort still throws.
12
+ */
13
+ import type { Api, AssistantMessage } from "@earendil-works/pi-ai/compat";
14
+ import type { RawLineRange } from "./compaction-types.js";
15
+ import type { DiagnosticFailureCategory } from "./range-planner-diagnostics.js";
16
+ /** Which limit a `rateLimited` outcome represents. */
17
+ export type PlannerLimitClass = "quota" | "rate_limited";
18
+ /** Every way one planner attempt can end. */
19
+ export type PlannerOutcome = {
20
+ kind: "ranked";
21
+ ranges: RawLineRange[];
22
+ } | {
23
+ kind: "recovered";
24
+ ranges: RawLineRange[];
25
+ recoveredCount: number;
26
+ } | {
27
+ kind: "rateLimited";
28
+ /**
29
+ * Which limit this was, independent of retry activity. Quota/billing
30
+ * exhaustion and transient throttling are different facts and must stay
31
+ * separable in code and diagnostics; `exhausted` records only whether a
32
+ * retry was actually scheduled, which cannot tell them apart when retry
33
+ * is disabled.
34
+ */
35
+ category: PlannerLimitClass;
36
+ exhausted: boolean;
37
+ message: string;
38
+ diagnosticPath?: string;
39
+ } | {
40
+ kind: "unusable";
41
+ category: DiagnosticFailureCategory;
42
+ excerpt: string;
43
+ diagnosticPath?: string;
44
+ } | {
45
+ kind: "overflowed";
46
+ diagnosticPath?: string;
47
+ } | {
48
+ kind: "providerError";
49
+ message: string;
50
+ diagnosticPath?: string;
51
+ };
52
+ /** A planner outcome that cannot produce a boundary and must advance the ladder. */
53
+ export type TerminalPlannerOutcome = Extract<PlannerOutcome, {
54
+ kind: "rateLimited" | "unusable" | "overflowed" | "providerError";
55
+ }>;
56
+ /** Whether this outcome produced validated deletion ranges. */
57
+ export declare function isPlannerSuccess(outcome: PlannerOutcome): outcome is Extract<PlannerOutcome, {
58
+ kind: "ranked" | "recovered";
59
+ }>;
60
+ /** How a failed planner response is classified before an outcome is built. */
61
+ export type PlannerFailureClass = "overflow" | "quota" | "rate_limited" | "provider_error";
62
+ /**
63
+ * Classify one failed planner response.
64
+ *
65
+ * Context overflow wins first because pi-ai's `isContextOverflow` already
66
+ * excludes rate/throttle text, and overflow is recoverable by trimming.
67
+ * Quota/billing exhaustion then wins over transient throttling, matching pi-ai's
68
+ * own precedence.
69
+ */
70
+ export declare function classifyPlannerFailure(response: AssistantMessage, contextWindow: number): PlannerFailureClass;
71
+ /** Build a synthetic error response so a thrown transport failure classifies identically. */
72
+ export declare function syntheticErrorResponse(model: {
73
+ api: Api;
74
+ provider: string;
75
+ id: string;
76
+ }, errorMessage: string): AssistantMessage;
77
+ /**
78
+ * Reasoning starvation fingerprint: the response stopped at the output limit,
79
+ * produced no usable deletion record, and billed reasoning tokens.
80
+ *
81
+ * This is a diagnostic category only. Codex has no starvation concept and never
82
+ * retries one; neither does Atomic. A starved outcome advances the ladder
83
+ * exactly like any other `unusable` output.
84
+ */
85
+ export declare function isReasoningStarved(response: AssistantMessage, hasUsableRanges: boolean): boolean;
86
+ //# sourceMappingURL=planner-outcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner-outcome.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/planner-outcome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,sDAAsD;AACtD,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,cAAc,CAAC;AAEzD,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACrE;IACA,IAAI,EAAE,aAAa,CAAC;IACpB;;;;;;OAMG;IACH,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACvB,GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,yBAAyB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACnG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,oFAAoF;AACpF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAC3C,cAAc,EACd;IAAE,IAAI,EAAE,aAAa,GAAG,UAAU,GAAG,YAAY,GAAG,eAAe,CAAA;CAAE,CACrE,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAA;CAAE,CAAC,CAE9H;AA6DD,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAE3F;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,GAAG,mBAAmB,CAM7G;AAED,6FAA6F;AAC7F,wBAAgB,sBAAsB,CACrC,KAAK,EAAE;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EACjD,YAAY,EAAE,MAAM,GAClB,gBAAgB,CAmBlB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAEhG"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Typed outcomes for one compaction planner attempt.
3
+ *
4
+ * `planDeletedLineRanges` used to collapse ranked success, silent partial
5
+ * recovery, reasoning starvation, rate limiting, malformed output, and context
6
+ * overflow into "ranges or throw". Callers could not tell a throttle from
7
+ * garbage without string-matching an error message. This module makes each
8
+ * outcome a distinct value so the rung ladder, the `0600` diagnostic sidecar,
9
+ * and the UI can separate them.
10
+ *
11
+ * Cancellation is deliberately NOT a variant: an abort still throws.
12
+ */
13
+ import { isContextOverflow } from "@earendil-works/pi-ai/compat";
14
+ /** Whether this outcome produced validated deletion ranges. */
15
+ export function isPlannerSuccess(outcome) {
16
+ return outcome.kind === "ranked" || outcome.kind === "recovered";
17
+ }
18
+ function buildProviderErrorPattern(patterns) {
19
+ return new RegExp(patterns.join("|"), "i");
20
+ }
21
+ /**
22
+ * Quota/billing exhaustion. Mirrors pi-ai's
23
+ * `NON_RETRYABLE_PROVIDER_LIMIT_ERROR_PATTERN` (`utils/retry.js`), which takes
24
+ * precedence over the transient patterns and never spends backoff.
25
+ */
26
+ const QUOTA_EXHAUSTED_PATTERN = buildProviderErrorPattern([
27
+ "GoUsageLimitError",
28
+ "FreeUsageLimitError",
29
+ "Monthly usage limit reached",
30
+ "available balance",
31
+ "insufficient_quota",
32
+ "out of budget",
33
+ "quota exceeded",
34
+ "billing",
35
+ ]);
36
+ /**
37
+ * Generic usage-limit wording, e.g. Codex's "The usage limit has been reached".
38
+ *
39
+ * This is a deliberate **local addition**, not a mirror: pi-ai lists it in
40
+ * neither its non-retryable nor its retryable pattern, so `retryAssistantCall`
41
+ * never schedules a backoff for it. Classifying it as transient throttling would
42
+ * report `exhausted: true` for a retry budget that was never spent, so Atomic
43
+ * treats it as quota exhaustion (`exhausted: false`). pi-ai's own
44
+ * `Monthly usage limit reached` entry above already covers the specific form.
45
+ */
46
+ const LOCAL_USAGE_LIMIT_PATTERN = /usage.?limit/i;
47
+ /**
48
+ * Transient throttling and provider-load failures. This is the rate-limit
49
+ * subset of pi-ai's `RETRYABLE_PROVIDER_ERROR_PATTERN`, minus the individual
50
+ * status codes, which `HTTP_5XX_PATTERN` generalizes below.
51
+ */
52
+ const RATE_LIMITED_PATTERN = buildProviderErrorPattern([
53
+ "overloaded",
54
+ "rate.?limit",
55
+ "too many requests",
56
+ "429",
57
+ "service.?unavailable",
58
+ "server.?error",
59
+ "internal.?error",
60
+ "ResourceExhausted",
61
+ ]);
62
+ /**
63
+ * The whole HTTP 5xx class, bounded so it cannot match inside a longer number.
64
+ *
65
+ * A deliberate local broadening: the RFC and the acceptance contract enumerate
66
+ * `5xx`, while pi-ai lists only 500/502/503/504/524, so a `501` would otherwise
67
+ * fall through to `providerError`. The consequence is that pi-ai may schedule no
68
+ * backoff for a status Atomic types as rate limiting — which is exactly why
69
+ * `exhausted` reports *observed* retry activity rather than assuming it.
70
+ */
71
+ const HTTP_5XX_PATTERN = /(?<![\d.])5\d\d(?![\d.])/;
72
+ /**
73
+ * Classify one failed planner response.
74
+ *
75
+ * Context overflow wins first because pi-ai's `isContextOverflow` already
76
+ * excludes rate/throttle text, and overflow is recoverable by trimming.
77
+ * Quota/billing exhaustion then wins over transient throttling, matching pi-ai's
78
+ * own precedence.
79
+ */
80
+ export function classifyPlannerFailure(response, contextWindow) {
81
+ if (isContextOverflow(response, contextWindow))
82
+ return "overflow";
83
+ const message = response.errorMessage ?? "";
84
+ if (QUOTA_EXHAUSTED_PATTERN.test(message) || LOCAL_USAGE_LIMIT_PATTERN.test(message))
85
+ return "quota";
86
+ if (RATE_LIMITED_PATTERN.test(message) || HTTP_5XX_PATTERN.test(message))
87
+ return "rate_limited";
88
+ return "provider_error";
89
+ }
90
+ /** Build a synthetic error response so a thrown transport failure classifies identically. */
91
+ export function syntheticErrorResponse(model, errorMessage) {
92
+ return {
93
+ role: "assistant",
94
+ content: [],
95
+ api: model.api,
96
+ provider: model.provider,
97
+ model: model.id,
98
+ usage: {
99
+ input: 0,
100
+ output: 0,
101
+ cacheRead: 0,
102
+ cacheWrite: 0,
103
+ totalTokens: 0,
104
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
105
+ },
106
+ stopReason: "error",
107
+ errorMessage,
108
+ timestamp: Date.now(),
109
+ };
110
+ }
111
+ /**
112
+ * Reasoning starvation fingerprint: the response stopped at the output limit,
113
+ * produced no usable deletion record, and billed reasoning tokens.
114
+ *
115
+ * This is a diagnostic category only. Codex has no starvation concept and never
116
+ * retries one; neither does Atomic. A starved outcome advances the ladder
117
+ * exactly like any other `unusable` output.
118
+ */
119
+ export function isReasoningStarved(response, hasUsableRanges) {
120
+ return response.stopReason === "length" && !hasUsableRanges && (response.usage?.reasoning ?? 0) > 0;
121
+ }
122
+ //# sourceMappingURL=planner-outcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner-outcome.js","sourceRoot":"","sources":["../../../src/core/compaction/planner-outcome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAmCjE,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACvD,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC;AAClE,CAAC;AAED,SAAS,yBAAyB,CAAC,QAA2B;IAC7D,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;IACzD,mBAAmB;IACnB,qBAAqB;IACrB,6BAA6B;IAC7B,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;IACf,gBAAgB;IAChB,SAAS;CACT,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAElD;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;IACtD,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,KAAK;IACL,sBAAsB;IACtB,eAAe;IACf,iBAAiB;IACjB,mBAAmB;CACnB,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAKpD;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA0B,EAAE,aAAqB;IACvF,IAAI,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,OAAO,UAAU,CAAC;IAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;IAC5C,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACrG,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,cAAc,CAAC;IAChG,OAAO,gBAAgB,CAAC;AACzB,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,sBAAsB,CACrC,KAAiD,EACjD,YAAoB;IAEpB,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,EAAE;QACf,KAAK,EAAE;YACN,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACpE;QACD,UAAU,EAAE,OAAO;QACnB,YAAY;QACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACD,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAA0B,EAAE,eAAwB;IACtF,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACrG,CAAC","sourcesContent":["/**\n * Typed outcomes for one compaction planner attempt.\n *\n * `planDeletedLineRanges` used to collapse ranked success, silent partial\n * recovery, reasoning starvation, rate limiting, malformed output, and context\n * overflow into \"ranges or throw\". Callers could not tell a throttle from\n * garbage without string-matching an error message. This module makes each\n * outcome a distinct value so the rung ladder, the `0600` diagnostic sidecar,\n * and the UI can separate them.\n *\n * Cancellation is deliberately NOT a variant: an abort still throws.\n */\n\nimport type { Api, AssistantMessage } from \"@earendil-works/pi-ai/compat\";\nimport { isContextOverflow } from \"@earendil-works/pi-ai/compat\";\nimport type { RawLineRange } from \"./compaction-types.js\";\nimport type { DiagnosticFailureCategory } from \"./range-planner-diagnostics.js\";\n\n/** Which limit a `rateLimited` outcome represents. */\nexport type PlannerLimitClass = \"quota\" | \"rate_limited\";\n\n/** Every way one planner attempt can end. */\nexport type PlannerOutcome =\n\t| { kind: \"ranked\"; ranges: RawLineRange[] }\n\t| { kind: \"recovered\"; ranges: RawLineRange[]; recoveredCount: number }\n\t| {\n\t\t\tkind: \"rateLimited\";\n\t\t\t/**\n\t\t\t * Which limit this was, independent of retry activity. Quota/billing\n\t\t\t * exhaustion and transient throttling are different facts and must stay\n\t\t\t * separable in code and diagnostics; `exhausted` records only whether a\n\t\t\t * retry was actually scheduled, which cannot tell them apart when retry\n\t\t\t * is disabled.\n\t\t\t */\n\t\t\tcategory: PlannerLimitClass;\n\t\t\texhausted: boolean;\n\t\t\tmessage: string;\n\t\t\tdiagnosticPath?: string;\n\t }\n\t| { kind: \"unusable\"; category: DiagnosticFailureCategory; excerpt: string; diagnosticPath?: string }\n\t| { kind: \"overflowed\"; diagnosticPath?: string }\n\t| { kind: \"providerError\"; message: string; diagnosticPath?: string };\n\n/** A planner outcome that cannot produce a boundary and must advance the ladder. */\nexport type TerminalPlannerOutcome = Extract<\n\tPlannerOutcome,\n\t{ kind: \"rateLimited\" | \"unusable\" | \"overflowed\" | \"providerError\" }\n>;\n\n/** Whether this outcome produced validated deletion ranges. */\nexport function isPlannerSuccess(outcome: PlannerOutcome): outcome is Extract<PlannerOutcome, { kind: \"ranked\" | \"recovered\" }> {\n\treturn outcome.kind === \"ranked\" || outcome.kind === \"recovered\";\n}\n\nfunction buildProviderErrorPattern(patterns: readonly string[]): RegExp {\n\treturn new RegExp(patterns.join(\"|\"), \"i\");\n}\n\n/**\n * Quota/billing exhaustion. Mirrors pi-ai's\n * `NON_RETRYABLE_PROVIDER_LIMIT_ERROR_PATTERN` (`utils/retry.js`), which takes\n * precedence over the transient patterns and never spends backoff.\n */\nconst QUOTA_EXHAUSTED_PATTERN = buildProviderErrorPattern([\n\t\"GoUsageLimitError\",\n\t\"FreeUsageLimitError\",\n\t\"Monthly usage limit reached\",\n\t\"available balance\",\n\t\"insufficient_quota\",\n\t\"out of budget\",\n\t\"quota exceeded\",\n\t\"billing\",\n]);\n\n/**\n * Generic usage-limit wording, e.g. Codex's \"The usage limit has been reached\".\n *\n * This is a deliberate **local addition**, not a mirror: pi-ai lists it in\n * neither its non-retryable nor its retryable pattern, so `retryAssistantCall`\n * never schedules a backoff for it. Classifying it as transient throttling would\n * report `exhausted: true` for a retry budget that was never spent, so Atomic\n * treats it as quota exhaustion (`exhausted: false`). pi-ai's own\n * `Monthly usage limit reached` entry above already covers the specific form.\n */\nconst LOCAL_USAGE_LIMIT_PATTERN = /usage.?limit/i;\n\n/**\n * Transient throttling and provider-load failures. This is the rate-limit\n * subset of pi-ai's `RETRYABLE_PROVIDER_ERROR_PATTERN`, minus the individual\n * status codes, which `HTTP_5XX_PATTERN` generalizes below.\n */\nconst RATE_LIMITED_PATTERN = buildProviderErrorPattern([\n\t\"overloaded\",\n\t\"rate.?limit\",\n\t\"too many requests\",\n\t\"429\",\n\t\"service.?unavailable\",\n\t\"server.?error\",\n\t\"internal.?error\",\n\t\"ResourceExhausted\",\n]);\n\n/**\n * The whole HTTP 5xx class, bounded so it cannot match inside a longer number.\n *\n * A deliberate local broadening: the RFC and the acceptance contract enumerate\n * `5xx`, while pi-ai lists only 500/502/503/504/524, so a `501` would otherwise\n * fall through to `providerError`. The consequence is that pi-ai may schedule no\n * backoff for a status Atomic types as rate limiting — which is exactly why\n * `exhausted` reports *observed* retry activity rather than assuming it.\n */\nconst HTTP_5XX_PATTERN = /(?<![\\d.])5\\d\\d(?![\\d.])/;\n\n/** How a failed planner response is classified before an outcome is built. */\nexport type PlannerFailureClass = \"overflow\" | \"quota\" | \"rate_limited\" | \"provider_error\";\n\n/**\n * Classify one failed planner response.\n *\n * Context overflow wins first because pi-ai's `isContextOverflow` already\n * excludes rate/throttle text, and overflow is recoverable by trimming.\n * Quota/billing exhaustion then wins over transient throttling, matching pi-ai's\n * own precedence.\n */\nexport function classifyPlannerFailure(response: AssistantMessage, contextWindow: number): PlannerFailureClass {\n\tif (isContextOverflow(response, contextWindow)) return \"overflow\";\n\tconst message = response.errorMessage ?? \"\";\n\tif (QUOTA_EXHAUSTED_PATTERN.test(message) || LOCAL_USAGE_LIMIT_PATTERN.test(message)) return \"quota\";\n\tif (RATE_LIMITED_PATTERN.test(message) || HTTP_5XX_PATTERN.test(message)) return \"rate_limited\";\n\treturn \"provider_error\";\n}\n\n/** Build a synthetic error response so a thrown transport failure classifies identically. */\nexport function syntheticErrorResponse(\n\tmodel: { api: Api; provider: string; id: string },\n\terrorMessage: string,\n): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"error\",\n\t\terrorMessage,\n\t\ttimestamp: Date.now(),\n\t} as AssistantMessage;\n}\n\n/**\n * Reasoning starvation fingerprint: the response stopped at the output limit,\n * produced no usable deletion record, and billed reasoning tokens.\n *\n * This is a diagnostic category only. Codex has no starvation concept and never\n * retries one; neither does Atomic. A starved outcome advances the ladder\n * exactly like any other `unusable` output.\n */\nexport function isReasoningStarved(response: AssistantMessage, hasUsableRanges: boolean): boolean {\n\treturn response.stopReason === \"length\" && !hasUsableRanges && (response.usage?.reasoning ?? 0) > 0;\n}\n"]}
@@ -10,7 +10,15 @@
10
10
  */
11
11
  import type { Api, AssistantMessage, Model, Usage } from "@earendil-works/pi-ai/compat";
12
12
  /** Failure categories emitted in diagnostic sidecars. */
13
- export type DiagnosticFailureCategory = "malformed_output" | "no_usable_ranges" | "provider_error" | "stream_error";
13
+ export type DiagnosticFailureCategory = "malformed_output" | "no_usable_ranges" | "provider_error" | "stream_error"
14
+ /** Length stop, no usable record, and billed reasoning tokens. */
15
+ | "starved"
16
+ /** Transient throttling, whether or not a retry was actually scheduled. */
17
+ | "rate_limited"
18
+ /** Quota, billing, or usage-limit exhaustion; never spends backoff. */
19
+ | "quota"
20
+ /** The planner request itself exceeded the model's context window. */
21
+ | "context_overflow";
14
22
  /** Recovery categories emitted in recovery diagnostic sidecars. */
15
23
  export type DiagnosticRecoveryCategory = "partial_length_recovery";
16
24
  /** Safe model metadata subset (no credentials, no headers). */
@@ -31,7 +39,14 @@ export interface CompactionDiagnostic {
31
39
  stopReason: string | undefined;
32
40
  providerError: string | undefined;
33
41
  usage: Usage | undefined;
34
- requestMaxTokens: number;
42
+ /** Undefined since the planner sends no output cap. */
43
+ requestMaxTokens: number | undefined;
44
+ /**
45
+ * Whether a retry was actually scheduled before the final failure. It records
46
+ * retry activity, not the failure identity: a `rate_limited` record with retry
47
+ * disabled is `false`, and `quota` is always `false`.
48
+ */
49
+ rateLimitExhausted?: boolean;
35
50
  model: DiagnosticModelMeta;
36
51
  }
37
52
  /** Recovery diagnostic payload written on successful partial recovery. */
@@ -42,7 +57,7 @@ export interface RecoveryDiagnostic {
42
57
  rawResponse: string;
43
58
  stopReason: string | undefined;
44
59
  usage: Usage | undefined;
45
- requestMaxTokens: number;
60
+ requestMaxTokens: number | undefined;
46
61
  model: DiagnosticModelMeta;
47
62
  recoveredRangeCount: number;
48
63
  }
@@ -51,8 +66,8 @@ export interface DiagnosticContext {
51
66
  sessionFilePath: string | undefined;
52
67
  /** The model used for the planner request. */
53
68
  model: Model<Api>;
54
- /** The maxTokens value sent in the planner request. */
55
- requestMaxTokens: number;
69
+ /** The maxTokens value sent in the planner request; undefined when no cap is sent. */
70
+ requestMaxTokens: number | undefined;
56
71
  /** The full assistant response message, if one was received. */
57
72
  response: AssistantMessage | undefined;
58
73
  /** The full raw text extracted from the response. */
@@ -61,6 +76,8 @@ export interface DiagnosticContext {
61
76
  failureCategory: DiagnosticFailureCategory;
62
77
  /** The user-facing failure message. */
63
78
  failureMessage: string;
79
+ /** Retry activity for a limit failure; see CompactionDiagnostic. */
80
+ rateLimitExhausted?: boolean;
64
81
  }
65
82
  declare function buildDiagnosticPayload(ctx: DiagnosticContext): CompactionDiagnostic;
66
83
  /**
@@ -84,7 +101,7 @@ export { buildDiagnosticPayload };
84
101
  export interface RecoveryDiagnosticContext {
85
102
  sessionFilePath: string | undefined;
86
103
  model: Model<Api>;
87
- requestMaxTokens: number;
104
+ requestMaxTokens: number | undefined;
88
105
  response: AssistantMessage;
89
106
  rawResponseText: string;
90
107
  recoveryCategory: DiagnosticRecoveryCategory;
@@ -98,4 +115,39 @@ declare function buildRecoveryPayload(ctx: RecoveryDiagnosticContext): RecoveryD
98
115
  */
99
116
  export declare function writeRecoveryDiagnosticSidecar(ctx: RecoveryDiagnosticContext): string | undefined;
100
117
  export { buildRecoveryPayload };
118
+ /** Success categories emitted in success diagnostic sidecars. */
119
+ export type DiagnosticSuccessCategory = "borrowed_planner";
120
+ /**
121
+ * Success diagnostic payload written when a *borrowed* fallback model ranked
122
+ * the lines. The RFC requires the borrowed identity to appear in diagnostics but
123
+ * defines no payload; this is the chosen shape, and it carries only safe data —
124
+ * no key, headers, auth, prompt, or transcript.
125
+ */
126
+ export interface SuccessDiagnostic {
127
+ version: 1;
128
+ timestamp: string;
129
+ successCategory: DiagnosticSuccessCategory;
130
+ /** Effective reasoning level of the successful planner request, when it had one. */
131
+ thinkingLevel?: string;
132
+ /** Undefined since the planner sends no output cap. */
133
+ requestMaxTokens: number | undefined;
134
+ model: DiagnosticModelMeta;
135
+ }
136
+ export interface SuccessDiagnosticContext {
137
+ sessionFilePath: string | undefined;
138
+ /** The model that actually produced the accepted ranking. */
139
+ model: Model<Api>;
140
+ successCategory: DiagnosticSuccessCategory;
141
+ thinkingLevel?: string;
142
+ }
143
+ declare function buildSuccessPayload(ctx: SuccessDiagnosticContext): SuccessDiagnostic;
144
+ /**
145
+ * Write a success sidecar naming the borrowed model that ranked the lines.
146
+ *
147
+ * Best-effort: an in-memory session or a write failure never changes compaction
148
+ * success. The filename uses a distinct `-compaction-success-<ts>.json` suffix so
149
+ * it cannot collide with the primary model's failure sidecar.
150
+ */
151
+ export declare function writeSuccessDiagnosticSidecar(ctx: SuccessDiagnosticContext): string | undefined;
152
+ export { buildSuccessPayload };
101
153
  //# sourceMappingURL=range-planner-diagnostics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"range-planner-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/range-planner-diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"range-planner-diagnostics.d.ts","sourceRoot":"","sources":["../../../src/core/compaction/range-planner-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,40 @@
10
10
  */
11
11
  import { chmodSync, writeFileSync } from "fs";
12
12
  import { basename, dirname, join } from "path";
13
+ import { uuidv7 } from "@earendil-works/pi-ai";
14
+ /**
15
+ * Write one private sidecar, never replacing an existing record.
16
+ *
17
+ * Names were previously millisecond-only, so two attempts inside the same
18
+ * millisecond — easy to hit across overflow trims or a fast fallback walk —
19
+ * selected the same path and the second write silently replaced the first.
20
+ * A `uuidv7()` discriminator plus exclusive creation (`flag: "wx"`) keeps one
21
+ * durable record per attempt. Retry on collision; every other failure stays
22
+ * best-effort and never changes the planner outcome.
23
+ */
24
+ function writeSidecar(sessionFilePath, kind, payload) {
25
+ const dir = dirname(sessionFilePath);
26
+ const base = basename(sessionFilePath, ".jsonl");
27
+ const timestamp = Date.now();
28
+ const body = JSON.stringify(payload, null, 2);
29
+ for (let attempt = 0; attempt < 4; attempt++) {
30
+ const filePath = join(dir, `${base}-compaction-${kind}-${timestamp}-${uuidv7()}.json`);
31
+ try {
32
+ writeFileSync(filePath, body, { encoding: "utf-8", mode: 0o600, flag: "wx" });
33
+ try {
34
+ chmodSync(filePath, 0o600);
35
+ }
36
+ catch { /* best-effort on non-POSIX */ }
37
+ return filePath;
38
+ }
39
+ catch (error) {
40
+ if (error?.code === "EEXIST")
41
+ continue;
42
+ return undefined;
43
+ }
44
+ }
45
+ return undefined;
46
+ }
13
47
  function buildDiagnosticPayload(ctx) {
14
48
  return {
15
49
  version: 1,
@@ -21,6 +55,7 @@ function buildDiagnosticPayload(ctx) {
21
55
  providerError: ctx.response?.errorMessage,
22
56
  usage: ctx.response?.usage,
23
57
  requestMaxTokens: ctx.requestMaxTokens,
58
+ ...(ctx.rateLimitExhausted === undefined ? {} : { rateLimitExhausted: ctx.rateLimitExhausted }),
24
59
  model: {
25
60
  provider: ctx.model.provider,
26
61
  id: ctx.model.id,
@@ -37,8 +72,9 @@ function buildDiagnosticPayload(ctx) {
37
72
  export function diagnosticSidecarPath(sessionFilePath) {
38
73
  const dir = dirname(sessionFilePath);
39
74
  const base = basename(sessionFilePath, ".jsonl");
40
- const ts = Date.now();
41
- return join(dir, `${base}-compaction-diagnostic-${ts}.json`);
75
+ // Includes a per-attempt discriminator so two attempts inside one millisecond
76
+ // cannot select the same path; see `writeSidecar`.
77
+ return join(dir, `${base}-compaction-diagnostic-${Date.now()}-${uuidv7()}.json`);
42
78
  }
43
79
  /**
44
80
  * Attempt to write a diagnostic sidecar file. Returns the written path on
@@ -50,19 +86,7 @@ export function diagnosticSidecarPath(sessionFilePath) {
50
86
  export function writeDiagnosticSidecar(ctx) {
51
87
  if (!ctx.sessionFilePath)
52
88
  return undefined;
53
- const payload = buildDiagnosticPayload(ctx);
54
- const filePath = diagnosticSidecarPath(ctx.sessionFilePath);
55
- try {
56
- writeFileSync(filePath, JSON.stringify(payload, null, 2), { encoding: "utf-8", mode: 0o600 });
57
- try {
58
- chmodSync(filePath, 0o600);
59
- }
60
- catch { /* best-effort on non-POSIX */ }
61
- return filePath;
62
- }
63
- catch {
64
- return undefined;
65
- }
89
+ return writeSidecar(ctx.sessionFilePath, "diagnostic", buildDiagnosticPayload(ctx));
66
90
  }
67
91
  /**
68
92
  * Build the diagnostic payload without writing. Exported for testing.
@@ -95,22 +119,36 @@ function buildRecoveryPayload(ctx) {
95
119
  export function writeRecoveryDiagnosticSidecar(ctx) {
96
120
  if (!ctx.sessionFilePath)
97
121
  return undefined;
98
- const payload = buildRecoveryPayload(ctx);
99
- const dir = dirname(ctx.sessionFilePath);
100
- const base = basename(ctx.sessionFilePath, ".jsonl");
101
- const ts = Date.now();
102
- const filePath = join(dir, `${base}-compaction-recovery-${ts}.json`);
103
- try {
104
- writeFileSync(filePath, JSON.stringify(payload, null, 2), { encoding: "utf-8", mode: 0o600 });
105
- try {
106
- chmodSync(filePath, 0o600);
107
- }
108
- catch { /* best-effort on non-POSIX */ }
109
- return filePath;
110
- }
111
- catch {
112
- return undefined;
113
- }
122
+ return writeSidecar(ctx.sessionFilePath, "recovery", buildRecoveryPayload(ctx));
114
123
  }
115
124
  export { buildRecoveryPayload };
125
+ function buildSuccessPayload(ctx) {
126
+ return {
127
+ version: 1,
128
+ timestamp: new Date().toISOString(),
129
+ successCategory: ctx.successCategory,
130
+ ...(ctx.thinkingLevel === undefined ? {} : { thinkingLevel: ctx.thinkingLevel }),
131
+ requestMaxTokens: undefined,
132
+ model: {
133
+ provider: ctx.model.provider,
134
+ id: ctx.model.id,
135
+ api: ctx.model.api,
136
+ contextWindow: ctx.model.contextWindow,
137
+ maxTokens: ctx.model.maxTokens,
138
+ },
139
+ };
140
+ }
141
+ /**
142
+ * Write a success sidecar naming the borrowed model that ranked the lines.
143
+ *
144
+ * Best-effort: an in-memory session or a write failure never changes compaction
145
+ * success. The filename uses a distinct `-compaction-success-<ts>.json` suffix so
146
+ * it cannot collide with the primary model's failure sidecar.
147
+ */
148
+ export function writeSuccessDiagnosticSidecar(ctx) {
149
+ if (!ctx.sessionFilePath)
150
+ return undefined;
151
+ return writeSidecar(ctx.sessionFilePath, "success", buildSuccessPayload(ctx));
152
+ }
153
+ export { buildSuccessPayload };
116
154
  //# sourceMappingURL=range-planner-diagnostics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"range-planner-diagnostics.js","sourceRoot":"","sources":["../../../src/core/compaction/range-planner-diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Diagnostic sidecar writer for compaction planner output.\n *\n * When the one-pass range planner returns malformed output or no usable ranges,\n * this module writes a private diagnostic file next to the persisted session\n * file. The sidecar is never written for in-memory sessions.\n *\n * Additionally, successful partial recovery from length-truncated responses\n * writes a private recovery diagnostic sidecar for operational observability.\n */\n\nimport { chmodSync, writeFileSync } from \"fs\";\nimport { basename, dirname, join } from \"path\";\nimport type { Api, AssistantMessage, Model, Usage } from \"@earendil-works/pi-ai/compat\";\n\n/** Failure categories emitted in diagnostic sidecars. */\nexport type DiagnosticFailureCategory =\n\t| \"malformed_output\"\n\t| \"no_usable_ranges\"\n\t| \"provider_error\"\n\t| \"stream_error\";\n\n/** Recovery categories emitted in recovery diagnostic sidecars. */\nexport type DiagnosticRecoveryCategory = \"partial_length_recovery\";\n\n/** Safe model metadata subset (no credentials, no headers). */\nexport interface DiagnosticModelMeta {\n\tprovider: string;\n\tid: string;\n\tapi: string;\n\tcontextWindow: number;\n\tmaxTokens: number;\n}\n\n/** Full diagnostic payload written as the sidecar JSON file. */\nexport interface CompactionDiagnostic {\n\tversion: 1;\n\ttimestamp: string;\n\tfailureCategory: DiagnosticFailureCategory;\n\tfailureMessage: string;\n\trawResponse: string;\n\tstopReason: string | undefined;\n\tproviderError: string | undefined;\n\tusage: Usage | undefined;\n\trequestMaxTokens: number;\n\tmodel: DiagnosticModelMeta;\n}\n\n/** Recovery diagnostic payload written on successful partial recovery. */\nexport interface RecoveryDiagnostic {\n\tversion: 1;\n\ttimestamp: string;\n\trecoveryCategory: DiagnosticRecoveryCategory;\n\trawResponse: string;\n\tstopReason: string | undefined;\n\tusage: Usage | undefined;\n\trequestMaxTokens: number;\n\tmodel: DiagnosticModelMeta;\n\trecoveredRangeCount: number;\n}\n\nexport interface DiagnosticContext {\n\t/** Absolute path to the persisted session file, or undefined for in-memory sessions. */\n\tsessionFilePath: string | undefined;\n\t/** The model used for the planner request. */\n\tmodel: Model<Api>;\n\t/** The maxTokens value sent in the planner request. */\n\trequestMaxTokens: number;\n\t/** The full assistant response message, if one was received. */\n\tresponse: AssistantMessage | undefined;\n\t/** The full raw text extracted from the response. */\n\trawResponseText: string;\n\t/** The failure category. */\n\tfailureCategory: DiagnosticFailureCategory;\n\t/** The user-facing failure message. */\n\tfailureMessage: string;\n}\n\nfunction buildDiagnosticPayload(ctx: DiagnosticContext): CompactionDiagnostic {\n\treturn {\n\t\tversion: 1,\n\t\ttimestamp: new Date().toISOString(),\n\t\tfailureCategory: ctx.failureCategory,\n\t\tfailureMessage: ctx.failureMessage,\n\t\trawResponse: ctx.rawResponseText,\n\t\tstopReason: ctx.response?.stopReason,\n\t\tproviderError: ctx.response?.errorMessage,\n\t\tusage: ctx.response?.usage,\n\t\trequestMaxTokens: ctx.requestMaxTokens,\n\t\tmodel: {\n\t\t\tprovider: ctx.model.provider,\n\t\t\tid: ctx.model.id,\n\t\t\tapi: ctx.model.api,\n\t\t\tcontextWindow: ctx.model.contextWindow,\n\t\t\tmaxTokens: ctx.model.maxTokens,\n\t\t},\n\t};\n}\n\n/**\n * Derive the sidecar file path from a session file path and current timestamp.\n * The sidecar sits alongside the session file with a `-compaction-diagnostic-<ts>.json` suffix.\n */\nexport function diagnosticSidecarPath(sessionFilePath: string): string {\n\tconst dir = dirname(sessionFilePath);\n\tconst base = basename(sessionFilePath, \".jsonl\");\n\tconst ts = Date.now();\n\treturn join(dir, `${base}-compaction-diagnostic-${ts}.json`);\n}\n\n/**\n * Attempt to write a diagnostic sidecar file. Returns the written path on\n * success, or undefined if the session is in-memory or writing fails.\n *\n * The file is written with mode 0o600 (owner-only read/write) on platforms\n * that support POSIX permissions.\n */\nexport function writeDiagnosticSidecar(ctx: DiagnosticContext): string | undefined {\n\tif (!ctx.sessionFilePath) return undefined;\n\n\tconst payload = buildDiagnosticPayload(ctx);\n\tconst filePath = diagnosticSidecarPath(ctx.sessionFilePath);\n\n\ttry {\n\t\twriteFileSync(filePath, JSON.stringify(payload, null, 2), { encoding: \"utf-8\", mode: 0o600 });\n\t\ttry { chmodSync(filePath, 0o600); } catch { /* best-effort on non-POSIX */ }\n\t\treturn filePath;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Build the diagnostic payload without writing. Exported for testing.\n */\nexport { buildDiagnosticPayload };\n\n/** Context for writing a recovery diagnostic sidecar. */\nexport interface RecoveryDiagnosticContext {\n\tsessionFilePath: string | undefined;\n\tmodel: Model<Api>;\n\trequestMaxTokens: number;\n\tresponse: AssistantMessage;\n\trawResponseText: string;\n\trecoveryCategory: DiagnosticRecoveryCategory;\n\trecoveredRangeCount: number;\n}\n\nfunction buildRecoveryPayload(ctx: RecoveryDiagnosticContext): RecoveryDiagnostic {\n\treturn {\n\t\tversion: 1,\n\t\ttimestamp: new Date().toISOString(),\n\t\trecoveryCategory: ctx.recoveryCategory,\n\t\trawResponse: ctx.rawResponseText,\n\t\tstopReason: ctx.response.stopReason,\n\t\tusage: ctx.response.usage,\n\t\trequestMaxTokens: ctx.requestMaxTokens,\n\t\tmodel: {\n\t\t\tprovider: ctx.model.provider,\n\t\t\tid: ctx.model.id,\n\t\t\tapi: ctx.model.api,\n\t\t\tcontextWindow: ctx.model.contextWindow,\n\t\t\tmaxTokens: ctx.model.maxTokens,\n\t\t},\n\t\trecoveredRangeCount: ctx.recoveredRangeCount,\n\t};\n}\n\n/**\n * Write a recovery diagnostic sidecar on successful partial recovery.\n * Returns the written path on success, or undefined if write fails or session is in-memory.\n * Write failures are silently swallowed — recovery success is never affected.\n */\nexport function writeRecoveryDiagnosticSidecar(ctx: RecoveryDiagnosticContext): string | undefined {\n\tif (!ctx.sessionFilePath) return undefined;\n\n\tconst payload = buildRecoveryPayload(ctx);\n\tconst dir = dirname(ctx.sessionFilePath);\n\tconst base = basename(ctx.sessionFilePath, \".jsonl\");\n\tconst ts = Date.now();\n\tconst filePath = join(dir, `${base}-compaction-recovery-${ts}.json`);\n\n\ttry {\n\t\twriteFileSync(filePath, JSON.stringify(payload, null, 2), { encoding: \"utf-8\", mode: 0o600 });\n\t\ttry { chmodSync(filePath, 0o600); } catch { /* best-effort on non-POSIX */ }\n\t\treturn filePath;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport { buildRecoveryPayload };\n"]}
1
+ {"version":3,"file":"range-planner-diagnostics.js","sourceRoot":"","sources":["../../../src/core/compaction/range-planner-diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Diagnostic sidecar writer for compaction planner output.\n *\n * When the one-pass range planner returns malformed output or no usable ranges,\n * this module writes a private diagnostic file next to the persisted session\n * file. The sidecar is never written for in-memory sessions.\n *\n * Additionally, successful partial recovery from length-truncated responses\n * writes a private recovery diagnostic sidecar for operational observability.\n */\n\nimport { chmodSync, writeFileSync } from \"fs\";\nimport { basename, dirname, join } from \"path\";\nimport { uuidv7 } from \"@earendil-works/pi-ai\";\nimport type { Api, AssistantMessage, Model, Usage } from \"@earendil-works/pi-ai/compat\";\n\n/**\n * Write one private sidecar, never replacing an existing record.\n *\n * Names were previously millisecond-only, so two attempts inside the same\n * millisecond — easy to hit across overflow trims or a fast fallback walk —\n * selected the same path and the second write silently replaced the first.\n * A `uuidv7()` discriminator plus exclusive creation (`flag: \"wx\"`) keeps one\n * durable record per attempt. Retry on collision; every other failure stays\n * best-effort and never changes the planner outcome.\n */\nfunction writeSidecar(sessionFilePath: string, kind: string, payload: unknown): string | undefined {\n\tconst dir = dirname(sessionFilePath);\n\tconst base = basename(sessionFilePath, \".jsonl\");\n\tconst timestamp = Date.now();\n\tconst body = JSON.stringify(payload, null, 2);\n\tfor (let attempt = 0; attempt < 4; attempt++) {\n\t\tconst filePath = join(dir, `${base}-compaction-${kind}-${timestamp}-${uuidv7()}.json`);\n\t\ttry {\n\t\t\twriteFileSync(filePath, body, { encoding: \"utf-8\", mode: 0o600, flag: \"wx\" });\n\t\t\ttry { chmodSync(filePath, 0o600); } catch { /* best-effort on non-POSIX */ }\n\t\t\treturn filePath;\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException)?.code === \"EEXIST\") continue;\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/** Failure categories emitted in diagnostic sidecars. */\nexport type DiagnosticFailureCategory =\n\t| \"malformed_output\"\n\t| \"no_usable_ranges\"\n\t| \"provider_error\"\n\t| \"stream_error\"\n\t/** Length stop, no usable record, and billed reasoning tokens. */\n\t| \"starved\"\n\t/** Transient throttling, whether or not a retry was actually scheduled. */\n\t| \"rate_limited\"\n\t/** Quota, billing, or usage-limit exhaustion; never spends backoff. */\n\t| \"quota\"\n\t/** The planner request itself exceeded the model's context window. */\n\t| \"context_overflow\";\n\n/** Recovery categories emitted in recovery diagnostic sidecars. */\nexport type DiagnosticRecoveryCategory = \"partial_length_recovery\";\n\n/** Safe model metadata subset (no credentials, no headers). */\nexport interface DiagnosticModelMeta {\n\tprovider: string;\n\tid: string;\n\tapi: string;\n\tcontextWindow: number;\n\tmaxTokens: number;\n}\n\n/** Full diagnostic payload written as the sidecar JSON file. */\nexport interface CompactionDiagnostic {\n\tversion: 1;\n\ttimestamp: string;\n\tfailureCategory: DiagnosticFailureCategory;\n\tfailureMessage: string;\n\trawResponse: string;\n\tstopReason: string | undefined;\n\tproviderError: string | undefined;\n\tusage: Usage | undefined;\n\t/** Undefined since the planner sends no output cap. */\n\trequestMaxTokens: number | undefined;\n\t/**\n\t * Whether a retry was actually scheduled before the final failure. It records\n\t * retry activity, not the failure identity: a `rate_limited` record with retry\n\t * disabled is `false`, and `quota` is always `false`.\n\t */\n\trateLimitExhausted?: boolean;\n\tmodel: DiagnosticModelMeta;\n}\n\n/** Recovery diagnostic payload written on successful partial recovery. */\nexport interface RecoveryDiagnostic {\n\tversion: 1;\n\ttimestamp: string;\n\trecoveryCategory: DiagnosticRecoveryCategory;\n\trawResponse: string;\n\tstopReason: string | undefined;\n\tusage: Usage | undefined;\n\trequestMaxTokens: number | undefined;\n\tmodel: DiagnosticModelMeta;\n\trecoveredRangeCount: number;\n}\n\nexport interface DiagnosticContext {\n\t/** Absolute path to the persisted session file, or undefined for in-memory sessions. */\n\tsessionFilePath: string | undefined;\n\t/** The model used for the planner request. */\n\tmodel: Model<Api>;\n\t/** The maxTokens value sent in the planner request; undefined when no cap is sent. */\n\trequestMaxTokens: number | undefined;\n\t/** The full assistant response message, if one was received. */\n\tresponse: AssistantMessage | undefined;\n\t/** The full raw text extracted from the response. */\n\trawResponseText: string;\n\t/** The failure category. */\n\tfailureCategory: DiagnosticFailureCategory;\n\t/** The user-facing failure message. */\n\tfailureMessage: string;\n\t/** Retry activity for a limit failure; see CompactionDiagnostic. */\n\trateLimitExhausted?: boolean;\n}\n\nfunction buildDiagnosticPayload(ctx: DiagnosticContext): CompactionDiagnostic {\n\treturn {\n\t\tversion: 1,\n\t\ttimestamp: new Date().toISOString(),\n\t\tfailureCategory: ctx.failureCategory,\n\t\tfailureMessage: ctx.failureMessage,\n\t\trawResponse: ctx.rawResponseText,\n\t\tstopReason: ctx.response?.stopReason,\n\t\tproviderError: ctx.response?.errorMessage,\n\t\tusage: ctx.response?.usage,\n\t\trequestMaxTokens: ctx.requestMaxTokens,\n\t\t...(ctx.rateLimitExhausted === undefined ? {} : { rateLimitExhausted: ctx.rateLimitExhausted }),\n\t\tmodel: {\n\t\t\tprovider: ctx.model.provider,\n\t\t\tid: ctx.model.id,\n\t\t\tapi: ctx.model.api,\n\t\t\tcontextWindow: ctx.model.contextWindow,\n\t\t\tmaxTokens: ctx.model.maxTokens,\n\t\t},\n\t};\n}\n\n/**\n * Derive the sidecar file path from a session file path and current timestamp.\n * The sidecar sits alongside the session file with a `-compaction-diagnostic-<ts>.json` suffix.\n */\nexport function diagnosticSidecarPath(sessionFilePath: string): string {\n\tconst dir = dirname(sessionFilePath);\n\tconst base = basename(sessionFilePath, \".jsonl\");\n\t// Includes a per-attempt discriminator so two attempts inside one millisecond\n\t// cannot select the same path; see `writeSidecar`.\n\treturn join(dir, `${base}-compaction-diagnostic-${Date.now()}-${uuidv7()}.json`);\n}\n\n/**\n * Attempt to write a diagnostic sidecar file. Returns the written path on\n * success, or undefined if the session is in-memory or writing fails.\n *\n * The file is written with mode 0o600 (owner-only read/write) on platforms\n * that support POSIX permissions.\n */\nexport function writeDiagnosticSidecar(ctx: DiagnosticContext): string | undefined {\n\tif (!ctx.sessionFilePath) return undefined;\n\n\treturn writeSidecar(ctx.sessionFilePath, \"diagnostic\", buildDiagnosticPayload(ctx));\n}\n\n/**\n * Build the diagnostic payload without writing. Exported for testing.\n */\nexport { buildDiagnosticPayload };\n\n/** Context for writing a recovery diagnostic sidecar. */\nexport interface RecoveryDiagnosticContext {\n\tsessionFilePath: string | undefined;\n\tmodel: Model<Api>;\n\trequestMaxTokens: number | undefined;\n\tresponse: AssistantMessage;\n\trawResponseText: string;\n\trecoveryCategory: DiagnosticRecoveryCategory;\n\trecoveredRangeCount: number;\n}\n\nfunction buildRecoveryPayload(ctx: RecoveryDiagnosticContext): RecoveryDiagnostic {\n\treturn {\n\t\tversion: 1,\n\t\ttimestamp: new Date().toISOString(),\n\t\trecoveryCategory: ctx.recoveryCategory,\n\t\trawResponse: ctx.rawResponseText,\n\t\tstopReason: ctx.response.stopReason,\n\t\tusage: ctx.response.usage,\n\t\trequestMaxTokens: ctx.requestMaxTokens,\n\t\tmodel: {\n\t\t\tprovider: ctx.model.provider,\n\t\t\tid: ctx.model.id,\n\t\t\tapi: ctx.model.api,\n\t\t\tcontextWindow: ctx.model.contextWindow,\n\t\t\tmaxTokens: ctx.model.maxTokens,\n\t\t},\n\t\trecoveredRangeCount: ctx.recoveredRangeCount,\n\t};\n}\n\n/**\n * Write a recovery diagnostic sidecar on successful partial recovery.\n * Returns the written path on success, or undefined if write fails or session is in-memory.\n * Write failures are silently swallowed — recovery success is never affected.\n */\nexport function writeRecoveryDiagnosticSidecar(ctx: RecoveryDiagnosticContext): string | undefined {\n\tif (!ctx.sessionFilePath) return undefined;\n\n\treturn writeSidecar(ctx.sessionFilePath, \"recovery\", buildRecoveryPayload(ctx));\n}\n\nexport { buildRecoveryPayload };\n\n/** Success categories emitted in success diagnostic sidecars. */\nexport type DiagnosticSuccessCategory = \"borrowed_planner\";\n\n/**\n * Success diagnostic payload written when a *borrowed* fallback model ranked\n * the lines. The RFC requires the borrowed identity to appear in diagnostics but\n * defines no payload; this is the chosen shape, and it carries only safe data —\n * no key, headers, auth, prompt, or transcript.\n */\nexport interface SuccessDiagnostic {\n\tversion: 1;\n\ttimestamp: string;\n\tsuccessCategory: DiagnosticSuccessCategory;\n\t/** Effective reasoning level of the successful planner request, when it had one. */\n\tthinkingLevel?: string;\n\t/** Undefined since the planner sends no output cap. */\n\trequestMaxTokens: number | undefined;\n\tmodel: DiagnosticModelMeta;\n}\n\nexport interface SuccessDiagnosticContext {\n\tsessionFilePath: string | undefined;\n\t/** The model that actually produced the accepted ranking. */\n\tmodel: Model<Api>;\n\tsuccessCategory: DiagnosticSuccessCategory;\n\tthinkingLevel?: string;\n}\n\nfunction buildSuccessPayload(ctx: SuccessDiagnosticContext): SuccessDiagnostic {\n\treturn {\n\t\tversion: 1,\n\t\ttimestamp: new Date().toISOString(),\n\t\tsuccessCategory: ctx.successCategory,\n\t\t...(ctx.thinkingLevel === undefined ? {} : { thinkingLevel: ctx.thinkingLevel }),\n\t\trequestMaxTokens: undefined,\n\t\tmodel: {\n\t\t\tprovider: ctx.model.provider,\n\t\t\tid: ctx.model.id,\n\t\t\tapi: ctx.model.api,\n\t\t\tcontextWindow: ctx.model.contextWindow,\n\t\t\tmaxTokens: ctx.model.maxTokens,\n\t\t},\n\t};\n}\n\n/**\n * Write a success sidecar naming the borrowed model that ranked the lines.\n *\n * Best-effort: an in-memory session or a write failure never changes compaction\n * success. The filename uses a distinct `-compaction-success-<ts>.json` suffix so\n * it cannot collide with the primary model's failure sidecar.\n */\nexport function writeSuccessDiagnosticSidecar(ctx: SuccessDiagnosticContext): string | undefined {\n\tif (!ctx.sessionFilePath) return undefined;\n\n\treturn writeSidecar(ctx.sessionFilePath, \"success\", buildSuccessPayload(ctx));\n}\n\nexport { buildSuccessPayload };\n"]}