@phi-code-admin/phi-code 0.74.3 → 0.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. package/CHANGELOG.md +1186 -4
  2. package/README.md +478 -379
  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 +12 -7
  16. package/dist/cli/args.d.ts.map +1 -1
  17. package/dist/cli/args.js +87 -45
  18. package/dist/cli/args.js.map +1 -1
  19. package/dist/cli/config-selector.d.ts.map +1 -1
  20. package/dist/cli/config-selector.js.map +1 -1
  21. package/dist/cli/file-processor.d.ts.map +1 -1
  22. package/dist/cli/file-processor.js +4 -0
  23. package/dist/cli/file-processor.js.map +1 -1
  24. package/dist/cli/initial-message.d.ts +18 -0
  25. package/dist/cli/initial-message.d.ts.map +1 -0
  26. package/dist/cli/initial-message.js +22 -0
  27. package/dist/cli/initial-message.js.map +1 -0
  28. package/dist/cli/list-models.d.ts.map +1 -1
  29. package/dist/cli/list-models.js +7 -1
  30. package/dist/cli/list-models.js.map +1 -1
  31. package/dist/cli/session-picker.d.ts.map +1 -1
  32. package/dist/cli/session-picker.js +2 -1
  33. package/dist/cli/session-picker.js.map +1 -1
  34. package/dist/cli.d.ts.map +1 -1
  35. package/dist/cli.js +9 -5
  36. package/dist/cli.js.map +1 -1
  37. package/dist/config.d.ts +24 -0
  38. package/dist/config.d.ts.map +1 -1
  39. package/dist/config.js +226 -30
  40. package/dist/config.js.map +1 -1
  41. package/dist/core/agent-session-runtime.d.ts +117 -0
  42. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  43. package/dist/core/agent-session-runtime.js +300 -0
  44. package/dist/core/agent-session-runtime.js.map +1 -0
  45. package/dist/core/agent-session-services.d.ts +86 -0
  46. package/dist/core/agent-session-services.d.ts.map +1 -0
  47. package/dist/core/agent-session-services.js +117 -0
  48. package/dist/core/agent-session-services.js.map +1 -0
  49. package/dist/core/agent-session.d.ts +63 -82
  50. package/dist/core/agent-session.d.ts.map +1 -1
  51. package/dist/core/agent-session.js +674 -628
  52. package/dist/core/agent-session.js.map +1 -1
  53. package/dist/core/api-key-store.d.ts +87 -0
  54. package/dist/core/api-key-store.d.ts.map +1 -0
  55. package/dist/core/api-key-store.js +168 -0
  56. package/dist/core/api-key-store.js.map +1 -0
  57. package/dist/core/auth-guidance.d.ts +5 -0
  58. package/dist/core/auth-guidance.d.ts.map +1 -0
  59. package/dist/core/auth-guidance.js +21 -0
  60. package/dist/core/auth-guidance.js.map +1 -0
  61. package/dist/core/auth-storage.d.ts +12 -5
  62. package/dist/core/auth-storage.d.ts.map +1 -1
  63. package/dist/core/auth-storage.js +34 -8
  64. package/dist/core/auth-storage.js.map +1 -1
  65. package/dist/core/bash-executor.d.ts +0 -15
  66. package/dist/core/bash-executor.d.ts.map +1 -1
  67. package/dist/core/bash-executor.js +28 -129
  68. package/dist/core/bash-executor.js.map +1 -1
  69. package/dist/core/compaction/branch-summarization.d.ts +2 -0
  70. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  71. package/dist/core/compaction/branch-summarization.js +3 -2
  72. package/dist/core/compaction/branch-summarization.js.map +1 -1
  73. package/dist/core/compaction/compaction.d.ts +4 -4
  74. package/dist/core/compaction/compaction.d.ts.map +1 -1
  75. package/dist/core/compaction/compaction.js +32 -27
  76. package/dist/core/compaction/compaction.js.map +1 -1
  77. package/dist/core/compaction/index.d.ts.map +1 -1
  78. package/dist/core/compaction/utils.d.ts.map +1 -1
  79. package/dist/core/compaction/utils.js.map +1 -1
  80. package/dist/core/config-watcher.d.ts +47 -0
  81. package/dist/core/config-watcher.d.ts.map +1 -0
  82. package/dist/core/config-watcher.js +135 -0
  83. package/dist/core/config-watcher.js.map +1 -0
  84. package/dist/core/default-models.json +80 -0
  85. package/dist/core/defaults.d.ts.map +1 -1
  86. package/dist/core/diagnostics.d.ts.map +1 -1
  87. package/dist/core/event-bus.d.ts.map +1 -1
  88. package/dist/core/event-bus.js.map +1 -1
  89. package/dist/core/exec.d.ts.map +1 -1
  90. package/dist/core/exec.js +7 -3
  91. package/dist/core/exec.js.map +1 -1
  92. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  93. package/dist/core/export-html/ansi-to-html.js +1 -1
  94. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  95. package/dist/core/export-html/index.d.ts +7 -4
  96. package/dist/core/export-html/index.d.ts.map +1 -1
  97. package/dist/core/export-html/index.js +15 -13
  98. package/dist/core/export-html/index.js.map +1 -1
  99. package/dist/core/export-html/template.css +112 -17
  100. package/dist/core/export-html/template.html +1 -0
  101. package/dist/core/export-html/template.js +312 -64
  102. package/dist/core/export-html/tool-renderer.d.ts +9 -10
  103. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  104. package/dist/core/export-html/tool-renderer.js +61 -16
  105. package/dist/core/export-html/tool-renderer.js.map +1 -1
  106. package/dist/core/extensions/index.d.ts +5 -4
  107. package/dist/core/extensions/index.d.ts.map +1 -1
  108. package/dist/core/extensions/index.js +2 -2
  109. package/dist/core/extensions/index.js.map +1 -1
  110. package/dist/core/extensions/loader.d.ts +0 -1
  111. package/dist/core/extensions/loader.d.ts.map +1 -1
  112. package/dist/core/extensions/loader.js +98 -18
  113. package/dist/core/extensions/loader.js.map +1 -1
  114. package/dist/core/extensions/runner.d.ts +27 -14
  115. package/dist/core/extensions/runner.d.ts.map +1 -1
  116. package/dist/core/extensions/runner.js +299 -115
  117. package/dist/core/extensions/runner.js.map +1 -1
  118. package/dist/core/extensions/types.d.ts +200 -44
  119. package/dist/core/extensions/types.d.ts.map +1 -1
  120. package/dist/core/extensions/types.js +10 -0
  121. package/dist/core/extensions/types.js.map +1 -1
  122. package/dist/core/extensions/wrapper.d.ts +4 -11
  123. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  124. package/dist/core/extensions/wrapper.js +7 -87
  125. package/dist/core/extensions/wrapper.js.map +1 -1
  126. package/dist/core/footer-data-provider.d.ts +22 -2
  127. package/dist/core/footer-data-provider.d.ts.map +1 -1
  128. package/dist/core/footer-data-provider.js +225 -49
  129. package/dist/core/footer-data-provider.js.map +1 -1
  130. package/dist/core/index.d.ts +5 -2
  131. package/dist/core/index.d.ts.map +1 -1
  132. package/dist/core/index.js +5 -2
  133. package/dist/core/index.js.map +1 -1
  134. package/dist/core/keybindings.d.ts +348 -50
  135. package/dist/core/keybindings.d.ts.map +1 -1
  136. package/dist/core/keybindings.js +276 -132
  137. package/dist/core/keybindings.js.map +1 -1
  138. package/dist/core/messages.d.ts.map +1 -1
  139. package/dist/core/messages.js.map +1 -1
  140. package/dist/core/model-registry.d.ts +41 -5
  141. package/dist/core/model-registry.d.ts.map +1 -1
  142. package/dist/core/model-registry.js +316 -136
  143. package/dist/core/model-registry.js.map +1 -1
  144. package/dist/core/model-resolver.d.ts +6 -0
  145. package/dist/core/model-resolver.d.ts.map +1 -1
  146. package/dist/core/model-resolver.js +70 -37
  147. package/dist/core/model-resolver.js.map +1 -1
  148. package/dist/core/output-guard.d.ts +6 -0
  149. package/dist/core/output-guard.d.ts.map +1 -0
  150. package/dist/core/output-guard.js +59 -0
  151. package/dist/core/output-guard.js.map +1 -0
  152. package/dist/core/package-manager.d.ts +49 -7
  153. package/dist/core/package-manager.d.ts.map +1 -1
  154. package/dist/core/package-manager.js +655 -122
  155. package/dist/core/package-manager.js.map +1 -1
  156. package/dist/core/prompt-templates.d.ts +12 -10
  157. package/dist/core/prompt-templates.d.ts.map +1 -1
  158. package/dist/core/prompt-templates.js +37 -38
  159. package/dist/core/prompt-templates.js.map +1 -1
  160. package/dist/core/provider-display-names.d.ts +2 -0
  161. package/dist/core/provider-display-names.d.ts.map +1 -0
  162. package/dist/core/provider-display-names.js +33 -0
  163. package/dist/core/provider-display-names.js.map +1 -0
  164. package/dist/core/resolve-config-value.d.ts +6 -0
  165. package/dist/core/resolve-config-value.d.ts.map +1 -1
  166. package/dist/core/resolve-config-value.js +75 -8
  167. package/dist/core/resolve-config-value.js.map +1 -1
  168. package/dist/core/resource-loader.d.ts +18 -8
  169. package/dist/core/resource-loader.d.ts.map +1 -1
  170. package/dist/core/resource-loader.js +217 -123
  171. package/dist/core/resource-loader.js.map +1 -1
  172. package/dist/core/sdk.d.ts +25 -8
  173. package/dist/core/sdk.d.ts.map +1 -1
  174. package/dist/core/sdk.js +84 -37
  175. package/dist/core/sdk.js.map +1 -1
  176. package/dist/core/session-cwd.d.ts +19 -0
  177. package/dist/core/session-cwd.d.ts.map +1 -0
  178. package/dist/core/session-cwd.js +38 -0
  179. package/dist/core/session-cwd.js.map +1 -0
  180. package/dist/core/session-manager.d.ts +11 -1
  181. package/dist/core/session-manager.d.ts.map +1 -1
  182. package/dist/core/session-manager.js +42 -27
  183. package/dist/core/session-manager.js.map +1 -1
  184. package/dist/core/settings-manager.d.ts +34 -5
  185. package/dist/core/settings-manager.d.ts.map +1 -1
  186. package/dist/core/settings-manager.js +113 -13
  187. package/dist/core/settings-manager.js.map +1 -1
  188. package/dist/core/skills.d.ts +13 -11
  189. package/dist/core/skills.d.ts.map +1 -1
  190. package/dist/core/skills.js +59 -19
  191. package/dist/core/skills.js.map +1 -1
  192. package/dist/core/slash-commands.d.ts +2 -3
  193. package/dist/core/slash-commands.d.ts.map +1 -1
  194. package/dist/core/slash-commands.js +9 -6
  195. package/dist/core/slash-commands.js.map +1 -1
  196. package/dist/core/source-info.d.ts +18 -0
  197. package/dist/core/source-info.d.ts.map +1 -0
  198. package/dist/core/source-info.js +19 -0
  199. package/dist/core/source-info.js.map +1 -0
  200. package/dist/core/system-prompt.d.ts +3 -3
  201. package/dist/core/system-prompt.d.ts.map +1 -1
  202. package/dist/core/system-prompt.js +16 -55
  203. package/dist/core/system-prompt.js.map +1 -1
  204. package/dist/core/telemetry.d.ts +3 -0
  205. package/dist/core/telemetry.d.ts.map +1 -0
  206. package/dist/core/telemetry.js +9 -0
  207. package/dist/core/telemetry.js.map +1 -0
  208. package/dist/core/timings.d.ts +1 -0
  209. package/dist/core/timings.d.ts.map +1 -1
  210. package/dist/core/timings.js +6 -0
  211. package/dist/core/timings.js.map +1 -1
  212. package/dist/core/tools/bash.d.ts +27 -14
  213. package/dist/core/tools/bash.d.ts.map +1 -1
  214. package/dist/core/tools/bash.js +301 -208
  215. package/dist/core/tools/bash.js.map +1 -1
  216. package/dist/core/tools/edit-diff.d.ts +23 -1
  217. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  218. package/dist/core/tools/edit-diff.js +154 -59
  219. package/dist/core/tools/edit-diff.js.map +1 -1
  220. package/dist/core/tools/edit.d.ts +22 -12
  221. package/dist/core/tools/edit.d.ts.map +1 -1
  222. package/dist/core/tools/edit.js +243 -65
  223. package/dist/core/tools/edit.js.map +1 -1
  224. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  225. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  226. package/dist/core/tools/file-mutation-queue.js +37 -0
  227. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  228. package/dist/core/tools/find.d.ts +10 -14
  229. package/dist/core/tools/find.d.ts.map +1 -1
  230. package/dist/core/tools/find.js +202 -110
  231. package/dist/core/tools/find.js.map +1 -1
  232. package/dist/core/tools/grep.d.ts +14 -22
  233. package/dist/core/tools/grep.d.ts.map +1 -1
  234. package/dist/core/tools/grep.js +100 -35
  235. package/dist/core/tools/grep.js.map +1 -1
  236. package/dist/core/tools/index.d.ts +27 -60
  237. package/dist/core/tools/index.d.ts.map +1 -1
  238. package/dist/core/tools/index.js +96 -45
  239. package/dist/core/tools/index.js.map +1 -1
  240. package/dist/core/tools/ls.d.ts +8 -11
  241. package/dist/core/tools/ls.d.ts.map +1 -1
  242. package/dist/core/tools/ls.js +66 -15
  243. package/dist/core/tools/ls.js.map +1 -1
  244. package/dist/core/tools/output-accumulator.d.ts +50 -0
  245. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  246. package/dist/core/tools/output-accumulator.js +178 -0
  247. package/dist/core/tools/output-accumulator.js.map +1 -0
  248. package/dist/core/tools/path-utils.d.ts.map +1 -1
  249. package/dist/core/tools/path-utils.js +1 -1
  250. package/dist/core/tools/path-utils.js.map +1 -1
  251. package/dist/core/tools/read.d.ts +9 -13
  252. package/dist/core/tools/read.d.ts.map +1 -1
  253. package/dist/core/tools/read.js +175 -52
  254. package/dist/core/tools/read.js.map +1 -1
  255. package/dist/core/tools/render-utils.d.ts +21 -0
  256. package/dist/core/tools/render-utils.d.ts.map +1 -0
  257. package/dist/core/tools/render-utils.js +49 -0
  258. package/dist/core/tools/render-utils.js.map +1 -0
  259. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  260. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  261. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  262. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  263. package/dist/core/tools/truncate.d.ts.map +1 -1
  264. package/dist/core/tools/truncate.js.map +1 -1
  265. package/dist/core/tools/write.d.ts +8 -11
  266. package/dist/core/tools/write.d.ts.map +1 -1
  267. package/dist/core/tools/write.js +167 -32
  268. package/dist/core/tools/write.js.map +1 -1
  269. package/dist/index.d.ts +12 -9
  270. package/dist/index.d.ts.map +1 -1
  271. package/dist/index.js +12 -10
  272. package/dist/index.js.map +1 -1
  273. package/dist/main.d.ts +5 -1
  274. package/dist/main.d.ts.map +1 -1
  275. package/dist/main.js +326 -404
  276. package/dist/main.js.map +1 -1
  277. package/dist/migrations.d.ts +2 -2
  278. package/dist/migrations.d.ts.map +1 -1
  279. package/dist/migrations.js +24 -4
  280. package/dist/migrations.js.map +1 -1
  281. package/dist/modes/index.d.ts.map +1 -1
  282. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  283. package/dist/modes/interactive/components/armin.js +10 -6
  284. package/dist/modes/interactive/components/armin.js.map +1 -1
  285. package/dist/modes/interactive/components/assistant-message.d.ts +5 -1
  286. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  287. package/dist/modes/interactive/components/assistant-message.js +32 -3
  288. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  289. package/dist/modes/interactive/components/bash-execution.d.ts +0 -1
  290. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  291. package/dist/modes/interactive/components/bash-execution.js +31 -12
  292. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  293. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  294. package/dist/modes/interactive/components/bordered-loader.js +7 -1
  295. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  296. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  297. package/dist/modes/interactive/components/branch-summary-message.js +5 -3
  298. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  299. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  300. package/dist/modes/interactive/components/compaction-summary-message.js +5 -3
  301. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  302. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  303. package/dist/modes/interactive/components/config-selector.js +49 -16
  304. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  305. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  306. package/dist/modes/interactive/components/countdown-timer.js +5 -0
  307. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  308. package/dist/modes/interactive/components/custom-editor.d.ts +3 -3
  309. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  310. package/dist/modes/interactive/components/custom-editor.js +14 -7
  311. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  312. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  313. package/dist/modes/interactive/components/custom-message.js +6 -1
  314. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  315. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  316. package/dist/modes/interactive/components/daxnuts.js +8 -6
  317. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  318. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  319. package/dist/modes/interactive/components/diff.js.map +1 -1
  320. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  321. package/dist/modes/interactive/components/dynamic-border.js +1 -0
  322. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  323. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  324. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  325. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  326. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  327. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  328. package/dist/modes/interactive/components/extension-editor.js +16 -10
  329. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  330. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  331. package/dist/modes/interactive/components/extension-input.js +13 -7
  332. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  333. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  334. package/dist/modes/interactive/components/extension-selector.js +18 -11
  335. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  336. package/dist/modes/interactive/components/footer.d.ts +1 -0
  337. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  338. package/dist/modes/interactive/components/footer.js +7 -2
  339. package/dist/modes/interactive/components/footer.js.map +1 -1
  340. package/dist/modes/interactive/components/index.d.ts +1 -1
  341. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  342. package/dist/modes/interactive/components/index.js +1 -1
  343. package/dist/modes/interactive/components/index.js.map +1 -1
  344. package/dist/modes/interactive/components/keybinding-hints.d.ts +8 -36
  345. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  346. package/dist/modes/interactive/components/keybinding-hints.js +23 -48
  347. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  348. package/dist/modes/interactive/components/login-dialog.d.ts +5 -1
  349. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  350. package/dist/modes/interactive/components/login-dialog.js +35 -14
  351. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  352. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/model-selector.js +41 -22
  354. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  355. package/dist/modes/interactive/components/oauth-selector.d.ts +18 -6
  356. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  357. package/dist/modes/interactive/components/oauth-selector.js +104 -31
  358. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  359. package/dist/modes/interactive/components/scoped-models-selector.d.ts +5 -12
  360. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  361. package/dist/modes/interactive/components/scoped-models-selector.js +61 -42
  362. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  363. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  364. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  365. package/dist/modes/interactive/components/session-selector.d.ts +2 -1
  366. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  367. package/dist/modes/interactive/components/session-selector.js +109 -73
  368. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  369. package/dist/modes/interactive/components/settings-selector.d.ts +9 -0
  370. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  371. package/dist/modes/interactive/components/settings-selector.js +84 -4
  372. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  373. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  374. package/dist/modes/interactive/components/show-images-selector.js +6 -1
  375. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  376. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  377. package/dist/modes/interactive/components/skill-invocation-message.js +5 -3
  378. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  379. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  380. package/dist/modes/interactive/components/theme-selector.js +7 -1
  381. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  382. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  383. package/dist/modes/interactive/components/thinking-selector.js +6 -1
  384. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  385. package/dist/modes/interactive/components/tool-execution.d.ts +20 -34
  386. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  387. package/dist/modes/interactive/components/tool-execution.js +158 -636
  388. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  389. package/dist/modes/interactive/components/tree-selector.d.ts +21 -2
  390. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  391. package/dist/modes/interactive/components/tree-selector.js +224 -52
  392. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  393. package/dist/modes/interactive/components/user-message-selector.d.ts +2 -2
  394. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  395. package/dist/modes/interactive/components/user-message-selector.js +20 -16
  396. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  397. package/dist/modes/interactive/components/user-message.d.ts +1 -0
  398. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  399. package/dist/modes/interactive/components/user-message.js +8 -6
  400. package/dist/modes/interactive/components/user-message.js.map +1 -1
  401. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  402. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  403. package/dist/modes/interactive/interactive-mode.d.ts +67 -39
  404. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  405. package/dist/modes/interactive/interactive-mode.js +1556 -680
  406. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  407. package/dist/modes/interactive/theme/dark.json +1 -1
  408. package/dist/modes/interactive/theme/light.json +1 -1
  409. package/dist/modes/interactive/theme/theme.d.ts +3 -0
  410. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  411. package/dist/modes/interactive/theme/theme.js +101 -72
  412. package/dist/modes/interactive/theme/theme.js.map +1 -1
  413. package/dist/modes/print-mode.d.ts +2 -2
  414. package/dist/modes/print-mode.d.ts.map +1 -1
  415. package/dist/modes/print-mode.js +107 -77
  416. package/dist/modes/print-mode.js.map +1 -1
  417. package/dist/modes/rpc/jsonl.d.ts +17 -0
  418. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  419. package/dist/modes/rpc/jsonl.js +49 -0
  420. package/dist/modes/rpc/jsonl.js.map +1 -0
  421. package/dist/modes/rpc/rpc-client.d.ts +8 -1
  422. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  423. package/dist/modes/rpc/rpc-client.js +22 -16
  424. package/dist/modes/rpc/rpc-client.js.map +1 -1
  425. package/dist/modes/rpc/rpc-mode.d.ts +2 -2
  426. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  427. package/dist/modes/rpc/rpc-mode.js +184 -94
  428. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  429. package/dist/modes/rpc/rpc-types.d.ts +14 -4
  430. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  431. package/dist/modes/rpc/rpc-types.js.map +1 -1
  432. package/dist/package-manager-cli.d.ts +4 -0
  433. package/dist/package-manager-cli.d.ts.map +1 -0
  434. package/dist/package-manager-cli.js +460 -0
  435. package/dist/package-manager-cli.js.map +1 -0
  436. package/dist/utils/changelog.d.ts.map +1 -1
  437. package/dist/utils/changelog.js.map +1 -1
  438. package/dist/utils/child-process.d.ts +12 -0
  439. package/dist/utils/child-process.d.ts.map +1 -0
  440. package/dist/utils/child-process.js +86 -0
  441. package/dist/utils/child-process.js.map +1 -0
  442. package/dist/utils/clipboard-image.d.ts.map +1 -1
  443. package/dist/utils/clipboard-image.js +94 -11
  444. package/dist/utils/clipboard-image.js.map +1 -1
  445. package/dist/utils/clipboard-native.d.ts +1 -0
  446. package/dist/utils/clipboard-native.d.ts.map +1 -1
  447. package/dist/utils/clipboard-native.js.map +1 -1
  448. package/dist/utils/clipboard.d.ts +1 -1
  449. package/dist/utils/clipboard.d.ts.map +1 -1
  450. package/dist/utils/clipboard.js +96 -46
  451. package/dist/utils/clipboard.js.map +1 -1
  452. package/dist/utils/exif-orientation.d.ts +5 -0
  453. package/dist/utils/exif-orientation.d.ts.map +1 -0
  454. package/dist/utils/exif-orientation.js +158 -0
  455. package/dist/utils/exif-orientation.js.map +1 -0
  456. package/dist/utils/frontmatter.d.ts.map +1 -1
  457. package/dist/utils/frontmatter.js.map +1 -1
  458. package/dist/utils/fs-watch.d.ts +5 -0
  459. package/dist/utils/fs-watch.d.ts.map +1 -0
  460. package/dist/utils/fs-watch.js +25 -0
  461. package/dist/utils/fs-watch.js.map +1 -0
  462. package/dist/utils/git.d.ts.map +1 -1
  463. package/dist/utils/git.js.map +1 -1
  464. package/dist/utils/image-convert.d.ts.map +1 -1
  465. package/dist/utils/image-convert.js +5 -1
  466. package/dist/utils/image-convert.js.map +1 -1
  467. package/dist/utils/image-resize.d.ts +5 -5
  468. package/dist/utils/image-resize.d.ts.map +1 -1
  469. package/dist/utils/image-resize.js +51 -95
  470. package/dist/utils/image-resize.js.map +1 -1
  471. package/dist/utils/mime.d.ts.map +1 -1
  472. package/dist/utils/mime.js.map +1 -1
  473. package/dist/utils/paths.d.ts +16 -0
  474. package/dist/utils/paths.d.ts.map +1 -0
  475. package/dist/utils/paths.js +50 -0
  476. package/dist/utils/paths.js.map +1 -0
  477. package/dist/utils/photon.d.ts.map +1 -1
  478. package/dist/utils/photon.js.map +1 -1
  479. package/dist/utils/pi-user-agent.d.ts +2 -0
  480. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  481. package/dist/utils/pi-user-agent.js +5 -0
  482. package/dist/utils/pi-user-agent.js.map +1 -0
  483. package/dist/utils/shell.d.ts +10 -6
  484. package/dist/utils/shell.d.ts.map +1 -1
  485. package/dist/utils/shell.js +29 -25
  486. package/dist/utils/shell.js.map +1 -1
  487. package/dist/utils/sleep.d.ts.map +1 -1
  488. package/dist/utils/sleep.js.map +1 -1
  489. package/dist/utils/tools-manager.d.ts.map +1 -1
  490. package/dist/utils/tools-manager.js +11 -6
  491. package/dist/utils/tools-manager.js.map +1 -1
  492. package/dist/utils/version-check.d.ts +14 -0
  493. package/dist/utils/version-check.d.ts.map +1 -0
  494. package/dist/utils/version-check.js +77 -0
  495. package/dist/utils/version-check.js.map +1 -0
  496. package/docs/compaction.md +394 -0
  497. package/docs/custom-provider.md +646 -0
  498. package/docs/development.md +71 -0
  499. package/docs/docs.json +148 -0
  500. package/docs/extensions.md +2596 -0
  501. package/docs/images/doom-extension.png +0 -0
  502. package/docs/images/exy.png +0 -0
  503. package/docs/images/interactive-mode.png +0 -0
  504. package/docs/images/tree-view.png +0 -0
  505. package/docs/index.md +70 -0
  506. package/docs/json.md +82 -0
  507. package/docs/keybindings.md +197 -0
  508. package/docs/models.md +474 -0
  509. package/docs/packages.md +223 -0
  510. package/docs/prompt-templates.md +88 -0
  511. package/docs/providers.md +243 -0
  512. package/docs/quickstart.md +142 -0
  513. package/docs/rpc.md +1407 -0
  514. package/docs/sdk.md +1149 -0
  515. package/docs/session-format.md +412 -0
  516. package/docs/sessions.md +137 -0
  517. package/docs/settings.md +279 -0
  518. package/docs/shell-aliases.md +13 -0
  519. package/docs/skills.md +232 -0
  520. package/docs/terminal-setup.md +106 -0
  521. package/docs/termux.md +127 -0
  522. package/docs/themes.md +295 -0
  523. package/docs/tmux.md +61 -0
  524. package/docs/tui.md +918 -0
  525. package/docs/usage.md +277 -0
  526. package/docs/windows.md +17 -0
  527. package/examples/README.md +25 -0
  528. package/examples/extensions/README.md +208 -0
  529. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  530. package/examples/extensions/bash-spawn-hook.ts +30 -0
  531. package/examples/extensions/bookmark.ts +50 -0
  532. package/examples/extensions/border-status-editor.ts +150 -0
  533. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  534. package/examples/extensions/claude-rules.ts +86 -0
  535. package/examples/extensions/commands.ts +72 -0
  536. package/examples/extensions/confirm-destructive.ts +59 -0
  537. package/examples/extensions/custom-compaction.ts +127 -0
  538. package/examples/extensions/custom-footer.ts +64 -0
  539. package/examples/extensions/custom-header.ts +73 -0
  540. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  541. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  542. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  543. package/examples/extensions/custom-provider-gitlab-duo/index.ts +349 -0
  544. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  545. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  546. package/examples/extensions/dirty-repo-guard.ts +56 -0
  547. package/examples/extensions/doom-overlay/README.md +46 -0
  548. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  549. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  550. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  551. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  552. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  553. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  554. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  555. package/examples/extensions/doom-overlay/index.ts +74 -0
  556. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  557. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  558. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  559. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  560. package/examples/extensions/dynamic-resources/index.ts +15 -0
  561. package/examples/extensions/dynamic-tools.ts +74 -0
  562. package/examples/extensions/event-bus.ts +43 -0
  563. package/examples/extensions/file-trigger.ts +41 -0
  564. package/examples/extensions/git-checkpoint.ts +53 -0
  565. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  566. package/examples/extensions/handoff.ts +191 -0
  567. package/examples/extensions/hello.ts +26 -0
  568. package/examples/extensions/hidden-thinking-label.ts +53 -0
  569. package/examples/extensions/inline-bash.ts +94 -0
  570. package/examples/extensions/input-transform.ts +43 -0
  571. package/examples/extensions/interactive-shell.ts +196 -0
  572. package/examples/extensions/mac-system-theme.ts +47 -0
  573. package/examples/extensions/message-renderer.ts +59 -0
  574. package/examples/extensions/minimal-mode.ts +426 -0
  575. package/examples/extensions/modal-editor.ts +85 -0
  576. package/examples/extensions/model-status.ts +31 -0
  577. package/examples/extensions/notify.ts +55 -0
  578. package/examples/extensions/overlay-qa-tests.ts +1348 -0
  579. package/examples/extensions/overlay-test.ts +150 -0
  580. package/examples/extensions/permission-gate.ts +34 -0
  581. package/examples/extensions/pirate.ts +47 -0
  582. package/examples/extensions/plan-mode/README.md +65 -0
  583. package/examples/extensions/plan-mode/index.ts +340 -0
  584. package/examples/extensions/plan-mode/utils.ts +168 -0
  585. package/examples/extensions/preset.ts +430 -0
  586. package/examples/extensions/prompt-customizer.ts +97 -0
  587. package/examples/extensions/protected-paths.ts +30 -0
  588. package/examples/extensions/provider-payload.ts +18 -0
  589. package/examples/extensions/qna.ts +122 -0
  590. package/examples/extensions/question.ts +264 -0
  591. package/examples/extensions/questionnaire.ts +427 -0
  592. package/examples/extensions/rainbow-editor.ts +88 -0
  593. package/examples/extensions/reload-runtime.ts +37 -0
  594. package/examples/extensions/rpc-demo.ts +118 -0
  595. package/examples/extensions/sandbox/index.ts +321 -0
  596. package/examples/extensions/sandbox/package-lock.json +92 -0
  597. package/examples/extensions/sandbox/package.json +19 -0
  598. package/examples/extensions/send-user-message.ts +97 -0
  599. package/examples/extensions/session-name.ts +27 -0
  600. package/examples/extensions/shutdown-command.ts +63 -0
  601. package/examples/extensions/snake.ts +343 -0
  602. package/examples/extensions/space-invaders.ts +560 -0
  603. package/examples/extensions/ssh.ts +220 -0
  604. package/examples/extensions/status-line.ts +32 -0
  605. package/examples/extensions/structured-output.ts +65 -0
  606. package/examples/extensions/subagent/README.md +172 -0
  607. package/examples/extensions/subagent/agents/planner.md +37 -0
  608. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  609. package/examples/extensions/subagent/agents/scout.md +50 -0
  610. package/examples/extensions/subagent/agents/worker.md +24 -0
  611. package/examples/extensions/subagent/agents.ts +126 -0
  612. package/examples/extensions/subagent/index.ts +987 -0
  613. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  614. package/examples/extensions/subagent/prompts/implement.md +10 -0
  615. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  616. package/examples/extensions/summarize.ts +206 -0
  617. package/examples/extensions/system-prompt-header.ts +17 -0
  618. package/examples/extensions/tic-tac-toe.ts +1008 -0
  619. package/examples/extensions/timed-confirm.ts +70 -0
  620. package/examples/extensions/titlebar-spinner.ts +58 -0
  621. package/examples/extensions/todo.ts +297 -0
  622. package/examples/extensions/tool-override.ts +144 -0
  623. package/examples/extensions/tools.ts +141 -0
  624. package/examples/extensions/trigger-compact.ts +50 -0
  625. package/examples/extensions/truncated-tool.ts +195 -0
  626. package/examples/extensions/widget-placement.ts +9 -0
  627. package/examples/extensions/with-deps/index.ts +32 -0
  628. package/examples/extensions/with-deps/package-lock.json +31 -0
  629. package/examples/extensions/with-deps/package.json +22 -0
  630. package/examples/extensions/working-indicator.ts +123 -0
  631. package/examples/extensions/working-message-test.ts +25 -0
  632. package/examples/rpc-extension-ui.ts +632 -0
  633. package/examples/sdk/01-minimal.ts +22 -0
  634. package/examples/sdk/02-custom-model.ts +49 -0
  635. package/examples/sdk/03-custom-prompt.ts +62 -0
  636. package/examples/sdk/04-skills.ts +55 -0
  637. package/examples/sdk/05-tools.ts +44 -0
  638. package/examples/sdk/06-extensions.ts +90 -0
  639. package/examples/sdk/07-context-files.ts +42 -0
  640. package/examples/sdk/08-prompt-templates.ts +51 -0
  641. package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
  642. package/examples/sdk/10-settings.ts +53 -0
  643. package/examples/sdk/11-sessions.ts +48 -0
  644. package/examples/sdk/12-full-control.ts +73 -0
  645. package/examples/sdk/13-session-runtime.ts +67 -0
  646. package/examples/sdk/README.md +147 -0
  647. package/extensions/phi/init.ts +15 -1
  648. package/extensions/phi/keys.ts +186 -0
  649. package/extensions/phi/providers/alibaba.ts +126 -0
  650. package/extensions/phi/providers/opencode-go.ts +204 -0
  651. package/extensions/phi/setup.ts +692 -0
  652. package/extensions/phi/smart-router.ts +8 -0
  653. package/package.json +17 -12
  654. package/scripts/copy-assets.sh +0 -0
  655. package/scripts/migrate-sessions.sh +0 -0
