@tomsun28/pizza 0.1.0 → 0.1.1

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 (382) hide show
  1. package/README.md +20 -143
  2. package/README.zh-CN.md +36 -0
  3. package/dist/bun/cli.d.ts +2 -0
  4. package/dist/bun/cli.js +6 -0
  5. package/dist/bun/register-bedrock.d.ts +1 -0
  6. package/dist/bun/register-bedrock.js +3 -0
  7. package/dist/cli/args.d.ts +48 -0
  8. package/dist/cli/args.js +330 -0
  9. package/dist/cli/config-selector.d.ts +13 -0
  10. package/dist/cli/config-selector.js +30 -0
  11. package/dist/cli/file-processor.d.ts +14 -0
  12. package/dist/cli/file-processor.js +82 -0
  13. package/dist/cli/initial-message.d.ts +17 -0
  14. package/dist/cli/initial-message.js +21 -0
  15. package/dist/cli/list-models.d.ts +8 -0
  16. package/dist/cli/list-models.js +96 -0
  17. package/dist/cli.d.ts +2 -0
  18. package/dist/cli.js +68 -0
  19. package/dist/config.d.ts +79 -0
  20. package/dist/config.js +223 -0
  21. package/dist/core/agent/index.d.ts +6 -0
  22. package/dist/core/agent/index.js +6 -0
  23. package/dist/core/agent/types.d.ts +202 -0
  24. package/dist/core/agent/types.js +51 -0
  25. package/dist/core/auth-storage.d.ts +135 -0
  26. package/dist/core/auth-storage.js +417 -0
  27. package/dist/core/bash-executor.d.ts +31 -0
  28. package/dist/core/bash-executor.js +107 -0
  29. package/dist/core/compaction/branch-summarization.d.ts +87 -0
  30. package/dist/core/compaction/branch-summarization.js +242 -0
  31. package/dist/core/compaction/compaction-engine.d.ts +40 -0
  32. package/dist/core/compaction/compaction-engine.js +292 -0
  33. package/dist/core/compaction/compaction.d.ts +106 -0
  34. package/dist/core/compaction/compaction.js +295 -0
  35. package/dist/core/compaction/index.d.ts +7 -0
  36. package/dist/core/compaction/index.js +7 -0
  37. package/dist/core/compaction/utils.d.ts +37 -0
  38. package/dist/core/compaction/utils.js +152 -0
  39. package/dist/core/defaults.d.ts +2 -0
  40. package/dist/core/defaults.js +1 -0
  41. package/dist/core/diagnostics.d.ts +14 -0
  42. package/dist/core/diagnostics.js +1 -0
  43. package/dist/core/event-bus.d.ts +8 -0
  44. package/dist/core/event-bus.js +24 -0
  45. package/dist/core/event-store/events.d.ts +465 -0
  46. package/dist/core/event-store/events.js +6 -0
  47. package/dist/core/event-store/index.d.ts +10 -0
  48. package/dist/core/event-store/index.js +10 -0
  49. package/dist/core/event-store/sqlite-store.d.ts +27 -0
  50. package/dist/core/event-store/sqlite-store.js +275 -0
  51. package/dist/core/event-store/store.d.ts +91 -0
  52. package/dist/core/event-store/store.js +7 -0
  53. package/dist/core/event-store/thread-scoped-store.d.ts +29 -0
  54. package/dist/core/event-store/thread-scoped-store.js +50 -0
  55. package/dist/core/event-store/types.d.ts +70 -0
  56. package/dist/core/event-store/types.js +7 -0
  57. package/dist/core/event-store/workspace.d.ts +37 -0
  58. package/dist/core/event-store/workspace.js +71 -0
  59. package/dist/core/exec.d.ts +28 -0
  60. package/dist/core/exec.js +74 -0
  61. package/dist/core/export-html/ansi-to-html.d.ts +21 -0
  62. package/dist/core/export-html/ansi-to-html.js +248 -0
  63. package/dist/core/export-html/index.d.ts +29 -0
  64. package/dist/core/export-html/index.js +186 -0
  65. package/dist/core/export-html/template.css +1017 -0
  66. package/dist/core/export-html/template.html +55 -0
  67. package/dist/core/export-html/template.js +1742 -0
  68. package/dist/core/export-html/tool-renderer.d.ts +39 -0
  69. package/dist/core/export-html/tool-renderer.js +94 -0
  70. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  71. package/dist/core/export-html/vendor/marked.min.js +6 -0
  72. package/dist/core/extensions/index.d.ts +12 -0
  73. package/dist/core/extensions/index.js +9 -0
  74. package/dist/core/extensions/loader.d.ts +24 -0
  75. package/dist/core/extensions/loader.js +492 -0
  76. package/dist/core/extensions/runner.d.ts +167 -0
  77. package/dist/core/extensions/runner.js +898 -0
  78. package/dist/core/extensions/session-context.d.ts +67 -0
  79. package/dist/core/extensions/session-context.js +272 -0
  80. package/dist/core/extensions/types.d.ts +1147 -0
  81. package/dist/core/extensions/types.js +44 -0
  82. package/dist/core/extensions/wrapper.d.ts +19 -0
  83. package/dist/core/extensions/wrapper.js +21 -0
  84. package/dist/core/footer-data-provider.d.ts +47 -0
  85. package/dist/core/footer-data-provider.js +321 -0
  86. package/dist/core/goal/index.d.ts +3 -0
  87. package/dist/core/goal/index.js +1 -0
  88. package/dist/core/goal/scheduler.d.ts +83 -0
  89. package/dist/core/goal/scheduler.js +154 -0
  90. package/dist/core/goal/types.d.ts +182 -0
  91. package/dist/core/goal/types.js +11 -0
  92. package/dist/core/index.d.ts +8 -0
  93. package/dist/core/index.js +8 -0
  94. package/dist/core/intent/classifier.d.ts +53 -0
  95. package/dist/core/intent/classifier.js +353 -0
  96. package/dist/core/intent/index.d.ts +8 -0
  97. package/dist/core/intent/index.js +8 -0
  98. package/dist/core/intent/tool-adapter.d.ts +31 -0
  99. package/dist/core/intent/tool-adapter.js +168 -0
  100. package/dist/core/intent/types.d.ts +71 -0
  101. package/dist/core/intent/types.js +6 -0
  102. package/dist/core/keybindings.d.ts +297 -0
  103. package/dist/core/keybindings.js +250 -0
  104. package/dist/core/messages.d.ts +30 -0
  105. package/dist/core/messages.js +134 -0
  106. package/dist/core/model-registry.d.ts +131 -0
  107. package/dist/core/model-registry.js +634 -0
  108. package/dist/core/model-resolver.d.ts +109 -0
  109. package/dist/core/model-resolver.js +486 -0
  110. package/dist/core/output-guard.d.ts +5 -0
  111. package/dist/core/output-guard.js +58 -0
  112. package/dist/core/package-manager.d.ts +196 -0
  113. package/dist/core/package-manager.js +1873 -0
  114. package/dist/core/projection/boundary-inferrer.d.ts +58 -0
  115. package/dist/core/projection/boundary-inferrer.js +122 -0
  116. package/dist/core/projection/event-to-message.d.ts +35 -0
  117. package/dist/core/projection/event-to-message.js +253 -0
  118. package/dist/core/projection/goal-projection.d.ts +67 -0
  119. package/dist/core/projection/goal-projection.js +339 -0
  120. package/dist/core/projection/index.d.ts +13 -0
  121. package/dist/core/projection/index.js +13 -0
  122. package/dist/core/projection/session-manager.d.ts +100 -0
  123. package/dist/core/projection/session-manager.js +331 -0
  124. package/dist/core/projection/session-projection.d.ts +58 -0
  125. package/dist/core/projection/session-projection.js +257 -0
  126. package/dist/core/projection/task-history.d.ts +13 -0
  127. package/dist/core/projection/task-history.js +61 -0
  128. package/dist/core/projection/timeline-projection.d.ts +82 -0
  129. package/dist/core/projection/timeline-projection.js +276 -0
  130. package/dist/core/projection/types.d.ts +69 -0
  131. package/dist/core/projection/types.js +6 -0
  132. package/dist/core/prompt-templates.d.ts +51 -0
  133. package/dist/core/prompt-templates.js +249 -0
  134. package/dist/core/resolve-config-value.d.ts +22 -0
  135. package/dist/core/resolve-config-value.js +125 -0
  136. package/dist/core/resource-loader.d.ts +193 -0
  137. package/dist/core/resource-loader.js +685 -0
  138. package/dist/core/runtime/ai-client.d.ts +12 -0
  139. package/dist/core/runtime/ai-client.js +153 -0
  140. package/dist/core/runtime/checkpoint.d.ts +12 -0
  141. package/dist/core/runtime/checkpoint.js +78 -0
  142. package/dist/core/runtime/index.d.ts +12 -0
  143. package/dist/core/runtime/index.js +12 -0
  144. package/dist/core/runtime/llm-types.d.ts +99 -0
  145. package/dist/core/runtime/llm-types.js +6 -0
  146. package/dist/core/runtime/local-runtime.d.ts +23 -0
  147. package/dist/core/runtime/local-runtime.js +59 -0
  148. package/dist/core/runtime/policies.d.ts +72 -0
  149. package/dist/core/runtime/policies.js +37 -0
  150. package/dist/core/runtime/reactor.d.ts +213 -0
  151. package/dist/core/runtime/reactor.js +992 -0
  152. package/dist/core/runtime/runtime.d.ts +191 -0
  153. package/dist/core/runtime/runtime.js +449 -0
  154. package/dist/core/runtime/types.d.ts +42 -0
  155. package/dist/core/runtime/types.js +1 -0
  156. package/dist/core/sdk.d.ts +12 -0
  157. package/dist/core/sdk.js +10 -0
  158. package/dist/core/session-context-builder.d.ts +9 -0
  159. package/dist/core/session-context-builder.js +87 -0
  160. package/dist/core/session-cwd.d.ts +18 -0
  161. package/dist/core/session-cwd.js +36 -0
  162. package/dist/core/session-facade-factory.d.ts +79 -0
  163. package/dist/core/session-facade-factory.js +460 -0
  164. package/dist/core/session-facade.d.ts +57 -0
  165. package/dist/core/session-facade.js +91 -0
  166. package/dist/core/session-listing.d.ts +30 -0
  167. package/dist/core/session-listing.js +168 -0
  168. package/dist/core/session-reader.d.ts +19 -0
  169. package/dist/core/session-reader.js +101 -0
  170. package/dist/core/session-ref.d.ts +7 -0
  171. package/dist/core/session-ref.js +25 -0
  172. package/dist/core/session-services.d.ts +51 -0
  173. package/dist/core/session-services.js +90 -0
  174. package/dist/core/session-stats.d.ts +43 -0
  175. package/dist/core/session-stats.js +41 -0
  176. package/dist/core/settings-manager.d.ts +236 -0
  177. package/dist/core/settings-manager.js +706 -0
  178. package/dist/core/skill-block-parser.d.ts +12 -0
  179. package/dist/core/skill-block-parser.js +15 -0
  180. package/dist/core/skills.d.ts +59 -0
  181. package/dist/core/skills.js +408 -0
  182. package/dist/core/slash-commands.d.ts +13 -0
  183. package/dist/core/slash-commands.js +17 -0
  184. package/dist/core/source-info.d.ts +17 -0
  185. package/dist/core/source-info.js +18 -0
  186. package/dist/core/system-prompt.d.ts +27 -0
  187. package/dist/core/system-prompt.js +179 -0
  188. package/dist/core/timings.d.ts +7 -0
  189. package/dist/core/timings.js +30 -0
  190. package/dist/core/tools/bash.d.ts +95 -0
  191. package/dist/core/tools/bash.js +513 -0
  192. package/dist/core/tools/builtin-commands.d.ts +75 -0
  193. package/dist/core/tools/builtin-commands.js +503 -0
  194. package/dist/core/tools/compat-commands.d.ts +12 -0
  195. package/dist/core/tools/compat-commands.js +1280 -0
  196. package/dist/core/tools/edit-diff.d.ts +59 -0
  197. package/dist/core/tools/edit-diff.js +263 -0
  198. package/dist/core/tools/edit.d.ts +49 -0
  199. package/dist/core/tools/edit.js +340 -0
  200. package/dist/core/tools/file-mutation-queue.d.ts +5 -0
  201. package/dist/core/tools/file-mutation-queue.js +36 -0
  202. package/dist/core/tools/find.d.ts +34 -0
  203. package/dist/core/tools/find.js +459 -0
  204. package/dist/core/tools/grep.d.ts +36 -0
  205. package/dist/core/tools/grep.js +422 -0
  206. package/dist/core/tools/index.d.ts +70 -0
  207. package/dist/core/tools/index.js +129 -0
  208. package/dist/core/tools/line-anchors.d.ts +33 -0
  209. package/dist/core/tools/line-anchors.js +151 -0
  210. package/dist/core/tools/ls.d.ts +36 -0
  211. package/dist/core/tools/ls.js +268 -0
  212. package/dist/core/tools/path-utils.d.ts +7 -0
  213. package/dist/core/tools/path-utils.js +80 -0
  214. package/dist/core/tools/read.d.ts +35 -0
  215. package/dist/core/tools/read.js +244 -0
  216. package/dist/core/tools/render-utils.d.ts +20 -0
  217. package/dist/core/tools/render-utils.js +48 -0
  218. package/dist/core/tools/session-split.d.ts +9 -0
  219. package/dist/core/tools/session-split.js +77 -0
  220. package/dist/core/tools/tool-definition-wrapper.d.ts +13 -0
  221. package/dist/core/tools/tool-definition-wrapper.js +32 -0
  222. package/dist/core/tools/truncate.d.ts +69 -0
  223. package/dist/core/tools/truncate.js +204 -0
  224. package/dist/core/tools/write.d.ts +25 -0
  225. package/dist/core/tools/write.js +211 -0
  226. package/dist/core/types/session-types.d.ts +123 -0
  227. package/dist/core/types/session-types.js +8 -0
  228. package/dist/index.d.ts +27 -0
  229. package/dist/index.js +38 -0
  230. package/dist/main.d.ts +11 -2
  231. package/dist/main.js +577 -149
  232. package/dist/modes/event-mapper.d.ts +115 -0
  233. package/dist/modes/event-mapper.js +200 -0
  234. package/dist/modes/gui/server.d.ts +14 -0
  235. package/dist/modes/gui/server.js +1032 -0
  236. package/dist/modes/index.d.ts +10 -0
  237. package/dist/modes/index.js +9 -0
  238. package/dist/modes/interactive/assets/clankolas.png +0 -0
  239. package/dist/modes/interactive/components/armin.d.ts +33 -0
  240. package/dist/modes/interactive/components/armin.js +328 -0
  241. package/dist/modes/interactive/components/assistant-message.d.ts +19 -0
  242. package/dist/modes/interactive/components/assistant-message.js +115 -0
  243. package/dist/modes/interactive/components/bash-execution.d.ts +33 -0
  244. package/dist/modes/interactive/components/bash-execution.js +169 -0
  245. package/dist/modes/interactive/components/bordered-loader.d.ts +15 -0
  246. package/dist/modes/interactive/components/bordered-loader.js +50 -0
  247. package/dist/modes/interactive/components/branch-summary-message.d.ts +15 -0
  248. package/dist/modes/interactive/components/branch-summary-message.js +41 -0
  249. package/dist/modes/interactive/components/brand-header.d.ts +33 -0
  250. package/dist/modes/interactive/components/brand-header.js +235 -0
  251. package/dist/modes/interactive/components/compaction-summary-message.d.ts +15 -0
  252. package/dist/modes/interactive/components/compaction-summary-message.js +42 -0
  253. package/dist/modes/interactive/components/config-selector.d.ts +70 -0
  254. package/dist/modes/interactive/components/config-selector.js +469 -0
  255. package/dist/modes/interactive/components/countdown-timer.d.ts +13 -0
  256. package/dist/modes/interactive/components/countdown-timer.js +27 -0
  257. package/dist/modes/interactive/components/custom-editor.d.ts +27 -0
  258. package/dist/modes/interactive/components/custom-editor.js +94 -0
  259. package/dist/modes/interactive/components/custom-message.d.ts +19 -0
  260. package/dist/modes/interactive/components/custom-message.js +73 -0
  261. package/dist/modes/interactive/components/daxnuts.d.ts +22 -0
  262. package/dist/modes/interactive/components/daxnuts.js +137 -0
  263. package/dist/modes/interactive/components/diff.d.ts +11 -0
  264. package/dist/modes/interactive/components/diff.js +132 -0
  265. package/dist/modes/interactive/components/dynamic-border.d.ts +14 -0
  266. package/dist/modes/interactive/components/dynamic-border.js +19 -0
  267. package/dist/modes/interactive/components/earendil-announcement.d.ts +4 -0
  268. package/dist/modes/interactive/components/earendil-announcement.js +39 -0
  269. package/dist/modes/interactive/components/extension-editor.d.ts +19 -0
  270. package/dist/modes/interactive/components/extension-editor.js +105 -0
  271. package/dist/modes/interactive/components/extension-input.d.ts +22 -0
  272. package/dist/modes/interactive/components/extension-input.js +54 -0
  273. package/dist/modes/interactive/components/extension-selector.d.ts +23 -0
  274. package/dist/modes/interactive/components/extension-selector.js +70 -0
  275. package/dist/modes/interactive/components/footer.d.ts +55 -0
  276. package/dist/modes/interactive/components/footer.js +207 -0
  277. package/dist/modes/interactive/components/index.d.ts +31 -0
  278. package/dist/modes/interactive/components/index.js +32 -0
  279. package/dist/modes/interactive/components/keybinding-hints.d.ts +7 -0
  280. package/dist/modes/interactive/components/keybinding-hints.js +21 -0
  281. package/dist/modes/interactive/components/login-dialog.d.ts +41 -0
  282. package/dist/modes/interactive/components/login-dialog.js +138 -0
  283. package/dist/modes/interactive/components/model-selector.d.ts +32 -0
  284. package/dist/modes/interactive/components/model-selector.js +209 -0
  285. package/dist/modes/interactive/components/oauth-selector.d.ts +18 -0
  286. package/dist/modes/interactive/components/oauth-selector.js +91 -0
  287. package/dist/modes/interactive/components/settings-selector.d.ts +57 -0
  288. package/dist/modes/interactive/components/settings-selector.js +299 -0
  289. package/dist/modes/interactive/components/show-images-selector.d.ts +9 -0
  290. package/dist/modes/interactive/components/show-images-selector.js +37 -0
  291. package/dist/modes/interactive/components/skill-invocation-message.d.ts +16 -0
  292. package/dist/modes/interactive/components/skill-invocation-message.js +44 -0
  293. package/dist/modes/interactive/components/theme-selector.d.ts +10 -0
  294. package/dist/modes/interactive/components/theme-selector.js +47 -0
  295. package/dist/modes/interactive/components/thinking-selector.d.ts +10 -0
  296. package/dist/modes/interactive/components/thinking-selector.js +50 -0
  297. package/dist/modes/interactive/components/timeline-view.d.ts +31 -0
  298. package/dist/modes/interactive/components/timeline-view.js +81 -0
  299. package/dist/modes/interactive/components/tool-execution.d.ts +64 -0
  300. package/dist/modes/interactive/components/tool-execution.js +305 -0
  301. package/dist/modes/interactive/components/tree-selector.d.ts +88 -0
  302. package/dist/modes/interactive/components/tree-selector.js +1072 -0
  303. package/dist/modes/interactive/components/user-message-selector.d.ts +29 -0
  304. package/dist/modes/interactive/components/user-message-selector.js +110 -0
  305. package/dist/modes/interactive/components/user-message.d.ts +9 -0
  306. package/dist/modes/interactive/components/user-message.js +27 -0
  307. package/dist/modes/interactive/components/visual-truncate.d.ts +23 -0
  308. package/dist/modes/interactive/components/visual-truncate.js +32 -0
  309. package/dist/modes/interactive/interactive-mode.d.ts +394 -0
  310. package/dist/modes/interactive/interactive-mode.js +4116 -0
  311. package/dist/modes/interactive/theme/dark.json +85 -0
  312. package/dist/modes/interactive/theme/light.json +84 -0
  313. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  314. package/dist/modes/interactive/theme/theme.d.ts +80 -0
  315. package/dist/modes/interactive/theme/theme.js +973 -0
  316. package/dist/modes/print-mode.d.ts +27 -0
  317. package/dist/modes/print-mode.js +102 -0
  318. package/dist/modes/rpc/jsonl.d.ts +16 -0
  319. package/dist/modes/rpc/jsonl.js +48 -0
  320. package/dist/modes/rpc/rpc-client.d.ts +219 -0
  321. package/dist/modes/rpc/rpc-client.js +405 -0
  322. package/dist/modes/rpc/rpc-mode.d.ts +19 -0
  323. package/dist/modes/rpc/rpc-mode.js +381 -0
  324. package/dist/modes/rpc/rpc-types.d.ts +406 -0
  325. package/dist/modes/rpc/rpc-types.js +7 -0
  326. package/dist/package-manager-cli.d.ts +3 -0
  327. package/dist/package-manager-cli.js +233 -0
  328. package/dist/utils/changelog.d.ts +20 -0
  329. package/dist/utils/changelog.js +86 -0
  330. package/dist/utils/child-process.d.ts +10 -0
  331. package/dist/utils/child-process.js +77 -0
  332. package/dist/utils/clipboard-image.d.ts +10 -0
  333. package/dist/utils/clipboard-image.js +244 -0
  334. package/dist/utils/clipboard-native.d.ts +7 -0
  335. package/dist/utils/clipboard-native.js +13 -0
  336. package/dist/utils/clipboard.d.ts +1 -0
  337. package/dist/utils/clipboard.js +77 -0
  338. package/dist/utils/exif-orientation.d.ts +4 -0
  339. package/dist/utils/exif-orientation.js +157 -0
  340. package/dist/utils/frontmatter.d.ts +7 -0
  341. package/dist/utils/frontmatter.js +25 -0
  342. package/dist/utils/git.d.ts +25 -0
  343. package/dist/utils/git.js +162 -0
  344. package/dist/utils/image-convert.d.ts +8 -0
  345. package/dist/utils/image-convert.js +38 -0
  346. package/dist/utils/image-resize.d.ts +35 -0
  347. package/dist/utils/image-resize.js +136 -0
  348. package/dist/utils/mime.d.ts +1 -0
  349. package/dist/utils/mime.js +25 -0
  350. package/dist/utils/path-shims.d.ts +1 -0
  351. package/dist/utils/path-shims.js +90 -0
  352. package/dist/utils/paths.d.ts +6 -0
  353. package/dist/utils/paths.js +18 -0
  354. package/dist/utils/photon.d.ts +20 -0
  355. package/dist/utils/photon.js +120 -0
  356. package/dist/utils/shell.d.ts +29 -0
  357. package/dist/utils/shell.js +189 -0
  358. package/dist/utils/sleep.d.ts +4 -0
  359. package/dist/utils/sleep.js +16 -0
  360. package/dist/utils/tools-manager.d.ts +3 -0
  361. package/dist/utils/tools-manager.js +101 -0
  362. package/dist/vendor/bin/darwin-arm64/fd +0 -0
  363. package/dist/vendor/bin/darwin-arm64/rg +0 -0
  364. package/dist/vendor/bin/darwin-x64/fd +0 -0
  365. package/dist/vendor/bin/darwin-x64/rg +0 -0
  366. package/dist/vendor/bin/linux-arm64/fd +0 -0
  367. package/dist/vendor/bin/linux-arm64/rg +0 -0
  368. package/dist/vendor/bin/linux-x64/fd +0 -0
  369. package/dist/vendor/bin/linux-x64/rg +0 -0
  370. package/dist/vendor/bin/win32-arm64/fd.exe +0 -0
  371. package/dist/vendor/bin/win32-arm64/rg.exe +0 -0
  372. package/dist/vendor/bin/win32-x64/fd.exe +0 -0
  373. package/dist/vendor/bin/win32-x64/rg.exe +0 -0
  374. package/package.json +90 -26
  375. package/dist/extension/core.d.ts +0 -69
  376. package/dist/extension/core.js +0 -270
  377. package/dist/extension/core.js.map +0 -1
  378. package/dist/extension/index.d.ts +0 -14
  379. package/dist/extension/index.js +0 -374
  380. package/dist/extension/index.js.map +0 -1
  381. package/dist/main.js.map +0 -1
  382. package/themes/pizza.json +0 -87
