@specship/specship-win32-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 (288) hide show
  1. package/lib/dist/.claude-plugin/plugin.json +15 -3
  2. package/lib/dist/activation/cheatsheet.d.ts +10 -7
  3. package/lib/dist/activation/cheatsheet.d.ts.map +1 -1
  4. package/lib/dist/activation/cheatsheet.js +21 -5
  5. package/lib/dist/activation/cheatsheet.js.map +1 -1
  6. package/lib/dist/activation/hook-output.d.ts +75 -2
  7. package/lib/dist/activation/hook-output.d.ts.map +1 -1
  8. package/lib/dist/activation/hook-output.js +114 -3
  9. package/lib/dist/activation/hook-output.js.map +1 -1
  10. package/lib/dist/activation/search-intercept.d.ts +20 -7
  11. package/lib/dist/activation/search-intercept.d.ts.map +1 -1
  12. package/lib/dist/activation/search-intercept.js +27 -5
  13. package/lib/dist/activation/search-intercept.js.map +1 -1
  14. package/lib/dist/activation/steering.d.ts +7 -4
  15. package/lib/dist/activation/steering.d.ts.map +1 -1
  16. package/lib/dist/activation/steering.js +10 -8
  17. package/lib/dist/activation/steering.js.map +1 -1
  18. package/lib/dist/agents/detect.d.ts +32 -0
  19. package/lib/dist/agents/detect.d.ts.map +1 -0
  20. package/lib/dist/agents/detect.js +54 -0
  21. package/lib/dist/agents/detect.js.map +1 -0
  22. package/lib/dist/agents/recent-project.d.ts +18 -0
  23. package/lib/dist/agents/recent-project.d.ts.map +1 -0
  24. package/lib/dist/agents/recent-project.js +92 -0
  25. package/lib/dist/agents/recent-project.js.map +1 -0
  26. package/lib/dist/analytics/canonical-tools.d.ts +23 -0
  27. package/lib/dist/analytics/canonical-tools.d.ts.map +1 -0
  28. package/lib/dist/analytics/canonical-tools.js +36 -0
  29. package/lib/dist/analytics/canonical-tools.js.map +1 -0
  30. package/lib/dist/analytics/canonical-tools.json +16 -0
  31. package/lib/dist/analytics/specship-impact.d.ts +3 -2
  32. package/lib/dist/analytics/specship-impact.d.ts.map +1 -1
  33. package/lib/dist/analytics/specship-impact.js +6 -4
  34. package/lib/dist/analytics/specship-impact.js.map +1 -1
  35. package/lib/dist/bin/specship.js +215 -170
  36. package/lib/dist/bin/specship.js.map +1 -1
  37. package/lib/dist/bin/uninstall.js +2 -2
  38. package/lib/dist/bin/uninstall.js.map +1 -1
  39. package/lib/dist/claudemd/audit.d.ts +12 -3
  40. package/lib/dist/claudemd/audit.d.ts.map +1 -1
  41. package/lib/dist/claudemd/audit.js +65 -22
  42. package/lib/dist/claudemd/audit.js.map +1 -1
  43. package/lib/dist/commands/specship/spec.md +9 -0
  44. package/lib/dist/db/migrations.d.ts +1 -1
  45. package/lib/dist/db/migrations.d.ts.map +1 -1
  46. package/lib/dist/db/migrations.js +18 -4
  47. package/lib/dist/db/migrations.js.map +1 -1
  48. package/lib/dist/db/schema.sql +8 -0
  49. package/lib/dist/db/spec-queries.d.ts +13 -1
  50. package/lib/dist/db/spec-queries.d.ts.map +1 -1
  51. package/lib/dist/db/spec-queries.js +21 -0
  52. package/lib/dist/db/spec-queries.js.map +1 -1
  53. package/lib/dist/enforce/changed-files.d.ts +7 -0
  54. package/lib/dist/enforce/changed-files.d.ts.map +1 -1
  55. package/lib/dist/enforce/changed-files.js +17 -0
  56. package/lib/dist/enforce/changed-files.js.map +1 -1
  57. package/lib/dist/enforce/enforce.d.ts +35 -1
  58. package/lib/dist/enforce/enforce.d.ts.map +1 -1
  59. package/lib/dist/enforce/enforce.js +66 -2
  60. package/lib/dist/enforce/enforce.js.map +1 -1
  61. package/lib/dist/extraction/index.d.ts +50 -4
  62. package/lib/dist/extraction/index.d.ts.map +1 -1
  63. package/lib/dist/extraction/index.js +105 -13
  64. package/lib/dist/extraction/index.js.map +1 -1
  65. package/lib/dist/extraction/parse-warnings.d.ts +16 -0
  66. package/lib/dist/extraction/parse-warnings.d.ts.map +1 -0
  67. package/lib/dist/extraction/parse-warnings.js +30 -0
  68. package/lib/dist/extraction/parse-warnings.js.map +1 -0
  69. package/lib/dist/extraction/tree-sitter.d.ts +27 -0
  70. package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
  71. package/lib/dist/extraction/tree-sitter.js +168 -1
  72. package/lib/dist/extraction/tree-sitter.js.map +1 -1
  73. package/lib/dist/health/smoke-check.js +1 -1
  74. package/lib/dist/health/smoke-check.js.map +1 -1
  75. package/lib/dist/hooks/hooks.json +16 -1
  76. package/lib/dist/index.d.ts +63 -3
  77. package/lib/dist/index.d.ts.map +1 -1
  78. package/lib/dist/index.js +235 -9
  79. package/lib/dist/index.js.map +1 -1
  80. package/lib/dist/installer/agent-record.d.ts +80 -0
  81. package/lib/dist/installer/agent-record.d.ts.map +1 -0
  82. package/lib/dist/installer/agent-record.js +351 -0
  83. package/lib/dist/installer/agent-record.js.map +1 -0
  84. package/lib/dist/installer/auto-migrate.d.ts +56 -0
  85. package/lib/dist/installer/auto-migrate.d.ts.map +1 -0
  86. package/lib/dist/installer/auto-migrate.js +328 -0
  87. package/lib/dist/installer/auto-migrate.js.map +1 -0
  88. package/lib/dist/installer/index.d.ts +37 -8
  89. package/lib/dist/installer/index.d.ts.map +1 -1
  90. package/lib/dist/installer/index.js +156 -46
  91. package/lib/dist/installer/index.js.map +1 -1
  92. package/lib/dist/installer/install-defaults.d.ts +4 -3
  93. package/lib/dist/installer/install-defaults.d.ts.map +1 -1
  94. package/lib/dist/installer/install-defaults.js +6 -5
  95. package/lib/dist/installer/install-defaults.js.map +1 -1
  96. package/lib/dist/installer/{config-writer.d.ts → targets/claude-config-writer.d.ts} +1 -1
  97. package/lib/dist/installer/targets/claude-config-writer.d.ts.map +1 -0
  98. package/lib/dist/installer/{config-writer.js → targets/claude-config-writer.js} +7 -6
  99. package/lib/dist/installer/targets/claude-config-writer.js.map +1 -0
  100. package/lib/dist/installer/targets/claude-projects.d.ts +9 -0
  101. package/lib/dist/installer/targets/claude-projects.d.ts.map +1 -0
  102. package/lib/dist/installer/targets/claude-projects.js +151 -0
  103. package/lib/dist/installer/targets/claude-projects.js.map +1 -0
  104. package/lib/dist/installer/targets/claude.d.ts +28 -1
  105. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  106. package/lib/dist/installer/targets/claude.js +39 -20
  107. package/lib/dist/installer/targets/claude.js.map +1 -1
  108. package/lib/dist/installer/targets/feature-parity.d.ts +28 -0
  109. package/lib/dist/installer/targets/feature-parity.d.ts.map +1 -0
  110. package/lib/dist/installer/targets/feature-parity.js +32 -0
  111. package/lib/dist/installer/targets/feature-parity.js.map +1 -0
  112. package/lib/dist/installer/{gemini-commands.d.ts → targets/gemini-commands.d.ts} +7 -3
  113. package/lib/dist/installer/targets/gemini-commands.d.ts.map +1 -0
  114. package/lib/dist/installer/{gemini-commands.js → targets/gemini-commands.js} +35 -14
  115. package/lib/dist/installer/targets/gemini-commands.js.map +1 -0
  116. package/lib/dist/installer/targets/gemini-projects.d.ts +11 -0
  117. package/lib/dist/installer/targets/gemini-projects.d.ts.map +1 -0
  118. package/lib/dist/installer/targets/gemini-projects.js +84 -0
  119. package/lib/dist/installer/targets/gemini-projects.js.map +1 -0
  120. package/lib/dist/installer/targets/gemini.d.ts +94 -8
  121. package/lib/dist/installer/targets/gemini.d.ts.map +1 -1
  122. package/lib/dist/installer/targets/gemini.js +392 -33
  123. package/lib/dist/installer/targets/gemini.js.map +1 -1
  124. package/lib/dist/installer/targets/registry.d.ts +8 -1
  125. package/lib/dist/installer/targets/registry.d.ts.map +1 -1
  126. package/lib/dist/installer/targets/registry.js +14 -5
  127. package/lib/dist/installer/targets/registry.js.map +1 -1
  128. package/lib/dist/installer/targets/shared.d.ts +44 -1
  129. package/lib/dist/installer/targets/shared.d.ts.map +1 -1
  130. package/lib/dist/installer/targets/shared.js +130 -3
  131. package/lib/dist/installer/targets/shared.js.map +1 -1
  132. package/lib/dist/installer/targets/types.d.ts +23 -1
  133. package/lib/dist/installer/targets/types.d.ts.map +1 -1
  134. package/lib/dist/jira/auto-publish.d.ts +22 -2
  135. package/lib/dist/jira/auto-publish.d.ts.map +1 -1
  136. package/lib/dist/jira/auto-publish.js +54 -9
  137. package/lib/dist/jira/auto-publish.js.map +1 -1
  138. package/lib/dist/jira/board-first.d.ts +15 -2
  139. package/lib/dist/jira/board-first.d.ts.map +1 -1
  140. package/lib/dist/jira/board-first.js +16 -0
  141. package/lib/dist/jira/board-first.js.map +1 -1
  142. package/lib/dist/jira/ci-publish.d.ts +72 -0
  143. package/lib/dist/jira/ci-publish.d.ts.map +1 -0
  144. package/lib/dist/jira/ci-publish.js +162 -0
  145. package/lib/dist/jira/ci-publish.js.map +1 -0
  146. package/lib/dist/jira/publish.d.ts +23 -0
  147. package/lib/dist/jira/publish.d.ts.map +1 -1
  148. package/lib/dist/jira/publish.js +0 -0
  149. package/lib/dist/jira/publish.js.map +1 -1
  150. package/lib/dist/jira/regression-pack.d.ts.map +1 -1
  151. package/lib/dist/jira/regression-pack.js +7 -1
  152. package/lib/dist/jira/regression-pack.js.map +1 -1
  153. package/lib/dist/jira/repo-config.d.ts.map +1 -1
  154. package/lib/dist/jira/repo-config.js +8 -0
  155. package/lib/dist/jira/repo-config.js.map +1 -1
  156. package/lib/dist/jira/types.d.ts +8 -0
  157. package/lib/dist/jira/types.d.ts.map +1 -1
  158. package/lib/dist/jira/types.js.map +1 -1
  159. package/lib/dist/knowledge/enforce.d.ts.map +1 -1
  160. package/lib/dist/knowledge/enforce.js +6 -1
  161. package/lib/dist/knowledge/enforce.js.map +1 -1
  162. package/lib/dist/mcp/jira-tools.d.ts +5 -0
  163. package/lib/dist/mcp/jira-tools.d.ts.map +1 -1
  164. package/lib/dist/mcp/jira-tools.js +59 -4
  165. package/lib/dist/mcp/jira-tools.js.map +1 -1
  166. package/lib/dist/mcp/proxy.d.ts.map +1 -1
  167. package/lib/dist/mcp/proxy.js +2 -1
  168. package/lib/dist/mcp/proxy.js.map +1 -1
  169. package/lib/dist/mcp/server-instructions.d.ts +16 -10
  170. package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
  171. package/lib/dist/mcp/server-instructions.js +69 -20
  172. package/lib/dist/mcp/server-instructions.js.map +1 -1
  173. package/lib/dist/mcp/session.d.ts +11 -0
  174. package/lib/dist/mcp/session.d.ts.map +1 -1
  175. package/lib/dist/mcp/session.js +43 -1
  176. package/lib/dist/mcp/session.js.map +1 -1
  177. package/lib/dist/mcp/tools.d.ts.map +1 -1
  178. package/lib/dist/mcp/tools.js +8 -0
  179. package/lib/dist/mcp/tools.js.map +1 -1
  180. package/lib/dist/reflect/apply.d.ts +2 -2
  181. package/lib/dist/reflect/apply.d.ts.map +1 -1
  182. package/lib/dist/reflect/apply.js +6 -5
  183. package/lib/dist/reflect/apply.js.map +1 -1
  184. package/lib/dist/reflect/miner.d.ts.map +1 -1
  185. package/lib/dist/reflect/miner.js +28 -15
  186. package/lib/dist/reflect/miner.js.map +1 -1
  187. package/lib/dist/reflect/session-outcomes.d.ts.map +1 -1
  188. package/lib/dist/reflect/session-outcomes.js +8 -3
  189. package/lib/dist/reflect/session-outcomes.js.map +1 -1
  190. package/lib/dist/reflect/targets.d.ts.map +1 -1
  191. package/lib/dist/reflect/targets.js +25 -5
  192. package/lib/dist/reflect/targets.js.map +1 -1
  193. package/lib/dist/reflect/types.d.ts +7 -0
  194. package/lib/dist/reflect/types.d.ts.map +1 -1
  195. package/lib/dist/resolution/spec-link-resolver.d.ts +14 -2
  196. package/lib/dist/resolution/spec-link-resolver.d.ts.map +1 -1
  197. package/lib/dist/resolution/spec-link-resolver.js +13 -3
  198. package/lib/dist/resolution/spec-link-resolver.js.map +1 -1
  199. package/lib/dist/server/canonical-tools.js +50 -0
  200. package/lib/dist/server/cli.js +2 -2
  201. package/lib/dist/server/host-profiles.js +39 -0
  202. package/lib/dist/server/ingest/index.js +2 -1
  203. package/lib/dist/server/ingest/ingestor.js +195 -76
  204. package/lib/dist/server/ingest/project-paths.js +8 -2
  205. package/lib/dist/server/ingest/recorded-projects.js +43 -0
  206. package/lib/dist/server/ingest/specship-classify.js +7 -2
  207. package/lib/dist/server/ingest/transcripts/claude-jsonl.js +54 -0
  208. package/lib/dist/server/ingest/transcripts/claude.js +64 -0
  209. package/lib/dist/server/ingest/transcripts/gemini.js +469 -0
  210. package/lib/dist/server/ingest/transcripts/index.js +14 -0
  211. package/lib/dist/server/ingest/{parser.js → transcripts/shared.js} +3 -49
  212. package/lib/dist/server/ingest/transcripts/types.js +4 -0
  213. package/lib/dist/server/ingest/watcher.js +31 -30
  214. package/lib/dist/server/routes/claude.js +27 -10
  215. package/lib/dist/server/routes/graph.js +64 -3
  216. package/lib/dist/server/routes/mcp.js +57 -15
  217. package/lib/dist/server/routes/memory.js +54 -35
  218. package/lib/dist/server/routes/projects.js +78 -7
  219. package/lib/dist/server/routes/spec.js +125 -0
  220. package/lib/dist/server/server.js +8 -2
  221. package/lib/dist/skills/spec-author/SKILL.md +1 -1
  222. package/lib/dist/skills/spec-author/references/gap-questions.md +1 -1
  223. package/lib/dist/spec-lint/lint.d.ts +26 -1
  224. package/lib/dist/spec-lint/lint.d.ts.map +1 -1
  225. package/lib/dist/spec-lint/lint.js +96 -7
  226. package/lib/dist/spec-lint/lint.js.map +1 -1
  227. package/lib/dist/sync/worktree.d.ts +48 -0
  228. package/lib/dist/sync/worktree.d.ts.map +1 -1
  229. package/lib/dist/sync/worktree.js +109 -0
  230. package/lib/dist/sync/worktree.js.map +1 -1
  231. package/lib/dist/ui/assets/bricolage-latin-C23fTOVi.woff2 +0 -0
  232. package/lib/dist/ui/assets/bricolage-latin-ext-B82pxkPf.woff2 +0 -0
  233. package/lib/dist/ui/assets/index-54vorjyq.css +1 -0
  234. package/lib/dist/ui/assets/index-BZQonCVb.js +52 -0
  235. package/lib/dist/ui/assets/space-grotesk-latin-DPT1xrvW.woff2 +0 -0
  236. package/lib/dist/ui/assets/space-grotesk-latin-ext-wJGaI8U0.woff2 +0 -0
  237. package/lib/dist/ui/index.html +2 -2
  238. package/lib/dist/update/updater.d.ts +6 -0
  239. package/lib/dist/update/updater.d.ts.map +1 -1
  240. package/lib/dist/update/updater.js +13 -1
  241. package/lib/dist/update/updater.js.map +1 -1
  242. package/lib/dist/workflows/agents/claude.d.ts +9 -0
  243. package/lib/dist/workflows/agents/claude.d.ts.map +1 -1
  244. package/lib/dist/workflows/agents/claude.js +22 -3
  245. package/lib/dist/workflows/agents/claude.js.map +1 -1
  246. package/lib/dist/workflows/agents/gemini-version.d.ts +18 -0
  247. package/lib/dist/workflows/agents/gemini-version.d.ts.map +1 -0
  248. package/lib/dist/workflows/agents/gemini-version.js +81 -0
  249. package/lib/dist/workflows/agents/gemini-version.js.map +1 -0
  250. package/lib/dist/workflows/agents/gemini.d.ts +1 -1
  251. package/lib/dist/workflows/agents/gemini.d.ts.map +1 -1
  252. package/lib/dist/workflows/agents/gemini.js +12 -2
  253. package/lib/dist/workflows/agents/gemini.js.map +1 -1
  254. package/lib/dist/workflows/agents/index.d.ts +2 -0
  255. package/lib/dist/workflows/agents/index.d.ts.map +1 -1
  256. package/lib/dist/workflows/agents/index.js +5 -0
  257. package/lib/dist/workflows/agents/index.js.map +1 -1
  258. package/lib/dist/workflows/agents/types.d.ts +13 -0
  259. package/lib/dist/workflows/agents/types.d.ts.map +1 -1
  260. package/lib/dist/workflows/agents/types.js.map +1 -1
  261. package/lib/dist/workflows/condition-evaluator.d.ts +8 -0
  262. package/lib/dist/workflows/condition-evaluator.d.ts.map +1 -1
  263. package/lib/dist/workflows/condition-evaluator.js +7 -0
  264. package/lib/dist/workflows/condition-evaluator.js.map +1 -1
  265. package/lib/dist/workflows/defaults/claude-design-implement.yaml +11 -11
  266. package/lib/dist/workflows/defaults/spec-author.yaml +9 -9
  267. package/lib/dist/workflows/defaults/spec-fix.yaml +8 -8
  268. package/lib/dist/workflows/defaults/spec-implement.yaml +38 -23
  269. package/lib/dist/workflows/defaults/spec-relink.yaml +5 -5
  270. package/lib/dist/workflows/defaults/spec-verify.yaml +3 -3
  271. package/lib/dist/workflows/executor.d.ts +7 -0
  272. package/lib/dist/workflows/executor.d.ts.map +1 -1
  273. package/lib/dist/workflows/executor.js +22 -5
  274. package/lib/dist/workflows/executor.js.map +1 -1
  275. package/lib/node_modules/.package-lock.json +1 -1
  276. package/lib/package.json +3 -2
  277. package/package.json +1 -1
  278. package/lib/dist/installer/config-writer.d.ts.map +0 -1
  279. package/lib/dist/installer/config-writer.js.map +0 -1
  280. package/lib/dist/installer/gemini-commands.d.ts.map +0 -1
  281. package/lib/dist/installer/gemini-commands.js.map +0 -1
  282. package/lib/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  283. package/lib/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  284. package/lib/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  285. package/lib/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  286. package/lib/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  287. package/lib/dist/ui/assets/index-BzuUWUAE.js +0 -50
  288. package/lib/dist/ui/assets/index-ezwX2EfG.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"steering.d.ts","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoBH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,8EAA8E;AAC9E,eAAO,MAAM,aAAa,QAAmE,CAAC;AAc9F,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,QAAwE,CAAC;AAExG;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,GAAE,MAAsC,GACjD,MAAM,GAAG,IAAI,CAaf"}
