gsd-pi 2.68.1-dev.c1497ab → 2.69.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/dist/resources/extensions/gsd/auto-model-selection.js +27 -1
  2. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -0
  3. package/dist/resources/extensions/gsd/codebase-generator.js +12 -0
  4. package/dist/resources/extensions/gsd/model-router.js +53 -0
  5. package/dist/web/standalone/.next/BUILD_ID +1 -1
  6. package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
  7. package/dist/web/standalone/.next/build-manifest.json +3 -3
  8. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  9. package/dist/web/standalone/.next/required-server-files.json +3 -3
  10. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  11. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  13. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  21. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  23. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  24. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  25. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  27. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  30. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  31. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  32. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  33. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  34. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  35. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  36. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  37. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  38. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  39. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  40. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  41. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  42. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  43. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  44. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  45. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  46. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  47. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  48. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  49. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  50. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  51. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  52. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  53. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  54. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  55. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  56. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  57. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  58. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  59. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  60. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  61. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  62. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  63. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  64. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  65. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  66. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  67. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  68. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  69. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  70. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  71. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  72. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  73. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  74. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  75. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  76. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  77. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  78. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  79. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  80. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  81. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  82. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  83. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  84. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  85. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  86. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  87. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  88. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  89. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  90. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  91. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  92. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  93. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  94. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  95. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  96. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  97. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  99. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  101. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  103. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  105. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  114. package/dist/web/standalone/.next/server/app/index.html +1 -1
  115. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  116. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  117. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  118. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  120. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  121. package/dist/web/standalone/.next/server/app/page.js +2 -2
  122. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
  124. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  125. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  126. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/middleware.js +2 -2
  128. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  130. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  131. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  132. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  133. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
  134. package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
  135. package/dist/web/standalone/.next/static/chunks/app/page-7115e62689b5fd84.js +1 -0
  136. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
  137. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
  138. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  139. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  140. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  141. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  142. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  143. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  144. package/dist/web/standalone/server.js +1 -1
  145. package/package.json +1 -1
  146. package/packages/pi-ai/dist/index.d.ts +3 -0
  147. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  148. package/packages/pi-ai/dist/index.js +2 -0
  149. package/packages/pi-ai/dist/index.js.map +1 -1
  150. package/packages/pi-ai/dist/providers/amazon-bedrock.js +2 -2
  151. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  152. package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -2
  153. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  154. package/packages/pi-ai/dist/providers/google-shared.js +2 -2
  155. package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
  156. package/packages/pi-ai/dist/providers/mistral.js +2 -2
  157. package/packages/pi-ai/dist/providers/mistral.js.map +1 -1
  158. package/packages/pi-ai/dist/providers/openai-completions.js +2 -2
  159. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  160. package/packages/pi-ai/dist/providers/openai-responses-shared.js +2 -2
  161. package/packages/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
  162. package/packages/pi-ai/dist/providers/provider-capabilities.d.ts +59 -0
  163. package/packages/pi-ai/dist/providers/provider-capabilities.d.ts.map +1 -0
  164. package/packages/pi-ai/dist/providers/provider-capabilities.js +173 -0
  165. package/packages/pi-ai/dist/providers/provider-capabilities.js.map +1 -0
  166. package/packages/pi-ai/dist/providers/provider-capabilities.test.d.ts +2 -0
  167. package/packages/pi-ai/dist/providers/provider-capabilities.test.d.ts.map +1 -0
  168. package/packages/pi-ai/dist/providers/provider-capabilities.test.js +132 -0
  169. package/packages/pi-ai/dist/providers/provider-capabilities.test.js.map +1 -0
  170. package/packages/pi-ai/dist/providers/transform-messages-report.test.d.ts +2 -0
  171. package/packages/pi-ai/dist/providers/transform-messages-report.test.d.ts.map +1 -0
  172. package/packages/pi-ai/dist/providers/transform-messages-report.test.js +172 -0
  173. package/packages/pi-ai/dist/providers/transform-messages-report.test.js.map +1 -0
  174. package/packages/pi-ai/dist/providers/transform-messages.d.ts +34 -1
  175. package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
  176. package/packages/pi-ai/dist/providers/transform-messages.js +73 -2
  177. package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
  178. package/packages/pi-ai/src/index.ts +3 -0
  179. package/packages/pi-ai/src/providers/amazon-bedrock.ts +2 -2
  180. package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -2
  181. package/packages/pi-ai/src/providers/google-shared.ts +2 -2
  182. package/packages/pi-ai/src/providers/mistral.ts +2 -2
  183. package/packages/pi-ai/src/providers/openai-completions.ts +2 -2
  184. package/packages/pi-ai/src/providers/openai-responses-shared.ts +2 -2
  185. package/packages/pi-ai/src/providers/provider-capabilities.test.ts +174 -0
  186. package/packages/pi-ai/src/providers/provider-capabilities.ts +215 -0
  187. package/packages/pi-ai/src/providers/transform-messages-report.test.ts +189 -0
  188. package/packages/pi-ai/src/providers/transform-messages.ts +94 -1
  189. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  190. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  191. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  192. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  193. package/packages/pi-coding-agent/dist/core/extensions/loader.js +10 -1
  194. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  195. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -1
  196. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  197. package/packages/pi-coding-agent/dist/core/extensions/runner.js +15 -0
  198. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  199. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +41 -0
  200. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  201. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  202. package/packages/pi-coding-agent/dist/core/tools/index.d.ts +1 -0
  203. package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
  204. package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
  205. package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
  206. package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.d.ts +27 -0
  207. package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.d.ts.map +1 -0
  208. package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.js +69 -0
  209. package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.js.map +1 -0
  210. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  211. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  212. package/packages/pi-coding-agent/dist/index.js +3 -1
  213. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  214. package/packages/pi-coding-agent/package.json +1 -1
  215. package/packages/pi-coding-agent/src/core/extensions/index.ts +4 -0
  216. package/packages/pi-coding-agent/src/core/extensions/loader.ts +11 -1
  217. package/packages/pi-coding-agent/src/core/extensions/runner.ts +18 -0
  218. package/packages/pi-coding-agent/src/core/extensions/types.ts +45 -0
  219. package/packages/pi-coding-agent/src/core/tools/index.ts +7 -0
  220. package/packages/pi-coding-agent/src/core/tools/tool-compatibility-registry.ts +83 -0
  221. package/packages/pi-coding-agent/src/index.ts +9 -0
  222. package/pkg/package.json +1 -1
  223. package/src/resources/extensions/gsd/auto-model-selection.ts +35 -1
  224. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +8 -0
  225. package/src/resources/extensions/gsd/codebase-generator.ts +16 -0
  226. package/src/resources/extensions/gsd/model-router.ts +73 -0
  227. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +28 -0
  228. package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +199 -0
  229. package/dist/web/standalone/.next/static/chunks/app/page-f1e30ab6bb269149.js +0 -1
  230. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
  231. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
  232. /package/dist/web/standalone/.next/static/{5D80IWYltFwlAJiCZ84MC → DrWdzskk28E5Qz-Wjw1mj}/_buildManifest.js +0 -0
  233. /package/dist/web/standalone/.next/static/{5D80IWYltFwlAJiCZ84MC → DrWdzskk28E5Qz-Wjw1mj}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core session management\n\n// Config paths\nexport { getAgentDir, VERSION } from \"./config.js\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype ParsedSkillBlock,\n\ttype PromptOptions,\n\tparseSkillBlock,\n\ttype SessionStats,\n} from \"./core/agent-session.js\";\n// Auth and model registry\nexport {\n\ttype ApiKeyCredential,\n\ttype AuthCredential,\n\tAuthStorage,\n\ttype AuthStorageBackend,\n\tFileAuthStorageBackend,\n\tInMemoryAuthStorageBackend,\n\ttype OAuthCredential,\n} from \"./core/auth-storage.js\";\n// Compaction\nexport {\n\ttype BranchPreparation,\n\ttype BranchSummaryResult,\n\ttype CollectEntriesResult,\n\ttype CompactionResult,\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\ttype FileOperations,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\ttype GenerateBranchSummaryOptions,\n\tgenerateBranchSummary,\n\tgenerateSummary,\n\tgetLastAssistantUsage,\n\tprepareBranchEntries,\n\tserializeConversation,\n\tshouldCompact,\n} from \"./core/compaction/index.js\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./core/event-bus.js\";\n// Extension system\nexport type {\n\tAgentEndEvent,\n\tAgentStartEvent,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppAction,\n\tBashToolCallEvent,\n\tBeforeAgentStartEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tCompactOptions,\n\tContextEvent,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tEditToolCallEvent,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\tExtensionAPI,\n\tExtensionManifest,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tGrepToolCallEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tProviderConfig,\n\tProviderModelConfig,\n\tLifecycleHookContext,\n\tLifecycleHookHandler,\n\tLifecycleHookMap,\n\tLifecycleHookPhase,\n\tLifecycleHookScope,\n\tReadToolCallEvent,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeForkEvent,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeTreeEvent,\n\tSessionCompactEvent,\n\tSessionForkEvent,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n\tSessionSwitchEvent,\n\tSessionTreeEvent,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tTerminalInputHandler,\n\tToolCallEvent,\n\tToolDefinition,\n\tToolInfo,\n\tSortResult,\n\tSortWarning,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUserBashEvent,\n\tUserBashEventResult,\n\tBashTransformEvent,\n\tBashTransformEventResult,\n\tWidgetPlacement,\n\tWriteToolCallEvent,\n} from \"./core/extensions/index.js\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tExtensionRunner,\n\timportExtensionModule,\n\tisToolCallEventType,\n\tisToolResultEventType,\n\treadManifest,\n\treadManifestFromEntryPath,\n\tsortExtensionPaths,\n\twrapRegisteredTool,\n\twrapRegisteredTools,\n\twrapToolsWithExtensions,\n\twrapToolWithExtensions,\n} from \"./core/extensions/index.js\";\n// Footer data provider (git branch + extension statuses - data not otherwise available to extensions)\nexport type { ReadonlyFooterDataProvider } from \"./core/footer-data-provider.js\";\nexport { convertToLlm } from \"./core/messages.js\";\nexport { ModelDiscoveryCache } from \"./core/discovery-cache.js\";\nexport type { DiscoveredModel, DiscoveryResult, ProviderDiscoveryAdapter } from \"./core/model-discovery.js\";\nexport { getDiscoverableProviders, getDiscoveryAdapter } from \"./core/model-discovery.js\";\nexport { ModelRegistry } from \"./core/model-registry.js\";\nexport { ModelsJsonWriter } from \"./core/models-json-writer.js\";\nexport type {\n\tPackageManager,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n} from \"./core/package-manager.js\";\nexport { DefaultPackageManager } from \"./core/package-manager.js\";\nexport type { PackageCommand, PackageCommandOptions, PackageCommandRunnerOptions, PackageCommandRunnerResult } from \"./core/package-commands.js\";\nexport { getPackageCommandUsage, parsePackageCommand, runPackageCommand } from \"./core/package-commands.js\";\nexport type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from \"./core/resource-loader.js\";\nexport { DefaultResourceLoader } from \"./core/resource-loader.js\";\n// SDK for programmatic usage\nexport {\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\t// Factory\n\tcreateAgentSession,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype PromptTemplate,\n\t// Pre-built tools (use process.cwd())\n\treadOnlyTools,\n} from \"./core/sdk.js\";\nexport {\n\ttype BranchSummaryEntry,\n\tbuildSessionContext,\n\ttype CompactionEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype FileEntry,\n\tgetLatestCompactionEntry,\n\ttype ModelChangeEntry,\n\tmigrateSessionEntries,\n\ttype NewSessionOptions,\n\tparseSessionEntries,\n\ttype SessionContext,\n\ttype SessionEntry,\n\ttype SessionEntryBase,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\ttype SessionInfoEntry,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.js\";\n// Blob and artifact storage\nexport { BlobStore, isBlobRef, parseBlobRef, externalizeImageData, resolveImageData } from \"./core/blob-store.js\";\nexport { ArtifactManager } from \"./core/artifact-manager.js\";\nexport {\n\ttype AsyncSettings,\n\ttype CompactionSettings,\n\ttype ImageSettings,\n\ttype MemorySettings,\n\ttype PackageSource,\n\ttype RetrySettings,\n\tSettingsManager,\n\ttype TaskIsolationSettings,\n} from \"./core/settings-manager.js\";\nexport {\n\tSAFE_COMMAND_PREFIXES,\n\tsetAllowedCommandPrefixes,\n\tgetAllowedCommandPrefixes,\n} from \"./core/resolve-config-value.js\";\n// Skills\nexport {\n\tECOSYSTEM_SKILLS_DIR,\n\tECOSYSTEM_PROJECT_SKILLS_DIR,\n\tformatSkillsForPrompt,\n\tgetLoadedSkills,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n} from \"./core/skills.js\";\n// Tools\nexport {\n\ttype BashInterceptorRule,\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tbashTool,\n\trewriteBackgroundCommand,\n\tcheckBashInterception,\n\ttype CompiledInterceptor,\n\tcompileInterceptor,\n\tDEFAULT_BASH_INTERCEPTOR_RULES,\n\tcodingTools,\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\teditTool,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tfindTool,\n\tformatSize,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\tgrepTool,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\tlsTool,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\treadTool,\n\ttype ToolsOptions,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twriteTool,\n\t// Hashline edit mode tools\n\thashlineEditTool,\n\thashlineReadTool,\n\thashlineCodingTools,\n\tcreateHashlineEditTool,\n\tcreateHashlineReadTool,\n\tcreateHashlineCodingTools,\n\ttype HashlineEditInput,\n\ttype HashlineEditToolDetails,\n\ttype HashlineEditToolOptions,\n\ttype HashlineReadToolDetails,\n\ttype HashlineReadToolInput,\n\ttype HashlineReadToolOptions,\n} from \"./core/tools/index.js\";\n// Main entry point\nexport { main } from \"./main.js\";\n// Run modes for programmatic SDK usage\nexport {\n\tInteractiveMode,\n\ttype InteractiveModeOptions,\n\ttype PrintModeOptions,\n\trunPrintMode,\n\trunRpcMode,\n\ttype ModelInfo,\n\tRpcClient,\n\ttype RpcClientOptions,\n\ttype RpcEventListener,\n\ttype RpcCommand,\n\ttype RpcInitResult,\n\ttype RpcProtocolVersion,\n\ttype RpcResponse,\n\ttype RpcSessionState,\n\ttype RpcV2Event,\n} from \"./modes/index.js\";\n// RPC JSONL utilities\nexport { attachJsonlLineReader, serializeJsonLine } from \"./modes/rpc/jsonl.js\";\n// UI components for extensions\nexport {\n\tArminComponent,\n\tAssistantMessageComponent,\n\tappKey,\n\tappKeyHint,\n\tBashExecutionComponent,\n\tBorderedLoader,\n\tBranchSummaryMessageComponent,\n\tCompactionSummaryMessageComponent,\n\tCustomEditor,\n\tCustomMessageComponent,\n\tDynamicBorder,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\teditorKey,\n\tFooterComponent,\n\tkeyHint,\n\tLoginDialogComponent,\n\tModelSelectorComponent,\n\tOAuthSelectorComponent,\n\tProviderManagerComponent,\n\ttype RenderDiffOptions,\n\trawKeyHint,\n\trenderDiff,\n\tSessionSelectorComponent,\n\ttype SettingsCallbacks,\n\ttype SettingsConfig,\n\tSettingsSelectorComponent,\n\tShowImagesSelectorComponent,\n\tSkillInvocationMessageComponent,\n\tThemeSelectorComponent,\n\tThinkingSelectorComponent,\n\tToolExecutionComponent,\n\ttype ToolExecutionOptions,\n\tTreeSelectorComponent,\n\ttruncateToVisualLines,\n\tUserMessageComponent,\n\tUserMessageSelectorComponent,\n\ttype VisualTruncateResult,\n} from \"./modes/interactive/components/index.js\";\n// Theme utilities for custom tools and extensions\nexport {\n\tgetLanguageFromPath,\n\tgetMarkdownTheme,\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\thighlightCode,\n\tinitTheme,\n\tTheme,\n\ttype ThemeColor,\n} from \"./modes/interactive/theme/theme.js\";\n// Clipboard utilities\nexport { copyToClipboard } from \"./utils/clipboard.js\";\nexport { parseFrontmatter, stripFrontmatter } from \"./utils/frontmatter.js\";\n// Shell utilities\nexport { getShellConfig, sanitizeCommand } from \"./utils/shell.js\";\n// Cross-platform path display\nexport { toPosixPath } from \"./utils/path-display.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Core session management\n\n// Config paths\nexport { getAgentDir, VERSION } from \"./config.js\";\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype ModelCycleResult,\n\ttype ParsedSkillBlock,\n\ttype PromptOptions,\n\tparseSkillBlock,\n\ttype SessionStats,\n} from \"./core/agent-session.js\";\n// Auth and model registry\nexport {\n\ttype ApiKeyCredential,\n\ttype AuthCredential,\n\tAuthStorage,\n\ttype AuthStorageBackend,\n\tFileAuthStorageBackend,\n\tInMemoryAuthStorageBackend,\n\ttype OAuthCredential,\n} from \"./core/auth-storage.js\";\n// Compaction\nexport {\n\ttype BranchPreparation,\n\ttype BranchSummaryResult,\n\ttype CollectEntriesResult,\n\ttype CompactionResult,\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\ttype FileOperations,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\ttype GenerateBranchSummaryOptions,\n\tgenerateBranchSummary,\n\tgenerateSummary,\n\tgetLastAssistantUsage,\n\tprepareBranchEntries,\n\tserializeConversation,\n\tshouldCompact,\n} from \"./core/compaction/index.js\";\nexport { createEventBus, type EventBus, type EventBusController } from \"./core/event-bus.js\";\n// Extension system\nexport type {\n\tAdjustToolSetEvent,\n\tAdjustToolSetResult,\n\tAgentEndEvent,\n\tAgentStartEvent,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppAction,\n\tBashToolCallEvent,\n\tBeforeAgentStartEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tCompactOptions,\n\tContextEvent,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tEditToolCallEvent,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\tExtensionAPI,\n\tExtensionManifest,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tGrepToolCallEvent,\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tProviderConfig,\n\tProviderModelConfig,\n\tLifecycleHookContext,\n\tLifecycleHookHandler,\n\tLifecycleHookMap,\n\tLifecycleHookPhase,\n\tLifecycleHookScope,\n\tReadToolCallEvent,\n\tRegisteredCommand,\n\tRegisteredTool,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeForkEvent,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeTreeEvent,\n\tSessionCompactEvent,\n\tSessionForkEvent,\n\tSessionShutdownEvent,\n\tSessionStartEvent,\n\tSessionSwitchEvent,\n\tSessionTreeEvent,\n\tSlashCommandInfo,\n\tSlashCommandLocation,\n\tSlashCommandSource,\n\tTerminalInputHandler,\n\tToolCallEvent,\n\tToolCompatibility,\n\tToolDefinition,\n\tToolInfo,\n\tSortResult,\n\tSortWarning,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUserBashEvent,\n\tUserBashEventResult,\n\tBashTransformEvent,\n\tBashTransformEventResult,\n\tWidgetPlacement,\n\tWriteToolCallEvent,\n} from \"./core/extensions/index.js\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tExtensionRunner,\n\timportExtensionModule,\n\tisToolCallEventType,\n\tisToolResultEventType,\n\treadManifest,\n\treadManifestFromEntryPath,\n\tsortExtensionPaths,\n\twrapRegisteredTool,\n\twrapRegisteredTools,\n\twrapToolsWithExtensions,\n\twrapToolWithExtensions,\n} from \"./core/extensions/index.js\";\n// Footer data provider (git branch + extension statuses - data not otherwise available to extensions)\nexport type { ReadonlyFooterDataProvider } from \"./core/footer-data-provider.js\";\nexport { convertToLlm } from \"./core/messages.js\";\nexport { ModelDiscoveryCache } from \"./core/discovery-cache.js\";\nexport type { DiscoveredModel, DiscoveryResult, ProviderDiscoveryAdapter } from \"./core/model-discovery.js\";\nexport { getDiscoverableProviders, getDiscoveryAdapter } from \"./core/model-discovery.js\";\nexport { ModelRegistry } from \"./core/model-registry.js\";\nexport { ModelsJsonWriter } from \"./core/models-json-writer.js\";\nexport type {\n\tPackageManager,\n\tPathMetadata,\n\tProgressCallback,\n\tProgressEvent,\n\tResolvedPaths,\n\tResolvedResource,\n} from \"./core/package-manager.js\";\nexport { DefaultPackageManager } from \"./core/package-manager.js\";\nexport type { PackageCommand, PackageCommandOptions, PackageCommandRunnerOptions, PackageCommandRunnerResult } from \"./core/package-commands.js\";\nexport { getPackageCommandUsage, parsePackageCommand, runPackageCommand } from \"./core/package-commands.js\";\nexport type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from \"./core/resource-loader.js\";\nexport { DefaultResourceLoader } from \"./core/resource-loader.js\";\n// SDK for programmatic usage\nexport {\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\t// Factory\n\tcreateAgentSession,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\ttype PromptTemplate,\n\t// Pre-built tools (use process.cwd())\n\treadOnlyTools,\n} from \"./core/sdk.js\";\nexport {\n\ttype BranchSummaryEntry,\n\tbuildSessionContext,\n\ttype CompactionEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype FileEntry,\n\tgetLatestCompactionEntry,\n\ttype ModelChangeEntry,\n\tmigrateSessionEntries,\n\ttype NewSessionOptions,\n\tparseSessionEntries,\n\ttype SessionContext,\n\ttype SessionEntry,\n\ttype SessionEntryBase,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\ttype SessionInfoEntry,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.js\";\n// Blob and artifact storage\nexport { BlobStore, isBlobRef, parseBlobRef, externalizeImageData, resolveImageData } from \"./core/blob-store.js\";\nexport { ArtifactManager } from \"./core/artifact-manager.js\";\nexport {\n\ttype AsyncSettings,\n\ttype CompactionSettings,\n\ttype ImageSettings,\n\ttype MemorySettings,\n\ttype PackageSource,\n\ttype RetrySettings,\n\tSettingsManager,\n\ttype TaskIsolationSettings,\n} from \"./core/settings-manager.js\";\nexport {\n\tSAFE_COMMAND_PREFIXES,\n\tsetAllowedCommandPrefixes,\n\tgetAllowedCommandPrefixes,\n} from \"./core/resolve-config-value.js\";\n// Skills\nexport {\n\tECOSYSTEM_SKILLS_DIR,\n\tECOSYSTEM_PROJECT_SKILLS_DIR,\n\tformatSkillsForPrompt,\n\tgetLoadedSkills,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n} from \"./core/skills.js\";\n// Tools\nexport {\n\ttype BashInterceptorRule,\n\ttype BashOperations,\n\ttype BashSpawnContext,\n\ttype BashSpawnHook,\n\ttype BashToolDetails,\n\ttype BashToolInput,\n\ttype BashToolOptions,\n\tbashTool,\n\trewriteBackgroundCommand,\n\tcheckBashInterception,\n\ttype CompiledInterceptor,\n\tcompileInterceptor,\n\tDEFAULT_BASH_INTERCEPTOR_RULES,\n\tcodingTools,\n\tDEFAULT_MAX_BYTES,\n\tDEFAULT_MAX_LINES,\n\ttype EditOperations,\n\ttype EditToolDetails,\n\ttype EditToolInput,\n\ttype EditToolOptions,\n\teditTool,\n\ttype FindOperations,\n\ttype FindToolDetails,\n\ttype FindToolInput,\n\ttype FindToolOptions,\n\tfindTool,\n\tformatSize,\n\ttype GrepOperations,\n\ttype GrepToolDetails,\n\ttype GrepToolInput,\n\ttype GrepToolOptions,\n\tgrepTool,\n\ttype LsOperations,\n\ttype LsToolDetails,\n\ttype LsToolInput,\n\ttype LsToolOptions,\n\tlsTool,\n\ttype ReadOperations,\n\ttype ReadToolDetails,\n\ttype ReadToolInput,\n\ttype ReadToolOptions,\n\treadTool,\n\ttype ToolsOptions,\n\ttype TruncationOptions,\n\ttype TruncationResult,\n\ttruncateHead,\n\ttruncateLine,\n\ttruncateTail,\n\ttype WriteOperations,\n\ttype WriteToolInput,\n\ttype WriteToolOptions,\n\twriteTool,\n\t// Hashline edit mode tools\n\thashlineEditTool,\n\thashlineReadTool,\n\thashlineCodingTools,\n\tcreateHashlineEditTool,\n\tcreateHashlineReadTool,\n\tcreateHashlineCodingTools,\n\ttype HashlineEditInput,\n\ttype HashlineEditToolDetails,\n\ttype HashlineEditToolOptions,\n\ttype HashlineReadToolDetails,\n\ttype HashlineReadToolInput,\n\ttype HashlineReadToolOptions,\n\t// Tool compatibility registry (ADR-005)\n\tregisterToolCompatibility,\n\tgetToolCompatibility,\n\tgetAllToolCompatibility,\n\tregisterMcpToolCompatibility,\n\tresetToolCompatibilityRegistry,\n} from \"./core/tools/index.js\";\n// Main entry point\nexport { main } from \"./main.js\";\n// Run modes for programmatic SDK usage\nexport {\n\tInteractiveMode,\n\ttype InteractiveModeOptions,\n\ttype PrintModeOptions,\n\trunPrintMode,\n\trunRpcMode,\n\ttype ModelInfo,\n\tRpcClient,\n\ttype RpcClientOptions,\n\ttype RpcEventListener,\n\ttype RpcCommand,\n\ttype RpcInitResult,\n\ttype RpcProtocolVersion,\n\ttype RpcResponse,\n\ttype RpcSessionState,\n\ttype RpcV2Event,\n} from \"./modes/index.js\";\n// RPC JSONL utilities\nexport { attachJsonlLineReader, serializeJsonLine } from \"./modes/rpc/jsonl.js\";\n// UI components for extensions\nexport {\n\tArminComponent,\n\tAssistantMessageComponent,\n\tappKey,\n\tappKeyHint,\n\tBashExecutionComponent,\n\tBorderedLoader,\n\tBranchSummaryMessageComponent,\n\tCompactionSummaryMessageComponent,\n\tCustomEditor,\n\tCustomMessageComponent,\n\tDynamicBorder,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\teditorKey,\n\tFooterComponent,\n\tkeyHint,\n\tLoginDialogComponent,\n\tModelSelectorComponent,\n\tOAuthSelectorComponent,\n\tProviderManagerComponent,\n\ttype RenderDiffOptions,\n\trawKeyHint,\n\trenderDiff,\n\tSessionSelectorComponent,\n\ttype SettingsCallbacks,\n\ttype SettingsConfig,\n\tSettingsSelectorComponent,\n\tShowImagesSelectorComponent,\n\tSkillInvocationMessageComponent,\n\tThemeSelectorComponent,\n\tThinkingSelectorComponent,\n\tToolExecutionComponent,\n\ttype ToolExecutionOptions,\n\tTreeSelectorComponent,\n\ttruncateToVisualLines,\n\tUserMessageComponent,\n\tUserMessageSelectorComponent,\n\ttype VisualTruncateResult,\n} from \"./modes/interactive/components/index.js\";\n// Theme utilities for custom tools and extensions\nexport {\n\tgetLanguageFromPath,\n\tgetMarkdownTheme,\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\thighlightCode,\n\tinitTheme,\n\tTheme,\n\ttype ThemeColor,\n} from \"./modes/interactive/theme/theme.js\";\n// Clipboard utilities\nexport { copyToClipboard } from \"./utils/clipboard.js\";\nexport { parseFrontmatter, stripFrontmatter } from \"./utils/frontmatter.js\";\n// Shell utilities\nexport { getShellConfig, sanitizeCommand } from \"./utils/shell.js\";\n// Cross-platform path display\nexport { toPosixPath } from \"./utils/path-display.js\";\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gsd/pi-coding-agent",
