@andorra-labs/code 0.0.0-stage → 0.1.5

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 (1847) hide show
  1. package/LICENSE.md +38 -0
  2. package/README.md +231 -3
  3. package/THIRD_PARTY_NOTICES.md +56 -0
  4. package/dist/src/account-presentation.d.ts +53 -0
  5. package/dist/src/account-presentation.js +99 -0
  6. package/dist/src/activity.d.ts +41 -0
  7. package/dist/src/activity.js +79 -0
  8. package/dist/src/agent-definitions.d.ts +61 -0
  9. package/dist/src/agent-definitions.js +303 -0
  10. package/dist/src/agent-execution.d.ts +4 -0
  11. package/dist/src/agent-execution.js +1198 -0
  12. package/dist/src/agent-mcp.d.ts +105 -0
  13. package/dist/src/agent-mcp.js +859 -0
  14. package/dist/src/agent-modifiers.d.ts +8 -0
  15. package/dist/src/agent-modifiers.js +333 -0
  16. package/dist/src/analytics.d.ts +81 -0
  17. package/dist/src/analytics.js +81 -0
  18. package/dist/src/anthropic-console-auth.d.ts +68 -0
  19. package/dist/src/anthropic-console-auth.js +318 -0
  20. package/dist/src/anthropic-credentials.d.ts +41 -0
  21. package/dist/src/anthropic-credentials.js +107 -0
  22. package/dist/src/app-server/protocol.d.ts +500 -0
  23. package/dist/src/app-server/protocol.js +106 -0
  24. package/dist/src/app-server/reasoning.d.ts +43 -0
  25. package/dist/src/app-server/reasoning.js +173 -0
  26. package/dist/src/app-server/terminal.d.ts +77 -0
  27. package/dist/src/app-server/terminal.js +177 -0
  28. package/dist/src/app-server/workspace.d.ts +247 -0
  29. package/dist/src/app-server/workspace.js +1098 -0
  30. package/dist/src/app-server.d.ts +1039 -0
  31. package/dist/src/app-server.js +6594 -0
  32. package/dist/src/artifacts.d.ts +27 -0
  33. package/dist/src/artifacts.js +103 -0
  34. package/dist/src/attachments.d.ts +158 -0
  35. package/dist/src/attachments.js +466 -0
  36. package/dist/src/auth/AuthManager.d.ts +110 -0
  37. package/dist/src/auth/AuthManager.js +435 -0
  38. package/dist/src/auth/callback.d.ts +10 -0
  39. package/dist/src/auth/callback.js +96 -0
  40. package/dist/src/auth/deployment.d.ts +18 -0
  41. package/dist/src/auth/deployment.js +18 -0
  42. package/dist/src/auth/index.d.ts +31 -0
  43. package/dist/src/auth/index.js +27 -0
  44. package/dist/src/auth/lock.d.ts +2 -0
  45. package/dist/src/auth/lock.js +29 -0
  46. package/dist/src/auth/store.d.ts +20 -0
  47. package/dist/src/auth/store.js +93 -0
  48. package/dist/src/auth/types.d.ts +24 -0
  49. package/dist/src/auth/types.js +8 -0
  50. package/dist/src/auth-commands.d.ts +5 -0
  51. package/dist/src/auth-commands.js +28 -0
  52. package/dist/src/automation-runner.d.ts +7 -0
  53. package/dist/src/automation-runner.js +113 -0
  54. package/dist/src/automation-service.d.ts +28 -0
  55. package/dist/src/automation-service.js +299 -0
  56. package/dist/src/automation-tool.d.ts +2 -0
  57. package/dist/src/automation-tool.js +49 -0
  58. package/dist/src/automation-worker-shutdown.d.ts +3 -0
  59. package/dist/src/automation-worker-shutdown.js +13 -0
  60. package/dist/src/automations.d.ts +63 -0
  61. package/dist/src/automations.js +265 -0
  62. package/dist/src/boot-trace.d.ts +15 -0
  63. package/dist/src/boot-trace.js +25 -0
  64. package/dist/src/browser-activity.d.ts +4 -0
  65. package/dist/src/browser-activity.js +18 -0
  66. package/dist/src/browser-bridge.d.ts +56 -0
  67. package/dist/src/browser-bridge.js +372 -0
  68. package/dist/src/browser-observation.d.ts +24 -0
  69. package/dist/src/browser-observation.js +104 -0
  70. package/dist/src/browser-panel-tool.d.ts +39 -0
  71. package/dist/src/browser-panel-tool.js +227 -0
  72. package/dist/src/browser-runner.d.ts +16 -0
  73. package/dist/src/browser-runner.js +302 -0
  74. package/dist/src/browser-server.d.ts +31 -0
  75. package/dist/src/browser-server.js +1189 -0
  76. package/dist/src/browser-session.d.ts +19 -0
  77. package/dist/src/browser-session.js +649 -0
  78. package/dist/src/browser-ui/andorra-logo.png +0 -0
  79. package/dist/src/browser-ui/app.js +419 -0
  80. package/dist/src/browser-ui/index.html +13 -0
  81. package/dist/src/browser-ui/style.css +243 -0
  82. package/dist/src/browser-view.d.ts +348 -0
  83. package/dist/src/browser-view.js +1487 -0
  84. package/dist/src/capabilities.d.ts +9 -0
  85. package/dist/src/capabilities.js +135 -0
  86. package/dist/src/clarification-ui.d.ts +23 -0
  87. package/dist/src/clarification-ui.js +59 -0
  88. package/dist/src/claude-executable.d.ts +6 -0
  89. package/dist/src/claude-executable.js +56 -0
  90. package/dist/src/claude-provider.d.ts +35 -0
  91. package/dist/src/claude-provider.js +391 -0
  92. package/dist/src/cli.d.ts +85 -0
  93. package/dist/src/cli.js +2564 -0
  94. package/dist/src/code-intelligence/CodeIntelligenceManager.d.ts +108 -0
  95. package/dist/src/code-intelligence/CodeIntelligenceManager.js +616 -0
  96. package/dist/src/code-intelligence/ContextLedger.d.ts +32 -0
  97. package/dist/src/code-intelligence/ContextLedger.js +77 -0
  98. package/dist/src/code-intelligence/ContextRouter.d.ts +8 -0
  99. package/dist/src/code-intelligence/ContextRouter.js +18 -0
  100. package/dist/src/code-intelligence/codegraph/CodeGraphProjectSession.d.ts +82 -0
  101. package/dist/src/code-intelligence/codegraph/CodeGraphProjectSession.js +444 -0
  102. package/dist/src/code-intelligence/codegraph/CodeGraphProvider.d.ts +40 -0
  103. package/dist/src/code-intelligence/codegraph/CodeGraphProvider.js +84 -0
  104. package/dist/src/code-intelligence/codegraph/CodeGraphSyncBarrier.d.ts +22 -0
  105. package/dist/src/code-intelligence/codegraph/CodeGraphSyncBarrier.js +71 -0
  106. package/dist/src/code-intelligence/codegraph/repoExploreTool.d.ts +9 -0
  107. package/dist/src/code-intelligence/codegraph/repoExploreTool.js +26 -0
  108. package/dist/src/code-intelligence/repository.d.ts +13 -0
  109. package/dist/src/code-intelligence/repository.js +48 -0
  110. package/dist/src/code-intelligence/types.d.ts +78 -0
  111. package/dist/src/code-intelligence/types.js +3 -0
  112. package/dist/src/codex-auth.d.ts +83 -0
  113. package/dist/src/codex-auth.js +168 -0
  114. package/dist/src/codex-browser-auth.d.ts +74 -0
  115. package/dist/src/codex-browser-auth.js +429 -0
  116. package/dist/src/codex-errors.d.ts +3 -0
  117. package/dist/src/codex-errors.js +50 -0
  118. package/dist/src/codex-executable.d.ts +12 -0
  119. package/dist/src/codex-executable.js +154 -0
  120. package/dist/src/codex-provider.d.ts +25 -0
  121. package/dist/src/codex-provider.js +211 -0
  122. package/dist/src/codex-rpc.d.ts +43 -0
  123. package/dist/src/codex-rpc.js +136 -0
  124. package/dist/src/coding-tools.d.ts +19 -0
  125. package/dist/src/coding-tools.js +875 -0
  126. package/dist/src/command-metrics.d.ts +17 -0
  127. package/dist/src/command-metrics.js +34 -0
  128. package/dist/src/command-screens.d.ts +44 -0
  129. package/dist/src/command-screens.js +601 -0
  130. package/dist/src/commands.d.ts +111 -0
  131. package/dist/src/commands.js +550 -0
  132. package/dist/src/completion.d.ts +45 -0
  133. package/dist/src/completion.js +195 -0
  134. package/dist/src/config.d.ts +163 -0
  135. package/dist/src/config.js +663 -0
  136. package/dist/src/context-budget.d.ts +32 -0
  137. package/dist/src/context-budget.js +151 -0
  138. package/dist/src/context-compaction.d.ts +43 -0
  139. package/dist/src/context-compaction.js +269 -0
  140. package/dist/src/context-selection.d.ts +65 -0
  141. package/dist/src/context-selection.js +130 -0
  142. package/dist/src/dashboard-view.d.ts +37 -0
  143. package/dist/src/dashboard-view.js +254 -0
  144. package/dist/src/dashboard.d.ts +41 -0
  145. package/dist/src/dashboard.js +160 -0
  146. package/dist/src/deadline.d.ts +55 -0
  147. package/dist/src/deadline.js +164 -0
  148. package/dist/src/decision/ContinuationAdapter.d.ts +6 -0
  149. package/dist/src/decision/ContinuationAdapter.js +11 -0
  150. package/dist/src/decision/DecisionEngine.d.ts +23 -0
  151. package/dist/src/decision/DecisionEngine.js +1 -0
  152. package/dist/src/decision/DecisionManager.d.ts +47 -0
  153. package/dist/src/decision/DecisionManager.js +280 -0
  154. package/dist/src/decision/DecisionPolicy.d.ts +8 -0
  155. package/dist/src/decision/DecisionPolicy.js +54 -0
  156. package/dist/src/decision/FactContinuations.d.ts +147 -0
  157. package/dist/src/decision/FactContinuations.js +472 -0
  158. package/dist/src/decision/FactServiceGate.d.ts +12 -0
  159. package/dist/src/decision/FactServiceGate.js +37 -0
  160. package/dist/src/decision/PreparedSteps.d.ts +51 -0
  161. package/dist/src/decision/PreparedSteps.js +147 -0
  162. package/dist/src/decision/applyToolMenu.d.ts +3 -0
  163. package/dist/src/decision/applyToolMenu.js +61 -0
  164. package/dist/src/decision/checks.d.ts +13 -0
  165. package/dist/src/decision/checks.js +104 -0
  166. package/dist/src/decision/facts.d.ts +64 -0
  167. package/dist/src/decision/facts.js +90 -0
  168. package/dist/src/decision/guidancePolicy.d.ts +3 -0
  169. package/dist/src/decision/guidancePolicy.js +10 -0
  170. package/dist/src/decision/hostedPolicy.d.ts +14 -0
  171. package/dist/src/decision/hostedPolicy.js +21 -0
  172. package/dist/src/decision/index.d.ts +6 -0
  173. package/dist/src/decision/index.js +6 -0
  174. package/dist/src/decision/optimizationPolicy.d.ts +26 -0
  175. package/dist/src/decision/optimizationPolicy.js +38 -0
  176. package/dist/src/decision/providers/AndorraDecisionProvider.d.ts +17 -0
  177. package/dist/src/decision/providers/AndorraDecisionProvider.js +251 -0
  178. package/dist/src/decision/providers/HttpDecisionProvider.d.ts +16 -0
  179. package/dist/src/decision/providers/HttpDecisionProvider.js +105 -0
  180. package/dist/src/decision/providers/NoOpDecisionProvider.d.ts +4 -0
  181. package/dist/src/decision/providers/NoOpDecisionProvider.js +3 -0
  182. package/dist/src/decision/providers/index.d.ts +3 -0
  183. package/dist/src/decision/providers/index.js +13 -0
  184. package/dist/src/decision/providers/questions.d.ts +3 -0
  185. package/dist/src/decision/providers/questions.js +31 -0
  186. package/dist/src/decision/routeTools.d.ts +59 -0
  187. package/dist/src/decision/routeTools.js +131 -0
  188. package/dist/src/decision/toolFamilies.d.ts +7 -0
  189. package/dist/src/decision/toolFamilies.js +55 -0
  190. package/dist/src/decision/toolMenu.d.ts +35 -0
  191. package/dist/src/decision/toolMenu.js +73 -0
  192. package/dist/src/decision/types.d.ts +99 -0
  193. package/dist/src/decision/types.js +1 -0
  194. package/dist/src/diff-preview.d.ts +6 -0
  195. package/dist/src/diff-preview.js +120 -0
  196. package/dist/src/duration.d.ts +44 -0
  197. package/dist/src/duration.js +72 -0
  198. package/dist/src/efficiency.d.ts +101 -0
  199. package/dist/src/efficiency.js +104 -0
  200. package/dist/src/engine/protocol.d.ts +11 -0
  201. package/dist/src/engine/protocol.js +51 -0
  202. package/dist/src/extensions.d.ts +46 -0
  203. package/dist/src/extensions.js +846 -0
  204. package/dist/src/favicons.d.ts +37 -0
  205. package/dist/src/favicons.js +216 -0
  206. package/dist/src/file-read-state.d.ts +8 -0
  207. package/dist/src/file-read-state.js +31 -0
  208. package/dist/src/git-summary.d.ts +67 -0
  209. package/dist/src/git-summary.js +461 -0
  210. package/dist/src/goal-completion-verification.d.ts +18 -0
  211. package/dist/src/goal-completion-verification.js +43 -0
  212. package/dist/src/graph-account.d.ts +31 -0
  213. package/dist/src/graph-account.js +57 -0
  214. package/dist/src/graph-editor-session.d.ts +15 -0
  215. package/dist/src/graph-editor-session.js +70 -0
  216. package/dist/src/graph-health.d.ts +88 -0
  217. package/dist/src/graph-health.js +243 -0
  218. package/dist/src/graph-provider-portability.d.ts +30 -0
  219. package/dist/src/graph-provider-portability.js +197 -0
  220. package/dist/src/graph-quota.d.ts +55 -0
  221. package/dist/src/graph-quota.js +131 -0
  222. package/dist/src/graph-runner.d.ts +4 -0
  223. package/dist/src/graph-runner.js +1356 -0
  224. package/dist/src/graph-selection.d.ts +17 -0
  225. package/dist/src/graph-selection.js +31 -0
  226. package/dist/src/graph-server.d.ts +13 -0
  227. package/dist/src/graph-server.js +483 -0
  228. package/dist/src/graph-studio-features.d.ts +61 -0
  229. package/dist/src/graph-studio-features.js +348 -0
  230. package/dist/src/graph-sync.d.ts +76 -0
  231. package/dist/src/graph-sync.js +619 -0
  232. package/dist/src/graph-ui/andorra-logo.png +0 -0
  233. package/dist/src/graph-ui/app.js +1803 -0
  234. package/dist/src/graph-ui/compat.js +43 -0
  235. package/dist/src/graph-ui/controls.css +190 -0
  236. package/dist/src/graph-ui/controls.js +567 -0
  237. package/dist/src/graph-ui/edge-router.js +117 -0
  238. package/dist/src/graph-ui/embed.js +324 -0
  239. package/dist/src/graph-ui/fonts/geist-mono-latin-400-normal.woff2 +0 -0
  240. package/dist/src/graph-ui/fonts/geist-sans-latin-400-normal.woff2 +0 -0
  241. package/dist/src/graph-ui/fonts/geist-sans-latin-500-normal.woff2 +0 -0
  242. package/dist/src/graph-ui/icons.js +117 -0
  243. package/dist/src/graph-ui/index.html +7 -0
  244. package/dist/src/graph-ui/library.css +26 -0
  245. package/dist/src/graph-ui/sidebar.js +61 -0
  246. package/dist/src/graph-ui/studio-canvas.js +454 -0
  247. package/dist/src/graph-ui/studio.css +110 -0
  248. package/dist/src/graph-ui/studio.js +720 -0
  249. package/dist/src/graph-ui/style.css +477 -0
  250. package/dist/src/graph-ui/theme.js +92 -0
  251. package/dist/src/graph-ui/tokens.css +187 -0
  252. package/dist/src/graphs.d.ts +270 -0
  253. package/dist/src/graphs.js +1102 -0
  254. package/dist/src/grep-regex-worker.d.ts +1 -0
  255. package/dist/src/grep-regex-worker.js +20 -0
  256. package/dist/src/grep-regex.d.ts +11 -0
  257. package/dist/src/grep-regex.js +64 -0
  258. package/dist/src/handoffs.d.ts +34 -0
  259. package/dist/src/handoffs.js +229 -0
  260. package/dist/src/hardened-runtime.d.ts +14 -0
  261. package/dist/src/hardened-runtime.js +264 -0
  262. package/dist/src/limits.d.ts +77 -0
  263. package/dist/src/limits.js +88 -0
  264. package/dist/src/markdown.d.ts +31 -0
  265. package/dist/src/markdown.js +553 -0
  266. package/dist/src/mcp.d.ts +11 -0
  267. package/dist/src/mcp.js +175 -0
  268. package/dist/src/membership-errors.d.ts +4 -0
  269. package/dist/src/membership-errors.js +4 -0
  270. package/dist/src/membership.d.ts +81 -0
  271. package/dist/src/membership.js +247 -0
  272. package/dist/src/memory/LocalToolMemory.d.ts +20 -0
  273. package/dist/src/memory/LocalToolMemory.js +114 -0
  274. package/dist/src/memory/MemoryDistiller.d.ts +35 -0
  275. package/dist/src/memory/MemoryDistiller.js +216 -0
  276. package/dist/src/memory/MemoryManager.d.ts +76 -0
  277. package/dist/src/memory/MemoryManager.js +386 -0
  278. package/dist/src/memory/MemoryPolicy.d.ts +30 -0
  279. package/dist/src/memory/MemoryPolicy.js +96 -0
  280. package/dist/src/memory/MemoryProvider.d.ts +18 -0
  281. package/dist/src/memory/MemoryProvider.js +1 -0
  282. package/dist/src/memory/MemoryRetriever.d.ts +27 -0
  283. package/dist/src/memory/MemoryRetriever.js +149 -0
  284. package/dist/src/memory/PermissionMemoryProvider.d.ts +22 -0
  285. package/dist/src/memory/PermissionMemoryProvider.js +50 -0
  286. package/dist/src/memory/ToolFailureLessons.d.ts +39 -0
  287. package/dist/src/memory/ToolFailureLessons.js +167 -0
  288. package/dist/src/memory/index.d.ts +12 -0
  289. package/dist/src/memory/index.js +11 -0
  290. package/dist/src/memory/providers/NoOpMemoryProvider.d.ts +13 -0
  291. package/dist/src/memory/providers/NoOpMemoryProvider.js +15 -0
  292. package/dist/src/memory/providers/graphiti/GraphitiClient.d.ts +27 -0
  293. package/dist/src/memory/providers/graphiti/GraphitiClient.js +76 -0
  294. package/dist/src/memory/providers/graphiti/GraphitiMapper.d.ts +6 -0
  295. package/dist/src/memory/providers/graphiti/GraphitiMapper.js +116 -0
  296. package/dist/src/memory/providers/graphiti/GraphitiMemoryProvider.d.ts +27 -0
  297. package/dist/src/memory/providers/graphiti/GraphitiMemoryProvider.js +137 -0
  298. package/dist/src/memory/providers/graphiti/GraphitiTypes.d.ts +57 -0
  299. package/dist/src/memory/providers/graphiti/GraphitiTypes.js +2 -0
  300. package/dist/src/memory/redaction.d.ts +11 -0
  301. package/dist/src/memory/redaction.js +58 -0
  302. package/dist/src/memory/repository.d.ts +11 -0
  303. package/dist/src/memory/repository.js +74 -0
  304. package/dist/src/memory/tools/memorySearchTool.d.ts +4 -0
  305. package/dist/src/memory/tools/memorySearchTool.js +77 -0
  306. package/dist/src/memory/types.d.ts +112 -0
  307. package/dist/src/memory/types.js +7 -0
  308. package/dist/src/model-metadata.d.ts +28 -0
  309. package/dist/src/model-metadata.js +274 -0
  310. package/dist/src/model-override.d.ts +60 -0
  311. package/dist/src/model-override.js +146 -0
  312. package/dist/src/model-tiers.d.ts +61 -0
  313. package/dist/src/model-tiers.js +109 -0
  314. package/dist/src/opencode-catalog.d.ts +16 -0
  315. package/dist/src/opencode-catalog.js +135 -0
  316. package/dist/src/opencode-provider.d.ts +10 -0
  317. package/dist/src/opencode-provider.js +525 -0
  318. package/dist/src/paged-transcript.d.ts +58 -0
  319. package/dist/src/paged-transcript.js +205 -0
  320. package/dist/src/palette.d.ts +61 -0
  321. package/dist/src/palette.js +63 -0
  322. package/dist/src/permissions.d.ts +36 -0
  323. package/dist/src/permissions.js +93 -0
  324. package/dist/src/powershell-pool.d.ts +26 -0
  325. package/dist/src/powershell-pool.js +235 -0
  326. package/dist/src/profile.d.ts +80 -0
  327. package/dist/src/profile.js +200 -0
  328. package/dist/src/provider-connection.d.ts +36 -0
  329. package/dist/src/provider-connection.js +222 -0
  330. package/dist/src/provider-engine.d.ts +37 -0
  331. package/dist/src/provider-engine.js +401 -0
  332. package/dist/src/provider-import.d.ts +68 -0
  333. package/dist/src/provider-import.js +355 -0
  334. package/dist/src/provider-settings.d.ts +8 -0
  335. package/dist/src/provider-settings.js +451 -0
  336. package/dist/src/providers.d.ts +219 -0
  337. package/dist/src/providers.js +1230 -0
  338. package/dist/src/pull-requests.d.ts +195 -0
  339. package/dist/src/pull-requests.js +514 -0
  340. package/dist/src/qa/api/http-runner.d.ts +3 -0
  341. package/dist/src/qa/api/http-runner.js +47 -0
  342. package/dist/src/qa/browser/PlaywrightRunner.d.ts +21 -0
  343. package/dist/src/qa/browser/PlaywrightRunner.js +190 -0
  344. package/dist/src/qa/command-policy.d.ts +28 -0
  345. package/dist/src/qa/command-policy.js +122 -0
  346. package/dist/src/qa/git/ChangeDetector.d.ts +26 -0
  347. package/dist/src/qa/git/ChangeDetector.js +177 -0
  348. package/dist/src/qa/git/DiffReviewer.d.ts +28 -0
  349. package/dist/src/qa/git/DiffReviewer.js +115 -0
  350. package/dist/src/qa/index.d.ts +11 -0
  351. package/dist/src/qa/index.js +19 -0
  352. package/dist/src/qa/orchestrator/ChangeClassifier.d.ts +14 -0
  353. package/dist/src/qa/orchestrator/ChangeClassifier.js +28 -0
  354. package/dist/src/qa/orchestrator/MergeGate.d.ts +14 -0
  355. package/dist/src/qa/orchestrator/MergeGate.js +40 -0
  356. package/dist/src/qa/orchestrator/QaOrchestrator.d.ts +79 -0
  357. package/dist/src/qa/orchestrator/QaOrchestrator.js +373 -0
  358. package/dist/src/qa/profile/ProjectInspector.d.ts +9 -0
  359. package/dist/src/qa/profile/ProjectInspector.js +295 -0
  360. package/dist/src/qa/profile/QaConfigLoader.d.ts +43 -0
  361. package/dist/src/qa/profile/QaConfigLoader.js +261 -0
  362. package/dist/src/qa/profile/QaProfile.d.ts +17 -0
  363. package/dist/src/qa/profile/QaProfile.js +15 -0
  364. package/dist/src/qa/profile/yaml.d.ts +12 -0
  365. package/dist/src/qa/profile/yaml.js +203 -0
  366. package/dist/src/qa/qa-authorize.d.ts +25 -0
  367. package/dist/src/qa/qa-authorize.js +82 -0
  368. package/dist/src/qa/runners/CommandRunner.d.ts +22 -0
  369. package/dist/src/qa/runners/CommandRunner.js +96 -0
  370. package/dist/src/qa/runners/TestRunner.d.ts +21 -0
  371. package/dist/src/qa/runners/TestRunner.js +66 -0
  372. package/dist/src/qa/runtime/ProcessManager.d.ts +53 -0
  373. package/dist/src/qa/runtime/ProcessManager.js +225 -0
  374. package/dist/src/qa/runtime/PtyManager.d.ts +57 -0
  375. package/dist/src/qa/runtime/PtyManager.js +338 -0
  376. package/dist/src/qa/runtime/RuntimeSmoke.d.ts +11 -0
  377. package/dist/src/qa/runtime/RuntimeSmoke.js +78 -0
  378. package/dist/src/qa/runtime-detect.d.ts +10 -0
  379. package/dist/src/qa/runtime-detect.js +72 -0
  380. package/dist/src/qa/security/DependencyScanner.d.ts +19 -0
  381. package/dist/src/qa/security/DependencyScanner.js +167 -0
  382. package/dist/src/qa/security/SecretScanner.d.ts +3 -0
  383. package/dist/src/qa/security/SecretScanner.js +55 -0
  384. package/dist/src/qa/tools.d.ts +3 -0
  385. package/dist/src/qa/tools.js +301 -0
  386. package/dist/src/qa/types.d.ts +134 -0
  387. package/dist/src/qa/types.js +3 -0
  388. package/dist/src/react-runtime.d.ts +53 -0
  389. package/dist/src/react-runtime.js +1753 -0
  390. package/dist/src/remote/cert.d.ts +29 -0
  391. package/dist/src/remote/cert.js +136 -0
  392. package/dist/src/remote/client.d.ts +189 -0
  393. package/dist/src/remote/client.js +659 -0
  394. package/dist/src/remote/command.d.ts +4 -0
  395. package/dist/src/remote/command.js +211 -0
  396. package/dist/src/remote/engine-pool.d.ts +230 -0
  397. package/dist/src/remote/engine-pool.js +1160 -0
  398. package/dist/src/remote/errors.d.ts +26 -0
  399. package/dist/src/remote/errors.js +21 -0
  400. package/dist/src/remote/network.d.ts +48 -0
  401. package/dist/src/remote/network.js +135 -0
  402. package/dist/src/remote/pairing.d.ts +98 -0
  403. package/dist/src/remote/pairing.js +306 -0
  404. package/dist/src/remote/roots.d.ts +29 -0
  405. package/dist/src/remote/roots.js +44 -0
  406. package/dist/src/remote/serve.d.ts +115 -0
  407. package/dist/src/remote/serve.js +274 -0
  408. package/dist/src/remote/server.d.ts +35 -0
  409. package/dist/src/remote/server.js +484 -0
  410. package/dist/src/remote/types.d.ts +86 -0
  411. package/dist/src/remote/types.js +11 -0
  412. package/dist/src/run-control.d.ts +17 -0
  413. package/dist/src/run-control.js +52 -0
  414. package/dist/src/run-progress.d.ts +226 -0
  415. package/dist/src/run-progress.js +724 -0
  416. package/dist/src/run-records.d.ts +500 -0
  417. package/dist/src/run-records.js +1678 -0
  418. package/dist/src/runtime.d.ts +418 -0
  419. package/dist/src/runtime.js +247 -0
  420. package/dist/src/sandbox-child.d.ts +1 -0
  421. package/dist/src/sandbox-child.js +14 -0
  422. package/dist/src/save-lock.d.ts +9 -0
  423. package/dist/src/save-lock.js +186 -0
  424. package/dist/src/session-monitor.d.ts +98 -0
  425. package/dist/src/session-monitor.js +323 -0
  426. package/dist/src/session-reaper.d.ts +23 -0
  427. package/dist/src/session-reaper.js +33 -0
  428. package/dist/src/session-summary.d.ts +27 -0
  429. package/dist/src/session-summary.js +66 -0
  430. package/dist/src/session-title.d.ts +18 -0
  431. package/dist/src/session-title.js +54 -0
  432. package/dist/src/sessions.d.ts +211 -0
  433. package/dist/src/sessions.js +620 -0
  434. package/dist/src/shell.d.ts +40 -0
  435. package/dist/src/shell.js +504 -0
  436. package/dist/src/side-panel.d.ts +144 -0
  437. package/dist/src/side-panel.js +366 -0
  438. package/dist/src/skill-commands.d.ts +1 -0
  439. package/dist/src/skill-commands.js +11 -0
  440. package/dist/src/skills/bundled/ai-elements/SKILL.md +155 -0
  441. package/dist/src/skills/bundled/ai-elements/references/agent.md +138 -0
  442. package/dist/src/skills/bundled/ai-elements/references/artifact.md +91 -0
  443. package/dist/src/skills/bundled/ai-elements/references/attachments.md +197 -0
  444. package/dist/src/skills/bundled/ai-elements/references/audio-player.md +141 -0
  445. package/dist/src/skills/bundled/ai-elements/references/canvas.md +39 -0
  446. package/dist/src/skills/bundled/ai-elements/references/chain-of-thought.md +88 -0
  447. package/dist/src/skills/bundled/ai-elements/references/checkpoint.md +171 -0
  448. package/dist/src/skills/bundled/ai-elements/references/code-block.md +177 -0
  449. package/dist/src/skills/bundled/ai-elements/references/commit.md +184 -0
  450. package/dist/src/skills/bundled/ai-elements/references/confirmation.md +268 -0
  451. package/dist/src/skills/bundled/ai-elements/references/connection.md +39 -0
  452. package/dist/src/skills/bundled/ai-elements/references/context.md +133 -0
  453. package/dist/src/skills/bundled/ai-elements/references/controls.md +37 -0
  454. package/dist/src/skills/bundled/ai-elements/references/conversation.md +224 -0
  455. package/dist/src/skills/bundled/ai-elements/references/edge.md +57 -0
  456. package/dist/src/skills/bundled/ai-elements/references/environment-variables.md +109 -0
  457. package/dist/src/skills/bundled/ai-elements/references/file-tree.md +79 -0
  458. package/dist/src/skills/bundled/ai-elements/references/image.md +150 -0
  459. package/dist/src/skills/bundled/ai-elements/references/inline-citation.md +300 -0
  460. package/dist/src/skills/bundled/ai-elements/references/jsx-preview.md +108 -0
  461. package/dist/src/skills/bundled/ai-elements/references/message.md +231 -0
  462. package/dist/src/skills/bundled/ai-elements/references/mic-selector.md +193 -0
  463. package/dist/src/skills/bundled/ai-elements/references/model-selector.md +119 -0
  464. package/dist/src/skills/bundled/ai-elements/references/node.md +78 -0
  465. package/dist/src/skills/bundled/ai-elements/references/open-in-chat.md +74 -0
  466. package/dist/src/skills/bundled/ai-elements/references/package-info.md +102 -0
  467. package/dist/src/skills/bundled/ai-elements/references/panel.md +38 -0
  468. package/dist/src/skills/bundled/ai-elements/references/persona.md +173 -0
  469. package/dist/src/skills/bundled/ai-elements/references/plan.md +86 -0
  470. package/dist/src/skills/bundled/ai-elements/references/prompt-input.md +572 -0
  471. package/dist/src/skills/bundled/ai-elements/references/queue.md +179 -0
  472. package/dist/src/skills/bundled/ai-elements/references/reasoning.md +226 -0
  473. package/dist/src/skills/bundled/ai-elements/references/sandbox.md +133 -0
  474. package/dist/src/skills/bundled/ai-elements/references/schema-display.md +109 -0
  475. package/dist/src/skills/bundled/ai-elements/references/shimmer.md +55 -0
  476. package/dist/src/skills/bundled/ai-elements/references/snippet.md +71 -0
  477. package/dist/src/skills/bundled/ai-elements/references/sources.md +200 -0
  478. package/dist/src/skills/bundled/ai-elements/references/speech-input.md +167 -0
  479. package/dist/src/skills/bundled/ai-elements/references/stack-trace.md +225 -0
  480. package/dist/src/skills/bundled/ai-elements/references/suggestion.md +128 -0
  481. package/dist/src/skills/bundled/ai-elements/references/task.md +222 -0
  482. package/dist/src/skills/bundled/ai-elements/references/terminal.md +110 -0
  483. package/dist/src/skills/bundled/ai-elements/references/test-results.md +164 -0
  484. package/dist/src/skills/bundled/ai-elements/references/tool.md +282 -0
  485. package/dist/src/skills/bundled/ai-elements/references/toolbar.md +37 -0
  486. package/dist/src/skills/bundled/ai-elements/references/transcription.md +127 -0
  487. package/dist/src/skills/bundled/ai-elements/references/voice-selector.md +248 -0
  488. package/dist/src/skills/bundled/ai-elements/references/web-preview.md +204 -0
  489. package/dist/src/skills/bundled/ai-elements/scripts/agent.tsx +67 -0
  490. package/dist/src/skills/bundled/ai-elements/scripts/artifact.tsx +117 -0
  491. package/dist/src/skills/bundled/ai-elements/scripts/attachments-inline.tsx +123 -0
  492. package/dist/src/skills/bundled/ai-elements/scripts/attachments-list.tsx +94 -0
  493. package/dist/src/skills/bundled/ai-elements/scripts/attachments.tsx +84 -0
  494. package/dist/src/skills/bundled/ai-elements/scripts/audio-player-remote.tsx +35 -0
  495. package/dist/src/skills/bundled/ai-elements/scripts/audio-player.tsx +74 -0
  496. package/dist/src/skills/bundled/ai-elements/scripts/chain-of-thought.tsx +80 -0
  497. package/dist/src/skills/bundled/ai-elements/scripts/checkpoint.tsx +96 -0
  498. package/dist/src/skills/bundled/ai-elements/scripts/code-block-dark.tsx +46 -0
  499. package/dist/src/skills/bundled/ai-elements/scripts/code-block.tsx +120 -0
  500. package/dist/src/skills/bundled/ai-elements/scripts/commit.tsx +94 -0
  501. package/dist/src/skills/bundled/ai-elements/scripts/confirmation-accepted.tsx +41 -0
  502. package/dist/src/skills/bundled/ai-elements/scripts/confirmation-rejected.tsx +41 -0
  503. package/dist/src/skills/bundled/ai-elements/scripts/confirmation-request.tsx +54 -0
  504. package/dist/src/skills/bundled/ai-elements/scripts/confirmation.tsx +59 -0
  505. package/dist/src/skills/bundled/ai-elements/scripts/context.tsx +45 -0
  506. package/dist/src/skills/bundled/ai-elements/scripts/conversation.tsx +182 -0
  507. package/dist/src/skills/bundled/ai-elements/scripts/environment-variables.tsx +61 -0
  508. package/dist/src/skills/bundled/ai-elements/scripts/file-tree-basic.tsx +20 -0
  509. package/dist/src/skills/bundled/ai-elements/scripts/file-tree-expanded.tsx +23 -0
  510. package/dist/src/skills/bundled/ai-elements/scripts/file-tree-selection.tsx +26 -0
  511. package/dist/src/skills/bundled/ai-elements/scripts/file-tree.tsx +44 -0
  512. package/dist/src/skills/bundled/ai-elements/scripts/image.tsx +20 -0
  513. package/dist/src/skills/bundled/ai-elements/scripts/inline-citation.tsx +101 -0
  514. package/dist/src/skills/bundled/ai-elements/scripts/jsx-preview.tsx +105 -0
  515. package/dist/src/skills/bundled/ai-elements/scripts/message.tsx +330 -0
  516. package/dist/src/skills/bundled/ai-elements/scripts/mic-selector.tsx +52 -0
  517. package/dist/src/skills/bundled/ai-elements/scripts/model-selector.tsx +368 -0
  518. package/dist/src/skills/bundled/ai-elements/scripts/open-in-chat.tsx +33 -0
  519. package/dist/src/skills/bundled/ai-elements/scripts/package-info.tsx +52 -0
  520. package/dist/src/skills/bundled/ai-elements/scripts/persona-command.tsx +101 -0
  521. package/dist/src/skills/bundled/ai-elements/scripts/persona-glint.tsx +101 -0
  522. package/dist/src/skills/bundled/ai-elements/scripts/persona-halo.tsx +101 -0
  523. package/dist/src/skills/bundled/ai-elements/scripts/persona-mana.tsx +101 -0
  524. package/dist/src/skills/bundled/ai-elements/scripts/persona-obsidian.tsx +101 -0
  525. package/dist/src/skills/bundled/ai-elements/scripts/persona-opal.tsx +101 -0
  526. package/dist/src/skills/bundled/ai-elements/scripts/plan.tsx +69 -0
  527. package/dist/src/skills/bundled/ai-elements/scripts/prompt-input-cursor.tsx +462 -0
  528. package/dist/src/skills/bundled/ai-elements/scripts/prompt-input-tooltip.tsx +46 -0
  529. package/dist/src/skills/bundled/ai-elements/scripts/prompt-input.tsx +254 -0
  530. package/dist/src/skills/bundled/ai-elements/scripts/queue-prompt-input.tsx +372 -0
  531. package/dist/src/skills/bundled/ai-elements/scripts/queue.tsx +281 -0
  532. package/dist/src/skills/bundled/ai-elements/scripts/reasoning.tsx +73 -0
  533. package/dist/src/skills/bundled/ai-elements/scripts/sandbox.tsx +171 -0
  534. package/dist/src/skills/bundled/ai-elements/scripts/schema-display-basic.tsx +13 -0
  535. package/dist/src/skills/bundled/ai-elements/scripts/schema-display-body.tsx +20 -0
  536. package/dist/src/skills/bundled/ai-elements/scripts/schema-display-nested.tsx +23 -0
  537. package/dist/src/skills/bundled/ai-elements/scripts/schema-display-params.tsx +16 -0
  538. package/dist/src/skills/bundled/ai-elements/scripts/schema-display.tsx +110 -0
  539. package/dist/src/skills/bundled/ai-elements/scripts/shimmer-duration.tsx +35 -0
  540. package/dist/src/skills/bundled/ai-elements/scripts/shimmer-elements.tsx +45 -0
  541. package/dist/src/skills/bundled/ai-elements/scripts/shimmer.tsx +17 -0
  542. package/dist/src/skills/bundled/ai-elements/scripts/snippet-plain.tsx +19 -0
  543. package/dist/src/skills/bundled/ai-elements/scripts/snippet.tsx +25 -0
  544. package/dist/src/skills/bundled/ai-elements/scripts/sources-custom.tsx +40 -0
  545. package/dist/src/skills/bundled/ai-elements/scripts/sources.tsx +33 -0
  546. package/dist/src/skills/bundled/ai-elements/scripts/speech-input.tsx +85 -0
  547. package/dist/src/skills/bundled/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
  548. package/dist/src/skills/bundled/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
  549. package/dist/src/skills/bundled/ai-elements/scripts/stack-trace.tsx +60 -0
  550. package/dist/src/skills/bundled/ai-elements/scripts/suggestion-input.tsx +142 -0
  551. package/dist/src/skills/bundled/ai-elements/scripts/suggestion.tsx +34 -0
  552. package/dist/src/skills/bundled/ai-elements/scripts/task.tsx +59 -0
  553. package/dist/src/skills/bundled/ai-elements/scripts/terminal-basic.tsx +7 -0
  554. package/dist/src/skills/bundled/ai-elements/scripts/terminal-clear.tsx +19 -0
  555. package/dist/src/skills/bundled/ai-elements/scripts/terminal-streaming.tsx +38 -0
  556. package/dist/src/skills/bundled/ai-elements/scripts/terminal.tsx +83 -0
  557. package/dist/src/skills/bundled/ai-elements/scripts/test-results-basic.tsx +27 -0
  558. package/dist/src/skills/bundled/ai-elements/scripts/test-results-errors.tsx +51 -0
  559. package/dist/src/skills/bundled/ai-elements/scripts/test-results-suites.tsx +40 -0
  560. package/dist/src/skills/bundled/ai-elements/scripts/test-results.tsx +84 -0
  561. package/dist/src/skills/bundled/ai-elements/scripts/tool-input-available.tsx +31 -0
  562. package/dist/src/skills/bundled/ai-elements/scripts/tool-input-streaming.tsx +30 -0
  563. package/dist/src/skills/bundled/ai-elements/scripts/tool-output-available.tsx +81 -0
  564. package/dist/src/skills/bundled/ai-elements/scripts/tool-output-error.tsx +50 -0
  565. package/dist/src/skills/bundled/ai-elements/scripts/tool.tsx +210 -0
  566. package/dist/src/skills/bundled/ai-elements/scripts/transcription.tsx +289 -0
  567. package/dist/src/skills/bundled/ai-elements/scripts/voice-selector.tsx +233 -0
  568. package/dist/src/skills/bundled/ai-elements/scripts/web-preview.tsx +105 -0
  569. package/dist/src/skills/bundled/control-browser/SKILL.md +21 -0
  570. package/dist/src/skills/bundled/dynamic-workflows/SKILL.md +1520 -0
  571. package/dist/src/skills/bundled/dynamic-workflows/examples.md +801 -0
  572. package/dist/src/skills/bundled/dynamic-workflows/patterns.md +460 -0
  573. package/dist/src/skills/bundled/provenance.json +684 -0
  574. package/dist/src/skills/bundled/web-gui-tester/SKILL.md +159 -0
  575. package/dist/src/skills/project-skills.d.ts +11 -0
  576. package/dist/src/skills/project-skills.js +132 -0
  577. package/dist/src/skills/runtime-skills.d.ts +10 -0
  578. package/dist/src/skills/runtime-skills.js +237 -0
  579. package/dist/src/subagent-run.d.ts +278 -0
  580. package/dist/src/subagent-run.js +930 -0
  581. package/dist/src/telemetry/aggregate.d.ts +80 -0
  582. package/dist/src/telemetry/aggregate.js +217 -0
  583. package/dist/src/telemetry/capture-core.d.ts +190 -0
  584. package/dist/src/telemetry/capture-core.js +374 -0
  585. package/dist/src/telemetry/capture.d.ts +5 -0
  586. package/dist/src/telemetry/capture.js +16 -0
  587. package/dist/src/telemetry/classify.d.ts +102 -0
  588. package/dist/src/telemetry/classify.js +252 -0
  589. package/dist/src/telemetry/decision-capture.d.ts +13 -0
  590. package/dist/src/telemetry/decision-capture.js +40 -0
  591. package/dist/src/telemetry/emitter.d.ts +77 -0
  592. package/dist/src/telemetry/emitter.js +279 -0
  593. package/dist/src/telemetry/gate.d.ts +48 -0
  594. package/dist/src/telemetry/gate.js +55 -0
  595. package/dist/src/telemetry/identity.d.ts +19 -0
  596. package/dist/src/telemetry/identity.js +109 -0
  597. package/dist/src/telemetry/outbox.d.ts +91 -0
  598. package/dist/src/telemetry/outbox.js +356 -0
  599. package/dist/src/telemetry/schema.d.ts +184 -0
  600. package/dist/src/telemetry/schema.js +492 -0
  601. package/dist/src/telemetry/state.d.ts +90 -0
  602. package/dist/src/telemetry/state.js +195 -0
  603. package/dist/src/telemetry/surface.d.ts +76 -0
  604. package/dist/src/telemetry/surface.js +116 -0
  605. package/dist/src/telemetry/uploader.d.ts +29 -0
  606. package/dist/src/telemetry/uploader.js +151 -0
  607. package/dist/src/telemetry/uploads.d.ts +13 -0
  608. package/dist/src/telemetry/uploads.js +19 -0
  609. package/dist/src/telemetry/version.d.ts +5 -0
  610. package/dist/src/telemetry/version.js +25 -0
  611. package/dist/src/telemetry/workspace.d.ts +14 -0
  612. package/dist/src/telemetry/workspace.js +93 -0
  613. package/dist/src/terminal-ui.d.ts +744 -0
  614. package/dist/src/terminal-ui.js +3012 -0
  615. package/dist/src/text.d.ts +2 -0
  616. package/dist/src/text.js +8 -0
  617. package/dist/src/timers.d.ts +189 -0
  618. package/dist/src/timers.js +244 -0
  619. package/dist/src/todos.d.ts +12 -0
  620. package/dist/src/todos.js +33 -0
  621. package/dist/src/token-rate.d.ts +119 -0
  622. package/dist/src/token-rate.js +287 -0
  623. package/dist/src/tool-activity.d.ts +20 -0
  624. package/dist/src/tool-activity.js +76 -0
  625. package/dist/src/tool-call-clock.d.ts +32 -0
  626. package/dist/src/tool-call-clock.js +157 -0
  627. package/dist/src/tool-catalog.d.ts +40 -0
  628. package/dist/src/tool-catalog.js +100 -0
  629. package/dist/src/tool-dependencies.d.ts +23 -0
  630. package/dist/src/tool-dependencies.js +36 -0
  631. package/dist/src/tool-diff-stats.d.ts +24 -0
  632. package/dist/src/tool-diff-stats.js +122 -0
  633. package/dist/src/tool-errors.d.ts +12 -0
  634. package/dist/src/tool-errors.js +13 -0
  635. package/dist/src/tool-failure-tracker.d.ts +17 -0
  636. package/dist/src/tool-failure-tracker.js +71 -0
  637. package/dist/src/tool-names.d.ts +16 -0
  638. package/dist/src/tool-names.js +75 -0
  639. package/dist/src/tool-result-filter.d.ts +65 -0
  640. package/dist/src/tool-result-filter.js +447 -0
  641. package/dist/src/tool-schema-compatibility.d.ts +2 -0
  642. package/dist/src/tool-schema-compatibility.js +42 -0
  643. package/dist/src/tools.d.ts +3 -0
  644. package/dist/src/tools.js +663 -0
  645. package/dist/src/trajectory.d.ts +34 -0
  646. package/dist/src/trajectory.js +426 -0
  647. package/dist/src/transcript.d.ts +45 -0
  648. package/dist/src/transcript.js +228 -0
  649. package/dist/src/types.d.ts +248 -0
  650. package/dist/src/types.js +1 -0
  651. package/dist/src/update.d.ts +58 -0
  652. package/dist/src/update.js +571 -0
  653. package/dist/src/usage-analytics.d.ts +48 -0
  654. package/dist/src/usage-analytics.js +663 -0
  655. package/dist/src/widgets.d.ts +45 -0
  656. package/dist/src/widgets.js +71 -0
  657. package/dist/src/workspace-facts.d.ts +35 -0
  658. package/dist/src/workspace-facts.js +85 -0
  659. package/dist/src/workspace-git-metadata.d.ts +6 -0
  660. package/dist/src/workspace-git-metadata.js +114 -0
  661. package/dist/src/workspace-instructions.d.ts +7 -0
  662. package/dist/src/workspace-instructions.js +46 -0
  663. package/dist/vendor/engine/LICENSE.upstream +21 -0
  664. package/dist/vendor/engine/provenance.json +17923 -0
  665. package/dist/vendor/engine/runtime/agent/agent-loop.d.ts +23 -0
  666. package/dist/vendor/engine/runtime/agent/agent-loop.js +601 -0
  667. package/dist/vendor/engine/runtime/agent/agent.d.ts +130 -0
  668. package/dist/vendor/engine/runtime/agent/agent.js +430 -0
  669. package/dist/vendor/engine/runtime/agent/harness/agent-harness.d.ts +715 -0
  670. package/dist/vendor/engine/runtime/agent/harness/agent-harness.js +5 -0
  671. package/dist/vendor/engine/runtime/agent/harness/compaction/branch-summarization.d.ts +67 -0
  672. package/dist/vendor/engine/runtime/agent/harness/compaction/branch-summarization.js +175 -0
  673. package/dist/vendor/engine/runtime/agent/harness/compaction/compaction.d.ts +125 -0
  674. package/dist/vendor/engine/runtime/agent/harness/compaction/compaction.js +559 -0
  675. package/dist/vendor/engine/runtime/agent/harness/compaction/utils.d.ts +24 -0
  676. package/dist/vendor/engine/runtime/agent/harness/compaction/utils.js +119 -0
  677. package/dist/vendor/engine/runtime/agent/harness/config.d.ts +8 -0
  678. package/dist/vendor/engine/runtime/agent/harness/config.js +34 -0
  679. package/dist/vendor/engine/runtime/agent/harness/context.d.ts +8 -0
  680. package/dist/vendor/engine/runtime/agent/harness/context.js +12 -0
  681. package/dist/vendor/engine/runtime/agent/harness/events.d.ts +24 -0
  682. package/dist/vendor/engine/runtime/agent/harness/events.js +249 -0
  683. package/dist/vendor/engine/runtime/agent/harness/execution/assistant.d.ts +41 -0
  684. package/dist/vendor/engine/runtime/agent/harness/execution/assistant.js +81 -0
  685. package/dist/vendor/engine/runtime/agent/harness/execution/effect-gate.d.ts +21 -0
  686. package/dist/vendor/engine/runtime/agent/harness/execution/effect-gate.js +48 -0
  687. package/dist/vendor/engine/runtime/agent/harness/execution/tools.d.ts +66 -0
  688. package/dist/vendor/engine/runtime/agent/harness/execution/tools.js +118 -0
  689. package/dist/vendor/engine/runtime/agent/harness/hooks.d.ts +37 -0
  690. package/dist/vendor/engine/runtime/agent/harness/hooks.js +405 -0
  691. package/dist/vendor/engine/runtime/agent/harness/messages.d.ts +50 -0
  692. package/dist/vendor/engine/runtime/agent/harness/messages.js +102 -0
  693. package/dist/vendor/engine/runtime/agent/harness/prompt-templates.d.ts +48 -0
  694. package/dist/vendor/engine/runtime/agent/harness/prompt-templates.js +224 -0
  695. package/dist/vendor/engine/runtime/agent/harness/result.d.ts +132 -0
  696. package/dist/vendor/engine/runtime/agent/harness/result.js +80 -0
  697. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/boundary.d.ts +27 -0
  698. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/boundary.js +172 -0
  699. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/checkpoint.d.ts +7 -0
  700. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/checkpoint.js +132 -0
  701. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/deferred.d.ts +14 -0
  702. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/deferred.js +178 -0
  703. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/generation.d.ts +7 -0
  704. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/generation.js +204 -0
  705. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/reconcile.d.ts +4 -0
  706. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/reconcile.js +139 -0
  707. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/recovery.d.ts +7 -0
  708. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/recovery.js +84 -0
  709. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/response.d.ts +22 -0
  710. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/response.js +393 -0
  711. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/retry.d.ts +3 -0
  712. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/retry.js +33 -0
  713. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/structural.d.ts +31 -0
  714. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/structural.js +928 -0
  715. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/terminal.d.ts +6 -0
  716. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/terminal.js +48 -0
  717. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/tool-placement.d.ts +13 -0
  718. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/tool-placement.js +218 -0
  719. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/tools.d.ts +5 -0
  720. package/dist/vendor/engine/runtime/agent/harness/runtime/drive/tools.js +448 -0
  721. package/dist/vendor/engine/runtime/agent/harness/runtime/drive.d.ts +5 -0
  722. package/dist/vendor/engine/runtime/agent/harness/runtime/drive.js +92 -0
  723. package/dist/vendor/engine/runtime/agent/harness/runtime/harness.d.ts +58 -0
  724. package/dist/vendor/engine/runtime/agent/harness/runtime/harness.js +310 -0
  725. package/dist/vendor/engine/runtime/agent/harness/runtime/lane.d.ts +117 -0
  726. package/dist/vendor/engine/runtime/agent/harness/runtime/lane.js +1574 -0
  727. package/dist/vendor/engine/runtime/agent/harness/runtime/progress.d.ts +14 -0
  728. package/dist/vendor/engine/runtime/agent/harness/runtime/progress.js +65 -0
  729. package/dist/vendor/engine/runtime/agent/harness/runtime/reducer.d.ts +4 -0
  730. package/dist/vendor/engine/runtime/agent/harness/runtime/reducer.js +239 -0
  731. package/dist/vendor/engine/runtime/agent/harness/runtime/restore.d.ts +23 -0
  732. package/dist/vendor/engine/runtime/agent/harness/runtime/restore.js +116 -0
  733. package/dist/vendor/engine/runtime/agent/harness/runtime/transcript.d.ts +20 -0
  734. package/dist/vendor/engine/runtime/agent/harness/runtime/transcript.js +71 -0
  735. package/dist/vendor/engine/runtime/agent/harness/runtime/types.d.ts +104 -0
  736. package/dist/vendor/engine/runtime/agent/harness/runtime/types.js +60 -0
  737. package/dist/vendor/engine/runtime/agent/harness/session/commit.d.ts +52 -0
  738. package/dist/vendor/engine/runtime/agent/harness/session/commit.js +56 -0
  739. package/dist/vendor/engine/runtime/agent/harness/session/context.d.ts +9 -0
  740. package/dist/vendor/engine/runtime/agent/harness/session/context.js +48 -0
  741. package/dist/vendor/engine/runtime/agent/harness/session/fork-policy.d.ts +20 -0
  742. package/dist/vendor/engine/runtime/agent/harness/session/fork-policy.js +54 -0
  743. package/dist/vendor/engine/runtime/agent/harness/session/fork.d.ts +15 -0
  744. package/dist/vendor/engine/runtime/agent/harness/session/fork.js +78 -0
  745. package/dist/vendor/engine/runtime/agent/harness/session/in-memory-storage-state.d.ts +38 -0
  746. package/dist/vendor/engine/runtime/agent/harness/session/in-memory-storage-state.js +275 -0
  747. package/dist/vendor/engine/runtime/agent/harness/session/index.d.ts +10 -0
  748. package/dist/vendor/engine/runtime/agent/harness/session/index.js +8 -0
  749. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/codec.d.ts +20 -0
  750. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/codec.js +44 -0
  751. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/fork.d.ts +37 -0
  752. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/fork.js +263 -0
  753. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/index.d.ts +3 -0
  754. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/index.js +3 -0
  755. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/io.d.ts +13 -0
  756. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/io.js +85 -0
  757. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/legacy-v3.d.ts +43 -0
  758. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/legacy-v3.js +461 -0
  759. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/repo.d.ts +34 -0
  760. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/repo.js +300 -0
  761. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/storage.d.ts +40 -0
  762. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/storage.js +199 -0
  763. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/types.d.ts +38 -0
  764. package/dist/vendor/engine/runtime/agent/harness/session/jsonl/types.js +2 -0
  765. package/dist/vendor/engine/runtime/agent/harness/session/memory.d.ts +47 -0
  766. package/dist/vendor/engine/runtime/agent/harness/session/memory.js +368 -0
  767. package/dist/vendor/engine/runtime/agent/harness/session/mutation-line.d.ts +7 -0
  768. package/dist/vendor/engine/runtime/agent/harness/session/mutation-line.js +20 -0
  769. package/dist/vendor/engine/runtime/agent/harness/session/session.d.ts +81 -0
  770. package/dist/vendor/engine/runtime/agent/harness/session/session.js +360 -0
  771. package/dist/vendor/engine/runtime/agent/harness/session/types.d.ts +511 -0
  772. package/dist/vendor/engine/runtime/agent/harness/session/types.js +8 -0
  773. package/dist/vendor/engine/runtime/agent/harness/session/values.d.ts +94 -0
  774. package/dist/vendor/engine/runtime/agent/harness/session/values.js +80 -0
  775. package/dist/vendor/engine/runtime/agent/harness/skills.d.ts +45 -0
  776. package/dist/vendor/engine/runtime/agent/harness/skills.js +325 -0
  777. package/dist/vendor/engine/runtime/agent/harness/system-prompt.d.ts +2 -0
  778. package/dist/vendor/engine/runtime/agent/harness/system-prompt.js +29 -0
  779. package/dist/vendor/engine/runtime/agent/harness/telemetry.d.ts +1241 -0
  780. package/dist/vendor/engine/runtime/agent/harness/telemetry.js +526 -0
  781. package/dist/vendor/engine/runtime/agent/harness/tools/bash.d.ts +26 -0
  782. package/dist/vendor/engine/runtime/agent/harness/tools/bash.js +104 -0
  783. package/dist/vendor/engine/runtime/agent/harness/tools/edit-diff.d.ts +88 -0
  784. package/dist/vendor/engine/runtime/agent/harness/tools/edit-diff.js +385 -0
  785. package/dist/vendor/engine/runtime/agent/harness/tools/edit.d.ts +18 -0
  786. package/dist/vendor/engine/runtime/agent/harness/tools/edit.js +107 -0
  787. package/dist/vendor/engine/runtime/agent/harness/tools/file-mutation-queue.d.ts +4 -0
  788. package/dist/vendor/engine/runtime/agent/harness/tools/file-mutation-queue.js +45 -0
  789. package/dist/vendor/engine/runtime/agent/harness/tools/image.d.ts +2 -0
  790. package/dist/vendor/engine/runtime/agent/harness/tools/image.js +105 -0
  791. package/dist/vendor/engine/runtime/agent/harness/tools/index.d.ts +5 -0
  792. package/dist/vendor/engine/runtime/agent/harness/tools/index.js +4 -0
  793. package/dist/vendor/engine/runtime/agent/harness/tools/path-utils.d.ts +4 -0
  794. package/dist/vendor/engine/runtime/agent/harness/tools/path-utils.js +25 -0
  795. package/dist/vendor/engine/runtime/agent/harness/tools/read.d.ts +34 -0
  796. package/dist/vendor/engine/runtime/agent/harness/tools/read.js +107 -0
  797. package/dist/vendor/engine/runtime/agent/harness/tools/tool-context.d.ts +5 -0
  798. package/dist/vendor/engine/runtime/agent/harness/tools/tool-context.js +1 -0
  799. package/dist/vendor/engine/runtime/agent/harness/tools/write.d.ts +10 -0
  800. package/dist/vendor/engine/runtime/agent/harness/tools/write.js +30 -0
  801. package/dist/vendor/engine/runtime/agent/harness/types.d.ts +304 -0
  802. package/dist/vendor/engine/runtime/agent/harness/types.js +74 -0
  803. package/dist/vendor/engine/runtime/agent/harness/utils/adaptive-publisher.d.ts +23 -0
  804. package/dist/vendor/engine/runtime/agent/harness/utils/adaptive-publisher.js +78 -0
  805. package/dist/vendor/engine/runtime/agent/harness/utils/output-capture.d.ts +30 -0
  806. package/dist/vendor/engine/runtime/agent/harness/utils/output-capture.js +216 -0
  807. package/dist/vendor/engine/runtime/agent/harness/utils/shell-output.d.ts +28 -0
  808. package/dist/vendor/engine/runtime/agent/harness/utils/shell-output.js +70 -0
  809. package/dist/vendor/engine/runtime/agent/harness/utils/truncate.d.ts +70 -0
  810. package/dist/vendor/engine/runtime/agent/harness/utils/truncate.js +295 -0
  811. package/dist/vendor/engine/runtime/agent/harness/utils/usage.d.ts +3 -0
  812. package/dist/vendor/engine/runtime/agent/harness/utils/usage.js +32 -0
  813. package/dist/vendor/engine/runtime/agent/index.d.ts +27 -0
  814. package/dist/vendor/engine/runtime/agent/index.js +25 -0
  815. package/dist/vendor/engine/runtime/agent/proxy.d.ts +71 -0
  816. package/dist/vendor/engine/runtime/agent/proxy.js +309 -0
  817. package/dist/vendor/engine/runtime/agent/search/index.d.ts +28 -0
  818. package/dist/vendor/engine/runtime/agent/search/index.js +1 -0
  819. package/dist/vendor/engine/runtime/agent/stream-fn.d.ts +9 -0
  820. package/dist/vendor/engine/runtime/agent/stream-fn.js +16 -0
  821. package/dist/vendor/engine/runtime/agent/types.d.ts +431 -0
  822. package/dist/vendor/engine/runtime/agent/types.js +1 -0
  823. package/dist/vendor/engine/runtime/ai/api/anthropic-messages.d.ts +70 -0
  824. package/dist/vendor/engine/runtime/ai/api/anthropic-messages.js +1204 -0
  825. package/dist/vendor/engine/runtime/ai/api/anthropic-messages.lazy.d.ts +2 -0
  826. package/dist/vendor/engine/runtime/ai/api/anthropic-messages.lazy.js +2 -0
  827. package/dist/vendor/engine/runtime/ai/api/azure-openai-responses.d.ts +16 -0
  828. package/dist/vendor/engine/runtime/ai/api/azure-openai-responses.js +260 -0
  829. package/dist/vendor/engine/runtime/ai/api/azure-openai-responses.lazy.d.ts +2 -0
  830. package/dist/vendor/engine/runtime/ai/api/azure-openai-responses.lazy.js +2 -0
  831. package/dist/vendor/engine/runtime/ai/api/bedrock-converse-stream.d.ts +37 -0
  832. package/dist/vendor/engine/runtime/ai/api/bedrock-converse-stream.js +1091 -0
  833. package/dist/vendor/engine/runtime/ai/api/bedrock-converse-stream.lazy.d.ts +9 -0
  834. package/dist/vendor/engine/runtime/ai/api/bedrock-converse-stream.lazy.js +21 -0
  835. package/dist/vendor/engine/runtime/ai/api/constrained-sampling.d.ts +19 -0
  836. package/dist/vendor/engine/runtime/ai/api/constrained-sampling.js +221 -0
  837. package/dist/vendor/engine/runtime/ai/api/github-copilot-headers.d.ts +7 -0
  838. package/dist/vendor/engine/runtime/ai/api/github-copilot-headers.js +28 -0
  839. package/dist/vendor/engine/runtime/ai/api/google-generative-ai.d.ts +12 -0
  840. package/dist/vendor/engine/runtime/ai/api/google-generative-ai.js +368 -0
  841. package/dist/vendor/engine/runtime/ai/api/google-generative-ai.lazy.d.ts +2 -0
  842. package/dist/vendor/engine/runtime/ai/api/google-generative-ai.lazy.js +2 -0
  843. package/dist/vendor/engine/runtime/ai/api/google-shared.d.ts +92 -0
  844. package/dist/vendor/engine/runtime/ai/api/google-shared.js +450 -0
  845. package/dist/vendor/engine/runtime/ai/api/google-vertex.d.ts +14 -0
  846. package/dist/vendor/engine/runtime/ai/api/google-vertex.js +429 -0
  847. package/dist/vendor/engine/runtime/ai/api/google-vertex.lazy.d.ts +2 -0
  848. package/dist/vendor/engine/runtime/ai/api/google-vertex.lazy.js +2 -0
  849. package/dist/vendor/engine/runtime/ai/api/lazy.d.ts +24 -0
  850. package/dist/vendor/engine/runtime/ai/api/lazy.js +69 -0
  851. package/dist/vendor/engine/runtime/ai/api/mistral-conversations.d.ts +24 -0
  852. package/dist/vendor/engine/runtime/ai/api/mistral-conversations.js +747 -0
  853. package/dist/vendor/engine/runtime/ai/api/mistral-conversations.lazy.d.ts +2 -0
  854. package/dist/vendor/engine/runtime/ai/api/mistral-conversations.lazy.js +2 -0
  855. package/dist/vendor/engine/runtime/ai/api/openai-codex-responses.d.ts +30 -0
  856. package/dist/vendor/engine/runtime/ai/api/openai-codex-responses.js +1302 -0
  857. package/dist/vendor/engine/runtime/ai/api/openai-codex-responses.lazy.d.ts +2 -0
  858. package/dist/vendor/engine/runtime/ai/api/openai-codex-responses.lazy.js +2 -0
  859. package/dist/vendor/engine/runtime/ai/api/openai-completions.d.ts +25 -0
  860. package/dist/vendor/engine/runtime/ai/api/openai-completions.js +1339 -0
  861. package/dist/vendor/engine/runtime/ai/api/openai-completions.lazy.d.ts +2 -0
  862. package/dist/vendor/engine/runtime/ai/api/openai-completions.lazy.js +2 -0
  863. package/dist/vendor/engine/runtime/ai/api/openai-prompt-cache.d.ts +2 -0
  864. package/dist/vendor/engine/runtime/ai/api/openai-prompt-cache.js +9 -0
  865. package/dist/vendor/engine/runtime/ai/api/openai-responses-shared.d.ts +27 -0
  866. package/dist/vendor/engine/runtime/ai/api/openai-responses-shared.js +688 -0
  867. package/dist/vendor/engine/runtime/ai/api/openai-responses.d.ts +13 -0
  868. package/dist/vendor/engine/runtime/ai/api/openai-responses.js +292 -0
  869. package/dist/vendor/engine/runtime/ai/api/openai-responses.lazy.d.ts +2 -0
  870. package/dist/vendor/engine/runtime/ai/api/openai-responses.lazy.js +2 -0
  871. package/dist/vendor/engine/runtime/ai/api/openrouter-images.d.ts +2 -0
  872. package/dist/vendor/engine/runtime/ai/api/openrouter-images.js +131 -0
  873. package/dist/vendor/engine/runtime/ai/api/openrouter-images.lazy.d.ts +2 -0
  874. package/dist/vendor/engine/runtime/ai/api/openrouter-images.lazy.js +3 -0
  875. package/dist/vendor/engine/runtime/ai/api/pi-messages.d.ts +98 -0
  876. package/dist/vendor/engine/runtime/ai/api/pi-messages.js +312 -0
  877. package/dist/vendor/engine/runtime/ai/api/pi-messages.lazy.d.ts +2 -0
  878. package/dist/vendor/engine/runtime/ai/api/pi-messages.lazy.js +2 -0
  879. package/dist/vendor/engine/runtime/ai/api/simple-options.d.ts +14 -0
  880. package/dist/vendor/engine/runtime/ai/api/simple-options.js +65 -0
  881. package/dist/vendor/engine/runtime/ai/api/transform-messages.d.ts +7 -0
  882. package/dist/vendor/engine/runtime/ai/api/transform-messages.js +200 -0
  883. package/dist/vendor/engine/runtime/ai/auth/context.d.ts +6 -0
  884. package/dist/vendor/engine/runtime/ai/auth/context.js +33 -0
  885. package/dist/vendor/engine/runtime/ai/auth/credential-store.d.ts +16 -0
  886. package/dist/vendor/engine/runtime/ai/auth/credential-store.js +50 -0
  887. package/dist/vendor/engine/runtime/ai/auth/helpers.d.ts +21 -0
  888. package/dist/vendor/engine/runtime/ai/auth/helpers.js +52 -0
  889. package/dist/vendor/engine/runtime/ai/auth/oauth/load.d.ts +28 -0
  890. package/dist/vendor/engine/runtime/ai/auth/oauth/load.js +55 -0
  891. package/dist/vendor/engine/runtime/ai/auth/resolve.d.ts +26 -0
  892. package/dist/vendor/engine/runtime/ai/auth/resolve.js +131 -0
  893. package/dist/vendor/engine/runtime/ai/auth/types.d.ts +230 -0
  894. package/dist/vendor/engine/runtime/ai/auth/types.js +1 -0
  895. package/dist/vendor/engine/runtime/ai/compat/extension-oauth-types.d.ts +38 -0
  896. package/dist/vendor/engine/runtime/ai/compat/extension-oauth-types.js +1 -0
  897. package/dist/vendor/engine/runtime/ai/compat.d.ts +66 -0
  898. package/dist/vendor/engine/runtime/ai/compat.js +201 -0
  899. package/dist/vendor/engine/runtime/ai/env-api-keys.d.ts +20 -0
  900. package/dist/vendor/engine/runtime/ai/env-api-keys.js +148 -0
  901. package/dist/vendor/engine/runtime/ai/image-models.d.ts +9 -0
  902. package/dist/vendor/engine/runtime/ai/image-models.generated.d.ts +814 -0
  903. package/dist/vendor/engine/runtime/ai/image-models.generated.js +816 -0
  904. package/dist/vendor/engine/runtime/ai/image-models.js +22 -0
  905. package/dist/vendor/engine/runtime/ai/images-api-registry.d.ts +13 -0
  906. package/dist/vendor/engine/runtime/ai/images-api-registry.js +21 -0
  907. package/dist/vendor/engine/runtime/ai/images-models.d.ts +94 -0
  908. package/dist/vendor/engine/runtime/ai/images-models.js +142 -0
  909. package/dist/vendor/engine/runtime/ai/images.d.ts +3 -0
  910. package/dist/vendor/engine/runtime/ai/images.js +13 -0
  911. package/dist/vendor/engine/runtime/ai/index.d.ts +36 -0
  912. package/dist/vendor/engine/runtime/ai/index.js +23 -0
  913. package/dist/vendor/engine/runtime/ai/legacy-api-aliases.d.ts +41 -0
  914. package/dist/vendor/engine/runtime/ai/legacy-api-aliases.js +48 -0
  915. package/dist/vendor/engine/runtime/ai/model-catalog.d.ts +16 -0
  916. package/dist/vendor/engine/runtime/ai/model-catalog.js +3 -0
  917. package/dist/vendor/engine/runtime/ai/models-store.d.ts +28 -0
  918. package/dist/vendor/engine/runtime/ai/models-store.js +16 -0
  919. package/dist/vendor/engine/runtime/ai/models.d.ts +201 -0
  920. package/dist/vendor/engine/runtime/ai/models.generated.d.ts +84 -0
  921. package/dist/vendor/engine/runtime/ai/models.generated.js +86 -0
  922. package/dist/vendor/engine/runtime/ai/models.js +593 -0
  923. package/dist/vendor/engine/runtime/ai/oauth.d.ts +2 -0
  924. package/dist/vendor/engine/runtime/ai/oauth.js +1 -0
  925. package/dist/vendor/engine/runtime/ai/providers/all.d.ts +27 -0
  926. package/dist/vendor/engine/runtime/ai/providers/all.js +132 -0
  927. package/dist/vendor/engine/runtime/ai/providers/amazon-bedrock.d.ts +2 -0
  928. package/dist/vendor/engine/runtime/ai/providers/amazon-bedrock.js +92 -0
  929. package/dist/vendor/engine/runtime/ai/providers/amazon-bedrock.models.d.ts +3 -0
  930. package/dist/vendor/engine/runtime/ai/providers/amazon-bedrock.models.js +5 -0
  931. package/dist/vendor/engine/runtime/ai/providers/ant-ling.d.ts +2 -0
  932. package/dist/vendor/engine/runtime/ai/providers/ant-ling.js +14 -0
  933. package/dist/vendor/engine/runtime/ai/providers/ant-ling.models.d.ts +3 -0
  934. package/dist/vendor/engine/runtime/ai/providers/ant-ling.models.js +5 -0
  935. package/dist/vendor/engine/runtime/ai/providers/anthropic.d.ts +2 -0
  936. package/dist/vendor/engine/runtime/ai/providers/anthropic.js +55 -0
  937. package/dist/vendor/engine/runtime/ai/providers/anthropic.models.d.ts +3 -0
  938. package/dist/vendor/engine/runtime/ai/providers/anthropic.models.js +5 -0
  939. package/dist/vendor/engine/runtime/ai/providers/azure-openai-responses.d.ts +2 -0
  940. package/dist/vendor/engine/runtime/ai/providers/azure-openai-responses.js +13 -0
  941. package/dist/vendor/engine/runtime/ai/providers/azure-openai-responses.models.d.ts +3 -0
  942. package/dist/vendor/engine/runtime/ai/providers/azure-openai-responses.models.js +5 -0
  943. package/dist/vendor/engine/runtime/ai/providers/baseten.d.ts +2 -0
  944. package/dist/vendor/engine/runtime/ai/providers/baseten.js +14 -0
  945. package/dist/vendor/engine/runtime/ai/providers/baseten.models.d.ts +3 -0
  946. package/dist/vendor/engine/runtime/ai/providers/baseten.models.js +5 -0
  947. package/dist/vendor/engine/runtime/ai/providers/cerebras.d.ts +2 -0
  948. package/dist/vendor/engine/runtime/ai/providers/cerebras.js +14 -0
  949. package/dist/vendor/engine/runtime/ai/providers/cerebras.models.d.ts +3 -0
  950. package/dist/vendor/engine/runtime/ai/providers/cerebras.models.js +5 -0
  951. package/dist/vendor/engine/runtime/ai/providers/cloudflare-ai-gateway.d.ts +4 -0
  952. package/dist/vendor/engine/runtime/ai/providers/cloudflare-ai-gateway.js +24 -0
  953. package/dist/vendor/engine/runtime/ai/providers/cloudflare-ai-gateway.models.d.ts +3 -0
  954. package/dist/vendor/engine/runtime/ai/providers/cloudflare-ai-gateway.models.js +5 -0
  955. package/dist/vendor/engine/runtime/ai/providers/cloudflare-auth.d.ts +3 -0
  956. package/dist/vendor/engine/runtime/ai/providers/cloudflare-auth.js +85 -0
  957. package/dist/vendor/engine/runtime/ai/providers/cloudflare-stream.d.ts +7 -0
  958. package/dist/vendor/engine/runtime/ai/providers/cloudflare-stream.js +20 -0
  959. package/dist/vendor/engine/runtime/ai/providers/cloudflare-workers-ai.d.ts +2 -0
  960. package/dist/vendor/engine/runtime/ai/providers/cloudflare-workers-ai.js +14 -0
  961. package/dist/vendor/engine/runtime/ai/providers/cloudflare-workers-ai.models.d.ts +3 -0
  962. package/dist/vendor/engine/runtime/ai/providers/cloudflare-workers-ai.models.js +5 -0
  963. package/dist/vendor/engine/runtime/ai/providers/data/.manifest.json +1 -0
  964. package/dist/vendor/engine/runtime/ai/providers/data/amazon-bedrock.json +1 -0
  965. package/dist/vendor/engine/runtime/ai/providers/data/ant-ling.json +1 -0
  966. package/dist/vendor/engine/runtime/ai/providers/data/anthropic.json +1 -0
  967. package/dist/vendor/engine/runtime/ai/providers/data/azure-openai-responses.json +1 -0
  968. package/dist/vendor/engine/runtime/ai/providers/data/baseten.json +1 -0
  969. package/dist/vendor/engine/runtime/ai/providers/data/cerebras.json +1 -0
  970. package/dist/vendor/engine/runtime/ai/providers/data/cloudflare-ai-gateway.json +1 -0
  971. package/dist/vendor/engine/runtime/ai/providers/data/cloudflare-workers-ai.json +1 -0
  972. package/dist/vendor/engine/runtime/ai/providers/data/deepseek.json +1 -0
  973. package/dist/vendor/engine/runtime/ai/providers/data/fireworks.json +1 -0
  974. package/dist/vendor/engine/runtime/ai/providers/data/github-copilot.json +1 -0
  975. package/dist/vendor/engine/runtime/ai/providers/data/google-vertex.json +1 -0
  976. package/dist/vendor/engine/runtime/ai/providers/data/google.json +1 -0
  977. package/dist/vendor/engine/runtime/ai/providers/data/groq.json +1 -0
  978. package/dist/vendor/engine/runtime/ai/providers/data/huggingface.json +1 -0
  979. package/dist/vendor/engine/runtime/ai/providers/data/kimi-coding.json +1 -0
  980. package/dist/vendor/engine/runtime/ai/providers/data/meta.json +1 -0
  981. package/dist/vendor/engine/runtime/ai/providers/data/minimax-cn.json +1 -0
  982. package/dist/vendor/engine/runtime/ai/providers/data/minimax.json +1 -0
  983. package/dist/vendor/engine/runtime/ai/providers/data/mistral.json +1 -0
  984. package/dist/vendor/engine/runtime/ai/providers/data/moonshotai-cn.json +1 -0
  985. package/dist/vendor/engine/runtime/ai/providers/data/moonshotai.json +1 -0
  986. package/dist/vendor/engine/runtime/ai/providers/data/nvidia.json +1 -0
  987. package/dist/vendor/engine/runtime/ai/providers/data/openai-codex.json +1 -0
  988. package/dist/vendor/engine/runtime/ai/providers/data/openai.json +1 -0
  989. package/dist/vendor/engine/runtime/ai/providers/data/opencode-go.json +1 -0
  990. package/dist/vendor/engine/runtime/ai/providers/data/opencode.json +1 -0
  991. package/dist/vendor/engine/runtime/ai/providers/data/openrouter.json +1 -0
  992. package/dist/vendor/engine/runtime/ai/providers/data/qwen-token-plan-cn.json +1 -0
  993. package/dist/vendor/engine/runtime/ai/providers/data/qwen-token-plan-individual.json +1 -0
  994. package/dist/vendor/engine/runtime/ai/providers/data/qwen-token-plan.json +1 -0
  995. package/dist/vendor/engine/runtime/ai/providers/data/radius.json +1 -0
  996. package/dist/vendor/engine/runtime/ai/providers/data/together.json +1 -0
  997. package/dist/vendor/engine/runtime/ai/providers/data/vercel-ai-gateway.json +1 -0
  998. package/dist/vendor/engine/runtime/ai/providers/data/xai.json +1 -0
  999. package/dist/vendor/engine/runtime/ai/providers/data/xiaomi-token-plan-ams.json +1 -0
  1000. package/dist/vendor/engine/runtime/ai/providers/data/xiaomi-token-plan-cn.json +1 -0
  1001. package/dist/vendor/engine/runtime/ai/providers/data/xiaomi-token-plan-sgp.json +1 -0
  1002. package/dist/vendor/engine/runtime/ai/providers/data/xiaomi.json +1 -0
  1003. package/dist/vendor/engine/runtime/ai/providers/data/zai-coding-cn.json +1 -0
  1004. package/dist/vendor/engine/runtime/ai/providers/data/zai.json +1 -0
  1005. package/dist/vendor/engine/runtime/ai/providers/deepseek.d.ts +2 -0
  1006. package/dist/vendor/engine/runtime/ai/providers/deepseek.js +14 -0
  1007. package/dist/vendor/engine/runtime/ai/providers/deepseek.models.d.ts +3 -0
  1008. package/dist/vendor/engine/runtime/ai/providers/deepseek.models.js +5 -0
  1009. package/dist/vendor/engine/runtime/ai/providers/faux.d.ts +102 -0
  1010. package/dist/vendor/engine/runtime/ai/providers/faux.js +488 -0
  1011. package/dist/vendor/engine/runtime/ai/providers/fireworks.d.ts +2 -0
  1012. package/dist/vendor/engine/runtime/ai/providers/fireworks.js +18 -0
  1013. package/dist/vendor/engine/runtime/ai/providers/fireworks.models.d.ts +3 -0
  1014. package/dist/vendor/engine/runtime/ai/providers/fireworks.models.js +5 -0
  1015. package/dist/vendor/engine/runtime/ai/providers/github-copilot.d.ts +2 -0
  1016. package/dist/vendor/engine/runtime/ai/providers/github-copilot.js +34 -0
  1017. package/dist/vendor/engine/runtime/ai/providers/github-copilot.models.d.ts +3 -0
  1018. package/dist/vendor/engine/runtime/ai/providers/github-copilot.models.js +5 -0
  1019. package/dist/vendor/engine/runtime/ai/providers/google-vertex.d.ts +2 -0
  1020. package/dist/vendor/engine/runtime/ai/providers/google-vertex.js +93 -0
  1021. package/dist/vendor/engine/runtime/ai/providers/google-vertex.models.d.ts +3 -0
  1022. package/dist/vendor/engine/runtime/ai/providers/google-vertex.models.js +5 -0
  1023. package/dist/vendor/engine/runtime/ai/providers/google.d.ts +2 -0
  1024. package/dist/vendor/engine/runtime/ai/providers/google.js +14 -0
  1025. package/dist/vendor/engine/runtime/ai/providers/google.models.d.ts +3 -0
  1026. package/dist/vendor/engine/runtime/ai/providers/google.models.js +5 -0
  1027. package/dist/vendor/engine/runtime/ai/providers/groq.d.ts +2 -0
  1028. package/dist/vendor/engine/runtime/ai/providers/groq.js +14 -0
  1029. package/dist/vendor/engine/runtime/ai/providers/groq.models.d.ts +3 -0
  1030. package/dist/vendor/engine/runtime/ai/providers/groq.models.js +5 -0
  1031. package/dist/vendor/engine/runtime/ai/providers/huggingface.d.ts +2 -0
  1032. package/dist/vendor/engine/runtime/ai/providers/huggingface.js +14 -0
  1033. package/dist/vendor/engine/runtime/ai/providers/huggingface.models.d.ts +3 -0
  1034. package/dist/vendor/engine/runtime/ai/providers/huggingface.models.js +5 -0
  1035. package/dist/vendor/engine/runtime/ai/providers/images/register-builtins.d.ts +3 -0
  1036. package/dist/vendor/engine/runtime/ai/providers/images/register-builtins.js +33 -0
  1037. package/dist/vendor/engine/runtime/ai/providers/kimi-coding.d.ts +2 -0
  1038. package/dist/vendor/engine/runtime/ai/providers/kimi-coding.js +23 -0
  1039. package/dist/vendor/engine/runtime/ai/providers/kimi-coding.models.d.ts +3 -0
  1040. package/dist/vendor/engine/runtime/ai/providers/kimi-coding.models.js +5 -0
  1041. package/dist/vendor/engine/runtime/ai/providers/meta.d.ts +2 -0
  1042. package/dist/vendor/engine/runtime/ai/providers/meta.js +23 -0
  1043. package/dist/vendor/engine/runtime/ai/providers/meta.models.d.ts +3 -0
  1044. package/dist/vendor/engine/runtime/ai/providers/meta.models.js +5 -0
  1045. package/dist/vendor/engine/runtime/ai/providers/minimax-cn.d.ts +2 -0
  1046. package/dist/vendor/engine/runtime/ai/providers/minimax-cn.js +14 -0
  1047. package/dist/vendor/engine/runtime/ai/providers/minimax-cn.models.d.ts +3 -0
  1048. package/dist/vendor/engine/runtime/ai/providers/minimax-cn.models.js +5 -0
  1049. package/dist/vendor/engine/runtime/ai/providers/minimax.d.ts +2 -0
  1050. package/dist/vendor/engine/runtime/ai/providers/minimax.js +14 -0
  1051. package/dist/vendor/engine/runtime/ai/providers/minimax.models.d.ts +3 -0
  1052. package/dist/vendor/engine/runtime/ai/providers/minimax.models.js +5 -0
  1053. package/dist/vendor/engine/runtime/ai/providers/mistral.d.ts +2 -0
  1054. package/dist/vendor/engine/runtime/ai/providers/mistral.js +14 -0
  1055. package/dist/vendor/engine/runtime/ai/providers/mistral.models.d.ts +3 -0
  1056. package/dist/vendor/engine/runtime/ai/providers/mistral.models.js +5 -0
  1057. package/dist/vendor/engine/runtime/ai/providers/moonshotai-cn.d.ts +2 -0
  1058. package/dist/vendor/engine/runtime/ai/providers/moonshotai-cn.js +14 -0
  1059. package/dist/vendor/engine/runtime/ai/providers/moonshotai-cn.models.d.ts +3 -0
  1060. package/dist/vendor/engine/runtime/ai/providers/moonshotai-cn.models.js +5 -0
  1061. package/dist/vendor/engine/runtime/ai/providers/moonshotai.d.ts +2 -0
  1062. package/dist/vendor/engine/runtime/ai/providers/moonshotai.js +14 -0
  1063. package/dist/vendor/engine/runtime/ai/providers/moonshotai.models.d.ts +3 -0
  1064. package/dist/vendor/engine/runtime/ai/providers/moonshotai.models.js +5 -0
  1065. package/dist/vendor/engine/runtime/ai/providers/nvidia.d.ts +2 -0
  1066. package/dist/vendor/engine/runtime/ai/providers/nvidia.js +14 -0
  1067. package/dist/vendor/engine/runtime/ai/providers/nvidia.models.d.ts +3 -0
  1068. package/dist/vendor/engine/runtime/ai/providers/nvidia.models.js +5 -0
  1069. package/dist/vendor/engine/runtime/ai/providers/openai-codex.d.ts +2 -0
  1070. package/dist/vendor/engine/runtime/ai/providers/openai-codex.js +21 -0
  1071. package/dist/vendor/engine/runtime/ai/providers/openai-codex.models.d.ts +3 -0
  1072. package/dist/vendor/engine/runtime/ai/providers/openai-codex.models.js +5 -0
  1073. package/dist/vendor/engine/runtime/ai/providers/openai.d.ts +2 -0
  1074. package/dist/vendor/engine/runtime/ai/providers/openai.js +14 -0
  1075. package/dist/vendor/engine/runtime/ai/providers/openai.models.d.ts +3 -0
  1076. package/dist/vendor/engine/runtime/ai/providers/openai.models.js +5 -0
  1077. package/dist/vendor/engine/runtime/ai/providers/opencode-go.d.ts +2 -0
  1078. package/dist/vendor/engine/runtime/ai/providers/opencode-go.js +20 -0
  1079. package/dist/vendor/engine/runtime/ai/providers/opencode-go.models.d.ts +3 -0
  1080. package/dist/vendor/engine/runtime/ai/providers/opencode-go.models.js +5 -0
  1081. package/dist/vendor/engine/runtime/ai/providers/opencode-headers.d.ts +3 -0
  1082. package/dist/vendor/engine/runtime/ai/providers/opencode-headers.js +21 -0
  1083. package/dist/vendor/engine/runtime/ai/providers/opencode.d.ts +2 -0
  1084. package/dist/vendor/engine/runtime/ai/providers/opencode.js +22 -0
  1085. package/dist/vendor/engine/runtime/ai/providers/opencode.models.d.ts +3 -0
  1086. package/dist/vendor/engine/runtime/ai/providers/opencode.models.js +5 -0
  1087. package/dist/vendor/engine/runtime/ai/providers/openrouter-images.d.ts +2 -0
  1088. package/dist/vendor/engine/runtime/ai/providers/openrouter-images.js +21 -0
  1089. package/dist/vendor/engine/runtime/ai/providers/openrouter.d.ts +2 -0
  1090. package/dist/vendor/engine/runtime/ai/providers/openrouter.js +26 -0
  1091. package/dist/vendor/engine/runtime/ai/providers/openrouter.models.d.ts +3 -0
  1092. package/dist/vendor/engine/runtime/ai/providers/openrouter.models.js +5 -0
  1093. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-cn.d.ts +2 -0
  1094. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-cn.js +14 -0
  1095. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-cn.models.d.ts +3 -0
  1096. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-cn.models.js +5 -0
  1097. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-individual.d.ts +2 -0
  1098. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-individual.js +14 -0
  1099. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-individual.models.d.ts +3 -0
  1100. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan-individual.models.js +5 -0
  1101. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan.d.ts +2 -0
  1102. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan.js +14 -0
  1103. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan.models.d.ts +3 -0
  1104. package/dist/vendor/engine/runtime/ai/providers/qwen-token-plan.models.js +5 -0
  1105. package/dist/vendor/engine/runtime/ai/providers/radius-config.d.ts +25 -0
  1106. package/dist/vendor/engine/runtime/ai/providers/radius-config.js +62 -0
  1107. package/dist/vendor/engine/runtime/ai/providers/radius.d.ts +8 -0
  1108. package/dist/vendor/engine/runtime/ai/providers/radius.js +77 -0
  1109. package/dist/vendor/engine/runtime/ai/providers/radius.models.d.ts +3 -0
  1110. package/dist/vendor/engine/runtime/ai/providers/radius.models.js +5 -0
  1111. package/dist/vendor/engine/runtime/ai/providers/together.d.ts +2 -0
  1112. package/dist/vendor/engine/runtime/ai/providers/together.js +14 -0
  1113. package/dist/vendor/engine/runtime/ai/providers/together.models.d.ts +3 -0
  1114. package/dist/vendor/engine/runtime/ai/providers/together.models.js +5 -0
  1115. package/dist/vendor/engine/runtime/ai/providers/vercel-ai-gateway.d.ts +2 -0
  1116. package/dist/vendor/engine/runtime/ai/providers/vercel-ai-gateway.js +14 -0
  1117. package/dist/vendor/engine/runtime/ai/providers/vercel-ai-gateway.models.d.ts +3 -0
  1118. package/dist/vendor/engine/runtime/ai/providers/vercel-ai-gateway.models.js +5 -0
  1119. package/dist/vendor/engine/runtime/ai/providers/xai.d.ts +2 -0
  1120. package/dist/vendor/engine/runtime/ai/providers/xai.js +23 -0
  1121. package/dist/vendor/engine/runtime/ai/providers/xai.models.d.ts +3 -0
  1122. package/dist/vendor/engine/runtime/ai/providers/xai.models.js +5 -0
  1123. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-ams.d.ts +2 -0
  1124. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-ams.js +14 -0
  1125. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-ams.models.d.ts +3 -0
  1126. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-ams.models.js +5 -0
  1127. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-cn.d.ts +2 -0
  1128. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-cn.js +14 -0
  1129. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-cn.models.d.ts +3 -0
  1130. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-cn.models.js +5 -0
  1131. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-sgp.d.ts +2 -0
  1132. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-sgp.js +14 -0
  1133. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-sgp.models.d.ts +3 -0
  1134. package/dist/vendor/engine/runtime/ai/providers/xiaomi-token-plan-sgp.models.js +5 -0
  1135. package/dist/vendor/engine/runtime/ai/providers/xiaomi.d.ts +2 -0
  1136. package/dist/vendor/engine/runtime/ai/providers/xiaomi.js +14 -0
  1137. package/dist/vendor/engine/runtime/ai/providers/xiaomi.models.d.ts +3 -0
  1138. package/dist/vendor/engine/runtime/ai/providers/xiaomi.models.js +5 -0
  1139. package/dist/vendor/engine/runtime/ai/providers/zai-coding-cn.d.ts +2 -0
  1140. package/dist/vendor/engine/runtime/ai/providers/zai-coding-cn.js +14 -0
  1141. package/dist/vendor/engine/runtime/ai/providers/zai-coding-cn.models.d.ts +3 -0
  1142. package/dist/vendor/engine/runtime/ai/providers/zai-coding-cn.models.js +5 -0
  1143. package/dist/vendor/engine/runtime/ai/providers/zai.d.ts +2 -0
  1144. package/dist/vendor/engine/runtime/ai/providers/zai.js +14 -0
  1145. package/dist/vendor/engine/runtime/ai/providers/zai.models.d.ts +3 -0
  1146. package/dist/vendor/engine/runtime/ai/providers/zai.models.js +5 -0
  1147. package/dist/vendor/engine/runtime/ai/session-resources.d.ts +3 -0
  1148. package/dist/vendor/engine/runtime/ai/session-resources.js +21 -0
  1149. package/dist/vendor/engine/runtime/ai/types.d.ts +835 -0
  1150. package/dist/vendor/engine/runtime/ai/types.js +1 -0
  1151. package/dist/vendor/engine/runtime/ai/utils/abort-signals.d.ts +5 -0
  1152. package/dist/vendor/engine/runtime/ai/utils/abort-signals.js +33 -0
  1153. package/dist/vendor/engine/runtime/ai/utils/abort.d.ts +7 -0
  1154. package/dist/vendor/engine/runtime/ai/utils/abort.js +48 -0
  1155. package/dist/vendor/engine/runtime/ai/utils/assistant-message-frame.d.ts +76 -0
  1156. package/dist/vendor/engine/runtime/ai/utils/assistant-message-frame.js +424 -0
  1157. package/dist/vendor/engine/runtime/ai/utils/diagnostics.d.ts +19 -0
  1158. package/dist/vendor/engine/runtime/ai/utils/diagnostics.js +24 -0
  1159. package/dist/vendor/engine/runtime/ai/utils/error-body.d.ts +24 -0
  1160. package/dist/vendor/engine/runtime/ai/utils/error-body.js +132 -0
  1161. package/dist/vendor/engine/runtime/ai/utils/estimate.d.ts +16 -0
  1162. package/dist/vendor/engine/runtime/ai/utils/estimate.js +94 -0
  1163. package/dist/vendor/engine/runtime/ai/utils/event-stream.d.ts +20 -0
  1164. package/dist/vendor/engine/runtime/ai/utils/event-stream.js +98 -0
  1165. package/dist/vendor/engine/runtime/ai/utils/hash.d.ts +2 -0
  1166. package/dist/vendor/engine/runtime/ai/utils/hash.js +13 -0
  1167. package/dist/vendor/engine/runtime/ai/utils/headers.d.ts +3 -0
  1168. package/dist/vendor/engine/runtime/ai/utils/headers.js +17 -0
  1169. package/dist/vendor/engine/runtime/ai/utils/json-parse.d.ts +15 -0
  1170. package/dist/vendor/engine/runtime/ai/utils/json-parse.js +112 -0
  1171. package/dist/vendor/engine/runtime/ai/utils/node-http-proxy.d.ts +3 -0
  1172. package/dist/vendor/engine/runtime/ai/utils/node-http-proxy.js +132 -0
  1173. package/dist/vendor/engine/runtime/ai/utils/overflow.d.ts +68 -0
  1174. package/dist/vendor/engine/runtime/ai/utils/overflow.js +177 -0
  1175. package/dist/vendor/engine/runtime/ai/utils/pi-user-agent.d.ts +1 -0
  1176. package/dist/vendor/engine/runtime/ai/utils/pi-user-agent.js +11 -0
  1177. package/dist/vendor/engine/runtime/ai/utils/provider-env.d.ts +6 -0
  1178. package/dist/vendor/engine/runtime/ai/utils/provider-env.js +43 -0
  1179. package/dist/vendor/engine/runtime/ai/utils/provider-retry.d.ts +15 -0
  1180. package/dist/vendor/engine/runtime/ai/utils/provider-retry.js +93 -0
  1181. package/dist/vendor/engine/runtime/ai/utils/retry.d.ts +57 -0
  1182. package/dist/vendor/engine/runtime/ai/utils/retry.js +182 -0
  1183. package/dist/vendor/engine/runtime/ai/utils/sanitize-unicode.d.ts +21 -0
  1184. package/dist/vendor/engine/runtime/ai/utils/sanitize-unicode.js +25 -0
  1185. package/dist/vendor/engine/runtime/ai/utils/text.d.ts +13 -0
  1186. package/dist/vendor/engine/runtime/ai/utils/text.js +35 -0
  1187. package/dist/vendor/engine/runtime/ai/utils/transcript.d.ts +83 -0
  1188. package/dist/vendor/engine/runtime/ai/utils/transcript.js +203 -0
  1189. package/dist/vendor/engine/runtime/ai/utils/typebox-helpers.d.ts +16 -0
  1190. package/dist/vendor/engine/runtime/ai/utils/typebox-helpers.js +20 -0
  1191. package/dist/vendor/engine/runtime/ai/utils/uuid.d.ts +2 -0
  1192. package/dist/vendor/engine/runtime/ai/utils/uuid.js +41 -0
  1193. package/dist/vendor/engine/runtime/ai/utils/validation.d.ts +17 -0
  1194. package/dist/vendor/engine/runtime/ai/utils/validation.js +308 -0
  1195. package/dist/vendor/engine/runtime/chord/api.d.ts +14 -0
  1196. package/dist/vendor/engine/runtime/chord/api.js +71 -0
  1197. package/dist/vendor/engine/runtime/chord/context/index.d.ts +23 -0
  1198. package/dist/vendor/engine/runtime/chord/context/index.js +96 -0
  1199. package/dist/vendor/engine/runtime/chord/delta/index.d.ts +118 -0
  1200. package/dist/vendor/engine/runtime/chord/delta/index.js +1903 -0
  1201. package/dist/vendor/engine/runtime/chord/facets/host.d.ts +11 -0
  1202. package/dist/vendor/engine/runtime/chord/facets/host.js +762 -0
  1203. package/dist/vendor/engine/runtime/chord/facets/loader.d.ts +2 -0
  1204. package/dist/vendor/engine/runtime/chord/facets/loader.js +4 -0
  1205. package/dist/vendor/engine/runtime/chord/index.d.ts +10 -0
  1206. package/dist/vendor/engine/runtime/chord/index.js +9 -0
  1207. package/dist/vendor/engine/runtime/chord/json.d.ts +3 -0
  1208. package/dist/vendor/engine/runtime/chord/json.js +56 -0
  1209. package/dist/vendor/engine/runtime/chord/services/consumer.d.ts +10 -0
  1210. package/dist/vendor/engine/runtime/chord/services/consumer.js +536 -0
  1211. package/dist/vendor/engine/runtime/chord/services/errors.d.ts +7 -0
  1212. package/dist/vendor/engine/runtime/chord/services/errors.js +21 -0
  1213. package/dist/vendor/engine/runtime/chord/services/handle.d.ts +14 -0
  1214. package/dist/vendor/engine/runtime/chord/services/handle.js +100 -0
  1215. package/dist/vendor/engine/runtime/chord/services/instances.d.ts +24 -0
  1216. package/dist/vendor/engine/runtime/chord/services/instances.js +136 -0
  1217. package/dist/vendor/engine/runtime/chord/services/loopback.d.ts +4 -0
  1218. package/dist/vendor/engine/runtime/chord/services/loopback.js +14 -0
  1219. package/dist/vendor/engine/runtime/chord/services/provider.d.ts +36 -0
  1220. package/dist/vendor/engine/runtime/chord/services/provider.js +471 -0
  1221. package/dist/vendor/engine/runtime/chord/services/state-codec.d.ts +14 -0
  1222. package/dist/vendor/engine/runtime/chord/services/state-codec.js +114 -0
  1223. package/dist/vendor/engine/runtime/chord/services/state-internals.d.ts +10 -0
  1224. package/dist/vendor/engine/runtime/chord/services/state-internals.js +9 -0
  1225. package/dist/vendor/engine/runtime/chord/services/state.d.ts +22 -0
  1226. package/dist/vendor/engine/runtime/chord/services/state.js +123 -0
  1227. package/dist/vendor/engine/runtime/chord/services/wire.d.ts +59 -0
  1228. package/dist/vendor/engine/runtime/chord/services/wire.js +172 -0
  1229. package/dist/vendor/engine/runtime/chord/types.d.ts +202 -0
  1230. package/dist/vendor/engine/runtime/chord/types.js +1 -0
  1231. package/dist/vendor/engine/runtime/coding-agent/cli/args.d.ts +60 -0
  1232. package/dist/vendor/engine/runtime/coding-agent/cli/args.js +439 -0
  1233. package/dist/vendor/engine/runtime/coding-agent/cli/auth-check.d.ts +18 -0
  1234. package/dist/vendor/engine/runtime/coding-agent/cli/auth-check.js +49 -0
  1235. package/dist/vendor/engine/runtime/coding-agent/cli/auth-command.d.ts +23 -0
  1236. package/dist/vendor/engine/runtime/coding-agent/cli/auth-command.js +102 -0
  1237. package/dist/vendor/engine/runtime/coding-agent/cli/config-selector.d.ts +15 -0
  1238. package/dist/vendor/engine/runtime/coding-agent/cli/config-selector.js +31 -0
  1239. package/dist/vendor/engine/runtime/coding-agent/cli/credential-print.d.ts +12 -0
  1240. package/dist/vendor/engine/runtime/coding-agent/cli/credential-print.js +75 -0
  1241. package/dist/vendor/engine/runtime/coding-agent/cli/file-processor.d.ts +14 -0
  1242. package/dist/vendor/engine/runtime/coding-agent/cli/file-processor.js +70 -0
  1243. package/dist/vendor/engine/runtime/coding-agent/cli/initial-message.d.ts +17 -0
  1244. package/dist/vendor/engine/runtime/coding-agent/cli/initial-message.js +21 -0
  1245. package/dist/vendor/engine/runtime/coding-agent/cli/list-models.d.ts +8 -0
  1246. package/dist/vendor/engine/runtime/coding-agent/cli/list-models.js +97 -0
  1247. package/dist/vendor/engine/runtime/coding-agent/cli/project-trust.d.ts +9 -0
  1248. package/dist/vendor/engine/runtime/coding-agent/cli/project-trust.js +47 -0
  1249. package/dist/vendor/engine/runtime/coding-agent/cli/session-picker.d.ts +9 -0
  1250. package/dist/vendor/engine/runtime/coding-agent/cli/session-picker.js +35 -0
  1251. package/dist/vendor/engine/runtime/coding-agent/cli/startup-ui.d.ts +19 -0
  1252. package/dist/vendor/engine/runtime/coding-agent/cli/startup-ui.js +184 -0
  1253. package/dist/vendor/engine/runtime/coding-agent/config.d.ts +97 -0
  1254. package/dist/vendor/engine/runtime/coding-agent/config.js +463 -0
  1255. package/dist/vendor/engine/runtime/coding-agent/core/agent-session-runtime.d.ts +118 -0
  1256. package/dist/vendor/engine/runtime/coding-agent/core/agent-session-runtime.js +316 -0
  1257. package/dist/vendor/engine/runtime/coding-agent/core/agent-session-services.d.ts +85 -0
  1258. package/dist/vendor/engine/runtime/coding-agent/core/agent-session-services.js +133 -0
  1259. package/dist/vendor/engine/runtime/coding-agent/core/agent-session.d.ts +771 -0
  1260. package/dist/vendor/engine/runtime/coding-agent/core/agent-session.js +2990 -0
  1261. package/dist/vendor/engine/runtime/coding-agent/core/auth-guidance.d.ts +4 -0
  1262. package/dist/vendor/engine/runtime/coding-agent/core/auth-guidance.js +20 -0
  1263. package/dist/vendor/engine/runtime/coding-agent/core/auth-storage.d.ts +71 -0
  1264. package/dist/vendor/engine/runtime/coding-agent/core/auth-storage.js +425 -0
  1265. package/dist/vendor/engine/runtime/coding-agent/core/bash-executor.d.ts +31 -0
  1266. package/dist/vendor/engine/runtime/coding-agent/core/bash-executor.js +110 -0
  1267. package/dist/vendor/engine/runtime/coding-agent/core/bug-report-upload.d.ts +11 -0
  1268. package/dist/vendor/engine/runtime/coding-agent/core/bug-report-upload.js +21 -0
  1269. package/dist/vendor/engine/runtime/coding-agent/core/bug-report.d.ts +175 -0
  1270. package/dist/vendor/engine/runtime/coding-agent/core/bug-report.js +291 -0
  1271. package/dist/vendor/engine/runtime/coding-agent/core/cache-stats.d.ts +48 -0
  1272. package/dist/vendor/engine/runtime/coding-agent/core/cache-stats.js +111 -0
  1273. package/dist/vendor/engine/runtime/coding-agent/core/cache-warmer.d.ts +102 -0
  1274. package/dist/vendor/engine/runtime/coding-agent/core/cache-warmer.js +355 -0
  1275. package/dist/vendor/engine/runtime/coding-agent/core/compaction/branch-summarization.d.ts +97 -0
  1276. package/dist/vendor/engine/runtime/coding-agent/core/compaction/branch-summarization.js +250 -0
  1277. package/dist/vendor/engine/runtime/coding-agent/core/compaction/compaction.d.ts +142 -0
  1278. package/dist/vendor/engine/runtime/coding-agent/core/compaction/compaction.js +666 -0
  1279. package/dist/vendor/engine/runtime/coding-agent/core/compaction/index.d.ts +6 -0
  1280. package/dist/vendor/engine/runtime/coding-agent/core/compaction/index.js +6 -0
  1281. package/dist/vendor/engine/runtime/coding-agent/core/compaction/utils.d.ts +37 -0
  1282. package/dist/vendor/engine/runtime/coding-agent/core/compaction/utils.js +141 -0
  1283. package/dist/vendor/engine/runtime/coding-agent/core/crash-log.d.ts +26 -0
  1284. package/dist/vendor/engine/runtime/coding-agent/core/crash-log.js +138 -0
  1285. package/dist/vendor/engine/runtime/coding-agent/core/defaults.d.ts +3 -0
  1286. package/dist/vendor/engine/runtime/coding-agent/core/defaults.js +10 -0
  1287. package/dist/vendor/engine/runtime/coding-agent/core/diagnostics.d.ts +14 -0
  1288. package/dist/vendor/engine/runtime/coding-agent/core/diagnostics.js +1 -0
  1289. package/dist/vendor/engine/runtime/coding-agent/core/event-bus.d.ts +8 -0
  1290. package/dist/vendor/engine/runtime/coding-agent/core/event-bus.js +24 -0
  1291. package/dist/vendor/engine/runtime/coding-agent/core/exec.d.ts +28 -0
  1292. package/dist/vendor/engine/runtime/coding-agent/core/exec.js +74 -0
  1293. package/dist/vendor/engine/runtime/coding-agent/core/experimental.d.ts +1 -0
  1294. package/dist/vendor/engine/runtime/coding-agent/core/experimental.js +3 -0
  1295. package/dist/vendor/engine/runtime/coding-agent/core/export-html/ansi-to-html.d.ts +21 -0
  1296. package/dist/vendor/engine/runtime/coding-agent/core/export-html/ansi-to-html.js +248 -0
  1297. package/dist/vendor/engine/runtime/coding-agent/core/export-html/index.d.ts +36 -0
  1298. package/dist/vendor/engine/runtime/coding-agent/core/export-html/index.js +225 -0
  1299. package/dist/vendor/engine/runtime/coding-agent/core/export-html/template.css +1066 -0
  1300. package/dist/vendor/engine/runtime/coding-agent/core/export-html/template.html +55 -0
  1301. package/dist/vendor/engine/runtime/coding-agent/core/export-html/template.js +1864 -0
  1302. package/dist/vendor/engine/runtime/coding-agent/core/export-html/tool-renderer.d.ts +33 -0
  1303. package/dist/vendor/engine/runtime/coding-agent/core/export-html/tool-renderer.js +107 -0
  1304. package/dist/vendor/engine/runtime/coding-agent/core/export-html/vendor/highlight.min.js +1213 -0
  1305. package/dist/vendor/engine/runtime/coding-agent/core/export-html/vendor/marked.min.js +78 -0
  1306. package/dist/vendor/engine/runtime/coding-agent/core/extensions/index.d.ts +11 -0
  1307. package/dist/vendor/engine/runtime/coding-agent/core/extensions/index.js +8 -0
  1308. package/dist/vendor/engine/runtime/coding-agent/core/extensions/jiti-loader.d.ts +1 -0
  1309. package/dist/vendor/engine/runtime/coding-agent/core/extensions/jiti-loader.js +3 -0
  1310. package/dist/vendor/engine/runtime/coding-agent/core/extensions/jiti-static-loader.d.ts +1 -0
  1311. package/dist/vendor/engine/runtime/coding-agent/core/extensions/jiti-static-loader.js +3 -0
  1312. package/dist/vendor/engine/runtime/coding-agent/core/extensions/loader.d.ts +22 -0
  1313. package/dist/vendor/engine/runtime/coding-agent/core/extensions/loader.js +633 -0
  1314. package/dist/vendor/engine/runtime/coding-agent/core/extensions/runner.d.ts +180 -0
  1315. package/dist/vendor/engine/runtime/coding-agent/core/extensions/runner.js +1028 -0
  1316. package/dist/vendor/engine/runtime/coding-agent/core/extensions/types.d.ts +1362 -0
  1317. package/dist/vendor/engine/runtime/coding-agent/core/extensions/types.js +47 -0
  1318. package/dist/vendor/engine/runtime/coding-agent/core/extensions/virtual-modules.d.ts +2 -0
  1319. package/dist/vendor/engine/runtime/coding-agent/core/extensions/virtual-modules.js +37 -0
  1320. package/dist/vendor/engine/runtime/coding-agent/core/extensions/wrapper.d.ts +19 -0
  1321. package/dist/vendor/engine/runtime/coding-agent/core/extensions/wrapper.js +21 -0
  1322. package/dist/vendor/engine/runtime/coding-agent/core/footer-data-provider.d.ts +63 -0
  1323. package/dist/vendor/engine/runtime/coding-agent/core/footer-data-provider.js +337 -0
  1324. package/dist/vendor/engine/runtime/coding-agent/core/http-dispatcher.d.ts +21 -0
  1325. package/dist/vendor/engine/runtime/coding-agent/core/http-dispatcher.js +97 -0
  1326. package/dist/vendor/engine/runtime/coding-agent/core/keybindings.d.ts +427 -0
  1327. package/dist/vendor/engine/runtime/coding-agent/core/keybindings.js +320 -0
  1328. package/dist/vendor/engine/runtime/coding-agent/core/messages.d.ts +76 -0
  1329. package/dist/vendor/engine/runtime/coding-agent/core/messages.js +123 -0
  1330. package/dist/vendor/engine/runtime/coding-agent/core/model-config.d.ts +723 -0
  1331. package/dist/vendor/engine/runtime/coding-agent/core/model-config.js +281 -0
  1332. package/dist/vendor/engine/runtime/coding-agent/core/model-registry.d.ts +48 -0
  1333. package/dist/vendor/engine/runtime/coding-agent/core/model-registry.js +114 -0
  1334. package/dist/vendor/engine/runtime/coding-agent/core/model-resolver.d.ts +123 -0
  1335. package/dist/vendor/engine/runtime/coding-agent/core/model-resolver.js +589 -0
  1336. package/dist/vendor/engine/runtime/coding-agent/core/model-runtime.d.ts +100 -0
  1337. package/dist/vendor/engine/runtime/coding-agent/core/model-runtime.js +603 -0
  1338. package/dist/vendor/engine/runtime/coding-agent/core/models-store.d.ts +21 -0
  1339. package/dist/vendor/engine/runtime/coding-agent/core/models-store.js +114 -0
  1340. package/dist/vendor/engine/runtime/coding-agent/core/output-guard.d.ts +6 -0
  1341. package/dist/vendor/engine/runtime/coding-agent/core/output-guard.js +88 -0
  1342. package/dist/vendor/engine/runtime/coding-agent/core/package-manager.d.ts +212 -0
  1343. package/dist/vendor/engine/runtime/coding-agent/core/package-manager.js +2176 -0
  1344. package/dist/vendor/engine/runtime/coding-agent/core/pi-manifest.d.ts +7 -0
  1345. package/dist/vendor/engine/runtime/coding-agent/core/pi-manifest.js +25 -0
  1346. package/dist/vendor/engine/runtime/coding-agent/core/project-trust.d.ts +14 -0
  1347. package/dist/vendor/engine/runtime/coding-agent/core/project-trust.js +58 -0
  1348. package/dist/vendor/engine/runtime/coding-agent/core/prompt-templates.d.ts +53 -0
  1349. package/dist/vendor/engine/runtime/coding-agent/core/prompt-templates.js +235 -0
  1350. package/dist/vendor/engine/runtime/coding-agent/core/provider-attribution.d.ts +3 -0
  1351. package/dist/vendor/engine/runtime/coding-agent/core/provider-attribution.js +71 -0
  1352. package/dist/vendor/engine/runtime/coding-agent/core/provider-composer.d.ts +59 -0
  1353. package/dist/vendor/engine/runtime/coding-agent/core/provider-composer.js +422 -0
  1354. package/dist/vendor/engine/runtime/coding-agent/core/radius.d.ts +4 -0
  1355. package/dist/vendor/engine/runtime/coding-agent/core/radius.js +7 -0
  1356. package/dist/vendor/engine/runtime/coding-agent/core/remote-catalog-provider.d.ts +4 -0
  1357. package/dist/vendor/engine/runtime/coding-agent/core/remote-catalog-provider.js +121 -0
  1358. package/dist/vendor/engine/runtime/coding-agent/core/resolve-config-value.d.ts +29 -0
  1359. package/dist/vendor/engine/runtime/coding-agent/core/resolve-config-value.js +246 -0
  1360. package/dist/vendor/engine/runtime/coding-agent/core/resource-loader.d.ts +220 -0
  1361. package/dist/vendor/engine/runtime/coding-agent/core/resource-loader.js +874 -0
  1362. package/dist/vendor/engine/runtime/coding-agent/core/runtime-credentials.d.ts +14 -0
  1363. package/dist/vendor/engine/runtime/coding-agent/core/runtime-credentials.js +38 -0
  1364. package/dist/vendor/engine/runtime/coding-agent/core/sdk.d.ts +107 -0
  1365. package/dist/vendor/engine/runtime/coding-agent/core/sdk.js +296 -0
  1366. package/dist/vendor/engine/runtime/coding-agent/core/session-cwd.d.ts +18 -0
  1367. package/dist/vendor/engine/runtime/coding-agent/core/session-cwd.js +37 -0
  1368. package/dist/vendor/engine/runtime/coding-agent/core/session-export.d.ts +7 -0
  1369. package/dist/vendor/engine/runtime/coding-agent/core/session-export.js +32 -0
  1370. package/dist/vendor/engine/runtime/coding-agent/core/session-manager.d.ts +379 -0
  1371. package/dist/vendor/engine/runtime/coding-agent/core/session-manager.js +1432 -0
  1372. package/dist/vendor/engine/runtime/coding-agent/core/settings-diagnostics.d.ts +8 -0
  1373. package/dist/vendor/engine/runtime/coding-agent/core/settings-diagnostics.js +20 -0
  1374. package/dist/vendor/engine/runtime/coding-agent/core/settings-manager.d.ts +346 -0
  1375. package/dist/vendor/engine/runtime/coding-agent/core/settings-manager.js +1032 -0
  1376. package/dist/vendor/engine/runtime/coding-agent/core/skills.d.ts +59 -0
  1377. package/dist/vendor/engine/runtime/coding-agent/core/skills.js +406 -0
  1378. package/dist/vendor/engine/runtime/coding-agent/core/slash-commands.d.ts +14 -0
  1379. package/dist/vendor/engine/runtime/coding-agent/core/slash-commands.js +27 -0
  1380. package/dist/vendor/engine/runtime/coding-agent/core/source-info.d.ts +17 -0
  1381. package/dist/vendor/engine/runtime/coding-agent/core/source-info.js +18 -0
  1382. package/dist/vendor/engine/runtime/coding-agent/core/system-prompt.d.ts +70 -0
  1383. package/dist/vendor/engine/runtime/coding-agent/core/system-prompt.js +146 -0
  1384. package/dist/vendor/engine/runtime/coding-agent/core/telemetry.d.ts +2 -0
  1385. package/dist/vendor/engine/runtime/coding-agent/core/telemetry.js +8 -0
  1386. package/dist/vendor/engine/runtime/coding-agent/core/timings.d.ts +9 -0
  1387. package/dist/vendor/engine/runtime/coding-agent/core/timings.js +40 -0
  1388. package/dist/vendor/engine/runtime/coding-agent/core/tools/bash.d.ts +89 -0
  1389. package/dist/vendor/engine/runtime/coding-agent/core/tools/bash.js +303 -0
  1390. package/dist/vendor/engine/runtime/coding-agent/core/tools/edit-diff.d.ts +100 -0
  1391. package/dist/vendor/engine/runtime/coding-agent/core/tools/edit-diff.js +420 -0
  1392. package/dist/vendor/engine/runtime/coding-agent/core/tools/edit.d.ts +43 -0
  1393. package/dist/vendor/engine/runtime/coding-agent/core/tools/edit.js +146 -0
  1394. package/dist/vendor/engine/runtime/coding-agent/core/tools/file-mutation-queue.d.ts +5 -0
  1395. package/dist/vendor/engine/runtime/coding-agent/core/tools/file-mutation-queue.js +51 -0
  1396. package/dist/vendor/engine/runtime/coding-agent/core/tools/find.d.ts +41 -0
  1397. package/dist/vendor/engine/runtime/coding-agent/core/tools/find.js +250 -0
  1398. package/dist/vendor/engine/runtime/coding-agent/core/tools/grep.d.ts +40 -0
  1399. package/dist/vendor/engine/runtime/coding-agent/core/tools/grep.js +251 -0
  1400. package/dist/vendor/engine/runtime/coding-agent/core/tools/index.d.ts +42 -0
  1401. package/dist/vendor/engine/runtime/coding-agent/core/tools/index.js +128 -0
  1402. package/dist/vendor/engine/runtime/coding-agent/core/tools/ls.d.ts +40 -0
  1403. package/dist/vendor/engine/runtime/coding-agent/core/tools/ls.js +125 -0
  1404. package/dist/vendor/engine/runtime/coding-agent/core/tools/output-accumulator.d.ts +54 -0
  1405. package/dist/vendor/engine/runtime/coding-agent/core/tools/output-accumulator.js +189 -0
  1406. package/dist/vendor/engine/runtime/coding-agent/core/tools/path-utils.d.ts +9 -0
  1407. package/dist/vendor/engine/runtime/coding-agent/core/tools/path-utils.js +98 -0
  1408. package/dist/vendor/engine/runtime/coding-agent/core/tools/powershell.d.ts +15 -0
  1409. package/dist/vendor/engine/runtime/coding-agent/core/tools/powershell.js +38 -0
  1410. package/dist/vendor/engine/runtime/coding-agent/core/tools/read.d.ts +41 -0
  1411. package/dist/vendor/engine/runtime/coding-agent/core/tools/read.js +168 -0
  1412. package/dist/vendor/engine/runtime/coding-agent/core/tools/render-utils.d.ts +23 -0
  1413. package/dist/vendor/engine/runtime/coding-agent/core/tools/render-utils.js +64 -0
  1414. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/bash.d.ts +11 -0
  1415. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/bash.js +137 -0
  1416. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/edit.d.ts +22 -0
  1417. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/edit.js +166 -0
  1418. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/find.d.ts +9 -0
  1419. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/find.js +63 -0
  1420. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/grep.d.ts +9 -0
  1421. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/grep.js +68 -0
  1422. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/index.d.ts +27 -0
  1423. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/index.js +46 -0
  1424. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/ls.d.ts +9 -0
  1425. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/ls.js +57 -0
  1426. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/read.d.ts +10 -0
  1427. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/read.js +128 -0
  1428. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/write.d.ts +9 -0
  1429. package/dist/vendor/engine/runtime/coding-agent/core/tools/renderers/write.js +152 -0
  1430. package/dist/vendor/engine/runtime/coding-agent/core/tools/tool-definition-wrapper.d.ts +13 -0
  1431. package/dist/vendor/engine/runtime/coding-agent/core/tools/tool-definition-wrapper.js +35 -0
  1432. package/dist/vendor/engine/runtime/coding-agent/core/tools/truncate.d.ts +69 -0
  1433. package/dist/vendor/engine/runtime/coding-agent/core/tools/truncate.js +214 -0
  1434. package/dist/vendor/engine/runtime/coding-agent/core/tools/write.d.ts +29 -0
  1435. package/dist/vendor/engine/runtime/coding-agent/core/tools/write.js +60 -0
  1436. package/dist/vendor/engine/runtime/coding-agent/core/trust-manager.d.ts +35 -0
  1437. package/dist/vendor/engine/runtime/coding-agent/core/trust-manager.js +202 -0
  1438. package/dist/vendor/engine/runtime/coding-agent/core/usage-totals.d.ts +18 -0
  1439. package/dist/vendor/engine/runtime/coding-agent/core/usage-totals.js +55 -0
  1440. package/dist/vendor/engine/runtime/coding-agent/extensions/index.d.ts +2 -0
  1441. package/dist/vendor/engine/runtime/coding-agent/extensions/index.js +2 -0
  1442. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/client.d.ts +68 -0
  1443. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/client.js +312 -0
  1444. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/huggingface.d.ts +22 -0
  1445. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/huggingface.js +140 -0
  1446. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/index.d.ts +2 -0
  1447. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/index.js +218 -0
  1448. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/provider.d.ts +11 -0
  1449. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/provider.js +160 -0
  1450. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/ui.d.ts +41 -0
  1451. package/dist/vendor/engine/runtime/coding-agent/extensions/llama/ui.js +415 -0
  1452. package/dist/vendor/engine/runtime/coding-agent/index.d.ts +36 -0
  1453. package/dist/vendor/engine/runtime/coding-agent/index.js +47 -0
  1454. package/dist/vendor/engine/runtime/coding-agent/main.d.ts +15 -0
  1455. package/dist/vendor/engine/runtime/coding-agent/main.js +808 -0
  1456. package/dist/vendor/engine/runtime/coding-agent/migrations.d.ts +32 -0
  1457. package/dist/vendor/engine/runtime/coding-agent/migrations.js +281 -0
  1458. package/dist/vendor/engine/runtime/coding-agent/modes/index.d.ts +9 -0
  1459. package/dist/vendor/engine/runtime/coding-agent/modes/index.js +7 -0
  1460. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/bug-report.d.ts +15 -0
  1461. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/bug-report.js +209 -0
  1462. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/chat-viewport.d.ts +19 -0
  1463. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/chat-viewport.js +27 -0
  1464. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/armin.d.ts +33 -0
  1465. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/armin.js +332 -0
  1466. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/assistant-message.d.ts +25 -0
  1467. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/assistant-message.js +157 -0
  1468. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/bash-execution.d.ts +33 -0
  1469. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/bash-execution.js +174 -0
  1470. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/bordered-loader.d.ts +15 -0
  1471. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/bordered-loader.js +53 -0
  1472. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/branch-summary-message.d.ts +15 -0
  1473. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/branch-summary-message.js +50 -0
  1474. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/compaction-summary-message.d.ts +15 -0
  1475. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/compaction-summary-message.js +51 -0
  1476. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/config-selector.d.ts +101 -0
  1477. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/config-selector.js +760 -0
  1478. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/countdown-timer.d.ts +13 -0
  1479. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/countdown-timer.js +32 -0
  1480. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-editor.d.ts +29 -0
  1481. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-editor.js +114 -0
  1482. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-entry.d.ts +18 -0
  1483. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-entry.js +51 -0
  1484. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-message.d.ts +21 -0
  1485. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/custom-message.js +86 -0
  1486. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/daxnuts.d.ts +22 -0
  1487. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/daxnuts.js +139 -0
  1488. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/diff.d.ts +11 -0
  1489. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/diff.js +132 -0
  1490. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/dynamic-border.d.ts +14 -0
  1491. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/dynamic-border.js +20 -0
  1492. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/earendil-announcement.d.ts +4 -0
  1493. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/earendil-announcement.js +39 -0
  1494. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-editor.d.ts +23 -0
  1495. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-editor.js +102 -0
  1496. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-input.d.ts +24 -0
  1497. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-input.js +66 -0
  1498. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-selector.d.ts +26 -0
  1499. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/extension-selector.js +86 -0
  1500. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/first-time-setup.d.ts +24 -0
  1501. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/first-time-setup.js +102 -0
  1502. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/footer.d.ts +31 -0
  1503. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/footer.js +224 -0
  1504. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/index.d.ts +33 -0
  1505. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/index.js +34 -0
  1506. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/keybinding-hints.d.ts +12 -0
  1507. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/keybinding-hints.js +35 -0
  1508. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/login-dialog.d.ts +51 -0
  1509. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/login-dialog.js +187 -0
  1510. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/markdown-transform.d.ts +2 -0
  1511. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/markdown-transform.js +18 -0
  1512. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/mermaid.d.ts +10 -0
  1513. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/mermaid.js +74 -0
  1514. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/model-selector.d.ts +59 -0
  1515. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/model-selector.js +360 -0
  1516. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/oauth-selector.d.ts +32 -0
  1517. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/oauth-selector.js +162 -0
  1518. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/scoped-models-selector.d.ts +45 -0
  1519. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/scoped-models-selector.js +325 -0
  1520. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/session-selector-search.d.ts +22 -0
  1521. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/session-selector-search.js +154 -0
  1522. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/session-selector.d.ts +94 -0
  1523. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/session-selector.js +892 -0
  1524. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/settings-selector.d.ts +93 -0
  1525. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/settings-selector.js +719 -0
  1526. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/settings-submenu.d.ts +71 -0
  1527. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/settings-submenu.js +164 -0
  1528. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/show-images-selector.d.ts +9 -0
  1529. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/show-images-selector.js +38 -0
  1530. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/skill-invocation-message.d.ts +16 -0
  1531. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/skill-invocation-message.js +53 -0
  1532. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/status-indicator.d.ts +29 -0
  1533. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/status-indicator.js +66 -0
  1534. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/theme-selector.d.ts +10 -0
  1535. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/theme-selector.js +49 -0
  1536. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/thinking-selector.d.ts +22 -0
  1537. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/thinking-selector.js +108 -0
  1538. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/tool-execution.d.ts +79 -0
  1539. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/tool-execution.js +336 -0
  1540. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/tree-selector.d.ts +93 -0
  1541. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/tree-selector.js +1246 -0
  1542. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/trust-selector.d.ts +22 -0
  1543. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/trust-selector.js +90 -0
  1544. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/user-message-selector.d.ts +29 -0
  1545. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/user-message-selector.js +113 -0
  1546. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/user-message.d.ts +15 -0
  1547. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/user-message.js +48 -0
  1548. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/visual-truncate.d.ts +23 -0
  1549. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/components/visual-truncate.js +32 -0
  1550. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/external-editor.d.ts +11 -0
  1551. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/external-editor.js +37 -0
  1552. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/interactive-mode.d.ts +467 -0
  1553. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/interactive-mode.js +5720 -0
  1554. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/model-catalog-refresh.d.ts +6 -0
  1555. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/model-catalog-refresh.js +33 -0
  1556. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/model-search.d.ts +11 -0
  1557. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/model-search.js +14 -0
  1558. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/session-share.d.ts +17 -0
  1559. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/session-share.js +187 -0
  1560. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/dark.json +91 -0
  1561. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/light.json +90 -0
  1562. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-controller.d.ts +40 -0
  1563. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-controller.js +129 -0
  1564. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-json.d.ts +83 -0
  1565. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-json.js +129 -0
  1566. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme-schema.json +356 -0
  1567. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme.d.ts +130 -0
  1568. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/theme/theme.js +990 -0
  1569. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/tui-renderer.d.ts +20 -0
  1570. package/dist/vendor/engine/runtime/coding-agent/modes/interactive/tui-renderer.js +65 -0
  1571. package/dist/vendor/engine/runtime/coding-agent/modes/json-event.d.ts +33 -0
  1572. package/dist/vendor/engine/runtime/coding-agent/modes/json-event.js +28 -0
  1573. package/dist/vendor/engine/runtime/coding-agent/modes/print-mode.d.ts +27 -0
  1574. package/dist/vendor/engine/runtime/coding-agent/modes/print-mode.js +141 -0
  1575. package/dist/vendor/engine/runtime/coding-agent/modes/rpc/jsonl.d.ts +16 -0
  1576. package/dist/vendor/engine/runtime/coding-agent/modes/rpc/jsonl.js +48 -0
  1577. package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-client.d.ts +253 -0
  1578. package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-client.js +494 -0
  1579. package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-mode.d.ts +19 -0
  1580. package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-mode.js +656 -0
  1581. package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-types.d.ts +468 -0
  1582. package/dist/vendor/engine/runtime/coding-agent/modes/rpc/rpc-types.js +7 -0
  1583. package/dist/vendor/engine/runtime/coding-agent/package-manager-cli.d.ts +8 -0
  1584. package/dist/vendor/engine/runtime/coding-agent/package-manager-cli.js +960 -0
  1585. package/dist/vendor/engine/runtime/coding-agent/utils/abort.d.ts +4 -0
  1586. package/dist/vendor/engine/runtime/coding-agent/utils/abort.js +47 -0
  1587. package/dist/vendor/engine/runtime/coding-agent/utils/ansi.d.ts +1 -0
  1588. package/dist/vendor/engine/runtime/coding-agent/utils/ansi.js +51 -0
  1589. package/dist/vendor/engine/runtime/coding-agent/utils/changelog.d.ts +21 -0
  1590. package/dist/vendor/engine/runtime/coding-agent/utils/changelog.js +164 -0
  1591. package/dist/vendor/engine/runtime/coding-agent/utils/child-process.d.ts +17 -0
  1592. package/dist/vendor/engine/runtime/coding-agent/utils/child-process.js +105 -0
  1593. package/dist/vendor/engine/runtime/coding-agent/utils/clipboard-command.d.ts +6 -0
  1594. package/dist/vendor/engine/runtime/coding-agent/utils/clipboard-command.js +44 -0
  1595. package/dist/vendor/engine/runtime/coding-agent/utils/clipboard-image.d.ts +10 -0
  1596. package/dist/vendor/engine/runtime/coding-agent/utils/clipboard-image.js +216 -0
  1597. package/dist/vendor/engine/runtime/coding-agent/utils/clipboard.d.ts +3 -0
  1598. package/dist/vendor/engine/runtime/coding-agent/utils/clipboard.js +150 -0
  1599. package/dist/vendor/engine/runtime/coding-agent/utils/exif-orientation.d.ts +4 -0
  1600. package/dist/vendor/engine/runtime/coding-agent/utils/exif-orientation.js +156 -0
  1601. package/dist/vendor/engine/runtime/coding-agent/utils/frontmatter.d.ts +7 -0
  1602. package/dist/vendor/engine/runtime/coding-agent/utils/frontmatter.js +26 -0
  1603. package/dist/vendor/engine/runtime/coding-agent/utils/fs-watch.d.ts +4 -0
  1604. package/dist/vendor/engine/runtime/coding-agent/utils/fs-watch.js +24 -0
  1605. package/dist/vendor/engine/runtime/coding-agent/utils/git.d.ts +25 -0
  1606. package/dist/vendor/engine/runtime/coding-agent/utils/git.js +194 -0
  1607. package/dist/vendor/engine/runtime/coding-agent/utils/html.d.ts +6 -0
  1608. package/dist/vendor/engine/runtime/coding-agent/utils/html.js +39 -0
  1609. package/dist/vendor/engine/runtime/coding-agent/utils/image-convert.d.ts +9 -0
  1610. package/dist/vendor/engine/runtime/coding-agent/utils/image-convert.js +44 -0
  1611. package/dist/vendor/engine/runtime/coding-agent/utils/image-process.d.ts +17 -0
  1612. package/dist/vendor/engine/runtime/coding-agent/utils/image-process.js +82 -0
  1613. package/dist/vendor/engine/runtime/coding-agent/utils/image-resize-core.d.ts +29 -0
  1614. package/dist/vendor/engine/runtime/coding-agent/utils/image-resize-core.js +123 -0
  1615. package/dist/vendor/engine/runtime/coding-agent/utils/image-resize-worker.d.ts +1 -0
  1616. package/dist/vendor/engine/runtime/coding-agent/utils/image-resize-worker.js +30 -0
  1617. package/dist/vendor/engine/runtime/coding-agent/utils/image-resize.d.ts +15 -0
  1618. package/dist/vendor/engine/runtime/coding-agent/utils/image-resize.js +96 -0
  1619. package/dist/vendor/engine/runtime/coding-agent/utils/json.d.ts +2 -0
  1620. package/dist/vendor/engine/runtime/coding-agent/utils/json.js +6 -0
  1621. package/dist/vendor/engine/runtime/coding-agent/utils/management-http.d.ts +24 -0
  1622. package/dist/vendor/engine/runtime/coding-agent/utils/management-http.js +53 -0
  1623. package/dist/vendor/engine/runtime/coding-agent/utils/mime.d.ts +2 -0
  1624. package/dist/vendor/engine/runtime/coding-agent/utils/mime.js +109 -0
  1625. package/dist/vendor/engine/runtime/coding-agent/utils/open-browser.d.ts +8 -0
  1626. package/dist/vendor/engine/runtime/coding-agent/utils/open-browser.js +21 -0
  1627. package/dist/vendor/engine/runtime/coding-agent/utils/paths.d.ts +33 -0
  1628. package/dist/vendor/engine/runtime/coding-agent/utils/paths.js +113 -0
  1629. package/dist/vendor/engine/runtime/coding-agent/utils/photon.d.ts +20 -0
  1630. package/dist/vendor/engine/runtime/coding-agent/utils/photon.js +120 -0
  1631. package/dist/vendor/engine/runtime/coding-agent/utils/pi-user-agent.d.ts +1 -0
  1632. package/dist/vendor/engine/runtime/coding-agent/utils/pi-user-agent.js +4 -0
  1633. package/dist/vendor/engine/runtime/coding-agent/utils/shell.d.ts +33 -0
  1634. package/dist/vendor/engine/runtime/coding-agent/utils/shell.js +215 -0
  1635. package/dist/vendor/engine/runtime/coding-agent/utils/sleep.d.ts +4 -0
  1636. package/dist/vendor/engine/runtime/coding-agent/utils/sleep.js +16 -0
  1637. package/dist/vendor/engine/runtime/coding-agent/utils/syntax-highlight.d.ts +12 -0
  1638. package/dist/vendor/engine/runtime/coding-agent/utils/syntax-highlight.js +176 -0
  1639. package/dist/vendor/engine/runtime/coding-agent/utils/text.d.ts +7 -0
  1640. package/dist/vendor/engine/runtime/coding-agent/utils/text.js +8 -0
  1641. package/dist/vendor/engine/runtime/coding-agent/utils/tool-result-images.d.ts +20 -0
  1642. package/dist/vendor/engine/runtime/coding-agent/utils/tool-result-images.js +47 -0
  1643. package/dist/vendor/engine/runtime/coding-agent/utils/tools-manager.d.ts +12 -0
  1644. package/dist/vendor/engine/runtime/coding-agent/utils/tools-manager.js +308 -0
  1645. package/dist/vendor/engine/runtime/coding-agent/utils/version-check.d.ts +18 -0
  1646. package/dist/vendor/engine/runtime/coding-agent/utils/version-check.js +78 -0
  1647. package/dist/vendor/engine/runtime/coding-agent/utils/windows-self-update.d.ts +2 -0
  1648. package/dist/vendor/engine/runtime/coding-agent/utils/windows-self-update.js +76 -0
  1649. package/dist/vendor/engine/runtime/coding-agent/utils/wsl.d.ts +2 -0
  1650. package/dist/vendor/engine/runtime/coding-agent/utils/wsl.js +14 -0
  1651. package/dist/vendor/engine/runtime/coding-agent/utils/zip.d.ts +6 -0
  1652. package/dist/vendor/engine/runtime/coding-agent/utils/zip.js +59 -0
  1653. package/dist/vendor/engine/runtime/package.json +9 -0
  1654. package/dist/vendor/engine/runtime/telemetry/index.d.ts +193 -0
  1655. package/dist/vendor/engine/runtime/telemetry/index.js +17 -0
  1656. package/dist/vendor/engine/runtime/telemetry/memory.d.ts +25 -0
  1657. package/dist/vendor/engine/runtime/telemetry/memory.js +153 -0
  1658. package/dist/vendor/engine/runtime/telemetry/noop.d.ts +3 -0
  1659. package/dist/vendor/engine/runtime/telemetry/noop.js +17 -0
  1660. package/dist/vendor/engine/runtime/tui/alt-screen-search.d.ts +45 -0
  1661. package/dist/vendor/engine/runtime/tui/alt-screen-search.js +281 -0
  1662. package/dist/vendor/engine/runtime/tui/autocomplete.d.ts +56 -0
  1663. package/dist/vendor/engine/runtime/tui/autocomplete.js +671 -0
  1664. package/dist/vendor/engine/runtime/tui/components/alt-screen-flash.d.ts +12 -0
  1665. package/dist/vendor/engine/runtime/tui/components/alt-screen-flash.js +36 -0
  1666. package/dist/vendor/engine/runtime/tui/components/box.d.ts +23 -0
  1667. package/dist/vendor/engine/runtime/tui/components/box.js +132 -0
  1668. package/dist/vendor/engine/runtime/tui/components/cancellable-loader.d.ts +21 -0
  1669. package/dist/vendor/engine/runtime/tui/components/cancellable-loader.js +34 -0
  1670. package/dist/vendor/engine/runtime/tui/components/editor.d.ts +259 -0
  1671. package/dist/vendor/engine/runtime/tui/components/editor.js +2041 -0
  1672. package/dist/vendor/engine/runtime/tui/components/h-stack.d.ts +6 -0
  1673. package/dist/vendor/engine/runtime/tui/components/h-stack.js +42 -0
  1674. package/dist/vendor/engine/runtime/tui/components/image.d.ts +27 -0
  1675. package/dist/vendor/engine/runtime/tui/components/image.js +89 -0
  1676. package/dist/vendor/engine/runtime/tui/components/input.d.ts +47 -0
  1677. package/dist/vendor/engine/runtime/tui/components/input.js +416 -0
  1678. package/dist/vendor/engine/runtime/tui/components/loader.d.ts +32 -0
  1679. package/dist/vendor/engine/runtime/tui/components/loader.js +75 -0
  1680. package/dist/vendor/engine/runtime/tui/components/markdown.d.ts +102 -0
  1681. package/dist/vendor/engine/runtime/tui/components/markdown.js +810 -0
  1682. package/dist/vendor/engine/runtime/tui/components/mouse-region.d.ts +11 -0
  1683. package/dist/vendor/engine/runtime/tui/components/mouse-region.js +20 -0
  1684. package/dist/vendor/engine/runtime/tui/components/scroll-view.d.ts +58 -0
  1685. package/dist/vendor/engine/runtime/tui/components/scroll-view.js +194 -0
  1686. package/dist/vendor/engine/runtime/tui/components/select-list.d.ts +52 -0
  1687. package/dist/vendor/engine/runtime/tui/components/select-list.js +205 -0
  1688. package/dist/vendor/engine/runtime/tui/components/settings-list.d.ts +59 -0
  1689. package/dist/vendor/engine/runtime/tui/components/settings-list.js +251 -0
  1690. package/dist/vendor/engine/runtime/tui/components/spacer.d.ts +11 -0
  1691. package/dist/vendor/engine/runtime/tui/components/spacer.js +22 -0
  1692. package/dist/vendor/engine/runtime/tui/components/stack.d.ts +31 -0
  1693. package/dist/vendor/engine/runtime/tui/components/stack.js +110 -0
  1694. package/dist/vendor/engine/runtime/tui/components/text.d.ts +18 -0
  1695. package/dist/vendor/engine/runtime/tui/components/text.js +89 -0
  1696. package/dist/vendor/engine/runtime/tui/components/truncated-text.d.ts +12 -0
  1697. package/dist/vendor/engine/runtime/tui/components/truncated-text.js +50 -0
  1698. package/dist/vendor/engine/runtime/tui/components/v-stack.d.ts +7 -0
  1699. package/dist/vendor/engine/runtime/tui/components/v-stack.js +25 -0
  1700. package/dist/vendor/engine/runtime/tui/editor-component.d.ts +38 -0
  1701. package/dist/vendor/engine/runtime/tui/editor-component.js +1 -0
  1702. package/dist/vendor/engine/runtime/tui/fuzzy.d.ts +15 -0
  1703. package/dist/vendor/engine/runtime/tui/fuzzy.js +110 -0
  1704. package/dist/vendor/engine/runtime/tui/index.d.ts +32 -0
  1705. package/dist/vendor/engine/runtime/tui/index.js +44 -0
  1706. package/dist/vendor/engine/runtime/tui/keybindings.d.ts +272 -0
  1707. package/dist/vendor/engine/runtime/tui/keybindings.js +232 -0
  1708. package/dist/vendor/engine/runtime/tui/keys.d.ts +183 -0
  1709. package/dist/vendor/engine/runtime/tui/keys.js +1173 -0
  1710. package/dist/vendor/engine/runtime/tui/kill-ring.d.ts +27 -0
  1711. package/dist/vendor/engine/runtime/tui/kill-ring.js +43 -0
  1712. package/dist/vendor/engine/runtime/tui/latex.d.ts +9 -0
  1713. package/dist/vendor/engine/runtime/tui/latex.js +1377 -0
  1714. package/dist/vendor/engine/runtime/tui/layout-node.d.ts +39 -0
  1715. package/dist/vendor/engine/runtime/tui/layout-node.js +5 -0
  1716. package/dist/vendor/engine/runtime/tui/layout.d.ts +41 -0
  1717. package/dist/vendor/engine/runtime/tui/layout.js +343 -0
  1718. package/dist/vendor/engine/runtime/tui/native-modifiers.d.ts +3 -0
  1719. package/dist/vendor/engine/runtime/tui/native-modifiers.js +12 -0
  1720. package/dist/vendor/engine/runtime/tui/native-module-path.d.ts +6 -0
  1721. package/dist/vendor/engine/runtime/tui/native-module-path.js +18 -0
  1722. package/dist/vendor/engine/runtime/tui/native-platform.d.ts +17 -0
  1723. package/dist/vendor/engine/runtime/tui/native-platform.js +41 -0
  1724. package/dist/vendor/engine/runtime/tui/stdin-buffer.d.ts +55 -0
  1725. package/dist/vendor/engine/runtime/tui/stdin-buffer.js +365 -0
  1726. package/dist/vendor/engine/runtime/tui/terminal-colors.d.ts +9 -0
  1727. package/dist/vendor/engine/runtime/tui/terminal-colors.js +58 -0
  1728. package/dist/vendor/engine/runtime/tui/terminal-image.d.ts +117 -0
  1729. package/dist/vendor/engine/runtime/tui/terminal-image.js +549 -0
  1730. package/dist/vendor/engine/runtime/tui/terminal.d.ts +122 -0
  1731. package/dist/vendor/engine/runtime/tui/terminal.js +441 -0
  1732. package/dist/vendor/engine/runtime/tui/tui-alt-screen.d.ts +159 -0
  1733. package/dist/vendor/engine/runtime/tui/tui-alt-screen.js +1507 -0
  1734. package/dist/vendor/engine/runtime/tui/tui-main-screen.d.ts +38 -0
  1735. package/dist/vendor/engine/runtime/tui/tui-main-screen.js +593 -0
  1736. package/dist/vendor/engine/runtime/tui/tui.d.ts +385 -0
  1737. package/dist/vendor/engine/runtime/tui/tui.js +1054 -0
  1738. package/dist/vendor/engine/runtime/tui/undo-stack.d.ts +16 -0
  1739. package/dist/vendor/engine/runtime/tui/undo-stack.js +24 -0
  1740. package/dist/vendor/engine/runtime/tui/utils.d.ts +100 -0
  1741. package/dist/vendor/engine/runtime/tui/utils.js +1203 -0
  1742. package/dist/vendor/engine/runtime/tui/word-navigation.d.ts +24 -0
  1743. package/dist/vendor/engine/runtime/tui/word-navigation.js +95 -0
  1744. package/dist/vendor/zcode/LICENSE.upstream +202 -0
  1745. package/dist/vendor/zcode/provenance.json +141 -0
  1746. package/dist/vendor/zcode/source/agent/turn-machine.d.ts +56 -0
  1747. package/dist/vendor/zcode/source/agent/turn-machine.js +214 -0
  1748. package/dist/vendor/zcode/source/agent/turn-state.d.ts +118 -0
  1749. package/dist/vendor/zcode/source/agent/turn-state.js +93 -0
  1750. package/dist/vendor/zcode/source/compact/manual.d.ts +11 -0
  1751. package/dist/vendor/zcode/source/compact/manual.js +38 -0
  1752. package/dist/vendor/zcode/source/compact/microcompact.d.ts +47 -0
  1753. package/dist/vendor/zcode/source/compact/microcompact.js +194 -0
  1754. package/dist/vendor/zcode/source/compact/policy.d.ts +59 -0
  1755. package/dist/vendor/zcode/source/compact/policy.js +89 -0
  1756. package/dist/vendor/zcode/source/compact/selection.d.ts +6 -0
  1757. package/dist/vendor/zcode/source/compact/selection.js +12 -0
  1758. package/dist/vendor/zcode/source/contracts.d.ts +52 -0
  1759. package/dist/vendor/zcode/source/contracts.js +9 -0
  1760. package/dist/vendor/zcode/source/runtime/goal-completion-verification.d.ts +17 -0
  1761. package/dist/vendor/zcode/source/runtime/goal-completion-verification.js +138 -0
  1762. package/dist/vendor/zcode/source/runtime/turn-loop.d.ts +3 -0
  1763. package/dist/vendor/zcode/source/runtime/turn-loop.js +21 -0
  1764. package/dist/vendor/zcode/source/runtime/turn-model-step.d.ts +54 -0
  1765. package/dist/vendor/zcode/source/runtime/turn-model-step.js +97 -0
  1766. package/dist/vendor/zcode/source/runtime/turn-output-token-continuation.d.ts +8 -0
  1767. package/dist/vendor/zcode/source/runtime/turn-output-token-continuation.js +15 -0
  1768. package/dist/vendor/zcode/source/runtime/turn-stop.d.ts +6 -0
  1769. package/dist/vendor/zcode/source/runtime/turn-stop.js +18 -0
  1770. package/dist/vendor/zcode/source/tool/executor/validation.d.ts +6 -0
  1771. package/dist/vendor/zcode/source/tool/executor/validation.js +76 -0
  1772. package/dist/vendor/zcode/source/tool/input-normalization.d.ts +16 -0
  1773. package/dist/vendor/zcode/source/tool/input-normalization.js +62 -0
  1774. package/dist/vendor/zcode/source/tool/input-validation-model-content.d.ts +4 -0
  1775. package/dist/vendor/zcode/source/tool/input-validation-model-content.js +263 -0
  1776. package/dist/vendor/zcode/source/tool/json-schema.d.ts +9 -0
  1777. package/dist/vendor/zcode/source/tool/json-schema.js +230 -0
  1778. package/dist/vendor/zcode/source/tool/scheduler.d.ts +43 -0
  1779. package/dist/vendor/zcode/source/tool/scheduler.js +167 -0
  1780. package/dist/vendor/zcode/source/tool/tool-input-validation-issues.d.ts +76 -0
  1781. package/dist/vendor/zcode/source/tool/tool-input-validation-issues.js +148 -0
  1782. package/dist/vendor/zcode/source/tool/validation-contracts.d.ts +27 -0
  1783. package/dist/vendor/zcode/source/tool/validation-contracts.js +8 -0
  1784. package/docs/README.md +36 -0
  1785. package/docs/agents/README.md +62 -0
  1786. package/docs/agents/install-for-agents.md +55 -0
  1787. package/docs/agents/mcp-server.md +187 -0
  1788. package/docs/agents/subagent-mode.md +146 -0
  1789. package/docs/concepts/README.md +47 -0
  1790. package/docs/concepts/jev-actionable-routing.md +113 -0
  1791. package/docs/concepts/jev-decision-thresholds.md +412 -0
  1792. package/docs/concepts/jev-efficiency.md +216 -0
  1793. package/docs/concepts/jev-eval-2026-11-01.md +78 -0
  1794. package/docs/concepts/limits.md +43 -0
  1795. package/docs/concepts/memory.md +30 -0
  1796. package/docs/concepts/security.md +40 -0
  1797. package/docs/concepts/workspace-instructions.md +28 -0
  1798. package/docs/getting-started/README.md +82 -0
  1799. package/docs/getting-started/accounts.md +67 -0
  1800. package/docs/getting-started/configure-providers.md +103 -0
  1801. package/docs/guides/README.md +12 -0
  1802. package/docs/guides/browser.md +15 -0
  1803. package/docs/guides/desktop-app.md +354 -0
  1804. package/docs/guides/extensions.md +100 -0
  1805. package/docs/guides/graph-builder.md +93 -0
  1806. package/docs/guides/headless.md +45 -0
  1807. package/docs/guides/tui.md +75 -0
  1808. package/docs/guides/update.md +68 -0
  1809. package/docs/guides/windows-code-signing.md +316 -0
  1810. package/docs/llms.txt +45 -0
  1811. package/docs/reference/README.md +7 -0
  1812. package/docs/reference/cli.md +70 -0
  1813. package/docs/reference/config.md +85 -0
  1814. package/docs/reference/slash-commands.md +54 -0
  1815. package/docs/superpowers/plans/2026-11-01-claude-console-sign-in.md +111 -0
  1816. package/docs/superpowers/plans/2026-11-01-jev-node-opt-in.md +910 -0
  1817. package/docs/superpowers/plans/2026-11-02-workflow-pane.md +398 -0
  1818. package/docs/superpowers/specs/2026-10-31-work-line-summary-design.md +50 -0
  1819. package/docs/superpowers/specs/2026-11-01-claude-console-sign-in-design.md +176 -0
  1820. package/docs/superpowers/specs/2026-11-01-jev-node-opt-in-design.md +164 -0
  1821. package/docs/superpowers/specs/2026-11-01-pr-section-design.md +104 -0
  1822. package/docs/superpowers/specs/2026-11-02-workflow-pane-design.md +130 -0
  1823. package/licenses/GEIST-OFL-1.1.txt +92 -0
  1824. package/licenses/ZCODE-APACHE-2.0.txt +202 -0
  1825. package/package.json +118 -6
  1826. package/scripts/jev-efficiency-eval.mjs +187 -0
  1827. package/scripts/jev-efficiency-live.mjs +193 -0
  1828. package/scripts/zcode-engine-replay.mjs +223 -0
  1829. package/tests/agent-centric-mcp-test-plan.md +208 -0
  1830. package/tests/analytics-settings-test-plan.md +165 -0
  1831. package/tests/browser-cli-smoke.mjs +276 -0
  1832. package/tests/browser-test-plan.md +280 -0
  1833. package/tests/chat-side-panel-test-plan.md +309 -0
  1834. package/tests/decision-engine-test-plan.md +163 -0
  1835. package/tests/default-active-jev-test-plan.md +85 -0
  1836. package/tests/graphiti-test-plan.md +359 -0
  1837. package/tests/harness-extensions-test-plan.md +110 -0
  1838. package/tests/jev-all-decisions-test-plan.md +156 -0
  1839. package/tests/jev-efficiency/criteria.json +158 -0
  1840. package/tests/jev-efficiency/workloads.mjs +242 -0
  1841. package/tests/jev-efficiency-test-plan.md +198 -0
  1842. package/tests/mock-graphiti.mjs +106 -0
  1843. package/tests/permissions-sandbox-probe.mjs +74 -0
  1844. package/tests/permissions-test-plan.md +190 -0
  1845. package/tests/product-telemetry-test-plan.md +536 -0
  1846. package/tests/thinking-stream-preview-test-plan.md +136 -0
  1847. package/tests/zcode-react-engine-test-plan.md +396 -0
