gsd-pi 2.34.0 → 2.35.0-dev.55dcc60

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 (421) hide show
  1. package/dist/resources/extensions/gsd/changelog.js +162 -0
  2. package/dist/resources/extensions/gsd/commands-bootstrap.js +1 -0
  3. package/dist/resources/extensions/gsd/commands-inspect.js +10 -3
  4. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +5 -1
  5. package/dist/resources/extensions/gsd/commands.js +8 -1
  6. package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  7. package/dist/resources/extensions/gsd/doctor-checks.js +113 -5
  8. package/dist/resources/extensions/gsd/doctor-proactive.js +22 -0
  9. package/dist/resources/extensions/gsd/doctor.js +36 -0
  10. package/dist/resources/extensions/gsd/guided-flow.js +4 -2
  11. package/dist/resources/extensions/gsd/preferences-validation.js +38 -0
  12. package/dist/resources/extensions/gsd/preferences.js +2 -0
  13. package/dist/resources/extensions/mcp-client/index.js +2 -1
  14. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
  15. package/package.json +1 -1
  16. package/packages/native/dist/native.d.ts +0 -2
  17. package/packages/native/dist/native.js +0 -2
  18. package/packages/native/src/native.ts +0 -3
  19. package/packages/pi-agent-core/dist/agent-loop.d.ts +14 -0
  20. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  21. package/packages/pi-agent-core/dist/agent-loop.js +24 -27
  22. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  23. package/packages/pi-agent-core/dist/agent.d.ts +1 -0
  24. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  25. package/packages/pi-agent-core/dist/agent.js +11 -22
  26. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  27. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  28. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  29. package/packages/pi-agent-core/dist/proxy.js +3 -9
  30. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  31. package/packages/pi-agent-core/src/agent-loop.ts +30 -27
  32. package/packages/pi-agent-core/src/agent.ts +12 -23
  33. package/packages/pi-agent-core/src/proxy.ts +3 -9
  34. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  35. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  36. package/packages/pi-ai/dist/api-registry.js +0 -10
  37. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  38. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  39. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  40. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  41. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  42. package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  43. package/packages/pi-ai/dist/providers/azure-openai-responses.js +5 -41
  44. package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  45. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  46. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  47. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  48. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  49. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  50. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  51. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  52. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  53. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  54. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  55. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  56. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  57. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  58. package/packages/pi-ai/dist/providers/openai-completions.js +10 -73
  59. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  60. package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  61. package/packages/pi-ai/dist/providers/openai-responses.js +8 -79
  62. package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
  63. package/packages/pi-ai/dist/providers/openai-shared.d.ts +65 -0
  64. package/packages/pi-ai/dist/providers/openai-shared.d.ts.map +1 -0
  65. package/packages/pi-ai/dist/providers/openai-shared.js +146 -0
  66. package/packages/pi-ai/dist/providers/openai-shared.js.map +1 -0
  67. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  68. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  69. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  70. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  71. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  72. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  73. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  74. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  75. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  76. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +7 -135
  77. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  78. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  79. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +7 -135
  80. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  81. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts +46 -0
  82. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts.map +1 -0
  83. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js +160 -0
  84. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js.map +1 -0
  85. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  86. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  87. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  88. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  89. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  90. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  91. package/packages/pi-ai/dist/utils/validation.js +0 -14
  92. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  93. package/packages/pi-ai/src/api-registry.ts +0 -12
  94. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  95. package/packages/pi-ai/src/providers/azure-openai-responses.ts +11 -45
  96. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  97. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  98. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  99. package/packages/pi-ai/src/providers/openai-completions.ts +16 -86
  100. package/packages/pi-ai/src/providers/openai-responses.ts +15 -95
  101. package/packages/pi-ai/src/providers/openai-shared.ts +193 -0
  102. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  103. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  104. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +14 -162
  105. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +13 -161
  106. package/packages/pi-ai/src/utils/oauth/google-oauth-utils.ts +201 -0
  107. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  108. package/packages/pi-ai/src/utils/validation.ts +0 -15
  109. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  110. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  111. package/packages/pi-coding-agent/dist/config.js +4 -8
  112. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  113. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +16 -63
  114. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  115. package/packages/pi-coding-agent/dist/core/agent-session.js +104 -641
  116. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  117. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +0 -1
  118. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  119. package/packages/pi-coding-agent/dist/core/auth-storage.js +4 -35
  120. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  121. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  122. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js +5 -43
  123. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  124. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  125. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +11 -69
  126. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  127. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +40 -0
  128. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  129. package/packages/pi-coding-agent/dist/core/compaction/utils.js +78 -0
  130. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  131. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +77 -0
  132. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -0
  133. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +331 -0
  134. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -0
  135. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  136. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  137. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  138. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  139. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +2 -2
  140. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  141. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  142. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  143. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +15 -5
  144. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  145. package/packages/pi-coding-agent/dist/core/extensions/runner.js +129 -256
  146. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  147. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +49 -42
  148. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  149. package/packages/pi-coding-agent/dist/core/extensions/types.js +2 -21
  150. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  151. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  152. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  153. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  154. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  155. package/packages/pi-coding-agent/dist/core/lock-utils.d.ts +39 -0
  156. package/packages/pi-coding-agent/dist/core/lock-utils.d.ts.map +1 -0
  157. package/packages/pi-coding-agent/dist/core/lock-utils.js +89 -0
  158. package/packages/pi-coding-agent/dist/core/lock-utils.js.map +1 -0
  159. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  160. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  161. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  162. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  163. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +1 -1
  164. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  165. package/packages/pi-coding-agent/dist/core/lsp/config.js +2 -6
  166. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  167. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  168. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  169. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  170. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  171. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  172. package/packages/pi-coding-agent/dist/core/lsp/index.js +52 -107
  173. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  174. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  175. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  176. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +3 -22
  177. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  178. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +0 -1
  179. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -1
  180. package/packages/pi-coding-agent/dist/core/lsp/types.js +0 -28
  181. package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -1
  182. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  183. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  184. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  185. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  186. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  187. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  188. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  189. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  190. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  191. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  192. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  193. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  194. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  195. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  196. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  197. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  198. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  199. package/packages/pi-coding-agent/dist/core/package-manager.js +2 -4
  200. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  201. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  202. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  203. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  204. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  205. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +2 -4
  206. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  207. package/packages/pi-coding-agent/dist/core/resource-loader.js +33 -58
  208. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  209. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +87 -0
  210. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -0
  211. package/packages/pi-coding-agent/dist/core/retry-handler.js +295 -0
  212. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -0
  213. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -5
  214. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  215. package/packages/pi-coding-agent/dist/core/session-manager.js +5 -32
  216. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  217. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +8 -12
  218. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  219. package/packages/pi-coding-agent/dist/core/settings-manager.js +78 -168
  220. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  221. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  222. package/packages/pi-coding-agent/dist/core/skills.js +1 -3
  223. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  224. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  225. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  226. package/packages/pi-coding-agent/dist/index.js +1 -1
  227. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  228. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  229. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  230. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  231. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  232. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  233. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  234. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  235. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  236. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +1 -1
  237. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  238. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js +9 -26
  239. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -1
  240. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  241. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -13
  242. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  243. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts +44 -0
  244. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts.map +1 -0
  245. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js +61 -0
  246. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js.map +1 -0
  247. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  248. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +6 -9
  249. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  251. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  252. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  253. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  254. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  255. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  256. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  257. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  258. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
  259. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  260. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
  261. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
  263. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  264. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
  265. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
  266. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts +6 -0
  267. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts.map +1 -0
  268. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js +15 -0
  269. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js.map +1 -0
  270. package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/modes/print-mode.js +2 -30
  272. package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  274. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -28
  275. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts +19 -0
  277. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts.map +1 -0
  278. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js +45 -0
  279. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js.map +1 -0
  280. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  281. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  283. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  285. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  287. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/utils/error.d.ts +5 -0
  289. package/packages/pi-coding-agent/dist/utils/error.d.ts.map +1 -0
  290. package/packages/pi-coding-agent/dist/utils/error.js +7 -0
  291. package/packages/pi-coding-agent/dist/utils/error.js.map +1 -0
  292. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  293. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  294. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  295. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  296. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  297. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  299. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  300. package/packages/pi-coding-agent/package.json +1 -1
  301. package/packages/pi-coding-agent/src/config.ts +5 -10
  302. package/packages/pi-coding-agent/src/core/agent-session.ts +117 -745
  303. package/packages/pi-coding-agent/src/core/auth-storage.ts +4 -38
  304. package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +7 -53
  305. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +14 -74
  306. package/packages/pi-coding-agent/src/core/compaction/utils.ts +100 -0
  307. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +424 -0
  308. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  309. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -21
  310. package/packages/pi-coding-agent/src/core/extensions/runner.ts +119 -256
  311. package/packages/pi-coding-agent/src/core/extensions/types.ts +50 -69
  312. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  313. package/packages/pi-coding-agent/src/core/lock-utils.ts +113 -0
  314. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  315. package/packages/pi-coding-agent/src/core/lsp/config.ts +2 -10
  316. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  317. package/packages/pi-coding-agent/src/core/lsp/index.ts +83 -152
  318. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +3 -23
  319. package/packages/pi-coding-agent/src/core/lsp/types.ts +0 -29
  320. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  321. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  322. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  323. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  324. package/packages/pi-coding-agent/src/core/package-manager.ts +1 -4
  325. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  326. package/packages/pi-coding-agent/src/core/resource-loader.ts +43 -67
  327. package/packages/pi-coding-agent/src/core/retry-handler.ts +359 -0
  328. package/packages/pi-coding-agent/src/core/session-manager.ts +5 -34
  329. package/packages/pi-coding-agent/src/core/settings-manager.ts +87 -166
  330. package/packages/pi-coding-agent/src/core/skills.ts +1 -4
  331. package/packages/pi-coding-agent/src/index.ts +1 -7
  332. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  333. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  334. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector.ts +17 -29
  335. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -13
  336. package/packages/pi-coding-agent/src/modes/interactive/components/tree-render-utils.ts +81 -0
  337. package/packages/pi-coding-agent/src/modes/interactive/components/tree-selector.ts +14 -19
  338. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  339. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  340. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
  341. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
  342. package/packages/pi-coding-agent/src/modes/interactive/utils/shorten-path.ts +14 -0
  343. package/packages/pi-coding-agent/src/modes/print-mode.ts +2 -30
  344. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -28
  345. package/packages/pi-coding-agent/src/modes/shared/command-context-actions.ts +53 -0
  346. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  347. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  348. package/packages/pi-coding-agent/src/utils/error.ts +6 -0
  349. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  350. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  351. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  352. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  353. package/packages/pi-tui/dist/components/editor.js +1 -1
  354. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  355. package/packages/pi-tui/dist/components/markdown.d.ts +5 -0
  356. package/packages/pi-tui/dist/components/markdown.d.ts.map +1 -1
  357. package/packages/pi-tui/dist/components/markdown.js +25 -31
  358. package/packages/pi-tui/dist/components/markdown.js.map +1 -1
  359. package/packages/pi-tui/dist/keys.d.ts +0 -4
  360. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  361. package/packages/pi-tui/dist/keys.js +94 -162
  362. package/packages/pi-tui/dist/keys.js.map +1 -1
  363. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  364. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  365. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  366. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  367. package/packages/pi-tui/dist/tui.d.ts +0 -22
  368. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  369. package/packages/pi-tui/dist/tui.js +6 -272
  370. package/packages/pi-tui/dist/tui.js.map +1 -1
  371. package/packages/pi-tui/dist/utils.d.ts +0 -7
  372. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  373. package/packages/pi-tui/dist/utils.js +0 -44
  374. package/packages/pi-tui/dist/utils.js.map +1 -1
  375. package/packages/pi-tui/src/components/editor.ts +1 -1
  376. package/packages/pi-tui/src/components/markdown.ts +25 -29
  377. package/packages/pi-tui/src/keys.ts +94 -173
  378. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  379. package/packages/pi-tui/src/tui.ts +11 -312
  380. package/packages/pi-tui/src/utils.ts +0 -43
  381. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  382. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  383. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  384. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  385. package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
  386. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  387. package/pkg/dist/modes/interactive/theme/theme.js +6 -23
  388. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  389. package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
  390. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  391. package/pkg/dist/modes/interactive/theme/themes.js +175 -0
  392. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
  393. package/pkg/package.json +1 -1
  394. package/src/resources/extensions/gsd/changelog.ts +213 -0
  395. package/src/resources/extensions/gsd/commands-bootstrap.ts +1 -0
  396. package/src/resources/extensions/gsd/commands-inspect.ts +10 -3
  397. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +5 -1
  398. package/src/resources/extensions/gsd/commands.ts +9 -1
  399. package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  400. package/src/resources/extensions/gsd/doctor-checks.ts +107 -5
  401. package/src/resources/extensions/gsd/doctor-proactive.ts +24 -0
  402. package/src/resources/extensions/gsd/doctor-types.ts +9 -1
  403. package/src/resources/extensions/gsd/doctor.ts +35 -0
  404. package/src/resources/extensions/gsd/guided-flow.ts +4 -2
  405. package/src/resources/extensions/gsd/preferences-validation.ts +38 -0
  406. package/src/resources/extensions/gsd/preferences.ts +2 -0
  407. package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +46 -0
  408. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +98 -2
  409. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +59 -3
  410. package/src/resources/extensions/gsd/tests/preferences.test.ts +28 -0
  411. package/src/resources/extensions/mcp-client/index.ts +2 -1
  412. package/src/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
  413. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  414. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  415. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
  416. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
  417. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
  418. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
  419. package/pkg/dist/modes/interactive/theme/dark.json +0 -85
  420. package/pkg/dist/modes/interactive/theme/light.json +0 -84
  421. package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