3
- "version": "2.68.1",
3
+ "version": "2.69.0",
4
4
  "description": "Coding agent CLI (vendored from pi-mono)",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -43,6 +43,9 @@ export type {
43
43
  BeforeProviderRequestEventResult,
44
44
  // Context
45
45
  CompactOptions,
46
+ // Events - Adjust Tool Set (ADR-005)
47
+ AdjustToolSetEvent,
48
+ AdjustToolSetResult,
46
49
  // Events - Agent
47
50
  ContextEvent,
48
51
  // Event Results
@@ -135,6 +138,7 @@ export type {
135
138
  ToolCallEvent,
136
139
  ToolCallEventResult,
137
140
  // Tools
141
+ ToolCompatibility,
138
142
  ToolDefinition,
139
143
  // Events - Tool Execution
140
144
  ToolExecutionEndEvent,
@@ -38,6 +38,7 @@ import type { ExecOptions } from "../exec.js";
38
38
  import { execCommand } from "../exec.js";
39
39
  import { getUntrustedExtensionPaths } from "./project-trust.js";
40
40
  export { isProjectTrusted, trustProject, getUntrustedExtensionPaths } from "./project-trust.js";
41
+ import { registerToolCompatibility } from "../tools/tool-compatibility-registry.js";
41
42
  import type {
42
43
  Extension,
43
44
  ExtensionAPI,
@@ -428,8 +429,9 @@ export function createExtensionRuntime(): ExtensionRuntime {
428
429
  unregisterProvider: (name) => {
429
430
  runtime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);
430
431
  },
431
- // Stub replaced by ExtensionRunner at construction time via bindEmitMethods().
432
+ // Stubs replaced by ExtensionRunner at construction time via bindEmitMethods().
432
433
  emitBeforeModelSelect: async () => undefined,
434
+ emitAdjustToolSet: async () => undefined,
433
435
  };
434
436
 
435
437
  return runtime;
@@ -459,6 +461,10 @@ function createExtensionAPI(
459
461
  definition: tool,
460
462
  extensionPath: extension.path,
461
463
  });
464
+ // ADR-005: auto-register tool compatibility metadata
465
+ if (tool.compatibility) {
466
+ registerToolCompatibility(tool.name, tool.compatibility);
467
+ }
462
468
  runtime.refreshTools();
463
469
  },
