@specship/specship-darwin-arm64 0.28.0 → 0.30.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 (324) hide show
  1. package/bin/specship +1 -1
  2. package/lib/dist/.claude-plugin/plugin.json +15 -3
  3. package/lib/dist/activation/cheatsheet.d.ts +10 -7
  4. package/lib/dist/activation/cheatsheet.d.ts.map +1 -1
  5. package/lib/dist/activation/cheatsheet.js +21 -5
  6. package/lib/dist/activation/cheatsheet.js.map +1 -1
  7. package/lib/dist/activation/hook-output.d.ts +75 -2
  8. package/lib/dist/activation/hook-output.d.ts.map +1 -1
  9. package/lib/dist/activation/hook-output.js +114 -3
  10. package/lib/dist/activation/hook-output.js.map +1 -1
  11. package/lib/dist/activation/search-intercept.d.ts +20 -7
  12. package/lib/dist/activation/search-intercept.d.ts.map +1 -1
  13. package/lib/dist/activation/search-intercept.js +27 -5
  14. package/lib/dist/activation/search-intercept.js.map +1 -1
  15. package/lib/dist/activation/steering.d.ts +7 -4
  16. package/lib/dist/activation/steering.d.ts.map +1 -1
  17. package/lib/dist/activation/steering.js +10 -8
  18. package/lib/dist/activation/steering.js.map +1 -1
  19. package/lib/dist/agents/detect.d.ts +32 -0
  20. package/lib/dist/agents/detect.d.ts.map +1 -0
  21. package/lib/dist/agents/detect.js +54 -0
  22. package/lib/dist/agents/detect.js.map +1 -0
  23. package/lib/dist/agents/recent-project.d.ts +18 -0
  24. package/lib/dist/agents/recent-project.d.ts.map +1 -0
  25. package/lib/dist/agents/recent-project.js +92 -0
  26. package/lib/dist/agents/recent-project.js.map +1 -0
  27. package/lib/dist/analytics/canonical-tools.d.ts +23 -0
  28. package/lib/dist/analytics/canonical-tools.d.ts.map +1 -0
  29. package/lib/dist/analytics/canonical-tools.js +36 -0
  30. package/lib/dist/analytics/canonical-tools.js.map +1 -0
  31. package/lib/dist/analytics/canonical-tools.json +16 -0
  32. package/lib/dist/analytics/specship-impact.d.ts +3 -2
  33. package/lib/dist/analytics/specship-impact.d.ts.map +1 -1
  34. package/lib/dist/analytics/specship-impact.js +6 -4
  35. package/lib/dist/analytics/specship-impact.js.map +1 -1
  36. package/lib/dist/bin/specship.js +252 -170
  37. package/lib/dist/bin/specship.js.map +1 -1
  38. package/lib/dist/bin/uninstall.js +2 -2
  39. package/lib/dist/bin/uninstall.js.map +1 -1
  40. package/lib/dist/claudemd/audit.d.ts +12 -3
  41. package/lib/dist/claudemd/audit.d.ts.map +1 -1
  42. package/lib/dist/claudemd/audit.js +65 -22
  43. package/lib/dist/claudemd/audit.js.map +1 -1
  44. package/lib/dist/commands/specship/spec.md +16 -1
  45. package/lib/dist/db/migrations.d.ts +1 -1
  46. package/lib/dist/db/migrations.d.ts.map +1 -1
  47. package/lib/dist/db/migrations.js +18 -4
  48. package/lib/dist/db/migrations.js.map +1 -1
  49. package/lib/dist/db/schema.sql +8 -0
  50. package/lib/dist/db/spec-queries.d.ts +13 -1
  51. package/lib/dist/db/spec-queries.d.ts.map +1 -1
  52. package/lib/dist/db/spec-queries.js +21 -0
  53. package/lib/dist/db/spec-queries.js.map +1 -1
  54. package/lib/dist/design-md/check.d.ts +51 -0
  55. package/lib/dist/design-md/check.d.ts.map +1 -0
  56. package/lib/dist/design-md/check.js +335 -0
  57. package/lib/dist/design-md/check.js.map +1 -0
  58. package/lib/dist/design-md/css.d.ts +40 -0
  59. package/lib/dist/design-md/css.d.ts.map +1 -0
  60. package/lib/dist/design-md/css.js +224 -0
  61. package/lib/dist/design-md/css.js.map +1 -0
  62. package/lib/dist/design-md/extract.d.ts +84 -0
  63. package/lib/dist/design-md/extract.d.ts.map +1 -0
  64. package/lib/dist/design-md/extract.js +595 -0
  65. package/lib/dist/design-md/extract.js.map +1 -0
  66. package/lib/dist/design-md/maintain.d.ts +45 -0
  67. package/lib/dist/design-md/maintain.d.ts.map +1 -0
  68. package/lib/dist/design-md/maintain.js +127 -0
  69. package/lib/dist/design-md/maintain.js.map +1 -0
  70. package/lib/dist/design-md/render.d.ts +28 -0
  71. package/lib/dist/design-md/render.d.ts.map +1 -0
  72. package/lib/dist/design-md/render.js +178 -0
  73. package/lib/dist/design-md/render.js.map +1 -0
  74. package/lib/dist/design-md/upkeep.d.ts +48 -0
  75. package/lib/dist/design-md/upkeep.d.ts.map +1 -0
  76. package/lib/dist/design-md/upkeep.js +169 -0
  77. package/lib/dist/design-md/upkeep.js.map +1 -0
  78. package/lib/dist/design-md/verify.d.ts +65 -0
  79. package/lib/dist/design-md/verify.d.ts.map +1 -0
  80. package/lib/dist/design-md/verify.js +311 -0
  81. package/lib/dist/design-md/verify.js.map +1 -0
  82. package/lib/dist/enforce/changed-files.d.ts +7 -0
  83. package/lib/dist/enforce/changed-files.d.ts.map +1 -1
  84. package/lib/dist/enforce/changed-files.js +17 -0
  85. package/lib/dist/enforce/changed-files.js.map +1 -1
  86. package/lib/dist/enforce/enforce.d.ts +35 -1
  87. package/lib/dist/enforce/enforce.d.ts.map +1 -1
  88. package/lib/dist/enforce/enforce.js +66 -2
  89. package/lib/dist/enforce/enforce.js.map +1 -1
  90. package/lib/dist/extraction/index.d.ts +50 -4
  91. package/lib/dist/extraction/index.d.ts.map +1 -1
  92. package/lib/dist/extraction/index.js +105 -13
  93. package/lib/dist/extraction/index.js.map +1 -1
  94. package/lib/dist/extraction/parse-warnings.d.ts +16 -0
  95. package/lib/dist/extraction/parse-warnings.d.ts.map +1 -0
  96. package/lib/dist/extraction/parse-warnings.js +30 -0
  97. package/lib/dist/extraction/parse-warnings.js.map +1 -0
  98. package/lib/dist/extraction/tree-sitter.d.ts +27 -0
  99. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  100. package/lib/dist/extraction/tree-sitter.js +168 -1
  101. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  102. package/lib/dist/health/smoke-check.js +1 -1
  103. package/lib/dist/health/smoke-check.js.map +1 -1
  104. package/lib/dist/hooks/hooks.json +16 -1
  105. package/lib/dist/index.d.ts +63 -3
  106. package/lib/dist/index.d.ts.map +1 -1
  107. package/lib/dist/index.js +235 -9
  108. package/lib/dist/index.js.map +1 -1
  109. package/lib/dist/installer/agent-record.d.ts +80 -0
  110. package/lib/dist/installer/agent-record.d.ts.map +1 -0
  111. package/lib/dist/installer/agent-record.js +351 -0
  112. package/lib/dist/installer/agent-record.js.map +1 -0
  113. package/lib/dist/installer/auto-migrate.d.ts +56 -0
  114. package/lib/dist/installer/auto-migrate.d.ts.map +1 -0
  115. package/lib/dist/installer/auto-migrate.js +328 -0
  116. package/lib/dist/installer/auto-migrate.js.map +1 -0
  117. package/lib/dist/installer/index.d.ts +37 -8
  118. package/lib/dist/installer/index.d.ts.map +1 -1
  119. package/lib/dist/installer/index.js +156 -46
  120. package/lib/dist/installer/index.js.map +1 -1
  121. package/lib/dist/installer/install-defaults.d.ts +4 -3
  122. package/lib/dist/installer/install-defaults.d.ts.map +1 -1
  123. package/lib/dist/installer/install-defaults.js +6 -5
  124. package/lib/dist/installer/install-defaults.js.map +1 -1
  125. package/lib/dist/installer/{config-writer.d.ts → targets/claude-config-writer.d.ts} +1 -1
  126. package/lib/dist/installer/targets/claude-config-writer.d.ts.map +1 -0
  127. package/lib/dist/installer/{config-writer.js → targets/claude-config-writer.js} +7 -6
  128. package/lib/dist/installer/targets/claude-config-writer.js.map +1 -0
  129. package/lib/dist/installer/targets/claude-projects.d.ts +9 -0
  130. package/lib/dist/installer/targets/claude-projects.d.ts.map +1 -0
  131. package/lib/dist/installer/targets/claude-projects.js +151 -0
  132. package/lib/dist/installer/targets/claude-projects.js.map +1 -0
  133. package/lib/dist/installer/targets/claude.d.ts +29 -2
  134. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  135. package/lib/dist/installer/targets/claude.js +44 -20
  136. package/lib/dist/installer/targets/claude.js.map +1 -1
  137. package/lib/dist/installer/targets/feature-parity.d.ts +28 -0
  138. package/lib/dist/installer/targets/feature-parity.d.ts.map +1 -0
  139. package/lib/dist/installer/targets/feature-parity.js +32 -0
  140. package/lib/dist/installer/targets/feature-parity.js.map +1 -0
  141. package/lib/dist/installer/{gemini-commands.d.ts → targets/gemini-commands.d.ts} +7 -3
  142. package/lib/dist/installer/targets/gemini-commands.d.ts.map +1 -0
  143. package/lib/dist/installer/{gemini-commands.js → targets/gemini-commands.js} +37 -9
  144. package/lib/dist/installer/targets/gemini-commands.js.map +1 -0
  145. package/lib/dist/installer/targets/gemini-projects.d.ts +11 -0
  146. package/lib/dist/installer/targets/gemini-projects.d.ts.map +1 -0
  147. package/lib/dist/installer/targets/gemini-projects.js +84 -0
  148. package/lib/dist/installer/targets/gemini-projects.js.map +1 -0
  149. package/lib/dist/installer/targets/gemini.d.ts +94 -8
  150. package/lib/dist/installer/targets/gemini.d.ts.map +1 -1
  151. package/lib/dist/installer/targets/gemini.js +392 -33
  152. package/lib/dist/installer/targets/gemini.js.map +1 -1
  153. package/lib/dist/installer/targets/registry.d.ts +8 -1
  154. package/lib/dist/installer/targets/registry.d.ts.map +1 -1
  155. package/lib/dist/installer/targets/registry.js +14 -5
  156. package/lib/dist/installer/targets/registry.js.map +1 -1
  157. package/lib/dist/installer/targets/shared.d.ts +44 -1
  158. package/lib/dist/installer/targets/shared.d.ts.map +1 -1
  159. package/lib/dist/installer/targets/shared.js +130 -3
  160. package/lib/dist/installer/targets/shared.js.map +1 -1
  161. package/lib/dist/installer/targets/types.d.ts +23 -1
  162. package/lib/dist/installer/targets/types.d.ts.map +1 -1
  163. package/lib/dist/jira/auto-publish.d.ts +22 -2
  164. package/lib/dist/jira/auto-publish.d.ts.map +1 -1
  165. package/lib/dist/jira/auto-publish.js +54 -9
  166. package/lib/dist/jira/auto-publish.js.map +1 -1
  167. package/lib/dist/jira/board-first.d.ts +15 -2
  168. package/lib/dist/jira/board-first.d.ts.map +1 -1
  169. package/lib/dist/jira/board-first.js +16 -0
  170. package/lib/dist/jira/board-first.js.map +1 -1
  171. package/lib/dist/jira/ci-publish.d.ts +72 -0
  172. package/lib/dist/jira/ci-publish.d.ts.map +1 -0
  173. package/lib/dist/jira/ci-publish.js +162 -0
  174. package/lib/dist/jira/ci-publish.js.map +1 -0
  175. package/lib/dist/jira/publish.d.ts +23 -0
  176. package/lib/dist/jira/publish.d.ts.map +1 -1
  177. package/lib/dist/jira/publish.js +0 -0
  178. package/lib/dist/jira/publish.js.map +1 -1
  179. package/lib/dist/jira/regression-pack.d.ts.map +1 -1
  180. package/lib/dist/jira/regression-pack.js +7 -1
  181. package/lib/dist/jira/regression-pack.js.map +1 -1
  182. package/lib/dist/jira/repo-config.d.ts.map +1 -1
  183. package/lib/dist/jira/repo-config.js +8 -0
  184. package/lib/dist/jira/repo-config.js.map +1 -1
  185. package/lib/dist/jira/types.d.ts +8 -0
  186. package/lib/dist/jira/types.d.ts.map +1 -1
  187. package/lib/dist/jira/types.js.map +1 -1
  188. package/lib/dist/knowledge/enforce.d.ts.map +1 -1
  189. package/lib/dist/knowledge/enforce.js +6 -1
  190. package/lib/dist/knowledge/enforce.js.map +1 -1
  191. package/lib/dist/mcp/jira-tools.d.ts +5 -0
  192. package/lib/dist/mcp/jira-tools.d.ts.map +1 -1
  193. package/lib/dist/mcp/jira-tools.js +59 -4
  194. package/lib/dist/mcp/jira-tools.js.map +1 -1
  195. package/lib/dist/mcp/proxy.d.ts.map +1 -1
  196. package/lib/dist/mcp/proxy.js +2 -1
  197. package/lib/dist/mcp/proxy.js.map +1 -1
  198. package/lib/dist/mcp/server-instructions.d.ts +16 -10
  199. package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
  200. package/lib/dist/mcp/server-instructions.js +69 -20
  201. package/lib/dist/mcp/server-instructions.js.map +1 -1
  202. package/lib/dist/mcp/session.d.ts +11 -0
  203. package/lib/dist/mcp/session.d.ts.map +1 -1
  204. package/lib/dist/mcp/session.js +43 -1
  205. package/lib/dist/mcp/session.js.map +1 -1
  206. package/lib/dist/mcp/tools.d.ts.map +1 -1
  207. package/lib/dist/mcp/tools.js +8 -0
  208. package/lib/dist/mcp/tools.js.map +1 -1
  209. package/lib/dist/reflect/apply.d.ts +2 -2
  210. package/lib/dist/reflect/apply.d.ts.map +1 -1
  211. package/lib/dist/reflect/apply.js +6 -5
  212. package/lib/dist/reflect/apply.js.map +1 -1
  213. package/lib/dist/reflect/miner.d.ts.map +1 -1
  214. package/lib/dist/reflect/miner.js +28 -15
  215. package/lib/dist/reflect/miner.js.map +1 -1
  216. package/lib/dist/reflect/session-outcomes.d.ts.map +1 -1
  217. package/lib/dist/reflect/session-outcomes.js +8 -3
  218. package/lib/dist/reflect/session-outcomes.js.map +1 -1
  219. package/lib/dist/reflect/targets.d.ts.map +1 -1
  220. package/lib/dist/reflect/targets.js +25 -5
  221. package/lib/dist/reflect/targets.js.map +1 -1
  222. package/lib/dist/reflect/types.d.ts +7 -0
  223. package/lib/dist/reflect/types.d.ts.map +1 -1
  224. package/lib/dist/resolution/spec-link-resolver.d.ts +14 -2
  225. package/lib/dist/resolution/spec-link-resolver.d.ts.map +1 -1
  226. package/lib/dist/resolution/spec-link-resolver.js +13 -3
  227. package/lib/dist/resolution/spec-link-resolver.js.map +1 -1
  228. package/lib/dist/server/canonical-tools.js +50 -0
  229. package/lib/dist/server/cli.js +2 -2
  230. package/lib/dist/server/host-profiles.js +39 -0
  231. package/lib/dist/server/ingest/index.js +2 -1
  232. package/lib/dist/server/ingest/ingestor.js +195 -76
  233. package/lib/dist/server/ingest/project-paths.js +8 -2
  234. package/lib/dist/server/ingest/recorded-projects.js +43 -0
  235. package/lib/dist/server/ingest/specship-classify.js +7 -2
  236. package/lib/dist/server/ingest/transcripts/claude-jsonl.js +54 -0
  237. package/lib/dist/server/ingest/transcripts/claude.js +64 -0
  238. package/lib/dist/server/ingest/transcripts/gemini.js +469 -0
  239. package/lib/dist/server/ingest/transcripts/index.js +14 -0
  240. package/lib/dist/server/ingest/{parser.js → transcripts/shared.js} +3 -49
  241. package/lib/dist/server/ingest/transcripts/types.js +4 -0
  242. package/lib/dist/server/ingest/watcher.js +31 -30
  243. package/lib/dist/server/routes/claude.js +27 -10
  244. package/lib/dist/server/routes/graph.js +64 -3
  245. package/lib/dist/server/routes/mcp.js +57 -15
  246. package/lib/dist/server/routes/memory.js +54 -35
  247. package/lib/dist/server/routes/projects.js +78 -7
  248. package/lib/dist/server/routes/spec.js +125 -0
  249. package/lib/dist/server/server.js +8 -2
  250. package/lib/dist/skills/design-md/SKILL.md +172 -0
  251. package/lib/dist/skills/design-md/references/authored-sections.md +90 -0
  252. package/lib/dist/skills/design-md/references/sources.md +71 -0
  253. package/lib/dist/skills/spec-author/SKILL.md +1 -1
  254. package/lib/dist/skills/spec-author/references/gap-questions.md +1 -1
  255. package/lib/dist/spec-lint/lint.d.ts +26 -1
  256. package/lib/dist/spec-lint/lint.d.ts.map +1 -1
  257. package/lib/dist/spec-lint/lint.js +96 -7
  258. package/lib/dist/spec-lint/lint.js.map +1 -1
  259. package/lib/dist/spec-quality/postcheck.d.ts +7 -1
  260. package/lib/dist/spec-quality/postcheck.d.ts.map +1 -1
  261. package/lib/dist/spec-quality/postcheck.js +31 -0
  262. package/lib/dist/spec-quality/postcheck.js.map +1 -1
  263. package/lib/dist/sync/worktree.d.ts +48 -0
  264. package/lib/dist/sync/worktree.d.ts.map +1 -1
  265. package/lib/dist/sync/worktree.js +109 -0
  266. package/lib/dist/sync/worktree.js.map +1 -1
  267. package/lib/dist/ui/assets/bricolage-latin-C23fTOVi.woff2 +0 -0
  268. package/lib/dist/ui/assets/bricolage-latin-ext-B82pxkPf.woff2 +0 -0
  269. package/lib/dist/ui/assets/index-54vorjyq.css +1 -0
  270. package/lib/dist/ui/assets/index-BZQonCVb.js +52 -0
  271. package/lib/dist/ui/assets/space-grotesk-latin-DPT1xrvW.woff2 +0 -0
  272. package/lib/dist/ui/assets/space-grotesk-latin-ext-wJGaI8U0.woff2 +0 -0
  273. package/lib/dist/ui/index.html +2 -2
  274. package/lib/dist/update/updater.d.ts +6 -0
  275. package/lib/dist/update/updater.d.ts.map +1 -1
  276. package/lib/dist/update/updater.js +13 -1
  277. package/lib/dist/update/updater.js.map +1 -1
  278. package/lib/dist/workflows/agents/claude.d.ts +9 -0
  279. package/lib/dist/workflows/agents/claude.d.ts.map +1 -1
  280. package/lib/dist/workflows/agents/claude.js +22 -3
  281. package/lib/dist/workflows/agents/claude.js.map +1 -1
  282. package/lib/dist/workflows/agents/gemini-version.d.ts +18 -0
  283. package/lib/dist/workflows/agents/gemini-version.d.ts.map +1 -0
  284. package/lib/dist/workflows/agents/gemini-version.js +81 -0
  285. package/lib/dist/workflows/agents/gemini-version.js.map +1 -0
  286. package/lib/dist/workflows/agents/gemini.d.ts +1 -1
  287. package/lib/dist/workflows/agents/gemini.d.ts.map +1 -1
  288. package/lib/dist/workflows/agents/gemini.js +12 -2
  289. package/lib/dist/workflows/agents/gemini.js.map +1 -1
  290. package/lib/dist/workflows/agents/index.d.ts +2 -0
  291. package/lib/dist/workflows/agents/index.d.ts.map +1 -1
  292. package/lib/dist/workflows/agents/index.js +5 -0
  293. package/lib/dist/workflows/agents/index.js.map +1 -1
  294. package/lib/dist/workflows/agents/types.d.ts +13 -0
  295. package/lib/dist/workflows/agents/types.d.ts.map +1 -1
  296. package/lib/dist/workflows/agents/types.js.map +1 -1
  297. package/lib/dist/workflows/condition-evaluator.d.ts +8 -0
  298. package/lib/dist/workflows/condition-evaluator.d.ts.map +1 -1
  299. package/lib/dist/workflows/condition-evaluator.js +7 -0
  300. package/lib/dist/workflows/condition-evaluator.js.map +1 -1
  301. package/lib/dist/workflows/defaults/claude-design-implement.yaml +44 -15
  302. package/lib/dist/workflows/defaults/spec-author.yaml +9 -9
  303. package/lib/dist/workflows/defaults/spec-fix.yaml +8 -8
  304. package/lib/dist/workflows/defaults/spec-implement.yaml +54 -23
  305. package/lib/dist/workflows/defaults/spec-relink.yaml +5 -5
  306. package/lib/dist/workflows/defaults/spec-verify.yaml +3 -3
  307. package/lib/dist/workflows/executor.d.ts +7 -0
  308. package/lib/dist/workflows/executor.d.ts.map +1 -1
  309. package/lib/dist/workflows/executor.js +22 -5
  310. package/lib/dist/workflows/executor.js.map +1 -1
  311. package/lib/node_modules/.package-lock.json +1 -1
  312. package/lib/package.json +3 -2
  313. package/package.json +1 -1
  314. package/lib/dist/installer/config-writer.d.ts.map +0 -1
  315. package/lib/dist/installer/config-writer.js.map +0 -1
  316. package/lib/dist/installer/gemini-commands.d.ts.map +0 -1
  317. package/lib/dist/installer/gemini-commands.js.map +0 -1
  318. package/lib/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  319. package/lib/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  320. package/lib/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  321. package/lib/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  322. package/lib/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  323. package/lib/dist/ui/assets/index-BzuUWUAE.js +0 -50
  324. package/lib/dist/ui/assets/index-ezwX2EfG.css +0 -1
