gsd-pi 2.34.0-dev.bbb5216 → 2.34.0-dev.e6d9bed

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 (416) 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-prefs-wizard.js +5 -1
  4. package/dist/resources/extensions/gsd/commands.js +8 -1
  5. package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  6. package/dist/resources/extensions/gsd/doctor-checks.js +113 -5
  7. package/dist/resources/extensions/gsd/doctor-proactive.js +22 -0
  8. package/dist/resources/extensions/gsd/doctor.js +36 -0
  9. package/dist/resources/extensions/gsd/guided-flow.js +4 -2
  10. package/dist/resources/extensions/gsd/preferences-validation.js +38 -0
  11. package/dist/resources/extensions/gsd/preferences.js +2 -0
  12. package/dist/resources/extensions/mcp-client/index.js +2 -1
  13. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
  14. package/package.json +1 -1
  15. package/packages/native/dist/native.d.ts +0 -2
  16. package/packages/native/dist/native.js +0 -2
  17. package/packages/native/src/native.ts +0 -3
  18. package/packages/pi-agent-core/dist/agent-loop.d.ts +14 -0
  19. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  20. package/packages/pi-agent-core/dist/agent-loop.js +24 -27
  21. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  22. package/packages/pi-agent-core/dist/agent.d.ts +1 -0
  23. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  24. package/packages/pi-agent-core/dist/agent.js +11 -22
  25. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  26. package/packages/pi-agent-core/dist/proxy.d.ts +1 -25
  27. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  28. package/packages/pi-agent-core/dist/proxy.js +3 -9
  29. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  30. package/packages/pi-agent-core/src/agent-loop.ts +30 -27
  31. package/packages/pi-agent-core/src/agent.ts +12 -23
  32. package/packages/pi-agent-core/src/proxy.ts +3 -9
  33. package/packages/pi-ai/dist/api-registry.d.ts +0 -2
  34. package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
  35. package/packages/pi-ai/dist/api-registry.js +0 -10
  36. package/packages/pi-ai/dist/api-registry.js.map +1 -1
  37. package/packages/pi-ai/dist/providers/anthropic.d.ts +0 -8
  38. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  39. package/packages/pi-ai/dist/providers/anthropic.js +1 -1
  40. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  41. package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
  42. package/packages/pi-ai/dist/providers/azure-openai-responses.js +5 -41
  43. package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
  44. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts +0 -1
  45. package/packages/pi-ai/dist/providers/github-copilot-headers.d.ts.map +1 -1
  46. package/packages/pi-ai/dist/providers/github-copilot-headers.js +1 -1
  47. package/packages/pi-ai/dist/providers/github-copilot-headers.js.map +1 -1
  48. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts +1 -43
  49. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  50. package/packages/pi-ai/dist/providers/google-gemini-cli.js +2 -2
  51. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  52. package/packages/pi-ai/dist/providers/google-shared.d.ts +0 -4
  53. package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
  54. package/packages/pi-ai/dist/providers/google-shared.js +1 -1
  55. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  56. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  57. package/packages/pi-ai/dist/providers/openai-completions.js +10 -73
  58. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  59. package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
  60. package/packages/pi-ai/dist/providers/openai-responses.js +8 -79
  61. package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
  62. package/packages/pi-ai/dist/providers/openai-shared.d.ts +65 -0
  63. package/packages/pi-ai/dist/providers/openai-shared.d.ts.map +1 -0
  64. package/packages/pi-ai/dist/providers/openai-shared.js +146 -0
  65. package/packages/pi-ai/dist/providers/openai-shared.js.map +1 -0
  66. package/packages/pi-ai/dist/providers/register-builtins.d.ts +0 -1
  67. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  68. package/packages/pi-ai/dist/providers/register-builtins.js +1 -1
  69. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  70. package/packages/pi-ai/dist/utils/event-stream.d.ts +0 -2
  71. package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
  72. package/packages/pi-ai/dist/utils/event-stream.js +0 -4
  73. package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
  74. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  75. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +7 -135
  76. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  77. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  78. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +7 -135
  79. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  80. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts +46 -0
  81. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.d.ts.map +1 -0
  82. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js +160 -0
  83. package/packages/pi-ai/dist/utils/oauth/google-oauth-utils.js.map +1 -0
  84. package/packages/pi-ai/dist/utils/overflow.d.ts +0 -4
  85. package/packages/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  86. package/packages/pi-ai/dist/utils/overflow.js +0 -6
  87. package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
  88. package/packages/pi-ai/dist/utils/validation.d.ts +0 -8
  89. package/packages/pi-ai/dist/utils/validation.d.ts.map +1 -1
  90. package/packages/pi-ai/dist/utils/validation.js +0 -14
  91. package/packages/pi-ai/dist/utils/validation.js.map +1 -1
  92. package/packages/pi-ai/src/api-registry.ts +0 -12
  93. package/packages/pi-ai/src/providers/anthropic.ts +1 -1
  94. package/packages/pi-ai/src/providers/azure-openai-responses.ts +11 -45
  95. package/packages/pi-ai/src/providers/github-copilot-headers.ts +1 -1
  96. package/packages/pi-ai/src/providers/google-gemini-cli.ts +2 -2
  97. package/packages/pi-ai/src/providers/google-shared.ts +1 -1
  98. package/packages/pi-ai/src/providers/openai-completions.ts +16 -86
  99. package/packages/pi-ai/src/providers/openai-responses.ts +15 -95
  100. package/packages/pi-ai/src/providers/openai-shared.ts +193 -0
  101. package/packages/pi-ai/src/providers/register-builtins.ts +1 -1
  102. package/packages/pi-ai/src/utils/event-stream.ts +0 -5
  103. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +14 -162
  104. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +13 -161
  105. package/packages/pi-ai/src/utils/oauth/google-oauth-utils.ts +201 -0
  106. package/packages/pi-ai/src/utils/overflow.ts +1 -8
  107. package/packages/pi-ai/src/utils/validation.ts +0 -15
  108. package/packages/pi-coding-agent/dist/config.d.ts +0 -9
  109. package/packages/pi-coding-agent/dist/config.d.ts.map +1 -1
  110. package/packages/pi-coding-agent/dist/config.js +4 -8
  111. package/packages/pi-coding-agent/dist/config.js.map +1 -1
  112. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +16 -63
  113. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  114. package/packages/pi-coding-agent/dist/core/agent-session.js +104 -641
  115. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  116. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +0 -1
  117. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  118. package/packages/pi-coding-agent/dist/core/auth-storage.js +4 -35
  119. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  120. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  121. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js +5 -43
  122. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  123. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  124. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +11 -69
  125. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  126. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +40 -0
  127. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  128. package/packages/pi-coding-agent/dist/core/compaction/utils.js +78 -0
  129. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  130. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +77 -0
  131. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -0
  132. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +331 -0
  133. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -0
  134. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts +0 -4
  135. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  136. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js +1 -1
  137. package/packages/pi-coding-agent/dist/core/export-html/ansi-to-html.js.map +1 -1
  138. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +2 -2
  139. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  140. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  141. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  142. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +15 -5
  143. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  144. package/packages/pi-coding-agent/dist/core/extensions/runner.js +129 -256
  145. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  146. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +49 -42
  147. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  148. package/packages/pi-coding-agent/dist/core/extensions/types.js +2 -21
  149. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  150. package/packages/pi-coding-agent/dist/core/keybindings.d.ts +0 -8
  151. package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
  152. package/packages/pi-coding-agent/dist/core/keybindings.js +2 -2
  153. package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
  154. package/packages/pi-coding-agent/dist/core/lock-utils.d.ts +39 -0
  155. package/packages/pi-coding-agent/dist/core/lock-utils.d.ts.map +1 -0
  156. package/packages/pi-coding-agent/dist/core/lock-utils.js +89 -0
  157. package/packages/pi-coding-agent/dist/core/lock-utils.js.map +1 -0
  158. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +0 -17
  159. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  160. package/packages/pi-coding-agent/dist/core/lsp/client.js +3 -62
  161. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  162. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts +1 -1
  163. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  164. package/packages/pi-coding-agent/dist/core/lsp/config.js +2 -6
  165. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  166. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts +0 -5
  167. package/packages/pi-coding-agent/dist/core/lsp/edits.d.ts.map +1 -1
  168. package/packages/pi-coding-agent/dist/core/lsp/edits.js +1 -1
  169. package/packages/pi-coding-agent/dist/core/lsp/edits.js.map +1 -1
  170. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  171. package/packages/pi-coding-agent/dist/core/lsp/index.js +52 -107
  172. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  173. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts +0 -1
  174. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  175. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +3 -22
  176. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  177. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts +0 -1
  178. package/packages/pi-coding-agent/dist/core/lsp/types.d.ts.map +1 -1
  179. package/packages/pi-coding-agent/dist/core/lsp/types.js +0 -28
  180. package/packages/pi-coding-agent/dist/core/lsp/types.js.map +1 -1
  181. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts +1 -6
  182. package/packages/pi-coding-agent/dist/core/lsp/utils.d.ts.map +1 -1
  183. package/packages/pi-coding-agent/dist/core/lsp/utils.js +1 -28
  184. package/packages/pi-coding-agent/dist/core/lsp/utils.js.map +1 -1
  185. package/packages/pi-coding-agent/dist/core/messages.d.ts +0 -8
  186. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  187. package/packages/pi-coding-agent/dist/core/messages.js +5 -5
  188. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  189. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -3
  190. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  191. package/packages/pi-coding-agent/dist/core/model-registry.js +1 -3
  192. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  193. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts +1 -26
  194. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  195. package/packages/pi-coding-agent/dist/core/model-resolver.js +3 -59
  196. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  197. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  198. package/packages/pi-coding-agent/dist/core/package-manager.js +2 -4
  199. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  200. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts +0 -17
  201. package/packages/pi-coding-agent/dist/core/prompt-templates.d.ts.map +1 -1
  202. package/packages/pi-coding-agent/dist/core/prompt-templates.js +2 -2
  203. package/packages/pi-coding-agent/dist/core/prompt-templates.js.map +1 -1
  204. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +2 -4
  205. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  206. package/packages/pi-coding-agent/dist/core/resource-loader.js +33 -58
  207. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  208. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +87 -0
  209. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -0
  210. package/packages/pi-coding-agent/dist/core/retry-handler.js +295 -0
  211. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -0
  212. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +0 -5
  213. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  214. package/packages/pi-coding-agent/dist/core/session-manager.js +5 -32
  215. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  216. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +8 -12
  217. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  218. package/packages/pi-coding-agent/dist/core/settings-manager.js +78 -168
  219. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  220. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  221. package/packages/pi-coding-agent/dist/core/skills.js +1 -3
  222. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  223. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  224. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  225. package/packages/pi-coding-agent/dist/index.js +1 -1
  226. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  227. package/packages/pi-coding-agent/dist/migrations.d.ts +0 -16
  228. package/packages/pi-coding-agent/dist/migrations.d.ts.map +1 -1
  229. package/packages/pi-coding-agent/dist/migrations.js +2 -2
  230. package/packages/pi-coding-agent/dist/migrations.js.map +1 -1
  231. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts +0 -2
  232. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  233. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +2 -2
  234. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  235. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts +1 -1
  236. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  237. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js +9 -26
  238. package/packages/pi-coding-agent/dist/modes/interactive/components/session-selector.js.map +1 -1
  239. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  240. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -13
  241. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  242. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts +44 -0
  243. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.d.ts.map +1 -0
  244. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js +61 -0
  245. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js.map +1 -0
  246. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  247. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +6 -9
  248. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -1
  249. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -24
  250. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  251. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +50 -512
  252. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  253. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +71 -0
  254. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -0
  255. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +514 -0
  256. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -0
  257. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +65 -4
  258. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  259. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +6 -23
  260. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  261. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +12 -0
  262. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  263. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +175 -0
  264. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -0
  265. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts +6 -0
  266. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.d.ts.map +1 -0
  267. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js +15 -0
  268. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js.map +1 -0
  269. package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
  270. package/packages/pi-coding-agent/dist/modes/print-mode.js +2 -30
  271. package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
  272. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  273. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -28
  274. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  275. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts +19 -0
  276. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.d.ts.map +1 -0
  277. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js +45 -0
  278. package/packages/pi-coding-agent/dist/modes/shared/command-context-actions.js.map +1 -0
  279. package/packages/pi-coding-agent/dist/utils/changelog.d.ts +0 -4
  280. package/packages/pi-coding-agent/dist/utils/changelog.d.ts.map +1 -1
  281. package/packages/pi-coding-agent/dist/utils/changelog.js +1 -1
  282. package/packages/pi-coding-agent/dist/utils/changelog.js.map +1 -1
  283. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts +0 -1
  284. package/packages/pi-coding-agent/dist/utils/clipboard-image.d.ts.map +1 -1
  285. package/packages/pi-coding-agent/dist/utils/clipboard-image.js +1 -1
  286. package/packages/pi-coding-agent/dist/utils/clipboard-image.js.map +1 -1
  287. package/packages/pi-coding-agent/dist/utils/error.d.ts +5 -0
  288. package/packages/pi-coding-agent/dist/utils/error.d.ts.map +1 -0
  289. package/packages/pi-coding-agent/dist/utils/error.js +7 -0
  290. package/packages/pi-coding-agent/dist/utils/error.js.map +1 -0
  291. package/packages/pi-coding-agent/dist/utils/photon.d.ts +0 -19
  292. package/packages/pi-coding-agent/dist/utils/photon.d.ts.map +1 -1
  293. package/packages/pi-coding-agent/dist/utils/photon.js +1 -120
  294. package/packages/pi-coding-agent/dist/utils/photon.js.map +1 -1
  295. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts +0 -1
  296. package/packages/pi-coding-agent/dist/utils/tools-manager.d.ts.map +1 -1
  297. package/packages/pi-coding-agent/dist/utils/tools-manager.js +1 -1
  298. package/packages/pi-coding-agent/dist/utils/tools-manager.js.map +1 -1
  299. package/packages/pi-coding-agent/src/config.ts +5 -10
  300. package/packages/pi-coding-agent/src/core/agent-session.ts +117 -745
  301. package/packages/pi-coding-agent/src/core/auth-storage.ts +4 -38
  302. package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +7 -53
  303. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +14 -74
  304. package/packages/pi-coding-agent/src/core/compaction/utils.ts +100 -0
  305. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +424 -0
  306. package/packages/pi-coding-agent/src/core/export-html/ansi-to-html.ts +1 -1
  307. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -21
  308. package/packages/pi-coding-agent/src/core/extensions/runner.ts +119 -256
  309. package/packages/pi-coding-agent/src/core/extensions/types.ts +50 -69
  310. package/packages/pi-coding-agent/src/core/keybindings.ts +2 -2
  311. package/packages/pi-coding-agent/src/core/lock-utils.ts +113 -0
  312. package/packages/pi-coding-agent/src/core/lsp/client.ts +3 -73
  313. package/packages/pi-coding-agent/src/core/lsp/config.ts +2 -10
  314. package/packages/pi-coding-agent/src/core/lsp/edits.ts +1 -1
  315. package/packages/pi-coding-agent/src/core/lsp/index.ts +83 -152
  316. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +3 -23
  317. package/packages/pi-coding-agent/src/core/lsp/types.ts +0 -29
  318. package/packages/pi-coding-agent/src/core/lsp/utils.ts +1 -33
  319. package/packages/pi-coding-agent/src/core/messages.ts +5 -5
  320. package/packages/pi-coding-agent/src/core/model-registry.ts +0 -2
  321. package/packages/pi-coding-agent/src/core/model-resolver.ts +3 -77
  322. package/packages/pi-coding-agent/src/core/package-manager.ts +1 -4
  323. package/packages/pi-coding-agent/src/core/prompt-templates.ts +2 -2
  324. package/packages/pi-coding-agent/src/core/resource-loader.ts +43 -67
  325. package/packages/pi-coding-agent/src/core/retry-handler.ts +359 -0
  326. package/packages/pi-coding-agent/src/core/session-manager.ts +5 -34
  327. package/packages/pi-coding-agent/src/core/settings-manager.ts +87 -166
  328. package/packages/pi-coding-agent/src/core/skills.ts +1 -4
  329. package/packages/pi-coding-agent/src/index.ts +1 -7
  330. package/packages/pi-coding-agent/src/migrations.ts +2 -2
  331. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector-search.ts +2 -2
  332. package/packages/pi-coding-agent/src/modes/interactive/components/session-selector.ts +17 -29
  333. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -13
  334. package/packages/pi-coding-agent/src/modes/interactive/components/tree-render-utils.ts +81 -0
  335. package/packages/pi-coding-agent/src/modes/interactive/components/tree-selector.ts +14 -19
  336. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -561
  337. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +653 -0
  338. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +7 -26
  339. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +196 -0
  340. package/packages/pi-coding-agent/src/modes/interactive/utils/shorten-path.ts +14 -0
  341. package/packages/pi-coding-agent/src/modes/print-mode.ts +2 -30
  342. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -28
  343. package/packages/pi-coding-agent/src/modes/shared/command-context-actions.ts +53 -0
  344. package/packages/pi-coding-agent/src/utils/changelog.ts +1 -1
  345. package/packages/pi-coding-agent/src/utils/clipboard-image.ts +1 -1
  346. package/packages/pi-coding-agent/src/utils/error.ts +6 -0
  347. package/packages/pi-coding-agent/src/utils/photon.ts +0 -137
  348. package/packages/pi-coding-agent/src/utils/tools-manager.ts +1 -1
  349. package/packages/pi-tui/dist/components/editor.d.ts +0 -10
  350. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  351. package/packages/pi-tui/dist/components/editor.js +1 -1
  352. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  353. package/packages/pi-tui/dist/components/markdown.d.ts +5 -0
  354. package/packages/pi-tui/dist/components/markdown.d.ts.map +1 -1
  355. package/packages/pi-tui/dist/components/markdown.js +25 -31
  356. package/packages/pi-tui/dist/components/markdown.js.map +1 -1
  357. package/packages/pi-tui/dist/keys.d.ts +0 -4
  358. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  359. package/packages/pi-tui/dist/keys.js +94 -162
  360. package/packages/pi-tui/dist/keys.js.map +1 -1
  361. package/packages/pi-tui/dist/overlay-layout.d.ts +55 -0
  362. package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -0
  363. package/packages/pi-tui/dist/overlay-layout.js +288 -0
  364. package/packages/pi-tui/dist/overlay-layout.js.map +1 -0
  365. package/packages/pi-tui/dist/tui.d.ts +0 -22
  366. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  367. package/packages/pi-tui/dist/tui.js +6 -272
  368. package/packages/pi-tui/dist/tui.js.map +1 -1
  369. package/packages/pi-tui/dist/utils.d.ts +0 -7
  370. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  371. package/packages/pi-tui/dist/utils.js +0 -44
  372. package/packages/pi-tui/dist/utils.js.map +1 -1
  373. package/packages/pi-tui/src/components/editor.ts +1 -1
  374. package/packages/pi-tui/src/components/markdown.ts +25 -29
  375. package/packages/pi-tui/src/keys.ts +94 -173
  376. package/packages/pi-tui/src/overlay-layout.ts +372 -0
  377. package/packages/pi-tui/src/tui.ts +11 -312
  378. package/packages/pi-tui/src/utils.ts +0 -43
  379. package/pkg/dist/core/export-html/ansi-to-html.d.ts +0 -4
  380. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  381. package/pkg/dist/core/export-html/ansi-to-html.js +1 -1
  382. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  383. package/pkg/dist/modes/interactive/theme/theme.d.ts +65 -4
  384. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  385. package/pkg/dist/modes/interactive/theme/theme.js +6 -23
  386. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  387. package/pkg/dist/modes/interactive/theme/themes.d.ts +12 -0
  388. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -0
  389. package/pkg/dist/modes/interactive/theme/themes.js +175 -0
  390. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -0
  391. package/src/resources/extensions/gsd/changelog.ts +213 -0
  392. package/src/resources/extensions/gsd/commands-bootstrap.ts +1 -0
  393. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +5 -1
  394. package/src/resources/extensions/gsd/commands.ts +9 -1
  395. package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  396. package/src/resources/extensions/gsd/doctor-checks.ts +107 -5
  397. package/src/resources/extensions/gsd/doctor-proactive.ts +24 -0
  398. package/src/resources/extensions/gsd/doctor-types.ts +9 -1
  399. package/src/resources/extensions/gsd/doctor.ts +35 -0
  400. package/src/resources/extensions/gsd/guided-flow.ts +4 -2
  401. package/src/resources/extensions/gsd/preferences-validation.ts +38 -0
  402. package/src/resources/extensions/gsd/preferences.ts +2 -0
  403. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +98 -2
  404. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +59 -3
  405. package/src/resources/extensions/gsd/tests/preferences.test.ts +28 -0
  406. package/src/resources/extensions/mcp-client/index.ts +2 -1
  407. package/src/resources/skills/create-gsd-extension/references/events-reference.md +4 -4
  408. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +0 -85
  409. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +0 -84
  410. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -335
  411. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +0 -85
  412. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +0 -84
  413. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +0 -335
  414. package/pkg/dist/modes/interactive/theme/dark.json +0 -85
  415. package/pkg/dist/modes/interactive/theme/light.json +0 -84
  416. package/pkg/dist/modes/interactive/theme/theme-schema.json +0 -335
