@specship/specship-darwin-arm64 0.29.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 (289) 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 +215 -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 +9 -0
  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/enforce/changed-files.d.ts +7 -0
  55. package/lib/dist/enforce/changed-files.d.ts.map +1 -1
  56. package/lib/dist/enforce/changed-files.js +17 -0
  57. package/lib/dist/enforce/changed-files.js.map +1 -1
  58. package/lib/dist/enforce/enforce.d.ts +35 -1
  59. package/lib/dist/enforce/enforce.d.ts.map +1 -1
  60. package/lib/dist/enforce/enforce.js +66 -2
  61. package/lib/dist/enforce/enforce.js.map +1 -1
  62. package/lib/dist/extraction/index.d.ts +50 -4
  63. package/lib/dist/extraction/index.d.ts.map +1 -1
  64. package/lib/dist/extraction/index.js +105 -13
  65. package/lib/dist/extraction/index.js.map +1 -1
  66. package/lib/dist/extraction/parse-warnings.d.ts +16 -0
  67. package/lib/dist/extraction/parse-warnings.d.ts.map +1 -0
  68. package/lib/dist/extraction/parse-warnings.js +30 -0
  69. package/lib/dist/extraction/parse-warnings.js.map +1 -0
  70. package/lib/dist/extraction/tree-sitter.d.ts +27 -0
  71. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  72. package/lib/dist/extraction/tree-sitter.js +168 -1
  73. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  74. package/lib/dist/health/smoke-check.js +1 -1
  75. package/lib/dist/health/smoke-check.js.map +1 -1
  76. package/lib/dist/hooks/hooks.json +16 -1
  77. package/lib/dist/index.d.ts +63 -3
  78. package/lib/dist/index.d.ts.map +1 -1
  79. package/lib/dist/index.js +235 -9
  80. package/lib/dist/index.js.map +1 -1
  81. package/lib/dist/installer/agent-record.d.ts +80 -0
  82. package/lib/dist/installer/agent-record.d.ts.map +1 -0
  83. package/lib/dist/installer/agent-record.js +351 -0
  84. package/lib/dist/installer/agent-record.js.map +1 -0
  85. package/lib/dist/installer/auto-migrate.d.ts +56 -0
  86. package/lib/dist/installer/auto-migrate.d.ts.map +1 -0
  87. package/lib/dist/installer/auto-migrate.js +328 -0
  88. package/lib/dist/installer/auto-migrate.js.map +1 -0
  89. package/lib/dist/installer/index.d.ts +37 -8
  90. package/lib/dist/installer/index.d.ts.map +1 -1
  91. package/lib/dist/installer/index.js +156 -46
  92. package/lib/dist/installer/index.js.map +1 -1
  93. package/lib/dist/installer/install-defaults.d.ts +4 -3
  94. package/lib/dist/installer/install-defaults.d.ts.map +1 -1
  95. package/lib/dist/installer/install-defaults.js +6 -5
  96. package/lib/dist/installer/install-defaults.js.map +1 -1
  97. package/lib/dist/installer/{config-writer.d.ts → targets/claude-config-writer.d.ts} +1 -1
  98. package/lib/dist/installer/targets/claude-config-writer.d.ts.map +1 -0
  99. package/lib/dist/installer/{config-writer.js → targets/claude-config-writer.js} +7 -6
  100. package/lib/dist/installer/targets/claude-config-writer.js.map +1 -0
  101. package/lib/dist/installer/targets/claude-projects.d.ts +9 -0
  102. package/lib/dist/installer/targets/claude-projects.d.ts.map +1 -0
  103. package/lib/dist/installer/targets/claude-projects.js +151 -0
  104. package/lib/dist/installer/targets/claude-projects.js.map +1 -0
  105. package/lib/dist/installer/targets/claude.d.ts +28 -1
  106. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  107. package/lib/dist/installer/targets/claude.js +39 -20
  108. package/lib/dist/installer/targets/claude.js.map +1 -1
  109. package/lib/dist/installer/targets/feature-parity.d.ts +28 -0
  110. package/lib/dist/installer/targets/feature-parity.d.ts.map +1 -0
  111. package/lib/dist/installer/targets/feature-parity.js +32 -0
  112. package/lib/dist/installer/targets/feature-parity.js.map +1 -0
  113. package/lib/dist/installer/{gemini-commands.d.ts → targets/gemini-commands.d.ts} +7 -3
  114. package/lib/dist/installer/targets/gemini-commands.d.ts.map +1 -0
  115. package/lib/dist/installer/{gemini-commands.js → targets/gemini-commands.js} +35 -14
  116. package/lib/dist/installer/targets/gemini-commands.js.map +1 -0
  117. package/lib/dist/installer/targets/gemini-projects.d.ts +11 -0
  118. package/lib/dist/installer/targets/gemini-projects.d.ts.map +1 -0
  119. package/lib/dist/installer/targets/gemini-projects.js +84 -0
  120. package/lib/dist/installer/targets/gemini-projects.js.map +1 -0
  121. package/lib/dist/installer/targets/gemini.d.ts +94 -8
  122. package/lib/dist/installer/targets/gemini.d.ts.map +1 -1
  123. package/lib/dist/installer/targets/gemini.js +392 -33
  124. package/lib/dist/installer/targets/gemini.js.map +1 -1
  125. package/lib/dist/installer/targets/registry.d.ts +8 -1
  126. package/lib/dist/installer/targets/registry.d.ts.map +1 -1
  127. package/lib/dist/installer/targets/registry.js +14 -5
  128. package/lib/dist/installer/targets/registry.js.map +1 -1
  129. package/lib/dist/installer/targets/shared.d.ts +44 -1
  130. package/lib/dist/installer/targets/shared.d.ts.map +1 -1
  131. package/lib/dist/installer/targets/shared.js +130 -3
  132. package/lib/dist/installer/targets/shared.js.map +1 -1
  133. package/lib/dist/installer/targets/types.d.ts +23 -1
  134. package/lib/dist/installer/targets/types.d.ts.map +1 -1
  135. package/lib/dist/jira/auto-publish.d.ts +22 -2
  136. package/lib/dist/jira/auto-publish.d.ts.map +1 -1
  137. package/lib/dist/jira/auto-publish.js +54 -9
  138. package/lib/dist/jira/auto-publish.js.map +1 -1
  139. package/lib/dist/jira/board-first.d.ts +15 -2
  140. package/lib/dist/jira/board-first.d.ts.map +1 -1
  141. package/lib/dist/jira/board-first.js +16 -0
  142. package/lib/dist/jira/board-first.js.map +1 -1
  143. package/lib/dist/jira/ci-publish.d.ts +72 -0
  144. package/lib/dist/jira/ci-publish.d.ts.map +1 -0
  145. package/lib/dist/jira/ci-publish.js +162 -0
  146. package/lib/dist/jira/ci-publish.js.map +1 -0
  147. package/lib/dist/jira/publish.d.ts +23 -0
  148. package/lib/dist/jira/publish.d.ts.map +1 -1
  149. package/lib/dist/jira/publish.js +0 -0
  150. package/lib/dist/jira/publish.js.map +1 -1
  151. package/lib/dist/jira/regression-pack.d.ts.map +1 -1
  152. package/lib/dist/jira/regression-pack.js +7 -1
  153. package/lib/dist/jira/regression-pack.js.map +1 -1
  154. package/lib/dist/jira/repo-config.d.ts.map +1 -1
  155. package/lib/dist/jira/repo-config.js +8 -0
  156. package/lib/dist/jira/repo-config.js.map +1 -1
  157. package/lib/dist/jira/types.d.ts +8 -0
  158. package/lib/dist/jira/types.d.ts.map +1 -1
  159. package/lib/dist/jira/types.js.map +1 -1
  160. package/lib/dist/knowledge/enforce.d.ts.map +1 -1
  161. package/lib/dist/knowledge/enforce.js +6 -1
  162. package/lib/dist/knowledge/enforce.js.map +1 -1
  163. package/lib/dist/mcp/jira-tools.d.ts +5 -0
  164. package/lib/dist/mcp/jira-tools.d.ts.map +1 -1
  165. package/lib/dist/mcp/jira-tools.js +59 -4
  166. package/lib/dist/mcp/jira-tools.js.map +1 -1
  167. package/lib/dist/mcp/proxy.d.ts.map +1 -1
  168. package/lib/dist/mcp/proxy.js +2 -1
  169. package/lib/dist/mcp/proxy.js.map +1 -1
  170. package/lib/dist/mcp/server-instructions.d.ts +16 -10
  171. package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
  172. package/lib/dist/mcp/server-instructions.js +69 -20
  173. package/lib/dist/mcp/server-instructions.js.map +1 -1
  174. package/lib/dist/mcp/session.d.ts +11 -0
  175. package/lib/dist/mcp/session.d.ts.map +1 -1
  176. package/lib/dist/mcp/session.js +43 -1
  177. package/lib/dist/mcp/session.js.map +1 -1
  178. package/lib/dist/mcp/tools.d.ts.map +1 -1
  179. package/lib/dist/mcp/tools.js +8 -0
  180. package/lib/dist/mcp/tools.js.map +1 -1
  181. package/lib/dist/reflect/apply.d.ts +2 -2
  182. package/lib/dist/reflect/apply.d.ts.map +1 -1
  183. package/lib/dist/reflect/apply.js +6 -5
  184. package/lib/dist/reflect/apply.js.map +1 -1
  185. package/lib/dist/reflect/miner.d.ts.map +1 -1
  186. package/lib/dist/reflect/miner.js +28 -15
  187. package/lib/dist/reflect/miner.js.map +1 -1
  188. package/lib/dist/reflect/session-outcomes.d.ts.map +1 -1
  189. package/lib/dist/reflect/session-outcomes.js +8 -3
  190. package/lib/dist/reflect/session-outcomes.js.map +1 -1
  191. package/lib/dist/reflect/targets.d.ts.map +1 -1
  192. package/lib/dist/reflect/targets.js +25 -5
  193. package/lib/dist/reflect/targets.js.map +1 -1
  194. package/lib/dist/reflect/types.d.ts +7 -0
  195. package/lib/dist/reflect/types.d.ts.map +1 -1
  196. package/lib/dist/resolution/spec-link-resolver.d.ts +14 -2
  197. package/lib/dist/resolution/spec-link-resolver.d.ts.map +1 -1
  198. package/lib/dist/resolution/spec-link-resolver.js +13 -3
  199. package/lib/dist/resolution/spec-link-resolver.js.map +1 -1
  200. package/lib/dist/server/canonical-tools.js +50 -0
  201. package/lib/dist/server/cli.js +2 -2
  202. package/lib/dist/server/host-profiles.js +39 -0
  203. package/lib/dist/server/ingest/index.js +2 -1
  204. package/lib/dist/server/ingest/ingestor.js +195 -76
  205. package/lib/dist/server/ingest/project-paths.js +8 -2
  206. package/lib/dist/server/ingest/recorded-projects.js +43 -0
  207. package/lib/dist/server/ingest/specship-classify.js +7 -2
  208. package/lib/dist/server/ingest/transcripts/claude-jsonl.js +54 -0
  209. package/lib/dist/server/ingest/transcripts/claude.js +64 -0
  210. package/lib/dist/server/ingest/transcripts/gemini.js +469 -0
  211. package/lib/dist/server/ingest/transcripts/index.js +14 -0
  212. package/lib/dist/server/ingest/{parser.js → transcripts/shared.js} +3 -49
  213. package/lib/dist/server/ingest/transcripts/types.js +4 -0
  214. package/lib/dist/server/ingest/watcher.js +31 -30
  215. package/lib/dist/server/routes/claude.js +27 -10
  216. package/lib/dist/server/routes/graph.js +64 -3
  217. package/lib/dist/server/routes/mcp.js +57 -15
  218. package/lib/dist/server/routes/memory.js +54 -35
  219. package/lib/dist/server/routes/projects.js +78 -7
  220. package/lib/dist/server/routes/spec.js +125 -0
  221. package/lib/dist/server/server.js +8 -2
  222. package/lib/dist/skills/spec-author/SKILL.md +1 -1
  223. package/lib/dist/skills/spec-author/references/gap-questions.md +1 -1
  224. package/lib/dist/spec-lint/lint.d.ts +26 -1
  225. package/lib/dist/spec-lint/lint.d.ts.map +1 -1
  226. package/lib/dist/spec-lint/lint.js +96 -7
  227. package/lib/dist/spec-lint/lint.js.map +1 -1
  228. package/lib/dist/sync/worktree.d.ts +48 -0
  229. package/lib/dist/sync/worktree.d.ts.map +1 -1
  230. package/lib/dist/sync/worktree.js +109 -0
  231. package/lib/dist/sync/worktree.js.map +1 -1
  232. package/lib/dist/ui/assets/bricolage-latin-C23fTOVi.woff2 +0 -0
  233. package/lib/dist/ui/assets/bricolage-latin-ext-B82pxkPf.woff2 +0 -0
  234. package/lib/dist/ui/assets/index-54vorjyq.css +1 -0
  235. package/lib/dist/ui/assets/index-BZQonCVb.js +52 -0
  236. package/lib/dist/ui/assets/space-grotesk-latin-DPT1xrvW.woff2 +0 -0
  237. package/lib/dist/ui/assets/space-grotesk-latin-ext-wJGaI8U0.woff2 +0 -0
  238. package/lib/dist/ui/index.html +2 -2
  239. package/lib/dist/update/updater.d.ts +6 -0
  240. package/lib/dist/update/updater.d.ts.map +1 -1
  241. package/lib/dist/update/updater.js +13 -1
  242. package/lib/dist/update/updater.js.map +1 -1
  243. package/lib/dist/workflows/agents/claude.d.ts +9 -0
  244. package/lib/dist/workflows/agents/claude.d.ts.map +1 -1
  245. package/lib/dist/workflows/agents/claude.js +22 -3
  246. package/lib/dist/workflows/agents/claude.js.map +1 -1
  247. package/lib/dist/workflows/agents/gemini-version.d.ts +18 -0
  248. package/lib/dist/workflows/agents/gemini-version.d.ts.map +1 -0
  249. package/lib/dist/workflows/agents/gemini-version.js +81 -0
  250. package/lib/dist/workflows/agents/gemini-version.js.map +1 -0
  251. package/lib/dist/workflows/agents/gemini.d.ts +1 -1
  252. package/lib/dist/workflows/agents/gemini.d.ts.map +1 -1
  253. package/lib/dist/workflows/agents/gemini.js +12 -2
  254. package/lib/dist/workflows/agents/gemini.js.map +1 -1
  255. package/lib/dist/workflows/agents/index.d.ts +2 -0
  256. package/lib/dist/workflows/agents/index.d.ts.map +1 -1
  257. package/lib/dist/workflows/agents/index.js +5 -0
  258. package/lib/dist/workflows/agents/index.js.map +1 -1
  259. package/lib/dist/workflows/agents/types.d.ts +13 -0
  260. package/lib/dist/workflows/agents/types.d.ts.map +1 -1
  261. package/lib/dist/workflows/agents/types.js.map +1 -1
  262. package/lib/dist/workflows/condition-evaluator.d.ts +8 -0
  263. package/lib/dist/workflows/condition-evaluator.d.ts.map +1 -1
  264. package/lib/dist/workflows/condition-evaluator.js +7 -0
  265. package/lib/dist/workflows/condition-evaluator.js.map +1 -1
  266. package/lib/dist/workflows/defaults/claude-design-implement.yaml +11 -11
  267. package/lib/dist/workflows/defaults/spec-author.yaml +9 -9
  268. package/lib/dist/workflows/defaults/spec-fix.yaml +8 -8
  269. package/lib/dist/workflows/defaults/spec-implement.yaml +38 -23
  270. package/lib/dist/workflows/defaults/spec-relink.yaml +5 -5
  271. package/lib/dist/workflows/defaults/spec-verify.yaml +3 -3
  272. package/lib/dist/workflows/executor.d.ts +7 -0
  273. package/lib/dist/workflows/executor.d.ts.map +1 -1
  274. package/lib/dist/workflows/executor.js +22 -5
  275. package/lib/dist/workflows/executor.js.map +1 -1
  276. package/lib/node_modules/.package-lock.json +1 -1
  277. package/lib/package.json +3 -2
  278. package/package.json +1 -1
  279. package/lib/dist/installer/config-writer.d.ts.map +0 -1
  280. package/lib/dist/installer/config-writer.js.map +0 -1
  281. package/lib/dist/installer/gemini-commands.d.ts.map +0 -1
  282. package/lib/dist/installer/gemini-commands.js.map +0 -1
  283. package/lib/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  284. package/lib/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  285. package/lib/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  286. package/lib/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  287. package/lib/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  288. package/lib/dist/ui/assets/index-BzuUWUAE.js +0 -50
  289. package/lib/dist/ui/assets/index-ezwX2EfG.css +0 -1