@@ -105,6 +105,7 @@ exports.geminiCommandTarget = geminiCommandTarget;
105
105
  exports.geminiCommandSet = geminiCommandSet;
106
106
  const fs = __importStar(require("fs"));
107
107
  const path = __importStar(require("path"));
108
+ const hook_output_1 = require("../../activation/hook-output");
108
109
  /** First line of every TOML we write — uninstall/overwrite only touch files carrying it. */
109
110
  exports.GEMINI_COMMAND_HEADER_MARKER = '# Generated by specship install — REQ-GEMINI-005.';
110
111
  /** Gemini's argument placeholder (gemini-cli 0.28.0 SHORTHAND_ARGS_PLACEHOLDER). */
@@ -117,7 +118,7 @@ const REWRITES = [
117
118
  // Claude's argument placeholder → Gemini's.
118
119
  [/\$ARGUMENTS\b/g, exports.GEMINI_ARGS_PLACEHOLDER],
119
120
  // Gemini exposes MCP tools by bare name.
120
- [/\bmcp__specship__(\w+)/g, '$1'],
121
+ [new RegExp(`\\b${hook_output_1.CLAUDE_CODE_TRAITS.toolPrefix}(\\w+)`, 'g'), '$1'],
121
122
  // Claude built-in tool names → Gemini built-in tool names.
122
123
  [/`AskUserQuestion`/g, 'the `ask_user` tool'],
123
124
  [/`Write`/g, '`write_file`'],
@@ -132,6 +133,21 @@ const REWRITES = [
132
133
  ],
133
134
  // `claude mcp add` → the verified Gemini equivalent.
134
135
  [/\bclaude mcp add\b/g, 'gemini mcp add'],
136
+ // The running agent's memory file is Gemini's (REQ-AGENTSWITCH-014.A3).
137
+ [new RegExp(`\\b${hook_output_1.CLAUDE_CODE_TRAITS.memoryFile.replace('.', '\\.')}\\b`, 'g'), hook_output_1.GEMINI_CLI_TRAITS.memoryFile],
138
+ ];
139
+ /**
140
+ * Applied only when the `design-md` skill is NOT installed for Gemini (older
141
+ * Gemini CLI): point at the `specship design` CLI the skill drives instead.
142
+ * Since REQ-AGENTSWITCH-005 a supported Gemini gets the skill itself, and the
143
+ * reference is kept (REQ-AGENTSWITCH-014.A2).
144
+ */
145
+ const NO_DESIGN_MD_SKILL_REWRITES = [
146
+ [/; follow the \*\*`design-md` skill\*\*\)/g, ')'],
147
+ [
148
+ /To capture or\s+refresh a design reference without authoring a spec, use that skill directly\./g,
149
+ 'To refresh it after the design changes, re-run `specship design extract <sources> --update specs/<slug>/design.md`, then `specship design check`.',
150
+ ],
135
151
  ];