@@ -8,20 +8,20 @@
8
8
  import type { AgentMessage } from "@gsd/pi-agent-core";
9
9
  import type { ImageContent, Message, TextContent } from "@gsd/pi-ai";
10
10
 
11
- export const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
11
+ const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
12
12
 
13
13
  <summary>
14
14
  `;
15
15
 
16
- export const COMPACTION_SUMMARY_SUFFIX = `
16
+ const COMPACTION_SUMMARY_SUFFIX = `
17
17
  </summary>`;
18
18
 
19
- export const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
19
+ const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
20
20
 
21
21
  <summary>
22
22
  `;
23
23
 
24
- export const BRANCH_SUMMARY_SUFFIX = `</summary>`;
24
+ const BRANCH_SUMMARY_SUFFIX = `</summary>`;
25
25
 
26
26
  /**
27
27
  * Message type for bash executions via the ! command.
@@ -79,7 +79,7 @@ declare module "@gsd/pi-agent-core" {
79
79
  /**
80
80
  * Convert a BashExecutionMessage to user message text for LLM context.
81
81
  */
82
- export function bashExecutionToText(msg: BashExecutionMessage): string {
82
+ function bashExecutionToText(msg: BashExecutionMessage): string {
83
83
  let text = `Ran \`${msg.command}\`\n`;