package/bin/specship CHANGED
@@ -11,7 +11,7 @@ while [ -L "$SELF" ]; do
11
11
  done
12
12
  DIR="$(cd "$(dirname "$SELF")/.." && pwd)"
13
13
 
14
- # Resolve the machine's Node and gate its version (REQ-OFFLINE-006): the
14
+ # Resolve the machine's Node and gate its version (REQ-OFFINSTALL-006): the
15
15
  # bundle ships no runtime, so a missing or unsupported node must fail loudly
16
16
  # rather than crash deep inside the app.
17
17
  NODE="$(command -v node 2>/dev/null || true)"
@@ -1,6 +1,18 @@
1
1
  {
2
2
  "name": "specship",
3
- "version": "0.1.0",
4
- "description": "Local code intelligence for Claude Code — semantic search, flow tracing, and impact analysis backed by a SQLite knowledge graph. Auto-syncs after every Edit/Write.",
5
- "author": { "name": "selvakumarEsra" }
3
+ "version": "0.30.0",
4
+ "description": "SpecShip for Claude Code — local code intelligence (search, flow tracing, impact) over a SQLite knowledge graph, spec-driven development, and the same hooks `specship install` wires. Requires the specship CLI on PATH.",
5
+ "author": {
6
+ "name": "selvakumarEsra"
7
+ },
8
+ "mcpServers": {
9
+ "specship": {
10
+ "type": "stdio",
11
+ "command": "specship",
12
+ "args": [
13
+ "serve",
14
+ "--mcp"
15
+ ]
16
+ }
17
+ }
6
18
  }