@@ -7,10 +7,10 @@
7
7
  * - Register commands, keyboard shortcuts, and CLI flags
8
8
  * - Interact with the user via UI primitives
9
9
  */
10
- import type { AgentMessage, AgentToolResult, AgentToolUpdateCallback, ThinkingLevel } from "phi-code-agent";
10
+ import type { AgentMessage, AgentToolResult, AgentToolUpdateCallback, ThinkingLevel, ToolExecutionMode } from "phi-code-agent";
11
11
  import type { Api, AssistantMessageEvent, AssistantMessageEventStream, Context, ImageContent, Model, OAuthCredentials, OAuthLoginCallbacks, SimpleStreamOptions, TextContent, ToolResultMessage } from "phi-code-ai";
12
- import type { AutocompleteItem, Component, EditorComponent, EditorTheme, KeyId, OverlayHandle, OverlayOptions, TUI } from "phi-code-tui";
13
- import type { Static, TSchema } from "@sinclair/typebox";
12
+ import type { AutocompleteItem, AutocompleteProvider, Component, EditorComponent, EditorTheme, KeyId, OverlayHandle, OverlayOptions, TUI } from "phi-code-tui";
13
+ import type { Static, TSchema } from "typebox";
14
14
  import type { Theme } from "../../modes/interactive/theme/theme.js";
