@hoilab/ada-cli 0.84.2

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 (972) hide show
  1. package/CHANGELOG.md +5498 -0
  2. package/README.md +716 -0
  3. package/dist/bun/cli.d.ts +3 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +11 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/register-bedrock.d.ts +2 -0
  8. package/dist/bun/register-bedrock.d.ts.map +1 -0
  9. package/dist/bun/register-bedrock.js +4 -0
  10. package/dist/bun/register-bedrock.js.map +1 -0
  11. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  12. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  13. package/dist/bun/restore-sandbox-env.js +36 -0
  14. package/dist/bun/restore-sandbox-env.js.map +1 -0
  15. package/dist/cli/args.d.ts +60 -0
  16. package/dist/cli/args.d.ts.map +1 -0
  17. package/dist/cli/args.js +419 -0
  18. package/dist/cli/args.js.map +1 -0
  19. package/dist/cli/auth-check.d.ts +19 -0
  20. package/dist/cli/auth-check.d.ts.map +1 -0
  21. package/dist/cli/auth-check.js +50 -0
  22. package/dist/cli/auth-check.js.map +1 -0
  23. package/dist/cli/auth-command.d.ts +24 -0
  24. package/dist/cli/auth-command.d.ts.map +1 -0
  25. package/dist/cli/auth-command.js +103 -0
  26. package/dist/cli/auth-command.js.map +1 -0
  27. package/dist/cli/config-selector.d.ts +16 -0
  28. package/dist/cli/config-selector.d.ts.map +1 -0
  29. package/dist/cli/config-selector.js +31 -0
  30. package/dist/cli/config-selector.js.map +1 -0
  31. package/dist/cli/credential-print.d.ts +13 -0
  32. package/dist/cli/credential-print.d.ts.map +1 -0
  33. package/dist/cli/credential-print.js +76 -0
  34. package/dist/cli/credential-print.js.map +1 -0
  35. package/dist/cli/experimental/auth.d.ts +16 -0
  36. package/dist/cli/experimental/auth.d.ts.map +1 -0
  37. package/dist/cli/experimental/auth.js +13 -0
  38. package/dist/cli/experimental/auth.js.map +1 -0
  39. package/dist/cli/experimental/cli.d.ts +6 -0
  40. package/dist/cli/experimental/cli.d.ts.map +1 -0
  41. package/dist/cli/experimental/cli.js +5 -0
  42. package/dist/cli/experimental/cli.js.map +1 -0
  43. package/dist/cli/experimental/command-options.d.ts +17 -0
  44. package/dist/cli/experimental/command-options.d.ts.map +1 -0
  45. package/dist/cli/experimental/command-options.js +35 -0
  46. package/dist/cli/experimental/command-options.js.map +1 -0
  47. package/dist/cli/experimental/command.d.ts +63 -0
  48. package/dist/cli/experimental/command.d.ts.map +1 -0
  49. package/dist/cli/experimental/command.js +130 -0
  50. package/dist/cli/experimental/command.js.map +1 -0
  51. package/dist/cli/experimental/commands/client.d.ts +13 -0
  52. package/dist/cli/experimental/commands/client.d.ts.map +1 -0
  53. package/dist/cli/experimental/commands/client.js +25 -0
  54. package/dist/cli/experimental/commands/client.js.map +1 -0
  55. package/dist/cli/experimental/commands/pi.d.ts +15 -0
  56. package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
  57. package/dist/cli/experimental/commands/pi.js +28 -0
  58. package/dist/cli/experimental/commands/pi.js.map +1 -0
  59. package/dist/cli/experimental/commands/server.d.ts +13 -0
  60. package/dist/cli/experimental/commands/server.d.ts.map +1 -0
  61. package/dist/cli/experimental/commands/server.js +25 -0
  62. package/dist/cli/experimental/commands/server.js.map +1 -0
  63. package/dist/cli/experimental/transport-address.d.ts +10 -0
  64. package/dist/cli/experimental/transport-address.d.ts.map +1 -0
  65. package/dist/cli/experimental/transport-address.js +38 -0
  66. package/dist/cli/experimental/transport-address.js.map +1 -0
  67. package/dist/cli/file-processor.d.ts +15 -0
  68. package/dist/cli/file-processor.d.ts.map +1 -0
  69. package/dist/cli/file-processor.js +70 -0
  70. package/dist/cli/file-processor.js.map +1 -0
  71. package/dist/cli/initial-message.d.ts +18 -0
  72. package/dist/cli/initial-message.d.ts.map +1 -0
  73. package/dist/cli/initial-message.js +22 -0
  74. package/dist/cli/initial-message.js.map +1 -0
  75. package/dist/cli/list-models.d.ts +9 -0
  76. package/dist/cli/list-models.d.ts.map +1 -0
  77. package/dist/cli/list-models.js +98 -0
  78. package/dist/cli/list-models.js.map +1 -0
  79. package/dist/cli/project-trust.d.ts +10 -0
  80. package/dist/cli/project-trust.d.ts.map +1 -0
  81. package/dist/cli/project-trust.js +48 -0
  82. package/dist/cli/project-trust.js.map +1 -0
  83. package/dist/cli/session-picker.d.ts +10 -0
  84. package/dist/cli/session-picker.d.ts.map +1 -0
  85. package/dist/cli/session-picker.js +36 -0
  86. package/dist/cli/session-picker.js.map +1 -0
  87. package/dist/cli/startup-ui.d.ts +20 -0
  88. package/dist/cli/startup-ui.d.ts.map +1 -0
  89. package/dist/cli/startup-ui.js +184 -0
  90. package/dist/cli/startup-ui.js.map +1 -0
  91. package/dist/cli.d.ts +3 -0
  92. package/dist/cli.d.ts.map +1 -0
  93. package/dist/cli.js +19 -0
  94. package/dist/cli.js.map +1 -0
  95. package/dist/client/index.d.ts +3 -0
  96. package/dist/client/index.d.ts.map +1 -0
  97. package/dist/client/index.js +3 -0
  98. package/dist/client/index.js.map +1 -0
  99. package/dist/client/remote-session.d.ts +53 -0
  100. package/dist/client/remote-session.d.ts.map +1 -0
  101. package/dist/client/remote-session.js +340 -0
  102. package/dist/client/remote-session.js.map +1 -0
  103. package/dist/client/transcript.d.ts +12 -0
  104. package/dist/client/transcript.d.ts.map +1 -0
  105. package/dist/client/transcript.js +98 -0
  106. package/dist/client/transcript.js.map +1 -0
  107. package/dist/config.d.ts +96 -0
  108. package/dist/config.d.ts.map +1 -0
  109. package/dist/config.js +455 -0
  110. package/dist/config.js.map +1 -0
  111. package/dist/core/agent-session-runtime.d.ts +119 -0
  112. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  113. package/dist/core/agent-session-runtime.js +309 -0
  114. package/dist/core/agent-session-runtime.js.map +1 -0
  115. package/dist/core/agent-session-services.d.ts +86 -0
  116. package/dist/core/agent-session-services.d.ts.map +1 -0
  117. package/dist/core/agent-session-services.js +134 -0
  118. package/dist/core/agent-session-services.js.map +1 -0
  119. package/dist/core/agent-session.d.ts +649 -0
  120. package/dist/core/agent-session.d.ts.map +1 -0
  121. package/dist/core/agent-session.js +2687 -0
  122. package/dist/core/agent-session.js.map +1 -0
  123. package/dist/core/auth-guidance.d.ts +5 -0
  124. package/dist/core/auth-guidance.d.ts.map +1 -0
  125. package/dist/core/auth-guidance.js +21 -0
  126. package/dist/core/auth-guidance.js.map +1 -0
  127. package/dist/core/auth-storage.d.ts +72 -0
  128. package/dist/core/auth-storage.d.ts.map +1 -0
  129. package/dist/core/auth-storage.js +427 -0
  130. package/dist/core/auth-storage.js.map +1 -0
  131. package/dist/core/bash-executor.d.ts +32 -0
  132. package/dist/core/bash-executor.d.ts.map +1 -0
  133. package/dist/core/bash-executor.js +111 -0
  134. package/dist/core/bash-executor.js.map +1 -0
  135. package/dist/core/cache-stats.d.ts +49 -0
  136. package/dist/core/cache-stats.d.ts.map +1 -0
  137. package/dist/core/cache-stats.js +101 -0
  138. package/dist/core/cache-stats.js.map +1 -0
  139. package/dist/core/compaction/branch-summarization.d.ts +98 -0
  140. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  141. package/dist/core/compaction/branch-summarization.js +246 -0
  142. package/dist/core/compaction/branch-summarization.js.map +1 -0
  143. package/dist/core/compaction/compaction.d.ts +137 -0
  144. package/dist/core/compaction/compaction.d.ts.map +1 -0
  145. package/dist/core/compaction/compaction.js +645 -0
  146. package/dist/core/compaction/compaction.js.map +1 -0
  147. package/dist/core/compaction/index.d.ts +7 -0
  148. package/dist/core/compaction/index.d.ts.map +1 -0
  149. package/dist/core/compaction/index.js +7 -0
  150. package/dist/core/compaction/index.js.map +1 -0
  151. package/dist/core/compaction/utils.d.ts +38 -0
  152. package/dist/core/compaction/utils.d.ts.map +1 -0
  153. package/dist/core/compaction/utils.js +142 -0
  154. package/dist/core/compaction/utils.js.map +1 -0
  155. package/dist/core/defaults.d.ts +3 -0
  156. package/dist/core/defaults.d.ts.map +1 -0
  157. package/dist/core/defaults.js +2 -0
  158. package/dist/core/defaults.js.map +1 -0
  159. package/dist/core/diagnostics.d.ts +15 -0
  160. package/dist/core/diagnostics.d.ts.map +1 -0
  161. package/dist/core/diagnostics.js +2 -0
  162. package/dist/core/diagnostics.js.map +1 -0
  163. package/dist/core/event-bus.d.ts +9 -0
  164. package/dist/core/event-bus.d.ts.map +1 -0
  165. package/dist/core/event-bus.js +25 -0
  166. package/dist/core/event-bus.js.map +1 -0
  167. package/dist/core/exec.d.ts +29 -0
  168. package/dist/core/exec.d.ts.map +1 -0
  169. package/dist/core/exec.js +75 -0
  170. package/dist/core/exec.js.map +1 -0
  171. package/dist/core/experimental.d.ts +6 -0
  172. package/dist/core/experimental.d.ts.map +1 -0
  173. package/dist/core/experimental.js +8 -0
  174. package/dist/core/experimental.js.map +1 -0
  175. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  176. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  177. package/dist/core/export-html/ansi-to-html.js +249 -0
  178. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  179. package/dist/core/export-html/index.d.ts +37 -0
  180. package/dist/core/export-html/index.d.ts.map +1 -0
  181. package/dist/core/export-html/index.js +226 -0
  182. package/dist/core/export-html/index.js.map +1 -0
  183. package/dist/core/export-html/template.css +1066 -0
  184. package/dist/core/export-html/template.html +55 -0
  185. package/dist/core/export-html/template.js +1864 -0
  186. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  187. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  188. package/dist/core/export-html/tool-renderer.js +108 -0
  189. package/dist/core/export-html/tool-renderer.js.map +1 -0
  190. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  191. package/dist/core/export-html/vendor/marked.min.js +78 -0
  192. package/dist/core/extensions/index.d.ts +12 -0
  193. package/dist/core/extensions/index.d.ts.map +1 -0
  194. package/dist/core/extensions/index.js +9 -0
  195. package/dist/core/extensions/index.js.map +1 -0
  196. package/dist/core/extensions/loader.d.ts +23 -0
  197. package/dist/core/extensions/loader.d.ts.map +1 -0
  198. package/dist/core/extensions/loader.js +581 -0
  199. package/dist/core/extensions/loader.js.map +1 -0
  200. package/dist/core/extensions/runner.d.ts +173 -0
  201. package/dist/core/extensions/runner.d.ts.map +1 -0
  202. package/dist/core/extensions/runner.js +967 -0
  203. package/dist/core/extensions/runner.js.map +1 -0
  204. package/dist/core/extensions/types.d.ts +1299 -0
  205. package/dist/core/extensions/types.d.ts.map +1 -0
  206. package/dist/core/extensions/types.js +45 -0
  207. package/dist/core/extensions/types.js.map +1 -0
  208. package/dist/core/extensions/wrapper.d.ts +20 -0
  209. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  210. package/dist/core/extensions/wrapper.js +41 -0
  211. package/dist/core/extensions/wrapper.js.map +1 -0
  212. package/dist/core/footer-data-provider.d.ts +64 -0
  213. package/dist/core/footer-data-provider.d.ts.map +1 -0
  214. package/dist/core/footer-data-provider.js +338 -0
  215. package/dist/core/footer-data-provider.js.map +1 -0
  216. package/dist/core/http-dispatcher.d.ts +22 -0
  217. package/dist/core/http-dispatcher.d.ts.map +1 -0
  218. package/dist/core/http-dispatcher.js +96 -0
  219. package/dist/core/http-dispatcher.js.map +1 -0
  220. package/dist/core/index.d.ts +13 -0
  221. package/dist/core/index.d.ts.map +1 -0
  222. package/dist/core/index.js +13 -0
  223. package/dist/core/index.js.map +1 -0
  224. package/dist/core/keybindings.d.ts +422 -0
  225. package/dist/core/keybindings.d.ts.map +1 -0
  226. package/dist/core/keybindings.js +296 -0
  227. package/dist/core/keybindings.js.map +1 -0
  228. package/dist/core/messages.d.ts +77 -0
  229. package/dist/core/messages.d.ts.map +1 -0
  230. package/dist/core/messages.js +123 -0
  231. package/dist/core/messages.js.map +1 -0
  232. package/dist/core/model-config.d.ts +571 -0
  233. package/dist/core/model-config.d.ts.map +1 -0
  234. package/dist/core/model-config.js +254 -0
  235. package/dist/core/model-config.js.map +1 -0
  236. package/dist/core/model-registry.d.ts +45 -0
  237. package/dist/core/model-registry.d.ts.map +1 -0
  238. package/dist/core/model-registry.js +107 -0
  239. package/dist/core/model-registry.js.map +1 -0
  240. package/dist/core/model-resolver.d.ts +123 -0
  241. package/dist/core/model-resolver.d.ts.map +1 -0
  242. package/dist/core/model-resolver.js +583 -0
  243. package/dist/core/model-resolver.js.map +1 -0
  244. package/dist/core/model-runtime.d.ts +100 -0
  245. package/dist/core/model-runtime.d.ts.map +1 -0
  246. package/dist/core/model-runtime.js +599 -0
  247. package/dist/core/model-runtime.js.map +1 -0
  248. package/dist/core/models-store.d.ts +22 -0
  249. package/dist/core/models-store.d.ts.map +1 -0
  250. package/dist/core/models-store.js +114 -0
  251. package/dist/core/models-store.js.map +1 -0
  252. package/dist/core/output-guard.d.ts +7 -0
  253. package/dist/core/output-guard.d.ts.map +1 -0
  254. package/dist/core/output-guard.js +89 -0
  255. package/dist/core/output-guard.js.map +1 -0
  256. package/dist/core/package-manager.d.ts +213 -0
  257. package/dist/core/package-manager.d.ts.map +1 -0
  258. package/dist/core/package-manager.js +2169 -0
  259. package/dist/core/package-manager.js.map +1 -0
  260. package/dist/core/pi-manifest.d.ts +8 -0
  261. package/dist/core/pi-manifest.d.ts.map +1 -0
  262. package/dist/core/pi-manifest.js +25 -0
  263. package/dist/core/pi-manifest.js.map +1 -0
  264. package/dist/core/project-trust.d.ts +15 -0
  265. package/dist/core/project-trust.d.ts.map +1 -0
  266. package/dist/core/project-trust.js +59 -0
  267. package/dist/core/project-trust.js.map +1 -0
  268. package/dist/core/prompt-templates.d.ts +54 -0
  269. package/dist/core/prompt-templates.d.ts.map +1 -0
  270. package/dist/core/prompt-templates.js +236 -0
  271. package/dist/core/prompt-templates.js.map +1 -0
  272. package/dist/core/provider-attribution.d.ts +4 -0
  273. package/dist/core/provider-attribution.d.ts.map +1 -0
  274. package/dist/core/provider-attribution.js +72 -0
  275. package/dist/core/provider-attribution.js.map +1 -0
  276. package/dist/core/provider-composer.d.ts +58 -0
  277. package/dist/core/provider-composer.d.ts.map +1 -0
  278. package/dist/core/provider-composer.js +396 -0
  279. package/dist/core/provider-composer.js.map +1 -0
  280. package/dist/core/radius.d.ts +2 -0
  281. package/dist/core/radius.d.ts.map +1 -0
  282. package/dist/core/radius.js +2 -0
  283. package/dist/core/radius.js.map +1 -0
  284. package/dist/core/remote-catalog-provider.d.ts +5 -0
  285. package/dist/core/remote-catalog-provider.d.ts.map +1 -0
  286. package/dist/core/remote-catalog-provider.js +121 -0
  287. package/dist/core/remote-catalog-provider.js.map +1 -0
  288. package/dist/core/resolve-config-value.d.ts +30 -0
  289. package/dist/core/resolve-config-value.d.ts.map +1 -0
  290. package/dist/core/resolve-config-value.js +247 -0
  291. package/dist/core/resolve-config-value.js.map +1 -0
  292. package/dist/core/resource-loader.d.ts +221 -0
  293. package/dist/core/resource-loader.d.ts.map +1 -0
  294. package/dist/core/resource-loader.js +874 -0
  295. package/dist/core/resource-loader.js.map +1 -0
  296. package/dist/core/runtime-credentials.d.ts +15 -0
  297. package/dist/core/runtime-credentials.d.ts.map +1 -0
  298. package/dist/core/runtime-credentials.js +39 -0
  299. package/dist/core/runtime-credentials.js.map +1 -0
  300. package/dist/core/sdk.d.ts +108 -0
  301. package/dist/core/sdk.d.ts.map +1 -0
  302. package/dist/core/sdk.js +268 -0
  303. package/dist/core/sdk.js.map +1 -0
  304. package/dist/core/session-cwd.d.ts +19 -0
  305. package/dist/core/session-cwd.d.ts.map +1 -0
  306. package/dist/core/session-cwd.js +38 -0
  307. package/dist/core/session-cwd.js.map +1 -0
  308. package/dist/core/session-manager.d.ts +356 -0
  309. package/dist/core/session-manager.d.ts.map +1 -0
  310. package/dist/core/session-manager.js +1340 -0
  311. package/dist/core/session-manager.js.map +1 -0
  312. package/dist/core/settings-manager.d.ts +315 -0
  313. package/dist/core/settings-manager.d.ts.map +1 -0
  314. package/dist/core/settings-manager.js +938 -0
  315. package/dist/core/settings-manager.js.map +1 -0
  316. package/dist/core/skills.d.ts +60 -0
  317. package/dist/core/skills.d.ts.map +1 -0
  318. package/dist/core/skills.js +387 -0
  319. package/dist/core/skills.js.map +1 -0
  320. package/dist/core/slash-commands.d.ts +15 -0
  321. package/dist/core/slash-commands.d.ts.map +1 -0
  322. package/dist/core/slash-commands.js +26 -0
  323. package/dist/core/slash-commands.js.map +1 -0
  324. package/dist/core/source-info.d.ts +18 -0
  325. package/dist/core/source-info.d.ts.map +1 -0
  326. package/dist/core/source-info.js +19 -0
  327. package/dist/core/source-info.js.map +1 -0
  328. package/dist/core/system-prompt.d.ts +28 -0
  329. package/dist/core/system-prompt.d.ts.map +1 -0
  330. package/dist/core/system-prompt.js +110 -0
  331. package/dist/core/system-prompt.js.map +1 -0
  332. package/dist/core/telemetry.d.ts +3 -0
  333. package/dist/core/telemetry.d.ts.map +1 -0
  334. package/dist/core/telemetry.js +9 -0
  335. package/dist/core/telemetry.js.map +1 -0
  336. package/dist/core/timings.d.ts +10 -0
  337. package/dist/core/timings.d.ts.map +1 -0
  338. package/dist/core/timings.js +41 -0
  339. package/dist/core/timings.js.map +1 -0
  340. package/dist/core/tools/bash.d.ts +74 -0
  341. package/dist/core/tools/bash.d.ts.map +1 -0
  342. package/dist/core/tools/bash.js +394 -0
  343. package/dist/core/tools/bash.js.map +1 -0
  344. package/dist/core/tools/edit-diff.d.ts +106 -0
  345. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  346. package/dist/core/tools/edit-diff.js +424 -0
  347. package/dist/core/tools/edit-diff.js.map +1 -0
  348. package/dist/core/tools/edit.d.ts +55 -0
  349. package/dist/core/tools/edit.d.ts.map +1 -0
  350. package/dist/core/tools/edit.js +290 -0
  351. package/dist/core/tools/edit.js.map +1 -0
  352. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  353. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  354. package/dist/core/tools/file-mutation-queue.js +52 -0
  355. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  356. package/dist/core/tools/find.d.ts +42 -0
  357. package/dist/core/tools/find.d.ts.map +1 -0
  358. package/dist/core/tools/find.js +302 -0
  359. package/dist/core/tools/find.js.map +1 -0
  360. package/dist/core/tools/grep.d.ts +41 -0
  361. package/dist/core/tools/grep.d.ts.map +1 -0
  362. package/dist/core/tools/grep.js +308 -0
  363. package/dist/core/tools/grep.js.map +1 -0
  364. package/dist/core/tools/index.d.ts +40 -0
  365. package/dist/core/tools/index.d.ts.map +1 -0
  366. package/dist/core/tools/index.js +112 -0
  367. package/dist/core/tools/index.js.map +1 -0
  368. package/dist/core/tools/ls.d.ts +41 -0
  369. package/dist/core/tools/ls.d.ts.map +1 -0
  370. package/dist/core/tools/ls.js +171 -0
  371. package/dist/core/tools/ls.js.map +1 -0
  372. package/dist/core/tools/output-accumulator.d.ts +52 -0
  373. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  374. package/dist/core/tools/output-accumulator.js +184 -0
  375. package/dist/core/tools/output-accumulator.js.map +1 -0
  376. package/dist/core/tools/path-utils.d.ts +10 -0
  377. package/dist/core/tools/path-utils.d.ts.map +1 -0
  378. package/dist/core/tools/path-utils.js +99 -0
  379. package/dist/core/tools/path-utils.js.map +1 -0
  380. package/dist/core/tools/read.d.ts +39 -0
  381. package/dist/core/tools/read.d.ts.map +1 -0
  382. package/dist/core/tools/read.js +282 -0
  383. package/dist/core/tools/read.js.map +1 -0
  384. package/dist/core/tools/render-utils.d.ts +24 -0
  385. package/dist/core/tools/render-utils.d.ts.map +1 -0
  386. package/dist/core/tools/render-utils.js +65 -0
  387. package/dist/core/tools/render-utils.js.map +1 -0
  388. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  389. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  390. package/dist/core/tools/tool-definition-wrapper.js +36 -0
  391. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  392. package/dist/core/tools/truncate.d.ts +70 -0
  393. package/dist/core/tools/truncate.d.ts.map +1 -0
  394. package/dist/core/tools/truncate.js +215 -0
  395. package/dist/core/tools/truncate.js.map +1 -0
  396. package/dist/core/tools/write.d.ts +30 -0
  397. package/dist/core/tools/write.d.ts.map +1 -0
  398. package/dist/core/tools/write.js +203 -0
  399. package/dist/core/tools/write.js.map +1 -0
  400. package/dist/core/trust-manager.d.ts +36 -0
  401. package/dist/core/trust-manager.d.ts.map +1 -0
  402. package/dist/core/trust-manager.js +202 -0
  403. package/dist/core/trust-manager.js.map +1 -0
  404. package/dist/core/usage-totals.d.ts +19 -0
  405. package/dist/core/usage-totals.d.ts.map +1 -0
  406. package/dist/core/usage-totals.js +52 -0
  407. package/dist/core/usage-totals.js.map +1 -0
  408. package/dist/extensions/index.d.ts +3 -0
  409. package/dist/extensions/index.d.ts.map +1 -0
  410. package/dist/extensions/index.js +3 -0
  411. package/dist/extensions/index.js.map +1 -0
  412. package/dist/extensions/llama/client.d.ts +61 -0
  413. package/dist/extensions/llama/client.d.ts.map +1 -0
  414. package/dist/extensions/llama/client.js +302 -0
  415. package/dist/extensions/llama/client.js.map +1 -0
  416. package/dist/extensions/llama/huggingface.d.ts +23 -0
  417. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  418. package/dist/extensions/llama/huggingface.js +141 -0
  419. package/dist/extensions/llama/huggingface.js.map +1 -0
  420. package/dist/extensions/llama/index.d.ts +3 -0
  421. package/dist/extensions/llama/index.d.ts.map +1 -0
  422. package/dist/extensions/llama/index.js +217 -0
  423. package/dist/extensions/llama/index.js.map +1 -0
  424. package/dist/extensions/llama/provider.d.ts +10 -0
  425. package/dist/extensions/llama/provider.d.ts.map +1 -0
  426. package/dist/extensions/llama/provider.js +121 -0
  427. package/dist/extensions/llama/provider.js.map +1 -0
  428. package/dist/extensions/llama/ui.d.ts +42 -0
  429. package/dist/extensions/llama/ui.d.ts.map +1 -0
  430. package/dist/extensions/llama/ui.js +416 -0
  431. package/dist/extensions/llama/ui.js.map +1 -0
  432. package/dist/index.d.ts +35 -0
  433. package/dist/index.d.ts.map +1 -0
  434. package/dist/index.js +47 -0
  435. package/dist/index.js.map +1 -0
  436. package/dist/main.d.ts +12 -0
  437. package/dist/main.d.ts.map +1 -0
  438. package/dist/main.js +796 -0
  439. package/dist/main.js.map +1 -0
  440. package/dist/migrations.d.ts +33 -0
  441. package/dist/migrations.d.ts.map +1 -0
  442. package/dist/migrations.js +281 -0
  443. package/dist/migrations.js.map +1 -0
  444. package/dist/modes/index.d.ts +10 -0
  445. package/dist/modes/index.d.ts.map +1 -0
  446. package/dist/modes/index.js +8 -0
  447. package/dist/modes/index.js.map +1 -0
  448. package/dist/modes/interactive/assets/clankolas.png +0 -0
  449. package/dist/modes/interactive/components/armin.d.ts +34 -0
  450. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  451. package/dist/modes/interactive/components/armin.js +333 -0
  452. package/dist/modes/interactive/components/armin.js.map +1 -0
  453. package/dist/modes/interactive/components/assistant-message.d.ts +25 -0
  454. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  455. package/dist/modes/interactive/components/assistant-message.js +150 -0
  456. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  457. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  458. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  459. package/dist/modes/interactive/components/bash-execution.js +175 -0
  460. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  461. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  462. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  463. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  464. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  465. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  466. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  467. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  468. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  469. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  470. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  471. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  472. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  473. package/dist/modes/interactive/components/config-selector.d.ts +102 -0
  474. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  475. package/dist/modes/interactive/components/config-selector.js +761 -0
  476. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  477. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  478. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  479. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  480. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  481. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  482. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  483. package/dist/modes/interactive/components/custom-editor.js +77 -0
  484. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  485. package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  486. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  487. package/dist/modes/interactive/components/custom-entry.js +52 -0
  488. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  489. package/dist/modes/interactive/components/custom-message.d.ts +22 -0
  490. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  491. package/dist/modes/interactive/components/custom-message.js +87 -0
  492. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  493. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  494. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  495. package/dist/modes/interactive/components/daxnuts.js +140 -0
  496. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  497. package/dist/modes/interactive/components/diff.d.ts +12 -0
  498. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  499. package/dist/modes/interactive/components/diff.js +133 -0
  500. package/dist/modes/interactive/components/diff.js.map +1 -0
  501. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  502. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  503. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  504. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  505. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  506. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  507. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  508. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  509. package/dist/modes/interactive/components/extension-editor.d.ts +21 -0
  510. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  511. package/dist/modes/interactive/components/extension-editor.js +98 -0
  512. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  513. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  514. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  515. package/dist/modes/interactive/components/extension-input.js +61 -0
  516. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  517. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  518. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  519. package/dist/modes/interactive/components/extension-selector.js +83 -0
  520. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  521. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  522. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  523. package/dist/modes/interactive/components/first-time-setup.js +103 -0
  524. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  525. package/dist/modes/interactive/components/footer.d.ts +32 -0
  526. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  527. package/dist/modes/interactive/components/footer.js +222 -0
  528. package/dist/modes/interactive/components/footer.js.map +1 -0
  529. package/dist/modes/interactive/components/index.d.ts +34 -0
  530. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  531. package/dist/modes/interactive/components/index.js +35 -0
  532. package/dist/modes/interactive/components/index.js.map +1 -0
  533. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  534. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  535. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  536. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  537. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  538. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  539. package/dist/modes/interactive/components/login-dialog.js +188 -0
  540. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  541. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  542. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  543. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  544. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  545. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  546. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  547. package/dist/modes/interactive/components/mermaid.js +75 -0
  548. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  549. package/dist/modes/interactive/components/model-selector.d.ts +54 -0
  550. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  551. package/dist/modes/interactive/components/model-selector.js +326 -0
  552. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  553. package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  554. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  555. package/dist/modes/interactive/components/oauth-selector.js +163 -0
  556. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  557. package/dist/modes/interactive/components/scoped-models-selector.d.ts +46 -0
  558. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  559. package/dist/modes/interactive/components/scoped-models-selector.js +328 -0
  560. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  561. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  562. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  563. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  564. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  565. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  566. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  567. package/dist/modes/interactive/components/session-selector.js +867 -0
  568. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  569. package/dist/modes/interactive/components/settings-selector.d.ts +85 -0
  570. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  571. package/dist/modes/interactive/components/settings-selector.js +633 -0
  572. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  573. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  574. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  575. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  576. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  577. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  578. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  579. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  580. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  581. package/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  582. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  583. package/dist/modes/interactive/components/status-indicator.js +60 -0
  584. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  585. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  586. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  587. package/dist/modes/interactive/components/theme-selector.js +50 -0
  588. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  589. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  590. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  591. package/dist/modes/interactive/components/thinking-selector.js +52 -0
  592. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  593. package/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  594. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  595. package/dist/modes/interactive/components/tool-execution.js +326 -0
  596. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  597. package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  598. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  599. package/dist/modes/interactive/components/tree-selector.js +1245 -0
  600. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  601. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  602. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  603. package/dist/modes/interactive/components/trust-selector.js +91 -0
  604. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  605. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  606. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  607. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  608. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  609. package/dist/modes/interactive/components/user-message.d.ts +16 -0
  610. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  611. package/dist/modes/interactive/components/user-message.js +49 -0
  612. package/dist/modes/interactive/components/user-message.js.map +1 -0
  613. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  614. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  615. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  616. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  617. package/dist/modes/interactive/external-editor.d.ts +12 -0
  618. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  619. package/dist/modes/interactive/external-editor.js +37 -0
  620. package/dist/modes/interactive/external-editor.js.map +1 -0
  621. package/dist/modes/interactive/interactive-mode.d.ts +435 -0
  622. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  623. package/dist/modes/interactive/interactive-mode.js +5438 -0
  624. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  625. package/dist/modes/interactive/model-catalog-refresh.d.ts +7 -0
  626. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  627. package/dist/modes/interactive/model-catalog-refresh.js +34 -0
  628. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  629. package/dist/modes/interactive/model-search.d.ts +12 -0
  630. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  631. package/dist/modes/interactive/model-search.js +15 -0
  632. package/dist/modes/interactive/model-search.js.map +1 -0
  633. package/dist/modes/interactive/theme/dark.json +90 -0
  634. package/dist/modes/interactive/theme/light.json +89 -0
  635. package/dist/modes/interactive/theme/theme-controller.d.ts +40 -0
  636. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  637. package/dist/modes/interactive/theme/theme-controller.js +125 -0
  638. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  639. package/dist/modes/interactive/theme/theme-schema.json +352 -0
  640. package/dist/modes/interactive/theme/theme.d.ts +122 -0
  641. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  642. package/dist/modes/interactive/theme/theme.js +1091 -0
  643. package/dist/modes/interactive/theme/theme.js.map +1 -0
  644. package/dist/modes/json-event.d.ts +31 -0
  645. package/dist/modes/json-event.d.ts.map +1 -0
  646. package/dist/modes/json-event.js +15 -0
  647. package/dist/modes/json-event.js.map +1 -0
  648. package/dist/modes/print-mode.d.ts +28 -0
  649. package/dist/modes/print-mode.d.ts.map +1 -0
  650. package/dist/modes/print-mode.js +142 -0
  651. package/dist/modes/print-mode.js.map +1 -0
  652. package/dist/modes/rpc/jsonl.d.ts +17 -0
  653. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  654. package/dist/modes/rpc/jsonl.js +49 -0
  655. package/dist/modes/rpc/jsonl.js.map +1 -0
  656. package/dist/modes/rpc/rpc-client.d.ts +247 -0
  657. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  658. package/dist/modes/rpc/rpc-client.js +488 -0
  659. package/dist/modes/rpc/rpc-client.js.map +1 -0
  660. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  661. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  662. package/dist/modes/rpc/rpc-mode.js +654 -0
  663. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  664. package/dist/modes/rpc/rpc-types.d.ts +457 -0
  665. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  666. package/dist/modes/rpc/rpc-types.js +8 -0
  667. package/dist/modes/rpc/rpc-types.js.map +1 -0
  668. package/dist/package-manager-cli.d.ts +8 -0
  669. package/dist/package-manager-cli.d.ts.map +1 -0
  670. package/dist/package-manager-cli.js +777 -0
  671. package/dist/package-manager-cli.js.map +1 -0
  672. package/dist/rpc-entry.d.ts +3 -0
  673. package/dist/rpc-entry.d.ts.map +1 -0
  674. package/dist/rpc-entry.js +11 -0
  675. package/dist/rpc-entry.js.map +1 -0
  676. package/dist/server/create-harness.d.ts +26 -0
  677. package/dist/server/create-harness.d.ts.map +1 -0
  678. package/dist/server/create-harness.js +106 -0
  679. package/dist/server/create-harness.js.map +1 -0
  680. package/dist/utils/abort.d.ts +5 -0
  681. package/dist/utils/abort.d.ts.map +1 -0
  682. package/dist/utils/abort.js +48 -0
  683. package/dist/utils/abort.js.map +1 -0
  684. package/dist/utils/ansi.d.ts +2 -0
  685. package/dist/utils/ansi.d.ts.map +1 -0
  686. package/dist/utils/ansi.js +52 -0
  687. package/dist/utils/ansi.js.map +1 -0
  688. package/dist/utils/changelog.d.ts +22 -0
  689. package/dist/utils/changelog.d.ts.map +1 -0
  690. package/dist/utils/changelog.js +165 -0
  691. package/dist/utils/changelog.js.map +1 -0
  692. package/dist/utils/child-process.d.ts +18 -0
  693. package/dist/utils/child-process.d.ts.map +1 -0
  694. package/dist/utils/child-process.js +106 -0
  695. package/dist/utils/child-process.js.map +1 -0
  696. package/dist/utils/clipboard-image.d.ts +11 -0
  697. package/dist/utils/clipboard-image.d.ts.map +1 -0
  698. package/dist/utils/clipboard-image.js +245 -0
  699. package/dist/utils/clipboard-image.js.map +1 -0
  700. package/dist/utils/clipboard-native.d.ts +11 -0
  701. package/dist/utils/clipboard-native.d.ts.map +1 -0
  702. package/dist/utils/clipboard-native.js +20 -0
  703. package/dist/utils/clipboard-native.js.map +1 -0
  704. package/dist/utils/clipboard.d.ts +4 -0
  705. package/dist/utils/clipboard.d.ts.map +1 -0
  706. package/dist/utils/clipboard.js +161 -0
  707. package/dist/utils/clipboard.js.map +1 -0
  708. package/dist/utils/deprecation.d.ts +4 -0
  709. package/dist/utils/deprecation.d.ts.map +1 -0
  710. package/dist/utils/deprecation.js +13 -0
  711. package/dist/utils/deprecation.js.map +1 -0
  712. package/dist/utils/exif-orientation.d.ts +5 -0
  713. package/dist/utils/exif-orientation.d.ts.map +1 -0
  714. package/dist/utils/exif-orientation.js +158 -0
  715. package/dist/utils/exif-orientation.js.map +1 -0
  716. package/dist/utils/frontmatter.d.ts +8 -0
  717. package/dist/utils/frontmatter.d.ts.map +1 -0
  718. package/dist/utils/frontmatter.js +26 -0
  719. package/dist/utils/frontmatter.js.map +1 -0
  720. package/dist/utils/fs-watch.d.ts +5 -0
  721. package/dist/utils/fs-watch.d.ts.map +1 -0
  722. package/dist/utils/fs-watch.js +25 -0
  723. package/dist/utils/fs-watch.js.map +1 -0
  724. package/dist/utils/git.d.ts +26 -0
  725. package/dist/utils/git.d.ts.map +1 -0
  726. package/dist/utils/git.js +195 -0
  727. package/dist/utils/git.js.map +1 -0
  728. package/dist/utils/html.d.ts +7 -0
  729. package/dist/utils/html.d.ts.map +1 -0
  730. package/dist/utils/html.js +40 -0
  731. package/dist/utils/html.js.map +1 -0
  732. package/dist/utils/image-convert.d.ts +10 -0
  733. package/dist/utils/image-convert.d.ts.map +1 -0
  734. package/dist/utils/image-convert.js +45 -0
  735. package/dist/utils/image-convert.js.map +1 -0
  736. package/dist/utils/image-process.d.ts +18 -0
  737. package/dist/utils/image-process.d.ts.map +1 -0
  738. package/dist/utils/image-process.js +83 -0
  739. package/dist/utils/image-process.js.map +1 -0
  740. package/dist/utils/image-resize-core.d.ts +30 -0
  741. package/dist/utils/image-resize-core.d.ts.map +1 -0
  742. package/dist/utils/image-resize-core.js +124 -0
  743. package/dist/utils/image-resize-core.js.map +1 -0
  744. package/dist/utils/image-resize-worker.d.ts +2 -0
  745. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  746. package/dist/utils/image-resize-worker.js +31 -0
  747. package/dist/utils/image-resize-worker.js.map +1 -0
  748. package/dist/utils/image-resize.d.ts +16 -0
  749. package/dist/utils/image-resize.d.ts.map +1 -0
  750. package/dist/utils/image-resize.js +97 -0
  751. package/dist/utils/image-resize.js.map +1 -0
  752. package/dist/utils/json.d.ts +3 -0
  753. package/dist/utils/json.d.ts.map +1 -0
  754. package/dist/utils/json.js +7 -0
  755. package/dist/utils/json.js.map +1 -0
  756. package/dist/utils/management-http.d.ts +23 -0
  757. package/dist/utils/management-http.d.ts.map +1 -0
  758. package/dist/utils/management-http.js +50 -0
  759. package/dist/utils/management-http.js.map +1 -0
  760. package/dist/utils/mime.d.ts +3 -0
  761. package/dist/utils/mime.d.ts.map +1 -0
  762. package/dist/utils/mime.js +110 -0
  763. package/dist/utils/mime.js.map +1 -0
  764. package/dist/utils/open-browser.d.ts +9 -0
  765. package/dist/utils/open-browser.d.ts.map +1 -0
  766. package/dist/utils/open-browser.js +22 -0
  767. package/dist/utils/open-browser.js.map +1 -0
  768. package/dist/utils/paths.d.ts +34 -0
  769. package/dist/utils/paths.d.ts.map +1 -0
  770. package/dist/utils/paths.js +114 -0
  771. package/dist/utils/paths.js.map +1 -0
  772. package/dist/utils/photon.d.ts +21 -0
  773. package/dist/utils/photon.d.ts.map +1 -0
  774. package/dist/utils/photon.js +121 -0
  775. package/dist/utils/photon.js.map +1 -0
  776. package/dist/utils/pi-user-agent.d.ts +2 -0
  777. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  778. package/dist/utils/pi-user-agent.js +5 -0
  779. package/dist/utils/pi-user-agent.js.map +1 -0
  780. package/dist/utils/shell.d.ts +31 -0
  781. package/dist/utils/shell.d.ts.map +1 -0
  782. package/dist/utils/shell.js +202 -0
  783. package/dist/utils/shell.js.map +1 -0
  784. package/dist/utils/sleep.d.ts +5 -0
  785. package/dist/utils/sleep.d.ts.map +1 -0
  786. package/dist/utils/sleep.js +17 -0
  787. package/dist/utils/sleep.js.map +1 -0
  788. package/dist/utils/syntax-highlight.d.ts +12 -0
  789. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  790. package/dist/utils/syntax-highlight.js +118 -0
  791. package/dist/utils/syntax-highlight.js.map +1 -0
  792. package/dist/utils/tool-result-images.d.ts +19 -0
  793. package/dist/utils/tool-result-images.d.ts.map +1 -0
  794. package/dist/utils/tool-result-images.js +45 -0
  795. package/dist/utils/tool-result-images.js.map +1 -0
  796. package/dist/utils/tools-manager.d.ts +12 -0
  797. package/dist/utils/tools-manager.d.ts.map +1 -0
  798. package/dist/utils/tools-manager.js +321 -0
  799. package/dist/utils/tools-manager.js.map +1 -0
  800. package/dist/utils/version-check.d.ts +19 -0
  801. package/dist/utils/version-check.d.ts.map +1 -0
  802. package/dist/utils/version-check.js +79 -0
  803. package/dist/utils/version-check.js.map +1 -0
  804. package/dist/utils/windows-self-update.d.ts +3 -0
  805. package/dist/utils/windows-self-update.d.ts.map +1 -0
  806. package/dist/utils/windows-self-update.js +77 -0
  807. package/dist/utils/windows-self-update.js.map +1 -0
  808. package/docs/compaction.md +401 -0
  809. package/docs/containerization.md +111 -0
  810. package/docs/custom-provider.md +774 -0
  811. package/docs/development.md +71 -0
  812. package/docs/docs.json +156 -0
  813. package/docs/environment-variables.md +94 -0
  814. package/docs/extensions.md +2992 -0
  815. package/docs/images/doom-extension.png +0 -0
  816. package/docs/images/exy.png +0 -0
  817. package/docs/images/interactive-mode.png +0 -0
  818. package/docs/images/tree-view.png +0 -0
  819. package/docs/index.md +84 -0
  820. package/docs/json.md +93 -0
  821. package/docs/keybindings.md +236 -0
  822. package/docs/llama-cpp.md +99 -0
  823. package/docs/models.md +565 -0
  824. package/docs/packages.md +228 -0
  825. package/docs/prompt-templates.md +96 -0
  826. package/docs/providers.md +317 -0
  827. package/docs/quickstart.md +167 -0
  828. package/docs/rpc.md +1589 -0
  829. package/docs/sdk.md +1214 -0
  830. package/docs/security.md +59 -0
  831. package/docs/session-format.md +438 -0
  832. package/docs/sessions.md +145 -0
  833. package/docs/settings.md +353 -0
  834. package/docs/shell-aliases.md +13 -0
  835. package/docs/skills.md +231 -0
  836. package/docs/terminal-setup.md +163 -0
  837. package/docs/termux.md +127 -0
  838. package/docs/themes.md +320 -0
  839. package/docs/tmux.md +63 -0
  840. package/docs/tui.md +942 -0
  841. package/docs/usage.md +306 -0
  842. package/docs/windows.md +17 -0
  843. package/examples/README.md +25 -0
  844. package/examples/extensions/README.md +213 -0
  845. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  846. package/examples/extensions/bash-spawn-hook.ts +30 -0
  847. package/examples/extensions/bookmark.ts +50 -0
  848. package/examples/extensions/border-status-editor.ts +150 -0
  849. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  850. package/examples/extensions/claude-rules.ts +86 -0
  851. package/examples/extensions/commands.ts +72 -0
  852. package/examples/extensions/confirm-destructive.ts +59 -0
  853. package/examples/extensions/custom-compaction.ts +117 -0
  854. package/examples/extensions/custom-footer.ts +64 -0
  855. package/examples/extensions/custom-header.ts +73 -0
  856. package/examples/extensions/custom-provider-anthropic/index.ts +611 -0
  857. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  858. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  859. package/examples/extensions/custom-provider-gitlab-duo/index.ts +405 -0
  860. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  861. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  862. package/examples/extensions/dirty-repo-guard.ts +56 -0
  863. package/examples/extensions/doom-overlay/README.md +46 -0
  864. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  865. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  866. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  867. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  868. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  869. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  870. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  871. package/examples/extensions/doom-overlay/index.ts +74 -0
  872. package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
  873. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  874. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  875. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  876. package/examples/extensions/dynamic-resources/index.ts +15 -0
  877. package/examples/extensions/dynamic-tools.ts +74 -0
  878. package/examples/extensions/entry-renderer.ts +41 -0
  879. package/examples/extensions/event-bus.ts +43 -0
  880. package/examples/extensions/file-trigger.ts +41 -0
  881. package/examples/extensions/git-checkpoint.ts +53 -0
  882. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  883. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  884. package/examples/extensions/gondolin/index.ts +531 -0
  885. package/examples/extensions/gondolin/package-lock.json +185 -0
  886. package/examples/extensions/gondolin/package.json +19 -0
  887. package/examples/extensions/handoff.ts +190 -0
  888. package/examples/extensions/hello.ts +26 -0
  889. package/examples/extensions/hidden-thinking-label.ts +53 -0
  890. package/examples/extensions/inline-bash.ts +94 -0
  891. package/examples/extensions/input-transform-streaming.ts +39 -0
  892. package/examples/extensions/input-transform.ts +43 -0
  893. package/examples/extensions/interactive-shell.ts +196 -0
  894. package/examples/extensions/kimi-deferred-tools.ts +61 -0
  895. package/examples/extensions/mac-system-theme.ts +47 -0
  896. package/examples/extensions/message-renderer.ts +59 -0
  897. package/examples/extensions/minimal-mode.ts +426 -0
  898. package/examples/extensions/modal-editor.ts +85 -0
  899. package/examples/extensions/model-status.ts +31 -0
  900. package/examples/extensions/notify.ts +55 -0
  901. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  902. package/examples/extensions/overlay-test.ts +153 -0
  903. package/examples/extensions/permission-gate.ts +34 -0
  904. package/examples/extensions/pirate.ts +47 -0
  905. package/examples/extensions/plan-mode/README.md +66 -0
  906. package/examples/extensions/plan-mode/index.ts +390 -0
  907. package/examples/extensions/plan-mode/utils.ts +168 -0
  908. package/examples/extensions/preset.ts +436 -0
  909. package/examples/extensions/project-trust.ts +64 -0
  910. package/examples/extensions/prompt-customizer.ts +97 -0
  911. package/examples/extensions/protected-paths.ts +30 -0
  912. package/examples/extensions/provider-payload.ts +18 -0
  913. package/examples/extensions/qna.ts +118 -0
  914. package/examples/extensions/question.ts +286 -0
  915. package/examples/extensions/questionnaire.ts +448 -0
  916. package/examples/extensions/rainbow-editor.ts +88 -0
  917. package/examples/extensions/reload-runtime.ts +37 -0
  918. package/examples/extensions/rpc-demo.ts +118 -0
  919. package/examples/extensions/sandbox/index.ts +321 -0
  920. package/examples/extensions/sandbox/package-lock.json +92 -0
  921. package/examples/extensions/sandbox/package.json +19 -0
  922. package/examples/extensions/send-user-message.ts +97 -0
  923. package/examples/extensions/session-name.ts +27 -0
  924. package/examples/extensions/shutdown-command.ts +63 -0
  925. package/examples/extensions/snake.ts +343 -0
  926. package/examples/extensions/space-invaders.ts +560 -0
  927. package/examples/extensions/ssh.ts +220 -0
  928. package/examples/extensions/status-line.ts +32 -0
  929. package/examples/extensions/structured-output.ts +65 -0
  930. package/examples/extensions/subagent/README.md +177 -0
  931. package/examples/extensions/subagent/agents/planner.md +37 -0
  932. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  933. package/examples/extensions/subagent/agents/scout.md +50 -0
  934. package/examples/extensions/subagent/agents/worker.md +24 -0
  935. package/examples/extensions/subagent/agents.ts +157 -0
  936. package/examples/extensions/subagent/index.ts +1033 -0
  937. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  938. package/examples/extensions/subagent/prompts/implement.md +10 -0
  939. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  940. package/examples/extensions/summarize.ts +199 -0
  941. package/examples/extensions/system-prompt-header.ts +17 -0
  942. package/examples/extensions/tic-tac-toe.ts +1008 -0
  943. package/examples/extensions/timed-confirm.ts +70 -0
  944. package/examples/extensions/titlebar-spinner.ts +58 -0
  945. package/examples/extensions/todo.ts +297 -0
  946. package/examples/extensions/tool-override.ts +144 -0
  947. package/examples/extensions/tools.ts +146 -0
  948. package/examples/extensions/trigger-compact.ts +50 -0
  949. package/examples/extensions/truncated-tool.ts +195 -0
  950. package/examples/extensions/widget-placement.ts +9 -0
  951. package/examples/extensions/with-deps/index.ts +32 -0
  952. package/examples/extensions/with-deps/package-lock.json +31 -0
  953. package/examples/extensions/with-deps/package.json +22 -0
  954. package/examples/extensions/working-indicator.ts +123 -0
  955. package/examples/extensions/working-message-test.ts +25 -0
  956. package/examples/rpc-extension-ui.ts +641 -0
  957. package/examples/sdk/01-minimal.ts +26 -0
  958. package/examples/sdk/02-custom-model.ts +49 -0
  959. package/examples/sdk/03-custom-prompt.ts +75 -0
  960. package/examples/sdk/04-skills.ts +55 -0
  961. package/examples/sdk/05-tools.ts +48 -0
  962. package/examples/sdk/06-extensions.ts +99 -0
  963. package/examples/sdk/07-context-files.ts +47 -0
  964. package/examples/sdk/08-prompt-templates.ts +51 -0
  965. package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
  966. package/examples/sdk/10-settings.ts +53 -0
  967. package/examples/sdk/11-sessions.ts +52 -0
  968. package/examples/sdk/12-full-control.ts +74 -0
  969. package/examples/sdk/13-session-runtime.ts +67 -0
  970. package/examples/sdk/README.md +140 -0
  971. package/npm-shrinkwrap.json +1818 -0
  972. package/package.json +109 -0
