@schovest/pi-coding-agent 0.7.3

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