@phi-code-admin/phi-code 0.56.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 (459) hide show
  1. package/CHANGELOG.md +2994 -0
  2. package/README.md +567 -0
  3. package/dist/cli/args.d.ts +48 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +299 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/config-selector.d.ts +14 -0
  8. package/dist/cli/config-selector.d.ts.map +1 -0
  9. package/dist/cli/config-selector.js +31 -0
  10. package/dist/cli/config-selector.js.map +1 -0
  11. package/dist/cli/file-processor.d.ts +15 -0
  12. package/dist/cli/file-processor.d.ts.map +1 -0
  13. package/dist/cli/file-processor.js +79 -0
  14. package/dist/cli/file-processor.js.map +1 -0
  15. package/dist/cli/list-models.d.ts +9 -0
  16. package/dist/cli/list-models.d.ts.map +1 -0
  17. package/dist/cli/list-models.js +92 -0
  18. package/dist/cli/list-models.js.map +1 -0
  19. package/dist/cli/session-picker.d.ts +9 -0
  20. package/dist/cli/session-picker.d.ts.map +1 -0
  21. package/dist/cli/session-picker.js +34 -0
  22. package/dist/cli/session-picker.js.map +1 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +16 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/config.d.ts +68 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +203 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/core/agent-session.d.ts +614 -0
  32. package/dist/core/agent-session.d.ts.map +1 -0
  33. package/dist/core/agent-session.js +2475 -0
  34. package/dist/core/agent-session.js.map +1 -0
  35. package/dist/core/auth-storage.d.ts +134 -0
  36. package/dist/core/auth-storage.d.ts.map +1 -0
  37. package/dist/core/auth-storage.js +415 -0
  38. package/dist/core/auth-storage.js.map +1 -0
  39. package/dist/core/bash-executor.d.ts +47 -0
  40. package/dist/core/bash-executor.d.ts.map +1 -0
  41. package/dist/core/bash-executor.js +212 -0
  42. package/dist/core/bash-executor.js.map +1 -0
  43. package/dist/core/compaction/branch-summarization.d.ts +86 -0
  44. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  45. package/dist/core/compaction/branch-summarization.js +242 -0
  46. package/dist/core/compaction/branch-summarization.js.map +1 -0
  47. package/dist/core/compaction/compaction.d.ts +121 -0
  48. package/dist/core/compaction/compaction.d.ts.map +1 -0
  49. package/dist/core/compaction/compaction.js +610 -0
  50. package/dist/core/compaction/compaction.js.map +1 -0
  51. package/dist/core/compaction/index.d.ts +7 -0
  52. package/dist/core/compaction/index.d.ts.map +1 -0
  53. package/dist/core/compaction/index.js +7 -0
  54. package/dist/core/compaction/index.js.map +1 -0
  55. package/dist/core/compaction/utils.d.ts +38 -0
  56. package/dist/core/compaction/utils.d.ts.map +1 -0
  57. package/dist/core/compaction/utils.js +153 -0
  58. package/dist/core/compaction/utils.js.map +1 -0
  59. package/dist/core/defaults.d.ts +3 -0
  60. package/dist/core/defaults.d.ts.map +1 -0
  61. package/dist/core/defaults.js +2 -0
  62. package/dist/core/defaults.js.map +1 -0
  63. package/dist/core/diagnostics.d.ts +15 -0
  64. package/dist/core/diagnostics.d.ts.map +1 -0
  65. package/dist/core/diagnostics.js +2 -0
  66. package/dist/core/diagnostics.js.map +1 -0
  67. package/dist/core/event-bus.d.ts +9 -0
  68. package/dist/core/event-bus.d.ts.map +1 -0
  69. package/dist/core/event-bus.js +25 -0
  70. package/dist/core/event-bus.js.map +1 -0
  71. package/dist/core/exec.d.ts +29 -0
  72. package/dist/core/exec.d.ts.map +1 -0
  73. package/dist/core/exec.js +71 -0
  74. package/dist/core/exec.js.map +1 -0
  75. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  76. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  77. package/dist/core/export-html/ansi-to-html.js +249 -0
  78. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  79. package/dist/core/export-html/index.d.ts +34 -0
  80. package/dist/core/export-html/index.d.ts.map +1 -0
  81. package/dist/core/export-html/index.js +222 -0
  82. package/dist/core/export-html/index.js.map +1 -0
  83. package/dist/core/export-html/tool-renderer.d.ts +35 -0
  84. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  85. package/dist/core/export-html/tool-renderer.js +63 -0
  86. package/dist/core/export-html/tool-renderer.js.map +1 -0
  87. package/dist/core/extensions/index.d.ts +11 -0
  88. package/dist/core/extensions/index.d.ts.map +1 -0
  89. package/dist/core/extensions/index.js +9 -0
  90. package/dist/core/extensions/index.js.map +1 -0
  91. package/dist/core/extensions/loader.d.ts +25 -0
  92. package/dist/core/extensions/loader.d.ts.map +1 -0
  93. package/dist/core/extensions/loader.js +426 -0
  94. package/dist/core/extensions/loader.js.map +1 -0
  95. package/dist/core/extensions/runner.d.ts +146 -0
  96. package/dist/core/extensions/runner.d.ts.map +1 -0
  97. package/dist/core/extensions/runner.js +640 -0
  98. package/dist/core/extensions/runner.js.map +1 -0
  99. package/dist/core/extensions/types.d.ts +1017 -0
  100. package/dist/core/extensions/types.d.ts.map +1 -0
  101. package/dist/core/extensions/types.js +35 -0
  102. package/dist/core/extensions/types.js.map +1 -0
  103. package/dist/core/extensions/wrapper.d.ts +27 -0
  104. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  105. package/dist/core/extensions/wrapper.js +102 -0
  106. package/dist/core/extensions/wrapper.js.map +1 -0
  107. package/dist/core/footer-data-provider.d.ts +32 -0
  108. package/dist/core/footer-data-provider.d.ts.map +1 -0
  109. package/dist/core/footer-data-provider.js +134 -0
  110. package/dist/core/footer-data-provider.js.map +1 -0
  111. package/dist/core/index.d.ts +9 -0
  112. package/dist/core/index.d.ts.map +1 -0
  113. package/dist/core/index.js +9 -0
  114. package/dist/core/index.js.map +1 -0
  115. package/dist/core/keybindings.d.ts +55 -0
  116. package/dist/core/keybindings.d.ts.map +1 -0
  117. package/dist/core/keybindings.js +151 -0
  118. package/dist/core/keybindings.js.map +1 -0
  119. package/dist/core/messages.d.ts +77 -0
  120. package/dist/core/messages.d.ts.map +1 -0
  121. package/dist/core/messages.js +123 -0
  122. package/dist/core/messages.js.map +1 -0
  123. package/dist/core/model-registry.d.ts +114 -0
  124. package/dist/core/model-registry.d.ts.map +1 -0
  125. package/dist/core/model-registry.js +548 -0
  126. package/dist/core/model-registry.js.map +1 -0
  127. package/dist/core/model-resolver.d.ts +104 -0
  128. package/dist/core/model-resolver.d.ts.map +1 -0
  129. package/dist/core/model-resolver.js +462 -0
  130. package/dist/core/model-resolver.js.map +1 -0
  131. package/dist/core/package-manager.d.ts +156 -0
  132. package/dist/core/package-manager.d.ts.map +1 -0
  133. package/dist/core/package-manager.js +1442 -0
  134. package/dist/core/package-manager.js.map +1 -0
  135. package/dist/core/prompt-templates.d.ts +50 -0
  136. package/dist/core/prompt-templates.d.ts.map +1 -0
  137. package/dist/core/prompt-templates.js +251 -0
  138. package/dist/core/prompt-templates.js.map +1 -0
  139. package/dist/core/resolve-config-value.d.ts +17 -0
  140. package/dist/core/resolve-config-value.d.ts.map +1 -0
  141. package/dist/core/resolve-config-value.js +59 -0
  142. package/dist/core/resolve-config-value.js.map +1 -0
  143. package/dist/core/resource-loader.d.ts +184 -0
  144. package/dist/core/resource-loader.d.ts.map +1 -0
  145. package/dist/core/resource-loader.js +633 -0
  146. package/dist/core/resource-loader.js.map +1 -0
  147. package/dist/core/sdk.d.ts +90 -0
  148. package/dist/core/sdk.d.ts.map +1 -0
  149. package/dist/core/sdk.js +235 -0
  150. package/dist/core/sdk.js.map +1 -0
  151. package/dist/core/session-manager.d.ts +323 -0
  152. package/dist/core/session-manager.d.ts.map +1 -0
  153. package/dist/core/session-manager.js +1094 -0
  154. package/dist/core/session-manager.js.map +1 -0
  155. package/dist/core/settings-manager.d.ts +232 -0
  156. package/dist/core/settings-manager.d.ts.map +1 -0
  157. package/dist/core/settings-manager.js +682 -0
  158. package/dist/core/settings-manager.js.map +1 -0
  159. package/dist/core/skills.d.ts +58 -0
  160. package/dist/core/skills.d.ts.map +1 -0
  161. package/dist/core/skills.js +364 -0
  162. package/dist/core/skills.js.map +1 -0
  163. package/dist/core/slash-commands.d.ts +15 -0
  164. package/dist/core/slash-commands.d.ts.map +1 -0
  165. package/dist/core/slash-commands.js +22 -0
  166. package/dist/core/slash-commands.js.map +1 -0
  167. package/dist/core/system-prompt.d.ts +28 -0
  168. package/dist/core/system-prompt.d.ts.map +1 -0
  169. package/dist/core/system-prompt.js +159 -0
  170. package/dist/core/system-prompt.js.map +1 -0
  171. package/dist/core/timings.d.ts +7 -0
  172. package/dist/core/timings.d.ts.map +1 -0
  173. package/dist/core/timings.js +25 -0
  174. package/dist/core/timings.js.map +1 -0
  175. package/dist/core/tools/bash.d.ts +55 -0
  176. package/dist/core/tools/bash.d.ts.map +1 -0
  177. package/dist/core/tools/bash.js +242 -0
  178. package/dist/core/tools/bash.js.map +1 -0
  179. package/dist/core/tools/edit-diff.d.ts +63 -0
  180. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  181. package/dist/core/tools/edit-diff.js +243 -0
  182. package/dist/core/tools/edit-diff.js.map +1 -0
  183. package/dist/core/tools/edit.d.ts +39 -0
  184. package/dist/core/tools/edit.d.ts.map +1 -0
  185. package/dist/core/tools/edit.js +146 -0
  186. package/dist/core/tools/edit.js.map +1 -0
  187. package/dist/core/tools/find.d.ts +39 -0
  188. package/dist/core/tools/find.d.ts.map +1 -0
  189. package/dist/core/tools/find.js +206 -0
  190. package/dist/core/tools/find.js.map +1 -0
  191. package/dist/core/tools/grep.d.ts +45 -0
  192. package/dist/core/tools/grep.d.ts.map +1 -0
  193. package/dist/core/tools/grep.js +239 -0
  194. package/dist/core/tools/grep.js.map +1 -0
  195. package/dist/core/tools/index.d.ts +73 -0
  196. package/dist/core/tools/index.d.ts.map +1 -0
  197. package/dist/core/tools/index.js +61 -0
  198. package/dist/core/tools/index.js.map +1 -0
  199. package/dist/core/tools/ls.d.ts +40 -0
  200. package/dist/core/tools/ls.d.ts.map +1 -0
  201. package/dist/core/tools/ls.js +118 -0
  202. package/dist/core/tools/ls.js.map +1 -0
  203. package/dist/core/tools/path-utils.d.ts +8 -0
  204. package/dist/core/tools/path-utils.d.ts.map +1 -0
  205. package/dist/core/tools/path-utils.js +81 -0
  206. package/dist/core/tools/path-utils.js.map +1 -0
  207. package/dist/core/tools/read.d.ts +39 -0
  208. package/dist/core/tools/read.d.ts.map +1 -0
  209. package/dist/core/tools/read.js +166 -0
  210. package/dist/core/tools/read.js.map +1 -0
  211. package/dist/core/tools/truncate.d.ts +70 -0
  212. package/dist/core/tools/truncate.d.ts.map +1 -0
  213. package/dist/core/tools/truncate.js +205 -0
  214. package/dist/core/tools/truncate.js.map +1 -0
  215. package/dist/core/tools/write.d.ts +29 -0
  216. package/dist/core/tools/write.d.ts.map +1 -0
  217. package/dist/core/tools/write.js +78 -0
  218. package/dist/core/tools/write.js.map +1 -0
  219. package/dist/index.d.ts +27 -0
  220. package/dist/index.d.ts.map +1 -0
  221. package/dist/index.js +42 -0
  222. package/dist/index.js.map +1 -0
  223. package/dist/main.d.ts +8 -0
  224. package/dist/main.d.ts.map +1 -0
  225. package/dist/main.js +661 -0
  226. package/dist/main.js.map +1 -0
  227. package/dist/migrations.d.ts +33 -0
  228. package/dist/migrations.d.ts.map +1 -0
  229. package/dist/migrations.js +261 -0
  230. package/dist/migrations.js.map +1 -0
  231. package/dist/modes/index.d.ts +9 -0
  232. package/dist/modes/index.d.ts.map +1 -0
  233. package/dist/modes/index.js +8 -0
  234. package/dist/modes/index.js.map +1 -0
  235. package/dist/modes/interactive/components/armin.d.ts +34 -0
  236. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  237. package/dist/modes/interactive/components/armin.js +329 -0
  238. package/dist/modes/interactive/components/armin.js.map +1 -0
  239. package/dist/modes/interactive/components/assistant-message.d.ts +16 -0
  240. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  241. package/dist/modes/interactive/components/assistant-message.js +92 -0
  242. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  243. package/dist/modes/interactive/components/bash-execution.d.ts +35 -0
  244. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  245. package/dist/modes/interactive/components/bash-execution.js +156 -0
  246. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  247. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  248. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  249. package/dist/modes/interactive/components/bordered-loader.js +48 -0
  250. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  251. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  252. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  253. package/dist/modes/interactive/components/branch-summary-message.js +42 -0
  254. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  255. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  256. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  257. package/dist/modes/interactive/components/compaction-summary-message.js +43 -0
  258. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  259. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  260. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  261. package/dist/modes/interactive/components/config-selector.js +470 -0
  262. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  263. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  264. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  265. package/dist/modes/interactive/components/countdown-timer.js +28 -0
  266. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  267. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  268. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  269. package/dist/modes/interactive/components/custom-editor.js +63 -0
  270. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  271. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  272. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  273. package/dist/modes/interactive/components/custom-message.js +74 -0
  274. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  275. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  276. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  277. package/dist/modes/interactive/components/daxnuts.js +138 -0
  278. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  279. package/dist/modes/interactive/components/diff.d.ts +12 -0
  280. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  281. package/dist/modes/interactive/components/diff.js +133 -0
  282. package/dist/modes/interactive/components/diff.js.map +1 -0
  283. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  284. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  285. package/dist/modes/interactive/components/dynamic-border.js +20 -0
  286. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  287. package/dist/modes/interactive/components/extension-editor.d.ts +20 -0
  288. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  289. package/dist/modes/interactive/components/extension-editor.js +105 -0
  290. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  291. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  292. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  293. package/dist/modes/interactive/components/extension-input.js +55 -0
  294. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  295. package/dist/modes/interactive/components/extension-selector.d.ts +24 -0
  296. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  297. package/dist/modes/interactive/components/extension-selector.js +71 -0
  298. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  299. package/dist/modes/interactive/components/footer.d.ts +26 -0
  300. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  301. package/dist/modes/interactive/components/footer.js +196 -0
  302. package/dist/modes/interactive/components/footer.js.map +1 -0
  303. package/dist/modes/interactive/components/index.d.ts +32 -0
  304. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  305. package/dist/modes/interactive/components/index.js +33 -0
  306. package/dist/modes/interactive/components/index.js.map +1 -0
  307. package/dist/modes/interactive/components/keybinding-hints.d.ts +41 -0
  308. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  309. package/dist/modes/interactive/components/keybinding-hints.js +61 -0
  310. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  311. package/dist/modes/interactive/components/login-dialog.d.ts +42 -0
  312. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  313. package/dist/modes/interactive/components/login-dialog.js +139 -0
  314. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  315. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  316. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  317. package/dist/modes/interactive/components/model-selector.js +259 -0
  318. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  319. package/dist/modes/interactive/components/oauth-selector.d.ts +19 -0
  320. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  321. package/dist/modes/interactive/components/oauth-selector.js +92 -0
  322. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  323. package/dist/modes/interactive/components/scoped-models-selector.d.ts +49 -0
  324. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  325. package/dist/modes/interactive/components/scoped-models-selector.js +271 -0
  326. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  327. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  328. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  329. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  330. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  331. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  332. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  333. package/dist/modes/interactive/components/session-selector.js +825 -0
  334. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  335. package/dist/modes/interactive/components/settings-selector.d.ts +58 -0
  336. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  337. package/dist/modes/interactive/components/settings-selector.js +295 -0
  338. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  339. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  340. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  341. package/dist/modes/interactive/components/show-images-selector.js +34 -0
  342. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  343. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  344. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  345. package/dist/modes/interactive/components/skill-invocation-message.js +45 -0
  346. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  347. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  348. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  349. package/dist/modes/interactive/components/theme-selector.js +44 -0
  350. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  351. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  352. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  353. package/dist/modes/interactive/components/thinking-selector.js +46 -0
  354. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  355. package/dist/modes/interactive/components/tool-execution.d.ts +77 -0
  356. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  357. package/dist/modes/interactive/components/tool-execution.js +773 -0
  358. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  359. package/dist/modes/interactive/components/tree-selector.d.ts +70 -0
  360. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  361. package/dist/modes/interactive/components/tree-selector.js +921 -0
  362. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  363. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  364. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  365. package/dist/modes/interactive/components/user-message-selector.js +110 -0
  366. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  367. package/dist/modes/interactive/components/user-message.d.ts +9 -0
  368. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  369. package/dist/modes/interactive/components/user-message.js +27 -0
  370. package/dist/modes/interactive/components/user-message.js.map +1 -0
  371. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  372. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  373. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  374. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  375. package/dist/modes/interactive/interactive-mode.d.ts +329 -0
  376. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  377. package/dist/modes/interactive/interactive-mode.js +3710 -0
  378. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  379. package/dist/modes/interactive/theme/theme.d.ts +78 -0
  380. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  381. package/dist/modes/interactive/theme/theme.js +944 -0
  382. package/dist/modes/interactive/theme/theme.js.map +1 -0
  383. package/dist/modes/print-mode.d.ts +28 -0
  384. package/dist/modes/print-mode.d.ts.map +1 -0
  385. package/dist/modes/print-mode.js +101 -0
  386. package/dist/modes/print-mode.js.map +1 -0
  387. package/dist/modes/rpc/rpc-client.d.ts +217 -0
  388. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  389. package/dist/modes/rpc/rpc-client.js +404 -0
  390. package/dist/modes/rpc/rpc-client.js.map +1 -0
  391. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  392. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  393. package/dist/modes/rpc/rpc-mode.js +511 -0
  394. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  395. package/dist/modes/rpc/rpc-types.d.ts +409 -0
  396. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  397. package/dist/modes/rpc/rpc-types.js +8 -0
  398. package/dist/modes/rpc/rpc-types.js.map +1 -0
  399. package/dist/utils/changelog.d.ts +21 -0
  400. package/dist/utils/changelog.d.ts.map +1 -0
  401. package/dist/utils/changelog.js +87 -0
  402. package/dist/utils/changelog.js.map +1 -0
  403. package/dist/utils/clipboard-image.d.ts +11 -0
  404. package/dist/utils/clipboard-image.d.ts.map +1 -0
  405. package/dist/utils/clipboard-image.js +162 -0
  406. package/dist/utils/clipboard-image.js.map +1 -0
  407. package/dist/utils/clipboard-native.d.ts +7 -0
  408. package/dist/utils/clipboard-native.d.ts.map +1 -0
  409. package/dist/utils/clipboard-native.js +14 -0
  410. package/dist/utils/clipboard-native.js.map +1 -0
  411. package/dist/utils/clipboard.d.ts +2 -0
  412. package/dist/utils/clipboard.d.ts.map +1 -0
  413. package/dist/utils/clipboard.js +67 -0
  414. package/dist/utils/clipboard.js.map +1 -0
  415. package/dist/utils/frontmatter.d.ts +8 -0
  416. package/dist/utils/frontmatter.d.ts.map +1 -0
  417. package/dist/utils/frontmatter.js +26 -0
  418. package/dist/utils/frontmatter.js.map +1 -0
  419. package/dist/utils/git.d.ts +26 -0
  420. package/dist/utils/git.d.ts.map +1 -0
  421. package/dist/utils/git.js +163 -0
  422. package/dist/utils/git.js.map +1 -0
  423. package/dist/utils/image-convert.d.ts +9 -0
  424. package/dist/utils/image-convert.d.ts.map +1 -0
  425. package/dist/utils/image-convert.js +35 -0
  426. package/dist/utils/image-convert.js.map +1 -0
  427. package/dist/utils/image-resize.d.ts +36 -0
  428. package/dist/utils/image-resize.d.ts.map +1 -0
  429. package/dist/utils/image-resize.js +181 -0
  430. package/dist/utils/image-resize.js.map +1 -0
  431. package/dist/utils/mime.d.ts +2 -0
  432. package/dist/utils/mime.d.ts.map +1 -0
  433. package/dist/utils/mime.js +26 -0
  434. package/dist/utils/mime.js.map +1 -0
  435. package/dist/utils/photon.d.ts +21 -0
  436. package/dist/utils/photon.d.ts.map +1 -0
  437. package/dist/utils/photon.js +121 -0
  438. package/dist/utils/photon.js.map +1 -0
  439. package/dist/utils/shell.d.ts +26 -0
  440. package/dist/utils/shell.d.ts.map +1 -0
  441. package/dist/utils/shell.js +186 -0
  442. package/dist/utils/shell.js.map +1 -0
  443. package/dist/utils/sleep.d.ts +5 -0
  444. package/dist/utils/sleep.d.ts.map +1 -0
  445. package/dist/utils/sleep.js +17 -0
  446. package/dist/utils/sleep.js.map +1 -0
  447. package/dist/utils/tools-manager.d.ts +3 -0
  448. package/dist/utils/tools-manager.d.ts.map +1 -0
  449. package/dist/utils/tools-manager.js +251 -0
  450. package/dist/utils/tools-manager.js.map +1 -0
  451. package/extensions/phi/README.md +228 -0
  452. package/extensions/phi/benchmark.ts +490 -0
  453. package/extensions/phi/init.ts +331 -0
  454. package/extensions/phi/memory.ts +285 -0
  455. package/extensions/phi/orchestrator.ts +411 -0
  456. package/extensions/phi/skill-loader.ts +336 -0
  457. package/extensions/phi/smart-router.ts +290 -0
  458. package/extensions/phi/web-search.ts +284 -0
  459. package/package.json +101 -0