136
152
  /**
137
153
  * Constructs that have no Gemini equivalent (or that Gemini would interpret
@@ -142,7 +158,7 @@ const CLAUDE_ONLY_MARKERS = [
142
158
  [/specship-explorer/, 'the specship-explorer subagent'],
143
159
  [/\bsubagent_type\b|`Task`|`Agent`|\bTask tool\b/, 'Claude subagent dispatch'],
144
160
  [/\bAskUserQuestion\b|\bTodoWrite\b/, 'a Claude-only built-in tool'],
145
- [/\.claude\/(skills|agents|commands)\b|`[\w-]+` skill\b/, 'a Claude skill/agent asset'],
161
+ [/\.claude\/(skills|agents|commands)\b/, 'a Claude skill/agent asset'],
146
162
  [/\bclaude mcp\b/, 'the `claude mcp` CLI'],
147
163
  [/\$ARGUMENTS\b/, 'an unrewritten $ARGUMENTS'],
148
164
  [/!\{/, "Gemini's `!{…}` shell-injection trigger"],
@@ -213,28 +229,40 @@ function tomlMultiline(body) {
213
229
  : `"""\n${escapeTomlBasic(text, true)}"""`;
214
230
  }
215
231
  /** Apply the Claude → Gemini rewrites to a command body. */