@@ -13,21 +13,24 @@
13
13
  * the spec's scope note. Noise is bounded by the hook matcher (startup only)
14
14
  * and the `SPECSHIP_NO_CHEATSHEET` opt-out below, not by this module.
15
15
  */
16
+ import { type HostTraits } from './hook-output';
17
+ /** The cheat-sheet as shown when no host is known — today's text. */
18
+ export declare const CHEATSHEET_TEXT: string;
16
19
  /**
17
- * The cheat-sheet rendered to the user. Names only user-facing commands, tools,
18
- * and env vars — no internal file paths, symbol names, or benchmark figures
19
- * (REQ-CHEAT-002.A3), so it reads as a product map rather than engineering
20
- * notes.
20
+ * The cheat-sheet for a host profile (REQ-AGENTSWITCH-002): the default host
21
+ * (or none) gets {@link CHEATSHEET_TEXT} unchanged; another host sees its own
22
+ * read and search tool names.
21
23
  */
22
- export declare const CHEATSHEET_TEXT: string;
24
+ export declare function cheatsheetText(traits?: HostTraits): string;
23
25
  /**
24
26
  * Build the `SessionStart`-hook payload the `specship cheatsheet` command
25
27
  * prints. Returns `{ systemMessage }` (user-visible only — never
26
28
  * `additionalContext`, REQ-CHEAT-001.A2), or `null` when the user has opted
27
29
  * out via `SPECSHIP_NO_CHEATSHEET` (REQ-CHEAT-004.A1). An unset or empty
28
- * variable prints normally (REQ-CHEAT-004.A2).
30
+ * variable prints normally (REQ-CHEAT-004.A2). `traits` is the running host's
31
+ * profile; omitted (no known host), the text is today's (REQ-AGENTSWITCH-002).
29
32
  */