package/docs/sdk.md ADDED
@@ -0,0 +1,1214 @@
1
+ > pi can help you use the SDK. Ask it to build an integration for your use case.
2
+
3
+ # SDK
4
+
5
+ The SDK provides programmatic access to pi's agent capabilities. Use it to embed pi in other applications, build custom interfaces, or integrate with automated workflows.
6
+
7
+ **Example use cases:**
8
+ - Build a custom UI (web, desktop, mobile)
9
+ - Integrate agent capabilities into existing applications
10
+ - Create automated pipelines with agent reasoning
11
+ - Build custom tools that spawn sub-agents
12
+ - Test agent behavior programmatically
13
+
14
+ See [examples/sdk/](../examples/sdk/) for working examples from minimal to full control.
15
+
16
+ ## Quick Start
17
+
18
+ ```typescript
19
+ import { createAgentSession, ModelRuntime, SessionManager } from "@earendil-works/pi-coding-agent";
20
+
21
+ const modelRuntime = await ModelRuntime.create();
22
+ const { session } = await createAgentSession({
23
+ sessionManager: SessionManager.inMemory(),
24
+ modelRuntime,
25
+ });
26
+
27
+ session.subscribe((event) => {
28
+ if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
29
+ process.stdout.write(event.assistantMessageEvent.delta);
30
+ }
31
+ });
32
+
33
+ await session.prompt("What files are in the current directory?");
34
+ ```
35
+
36
+ ## Installation
37
+
38
+ ```bash
39
+ npm install @earendil-works/pi-coding-agent
40
+ ```
41
+
42
+ The SDK is included in the main package. No separate installation needed.
43
+
44
+ ## Core Concepts
45
+
46
+ ### createAgentSession()
47
+
48
+ The main factory function for a single `AgentSession`.
49
+
50
+ `createAgentSession()` uses a `ResourceLoader` to supply extensions, skills, prompt templates, themes, and context files. If you do not provide one, it uses `DefaultResourceLoader` with standard discovery.
51
+
52
+ ```typescript
53
+ import { createAgentSession, SessionManager } from "@earendil-works/pi-coding-agent";
54
+
55
+ // Minimal: defaults with DefaultResourceLoader
56
+ const { session } = await createAgentSession();
57
+
58
+ // Custom: override specific options
59
+ const { session } = await createAgentSession({
60
+ model: myModel,
61
+ tools: ["read", "bash"],
62
+ sessionManager: SessionManager.inMemory(),
63
+ });
64
+ ```
65
+
66
+ ### AgentSession
67
+
68
+ The session manages agent lifecycle, message history, model state, compaction, and event streaming.
69
+
70
+ ```typescript
71
+ interface AgentSession {
72
+ // Send a prompt and wait for completion
73
+ prompt(text: string, options?: PromptOptions): Promise<void>;
74
+
75
+ // Queue messages during streaming
76
+ steer(text: string): Promise<void>;
77
+ followUp(text: string): Promise<void>;
78
+
79
+ // Subscribe to events (returns unsubscribe function)
80
+ subscribe(listener: (event: AgentSessionEvent) => void): () => void;
81
+
82
+ // Session info
83
+ sessionFile: string | undefined;
84
+ sessionId: string;
85
+
86
+ // Model control
87
+ setModel(model: Model): Promise<void>;
88
+ setThinkingLevel(level: ThinkingLevel): void;
89
+ cycleModel(): Promise<ModelCycleResult | undefined>;
90
+ cycleThinkingLevel(): ThinkingLevel | undefined;
91
+
92
+ // State access
93
+ agent: Agent;
94
+ model: Model | undefined;
95
+ thinkingLevel: ThinkingLevel;
96
+ messages: AgentMessage[];
97
+ isStreaming: boolean;
98
+
99
+ // In-place tree navigation within the current session file
100
+ navigateTree(targetId: string, options?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string }): Promise<{ editorText?: string; cancelled: boolean }>;
101
+
102
+ // Compaction
103
+ compact(customInstructions?: string): Promise<CompactionResult>;
104
+ abortCompaction(): void;
105
+
106
+ // Abort current operation
107
+ abort(): Promise<void>;
108
+
109
+ // Cleanup
110
+ dispose(): void;
111
+ }
112
+ ```
113
+
114
+ Session replacement APIs such as new-session, resume, fork, and import live on `AgentSessionRuntime`, not on `AgentSession`.
115
+
116
+ ### createAgentSessionRuntime() and AgentSessionRuntime
117
+
118
+ Use the runtime API when you need to replace the active session and rebuild cwd-bound runtime state.
119
+ This is the same layer used by the built-in interactive, print, and RPC modes.
120
+
121
+ `createAgentSessionRuntime()` takes a runtime factory plus the initial cwd/session target. The factory closes over process-global fixed inputs, recreates cwd-bound services for the effective cwd, resolves session options against those services, and returns a full runtime result.
122
+
123
+ ```typescript
124
+ import {
125
+ type CreateAgentSessionRuntimeFactory,
126
+ createAgentSessionFromServices,
127
+ createAgentSessionRuntime,
128
+ createAgentSessionServices,
129
+ getAgentDir,
130
+ SessionManager,
131
+ } from "@earendil-works/pi-coding-agent";
132
+
133
+ const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
134
+ const services = await createAgentSessionServices({ cwd });
135
+ return {
136
+ ...(await createAgentSessionFromServices({
137
+ services,
138
+ sessionManager,
139
+ sessionStartEvent,
140
+ })),
141
+ services,
142
+ diagnostics: services.diagnostics,
143
+ };
144
+ };
145
+
146
+ const runtime = await createAgentSessionRuntime(createRuntime, {
147
+ cwd: process.cwd(),
148
+ agentDir: getAgentDir(),
149
+ sessionManager: SessionManager.create(process.cwd()),
150
+ });
151
+ ```
152
+
153
+ `AgentSessionRuntime` owns replacement of the active runtime across:
154
+
155
+ - `newSession()`
156
+ - `switchSession()`
157
+ - `fork()`
158
+ - clone flows via `fork(entryId, { position: "at" })`
159
+ - `importFromJsonl()`
160
+
161
+ Important behavior:
162
+
163
+ - `runtime.session` changes after those operations
164
+ - event subscriptions are attached to a specific `AgentSession`, so re-subscribe after replacement
165
+ - if you use extensions, call `runtime.session.bindExtensions(...)` again for the new session
166
+ - creation returns diagnostics on `runtime.diagnostics`
167
+ - if runtime creation or replacement fails, the method throws and the caller decides how to handle it
168
+
169
+ ```typescript
170
+ let session = runtime.session;
171
+ let unsubscribe = session.subscribe(() => {});
172
+
173
+ await runtime.newSession();
174
+
175
+ unsubscribe();
176
+ session = runtime.session;
177
+ unsubscribe = session.subscribe(() => {});
178
+ ```
179
+
180
+ ### Prompting and Message Queueing
181
+
182
+ `PromptOptions` controls prompt expansion, queueing behavior while streaming, and prompt preflight notifications:
183
+
184
+ ```typescript
185
+ interface PromptOptions {
186
+ expandPromptTemplates?: boolean;
187
+ images?: ImageContent[];
188
+ streamingBehavior?: "steer" | "followUp";
189
+ source?: InputSource;
190
+ preflightResult?: (success: boolean) => void;
191
+ }
192
+ ```
193
+
194
+ `preflightResult` is called once per `prompt()` invocation:
195
+
196
+ - `true` when the prompt was accepted, queued, or handled immediately
197
+ - `false` when prompt preflight rejected before acceptance
198
+
199
+ It fires before `prompt()` resolves. `prompt()` still resolves only after the full accepted run finishes, including retries. Failures after acceptance are reported through the normal event and message stream, not through `preflightResult(false)`.
200
+
201
+ The `prompt()` method handles prompt templates, extension commands, and message sending:
202
+
203
+ ```typescript
204
+ // Basic prompt (when not streaming)
205
+ await session.prompt("What files are here?");
206
+
207
+ // With images
208
+ await session.prompt("What's in this image?", {
209
+ images: [{ type: "image", source: { type: "base64", mediaType: "image/png", data: "..." } }]
210
+ });
211
+
212
+ // During streaming: must specify how to queue the message
213
+ await session.prompt("Stop and do this instead", { streamingBehavior: "steer" });
214
+ await session.prompt("After you're done, also check X", { streamingBehavior: "followUp" });
215
+ ```
216
+
217
+ **Behavior:**
218
+ - **Extension commands** (e.g., `/mycommand`): Execute immediately, even during streaming. They manage their own LLM interaction via `pi.sendMessage()`.
219
+ - **File-based prompt templates** (from `.md` files): Expanded to their content before sending or queueing.
220
+ - **During streaming without `streamingBehavior`**: Throws an error. Use `steer()` or `followUp()` directly, or specify the option.
221
+ - **`preflightResult(true)`**: Means the prompt was accepted, queued, or handled immediately.
222
+ - **`preflightResult(false)`**: Means preflight rejected before acceptance.
223
+
224
+ For explicit queueing during streaming:
225
+
226
+ ```typescript
227
+ // Queue a steering message for delivery after the current assistant turn finishes its tool calls
228
+ await session.steer("New instruction");
229
+
230
+ // Wait for agent to finish (delivered only when agent stops)
231
+ await session.followUp("After you're done, also do this");
232
+ ```
233
+
234
+ Both `steer()` and `followUp()` expand file-based prompt templates but error on extension commands (extension commands cannot be queued).
235
+
236
+ ### Agent and AgentState
237
+
238
+ The `Agent` class (from `@earendil-works/pi-agent-core`) handles the core LLM interaction. Access it via `session.agent`.
239
+
240
+ ```typescript
241
+ // Access current state
242
+ const state = session.agent.state;
243
+
244
+ // state.messages: AgentMessage[] - conversation history
245
+ // state.model: Model - current model
246
+ // state.thinkingLevel: ThinkingLevel - current thinking level
247
+ // state.systemPrompt: string - system prompt
248
+ // state.tools: AgentTool[] - available tools
249
+ // state.streamingMessage?: AgentMessage - current partial assistant message
250
+ // state.errorMessage?: string - latest assistant error
251
+
252
+ // Replace messages (useful for branching or restoration)
253
+ session.agent.state.messages = messages; // copies the top-level array
254
+
255
+ // Replace tools
256
+ session.agent.state.tools = tools; // copies the top-level array
257
+
258
+ // Wait for agent to finish processing
259
+ await session.agent.waitForIdle();
260
+ ```
261
+
262
+ ### Events
263
+
264
+ Subscribe to events to receive streaming output and lifecycle notifications.
265
+
266
+ ```typescript
267
+ session.subscribe((event) => {
268
+ switch (event.type) {
269
+ // Streaming text from assistant
270
+ case "message_update":
271
+ if (event.assistantMessageEvent.type === "text_delta") {
272
+ process.stdout.write(event.assistantMessageEvent.delta);
273
+ }
274
+ if (event.assistantMessageEvent.type === "thinking_delta") {
275
+ // Thinking output (if thinking enabled)
276
+ }
277
+ break;
278
+
279
+ // Tool execution
280
+ case "tool_execution_start":
281
+ console.log(`Tool: ${event.toolName}`);
282
+ break;
283
+ case "tool_execution_update":
284
+ // Streaming tool output
285
+ break;
286
+ case "tool_execution_end":
287
+ console.log(`Result: ${event.isError ? "error" : "success"}`);
288
+ break;
289
+
290
+ // Message lifecycle
291
+ case "message_start":
292
+ // New message starting
293
+ break;
294
+ case "message_end":
295
+ // Message complete
296
+ break;
297
+
298
+ // Agent lifecycle
299
+ case "agent_start":
300
+ // Agent started processing prompt
301
+ break;
302
+ case "agent_end":
303
+ // Agent finished (event.messages contains new messages)
304
+ break;
305
+
306
+ // Turn lifecycle (one LLM response + tool calls)
307
+ case "turn_start":
308
+ break;
309
+ case "turn_end":
310
+ // event.message: assistant response
311
+ // event.toolResults: tool results from this turn
312
+ break;
313
+
314
+ // Session events (queue, compaction, retry)
315
+ case "queue_update":
316
+ console.log(event.steering, event.followUp);
317
+ break;
318
+ case "compaction_start":
319
+ case "compaction_end":
320
+ case "auto_retry_start":
321
+ case "auto_retry_end":
322
+ case "summarization_retry_scheduled":
323
+ case "summarization_retry_attempt_start":
324
+ case "summarization_retry_finished":
325
+ break;
326
+ }
327
+ });
328
+ ```
329
+
330
+ ## Options Reference
331
+
332
+ ### Directories
333
+
334
+ ```typescript
335
+ const { session } = await createAgentSession({
336
+ // Working directory for DefaultResourceLoader discovery
337
+ cwd: process.cwd(), // default
338
+
339
+ // Global config directory
340
+ agentDir: "~/.pi/agent", // default (expands ~)
341
+ });
342
+ ```
343
+
344
+ `cwd` is used by `DefaultResourceLoader` for:
345
+ - Project extensions (`.pi/extensions/`)
346
+ - Project skills:
347
+ - `.pi/skills/`
348
+ - `.agents/skills/` in `cwd` and ancestor directories (up to git repo root, or filesystem root when not in a repo)
349
+ - Project prompts (`.pi/prompts/`)
350
+ - Context files (`AGENTS.md` walking up from cwd)
351
+ - Session directory naming
352
+
353
+ `agentDir` is used by `DefaultResourceLoader` for:
354
+ - Global extensions (`extensions/`)
355
+ - Global skills:
356
+ - `skills/` under `agentDir` (for example `~/.pi/agent/skills/`)
357
+ - `~/.agents/skills/`
358
+ - Global prompts (`prompts/`)
359
+ - Global context file (`AGENTS.md`)
360
+ - Settings (`settings.json`)
361
+ - Custom models (`models.json`)
362
+ - Credentials (`auth.json`)
363
+ - Sessions (`sessions/`)
364
+
365
+ When you pass a custom `ResourceLoader`, `cwd` and `agentDir` no longer control resource discovery. They still influence session naming and tool path resolution.
366
+
367
+ ### Model
368
+
369
+ ```typescript
370
+ import { getModel } from "@earendil-works/pi-ai";
371
+ import { ModelRuntime } from "@earendil-works/pi-coding-agent";
372
+
373
+ const modelRuntime = await ModelRuntime.create();
374
+
375
+ // create() restores cached catalogs but does not refresh them from pi.dev by default.
376
+ // Opt in to a create-time network refresh and bound how long it may take:
377
+ const refreshedRuntime = await ModelRuntime.create({
378
+ allowModelNetwork: true,
379
+ modelRefreshTimeoutMs: 15_000,
380
+ });
381
+
382
+ // Find specific built-in model (doesn't check if API key exists)
383
+ const opus = getModel("anthropic", "claude-opus-4-5");
384
+ if (!opus) throw new Error("Model not found");
385
+
386
+ // Find any model by provider/id, including custom models from models.json
387
+ // (doesn't check if API key exists)
388
+ const customModel = modelRuntime.getModel("my-provider", "my-model");
389
+
390
+ // Get only models that have valid authentication configured
391
+ const available = await modelRuntime.getAvailable();
392
+
393
+ const { session } = await createAgentSession({
394
+ model: opus,
395
+ thinkingLevel: "medium", // off, minimal, low, medium, high, xhigh, max
396
+
397
+ // Models for cycling (Ctrl+P in interactive mode)
398
+ scopedModels: [
399
+ { model: opus, thinkingLevel: "high" },
400
+ { model: haiku, thinkingLevel: "off" },
401
+ ],
402
+
403
+ modelRuntime,
404
+ });
405
+ ```
406
+
407
+ If no model is provided:
408
+ 1. Tries to restore from session (if continuing)
409
+ 2. Uses default from settings
410
+ 3. Falls back to first available model
411
+
412
+ Remote catalogs are persisted locally so later runtimes can restore them without a network request. The default file is `~/.pi/agent/models-store.json`; set `modelsStorePath` to choose another location, or inject `modelsStore` to control persistence. Network refreshes are throttled to once per provider every four hours unless forced. To force an immediate refresh, call `await modelRuntime.refresh({ allowNetwork: true, force: true, signal })`. Setting `PI_OFFLINE` disables model network access.
413
+
414
+ To match CLI model parsing, use the exported resolver helpers:
415
+
416
+ ```typescript
417
+ import {
418
+ resolveCliModel,
419
+ resolveModelScopeWithDiagnostics,
420
+ } from "@earendil-works/pi-coding-agent";
421
+
422
+ const cliModel = resolveCliModel({
423
+ cliModel: "anthropic/claude-opus-4-5:high",
424
+ modelRuntime,
425
+ });
426
+ if (cliModel.error) throw new Error(cliModel.error);
427
+ if (cliModel.warning) console.warn(cliModel.warning);
428
+
429
+ const { scopedModels, diagnostics } = await resolveModelScopeWithDiagnostics(
430
+ ["anthropic/*:high", "gpt-5"],
431
+ modelRuntime,
432
+ );
433
+ for (const diagnostic of diagnostics) {
434
+ console.warn(diagnostic.message);
435
+ }
436
+ ```
437
+
438
+ `resolveCliModel()` uses all registered models so `--api-key` style first-time setup can resolve a model before stored auth exists. `resolveModelScopeWithDiagnostics()` matches `--models` and `enabledModels` semantics while returning warnings instead of printing them.
439
+
440
+ > See [examples/sdk/02-custom-model.ts](../examples/sdk/02-custom-model.ts)
441
+
442
+ ### API Keys and OAuth
443
+
444
+ Authentication resolution priority (handled by `ModelRuntime`):
445
+ 1. Runtime overrides (via `setRuntimeApiKey`, not persisted)
446
+ 2. Stored credentials in `auth.json` (API keys or OAuth tokens)
447
+ 3. Environment variables (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, etc.)
448
+ 4. Fallback resolver (for custom provider keys from `models.json`)
449
+
450
+ ```typescript
451
+ import { InMemoryCredentialStore } from "@earendil-works/pi-ai";
452
+ import { createAgentSession, ModelRuntime } from "@earendil-works/pi-coding-agent";
453
+
454
+ // Default: uses ~/.pi/agent/auth.json and ~/.pi/agent/models.json
455
+ const modelRuntime = await ModelRuntime.create();
456
+
457
+ // Provider-owned auth methods and current status
458
+ for (const provider of modelRuntime.getProviders()) {
459
+ const status = await modelRuntime.checkAuth(provider.id);
460
+ console.log(provider.name, provider.auth, status);
461
+ }
462
+
463
+ // Runtime API key override (not persisted to disk)
464
+ await modelRuntime.setRuntimeApiKey("anthropic", "sk-my-temp-key");
465
+
466
+ // Custom credential and model locations
467
+ const customRuntime = await ModelRuntime.create({
468
+ authPath: "/my/app/auth.json",
469
+ modelsPath: "/my/app/models.json",
470
+ });
471
+
472
+ // Or inject any pi-ai CredentialStore
473
+ const credentials = new InMemoryCredentialStore();
474
+ const inMemoryRuntime = await ModelRuntime.create({ credentials });
475
+
476
+ const { session } = await createAgentSession({
477
+ modelRuntime: customRuntime,
478
+ });
479
+ ```
480
+
481
+ `login()`, `logout()`, `setRuntimeApiKey()`, and `removeRuntimeApiKey()` resolve after the affected provider's cached/built-in catalog, composition, and availability snapshot are locally consistent. They do not wait for remote catalog freshness. If credentials were committed but local synchronization fails, they reject with the exported `CredentialSynchronizationError`; inspect its `providerId`, `operation`, `credential`, and `cause` fields instead of retrying the credential mutation blindly.
482
+
483
+ Public model/auth operations and `ModelRuntime.create({ signal })` accept optional abort signals and are unbounded when omitted. SDK applications own deadline policy for remote catalog freshness:
484
+
485
+ ```typescript
486
+ const signal = AbortSignal.timeout(15_000);
487
+ const result = await modelRuntime.refresh({
488
+ providers: ["anthropic"],
489
+ signal,
490
+ });
491
+ if (result.aborted) console.warn("Catalog refresh timed out; using cached models");
492
+ for (const [providerId, error] of result.errors) {
493
+ console.warn(`Could not refresh ${providerId}:`, error);
494
+ }
495
+ ```
496
+
497
+ A failed or timed-out network refresh does not undo a successful credential operation. `refresh()` starts a new provider generation, so it does not wait behind an older stalled refresh and stale generations cannot publish afterward.
498
+
499
+ > See [examples/sdk/09-api-keys-and-oauth.ts](../examples/sdk/09-api-keys-and-oauth.ts)
500
+
501
+ ### System Prompt
502
+
503
+ Use a `ResourceLoader` to override the system prompt:
504
+
505
+ ```typescript
506
+ import { createAgentSession, DefaultResourceLoader } from "@earendil-works/pi-coding-agent";
507
+
508
+ const loader = new DefaultResourceLoader({
509
+ systemPromptOverride: () => "You are a helpful assistant.",
510
+ });
511
+ await loader.reload();
512
+
513
+ const { session } = await createAgentSession({ resourceLoader: loader });
514
+ ```
515
+
516
+ > See [examples/sdk/03-custom-prompt.ts](../examples/sdk/03-custom-prompt.ts)
517
+
518
+ ### Tools
519
+
520
+ Specify which built-in tools to enable:
521
+
522
+ - Built-in tool names: `read`, `bash`, `edit`, `write`, `grep`, `find`, `ls`
523
+ - Default built-ins: `read`, `bash`, `edit`, `write`
524
+ - `noTools: "all"` disables all tools
525
+ - `noTools: "builtin"` disables default built-ins while keeping extension and custom tools enabled
526
+ - `excludeTools` disables specific built-in, extension, or custom tool names after any `tools` allowlist is applied
527
+
528
+ The `edit` tool returns `details.diff` for Pi's TUI display and `details.patch` as a standard unified patch for SDK consumers.
529
+
530
+ ```typescript
531
+ import { createAgentSession } from "@earendil-works/pi-coding-agent";
532
+
533
+ // Read-only mode
534
+ const { session } = await createAgentSession({
535
+ tools: ["read", "grep", "find", "ls"],
536
+ });
537
+
538
+ // Pick specific tools
539
+ const { session } = await createAgentSession({
540
+ tools: ["read", "bash", "grep"],
541
+ });
542
+
543
+ // Disable one tool while keeping the rest available
544
+ const { session } = await createAgentSession({
545
+ excludeTools: ["ask_question"],
546
+ });
547
+ ```
548
+
549
+ #### Tools with Custom cwd
550
+
551
+ When you pass a custom `cwd`, `createAgentSession()` builds selected built-in tools for that cwd.
552
+
553
+ ```typescript
554
+ import { createAgentSession, SessionManager } from "@earendil-works/pi-coding-agent";
555
+
556
+ const cwd = "/path/to/project";
557
+
558
+ // Use default tools for custom cwd
559
+ const { session } = await createAgentSession({
560
+ cwd,
561
+ sessionManager: SessionManager.inMemory(cwd),
562
+ });
563
+
564
+ // Or pick specific tools for custom cwd
565
+ const { session } = await createAgentSession({
566
+ cwd,
567
+ tools: ["read", "bash", "grep"],
568
+ sessionManager: SessionManager.inMemory(cwd),
569
+ });
570
+ ```
571
+
572
+ > See [examples/sdk/05-tools.ts](../examples/sdk/05-tools.ts)
573
+
574
+ ### Custom Tools
575
+
576
+ ```typescript
577
+ import { Type } from "typebox";
578
+ import { createAgentSession, defineTool } from "@earendil-works/pi-coding-agent";
579
+
580
+ // Inline custom tool
581
+ const myTool = defineTool({
582
+ name: "my_tool",
583
+ label: "My Tool",
584
+ description: "Does something useful",
585
+ parameters: Type.Object({
586
+ input: Type.String({ description: "Input value" }),
587
+ }),
588
+ execute: async (_toolCallId, params) => ({
589
+ content: [{ type: "text", text: `Result: ${params.input}` }],
590
+ details: {},
591
+ }),
592
+ });
593
+
594
+ // Pass custom tools directly
595
+ const { session } = await createAgentSession({
596
+ customTools: [myTool],
597
+ });
598
+ ```
599
+
600
+ Use `defineTool()` for standalone definitions and arrays like `customTools: [myTool]`. Inline `pi.registerTool({ ... })` already infers parameter types correctly.
601
+
602
+ Custom tools passed via `customTools` are combined with extension-registered tools. Extensions loaded by the ResourceLoader can also register tools via `pi.registerTool()`.
603
+
604
+ If you pass `tools`, include each custom or extension tool name you want enabled, for example `tools: ["read", "bash", "my_tool"]`.
605
+
606
+ > See [examples/sdk/05-tools.ts](../examples/sdk/05-tools.ts)
607
+
608
+ ### Extensions
609
+
610
+ Extensions are loaded by the `ResourceLoader`. `DefaultResourceLoader` discovers extensions from `~/.pi/agent/extensions/`, `.pi/extensions/`, and settings.json extension sources.
611
+
612
+ ```typescript
613
+ import { createAgentSession, DefaultResourceLoader } from "@earendil-works/pi-coding-agent";
614
+
615
+ const loader = new DefaultResourceLoader({
616
+ additionalExtensionPaths: ["/path/to/my-extension.ts"],
617
+ extensionFactories: [
618
+ (pi) => {
619
+ pi.on("agent_start", () => {
620
+ console.log("[Inline Extension] Agent starting");
621
+ });
622
+ },
623
+ ],
624
+ });
625
+ await loader.reload();
626
+
627
+ const { session } = await createAgentSession({ resourceLoader: loader });
628
+ ```
629
+
630
+ Extensions can register tools, subscribe to events, add commands, and more. See [extensions.md](extensions.md) for the full API.
631
+
632
+ **Named inline extensions:** By default, inline factories display as `<inline:1>`, `<inline:2>`, etc. in the startup Extensions list. To show a descriptive name instead, wrap the factory:
633
+
634
+ ```typescript
635
+ import type { InlineExtension } from "@earendil-works/pi-coding-agent";
636
+
637
+ const myProvider: InlineExtension = {
638
+ name: "my-provider",
639
+ factory: (pi) => {
640
+ pi.on("agent_start", () => {
641
+ console.log("[my-provider] Agent starting");
642
+ });
643
+ },
644
+ };
645
+
646
+ const loader = new DefaultResourceLoader({
647
+ extensionFactories: [myProvider],
648
+ });
649
+ ```
650
+
651
+ This displays as `<inline:my-provider>` instead of `<inline:1>`. Bare factory functions are still accepted for backward compatibility.
652
+
653
+ **Event Bus:** Extensions can communicate via `pi.events`. Pass a shared `eventBus` to `DefaultResourceLoader` if you need to emit or listen from outside:
654
+
655
+ ```typescript
656
+ import { createEventBus, DefaultResourceLoader } from "@earendil-works/pi-coding-agent";
657
+
658
+ const eventBus = createEventBus();
659
+ const loader = new DefaultResourceLoader({
660
+ eventBus,
661
+ });
662
+ await loader.reload();
663
+
664
+ eventBus.on("my-extension:status", (data) => console.log(data));
665
+ ```
666
+
667
+ > See [examples/sdk/06-extensions.ts](../examples/sdk/06-extensions.ts) and [docs/extensions.md](extensions.md)
668
+
669
+ ### Skills
670
+
671
+ ```typescript
672
+ import {
673
+ createAgentSession,
674
+ DefaultResourceLoader,
675
+ type Skill,
676
+ } from "@earendil-works/pi-coding-agent";
677
+
678
+ const customSkill: Skill = {
679
+ name: "my-skill",
680
+ description: "Custom instructions",
681
+ filePath: "/path/to/SKILL.md",
682
+ baseDir: "/path/to",
683
+ source: "custom",
684
+ };
685
+
686
+ const loader = new DefaultResourceLoader({
687
+ skillsOverride: (current) => ({
688
+ skills: [...current.skills, customSkill],
689
+ diagnostics: current.diagnostics,
690
+ }),
691
+ });
692
+ await loader.reload();
693
+
694
+ const { session } = await createAgentSession({ resourceLoader: loader });
695
+ ```
696
+
697
+ > See [examples/sdk/04-skills.ts](../examples/sdk/04-skills.ts)
698
+
699
+ ### Context Files
700
+
701
+ ```typescript
702
+ import { createAgentSession, DefaultResourceLoader } from "@earendil-works/pi-coding-agent";
703
+
704
+ const loader = new DefaultResourceLoader({
705
+ agentsFilesOverride: (current) => ({
706
+ agentsFiles: [
707
+ ...current.agentsFiles,
708
+ { path: "/virtual/AGENTS.md", content: "# Guidelines\n\n- Be concise" },
709
+ ],
710
+ }),
711
+ });
712
+ await loader.reload();
713
+
714
+ const { session } = await createAgentSession({ resourceLoader: loader });
715
+ ```
716
+
717
+ > See [examples/sdk/07-context-files.ts](../examples/sdk/07-context-files.ts)
718
+
719
+ ### Slash Commands
720
+
721
+ ```typescript
722
+ import {
723
+ createAgentSession,
724
+ DefaultResourceLoader,
725
+ type PromptTemplate,
726
+ } from "@earendil-works/pi-coding-agent";
727
+
728
+ const customCommand: PromptTemplate = {
729
+ name: "deploy",
730
+ description: "Deploy the application",
731
+ source: "(custom)",
732
+ content: "# Deploy\n\n1. Build\n2. Test\n3. Deploy",
733
+ };
734
+
735
+ const loader = new DefaultResourceLoader({
736
+ promptsOverride: (current) => ({
737
+ prompts: [...current.prompts, customCommand],
738
+ diagnostics: current.diagnostics,
739
+ }),
740
+ });
741
+ await loader.reload();
742
+
743
+ const { session } = await createAgentSession({ resourceLoader: loader });
744
+ ```
745
+
746
+ > See [examples/sdk/08-prompt-templates.ts](../examples/sdk/08-prompt-templates.ts)
747
+
748
+ ### Session Management
749
+
750
+ Sessions use a tree structure with `id`/`parentId` linking, enabling in-place branching.
751
+
752
+ ```typescript
753
+ import {
754
+ type CreateAgentSessionRuntimeFactory,
755
+ createAgentSession,
756
+ createAgentSessionFromServices,
757
+ createAgentSessionRuntime,
758
+ createAgentSessionServices,
759
+ getAgentDir,
760
+ SessionManager,
761
+ } from "@earendil-works/pi-coding-agent";
762
+
763
+ // In-memory (no persistence)
764
+ const { session } = await createAgentSession({
765
+ sessionManager: SessionManager.inMemory(),
766
+ });
767
+
768
+ // New persistent session
769
+ const { session: persisted } = await createAgentSession({
770
+ sessionManager: SessionManager.create(process.cwd()),
771
+ });
772
+
773
+ // Continue most recent
774
+ const { session: continued, modelFallbackMessage } = await createAgentSession({
775
+ sessionManager: SessionManager.continueRecent(process.cwd()),
776
+ });
777
+ if (modelFallbackMessage) {
778
+ console.log("Note:", modelFallbackMessage);
779
+ }
780
+
781
+ // Open specific file
782
+ const { session: opened } = await createAgentSession({
783
+ sessionManager: SessionManager.open("/path/to/session.jsonl"),
784
+ });
785
+
786
+ // List sessions
787
+ const currentProjectSessions = await SessionManager.list(process.cwd());
788
+ const allSessions = await SessionManager.listAll(process.cwd());
789
+
790
+ // Session replacement API for /new, /resume, /fork, /clone, and import flows.
791
+ const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
792
+ const services = await createAgentSessionServices({ cwd });
793
+ return {
794
+ ...(await createAgentSessionFromServices({
795
+ services,
796
+ sessionManager,
797
+ sessionStartEvent,
798
+ })),
799
+ services,
800
+ diagnostics: services.diagnostics,
801
+ };
802
+ };
803
+
804
+ const runtime = await createAgentSessionRuntime(createRuntime, {
805
+ cwd: process.cwd(),
806
+ agentDir: getAgentDir(),
807
+ sessionManager: SessionManager.create(process.cwd()),
808
+ });
809
+
810
+ // Replace the active session with a fresh one
811
+ await runtime.newSession();
812
+
813
+ // Replace the active session with another saved session
814
+ await runtime.switchSession("/path/to/session.jsonl");
815
+
816
+ // Replace the active session with a fork from a specific user entry
817
+ await runtime.fork("entry-id");
818
+
819
+ // Clone the active path through a specific entry
820
+ await runtime.fork("entry-id", { position: "at" });
821
+ ```
822
+
823
+ **SessionManager tree API:**
824
+
825
+ ```typescript
826
+ const sm = SessionManager.open("/path/to/session.jsonl");
827
+
828
+ // Session listing
829
+ const currentProjectSessions = await SessionManager.list(process.cwd());
830
+ const allSessions = await SessionManager.listAll(process.cwd());
831
+
832
+ // Tree traversal
833
+ const entries = sm.getEntries(); // All entries (excludes header)
834
+ const tree = sm.getTree(); // Full tree structure
835
+ const path = sm.getPath(); // Path from root to current leaf
836
+ const leaf = sm.getLeafEntry(); // Current leaf entry
837
+ const entry = sm.getEntry(id); // Get entry by ID
838
+ const children = sm.getChildren(id); // Direct children of entry
839
+
840
+ // Labels
841
+ const label = sm.getLabel(id); // Get label for entry
842
+ sm.appendLabelChange(id, "checkpoint"); // Set label
843
+
844
+ // Branching
845
+ sm.branch(entryId); // Move leaf to earlier entry
846
+ sm.branchWithSummary(id, "Summary..."); // Branch with context summary
847
+ sm.createBranchedSession(leafId); // Extract path to new file
848
+ ```
849
+
850
+ > See [examples/sdk/11-sessions.ts](../examples/sdk/11-sessions.ts) and [Session Format](session-format.md)
851
+
852
+ ### Settings Management
853
+
854
+ ```typescript
855
+ import { createAgentSession, SettingsManager, SessionManager } from "@earendil-works/pi-coding-agent";
856
+
857
+ // Default: loads from files (global + project merged)
858
+ const { session } = await createAgentSession({
859
+ settingsManager: SettingsManager.create(),
860
+ });
861
+
862
+ // With overrides
863
+ const settingsManager = SettingsManager.create();
864
+ settingsManager.applyOverrides({
865
+ compaction: { enabled: false },
866
+ retry: { enabled: true, maxRetries: 5 },
867
+ });
868
+ const { session } = await createAgentSession({ settingsManager });
869
+
870
+ // In-memory (no file I/O, for testing)
871
+ const { session } = await createAgentSession({
872
+ settingsManager: SettingsManager.inMemory({ compaction: { enabled: false } }),
873
+ sessionManager: SessionManager.inMemory(),
874
+ });
875
+
876
+ // Custom directories
877
+ const { session } = await createAgentSession({
878
+ settingsManager: SettingsManager.create("/custom/cwd", "/custom/agent"),
879
+ });
880
+ ```
881
+
882
+ **Static factories:**
883
+ - `SettingsManager.create(cwd?, agentDir?)` - Load from files
884
+ - `SettingsManager.inMemory(settings?)` - No file I/O
885
+
886
+ **Project-specific settings:**
887
+
888
+ Settings load from two locations and merge:
889
+ 1. Global: `~/.pi/agent/settings.json`
890
+ 2. Project: `<cwd>/.pi/settings.json`
891
+
892
+ Project overrides global. Nested objects merge keys. Setters modify global settings by default.
893
+
894
+ **Persistence and error handling semantics:**
895
+
896
+ - Settings getters/setters are synchronous for in-memory state.
897
+ - Setters enqueue persistence writes asynchronously.
898
+ - Call `await settingsManager.flush()` when you need a durability boundary (for example, before process exit or before asserting file contents in tests).
899
+ - `SettingsManager` does not print settings I/O errors. Use `settingsManager.drainErrors()` and report them in your app layer.
900
+
901
+ > See [examples/sdk/10-settings.ts](../examples/sdk/10-settings.ts)
902
+
903
+ ## ResourceLoader
904
+
905
+ Use `DefaultResourceLoader` to discover extensions, skills, prompts, themes, and context files.
906
+
907
+ ```typescript
908
+ import {
909
+ DefaultResourceLoader,
910
+ getAgentDir,
911
+ } from "@earendil-works/pi-coding-agent";
912
+
913
+ const loader = new DefaultResourceLoader({
914
+ cwd,
915
+ agentDir: getAgentDir(),
916
+ });
917
+ await loader.reload();
918
+
919
+ const extensions = loader.getExtensions();
920
+ const skills = loader.getSkills();
921
+ const prompts = loader.getPrompts();
922
+ const themes = loader.getThemes();
923
+ const contextFiles = loader.getAgentsFiles().agentsFiles;
924
+ ```
925
+
926
+ ## Return Value
927
+
928
+ `createAgentSession()` returns:
929
+
930
+ ```typescript
931
+ interface CreateAgentSessionResult {
932
+ // The session
933
+ session: AgentSession;
934
+
935
+ // Extensions result (for runner setup)
936
+ extensionsResult: LoadExtensionsResult;
937
+
938
+ // Warning if session model couldn't be restored
939
+ modelFallbackMessage?: string;
940
+ }
941
+
942
+ interface LoadExtensionsResult {
943
+ extensions: Extension[];
944
+ errors: Array<{ path: string; error: string }>;
945
+ runtime: ExtensionRuntime;
946
+ }
947
+ ```
948
+
949
+ ## Complete Example
950
+
951
+ ```typescript
952
+ import { getModel } from "@earendil-works/pi-ai";
953
+ import { Type } from "typebox";
954
+ import {
955
+ createAgentSession,
956
+ DefaultResourceLoader,
957
+ defineTool,
958
+ ModelRuntime,
959
+ SessionManager,
960
+ SettingsManager,
961
+ } from "@earendil-works/pi-coding-agent";
962
+
963
+ const modelRuntime = await ModelRuntime.create({
964
+ authPath: "/custom/agent/auth.json",
965
+ modelsPath: "/custom/agent/models.json",
966
+ });
967
+ if (process.env.MY_KEY) {
968
+ await modelRuntime.setRuntimeApiKey("anthropic", process.env.MY_KEY);
969
+ }
970
+
971
+ // Inline tool
972
+ const statusTool = defineTool({
973
+ name: "status",
974
+ label: "Status",
975
+ description: "Get system status",
976
+ parameters: Type.Object({}),
977
+ execute: async () => ({
978
+ content: [{ type: "text", text: `Uptime: ${process.uptime()}s` }],
979
+ details: {},
980
+ }),
981
+ });
982
+
983
+ const model = getModel("anthropic", "claude-opus-4-5");
984
+ if (!model) throw new Error("Model not found");
985
+
986
+ // In-memory settings with overrides
987
+ const settingsManager = SettingsManager.inMemory({
988
+ compaction: { enabled: false },
989
+ retry: { enabled: true, maxRetries: 2 },
990
+ });
991
+
992
+ const loader = new DefaultResourceLoader({
993
+ cwd: process.cwd(),
994
+ agentDir: "/custom/agent",
995
+ settingsManager,
996
+ systemPromptOverride: () => "You are a minimal assistant. Be concise.",
997
+ });
998
+ await loader.reload();
999
+
1000
+ const { session } = await createAgentSession({
1001
+ cwd: process.cwd(),
1002
+ agentDir: "/custom/agent",
1003
+
1004
+ model,
1005
+ thinkingLevel: "off",
1006
+ modelRuntime,
1007
+
1008
+ tools: ["read", "bash", "status"],
1009
+ customTools: [statusTool],
1010
+ resourceLoader: loader,
1011
+
1012
+ sessionManager: SessionManager.inMemory(),
1013
+ settingsManager,
1014
+ });
1015
+
1016
+ session.subscribe((event) => {
1017
+ if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
1018
+ process.stdout.write(event.assistantMessageEvent.delta);
1019
+ }
1020
+ });
1021
+
1022
+ await session.prompt("Get status and list files.");
1023
+ ```
1024
+
1025
+ ## Run Modes
1026
+
1027
+ The SDK exports run mode utilities for building custom interfaces on top of `createAgentSession()`:
1028
+
1029
+ ### InteractiveMode
1030
+
1031
+ Full TUI interactive mode with editor, chat history, and all built-in commands:
1032
+
1033
+ ```typescript
1034
+ import {
1035
+ type CreateAgentSessionRuntimeFactory,
1036
+ createAgentSessionFromServices,
1037
+ createAgentSessionRuntime,
1038
+ createAgentSessionServices,
1039
+ getAgentDir,
1040
+ InteractiveMode,
1041
+ SessionManager,
1042
+ } from "@earendil-works/pi-coding-agent";
1043
+
1044
+ const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
1045
+ const services = await createAgentSessionServices({ cwd });
1046
+ return {
1047
+ ...(await createAgentSessionFromServices({ services, sessionManager, sessionStartEvent })),
1048
+ services,
1049
+ diagnostics: services.diagnostics,
1050
+ };
1051
+ };
1052
+ const runtime = await createAgentSessionRuntime(createRuntime, {
1053
+ cwd: process.cwd(),
1054
+ agentDir: getAgentDir(),
1055
+ sessionManager: SessionManager.create(process.cwd()),
1056
+ });
1057
+
1058
+ const mode = new InteractiveMode(runtime, {
1059
+ migratedProviders: [],
1060
+ modelFallbackMessage: undefined,
1061
+ initialMessage: "Hello",
1062
+ initialImages: [],
1063
+ initialMessages: [],
1064
+ });
1065
+
1066
+ await mode.run();
1067
+ ```
1068
+
1069
+ ### runPrintMode
1070
+
1071
+ Single-shot mode: send prompts, output result, exit:
1072
+
1073
+ ```typescript
1074
+ import {
1075
+ type CreateAgentSessionRuntimeFactory,
1076
+ createAgentSessionFromServices,
1077
+ createAgentSessionRuntime,
1078
+ createAgentSessionServices,
1079
+ getAgentDir,
1080
+ runPrintMode,
1081
+ SessionManager,
1082
+ } from "@earendil-works/pi-coding-agent";
1083
+
1084
+ const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
1085
+ const services = await createAgentSessionServices({ cwd });
1086
+ return {
1087
+ ...(await createAgentSessionFromServices({ services, sessionManager, sessionStartEvent })),
1088
+ services,
1089
+ diagnostics: services.diagnostics,
1090
+ };
1091
+ };
1092
+ const runtime = await createAgentSessionRuntime(createRuntime, {
1093
+ cwd: process.cwd(),
1094
+ agentDir: getAgentDir(),
1095
+ sessionManager: SessionManager.create(process.cwd()),
1096
+ });
1097
+
1098
+ await runPrintMode(runtime, {
1099
+ mode: "text",
1100
+ initialMessage: "Hello",
1101
+ initialImages: [],
1102
+ messages: ["Follow up"],
1103
+ });
1104
+ ```
1105
+
1106
+ ### runRpcMode
1107
+
1108
+ JSON-RPC mode for subprocess integration:
1109
+
1110
+ ```typescript
1111
+ import {
1112
+ type CreateAgentSessionRuntimeFactory,
1113
+ createAgentSessionFromServices,
1114
+ createAgentSessionRuntime,
1115
+ createAgentSessionServices,
1116
+ getAgentDir,
1117
+ runRpcMode,
1118
+ SessionManager,
1119
+ } from "@earendil-works/pi-coding-agent";
1120
+
1121
+ const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
1122
+ const services = await createAgentSessionServices({ cwd });
1123
+ return {
1124
+ ...(await createAgentSessionFromServices({ services, sessionManager, sessionStartEvent })),
1125
+ services,
1126
+ diagnostics: services.diagnostics,
1127
+ };
1128
+ };
1129
+ const runtime = await createAgentSessionRuntime(createRuntime, {
1130
+ cwd: process.cwd(),
1131
+ agentDir: getAgentDir(),
1132
+ sessionManager: SessionManager.create(process.cwd()),
1133
+ });
1134
+
1135
+ await runRpcMode(runtime);
1136
+ ```
1137
+
1138
+ See [RPC documentation](rpc.md) for the JSON protocol.
1139
+
1140
+ ## RPC Mode Alternative
1141
+
1142
+ For subprocess-based integration without building with the SDK, use the CLI directly:
1143
+
1144
+ ```bash
1145
+ pi --mode rpc --no-session
1146
+ ```
1147
+
1148
+ See [RPC documentation](rpc.md) for the JSON protocol.
1149
+
1150
+ The SDK is preferred when:
1151
+ - You want type safety
1152
+ - You're in the same Node.js process
1153
+ - You need direct access to agent state
1154
+ - You want to customize tools/extensions programmatically
1155
+
1156
+ RPC mode is preferred when:
1157
+ - You're integrating from another language
1158
+ - You want process isolation
1159
+ - You're building a language-agnostic client
1160
+
1161
+ ## Exports
1162
+
1163
+ The main entry point exports:
1164
+
1165
+ ```typescript
1166
+ // Factory
1167
+ createAgentSession
1168
+ createAgentSessionRuntime
1169
+ AgentSessionRuntime
1170
+
1171
+ // Auth and Models
1172
+ ModelRuntime // implements pi-ai Models and owns credential storage
1173
+ ModelRegistry // synchronous extension compatibility facade
1174
+ CredentialSynchronizationError
1175
+ resolveCliModel
1176
+ resolveModelScopeWithDiagnostics
1177
+
1178
+ // Resource loading
1179
+ DefaultResourceLoader
1180
+ type ResourceLoader
1181
+ createEventBus
1182
+
1183
+ // Constants and helpers
1184
+ CONFIG_DIR_NAME
1185
+ defineTool
1186
+ getAgentDir
1187
+ getPackageDir
1188
+ getReadmePath
1189
+ getDocsPath
1190
+ getExamplesPath
1191
+
1192
+ // Session management
1193
+ SessionManager
1194
+ SettingsManager
1195
+
1196
+ // Tool factories
1197
+ createCodingTools
1198
+ createReadOnlyTools
1199
+ createReadTool, createBashTool, createEditTool, createWriteTool
1200
+ createGrepTool, createFindTool, createLsTool
1201
+
1202
+ // Types
1203
+ type CreateAgentSessionOptions
1204
+ type CreateAgentSessionResult
1205
+ type ExtensionFactory
1206
+ type InlineExtension
1207
+ type ExtensionAPI
1208
+ type ToolDefinition
1209
+ type Skill
1210
+ type PromptTemplate
1211
+ type Tool
1212
+ ```
1213
+
1214
+ For extension types, see [extensions.md](extensions.md) for the full API.