464
470
 
@@ -585,6 +591,10 @@ function createExtensionAPI(
585
591
  return runtime.emitBeforeModelSelect(event);
586
592
  },
587
593
 
594
+ async emitAdjustToolSet(event: Omit<import("./types.js").AdjustToolSetEvent, "type">): Promise<import("./types.js").AdjustToolSetResult | undefined> {
595
+ return runtime.emitAdjustToolSet(event);
596
+ },
597
+
588
598
  events: eventBus,
589
599
  } as ExtensionAPI;
590
600
 
@@ -11,6 +11,8 @@ import type { KeyAction, KeybindingsConfig } from "../keybindings.js";
11
11
  import type { ModelRegistry } from "../model-registry.js";
12
12
  import type { SessionManager } from "../session-manager.js";
13
13
  import type {
14
+ AdjustToolSetEvent,
15
+ AdjustToolSetResult,
14
16
  BeforeAgentStartEvent,
15
17
  BeforeAgentStartEventResult,
16
18
  BeforeModelSelectEvent,
@@ -234,6 +236,7 @@ export class ExtensionRunner {
234
236
  this.modelRegistry = modelRegistry;
235
237
  // Bind emit methods into the shared runtime so createExtensionAPI can delegate to them.
236
238
  this.runtime.emitBeforeModelSelect = (event) => this.emitBeforeModelSelect(event);
239
+ this.runtime.emitAdjustToolSet = (event) => this.emitAdjustToolSet(event);
237
240
  }
238
241
 
239
242
  bindCore(actions: ExtensionActions, contextActions: ExtensionContextActions): void {
@@ -713,6 +716,21 @@ export class ExtensionRunner {
713
716
  return result;
714
717
  }
715
718
 
719
+ async emitAdjustToolSet(event: Omit<AdjustToolSetEvent, "type">): Promise<AdjustToolSetResult | undefined> {
720
+ let result: AdjustToolSetResult | undefined;
721
+ await this.invokeHandlers("adjust_tool_set", () => ({
722
+ type: "adjust_tool_set" as const,
723
+ ...event,
724
+ } satisfies AdjustToolSetEvent), (handlerResult) => {
725
+ if (handlerResult) {
726
+ result = handlerResult as AdjustToolSetResult;
727
+ return { done: true }; // first override wins
728
+ }
729
+ return { done: false };
730
+ });
731
+ return result;
732
+ }
733
+
716
734
  async emitBeforeAgentStart(
717
735
  prompt: string,
718
736
  images: ImageContent[] | undefined,
@@ -331,6 +331,19 @@ export interface ToolRenderResultOptions {
331
331
  isPartial: boolean;
332
332
  }
333
333
 
334
+ /**
335
+ * Tool compatibility metadata for provider-aware tool filtering (ADR-005 Phase 2).
336
+ * Tools without compatibility metadata are assumed universally compatible.
337
+ */
338
+ export interface ToolCompatibility {
339
+ /** Tool produces image content in results (filtered for providers without imageToolResults) */
340
+ producesImages?: boolean;
341
+ /** Tool requires schema features that some providers don't support (e.g., ["patternProperties"]) */
342
+ schemaFeatures?: string[];
343
+ /** Tool is effective only with models above a minimum capability threshold */
344
+ minCapabilityTier?: "light" | "standard" | "heavy";
345
+ }
346
+
334
347
  /**
335
348
  * Tool definition for registerTool().
336
349
  */
@@ -347,6 +360,8 @@ export interface ToolDefinition<TParams extends TSchema = TSchema, TDetails = un
347
360
  promptGuidelines?: string[];
348
361
  /** Parameter schema (TypeBox) */
349
362
  parameters: TParams;
363
+ /** Provider compatibility metadata (ADR-005). Omit for universally compatible tools. */
364
+ compatibility?: ToolCompatibility;
350
365
 
351
366
  /** Execute the tool. */
352
367
  execute(
@@ -619,6 +634,30 @@ export interface BeforeModelSelectResult {
619
634
  modelId: string;
620
635
  }
621
636
 
637
+ /**
638
+ * Fired after model selection to allow extensions to adjust the active tool set (ADR-005 Phase 4).
639
+ * Extensions can add, remove, or reorder tools based on the selected model's provider capabilities.
640
+ */
641
+ export interface AdjustToolSetEvent {
642
+ type: "adjust_tool_set";
643
+ /** The selected model's API type */
644
+ selectedModelApi: string;
645
+ /** The selected model's provider */
646
+ selectedModelProvider: string;
647
+ /** The selected model ID */
648
+ selectedModelId: string;
649
+ /** Current active tool names */
650
+ activeToolNames: string[];
651
+ /** Tools already filtered by provider compatibility */
652
+ filteredTools: string[];
653
+ }
654
+
655
+ /** Result from adjust_tool_set event handler. Return { toolNames } to override tool set. */
656
+ export interface AdjustToolSetResult {
657
+ /** Replacement tool names. If omitted, the default filtering is used. */
658
+ toolNames?: string[];
659
+ }
660
+
622
661
  // ============================================================================
623
662
  // User Bash Events
624
663
  // ============================================================================
@@ -1069,6 +1108,7 @@ export interface ExtensionAPI {
1069
1108
  on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
1070
1109
  on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): void;
1071
1110
  on(event: "before_model_select", handler: ExtensionHandler<BeforeModelSelectEvent, BeforeModelSelectResult>): void;
1111
+ on(event: "adjust_tool_set", handler: ExtensionHandler<AdjustToolSetEvent, AdjustToolSetResult>): void;
1072
1112
 
1073
1113
  // =========================================================================
1074
1114
  // Event Emission (for host extensions that orchestrate model selection)
@@ -1077,6 +1117,9 @@ export interface ExtensionAPI {
1077
1117
  /** Emit before_model_select event. Returns override model ID or undefined. */
1078
1118
  emitBeforeModelSelect(event: Omit<BeforeModelSelectEvent, "type">): Promise<BeforeModelSelectResult | undefined>;
1079
1119
 
1120
+ /** Emit adjust_tool_set event (ADR-005). Returns override tool names or undefined. */
1121
+ emitAdjustToolSet(event: Omit<AdjustToolSetEvent, "type">): Promise<AdjustToolSetResult | undefined>;
1122
+
1080
1123
  // =========================================================================
1081
1124
  // Tool Registration
1082
1125
  // =========================================================================
@@ -1395,6 +1438,8 @@ export interface ExtensionRuntimeState {
1395
1438
  unregisterProvider: (name: string) => void;
1396
1439
  /** Emit before_model_select event to all registered handlers. Bound by ExtensionRunner. */
1397
1440
  emitBeforeModelSelect: (event: Omit<BeforeModelSelectEvent, "type">) => Promise<BeforeModelSelectResult | undefined>;
1441
+ /** Emit adjust_tool_set event to all registered handlers. Bound by ExtensionRunner (ADR-005). */
1442
+ emitAdjustToolSet: (event: Omit<AdjustToolSetEvent, "type">) => Promise<AdjustToolSetResult | undefined>;
1398
1443
  }
1399
1444
 
1400
1445
  /**
@@ -112,6 +112,13 @@ export {
112
112
  lspTool,
113
113
  } from "../lsp/index.js";
114
114
  export type { LspServerStatus } from "../lsp/client.js";
115
+ export {
116
+ registerToolCompatibility,
117
+ getToolCompatibility,
118
+ getAllToolCompatibility,
119
+ registerMcpToolCompatibility,
120
+ resetToolCompatibilityRegistry,
121
+ } from "./tool-compatibility-registry.js";
115
122
 
116
123
  import type { AgentTool } from "@gsd/pi-agent-core";
117
124
  import { type BashToolOptions, bashTool, createBashTool } from "./bash.js";
@@ -0,0 +1,83 @@
1
+ // GSD-2 — Tool Compatibility Registry (ADR-005 Phase 2)
2
+ // Maps tool names to their provider compatibility metadata.
3
+ // Used by the model router to filter tools incompatible with the selected provider.
4
+
5
+ import type { ToolCompatibility } from "../extensions/types.js";
6
+
7
+ // ─── Registry State ─────────────────────────────────────────────────────────
8
+
9
+ const registry = new Map<string, ToolCompatibility>();
10
+
11
+ // ─── Built-in Tool Compatibility (universally compatible) ───────────────────
12
+ // Built-in tools (bash, read, write, edit, grep, find, ls) produce text-only
13
+ // results and use standard JSON Schema — compatible with all providers.
14
+
15
+ const BUILTIN_TOOLS: Record<string, ToolCompatibility> = {
16
+ bash: {},
17
+ read: {},
18
+ write: {},
19
+ edit: {},
20
+ grep: {},
21
+ find: {},
22
+ ls: {},
23
+ lsp: {},
24
+ hashline_edit: {},
25
+ hashline_read: {},
26
+ };
27
+
28
+ // Pre-populate registry with built-in tools
29
+ for (const [name, compat] of Object.entries(BUILTIN_TOOLS)) {
30
+ registry.set(name, compat);
31
+ }
32
+
33
+ // ─── MCP Tool Defaults ─────────────────────────────────────────────────────
34
+ // MCP tools may use complex schemas. Default to cautious compatibility.
35
+
36
+ const MCP_TOOL_DEFAULTS: ToolCompatibility = {
37
+ schemaFeatures: ["patternProperties"],
38
+ };
39
+
40
+ // ─── Public API ─────────────────────────────────────────────────────────────
41
+
42
+ /**
43
+ * Register compatibility metadata for a tool.
44
+ * Called automatically by registerTool() for extension tools that include
45
+ * compatibility metadata in their ToolDefinition.
46
+ */
47
+ export function registerToolCompatibility(toolName: string, compatibility: ToolCompatibility): void {
48
+ registry.set(toolName, compatibility);
49
+ }
50
+
51
+ /**
52
+ * Get compatibility metadata for a tool.
53
+ * Returns undefined for unknown tools (treated as universally compatible
54
+ * per ADR-005 principle: "fail open, don't restrict without data").
55
+ */
56
+ export function getToolCompatibility(toolName: string): ToolCompatibility | undefined {
57
+ return registry.get(toolName);
58
+ }
59
+
60
+ /**
61
+ * Get all registered tool compatibility entries.
62
+ */
63
+ export function getAllToolCompatibility(): ReadonlyMap<string, ToolCompatibility> {
64
+ return registry;
65
+ }
66
+
67
+ /**
68
+ * Register an MCP tool with default cautious compatibility.
69
+ * MCP tools may use complex schemas that some providers don't support.
70
+ */
71
+ export function registerMcpToolCompatibility(toolName: string, overrides?: Partial<ToolCompatibility>): void {
72
+ registry.set(toolName, { ...MCP_TOOL_DEFAULTS, ...overrides });
73
+ }
74
+
75
+ /**
76
+ * Clear all non-builtin entries (for testing).
77
+ */
78
+ export function resetToolCompatibilityRegistry(): void {
79
+ registry.clear();
80
+ for (const [name, compat] of Object.entries(BUILTIN_TOOLS)) {
81
+ registry.set(name, compat);
82
+ }
83
+ }
@@ -49,6 +49,8 @@ export {
49
49
  export { createEventBus, type EventBus, type EventBusController } from "./core/event-bus.js";
50
50
  // Extension system
51
51
  export type {
52
+ AdjustToolSetEvent,
53
+ AdjustToolSetResult,
52
54
  AgentEndEvent,
53
55
  AgentStartEvent,
54
56
  AgentToolResult,
@@ -118,6 +120,7 @@ export type {
118
120
  SlashCommandSource,
119
121
  TerminalInputHandler,
120
122
  ToolCallEvent,
123
+ ToolCompatibility,
121
124
  ToolDefinition,
122
125
  ToolInfo,
123
126
  SortResult,
@@ -310,6 +313,12 @@ export {
310
313
  type HashlineReadToolDetails,
311
314
  type HashlineReadToolInput,
312
315
  type HashlineReadToolOptions,
316
+ // Tool compatibility registry (ADR-005)
317
+ registerToolCompatibility,
318
+ getToolCompatibility,
319
+ getAllToolCompatibility,
320
+ registerMcpToolCompatibility,
321
+ resetToolCompatibilityRegistry,
313
322
  } from "./core/tools/index.js";
314
323
  // Main entry point
315
324
  export { main } from "./main.js";
package/pkg/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glittercowboy/gsd",
3
- "version": "2.68.1",
3
+ "version": "2.69.0",
4
4
  "piConfig": {
5
5
  "name": "gsd",
6
6
  "configDir": ".gsd"
@@ -5,12 +5,13 @@
5
5
  */
6
6
 
7
7
  import type { Api, Model } from "@gsd/pi-ai";
8
+ import { getProviderCapabilities } from "@gsd/pi-ai";
8
9
  import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
9
10
  import type { GSDPreferences } from "./preferences.js";
10
11
  import { resolveModelWithFallbacksForUnit, resolveDynamicRoutingConfig } from "./preferences.js";
11
12
  import type { ComplexityTier } from "./complexity-classifier.js";
12
13
  import { classifyUnitComplexity, tierLabel } from "./complexity-classifier.js";
13
- import { resolveModelForComplexity, escalateTier, getEligibleModels, loadCapabilityOverrides } from "./model-router.js";
14
+ import { resolveModelForComplexity, escalateTier, getEligibleModels, loadCapabilityOverrides, adjustToolSet, filterToolsForProvider } from "./model-router.js";
14
15
  import { getLedger, getProjectTotals } from "./metrics.js";
15
16
  import { unitPhaseLabel } from "./auto-dashboard.js";
16
17
 
@@ -244,12 +245,45 @@ export async function selectAndApplyModel(
244
245
  const ok = await pi.setModel(model, { persist: false });
245
246
  if (ok) {
246
247
  appliedModel = model;
248
+
249
+ // ADR-005: Adjust active tool set for the selected model's provider capabilities.
250
+ // Hard-filter incompatible tools, then let extensions override via adjust_tool_set hook.
251
+ const activeToolNames = pi.getActiveTools();
252
+ const { toolNames: compatibleTools, removedTools } = adjustToolSet(activeToolNames, model.api);
253
+ let finalToolNames = compatibleTools;
254
+
255
+ // Fire adjust_tool_set hook — extensions can override the filtered tool set
256
+ if (routingConfig.hooks !== false) {
257
+ const hookResult = await pi.emitAdjustToolSet({
258
+ selectedModelApi: model.api,
259
+ selectedModelProvider: model.provider,
260
+ selectedModelId: model.id,
261
+ activeToolNames,
262
+ filteredTools: removedTools,
263
+ });
264
+ if (hookResult?.toolNames) {
265
+ finalToolNames = hookResult.toolNames;
266
+ }
267
+ }
268
+
269
+ // Apply the filtered tool set if any tools were removed
270
+ if (removedTools.length > 0 || finalToolNames.length !== activeToolNames.length) {
271
+ pi.setActiveTools(finalToolNames);
272
+ }
273
+
247
274
  if (verbose) {
248
275
  const fallbackNote = modelId === effectiveModelConfig.primary
249
276
  ? ""
250
277
  : ` (fallback from ${effectiveModelConfig.primary})`;
251
278
  const phase = unitPhaseLabel(unitType);
252
279
  ctx.ui.notify(`Model [${phase}]${routingTierLabel}: ${model.provider}/${model.id}${fallbackNote}`, "info");
280
+ // ADR-005: Report tools filtered due to provider incompatibility
281
+ if (removedTools.length > 0) {
282
+ ctx.ui.notify(
283
+ `Tool compatibility: ${removedTools.length} tools filtered for ${model.api} — ${removedTools.join(", ")}`,
284
+ "info",
285
+ );
286
+ }
253
287
  }
254
288
  break;
255
289
  } else {
@@ -446,4 +446,12 @@ export function registerHooks(pi: ExtensionAPI): void {
446
446
  // Default: no override — let capability scoring handle selection
447
447
  return undefined;
448
448
  });
449
+
450
+ // Tool set adaptation hook (ADR-005 Phase 4)
451
+ // Extensions can override tool set after model selection by returning { toolNames: [...] }
452
+ // Return undefined to let the built-in provider compatibility filtering proceed.
453
+ pi.on("adjust_tool_set", async (_event) => {
454
+ // Default: no override — let provider capability filtering handle tool set
455
+ return undefined;
456
+ });
449
457
  }
@@ -71,13 +71,23 @@ interface EnumeratedFiles {
71
71
  // ─── Defaults ────────────────────────────────────────────────────────────────
72
72
 
73
73
  const DEFAULT_EXCLUDES = [
74
+ // ── AI / tooling meta ──
75
+ ".agents/",
74
76
  ".gsd/",
75
77
  ".planning/",
76
78
  ".plans/",
77
79
  ".claude/",
78
80
  ".cursor/",
81
+ ".bg-shell/",
82
+
83
+ // ── Editor / IDE ──
79
84
  ".vscode/",
85
+ ".idea/",
86
+
87
+ // ── VCS ──
80
88
  ".git/",
89
+
90
+ // ── Dependencies & build artifacts ──
81
91
  "node_modules/",
82
92
  "dist/",
83
93
  "build/",
@@ -85,7 +95,13 @@ const DEFAULT_EXCLUDES = [
85
95
  "coverage/",
86
96
  "__pycache__/",
87
97
  ".venv/",
98
+ "venv/",
88
99
  "vendor/",
100
+ "target/",
101
+
102
+ // ── Misc ──
103
+ ".cache/",
104
+ "tmp/",
89
105
  ];
90
106
 
91
107
  const DEFAULT_MAX_FILES = 500;
@@ -5,6 +5,9 @@
5
5
  import type { ComplexityTier, ClassificationResult, TaskMetadata } from "./complexity-classifier.js";
6
6
  import { tierOrdinal } from "./complexity-classifier.js";
7
7
  import type { ResolvedModelConfig } from "./preferences.js";
8
+ import { getProviderCapabilities, type ProviderCapabilities } from "@gsd/pi-ai";
9
+ import { getToolCompatibility, getAllToolCompatibility } from "@gsd/pi-coding-agent";
10
+ import type { ToolCompatibility } from "@gsd/pi-coding-agent";
8
11
 
9
12
  // ─── Types ───────────────────────────────────────────────────────────────────
10
13
 
@@ -37,6 +40,8 @@ export interface RoutingDecision {
37
40
  selectionMethod: "tier-only" | "capability-scored";
38
41
  /** Capability scores per eligible model (capability-scored path only) */
39
42
  capabilityScores?: Record<string, number>;
43
+ /** Tools filtered out due to provider incompatibility (ADR-005) */
44
+ filteredTools?: string[];
40
45
  /** Task requirement vector used for scoring */
41
46
  taskRequirements?: Partial<Record<string, number>>;
42
47
  }
@@ -536,3 +541,71 @@ function getModelCost(modelId: string): number {
536
541
  // Unknown cost — assume expensive to avoid routing to unknown cheap models
537
542
  return 999;
538
543
  }
544
+
545
+ // ─── Tool Compatibility Filter (ADR-005 Phase 3) ───────────────────────────
546
+
547
+ /**
548
+ * Check if a tool is compatible with a provider's capabilities.
549
+ * Returns true if the tool can be used with the provider.
550
+ */
551
+ export function isToolCompatibleWithProvider(
552
+ toolName: string,
553
+ providerCaps: ProviderCapabilities,
554
+ ): boolean {
555
+ const compat = getToolCompatibility(toolName);
556
+ if (!compat) return true; // no metadata = always compatible
557
+
558
+ // Hard filter: provider doesn't support image tool results
559
+ if (compat.producesImages && !providerCaps.imageToolResults) return false;
560
+
561
+ // Hard filter: tool uses schema features provider doesn't support
562
+ if (compat.schemaFeatures?.some(f => providerCaps.unsupportedSchemaFeatures.includes(f))) {
563
+ return false;
564
+ }
565
+
566
+ return true;
567
+ }
568
+
569
+ /**
570
+ * Filter a list of tool names to only those compatible with a provider.
571
+ * Used by the routing pipeline to adjust tool sets when switching providers.
572
+ */
573
+ export function filterToolsForProvider(
574
+ toolNames: string[],
575
+ providerApi: string,
576
+ ): { compatible: string[]; filtered: string[] } {
577
+ const providerCaps = getProviderCapabilities(providerApi);
578
+
579
+ // Provider doesn't support tool calling at all
580
+ if (!providerCaps.toolCalling) {
581
+ return { compatible: [], filtered: toolNames };
582
+ }
583
+
584
+ const compatible: string[] = [];
585
+ const filtered: string[] = [];
586
+
587
+ for (const name of toolNames) {
588
+ if (isToolCompatibleWithProvider(name, providerCaps)) {
589
+ compatible.push(name);
590
+ } else {
591
+ filtered.push(name);
592
+ }
593
+ }
594
+
595
+ return { compatible, filtered };
596
+ }
597
+
598
+ /**
599
+ * Adjust the active tool set for a selected model's provider capabilities.
600
+ * Returns tool names that should be active — removes incompatible tools.
601
+ *
602
+ * This is a hard filter only — it removes tools that would fail at the
603
+ * provider level. It does NOT remove tools based on soft heuristics.
604
+ */
605
+ export function adjustToolSet(
606
+ activeToolNames: string[],
607
+ selectedModelApi: string,
608
+ ): { toolNames: string[]; removedTools: string[] } {
609
+ const { compatible, filtered } = filterToolsForProvider(activeToolNames, selectedModelApi);
610
+ return { toolNames: compatible, removedTools: filtered };
611
+ }
@@ -162,6 +162,34 @@ test("generateCodebaseMap: excludes .claude/ and other tool directories", () =>
162
162
  }
163
163
  });
164
164
 
165
+ test("generateCodebaseMap: excludes .agents/ and other tooling directories", () => {
166
+ const base = makeTmpRepo();
167
+ try {
168
+ addFile(base, "src/main.ts");
169
+ addFile(base, ".agents/skills/pdf/SKILL.md");
170
+ addFile(base, ".agents/skills/find-skills/SKILL.md");
171
+ addFile(base, ".bg-shell/session.json");
172
+ addFile(base, ".idea/workspace.xml");
173
+ addFile(base, ".cache/data.bin");
174
+ addFile(base, "tmp/scratch.ts");
175
+ addFile(base, "target/debug/build.rs");
176
+ addFile(base, "venv/lib/site.py");
177
+
178
+ const result = generateCodebaseMap(base);
179
+ assert.ok(result.content.includes("`src/main.ts`"), "should include src/main.ts");
180
+ assert.ok(!result.content.includes("SKILL.md"), "should exclude .agents/ files");
181
+ assert.ok(!result.content.includes(".bg-shell"), "should exclude .bg-shell/ files");
182
+ assert.ok(!result.content.includes(".idea"), "should exclude .idea/ files");
183
+ assert.ok(!result.content.includes(".cache"), "should exclude .cache/ files");
184
+ assert.ok(!result.content.includes("tmp/"), "should exclude tmp/ files");
185
+ assert.ok(!result.content.includes("target"), "should exclude target/ files");
186
+ assert.ok(!result.content.includes("venv"), "should exclude venv/ files");
187
+ assert.equal(result.fileCount, 1);
188
+ } finally {
189
+ cleanup(base);
190
+ }
191
+ });
192
+
165
193
  test("generateCodebaseMap: excludes binary and lock files", () => {
166
194
  const base = makeTmpRepo();
167
195
  try {