@@ -0,0 +1,405 @@
1
+ /**
2
+ * RPC Client for programmatic access to the coding agent.
3
+ *
4
+ * Spawns the agent in RPC mode and provides a typed API for all operations.
5
+ */
6
+ import { spawn } from "node:child_process";
7
+ import { attachJsonlLineReader, serializeJsonLine } from "./jsonl.js";
8
+ // ============================================================================
9
+ // RPC Client
10
+ // ============================================================================
11
+ export class RpcClient {
12
+ constructor(options = {}) {
13
+ this.options = options;
14
+ this.process = null;
15
+ this.stopReadingStdout = null;
16
+ this.eventListeners = [];
17
+ this.pendingRequests = new Map();
18
+ this.requestId = 0;
19
+ this.stderr = "";
20
+ }
21
+ /**
22
+ * Start the RPC agent process.
23
+ */
24
+ async start() {
25
+ if (this.process) {
26
+ throw new Error("Client already started");
27
+ }
28
+ const cliPath = this.options.cliPath ?? "dist/cli.js";
29
+ const args = ["--mode", "rpc"];
30
+ if (this.options.provider) {
31
+ args.push("--provider", this.options.provider);
32
+ }
33
+ if (this.options.model) {
34
+ args.push("--model", this.options.model);
35
+ }
36
+ if (this.options.args) {
37
+ args.push(...this.options.args);
38
+ }
39
+ this.process = spawn("node", [cliPath, ...args], {
40
+ cwd: this.options.cwd,
41
+ env: { ...process.env, ...this.options.env },
42
+ stdio: ["pipe", "pipe", "pipe"],
43
+ });
44
+ // Collect stderr for debugging
45
+ this.process.stderr?.on("data", (data) => {
46
+ this.stderr += data.toString();
47
+ process.stderr.write(data);
48
+ });
49
+ // Set up strict JSONL reader for stdout.
50
+ this.stopReadingStdout = attachJsonlLineReader(this.process.stdout, (line) => {
51
+ this.handleLine(line);
52
+ });
53
+ // Wait a moment for process to initialize
54
+ await new Promise((resolve) => setTimeout(resolve, 100));
55
+ if (this.process.exitCode !== null) {
56
+ throw new Error(`Agent process exited immediately with code ${this.process.exitCode}. Stderr: ${this.stderr}`);
57
+ }
58
+ }
59
+ /**
60
+ * Stop the RPC agent process.
61
+ */
62
+ async stop() {
63
+ if (!this.process)
64
+ return;
65
+ this.stopReadingStdout?.();
66
+ this.stopReadingStdout = null;
67
+ this.process.kill("SIGTERM");
68
+ // Wait for process to exit
69
+ await new Promise((resolve) => {
70
+ const timeout = setTimeout(() => {
71
+ this.process?.kill("SIGKILL");
72
+ resolve();
73
+ }, 1000);
74
+ this.process?.on("exit", () => {
75
+ clearTimeout(timeout);
76
+ resolve();
77
+ });
78
+ });
79
+ this.process = null;
80
+ this.pendingRequests.clear();
81
+ }
82
+ /**
83
+ * Subscribe to agent events.
84
+ */
85
+ onEvent(listener) {
86
+ this.eventListeners.push(listener);
87
+ return () => {
88
+ const index = this.eventListeners.indexOf(listener);
89
+ if (index !== -1) {
90
+ this.eventListeners.splice(index, 1);
91
+ }
92
+ };
93
+ }
94
+ /**
95
+ * Get collected stderr output (useful for debugging).
96
+ */
97
+ getStderr() {
98
+ return this.stderr;
99
+ }
100
+ // =========================================================================
101
+ // Command Methods
102
+ // =========================================================================
103
+ /**
104
+ * Send a prompt to the agent.
105
+ * Returns immediately after sending; use onEvent() to receive streaming events.
106
+ * Use waitForIdle() to wait for completion.
107
+ */
108
+ async prompt(message, images) {
109
+ await this.send({ type: "prompt", message, images });
110
+ }
111
+ /**
112
+ * Queue a steering message to interrupt the agent mid-run.
113
+ */
114
+ async steer(message, images) {
115
+ await this.send({ type: "steer", message, images });
116
+ }
117
+ /**
118
+ * Queue a follow-up message to be processed after the agent finishes.
119
+ */
120
+ async followUp(message, images) {
121
+ await this.send({ type: "follow_up", message, images });
122
+ }
123
+ /**
124
+ * Abort current operation.
125
+ */
126
+ async abort() {
127
+ await this.send({ type: "abort" });
128
+ }
129
+ /**
130
+ * Rewind to a branch point, or no-op to continue the eternal conversation.
131
+ * @param targetEventId - Optional event id to fork from
132
+ */
133
+ async rewind(targetEventId) {
134
+ const response = await this.send({ type: "rewind", targetEventId });
135
+ return this.getData(response);
136
+ }
137
+ /**
138
+ * Get current session state.
139
+ */
140
+ async getState() {
141
+ const response = await this.send({ type: "get_state" });
142
+ return this.getData(response);
143
+ }
144
+ /**
145
+ * Set model by provider and ID.
146
+ */
147
+ async setModel(provider, modelId) {
148
+ const response = await this.send({ type: "set_model", provider, modelId });
149
+ return this.getData(response);
150
+ }
151
+ /**
152
+ * Cycle to next model.
153
+ */
154
+ async cycleModel() {
155
+ const response = await this.send({ type: "cycle_model" });
156
+ return this.getData(response);
157
+ }
158
+ /**
159
+ * Get list of available models.
160
+ */
161
+ async getAvailableModels() {
162
+ const response = await this.send({ type: "get_available_models" });
163
+ return this.getData(response).models;
164
+ }
165
+ /**
166
+ * Set thinking level.
167
+ */
168
+ async setThinkingLevel(level) {
169
+ await this.send({ type: "set_thinking_level", level });
170
+ }
171
+ /**
172
+ * Cycle thinking level.
173
+ */
174
+ async cycleThinkingLevel() {
175
+ const response = await this.send({ type: "cycle_thinking_level" });
176
+ return this.getData(response);
177
+ }
178
+ /**
179
+ * Set steering mode.
180
+ */
181
+ async setSteeringMode(mode) {
182
+ await this.send({ type: "set_steering_mode", mode });
183
+ }
184
+ /**
185
+ * Set follow-up mode.
186
+ */
187
+ async setFollowUpMode(mode) {
188
+ await this.send({ type: "set_follow_up_mode", mode });
189
+ }
190
+ /**
191
+ * Compact session context.
192
+ */
193
+ async compact(customInstructions) {
194
+ const response = await this.send({ type: "compact", customInstructions });
195
+ return this.getData(response);
196
+ }
197
+ /**
198
+ * Set auto-compaction enabled/disabled.
199
+ */
200
+ async setAutoCompaction(enabled) {
201
+ await this.send({ type: "set_auto_compaction", enabled });
202
+ }
203
+ /**
204
+ * Set auto-retry enabled/disabled.
205
+ */
206
+ async setAutoRetry(enabled) {
207
+ await this.send({ type: "set_auto_retry", enabled });
208
+ }
209
+ /**
210
+ * Abort in-progress retry.
211
+ */
212
+ async abortRetry() {
213
+ await this.send({ type: "abort_retry" });
214
+ }
215
+ /**
216
+ * Execute a bash command.
217
+ */
218
+ async bash(command) {
219
+ const response = await this.send({ type: "bash", command });
220
+ return this.getData(response);
221
+ }
222
+ /**
223
+ * Abort running bash command.
224
+ */
225
+ async abortBash() {
226
+ await this.send({ type: "abort_bash" });
227
+ }
228
+ /**
229
+ * Get session statistics.
230
+ */
231
+ async getSessionStats() {
232
+ const response = await this.send({ type: "get_session_stats" });
233
+ return this.getData(response);
234
+ }
235
+ /**
236
+ * Export session to HTML.
237
+ */
238
+ async exportHtml(outputPath) {
239
+ const response = await this.send({ type: "export_html", outputPath });
240
+ return this.getData(response);
241
+ }
242
+ /**
243
+ * Switch to a different session file.
244
+ * @returns Object with `cancelled: true` if an extension cancelled the switch
245
+ */
246
+ async switchSession(sessionPath) {
247
+ const response = await this.send({ type: "switch_session", sessionPath });
248
+ return this.getData(response);
249
+ }
250
+ /**
251
+ * Fork from a specific message.
252
+ * @returns Object with `text` (the message text) and `cancelled` (if extension cancelled)
253
+ */
254
+ async fork(entryId) {
255
+ const response = await this.send({ type: "fork", entryId });
256
+ return this.getData(response);
257
+ }
258
+ /**
259
+ * Clone the current active branch into a new session.
260
+ * @returns Object with `cancelled: true` if an extension cancelled the clone
261
+ */
262
+ async clone() {
263
+ const response = await this.send({ type: "clone" });
264
+ return this.getData(response);
265
+ }
266
+ /**
267
+ * Get messages available for forking.
268
+ */
269
+ async getForkMessages() {
270
+ const response = await this.send({ type: "get_fork_messages" });
271
+ return this.getData(response).messages;
272
+ }
273
+ /**
274
+ * Get text of last assistant message.
275
+ */
276
+ async getLastAssistantText() {
277
+ const response = await this.send({ type: "get_last_assistant_text" });
278
+ return this.getData(response).text;
279
+ }
280
+ /**
281
+ * Get all messages in the session.
282
+ */
283
+ async getMessages() {
284
+ const response = await this.send({ type: "get_messages" });
285
+ return this.getData(response).messages;
286
+ }
287
+ /**
288
+ * Get available commands (extension commands, prompt templates, skills).
289
+ */
290
+ async getCommands() {
291
+ const response = await this.send({ type: "get_commands" });
292
+ return this.getData(response).commands;
293
+ }
294
+ // =========================================================================
295
+ // Helpers
296
+ // =========================================================================
297
+ /**
298
+ * Wait for agent to become idle (no streaming).
299
+ * Resolves when AGENT_TURN_COMPLETED is received.
300
+ */
301
+ waitForIdle(timeout = 60000) {
302
+ return new Promise((resolve, reject) => {
303
+ const timer = setTimeout(() => {
304
+ unsubscribe();
305
+ reject(new Error(`Timeout waiting for agent to become idle. Stderr: ${this.stderr}`));
306
+ }, timeout);
307
+ const unsubscribe = this.onEvent((event) => {
308
+ if (isIdleEvent(event)) {
309
+ clearTimeout(timer);
310
+ unsubscribe();
311
+ resolve();
312
+ }
313
+ });
314
+ });
315
+ }
316
+ /**
317
+ * Collect events until agent becomes idle.
318
+ */
319
+ collectEvents(timeout = 60000) {
320
+ return new Promise((resolve, reject) => {
321
+ const events = [];
322
+ const timer = setTimeout(() => {
323
+ unsubscribe();
324
+ reject(new Error(`Timeout collecting events. Stderr: ${this.stderr}`));
325
+ }, timeout);
326
+ const unsubscribe = this.onEvent((event) => {
327
+ events.push(event);
328
+ if (isIdleEvent(event)) {
329
+ clearTimeout(timer);
330
+ unsubscribe();
331
+ resolve(events);
332
+ }
333
+ });
334
+ });
335
+ }
336
+ /**
337
+ * Send prompt and wait for completion, returning all events.
338
+ */
339
+ async promptAndWait(message, images, timeout = 60000) {
340
+ const eventsPromise = this.collectEvents(timeout);
341
+ await this.prompt(message, images);
342
+ return eventsPromise;
343
+ }
344
+ // =========================================================================
345
+ // Internal
346
+ // =========================================================================
347
+ handleLine(line) {
348
+ try {
349
+ const data = JSON.parse(line);
350
+ // Check if it's a response to a pending request
351
+ if (data.type === "response" && data.id && this.pendingRequests.has(data.id)) {
352
+ const pending = this.pendingRequests.get(data.id);
353
+ this.pendingRequests.delete(data.id);
354
+ pending.resolve(data);
355
+ return;
356
+ }
357
+ // Otherwise it's an event
358
+ for (const listener of this.eventListeners) {
359
+ listener(data);
360
+ }
361
+ }
362
+ catch {
363
+ // Ignore non-JSON lines
364
+ }
365
+ }
366
+ async send(command) {
367
+ if (!this.process?.stdin) {
368
+ throw new Error("Client not started");
369
+ }
370
+ const id = `req_${++this.requestId}`;
371
+ const fullCommand = { ...command, id };
372
+ return new Promise((resolve, reject) => {
373
+ this.pendingRequests.set(id, { resolve, reject });
374
+ const timeout = setTimeout(() => {
375
+ this.pendingRequests.delete(id);
376
+ reject(new Error(`Timeout waiting for response to ${command.type}. Stderr: ${this.stderr}`));
377
+ }, 30000);
378
+ this.pendingRequests.set(id, {
379
+ resolve: (response) => {
380
+ clearTimeout(timeout);
381
+ resolve(response);
382
+ },
383
+ reject: (error) => {
384
+ clearTimeout(timeout);
385
+ reject(error);
386
+ },
387
+ });
388
+ this.process.stdin.write(serializeJsonLine(fullCommand));
389
+ });
390
+ }
391
+ getData(response) {
392
+ if (!response.success) {
393
+ const errorResponse = response;
394
+ throw new Error(errorResponse.error);
395
+ }
396
+ // Type assertion: we trust response.data matches T based on the command sent.
397
+ // This is safe because each public method specifies the correct T for its command.
398
+ const successResponse = response;
399
+ return successResponse.data;
400
+ }
401
+ }
402
+ function isIdleEvent(event) {
403
+ const type = event.type;
404
+ return type === "AGENT_TURN_COMPLETED" || type === "agent_end";
405
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * RPC mode: Headless operation with JSON stdin/stdout protocol.
3
+ *
4
+ * Used for embedding the agent in other applications.
5
+ * Receives commands as JSON on stdin, outputs events and responses as JSON on stdout.
6
+ *
7
+ * Protocol:
8
+ * - Commands: JSON objects with `type` field, optional `id` for correlation
9
+ * - Responses: JSON objects with `type: "response"`, `command`, `success`, and optional `data`/`error`
10
+ * - Events: TypedEvent objects streamed as they occur
11
+ * - Extension UI: Extension UI requests are emitted, client responds with extension_ui_response
12
+ */
13
+ import type { SessionFacade } from "../../core/session-facade.js";
14
+ export type { RpcCommand, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcResponse, RpcSessionState, } from "./rpc-types.js";
15
+ /**
16
+ * Run RPC mode against the event-sourced facade.
17
+ * Events are emitted as raw EventStore TypedEvent JSON lines.
18
+ */
19
+ export declare function runRpcModeWithFacade(facade: SessionFacade): Promise<never>;