@@ -0,0 +1,331 @@
1
+ /**
2
+ * Phi Init Extension - Interactive setup wizard for Phi Code
3
+ *
4
+ * Provides an interactive wizard to configure Phi Code with:
5
+ * - API key detection and model discovery
6
+ * - Intelligent model routing configuration
7
+ * - Agent definitions setup
8
+ * - Extension activation
9
+ *
10
+ * Features:
11
+ * - /phi-init command for setup wizard
12
+ * - Auto-detects available API keys
13
+ * - Three setup modes: auto, benchmark, manual
14
+ * - Creates ~/.phi/agent/ configuration structure
15
+ * - Activates Phi Code extensions
16
+ *
17
+ * Usage:
18
+ * 1. Run /phi-init to start the wizard
19
+ * 2. Follow interactive prompts
20
+ * 3. Configuration saved to ~/.phi/agent/
21
+ */
22
+
23
+ import type { ExtensionAPI } from "phi-code";
24
+ import { writeFile, mkdir, readFile, access, readdir, copyFile } from "node:fs/promises";
25
+ import { join } from "node:path";
26
+ import { homedir } from "node:os";
27
+
28
+ interface DetectedProvider {
29
+ name: string;
30
+ envVar: string;
31
+ models: string[];
32
+ available: boolean;
33
+ }
34
+
35
+ interface ModelConfig {
36
+ id: string;
37
+ provider: string;
38
+ apiKey?: string;
39
+ baseUrl?: string;
40
+ }
41
+
42
+ interface RoutingConfigData {
43
+ routes: Record<string, {
44
+ preferredModel: string;
45
+ fallback: string;
46
+ agent: string | null;
47
+ keywords: string[];
48
+ }>;
49
+ default: { model: string; agent: string | null };
50
+ }
51
+
52
+ export default function initExtension(pi: ExtensionAPI) {
53
+ const phiAgentDir = join(homedir(), ".phi", "agent");
54
+ const routingConfigPath = join(phiAgentDir, "routing.json");
55
+ const modelsConfigPath = join(phiAgentDir, "models.json");
56
+ const agentsDir = join(phiAgentDir, "agents");
57
+ const extensionsDir = join(phiAgentDir, "extensions");
58
+
59
+ /**
60
+ * Détecte les clés API disponibles dans l'environnement
61
+ */
62
+ function detectProviders(): DetectedProvider[] {
63
+ const providers: DetectedProvider[] = [
64
+ {
65
+ name: "Alibaba DashScope",
66
+ envVar: "DASHSCOPE_API_KEY",
67
+ models: [
68
+ "qwen3.5-plus",
69
+ "qwen3-max-2026-01-23",
70
+ "qwen3-coder-plus",
71
+ "qwen3-coder-next",
72
+ "kimi-k2.5",
73
+ "glm-5",
74
+ "glm-4.7",
75
+ "MiniMax-M2.5"
76
+ ],
77
+ available: false
78
+ },
79
+ {
80
+ name: "OpenAI",
81
+ envVar: "OPENAI_API_KEY",
82
+ models: ["gpt-4", "gpt-4-turbo", "gpt-3.5-turbo", "gpt-4o"],
83
+ available: false
84
+ },
85
+ {
86
+ name: "Anthropic",
87
+ envVar: "ANTHROPIC_API_KEY",
88
+ models: ["claude-3.5-sonnet", "claude-3-opus", "claude-3-haiku"],
89
+ available: false
90
+ },
91
+ {
92
+ name: "Google",
93
+ envVar: "GOOGLE_API_KEY",
94
+ models: ["gemini-pro", "gemini-pro-vision"],
95
+ available: false
96
+ }
97
+ ];
98
+
99
+ // Vérifier la disponibilité des clés API
100
+ for (const provider of providers) {
101
+ provider.available = !!process.env[provider.envVar];
102
+ }
103
+
104
+ return providers;
105
+ }
106
+
107
+ /**
108
+ * Crée la configuration par défaut (mode auto)
109
+ */
110
+ function createAutoConfig(availableProviders: DetectedProvider[]): { routing: RoutingConfigData; models: ModelConfig[] } {
111
+ // Priorité: Alibaba (gratuit) > Anthropic > OpenAI > Google
112
+ const preferenceOrder = ["Alibaba DashScope", "Anthropic", "OpenAI", "Google"];
113
+
114
+ let primaryProvider: DetectedProvider | null = null;
115
+
116
+ for (const providerName of preferenceOrder) {
117
+ const provider = availableProviders.find(p => p.name === providerName && p.available);
118
+ if (provider) {
119
+ primaryProvider = provider;
120
+ break;
121
+ }
122
+ }
123
+
124
+ if (!primaryProvider) {
125
+ throw new Error("Aucun provider disponible détecté");
126
+ }
127
+
128
+ const models: ModelConfig[] = primaryProvider.models.map(modelId => ({
129
+ id: modelId,
130
+ provider: primaryProvider!.name,
131
+ apiKey: process.env[primaryProvider!.envVar]
132
+ }));
133
+
134
+ const routing: RoutingConfigData = {
135
+ routes: {
136
+ code: {
137
+ preferredModel: primaryProvider.models.find(m => m.includes("coder")) || primaryProvider.models[0],
138
+ fallback: primaryProvider.models[0],
139
+ agent: null,
140
+ keywords: ["code", "implement", "write", "create", "build", "develop", "function", "class"]
141
+ },
142
+ debug: {
143
+ preferredModel: primaryProvider.models[0],
144
+ fallback: primaryProvider.models[1] || primaryProvider.models[0],
145
+ agent: null,
146
+ keywords: ["debug", "fix", "error", "bug", "broken", "issue", "problem", "repair"]
147
+ },
148
+ plan: {
149
+ preferredModel: primaryProvider.models.find(m => m.includes("max")) || primaryProvider.models[0],
150
+ fallback: primaryProvider.models[0],
151
+ agent: null,
152
+ keywords: ["plan", "design", "architecture", "strategy", "structure", "organize"]
153
+ },
154
+ review: {
155
+ preferredModel: primaryProvider.models[0],
156
+ fallback: primaryProvider.models[1] || primaryProvider.models[0],
157
+ agent: null,
158
+ keywords: ["review", "audit", "check", "validate", "quality", "improve", "optimize"]
159
+ },
160
+ test: {
161
+ preferredModel: primaryProvider.models.find(m => m.includes("fast")) || primaryProvider.models[0],
162
+ fallback: primaryProvider.models[0],
163
+ agent: null,
164
+ keywords: ["test", "testing", "unit", "integration", "verify", "validate"]
165
+ },
166
+ explore: {
167
+ preferredModel: primaryProvider.models.find(m => m.includes("fast")) || primaryProvider.models[0],
168
+ fallback: primaryProvider.models[0],
169
+ agent: null,
170
+ keywords: ["explore", "understand", "analyze", "examine", "investigate"]
171
+ },
172
+ general: {
173
+ preferredModel: primaryProvider.models[0],
174
+ fallback: primaryProvider.models[1] || primaryProvider.models[0],
175
+ agent: null,
176
+ keywords: ["help", "explain", "what", "how", "why", "question"]
177
+ }
178
+ },
179
+ default: {
180
+ model: primaryProvider.models[0],
181
+ agent: null
182
+ }
183
+ };
184
+
185
+ return { routing, models };
186
+ }
187
+
188
+ /**
189
+ * Crée les répertoires nécessaires
190
+ */
191
+ async function ensureDirectories(): Promise<void> {
192
+ await mkdir(phiAgentDir, { recursive: true });
193
+ await mkdir(agentsDir, { recursive: true });
194
+ await mkdir(extensionsDir, { recursive: true });
195
+ }
196
+
197
+ /**
198
+ * Copie les définitions d'agents par défaut
199
+ */
200
+ async function copyDefaultAgents(): Promise<void> {
201
+ // Pour l'instant, nous créons un agent par défaut simple
202
+ const defaultAgent = `---
203
+ name: general-assistant
204
+ description: General purpose assistant for various tasks
205
+ model: qwen3.5-plus
206
+ tools: [read, write, exec, web_search]
207
+ maxTokens: 4096
208
+ ---
209
+
210
+ # General Assistant
211
+
212
+ You are a helpful AI assistant capable of handling various tasks including:
213
+
214
+ - Code analysis and debugging
215
+ - File operations
216
+ - Web searches
217
+ - General problem solving
218
+
219
+ Always be precise, helpful, and follow instructions carefully.
220
+ `;
221
+
222
+ await writeFile(join(agentsDir, "general-assistant.md"), defaultAgent, "utf8");
223
+ }
224
+
225
+ /**
226
+ * Active les extensions Phi Code
227
+ */
228
+ async function activateExtensions(): Promise<void> {
229
+ const extensionConfig = {
230
+ enabled: true,
231
+ extensions: [
232
+ "phi/memory",
233
+ "phi/benchmark",
234
+ "phi/smart-router",
235
+ "phi/skill-loader",
236
+ "phi/web-search",
237
+ "phi/orchestrator"
238
+ ]
239
+ };
240
+
241
+ await writeFile(
242
+ join(extensionsDir, "config.json"),
243
+ JSON.stringify(extensionConfig, null, 2),
244
+ "utf8"
245
+ );
246
+ }
247
+
248
+ /**
249
+ * Wizard interactif
250
+ */
251
+ pi.registerCommand("phi-init", {
252
+ description: "Initialize Phi Code with interactive wizard",
253
+ handler: async (args, ctx) => {
254
+ try {
255
+ ctx.ui.notify("🚀 Welcome to Phi Code Setup Wizard!", "info");
256
+
257
+ // 1. Détection des API keys
258
+ ctx.ui.notify("🔍 Detecting available API keys...", "info");
259
+ const providers = detectProviders();
260
+ const availableProviders = providers.filter(p => p.available);
261
+
262
+ if (availableProviders.length === 0) {
263
+ ctx.ui.notify("❌ No API keys detected. Please set one of the following environment variables:\n" +
264
+ providers.map(p => `- ${p.envVar} (for ${p.name})`).join("\n"), "error");
265
+ return;
266
+ }
267
+
268
+ ctx.ui.notify("✅ Found API keys for:", "info");
269
+ for (const provider of availableProviders) {
270
+ ctx.ui.notify(` - ${provider.name} (${provider.models.length} models)`, "info");
271
+ }
272
+
273
+ // 2. Choix du mode de configuration
274
+ const mode = await ctx.ui.input("Choose setup mode:\n" +
275
+ "1. auto - Use public rankings to assign models (fastest)\n" +
276
+ "2. benchmark - Test models with simple exercises (recommended)\n" +
277
+ "3. manual - Choose models yourself (most control)\n" +
278
+ "\nEnter mode (1-3 or auto/benchmark/manual):");
279
+
280
+ const selectedMode = mode.toLowerCase().startsWith("1") || mode.toLowerCase().startsWith("a") ? "auto" :
281
+ mode.toLowerCase().startsWith("2") || mode.toLowerCase().startsWith("b") ? "benchmark" :
282
+ mode.toLowerCase().startsWith("3") || mode.toLowerCase().startsWith("m") ? "manual" : "auto";
283
+
284
+ ctx.ui.notify(`📋 Selected mode: ${selectedMode}`, "info");
285
+
286
+ let config: { routing: RoutingConfigData; models: ModelConfig[] };
287
+
288
+ if (selectedMode === "auto") {
289
+ config = createAutoConfig(availableProviders);
290
+ } else {
291
+ // Pour benchmark et manual, utilisons auto pour l'instant (à implémenter)
292
+ ctx.ui.notify("⚠️ Benchmark and manual modes not yet implemented, using auto mode.", "info");
293
+ config = createAutoConfig(availableProviders);
294
+ }
295
+
296
+ // 3. Créer les répertoires
297
+ ctx.ui.notify("📁 Creating configuration directories...", "info");
298
+ await ensureDirectories();
299
+
300
+ // 4. Écrire les fichiers de configuration
301
+ ctx.ui.notify("💾 Writing configuration files...", "info");
302
+ await writeFile(routingConfigPath, JSON.stringify(config.routing, null, 2), "utf8");
303
+ await writeFile(modelsConfigPath, JSON.stringify({ models: config.models }, null, 2), "utf8");
304
+
305
+ // 5. Copier les agents par défaut
306
+ ctx.ui.notify("🤖 Setting up default agents...", "info");
307
+ await copyDefaultAgents();
308
+
309
+ // 6. Activer les extensions
310
+ ctx.ui.notify("🔌 Activating extensions...", "info");
311
+ await activateExtensions();
312
+
313
+ // 7. Confirmation finale
314
+ const confirm = await ctx.ui.confirm("Setup complete! Would you like to see the configuration summary?");
315
+
316
+ if (confirm) {
317
+ ctx.ui.notify("📊 Configuration Summary:\n" +
318
+ `- Models configured: ${config.models.length}\n` +
319
+ `- Primary provider: ${availableProviders[0].name}\n` +
320
+ `- Config location: ${phiAgentDir}\n` +
321
+ `- Extensions activated: Yes\n` +
322
+ `- Default agents: Created\n\n` +
323
+ "🎉 Phi Code is ready to use! Try running 'phi --help' for available commands.", "info");
324
+ }
325
+
326
+ } catch (error) {
327
+ ctx.ui.notify(`❌ Setup failed: ${error}`, "error");
328
+ }
329
+ }
330
+ });
331
+ }
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Memory Extension - Persistent memory management for Phi Code
3
+ *
4
+ * Now powered by sigma-memory package which provides:
5
+ * - NotesManager: Markdown files management
6
+ * - OntologyManager: Knowledge graph with entities and relations
7
+ * - QMDManager: Vector search (if QMD is available)
8
+ *
9
+ * Features:
10
+ * - memory_search: Unified search across notes, ontology, and QMD
11
+ * - memory_write: Write content to memory files
12
+ * - memory_read: Read specific memory files or list available ones
13
+ * - memory_status: Get status of all memory subsystems
14
+ * - Auto-load AGENTS.md on session start
15
+ *
16
+ * Usage:
17
+ * 1. Ensure sigma-memory package is built: cd packages/sigma-memory && npm run build
18
+ * 2. Memory files are stored in ~/.phi/memory/
19
+ */
20
+
21
+ import { Type } from "@sinclair/typebox";
22
+ import type { ExtensionAPI, ExtensionContext } from "phi-code";
23
+ import { access } from "node:fs/promises";
24
+ import { join } from "node:path";
25
+ import { readFileSync } from "node:fs";
26
+ import { SigmaMemory } from "sigma-memory";
27
+
28
+ export default function memoryExtension(pi: ExtensionAPI) {
29
+ // Initialize sigma-memory
30
+ const sigmaMemory = new SigmaMemory({
31
+ // Configuration par défaut, peut être surchargée
32
+ qmdEnabled: true,
33
+ qmdCommand: 'qmd'
34
+ });
35
+
36
+ // Initialize memory directories
37
+ sigmaMemory.init().catch(error => {
38
+ console.warn("Failed to initialize sigma-memory:", error);
39
+ });
40
+
41
+ /**
42
+ * Memory search tool - Unified search across notes, ontology, and QMD
43
+ */
44
+ pi.registerTool({
45
+ name: "memory_search",
46
+ label: "Memory Search",
47
+ description: "Search for content in memory using unified search (notes + ontology + QMD vector search)",
48
+ parameters: Type.Object({
49
+ query: Type.String({ description: "Search query to find in memory" }),
50
+ }),
51
+
52
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
53
+ const { query } = params as { query: string };
54
+
55
+ try {
56
+ const results = await sigmaMemory.search(query);
57
+
58
+ if (results.length === 0) {
59
+ return {
60
+ content: [{ type: "text", text: `No results found for "${query}". Use memory_write to create some memory files!` }],
61
+ details: { found: false, query, resultCount: 0 }
62
+ };
63
+ }
64
+
65
+ // Format results by source
66
+ let resultText = `Found ${results.length} results for "${query}":\n\n`;
67
+
68
+ const groupedResults = results.reduce((groups, result) => {
69
+ if (!groups[result.source]) groups[result.source] = [];
70
+ groups[result.source].push(result);
71
+ return groups;
72
+ }, {} as Record<string, typeof results>);
73
+
74
+ for (const [source, sourceResults] of Object.entries(groupedResults)) {
75
+ resultText += `## ${source.toUpperCase()} (${sourceResults.length} results)\n\n`;
76
+
77
+ for (const result of sourceResults.slice(0, 5)) { // Limite à 5 résultats par source
78
+ resultText += `**Score: ${result.score.toFixed(2)}** | Type: ${result.type}\n`;
79
+
80
+ if (result.source === 'notes') {
81
+ const data = result.data;
82
+ resultText += `File: ${data.file} (line ${data.line})\n`;
83
+ resultText += `> ${data.content}\n\n`;
84
+ } else if (result.source === 'ontology') {
85
+ const data = result.data;
86
+ if (result.type === 'entity') {
87
+ resultText += `Entity: ${data.name} (${data.type})\n`;
88
+ resultText += `Properties: ${JSON.stringify(data.properties)}\n\n`;
89
+ } else if (result.type === 'relation') {
90
+ resultText += `Relation: ${data.type} (${data.from} → ${data.to})\n`;
91
+ resultText += `Properties: ${JSON.stringify(data.properties)}\n\n`;
92
+ }
93
+ } else if (result.source === 'qmd') {
94
+ const data = result.data;
95
+ resultText += `File: ${data.file} (line ${data.line})\n`;
96
+ resultText += `> ${data.content}\n\n`;
97
+ }
98
+ }
99
+
100
+ resultText += '---\n\n';
101
+ }
102
+
103
+ return {
104
+ content: [{ type: "text", text: resultText }],
105
+ details: { found: true, query, resultCount: results.length, sources: Object.keys(groupedResults) }
106
+ };
107
+
108
+ } catch (error) {
109
+ return {
110
+ content: [{ type: "text", text: `Memory search failed: ${error}` }],
111
+ details: { error: String(error), found: false, query }
112
+ };
113
+ }
114
+ },
115
+ });
116
+
117
+ /**
118
+ * Memory write tool - Write content to memory files
119
+ */
120
+ pi.registerTool({
121
+ name: "memory_write",
122
+ label: "Memory Write",
123
+ description: "Write content to a memory file. If no filename provided, uses today's date.",
124
+ parameters: Type.Object({
125
+ content: Type.String({ description: "Content to write to the memory file" }),
126
+ file: Type.Optional(Type.String({ description: "Optional filename (defaults to YYYY-MM-DD.md)" })),
127
+ }),
128
+
129
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
130
+ const { content, file } = params as { content: string; file?: string };
131
+
132
+ try {
133
+ // Use notes manager to write
134
+ sigmaMemory.notes.write(content, file);
135
+
136
+ const filename = file || new Date().toISOString().split('T')[0] + '.md';
137
+
138
+ return {
139
+ content: [{ type: "text", text: `Content written to ${filename}` }],
140
+ details: { filename, contentLength: content.length }
141
+ };
142
+
143
+ } catch (error) {
144
+ return {
145
+ content: [{ type: "text", text: `Failed to write to memory: ${error}` }],
146
+ details: { error: String(error) }
147
+ };
148
+ }
149
+ },
150
+ });
151
+
152
+ /**
153
+ * Memory read tool - Read memory files or list available ones
154
+ */
155
+ pi.registerTool({
156
+ name: "memory_read",
157
+ label: "Memory Read",
158
+ description: "Read a specific memory file or list all available memory files",
159
+ parameters: Type.Object({
160
+ file: Type.Optional(Type.String({ description: "Optional filename to read (omit to list all files)" })),
161
+ }),
162
+
163
+ async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
164
+ const { file } = params as { file?: string };
165
+
166
+ try {
167
+ if (!file) {
168
+ // List all available memory files
169
+ const files = sigmaMemory.notes.list();
170
+
171
+ if (files.length === 0) {
172
+ return {
173
+ content: [{ type: "text", text: "No memory files found." }],
174
+ details: { action: "list", fileCount: 0 }
175
+ };
176
+ }
177
+
178
+ const fileList = files
179
+ .map(f => `- ${f.name} (${(f.size / 1024).toFixed(1)} KB, ${new Date(f.date).toLocaleDateString()})`)
180
+ .join('\n');
181
+
182
+ return {
183
+ content: [{ type: "text", text: `Available memory files (${files.length}):\n\n${fileList}` }],
184
+ details: { action: "list", fileCount: files.length }
185
+ };
186
+ }
187
+
188
+ // Read specific file
189
+ const content = sigmaMemory.notes.read(file);
190
+
191
+ return {
192
+ content: [{ type: "text", text: `**${file}:**\n\n${content}` }],
193
+ details: { action: "read", found: true, filename: file, contentLength: content.length }
194
+ };
195
+
196
+ } catch (error) {
197
+ return {
198
+ content: [{ type: "text", text: `Failed to read memory: ${error}` }],
199
+ details: { error: String(error), action: "read", filename: file }
200
+ };
201
+ }
202
+ },
203
+ });
204
+
205
+ /**
206
+ * Memory status tool - Get status of all memory subsystems
207
+ */
208
+ pi.registerTool({
209
+ name: "memory_status",
210
+ label: "Memory Status",
211
+ description: "Get status of all memory subsystems (notes, ontology, QMD)",
212
+ parameters: Type.Object({}),
213
+
214
+ async execute(_toolCallId, _params, _signal, _onUpdate, _ctx) {
215
+ try {
216
+ const status = await sigmaMemory.status();
217
+
218
+ let statusText = "# Memory Status\n\n";
219
+
220
+ // Notes status
221
+ statusText += `## Notes\n`;
222
+ statusText += `- Files: ${status.notes.count}\n`;
223
+ statusText += `- Total size: ${(status.notes.totalSize / 1024).toFixed(1)} KB\n`;
224
+ statusText += `- Last modified: ${status.notes.lastModified ? new Date(status.notes.lastModified).toLocaleString() : 'Never'}\n\n`;
225
+
226
+ // Ontology status
227
+ statusText += `## Ontology\n`;
228
+ statusText += `- Entities: ${status.ontology.entities}\n`;
229
+ statusText += `- Relations: ${status.ontology.relations}\n`;
230
+ statusText += `- Entities by type: ${JSON.stringify(status.ontology.entitiesByType)}\n`;
231
+ statusText += `- Relations by type: ${JSON.stringify(status.ontology.relationsByType)}\n\n`;
232
+
233
+ // QMD status
234
+ statusText += `## QMD Vector Search\n`;
235
+ statusText += `- Available: ${status.qmd.available ? 'Yes' : 'No'}\n`;
236
+ if (status.qmd.available && status.qmd.status) {
237
+ statusText += `- Files indexed: ${status.qmd.status.files}\n`;
238
+ statusText += `- Chunks: ${status.qmd.status.chunks}\n`;
239
+ statusText += `- Last update: ${status.qmd.status.lastUpdate || 'Never'}\n`;
240
+ }
241
+
242
+ return {
243
+ content: [{ type: "text", text: statusText }],
244
+ details: { status }
245
+ };
246
+
247
+ } catch (error) {
248
+ return {
249
+ content: [{ type: "text", text: `Failed to get memory status: ${error}` }],
250
+ details: { error: String(error) }
251
+ };
252
+ }
253
+ },
254
+ });
255
+
256
+ /**
257
+ * Auto-load AGENTS.md on session start
258
+ */
259
+ pi.on("session_start", async (_event, ctx) => {
260
+ try {
261
+ // Try to find AGENTS.md in current directory
262
+ const agentsPath = join(process.cwd(), "AGENTS.md");
263
+
264
+ try {
265
+ await access(agentsPath);
266
+ const agentsContent = readFileSync(agentsPath, 'utf-8');
267
+
268
+ // Send the content as a system message to provide context
269
+ ctx.ui.notify("Loaded AGENTS.md context for this session", "info");
270
+
271
+ // Optionally inject into the session context
272
+ await pi.sendHookMessage({
273
+ role: "system",
274
+ content: `Session context loaded from AGENTS.md:\n\n${agentsContent}`,
275
+ }, { source: "extension" });
276
+
277
+ } catch {
278
+ // AGENTS.md doesn't exist, that's fine
279
+ }
280
+
281
+ } catch (error) {
282
+ console.warn("Failed to initialize memory extension:", error);
283
+ }
284
+ });
285
+ }