84
84
  if (msg.output) {
85
85
  text += `\`\`\`\n${msg.output}\n\`\`\``;
@@ -216,8 +216,6 @@ function applyModelOverride(model: Model<Api>, override: ModelOverride): Model<A
216
216
  return result;
217
217
  }
218
218
 
219
- /** Clear the config value command cache. Exported for testing. */
220
- export const clearApiKeyCache = clearConfigValueCache;
221
219
 
222
220
  /**
223
221
  * Model registry - loads and manages models, resolves API keys via AuthStorage.
@@ -11,7 +11,7 @@ import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
11
11
  import type { ModelRegistry } from "./model-registry.js";
12
12
 
13
13
  /** Default model IDs for each known provider */
14
- export const defaultModelPerProvider: Record<KnownProvider, string> = {
14
+ const defaultModelPerProvider: Record<KnownProvider, string> = {
15
15
  "amazon-bedrock": "us.anthropic.claude-opus-4-6-v1",
16
16
  anthropic: "claude-opus-4-6[1m]",
17
17
  openai: "gpt-5.4",
@@ -143,9 +143,9 @@ function buildFallbackModel(provider: string, modelId: string, availableModels:
143
143
  * - If suffix is valid thinking level, use it and recurse on prefix
144
144
  * - If suffix is invalid, warn and recurse on prefix with "off"
145
145
  *
146
- * @internal Exported for testing
146
+ * @internal
147
147
  */
148
- export function parseModelPattern(
148
+ function parseModelPattern(
149
149
  pattern: string,
150
150
  availableModels: Model<Api>[],
151
151
  options?: { allowInvalidThinkingLevelFallback?: boolean },
@@ -546,77 +546,3 @@ export async function findInitialModel(options: {
546
546
  // 5. No model found
547
547
  return { model: undefined, thinkingLevel: DEFAULT_THINKING_LEVEL, fallbackMessage: undefined };
548
548
  }
549
-
550
- /**
551
- * Restore model from session, with fallback to available models
552
- */
553
- export async function restoreModelFromSession(
554
- savedProvider: string,
555
- savedModelId: string,
556
- currentModel: Model<Api> | undefined,
557
- shouldPrintMessages: boolean,
558
- modelRegistry: ModelRegistry,
559
- ): Promise<{ model: Model<Api> | undefined; fallbackMessage: string | undefined }> {
560
- const restoredModel = modelRegistry.find(savedProvider, savedModelId);
561
-
562
- // Check if restored model exists and has a valid API key
563
- const hasApiKey = restoredModel ? !!(await modelRegistry.getApiKey(restoredModel)) : false;
564
-
565
- if (restoredModel && hasApiKey) {
566
- if (shouldPrintMessages) {
567
- console.log(chalk.dim(`Restored model: ${savedProvider}/${savedModelId}`));
568
- }
569
- return { model: restoredModel, fallbackMessage: undefined };
570
- }
571
-
572
- // Model not found or no API key - fall back
573
- const reason = !restoredModel ? "model no longer exists" : "no API key available";
574
-
575
- if (shouldPrintMessages) {
576
- console.error(chalk.yellow(`Warning: Could not restore model ${savedProvider}/${savedModelId} (${reason}).`));
577
- }
578
-
579
- // If we already have a model, use it as fallback
580
- if (currentModel) {
581
- if (shouldPrintMessages) {
582
- console.log(chalk.dim(`Falling back to: ${currentModel.provider}/${currentModel.id}`));
583
- }
584
- return {
585
- model: currentModel,
586
- fallbackMessage: `Could not restore model ${savedProvider}/${savedModelId} (${reason}). Using ${currentModel.provider}/${currentModel.id}.`,
587
- };
588
- }
589
-
590
- // Try to find any available model
591
- const availableModels = await modelRegistry.getAvailable();
592
-
593
- if (availableModels.length > 0) {
594
- // Try to find a default model from known providers
595
- let fallbackModel: Model<Api> | undefined;
596
- for (const provider of Object.keys(defaultModelPerProvider) as KnownProvider[]) {
597
- const defaultId = defaultModelPerProvider[provider];
598
- const match = availableModels.find((m) => m.provider === provider && m.id === defaultId);
599
- if (match) {
600
- fallbackModel = match;
601
- break;
602
- }
603
- }
604
-
605
- // If no default found, use first available
606
- if (!fallbackModel) {
607
- fallbackModel = availableModels[0];
608
- }
609
-
610
- if (shouldPrintMessages) {
611
- console.log(chalk.dim(`Falling back to: ${fallbackModel.provider}/${fallbackModel.id}`));
612
- }
613
-
614
- return {
615
- model: fallbackModel,
616
- fallbackMessage: `Could not restore model ${savedProvider}/${savedModelId} (${reason}). Using ${fallbackModel.provider}/${fallbackModel.id}.`,
617
- };
618
- }
619
-
620
- // No models available
621
- return { model: undefined, fallbackMessage: undefined };
622
- }
@@ -7,6 +7,7 @@ import ignore from "ignore";
7
7
  import { minimatch } from "minimatch";
8
8
  import { CONFIG_DIR_NAME } from "../config.js";
9
9
  import { type GitSource, parseGitUrl } from "../utils/git.js";
10
+ import { toPosixPath } from "../utils/path-display.js";
10
11
  import type { PackageSource, SettingsManager } from "./settings-manager.js";
11
12
 
12
13
  const NETWORK_TIMEOUT_MS = 10000;
@@ -121,10 +122,6 @@ const IGNORE_FILE_NAMES = [".gitignore", ".ignore", ".fdignore"];
121
122
 
122
123
  type IgnoreMatcher = ReturnType<typeof ignore>;
123
124
 
124
- function toPosixPath(p: string): string {
125
- return p.split(sep).join("/");
126
- }
127
-
128
125
  function prefixIgnorePattern(line: string, prefix: string): string | null {
129
126
  const trimmed = line.trim();
130
127
  if (!trimmed) return null;
@@ -19,7 +19,7 @@ export interface PromptTemplate {
19
19
  * Parse command arguments respecting quoted strings (bash-style)
20
20
  * Returns array of arguments
21
21
  */
22
- export function parseCommandArgs(argsString: string): string[] {
22
+ function parseCommandArgs(argsString: string): string[] {
23
23
  const args: string[] = [];
24
24
  let current = "";
25
25
  let inQuote: string | null = null;
@@ -63,7 +63,7 @@ export function parseCommandArgs(argsString: string): string[] {
63
63
  * Note: Replacement happens on the template string only. Argument values
64
64
  * containing patterns like $1, $@, or $ARGUMENTS are NOT recursively substituted.
65
65
  */
66
- export function substituteArgs(content: string, args: string[]): string {
66
+ function substituteArgs(content: string, args: string[]): string {
67
67
  let result = content;
68
68
 
69
69
  // Replace $1, $2, etc. with positional args FIRST (before wildcards)
@@ -4,7 +4,7 @@ import { join, resolve, sep } from "node:path";
4
4
  import chalk from "chalk";
5
5
  import { CONFIG_DIR_NAME, getAgentDir } from "../config.js";
6
6
  import { loadThemeFromPath, type Theme } from "../modes/interactive/theme/theme.js";
7
- import type { ResourceDiagnostic } from "./diagnostics.js";
7
+ import type { ResourceCollision, ResourceDiagnostic } from "./diagnostics.js";
8
8
 
9
9
  export type { ResourceCollision, ResourceDiagnostic } from "./diagnostics.js";
10
10
 
@@ -422,12 +422,12 @@ export class DefaultResourceLoader implements ResourceLoader {
422
422
  this.agentsFiles = resolvedAgentsFiles.agentsFiles;
423
423
 
424
424
  const baseSystemPrompt = resolvePromptInput(
425
- this.systemPromptSource ?? this.discoverSystemPromptFile(),
425
+ this.systemPromptSource ?? this.discoverFileInSearchPaths("SYSTEM.md"),
426
426
  "system prompt",
427
427
  );
428
428
  this.systemPrompt = this.systemPromptOverride ? this.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;
429
429
 
430
- const appendSource = this.appendSystemPromptSource ?? this.discoverAppendSystemPromptFile();
430
+ const appendSource = this.appendSystemPromptSource ?? this.discoverFileInSearchPaths("APPEND_SYSTEM.md");
431
431
  const resolvedAppend = resolvePromptInput(appendSource, "append system prompt");
432
432
  const baseAppend = resolvedAppend ? [resolvedAppend] : [];
433
433
  this.appendSystemPrompt = this.appendSystemPromptOverride
@@ -485,7 +485,13 @@ export class DefaultResourceLoader implements ResourceLoader {
485
485
  promptPaths,
486
486
  includeDefaults: false,
487
487
  });
488
- promptsResult = this.dedupePrompts(allPrompts);
488
+ const deduped = this.dedupeResources(allPrompts, {
489
+ getName: (p) => p.name,
490
+ getPath: (p) => p.filePath,
491
+ resourceType: "prompt",
492
+ namePrefix: "/",
493
+ });
494
+ promptsResult = { prompts: deduped.items, diagnostics: deduped.diagnostics };
489
495
  }
490
496
  const resolvedPrompts = this.promptsOverride ? this.promptsOverride(promptsResult) : promptsResult;
491
497
  this.prompts = resolvedPrompts.prompts;
@@ -508,8 +514,12 @@ export class DefaultResourceLoader implements ResourceLoader {
508
514
  themesResult = { themes: [], diagnostics: [] };
509
515
  } else {
510
516
  const loaded = this.loadThemes(themePaths, false);
511
- const deduped = this.dedupeThemes(loaded.themes);
512
- themesResult = { themes: deduped.themes, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] };
517
+ const deduped = this.dedupeResources(loaded.themes, {
518
+ getName: (t) => t.name ?? "unnamed",
519
+ getPath: (t) => t.sourcePath,
520
+ resourceType: "theme",
521
+ });
522
+ themesResult = { themes: deduped.items, diagnostics: [...loaded.diagnostics, ...deduped.diagnostics] };
513
523
  }
514
524
  const resolvedThemes = this.themesOverride ? this.themesOverride(themesResult) : themesResult;
515
525
  this.themes = resolvedThemes.themes;
@@ -686,84 +696,50 @@ export class DefaultResourceLoader implements ResourceLoader {
686
696
  return { extensions, errors };
687
697
  }
688
698
 
689
- private dedupePrompts(prompts: PromptTemplate[]): { prompts: PromptTemplate[]; diagnostics: ResourceDiagnostic[] } {
690
- const seen = new Map<string, PromptTemplate>();
699
+ private dedupeResources<T>(
700
+ items: T[],
701
+ options: {
702
+ getName: (item: T) => string;
703
+ getPath: (item: T) => string | undefined;
704
+ resourceType: ResourceCollision["resourceType"];
705
+ namePrefix?: string;
706
+ },
707
+ ): { items: T[]; diagnostics: ResourceDiagnostic[] } {
708
+ const seen = new Map<string, T>();
691
709
  const diagnostics: ResourceDiagnostic[] = [];
710
+ const { getName, getPath, resourceType, namePrefix = "" } = options;
692
711
 
693
- for (const prompt of prompts) {
694
- const existing = seen.get(prompt.name);
695
- if (existing) {
696
- diagnostics.push({
697
- type: "collision",
698
- message: `name "/${prompt.name}" collision`,
699
- path: prompt.filePath,
700
- collision: {
701
- resourceType: "prompt",
702
- name: prompt.name,
703
- winnerPath: existing.filePath,
704
- loserPath: prompt.filePath,
705
- },
706
- });
707
- } else {
708
- seen.set(prompt.name, prompt);
709
- }
710
- }
711
-
712
- return { prompts: Array.from(seen.values()), diagnostics };
713
- }
714
-
715
- private dedupeThemes(themes: Theme[]): { themes: Theme[]; diagnostics: ResourceDiagnostic[] } {
716
- const seen = new Map<string, Theme>();
717
- const diagnostics: ResourceDiagnostic[] = [];
718
-
719
- for (const t of themes) {
720
- const name = t.name ?? "unnamed";
712
+ for (const item of items) {
713
+ const name = getName(item);
721
714
  const existing = seen.get(name);
722
715
  if (existing) {
723
716
  diagnostics.push({
724
717
  type: "collision",
725
- message: `name "${name}" collision`,
726
- path: t.sourcePath,
718
+ message: `name "${namePrefix}${name}" collision`,
719
+ path: getPath(item),
727
720
  collision: {
728
- resourceType: "theme",
721
+ resourceType,
729
722
  name,
730
- winnerPath: existing.sourcePath ?? "<builtin>",
731
- loserPath: t.sourcePath ?? "<builtin>",
723
+ winnerPath: getPath(existing) ?? "<builtin>",
724
+ loserPath: getPath(item) ?? "<builtin>",
732
725
  },
733
726
  });
734
727
  } else {
735
- seen.set(name, t);
728
+ seen.set(name, item);
736
729
  }
737
730
  }
738
731
 
739
- return { themes: Array.from(seen.values()), diagnostics };
732
+ return { items: Array.from(seen.values()), diagnostics };
740
733
  }
741
734
 
742
- private discoverSystemPromptFile(): string | undefined {
743
- const projectPath = join(this.cwd, CONFIG_DIR_NAME, "SYSTEM.md");
744
- if (existsSync(projectPath)) {
745
- return projectPath;
746
- }
747
-
748
- const globalPath = join(this.agentDir, "SYSTEM.md");
749
- if (existsSync(globalPath)) {
750
- return globalPath;
751
- }
752
-
753
- return undefined;
754
- }
755
-
756
- private discoverAppendSystemPromptFile(): string | undefined {
757
- const projectPath = join(this.cwd, CONFIG_DIR_NAME, "APPEND_SYSTEM.md");
758
- if (existsSync(projectPath)) {
759
- return projectPath;
760
- }
761
-
762
- const globalPath = join(this.agentDir, "APPEND_SYSTEM.md");
763
- if (existsSync(globalPath)) {
764
- return globalPath;
735
+ private discoverFileInSearchPaths(filename: string): string | undefined {
736
+ const searchDirs = [join(this.cwd, CONFIG_DIR_NAME), this.agentDir];
737
+ for (const dir of searchDirs) {
738
+ const filePath = join(dir, filename);
739
+ if (existsSync(filePath)) {
740
+ return filePath;
741
+ }
765
742
  }
766
-
767
743
  return undefined;
768
744
  }
769
745