1
+ {"version":3,"file":"steering.d.ts","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAcrE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAE3E;AAED,8EAA8E;AAC9E,eAAO,MAAM,aAAa,QAAyD,CAAC;AAcpF,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,QAA8D,CAAC;AAE9F;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAaf"}
@@ -67,13 +67,14 @@ const STEERING_TEMPLATE = 'This project has a SpecShip code-graph index. Before
67
67
  * Render a steering template with the calling host's tool-name form
68
68
  * (AGENTADAPT-DOC, REQ-AGENTADAPT-001): Claude Code calls the tool
69
69
  * `mcp__specship__specship_explore`, Gemini CLI calls it `specship_explore`.
70
- * The prefix comes from the hook adapter — this module never names a host.
70
+ * The profile comes from the hook adapter — this module never names a host,
71
+ * and the profile is a required argument (REQ-AGENTSWITCH-001.A3).
71
72
  */
72
- function renderSteering(template, toolPrefix) {
73
- return template.replace('{explore}', `${toolPrefix}specship_explore`);
73
+ function renderSteering(template, traits) {
74
+ return template.replace('{explore}', `${traits.toolPrefix}specship_explore`);
74
75
  }
75
76
  /** The standard line as Claude Code (the legacy default host) receives it. */
76
- exports.STEERING_TEXT = renderSteering(STEERING_TEMPLATE, hook_output_1.CLAUDE_CODE_TRAITS.toolPrefix);
77
+ exports.STEERING_TEXT = renderSteering(STEERING_TEMPLATE, hook_output_1.DEFAULT_HOST_TRAITS);
77
78
  /**
78
79
  * The lite-tier template (LOWMODEL-DOC, REQ-LOWMODEL-002): small models
79
80
  * follow prescriptive templates far better than principles, and fan-out
@@ -85,16 +86,17 @@ const STEERING_TEMPLATE_LITE = 'This project has a SpecShip index. For any code
85
86
  'ONE call, then answer from its output — the source it returns is already read. ' +
86
87
  'Do not spawn subagents. Do not Read/Grep files the tool returned.';
87
88
  /** The lite line as Claude Code (the legacy default host) receives it. */
88
- exports.STEERING_TEXT_LITE = renderSteering(STEERING_TEMPLATE_LITE, hook_output_1.CLAUDE_CODE_TRAITS.toolPrefix);
89
+ exports.STEERING_TEXT_LITE = renderSteering(STEERING_TEMPLATE_LITE, hook_output_1.DEFAULT_HOST_TRAITS);
89
90
  /**
90
91
  * Decide whether to emit the steering line (REQ-STEER-002): silent unless the
91
92
  * project is initialized (`.specship/` exists at cwd), and silent when the
92
93
  * user opted out via `SPECSHIP_NO_STEERING=1`. Uninitialized projects and
93
94
  * opted-out users get zero prompt noise. Tier-aware (REQ-LOWMODEL-002):
94
95
  * lite-tier sessions get the prescriptive template; standard and frontier keep
95
- * the standard line.
96
+ * the standard line. `traits` is the calling host's profile and is required
97
+ * (REQ-AGENTSWITCH-001.A3) — callers with no host pass `DEFAULT_HOST_TRAITS`.
96
98
  */
97
- function buildSteeringNudge(cwd, env = process.env, homedir, toolPrefix = hook_output_1.CLAUDE_CODE_TRAITS.toolPrefix) {
99
+ function buildSteeringNudge(cwd, traits, env = process.env, homedir) {
98
100
  // RUNSET-DOC: the opt-out resolves env > project .specship/settings.json >
99
101
  // ~/.specship/settings.json, so a repo can silence steering durably.
100
102
  if ((0, runtime_settings_1.resolveSetting)('SPECSHIP_NO_STEERING', cwd, env, homedir) === '1')
@@ -106,6 +108,6 @@ function buildSteeringNudge(cwd, env = process.env, homedir, toolPrefix = hook_o
106
108
  catch {
107
109
  return null;
108
110
  }
109
- return renderSteering((0, model_context_1.detectModelTier)(cwd, env, homedir) === 'lite' ? STEERING_TEMPLATE_LITE : STEERING_TEMPLATE, toolPrefix);
111
+ return renderSteering((0, model_context_1.detectModelTier)(cwd, env, homedir) === 'lite' ? STEERING_TEMPLATE_LITE : STEERING_TEMPLATE, traits);
110
112
  }
111
113
  //# sourceMappingURL=steering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BH,wCAEC;AA4BD,gDAkBC;AAxED,uCAAyB;AACzB,2CAA6B;AAC7B,wDAAuD;AACvD,iEAA4D;AAC5D,+CAAmD;AAEnD;;;;GAIG;AACH,MAAM,iBAAiB,GACrB,8EAA8E;IAC9E,4EAA4E;IAC5E,uDAAuD;IACvD,8EAA8E;IAC9E,oBAAoB,CAAC;AAEvB;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,QAAgB,EAAE,UAAkB;IACjE,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,UAAU,kBAAkB,CAAC,CAAC;AACxE,CAAC;AAED,8EAA8E;AACjE,QAAA,aAAa,GAAG,cAAc,CAAC,iBAAiB,EAAE,gCAAkB,CAAC,UAAU,CAAC,CAAC;AAE9F;;;;;GAKG;AACH,MAAM,sBAAsB,GAC1B,0EAA0E;IAC1E,0DAA0D;IAC1D,iFAAiF;IACjF,mEAAmE,CAAC;AAEtE,0EAA0E;AAC7D,QAAA,kBAAkB,GAAG,cAAc,CAAC,sBAAsB,EAAE,gCAAkB,CAAC,UAAU,CAAC,CAAC;AAExG;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,GAAW,EACX,MAAyB,OAAO,CAAC,GAAG,EACpC,OAAgB,EAChB,aAAqB,gCAAkB,CAAC,UAAU;IAElD,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,IAAA,iCAAc,EAAC,sBAAsB,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnF,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CACnB,IAAA,+BAAe,EAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,iBAAiB,EAC1F,UAAU,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BH,wCAEC;AA6BD,gDAkBC;AA1ED,uCAAyB;AACzB,2CAA6B;AAC7B,wDAAuD;AACvD,iEAA4D;AAC5D,+CAAqE;AAErE;;;;GAIG;AACH,MAAM,iBAAiB,GACrB,8EAA8E;IAC9E,4EAA4E;IAC5E,uDAAuD;IACvD,8EAA8E;IAC9E,oBAAoB,CAAC;AAEvB;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,QAAgB,EAAE,MAAkB;IACjE,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,kBAAkB,CAAC,CAAC;AAC/E,CAAC;AAED,8EAA8E;AACjE,QAAA,aAAa,GAAG,cAAc,CAAC,iBAAiB,EAAE,iCAAmB,CAAC,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,sBAAsB,GAC1B,0EAA0E;IAC1E,0DAA0D;IAC1D,iFAAiF;IACjF,mEAAmE,CAAC;AAEtE,0EAA0E;AAC7D,QAAA,kBAAkB,GAAG,cAAc,CAAC,sBAAsB,EAAE,iCAAmB,CAAC,CAAC;AAE9F;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAChC,GAAW,EACX,MAAkB,EAClB,MAAyB,OAAO,CAAC,GAAG,EACpC,OAAgB;IAEhB,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,IAAA,iCAAc,EAAC,sBAAsB,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnF,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CACnB,IAAA,+BAAe,EAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,iBAAiB,EAC1F,MAAM,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Current-agent detection (AGENTSWITCH-DOC, REQ-AGENTSWITCH-007).
3
+ *
4
+ * Works out which coding agent SpecShip is serving from the evidence that
5
+ * agent supplies: the MCP client name at `initialize`, a hook payload's event
6
+ * name, and the launcher environment variables of the agent's shell.
7
+ *
8
+ * This module is agent-neutral (REQ-AGENTSWITCH-001): it holds no host
9
+ * literals. Each host declares its own client names, exclusive hook events
10
+ * and launcher check on its adapter in `src/workflows/agents/`, and detection
11
+ * iterates that registry. Evidence matching no adapter — or more than one —
12
+ * yields {@link UNKNOWN_AGENT}. Every function here is pure: detection never
13
+ * writes or installs anything, so "unknown" cannot trigger a change.
14
+ */
15
+ /** The detection result when the evidence proves no single agent. */
16
+ export declare const UNKNOWN_AGENT = "unknown";
17
+ /** An adapter id (same ids as the install record), or {@link UNKNOWN_AGENT}. */
18
+ export type DetectedAgent = string;
19
+ /** The agent behind an MCP `initialize` `clientInfo`, matched by exact name. */
20
+ export declare function agentFromMcpClient(clientInfo?: {
21
+ name?: unknown;
22
+ } | null): DetectedAgent;
23
+ /**
24
+ * The agent behind a hook event name. Only events a single host sends count;
25
+ * shared events (session start) and missing names are unknown.
26
+ */
27
+ export declare function agentFromHookEvent(eventName?: string | null): DetectedAgent;
28
+ /** The agent whose launcher environment variables are set; unknown if none or several. */
29
+ export declare function agentFromEnv(env?: NodeJS.ProcessEnv): DetectedAgent;
30
+ /** A detected agent's human-readable name; `unknown` for unknown or unlisted ids. */
31
+ export declare function agentDisplayName(agent: DetectedAgent): string;
32
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/agents/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,qEAAqE;AACrE,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAQnC,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,aAAa,CAIxF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,CAG3E;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,CAEhF;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Current-agent detection (AGENTSWITCH-DOC, REQ-AGENTSWITCH-007).
4
+ *
5
+ * Works out which coding agent SpecShip is serving from the evidence that
6
+ * agent supplies: the MCP client name at `initialize`, a hook payload's event
7
+ * name, and the launcher environment variables of the agent's shell.
8
+ *
9
+ * This module is agent-neutral (REQ-AGENTSWITCH-001): it holds no host
10
+ * literals. Each host declares its own client names, exclusive hook events
11
+ * and launcher check on its adapter in `src/workflows/agents/`, and detection
12
+ * iterates that registry. Evidence matching no adapter — or more than one —
13
+ * yields {@link UNKNOWN_AGENT}. Every function here is pure: detection never
14
+ * writes or installs anything, so "unknown" cannot trigger a change.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.UNKNOWN_AGENT = void 0;
18
+ exports.agentFromMcpClient = agentFromMcpClient;
19
+ exports.agentFromHookEvent = agentFromHookEvent;
20
+ exports.agentFromEnv = agentFromEnv;
21
+ exports.agentDisplayName = agentDisplayName;
22
+ const agents_1 = require("../workflows/agents");
23
+ /** The detection result when the evidence proves no single agent. */
24
+ exports.UNKNOWN_AGENT = 'unknown';
25
+ /** The single adapter matching `pred`, else unknown (none or ambiguous). */
26
+ function uniqueMatch(pred) {
27
+ const hits = (0, agents_1.headlessAgents)().filter(pred);
28
+ return hits.length === 1 ? hits[0].id : exports.UNKNOWN_AGENT;
29
+ }
30
+ /** The agent behind an MCP `initialize` `clientInfo`, matched by exact name. */
31
+ function agentFromMcpClient(clientInfo) {
32
+ const name = clientInfo?.name;
33
+ if (typeof name !== 'string' || !name)
34
+ return exports.UNKNOWN_AGENT;
35
+ return uniqueMatch((a) => a.mcpClientNames.includes(name));
36
+ }
37
+ /**
38
+ * The agent behind a hook event name. Only events a single host sends count;
39
+ * shared events (session start) and missing names are unknown.
40
+ */
41
+ function agentFromHookEvent(eventName) {
42
+ if (!eventName)
43
+ return exports.UNKNOWN_AGENT;
44
+ return uniqueMatch((a) => a.exclusiveHookEvents.includes(eventName));
45
+ }
46
+ /** The agent whose launcher environment variables are set; unknown if none or several. */
47
+ function agentFromEnv(env = process.env) {
48
+ return uniqueMatch((a) => a.launchedFrom(env));
49
+ }
50
+ /** A detected agent's human-readable name; `unknown` for unknown or unlisted ids. */
51
+ function agentDisplayName(agent) {
52
+ return (0, agents_1.headlessAgents)().find((a) => a.id === agent)?.displayName ?? exports.UNKNOWN_AGENT;
53
+ }
54
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/agents/detect.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAiBH,gDAIC;AAMD,gDAGC;AAGD,oCAEC;AAGD,4CAEC;AAtCD,gDAAqD;AAErD,qEAAqE;AACxD,QAAA,aAAa,GAAG,SAAS,CAAC;AAKvC,4EAA4E;AAC5E,SAAS,WAAW,CAAC,IAA+D;IAClF,MAAM,IAAI,GAAG,IAAA,uBAAc,GAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAa,CAAC;AACzD,CAAC;AAED,gFAAgF;AAChF,SAAgB,kBAAkB,CAAC,UAAsC;IACvE,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,CAAC;IAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI;QAAE,OAAO,qBAAa,CAAC;IAC5D,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,SAAyB;IAC1D,IAAI,CAAC,SAAS;QAAE,OAAO,qBAAa,CAAC;IACrC,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,0FAA0F;AAC1F,SAAgB,YAAY,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC/D,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,qFAAqF;AACrF,SAAgB,gBAAgB,CAAC,KAAoB;IACnD,OAAO,IAAA,uBAAc,GAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,WAAW,IAAI,qBAAa,CAAC;AACpF,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The project `specship desktop` opens when none is given (REQ-AGENTSWITCH-011):
3
+ * the most recently active project that still exists and is `specship init`'d,
4
+ * from every source that knows a project path — the installed-agents record
5
+ * (any agent) and each agent's own record of where it was used
6
+ * (REQ-AGENTSWITCH-019.A1).
7
+ */
8
+ /**
9
+ * Auto-pick a default project for `specship desktop` when the user
10
+ * didn't pass `-p` and the cwd isn't initialized either. Asks every agent
11
+ * target where it was used, and returns the most-recently-touched project
12
+ * that's still on disk AND has been `specship init`'d.
13
+ *
14
+ * Returns null when nothing qualifies — the server boots projectless and
15
+ * the desktop UI prompts the user to pick.
16
+ */
17
+ export declare function pickRecentInitializedProject(): Promise<string | null>;
18
+ //# sourceMappingURL=recent-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-project.d.ts","sourceRoot":"","sources":["../../src/agents/recent-project.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB3E"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * The project `specship desktop` opens when none is given (REQ-AGENTSWITCH-011):
4
+ * the most recently active project that still exists and is `specship init`'d,
5
+ * from every source that knows a project path — the installed-agents record
6
+ * (any agent) and each agent's own record of where it was used
7
+ * (REQ-AGENTSWITCH-019.A1).
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.pickRecentInitializedProject = pickRecentInitializedProject;
44
+ const fs = __importStar(require("fs"));
45
+ const os = __importStar(require("os"));
46
+ const directory_1 = require("../directory");
47
+ const registry_1 = require("../installer/targets/registry");
48
+ const agent_record_1 = require("../installer/agent-record");
49
+ /**
50
+ * Auto-pick a default project for `specship desktop` when the user
51
+ * didn't pass `-p` and the cwd isn't initialized either. Asks every agent
52
+ * target where it was used, and returns the most-recently-touched project
53
+ * that's still on disk AND has been `specship init`'d.
54
+ *
55
+ * Returns null when nothing qualifies — the server boots projectless and
56
+ * the desktop UI prompts the user to pick.
57
+ */
58
+ async function pickRecentInitializedProject() {
59
+ const candidates = [];
60
+ try {
61
+ for (const e of (0, agent_record_1.readAgentRecord)()?.entries ?? []) {
62
+ if (e.scope !== 'local' || !e.projectRoot)
63
+ continue;
64
+ if (!fs.existsSync(e.projectRoot) || !(0, directory_1.isInitialized)(e.projectRoot))
65
+ continue;
66
+ candidates.push({ decoded: e.projectRoot, lastTouched: Date.parse(e.recordedAt) || 0 });
67
+ }
68
+ }
69
+ catch { /* the record is advisory */ }
70
+ for (const target of (0, registry_1.allTargets)()) {
71
+ let found = [];
72
+ try {
73
+ found = target.recentProjects?.(os.homedir()) ?? [];
74
+ }
75
+ catch { /* one agent's files never block another's */ }
76
+ for (const { root, lastTouched } of found) {
77
+ try {
78
+ if (!fs.statSync(root).isDirectory())
79
+ continue;
80
+ }
81
+ catch {
82
+ continue;
83
+ }
84
+ if (!(0, directory_1.isInitialized)(root))
85
+ continue;
86
+ candidates.push({ decoded: root, lastTouched });
87
+ }
88
+ }
89
+ candidates.sort((a, b) => b.lastTouched - a.lastTouched);
90
+ return candidates[0]?.decoded ?? null;
91
+ }
92
+ //# sourceMappingURL=recent-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recent-project.js","sourceRoot":"","sources":["../../src/agents/recent-project.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBH,oEAuBC;AAtCD,uCAAyB;AACzB,uCAAyB;AACzB,4CAA6C;AAC7C,4DAA2D;AAC3D,4DAA4D;AAE5D;;;;;;;;GAQG;AACI,KAAK,UAAU,4BAA4B;IAEhD,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,IAAA,8BAAe,GAAE,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,WAAW;gBAAE,SAAS;YACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAA,yBAAa,EAAC,CAAC,CAAC,WAAW,CAAC;gBAAE,SAAS;YAC7E,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;IACxC,KAAK,MAAM,MAAM,IAAI,IAAA,qBAAU,GAAE,EAAE,CAAC;QAClC,IAAI,KAAK,GAAiD,EAAE,CAAC;QAC7D,IAAI,CAAC;YAAC,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,6CAA6C,CAAC,CAAC;QACpH,KAAK,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;oBAAE,SAAS;YACjD,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS;YAAC,CAAC;YACrB,IAAI,CAAC,IAAA,yBAAa,EAAC,IAAI,CAAC;gBAAE,SAAS;YACnC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;IACzD,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;AACxC,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface CanonicalToolNames {
2
+ read: string;
3
+ write: string;
4
+ edit: string;
5
+ multiEdit: string;
6
+ notebookEdit: string;
7
+ bash: string;
8
+ grep: string;
9
+ glob: string;
10
+ }
11
+ /** Shared built-in tool names, keyed by role. */
12
+ export declare const CANONICAL_TOOLS: Readonly<CanonicalToolNames>;
13
+ /** Shared name of an MCP tool: `<prefix><server><separator><tool>`. */
14
+ export declare function canonicalMcpToolName(server: string, tool: string): string;
15
+ /** Prefix every shared SpecShip MCP tool name starts with. */
16
+ export declare const specshipToolPrefix: string;
17
+ /** Prefix every shared MCP tool name starts with (any server). */
18
+ export declare const MCP_TOOL_PREFIX: string;
19
+ /** Tools that change a file. */
20
+ export declare const FILE_WRITE_TOOLS: readonly string[];
21
+ /** `'A','B'` — a SQL IN-list of tool names (the names are fixed identifiers, never user input). */
22
+ export declare function sqlToolList(names: readonly string[]): string;
23
+ //# sourceMappingURL=canonical-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-tools.d.ts","sourceRoot":"","sources":["../../src/analytics/canonical-tools.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iDAAiD;AACjD,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,kBAAkB,CAAoC,CAAC;AAE9F,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,EAAE,MAAsD,CAAC;AAExF,kEAAkE;AAClE,eAAO,MAAM,eAAe,EAAE,MAAuB,CAAC;AAEtD,gCAAgC;AAChC,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAAkD,CAAC;AAEjG,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FILE_WRITE_TOOLS = exports.MCP_TOOL_PREFIX = exports.specshipToolPrefix = exports.CANONICAL_TOOLS = void 0;
7
+ exports.canonicalMcpToolName = canonicalMcpToolName;
8
+ exports.sqlToolList = sqlToolList;
9
+ /**
10
+ * The shared tool-name set (REQ-AGENTSWITCH-004).
11
+ *
12
+ * Every transcript adapter maps its agent's tool names onto these before
13
+ * anything counts them, so analytics, reflect mining and the explore "prior
14
+ * work" section never name one agent's tools. The values live in
15
+ * `canonical-tools.json` — the single source the dashboard server reads too
16
+ * (`server/src/canonical-tools.ts`), since the server can neither compile
17
+ * against `src/` nor runtime-import the core package.
18
+ */
19
+ const canonical_tools_json_1 = __importDefault(require("./canonical-tools.json"));
20
+ /** Shared built-in tool names, keyed by role. */
21
+ exports.CANONICAL_TOOLS = Object.freeze({ ...canonical_tools_json_1.default.tools });
22
+ /** Shared name of an MCP tool: `<prefix><server><separator><tool>`. */
23
+ function canonicalMcpToolName(server, tool) {
24
+ return `${canonical_tools_json_1.default.mcpPrefix}${server}${canonical_tools_json_1.default.mcpSeparator}${tool}`;
25
+ }
26
+ /** Prefix every shared SpecShip MCP tool name starts with. */
27
+ exports.specshipToolPrefix = canonicalMcpToolName(canonical_tools_json_1.default.specshipServer, '');
28
+ /** Prefix every shared MCP tool name starts with (any server). */
29
+ exports.MCP_TOOL_PREFIX = canonical_tools_json_1.default.mcpPrefix;
30
+ /** Tools that change a file. */
31
+ exports.FILE_WRITE_TOOLS = [exports.CANONICAL_TOOLS.edit, exports.CANONICAL_TOOLS.write];
32
+ /** `'A','B'` — a SQL IN-list of tool names (the names are fixed identifiers, never user input). */
33
+ function sqlToolList(names) {
34
+ return names.map((n) => `'${n.replace(/'/g, "''")}'`).join(',');
35
+ }
36
+ //# sourceMappingURL=canonical-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-tools.js","sourceRoot":"","sources":["../../src/analytics/canonical-tools.ts"],"names":[],"mappings":";;;;;;AA2BA,oDAEC;AAYD,kCAEC;AA3CD;;;;;;;;;GASG;AACH,kFAA0C;AAa1C,iDAAiD;AACpC,QAAA,eAAe,GAAiC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,8BAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAE9F,uEAAuE;AACvE,SAAgB,oBAAoB,CAAC,MAAc,EAAE,IAAY;IAC/D,OAAO,GAAG,8BAAI,CAAC,SAAS,GAAG,MAAM,GAAG,8BAAI,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC;AACjE,CAAC;AAED,8DAA8D;AACjD,QAAA,kBAAkB,GAAW,oBAAoB,CAAC,8BAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAExF,kEAAkE;AACrD,QAAA,eAAe,GAAW,8BAAI,CAAC,SAAS,CAAC;AAEtD,gCAAgC;AACnB,QAAA,gBAAgB,GAAsB,CAAC,uBAAe,CAAC,IAAI,EAAE,uBAAe,CAAC,KAAK,CAAC,CAAC;AAEjG,mGAAmG;AACnG,SAAgB,WAAW,CAAC,KAAwB;IAClD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,16 @@
1
+ {
2
+ "$comment": "The shared tool-name set every transcript adapter normalises to (REQ-AGENTSWITCH-004). One file, read by src/analytics/canonical-tools.ts and by server/src/canonical-tools.ts — never copy these values. The strings equal what claude_tool_calls.tool_name already stores, so existing rows need no migration.",
3
+ "mcpPrefix": "mcp__",
4
+ "mcpSeparator": "__",
5
+ "specshipServer": "specship",
6
+ "tools": {
7
+ "read": "Read",
8
+ "write": "Write",
9
+ "edit": "Edit",
10
+ "multiEdit": "MultiEdit",
11
+ "notebookEdit": "NotebookEdit",
12
+ "bash": "Bash",
13
+ "grep": "Grep",
14
+ "glob": "Glob"
15
+ }
16
+ }
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Pure classifiers and symbol-extraction helpers for SpecShip Token Impact.
3
3
  *
4
- * No I/O, no DB, no imports beyond types. Intended to be imported by the
5
- * ingestor (Task 4) and the aggregation endpoint (later tasks).
4
+ * No I/O, no DB. Tool names reaching these functions are already in the
5
+ * shared set (REQ-AGENTSWITCH-004): each transcript adapter normalises its
6
+ * agent's names before anything is classified or counted.
6
7
  */
7
8
  /**
8
9
  * Returns true iff `name` is routed through the SpecShip MCP server
@@ -1 +1 @@
1
- {"version":3,"file":"specship-impact.d.ts","sourceRoot":"","sources":["../../src/analytics/specship-impact.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,MAAM,EAAE,CA+BV;AAMD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;QACzC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACxC,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EACtF,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB;IAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA0C5G"}
1
+ {"version":3,"file":"specship-impact.d.ts","sourceRoot":"","sources":["../../src/analytics/specship-impact.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,MAAM,EAAE,CA+BV;AAMD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG;QACzC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACxC,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EACtF,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB;IAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA0C5G"}
@@ -2,19 +2,21 @@
2
2
  /**
3
3
  * Pure classifiers and symbol-extraction helpers for SpecShip Token Impact.
4
4
  *
5
- * No I/O, no DB, no imports beyond types. Intended to be imported by the
6
- * ingestor (Task 4) and the aggregation endpoint (later tasks).
5
+ * No I/O, no DB. Tool names reaching these functions are already in the
6
+ * shared set (REQ-AGENTSWITCH-004): each transcript adapter normalises its
7
+ * agent's names before anything is classified or counted.
7
8
  */
8
9
  Object.defineProperty(exports, "__esModule", { value: true });
9
10
  exports.isSpecshipTool = isSpecshipTool;
10
11
  exports.isSourceReturningTool = isSourceReturningTool;
11
12
  exports.extractRequestedSymbols = extractRequestedSymbols;
12
13
  exports.classifyToolCall = classifyToolCall;
14
+ const canonical_tools_1 = require("./canonical-tools");
13
15
  // ---------------------------------------------------------------------------
14
16
  // Constants
15
17
  // ---------------------------------------------------------------------------
16
- /** Prefix shared by every MCP tool routed through the specship server. */
17
- const MCP_SPECSHIP_PREFIX = 'mcp__specship__';
18
+ /** Prefix shared by every (normalised) MCP tool routed through the specship server. */
19
+ const MCP_SPECSHIP_PREFIX = canonical_tools_1.specshipToolPrefix;
18
20
  /**
19
21
  * Strip-prefix base names of SpecShip tools that return code-graph source.
20
22
  * These are the tools a SpecShip call can displace a native Read/Grep with.
@@ -1 +1 @@
1
- {"version":3,"file":"specship-impact.js","sourceRoot":"","sources":["../../src/analytics/specship-impact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specship-impact.js","sourceRoot":"","sources":["../../src/analytics/specship-impact.ts"],"names":[],"mappings":"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"}