216
- function rewriteForGemini(body) {
217
- return REWRITES.reduce((acc, [pattern, replacement]) => acc.replace(pattern, replacement), body);
232
+ function rewriteForGemini(body, opts = {}) {
233
+ const rules = (opts.skills ?? []).includes('design-md') ? REWRITES : [...REWRITES, ...NO_DESIGN_MD_SKILL_REWRITES];
234
+ return rules.reduce((acc, [pattern, replacement]) => acc.replace(pattern, replacement), body);
235
+ }
236
+ /** A `name` skill reference to a skill the Gemini install does not provide. */
237
+ function missingSkillReference(prompt, skills) {
238
+ for (const m of prompt.matchAll(/`([\w-]+)` skill\b/g)) {
239
+ if (!skills.includes(m[1]))
240
+ return m[1];
241
+ }
242
+ return null;
218
243
  }
219
244
  /**
220
245
  * Render one Claude command markdown file into Gemini CLI TOML. Throws
221
246
  * `GeminiCommandUnsupported` when the body still depends on Claude-only
222
247
  * machinery after the rewrites.
223
248
  */
224
- function renderGeminiCommand(markdownSource, sourceName = 'command') {
249
+ function renderGeminiCommand(markdownSource, sourceName = 'command', opts = {}) {
225
250
  const { meta, body } = parseCommandMarkdown(markdownSource);
226
- const prompt = rewriteForGemini(body);
251
+ const prompt = rewriteForGemini(body, opts);
227
252
  for (const [pattern, reason] of CLAUDE_ONLY_MARKERS) {
228
253
  if (pattern.test(prompt))
229
254
  throw new GeminiCommandUnsupported(reason);
230
255
  }
256
+ const missing = missingSkillReference(prompt, opts.skills ?? []);
257
+ if (missing)
258
+ throw new GeminiCommandUnsupported(`the \`${missing}\` skill`);
231
259
  const lines = [
232
260
  exports.GEMINI_COMMAND_HEADER_MARKER,
233
261
  `# Rendered from commands/${sourceName}; edits here are overwritten on reinstall.`,
234
262
  '',
235
263
  ];
236
264
  if (meta.description)
237
- lines.push(`description = "${escapeTomlBasic(meta.description, false)}"`);
265
+ lines.push(`description = "${escapeTomlBasic(rewriteForGemini(meta.description, opts), false)}"`);
238
266
  lines.push(`prompt = ${tomlMultiline(prompt)}`, '');
239
267
  return lines.join('\n');
240
268
  }
@@ -247,12 +275,12 @@ function geminiCommandTarget(source) {
247
275
  * Claude target copies from). Never throws for an unsupported command — it
248
276
  * comes back with `excluded` set so the caller can surface a note.
249
277
  */
250
- function geminiCommandSet(commandsDir, names) {
278
+ function geminiCommandSet(commandsDir, names, opts = {}) {
251
279
  return names.map((source) => {
252
280
  const target = geminiCommandTarget(source);
253
281
  const markdown = fs.readFileSync(path.join(commandsDir, source), 'utf-8');
254
282
  try {
255
- return { source, target, toml: renderGeminiCommand(markdown, source) };
283
+ return { source, target, toml: renderGeminiCommand(markdown, source, opts) };
256
284
  }
257
285
  catch (err) {
258
286
  if (err instanceof GeminiCommandUnsupported)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-commands.js","sourceRoot":"","sources":["../../../src/installer/targets/gemini-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Gemini CLI's recently used projects (REQ-AGENTSWITCH-019.A1). From 0.33.0
3
+ * Gemini keeps a registry, `~/.gemini/projects.json` =
4
+ * `{ projects: { <root>: <short id> } }`, and writes sessions under
5
+ * `~/.gemini/tmp/<short id>/chats/` (DOM-SPECSHIP-009). Earlier versions name
6
+ * the folder by a hash that cannot be turned back into a path, so those
7
+ * projects come only from SpecShip's install record.
8
+ */
9
+ import type { RecentProject } from './types';
10
+ export declare function geminiRecentProjects(home: string): RecentProject[];
11
+ //# sourceMappingURL=gemini-projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-projects.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/gemini-projects.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CA0BlE"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * Gemini CLI's recently used projects (REQ-AGENTSWITCH-019.A1). From 0.33.0
4
+ * Gemini keeps a registry, `~/.gemini/projects.json` =
5
+ * `{ projects: { <root>: <short id> } }`, and writes sessions under
6
+ * `~/.gemini/tmp/<short id>/chats/` (DOM-SPECSHIP-009). Earlier versions name
7
+ * the folder by a hash that cannot be turned back into a path, so those
8
+ * projects come only from SpecShip's install record.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.geminiRecentProjects = geminiRecentProjects;
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const hook_output_1 = require("../../activation/hook-output");
48
+ function geminiRecentProjects(home) {
49
+ const dir = path.join(home, hook_output_1.GEMINI_CLI_TRAITS.configDir);
50
+ let projects = {};
51
+ try {
52
+ const parsed = JSON.parse(fs.readFileSync(path.join(dir, 'projects.json'), 'utf8'));
53
+ if (parsed.projects && typeof parsed.projects === 'object')
54
+ projects = parsed.projects;
55
+ }
56
+ catch {
57
+ return [];
58
+ }
59
+ const out = [];
60
+ for (const [root, id] of Object.entries(projects)) {
61
+ if (!path.isAbsolute(root))
62
+ continue;
63
+ let lastTouched = 0;
64
+ if (typeof id === 'string' && id && !id.includes('/') && !id.includes('\\')) {
65
+ const chats = path.join(dir, 'tmp', id, 'chats');
66
+ try {
67
+ for (const f of fs.readdirSync(chats, { withFileTypes: true })) {
68
+ if (!f.isFile())
69
+ continue;
70
+ try {
71
+ const st = fs.statSync(path.join(chats, f.name));
72
+ if (st.mtimeMs > lastTouched)
73
+ lastTouched = st.mtimeMs;
74
+ }
75
+ catch { /* ignore */ }
76
+ }
77
+ }
78
+ catch { /* no sessions yet */ }
79
+ }
80
+ out.push({ root, lastTouched });
81
+ }
82
+ return out;
83
+ }
84
+ //# sourceMappingURL=gemini-projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-projects.js","sourceRoot":"","sources":["../../../src/installer/targets/gemini-projects.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOH,oDA0BC;AA/BD,uCAAyB;AACzB,2CAA6B;AAC7B,8DAAiE;AAGjE,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,+BAAiB,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAA2B,CAAC;QAC9G,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,QAAQ,GAAG,MAAM,CAAC,QAAmC,CAAC;IACpH,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IACtB,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC/D,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;wBAAE,SAAS;oBAC1B,IAAI,CAAC;wBACH,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;wBACjD,IAAI,EAAE,CAAC,OAAO,GAAG,WAAW;4BAAE,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;oBACzD,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACnC,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -7,8 +7,9 @@
7
7
  * slash commands rendered into Gemini TOML from the same
8
8
  * `commands/specship/*.md` sources the Claude target copies (REQ-GEMINI-005,
9
9
  * see `../gemini-commands.ts` for the verified format + per-command
10
- * decisions). What still has no Gemini equivalent (the `specship-explorer`
11
- * subagent, the status line, the permissions list) is left unwritten and
10
+ * decisions), plus the skills and the explorer subagent when the installed
11
+ * Gemini CLI supports them (REQ-AGENTSWITCH-005). What still has no Gemini
12
+ * equivalent (the status line, the permissions list) is left unwritten and
12
13
  * named in `notes` rather than half-installed (REQ-GEMINI-006).
13
14
  *
14
15
  * The target IS registered in `targets/registry.ts`, but a plain
@@ -30,6 +31,8 @@
30
31
  * - locations: global `~/.gemini/settings.json` (Storage.getGlobalSettingsPath),
31
32
  * project `<cwd>/.gemini/settings.json` (Storage.getWorkspaceSettingsPath).
32
33
  */
34
+ import type { RecentProject } from './types';
35
+ import { geminiMcpToolName, geminiVersionSupports, probeGeminiVersion } from '../../workflows/agents/gemini-version';
33
36
  import { AgentTarget, DetectionResult, InstallOptions, Location, WriteResult } from './types';
34
37
  /** Gemini CLI's settings file for this location. */
35
38
  export declare function settingsPath(loc: Location): string;
@@ -58,6 +61,37 @@ export declare function removeGeminiSddEntry(loc: Location): WriteResult['files'
58
61
  * (REQ-GEMINI-003.A2, parity with REQ-INTEG-001.A3).
59
62
  */
60
63
  export declare function writeGeminiMcpEntry(loc: Location, integrations?: string[]): WriteResult['files'][number];
64
+ /**
65
+ * Point Gemini CLI at the user's own CLAUDE.md instead of copying it
66
+ * (REQ-AGENTSWITCH-009): add its file name to `context.fileName`, keeping
67
+ * every name the user already listed in their order and keeping Gemini's
68
+ * default (`GEMINI.md`) when the setting was unset. The CLAUDE.md file itself
69
+ * is never opened for writing.
70
+ *
71
+ * Local scope writes nothing — and records nothing — when the project has
72
+ * no CLAUDE.md. Global scope always adds the name: Gemini CLI resolves a
73
+ * bare context file name in `~/.gemini/` and in each project's directories
74
+ * (gemini-cli-core `memoryDiscovery`, verified against 0.28.0), so the
75
+ * user-wide setting is what makes Gemini read every project's own CLAUDE.md.
76
+ * It never reaches `~/.claude/CLAUDE.md` — the capability note says so.
77
+ * Idempotent: a re-run that finds the name already listed reports
78
+ * `unchanged`.
79
+ *
80
+ * Returns the file result (null when there was nothing to point at) and the
81
+ * names this call put into `context.fileName` that were not in it before.
82
+ */
83
+ export declare function writeGeminiContextFilesEntry(loc: Location): {
84
+ file: WriteResult['files'][number] | null;
85
+ added: string[];
86
+ };
87
+ /**
88
+ * Inverse of `writeGeminiContextFilesEntry` (REQ-AGENTSWITCH-009.A4): drop
89
+ * only the names SpecShip recorded as added; every name the user listed
90
+ * stays. With no recorded list (record lost or rebuilt) the setting is left
91
+ * untouched — conservative by design. Removing the last name deletes
92
+ * `context.fileName`, and `context` when that leaves it empty.
93
+ */
94
+ export declare function removeGeminiContextFilesEntry(loc: Location, added: readonly string[] | null): WriteResult['files'][number] | null;
61
95
  /**
62
96
  * Gemini CLI's custom-commands dir for this location (verified against
63
97
  * gemini-cli 0.28.0 `Storage.getUserCommandsDir` / `getProjectCommandsDir`):
@@ -76,7 +110,7 @@ export declare function geminiCommandsDir(loc: Location): string;
76
110
  * `commandsSourceDir` defaults to the packaged `commands/` dir — the same
77
111
  * one the Claude target copies from.
78
112
  */
79
- export declare function writeGeminiCommandsEntries(loc: Location, includeGovernance?: boolean, commandsSourceDir?: string): {
113
+ export declare function writeGeminiCommandsEntries(loc: Location, includeGovernance?: boolean, commandsSourceDir?: string, skills?: readonly string[]): {
80
114
  files: WriteResult['files'];
81
115
  notes: string[];
82
116
  };
@@ -88,6 +122,13 @@ export declare function writeGeminiCommandsEntries(loc: Location, includeGoverna
88
122
  * that leaves it empty.
89
123
  */
90
124
  export declare function removeGeminiCommandsEntries(loc: Location): WriteResult['files'];
125
+ /**
126
+ * Gemini CLI loads a project's GEMINI.md, hooks, skills, subagents and MCP
127
+ * servers only in a folder the user has trusted — on by default from 0.33.0.
128
+ * Every Gemini install and switch names that gate in one line, and SpecShip
129
+ * never writes Gemini's trustedFolders.json itself (REQ-AGENTSWITCH-018.A4).
130
+ */
131
+ export declare const GEMINI_FOLDER_TRUST_NOTE: string;
91
132
  /** Write the default (retrieval + sync + cheatsheet) hook set. */
92
133
  export declare function writeGeminiHooksEntry(loc: Location): WriteResult['files'][number];
93
134
  /** Write the governance-tier SDD nudge hook. */
@@ -113,9 +154,51 @@ export declare function writeGeminiPolicyEntry(): WriteResult['files'][number];
113
154
  * untouched; the admin policies dir is never written or read.
114
155
  */
115
156
  export declare function removeGeminiPolicyEntry(): WriteResult['files'][number];
157
+ export { geminiMcpToolName, geminiVersionSupports, probeGeminiVersion };
158
+ /** The Gemini CLI version these surfaces were verified against. */
159
+ export declare const GEMINI_MIN_SKILLS = "0.28.0";
160
+ export declare const GEMINI_MIN_AGENTS = "0.28.0";
161
+ /** First Gemini CLI release with subagents on by default (`experimental.enableAgents`, REQ-AGENTSWITCH-018.A6). */
162
+ export declare const GEMINI_AGENTS_ON_BY_DEFAULT = "0.36.0";
163
+ /** Gemini CLI's skills dir for this location (same scope as `settingsPath`). */
164
+ export declare function geminiSkillsDir(loc: Location): string;
165
+ /** Gemini CLI's subagents dir for this location. */
166
+ export declare function geminiAgentsDir(loc: Location): string;
167
+ /**
168
+ * Write SpecShip's skills (`spec-author`, `design-md`) under Gemini's skills
169
+ * dir (REQ-AGENTSWITCH-005.A1). Same file list as the Claude target, so the
170
+ * two installs cannot diverge. Sibling user skills are never touched.
171
+ */
172
+ /** Marks a skill directory as written by SpecShip, so install and uninstall touch only their own. */
173
+ export declare const GEMINI_SKILL_MARKER_FILE = ".specship-installed";
174
+ export declare function writeGeminiSkillsEntries(loc: Location): WriteResult['files'];
175
+ /**
176
+ * Inverse of `writeGeminiSkillsEntries`: delete exactly the files we ship,
177
+ * then prune the per-skill directories left empty. A user skill — or a user
178
+ * file inside one of our skill dirs — survives.
179
+ */
180
+ export declare function removeGeminiSkillsEntries(loc: Location): WriteResult['files'];
181
+ /** Body marker identifying an agent file a SpecShip install wrote. */
182
+ export declare const GEMINI_AGENT_MARKER = "<!-- Written by specship install \u2014 REQ-AGENTSWITCH-005 -->";
183
+ /**
184
+ * Render the shipped `agents/specship-explorer.md` as a Gemini subagent
185
+ * (REQ-AGENTSWITCH-005.A2). Frontmatter is rebuilt with only keys Gemini's
186
+ * strict schema accepts — `model: inherit` is dropped (Gemini would read it as
187
+ * a model id) — and `tools` becomes a YAML array of the installed Gemini CLI's
188
+ * MCP tool names (REQ-AGENTSWITCH-018).
189
+ * The body names tools by their bare Gemini name. No `mcp__specship__` survives.
190
+ */
191
+ export declare function renderGeminiExplorerAgent(source?: string): string;
192
+ /** Write the explorer subagent under Gemini's agents dir. Never overwrites a user file. */
193
+ export declare function writeGeminiAgentsEntry(loc: Location): WriteResult['files'][number];
194
+ /** Inverse of `writeGeminiAgentsEntry`: removes the file only if it carries our marker. */
195
+ export declare function removeGeminiAgentsEntry(loc: Location): WriteResult['files'][number];
116
196
  export declare class GeminiCliTarget implements AgentTarget {
117
197
  readonly id: "gemini";
118
- readonly displayName = "Gemini CLI";
198
+ readonly traits: import("../../activation/hook-output").HostTraits;
199
+ readonly displayName: string;
200
+ recentProjects(home: string): RecentProject[];
201
+ readonly switchNote: string;
119
202
  readonly docsUrl = "https://google-gemini.github.io/gemini-cli/docs/cli/configuration.html";
120
203
  supportsLocation(_loc: Location): boolean;
121
204
  /**
@@ -126,11 +209,13 @@ export declare class GeminiCliTarget implements AgentTarget {
126
209
  detect(loc: Location): DetectionResult;
127
210
  /**
128
211
  * Writes the MCP entry, GEMINI.md steering, hooks, the rendered slash
129
- * commands and (with `--trust`) the policy TOML. `autoAllow` and
212
+ * commands and (with `trust`) the policy TOML. `autoAllow` and
130
213
  * `installStatusLine` are accepted and IGNORED — Gemini CLI has no
131
- * permissions list or status line to write them to, and faking one would be
132
- * worse than the note (REQ-GEMINI-006). Nothing under `.claude/` is ever
133
- * touched (REQ-GEMINI-006.A2).
214
+ * permissions list or status line to write them to; auto-allow arrives as
215
+ * `trust` (from `--trust`, or a switch carrying a Claude install's
216
+ * auto-allow over, REQ-AGENTSWITCH-010.A3), and the status line is named
217
+ * as unavailable in the notes (REQ-GEMINI-006, REQ-AGENTSWITCH-010.A4).
218
+ * Nothing under `.claude/` is ever touched (REQ-GEMINI-006.A2).
134
219
  */
135
220
  install(loc: Location, opts: InstallOptions): WriteResult;
136
221
  /**
@@ -145,6 +230,7 @@ export declare class GeminiCliTarget implements AgentTarget {
145
230
  * touches nothing on disk (REQ-GEMINI-001.A1).
146
231
  */
147
232
  printConfig(loc: Location): string;
233
+ locationHint(loc: Location): string;
148
234
  describePaths(loc: Location): string[];
149
235
  }
150
236
  export declare const geminiTarget: GeminiCliTarget;
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/gemini.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/installer/targets/gemini.ts"],"names":[],"mappings":"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"}