pandi-coding-agent 0.80.3-pandi.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (816) hide show
  1. package/CHANGELOG.md +4835 -0
  2. package/README.md +689 -0
  3. package/dist/bun/cli.d.ts +3 -0
  4. package/dist/bun/cli.d.ts.map +1 -0
  5. package/dist/bun/cli.js +9 -0
  6. package/dist/bun/cli.js.map +1 -0
  7. package/dist/bun/register-bedrock.d.ts +2 -0
  8. package/dist/bun/register-bedrock.d.ts.map +1 -0
  9. package/dist/bun/register-bedrock.js +4 -0
  10. package/dist/bun/register-bedrock.js.map +1 -0
  11. package/dist/bun/restore-sandbox-env.d.ts +17 -0
  12. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  13. package/dist/bun/restore-sandbox-env.js +36 -0
  14. package/dist/bun/restore-sandbox-env.js.map +1 -0
  15. package/dist/cli/args.d.ts +57 -0
  16. package/dist/cli/args.d.ts.map +1 -0
  17. package/dist/cli/args.js +379 -0
  18. package/dist/cli/args.js.map +1 -0
  19. package/dist/cli/config-selector.d.ts +14 -0
  20. package/dist/cli/config-selector.d.ts.map +1 -0
  21. package/dist/cli/config-selector.js +31 -0
  22. package/dist/cli/config-selector.js.map +1 -0
  23. package/dist/cli/file-processor.d.ts +15 -0
  24. package/dist/cli/file-processor.d.ts.map +1 -0
  25. package/dist/cli/file-processor.js +70 -0
  26. package/dist/cli/file-processor.js.map +1 -0
  27. package/dist/cli/initial-message.d.ts +18 -0
  28. package/dist/cli/initial-message.d.ts.map +1 -0
  29. package/dist/cli/initial-message.js +22 -0
  30. package/dist/cli/initial-message.js.map +1 -0
  31. package/dist/cli/list-models.d.ts +9 -0
  32. package/dist/cli/list-models.d.ts.map +1 -0
  33. package/dist/cli/list-models.js +98 -0
  34. package/dist/cli/list-models.js.map +1 -0
  35. package/dist/cli/project-trust.d.ts +10 -0
  36. package/dist/cli/project-trust.d.ts.map +1 -0
  37. package/dist/cli/project-trust.js +48 -0
  38. package/dist/cli/project-trust.js.map +1 -0
  39. package/dist/cli/session-picker.d.ts +10 -0
  40. package/dist/cli/session-picker.d.ts.map +1 -0
  41. package/dist/cli/session-picker.js +36 -0
  42. package/dist/cli/session-picker.js.map +1 -0
  43. package/dist/cli/startup-ui.d.ts +20 -0
  44. package/dist/cli/startup-ui.d.ts.map +1 -0
  45. package/dist/cli/startup-ui.js +184 -0
  46. package/dist/cli/startup-ui.js.map +1 -0
  47. package/dist/cli.d.ts +3 -0
  48. package/dist/cli.d.ts.map +1 -0
  49. package/dist/cli.js +18 -0
  50. package/dist/cli.js.map +1 -0
  51. package/dist/config.d.ts +98 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +470 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/core/agent-session-runtime.d.ts +119 -0
  56. package/dist/core/agent-session-runtime.d.ts.map +1 -0
  57. package/dist/core/agent-session-runtime.js +303 -0
  58. package/dist/core/agent-session-runtime.js.map +1 -0
  59. package/dist/core/agent-session-services.d.ts +88 -0
  60. package/dist/core/agent-session-services.d.ts.map +1 -0
  61. package/dist/core/agent-session-services.js +119 -0
  62. package/dist/core/agent-session-services.js.map +1 -0
  63. package/dist/core/agent-session.d.ts +608 -0
  64. package/dist/core/agent-session.d.ts.map +1 -0
  65. package/dist/core/agent-session.js +2560 -0
  66. package/dist/core/agent-session.js.map +1 -0
  67. package/dist/core/auth-guidance.d.ts +5 -0
  68. package/dist/core/auth-guidance.d.ts.map +1 -0
  69. package/dist/core/auth-guidance.js +21 -0
  70. package/dist/core/auth-guidance.js.map +1 -0
  71. package/dist/core/auth-storage.d.ts +140 -0
  72. package/dist/core/auth-storage.d.ts.map +1 -0
  73. package/dist/core/auth-storage.js +434 -0
  74. package/dist/core/auth-storage.js.map +1 -0
  75. package/dist/core/bash-executor.d.ts +32 -0
  76. package/dist/core/bash-executor.d.ts.map +1 -0
  77. package/dist/core/bash-executor.js +111 -0
  78. package/dist/core/bash-executor.js.map +1 -0
  79. package/dist/core/bundled-packages.d.ts +12 -0
  80. package/dist/core/bundled-packages.d.ts.map +1 -0
  81. package/dist/core/bundled-packages.js +70 -0
  82. package/dist/core/bundled-packages.js.map +1 -0
  83. package/dist/core/compaction/branch-summarization.d.ts +92 -0
  84. package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
  85. package/dist/core/compaction/branch-summarization.js +249 -0
  86. package/dist/core/compaction/branch-summarization.js.map +1 -0
  87. package/dist/core/compaction/compaction.d.ts +122 -0
  88. package/dist/core/compaction/compaction.d.ts.map +1 -0
  89. package/dist/core/compaction/compaction.js +625 -0
  90. package/dist/core/compaction/compaction.js.map +1 -0
  91. package/dist/core/compaction/index.d.ts +7 -0
  92. package/dist/core/compaction/index.d.ts.map +1 -0
  93. package/dist/core/compaction/index.js +7 -0
  94. package/dist/core/compaction/index.js.map +1 -0
  95. package/dist/core/compaction/utils.d.ts +38 -0
  96. package/dist/core/compaction/utils.d.ts.map +1 -0
  97. package/dist/core/compaction/utils.js +153 -0
  98. package/dist/core/compaction/utils.js.map +1 -0
  99. package/dist/core/defaults.d.ts +3 -0
  100. package/dist/core/defaults.d.ts.map +1 -0
  101. package/dist/core/defaults.js +2 -0
  102. package/dist/core/defaults.js.map +1 -0
  103. package/dist/core/diagnostics.d.ts +15 -0
  104. package/dist/core/diagnostics.d.ts.map +1 -0
  105. package/dist/core/diagnostics.js +2 -0
  106. package/dist/core/diagnostics.js.map +1 -0
  107. package/dist/core/event-bus.d.ts +9 -0
  108. package/dist/core/event-bus.d.ts.map +1 -0
  109. package/dist/core/event-bus.js +25 -0
  110. package/dist/core/event-bus.js.map +1 -0
  111. package/dist/core/exec.d.ts +29 -0
  112. package/dist/core/exec.d.ts.map +1 -0
  113. package/dist/core/exec.js +75 -0
  114. package/dist/core/exec.js.map +1 -0
  115. package/dist/core/experimental.d.ts +2 -0
  116. package/dist/core/experimental.d.ts.map +1 -0
  117. package/dist/core/experimental.js +4 -0
  118. package/dist/core/experimental.js.map +1 -0
  119. package/dist/core/export-html/ansi-to-html.d.ts +22 -0
  120. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
  121. package/dist/core/export-html/ansi-to-html.js +249 -0
  122. package/dist/core/export-html/ansi-to-html.js.map +1 -0
  123. package/dist/core/export-html/index.d.ts +37 -0
  124. package/dist/core/export-html/index.d.ts.map +1 -0
  125. package/dist/core/export-html/index.js +226 -0
  126. package/dist/core/export-html/index.js.map +1 -0
  127. package/dist/core/export-html/template.css +1066 -0
  128. package/dist/core/export-html/template.html +55 -0
  129. package/dist/core/export-html/template.js +1864 -0
  130. package/dist/core/export-html/tool-renderer.d.ts +34 -0
  131. package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
  132. package/dist/core/export-html/tool-renderer.js +108 -0
  133. package/dist/core/export-html/tool-renderer.js.map +1 -0
  134. package/dist/core/export-html/vendor/highlight.min.js +1213 -0
  135. package/dist/core/export-html/vendor/marked.min.js +78 -0
  136. package/dist/core/extensions/index.d.ts +12 -0
  137. package/dist/core/extensions/index.d.ts.map +1 -0
  138. package/dist/core/extensions/index.js +9 -0
  139. package/dist/core/extensions/index.js.map +1 -0
  140. package/dist/core/extensions/loader.d.ts +23 -0
  141. package/dist/core/extensions/loader.d.ts.map +1 -0
  142. package/dist/core/extensions/loader.js +535 -0
  143. package/dist/core/extensions/loader.js.map +1 -0
  144. package/dist/core/extensions/runner.d.ts +166 -0
  145. package/dist/core/extensions/runner.d.ts.map +1 -0
  146. package/dist/core/extensions/runner.js +876 -0
  147. package/dist/core/extensions/runner.js.map +1 -0
  148. package/dist/core/extensions/types.d.ts +1216 -0
  149. package/dist/core/extensions/types.d.ts.map +1 -0
  150. package/dist/core/extensions/types.js +45 -0
  151. package/dist/core/extensions/types.js.map +1 -0
  152. package/dist/core/extensions/wrapper.d.ts +20 -0
  153. package/dist/core/extensions/wrapper.d.ts.map +1 -0
  154. package/dist/core/extensions/wrapper.js +22 -0
  155. package/dist/core/extensions/wrapper.js.map +1 -0
  156. package/dist/core/footer-data-provider.d.ts +54 -0
  157. package/dist/core/footer-data-provider.d.ts.map +1 -0
  158. package/dist/core/footer-data-provider.js +338 -0
  159. package/dist/core/footer-data-provider.js.map +1 -0
  160. package/dist/core/http-dispatcher.d.ts +22 -0
  161. package/dist/core/http-dispatcher.d.ts.map +1 -0
  162. package/dist/core/http-dispatcher.js +91 -0
  163. package/dist/core/http-dispatcher.js.map +1 -0
  164. package/dist/core/index.d.ts +13 -0
  165. package/dist/core/index.d.ts.map +1 -0
  166. package/dist/core/index.js +13 -0
  167. package/dist/core/index.js.map +1 -0
  168. package/dist/core/keybindings.d.ts +353 -0
  169. package/dist/core/keybindings.d.ts.map +1 -0
  170. package/dist/core/keybindings.js +295 -0
  171. package/dist/core/keybindings.js.map +1 -0
  172. package/dist/core/messages.d.ts +77 -0
  173. package/dist/core/messages.d.ts.map +1 -0
  174. package/dist/core/messages.js +123 -0
  175. package/dist/core/messages.js.map +1 -0
  176. package/dist/core/model-registry.d.ts +151 -0
  177. package/dist/core/model-registry.d.ts.map +1 -0
  178. package/dist/core/model-registry.js +750 -0
  179. package/dist/core/model-registry.js.map +1 -0
  180. package/dist/core/model-resolver.d.ts +111 -0
  181. package/dist/core/model-resolver.d.ts.map +1 -0
  182. package/dist/core/model-resolver.js +534 -0
  183. package/dist/core/model-resolver.js.map +1 -0
  184. package/dist/core/output-guard.d.ts +7 -0
  185. package/dist/core/output-guard.d.ts.map +1 -0
  186. package/dist/core/output-guard.js +89 -0
  187. package/dist/core/output-guard.js.map +1 -0
  188. package/dist/core/package-manager.d.ts +210 -0
  189. package/dist/core/package-manager.d.ts.map +1 -0
  190. package/dist/core/package-manager.js +2096 -0
  191. package/dist/core/package-manager.js.map +1 -0
  192. package/dist/core/project-trust.d.ts +15 -0
  193. package/dist/core/project-trust.d.ts.map +1 -0
  194. package/dist/core/project-trust.js +59 -0
  195. package/dist/core/project-trust.js.map +1 -0
  196. package/dist/core/prompt-templates.d.ts +53 -0
  197. package/dist/core/prompt-templates.d.ts.map +1 -0
  198. package/dist/core/prompt-templates.js +236 -0
  199. package/dist/core/prompt-templates.js.map +1 -0
  200. package/dist/core/provider-attribution.d.ts +4 -0
  201. package/dist/core/provider-attribution.d.ts.map +1 -0
  202. package/dist/core/provider-attribution.js +82 -0
  203. package/dist/core/provider-attribution.js.map +1 -0
  204. package/dist/core/provider-display-names.d.ts +2 -0
  205. package/dist/core/provider-display-names.d.ts.map +1 -0
  206. package/dist/core/provider-display-names.js +36 -0
  207. package/dist/core/provider-display-names.js.map +1 -0
  208. package/dist/core/resolve-config-value.d.ts +30 -0
  209. package/dist/core/resolve-config-value.d.ts.map +1 -0
  210. package/dist/core/resolve-config-value.js +247 -0
  211. package/dist/core/resolve-config-value.js.map +1 -0
  212. package/dist/core/resource-loader.d.ts +208 -0
  213. package/dist/core/resource-loader.d.ts.map +1 -0
  214. package/dist/core/resource-loader.js +818 -0
  215. package/dist/core/resource-loader.js.map +1 -0
  216. package/dist/core/sdk.d.ts +109 -0
  217. package/dist/core/sdk.d.ts.map +1 -0
  218. package/dist/core/sdk.js +267 -0
  219. package/dist/core/sdk.js.map +1 -0
  220. package/dist/core/session-cwd.d.ts +19 -0
  221. package/dist/core/session-cwd.d.ts.map +1 -0
  222. package/dist/core/session-cwd.js +38 -0
  223. package/dist/core/session-cwd.js.map +1 -0
  224. package/dist/core/session-manager.d.ts +332 -0
  225. package/dist/core/session-manager.d.ts.map +1 -0
  226. package/dist/core/session-manager.js +1233 -0
  227. package/dist/core/session-manager.js.map +1 -0
  228. package/dist/core/settings-manager.d.ts +291 -0
  229. package/dist/core/settings-manager.d.ts.map +1 -0
  230. package/dist/core/settings-manager.js +893 -0
  231. package/dist/core/settings-manager.js.map +1 -0
  232. package/dist/core/skills.d.ts +60 -0
  233. package/dist/core/skills.d.ts.map +1 -0
  234. package/dist/core/skills.js +387 -0
  235. package/dist/core/skills.js.map +1 -0
  236. package/dist/core/slash-commands.d.ts +14 -0
  237. package/dist/core/slash-commands.d.ts.map +1 -0
  238. package/dist/core/slash-commands.js +26 -0
  239. package/dist/core/slash-commands.js.map +1 -0
  240. package/dist/core/source-info.d.ts +18 -0
  241. package/dist/core/source-info.d.ts.map +1 -0
  242. package/dist/core/source-info.js +19 -0
  243. package/dist/core/source-info.js.map +1 -0
  244. package/dist/core/system-prompt.d.ts +28 -0
  245. package/dist/core/system-prompt.d.ts.map +1 -0
  246. package/dist/core/system-prompt.js +120 -0
  247. package/dist/core/system-prompt.js.map +1 -0
  248. package/dist/core/telemetry.d.ts +3 -0
  249. package/dist/core/telemetry.d.ts.map +1 -0
  250. package/dist/core/telemetry.js +9 -0
  251. package/dist/core/telemetry.js.map +1 -0
  252. package/dist/core/timings.d.ts +10 -0
  253. package/dist/core/timings.d.ts.map +1 -0
  254. package/dist/core/timings.js +41 -0
  255. package/dist/core/timings.js.map +1 -0
  256. package/dist/core/tools/bash.d.ts +68 -0
  257. package/dist/core/tools/bash.d.ts.map +1 -0
  258. package/dist/core/tools/bash.js +346 -0
  259. package/dist/core/tools/bash.js.map +1 -0
  260. package/dist/core/tools/edit-diff.d.ts +106 -0
  261. package/dist/core/tools/edit-diff.d.ts.map +1 -0
  262. package/dist/core/tools/edit-diff.js +424 -0
  263. package/dist/core/tools/edit-diff.js.map +1 -0
  264. package/dist/core/tools/edit.d.ts +51 -0
  265. package/dist/core/tools/edit.d.ts.map +1 -0
  266. package/dist/core/tools/edit.js +284 -0
  267. package/dist/core/tools/edit.js.map +1 -0
  268. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  269. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  270. package/dist/core/tools/file-mutation-queue.js +52 -0
  271. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  272. package/dist/core/tools/find.d.ts +35 -0
  273. package/dist/core/tools/find.d.ts.map +1 -0
  274. package/dist/core/tools/find.js +305 -0
  275. package/dist/core/tools/find.js.map +1 -0
  276. package/dist/core/tools/grep.d.ts +37 -0
  277. package/dist/core/tools/grep.d.ts.map +1 -0
  278. package/dist/core/tools/grep.js +304 -0
  279. package/dist/core/tools/grep.js.map +1 -0
  280. package/dist/core/tools/index.d.ts +40 -0
  281. package/dist/core/tools/index.d.ts.map +1 -0
  282. package/dist/core/tools/index.js +112 -0
  283. package/dist/core/tools/index.js.map +1 -0
  284. package/dist/core/tools/ls.d.ts +37 -0
  285. package/dist/core/tools/ls.d.ts.map +1 -0
  286. package/dist/core/tools/ls.js +167 -0
  287. package/dist/core/tools/ls.js.map +1 -0
  288. package/dist/core/tools/output-accumulator.d.ts +52 -0
  289. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  290. package/dist/core/tools/output-accumulator.js +184 -0
  291. package/dist/core/tools/output-accumulator.js.map +1 -0
  292. package/dist/core/tools/path-utils.d.ts +10 -0
  293. package/dist/core/tools/path-utils.d.ts.map +1 -0
  294. package/dist/core/tools/path-utils.js +99 -0
  295. package/dist/core/tools/path-utils.js.map +1 -0
  296. package/dist/core/tools/read.d.ts +35 -0
  297. package/dist/core/tools/read.d.ts.map +1 -0
  298. package/dist/core/tools/read.js +276 -0
  299. package/dist/core/tools/read.js.map +1 -0
  300. package/dist/core/tools/render-utils.d.ts +24 -0
  301. package/dist/core/tools/render-utils.d.ts.map +1 -0
  302. package/dist/core/tools/render-utils.js +65 -0
  303. package/dist/core/tools/render-utils.js.map +1 -0
  304. package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  305. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
  306. package/dist/core/tools/tool-definition-wrapper.js +34 -0
  307. package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
  308. package/dist/core/tools/truncate.d.ts +70 -0
  309. package/dist/core/tools/truncate.d.ts.map +1 -0
  310. package/dist/core/tools/truncate.js +215 -0
  311. package/dist/core/tools/truncate.js.map +1 -0
  312. package/dist/core/tools/write.d.ts +26 -0
  313. package/dist/core/tools/write.d.ts.map +1 -0
  314. package/dist/core/tools/write.js +197 -0
  315. package/dist/core/tools/write.js.map +1 -0
  316. package/dist/core/trust-manager.d.ts +36 -0
  317. package/dist/core/trust-manager.d.ts.map +1 -0
  318. package/dist/core/trust-manager.js +202 -0
  319. package/dist/core/trust-manager.js.map +1 -0
  320. package/dist/index.d.ts +33 -0
  321. package/dist/index.d.ts.map +1 -0
  322. package/dist/index.js +46 -0
  323. package/dist/index.js.map +1 -0
  324. package/dist/main.d.ts +12 -0
  325. package/dist/main.d.ts.map +1 -0
  326. package/dist/main.js +699 -0
  327. package/dist/main.js.map +1 -0
  328. package/dist/migrations.d.ts +33 -0
  329. package/dist/migrations.d.ts.map +1 -0
  330. package/dist/migrations.js +281 -0
  331. package/dist/migrations.js.map +1 -0
  332. package/dist/modes/index.d.ts +9 -0
  333. package/dist/modes/index.d.ts.map +1 -0
  334. package/dist/modes/index.js +8 -0
  335. package/dist/modes/index.js.map +1 -0
  336. package/dist/modes/interactive/assets/clankolas.png +0 -0
  337. package/dist/modes/interactive/components/armin.d.ts +34 -0
  338. package/dist/modes/interactive/components/armin.d.ts.map +1 -0
  339. package/dist/modes/interactive/components/armin.js +333 -0
  340. package/dist/modes/interactive/components/armin.js.map +1 -0
  341. package/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  342. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
  343. package/dist/modes/interactive/components/assistant-message.js +129 -0
  344. package/dist/modes/interactive/components/assistant-message.js.map +1 -0
  345. package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  346. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
  347. package/dist/modes/interactive/components/bash-execution.js +175 -0
  348. package/dist/modes/interactive/components/bash-execution.js.map +1 -0
  349. package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  350. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
  351. package/dist/modes/interactive/components/bordered-loader.js +54 -0
  352. package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
  353. package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  354. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
  355. package/dist/modes/interactive/components/branch-summary-message.js +44 -0
  356. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
  357. package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  358. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
  359. package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
  360. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
  361. package/dist/modes/interactive/components/config-selector.d.ts +71 -0
  362. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
  363. package/dist/modes/interactive/components/config-selector.js +506 -0
  364. package/dist/modes/interactive/components/config-selector.js.map +1 -0
  365. package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  366. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
  367. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  368. package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
  369. package/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  370. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
  371. package/dist/modes/interactive/components/custom-editor.js +70 -0
  372. package/dist/modes/interactive/components/custom-editor.js.map +1 -0
  373. package/dist/modes/interactive/components/custom-message.d.ts +20 -0
  374. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
  375. package/dist/modes/interactive/components/custom-message.js +79 -0
  376. package/dist/modes/interactive/components/custom-message.js.map +1 -0
  377. package/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  378. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -0
  379. package/dist/modes/interactive/components/daxnuts.js +140 -0
  380. package/dist/modes/interactive/components/daxnuts.js.map +1 -0
  381. package/dist/modes/interactive/components/diff.d.ts +12 -0
  382. package/dist/modes/interactive/components/diff.d.ts.map +1 -0
  383. package/dist/modes/interactive/components/diff.js +133 -0
  384. package/dist/modes/interactive/components/diff.js.map +1 -0
  385. package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  386. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
  387. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  388. package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
  389. package/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  390. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -0
  391. package/dist/modes/interactive/components/earendil-announcement.js +40 -0
  392. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -0
  393. package/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  394. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
  395. package/dist/modes/interactive/components/extension-editor.js +128 -0
  396. package/dist/modes/interactive/components/extension-editor.js.map +1 -0
  397. package/dist/modes/interactive/components/extension-input.d.ts +23 -0
  398. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
  399. package/dist/modes/interactive/components/extension-input.js +61 -0
  400. package/dist/modes/interactive/components/extension-input.js.map +1 -0
  401. package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  402. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
  403. package/dist/modes/interactive/components/extension-selector.js +83 -0
  404. package/dist/modes/interactive/components/extension-selector.js.map +1 -0
  405. package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  406. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  407. package/dist/modes/interactive/components/first-time-setup.js +103 -0
  408. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  409. package/dist/modes/interactive/components/footer.d.ts +28 -0
  410. package/dist/modes/interactive/components/footer.d.ts.map +1 -0
  411. package/dist/modes/interactive/components/footer.js +221 -0
  412. package/dist/modes/interactive/components/footer.js.map +1 -0
  413. package/dist/modes/interactive/components/index.d.ts +34 -0
  414. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  415. package/dist/modes/interactive/components/index.js +35 -0
  416. package/dist/modes/interactive/components/index.js.map +1 -0
  417. package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  418. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
  419. package/dist/modes/interactive/components/keybinding-hints.js +36 -0
  420. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
  421. package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  422. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
  423. package/dist/modes/interactive/components/login-dialog.js +179 -0
  424. package/dist/modes/interactive/components/login-dialog.js.map +1 -0
  425. package/dist/modes/interactive/components/model-selector.d.ts +47 -0
  426. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
  427. package/dist/modes/interactive/components/model-selector.js +279 -0
  428. package/dist/modes/interactive/components/model-selector.js.map +1 -0
  429. package/dist/modes/interactive/components/oauth-selector.d.ts +31 -0
  430. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
  431. package/dist/modes/interactive/components/oauth-selector.js +165 -0
  432. package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
  433. package/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  434. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
  435. package/dist/modes/interactive/components/scoped-models-selector.js +293 -0
  436. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
  437. package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  438. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
  439. package/dist/modes/interactive/components/session-selector-search.js +155 -0
  440. package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
  441. package/dist/modes/interactive/components/session-selector.d.ts +95 -0
  442. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
  443. package/dist/modes/interactive/components/session-selector.js +867 -0
  444. package/dist/modes/interactive/components/session-selector.js.map +1 -0
  445. package/dist/modes/interactive/components/settings-selector.d.ts +75 -0
  446. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
  447. package/dist/modes/interactive/components/settings-selector.js +582 -0
  448. package/dist/modes/interactive/components/settings-selector.js.map +1 -0
  449. package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  450. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
  451. package/dist/modes/interactive/components/show-images-selector.js +39 -0
  452. package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
  453. package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  454. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
  455. package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
  456. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
  457. package/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  458. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
  459. package/dist/modes/interactive/components/status-indicator.js +60 -0
  460. package/dist/modes/interactive/components/status-indicator.js.map +1 -0
  461. package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  462. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
  463. package/dist/modes/interactive/components/theme-selector.js +50 -0
  464. package/dist/modes/interactive/components/theme-selector.js.map +1 -0
  465. package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  466. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
  467. package/dist/modes/interactive/components/thinking-selector.js +51 -0
  468. package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
  469. package/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  470. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
  471. package/dist/modes/interactive/components/tool-execution.js +317 -0
  472. package/dist/modes/interactive/components/tool-execution.js.map +1 -0
  473. package/dist/modes/interactive/components/tree-selector.d.ts +89 -0
  474. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
  475. package/dist/modes/interactive/components/tree-selector.js +1208 -0
  476. package/dist/modes/interactive/components/tree-selector.js.map +1 -0
  477. package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  478. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
  479. package/dist/modes/interactive/components/trust-selector.js +91 -0
  480. package/dist/modes/interactive/components/trust-selector.js.map +1 -0
  481. package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  482. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
  483. package/dist/modes/interactive/components/user-message-selector.js +114 -0
  484. package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
  485. package/dist/modes/interactive/components/user-message.d.ts +14 -0
  486. package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
  487. package/dist/modes/interactive/components/user-message.js +42 -0
  488. package/dist/modes/interactive/components/user-message.js.map +1 -0
  489. package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  490. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
  491. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  492. package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
  493. package/dist/modes/interactive/interactive-mode.d.ts +380 -0
  494. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
  495. package/dist/modes/interactive/interactive-mode.js +4782 -0
  496. package/dist/modes/interactive/interactive-mode.js.map +1 -0
  497. package/dist/modes/interactive/model-search.d.ts +12 -0
  498. package/dist/modes/interactive/model-search.d.ts.map +1 -0
  499. package/dist/modes/interactive/model-search.js +15 -0
  500. package/dist/modes/interactive/model-search.js.map +1 -0
  501. package/dist/modes/interactive/theme/dark.json +86 -0
  502. package/dist/modes/interactive/theme/light.json +85 -0
  503. package/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  504. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
  505. package/dist/modes/interactive/theme/theme-controller.js +102 -0
  506. package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
  507. package/dist/modes/interactive/theme/theme-schema.json +336 -0
  508. package/dist/modes/interactive/theme/theme.d.ts +119 -0
  509. package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
  510. package/dist/modes/interactive/theme/theme.js +1056 -0
  511. package/dist/modes/interactive/theme/theme.js.map +1 -0
  512. package/dist/modes/print-mode.d.ts +28 -0
  513. package/dist/modes/print-mode.d.ts.map +1 -0
  514. package/dist/modes/print-mode.js +132 -0
  515. package/dist/modes/print-mode.js.map +1 -0
  516. package/dist/modes/rpc/jsonl.d.ts +17 -0
  517. package/dist/modes/rpc/jsonl.d.ts.map +1 -0
  518. package/dist/modes/rpc/jsonl.js +49 -0
  519. package/dist/modes/rpc/jsonl.js.map +1 -0
  520. package/dist/modes/rpc/rpc-client.d.ts +242 -0
  521. package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
  522. package/dist/modes/rpc/rpc-client.js +481 -0
  523. package/dist/modes/rpc/rpc-client.js.map +1 -0
  524. package/dist/modes/rpc/rpc-mode.d.ts +20 -0
  525. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
  526. package/dist/modes/rpc/rpc-mode.js +632 -0
  527. package/dist/modes/rpc/rpc-mode.js.map +1 -0
  528. package/dist/modes/rpc/rpc-types.d.ts +446 -0
  529. package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
  530. package/dist/modes/rpc/rpc-types.js +8 -0
  531. package/dist/modes/rpc/rpc-types.js.map +1 -0
  532. package/dist/package-manager-cli.d.ts +8 -0
  533. package/dist/package-manager-cli.d.ts.map +1 -0
  534. package/dist/package-manager-cli.js +659 -0
  535. package/dist/package-manager-cli.js.map +1 -0
  536. package/dist/rpc-entry.d.ts +3 -0
  537. package/dist/rpc-entry.d.ts.map +1 -0
  538. package/dist/rpc-entry.js +10 -0
  539. package/dist/rpc-entry.js.map +1 -0
  540. package/dist/utils/ansi.d.ts +2 -0
  541. package/dist/utils/ansi.d.ts.map +1 -0
  542. package/dist/utils/ansi.js +52 -0
  543. package/dist/utils/ansi.js.map +1 -0
  544. package/dist/utils/changelog.d.ts +22 -0
  545. package/dist/utils/changelog.d.ts.map +1 -0
  546. package/dist/utils/changelog.js +165 -0
  547. package/dist/utils/changelog.js.map +1 -0
  548. package/dist/utils/child-process.d.ts +18 -0
  549. package/dist/utils/child-process.d.ts.map +1 -0
  550. package/dist/utils/child-process.js +106 -0
  551. package/dist/utils/child-process.js.map +1 -0
  552. package/dist/utils/clipboard-image.d.ts +11 -0
  553. package/dist/utils/clipboard-image.d.ts.map +1 -0
  554. package/dist/utils/clipboard-image.js +245 -0
  555. package/dist/utils/clipboard-image.js.map +1 -0
  556. package/dist/utils/clipboard-native.d.ts +10 -0
  557. package/dist/utils/clipboard-native.d.ts.map +1 -0
  558. package/dist/utils/clipboard-native.js +20 -0
  559. package/dist/utils/clipboard-native.js.map +1 -0
  560. package/dist/utils/clipboard.d.ts +2 -0
  561. package/dist/utils/clipboard.d.ts.map +1 -0
  562. package/dist/utils/clipboard.js +117 -0
  563. package/dist/utils/clipboard.js.map +1 -0
  564. package/dist/utils/deprecation.d.ts +4 -0
  565. package/dist/utils/deprecation.d.ts.map +1 -0
  566. package/dist/utils/deprecation.js +13 -0
  567. package/dist/utils/deprecation.js.map +1 -0
  568. package/dist/utils/exif-orientation.d.ts +5 -0
  569. package/dist/utils/exif-orientation.d.ts.map +1 -0
  570. package/dist/utils/exif-orientation.js +158 -0
  571. package/dist/utils/exif-orientation.js.map +1 -0
  572. package/dist/utils/frontmatter.d.ts +8 -0
  573. package/dist/utils/frontmatter.d.ts.map +1 -0
  574. package/dist/utils/frontmatter.js +26 -0
  575. package/dist/utils/frontmatter.js.map +1 -0
  576. package/dist/utils/fs-watch.d.ts +5 -0
  577. package/dist/utils/fs-watch.d.ts.map +1 -0
  578. package/dist/utils/fs-watch.js +25 -0
  579. package/dist/utils/fs-watch.js.map +1 -0
  580. package/dist/utils/git.d.ts +26 -0
  581. package/dist/utils/git.d.ts.map +1 -0
  582. package/dist/utils/git.js +195 -0
  583. package/dist/utils/git.js.map +1 -0
  584. package/dist/utils/html.d.ts +7 -0
  585. package/dist/utils/html.d.ts.map +1 -0
  586. package/dist/utils/html.js +40 -0
  587. package/dist/utils/html.js.map +1 -0
  588. package/dist/utils/image-convert.d.ts +10 -0
  589. package/dist/utils/image-convert.d.ts.map +1 -0
  590. package/dist/utils/image-convert.js +45 -0
  591. package/dist/utils/image-convert.js.map +1 -0
  592. package/dist/utils/image-process.d.ts +18 -0
  593. package/dist/utils/image-process.d.ts.map +1 -0
  594. package/dist/utils/image-process.js +83 -0
  595. package/dist/utils/image-process.js.map +1 -0
  596. package/dist/utils/image-resize-core.d.ts +30 -0
  597. package/dist/utils/image-resize-core.d.ts.map +1 -0
  598. package/dist/utils/image-resize-core.js +124 -0
  599. package/dist/utils/image-resize-core.js.map +1 -0
  600. package/dist/utils/image-resize-worker.d.ts +2 -0
  601. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  602. package/dist/utils/image-resize-worker.js +31 -0
  603. package/dist/utils/image-resize-worker.js.map +1 -0
  604. package/dist/utils/image-resize.d.ts +16 -0
  605. package/dist/utils/image-resize.d.ts.map +1 -0
  606. package/dist/utils/image-resize.js +97 -0
  607. package/dist/utils/image-resize.js.map +1 -0
  608. package/dist/utils/json.d.ts +3 -0
  609. package/dist/utils/json.d.ts.map +1 -0
  610. package/dist/utils/json.js +7 -0
  611. package/dist/utils/json.js.map +1 -0
  612. package/dist/utils/mime.d.ts +3 -0
  613. package/dist/utils/mime.d.ts.map +1 -0
  614. package/dist/utils/mime.js +110 -0
  615. package/dist/utils/mime.js.map +1 -0
  616. package/dist/utils/open-browser.d.ts +9 -0
  617. package/dist/utils/open-browser.d.ts.map +1 -0
  618. package/dist/utils/open-browser.js +22 -0
  619. package/dist/utils/open-browser.js.map +1 -0
  620. package/dist/utils/paths.d.ts +31 -0
  621. package/dist/utils/paths.d.ts.map +1 -0
  622. package/dist/utils/paths.js +92 -0
  623. package/dist/utils/paths.js.map +1 -0
  624. package/dist/utils/photon.d.ts +21 -0
  625. package/dist/utils/photon.d.ts.map +1 -0
  626. package/dist/utils/photon.js +121 -0
  627. package/dist/utils/photon.js.map +1 -0
  628. package/dist/utils/pi-user-agent.d.ts +2 -0
  629. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  630. package/dist/utils/pi-user-agent.js +5 -0
  631. package/dist/utils/pi-user-agent.js.map +1 -0
  632. package/dist/utils/shell.d.ts +31 -0
  633. package/dist/utils/shell.d.ts.map +1 -0
  634. package/dist/utils/shell.js +202 -0
  635. package/dist/utils/shell.js.map +1 -0
  636. package/dist/utils/sleep.d.ts +5 -0
  637. package/dist/utils/sleep.d.ts.map +1 -0
  638. package/dist/utils/sleep.js +17 -0
  639. package/dist/utils/sleep.js.map +1 -0
  640. package/dist/utils/syntax-highlight.d.ts +12 -0
  641. package/dist/utils/syntax-highlight.d.ts.map +1 -0
  642. package/dist/utils/syntax-highlight.js +118 -0
  643. package/dist/utils/syntax-highlight.js.map +1 -0
  644. package/dist/utils/tools-manager.d.ts +3 -0
  645. package/dist/utils/tools-manager.d.ts.map +1 -0
  646. package/dist/utils/tools-manager.js +328 -0
  647. package/dist/utils/tools-manager.js.map +1 -0
  648. package/dist/utils/version-check.d.ts +15 -0
  649. package/dist/utils/version-check.d.ts.map +1 -0
  650. package/dist/utils/version-check.js +59 -0
  651. package/dist/utils/version-check.js.map +1 -0
  652. package/dist/utils/windows-self-update.d.ts +3 -0
  653. package/dist/utils/windows-self-update.d.ts.map +1 -0
  654. package/dist/utils/windows-self-update.js +77 -0
  655. package/dist/utils/windows-self-update.js.map +1 -0
  656. package/docs/compaction.md +396 -0
  657. package/docs/containerization.md +111 -0
  658. package/docs/custom-provider.md +737 -0
  659. package/docs/development.md +71 -0
  660. package/docs/docs.json +156 -0
  661. package/docs/extensions.md +2695 -0
  662. package/docs/images/doom-extension.png +0 -0
  663. package/docs/images/exy.png +0 -0
  664. package/docs/images/interactive-mode.png +0 -0
  665. package/docs/images/tree-view.png +0 -0
  666. package/docs/index.md +82 -0
  667. package/docs/json.md +82 -0
  668. package/docs/keybindings.md +197 -0
  669. package/docs/models.md +495 -0
  670. package/docs/packages.md +227 -0
  671. package/docs/prompt-templates.md +95 -0
  672. package/docs/providers.md +275 -0
  673. package/docs/quickstart.md +165 -0
  674. package/docs/rpc.md +1470 -0
  675. package/docs/sdk.md +1143 -0
  676. package/docs/security.md +59 -0
  677. package/docs/session-format.md +412 -0
  678. package/docs/sessions.md +145 -0
  679. package/docs/settings.md +318 -0
  680. package/docs/shell-aliases.md +13 -0
  681. package/docs/skills.md +231 -0
  682. package/docs/terminal-setup.md +142 -0
  683. package/docs/termux.md +127 -0
  684. package/docs/themes.md +295 -0
  685. package/docs/tmux.md +63 -0
  686. package/docs/tui.md +927 -0
  687. package/docs/usage.md +308 -0
  688. package/docs/windows.md +17 -0
  689. package/examples/README.md +25 -0
  690. package/examples/extensions/README.md +211 -0
  691. package/examples/extensions/auto-commit-on-exit.ts +49 -0
  692. package/examples/extensions/bash-spawn-hook.ts +30 -0
  693. package/examples/extensions/bookmark.ts +50 -0
  694. package/examples/extensions/border-status-editor.ts +150 -0
  695. package/examples/extensions/built-in-tool-renderer.ts +249 -0
  696. package/examples/extensions/claude-rules.ts +86 -0
  697. package/examples/extensions/commands.ts +72 -0
  698. package/examples/extensions/confirm-destructive.ts +59 -0
  699. package/examples/extensions/custom-compaction.ts +128 -0
  700. package/examples/extensions/custom-footer.ts +64 -0
  701. package/examples/extensions/custom-header.ts +73 -0
  702. package/examples/extensions/custom-provider-anthropic/index.ts +604 -0
  703. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  704. package/examples/extensions/custom-provider-anthropic/package.json +19 -0
  705. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -0
  706. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  707. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
  708. package/examples/extensions/dirty-repo-guard.ts +56 -0
  709. package/examples/extensions/doom-overlay/README.md +46 -0
  710. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
  711. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  712. package/examples/extensions/doom-overlay/doom/build.sh +152 -0
  713. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  714. package/examples/extensions/doom-overlay/doom-component.ts +132 -0
  715. package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
  716. package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
  717. package/examples/extensions/doom-overlay/index.ts +74 -0
  718. package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  719. package/examples/extensions/dynamic-resources/SKILL.md +8 -0
  720. package/examples/extensions/dynamic-resources/dynamic.json +79 -0
  721. package/examples/extensions/dynamic-resources/dynamic.md +5 -0
  722. package/examples/extensions/dynamic-resources/index.ts +15 -0
  723. package/examples/extensions/dynamic-tools.ts +74 -0
  724. package/examples/extensions/event-bus.ts +43 -0
  725. package/examples/extensions/file-trigger.ts +41 -0
  726. package/examples/extensions/git-checkpoint.ts +53 -0
  727. package/examples/extensions/git-merge-and-resolve.ts +115 -0
  728. package/examples/extensions/github-issue-autocomplete.ts +185 -0
  729. package/examples/extensions/gondolin/index.ts +531 -0
  730. package/examples/extensions/gondolin/package-lock.json +185 -0
  731. package/examples/extensions/gondolin/package.json +19 -0
  732. package/examples/extensions/handoff.ts +191 -0
  733. package/examples/extensions/hello.ts +26 -0
  734. package/examples/extensions/hidden-thinking-label.ts +53 -0
  735. package/examples/extensions/inline-bash.ts +94 -0
  736. package/examples/extensions/input-transform-streaming.ts +39 -0
  737. package/examples/extensions/input-transform.ts +43 -0
  738. package/examples/extensions/interactive-shell.ts +196 -0
  739. package/examples/extensions/mac-system-theme.ts +47 -0
  740. package/examples/extensions/message-renderer.ts +59 -0
  741. package/examples/extensions/minimal-mode.ts +426 -0
  742. package/examples/extensions/modal-editor.ts +85 -0
  743. package/examples/extensions/model-status.ts +31 -0
  744. package/examples/extensions/notify.ts +55 -0
  745. package/examples/extensions/overlay-qa-tests.ts +1450 -0
  746. package/examples/extensions/overlay-test.ts +153 -0
  747. package/examples/extensions/permission-gate.ts +34 -0
  748. package/examples/extensions/pirate.ts +47 -0
  749. package/examples/extensions/plan-mode/README.md +66 -0
  750. package/examples/extensions/plan-mode/index.ts +390 -0
  751. package/examples/extensions/plan-mode/utils.ts +168 -0
  752. package/examples/extensions/preset.ts +436 -0
  753. package/examples/extensions/project-trust.ts +64 -0
  754. package/examples/extensions/prompt-customizer.ts +97 -0
  755. package/examples/extensions/protected-paths.ts +30 -0
  756. package/examples/extensions/provider-payload.ts +18 -0
  757. package/examples/extensions/qna.ts +122 -0
  758. package/examples/extensions/question.ts +285 -0
  759. package/examples/extensions/questionnaire.ts +448 -0
  760. package/examples/extensions/rainbow-editor.ts +88 -0
  761. package/examples/extensions/reload-runtime.ts +37 -0
  762. package/examples/extensions/rpc-demo.ts +118 -0
  763. package/examples/extensions/sandbox/index.ts +321 -0
  764. package/examples/extensions/sandbox/package-lock.json +92 -0
  765. package/examples/extensions/sandbox/package.json +19 -0
  766. package/examples/extensions/send-user-message.ts +97 -0
  767. package/examples/extensions/session-name.ts +27 -0
  768. package/examples/extensions/shutdown-command.ts +63 -0
  769. package/examples/extensions/snake.ts +343 -0
  770. package/examples/extensions/space-invaders.ts +560 -0
  771. package/examples/extensions/ssh.ts +220 -0
  772. package/examples/extensions/status-line.ts +32 -0
  773. package/examples/extensions/structured-output.ts +65 -0
  774. package/examples/extensions/subagent/README.md +175 -0
  775. package/examples/extensions/subagent/agents/planner.md +37 -0
  776. package/examples/extensions/subagent/agents/reviewer.md +35 -0
  777. package/examples/extensions/subagent/agents/scout.md +50 -0
  778. package/examples/extensions/subagent/agents/worker.md +24 -0
  779. package/examples/extensions/subagent/agents.ts +126 -0
  780. package/examples/extensions/subagent/index.ts +1015 -0
  781. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  782. package/examples/extensions/subagent/prompts/implement.md +10 -0
  783. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  784. package/examples/extensions/summarize.ts +207 -0
  785. package/examples/extensions/system-prompt-header.ts +17 -0
  786. package/examples/extensions/tic-tac-toe.ts +1008 -0
  787. package/examples/extensions/timed-confirm.ts +70 -0
  788. package/examples/extensions/titlebar-spinner.ts +58 -0
  789. package/examples/extensions/todo.ts +297 -0
  790. package/examples/extensions/tool-override.ts +144 -0
  791. package/examples/extensions/tools.ts +146 -0
  792. package/examples/extensions/trigger-compact.ts +50 -0
  793. package/examples/extensions/truncated-tool.ts +195 -0
  794. package/examples/extensions/widget-placement.ts +9 -0
  795. package/examples/extensions/with-deps/index.ts +32 -0
  796. package/examples/extensions/with-deps/package-lock.json +31 -0
  797. package/examples/extensions/with-deps/package.json +22 -0
  798. package/examples/extensions/working-indicator.ts +123 -0
  799. package/examples/extensions/working-message-test.ts +25 -0
  800. package/examples/rpc-extension-ui.ts +632 -0
  801. package/examples/sdk/01-minimal.ts +26 -0
  802. package/examples/sdk/02-custom-model.ts +53 -0
  803. package/examples/sdk/03-custom-prompt.ts +75 -0
  804. package/examples/sdk/04-skills.ts +55 -0
  805. package/examples/sdk/05-tools.ts +48 -0
  806. package/examples/sdk/06-extensions.ts +99 -0
  807. package/examples/sdk/07-context-files.ts +47 -0
  808. package/examples/sdk/08-prompt-templates.ts +51 -0
  809. package/examples/sdk/09-api-keys-and-oauth.ts +52 -0
  810. package/examples/sdk/10-settings.ts +53 -0
  811. package/examples/sdk/11-sessions.ts +52 -0
  812. package/examples/sdk/12-full-control.ts +77 -0
  813. package/examples/sdk/13-session-runtime.ts +67 -0
  814. package/examples/sdk/README.md +144 -0
  815. package/npm-shrinkwrap.json +2071 -0
  816. package/package.json +122 -0