15
15
  import type { BashResult } from "../bash-executor.js";
16
16
  import type { CompactionPreparation, CompactionResult } from "../compaction/index.js";
@@ -22,12 +22,15 @@ import type { CustomMessage } from "../messages.js";
22
22
  import type { ModelRegistry } from "../model-registry.js";
23
23
  import type { BranchSummaryEntry, CompactionEntry, ReadonlySessionManager, SessionEntry, SessionManager } from "../session-manager.js";
24
24
  import type { SlashCommandInfo } from "../slash-commands.js";
25
+ import type { SourceInfo } from "../source-info.js";
26
+ import type { BuildSystemPromptOptions } from "../system-prompt.js";
25
27
  import type { BashOperations } from "../tools/bash.js";
26
28
  import type { EditToolDetails } from "../tools/edit.js";
27
29
  import type { BashToolDetails, BashToolInput, EditToolInput, FindToolDetails, FindToolInput, GrepToolDetails, GrepToolInput, LsToolDetails, LsToolInput, ReadToolDetails, ReadToolInput, WriteToolInput } from "../tools/index.js";
28
30
  export type { ExecOptions, ExecResult } from "../exec.js";
29
- export type { AgentToolResult, AgentToolUpdateCallback };
30
- export type { AppAction, KeybindingsManager } from "../keybindings.js";
31
+ export type { BuildSystemPromptOptions } from "../system-prompt.js";
32
+ export type { AgentToolResult, AgentToolUpdateCallback, ToolExecutionMode };
33
+ export type { AppKeybinding, KeybindingsManager } from "../keybindings.js";
31
34
  /** Options for extension UI dialogs. */