@@ -0,0 +1,1678 @@
1
+ import { appendFile, link, mkdir, readFile, readdir, rename, rm, stat, writeFile } from 'node:fs/promises';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { join, resolve } from 'node:path';
4
+ import { acquireSaveLock, SaveLockBusyError } from './save-lock.js';
5
+ import { configDirectory } from './config.js';
6
+ import { writeSessionSnapshot } from './sessions.js';
7
+ import { ToolFailureTracker } from './tool-failure-tracker.js';
8
+ import { stopReasonPhrase } from './runtime.js';
9
+ /**
10
+ * The directory holding one JSON Lines event log and one JSON result per run.
11
+ *
12
+ * `runs/` sits inside the installation directory, beside `config.json` and `artifacts/`, so the
13
+ * identity that names a record is also the last path segment of a file this process writes.
14
+ */
15
+ export function runRecordsDirectory(directory = configDirectory()) {
16
+ return join(directory, 'runs');
17
+ }
18
+ /** The history entry a session carries while its attempt is in flight, replaced when the attempt lands. */
19
+ export const RUNNING_TURN_SUMMARY = 'This attempt was interrupted or is still running. Verify the workspace before continuing.';
20
+ /** The same entry after recovery classifies the attempt as one the engine never finished. */
21
+ export const INTERRUPTED_TURN_SUMMARY = 'This attempt stopped unexpectedly before it finished; its work may be incomplete.';
22
+ /**
23
+ * What a session marker should say when the run record finalized but the session never heard how
24
+ * the attempt ended. Stopped outcomes commonly carry no completion object at all — a cancel has
25
+ * nothing to summarize — and then the recorded status is the only account left: a sentence about
26
+ * the engine stopping unexpectedly would contradict a record that says the user cancelled.
27
+ */
28
+ export function summaryForStoppedRecord(record) {
29
+ const summary = record.completion?.summary;
30
+ if (typeof summary === 'string')
31
+ return summary;
32
+ if (record.status === 'cancelled')
33
+ return 'This attempt was cancelled before it finished; its work may be incomplete.';
34
+ if (record.status === 'interrupted')
35
+ return INTERRUPTED_TURN_SUMMARY;
36
+ const reason = typeof record.reason === 'string' && record.reason.length > 0 ? record.reason : undefined;
37
+ // A record's reason is read after the colon of a sentence about the attempt, so it goes through
38
+ // the same classification every other surface uses: an internal code such as
39
+ // `maxNodeVisits:qa` becomes the sentence a person can act on, and a failure message is used
40
+ // whole. Reading the code raw would leak the identifier this repository never shows a user.
41
+ return reason === undefined ? 'This attempt did not finish; its work may be incomplete.' : `This attempt did not finish: ${stopReasonPhrase(reason)}.`;
42
+ }
43
+ export async function writeStudioRunSummary(directory, record) {
44
+ const graph = record.graph && typeof record.graph === 'object' ? record.graph : undefined;
45
+ const projected = {
46
+ id: record.id, status: record.status,
47
+ ...(record.startedAt ? { startedAt: record.startedAt } : {}),
48
+ ...(record.graphSelection ? { graphSelection: record.graphSelection } : {}),
49
+ ...(record.accountSubject ? { accountSubject: record.accountSubject } : {}),
50
+ ...(graph ? { graph: { id: graph.id, revision: graph.revision } } : {}),
51
+ ...(typeof record.toolCalls === 'number' ? { toolCalls: record.toolCalls } : {}),
52
+ };
53
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 });
54
+ await writeSessionSnapshot(join(runRecordsDirectory(directory), `${record.id}.studio-summary`), JSON.stringify(projected) + '\n');
55
+ }
56
+ /**
57
+ * The claim naming a run open — required, unlike the supplemental studio summary.
58
+ *
59
+ * The claim is the answer `sessionHasOpenRun` gives every rail mutation, so a run whose claim
60
+ * failed to land would be invisible to the guard while its result record says the session is
61
+ * live: another process could then archive, rename, or delete the live session, and the run's
62
+ * final save would overwrite or recreate what that mutation did. `writeOpenRunRecord` therefore
63
+ * publishes the record only once this write has landed; the snapshot layer behind it already
64
+ * retries the transient rename failures (Windows AV locks) that a suppressed failure would
65
+ * otherwise turn into that state.
66
+ */
67
+ async function writeOpenRunClaim(directory, claim) {
68
+ const body = { runId: claim.runId, sessionId: claim.sessionId, pid: claim.pid ?? process.pid, claimedAt: new Date().toISOString(), startedAt: processStartedAt(), nonce: PROCESS_NONCE };
69
+ await writeSessionSnapshot(runRecordPath(directory, claim.runId, 'open-run'), JSON.stringify(body) + '\n');
70
+ }
71
+ /** Drop a run's open claim. A run only ever owns its own claim, so this cannot clobber another's. */
72
+ export async function clearOpenRunClaim(directory, runId) {
73
+ await rm(runRecordPath(directory, runId, 'open-run'), { force: true }).catch(() => { });
74
+ }
75
+ /**
76
+ * Remove the record of an attempt that never began.
77
+ *
78
+ * The claim and the record answer one question — is a run live? — and a question with no run behind
79
+ * it has to have neither. A record left behind is an attempt the Runs view lists, and its live pid
80
+ * tells the recovery that another process owns it, so the attempt stays `running` until that
81
+ * process exits.
82
+ */
83
+ export async function removeOpenRunRecord(directory, runId) {
84
+ // The claim is released only when the record is gone. A record that still says the run is live,
85
+ // with no claim to say so, is a history that contradicts itself — and when the file cannot be
86
+ // removed, the claim stays and the recovery classifies the attempt once its owner is gone.
87
+ const removed = await rm(runRecordPath(directory, runId, 'json'), { force: true }).then(() => true, () => false);
88
+ await rm(join(runRecordsDirectory(directory), `${runId}.studio-summary`), { force: true }).catch(() => { });
89
+ if (removed)
90
+ await clearOpenRunClaim(directory, runId);
91
+ }
92
+ /** The result file written at start; atomic, so a crash mid-write cannot tear the record. */
93
+ export async function writeOpenRunRecord(directory, record) {
94
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 });
95
+ // The claim lands before the record, and the record is not published without it: from the
96
+ // moment any engine can see the open record, the guard already has its index entry. The reverse
97
+ // order — or a suppressed claim failure — would leave the state this method's own guard cannot
98
+ // answer: the record says the run is live while the claim, the guard's fast answer, is missing,
99
+ // and a rail mutation of this session is accepted against a run that trusts the record.
100
+ await writeOpenRunClaim(directory, { runId: record.id, sessionId: record.sessionId, pid: record.pid });
101
+ await writeSessionSnapshot(runRecordPath(directory, record.id, 'json'), JSON.stringify(record, null, 2) + '\n');
102
+ // Best effort: failure of the supplemental index must not abort a real coding run.
103
+ await writeStudioRunSummary(directory, record).catch(() => { });
104
+ }
105
+ /** Whether a process is running. A live process owned by another user answers EPERM, not ESRCH. */
106
+ export function isPidAlive(pid) {
107
+ if (!Number.isSafeInteger(pid) || pid < 1)
108
+ return false;
109
+ try {
110
+ process.kill(pid, 0);
111
+ return true;
112
+ }
113
+ catch (error) {
114
+ return error.code === 'EPERM';
115
+ }
116
+ }
117
+ /** This process's own start time, as the claims it writes record it. */
118
+ export function processStartedAt() {
119
+ return new Date(Date.now() - Math.round(process.uptime() * 1000)).toISOString();
120
+ }
121
+ /**
122
+ * This process instance's identity, as the claims it writes record it.
123
+ *
124
+ * A pid is not an identity — the OS hands a dead process's number to the next one, and a
125
+ * container that restarts within seconds reuses the same number for its replacement. A start
126
+ * time compared with a tolerance cannot tell those apart either: a restarted PID-1 container
127
+ * starts within the tolerance of the one it replaces, so its predecessor's claim would look
128
+ * like this process's own. A value that exists only in this instance of the process answers it
129
+ * exactly: the claim carries the nonce of the process that wrote it, and a claim this process
130
+ * did not write is a claim of a different instance, whatever the number it carried.
131
+ */
132
+ const PROCESS_NONCE = randomUUID();
133
+ /** This process instance's nonce, for a claim that carries one. */
134
+ export function processNonce() {
135
+ return PROCESS_NONCE;
136
+ }
137
+ /**
138
+ * The workspaces this process is working in.
139
+ *
140
+ * The reservation is the process's rather than an engine's: an app server and an MCP or CLI
141
+ * subagent in one process are two engines over one workspace, and two full-access runs in it
142
+ * would write the same files at once. The unit the reservation covers is the workspace, because
143
+ * that is what two overlapping runs would both write to.
144
+ */
145
+ const processWorkspaces = new Map();
146
+ /**
147
+ * Reserve a workspace for an engine in this process.
148
+ *
149
+ * @returns whether the reservation was taken; a workspace another engine in this process is
150
+ * working in is not available.
151
+ */
152
+ export function claimProcessWorkspace(workspace, owner) {
153
+ if (processWorkspaces.has(workspace))
154
+ return false;
155
+ processWorkspaces.set(workspace, owner);
156
+ return true;
157
+ }
158
+ /** Give a workspace back, when the engine releasing it is the one that reserved it. */
159
+ export function releaseProcessWorkspace(workspace, owner) {
160
+ if (processWorkspaces.get(workspace) === owner)
161
+ processWorkspaces.delete(workspace);
162
+ }
163
+ /**
164
+ * When a running process started, as the platform can report it, or `undefined` when it cannot.
165
+ *
166
+ * A pid alone is not an identity: the OS reuses it, so a claim whose holder was killed can appear
167
+ * to be held by an unrelated process that inherited the number, and that attempt would refuse to be
168
+ * resumed for as long as the impostor lives. Comparing the start time the claim recorded for its
169
+ * holder with the start time the OS reports for that pid is what tells the two apart. The probe is
170
+ * deliberately best-effort — a platform that cannot answer returns nothing, and the caller falls
171
+ * back to pid liveness — because being unable to check must never turn a live holder into a stale
172
+ * one (which is the direction that would let two engines resume the same attempt).
173
+ */
174
+ async function processStartedAtFor(pid) {
175
+ if (!Number.isSafeInteger(pid) || pid < 1)
176
+ return undefined;
177
+ try {
178
+ if (process.platform === 'linux') {
179
+ // Field 22 of `/proc/<pid>/stat` is the start time in clock ticks since boot; the process name
180
+ // (field 2) may hold spaces and parentheses, so parsing starts after its last `)`.
181
+ const stat = await readFile(`/proc/${pid}/stat`, 'utf8');
182
+ const fields = stat.slice(stat.lastIndexOf(')') + 2).split(' ');
183
+ const ticks = Number(fields[19]);
184
+ const boot = /^btime (\d+)/m.exec(await readFile('/proc/stat', 'utf8'));
185
+ if (!Number.isFinite(ticks) || !boot)
186
+ return undefined;
187
+ return (Number(boot[1]) + ticks / 100) * 1000;
188
+ }
189
+ const { execFile } = await import('node:child_process');
190
+ const [command, args] = process.platform === 'win32'
191
+ ? ['powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', `(Get-Process -Id ${pid} -ErrorAction Stop).StartTime.ToUniversalTime().ToString('o')`]]
192
+ : ['ps', ['-o', 'lstart=', '-p', String(pid)]];
193
+ const output = await new Promise(resolve => {
194
+ execFile(command, args, { timeout: 5_000, windowsHide: true }, (error, stdout) => resolve(error ? undefined : stdout));
195
+ });
196
+ const parsed = output === undefined ? NaN : Date.parse(output.trim());
197
+ return Number.isFinite(parsed) ? parsed : undefined;
198
+ }
199
+ catch {
200
+ return undefined;
201
+ }
202
+ }
203
+ /** How far a recorded start time may differ from the probed one and still be the same process. */
204
+ const PROCESS_START_TOLERANCE_MS = 5_000;
205
+ const validSessionFile = (id) => /^[a-f0-9-]{36}$/i.test(id);
206
+ /**
207
+ * Classify the runs and session turns a previous process left unfinished.
208
+ *
209
+ * A run that finalizes replaces its open record and its marker turn together; anything that ends
210
+ * that way needs no help here. What this repairs is the other end: a process killed between the
211
+ * open record and the finalizer leaves a record stuck at `running` and a session turn claiming the
212
+ * attempt "is still running", and neither can tell the difference between live work and a crash on
213
+ * its own. The pid answers it — a process this home's engine cannot see is gone — and from there
214
+ * the record becomes `interrupted`, the marker entry is upgraded to say so, and a marker whose
215
+ * record never landed gets an interrupted record synthesized so the run is at least listable.
216
+ *
217
+ * A record whose pid is alive is left untouched: another engine on this home may genuinely be
218
+ * running it — and it is named in `live`, captured by the same walk, so a caller who wants to
219
+ * react when such a holder exits needs no second scan (and no gap between two). `onlyRunIds`
220
+ * bounds the rewrite to records the caller already knows its own earlier sweep left open: a
221
+ * delayed repair must never touch a record a live process still owns, including the calling
222
+ * engine's own active run. The whole pass is best-effort; one damaged record never hides the
223
+ * others.
224
+ */
225
+ export async function reconcileInterruptedRuns(directory, onlyRunIds, options) {
226
+ const recovery = { runs: [], markers: 0, live: [], interrupted: [] };
227
+ const swept = await markOpenRunsInterrupted(directory, onlyRunIds, options?.skipOwnProcess === true, options?.includePending === true);
228
+ recovery.runs = swept.ids;
229
+ recovery.live = swept.live;
230
+ recovery.interrupted = swept.records;
231
+ recovery.markers = await upgradeSessionMarkers(directory);
232
+ return recovery;
233
+ }
234
+ /**
235
+ * The open records this process can no longer own, rewritten with status `interrupted`, plus the
236
+ * records the same walk left running because a live foreign process owns them.
237
+ *
238
+ * The live set is what lets a starting engine watch its predecessor without a second scan: the
239
+ * sweep either recovers a record whose holder is gone or names it here, so an exit at any moment
240
+ * is caught by one pass or the other. `onlyRunIds` bounds the rewrite to records the caller knows
241
+ * its own earlier sweep left open — a delayed repair must not touch a record a live process still
242
+ * owns, including the calling engine's own active run.
243
+ */
244
+ /**
245
+ * Whether an open run belongs to a run this very process instance is executing.
246
+ *
247
+ * A pid is not an identity: the OS hands a dead process's number to the next one, and this
248
+ * process's own number is no different. The claim beside the record carries the start time its
249
+ * owner recorded, so a claim this instance wrote is told apart from one an earlier instance with
250
+ * the same number wrote. The first is a live run — an in-process host that starts a second engine
251
+ * must not terminalize the first engine's work, which is still executing — and the second is the
252
+ * debris of a crash.
253
+ *
254
+ * A claim with no recorded start time, or one that names another process, proves neither: the
255
+ * answer is the conservative one, and the run is classified as a crash.
256
+ */
257
+ async function claimedByThisProcess(directory, runId) {
258
+ try {
259
+ const claim = JSON.parse(await readFile(runRecordPath(directory, runId, 'open-run'), 'utf8'));
260
+ if (claim.pid !== process.pid)
261
+ return false;
262
+ // The nonce is the exact answer: a claim this process instance wrote carries it, and one
263
+ // another instance wrote does not — however close its start time is to this one's.
264
+ if (typeof claim.nonce === 'string')
265
+ return claim.nonce === PROCESS_NONCE;
266
+ // A claim without one was written before the nonce existed, so the start time is all there
267
+ // is. The tolerance is the conservative direction: a claim that looks like this process's own
268
+ // is left alone rather than terminalized.
269
+ if (typeof claim.startedAt !== 'string')
270
+ return false;
271
+ const claimed = Date.parse(claim.startedAt);
272
+ if (!Number.isFinite(claimed))
273
+ return false;
274
+ return Math.abs(Date.parse(processStartedAt()) - claimed) <= PROCESS_START_TOLERANCE_MS;
275
+ }
276
+ catch {
277
+ return false;
278
+ }
279
+ }
280
+ async function markOpenRunsInterrupted(directory, onlyRunIds, skipOwnProcess = false, includePending = false) {
281
+ const runs = runRecordsDirectory(directory);
282
+ let names;
283
+ try {
284
+ names = await readdir(runs);
285
+ }
286
+ catch (error) {
287
+ if (error.code === 'ENOENT')
288
+ return { ids: [], live: [], records: [] };
289
+ throw error;
290
+ }
291
+ const ids = [];
292
+ const live = [];
293
+ const records = [];
294
+ for (const name of names) {
295
+ // Only result records: `.json` is the result's extension, and `.checkpoint.json` names only
296
+ // ever existed as a checkpoint before the suffix was shortened to keep it out of the scans.
297
+ if (!name.endsWith('.json') || name.endsWith('.checkpoint.json'))
298
+ continue;
299
+ const path = join(runs, name);
300
+ let value;
301
+ try {
302
+ value = JSON.parse(await readFile(path, 'utf8'));
303
+ }
304
+ catch {
305
+ continue;
306
+ }
307
+ if (!value || typeof value !== 'object')
308
+ continue;
309
+ if (value.status !== 'running' && !(includePending && value.status === 'interrupted' && value.telemetryPending === true))
310
+ continue;
311
+ const runId = typeof value.id === 'string' && value.id === name.slice(0, -'.json'.length) ? value.id : undefined;
312
+ if (runId === undefined)
313
+ continue;
314
+ // A record rewritten by an earlier recovery whose finish was never queued: the pair is still
315
+ // owed, and the derived event id makes re-reporting it idempotent.
316
+ if (value.status === 'interrupted') {
317
+ records.push(value);
318
+ continue;
319
+ }
320
+ const pid = typeof value.pid === 'number' ? value.pid : undefined;
321
+ // A live foreign pid is the only answer that keeps a record open — another engine's run, or
322
+ // the predecessor still shutting down, and it is named in `live` for a watcher to hold. This
323
+ // process's own pid keeps its active run open too, but it is nobody to watch: the engine is
324
+ // the one running this code. Anything else is a crash.
325
+ if (pid !== undefined && pid !== process.pid && isPidAlive(pid)) {
326
+ live.push({ runId, pid, sessionId: typeof value.sessionId === 'string' ? value.sessionId : undefined });
327
+ continue;
328
+ }
329
+ // A run this very process instance is executing is not debris either. A pid is not an
330
+ // identity — the OS hands a dead process's number to the next one, and this process's own
331
+ // number is no different — so the claim beside the record is what tells the two apart: it
332
+ // carries the start time its owner recorded, and a claim this instance wrote is a run that
333
+ // is still going. An in-process host that starts a second engine must not terminalize the
334
+ // first engine's live work: the claim it would remove is what holds the session against a
335
+ // mutation, and the run would save over that mutation when it finished.
336
+ if (skipOwnProcess && pid === process.pid && await claimedByThisProcess(directory, runId))
337
+ continue;
338
+ if (onlyRunIds !== undefined && !onlyRunIds.has(runId))
339
+ continue;
340
+ // Two coordinators can read the same open record before either rewrite lands. The lock makes
341
+ // the running-to-interrupted transition single-owner, so only one of them enqueues the finish;
342
+ // the loser has nothing to emit and leaves the record to the winner.
343
+ const lockDirectory = join(runs, `${runId}.recover`);
344
+ let release;
345
+ try {
346
+ release = await acquireSaveLock(lockDirectory);
347
+ }
348
+ catch (error) {
349
+ if (error instanceof SaveLockBusyError)
350
+ continue;
351
+ throw error;
352
+ }
353
+ const unlock = async () => {
354
+ await release();
355
+ // The lock's own directory is an implementation detail; leaving one empty directory per
356
+ // recovered run would clutter `runs/` for no reason.
357
+ await rm(lockDirectory, { recursive: true, force: true }).catch(() => { });
358
+ };
359
+ // The record was read before the lock. A coordinator that read it, was descheduled, and then
360
+ // acquired the lock the winner just released would otherwise rewrite a record that already
361
+ // says `interrupted` and enqueue a second finish. Only the reading under the lock counts.
362
+ let current;
363
+ try {
364
+ current = JSON.parse(await readFile(path, 'utf8'));
365
+ }
366
+ catch {
367
+ await unlock();
368
+ continue;
369
+ }
370
+ if (!current || typeof current !== 'object' || current.status !== 'running') {
371
+ await unlock();
372
+ continue;
373
+ }
374
+ // `telemetryPending` is cleared by whoever queues the finish. A process that dies between the
375
+ // rewrite and the enqueue therefore leaves a record a later pass still knows to report.
376
+ const interrupted = { ...current, status: 'interrupted', telemetryPending: true, reason: 'the engine stopped while this run was active', endedAt: new Date().toISOString() };
377
+ try {
378
+ await writeSessionSnapshot(path, JSON.stringify(interrupted, null, 2) + '\n');
379
+ }
380
+ catch {
381
+ await unlock();
382
+ continue;
383
+ }
384
+ await unlock();
385
+ // Startup recovery can delete the dead claim before MCP monitoring ever
386
+ // runs. Preserve the pre-snapshot crash signal from the recovered run record
387
+ // so a previous successful session turn cannot hide this interrupted attempt.
388
+ const crash = await rememberCrashedClaim(directory, {
389
+ runId, sessionId: value.sessionId, claimedAt: value.startedAt,
390
+ });
391
+ // A marker that could not be persisted leaves the claim as the only
392
+ // durable, retryable copy of the signal: removing it here would erase the
393
+ // crash from monitoring for good. A later monitor pass retries the write.
394
+ if (crash?.durable !== false)
395
+ // The record says the attempt is over, so its open claim must stop naming it to the guard: a
396
+ // claim whose holder later turns out to be alive would otherwise hold the session shut.
397
+ await rm(join(runs, `${runId}.open-run`), { force: true }).catch(() => { });
398
+ ids.push(runId);
399
+ records.push(interrupted);
400
+ }
401
+ return { ids, live, records };
402
+ }
403
+ /** The facts a session's own history carries, when a caller already holds the snapshot. */
404
+ function sessionCrashFacts(history) {
405
+ const turns = Array.isArray(history) ? history : [];
406
+ const runIds = new Set();
407
+ for (const turn of turns) {
408
+ const runId = turn?.runId;
409
+ if (typeof runId === 'string')
410
+ runIds.add(runId);
411
+ }
412
+ const last = turns.at(-1);
413
+ return last && typeof last.runId === 'string'
414
+ ? { kind: 'present', runIds, lastRunId: last.runId }
415
+ : { kind: 'present', runIds };
416
+ }
417
+ async function readSessionCrashFacts(directory, sessionId) {
418
+ let raw;
419
+ try {
420
+ raw = await readFile(join(directory, 'sessions', `${sessionId}.json`), 'utf8');
421
+ }
422
+ catch (error) {
423
+ return error.code === 'ENOENT' ? { kind: 'missing' } : { kind: 'unreadable' };
424
+ }
425
+ try {
426
+ return sessionCrashFacts(JSON.parse(raw).history);
427
+ }
428
+ catch {
429
+ return { kind: 'unreadable' };
430
+ }
431
+ }
432
+ /** Whether a run that started after `time` has persisted a turn in this session. */
433
+ async function persistedRunStartedAfter(directory, runId, time) {
434
+ if (runId === undefined)
435
+ return false;
436
+ const record = await readRunRecord(directory, runId);
437
+ const startedAt = typeof record?.startedAt === 'string' ? Date.parse(record.startedAt) : Number.NaN;
438
+ return Number.isFinite(startedAt) && startedAt > time;
439
+ }
440
+ /**
441
+ * A crashed run may die between writing its claim and saving the running turn.
442
+ * Keep a small, durable monitor-only signal before cleaning up the dead claim.
443
+ *
444
+ * The sidecar exists for one state only: an attempt the session snapshot never
445
+ * records, hidden behind an older turn. A session that has a turn naming this
446
+ * run already reports the attempt — a `running` marker turn included — so a
447
+ * finalizer's terminal record left behind by a failed claim removal must not
448
+ * become a `crashedAttempt`. A run that started after the claim proves a newer
449
+ * attempt was persisted, which supersedes the crash. Startup recovery calls
450
+ * this after rewriting its record, so the pre-snapshot test is the same whether
451
+ * recovery or a monitor observed the dead claim.
452
+ *
453
+ * @returns the marker and whether it reached the disk. `undefined` means no
454
+ * marker is needed; `durable: false` means the caller must keep its claim, the
455
+ * only retryable copy of the signal left.
456
+ */
457
+ async function rememberCrashedClaim(directory, claim, factsFor = sessionId => readSessionCrashFacts(directory, sessionId)) {
458
+ const runId = claim.runId, sessionId = claim.sessionId, claimedAt = claim.claimedAt;
459
+ if (typeof runId !== 'string' || typeof sessionId !== 'string'
460
+ || !validSessionFile(runId) || !validSessionFile(sessionId)
461
+ || typeof claimedAt !== 'string' || !Number.isFinite(Date.parse(claimedAt)))
462
+ return undefined;
463
+ const facts = await factsFor(sessionId);
464
+ // A deleted session has no monitor row to report. An unreadable snapshot is
465
+ // not proof the attempt was recorded, so only a readable one can answer.
466
+ if (facts.kind === 'missing')
467
+ return undefined;
468
+ if (facts.kind === 'present') {
469
+ if (facts.runIds.has(runId))
470
+ return undefined;
471
+ if (await persistedRunStartedAfter(directory, facts.lastRunId, Date.parse(claimedAt)))
472
+ return undefined;
473
+ }
474
+ const marker = { runId, claimedAt };
475
+ try {
476
+ await writeSessionSnapshot(runRecordPath(directory, runId, 'mcp-crash'), JSON.stringify({ ...marker, sessionId }) + '\n');
477
+ return { marker, durable: true };
478
+ }
479
+ catch {
480
+ // The session layer already retries transient Windows renames; a failure
481
+ // that survives that is reported so the caller keeps its claim.
482
+ return { marker, durable: false };
483
+ }
484
+ }
485
+ export async function sessionsWithOpenRunClaims(directory, sessions) {
486
+ const runs = runRecordsDirectory(directory);
487
+ let names;
488
+ try {
489
+ names = await readdir(runs);
490
+ }
491
+ catch (error) {
492
+ if (error.code === 'ENOENT')
493
+ return { active: new Set(), crashed: new Map() };
494
+ throw error;
495
+ }
496
+ const active = new Set();
497
+ const crashed = new Map();
498
+ // A query passes the same snapshot its views are built from, so pruning can
499
+ // never delete a marker using a save the answer does not reflect. Without one
500
+ // (no current caller) the files are the only source.
501
+ const snapshots = sessions === undefined ? undefined : new Map(sessions.map(session => [session.id, session]));
502
+ const fileFacts = new Map();
503
+ const absentFacts = new Map();
504
+ const confirmAbsent = async (sessionId) => {
505
+ try {
506
+ await stat(join(directory, 'sessions', `${sessionId}.json`));
507
+ return { kind: 'unreadable' };
508
+ }
509
+ catch (error) {
510
+ return error.code === 'ENOENT' ? { kind: 'missing' } : { kind: 'unreadable' };
511
+ }
512
+ };
513
+ const factsFor = (sessionId) => {
514
+ if (snapshots !== undefined) {
515
+ const session = snapshots.get(sessionId);
516
+ if (session !== undefined)
517
+ return sessionCrashFacts(session.history);
518
+ // The store omits unreadable or invalid records from its listing, so
519
+ // absence from the snapshot is proof of deletion only when the file
520
+ // itself is gone. Anything still on disk stays an unknown state, keeping
521
+ // its marker alive for when the record is repaired.
522
+ let pending = absentFacts.get(sessionId);
523
+ if (pending === undefined) {
524
+ pending = confirmAbsent(sessionId);
525
+ absentFacts.set(sessionId, pending);
526
+ }
527
+ return pending;
528
+ }
529
+ let pending = fileFacts.get(sessionId);
530
+ if (pending === undefined) {
531
+ pending = readSessionCrashFacts(directory, sessionId);
532
+ fileFacts.set(sessionId, pending);
533
+ }
534
+ return pending;
535
+ };
536
+ // Only the newest unresolved crash per session is actionable. Older sidecars
537
+ // can never outlive it (a persisted run that supersedes the newest also
538
+ // supersedes them), so keeping them would make every poll reread them forever.
539
+ const kept = new Map();
540
+ const keepCrash = async (entry, file) => {
541
+ const existing = crashed.get(entry.sessionId);
542
+ const prior = kept.get(entry.sessionId);
543
+ if (existing !== undefined && Date.parse(existing.claimedAt) >= Date.parse(entry.claimedAt)) {
544
+ // The selected crash is at least as new; this sidecar is redundant.
545
+ if (file !== prior)
546
+ await rm(join(runs, file), { force: true }).catch(() => { });
547
+ return;
548
+ }
549
+ if (prior !== undefined && prior !== file)
550
+ await rm(join(runs, prior), { force: true }).catch(() => { });
551
+ crashed.set(entry.sessionId, { runId: entry.runId, claimedAt: entry.claimedAt });
552
+ kept.set(entry.sessionId, file);
553
+ };
554
+ for (const name of names) {
555
+ if (!name.endsWith('.mcp-crash'))
556
+ continue;
557
+ try {
558
+ const record = JSON.parse(await readFile(join(runs, name), 'utf8'));
559
+ if (!record || typeof record !== 'object' || Array.isArray(record))
560
+ continue;
561
+ const entry = record;
562
+ if (typeof entry.runId !== 'string' || typeof entry.sessionId !== 'string'
563
+ || !validSessionFile(entry.runId) || !validSessionFile(entry.sessionId)
564
+ || typeof entry.claimedAt !== 'string' || !Number.isFinite(Date.parse(entry.claimedAt))
565
+ || name !== entry.runId + '.mcp-crash')
566
+ continue;
567
+ const known = await factsFor(entry.sessionId);
568
+ // Remove markers nothing can report any more, so the scan stays bounded:
569
+ // a deleted session is orphaned, and a session that already records the
570
+ // attempt, or a later run that supersedes it, makes the sidecar redundant.
571
+ if (known.kind === 'missing'
572
+ || (known.kind === 'present' && (known.runIds.has(entry.runId)
573
+ || await persistedRunStartedAfter(directory, known.lastRunId, Date.parse(entry.claimedAt))))) {
574
+ await rm(join(runs, name), { force: true }).catch(() => { });
575
+ continue;
576
+ }
577
+ await keepCrash({ runId: entry.runId, sessionId: entry.sessionId, claimedAt: entry.claimedAt }, name);
578
+ }
579
+ catch { /* Damaged monitor sidecars must not hide unrelated sessions. */ }
580
+ }
581
+ for (const name of names) {
582
+ if (!name.endsWith('.open-run'))
583
+ continue;
584
+ let claim;
585
+ try {
586
+ claim = JSON.parse(await readFile(join(runs, name), 'utf8'));
587
+ }
588
+ catch {
589
+ continue; /* A torn claim is handled by the per-session legacy fallback. */
590
+ }
591
+ if (!claim || typeof claim !== 'object' || typeof claim.sessionId !== 'string')
592
+ continue;
593
+ const outdated = await claimOutlivedItsRun(directory, claim);
594
+ const pid = typeof claim.pid === 'number' ? claim.pid : undefined;
595
+ if (!outdated && await claimOwnerIsLive(pid, claim.startedAt)) {
596
+ active.add(claim.sessionId);
597
+ continue;
598
+ }
599
+ const outcome = await rememberCrashedClaim(directory, claim, factsFor);
600
+ if (outcome !== undefined)
601
+ await keepCrash({ ...outcome.marker, sessionId: claim.sessionId }, outcome.marker.runId + '.mcp-crash');
602
+ // Keep a claim whose crash marker could not be persisted: the claim is the
603
+ // only retryable copy, and removing it would permanently hide the attempt.
604
+ if (outcome?.durable === false)
605
+ continue;
606
+ await rm(join(runs, name), { force: true }).catch(() => { });
607
+ }
608
+ return { active, crashed };
609
+ }
610
+ /**
611
+ * Whether a live open-run claim still holds this session against mutations.
612
+ *
613
+ * `ignoreRunId` excuses one run from the answer: the engine that owns that run mutates the session
614
+ * safely beside it when its finalizer merges into the record it saves, so it names its own
615
+ * in-flight run here instead of being held by its own claim. Every other owner — a second window
616
+ * or the CLI sharing the home — answers exactly as before, crash-claim cleanup included.
617
+ */
618
+ export async function sessionHasOpenRun(directory, sessionId, options = {}) {
619
+ const runs = runRecordsDirectory(directory);
620
+ let names;
621
+ try {
622
+ names = await readdir(runs);
623
+ }
624
+ catch (error) {
625
+ if (error.code === 'ENOENT')
626
+ return false;
627
+ throw error;
628
+ }
629
+ if (!validSessionFile(sessionId))
630
+ return scanRunsForOpenRun(directory, sessionId, options.ignoreRunId);
631
+ for (const name of names) {
632
+ if (!name.endsWith('.open-run'))
633
+ continue;
634
+ let claim;
635
+ try {
636
+ claim = JSON.parse(await readFile(join(runs, name), 'utf8'));
637
+ }
638
+ // A claim that cannot be parsed proves no owner but hides what the records would say: the scan
639
+ // is the conservative answer for this directory, not a silent miss.
640
+ catch {
641
+ return scanRunsForOpenRun(directory, sessionId, options.ignoreRunId);
642
+ }
643
+ if (!claim || typeof claim !== 'object' || claim.sessionId !== sessionId)
644
+ continue;
645
+ // The named run is the caller's own work, not a stranger: its claim is excused outright, so
646
+ // nothing here reclaims or removes it.
647
+ if (options.ignoreRunId !== undefined && (claim.runId === options.ignoreRunId || name === `${options.ignoreRunId}.open-run`))
648
+ continue;
649
+ // A claim the finalizer failed to remove is not evidence of live work, however alive its owner
650
+ // looks: see `claimOutlivedItsRun`. Reclaiming it here is what keeps a transient removal failure
651
+ // from holding a session shut for the life of the process that wrote it.
652
+ if (await claimOutlivedItsRun(directory, claim)) {
653
+ const outcome = await rememberCrashedClaim(directory, claim);
654
+ // A marker that could not be written leaves the claim in place: it is the
655
+ // only retryable signal that this attempt never reached the session.
656
+ if (outcome?.durable !== false)
657
+ await rm(join(runs, name), { force: true }).catch(() => { });
658
+ continue;
659
+ }
660
+ const pid = typeof claim.pid === 'number' ? claim.pid : undefined;
661
+ if (await claimOwnerIsLive(pid, claim.startedAt))
662
+ return true;
663
+ const outcome = await rememberCrashedClaim(directory, claim);
664
+ if (outcome?.durable !== false)
665
+ await rm(join(runs, name), { force: true }).catch(() => { });
666
+ }
667
+ return false;
668
+ }
669
+ /**
670
+ * Whether an armed wake still names this session from any engine.
671
+ *
672
+ * A wake lives in the registry of the engine that armed it, and every engine sharing the
673
+ * installation runs a reaper pass over the same store: asked of its own registry alone, one
674
+ * engine's pass would file away a session another engine still owes a prompt. Each arm wrote a
675
+ * claim, so the claims are the answer. A claim whose owner is live holds the session; a claim
676
+ * whose owner is gone is swept here, because the wake it named was a promise its process held and
677
+ * nothing will deliver it now. A claim that cannot be read might name a live wake, so it holds
678
+ * the session too.
679
+ */
680
+ export async function sessionHasArmedWake(directory, sessionId) {
681
+ const runs = runRecordsDirectory(directory);
682
+ let names;
683
+ try {
684
+ names = await readdir(runs);
685
+ }
686
+ catch (error) {
687
+ if (error.code === 'ENOENT')
688
+ return false;
689
+ throw error;
690
+ }
691
+ let armed = false;
692
+ for (const name of names) {
693
+ if (!name.startsWith(`${sessionId}.`) || !name.endsWith('.wake-claim'))
694
+ continue;
695
+ let claim;
696
+ try {
697
+ claim = JSON.parse(await readFile(join(runs, name), 'utf8'));
698
+ }
699
+ catch {
700
+ armed = true;
701
+ continue;
702
+ }
703
+ const pid = typeof claim.pid === 'number' ? claim.pid : undefined;
704
+ if (await claimOwnerIsLive(pid, claim.startedAt)) {
705
+ armed = true;
706
+ continue;
707
+ }
708
+ // The owner is gone, and with it the wake: the claim it left cannot hold the session against
709
+ // every later pass, so the read that proved it dead clears it.
710
+ await rm(join(runs, name), { force: true }).catch(() => { });
711
+ }
712
+ return armed;
713
+ }
714
+ /** The path of one wake's claim, beside the open-run claims it is read with. */
715
+ function wakeClaimPath(directory, sessionId, timerId) {
716
+ if (!validSessionFile(sessionId) || !validSessionFile(timerId)) {
717
+ throw new Error('A wake claim needs a session identity and a timer identity');
718
+ }
719
+ return join(runRecordsDirectory(directory), `${sessionId}.${timerId}.wake-claim`);
720
+ }
721
+ /**
722
+ * Record that this engine armed a wake for a session.
723
+ *
724
+ * The wake itself lives in this process's registry, so a reaper pass in another engine cannot see
725
+ * it there. The claim is what makes it visible across the engines that share the installation: one
726
+ * small file per wake, carrying the writing process's identity, read by `sessionHasArmedWake`. Best
727
+ * effort — a claim that fails to land leaves the wake invisible to a foreign pass until its
728
+ * delivery lands and reverts the filing, the way the run that armed it would have.
729
+ */
730
+ export async function writeWakeClaim(directory, sessionId, timerId) {
731
+ const body = { sessionId, timerId, pid: process.pid, claimedAt: new Date().toISOString(), startedAt: processStartedAt(), nonce: PROCESS_NONCE };
732
+ // A home with no runs yet has no directory for the claim: the write lands beside the open-run claims.
733
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 }).catch(() => { });
734
+ await writeSessionSnapshot(wakeClaimPath(directory, sessionId, timerId), JSON.stringify(body) + '\n');
735
+ }
736
+ /** Drop one wake's claim: the wake was delivered, spent, or canceled by the engine that armed it. */
737
+ export async function clearWakeClaim(directory, sessionId, timerId) {
738
+ if (!validSessionFile(sessionId) || !validSessionFile(timerId))
739
+ return;
740
+ await rm(wakeClaimPath(directory, sessionId, timerId), { force: true }).catch(() => { });
741
+ }
742
+ /**
743
+ * Drop every claim a session's wakes hold, when the wakes go with the session they were armed for.
744
+ *
745
+ * Deleting a session clears its wakes with the record; the claims have to go with them, or claims
746
+ * naming a session that no longer exists would outlive the session that could ever clear them.
747
+ * Only claims naming this session are removed: another session's wakes are nobody else's to drop.
748
+ */
749
+ export async function clearWakeClaims(directory, sessionId) {
750
+ if (!validSessionFile(sessionId))
751
+ return;
752
+ const runs = runRecordsDirectory(directory);
753
+ let names;
754
+ try {
755
+ names = await readdir(runs);
756
+ }
757
+ catch (error) {
758
+ if (error.code === 'ENOENT')
759
+ return;
760
+ throw error;
761
+ }
762
+ for (const name of names) {
763
+ if (!name.startsWith(`${sessionId}.`) || !name.endsWith('.wake-claim'))
764
+ continue;
765
+ await rm(join(runs, name), { force: true }).catch(() => { });
766
+ }
767
+ }
768
+ /**
769
+ * Whether this claim's own run record closed after the claim was made, which makes the claim failed
770
+ * cleanup rather than live work.
771
+ *
772
+ * A run finalizes by rewriting its result record and then removing its claim. If that removal fails — a
773
+ * scanner holding the file on Windows is enough, and the removal is deliberately best-effort so a
774
+ * transient lock cannot abort a finished run — the leftover goes on naming its owner, and nothing else
775
+ * sweeps it: the startup repair walks only records that are still `running`, so a claim whose record is
776
+ * closed survives every later restart and keeps `sessionHasOpenRun` answering `busy` for this session
777
+ * until the process it names exits. Comparing the two stamps is what tells this apart from the claim of
778
+ * a run in flight: a resume reuses its attempt's run id, so a record that closed *before* this claim was
779
+ * written belongs to that earlier attempt and says nothing about this one. A record that is absent,
780
+ * unreadable, or without a closing stamp proves nothing, and the claim stands — the conservative
781
+ * direction, because clearing a live claim is what lets a mutation land on a session a run still owns.
782
+ */
783
+ async function claimOutlivedItsRun(directory, claim) {
784
+ const runId = typeof claim.runId === 'string' ? claim.runId : undefined;
785
+ if (runId === undefined)
786
+ return false;
787
+ const claimedAt = typeof claim.claimedAt === 'string' ? Date.parse(claim.claimedAt) : Number.NaN;
788
+ if (!Number.isFinite(claimedAt))
789
+ return false;
790
+ let record;
791
+ try {
792
+ record = JSON.parse(await readFile(runRecordPath(directory, runId, 'json'), 'utf8'));
793
+ }
794
+ catch {
795
+ return false;
796
+ }
797
+ if (!record || typeof record !== 'object')
798
+ return false;
799
+ const closed = record;
800
+ if (closed.status === undefined || closed.status === 'running')
801
+ return false;
802
+ const endedAt = typeof closed.endedAt === 'string' ? Date.parse(closed.endedAt) : Number.NaN;
803
+ return Number.isFinite(endedAt) && endedAt > claimedAt;
804
+ }
805
+ /**
806
+ * Whether the process an open-run claim names is the one that wrote it.
807
+ *
808
+ * `isPidAlive` alone is not an identity: the OS reuses numbers, so a claim whose engine crashed
809
+ * can come to name an unrelated process that inherited the pid, and treating that as the owner
810
+ * would hold the session busy — refusing every rename, archive, and delete — for as long as the
811
+ * impostor lives. The start time the owner recorded when it claimed the run is corroborated
812
+ * against the one the platform reports for that pid, which is how `inspectClaim` judges a resume
813
+ * claim. A claim written before that field existed, and a platform that cannot report a start
814
+ * time, fall back to pid liveness: the conservative direction, because a live owner read as
815
+ * stale is what lets a rail mutation land while a run still owns the session.
816
+ */
817
+ async function claimOwnerIsLive(pid, startedAt) {
818
+ if (pid === undefined || !Number.isSafeInteger(pid) || pid < 1)
819
+ return true;
820
+ if (!isPidAlive(pid))
821
+ return false;
822
+ const claimed = typeof startedAt === 'string' ? Date.parse(startedAt) : Number.NaN;
823
+ if (!Number.isFinite(claimed))
824
+ return true;
825
+ // Our own start time is known without a probe: the common case is this process's own run.
826
+ const actual = pid === process.pid ? Date.parse(processStartedAt()) : await processStartedAtFor(pid);
827
+ return actual === undefined || Math.abs(actual - claimed) <= PROCESS_START_TOLERANCE_MS;
828
+ }
829
+ /** The pre-index answer: read the result records themselves. Only the fallback paths reach it. */
830
+ async function scanRunsForOpenRun(directory, sessionId, ignoreRunId) {
831
+ const runs = runRecordsDirectory(directory);
832
+ let names;
833
+ try {
834
+ names = await readdir(runs);
835
+ }
836
+ catch (error) {
837
+ if (error.code === 'ENOENT')
838
+ return false;
839
+ throw error;
840
+ }
841
+ for (const name of names) {
842
+ if (!name.endsWith('.json') || name.endsWith('.checkpoint.json'))
843
+ continue;
844
+ let value;
845
+ try {
846
+ value = JSON.parse(await readFile(join(runs, name), 'utf8'));
847
+ }
848
+ catch {
849
+ continue;
850
+ }
851
+ if (!value || typeof value !== 'object' || value.status !== 'running' || value.sessionId !== sessionId)
852
+ continue;
853
+ // The caller's own in-flight run is excused from the answer, exactly as in the claim index.
854
+ if (ignoreRunId !== undefined && (value.id === ignoreRunId || name === `${ignoreRunId}.json`))
855
+ continue;
856
+ const pid = typeof value.pid === 'number' ? value.pid : undefined;
857
+ if (pid === undefined || isPidAlive(pid))
858
+ return true;
859
+ }
860
+ return false;
861
+ }
862
+ /** Whether a value is the plain object a completion's `output` is declared to be. */
863
+ const plainObject = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
864
+ /** Whether a value is the `{ type, ref }` pair a completion's artifact reference is declared to be. */
865
+ function isArtifactRef(value) {
866
+ if (!value || typeof value !== 'object')
867
+ return false;
868
+ const ref = value;
869
+ return typeof ref.type === 'string' && typeof ref.ref === 'string';
870
+ }
871
+ /**
872
+ * Bring every session's view of unfinished attempts in line with the run records.
873
+ *
874
+ * A marker turn whose record finalized means the final turn never reached the session file — the
875
+ * finalizer saved the record and the session save itself failed — so the marker takes the record's
876
+ * own account of the attempt. A marker with no record at all is a crash between the two writes: it
877
+ * becomes interrupted, and with a known run identity an interrupted record is synthesized so the
878
+ * Runs view shows the attempt instead of only the transcript. A marker whose record is still open
879
+ * under a live pid is real in-flight work and stays.
880
+ */
881
+ async function upgradeSessionMarkers(directory, only) {
882
+ const sessions = join(directory, 'sessions');
883
+ let names;
884
+ try {
885
+ names = await readdir(sessions);
886
+ }
887
+ catch (error) {
888
+ if (error.code === 'ENOENT')
889
+ return 0;
890
+ throw error;
891
+ }
892
+ let markers = 0;
893
+ for (const name of names) {
894
+ if (!name.endsWith('.json'))
895
+ continue;
896
+ if (only !== undefined && name !== `${only}.json`)
897
+ continue;
898
+ try {
899
+ const session = JSON.parse(await readFile(join(sessions, name), 'utf8'));
900
+ if (!session || typeof session !== 'object' || typeof session.id !== 'string' || session.id !== name.slice(0, -'.json'.length))
901
+ continue;
902
+ let changed = 0;
903
+ const usageFolded = new Set();
904
+ for (const key of ['history', 'contextHistory']) {
905
+ const turns = session[key];
906
+ if (!Array.isArray(turns))
907
+ continue;
908
+ for (const turn of turns) {
909
+ const completion = turn?.completion;
910
+ if (!completion || typeof completion !== 'object')
911
+ continue;
912
+ if (completion.status !== 'running' && completion.summary !== RUNNING_TURN_SUMMARY)
913
+ continue;
914
+ const runId = turn.runId;
915
+ const known = typeof runId === 'string' && /^[\w-]{1,64}$/.test(runId);
916
+ const record = known ? await readRunRecord(directory, runId) : undefined;
917
+ if (record && record.status === 'running') {
918
+ if (typeof record.pid !== 'number' || isPidAlive(record.pid))
919
+ continue;
920
+ // `markOpenRunsInterrupted` already landed, but a record this pass cannot rewrite (a
921
+ // locked file on Windows) must not leave the transcript claiming work in flight.
922
+ }
923
+ if (record && record.status !== 'running' && typeof record.status === 'string') {
924
+ // The attempt finished; only the session never heard how — or what it produced. The
925
+ // finalization persisted the whole completion (tests, outcome, artifacts) even when its
926
+ // session save failed, so the repaired turn takes it whole rather than only its summary.
927
+ const finalized = (record.completion && typeof record.completion === 'object' && !Array.isArray(record.completion))
928
+ ? { ...record.completion }
929
+ : undefined;
930
+ if (finalized) {
931
+ if (record.status === 'succeeded') {
932
+ // A successful run: the turn is a normal completed turn, and the desktop labels any
933
+ // present non-running status as a stopped one, so it carries the record's completion
934
+ // with no status at all.
935
+ delete finalized.status;
936
+ }
937
+ else {
938
+ finalized.status = record.status;
939
+ }
940
+ // The saved session must stay loadable and renderable: session validation keeps only a
941
+ // string summary and a string-array tests list, and clients render the outcome beside
942
+ // them, so the fields a hand-edited or damaged record gets wrong are repaired to their
943
+ // declared shapes rather than written through verbatim. `output` and `artifacts` are not
944
+ // drawn but are serialized into the next run's model context, so they are held to their
945
+ // shapes too; a field that cannot be repaired is dropped.
946
+ if (typeof finalized.summary !== 'string' || finalized.summary.length === 0) {
947
+ finalized.summary = record.status === 'succeeded'
948
+ ? (typeof completion.summary === 'string' && completion.summary.length > 0 ? completion.summary : summaryForStoppedRecord(record))
949
+ : summaryForStoppedRecord(record);
950
+ }
951
+ if (!Array.isArray(finalized.tests) || !finalized.tests.every((test) => typeof test === 'string'))
952
+ finalized.tests = [];
953
+ // A React child must stringify: an object where the outcome belongs throws while the
954
+ // transcript renders, which would make the repaired session unusable in the desktop.
955
+ if (typeof finalized.outcome !== 'string')
956
+ delete finalized.outcome;
957
+ if (!plainObject(finalized.output))
958
+ delete finalized.output;
959
+ if (!Array.isArray(finalized.artifacts) || !finalized.artifacts.every(isArtifactRef))
960
+ delete finalized.artifacts;
961
+ turn.completion = finalized;
962
+ }
963
+ else if (record.status === 'succeeded') {
964
+ delete completion.status;
965
+ }
966
+ else {
967
+ completion.summary = summaryForStoppedRecord(record);
968
+ completion.status = record.status;
969
+ }
970
+ // The session totals are the pre-run snapshot the marker was saved with; the attempt's
971
+ // usage lives only in the record. Fold it once per file even when the marker turn sits
972
+ // in both history arrays, or the recovery would count the same run twice.
973
+ if (known && !usageFolded.has(runId)) {
974
+ usageFolded.add(runId);
975
+ foldRecordUsage(session, record.usage);
976
+ }
977
+ }
978
+ else {
979
+ completion.summary = INTERRUPTED_TURN_SUMMARY;
980
+ completion.status = 'interrupted';
981
+ if (known)
982
+ await synthesizeInterruptedRecord(directory, runId, typeof session.id === 'string' && validSessionFile(session.id) ? session.id : undefined);
983
+ }
984
+ changed += 1;
985
+ }
986
+ }
987
+ if (!changed)
988
+ continue;
989
+ await writeSessionSnapshot(join(sessions, name), JSON.stringify(session) + '\n');
990
+ markers += changed;
991
+ }
992
+ catch { /* One damaged session must not stop the sweep. */ }
993
+ }
994
+ return markers;
995
+ }
996
+ /**
997
+ * Bring one session's unfinished turns in line with the run records.
998
+ *
999
+ * The same repair the startup pass makes, for one session: a run whose final session save failed
1000
+ * leaves its turn marked running, and a long-lived server would keep it that way until it was
1001
+ * restarted. The attempt's own record says how it ended, so the turn takes that account of it.
1002
+ */
1003
+ export async function repairSessionMarkers(directory, sessionId) {
1004
+ return await upgradeSessionMarkers(directory, sessionId);
1005
+ }
1006
+ /**
1007
+ * Add a finished run's usage to the session totals during recovery.
1008
+ *
1009
+ * The saved session holds the totals as they were when the marker was written — before the run's
1010
+ * model calls — and after a failed final save the attempt's usage exists only on its record. The
1011
+ * fold matches the live one: the three required counters always add, a cache counter the provider
1012
+ * reported (even as zero) adds, and an unreported one stays absent.
1013
+ */
1014
+ function foldRecordUsage(session, usage) {
1015
+ if (!usage || typeof usage !== 'object' || Array.isArray(usage))
1016
+ return;
1017
+ const delta = usage;
1018
+ const current = (session.usage && typeof session.usage === 'object' && !Array.isArray(session.usage))
1019
+ ? session.usage
1020
+ : {};
1021
+ const count = (value) => typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : 0;
1022
+ for (const key of ['requests', 'inputTokens', 'outputTokens'])
1023
+ current[key] = count(current[key]) + count(delta[key]);
1024
+ for (const key of ['cacheRead', 'cacheWrite']) {
1025
+ if (typeof delta[key] === 'number' && Number.isFinite(delta[key]))
1026
+ current[key] = count(current[key]) + delta[key];
1027
+ }
1028
+ session.usage = current;
1029
+ }
1030
+ async function readRunRecord(directory, runId) {
1031
+ try {
1032
+ return JSON.parse(await readFile(runRecordPath(directory, runId, 'json'), 'utf8'));
1033
+ }
1034
+ catch {
1035
+ return undefined;
1036
+ }
1037
+ }
1038
+ /** The record a crashed run never wrote, so the attempt is listable and classifiable. */
1039
+ async function synthesizeInterruptedRecord(directory, runId, sessionId) {
1040
+ if (await readRunRecord(directory, runId) !== undefined)
1041
+ return;
1042
+ // The crash can land before anything ever created `runs/`: the session marker is written first,
1043
+ // and a home whose only run never opened a record has no directory to synthesize into.
1044
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 });
1045
+ let startedAt = new Date().toISOString();
1046
+ try {
1047
+ const first = (await readFile(runRecordPath(directory, runId, 'jsonl'), 'utf8')).split('\n', 1)[0];
1048
+ const time = JSON.parse(first).time;
1049
+ if (typeof time === 'string')
1050
+ startedAt = time;
1051
+ }
1052
+ catch { /* No journal: the record starts its life at recovery time. */ }
1053
+ try {
1054
+ await writeSessionSnapshot(runRecordPath(directory, runId, 'json'), JSON.stringify({
1055
+ id: runId, status: 'interrupted', reason: 'the engine stopped before the run was recorded', startedAt,
1056
+ ...(sessionId === undefined ? {} : { sessionId }), usage: { inputTokens: 0, outputTokens: 0, requests: 0 }, toolCalls: 0,
1057
+ }, null, 2) + '\n');
1058
+ }
1059
+ catch { /* A record that cannot be written must not fail the sweep. */ }
1060
+ }
1061
+ /**
1062
+ * The path a run's persisted record lives at.
1063
+ *
1064
+ * The run identity reaches this path from runtime events, where it is typed `unknown`, so the
1065
+ * alphabet is checked here at the sink rather than trusted from every caller. The identity is
1066
+ * always a UUID, and the guard admits only `[A-Za-z0-9_-]` -- the same alphabet `ArtifactStore`
1067
+ * uses for its own run-scoped directory. That rejects every spelling that could leave `runs/`:
1068
+ * `.` and `..` segments (the dot is not in the alphabet, so `..` is not merely resolved away but
1069
+ * refused), `/` and `\` separators, an absolute path, and a Windows drive-relative or
1070
+ * alternate-data-stream name (`:`).
1071
+ * @param directory - the installation directory holding `runs/`.
1072
+ * @param runId - the run identity, typically a generated UUID.
1073
+ * @param extension - which record per run this path names: the result, the journal, or the
1074
+ * checkpoint the resume work leaves behind until the run succeeds.
1075
+ * @returns the absolute or installation-relative path of the record.
1076
+ */
1077
+ export function runRecordPath(directory, runId, extension) {
1078
+ // The alphabet alone is not the whole test: `$` also matches just before a trailing newline, so
1079
+ // `/^…$/` would admit "run\n" as readily as "run". Requiring the value to survive `trim()`
1080
+ // unchanged closes that and rejects padded input at the same time.
1081
+ if (typeof runId !== 'string' || runId.trim() !== runId || !/^[\w-]{1,64}$/.test(runId)) {
1082
+ // The rejected value is deliberately not echoed: it is untrusted text, and an error message
1083
+ // is rendered to a terminal.
1084
+ throw new Error('A persisted run record needs a run identity of up to 64 word characters');
1085
+ }
1086
+ return join(runRecordsDirectory(directory), `${runId}.${extension}`);
1087
+ }
1088
+ /**
1089
+ * Record that a run's journal stopped accepting events, durably and separately from the sink that
1090
+ * failed.
1091
+ *
1092
+ * The journal is rewritten for every runtime event, and the engine deliberately keeps running when
1093
+ * one append fails (a full disk must not kill the user's work). What it must not keep is the
1094
+ * pretence that the file is a complete account: the lines after the failure are present, so the
1095
+ * gap is invisible to a reader — a crashed attempt would replay to a position missing whichever
1096
+ * completion the failure ate, and resume by repeating it. This marker is the failure's own record
1097
+ * (best effort: if even it cannot be written, the resume read of the record's flag is what stands),
1098
+ * and `journalWriteFailed` is what a resume consults before trusting the lineage.
1099
+ */
1100
+ export async function noteJournalWriteFailure(directory, runId, detail) {
1101
+ try {
1102
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 });
1103
+ await appendFile(runRecordPath(directory, runId, 'journal-error'), `${new Date().toISOString()}\t${detail.replace(/[\r\n]+/g, ' ')}\n`, { mode: 0o600 });
1104
+ }
1105
+ catch { /* the marker is best effort; the record's own flag covers a write that failed here */ }
1106
+ }
1107
+ /**
1108
+ * Whether a run's journal is known to be incomplete — the marker the sink left, or the flag the
1109
+ * attempt's result record carries. An attempt whose journal is incomplete is never a resume source:
1110
+ * replaying it would reconstruct a position whose missing events repeat completed work.
1111
+ */
1112
+ export async function journalWriteFailed(directory, runId) {
1113
+ try {
1114
+ await stat(runRecordPath(directory, runId, 'journal-error'));
1115
+ return true;
1116
+ }
1117
+ catch { /* no marker: the record flag is the only other account */ }
1118
+ try {
1119
+ const value = JSON.parse(await readFile(runRecordPath(directory, runId, 'json'), 'utf8'));
1120
+ return value.journalIntegrity === 'failed';
1121
+ }
1122
+ catch {
1123
+ return false;
1124
+ }
1125
+ }
1126
+ /**
1127
+ * Record that a run's checkpoints stopped being written, durably and separately from the sink
1128
+ * that failed.
1129
+ *
1130
+ * A checkpoint is the conversation a resume re-enters a node with: the node's own messages at the
1131
+ * moment it stopped. A write that failed leaves that conversation unwritten, so a resume would
1132
+ * re-enter the node from its opening task and repeat the tool calls it had already made — the
1133
+ * same harm a hole in the journal does, reached through a different file. The engine keeps the
1134
+ * run working (a full disk must not kill the user's work), but the attempt stops being a resume
1135
+ * source. This marker is the failure's own record (best effort: if even it cannot be written, the
1136
+ * resume read of the record's flag is what stands), and `checkpointWriteFailed` is what a resume
1137
+ * consults before trusting the lineage.
1138
+ */
1139
+ export async function noteCheckpointWriteFailure(directory, runId, detail) {
1140
+ try {
1141
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 });
1142
+ await appendFile(runRecordPath(directory, runId, 'checkpoint-error'), `${new Date().toISOString()}\t${detail.replace(/[\r\n]+/g, ' ')}\n`, { mode: 0o600 });
1143
+ }
1144
+ catch { /* the marker is best effort; the record's own flag covers a write that failed here */ }
1145
+ }
1146
+ /**
1147
+ * Whether a run's checkpoints are known to be incomplete — the marker the sink left, or the flag
1148
+ * the attempt's result record carries. An attempt whose checkpoint could not be written is never
1149
+ * a resume source: the resume would re-enter the node from its opening task and repeat the work
1150
+ * that node had already done.
1151
+ */
1152
+ export async function checkpointWriteFailed(directory, runId) {
1153
+ try {
1154
+ await stat(runRecordPath(directory, runId, 'checkpoint-error'));
1155
+ return true;
1156
+ }
1157
+ catch { /* no marker: the record flag is the only other account */ }
1158
+ try {
1159
+ const value = JSON.parse(await readFile(runRecordPath(directory, runId, 'json'), 'utf8'));
1160
+ return value.checkpointIntegrity === 'failed';
1161
+ }
1162
+ catch {
1163
+ return false;
1164
+ }
1165
+ }
1166
+ /**
1167
+ * The checkpoint file for one node of a run: `<runId>.checkpoint.<node-key>`.
1168
+ *
1169
+ * Parallel branches checkpoint concurrently, and one shared file per run meant every branch's
1170
+ * write overwrote the others' — a crash kept only whichever conversation landed last. Each node
1171
+ * owns a file instead, so every unfinished branch survives. Node ids carry arbitrary characters,
1172
+ * so the name gets a sanitized prefix for debuggability plus a hash of the exact id for
1173
+ * uniqueness: two ids that sanitize to the same prefix still get different files.
1174
+ */
1175
+ function runCheckpointPath(directory, runId, nodeId) {
1176
+ const slug = nodeId.replace(/[^A-Za-z0-9_-]/g, '-').slice(0, 48);
1177
+ let hash = 2166136261;
1178
+ for (let i = 0; i < nodeId.length; i += 1) {
1179
+ hash ^= nodeId.charCodeAt(i);
1180
+ hash = Math.imul(hash, 16777619);
1181
+ }
1182
+ return `${runRecordPath(directory, runId, 'checkpoint')}.${slug}-${(hash >>> 0).toString(36)}`;
1183
+ }
1184
+ /**
1185
+ * Persist the in-flight conversation of the node a run is working on.
1186
+ *
1187
+ * The write is atomic (a staged rename, the same discipline as every durable record in this
1188
+ * directory) at mode 0600: the file carries the node's full message history — including tool
1189
+ * outputs — so it is as sensitive as the run journal, and a crash mid-write must never leave a
1190
+ * half-file a resume would read back. A new snapshot replaces the last; the runner already
1191
+ * sanitizes an interrupted conversation before publishing its checkpoint (stub tool messages are
1192
+ * marked as not replayed), so whatever the callback handed over is what belongs on disk.
1193
+ */
1194
+ export async function writeRunCheckpoint(directory, runId, checkpoint) {
1195
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 });
1196
+ await writeSessionSnapshot(runCheckpointPath(directory, runId, checkpoint.nodeId), JSON.stringify(checkpoint) + '\n');
1197
+ }
1198
+ /**
1199
+ * Read back one node's checkpoint, or nothing when there is no usable one.
1200
+ *
1201
+ * Missing and unreadable both mean the same thing to the caller: resume without the prior
1202
+ * conversation (the safe restart the runner falls back to). Shape validation is deliberately
1203
+ * shallow — a checkpoint from an incompatible build would carry the wrong state fields, and the
1204
+ * node re-running from scratch is safer than a seeded conversation whose counters disagree with
1205
+ * the graph the run is being replayed onto.
1206
+ *
1207
+ * One field is rebuilt rather than trusted: the tool-failure tracker is a class whose behavior
1208
+ * (and whose Map) JSON does not carry, so a resumed node gets a fresh one. Losing the repeated-
1209
+ * failure strike counts is the conservative direction — the worst case is one more retry before
1210
+ * the tracker strikes out again, not a crash on a state object without its methods.
1211
+ */
1212
+ export async function readRunCheckpoint(directory, runId, nodeId) {
1213
+ let raw;
1214
+ try {
1215
+ raw = await readFile(runCheckpointPath(directory, runId, nodeId), 'utf8');
1216
+ }
1217
+ catch {
1218
+ return undefined;
1219
+ }
1220
+ return parseRunCheckpoint(raw);
1221
+ }
1222
+ /**
1223
+ * Read every checkpoint the run kept — one file per node, plus the legacy single-file shape an
1224
+ * older build may have left behind. Unreadable or invalid files are skipped individually: a
1225
+ * damaged branch costs that branch its conversation, nothing more.
1226
+ */
1227
+ export async function readRunCheckpoints(directory, runId) {
1228
+ const root = runRecordsDirectory(directory);
1229
+ const prefix = `${runId}.checkpoint`;
1230
+ let names;
1231
+ try {
1232
+ names = await readdir(root);
1233
+ }
1234
+ catch {
1235
+ return [];
1236
+ }
1237
+ const checkpoints = [];
1238
+ for (const name of names.sort()) {
1239
+ // The bare `<runId>.checkpoint` is the pre-per-node shape; a per-node file is
1240
+ // `<runId>.checkpoint.<node-key>`. Nothing else the runs directory holds matches either.
1241
+ if (name !== prefix && !name.startsWith(`${prefix}.`))
1242
+ continue;
1243
+ let raw;
1244
+ try {
1245
+ raw = await readFile(join(root, name), 'utf8');
1246
+ }
1247
+ catch {
1248
+ continue;
1249
+ }
1250
+ const checkpoint = parseRunCheckpoint(raw);
1251
+ if (checkpoint)
1252
+ checkpoints.push(checkpoint);
1253
+ }
1254
+ return checkpoints;
1255
+ }
1256
+ /**
1257
+ * Rebuild every tool-failure tracker a persisted continuation state carries.
1258
+ *
1259
+ * The tracker is a class JSON cannot round-trip, so its strike counts live as plain numbers in the
1260
+ * file and its methods do not. A modified agent's state nests one continuation per copy
1261
+ * (`state.copies[i].state`), and the runtime reaches into those on the resumed copy's first tool
1262
+ * result — where a plain object has no `record`, so the failure lands after the tool already
1263
+ * executed and the effect can be repeated by the next resume. The rebuild is recursive for the same
1264
+ * reason: whatever state shape nests further, every tracker in it has to come back as a tracker.
1265
+ */
1266
+ function reviveFailures(state) {
1267
+ const revived = { ...state, failures: new ToolFailureTracker() };
1268
+ if (Array.isArray(state.copies))
1269
+ revived.copies = state.copies.map(copy => ({ ...copy, state: reviveFailures(copy.state) }));
1270
+ return revived;
1271
+ }
1272
+ const CHECKPOINT_MESSAGE_ROLES = new Set(['system', 'user', 'assistant', 'tool']);
1273
+ function parseRunCheckpoint(raw) {
1274
+ try {
1275
+ const value = JSON.parse(raw);
1276
+ if (!value || typeof value.nodeId !== 'string' || !Array.isArray(value.messages)
1277
+ || typeof value.state !== 'object' || value.state === null
1278
+ || typeof value.state.directionRevision !== 'number'
1279
+ || typeof value.revision !== 'number' || typeof value.savedAt !== 'string')
1280
+ return undefined;
1281
+ // A checkpoint whose conversation is not a conversation is worse than no checkpoint: the
1282
+ // resumed node REPLACES its freshly built system prompt, history and task with this array, so
1283
+ // an empty or malformed one would run the node with no task at all. Anything the current
1284
+ // runtime could not continue reads as absent — the compatibility contract is a fresh node.
1285
+ if (value.messages.length === 0 || value.messages.some(message => !message || typeof message !== 'object'
1286
+ || !CHECKPOINT_MESSAGE_ROLES.has(message.role)
1287
+ || typeof message.content !== 'string'))
1288
+ return undefined;
1289
+ // The continuation counters drive the resumed run's limits (iterations, repairs, todo calls);
1290
+ // a checkpoint missing them is from a build whose state shape this reader cannot trust.
1291
+ if (![value.state.iterations, value.state.repairs, value.state.todoCalls, value.state.directionRevision]
1292
+ .every(count => typeof count === 'number' && Number.isFinite(count)))
1293
+ return undefined;
1294
+ // The model identity stamp is optional: garbage there degrades to "no stamp" (no predecessor-
1295
+ // conversation restore for a pending successor) rather than refusing a sound checkpoint file.
1296
+ if (typeof value.provider !== 'string')
1297
+ delete value.provider;
1298
+ if (typeof value.model !== 'string')
1299
+ delete value.model;
1300
+ // The delivery marker is optional and self-describing: garbage degrades to "no marker", which
1301
+ // only means the text fallback is used, never that a sound checkpoint is refused.
1302
+ if (Array.isArray(value.steeringDelivered))
1303
+ value.steeringDelivered = value.steeringDelivered.filter(id => typeof id === 'string');
1304
+ else
1305
+ delete value.steeringDelivered;
1306
+ return { ...value, state: reviveFailures(value.state) };
1307
+ }
1308
+ catch {
1309
+ return undefined;
1310
+ }
1311
+ }
1312
+ /**
1313
+ * Discard a run's checkpoints — every per-node file and the legacy single file. The terminal
1314
+ * paths call this once the attempt has finished, so durable checkpoints exist only for attempts
1315
+ * a resume can actually pick up again.
1316
+ */
1317
+ export async function removeRunCheckpoint(directory, runId) {
1318
+ const root = runRecordsDirectory(directory);
1319
+ const prefix = `${runId}.checkpoint`;
1320
+ let names;
1321
+ try {
1322
+ names = await readdir(root);
1323
+ }
1324
+ catch {
1325
+ return;
1326
+ }
1327
+ for (const name of names) {
1328
+ if (name !== prefix && !name.startsWith(`${prefix}.`))
1329
+ continue;
1330
+ await rm(join(root, name), { force: true }).catch(() => { });
1331
+ }
1332
+ }
1333
+ /**
1334
+ * Read a claim where it stands.
1335
+ *
1336
+ * An ordinary read never disturbs the lock path, so a live holder cannot lose its claim merely to
1337
+ * being inspected. The identity comes back with the content — and is deliberately read BEFORE the
1338
+ * content, so a file replaced underneath the read answers with the identity of the newer file
1339
+ * while the caller acts on the older content: a reclaimer re-reads both under its ticket, and that
1340
+ * mismatch is what refuses the reclamation instead of letting it delete a claim it never judged.
1341
+ * An unreadable file proves no live holder (it is stale); the holder's own pid is stale too,
1342
+ * because a crashed process's pid can be recycled to this one.
1343
+ *
1344
+ * A live pid is corroborated against the start time the claim recorded before it counts as a live
1345
+ * holder: a pid the OS handed to an unrelated process that started later cannot be the claim's
1346
+ * author, and treating it as one would refuse that attempt's resume for as long as the impostor
1347
+ * runs. Where the platform cannot report a start time, the pid stands on its own — the conservative
1348
+ * direction, since a live holder treated as stale is what lets two engines resume at once.
1349
+ */
1350
+ async function inspectClaim(path) {
1351
+ let identity;
1352
+ try {
1353
+ const info = await stat(path);
1354
+ identity = { dev: info.dev, ino: info.ino };
1355
+ }
1356
+ catch {
1357
+ return undefined;
1358
+ }
1359
+ let pid;
1360
+ let startedAt;
1361
+ try {
1362
+ const value = JSON.parse(await readFile(path, 'utf8'));
1363
+ if (typeof value.pid === 'number')
1364
+ pid = value.pid;
1365
+ if (typeof value.startedAt === 'string')
1366
+ startedAt = Date.parse(value.startedAt);
1367
+ }
1368
+ catch { /* an unreadable claim proves no live holder: it is stale */ }
1369
+ let live = pid !== undefined && pid !== process.pid && isPidAlive(pid);
1370
+ if (live && startedAt !== undefined && Number.isFinite(startedAt)) {
1371
+ const actual = await processStartedAtFor(pid);
1372
+ if (actual !== undefined && Math.abs(actual - startedAt) > PROCESS_START_TOLERANCE_MS)
1373
+ live = false;
1374
+ }
1375
+ return { ...identity, live };
1376
+ }
1377
+ /**
1378
+ * Take the exclusive right to reclaim a stale claim, or refuse while another engine holds it.
1379
+ *
1380
+ * Reclaiming means deleting a file, and no filesystem offers a conditional delete: two processes
1381
+ * that both judge the same stale file can both proceed to remove it, and the one that removes
1382
+ * second can remove the claim the other has already created and started resuming under — leaving
1383
+ * two live resumers. The ticket turns the delete into a serialized step (taken by the same
1384
+ * create-exclusive link the claim itself uses), so only one reclaimer at a time may remove
1385
+ * anything, and every removal is additionally gated on re-reading the exact file it judged.
1386
+ *
1387
+ * A ticket left by a reclaimer that died mid-reclaim is taken over the way a stale claim is: its
1388
+ * holder is read where it stands, and only a dead one is discarded. Two processes taking over that
1389
+ * same dead ticket does not reopen the hole: the ticket guards only the delete, and the delete is
1390
+ * still conditional on the identity re-read, so a doubled ticket can at worst make both reclaimers
1391
+ * refuse.
1392
+ *
1393
+ * @returns whether this process holds the ticket, in which case the caller must remove it.
1394
+ */
1395
+ async function takeReclaimTicket(ticket) {
1396
+ for (let attempt = 0; attempt < 3; attempt += 1) {
1397
+ const temp = `${ticket}.tmp-${process.pid}-${randomUUID()}`;
1398
+ await writeFile(temp, JSON.stringify({ pid: process.pid, claimedAt: new Date().toISOString(), startedAt: processStartedAt() }) + '\n', { mode: 0o600 });
1399
+ try {
1400
+ await link(temp, ticket);
1401
+ await rm(temp, { force: true });
1402
+ return true;
1403
+ }
1404
+ catch (error) {
1405
+ if (error.code !== 'EEXIST')
1406
+ throw error;
1407
+ await rm(temp, { force: true }).catch(() => { });
1408
+ }
1409
+ const held = await inspectClaim(ticket);
1410
+ if (held === undefined)
1411
+ continue;
1412
+ // Another engine is reclaiming this run right now: refuse rather than removing anything it
1413
+ // may be in the middle of. Its own refusal-or-claim answer arrives for the caller to retry.
1414
+ if (held.live)
1415
+ return false;
1416
+ await rm(ticket, { force: true }).catch(() => { });
1417
+ }
1418
+ return false;
1419
+ }
1420
+ /**
1421
+ * Take (or refuse) the cross-process claim that this run id is being resumed.
1422
+ *
1423
+ * Two engines sharing one home can both be asked to resume the same stopped attempt, and the
1424
+ * per-process start guard cannot see the other one. The claim is a create-exclusive file: the
1425
+ * winner proceeds, and a file left by a process that is gone is stale and gets reclaimed. It is
1426
+ * deliberately a separate name from every record the Runs view scans, and it names the original
1427
+ * attempt — the thing two resumers would collide over.
1428
+ *
1429
+ * Reclamation may not be "read the file, then unlink the path", nor "rename whatever is in the
1430
+ * way, then read it": the first deletes a claim another engine may have created in between, and
1431
+ * the second vacates the canonical path — unlocking a live holder's claim for the rename window,
1432
+ * so a third engine linking into it takes the name while the original holder still believes it
1433
+ * owns it. What survives both is refusing to act on anything but verified evidence: the claim is
1434
+ * read in place (which never disturbs it), the reclamation takes the ticket above, the file is
1435
+ * re-read UNDER the ticket so a claim replaced in between refuses instead of being moved, and the
1436
+ * moved file's identity is checked before it is discarded. A live claim is never vacated, and the
1437
+ * only file ever deleted here is one this process read as stale twice and matched by identity.
1438
+ *
1439
+ * @returns whether the claim was taken; false means a live process holds it, or another engine is
1440
+ * reclaiming it right now.
1441
+ */
1442
+ export async function claimRunResume(directory, runId) {
1443
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 });
1444
+ return takeStaleableClaim(runRecordPath(directory, runId, 'claim'));
1445
+ }
1446
+ /**
1447
+ * The generic cross-process exclusive claim over one path.
1448
+ *
1449
+ * One protocol serves every exclusive claim in this directory: the resume claim above and the
1450
+ * per-session mutation lock below. Create-exclusive first; a file left by a dead process is
1451
+ * reclaimed only under the reclaim ticket and only when the re-read under the ticket is still the
1452
+ * exact file judged stale.
1453
+ */
1454
+ async function takeStaleableClaim(path) {
1455
+ const ticket = `${path}.reclaim`;
1456
+ for (let attempt = 0; attempt < 8; attempt += 1) {
1457
+ const temp = `${path}.tmp-${process.pid}-${randomUUID()}`;
1458
+ await writeFile(temp, JSON.stringify({ pid: process.pid, claimedAt: new Date().toISOString(), startedAt: processStartedAt() }) + '\n', { mode: 0o600 });
1459
+ try {
1460
+ await link(temp, path);
1461
+ await rm(temp, { force: true });
1462
+ return true;
1463
+ }
1464
+ catch (error) {
1465
+ if (error.code !== 'EEXIST')
1466
+ throw error;
1467
+ await rm(temp, { force: true }).catch(() => { });
1468
+ }
1469
+ // A file is in the way. A live holder answers refusal before anything touches the path.
1470
+ const judged = await inspectClaim(path);
1471
+ if (judged === undefined)
1472
+ continue;
1473
+ if (judged.live)
1474
+ return false;
1475
+ if (!await takeReclaimTicket(ticket))
1476
+ return false;
1477
+ try {
1478
+ // Re-read under the ticket: between the judgement above and here another engine may have
1479
+ // reclaimed the claim and started resuming under its own file. Only a file that is still
1480
+ // stale AND still the exact file judged is acted on; anything else is left untouched.
1481
+ const current = await inspectClaim(path);
1482
+ if (current === undefined || current.live || current.dev !== judged.dev || current.ino !== judged.ino)
1483
+ continue;
1484
+ const aside = `${path}.stale-${process.pid}-${randomUUID()}`;
1485
+ try {
1486
+ await rename(path, aside);
1487
+ }
1488
+ catch (error) {
1489
+ // Gone already (a competing reclaim took it): retry the create against the new state.
1490
+ if (error.code === 'ENOENT')
1491
+ continue;
1492
+ throw error;
1493
+ }
1494
+ const moved = await inspectClaim(aside);
1495
+ if (moved === undefined || moved.dev !== judged.dev || moved.ino !== judged.ino) {
1496
+ // A file this process never judged stale — an out-of-protocol writer (an older build
1497
+ // sharing this home) replaced the claim between the re-read and the rename. It is put back
1498
+ // before anything else happens: an unverified file is never deleted. If a third contender
1499
+ // took the name in the meantime the displaced file stays under its aside name, intact,
1500
+ // rather than being destroyed to make room for this attempt.
1501
+ try {
1502
+ await link(aside, path);
1503
+ await rm(aside, { force: true });
1504
+ }
1505
+ catch { /* the canonical name is taken again; the displaced claim survives under its own name */ }
1506
+ return false;
1507
+ }
1508
+ await rm(aside, { force: true });
1509
+ }
1510
+ finally {
1511
+ await rm(ticket, { force: true }).catch(() => { });
1512
+ }
1513
+ // The verified stale file is gone. The next pass takes the name with the same create-exclusive
1514
+ // link: a fresh contender may win it, and then its live claim is what refuses this resume.
1515
+ }
1516
+ return false;
1517
+ }
1518
+ /**
1519
+ * Give up a resume claim taken by a start that never reached its run — the claim itself, and the
1520
+ * reclaim ticket this process could be holding. A live reclaimer's ticket is left alone: it is
1521
+ * what serializes that engine's delete, and removing it early would hand the serialization to a
1522
+ * third contender mid-reclaim.
1523
+ */
1524
+ export async function releaseRunResumeClaim(directory, runId) {
1525
+ const path = runRecordPath(directory, runId, 'claim');
1526
+ await rm(path, { force: true }).catch(() => { });
1527
+ const held = await inspectClaim(`${path}.reclaim`);
1528
+ if (held !== undefined && !held.live)
1529
+ await rm(`${path}.reclaim`, { force: true }).catch(() => { });
1530
+ }
1531
+ /** Thrown when a session mutation lock is held elsewhere and does not free up within the wait. */
1532
+ export class SessionMutationLockHeldError extends Error {
1533
+ constructor(sessionId) {
1534
+ super(`The session ${sessionId} is being changed by another writer`);
1535
+ this.name = 'SessionMutationLockHeldError';
1536
+ }
1537
+ }
1538
+ /**
1539
+ * The in-process turnstiles, keyed by directory and session.
1540
+ *
1541
+ * A create-exclusive claim serializes processes, not the two awaits inside one process: two
1542
+ * concurrent requests of the same engine would each try to claim, and a holder's claim carries this
1543
+ * very pid, which `inspectClaim` must read as stale (a recycled pid cannot be trusted as ours). So
1544
+ * same-process contenders queue here and only the queue's head ever touches the claim.
1545
+ */
1546
+ const mutationTurns = new Map();
1547
+ /**
1548
+ * Serialize a session's cross-process read-modify-write mutation.
1549
+ *
1550
+ * Every rename, archive, and delete reads a session record, edits fields, and saves it back. Two
1551
+ * windows doing that to one session can interleave — each save overwrites the whole record, so one
1552
+ * loses the other's field, and a save landing after a delete recreates the session the user
1553
+ * removed. The answer is one lock per session, held across exactly that window: take it before the
1554
+ * busy check, do the check, the fresh re-read, and the save inside it, and release. A fresh read
1555
+ * under the lock is what makes two serialized mutations additive rather than lossy: each sees what
1556
+ * the last one wrote.
1557
+ *
1558
+ * The lock is the same claim protocol the resume claim uses — create-exclusive, with verified
1559
+ * reclamation of a file left by a dead process — so a holder that dies cannot strand the session:
1560
+ * the next contender reclaims and proceeds. It also carries an in-process turnstile, because the
1561
+ * app-server can have two concurrent requests for one session, and a request must never judge its
1562
+ * own process's live claim stale.
1563
+ *
1564
+ * @returns the release function. Throws `SessionMutationLockHeldError` when another writer keeps
1565
+ * the lock past the wait — the caller owes the user a busy error, not a mutation.
1566
+ */
1567
+ export async function acquireSessionMutationLock(directory, sessionId, options = {}) {
1568
+ const turnKey = `${resolve(directory)}\u0000${sessionId}`;
1569
+ const previous = mutationTurns.get(turnKey) ?? Promise.resolve();
1570
+ let releaseTurn = () => { };
1571
+ const turn = new Promise(done => { releaseTurn = done; });
1572
+ mutationTurns.set(turnKey, turn);
1573
+ await previous.catch(() => { });
1574
+ let released = false;
1575
+ const finish = () => {
1576
+ if (released)
1577
+ return;
1578
+ released = true;
1579
+ if (mutationTurns.get(turnKey) === turn)
1580
+ mutationTurns.delete(turnKey);
1581
+ releaseTurn();
1582
+ };
1583
+ // A path-unsafe identity — never a real session, which is a UUID — cannot name a claim file. The
1584
+ // turnstile above is the only serialization such an id gets; the mutation it guards is itself
1585
+ // unreachable through the validated paths that construct these ids.
1586
+ let path;
1587
+ try {
1588
+ path = runRecordPath(directory, sessionId, 'mutation-lock');
1589
+ }
1590
+ catch {
1591
+ path = undefined;
1592
+ }
1593
+ let claimHeld = false;
1594
+ if (path !== undefined) {
1595
+ try {
1596
+ await mkdir(runRecordsDirectory(directory), { recursive: true, mode: 0o700 });
1597
+ const deadline = Date.now() + (options.waitMs ?? 4_000);
1598
+ for (;;) {
1599
+ if (await takeStaleableClaim(path)) {
1600
+ claimHeld = true;
1601
+ break;
1602
+ }
1603
+ if (Date.now() >= deadline)
1604
+ throw new SessionMutationLockHeldError(sessionId);
1605
+ await new Promise(done => setTimeout(done, options.intervalMs ?? 100));
1606
+ }
1607
+ }
1608
+ catch (error) {
1609
+ // Anything thrown on the way to holding the claim — the timeout above, or a transient
1610
+ // filesystem or permission error out of the directory write or the claim attempt — must give
1611
+ // the turnstile back before it propagates. The map would otherwise keep this unresolved turn,
1612
+ // and every later mutation of the session would wait behind a release that never comes: one
1613
+ // transient error would shut the session's rail actions for the process lifetime.
1614
+ finish();
1615
+ throw error;
1616
+ }
1617
+ }
1618
+ /** Remove the claim at `claimPath` and its dead reclaim ticket. False when the filesystem refused the unlink. */
1619
+ const removeClaim = async (claimPath) => {
1620
+ try {
1621
+ await rm(claimPath, { force: true });
1622
+ }
1623
+ catch {
1624
+ return false;
1625
+ }
1626
+ // A reclaim ticket left by a holder that died would keep refusing reclamation for whoever
1627
+ // reads it next; drop one only when its holder is provably gone, as the resume release does.
1628
+ const held = await inspectClaim(`${claimPath}.reclaim`).catch(() => undefined);
1629
+ if (held !== undefined && !held.live)
1630
+ await rm(`${claimPath}.reclaim`, { force: true }).catch(() => { });
1631
+ return true;
1632
+ };
1633
+ return async () => {
1634
+ const claimPath = path;
1635
+ if (claimPath !== undefined && claimHeld) {
1636
+ // A release whose unlink is refused must not resolve as though the lock were gone: the claim
1637
+ // file names this live pid, so every other process keeps waiting out a mutation that is over.
1638
+ // Short retries first — a scanner or indexer holding the file is a matter of moments — and if
1639
+ // the filesystem keeps refusing, the in-process turn comes back at once while a detached pass
1640
+ // keeps removing the claim until it is gone. The writer is done; only the file owes anyone.
1641
+ let removed = await removeClaim(claimPath);
1642
+ for (const wait of [50, 100, 200]) {
1643
+ if (removed)
1644
+ break;
1645
+ await new Promise(done => setTimeout(done, wait));
1646
+ removed = await removeClaim(claimPath);
1647
+ }
1648
+ if (!removed)
1649
+ void (async () => {
1650
+ let wait = 250;
1651
+ while (!(await removeClaim(claimPath))) {
1652
+ await new Promise(done => { const timer = setTimeout(done, wait); timer.unref?.(); });
1653
+ wait = Math.min(wait * 2, 2_000);
1654
+ }
1655
+ })().catch(() => { });
1656
+ }
1657
+ finish();
1658
+ };
1659
+ }
1660
+ /**
1661
+ * Clear the recovery marker once a record's `interrupted` finish has been queued.
1662
+ *
1663
+ * Called by the reporter rather than the sweep: the sweep must not claim the work is done, because
1664
+ * the finish it returns may never be enqueued if this process dies first.
1665
+ */
1666
+ export async function clearInterruptedTelemetry(directory, runIds) {
1667
+ for (const runId of runIds) {
1668
+ const path = runRecordPath(directory, runId, 'json');
1669
+ try {
1670
+ const value = JSON.parse(await readFile(path, 'utf8'));
1671
+ if (value.status !== 'interrupted' || value.telemetryPending !== true)
1672
+ continue;
1673
+ delete value.telemetryPending;
1674
+ await writeSessionSnapshot(path, JSON.stringify(value, null, 2) + '\n');
1675
+ }
1676
+ catch { /* A record that cannot be rewritten is reported again next time; the id is stable. */ }
1677
+ }
1678
+ }