@@ -1,121 +1,2 @@
1
- /**
2
- * Photon image processing wrapper.
3
- *
4
- * This module provides a unified interface to @silvia-odwyer/photon-node that works in:
5
- * 1. Node.js (development, npm run build)
6
- * 2. Bun compiled binaries (standalone distribution)
7
- *
8
- * The challenge: photon-node's CJS entry uses fs.readFileSync(__dirname + '/photon_rs_bg.wasm')
9
- * which bakes the build machine's absolute path into Bun compiled binaries.
10
- *
11
- * Solution:
12
- * 1. Patch fs.readFileSync to redirect missing photon_rs_bg.wasm reads
13
- * 2. Copy photon_rs_bg.wasm next to the executable in build:binary
14
- */
15
- import { createRequire } from "module";
16
- import * as path from "path";
17
- import { fileURLToPath } from "url";
18
- const require = createRequire(import.meta.url);
19
- const fs = require("fs");
20
- const WASM_FILENAME = "photon_rs_bg.wasm";
21
- // Lazy-loaded photon module
22
- let photonModule = null;
23
- let loadPromise = null;
24
- function pathOrNull(file) {
25
- if (typeof file === "string") {
26
- return file;
27
- }
28
- if (file instanceof URL) {
29
- return fileURLToPath(file);
30
- }
31
- return null;
32
- }
33
- function getFallbackWasmPaths() {
34
- const execDir = path.dirname(process.execPath);
35
- return [
36
- path.join(execDir, WASM_FILENAME),
37
- path.join(execDir, "photon", WASM_FILENAME),
38
- path.join(process.cwd(), WASM_FILENAME),
39
- ];
40
- }
41
- function patchPhotonWasmRead() {
42
- const originalReadFileSync = fs.readFileSync.bind(fs);
43
- const fallbackPaths = getFallbackWasmPaths();
44
- const mutableFs = fs;
45
- const patchedReadFileSync = ((...args) => {
46
- const [file, options] = args;
47
- const resolvedPath = pathOrNull(file);
48
- if (resolvedPath?.endsWith(WASM_FILENAME)) {
49
- try {
50
- return originalReadFileSync(...args);
51
- }
52
- catch (error) {
53
- const err = error;
54
- if (err?.code && err.code !== "ENOENT") {
55
- throw error;
56
- }
57
- for (const fallbackPath of fallbackPaths) {
58
- if (!fs.existsSync(fallbackPath)) {
59
- continue;
60
- }
61
- if (options === undefined) {
62
- return originalReadFileSync(fallbackPath);
63
- }
64
- return originalReadFileSync(fallbackPath, options);
65
- }
66
- throw error;
67
- }
68
- }
69
- return originalReadFileSync(...args);
70
- });
71
- try {
72
- mutableFs.readFileSync = patchedReadFileSync;
73
- }
74
- catch {
75
- Object.defineProperty(fs, "readFileSync", {
76
- value: patchedReadFileSync,
77
- writable: true,
78
- configurable: true,
79
- });
80
- }
81
- return () => {
82
- try {
83
- mutableFs.readFileSync = originalReadFileSync;
84
- }
85
- catch {
86
- Object.defineProperty(fs, "readFileSync", {
87
- value: originalReadFileSync,
88
- writable: true,
89
- configurable: true,
90
- });
91
- }
92
- };
93
- }
94
- /**
95
- * Load the photon module asynchronously.
96
- * Returns cached module on subsequent calls.
97
- */
98
- export async function loadPhoton() {
99
- if (photonModule) {
100
- return photonModule;
101
- }
102
- if (loadPromise) {
103
- return loadPromise;
104
- }
105
- loadPromise = (async () => {
106
- const restoreReadFileSync = patchPhotonWasmRead();
107
- try {
108
- photonModule = await import("@silvia-odwyer/photon-node");
109
- return photonModule;
110
- }
111
- catch {
112
- photonModule = null;
113
- return photonModule;
114
- }
115
- finally {
116
- restoreReadFileSync();
117
- }
118
- })();
119
- return loadPromise;
120
- }
1
+ export {};
121
2
  //# sourceMappingURL=photon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"photon.js","sourceRoot":"","sources":["../../src/utils/photon.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Photon image processing wrapper.\n *\n * This module provides a unified interface to @silvia-odwyer/photon-node that works in:\n * 1. Node.js (development, npm run build)\n * 2. Bun compiled binaries (standalone distribution)\n *\n * The challenge: photon-node's CJS entry uses fs.readFileSync(__dirname + '/photon_rs_bg.wasm')\n * which bakes the build machine's absolute path into Bun compiled binaries.\n *\n * Solution:\n * 1. Patch fs.readFileSync to redirect missing photon_rs_bg.wasm reads\n * 2. Copy photon_rs_bg.wasm next to the executable in build:binary\n */\n\nimport type { PathOrFileDescriptor } from \"fs\";\nimport { createRequire } from \"module\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst require = createRequire(import.meta.url);\nconst fs = require(\"fs\") as typeof import(\"fs\");\n\n// Re-export types from the main package\nexport type { PhotonImage as PhotonImageType } from \"@silvia-odwyer/photon-node\";\n\ntype ReadFileSync = typeof fs.readFileSync;\n\nconst WASM_FILENAME = \"photon_rs_bg.wasm\";\n\n// Lazy-loaded photon module\nlet photonModule: typeof import(\"@silvia-odwyer/photon-node\") | null = null;\nlet loadPromise: Promise<typeof import(\"@silvia-odwyer/photon-node\") | null> | null = null;\n\nfunction pathOrNull(file: PathOrFileDescriptor): string | null {\n\tif (typeof file === \"string\") {\n\t\treturn file;\n\t}\n\tif (file instanceof URL) {\n\t\treturn fileURLToPath(file);\n\t}\n\treturn null;\n}\n\nfunction getFallbackWasmPaths(): string[] {\n\tconst execDir = path.dirname(process.execPath);\n\treturn [\n\t\tpath.join(execDir, WASM_FILENAME),\n\t\tpath.join(execDir, \"photon\", WASM_FILENAME),\n\t\tpath.join(process.cwd(), WASM_FILENAME),\n\t];\n}\n\nfunction patchPhotonWasmRead(): () => void {\n\tconst originalReadFileSync: ReadFileSync = fs.readFileSync.bind(fs);\n\tconst fallbackPaths = getFallbackWasmPaths();\n\tconst mutableFs = fs as { readFileSync: ReadFileSync };\n\n\tconst patchedReadFileSync: ReadFileSync = ((...args: Parameters<ReadFileSync>) => {\n\t\tconst [file, options] = args;\n\t\tconst resolvedPath = pathOrNull(file);\n\n\t\tif (resolvedPath?.endsWith(WASM_FILENAME)) {\n\t\t\ttry {\n\t\t\t\treturn originalReadFileSync(...args);\n\t\t\t} catch (error) {\n\t\t\t\tconst err = error as NodeJS.ErrnoException;\n\t\t\t\tif (err?.code && err.code !== \"ENOENT\") {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tfor (const fallbackPath of fallbackPaths) {\n\t\t\t\t\tif (!fs.existsSync(fallbackPath)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (options === undefined) {\n\t\t\t\t\t\treturn originalReadFileSync(fallbackPath);\n\t\t\t\t\t}\n\t\t\t\t\treturn originalReadFileSync(fallbackPath, options);\n\t\t\t\t}\n\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn originalReadFileSync(...args);\n\t}) as ReadFileSync;\n\n\ttry {\n\t\tmutableFs.readFileSync = patchedReadFileSync;\n\t} catch {\n\t\tObject.defineProperty(fs, \"readFileSync\", {\n\t\t\tvalue: patchedReadFileSync,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\n\treturn () => {\n\t\ttry {\n\t\t\tmutableFs.readFileSync = originalReadFileSync;\n\t\t} catch {\n\t\t\tObject.defineProperty(fs, \"readFileSync\", {\n\t\t\t\tvalue: originalReadFileSync,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Load the photon module asynchronously.\n * Returns cached module on subsequent calls.\n */\nexport async function loadPhoton(): Promise<typeof import(\"@silvia-odwyer/photon-node\") | null> {\n\tif (photonModule) {\n\t\treturn photonModule;\n\t}\n\n\tif (loadPromise) {\n\t\treturn loadPromise;\n\t}\n\n\tloadPromise = (async () => {\n\t\tconst restoreReadFileSync = patchPhotonWasmRead();\n\t\ttry {\n\t\t\tphotonModule = await import(\"@silvia-odwyer/photon-node\");\n\t\t\treturn photonModule;\n\t\t} catch {\n\t\t\tphotonModule = null;\n\t\t\treturn photonModule;\n\t\t} finally {\n\t\t\trestoreReadFileSync();\n\t\t}\n\t})();\n\n\treturn loadPromise;\n}\n"]}