package/dist/config.js ADDED
@@ -0,0 +1,470 @@
1
+ import { accessSync, constants, existsSync, readFileSync, realpathSync } from "fs";
2
+ import { homedir } from "os";
3
+ import { basename, dirname, join, resolve, sep, win32 } from "path";
4
+ import { fileURLToPath } from "url";
5
+ import { spawnProcessSync } from "./utils/child-process.js";
6
+ import { normalizePath } from "./utils/paths.js";
7
+ // =============================================================================
8
+ // Package Detection
9
+ // =============================================================================
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = dirname(__filename);
12
+ /**
13
+ * Detect if we're running as a Bun compiled binary.
14
+ * Bun binaries have import.meta.url containing "$bunfs", "~BUN", or "%7EBUN" (Bun's virtual filesystem path)
15
+ */
16
+ export const isBunBinary = import.meta.url.includes("$bunfs") || import.meta.url.includes("~BUN") || import.meta.url.includes("%7EBUN");
17
+ /** Detect if Bun is the runtime (compiled binary or bun run) */
18
+ export const isBunRuntime = !!process.versions.bun;
19
+ function normalizeSelfUpdatePackageTarget(target) {
20
+ if (typeof target === "string") {
21
+ return { packageName: target, installSpec: target };
22
+ }
23
+ return { packageName: target.packageName, installSpec: target.installSpec ?? target.packageName };
24
+ }
25
+ function makeSelfUpdateCommand(installStep, uninstallStep) {
26
+ if (!uninstallStep)
27
+ return installStep;
28
+ return {
29
+ ...installStep,
30
+ display: `${uninstallStep.display} && ${installStep.display}`,
31
+ steps: [uninstallStep, installStep],
32
+ };
33
+ }
34
+ function makeSelfUpdateCommandStep(command, args) {
35
+ return {
36
+ command,
37
+ args,
38
+ display: [command, ...args].map((arg) => (/\s/.test(arg) ? `"${arg}"` : arg)).join(" "),
39
+ };
40
+ }
41
+ export function detectInstallMethod() {
42
+ if (isBunBinary) {
43
+ return "bun-binary";
44
+ }
45
+ const resolvedPath = `${__dirname}\0${process.execPath || ""}`.toLowerCase().replace(/\\/g, "/");
46
+ if (resolvedPath.includes("/pnpm/") || resolvedPath.includes("/.pnpm/")) {
47
+ return "pnpm";
48
+ }
49
+ if (resolvedPath.includes("/yarn/") || resolvedPath.includes("/.yarn/")) {
50
+ return "yarn";
51
+ }
52
+ if (isBunRuntime || resolvedPath.includes("/install/global/node_modules/")) {
53
+ return "bun";
54
+ }
55
+ if (resolvedPath.includes("/npm/") || resolvedPath.includes("/node_modules/")) {
56
+ return "npm";
57
+ }
58
+ return "unknown";
59
+ }
60
+ function getInferredNpmInstall() {
61
+ const packageDir = getPackageDir();
62
+ const path = process.platform === "win32" || packageDir.includes("\\") ? win32 : { basename, dirname };
63
+ const parent = path.dirname(packageDir);
64
+ let root;
65
+ if (path.basename(parent).startsWith("@") && path.basename(path.dirname(parent)) === "node_modules") {
66
+ root = path.dirname(parent);
67
+ }
68
+ else if (path.basename(parent) === "node_modules") {
69
+ root = parent;
70
+ }
71
+ if (!root)
72
+ return undefined;
73
+ const rootParent = path.dirname(root);
74
+ if (path.basename(rootParent) === "lib")
75
+ return { root, prefix: path.dirname(rootParent) };
76
+ // Windows global npm prefixes use `<prefix>\\node_modules`, which is
77
+ // indistinguishable from local project installs by path shape alone. Do not
78
+ // infer unsupported Windows custom prefixes without `npm root -g` evidence.
79
+ return undefined;
80
+ }
81
+ function getSelfUpdateCommandForMethod(method, installedPackageName, updatePackageTarget = installedPackageName, npmCommand) {
82
+ const target = normalizeSelfUpdatePackageTarget(updatePackageTarget);
83
+ switch (method) {
84
+ case "bun-binary":
85
+ return undefined;
86
+ case "pnpm": {
87
+ const match = readCommandOutput("pnpm", ["root", "-g"])
88
+ ? undefined
89
+ : /^(.*[\\/]global[\\/][^\\/]+)[\\/]\.pnpm[\\/]/.exec(getPackageDir());
90
+ const binDirArgs = match
91
+ ? [`--config.global-bin-dir=${process.env.PNPM_HOME || dirname(dirname(match[1]))}`]
92
+ : [];
93
+ return makeSelfUpdateCommand(makeSelfUpdateCommandStep("pnpm", [
94
+ "install",
95
+ "-g",
96
+ "--ignore-scripts",
97
+ "--config.minimumReleaseAge=0",
98
+ ...binDirArgs,
99
+ target.installSpec,
100
+ ]), target.packageName === installedPackageName
101
+ ? undefined
102
+ : makeSelfUpdateCommandStep("pnpm", ["remove", "-g", ...binDirArgs, installedPackageName]));
103
+ }
104
+ case "yarn":
105
+ return makeSelfUpdateCommand(makeSelfUpdateCommandStep("yarn", ["global", "add", "--ignore-scripts", target.installSpec]), target.packageName === installedPackageName
106
+ ? undefined
107
+ : makeSelfUpdateCommandStep("yarn", ["global", "remove", installedPackageName]));
108
+ case "bun":
109
+ return makeSelfUpdateCommand(makeSelfUpdateCommandStep("bun", [
110
+ "install",
111
+ "-g",
112
+ "--ignore-scripts",
113
+ "--minimum-release-age=0",
114
+ target.installSpec,
115
+ ]), target.packageName === installedPackageName
116
+ ? undefined
117
+ : makeSelfUpdateCommandStep("bun", ["uninstall", "-g", installedPackageName]));
118
+ case "npm": {
119
+ const [command = "npm", ...npmArgs] = npmCommand ?? [];
120
+ const inferred = npmCommand?.length ? undefined : getInferredNpmInstall();
121
+ const prefixArgs = [...npmArgs, ...(inferred ? ["--prefix", inferred.prefix] : [])];
122
+ const installStep = makeSelfUpdateCommandStep(command, [
123
+ ...prefixArgs,
124
+ "install",
125
+ "-g",
126
+ "--ignore-scripts",
127
+ "--min-release-age=0",
128
+ target.installSpec,
129
+ ]);
130
+ const uninstallStep = target.packageName === installedPackageName
131
+ ? undefined
132
+ : makeSelfUpdateCommandStep(command, [...prefixArgs, "uninstall", "-g", installedPackageName]);
133
+ return makeSelfUpdateCommand(installStep, uninstallStep);
134
+ }
135
+ case "unknown":
136
+ return undefined;
137
+ }
138
+ }
139
+ function readCommandOutput(command, args, options = {}) {
140
+ const result = spawnProcessSync(command, args, {
141
+ encoding: "utf-8",
142
+ stdio: ["ignore", "pipe", "pipe"],
143
+ });
144
+ if (result.status === 0)
145
+ return result.stdout.trim() || undefined;
146
+ if (options.requireSuccess) {
147
+ const reason = result.error?.message || result.stderr.trim() || `exit code ${result.status ?? "unknown"}`;
148
+ throw new Error(`Failed to run ${[command, ...args].join(" ")}: ${reason}`);
149
+ }
150
+ return undefined;
151
+ }
152
+ function getGlobalPackageRoots(method, _packageName, npmCommand) {
153
+ switch (method) {
154
+ case "npm": {
155
+ const configured = !!npmCommand?.length;
156
+ const [command = "npm", ...npmArgs] = npmCommand ?? [];
157
+ if (configured && command === "bun") {
158
+ const bunBin = readCommandOutput(command, [...npmArgs, "pm", "bin", "-g"], {
159
+ requireSuccess: true,
160
+ });
161
+ const roots = [join(homedir(), ".bun", "install", "global", "node_modules")];
162
+ if (bunBin) {
163
+ roots.push(join(dirname(bunBin), "install", "global", "node_modules"));
164
+ }
165
+ return roots;
166
+ }
167
+ const root = readCommandOutput(command, [...npmArgs, "root", "-g"], {
168
+ requireSuccess: configured,
169
+ });
170
+ const inferred = configured ? undefined : getInferredNpmInstall();
171
+ return [root, inferred?.root].filter((x) => !!x);
172
+ }
173
+ case "pnpm": {
174
+ const root = readCommandOutput("pnpm", ["root", "-g"]);
175
+ if (root)
176
+ return [root, dirname(root)];
177
+ const match = /^(.*[\\/]global[\\/][^\\/]+)[\\/]\.pnpm[\\/]/.exec(getPackageDir());
178
+ return match ? [match[1]] : [];
179
+ }
180
+ case "yarn": {
181
+ const dir = readCommandOutput("yarn", ["global", "dir"]);
182
+ return dir ? [dir, join(dir, "node_modules")] : [];
183
+ }
184
+ case "bun": {
185
+ const bunBin = readCommandOutput("bun", ["pm", "bin", "-g"]);
186
+ const roots = [join(homedir(), ".bun", "install", "global", "node_modules")];
187
+ if (bunBin) {
188
+ roots.push(join(dirname(bunBin), "install", "global", "node_modules"));
189
+ }
190
+ return roots;
191
+ }
192
+ case "bun-binary":
193
+ case "unknown":
194
+ return [];
195
+ }
196
+ }
197
+ function normalizeExistingPathForComparison(path, resolveSymlinks) {
198
+ const resolvedPath = resolve(path);
199
+ if (!existsSync(resolvedPath)) {
200
+ return undefined;
201
+ }
202
+ let normalizedPath = resolvedPath;
203
+ if (resolveSymlinks) {
204
+ try {
205
+ normalizedPath = realpathSync(resolvedPath);
206
+ }
207
+ catch {
208
+ return undefined;
209
+ }
210
+ }
211
+ if (process.platform === "win32") {
212
+ normalizedPath = normalizedPath.toLowerCase();
213
+ }
214
+ return normalizedPath;
215
+ }
216
+ function getPathComparisonCandidates(path) {
217
+ return Array.from(new Set([normalizeExistingPathForComparison(path, false), normalizeExistingPathForComparison(path, true)].filter((candidate) => !!candidate)));
218
+ }
219
+ function getEntrypointPackageDir() {
220
+ const entrypoint = process.argv[1];
221
+ if (!entrypoint)
222
+ return undefined;
223
+ let dir = dirname(entrypoint);
224
+ while (dir !== dirname(dir)) {
225
+ if (existsSync(join(dir, "package.json"))) {
226
+ return dir;
227
+ }
228
+ dir = dirname(dir);
229
+ }
230
+ return undefined;
231
+ }
232
+ function isSelfUpdatePathWritable() {
233
+ const packageDir = getPackageDir();
234
+ try {
235
+ accessSync(packageDir, constants.W_OK);
236
+ accessSync(dirname(packageDir), constants.W_OK);
237
+ return true;
238
+ }
239
+ catch {
240
+ return false;
241
+ }
242
+ }
243
+ function isManagedByGlobalPackageManager(method, packageName, npmCommand) {
244
+ const packageDirs = [getPackageDir(), getEntrypointPackageDir()].filter((dir) => !!dir);
245
+ const packageDirCandidates = packageDirs.flatMap((dir) => getPathComparisonCandidates(dir));
246
+ return getGlobalPackageRoots(method, packageName, npmCommand).some((root) => {
247
+ return getPathComparisonCandidates(root).some((normalizedRoot) => {
248
+ const rootPrefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;
249
+ return packageDirCandidates.some((packageDir) => packageDir.startsWith(rootPrefix));
250
+ });
251
+ });
252
+ }
253
+ export function getSelfUpdateCommand(packageName, npmCommand, updatePackageTarget = packageName) {
254
+ const method = detectInstallMethod();
255
+ const command = getSelfUpdateCommandForMethod(method, packageName, updatePackageTarget, npmCommand);
256
+ if (!command || !isManagedByGlobalPackageManager(method, packageName, npmCommand) || !isSelfUpdatePathWritable()) {
257
+ return undefined;
258
+ }
259
+ return command;
260
+ }
261
+ export function getSelfUpdateUnavailableInstruction(packageName, npmCommand, updatePackageTarget = packageName) {
262
+ const method = detectInstallMethod();
263
+ const target = normalizeSelfUpdatePackageTarget(updatePackageTarget);
264
+ if (method === "bun-binary") {
265
+ return `Download from: https://github.com/earendil-works/pi-mono/releases/latest`;
266
+ }
267
+ const command = getSelfUpdateCommandForMethod(method, packageName, target, npmCommand);
268
+ if (command) {
269
+ if (isManagedByGlobalPackageManager(method, packageName, npmCommand) && !isSelfUpdatePathWritable()) {
270
+ return `This installation is managed by a global ${method} install, but the install path is not writable. Update it yourself with: ${command.display}`;
271
+ }
272
+ return `This installation is not managed by a global ${method} install. Update it with the package manager, wrapper, or source checkout that provides it.`;
273
+ }
274
+ return `Update ${target.installSpec} using the package manager, wrapper, or source checkout that provides this installation.`;
275
+ }
276
+ export function getUpdateInstruction(packageName) {
277
+ const method = detectInstallMethod();
278
+ const command = getSelfUpdateCommandForMethod(method, packageName);
279
+ if (command) {
280
+ return `Run: ${command.display}`;
281
+ }
282
+ return getSelfUpdateUnavailableInstruction(packageName);
283
+ }
284
+ // =============================================================================
285
+ // Package Asset Paths (shipped with executable)
286
+ // =============================================================================
287
+ /**
288
+ * Get the base directory for resolving package assets (themes, package.json, README.md, CHANGELOG.md).
289
+ * - For Bun binary: returns the directory containing the executable
290
+ * - For Node.js (dist/): returns __dirname (the dist/ directory)
291
+ * - For tsx (src/): returns parent directory (the package root)
292
+ */
293
+ export function getPackageDir() {
294
+ // Allow override via environment variable (useful for Nix/Guix where store paths tokenize poorly)
295
+ const envDir = process.env.PI_PACKAGE_DIR;
296
+ if (envDir) {
297
+ return normalizePath(envDir);
298
+ }
299
+ if (isBunBinary) {
300
+ // Bun binary: process.execPath points to the compiled executable
301
+ return dirname(process.execPath);
302
+ }
303
+ // Node.js: walk up from __dirname until we find package.json
304
+ let dir = __dirname;
305
+ while (dir !== dirname(dir)) {
306
+ if (existsSync(join(dir, "package.json"))) {
307
+ return dir;
308
+ }
309
+ dir = dirname(dir);
310
+ }
311
+ // Fallback (shouldn't happen)
312
+ return __dirname;
313
+ }
314
+ /**
315
+ * Get path to built-in themes directory (shipped with package)
316
+ * - For Bun binary: theme/ next to executable
317
+ * - For Node.js (dist/): dist/modes/interactive/theme/
318
+ * - For tsx (src/): src/modes/interactive/theme/
319
+ */
320
+ export function getThemesDir() {
321
+ if (isBunBinary) {
322
+ return join(getPackageDir(), "theme");
323
+ }
324
+ // Theme is in modes/interactive/theme/ relative to src/ or dist/
325
+ const packageDir = getPackageDir();
326
+ const srcOrDist = existsSync(join(packageDir, "src")) ? "src" : "dist";
327
+ return join(packageDir, srcOrDist, "modes", "interactive", "theme");
328
+ }
329
+ /**
330
+ * Get path to HTML export template directory (shipped with package)
331
+ * - For Bun binary: export-html/ next to executable
332
+ * - For Node.js (dist/): dist/core/export-html/
333
+ * - For tsx (src/): src/core/export-html/
334
+ */
335
+ export function getExportTemplateDir() {
336
+ if (isBunBinary) {
337
+ return join(getPackageDir(), "export-html");
338
+ }
339
+ const packageDir = getPackageDir();
340
+ const srcOrDist = existsSync(join(packageDir, "src")) ? "src" : "dist";
341
+ return join(packageDir, srcOrDist, "core", "export-html");
342
+ }
343
+ /** Get path to package.json */
344
+ export function getPackageJsonPath() {
345
+ return join(getPackageDir(), "package.json");
346
+ }
347
+ /** Get path to README.md */
348
+ export function getReadmePath() {
349
+ return resolve(join(getPackageDir(), "README.md"));
350
+ }
351
+ /** Get path to docs directory */
352
+ export function getDocsPath() {
353
+ return resolve(join(getPackageDir(), "docs"));
354
+ }
355
+ /** Get path to examples directory */
356
+ export function getExamplesPath() {
357
+ return resolve(join(getPackageDir(), "examples"));
358
+ }
359
+ /** Get path to CHANGELOG.md */
360
+ export function getChangelogPath() {
361
+ return resolve(join(getPackageDir(), "CHANGELOG.md"));
362
+ }
363
+ /**
364
+ * Get path to built-in interactive assets directory.
365
+ * - For Bun binary: assets/ next to executable
366
+ * - For Node.js (dist/): dist/modes/interactive/assets/
367
+ * - For tsx (src/): src/modes/interactive/assets/
368
+ */
369
+ export function getInteractiveAssetsDir() {
370
+ if (isBunBinary) {
371
+ return join(getPackageDir(), "assets");
372
+ }
373
+ const packageDir = getPackageDir();
374
+ const srcOrDist = existsSync(join(packageDir, "src")) ? "src" : "dist";
375
+ return join(packageDir, srcOrDist, "modes", "interactive", "assets");
376
+ }
377
+ /** Get path to a bundled interactive asset */
378
+ export function getBundledInteractiveAssetPath(name) {
379
+ return join(getInteractiveAssetsDir(), name);
380
+ }
381
+ let pkg = {};
382
+ try {
383
+ pkg = JSON.parse(readFileSync(getPackageJsonPath(), "utf-8"));
384
+ }
385
+ catch (e) {
386
+ const err = e;
387
+ if (err.code !== "ENOENT")
388
+ throw e;
389
+ }
390
+ const piConfigName = pkg.piConfig?.name;
391
+ export const PACKAGE_NAME = pkg.name || "@earendil-works/pi-coding-agent";
392
+ export const APP_NAME = piConfigName || "pi";
393
+ export const APP_TITLE = piConfigName ? APP_NAME : "π";
394
+ export const CONFIG_DIR_NAME = pkg.piConfig?.configDir || ".pi";
395
+ export const VERSION = pkg.version || "0.0.0";
396
+ // e.g., PI_CODING_AGENT_DIR or PI_CANTE_CODING_AGENT_DIR (non-alphanumerics sanitized to _).
397
+ // Rebranded distributions keep reading the official PI_* variables as a fallback so
398
+ // existing tooling, extensions, and tests keep working (see getEnvWithOfficialFallback).
399
+ const ENV_APP_PREFIX = APP_NAME.toUpperCase().replace(/[^A-Z0-9]+/g, "_");
400
+ export const ENV_AGENT_DIR = `${ENV_APP_PREFIX}_CODING_AGENT_DIR`;
401
+ export const ENV_SESSION_DIR = `${ENV_APP_PREFIX}_CODING_AGENT_SESSION_DIR`;
402
+ const OFFICIAL_ENV_AGENT_DIR = "PI_CODING_AGENT_DIR";
403
+ const OFFICIAL_ENV_SESSION_DIR = "PI_CODING_AGENT_SESSION_DIR";
404
+ /** Read a distro env var, falling back to the official PI_* name for compatibility. */
405
+ export function getEnvWithOfficialFallback(envName) {
406
+ if (process.env[envName])
407
+ return process.env[envName];
408
+ if (envName === ENV_AGENT_DIR)
409
+ return process.env[OFFICIAL_ENV_AGENT_DIR];
410
+ if (envName === ENV_SESSION_DIR)
411
+ return process.env[OFFICIAL_ENV_SESSION_DIR];
412
+ return undefined;
413
+ }
414
+ export function expandTildePath(path) {
415
+ return normalizePath(path);
416
+ }
417
+ const DEFAULT_SHARE_VIEWER_URL = "https://pi.dev/session/";
418
+ /** Get the share viewer URL for a gist ID */
419
+ export function getShareViewerUrl(gistId) {
420
+ const baseUrl = process.env.PI_SHARE_VIEWER_URL || DEFAULT_SHARE_VIEWER_URL;
421
+ return `${baseUrl}#${gistId}`;
422
+ }
423
+ // =============================================================================
424
+ // User Config Paths (~/.pi/agent/*)
425
+ // =============================================================================
426
+ /** Get the agent config directory (e.g., ~/.pi/agent/) */
427
+ export function getAgentDir() {
428
+ const envDir = getEnvWithOfficialFallback(ENV_AGENT_DIR);
429
+ if (envDir) {
430
+ return expandTildePath(envDir);
431
+ }
432
+ return join(homedir(), CONFIG_DIR_NAME, "agent");
433
+ }
434
+ /** Get path to user's custom themes directory */
435
+ export function getCustomThemesDir() {
436
+ return join(getAgentDir(), "themes");
437
+ }
438
+ /** Get path to models.json */
439
+ export function getModelsPath() {
440
+ return join(getAgentDir(), "models.json");
441
+ }
442
+ /** Get path to auth.json */
443
+ export function getAuthPath() {
444
+ return join(getAgentDir(), "auth.json");
445
+ }
446
+ /** Get path to settings.json */
447
+ export function getSettingsPath() {
448
+ return join(getAgentDir(), "settings.json");
449
+ }
450
+ /** Get path to tools directory */
451
+ export function getToolsDir() {
452
+ return join(getAgentDir(), "tools");
453
+ }
454
+ /** Get path to managed binaries directory (fd, rg) */
455
+ export function getBinDir() {
456
+ return join(getAgentDir(), "bin");
457
+ }
458
+ /** Get path to prompt templates directory */
459
+ export function getPromptsDir() {
460
+ return join(getAgentDir(), "prompts");
461
+ }
462
+ /** Get path to sessions directory */
463
+ export function getSessionsDir() {
464
+ return join(getAgentDir(), "sessions");
465
+ }
466
+ /** Get path to debug log file */
467
+ export function getDebugLogPath() {
468
+ return join(getAgentDir(), `${APP_NAME}-debug.log`);
469
+ }
470
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { accessSync, constants, existsSync, readFileSync, realpathSync } from \"fs\";\nimport { homedir } from \"os\";\nimport { basename, dirname, join, resolve, sep, win32 } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { spawnProcessSync } from \"./utils/child-process.ts\";\nimport { normalizePath } from \"./utils/paths.ts\";\n\n// =============================================================================\n// Package Detection\n// =============================================================================\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Detect if we're running as a Bun compiled binary.\n * Bun binaries have import.meta.url containing \"$bunfs\", \"~BUN\", or \"%7EBUN\" (Bun's virtual filesystem path)\n */\nexport const isBunBinary =\n\timport.meta.url.includes(\"$bunfs\") || import.meta.url.includes(\"~BUN\") || import.meta.url.includes(\"%7EBUN\");\n\n/** Detect if Bun is the runtime (compiled binary or bun run) */\nexport const isBunRuntime = !!process.versions.bun;\n\n// =============================================================================\n// Install Method Detection\n// =============================================================================\n\nexport type InstallMethod = \"bun-binary\" | \"npm\" | \"pnpm\" | \"yarn\" | \"bun\" | \"unknown\";\n\ninterface SelfUpdateCommandStep {\n\tcommand: string;\n\targs: string[];\n\tdisplay: string;\n}\n\nexport interface SelfUpdateCommand extends SelfUpdateCommandStep {\n\tsteps?: SelfUpdateCommandStep[];\n}\n\nexport type SelfUpdatePackageTarget = string | { packageName: string; installSpec?: string };\n\nfunction normalizeSelfUpdatePackageTarget(target: SelfUpdatePackageTarget): {\n\tpackageName: string;\n\tinstallSpec: string;\n} {\n\tif (typeof target === \"string\") {\n\t\treturn { packageName: target, installSpec: target };\n\t}\n\treturn { packageName: target.packageName, installSpec: target.installSpec ?? target.packageName };\n}\n\nfunction makeSelfUpdateCommand(\n\tinstallStep: SelfUpdateCommandStep,\n\tuninstallStep?: SelfUpdateCommandStep,\n): SelfUpdateCommand {\n\tif (!uninstallStep) return installStep;\n\treturn {\n\t\t...installStep,\n\t\tdisplay: `${uninstallStep.display} && ${installStep.display}`,\n\t\tsteps: [uninstallStep, installStep],\n\t};\n}\n\nfunction makeSelfUpdateCommandStep(command: string, args: string[]): SelfUpdateCommandStep {\n\treturn {\n\t\tcommand,\n\t\targs,\n\t\tdisplay: [command, ...args].map((arg) => (/\\s/.test(arg) ? `\"${arg}\"` : arg)).join(\" \"),\n\t};\n}\n\nexport function detectInstallMethod(): InstallMethod {\n\tif (isBunBinary) {\n\t\treturn \"bun-binary\";\n\t}\n\n\tconst resolvedPath = `${__dirname}\\0${process.execPath || \"\"}`.toLowerCase().replace(/\\\\/g, \"/\");\n\n\tif (resolvedPath.includes(\"/pnpm/\") || resolvedPath.includes(\"/.pnpm/\")) {\n\t\treturn \"pnpm\";\n\t}\n\tif (resolvedPath.includes(\"/yarn/\") || resolvedPath.includes(\"/.yarn/\")) {\n\t\treturn \"yarn\";\n\t}\n\tif (isBunRuntime || resolvedPath.includes(\"/install/global/node_modules/\")) {\n\t\treturn \"bun\";\n\t}\n\tif (resolvedPath.includes(\"/npm/\") || resolvedPath.includes(\"/node_modules/\")) {\n\t\treturn \"npm\";\n\t}\n\n\treturn \"unknown\";\n}\n\nfunction getInferredNpmInstall(): { root: string; prefix: string } | undefined {\n\tconst packageDir = getPackageDir();\n\tconst path = process.platform === \"win32\" || packageDir.includes(\"\\\\\") ? win32 : { basename, dirname };\n\tconst parent = path.dirname(packageDir);\n\tlet root: string | undefined;\n\tif (path.basename(parent).startsWith(\"@\") && path.basename(path.dirname(parent)) === \"node_modules\") {\n\t\troot = path.dirname(parent);\n\t} else if (path.basename(parent) === \"node_modules\") {\n\t\troot = parent;\n\t}\n\tif (!root) return undefined;\n\tconst rootParent = path.dirname(root);\n\tif (path.basename(rootParent) === \"lib\") return { root, prefix: path.dirname(rootParent) };\n\t// Windows global npm prefixes use `<prefix>\\\\node_modules`, which is\n\t// indistinguishable from local project installs by path shape alone. Do not\n\t// infer unsupported Windows custom prefixes without `npm root -g` evidence.\n\treturn undefined;\n}\n\nfunction getSelfUpdateCommandForMethod(\n\tmethod: InstallMethod,\n\tinstalledPackageName: string,\n\tupdatePackageTarget: SelfUpdatePackageTarget = installedPackageName,\n\tnpmCommand?: string[],\n): SelfUpdateCommand | undefined {\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tswitch (method) {\n\t\tcase \"bun-binary\":\n\t\t\treturn undefined;\n\t\tcase \"pnpm\": {\n\t\t\tconst match = readCommandOutput(\"pnpm\", [\"root\", \"-g\"])\n\t\t\t\t? undefined\n\t\t\t\t: /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\tconst binDirArgs = match\n\t\t\t\t? [`--config.global-bin-dir=${process.env.PNPM_HOME || dirname(dirname(match[1]))}`]\n\t\t\t\t: [];\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"pnpm\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--config.minimumReleaseAge=0\",\n\t\t\t\t\t...binDirArgs,\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"pnpm\", [\"remove\", \"-g\", ...binDirArgs, installedPackageName]),\n\t\t\t);\n\t\t}\n\t\tcase \"yarn\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"yarn\", [\"global\", \"add\", \"--ignore-scripts\", target.installSpec]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"yarn\", [\"global\", \"remove\", installedPackageName]),\n\t\t\t);\n\t\tcase \"bun\":\n\t\t\treturn makeSelfUpdateCommand(\n\t\t\t\tmakeSelfUpdateCommandStep(\"bun\", [\n\t\t\t\t\t\"install\",\n\t\t\t\t\t\"-g\",\n\t\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\t\"--minimum-release-age=0\",\n\t\t\t\t\ttarget.installSpec,\n\t\t\t\t]),\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(\"bun\", [\"uninstall\", \"-g\", installedPackageName]),\n\t\t\t);\n\t\tcase \"npm\": {\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tconst inferred = npmCommand?.length ? undefined : getInferredNpmInstall();\n\t\t\tconst prefixArgs = [...npmArgs, ...(inferred ? [\"--prefix\", inferred.prefix] : [])];\n\t\t\tconst installStep = makeSelfUpdateCommandStep(command, [\n\t\t\t\t...prefixArgs,\n\t\t\t\t\"install\",\n\t\t\t\t\"-g\",\n\t\t\t\t\"--ignore-scripts\",\n\t\t\t\t\"--min-release-age=0\",\n\t\t\t\ttarget.installSpec,\n\t\t\t]);\n\t\t\tconst uninstallStep =\n\t\t\t\ttarget.packageName === installedPackageName\n\t\t\t\t\t? undefined\n\t\t\t\t\t: makeSelfUpdateCommandStep(command, [...prefixArgs, \"uninstall\", \"-g\", installedPackageName]);\n\t\t\treturn makeSelfUpdateCommand(installStep, uninstallStep);\n\t\t}\n\t\tcase \"unknown\":\n\t\t\treturn undefined;\n\t}\n}\n\nfunction readCommandOutput(\n\tcommand: string,\n\targs: string[],\n\toptions: { requireSuccess?: boolean } = {},\n): string | undefined {\n\tconst result = spawnProcessSync(command, args, {\n\t\tencoding: \"utf-8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t});\n\tif (result.status === 0) return result.stdout.trim() || undefined;\n\tif (options.requireSuccess) {\n\t\tconst reason = result.error?.message || result.stderr.trim() || `exit code ${result.status ?? \"unknown\"}`;\n\t\tthrow new Error(`Failed to run ${[command, ...args].join(\" \")}: ${reason}`);\n\t}\n\treturn undefined;\n}\n\nfunction getGlobalPackageRoots(method: InstallMethod, _packageName: string, npmCommand?: string[]): string[] {\n\tswitch (method) {\n\t\tcase \"npm\": {\n\t\t\tconst configured = !!npmCommand?.length;\n\t\t\tconst [command = \"npm\", ...npmArgs] = npmCommand ?? [];\n\t\t\tif (configured && command === \"bun\") {\n\t\t\t\tconst bunBin = readCommandOutput(command, [...npmArgs, \"pm\", \"bin\", \"-g\"], {\n\t\t\t\t\trequireSuccess: true,\n\t\t\t\t});\n\t\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\t\tif (bunBin) {\n\t\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t\t}\n\t\t\t\treturn roots;\n\t\t\t}\n\t\t\tconst root = readCommandOutput(command, [...npmArgs, \"root\", \"-g\"], {\n\t\t\t\trequireSuccess: configured,\n\t\t\t});\n\t\t\tconst inferred = configured ? undefined : getInferredNpmInstall();\n\t\t\treturn [root, inferred?.root].filter((x): x is string => !!x);\n\t\t}\n\t\tcase \"pnpm\": {\n\t\t\tconst root = readCommandOutput(\"pnpm\", [\"root\", \"-g\"]);\n\t\t\tif (root) return [root, dirname(root)];\n\t\t\tconst match = /^(.*[\\\\/]global[\\\\/][^\\\\/]+)[\\\\/]\\.pnpm[\\\\/]/.exec(getPackageDir());\n\t\t\treturn match ? [match[1]] : [];\n\t\t}\n\t\tcase \"yarn\": {\n\t\t\tconst dir = readCommandOutput(\"yarn\", [\"global\", \"dir\"]);\n\t\t\treturn dir ? [dir, join(dir, \"node_modules\")] : [];\n\t\t}\n\t\tcase \"bun\": {\n\t\t\tconst bunBin = readCommandOutput(\"bun\", [\"pm\", \"bin\", \"-g\"]);\n\t\t\tconst roots = [join(homedir(), \".bun\", \"install\", \"global\", \"node_modules\")];\n\t\t\tif (bunBin) {\n\t\t\t\troots.push(join(dirname(bunBin), \"install\", \"global\", \"node_modules\"));\n\t\t\t}\n\t\t\treturn roots;\n\t\t}\n\t\tcase \"bun-binary\":\n\t\tcase \"unknown\":\n\t\t\treturn [];\n\t}\n}\n\nfunction normalizeExistingPathForComparison(path: string, resolveSymlinks: boolean): string | undefined {\n\tconst resolvedPath = resolve(path);\n\tif (!existsSync(resolvedPath)) {\n\t\treturn undefined;\n\t}\n\tlet normalizedPath = resolvedPath;\n\tif (resolveSymlinks) {\n\t\ttry {\n\t\t\tnormalizedPath = realpathSync(resolvedPath);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (process.platform === \"win32\") {\n\t\tnormalizedPath = normalizedPath.toLowerCase();\n\t}\n\treturn normalizedPath;\n}\n\nfunction getPathComparisonCandidates(path: string): string[] {\n\treturn Array.from(\n\t\tnew Set(\n\t\t\t[normalizeExistingPathForComparison(path, false), normalizeExistingPathForComparison(path, true)].filter(\n\t\t\t\t(candidate): candidate is string => !!candidate,\n\t\t\t),\n\t\t),\n\t);\n}\n\nfunction getEntrypointPackageDir(): string | undefined {\n\tconst entrypoint = process.argv[1];\n\tif (!entrypoint) return undefined;\n\tlet dir = dirname(entrypoint);\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn undefined;\n}\n\nfunction isSelfUpdatePathWritable(): boolean {\n\tconst packageDir = getPackageDir();\n\ttry {\n\t\taccessSync(packageDir, constants.W_OK);\n\t\taccessSync(dirname(packageDir), constants.W_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isManagedByGlobalPackageManager(method: InstallMethod, packageName: string, npmCommand?: string[]): boolean {\n\tconst packageDirs = [getPackageDir(), getEntrypointPackageDir()].filter((dir): dir is string => !!dir);\n\tconst packageDirCandidates = packageDirs.flatMap((dir) => getPathComparisonCandidates(dir));\n\treturn getGlobalPackageRoots(method, packageName, npmCommand).some((root) => {\n\t\treturn getPathComparisonCandidates(root).some((normalizedRoot) => {\n\t\t\tconst rootPrefix = normalizedRoot.endsWith(sep) ? normalizedRoot : `${normalizedRoot}${sep}`;\n\t\t\treturn packageDirCandidates.some((packageDir) => packageDir.startsWith(rootPrefix));\n\t\t});\n\t});\n}\n\nexport function getSelfUpdateCommand(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): SelfUpdateCommand | undefined {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, updatePackageTarget, npmCommand);\n\tif (!command || !isManagedByGlobalPackageManager(method, packageName, npmCommand) || !isSelfUpdatePathWritable()) {\n\t\treturn undefined;\n\t}\n\treturn command;\n}\n\nexport function getSelfUpdateUnavailableInstruction(\n\tpackageName: string,\n\tnpmCommand?: string[],\n\tupdatePackageTarget: SelfUpdatePackageTarget = packageName,\n): string {\n\tconst method = detectInstallMethod();\n\tconst target = normalizeSelfUpdatePackageTarget(updatePackageTarget);\n\tif (method === \"bun-binary\") {\n\t\treturn `Download from: https://github.com/earendil-works/pi-mono/releases/latest`;\n\t}\n\tconst command = getSelfUpdateCommandForMethod(method, packageName, target, npmCommand);\n\tif (command) {\n\t\tif (isManagedByGlobalPackageManager(method, packageName, npmCommand) && !isSelfUpdatePathWritable()) {\n\t\t\treturn `This installation is managed by a global ${method} install, but the install path is not writable. Update it yourself with: ${command.display}`;\n\t\t}\n\t\treturn `This installation is not managed by a global ${method} install. Update it with the package manager, wrapper, or source checkout that provides it.`;\n\t}\n\treturn `Update ${target.installSpec} using the package manager, wrapper, or source checkout that provides this installation.`;\n}\n\nexport function getUpdateInstruction(packageName: string): string {\n\tconst method = detectInstallMethod();\n\tconst command = getSelfUpdateCommandForMethod(method, packageName);\n\tif (command) {\n\t\treturn `Run: ${command.display}`;\n\t}\n\treturn getSelfUpdateUnavailableInstruction(packageName);\n}\n\n// =============================================================================\n// Package Asset Paths (shipped with executable)\n// =============================================================================\n\n/**\n * Get the base directory for resolving package assets (themes, package.json, README.md, CHANGELOG.md).\n * - For Bun binary: returns the directory containing the executable\n * - For Node.js (dist/): returns __dirname (the dist/ directory)\n * - For tsx (src/): returns parent directory (the package root)\n */\nexport function getPackageDir(): string {\n\t// Allow override via environment variable (useful for Nix/Guix where store paths tokenize poorly)\n\tconst envDir = process.env.PI_PACKAGE_DIR;\n\tif (envDir) {\n\t\treturn normalizePath(envDir);\n\t}\n\n\tif (isBunBinary) {\n\t\t// Bun binary: process.execPath points to the compiled executable\n\t\treturn dirname(process.execPath);\n\t}\n\t// Node.js: walk up from __dirname until we find package.json\n\tlet dir = __dirname;\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\t// Fallback (shouldn't happen)\n\treturn __dirname;\n}\n\n/**\n * Get path to built-in themes directory (shipped with package)\n * - For Bun binary: theme/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/theme/\n * - For tsx (src/): src/modes/interactive/theme/\n */\nexport function getThemesDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"theme\");\n\t}\n\t// Theme is in modes/interactive/theme/ relative to src/ or dist/\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"modes\", \"interactive\", \"theme\");\n}\n\n/**\n * Get path to HTML export template directory (shipped with package)\n * - For Bun binary: export-html/ next to executable\n * - For Node.js (dist/): dist/core/export-html/\n * - For tsx (src/): src/core/export-html/\n */\nexport function getExportTemplateDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"export-html\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"core\", \"export-html\");\n}\n\n/** Get path to package.json */\nexport function getPackageJsonPath(): string {\n\treturn join(getPackageDir(), \"package.json\");\n}\n\n/** Get path to README.md */\nexport function getReadmePath(): string {\n\treturn resolve(join(getPackageDir(), \"README.md\"));\n}\n\n/** Get path to docs directory */\nexport function getDocsPath(): string {\n\treturn resolve(join(getPackageDir(), \"docs\"));\n}\n\n/** Get path to examples directory */\nexport function getExamplesPath(): string {\n\treturn resolve(join(getPackageDir(), \"examples\"));\n}\n\n/** Get path to CHANGELOG.md */\nexport function getChangelogPath(): string {\n\treturn resolve(join(getPackageDir(), \"CHANGELOG.md\"));\n}\n\n/**\n * Get path to built-in interactive assets directory.\n * - For Bun binary: assets/ next to executable\n * - For Node.js (dist/): dist/modes/interactive/assets/\n * - For tsx (src/): src/modes/interactive/assets/\n */\nexport function getInteractiveAssetsDir(): string {\n\tif (isBunBinary) {\n\t\treturn join(getPackageDir(), \"assets\");\n\t}\n\tconst packageDir = getPackageDir();\n\tconst srcOrDist = existsSync(join(packageDir, \"src\")) ? \"src\" : \"dist\";\n\treturn join(packageDir, srcOrDist, \"modes\", \"interactive\", \"assets\");\n}\n\n/** Get path to a bundled interactive asset */\nexport function getBundledInteractiveAssetPath(name: string): string {\n\treturn join(getInteractiveAssetsDir(), name);\n}\n\n// =============================================================================\n// App Config (from package.json piConfig)\n// =============================================================================\n\ninterface PackageJson {\n\tname?: string;\n\tversion?: string;\n\tpiConfig?: {\n\t\tname?: string;\n\t\tconfigDir?: string;\n\t};\n}\n\nlet pkg: PackageJson = {};\ntry {\n\tpkg = JSON.parse(readFileSync(getPackageJsonPath(), \"utf-8\")) as PackageJson;\n} catch (e: unknown) {\n\tconst err = e as NodeJS.ErrnoException;\n\tif (err.code !== \"ENOENT\") throw e;\n}\n\nconst piConfigName: string | undefined = pkg.piConfig?.name;\nexport const PACKAGE_NAME: string = pkg.name || \"@earendil-works/pi-coding-agent\";\nexport const APP_NAME: string = piConfigName || \"pi\";\nexport const APP_TITLE: string = piConfigName ? APP_NAME : \"π\";\nexport const CONFIG_DIR_NAME: string = pkg.piConfig?.configDir || \".pi\";\nexport const VERSION: string = pkg.version || \"0.0.0\";\n\n// e.g., PI_CODING_AGENT_DIR or PI_CANTE_CODING_AGENT_DIR (non-alphanumerics sanitized to _).\n// Rebranded distributions keep reading the official PI_* variables as a fallback so\n// existing tooling, extensions, and tests keep working (see getEnvWithOfficialFallback).\nconst ENV_APP_PREFIX = APP_NAME.toUpperCase().replace(/[^A-Z0-9]+/g, \"_\");\nexport const ENV_AGENT_DIR = `${ENV_APP_PREFIX}_CODING_AGENT_DIR`;\nexport const ENV_SESSION_DIR = `${ENV_APP_PREFIX}_CODING_AGENT_SESSION_DIR`;\nconst OFFICIAL_ENV_AGENT_DIR = \"PI_CODING_AGENT_DIR\";\nconst OFFICIAL_ENV_SESSION_DIR = \"PI_CODING_AGENT_SESSION_DIR\";\n\n/** Read a distro env var, falling back to the official PI_* name for compatibility. */\nexport function getEnvWithOfficialFallback(envName: string): string | undefined {\n\tif (process.env[envName]) return process.env[envName];\n\tif (envName === ENV_AGENT_DIR) return process.env[OFFICIAL_ENV_AGENT_DIR];\n\tif (envName === ENV_SESSION_DIR) return process.env[OFFICIAL_ENV_SESSION_DIR];\n\treturn undefined;\n}\n\nexport function expandTildePath(path: string): string {\n\treturn normalizePath(path);\n}\n\nconst DEFAULT_SHARE_VIEWER_URL = \"https://pi.dev/session/\";\n\n/** Get the share viewer URL for a gist ID */\nexport function getShareViewerUrl(gistId: string): string {\n\tconst baseUrl = process.env.PI_SHARE_VIEWER_URL || DEFAULT_SHARE_VIEWER_URL;\n\treturn `${baseUrl}#${gistId}`;\n}\n\n// =============================================================================\n// User Config Paths (~/.pi/agent/*)\n// =============================================================================\n\n/** Get the agent config directory (e.g., ~/.pi/agent/) */\nexport function getAgentDir(): string {\n\tconst envDir = getEnvWithOfficialFallback(ENV_AGENT_DIR);\n\tif (envDir) {\n\t\treturn expandTildePath(envDir);\n\t}\n\treturn join(homedir(), CONFIG_DIR_NAME, \"agent\");\n}\n\n/** Get path to user's custom themes directory */\nexport function getCustomThemesDir(): string {\n\treturn join(getAgentDir(), \"themes\");\n}\n\n/** Get path to models.json */\nexport function getModelsPath(): string {\n\treturn join(getAgentDir(), \"models.json\");\n}\n\n/** Get path to auth.json */\nexport function getAuthPath(): string {\n\treturn join(getAgentDir(), \"auth.json\");\n}\n\n/** Get path to settings.json */\nexport function getSettingsPath(): string {\n\treturn join(getAgentDir(), \"settings.json\");\n}\n\n/** Get path to tools directory */\nexport function getToolsDir(): string {\n\treturn join(getAgentDir(), \"tools\");\n}\n\n/** Get path to managed binaries directory (fd, rg) */\nexport function getBinDir(): string {\n\treturn join(getAgentDir(), \"bin\");\n}\n\n/** Get path to prompt templates directory */\nexport function getPromptsDir(): string {\n\treturn join(getAgentDir(), \"prompts\");\n}\n\n/** Get path to sessions directory */\nexport function getSessionsDir(): string {\n\treturn join(getAgentDir(), \"sessions\");\n}\n\n/** Get path to debug log file */\nexport function getDebugLogPath(): string {\n\treturn join(getAgentDir(), `${APP_NAME}-debug.log`);\n}\n"]}