32
35
  export interface ExtensionUIDialogOptions {
33
36
  /** AbortSignal to programmatically dismiss the dialog. */
@@ -47,6 +50,16 @@ export type TerminalInputHandler = (data: string) => {
47
50
  consume?: boolean;
48
51
  data?: string;
49
52
  } | undefined;
53
+ /** Working indicator configuration for the interactive streaming loader. */
54
+ export interface WorkingIndicatorOptions {
55
+ /** Animation frames. Use an empty array to hide the indicator entirely. Custom frames are rendered verbatim. */
56
+ frames?: string[];
57
+ /** Frame interval in milliseconds for animated indicators. */
58
+ intervalMs?: number;
59
+ }
60
+ /** Wrap the current autocomplete provider with additional behavior. */
61
+ export type AutocompleteProviderFactory = (current: AutocompleteProvider) => AutocompleteProvider;
62
+ export type EditorFactory = (tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent;
50
63
  /**
51
64
  * UI context for extensions to request interactive UI.
52
65
  * Each mode (interactive, RPC, print) provides its own implementation.
@@ -66,6 +79,19 @@ export interface ExtensionUIContext {
66
79
  setStatus(key: string, text: string | undefined): void;
67
80
  /** Set the working/loading message shown during streaming. Call with no argument to restore default. */
68
81
  setWorkingMessage(message?: string): void;
82
+ /** Show or hide the built-in interactive working loader row during streaming. */
83
+ setWorkingVisible(visible: boolean): void;
84
+ /**
85
+ * Configure the interactive working indicator shown during streaming.
86
+ *
87
+ * - Omit the argument to restore the default animated spinner.
88
+ * - Use `frames: ["●"]` for a static indicator.
89
+ * - Use `frames: []` to hide the indicator entirely.
90
+ * - Custom frames are rendered as provided, so extensions must add their own colors.
91
+ */
92
+ setWorkingIndicator(options?: WorkingIndicatorOptions): void;
93
+ /** Set the label shown for hidden thinking blocks. Call with no argument to restore default. */
94
+ setHiddenThinkingLabel(label?: string): void;
69
95
  /** Set a widget to display above or below the editor. Accepts string array or component factory. */
70
96
  setWidget(key: string, content: string[] | undefined, options?: ExtensionWidgetOptions): void;
71
97
  setWidget(key: string, content: ((tui: TUI, theme: Theme) => Component & {
@@ -106,6 +132,8 @@ export interface ExtensionUIContext {
106
132
  getEditorText(): string;
107
133
  /** Show a multi-line editor for text editing. */
108
134
  editor(title: string, prefill?: string): Promise<string | undefined>;
135
+ /** Stack additional autocomplete behavior on top of the built-in provider. */
136
+ addAutocompleteProvider(factory: AutocompleteProviderFactory): void;
109
137
  /**
110
138
  * Set a custom editor component via factory function.
111
139
  * Pass undefined to restore the default editor.
@@ -115,12 +143,12 @@ export interface ExtensionUIContext {
115
143
  * - `keybindings`: KeybindingsManager for app-level keybindings
116
144
  *
117
145
  * For full app keybinding support (escape, ctrl+d, model switching, etc.),
118
- * extend `CustomEditor` from `phi-code` and call
146
+ * extend `CustomEditor` from `@phi-code-admin/phi-code` and call
119
147
  * `super.handleInput(data)` for keys you don't handle.
120
148
  *
121
149
  * @example
122
150
  * ```ts
123
- * import { CustomEditor } from "phi-code";
151
+ * import { CustomEditor } from "@phi-code-admin/phi-code";
124
152
  *
125
153
  * class VimEditor extends CustomEditor {
126
154
  * private mode: "normal" | "insert" = "insert";
@@ -139,7 +167,9 @@ export interface ExtensionUIContext {
139
167
  * );
140
168
  * ```
141
169
  */
142
- setEditorComponent(factory: ((tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent) | undefined): void;
170
+ setEditorComponent(factory: EditorFactory | undefined): void;
171
+ /** Get the currently configured custom editor factory, or undefined when using the default editor. */
172
+ getEditorComponent(): EditorFactory | undefined;
143
173
  /** Get the current theme for styling. */
144
174
  readonly theme: Theme;
145
175
  /** Get all available themes with their names and file paths. */
@@ -189,6 +219,8 @@ export interface ExtensionContext {
189
219
  model: Model<any> | undefined;
190
220
  /** Whether the agent is idle (not streaming) */
191
221
  isIdle(): boolean;
222
+ /** The current abort signal, or undefined when the agent is not streaming. */
223
+ signal: AbortSignal | undefined;
192
224
  /** Abort the current agent operation */
193
225
  abort(): void;
194
226
  /** Whether there are queued messages waiting */
@@ -213,11 +245,15 @@ export interface ExtensionCommandContext extends ExtensionContext {
213
245
  newSession(options?: {
214
246
  parentSession?: string;
215
247
  setup?: (sessionManager: SessionManager) => Promise<void>;
248
+ withSession?: (ctx: ReplacedSessionContext) => Promise<void>;
216
249
  }): Promise<{
217
250
  cancelled: boolean;
218
251
  }>;
219
252
  /** Fork from a specific entry, creating a new session file. */
220
- fork(entryId: string): Promise<{
253
+ fork(entryId: string, options?: {
254
+ position?: "before" | "at";
255
+ withSession?: (ctx: ReplacedSessionContext) => Promise<void>;
256
+ }): Promise<{
221
257
  cancelled: boolean;
222
258
  }>;
223
259
  /** Navigate to a different point in the session tree. */
@@ -230,12 +266,28 @@ export interface ExtensionCommandContext extends ExtensionContext {
230
266
  cancelled: boolean;
231
267
  }>;
232
268
  /** Switch to a different session file. */
233
- switchSession(sessionPath: string): Promise<{
269
+ switchSession(sessionPath: string, options?: {
270
+ withSession?: (ctx: ReplacedSessionContext) => Promise<void>;
271
+ }): Promise<{
234
272
  cancelled: boolean;
235
273
  }>;
236
274
  /** Reload extensions, skills, prompts, and themes. */
237
275
  reload(): Promise<void>;
238
276
  }
277
+ /**
278
+ * Fresh command-capable context bound to the replacement session after a session switch.
279
+ *
280
+ * This is passed to `withSession()` callbacks on `newSession()`, `fork()`, and `switchSession()`.
281
+ */
282
+ export interface ReplacedSessionContext extends ExtensionCommandContext {
283
+ sendMessage<T = unknown>(message: Pick<CustomMessage<T>, "customType" | "content" | "display" | "details">, options?: {
284
+ triggerTurn?: boolean;
285
+ deliverAs?: "steer" | "followUp" | "nextTurn";
286
+ }): Promise<void>;
287
+ sendUserMessage(content: string | (TextContent | ImageContent)[], options?: {
288
+ deliverAs?: "steer" | "followUp";
289
+ }): Promise<void>;
290
+ }
239
291
  /** Rendering options for tool results */
240
292
  export interface ToolRenderResultOptions {
241
293
  /** Whether the result view is expanded */
@@ -243,29 +295,77 @@ export interface ToolRenderResultOptions {
243
295
  /** Whether this is a partial/streaming result */
244
296
  isPartial: boolean;
245
297
  }
298
+ /** Context passed to tool renderers. */
299
+ export interface ToolRenderContext<TState = any, TArgs = any> {
300
+ /** Current tool call arguments. Shared across call/result renders for the same tool call. */
301
+ args: TArgs;
302
+ /** Unique id for this tool execution. Stable across call/result renders for the same tool call. */
303
+ toolCallId: string;
304
+ /** Invalidate just this tool execution component for redraw. */
305
+ invalidate: () => void;
306
+ /** Previously returned component for this render slot, if any. */
307
+ lastComponent: Component | undefined;
308
+ /** Shared renderer state for this tool row. Initialized by tool-execution.ts. */
309
+ state: TState;
310
+ /** Working directory for this tool execution. */
311
+ cwd: string;
312
+ /** Whether the tool execution has started. */
313
+ executionStarted: boolean;
314
+ /** Whether the tool call arguments are complete. */
315
+ argsComplete: boolean;
316
+ /** Whether the tool result is partial/streaming. */
317
+ isPartial: boolean;
318
+ /** Whether the result view is expanded. */
319
+ expanded: boolean;
320
+ /** Whether inline images are currently shown in the TUI. */
321
+ showImages: boolean;
322
+ /** Whether the current result is an error. */
323
+ isError: boolean;
324
+ }
246
325
  /**
247
326
  * Tool definition for registerTool().
248
327
  */
249
- export interface ToolDefinition<TParams extends TSchema = TSchema, TDetails = unknown> {
328
+ export interface ToolDefinition<TParams extends TSchema = TSchema, TDetails = unknown, TState = any> {
250
329
  /** Tool name (used in LLM tool calls) */
251
330
  name: string;
252
331
  /** Human-readable label for UI */
253
332
  label: string;
254
333
  /** Description for LLM */
255
334
  description: string;
256
- /** Optional one-line snippet for the Available tools section in the default system prompt. Falls back to description when omitted. */
335
+ /** Optional one-line snippet for the Available tools section in the default system prompt. Custom tools are omitted from that section when this is not provided. */
257
336
  promptSnippet?: string;
258
337
  /** Optional guideline bullets appended to the default system prompt Guidelines section when this tool is active. */
259
338
  promptGuidelines?: string[];
260
339
  /** Parameter schema (TypeBox) */
261
340
  parameters: TParams;
341
+ /** Controls whether ToolExecutionComponent renders the standard colored shell or the tool renders its own framing. */
342
+ renderShell?: "default" | "self";
343
+ /** Optional compatibility shim to prepare raw tool call arguments before schema validation. Must return an object conforming to TParams. */
344
+ prepareArguments?: (args: unknown) => Static<TParams>;
345
+ /**
346
+ * Per-tool execution mode override.
347
+ * - "sequential": this tool must execute one at a time with other tool calls.
348
+ * - "parallel": this tool can execute concurrently with other tool calls.
349
+ *
350
+ * If omitted, the default execution mode applies.
351
+ */
352
+ executionMode?: ToolExecutionMode;
262
353
  /** Execute the tool. */
263
354
  execute(toolCallId: string, params: Static<TParams>, signal: AbortSignal | undefined, onUpdate: AgentToolUpdateCallback<TDetails> | undefined, ctx: ExtensionContext): Promise<AgentToolResult<TDetails>>;
264
355
  /** Custom rendering for tool call display */
265
- renderCall?: (args: Static<TParams>, theme: Theme) => Component | undefined;
356
+ renderCall?: (args: Static<TParams>, theme: Theme, context: ToolRenderContext<TState, Static<TParams>>) => Component;
266
357
  /** Custom rendering for tool result display */
267
- renderResult?: (result: AgentToolResult<TDetails>, options: ToolRenderResultOptions, theme: Theme) => Component | undefined;
358
+ renderResult?: (result: AgentToolResult<TDetails>, options: ToolRenderResultOptions, theme: Theme, context: ToolRenderContext<TState, Static<TParams>>) => Component;
268
359
  }
360
+ type AnyToolDefinition = ToolDefinition<any, any, any>;
361
+ /**
362
+ * Preserve parameter inference for standalone tool definitions.
363
+ *
364
+ * Use this when assigning a tool to a variable or passing it through arrays such
365
+ * as `customTools`, where contextual typing would otherwise widen params to
366
+ * `unknown`.
367
+ */
368
+ export declare function defineTool<TParams extends TSchema, TDetails = unknown, TState = any>(tool: ToolDefinition<TParams, TDetails, TState>): ToolDefinition<TParams, TDetails, TState> & AnyToolDefinition;
269
369
  /** Fired after session_start to allow extensions to provide additional resource paths. */
270
370
  export interface ResourcesDiscoverEvent {
271
371
  type: "resources_discover";
@@ -278,9 +378,13 @@ export interface ResourcesDiscoverResult {
278
378
  promptPaths?: string[];
279
379
  themePaths?: string[];
280
380
  }
281
- /** Fired on initial session load */
381
+ /** Fired when a session is started, loaded, or reloaded */
282
382
  export interface SessionStartEvent {
283
383
  type: "session_start";
384
+ /** Why this session start happened. */
385
+ reason: "startup" | "reload" | "new" | "resume" | "fork";
386
+ /** Previously active session file. Present for "new", "resume", and "fork". */
387
+ previousSessionFile?: string;
284
388
  }
285
389
  /** Fired before switching to another session (can be cancelled) */
286
390
  export interface SessionBeforeSwitchEvent {
@@ -288,21 +392,11 @@ export interface SessionBeforeSwitchEvent {
288
392
  reason: "new" | "resume";
289
393
  targetSessionFile?: string;
290
394
  }
291
- /** Fired after switching to another session */
292
- export interface SessionSwitchEvent {
293
- type: "session_switch";
294
- reason: "new" | "resume";
295
- previousSessionFile: string | undefined;
296
- }
297
395
  /** Fired before forking a session (can be cancelled) */
298
396
  export interface SessionBeforeForkEvent {
299
397
  type: "session_before_fork";
300
398
  entryId: string;
301
- }
302
- /** Fired after forking a session */
303
- export interface SessionForkEvent {
304
- type: "session_fork";
305
- previousSessionFile: string | undefined;
399
+ position: "before" | "at";
306
400
  }
307
401
  /** Fired before context compaction (can be cancelled or customized) */
308
402
  export interface SessionBeforeCompactEvent {
@@ -318,9 +412,12 @@ export interface SessionCompactEvent {
318
412
  compactionEntry: CompactionEntry;
319
413
  fromExtension: boolean;
320
414
  }
321
- /** Fired on process exit */
415
+ /** Fired before an extension runtime is torn down due to quit, reload, or session replacement. */
322
416
  export interface SessionShutdownEvent {
323
417
  type: "session_shutdown";
418
+ reason: "quit" | "reload" | "new" | "resume" | "fork";
419
+ /** Destination session file when shutting down due to session replacement. */
420
+ targetSessionFile?: string;
324
421
  }
325
422
  /** Preparation data for tree navigation */
326
423
  export interface TreePreparation {
@@ -350,18 +447,34 @@ export interface SessionTreeEvent {
350
447
  summaryEntry?: BranchSummaryEntry;
351
448
  fromExtension?: boolean;
352
449
  }
353
- export type SessionEvent = SessionStartEvent | SessionBeforeSwitchEvent | SessionSwitchEvent | SessionBeforeForkEvent | SessionForkEvent | SessionBeforeCompactEvent | SessionCompactEvent | SessionShutdownEvent | SessionBeforeTreeEvent | SessionTreeEvent;
450
+ export type SessionEvent = SessionStartEvent | SessionBeforeSwitchEvent | SessionBeforeForkEvent | SessionBeforeCompactEvent | SessionCompactEvent | SessionShutdownEvent | SessionBeforeTreeEvent | SessionTreeEvent;
354
451
  /** Fired before each LLM call. Can modify messages. */
355
452
  export interface ContextEvent {
356
453
  type: "context";
357
454
  messages: AgentMessage[];
358
455
  }
456
+ /** Fired before a provider request is sent. Can replace the payload. */
457
+ export interface BeforeProviderRequestEvent {
458
+ type: "before_provider_request";
459
+ payload: unknown;
460
+ }
461
+ /** Fired after a provider response is received and before the response stream is consumed. */
462
+ export interface AfterProviderResponseEvent {
463
+ type: "after_provider_response";
464
+ status: number;
465
+ headers: Record<string, string>;
466
+ }
359
467
  /** Fired after user submits prompt but before agent loop. */
360
468
  export interface BeforeAgentStartEvent {
361
469
  type: "before_agent_start";
470
+ /** The raw user prompt text (after expansion). */
362
471
  prompt: string;
472
+ /** Images attached to the user prompt, if any. */
363
473
  images?: ImageContent[];
474
+ /** The fully assembled system prompt string. */
364
475
  systemPrompt: string;
476
+ /** Structured options used to build the system prompt. Extensions can inspect this to understand what Pi loaded without re-discovering resources. */
477
+ systemPromptOptions: BuildSystemPromptOptions;
365
478
  }
366
479
  /** Fired when an agent loop starts */
367
480
  export interface AgentStartEvent {
@@ -432,6 +545,12 @@ export interface ModelSelectEvent {
432
545
  previousModel: Model<any> | undefined;
433
546
  source: ModelSelectSource;
434
547
  }
548
+ /** Fired when a new thinking level is selected */
549
+ export interface ThinkingLevelSelectEvent {
550
+ type: "thinking_level_select";
551
+ level: ThinkingLevel;
552
+ previousLevel: ThinkingLevel;
553
+ }
435
554
  /** Fired when user executes a bash command via ! or !! prefix */
436
555
  export interface UserBashEvent {
437
556
  type: "user_bash";
@@ -500,7 +619,12 @@ export interface CustomToolCallEvent extends ToolCallEventBase {
500
619
  toolName: string;
501
620
  input: Record<string, unknown>;
502
621
  }
503
- /** Fired before a tool executes. Can block. */
622
+ /**
623
+ * Fired before a tool executes. Can block.
624
+ *
625
+ * `event.input` is mutable. Mutate it in place to patch tool arguments before execution.
626
+ * Later `tool_call` handlers see earlier mutations. No re-validation is performed after mutation.
627
+ */
504
628
  export type ToolCallEvent = BashToolCallEvent | ReadToolCallEvent | EditToolCallEvent | WriteToolCallEvent | GrepToolCallEvent | FindToolCallEvent | LsToolCallEvent | CustomToolCallEvent;
505
629
  interface ToolResultEventBase {
506
630
  type: "tool_result";
@@ -582,11 +706,13 @@ export declare function isToolCallEventType<TName extends string, TInput extends
582
706
  input: TInput;
583
707
  };
584
708
  /** Union of all event types */
585
- export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
709
+ export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
586
710
  export interface ContextEventResult {
587
711
  messages?: AgentMessage[];
588
712
  }
713
+ export type BeforeProviderRequestEventResult = unknown;
589
714
  export interface ToolCallEventResult {
715
+ /** Block tool execution. To modify arguments, mutate `event.input` in place instead. */
590
716
  block?: boolean;
591
717
  reason?: string;
592
718
  }
@@ -602,6 +728,10 @@ export interface ToolResultEventResult {
602
728
  details?: unknown;
603
729
  isError?: boolean;
604
730
  }
731
+ export interface MessageEndEventResult {
732
+ /** Replace the finalized message. The replacement must keep the original message role. */
733
+ message?: AgentMessage;
734
+ }
605
735
  export interface BeforeAgentStartEventResult {
606
736
  message?: Pick<CustomMessage, "customType" | "content" | "display" | "details">;
607
737
  /** Replace the system prompt for this turn. If multiple extensions return this, they are chained. */
@@ -637,10 +767,14 @@ export interface MessageRenderOptions {
637
767
  export type MessageRenderer<T = unknown> = (message: CustomMessage<T>, options: MessageRenderOptions, theme: Theme) => Component | undefined;
638
768
  export interface RegisteredCommand {
639
769
  name: string;
770
+ sourceInfo: SourceInfo;
640
771
  description?: string;
641
- getArgumentCompletions?: (argumentPrefix: string) => AutocompleteItem[] | null;
772
+ getArgumentCompletions?: (argumentPrefix: string) => AutocompleteItem[] | null | Promise<AutocompleteItem[] | null>;
642
773
  handler: (args: string, ctx: ExtensionCommandContext) => Promise<void>;
643
774
  }
775
+ export interface ResolvedCommand extends RegisteredCommand {
776
+ invocationName: string;
777
+ }
644
778
  /** Handler function type for events */
645
779
  export type ExtensionHandler<E, R = undefined> = (event: E, ctx: ExtensionContext) => Promise<R | void> | R | void;
646
780
  /**
@@ -650,15 +784,15 @@ export interface ExtensionAPI {
650
784
  on(event: "resources_discover", handler: ExtensionHandler<ResourcesDiscoverEvent, ResourcesDiscoverResult>): void;
651
785
  on(event: "session_start", handler: ExtensionHandler<SessionStartEvent>): void;
652
786
  on(event: "session_before_switch", handler: ExtensionHandler<SessionBeforeSwitchEvent, SessionBeforeSwitchResult>): void;
653
- on(event: "session_switch", handler: ExtensionHandler<SessionSwitchEvent>): void;
654
787
  on(event: "session_before_fork", handler: ExtensionHandler<SessionBeforeForkEvent, SessionBeforeForkResult>): void;
655
- on(event: "session_fork", handler: ExtensionHandler<SessionForkEvent>): void;
656
788
  on(event: "session_before_compact", handler: ExtensionHandler<SessionBeforeCompactEvent, SessionBeforeCompactResult>): void;
657
789
  on(event: "session_compact", handler: ExtensionHandler<SessionCompactEvent>): void;
658
790
  on(event: "session_shutdown", handler: ExtensionHandler<SessionShutdownEvent>): void;
659
791
  on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): void;
660
792
  on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): void;
661
793
  on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): void;
794
+ on(event: "before_provider_request", handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>): void;
795
+ on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>): void;
662
796
  on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): void;
663
797
  on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): void;
664
798
  on(event: "agent_end", handler: ExtensionHandler<AgentEndEvent>): void;
@@ -666,19 +800,20 @@ export interface ExtensionAPI {
666
800
  on(event: "turn_end", handler: ExtensionHandler<TurnEndEvent>): void;
667
801
  on(event: "message_start", handler: ExtensionHandler<MessageStartEvent>): void;
668
802
  on(event: "message_update", handler: ExtensionHandler<MessageUpdateEvent>): void;
669
- on(event: "message_end", handler: ExtensionHandler<MessageEndEvent>): void;
803
+ on(event: "message_end", handler: ExtensionHandler<MessageEndEvent, MessageEndEventResult>): void;
670
804
  on(event: "tool_execution_start", handler: ExtensionHandler<ToolExecutionStartEvent>): void;
671
805
  on(event: "tool_execution_update", handler: ExtensionHandler<ToolExecutionUpdateEvent>): void;
672
806
  on(event: "tool_execution_end", handler: ExtensionHandler<ToolExecutionEndEvent>): void;
673
807
  on(event: "model_select", handler: ExtensionHandler<ModelSelectEvent>): void;
808
+ on(event: "thinking_level_select", handler: ExtensionHandler<ThinkingLevelSelectEvent>): void;
674
809
  on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
675
810
  on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): void;
676
811
  on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
677
812
  on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): void;
678
813
  /** Register a tool that the LLM can call. */
679
- registerTool<TParams extends TSchema = TSchema, TDetails = unknown>(tool: ToolDefinition<TParams, TDetails>): void;
814
+ registerTool<TParams extends TSchema = TSchema, TDetails = unknown, TState = any>(tool: ToolDefinition<TParams, TDetails, TState>): void;
680
815
  /** Register a custom command. */
681
- registerCommand(name: string, options: Omit<RegisteredCommand, "name">): void;
816
+ registerCommand(name: string, options: Omit<RegisteredCommand, "name" | "sourceInfo">): void;
682
817
  /** Register a keyboard shortcut. */
683
818
  registerShortcut(shortcut: KeyId, options: {
684
819
  description?: string;
@@ -718,7 +853,7 @@ export interface ExtensionAPI {
718
853
  exec(command: string, args: string[], options?: ExecOptions): Promise<ExecResult>;
719
854
  /** Get the list of currently active tool names. */
720
855
  getActiveTools(): string[];
721
- /** Get all configured tools with name and description. */
856
+ /** Get all configured tools with parameter schema and source metadata. */
722
857
  getAllTools(): ToolInfo[];
723
858
  /** Set the active tools by name. */
724
859
  setActiveTools(toolNames: string[]): void;
@@ -802,6 +937,8 @@ export interface ExtensionAPI {
802
937
  }
803
938
  /** Configuration for registering a provider via pi.registerProvider(). */
804
939
  export interface ProviderConfig {
940
+ /** Display name for the provider in UI. */
941
+ name?: string;
805
942
  /** Base URL for the API endpoint. Required when defining models. */
806
943
  baseUrl?: string;
807
944
  /** API key or environment variable name. Required when defining models (unless oauth provided). */
@@ -838,8 +975,12 @@ export interface ProviderModelConfig {
838
975
  name: string;
839
976
  /** API type override for this model. */
840
977
  api?: Api;
978
+ /** API endpoint URL override for this model. */
979
+ baseUrl?: string;
841
980
  /** Whether the model supports extended thinking. */
842
981
  reasoning: boolean;
982
+ /** Maps pi thinking levels to provider/model-specific values; null marks a level unsupported. */
983
+ thinkingLevelMap?: Model<Api>["thinkingLevelMap"];
843
984
  /** Supported input types. */
844
985
  input: ("text" | "image")[];
845
986
  /** Cost per token (for tracking, can be 0). */
@@ -862,7 +1003,7 @@ export interface ProviderModelConfig {
862
1003
  export type ExtensionFactory = (pi: ExtensionAPI) => void | Promise<void>;
863
1004
  export interface RegisteredTool {
864
1005
  definition: ToolDefinition;
865
- extensionPath: string;
1006
+ sourceInfo: SourceInfo;
866
1007
  }
867
1008
  export interface ExtensionFlag {
868
1009
  name: string;
@@ -889,8 +1030,10 @@ export type AppendEntryHandler = <T = unknown>(customType: string, data?: T) =>
889
1030
  export type SetSessionNameHandler = (name: string) => void;
890
1031
  export type GetSessionNameHandler = () => string | undefined;
891
1032
  export type GetActiveToolsHandler = () => string[];
892
- /** Tool info with name, description, and parameter schema */
893
- export type ToolInfo = Pick<ToolDefinition, "name" | "description" | "parameters">;
1033
+ /** Tool info with name, description, parameter schema, and source metadata */
1034
+ export type ToolInfo = Pick<ToolDefinition, "name" | "description" | "parameters"> & {
1035
+ sourceInfo: SourceInfo;
1036
+ };
894
1037
  export type GetAllToolsHandler = () => ToolInfo[];
895
1038
  export type GetCommandsHandler = () => SlashCommandInfo[];
896
1039
  export type SetActiveToolsHandler = (toolNames: string[]) => void;
@@ -909,15 +1052,20 @@ export interface ExtensionRuntimeState {
909
1052
  pendingProviderRegistrations: Array<{
910
1053
  name: string;
911
1054
  config: ProviderConfig;
1055
+ extensionPath: string;
912
1056
  }>;
1057
+ /** Throws when this extension instance is stale after runtime replacement. */
1058
+ assertActive: () => void;
1059
+ /** Marks this extension instance as stale after runtime replacement or reload. */
1060
+ invalidate: (message?: string) => void;
913
1061
  /**
914
1062
  * Register or unregister a provider.
915
1063
  *
916
1064
  * Before bindCore(): queues registrations / removes from queue.
917
1065
  * After bindCore(): calls ModelRegistry directly for immediate effect.
918
1066
  */
919
- registerProvider: (name: string, config: ProviderConfig) => void;
920
- unregisterProvider: (name: string) => void;
1067
+ registerProvider: (name: string, config: ProviderConfig, extensionPath?: string) => void;
1068
+ unregisterProvider: (name: string, extensionPath?: string) => void;
921
1069
  }
922
1070
  /**
923
1071
  * Action implementations for pi.* API methods.
@@ -946,6 +1094,7 @@ export interface ExtensionActions {
946
1094
  export interface ExtensionContextActions {
947
1095
  getModel: () => Model<any> | undefined;
948
1096
  isIdle: () => boolean;
1097
+ getSignal: () => AbortSignal | undefined;
949
1098
  abort: () => void;
950
1099
  hasPendingMessages: () => boolean;
951
1100
  shutdown: () => void;
@@ -962,10 +1111,14 @@ export interface ExtensionCommandContextActions {
962
1111
  newSession: (options?: {
963
1112
  parentSession?: string;
964
1113
  setup?: (sessionManager: SessionManager) => Promise<void>;
1114
+ withSession?: (ctx: ReplacedSessionContext) => Promise<void>;
965
1115
  }) => Promise<{
966
1116
  cancelled: boolean;
967
1117
  }>;
968
- fork: (entryId: string) => Promise<{
1118
+ fork: (entryId: string, options?: {
1119
+ position?: "before" | "at";
1120
+ withSession?: (ctx: ReplacedSessionContext) => Promise<void>;
1121
+ }) => Promise<{
969
1122
  cancelled: boolean;
970
1123
  }>;
971
1124
  navigateTree: (targetId: string, options?: {
@@ -976,7 +1129,9 @@ export interface ExtensionCommandContextActions {
976
1129
  }) => Promise<{
977
1130
  cancelled: boolean;
978
1131
  }>;
979
- switchSession: (sessionPath: string) => Promise<{
1132
+ switchSession: (sessionPath: string, options?: {
1133
+ withSession?: (ctx: ReplacedSessionContext) => Promise<void>;
1134
+ }) => Promise<{
980
1135
  cancelled: boolean;
981
1136
  }>;
982
1137
  reload: () => Promise<void>;
@@ -991,6 +1146,7 @@ export interface ExtensionRuntime extends ExtensionRuntimeState, ExtensionAction
991
1146
  export interface Extension {
992
1147
  path: string;
993
1148
  resolvedPath: string;
1149
+ sourceInfo: SourceInfo;
994
1150
  handlers: Map<string, HandlerFn[]>;
995
1151
  tools: Map<string, RegisteredTool>;
996
1152
  messageRenderers: Map<string, MessageRenderer>;