@earendil-works/pi-coding-agent 0.85.0 → 0.86.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +2 -3
  3. package/dist/bun/cli.d.ts +3 -1
  4. package/dist/bun/cli.d.ts.map +1 -1
  5. package/dist/bun/cli.js +3 -12
  6. package/dist/bun/cli.js.map +1 -1
  7. package/dist/bun/sandbox-env-setup.d.ts +2 -0
  8. package/dist/bun/sandbox-env-setup.d.ts.map +1 -0
  9. package/dist/bun/sandbox-env-setup.js +4 -0
  10. package/dist/bun/sandbox-env-setup.js.map +1 -0
  11. package/dist/bundle/chunks/anthropic-messages-MYU5ZMRF.js +6 -0
  12. package/dist/bundle/chunks/azure-openai-responses-HUSQ3GP2.js +2 -0
  13. package/dist/bundle/chunks/bedrock-converse-stream.js +47 -38
  14. package/dist/bundle/chunks/chunk-7IOYH2SY.js +2 -0
  15. package/dist/bundle/chunks/chunk-7YM6BE7Y.js +1561 -0
  16. package/dist/bundle/chunks/chunk-A3JYRWB6.js +2 -0
  17. package/dist/bundle/chunks/chunk-DTD7JQ7Y.js +42 -0
  18. package/dist/bundle/chunks/chunk-FUXEF6JQ.js +44 -0
  19. package/dist/bundle/chunks/{chunk-IDDQWTHI.js → chunk-RCZIEVGO.js} +10 -1
  20. package/dist/bundle/chunks/chunk-S7SZN6Z3.js +2 -0
  21. package/dist/bundle/chunks/chunk-WIUZI2CJ.js +11 -0
  22. package/dist/bundle/chunks/github-copilot.js +1 -1
  23. package/dist/bundle/chunks/google-generative-ai-IMS5EK2Y.js +2 -0
  24. package/dist/bundle/chunks/google-vertex-O4YJEQUW.js +2 -0
  25. package/dist/bundle/chunks/jiti-loader-C3NU2SDH.js +21 -0
  26. package/dist/bundle/chunks/jiti-static-loader-E6ANQD5T.js +2 -0
  27. package/dist/bundle/chunks/mistral-conversations-NOSQHBEY.js +5 -0
  28. package/dist/bundle/chunks/{node-EM5FIVUN.js → node-O3RIBJRH.js} +1 -1
  29. package/dist/bundle/chunks/openai-codex-responses-QDSOTBBO.js +10 -0
  30. package/dist/bundle/chunks/openai-completions-KQPOPEVM.js +7 -0
  31. package/dist/bundle/chunks/openai-responses-HWEUZ6WZ.js +2 -0
  32. package/dist/bundle/chunks/{pi-messages-EGZIFQGG.js → pi-messages-GFKBWJHZ.js} +1 -1
  33. package/dist/bundle/chunks/virtual-modules-XW5APVUE.js +2 -0
  34. package/dist/bundle/cli.js +1 -1
  35. package/dist/bundle/index.js +1 -1
  36. package/dist/bundle/rpc-entry.js +1 -1
  37. package/dist/cli/args.d.ts.map +1 -1
  38. package/dist/cli/args.js +0 -2
  39. package/dist/cli/args.js.map +1 -1
  40. package/dist/cli/session-picker.d.ts +1 -1
  41. package/dist/cli/session-picker.d.ts.map +1 -1
  42. package/dist/cli/session-picker.js.map +1 -1
  43. package/dist/cli/setup.d.ts +2 -0
  44. package/dist/cli/setup.d.ts.map +1 -0
  45. package/dist/cli/setup.js +12 -0
  46. package/dist/cli/setup.js.map +1 -0
  47. package/dist/cli.d.ts.map +1 -1
  48. package/dist/cli.js +3 -25
  49. package/dist/cli.js.map +1 -1
  50. package/dist/config.d.ts.map +1 -1
  51. package/dist/config.js +1 -1
  52. package/dist/config.js.map +1 -1
  53. package/dist/core/agent-session.d.ts +56 -6
  54. package/dist/core/agent-session.d.ts.map +1 -1
  55. package/dist/core/agent-session.js +293 -155
  56. package/dist/core/agent-session.js.map +1 -1
  57. package/dist/core/bug-report-upload.d.ts +12 -0
  58. package/dist/core/bug-report-upload.d.ts.map +1 -0
  59. package/dist/core/bug-report-upload.js +22 -0
  60. package/dist/core/bug-report-upload.js.map +1 -0
  61. package/dist/core/bug-report.d.ts +176 -0
  62. package/dist/core/bug-report.d.ts.map +1 -0
  63. package/dist/core/bug-report.js +292 -0
  64. package/dist/core/bug-report.js.map +1 -0
  65. package/dist/core/cache-stats.d.ts.map +1 -1
  66. package/dist/core/cache-stats.js +12 -1
  67. package/dist/core/cache-stats.js.map +1 -1
  68. package/dist/core/cache-warmer.d.ts +102 -0
  69. package/dist/core/cache-warmer.d.ts.map +1 -0
  70. package/dist/core/cache-warmer.js +342 -0
  71. package/dist/core/cache-warmer.js.map +1 -0
  72. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  73. package/dist/core/compaction/branch-summarization.js +2 -2
  74. package/dist/core/compaction/branch-summarization.js.map +1 -1
  75. package/dist/core/compaction/compaction.d.ts +2 -2
  76. package/dist/core/compaction/compaction.d.ts.map +1 -1
  77. package/dist/core/compaction/compaction.js +11 -12
  78. package/dist/core/compaction/compaction.js.map +1 -1
  79. package/dist/core/crash-log.d.ts +22 -0
  80. package/dist/core/crash-log.d.ts.map +1 -0
  81. package/dist/core/crash-log.js +71 -0
  82. package/dist/core/crash-log.js.map +1 -0
  83. package/dist/core/experimental.d.ts +0 -4
  84. package/dist/core/experimental.d.ts.map +1 -1
  85. package/dist/core/experimental.js +0 -4
  86. package/dist/core/experimental.js.map +1 -1
  87. package/dist/core/extensions/index.d.ts +1 -1
  88. package/dist/core/extensions/index.d.ts.map +1 -1
  89. package/dist/core/extensions/index.js.map +1 -1
  90. package/dist/core/extensions/jiti-loader.d.ts +2 -0
  91. package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
  92. package/dist/core/extensions/jiti-loader.js +4 -0
  93. package/dist/core/extensions/jiti-loader.js.map +1 -0
  94. package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
  95. package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
  96. package/dist/core/extensions/jiti-static-loader.js +4 -0
  97. package/dist/core/extensions/jiti-static-loader.js.map +1 -0
  98. package/dist/core/extensions/loader.d.ts.map +1 -1
  99. package/dist/core/extensions/loader.js +38 -51
  100. package/dist/core/extensions/loader.js.map +1 -1
  101. package/dist/core/extensions/runner.d.ts +10 -7
  102. package/dist/core/extensions/runner.d.ts.map +1 -1
  103. package/dist/core/extensions/runner.js +85 -67
  104. package/dist/core/extensions/runner.js.map +1 -1
  105. package/dist/core/extensions/types.d.ts +60 -50
  106. package/dist/core/extensions/types.d.ts.map +1 -1
  107. package/dist/core/extensions/types.js.map +1 -1
  108. package/dist/core/extensions/virtual-modules.d.ts +3 -0
  109. package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
  110. package/dist/core/extensions/virtual-modules.js +38 -0
  111. package/dist/core/extensions/virtual-modules.js.map +1 -0
  112. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  113. package/dist/core/extensions/wrapper.js +1 -20
  114. package/dist/core/extensions/wrapper.js.map +1 -1
  115. package/dist/core/index.d.ts +2 -1
  116. package/dist/core/index.d.ts.map +1 -1
  117. package/dist/core/index.js.map +1 -1
  118. package/dist/core/keybindings.d.ts +6 -1
  119. package/dist/core/keybindings.d.ts.map +1 -1
  120. package/dist/core/keybindings.js +5 -1
  121. package/dist/core/keybindings.js.map +1 -1
  122. package/dist/core/messages.d.ts.map +1 -1
  123. package/dist/core/messages.js +1 -0
  124. package/dist/core/messages.js.map +1 -1
  125. package/dist/core/model-config.d.ts +101 -20
  126. package/dist/core/model-config.d.ts.map +1 -1
  127. package/dist/core/model-config.js +25 -18
  128. package/dist/core/model-config.js.map +1 -1
  129. package/dist/core/model-registry.d.ts +5 -1
  130. package/dist/core/model-registry.d.ts.map +1 -1
  131. package/dist/core/model-registry.js +8 -0
  132. package/dist/core/model-registry.js.map +1 -1
  133. package/dist/core/model-resolver.d.ts.map +1 -1
  134. package/dist/core/model-resolver.js +1 -1
  135. package/dist/core/model-resolver.js.map +1 -1
  136. package/dist/core/model-runtime.d.ts.map +1 -1
  137. package/dist/core/model-runtime.js +5 -3
  138. package/dist/core/model-runtime.js.map +1 -1
  139. package/dist/core/provider-composer.d.ts +3 -2
  140. package/dist/core/provider-composer.d.ts.map +1 -1
  141. package/dist/core/provider-composer.js +2 -0
  142. package/dist/core/provider-composer.js.map +1 -1
  143. package/dist/core/radius.d.ts +3 -0
  144. package/dist/core/radius.d.ts.map +1 -1
  145. package/dist/core/radius.js +6 -0
  146. package/dist/core/radius.js.map +1 -1
  147. package/dist/core/sdk.d.ts.map +1 -1
  148. package/dist/core/sdk.js +60 -38
  149. package/dist/core/sdk.js.map +1 -1
  150. package/dist/core/session-export.d.ts +6 -2
  151. package/dist/core/session-export.d.ts.map +1 -1
  152. package/dist/core/session-export.js +14 -13
  153. package/dist/core/session-export.js.map +1 -1
  154. package/dist/core/session-manager.d.ts +29 -6
  155. package/dist/core/session-manager.d.ts.map +1 -1
  156. package/dist/core/session-manager.js +159 -96
  157. package/dist/core/session-manager.js.map +1 -1
  158. package/dist/core/settings-manager.d.ts +20 -4
  159. package/dist/core/settings-manager.d.ts.map +1 -1
  160. package/dist/core/settings-manager.js +43 -7
  161. package/dist/core/settings-manager.js.map +1 -1
  162. package/dist/core/slash-commands.d.ts.map +1 -1
  163. package/dist/core/slash-commands.js +1 -0
  164. package/dist/core/slash-commands.js.map +1 -1
  165. package/dist/core/system-prompt.d.ts +49 -6
  166. package/dist/core/system-prompt.d.ts.map +1 -1
  167. package/dist/core/system-prompt.js +121 -92
  168. package/dist/core/system-prompt.js.map +1 -1
  169. package/dist/core/tools/bash.d.ts +2 -1
  170. package/dist/core/tools/bash.d.ts.map +1 -1
  171. package/dist/core/tools/bash.js +10 -4
  172. package/dist/core/tools/bash.js.map +1 -1
  173. package/dist/core/tools/edit.d.ts.map +1 -1
  174. package/dist/core/tools/edit.js +1 -2
  175. package/dist/core/tools/edit.js.map +1 -1
  176. package/dist/core/tools/read.d.ts.map +1 -1
  177. package/dist/core/tools/read.js +1 -2
  178. package/dist/core/tools/read.js.map +1 -1
  179. package/dist/core/tools/renderers/bash.d.ts.map +1 -1
  180. package/dist/core/tools/renderers/bash.js +9 -1
  181. package/dist/core/tools/renderers/bash.js.map +1 -1
  182. package/dist/core/tools/write.d.ts.map +1 -1
  183. package/dist/core/tools/write.js +1 -2
  184. package/dist/core/tools/write.js.map +1 -1
  185. package/dist/core/usage-totals.d.ts +1 -1
  186. package/dist/core/usage-totals.d.ts.map +1 -1
  187. package/dist/core/usage-totals.js +5 -1
  188. package/dist/core/usage-totals.js.map +1 -1
  189. package/dist/extensions/llama/client.d.ts +2 -0
  190. package/dist/extensions/llama/client.d.ts.map +1 -1
  191. package/dist/extensions/llama/client.js +7 -3
  192. package/dist/extensions/llama/client.js.map +1 -1
  193. package/dist/extensions/llama/provider.d.ts.map +1 -1
  194. package/dist/extensions/llama/provider.js +20 -5
  195. package/dist/extensions/llama/provider.js.map +1 -1
  196. package/dist/index.d.ts +3 -2
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js.map +1 -1
  199. package/dist/main.d.ts.map +1 -1
  200. package/dist/main.js +13 -131
  201. package/dist/main.js.map +1 -1
  202. package/dist/migrations.d.ts.map +1 -1
  203. package/dist/migrations.js +2 -2
  204. package/dist/migrations.js.map +1 -1
  205. package/dist/modes/interactive/bug-report.d.ts +14 -0
  206. package/dist/modes/interactive/bug-report.d.ts.map +1 -0
  207. package/dist/modes/interactive/bug-report.js +209 -0
  208. package/dist/modes/interactive/bug-report.js.map +1 -0
  209. package/dist/modes/interactive/chat-viewport.d.ts.map +1 -1
  210. package/dist/modes/interactive/chat-viewport.js +1 -1
  211. package/dist/modes/interactive/chat-viewport.js.map +1 -1
  212. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  213. package/dist/modes/interactive/components/branch-summary-message.js +12 -5
  214. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  215. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  216. package/dist/modes/interactive/components/compaction-summary-message.js +12 -5
  217. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  218. package/dist/modes/interactive/components/custom-editor.d.ts +3 -3
  219. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  220. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  221. package/dist/modes/interactive/components/extension-input.d.ts +2 -0
  222. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  223. package/dist/modes/interactive/components/extension-input.js +6 -0
  224. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  225. package/dist/modes/interactive/components/extension-selector.d.ts +1 -0
  226. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  227. package/dist/modes/interactive/components/extension-selector.js +4 -0
  228. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  229. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  230. package/dist/modes/interactive/components/footer.js +4 -1
  231. package/dist/modes/interactive/components/footer.js.map +1 -1
  232. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  233. package/dist/modes/interactive/components/model-selector.js +5 -5
  234. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  235. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  236. package/dist/modes/interactive/components/scoped-models-selector.js +8 -8
  237. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  238. package/dist/modes/interactive/components/session-selector.d.ts +5 -5
  239. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  240. package/dist/modes/interactive/components/session-selector.js +74 -48
  241. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  242. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  243. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  244. package/dist/modes/interactive/components/settings-selector.js +11 -0
  245. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  246. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  247. package/dist/modes/interactive/components/skill-invocation-message.js +11 -4
  248. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  249. package/dist/modes/interactive/components/status-indicator.d.ts +2 -2
  250. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  251. package/dist/modes/interactive/components/status-indicator.js +7 -7
  252. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  253. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  254. package/dist/modes/interactive/components/thinking-selector.js +4 -4
  255. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  256. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  257. package/dist/modes/interactive/components/tool-execution.js +18 -9
  258. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  259. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  260. package/dist/modes/interactive/components/tree-selector.js +2 -0
  261. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  262. package/dist/modes/interactive/interactive-mode.d.ts +13 -1
  263. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  264. package/dist/modes/interactive/interactive-mode.js +220 -84
  265. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  266. package/dist/modes/interactive/session-share.d.ts +2 -0
  267. package/dist/modes/interactive/session-share.d.ts.map +1 -1
  268. package/dist/modes/interactive/session-share.js +8 -4
  269. package/dist/modes/interactive/session-share.js.map +1 -1
  270. package/dist/modes/interactive/tui-renderer.d.ts.map +1 -1
  271. package/dist/modes/interactive/tui-renderer.js +2 -2
  272. package/dist/modes/interactive/tui-renderer.js.map +1 -1
  273. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  274. package/dist/modes/rpc/rpc-mode.js +2 -2
  275. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  276. package/dist/utils/clipboard-command.d.ts +7 -0
  277. package/dist/utils/clipboard-command.d.ts.map +1 -0
  278. package/dist/utils/clipboard-command.js +45 -0
  279. package/dist/utils/clipboard-command.js.map +1 -0
  280. package/dist/utils/clipboard-image.d.ts.map +1 -1
  281. package/dist/utils/clipboard-image.js +52 -69
  282. package/dist/utils/clipboard-image.js.map +1 -1
  283. package/dist/utils/clipboard.d.ts.map +1 -1
  284. package/dist/utils/clipboard.js +61 -125
  285. package/dist/utils/clipboard.js.map +1 -1
  286. package/dist/utils/zip.d.ts +7 -0
  287. package/dist/utils/zip.d.ts.map +1 -0
  288. package/dist/utils/zip.js +60 -0
  289. package/dist/utils/zip.js.map +1 -0
  290. package/docs/compaction.md +39 -13
  291. package/docs/containerization.md +45 -0
  292. package/docs/custom-provider.md +22 -13
  293. package/docs/development.md +23 -4
  294. package/docs/docs.json +4 -0
  295. package/docs/environment-variables.md +3 -2
  296. package/docs/extensions.md +57 -43
  297. package/docs/json.md +4 -4
  298. package/docs/keybindings.md +2 -1
  299. package/docs/models.md +34 -3
  300. package/docs/providers.md +2 -2
  301. package/docs/sdk.md +4 -2
  302. package/docs/security.md +1 -1
  303. package/docs/session-format.md +82 -40
  304. package/docs/sessions.md +27 -0
  305. package/docs/settings.md +60 -1
  306. package/docs/termux.md +0 -1
  307. package/docs/tui.md +2 -2
  308. package/docs/usage.md +1 -0
  309. package/examples/extensions/README.md +0 -1
  310. package/examples/extensions/custom-provider-anthropic/index.ts +18 -12
  311. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  312. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  313. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  314. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  315. package/examples/extensions/gondolin/package-lock.json +2 -2
  316. package/examples/extensions/gondolin/package.json +1 -1
  317. package/examples/extensions/prompt-customizer.ts +19 -67
  318. package/examples/extensions/sandbox/package-lock.json +2 -2
  319. package/examples/extensions/sandbox/package.json +1 -1
  320. package/examples/extensions/with-deps/package-lock.json +2 -2
  321. package/examples/extensions/with-deps/package.json +1 -1
  322. package/npm-shrinkwrap.json +425 -778
  323. package/package.json +22 -27
  324. package/dist/bundle/chunks/anthropic-messages-QAQLEQIY.js +0 -6
  325. package/dist/bundle/chunks/azure-openai-responses-Q7MJBRE6.js +0 -2
  326. package/dist/bundle/chunks/chunk-2KVJKXS2.js +0 -50
  327. package/dist/bundle/chunks/chunk-AXIIZGTV.js +0 -2
  328. package/dist/bundle/chunks/chunk-EQ6DR6XK.js +0 -5
  329. package/dist/bundle/chunks/chunk-GMWCTUPB.js +0 -2
  330. package/dist/bundle/chunks/chunk-LZKJTKCT.js +0 -2
  331. package/dist/bundle/chunks/chunk-OUXLLA64.js +0 -11
  332. package/dist/bundle/chunks/chunk-R7UUJ4C2.js +0 -42
  333. package/dist/bundle/chunks/chunk-UAQELI3K.js +0 -2
  334. package/dist/bundle/chunks/chunk-WBE4J4AU.js +0 -9
  335. package/dist/bundle/chunks/chunk-WZB2R5YO.js +0 -1558
  336. package/dist/bundle/chunks/google-generative-ai-BSMTYDAM.js +0 -2
  337. package/dist/bundle/chunks/google-vertex-5C3HASOJ.js +0 -2
  338. package/dist/bundle/chunks/mistral-conversations-4M6BZBX6.js +0 -5
  339. package/dist/bundle/chunks/openai-codex-responses-YJOO52RW.js +0 -10
  340. package/dist/bundle/chunks/openai-completions-QOT3QX7D.js +0 -7
  341. package/dist/bundle/chunks/openai-responses-U7LNPQN4.js +0 -2
  342. package/dist/bundle/client.js +0 -2
  343. package/dist/bundle/coordinator.js +0 -3
  344. package/dist/cli/experimental/cli.d.ts +0 -10
  345. package/dist/cli/experimental/cli.d.ts.map +0 -1
  346. package/dist/cli/experimental/cli.js +0 -9
  347. package/dist/cli/experimental/cli.js.map +0 -1
  348. package/dist/cli/experimental/command-options.d.ts +0 -28
  349. package/dist/cli/experimental/command-options.d.ts.map +0 -1
  350. package/dist/cli/experimental/command-options.js +0 -84
  351. package/dist/cli/experimental/command-options.js.map +0 -1
  352. package/dist/cli/experimental/command.d.ts +0 -70
  353. package/dist/cli/experimental/command.d.ts.map +0 -1
  354. package/dist/cli/experimental/command.js +0 -144
  355. package/dist/cli/experimental/command.js.map +0 -1
  356. package/dist/cli/experimental/commands/client.d.ts +0 -19
  357. package/dist/cli/experimental/commands/client.d.ts.map +0 -1
  358. package/dist/cli/experimental/commands/client.js +0 -63
  359. package/dist/cli/experimental/commands/client.js.map +0 -1
  360. package/dist/cli/experimental/commands/server.d.ts +0 -17
  361. package/dist/cli/experimental/commands/server.d.ts.map +0 -1
  362. package/dist/cli/experimental/commands/server.js +0 -44
  363. package/dist/cli/experimental/commands/server.js.map +0 -1
  364. package/dist/client/index.d.ts +0 -2
  365. package/dist/client/index.d.ts.map +0 -1
  366. package/dist/client/index.js +0 -2
  367. package/dist/client/index.js.map +0 -1
  368. package/dist/experimental/client-runtime.d.ts +0 -43
  369. package/dist/experimental/client-runtime.d.ts.map +0 -1
  370. package/dist/experimental/client-runtime.js +0 -183
  371. package/dist/experimental/client-runtime.js.map +0 -1
  372. package/dist/experimental/client-tui-chat.d.ts +0 -14
  373. package/dist/experimental/client-tui-chat.d.ts.map +0 -1
  374. package/dist/experimental/client-tui-chat.js +0 -171
  375. package/dist/experimental/client-tui-chat.js.map +0 -1
  376. package/dist/experimental/client-tui.d.ts +0 -37
  377. package/dist/experimental/client-tui.d.ts.map +0 -1
  378. package/dist/experimental/client-tui.js +0 -702
  379. package/dist/experimental/client-tui.js.map +0 -1
  380. package/dist/experimental/client.d.ts +0 -25
  381. package/dist/experimental/client.d.ts.map +0 -1
  382. package/dist/experimental/client.js +0 -99
  383. package/dist/experimental/client.js.map +0 -1
  384. package/dist/experimental/coordinator-entry.d.ts +0 -3
  385. package/dist/experimental/coordinator-entry.d.ts.map +0 -1
  386. package/dist/experimental/coordinator-entry.js +0 -11
  387. package/dist/experimental/coordinator-entry.js.map +0 -1
  388. package/dist/experimental/coordinator.d.ts +0 -38
  389. package/dist/experimental/coordinator.d.ts.map +0 -1
  390. package/dist/experimental/coordinator.js +0 -570
  391. package/dist/experimental/coordinator.js.map +0 -1
  392. package/dist/experimental/mini/main.d.ts +0 -7
  393. package/dist/experimental/mini/main.d.ts.map +0 -1
  394. package/dist/experimental/mini/main.js +0 -21
  395. package/dist/experimental/mini/main.js.map +0 -1
  396. package/dist/experimental/mini/server/entry.d.ts +0 -3
  397. package/dist/experimental/mini/server/entry.d.ts.map +0 -1
  398. package/dist/experimental/mini/server/entry.js +0 -11
  399. package/dist/experimental/mini/server/entry.js.map +0 -1
  400. package/dist/experimental/mini/server/run.d.ts +0 -13
  401. package/dist/experimental/mini/server/run.d.ts.map +0 -1
  402. package/dist/experimental/mini/server/run.js +0 -150
  403. package/dist/experimental/mini/server/run.js.map +0 -1
  404. package/dist/experimental/mini/shared/protocol.d.ts +0 -127
  405. package/dist/experimental/mini/shared/protocol.d.ts.map +0 -1
  406. package/dist/experimental/mini/shared/protocol.js +0 -13
  407. package/dist/experimental/mini/shared/protocol.js.map +0 -1
  408. package/dist/experimental/mini/shared/rpc.d.ts +0 -49
  409. package/dist/experimental/mini/shared/rpc.d.ts.map +0 -1
  410. package/dist/experimental/mini/shared/rpc.js +0 -171
  411. package/dist/experimental/mini/shared/rpc.js.map +0 -1
  412. package/dist/experimental/mini/shared/transport.d.ts +0 -35
  413. package/dist/experimental/mini/shared/transport.d.ts.map +0 -1
  414. package/dist/experimental/mini/shared/transport.js +0 -94
  415. package/dist/experimental/mini/shared/transport.js.map +0 -1
  416. package/dist/experimental/mini/tui/run.d.ts +0 -9
  417. package/dist/experimental/mini/tui/run.d.ts.map +0 -1
  418. package/dist/experimental/mini/tui/run.js +0 -62
  419. package/dist/experimental/mini/tui/run.js.map +0 -1
  420. package/dist/experimental/mini/tui/session.d.ts +0 -26
  421. package/dist/experimental/mini/tui/session.d.ts.map +0 -1
  422. package/dist/experimental/mini/tui/session.js +0 -94
  423. package/dist/experimental/mini/tui/session.js.map +0 -1
  424. package/dist/experimental/mini/tui/view.d.ts +0 -10
  425. package/dist/experimental/mini/tui/view.d.ts.map +0 -1
  426. package/dist/experimental/mini/tui/view.js +0 -459
  427. package/dist/experimental/mini/tui/view.js.map +0 -1
  428. package/dist/experimental/mini/worker/entry.d.ts +0 -3
  429. package/dist/experimental/mini/worker/entry.d.ts.map +0 -1
  430. package/dist/experimental/mini/worker/entry.js +0 -10
  431. package/dist/experimental/mini/worker/entry.js.map +0 -1
  432. package/dist/experimental/mini/worker/lane-service.d.ts +0 -44
  433. package/dist/experimental/mini/worker/lane-service.d.ts.map +0 -1
  434. package/dist/experimental/mini/worker/lane-service.js +0 -97
  435. package/dist/experimental/mini/worker/lane-service.js.map +0 -1
  436. package/dist/experimental/mini/worker/models-service.d.ts +0 -19
  437. package/dist/experimental/mini/worker/models-service.d.ts.map +0 -1
  438. package/dist/experimental/mini/worker/models-service.js +0 -136
  439. package/dist/experimental/mini/worker/models-service.js.map +0 -1
  440. package/dist/experimental/mini/worker/run.d.ts +0 -14
  441. package/dist/experimental/mini/worker/run.d.ts.map +0 -1
  442. package/dist/experimental/mini/worker/run.js +0 -88
  443. package/dist/experimental/mini/worker/run.js.map +0 -1
  444. package/dist/experimental/plugin.d.ts +0 -4
  445. package/dist/experimental/plugin.d.ts.map +0 -1
  446. package/dist/experimental/plugin.js +0 -4
  447. package/dist/experimental/plugin.js.map +0 -1
  448. package/dist/experimental/plugins/bundled.d.ts +0 -7
  449. package/dist/experimental/plugins/bundled.d.ts.map +0 -1
  450. package/dist/experimental/plugins/bundled.js +0 -48
  451. package/dist/experimental/plugins/bundled.js.map +0 -1
  452. package/dist/experimental/plugins/package.d.ts +0 -18
  453. package/dist/experimental/plugins/package.d.ts.map +0 -1
  454. package/dist/experimental/plugins/package.js +0 -113
  455. package/dist/experimental/plugins/package.js.map +0 -1
  456. package/dist/experimental/process.d.ts +0 -20
  457. package/dist/experimental/process.d.ts.map +0 -1
  458. package/dist/experimental/process.js +0 -85
  459. package/dist/experimental/process.js.map +0 -1
  460. package/dist/experimental/radius-auth.d.ts +0 -17
  461. package/dist/experimental/radius-auth.d.ts.map +0 -1
  462. package/dist/experimental/radius-auth.js +0 -52
  463. package/dist/experimental/radius-auth.js.map +0 -1
  464. package/dist/experimental/radius-relay.d.ts +0 -90
  465. package/dist/experimental/radius-relay.d.ts.map +0 -1
  466. package/dist/experimental/radius-relay.js +0 -582
  467. package/dist/experimental/radius-relay.js.map +0 -1
  468. package/dist/experimental/server.d.ts +0 -75
  469. package/dist/experimental/server.d.ts.map +0 -1
  470. package/dist/experimental/server.js +0 -682
  471. package/dist/experimental/server.js.map +0 -1
  472. package/dist/experimental/services/agent-controller-provider.d.ts +0 -4
  473. package/dist/experimental/services/agent-controller-provider.d.ts.map +0 -1
  474. package/dist/experimental/services/agent-controller-provider.js +0 -84
  475. package/dist/experimental/services/agent-controller-provider.js.map +0 -1
  476. package/dist/experimental/services/agent-controller.d.ts +0 -57
  477. package/dist/experimental/services/agent-controller.d.ts.map +0 -1
  478. package/dist/experimental/services/agent-controller.js +0 -3
  479. package/dist/experimental/services/agent-controller.js.map +0 -1
  480. package/dist/experimental/services/connection.d.ts +0 -40
  481. package/dist/experimental/services/connection.d.ts.map +0 -1
  482. package/dist/experimental/services/connection.js +0 -300
  483. package/dist/experimental/services/connection.js.map +0 -1
  484. package/dist/experimental/services/models-provider.d.ts +0 -16
  485. package/dist/experimental/services/models-provider.d.ts.map +0 -1
  486. package/dist/experimental/services/models-provider.js +0 -116
  487. package/dist/experimental/services/models-provider.js.map +0 -1
  488. package/dist/experimental/services/models.d.ts +0 -36
  489. package/dist/experimental/services/models.d.ts.map +0 -1
  490. package/dist/experimental/services/models.js +0 -3
  491. package/dist/experimental/services/models.js.map +0 -1
  492. package/dist/experimental/services/plugins.d.ts +0 -16
  493. package/dist/experimental/services/plugins.d.ts.map +0 -1
  494. package/dist/experimental/services/plugins.js +0 -4
  495. package/dist/experimental/services/plugins.js.map +0 -1
  496. package/dist/experimental/services/presentation-ui.d.ts +0 -13
  497. package/dist/experimental/services/presentation-ui.d.ts.map +0 -1
  498. package/dist/experimental/services/presentation-ui.js +0 -3
  499. package/dist/experimental/services/presentation-ui.js.map +0 -1
  500. package/dist/experimental/services/server.d.ts +0 -19
  501. package/dist/experimental/services/server.d.ts.map +0 -1
  502. package/dist/experimental/services/server.js +0 -104
  503. package/dist/experimental/services/server.js.map +0 -1
  504. package/dist/experimental/services/sessions.d.ts +0 -28
  505. package/dist/experimental/services/sessions.d.ts.map +0 -1
  506. package/dist/experimental/services/sessions.js +0 -4
  507. package/dist/experimental/services/sessions.js.map +0 -1
  508. package/dist/experimental/services/slash-commands-provider.d.ts +0 -14
  509. package/dist/experimental/services/slash-commands-provider.d.ts.map +0 -1
  510. package/dist/experimental/services/slash-commands-provider.js +0 -200
  511. package/dist/experimental/services/slash-commands-provider.js.map +0 -1
  512. package/dist/experimental/services/slash-commands.d.ts +0 -24
  513. package/dist/experimental/services/slash-commands.d.ts.map +0 -1
  514. package/dist/experimental/services/slash-commands.js +0 -3
  515. package/dist/experimental/services/slash-commands.js.map +0 -1
  516. package/dist/experimental/services/transcript-provider.d.ts +0 -12
  517. package/dist/experimental/services/transcript-provider.d.ts.map +0 -1
  518. package/dist/experimental/services/transcript-provider.js +0 -109
  519. package/dist/experimental/services/transcript-provider.js.map +0 -1
  520. package/dist/experimental/services/transcript.d.ts +0 -13
  521. package/dist/experimental/services/transcript.d.ts.map +0 -1
  522. package/dist/experimental/services/transcript.js +0 -3
  523. package/dist/experimental/services/transcript.js.map +0 -1
  524. package/dist/experimental/services/worker.d.ts +0 -28
  525. package/dist/experimental/services/worker.d.ts.map +0 -1
  526. package/dist/experimental/services/worker.js +0 -107
  527. package/dist/experimental/services/worker.js.map +0 -1
  528. package/dist/experimental/session-worker-manager.d.ts +0 -24
  529. package/dist/experimental/session-worker-manager.d.ts.map +0 -1
  530. package/dist/experimental/session-worker-manager.js +0 -691
  531. package/dist/experimental/session-worker-manager.js.map +0 -1
  532. package/dist/experimental/session-worker.d.ts +0 -188
  533. package/dist/experimental/session-worker.d.ts.map +0 -1
  534. package/dist/experimental/session-worker.js +0 -785
  535. package/dist/experimental/session-worker.js.map +0 -1
  536. package/dist/experimental/source-resolver.d.ts +0 -2
  537. package/dist/experimental/source-resolver.d.ts.map +0 -1
  538. package/dist/experimental/source-resolver.js +0 -71
  539. package/dist/experimental/source-resolver.js.map +0 -1
  540. package/dist/utils/clipboard-native.d.ts +0 -11
  541. package/dist/utils/clipboard-native.d.ts.map +0 -1
  542. package/dist/utils/clipboard-native.js +0 -20
  543. package/dist/utils/clipboard-native.js.map +0 -1
  544. package/examples/extensions/kimi-deferred-tools.ts +0 -61