30
- export declare function buildCheatsheetPayload(env?: NodeJS.ProcessEnv, extras?: CheatsheetExtras): {
33
+ export declare function buildCheatsheetPayload(env?: NodeJS.ProcessEnv, extras?: CheatsheetExtras, traits?: HostTraits): {
31
34
  systemMessage: string;
32
35
  } | null;
33
36
  /** Optional learned-state extras the CLI resolves before rendering. */
@@ -1 +1 @@
1
- {"version":3,"file":"cheatsheet.d.ts","sourceRoot":"","sources":["../../src/activation/cheatsheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAqBhB,CAAC;AAEb;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,MAAM,GAAE,gBAAqB,GAC5B;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkBlC;AAED,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uEAAuE;AACvE,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAmBhF"}
1
+ {"version":3,"file":"cheatsheet.d.ts","sourceRoot":"","sources":["../../src/activation/cheatsheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AA+BrE,qEAAqE;AACrE,eAAO,MAAM,eAAe,QAAmD,CAAC;AAEhF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAI1D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,MAAM,GAAE,gBAAqB,EAC7B,MAAM,CAAC,EAAE,UAAU,GAClB;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkBlC;AAED,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uEAAuE;AACvE,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAmBhF"}
@@ -16,15 +16,17 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.CONVENTIONS_BUDGET_LINES = exports.CHEATSHEET_TEXT = void 0;
19
+ exports.cheatsheetText = cheatsheetText;
19
20
  exports.buildCheatsheetPayload = buildCheatsheetPayload;
20
21
  exports.renderConventionsSection = renderConventionsSection;
22
+ const hook_output_1 = require("./hook-output");
21
23
  /**
22
24
  * The cheat-sheet rendered to the user. Names only user-facing commands, tools,
23
25
  * and env vars — no internal file paths, symbol names, or benchmark figures
24
26
  * (REQ-CHEAT-002.A3), so it reads as a product map rather than engineering
25
27
  * notes.
26
28
  */
27
- exports.CHEATSHEET_TEXT = [
29
+ const cheatsheetLines = (explorePrefer) => [
28
30
  '📦 SpecShip — code intelligence + spec-driven flow over the indexed graph',
29
31
  '',
30
32
  'The four doors (slash commands):',
@@ -33,7 +35,7 @@ exports.CHEATSHEET_TEXT = [
33
35
  '• /specship:check — gate & health door (drift queue, fix, relink, health).',
34
36
  '• /specship:learn — lessons door. crystallize what worked into a skill proposal.',
35
37
  '',
36
- 'Explore before you Read/Grep:',
38
+ explorePrefer,
37
39
  '• specship_explore is PRIMARY — one call returns verbatim source grouped by file.',
38
40
  '• Flow: name both ends (e.g. "mutateElement renderScene") to trace the call path.',
39
41
  '• Locate → specship_search · impact → specship_impact · callers/callees too.',
@@ -46,17 +48,31 @@ exports.CHEATSHEET_TEXT = [
46
48
  '',
47
49
  'Silence this with SPECSHIP_NO_CHEATSHEET=1. specship_status shows index freshness.',
48
50
  ].join('\n');
51
+ /** The cheat-sheet as shown when no host is known — today's text. */
52
+ exports.CHEATSHEET_TEXT = cheatsheetLines('Explore before you Read/Grep:');
53
+ /**
54
+ * The cheat-sheet for a host profile (REQ-AGENTSWITCH-002): the default host
55
+ * (or none) gets {@link CHEATSHEET_TEXT} unchanged; another host sees its own
56
+ * read and search tool names.
57
+ */
58
+ function cheatsheetText(traits) {
59
+ if (!traits || traits.id === hook_output_1.DEFAULT_HOST_TRAITS.id)
60
+ return exports.CHEATSHEET_TEXT;
61
+ const tools = [traits.readTools[0], traits.searchTools[0]].filter(Boolean).join('/');
62
+ return cheatsheetLines(`Explore before you ${tools}:`);
63
+ }
49
64
  /**
50
65
  * Build the `SessionStart`-hook payload the `specship cheatsheet` command
51
66
  * prints. Returns `{ systemMessage }` (user-visible only — never
52
67
  * `additionalContext`, REQ-CHEAT-001.A2), or `null` when the user has opted
53
68
  * out via `SPECSHIP_NO_CHEATSHEET` (REQ-CHEAT-004.A1). An unset or empty
54
- * variable prints normally (REQ-CHEAT-004.A2).
69
+ * variable prints normally (REQ-CHEAT-004.A2). `traits` is the running host's
70
+ * profile; omitted (no known host), the text is today's (REQ-AGENTSWITCH-002).
55
71
  */
56
- function buildCheatsheetPayload(env = process.env, extras = {}) {
72
+ function buildCheatsheetPayload(env = process.env, extras = {}, traits) {
57
73
  if (env.SPECSHIP_NO_CHEATSHEET)
58
74
  return null;
59
- const parts = [exports.CHEATSHEET_TEXT];
75
+ const parts = [cheatsheetText(traits)];
60
76
  // Learned project conventions (REQ-ALEARN-002): absent/empty file → output
61
77
  // is byte-identical to the base cheatsheet (A1).
62
78
  if (extras.conventions) {
@@ -1 +1 @@
1
- {"version":3,"file":"cheatsheet.js","sourceRoot":"","sources":["../../src/activation/cheatsheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cheatsheet.js","sourceRoot":"","sources":["../../src/activation/cheatsheet.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@
9
9
  * `BeforeTool`) — the installer wires them to the same binaries and the
10
10
  * payload tells the command which host called it (REQ-GEMINI-010).
11
11
  */
12
+ import { type DetectedAgent } from '../agents/detect';
12
13
  export interface HookPayload {
13
14
  prompt: string;
14
15
  cwd: string | null;
@@ -42,16 +43,43 @@ export declare function buildHookDenyDecision(reason: string): string;
42
43
  * - `specshipToolMarkers` — substrings naming a specship tool_use record.
43
44
  * Claude exposes our server as `mcp__specship__<tool>`; Gemini shows
44
45
  * the model the bare tool name (`specship_explore`), qualifying it as
45
- * `specship__<tool>` only on a name collision.
46
+ * `specship__<tool>` only on a name collision; from 0.33.0 the name is
47
+ * `mcp_specship_<tool>`.
46
48
  * - `transcriptFormat` — Claude writes JSONL (one record per line); Gemini's
47
49
  * `ChatRecordingService` writes one pretty-printed JSON doc with
48
- * `messages[].toolCalls[].name`.
50
+ * `messages[].toolCalls[].name` (JSON Lines from 0.33.0, which the
51
+ * single-json scan also reads).
49
52
  * - `supportsBeforeToolDeny` — whether the host reads a top-level
50
53
  * `{decision:'deny'}` on its BeforeTool-equivalent. Gemini 0.28.0+
51
54
  * `BeforeToolHookOutput.isBlockingDecision` does; Claude's PreToolUse
52
55
  * uses a different shape so we never emit deny for Claude.
53
56
  */
54
57
  export interface HostTraits {
58
+ /** Adapter id — the same ids as the install record and `--target` (REQ-AGENTSWITCH-001). */
59
+ id: 'claude' | 'gemini';
60
+ /** Human-readable product name for agent- and user-facing text. */
61
+ displayName: string;
62
+ /**
63
+ * Whether `specship install` auto-allows SpecShip's read-only tools by
64
+ * default. Claude Code's permission allowlist is local and reversible;
65
+ * Gemini CLI's equivalent is a policy file, strictly opt-in via `--trust`
66
+ * (REQ-GEMINI-009, REQ-AGENTSWITCH-019.A4).
67
+ */
68
+ autoAllowByDefault: boolean;
69
+ /** Whether the host has a status line SpecShip can wire (REQ-AGENTSWITCH-010). */
70
+ hasStatusLine: boolean;
71
+ /** The project/user memory file the host reads (`<root>/<memoryFile>`). */
72
+ memoryFile: string;
73
+ /** The host's per-project and per-user config directory name. */
74
+ configDir: string;
75
+ /** User-wide config file holding MCP server entries, relative to the home dir. */
76
+ userConfigFile: string;
77
+ /** Session transcript root, relative to the home dir. */
78
+ transcriptDir: string;
79
+ /** The host's built-in file-read tools. */
80
+ readTools: readonly string[];
81
+ /** The host's built-in code-search tools. */
82
+ searchTools: readonly string[];
55
83
  specshipToolMarkers: string[];
56
84
  transcriptFormat: 'jsonl' | 'single-json';
57
85
  supportsBeforeToolDeny: boolean;
@@ -68,6 +96,19 @@ export interface HostTraits {
68
96
  denyEligibleTools: readonly string[];
69
97
  /** The host's shell tool, whose `command` the interceptor classifies. */
70
98
  shellTool: string | null;
99
+ /** Project settings file holding hook entries, relative to the project root (REQ-AGENTSWITCH-003). */
100
+ projectSettingsFile: string;
101
+ /** The host's after-tool hook event a post-edit hook registers under. */
102
+ postEditEvent: string;
103
+ /** Hook matcher naming the host's built-in file-write tools. */
104
+ writeToolMatcher: string;
105
+ /**
106
+ * User-wide memory-notes directory, relative to the home dir; `null` when
107
+ * the host has none (portable memory rules then go to {@link userMemoryFile}).
108
+ */
109
+ memoryNotesDir: string | null;
110
+ /** User-wide memory file, relative to the home dir. */
111
+ userMemoryFile: string;
71
112
  }
72
113
  /**
73
114
  * Claude Code — also the legacy default for payloads that name no event, so
@@ -76,5 +117,37 @@ export interface HostTraits {
76
117
  export declare const CLAUDE_CODE_TRAITS: HostTraits;
77
118
  /** Gemini CLI (verified against 0.28.0). */
78
119
  export declare const GEMINI_CLI_TRAITS: HostTraits;
120
+ /**
121
+ * The profile code uses when no host is known (REQ-AGENTSWITCH-001): Claude
122
+ * Code, so every pre-adapter caller keeps its exact output.
123
+ */
124
+ export declare const DEFAULT_HOST_TRAITS: HostTraits;
125
+ /** Every host profile, in registry order. */
126
+ export declare const ALL_HOST_TRAITS: readonly HostTraits[];
127
+ /**
128
+ * The profile for an agent id (`claude`, `gemini`); {@link DEFAULT_HOST_TRAITS}
129
+ * for an unknown or missing id, e.g. the detection result `unknown`.
130
+ */
131
+ export declare function hostTraitsFor(id: string | null | undefined): HostTraits;
132
+ /**
133
+ * The agents a project is set up for (REQ-AGENTSWITCH-003): every host whose
134
+ * root memory file or project config directory exists at `projectRoot`, in
135
+ * registry order. A project carrying neither is treated as Claude Code's, the
136
+ * default host, so pre-adapter projects keep their exact behaviour.
137
+ */
138
+ export declare function agentsInProject(projectRoot: string): HostTraits[];
139
+ /**
140
+ * How to FORMAT the reply to a hook payload. Falls back to Claude Code traits
141
+ * for payloads naming no (or a shared) event — the backward-compatibility
142
+ * contract of REQ-AGENTADAPT-002.A2. That fallback is a formatting default,
143
+ * not evidence: use {@link detectHookAgent} to ask which agent sent it.
144
+ */
79
145
  export declare function deriveHostTraits(payload: HookPayload): HostTraits;
146
+ /**
147
+ * Which agent SENT a hook payload (REQ-AGENTSWITCH-007). Only an event name a
148
+ * single agent sends counts as proof; a shared event such as `SessionStart`,
149
+ * or a payload naming no event, is `unknown` — unlike {@link deriveHostTraits},
150
+ * which still picks a formatting default for those.
151
+ */
152
+ export declare function detectHookAgent(payload: HookPayload): DetectedAgent;
80
153
  //# sourceMappingURL=hook-output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hook-output.d.ts","sourceRoot":"","sources":["../../src/activation/hook-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CA4BzD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAMR;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,OAAO,GAAG,aAAa,CAAC;IAC1C,sBAAsB,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,yEAAyE;IACzE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,UAShC,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,iBAAiB,EAAE,UAS/B,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAKjE"}
1
+ {"version":3,"file":"hook-output.d.ts","sourceRoot":"","sources":["../../src/activation/hook-output.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,51 @@
10
10
  * `BeforeTool`) — the installer wires them to the same binaries and the
11
11
  * payload tells the command which host called it (REQ-GEMINI-010).
12
12
  */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
13
46
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.GEMINI_CLI_TRAITS = exports.CLAUDE_CODE_TRAITS = void 0;
47
+ exports.ALL_HOST_TRAITS = exports.DEFAULT_HOST_TRAITS = exports.GEMINI_CLI_TRAITS = exports.CLAUDE_CODE_TRAITS = void 0;
15
48
  exports.parseHookPayload = parseHookPayload;
16
49
  exports.buildHookAdditionalContext = buildHookAdditionalContext;
17
50
  exports.buildHookDenyDecision = buildHookDenyDecision;
51
+ exports.hostTraitsFor = hostTraitsFor;
52
+ exports.agentsInProject = agentsInProject;
18
53
  exports.deriveHostTraits = deriveHostTraits;
54
+ exports.detectHookAgent = detectHookAgent;
55
+ const fs = __importStar(require("fs"));
56
+ const path = __importStar(require("path"));
57
+ const detect_1 = require("../agents/detect");
19
58
  function parseHookPayload(raw) {
20
59
  const empty = {
21
60
  prompt: '',
@@ -73,6 +112,16 @@ function buildHookDenyDecision(reason) {
73
112
  * every pre-adapter install keeps its exact behaviour (REQ-AGENTADAPT-002.A2).
74
113
  */
75
114
  exports.CLAUDE_CODE_TRAITS = {
115
+ id: 'claude',
116
+ displayName: 'Claude Code',
117
+ autoAllowByDefault: true,
118
+ hasStatusLine: true,
119
+ memoryFile: 'CLAUDE.md',
120
+ configDir: '.claude',
121
+ userConfigFile: '.claude.json',
122
+ transcriptDir: '.claude/projects',
123
+ readTools: ['Read'],
124
+ searchTools: ['Grep', 'Glob'],
76
125
  specshipToolMarkers: ['"name":"mcp__specship__'],
77
126
  transcriptFormat: 'jsonl',
78
127
  supportsBeforeToolDeny: false,
@@ -81,10 +130,26 @@ exports.CLAUDE_CODE_TRAITS = {
81
130
  fallbackToolEvent: 'PreToolUse',
82
131
  denyEligibleTools: [],
83
132
  shellTool: null,
133
+ projectSettingsFile: '.claude/settings.json',
134
+ postEditEvent: 'PostToolUse',
135
+ writeToolMatcher: 'Edit|Write',
136
+ memoryNotesDir: '.claude/memory',
137
+ userMemoryFile: '.claude/CLAUDE.md',
84
138
  };
85
139
  /** Gemini CLI (verified against 0.28.0). */
86
140
  exports.GEMINI_CLI_TRAITS = {
87
- specshipToolMarkers: ['"name":"specship_', '"name": "specship_'],
141
+ id: 'gemini',
142
+ displayName: 'Gemini CLI',
143
+ autoAllowByDefault: false,
144
+ hasStatusLine: false,
145
+ memoryFile: 'GEMINI.md',
146
+ configDir: '.gemini',
147
+ userConfigFile: '.gemini/settings.json',
148
+ transcriptDir: '.gemini/tmp',
149
+ readTools: ['read_file', 'read_many_files'],
150
+ searchTools: ['grep_search', 'glob'],
151
+ // Bare names before 0.33.0, `mcp_specship_<tool>` from 0.33.0 (REQ-AGENTSWITCH-018).
152
+ specshipToolMarkers: ['"name":"specship_', '"name": "specship_', '"name":"mcp_specship_', '"name": "mcp_specship_'],
88
153
  transcriptFormat: 'single-json',
89
154
  supportsBeforeToolDeny: true,
90
155
  toolPrefix: '',
@@ -92,12 +157,58 @@ exports.GEMINI_CLI_TRAITS = {
92
157
  fallbackToolEvent: 'BeforeTool',
93
158
  denyEligibleTools: ['grep_search', 'glob'],
94
159
  shellTool: 'run_shell_command',
160
+ projectSettingsFile: '.gemini/settings.json',
161
+ postEditEvent: 'AfterTool',
162
+ // Same matcher the installer's post-edit sync hook uses (targets/gemini.ts).
163
+ writeToolMatcher: 'write_file|replace',
164
+ memoryNotesDir: null,
165
+ userMemoryFile: '.gemini/GEMINI.md',
95
166
  };
167
+ /**
168
+ * The profile code uses when no host is known (REQ-AGENTSWITCH-001): Claude
169
+ * Code, so every pre-adapter caller keeps its exact output.
170
+ */
171
+ exports.DEFAULT_HOST_TRAITS = exports.CLAUDE_CODE_TRAITS;
172
+ /** Every host profile, in registry order. */
173
+ exports.ALL_HOST_TRAITS = [exports.CLAUDE_CODE_TRAITS, exports.GEMINI_CLI_TRAITS];
174
+ /**
175
+ * The profile for an agent id (`claude`, `gemini`); {@link DEFAULT_HOST_TRAITS}
176
+ * for an unknown or missing id, e.g. the detection result `unknown`.
177
+ */
178
+ function hostTraitsFor(id) {
179
+ return exports.ALL_HOST_TRAITS.find((t) => t.id === id) ?? exports.DEFAULT_HOST_TRAITS;
180
+ }
181
+ /**
182
+ * The agents a project is set up for (REQ-AGENTSWITCH-003): every host whose
183
+ * root memory file or project config directory exists at `projectRoot`, in
184
+ * registry order. A project carrying neither is treated as Claude Code's, the
185
+ * default host, so pre-adapter projects keep their exact behaviour.
186
+ */
187
+ function agentsInProject(projectRoot) {
188
+ const present = exports.ALL_HOST_TRAITS.filter((t) => fs.existsSync(path.join(projectRoot, t.memoryFile)) ||
189
+ fs.existsSync(path.join(projectRoot, t.configDir)));
190
+ return present.length > 0 ? [...present] : [exports.DEFAULT_HOST_TRAITS];
191
+ }
96
192
  const GEMINI_EVENTS = new Set(['BeforeAgent', 'BeforeTool', 'AfterTool']);
193
+ /**
194
+ * How to FORMAT the reply to a hook payload. Falls back to Claude Code traits
195
+ * for payloads naming no (or a shared) event — the backward-compatibility
196
+ * contract of REQ-AGENTADAPT-002.A2. That fallback is a formatting default,
197
+ * not evidence: use {@link detectHookAgent} to ask which agent sent it.
198
+ */
97
199
  function deriveHostTraits(payload) {
98
200
  if (payload.hookEventName && GEMINI_EVENTS.has(payload.hookEventName)) {
99
201
  return exports.GEMINI_CLI_TRAITS;
100
202
  }
101
- return exports.CLAUDE_CODE_TRAITS;
203
+ return exports.DEFAULT_HOST_TRAITS;
204
+ }
205
+ /**
206
+ * Which agent SENT a hook payload (REQ-AGENTSWITCH-007). Only an event name a
207
+ * single agent sends counts as proof; a shared event such as `SessionStart`,
208
+ * or a payload naming no event, is `unknown` — unlike {@link deriveHostTraits},
209
+ * which still picks a formatting default for those.
210
+ */
211
+ function detectHookAgent(payload) {
212
+ return (0, detect_1.agentFromHookEvent)(payload.hookEventName);
102
213
  }
103
214
  //# sourceMappingURL=hook-output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hook-output.js","sourceRoot":"","sources":["../../src/activation/hook-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-output.js","sourceRoot":"","sources":["../../src/activation/hook-output.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@
27
27
  * or tool-name prefixes. The caller (bin/specship) hands in host traits
28
28
  * derived in the hook I/O adapter (`activation/hook-output.ts`).
29
29
  */
30
+ import { type HostTraits } from './hook-output';
30
31
  /**
31
32
  * The one redirect line. Explicitly advisory ("your search still runs") so
32
33
  * the model doesn't treat it as a rejection of the call it just made.
@@ -54,15 +55,27 @@ export interface SearchInterceptInput {
54
55
  homedir?: string;
55
56
  /** Injectable clock for tests. */
56
57
  now?: Date;
57
- /** Transcript substrings signaling specship tool_use. Default: Claude form. */
58
- specshipToolMarkers?: string[];
59
- /** Transcript file format. Default: Claude JSONL. */
60
- transcriptFormat?: 'jsonl' | 'single-json';
61
- /** Strict mode (host supports a BeforeTool deny AND user opted in). */
58
+ /**
59
+ * The calling host's profile (REQ-AGENTSWITCH-001.A3) — required. Supplies
60
+ * the transcript format and specship tool markers, the deny-eligible
61
+ * search tools, the shell tool and whether a deny is honoured at all.
62
+ */
63
+ traits: HostTraits;
64
+ /** The intercepted tool's name, from the hook payload. */
65
+ toolName?: string | null;
66
+ /** The intercepted tool's input, from the hook payload. */
67
+ toolInput?: Record<string, unknown>;
68
+ /** Strict mode requested (applied only when the host supports a BeforeTool deny). */
62
69
  strict?: boolean;
63
- /** Whether the intercepted tool is a built-in search eligible for deny. */
70
+ /**
71
+ * Whether the intercepted tool is a built-in search eligible for deny.
72
+ * Default: `toolName` is one of the profile's `denyEligibleTools`.
73
+ */
64
74
  denyEligible?: boolean;
65
- /** When the intercepted tool is a shell runner, the raw command string. */
75
+ /**
76
+ * When the intercepted tool is a shell runner, the raw command string.
77
+ * Default: `toolInput.command` when `toolName` is the profile's `shellTool`.
78
+ */
66
79
  shellCommand?: string | null;
67
80
  /** Search pattern/needle to echo in the deny reason, when known. */
68
81
  searchPattern?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"search-intercept.d.ts","sourceRoot":"","sources":["../../src/activation/search-intercept.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAOH;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAIX,CAAC;AAExB,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AA0GD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAUpE;AAqBD,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mEAAmE;IACnE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,GAAG,CAAC,EAAE,IAAI,CAAC;IAEX,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IAC3C,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC,IAAI,CAAC;AAYT;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CA4DvF"}
1
+ {"version":3,"file":"search-intercept.d.ts","sourceRoot":"","sources":["../../src/activation/search-intercept.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAIX,CAAC;AAExB,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAwHD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAUpE;AAqBD,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mEAAmE;IACnE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,GAAG,CAAC,EAAE,IAAI,CAAC;IAEX;;;;OAIG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC,IAAI,CAAC;AAYT;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAoEvF"}
@@ -117,13 +117,17 @@ function writeState(file, state, now) {
117
117
  }
118
118
  function scanTranscript(transcriptPath, markers, format) {
119
119
  const MAX_SCAN_BYTES = 4 * 1024 * 1024;
120
+ // A host that moved from one JSON document to JSON Lines (Gemini CLI
121
+ // 0.33.0, REQ-AGENTSWITCH-018) is scanned line by line; the file's own
122
+ // extension says which it wrote.
123
+ const lineRecords = format === 'jsonl' || transcriptPath.toLowerCase().endsWith('.jsonl');
120
124
  let text;
121
125
  try {
122
126
  const stat = fs.statSync(transcriptPath);
123
127
  if (stat.size <= MAX_SCAN_BYTES) {
124
128
  text = fs.readFileSync(transcriptPath, 'utf-8');
125
129
  }
126
- else if (format === 'jsonl') {
130
+ else if (lineRecords) {
127
131
  const fd = fs.openSync(transcriptPath, 'r');
128
132
  try {
129
133
  const buf = Buffer.alloc(MAX_SCAN_BYTES);
@@ -143,6 +147,13 @@ function scanTranscript(transcriptPath, markers, format) {
143
147
  catch {
144
148
  return format === 'single-json' ? 'parse-failure' : 'not-used';
145
149
  }
150
+ if (format === 'single-json' && lineRecords) {
151
+ for (const line of text.split('\n')) {
152
+ if (line.includes('"toolCalls"') && markers.some((m) => line.includes(m)))
153
+ return 'used';
154
+ }
155
+ return 'not-used';
156
+ }
146
157
  if (format === 'jsonl') {
147
158
  for (const line of text.split('\n')) {
148
159
  if (line.includes('"type":"tool_use"') && markers.some((m) => line.includes(m))) {
@@ -163,6 +174,8 @@ function scanTranscript(transcriptPath, markers, format) {
163
174
  const messages = doc?.messages;
164
175
  if (!Array.isArray(messages))
165
176
  return 'not-used';
177
+ // The host's tool-name prefixes, read off its `"name":"<prefix>` markers.
178
+ const namePrefixes = [...new Set(markers.map((m) => m.replace(/^"name":\s*"/, '')))];
166
179
  for (const m of messages) {
167
180
  const calls = m?.toolCalls;
168
181
  if (!Array.isArray(calls))
@@ -173,9 +186,10 @@ function scanTranscript(transcriptPath, markers, format) {
173
186
  // Gemini records the function name the model called, which for an
174
187
  // MCP tool is its bare name (`specship_explore`); the composite
175
188
  // `specship__<tool>` form appears only when a name collision forces
176
- // qualification (verified in 0.28.0 DiscoveredMCPTool). `specship_`
177
- // covers both; tolerate the Claude form if a transcript carries it.
178
- if (name.startsWith('specship_') || name.startsWith(hook_output_1.CLAUDE_CODE_TRAITS.toolPrefix)) {
189
+ // qualification (verified in 0.28.0 DiscoveredMCPTool); from 0.33.0 it
190
+ // is `mcp_specship_<tool>`. The host markers cover every form;
191
+ // tolerate the Claude form if a transcript carries it.
192
+ if (namePrefixes.some((p) => name.startsWith(p)) || name.startsWith(hook_output_1.CLAUDE_CODE_TRAITS.toolPrefix)) {
179
193
  return 'used';
180
194
  }
181
195
  }
@@ -247,7 +261,15 @@ function denyReason(pattern) {
247
261
  * specship (REQ-STEER-005).
248
262
  */
249
263
  function buildSearchIntercept(input) {
250
- const { cwd, sessionId, transcriptPath, env = process.env, homedir, now = new Date(), specshipToolMarkers = hook_output_1.CLAUDE_CODE_TRAITS.specshipToolMarkers, transcriptFormat = 'jsonl', strict = false, denyEligible = false, shellCommand = null, searchPattern = null, } = input;
264
+ const { cwd, sessionId, transcriptPath, traits, toolName = null, toolInput = {}, env = process.env, homedir, now = new Date(), searchPattern = null, } = input;
265
+ const { specshipToolMarkers, transcriptFormat } = traits;
266
+ const strict = (input.strict ?? false) && traits.supportsBeforeToolDeny;
267
+ const denyEligible = input.denyEligible ?? (toolName !== null && traits.denyEligibleTools.includes(toolName));
268
+ const shellCommand = input.shellCommand !== undefined
269
+ ? input.shellCommand
270
+ : traits.shellTool !== null && toolName === traits.shellTool && typeof toolInput.command === 'string'
271
+ ? toolInput.command
272
+ : null;
251
273
  if ((0, runtime_settings_1.resolveSetting)('SPECSHIP_NO_STEERING', cwd, env, homedir) === '1')
252
274
  return null;
253
275
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"search-intercept.js","sourceRoot":"","sources":["../../src/activation/search-intercept.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-intercept.js","sourceRoot":"","sources":["../../src/activation/search-intercept.ts"],"names":[],"mappings":"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"}