1
+ {"version":3,"file":"photon.js","sourceRoot":"","sources":["../../src/utils/photon.ts"],"names":[],"mappings":"","sourcesContent":["// Re-export types from the main package\nexport type { PhotonImage as PhotonImageType } from \"@silvia-odwyer/photon-node\";\n"]}
@@ -1,3 +1,2 @@
1
- export declare function getToolPath(tool: "fd" | "rg"): string | null;
2
1
  export declare function ensureTool(tool: "fd" | "rg", silent?: boolean): Promise<string | undefined>;
3
2
  //# sourceMappingURL=tools-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools-manager.d.ts","sourceRoot":"","sources":["../../src/utils/tools-manager.ts"],"names":[],"mappings":"AAkFA,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAgB5D;AAgJD,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2CxG"}
1
+ {"version":3,"file":"tools-manager.d.ts","sourceRoot":"","sources":["../../src/utils/tools-manager.ts"],"names":[],"mappings":"AAkPA,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2CxG"}
@@ -73,7 +73,7 @@ function commandExists(cmd) {
73
73
  }
74
74
  }
75
75
  // Get the path to a tool (system-wide or in our tools dir)
76
- export function getToolPath(tool) {
76
+ function getToolPath(tool) {
77
77
  const config = TOOLS[tool];
78
78
  if (!config)
79
79
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"tools-manager.js","sourceRoot":"","sources":["../../src/utils/tools-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport { spawnSync } from \"child_process\";\nimport extractZip from \"extract-zip\";\nimport { chmodSync, createWriteStream, existsSync, mkdirSync, readdirSync, renameSync, rmSync } from \"fs\";\nimport { arch, platform } from \"os\";\nimport { join } from \"path\";\nimport { Readable } from \"stream\";\nimport { finished } from \"stream/promises\";\nimport { APP_NAME, getBinDir } from \"../config.js\";\n\nconst TOOLS_DIR = getBinDir();\nconst NETWORK_TIMEOUT_MS = 10000;\n\nfunction isOfflineModeEnabled(): boolean {\n\tconst value = process.env.PI_OFFLINE;\n\tif (!value) return false;\n\treturn value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\n\ninterface ToolConfig {\n\tname: string;\n\trepo: string; // GitHub repo (e.g., \"sharkdp/fd\")\n\tbinaryName: string; // Name of the binary inside the archive\n\ttagPrefix: string; // Prefix for tags (e.g., \"v\" for v1.0.0, \"\" for 1.0.0)\n\tgetAssetName: (version: string, plat: string, architecture: string) => string | null;\n}\n\nconst TOOLS: Record<string, ToolConfig> = {\n\tfd: {\n\t\tname: \"fd\",\n\t\trepo: \"sharkdp/fd\",\n\t\tbinaryName: \"fd\",\n\t\ttagPrefix: \"v\",\n\t\tgetAssetName: (version, plat, architecture) => {\n\t\t\tif (plat === \"darwin\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-apple-darwin.tar.gz`;\n\t\t\t} else if (plat === \"linux\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-unknown-linux-gnu.tar.gz`;\n\t\t\t} else if (plat === \"win32\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-pc-windows-msvc.zip`;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t},\n\trg: {\n\t\tname: \"ripgrep\",\n\t\trepo: \"BurntSushi/ripgrep\",\n\t\tbinaryName: \"rg\",\n\t\ttagPrefix: \"\",\n\t\tgetAssetName: (version, plat, architecture) => {\n\t\t\tif (plat === \"darwin\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `ripgrep-${version}-${archStr}-apple-darwin.tar.gz`;\n\t\t\t} else if (plat === \"linux\") {\n\t\t\t\tif (architecture === \"arm64\") {\n\t\t\t\t\treturn `ripgrep-${version}-aarch64-unknown-linux-gnu.tar.gz`;\n\t\t\t\t}\n\t\t\t\treturn `ripgrep-${version}-x86_64-unknown-linux-musl.tar.gz`;\n\t\t\t} else if (plat === \"win32\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `ripgrep-${version}-${archStr}-pc-windows-msvc.zip`;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t},\n};\n\n// Check if a command exists in PATH by trying to run it\nfunction commandExists(cmd: string): boolean {\n\ttry {\n\t\tconst result = spawnSync(cmd, [\"--version\"], { stdio: \"pipe\" });\n\t\t// Check for ENOENT error (command not found)\n\t\treturn result.error === undefined || result.error === null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n// Get the path to a tool (system-wide or in our tools dir)\nexport function getToolPath(tool: \"fd\" | \"rg\"): string | null {\n\tconst config = TOOLS[tool];\n\tif (!config) return null;\n\n\t// Check our tools directory first\n\tconst localPath = join(TOOLS_DIR, config.binaryName + (platform() === \"win32\" ? \".exe\" : \"\"));\n\tif (existsSync(localPath)) {\n\t\treturn localPath;\n\t}\n\n\t// Check system PATH - if found, just return the command name (it's in PATH)\n\tif (commandExists(config.binaryName)) {\n\t\treturn config.binaryName;\n\t}\n\n\treturn null;\n}\n\n// Fetch latest release version from GitHub\nasync function getLatestVersion(repo: string): Promise<string> {\n\tconst response = await fetch(`https://api.github.com/repos/${repo}/releases/latest`, {\n\t\theaders: { \"User-Agent\": `${APP_NAME}-coding-agent` },\n\t\tsignal: AbortSignal.timeout(NETWORK_TIMEOUT_MS),\n\t});\n\n\tif (!response.ok) {\n\t\tthrow new Error(`GitHub API error: ${response.status}`);\n\t}\n\n\tconst data = (await response.json()) as { tag_name: string };\n\treturn data.tag_name.replace(/^v/, \"\");\n}\n\n// Download a file from URL\nasync function downloadFile(url: string, dest: string): Promise<void> {\n\tconst response = await fetch(url, {\n\t\tsignal: AbortSignal.timeout(NETWORK_TIMEOUT_MS),\n\t});\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to download: ${response.status}`);\n\t}\n\n\tif (!response.body) {\n\t\tthrow new Error(\"No response body\");\n\t}\n\n\tconst fileStream = createWriteStream(dest);\n\tawait finished(Readable.fromWeb(response.body as any).pipe(fileStream));\n}\n\nfunction findBinaryRecursively(rootDir: string, binaryFileName: string): string | null {\n\tconst stack: string[] = [rootDir];\n\n\twhile (stack.length > 0) {\n\t\tconst currentDir = stack.pop();\n\t\tif (!currentDir) continue;\n\n\t\tconst entries = readdirSync(currentDir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(currentDir, entry.name);\n\t\t\tif (entry.isFile() && entry.name === binaryFileName) {\n\t\t\t\treturn fullPath;\n\t\t\t}\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tstack.push(fullPath);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\n// Download and install a tool\nasync function downloadTool(tool: \"fd\" | \"rg\"): Promise<string> {\n\tconst config = TOOLS[tool];\n\tif (!config) throw new Error(`Unknown tool: ${tool}`);\n\n\tconst plat = platform();\n\tconst architecture = arch();\n\n\t// Get latest version\n\tconst version = await getLatestVersion(config.repo);\n\n\t// Get asset name for this platform\n\tconst assetName = config.getAssetName(version, plat, architecture);\n\tif (!assetName) {\n\t\tthrow new Error(`Unsupported platform: ${plat}/${architecture}`);\n\t}\n\n\t// Create tools directory\n\tmkdirSync(TOOLS_DIR, { recursive: true });\n\n\tconst downloadUrl = `https://github.com/${config.repo}/releases/download/${config.tagPrefix}${version}/${assetName}`;\n\tconst archivePath = join(TOOLS_DIR, assetName);\n\tconst binaryExt = plat === \"win32\" ? \".exe\" : \"\";\n\tconst binaryPath = join(TOOLS_DIR, config.binaryName + binaryExt);\n\n\t// Download\n\tawait downloadFile(downloadUrl, archivePath);\n\n\t// Extract into a unique temp directory. fd and rg downloads can run concurrently\n\t// during startup, so sharing a fixed directory causes races.\n\tconst extractDir = join(\n\t\tTOOLS_DIR,\n\t\t`extract_tmp_${config.binaryName}_${process.pid}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`,\n\t);\n\tmkdirSync(extractDir, { recursive: true });\n\n\ttry {\n\t\tif (assetName.endsWith(\".tar.gz\")) {\n\t\t\tconst extractResult = spawnSync(\"tar\", [\"xzf\", archivePath, \"-C\", extractDir], { stdio: \"pipe\" });\n\t\t\tif (extractResult.error || extractResult.status !== 0) {\n\t\t\t\tconst errMsg = extractResult.error?.message ?? extractResult.stderr?.toString().trim() ?? \"unknown error\";\n\t\t\t\tthrow new Error(`Failed to extract ${assetName}: ${errMsg}`);\n\t\t\t}\n\t\t} else if (assetName.endsWith(\".zip\")) {\n\t\t\tawait extractZip(archivePath, { dir: extractDir });\n\t\t} else {\n\t\t\tthrow new Error(`Unsupported archive format: ${assetName}`);\n\t\t}\n\n\t\t// Find the binary in extracted files. Some archives contain files directly\n\t\t// at root, others nest under a versioned subdirectory.\n\t\tconst binaryFileName = config.binaryName + binaryExt;\n\t\tconst extractedDir = join(extractDir, assetName.replace(/\\.(tar\\.gz|zip)$/, \"\"));\n\t\tconst extractedBinaryCandidates = [join(extractedDir, binaryFileName), join(extractDir, binaryFileName)];\n\t\tlet extractedBinary = extractedBinaryCandidates.find((candidate) => existsSync(candidate));\n\n\t\tif (!extractedBinary) {\n\t\t\textractedBinary = findBinaryRecursively(extractDir, binaryFileName) ?? undefined;\n\t\t}\n\n\t\tif (extractedBinary) {\n\t\t\trenameSync(extractedBinary, binaryPath);\n\t\t} else {\n\t\t\tthrow new Error(`Binary not found in archive: expected ${binaryFileName} under ${extractDir}`);\n\t\t}\n\n\t\t// Make executable (Unix only)\n\t\tif (plat !== \"win32\") {\n\t\t\tchmodSync(binaryPath, 0o755);\n\t\t}\n\t} finally {\n\t\t// Cleanup\n\t\trmSync(archivePath, { force: true });\n\t\trmSync(extractDir, { recursive: true, force: true });\n\t}\n\n\treturn binaryPath;\n}\n\n// Termux package names for tools\nconst TERMUX_PACKAGES: Record<string, string> = {\n\tfd: \"fd\",\n\trg: \"ripgrep\",\n};\n\n// Ensure a tool is available, downloading if necessary\n// Returns the path to the tool, or null if unavailable\nexport async function ensureTool(tool: \"fd\" | \"rg\", silent: boolean = false): Promise<string | undefined> {\n\tconst existingPath = getToolPath(tool);\n\tif (existingPath) {\n\t\treturn existingPath;\n\t}\n\n\tconst config = TOOLS[tool];\n\tif (!config) return undefined;\n\n\tif (isOfflineModeEnabled()) {\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`${config.name} not found. Offline mode enabled, skipping download.`));\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t// On Android/Termux, Linux binaries don't work due to Bionic libc incompatibility.\n\t// Users must install via pkg.\n\tif (platform() === \"android\") {\n\t\tconst pkgName = TERMUX_PACKAGES[tool] ?? tool;\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`${config.name} not found. Install with: pkg install ${pkgName}`));\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t// Tool not found - download it\n\tif (!silent) {\n\t\tconsole.log(chalk.dim(`${config.name} not found. Downloading...`));\n\t}\n\n\ttry {\n\t\tconst path = await downloadTool(tool);\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.dim(`${config.name} installed to ${path}`));\n\t\t}\n\t\treturn path;\n\t} catch (e) {\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`Failed to download ${config.name}: ${e instanceof Error ? e.message : e}`));\n\t\t}\n\t\treturn undefined;\n\t}\n}\n"]}
1
+ {"version":3,"file":"tools-manager.js","sourceRoot":"","sources":["../../src/utils/tools-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport { spawnSync } from \"child_process\";\nimport extractZip from \"extract-zip\";\nimport { chmodSync, createWriteStream, existsSync, mkdirSync, readdirSync, renameSync, rmSync } from \"fs\";\nimport { arch, platform } from \"os\";\nimport { join } from \"path\";\nimport { Readable } from \"stream\";\nimport { finished } from \"stream/promises\";\nimport { APP_NAME, getBinDir } from \"../config.js\";\n\nconst TOOLS_DIR = getBinDir();\nconst NETWORK_TIMEOUT_MS = 10000;\n\nfunction isOfflineModeEnabled(): boolean {\n\tconst value = process.env.PI_OFFLINE;\n\tif (!value) return false;\n\treturn value === \"1\" || value.toLowerCase() === \"true\" || value.toLowerCase() === \"yes\";\n}\n\ninterface ToolConfig {\n\tname: string;\n\trepo: string; // GitHub repo (e.g., \"sharkdp/fd\")\n\tbinaryName: string; // Name of the binary inside the archive\n\ttagPrefix: string; // Prefix for tags (e.g., \"v\" for v1.0.0, \"\" for 1.0.0)\n\tgetAssetName: (version: string, plat: string, architecture: string) => string | null;\n}\n\nconst TOOLS: Record<string, ToolConfig> = {\n\tfd: {\n\t\tname: \"fd\",\n\t\trepo: \"sharkdp/fd\",\n\t\tbinaryName: \"fd\",\n\t\ttagPrefix: \"v\",\n\t\tgetAssetName: (version, plat, architecture) => {\n\t\t\tif (plat === \"darwin\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-apple-darwin.tar.gz`;\n\t\t\t} else if (plat === \"linux\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-unknown-linux-gnu.tar.gz`;\n\t\t\t} else if (plat === \"win32\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `fd-v${version}-${archStr}-pc-windows-msvc.zip`;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t},\n\trg: {\n\t\tname: \"ripgrep\",\n\t\trepo: \"BurntSushi/ripgrep\",\n\t\tbinaryName: \"rg\",\n\t\ttagPrefix: \"\",\n\t\tgetAssetName: (version, plat, architecture) => {\n\t\t\tif (plat === \"darwin\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `ripgrep-${version}-${archStr}-apple-darwin.tar.gz`;\n\t\t\t} else if (plat === \"linux\") {\n\t\t\t\tif (architecture === \"arm64\") {\n\t\t\t\t\treturn `ripgrep-${version}-aarch64-unknown-linux-gnu.tar.gz`;\n\t\t\t\t}\n\t\t\t\treturn `ripgrep-${version}-x86_64-unknown-linux-musl.tar.gz`;\n\t\t\t} else if (plat === \"win32\") {\n\t\t\t\tconst archStr = architecture === \"arm64\" ? \"aarch64\" : \"x86_64\";\n\t\t\t\treturn `ripgrep-${version}-${archStr}-pc-windows-msvc.zip`;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t},\n};\n\n// Check if a command exists in PATH by trying to run it\nfunction commandExists(cmd: string): boolean {\n\ttry {\n\t\tconst result = spawnSync(cmd, [\"--version\"], { stdio: \"pipe\" });\n\t\t// Check for ENOENT error (command not found)\n\t\treturn result.error === undefined || result.error === null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n// Get the path to a tool (system-wide or in our tools dir)\nfunction getToolPath(tool: \"fd\" | \"rg\"): string | null {\n\tconst config = TOOLS[tool];\n\tif (!config) return null;\n\n\t// Check our tools directory first\n\tconst localPath = join(TOOLS_DIR, config.binaryName + (platform() === \"win32\" ? \".exe\" : \"\"));\n\tif (existsSync(localPath)) {\n\t\treturn localPath;\n\t}\n\n\t// Check system PATH - if found, just return the command name (it's in PATH)\n\tif (commandExists(config.binaryName)) {\n\t\treturn config.binaryName;\n\t}\n\n\treturn null;\n}\n\n// Fetch latest release version from GitHub\nasync function getLatestVersion(repo: string): Promise<string> {\n\tconst response = await fetch(`https://api.github.com/repos/${repo}/releases/latest`, {\n\t\theaders: { \"User-Agent\": `${APP_NAME}-coding-agent` },\n\t\tsignal: AbortSignal.timeout(NETWORK_TIMEOUT_MS),\n\t});\n\n\tif (!response.ok) {\n\t\tthrow new Error(`GitHub API error: ${response.status}`);\n\t}\n\n\tconst data = (await response.json()) as { tag_name: string };\n\treturn data.tag_name.replace(/^v/, \"\");\n}\n\n// Download a file from URL\nasync function downloadFile(url: string, dest: string): Promise<void> {\n\tconst response = await fetch(url, {\n\t\tsignal: AbortSignal.timeout(NETWORK_TIMEOUT_MS),\n\t});\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to download: ${response.status}`);\n\t}\n\n\tif (!response.body) {\n\t\tthrow new Error(\"No response body\");\n\t}\n\n\tconst fileStream = createWriteStream(dest);\n\tawait finished(Readable.fromWeb(response.body as any).pipe(fileStream));\n}\n\nfunction findBinaryRecursively(rootDir: string, binaryFileName: string): string | null {\n\tconst stack: string[] = [rootDir];\n\n\twhile (stack.length > 0) {\n\t\tconst currentDir = stack.pop();\n\t\tif (!currentDir) continue;\n\n\t\tconst entries = readdirSync(currentDir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(currentDir, entry.name);\n\t\t\tif (entry.isFile() && entry.name === binaryFileName) {\n\t\t\t\treturn fullPath;\n\t\t\t}\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tstack.push(fullPath);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\n// Download and install a tool\nasync function downloadTool(tool: \"fd\" | \"rg\"): Promise<string> {\n\tconst config = TOOLS[tool];\n\tif (!config) throw new Error(`Unknown tool: ${tool}`);\n\n\tconst plat = platform();\n\tconst architecture = arch();\n\n\t// Get latest version\n\tconst version = await getLatestVersion(config.repo);\n\n\t// Get asset name for this platform\n\tconst assetName = config.getAssetName(version, plat, architecture);\n\tif (!assetName) {\n\t\tthrow new Error(`Unsupported platform: ${plat}/${architecture}`);\n\t}\n\n\t// Create tools directory\n\tmkdirSync(TOOLS_DIR, { recursive: true });\n\n\tconst downloadUrl = `https://github.com/${config.repo}/releases/download/${config.tagPrefix}${version}/${assetName}`;\n\tconst archivePath = join(TOOLS_DIR, assetName);\n\tconst binaryExt = plat === \"win32\" ? \".exe\" : \"\";\n\tconst binaryPath = join(TOOLS_DIR, config.binaryName + binaryExt);\n\n\t// Download\n\tawait downloadFile(downloadUrl, archivePath);\n\n\t// Extract into a unique temp directory. fd and rg downloads can run concurrently\n\t// during startup, so sharing a fixed directory causes races.\n\tconst extractDir = join(\n\t\tTOOLS_DIR,\n\t\t`extract_tmp_${config.binaryName}_${process.pid}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`,\n\t);\n\tmkdirSync(extractDir, { recursive: true });\n\n\ttry {\n\t\tif (assetName.endsWith(\".tar.gz\")) {\n\t\t\tconst extractResult = spawnSync(\"tar\", [\"xzf\", archivePath, \"-C\", extractDir], { stdio: \"pipe\" });\n\t\t\tif (extractResult.error || extractResult.status !== 0) {\n\t\t\t\tconst errMsg = extractResult.error?.message ?? extractResult.stderr?.toString().trim() ?? \"unknown error\";\n\t\t\t\tthrow new Error(`Failed to extract ${assetName}: ${errMsg}`);\n\t\t\t}\n\t\t} else if (assetName.endsWith(\".zip\")) {\n\t\t\tawait extractZip(archivePath, { dir: extractDir });\n\t\t} else {\n\t\t\tthrow new Error(`Unsupported archive format: ${assetName}`);\n\t\t}\n\n\t\t// Find the binary in extracted files. Some archives contain files directly\n\t\t// at root, others nest under a versioned subdirectory.\n\t\tconst binaryFileName = config.binaryName + binaryExt;\n\t\tconst extractedDir = join(extractDir, assetName.replace(/\\.(tar\\.gz|zip)$/, \"\"));\n\t\tconst extractedBinaryCandidates = [join(extractedDir, binaryFileName), join(extractDir, binaryFileName)];\n\t\tlet extractedBinary = extractedBinaryCandidates.find((candidate) => existsSync(candidate));\n\n\t\tif (!extractedBinary) {\n\t\t\textractedBinary = findBinaryRecursively(extractDir, binaryFileName) ?? undefined;\n\t\t}\n\n\t\tif (extractedBinary) {\n\t\t\trenameSync(extractedBinary, binaryPath);\n\t\t} else {\n\t\t\tthrow new Error(`Binary not found in archive: expected ${binaryFileName} under ${extractDir}`);\n\t\t}\n\n\t\t// Make executable (Unix only)\n\t\tif (plat !== \"win32\") {\n\t\t\tchmodSync(binaryPath, 0o755);\n\t\t}\n\t} finally {\n\t\t// Cleanup\n\t\trmSync(archivePath, { force: true });\n\t\trmSync(extractDir, { recursive: true, force: true });\n\t}\n\n\treturn binaryPath;\n}\n\n// Termux package names for tools\nconst TERMUX_PACKAGES: Record<string, string> = {\n\tfd: \"fd\",\n\trg: \"ripgrep\",\n};\n\n// Ensure a tool is available, downloading if necessary\n// Returns the path to the tool, or null if unavailable\nexport async function ensureTool(tool: \"fd\" | \"rg\", silent: boolean = false): Promise<string | undefined> {\n\tconst existingPath = getToolPath(tool);\n\tif (existingPath) {\n\t\treturn existingPath;\n\t}\n\n\tconst config = TOOLS[tool];\n\tif (!config) return undefined;\n\n\tif (isOfflineModeEnabled()) {\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`${config.name} not found. Offline mode enabled, skipping download.`));\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t// On Android/Termux, Linux binaries don't work due to Bionic libc incompatibility.\n\t// Users must install via pkg.\n\tif (platform() === \"android\") {\n\t\tconst pkgName = TERMUX_PACKAGES[tool] ?? tool;\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`${config.name} not found. Install with: pkg install ${pkgName}`));\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t// Tool not found - download it\n\tif (!silent) {\n\t\tconsole.log(chalk.dim(`${config.name} not found. Downloading...`));\n\t}\n\n\ttry {\n\t\tconst path = await downloadTool(tool);\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.dim(`${config.name} installed to ${path}`));\n\t\t}\n\t\treturn path;\n\t} catch (e) {\n\t\tif (!silent) {\n\t\t\tconsole.log(chalk.yellow(`Failed to download ${config.name}: ${e instanceof Error ? e.message : e}`));\n\t\t}\n\t\treturn undefined;\n\t}\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gsd/pi-coding-agent",
3
- "version": "2.34.0",
3
+ "version": "2.35.0",
4
4
  "description": "Coding agent CLI (vendored from pi-mono)",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -18,15 +18,15 @@ export const isBunBinary =
18
18
  import.meta.url.includes("$bunfs") || import.meta.url.includes("~BUN") || import.meta.url.includes("%7EBUN");
19
19
 
20
20
  /** Detect if Bun is the runtime (compiled binary or bun run) */
21
- export const isBunRuntime = !!process.versions.bun;
21
+ const isBunRuntime = !!process.versions.bun;
22
22
 
23
23
  // =============================================================================
24
24
  // Install Method Detection
25
25
  // =============================================================================
26
26
 
27
- export type InstallMethod = "bun-binary" | "npm" | "pnpm" | "yarn" | "bun" | "unknown";
27
+ type InstallMethod = "bun-binary" | "npm" | "pnpm" | "yarn" | "bun" | "unknown";
28
28
 
29
- export function detectInstallMethod(): InstallMethod {
29
+ function detectInstallMethod(): InstallMethod {
30
30
  if (isBunBinary) {
31
31
  return "bun-binary";
32
32
  }
@@ -79,7 +79,7 @@ export function getUpdateInstruction(packageName: string): string {
79
79
  */
80
80
  let _cachedPackageDir: string | undefined;
81
81
 
82
- export function getPackageDir(): string {
82
+ function getPackageDir(): string {
83
83
  if (_cachedPackageDir !== undefined) return _cachedPackageDir;
84
84
 
85
85
  // Allow override via environment variable (useful for Nix/Guix where store paths tokenize poorly)
@@ -138,7 +138,7 @@ export function getExportTemplateDir(): string {
138
138
  }
139
139
 
140
140
  /** Get path to package.json */
141
- export function getPackageJsonPath(): string {
141
+ function getPackageJsonPath(): string {
142
142
  return join(getPackageDir(), "package.json");
143
143
  }
144
144
 
@@ -219,11 +219,6 @@ export function getSettingsPath(): string {
219
219
  return join(getAgentDir(), "settings.json");
220
220
  }
221
221
 
222
- /** Get path to tools directory */
223
- export function getToolsDir(): string {
224
- return join(getAgentDir(), "tools");
225
- }
226
-
227
222
  /** Get path to managed binaries directory (fd, rg) */
228
223
  export function getBinDir(): string {
229
224
  return join(getAgentDir(), "bin");