@@ -1,785 +0,0 @@
1
- import { createConnection } from "node:net";
2
- import { isAbsolute } from "node:path";
3
- import { isJsonValue, parseServiceProviderUpdate, REMOTE_SERVICE_ERROR_CODES, RemoteServiceError, } from "@earendil-works/chord";
4
- import { AgentHarness, BACKGROUND_CONTEXT, createBashTool, createReadTool, createWriteTool, JsonlSessionRepo, TODO_CONTEXT, withCancel, } from "@earendil-works/pi-agent-core";
5
- import { NodeExecutionEnv } from "@earendil-works/pi-agent-core/node";
6
- import lockfile from "proper-lockfile";
7
- import Type from "typebox";
8
- import { Check } from "typebox/value";
9
- import { findInitialModel, resolveCliModel } from "../core/model-resolver.js";
10
- import { ModelRuntime } from "../core/model-runtime.js";
11
- import { SettingsManager } from "../core/settings-manager.js";
12
- import { COORDINATOR_PROTOCOL_VERSION } from "./coordinator.js";
13
- import { createSessionPluginFacetLoader } from "./plugins/bundled.js";
14
- import { consumeInternalProcessRole, encodeControlLine, isDirectInternalProcessEntry, MAX_CONTROL_LINE_BYTES, } from "./process.js";
15
- import { createSessionWorkerServices, } from "./services/worker.js";
16
- const StrictObject = (properties) => Type.Object(properties, { additionalProperties: false });
17
- const OpaqueJsonValueSchema = Type.Unsafe(Type.Unknown());
18
- const ServiceCallSchema = Type.Unsafe(StrictObject({
19
- serviceId: Type.String({ minLength: 1 }),
20
- instance: Type.Optional(StrictObject({ key: Type.String({ minLength: 1 }), generation: Type.Integer({ minimum: 1 }) })),
21
- member: Type.String({ minLength: 1 }),
22
- args: Type.Array(Type.Unknown()),
23
- }));
24
- const RemoteServiceErrorCodeSchema = Type.Unsafe(Type.String({ pattern: `^(?:${REMOTE_SERVICE_ERROR_CODES.join("|")})$` }));
25
- export const SESSION_WORKER_CONTROL_ADDRESS_ENV = "PI_SESSION_WORKER_CONTROL_ADDRESS";
26
- export const SESSION_WORKER_CONTROL_TOKEN_ENV = "PI_SESSION_WORKER_CONTROL_TOKEN";
27
- export const SESSION_WORKER_SESSION_KEY_ENV = "PI_SESSION_WORKER_SESSION_KEY_BASE64";
28
- export const SESSION_WORKER_PEER_ID_ENV = "PI_SESSION_WORKER_PEER_ID";
29
- export const SessionWorkerMetadataSchema = StrictObject({
30
- id: Type.String({ minLength: 1 }),
31
- createdAt: Type.Integer(),
32
- storageVersion: Type.Integer(),
33
- cwd: Type.String(),
34
- path: Type.String(),
35
- modifiedAt: Type.Number(),
36
- parentSessionId: Type.Optional(Type.String()),
37
- });
38
- export const SessionWorkerOptionsSchema = StrictObject({
39
- sessionDir: Type.String({ minLength: 1 }),
40
- metadata: SessionWorkerMetadataSchema,
41
- provider: Type.Optional(Type.String({ minLength: 1 })),
42
- model: Type.Optional(Type.String({ minLength: 1 })),
43
- pluginManifestPaths: Type.Array(Type.String({ minLength: 1 })),
44
- });
45
- export const WorkerOperationScopeSchema = StrictObject({
46
- serverConnectionId: Type.String(),
47
- attachmentId: Type.String(),
48
- });
49
- export const WorkerOperationRequestSchema = StrictObject({
50
- type: Type.Literal("operation"),
51
- requestId: Type.String({ minLength: 1 }),
52
- scope: WorkerOperationScopeSchema,
53
- call: ServiceCallSchema,
54
- });
55
- export const WorkerOperationResponseSchema = Type.Union([
56
- StrictObject({
57
- type: Type.Literal("operation_result"),
58
- requestId: Type.String({ minLength: 1 }),
59
- scope: WorkerOperationScopeSchema,
60
- result: Type.Optional(OpaqueJsonValueSchema),
61
- }),
62
- StrictObject({
63
- type: Type.Literal("operation_error"),
64
- requestId: Type.String({ minLength: 1 }),
65
- scope: WorkerOperationScopeSchema,
66
- code: Type.Optional(RemoteServiceErrorCodeSchema),
67
- message: Type.String(),
68
- }),
69
- ]);
70
- export const SessionWorkerCommandSchema = Type.Union([
71
- Type.Object({ type: Type.Literal("shutdown") }),
72
- Type.Object({ type: Type.Literal("discover_workers") }),
73
- Type.Object({
74
- type: Type.Literal("session_demand"),
75
- serverConnectionId: Type.String(),
76
- requestId: Type.String(),
77
- attachmentId: Type.String(),
78
- attached: Type.Boolean(),
79
- }),
80
- WorkerOperationRequestSchema,
81
- StrictObject({
82
- type: Type.Literal("operation_cancel"),
83
- requestId: Type.String({ minLength: 1 }),
84
- scope: WorkerOperationScopeSchema,
85
- }),
86
- ]);
87
- export const SessionWorkerEventSchema = Type.Union([
88
- Type.Object({
89
- type: Type.Literal("worker_ready"),
90
- token: Type.String(),
91
- sessionKey: Type.String(),
92
- sessionId: Type.String(),
93
- pid: Type.Integer({ minimum: 1 }),
94
- metadata: SessionWorkerMetadataSchema,
95
- pluginManifestPaths: Type.Array(Type.String({ minLength: 1 })),
96
- }),
97
- Type.Object({
98
- type: Type.Literal("worker_failed"),
99
- token: Type.String(),
100
- sessionKey: Type.String(),
101
- message: Type.String(),
102
- }),
103
- Type.Object({
104
- type: Type.Literal("demand_applied"),
105
- token: Type.String(),
106
- sessionKey: Type.String(),
107
- requestId: Type.String(),
108
- attachmentId: Type.String(),
109
- attached: Type.Boolean(),
110
- }),
111
- Type.Object({
112
- type: Type.Literal("demand_rejected"),
113
- token: Type.String(),
114
- sessionKey: Type.String(),
115
- requestId: Type.String(),
116
- message: Type.String(),
117
- }),
118
- Type.Object({
119
- type: Type.Literal("operation_response"),
120
- token: Type.String(),
121
- sessionKey: Type.String(),
122
- response: WorkerOperationResponseSchema,
123
- }),
124
- Type.Object({
125
- type: Type.Literal("service_update"),
126
- token: Type.String(),
127
- sessionKey: Type.String(),
128
- scope: WorkerOperationScopeSchema,
129
- subscriptionId: Type.String({ minLength: 1 }),
130
- update: Type.Unknown(),
131
- }),
132
- ]);
133
- /** Worker-local reconciliation of server-generation demand and Harness activity. */
134
- export class WorkerLifecycle {
135
- #initialDemandGraceMs;
136
- #orphanDemandGraceMs;
137
- #onRetire;
138
- #demands = new Map();
139
- #activeOperations = new Set();
140
- #currentServerConnectionId;
141
- #initialTimer;
142
- #demandInitialized;
143
- #retirementHolds = 0;
144
- #retiring = false;
145
- constructor(options) {
146
- this.#currentServerConnectionId = options.initialServerConnectionId;
147
- this.#initialDemandGraceMs = options.initialDemandGraceMs;
148
- this.#orphanDemandGraceMs = options.orphanDemandGraceMs;
149
- this.#onRetire = options.onRetire;
150
- this.#demandInitialized = false;
151
- this.#initialTimer = setTimeout(() => {
152
- this.#initialTimer = undefined;
153
- this.#demandInitialized = true;
154
- this.#reconcile();
155
- }, this.#initialDemandGraceMs);
156
- this.#initialTimer.unref();
157
- }
158
- serverConnected(serverConnectionId) {
159
- this.#currentServerConnectionId = serverConnectionId;
160
- for (const demand of this.#demands.values()) {
161
- if (demand.serverConnectionId !== serverConnectionId || !demand.timer)
162
- continue;
163
- clearTimeout(demand.timer);
164
- delete demand.timer;
165
- }
166
- }
167
- serverDisconnected(serverConnectionId) {
168
- if (this.#currentServerConnectionId === serverConnectionId)
169
- this.#currentServerConnectionId = undefined;
170
- for (const [key, demand] of this.#demands) {
171
- if (demand.serverConnectionId !== serverConnectionId || demand.timer)
172
- continue;
173
- demand.timer = setTimeout(() => {
174
- if (this.#demands.get(key) !== demand)
175
- return;
176
- this.#demands.delete(key);
177
- this.#reconcile();
178
- }, this.#orphanDemandGraceMs);
179
- demand.timer.unref();
180
- }
181
- }
182
- beginRequest(serverConnectionId, attachmentId) {
183
- if (this.#retiring)
184
- throw new Error("Session worker is retiring");
185
- if (serverConnectionId !== this.#currentServerConnectionId) {
186
- throw new Error("Session worker received a request from a stale server generation");
187
- }
188
- const demand = this.#demands.get(demandKey(serverConnectionId, attachmentId));
189
- if (!demand || demand.timer) {
190
- throw new Error("Session worker request does not match the active attachment");
191
- }
192
- return this.holdRetirement();
193
- }
194
- holdRetirement() {
195
- this.#retirementHolds += 1;
196
- let released = false;
197
- return () => {
198
- if (released)
199
- return;
200
- released = true;
201
- this.#retirementHolds -= 1;
202
- this.#reconcile();
203
- };
204
- }
205
- setDemand(serverConnectionId, attachmentId, attached) {
206
- if (this.#retiring)
207
- throw new Error("Session worker is retiring");
208
- if (serverConnectionId !== this.#currentServerConnectionId) {
209
- throw new Error("Session worker received demand from a stale server generation");
210
- }
211
- this.#demandInitialized = true;
212
- if (this.#initialTimer) {
213
- clearTimeout(this.#initialTimer);
214
- this.#initialTimer = undefined;
215
- }
216
- const key = demandKey(serverConnectionId, attachmentId);
217
- const previous = this.#demands.get(key);
218
- if (previous?.timer)
219
- clearTimeout(previous.timer);
220
- if (attached)
221
- this.#demands.set(key, { serverConnectionId, attachmentId });
222
- else
223
- this.#demands.delete(key);
224
- this.#reconcile();
225
- }
226
- operationStarted(kind, lane, operationId) {
227
- this.#activeOperations.add(`${kind}\0${lane}\0${operationId}`);
228
- }
229
- operationStopped(kind, lane, operationId) {
230
- this.#activeOperations.delete(`${kind}\0${lane}\0${operationId}`);
231
- this.#reconcile();
232
- }
233
- close() {
234
- if (this.#initialTimer)
235
- clearTimeout(this.#initialTimer);
236
- for (const demand of this.#demands.values()) {
237
- if (demand.timer)
238
- clearTimeout(demand.timer);
239
- }
240
- this.#demands.clear();
241
- }
242
- #reconcile() {
243
- if (this.#retiring ||
244
- !this.#demandInitialized ||
245
- this.#retirementHolds !== 0 ||
246
- this.#activeOperations.size !== 0 ||
247
- this.#demands.size !== 0) {
248
- return;
249
- }
250
- this.#retiring = true;
251
- this.#onRetire();
252
- }
253
- }
254
- const DEFAULT_INITIAL_DEMAND_GRACE_MS = 10_000;
255
- const DEFAULT_ORPHAN_DEMAND_GRACE_MS = 30_000;
256
- export const SESSION_WORKER_INITIAL_DEMAND_GRACE_ENV = "__PI_SESSION_WORKER_INITIAL_DEMAND_GRACE_MS";
257
- export const SESSION_WORKER_ORPHAN_DEMAND_GRACE_ENV = "__PI_SESSION_WORKER_ORPHAN_DEMAND_GRACE_MS";
258
- const CoordinatorInputSchema = Type.Union([
259
- Type.Object({
260
- type: Type.Literal("peer_registered"),
261
- peerId: Type.String(),
262
- serverConnectionId: Type.Optional(Type.String()),
263
- }),
264
- Type.Object({ type: Type.Literal("server_connected"), serverConnectionId: Type.String() }),
265
- Type.Object({ type: Type.Literal("server_disconnected"), serverConnectionId: Type.String() }),
266
- Type.Object({ type: Type.Literal("message"), from: Type.Literal("server"), payload: Type.Unknown() }),
267
- ]);
268
- let failureControl;
269
- async function connectControl() {
270
- const address = process.env[SESSION_WORKER_CONTROL_ADDRESS_ENV];
271
- const token = process.env[SESSION_WORKER_CONTROL_TOKEN_ENV];
272
- const encodedSessionKey = process.env[SESSION_WORKER_SESSION_KEY_ENV];
273
- if (!address || !token || !encodedSessionKey)
274
- throw new Error("Session worker requires a control address");
275
- const peerId = process.env[SESSION_WORKER_PEER_ID_ENV];
276
- if (!peerId)
277
- throw new Error("Session worker requires a peer ID");
278
- const socket = createConnection(address);
279
- await new Promise((resolve, reject) => {
280
- socket.once("connect", resolve);
281
- socket.once("error", reject);
282
- });
283
- const messages = createJsonLineMessages(socket);
284
- await writeJsonLine(socket, { type: "register_peer", protocol: COORDINATOR_PROTOCOL_VERSION, peerId });
285
- const registered = await messages[Symbol.asyncIterator]().next();
286
- if (registered.done ||
287
- !Check(CoordinatorInputSchema, registered.value) ||
288
- registered.value.type !== "peer_registered") {
289
- throw new Error("Coordinator rejected the session worker registration");
290
- }
291
- return {
292
- ...(registered.value.serverConnectionId === undefined
293
- ? {}
294
- : { initialServerConnectionId: registered.value.serverConnectionId }),
295
- messages,
296
- socket,
297
- send: (event) => writeJsonLine(socket, { type: "send", to: "server", payload: event }),
298
- };
299
- }
300
- async function readCommands(control, handlers) {
301
- for await (const value of control.messages) {
302
- if (!Check(CoordinatorInputSchema, value)) {
303
- control.socket.destroy(new Error("Coordinator sent an invalid worker message"));
304
- return;
305
- }
306
- const message = value;
307
- if (message.type === "server_connected") {
308
- handlers.onServerConnected(message.serverConnectionId);
309
- continue;
310
- }
311
- if (message.type === "server_disconnected") {
312
- handlers.onServerDisconnected(message.serverConnectionId);
313
- continue;
314
- }
315
- if (message.type !== "message" || !Check(SessionWorkerCommandSchema, message.payload))
316
- continue;
317
- const command = message.payload;
318
- if (command.type === "shutdown")
319
- handlers.onShutdown();
320
- else if (command.type === "discover_workers")
321
- handlers.onDiscovery();
322
- else if (command.type === "session_demand")
323
- await handlers.onDemand(command);
324
- else if (command.type === "operation_cancel")
325
- handlers.onOperationCancel(command);
326
- else
327
- handlers.onOperation(command);
328
- }
329
- }
330
- function createJsonLineMessages(socket) {
331
- const queued = [];
332
- const waiters = [];
333
- let buffered = "";
334
- socket.setEncoding("utf8");
335
- socket.on("data", (chunk) => {
336
- buffered += chunk;
337
- if (Buffer.byteLength(buffered) > MAX_CONTROL_LINE_BYTES) {
338
- socket.destroy(new Error("Session worker control message is too large"));
339
- return;
340
- }
341
- while (true) {
342
- const newline = buffered.indexOf("\n");
343
- if (newline === -1)
344
- return;
345
- const line = buffered.slice(0, newline);
346
- buffered = buffered.slice(newline + 1);
347
- try {
348
- const value = JSON.parse(line);
349
- const waiter = waiters.shift();
350
- if (waiter)
351
- waiter(value);
352
- else
353
- queued.push(value);
354
- }
355
- catch {
356
- socket.destroy(new Error("Session worker received invalid control JSON"));
357
- return;
358
- }
359
- }
360
- });
361
- return {
362
- [Symbol.asyncIterator]() {
363
- return {
364
- next: async () => {
365
- const value = queued.shift() ?? (await new Promise((resolve) => waiters.push(resolve)));
366
- return { done: false, value };
367
- },
368
- };
369
- },
370
- };
371
- }
372
- function writeJsonLine(socket, message) {
373
- return new Promise((resolve, reject) => {
374
- socket.write(encodeControlLine(message), (error) => {
375
- if (error)
376
- reject(error);
377
- else
378
- resolve();
379
- });
380
- });
381
- }
382
- function toWorkerServiceUpdate(update) {
383
- if (!isJsonValue(update))
384
- throw new Error("Service produced a non-JSON update");
385
- return parseServiceProviderUpdate(update);
386
- }
387
- function demandKey(serverConnectionId, attachmentId) {
388
- return `${serverConnectionId}\0${attachmentId}`;
389
- }
390
- function sameScope(left, right) {
391
- return left.serverConnectionId === right.serverConnectionId && left.attachmentId === right.attachmentId;
392
- }
393
- function lifecycleDelay(name, fallback) {
394
- const value = process.env[name];
395
- if (value === undefined)
396
- return fallback;
397
- const parsed = Number(value);
398
- if (!Number.isSafeInteger(parsed) || parsed < 0)
399
- throw new Error(`${name} must be a non-negative safe integer`);
400
- return parsed;
401
- }
402
- async function closeResources(resources) {
403
- const errors = [];
404
- try {
405
- await resources.services?.dispose();
406
- }
407
- catch (error) {
408
- errors.push(error);
409
- }
410
- try {
411
- if (resources.harness)
412
- await resources.harness.close(TODO_CONTEXT);
413
- else
414
- await resources.session?.close(TODO_CONTEXT);
415
- }
416
- catch (error) {
417
- errors.push(error);
418
- }
419
- try {
420
- await resources.repo.close(TODO_CONTEXT);
421
- }
422
- catch (error) {
423
- errors.push(error);
424
- }
425
- try {
426
- await resources.executionEnv.cleanup(TODO_CONTEXT);
427
- }
428
- catch (error) {
429
- errors.push(error);
430
- }
431
- try {
432
- await resources.releaseOwnership();
433
- }
434
- catch (error) {
435
- errors.push(error);
436
- }
437
- if (errors.length === 1)
438
- throw errors[0];
439
- if (errors.length > 1)
440
- throw new AggregateError(errors, "Session worker cleanup failed");
441
- }
442
- async function run(options, createHarness) {
443
- const { sessionDir, metadata } = options;
444
- const sessionId = metadata.id;
445
- const control = await connectControl();
446
- const token = process.env[SESSION_WORKER_CONTROL_TOKEN_ENV];
447
- const sessionKey = Buffer.from(process.env[SESSION_WORKER_SESSION_KEY_ENV], "base64url").toString();
448
- failureControl = control;
449
- const pluginManifestPaths = options.pluginManifestPaths;
450
- const releaseOwnership = await lockfile.lock(metadata.path, {
451
- realpath: true,
452
- stale: 2_000,
453
- update: 1_000,
454
- retries: { retries: 320, factor: 1, minTimeout: 25, maxTimeout: 25, maxRetryTime: 8_000 },
455
- });
456
- const executionEnv = new NodeExecutionEnv({ cwd: metadata.cwd });
457
- const repo = new JsonlSessionRepo({ fileSystem: executionEnv, sessionsRoot: sessionDir });
458
- let session;
459
- let harness;
460
- let lane;
461
- let services;
462
- try {
463
- session = await repo.open(metadata, TODO_CONTEXT);
464
- const runtime = await createHarness(session, options, executionEnv);
465
- harness = runtime.harness;
466
- lane = runtime.lane ?? (await harness.lane("main", TODO_CONTEXT));
467
- services = await createSessionWorkerServices({
468
- lane,
469
- modelRuntime: runtime.modelRuntime,
470
- settingsManager: runtime.settingsManager,
471
- facetLoader: runtime.facetLoader,
472
- publish: (scope, subscriptionId, update) => control.send({
473
- type: "service_update",
474
- token,
475
- sessionKey,
476
- scope,
477
- subscriptionId,
478
- update: toWorkerServiceUpdate(update),
479
- }),
480
- });
481
- }
482
- catch (error) {
483
- try {
484
- await closeResources({ harness, services, session, repo, executionEnv, releaseOwnership });
485
- }
486
- catch (cleanupError) {
487
- throw new AggregateError([error, cleanupError], "Session worker startup and cleanup failed");
488
- }
489
- throw error;
490
- }
491
- const activeRequests = new Map();
492
- let lifecycle;
493
- let removeLifecycleListeners = [];
494
- let closing;
495
- const close = () => {
496
- if (closing)
497
- return closing;
498
- lifecycle?.close();
499
- services.removeSubscriptions(() => true);
500
- for (const request of activeRequests.values())
501
- request.cancel(new Error("Session worker is closing"));
502
- activeRequests.clear();
503
- for (const remove of removeLifecycleListeners)
504
- remove();
505
- removeLifecycleListeners = [];
506
- closing = closeResources({ harness, services, repo, executionEnv, releaseOwnership });
507
- return closing;
508
- };
509
- const closeAndExit = () => {
510
- void close().then(() => process.exit(0), (error) => {
511
- console.error(error);
512
- process.exit(1);
513
- });
514
- };
515
- lifecycle = new WorkerLifecycle({
516
- initialServerConnectionId: control.initialServerConnectionId,
517
- initialDemandGraceMs: lifecycleDelay(SESSION_WORKER_INITIAL_DEMAND_GRACE_ENV, DEFAULT_INITIAL_DEMAND_GRACE_MS),
518
- orphanDemandGraceMs: lifecycleDelay(SESSION_WORKER_ORPHAN_DEMAND_GRACE_ENV, DEFAULT_ORPHAN_DEMAND_GRACE_MS),
519
- onRetire: closeAndExit,
520
- });
521
- removeLifecycleListeners = [
522
- harness.events.on("run_start", (event) => lifecycle?.operationStarted("run", event.lane, event.runId)),
523
- harness.events.on("run_resume", (event) => lifecycle?.operationStarted("run", event.lane, event.runId)),
524
- harness.events.on("run_suspend", (event) => lifecycle?.operationStopped("run", event.lane, event.runId)),
525
- harness.events.on("run_end", (event) => lifecycle?.operationStopped("run", event.lane, event.runId)),
526
- harness.events.on("compaction_start", (event) => lifecycle?.operationStarted("compaction", event.lane, event.runId)),
527
- harness.events.on("compaction_end", (event) => lifecycle?.operationStopped("compaction", event.lane, event.runId)),
528
- harness.events.on("navigation_start", (event) => lifecycle?.operationStarted("navigation", event.lane, event.runId)),
529
- harness.events.on("navigation_end", (event) => lifecycle?.operationStopped("navigation", event.lane, event.runId)),
530
- harness.events.on("fault", closeAndExit),
531
- ];
532
- const handleOperation = async (request) => {
533
- let releaseRequest = () => { };
534
- const cancellable = withCancel(BACKGROUND_CONTEXT);
535
- try {
536
- releaseRequest = lifecycle.beginRequest(request.scope.serverConnectionId, request.scope.attachmentId);
537
- activeRequests.set(request.requestId, { scope: request.scope, cancel: cancellable.cancel });
538
- const result = await services.invoke(request.call, request.scope, cancellable.context);
539
- if (result !== undefined && !isJsonValue(result))
540
- throw new Error("Service produced a non-JSON result");
541
- await control.send({
542
- type: "operation_response",
543
- token,
544
- sessionKey,
545
- response: {
546
- type: "operation_result",
547
- requestId: request.requestId,
548
- scope: request.scope,
549
- ...(result === undefined ? {} : { result }),
550
- },
551
- });
552
- }
553
- catch (error) {
554
- let code;
555
- if (error instanceof RemoteServiceError) {
556
- code = error.code;
557
- }
558
- else if (error instanceof Error && "code" in error) {
559
- const candidate = error.code;
560
- if (Check(RemoteServiceErrorCodeSchema, candidate))
561
- code = candidate;
562
- }
563
- await control.send({
564
- type: "operation_response",
565
- token,
566
- sessionKey,
567
- response: {
568
- type: "operation_error",
569
- requestId: request.requestId,
570
- scope: request.scope,
571
- ...(code === undefined ? {} : { code }),
572
- message: error instanceof Error ? error.message : String(error),
573
- },
574
- });
575
- }
576
- finally {
577
- if (activeRequests.get(request.requestId)?.cancel === cancellable.cancel) {
578
- activeRequests.delete(request.requestId);
579
- }
580
- releaseRequest();
581
- }
582
- };
583
- let ready = false;
584
- const announce = () => {
585
- if (!ready)
586
- return;
587
- void control
588
- .send({
589
- type: "worker_ready",
590
- token,
591
- sessionKey,
592
- sessionId,
593
- pid: process.pid,
594
- metadata,
595
- pluginManifestPaths: [...pluginManifestPaths],
596
- })
597
- .catch(() => closeAndExit());
598
- };
599
- void readCommands(control, {
600
- onShutdown: closeAndExit,
601
- onDiscovery: announce,
602
- onDemand: async (command) => {
603
- const releaseRetirement = lifecycle?.holdRetirement() ?? (() => { });
604
- try {
605
- try {
606
- if (!command.attached) {
607
- const matches = (scope) => scope.serverConnectionId === command.serverConnectionId &&
608
- scope.attachmentId === command.attachmentId;
609
- services.removeSubscriptions(matches);
610
- }
611
- lifecycle?.setDemand(command.serverConnectionId, command.attachmentId, command.attached);
612
- }
613
- catch (error) {
614
- await control.send({
615
- type: "demand_rejected",
616
- token,
617
- sessionKey,
618
- requestId: command.requestId,
619
- message: error instanceof Error ? error.message : String(error),
620
- });
621
- return;
622
- }
623
- await control.send({
624
- type: "demand_applied",
625
- token,
626
- sessionKey,
627
- requestId: command.requestId,
628
- attachmentId: command.attachmentId,
629
- attached: command.attached,
630
- });
631
- }
632
- finally {
633
- releaseRetirement();
634
- }
635
- },
636
- onOperation: (request) => {
637
- void handleOperation(request).catch(() => closeAndExit());
638
- },
639
- onOperationCancel: (command) => {
640
- const active = activeRequests.get(command.requestId);
641
- if (active !== undefined && sameScope(active.scope, command.scope)) {
642
- active.cancel(new DOMException("Service operation cancelled", "AbortError"));
643
- }
644
- },
645
- onServerConnected: (serverConnectionId) => lifecycle?.serverConnected(serverConnectionId),
646
- onServerDisconnected: (serverConnectionId) => {
647
- const matches = (scope) => scope.serverConnectionId === serverConnectionId;
648
- services.removeSubscriptions(matches);
649
- for (const request of activeRequests.values()) {
650
- if (matches(request.scope))
651
- request.cancel(new Error("Server disconnected"));
652
- }
653
- lifecycle?.serverDisconnected(serverConnectionId);
654
- },
655
- }).catch(() => closeAndExit());
656
- control.socket.once("close", closeAndExit);
657
- control.socket.once("error", () => closeAndExit());
658
- process.once("SIGTERM", closeAndExit);
659
- process.once("SIGINT", closeAndExit);
660
- try {
661
- ready = true;
662
- await control.send({
663
- type: "worker_ready",
664
- token,
665
- sessionKey,
666
- sessionId,
667
- pid: process.pid,
668
- metadata,
669
- pluginManifestPaths: [...pluginManifestPaths],
670
- });
671
- }
672
- catch (error) {
673
- try {
674
- await close();
675
- }
676
- catch (cleanupError) {
677
- throw new AggregateError([error, cleanupError], "Session worker readiness and cleanup failed");
678
- }
679
- throw error;
680
- }
681
- }
682
- export async function runSessionWorkerWithHarness(args, createHarness) {
683
- try {
684
- if (args.length !== 1)
685
- throw new Error("Session worker requires one options argument");
686
- let options;
687
- try {
688
- options = JSON.parse(args[0]);
689
- }
690
- catch (error) {
691
- throw new Error("Session worker received invalid options", { cause: error });
692
- }
693
- if (!Check(SessionWorkerOptionsSchema, options) ||
694
- !isAbsolute(options.sessionDir) ||
695
- !isAbsolute(options.metadata.cwd) ||
696
- !isAbsolute(options.metadata.path) ||
697
- (options.provider !== undefined && options.model === undefined)) {
698
- throw new Error("Session worker received invalid options");
699
- }
700
- await run(options, createHarness);
701
- }
702
- catch (error) {
703
- const message = error instanceof Error ? error.message : String(error);
704
- const token = process.env[SESSION_WORKER_CONTROL_TOKEN_ENV];
705
- const encodedSessionKey = process.env[SESSION_WORKER_SESSION_KEY_ENV];
706
- if (token && encodedSessionKey) {
707
- const sessionKey = Buffer.from(encodedSessionKey, "base64url").toString();
708
- await failureControl?.send({ type: "worker_failed", token, sessionKey, message }).catch(() => { });
709
- }
710
- throw error;
711
- }
712
- }
713
- async function createCodingAgentHarness(session, options, executionEnv) {
714
- const modelRuntime = await ModelRuntime.create();
715
- const settingsManager = SettingsManager.create(session.metadata.cwd);
716
- let resolved;
717
- if (options.model === undefined) {
718
- resolved = await findInitialModel({
719
- scopedModels: [],
720
- isContinuing: true,
721
- defaultProvider: settingsManager.getDefaultProvider(),
722
- defaultModelId: settingsManager.getDefaultModel(),
723
- defaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),
724
- modelRuntime,
725
- });
726
- }
727
- else {
728
- resolved = resolveCliModel({
729
- cliProvider: options.provider,
730
- cliModel: options.model,
731
- modelRuntime,
732
- });
733
- if (resolved.error)
734
- throw new Error(`Session worker could not resolve model: ${resolved.error}`);
735
- }
736
- if (!resolved.model)
737
- throw new Error("Session worker could not resolve a model");
738
- const tools = [createReadTool(), createWriteTool(), createBashTool()];
739
- const activeToolNames = tools.map((tool) => tool.name);
740
- const harness = (await AgentHarness.create({
741
- session,
742
- models: modelRuntime,
743
- model: resolved.model,
744
- thinkingLevel: resolved.thinkingLevel,
745
- tools,
746
- activeToolNames,
747
- toolContext: { env: executionEnv },
748
- resources: {},
749
- }, TODO_CONTEXT)).harness;
750
- try {
751
- const lane = await harness.lane("main", TODO_CONTEXT);
752
- const currentActiveToolNames = await lane.getActiveTools(TODO_CONTEXT);
753
- if (currentActiveToolNames.length !== activeToolNames.length ||
754
- currentActiveToolNames.some((name, index) => name !== activeToolNames[index])) {
755
- await lane.setActiveTools(activeToolNames, TODO_CONTEXT);
756
- }
757
- return {
758
- harness,
759
- lane,
760
- modelRuntime,
761
- settingsManager,
762
- facetLoader: createSessionPluginFacetLoader(options.pluginManifestPaths),
763
- };
764
- }
765
- catch (error) {
766
- try {
767
- await harness.close(TODO_CONTEXT);
768
- }
769
- catch (cleanupError) {
770
- throw new AggregateError([error, cleanupError], "Session worker model selection and cleanup failed");
771
- }
772
- throw error;
773
- }
774
- }
775
- export function runSessionWorkerProcess(args) {
776
- return runSessionWorkerWithHarness(args, createCodingAgentHarness);
777
- }
778
- if (isDirectInternalProcessEntry(import.meta.url)) {
779
- const role = consumeInternalProcessRole();
780
- if (role !== "session-worker") {
781
- throw new Error("Session worker entrypoint requires an internal session-worker invocation");
782
- }
783
- void runSessionWorkerProcess(process.argv.slice(2)).catch(() => process.exit(1));
784
- }
785
- //# sourceMappingURL=session-worker.js.map