@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.
- package/bin/specship +1 -1
- package/lib/dist/.claude-plugin/plugin.json +15 -3
- package/lib/dist/activation/cheatsheet.d.ts +10 -7
- package/lib/dist/activation/cheatsheet.d.ts.map +1 -1
- package/lib/dist/activation/cheatsheet.js +21 -5
- package/lib/dist/activation/cheatsheet.js.map +1 -1
- package/lib/dist/activation/hook-output.d.ts +75 -2
- package/lib/dist/activation/hook-output.d.ts.map +1 -1
- package/lib/dist/activation/hook-output.js +114 -3
- package/lib/dist/activation/hook-output.js.map +1 -1
- package/lib/dist/activation/search-intercept.d.ts +20 -7
- package/lib/dist/activation/search-intercept.d.ts.map +1 -1
- package/lib/dist/activation/search-intercept.js +27 -5
- package/lib/dist/activation/search-intercept.js.map +1 -1
- package/lib/dist/activation/steering.d.ts +7 -4
- package/lib/dist/activation/steering.d.ts.map +1 -1
- package/lib/dist/activation/steering.js +10 -8
- package/lib/dist/activation/steering.js.map +1 -1
- package/lib/dist/agents/detect.d.ts +32 -0
- package/lib/dist/agents/detect.d.ts.map +1 -0
- package/lib/dist/agents/detect.js +54 -0
- package/lib/dist/agents/detect.js.map +1 -0
- package/lib/dist/agents/recent-project.d.ts +18 -0
- package/lib/dist/agents/recent-project.d.ts.map +1 -0
- package/lib/dist/agents/recent-project.js +92 -0
- package/lib/dist/agents/recent-project.js.map +1 -0
- package/lib/dist/analytics/canonical-tools.d.ts +23 -0
- package/lib/dist/analytics/canonical-tools.d.ts.map +1 -0
- package/lib/dist/analytics/canonical-tools.js +36 -0
- package/lib/dist/analytics/canonical-tools.js.map +1 -0
- package/lib/dist/analytics/canonical-tools.json +16 -0
- package/lib/dist/analytics/specship-impact.d.ts +3 -2
- package/lib/dist/analytics/specship-impact.d.ts.map +1 -1
- package/lib/dist/analytics/specship-impact.js +6 -4
- package/lib/dist/analytics/specship-impact.js.map +1 -1
- package/lib/dist/bin/specship.js +215 -170
- package/lib/dist/bin/specship.js.map +1 -1
- package/lib/dist/bin/uninstall.js +2 -2
- package/lib/dist/bin/uninstall.js.map +1 -1
- package/lib/dist/claudemd/audit.d.ts +12 -3
- package/lib/dist/claudemd/audit.d.ts.map +1 -1
- package/lib/dist/claudemd/audit.js +65 -22
- package/lib/dist/claudemd/audit.js.map +1 -1
- package/lib/dist/commands/specship/spec.md +9 -0
- package/lib/dist/db/migrations.d.ts +1 -1
- package/lib/dist/db/migrations.d.ts.map +1 -1
- package/lib/dist/db/migrations.js +18 -4
- package/lib/dist/db/migrations.js.map +1 -1
- package/lib/dist/db/schema.sql +8 -0
- package/lib/dist/db/spec-queries.d.ts +13 -1
- package/lib/dist/db/spec-queries.d.ts.map +1 -1
- package/lib/dist/db/spec-queries.js +21 -0
- package/lib/dist/db/spec-queries.js.map +1 -1
- package/lib/dist/enforce/changed-files.d.ts +7 -0
- package/lib/dist/enforce/changed-files.d.ts.map +1 -1
- package/lib/dist/enforce/changed-files.js +17 -0
- package/lib/dist/enforce/changed-files.js.map +1 -1
- package/lib/dist/enforce/enforce.d.ts +35 -1
- package/lib/dist/enforce/enforce.d.ts.map +1 -1
- package/lib/dist/enforce/enforce.js +66 -2
- package/lib/dist/enforce/enforce.js.map +1 -1
- package/lib/dist/extraction/index.d.ts +50 -4
- package/lib/dist/extraction/index.d.ts.map +1 -1
- package/lib/dist/extraction/index.js +105 -13
- package/lib/dist/extraction/index.js.map +1 -1
- package/lib/dist/extraction/parse-warnings.d.ts +16 -0
- package/lib/dist/extraction/parse-warnings.d.ts.map +1 -0
- package/lib/dist/extraction/parse-warnings.js +30 -0
- package/lib/dist/extraction/parse-warnings.js.map +1 -0
- package/lib/dist/extraction/tree-sitter.d.ts +27 -0
- package/lib/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/lib/dist/extraction/tree-sitter.js +168 -1
- package/lib/dist/extraction/tree-sitter.js.map +1 -1
- package/lib/dist/health/smoke-check.js +1 -1
- package/lib/dist/health/smoke-check.js.map +1 -1
- package/lib/dist/hooks/hooks.json +16 -1
- package/lib/dist/index.d.ts +63 -3
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +235 -9
- package/lib/dist/index.js.map +1 -1
- package/lib/dist/installer/agent-record.d.ts +80 -0
- package/lib/dist/installer/agent-record.d.ts.map +1 -0
- package/lib/dist/installer/agent-record.js +351 -0
- package/lib/dist/installer/agent-record.js.map +1 -0
- package/lib/dist/installer/auto-migrate.d.ts +56 -0
- package/lib/dist/installer/auto-migrate.d.ts.map +1 -0
- package/lib/dist/installer/auto-migrate.js +328 -0
- package/lib/dist/installer/auto-migrate.js.map +1 -0
- package/lib/dist/installer/index.d.ts +37 -8
- package/lib/dist/installer/index.d.ts.map +1 -1
- package/lib/dist/installer/index.js +156 -46
- package/lib/dist/installer/index.js.map +1 -1
- package/lib/dist/installer/install-defaults.d.ts +4 -3
- package/lib/dist/installer/install-defaults.d.ts.map +1 -1
- package/lib/dist/installer/install-defaults.js +6 -5
- package/lib/dist/installer/install-defaults.js.map +1 -1
- package/lib/dist/installer/{config-writer.d.ts → targets/claude-config-writer.d.ts} +1 -1
- package/lib/dist/installer/targets/claude-config-writer.d.ts.map +1 -0
- package/lib/dist/installer/{config-writer.js → targets/claude-config-writer.js} +7 -6
- package/lib/dist/installer/targets/claude-config-writer.js.map +1 -0
- package/lib/dist/installer/targets/claude-projects.d.ts +9 -0
- package/lib/dist/installer/targets/claude-projects.d.ts.map +1 -0
- package/lib/dist/installer/targets/claude-projects.js +151 -0
- package/lib/dist/installer/targets/claude-projects.js.map +1 -0
- package/lib/dist/installer/targets/claude.d.ts +28 -1
- package/lib/dist/installer/targets/claude.d.ts.map +1 -1
- package/lib/dist/installer/targets/claude.js +39 -20
- package/lib/dist/installer/targets/claude.js.map +1 -1
- package/lib/dist/installer/targets/feature-parity.d.ts +28 -0
- package/lib/dist/installer/targets/feature-parity.d.ts.map +1 -0
- package/lib/dist/installer/targets/feature-parity.js +32 -0
- package/lib/dist/installer/targets/feature-parity.js.map +1 -0
- package/lib/dist/installer/{gemini-commands.d.ts → targets/gemini-commands.d.ts} +7 -3
- package/lib/dist/installer/targets/gemini-commands.d.ts.map +1 -0
- package/lib/dist/installer/{gemini-commands.js → targets/gemini-commands.js} +35 -14
- package/lib/dist/installer/targets/gemini-commands.js.map +1 -0
- package/lib/dist/installer/targets/gemini-projects.d.ts +11 -0
- package/lib/dist/installer/targets/gemini-projects.d.ts.map +1 -0
- package/lib/dist/installer/targets/gemini-projects.js +84 -0
- package/lib/dist/installer/targets/gemini-projects.js.map +1 -0
- package/lib/dist/installer/targets/gemini.d.ts +94 -8
- package/lib/dist/installer/targets/gemini.d.ts.map +1 -1
- package/lib/dist/installer/targets/gemini.js +392 -33
- package/lib/dist/installer/targets/gemini.js.map +1 -1
- package/lib/dist/installer/targets/registry.d.ts +8 -1
- package/lib/dist/installer/targets/registry.d.ts.map +1 -1
- package/lib/dist/installer/targets/registry.js +14 -5
- package/lib/dist/installer/targets/registry.js.map +1 -1
- package/lib/dist/installer/targets/shared.d.ts +44 -1
- package/lib/dist/installer/targets/shared.d.ts.map +1 -1
- package/lib/dist/installer/targets/shared.js +130 -3
- package/lib/dist/installer/targets/shared.js.map +1 -1
- package/lib/dist/installer/targets/types.d.ts +23 -1
- package/lib/dist/installer/targets/types.d.ts.map +1 -1
- package/lib/dist/jira/auto-publish.d.ts +22 -2
- package/lib/dist/jira/auto-publish.d.ts.map +1 -1
- package/lib/dist/jira/auto-publish.js +54 -9
- package/lib/dist/jira/auto-publish.js.map +1 -1
- package/lib/dist/jira/board-first.d.ts +15 -2
- package/lib/dist/jira/board-first.d.ts.map +1 -1
- package/lib/dist/jira/board-first.js +16 -0
- package/lib/dist/jira/board-first.js.map +1 -1
- package/lib/dist/jira/ci-publish.d.ts +72 -0
- package/lib/dist/jira/ci-publish.d.ts.map +1 -0
- package/lib/dist/jira/ci-publish.js +162 -0
- package/lib/dist/jira/ci-publish.js.map +1 -0
- package/lib/dist/jira/publish.d.ts +23 -0
- package/lib/dist/jira/publish.d.ts.map +1 -1
- package/lib/dist/jira/publish.js +0 -0
- package/lib/dist/jira/publish.js.map +1 -1
- package/lib/dist/jira/regression-pack.d.ts.map +1 -1
- package/lib/dist/jira/regression-pack.js +7 -1
- package/lib/dist/jira/regression-pack.js.map +1 -1
- package/lib/dist/jira/repo-config.d.ts.map +1 -1
- package/lib/dist/jira/repo-config.js +8 -0
- package/lib/dist/jira/repo-config.js.map +1 -1
- package/lib/dist/jira/types.d.ts +8 -0
- package/lib/dist/jira/types.d.ts.map +1 -1
- package/lib/dist/jira/types.js.map +1 -1
- package/lib/dist/knowledge/enforce.d.ts.map +1 -1
- package/lib/dist/knowledge/enforce.js +6 -1
- package/lib/dist/knowledge/enforce.js.map +1 -1
- package/lib/dist/mcp/jira-tools.d.ts +5 -0
- package/lib/dist/mcp/jira-tools.d.ts.map +1 -1
- package/lib/dist/mcp/jira-tools.js +59 -4
- package/lib/dist/mcp/jira-tools.js.map +1 -1
- package/lib/dist/mcp/proxy.d.ts.map +1 -1
- package/lib/dist/mcp/proxy.js +2 -1
- package/lib/dist/mcp/proxy.js.map +1 -1
- package/lib/dist/mcp/server-instructions.d.ts +16 -10
- package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
- package/lib/dist/mcp/server-instructions.js +69 -20
- package/lib/dist/mcp/server-instructions.js.map +1 -1
- package/lib/dist/mcp/session.d.ts +11 -0
- package/lib/dist/mcp/session.d.ts.map +1 -1
- package/lib/dist/mcp/session.js +43 -1
- package/lib/dist/mcp/session.js.map +1 -1
- package/lib/dist/mcp/tools.d.ts.map +1 -1
- package/lib/dist/mcp/tools.js +8 -0
- package/lib/dist/mcp/tools.js.map +1 -1
- package/lib/dist/reflect/apply.d.ts +2 -2
- package/lib/dist/reflect/apply.d.ts.map +1 -1
- package/lib/dist/reflect/apply.js +6 -5
- package/lib/dist/reflect/apply.js.map +1 -1
- package/lib/dist/reflect/miner.d.ts.map +1 -1
- package/lib/dist/reflect/miner.js +28 -15
- package/lib/dist/reflect/miner.js.map +1 -1
- package/lib/dist/reflect/session-outcomes.d.ts.map +1 -1
- package/lib/dist/reflect/session-outcomes.js +8 -3
- package/lib/dist/reflect/session-outcomes.js.map +1 -1
- package/lib/dist/reflect/targets.d.ts.map +1 -1
- package/lib/dist/reflect/targets.js +25 -5
- package/lib/dist/reflect/targets.js.map +1 -1
- package/lib/dist/reflect/types.d.ts +7 -0
- package/lib/dist/reflect/types.d.ts.map +1 -1
- package/lib/dist/resolution/spec-link-resolver.d.ts +14 -2
- package/lib/dist/resolution/spec-link-resolver.d.ts.map +1 -1
- package/lib/dist/resolution/spec-link-resolver.js +13 -3
- package/lib/dist/resolution/spec-link-resolver.js.map +1 -1
- package/lib/dist/server/canonical-tools.js +50 -0
- package/lib/dist/server/cli.js +2 -2
- package/lib/dist/server/host-profiles.js +39 -0
- package/lib/dist/server/ingest/index.js +2 -1
- package/lib/dist/server/ingest/ingestor.js +195 -76
- package/lib/dist/server/ingest/project-paths.js +8 -2
- package/lib/dist/server/ingest/recorded-projects.js +43 -0
- package/lib/dist/server/ingest/specship-classify.js +7 -2
- package/lib/dist/server/ingest/transcripts/claude-jsonl.js +54 -0
- package/lib/dist/server/ingest/transcripts/claude.js +64 -0
- package/lib/dist/server/ingest/transcripts/gemini.js +469 -0
- package/lib/dist/server/ingest/transcripts/index.js +14 -0
- package/lib/dist/server/ingest/{parser.js → transcripts/shared.js} +3 -49
- package/lib/dist/server/ingest/transcripts/types.js +4 -0
- package/lib/dist/server/ingest/watcher.js +31 -30
- package/lib/dist/server/routes/claude.js +27 -10
- package/lib/dist/server/routes/graph.js +64 -3
- package/lib/dist/server/routes/mcp.js +57 -15
- package/lib/dist/server/routes/memory.js +54 -35
- package/lib/dist/server/routes/projects.js +78 -7
- package/lib/dist/server/routes/spec.js +125 -0
- package/lib/dist/server/server.js +8 -2
- package/lib/dist/skills/spec-author/SKILL.md +1 -1
- package/lib/dist/skills/spec-author/references/gap-questions.md +1 -1
- package/lib/dist/spec-lint/lint.d.ts +26 -1
- package/lib/dist/spec-lint/lint.d.ts.map +1 -1
- package/lib/dist/spec-lint/lint.js +96 -7
- package/lib/dist/spec-lint/lint.js.map +1 -1
- package/lib/dist/sync/worktree.d.ts +48 -0
- package/lib/dist/sync/worktree.d.ts.map +1 -1
- package/lib/dist/sync/worktree.js +109 -0
- package/lib/dist/sync/worktree.js.map +1 -1
- package/lib/dist/ui/assets/bricolage-latin-C23fTOVi.woff2 +0 -0
- package/lib/dist/ui/assets/bricolage-latin-ext-B82pxkPf.woff2 +0 -0
- package/lib/dist/ui/assets/index-54vorjyq.css +1 -0
- package/lib/dist/ui/assets/index-BZQonCVb.js +52 -0
- package/lib/dist/ui/assets/space-grotesk-latin-DPT1xrvW.woff2 +0 -0
- package/lib/dist/ui/assets/space-grotesk-latin-ext-wJGaI8U0.woff2 +0 -0
- package/lib/dist/ui/index.html +2 -2
- package/lib/dist/update/updater.d.ts +6 -0
- package/lib/dist/update/updater.d.ts.map +1 -1
- package/lib/dist/update/updater.js +13 -1
- package/lib/dist/update/updater.js.map +1 -1
- package/lib/dist/workflows/agents/claude.d.ts +9 -0
- package/lib/dist/workflows/agents/claude.d.ts.map +1 -1
- package/lib/dist/workflows/agents/claude.js +22 -3
- package/lib/dist/workflows/agents/claude.js.map +1 -1
- package/lib/dist/workflows/agents/gemini-version.d.ts +18 -0
- package/lib/dist/workflows/agents/gemini-version.d.ts.map +1 -0
- package/lib/dist/workflows/agents/gemini-version.js +81 -0
- package/lib/dist/workflows/agents/gemini-version.js.map +1 -0
- package/lib/dist/workflows/agents/gemini.d.ts +1 -1
- package/lib/dist/workflows/agents/gemini.d.ts.map +1 -1
- package/lib/dist/workflows/agents/gemini.js +12 -2
- package/lib/dist/workflows/agents/gemini.js.map +1 -1
- package/lib/dist/workflows/agents/index.d.ts +2 -0
- package/lib/dist/workflows/agents/index.d.ts.map +1 -1
- package/lib/dist/workflows/agents/index.js +5 -0
- package/lib/dist/workflows/agents/index.js.map +1 -1
- package/lib/dist/workflows/agents/types.d.ts +13 -0
- package/lib/dist/workflows/agents/types.d.ts.map +1 -1
- package/lib/dist/workflows/agents/types.js.map +1 -1
- package/lib/dist/workflows/condition-evaluator.d.ts +8 -0
- package/lib/dist/workflows/condition-evaluator.d.ts.map +1 -1
- package/lib/dist/workflows/condition-evaluator.js +7 -0
- package/lib/dist/workflows/condition-evaluator.js.map +1 -1
- package/lib/dist/workflows/defaults/claude-design-implement.yaml +11 -11
- package/lib/dist/workflows/defaults/spec-author.yaml +9 -9
- package/lib/dist/workflows/defaults/spec-fix.yaml +8 -8
- package/lib/dist/workflows/defaults/spec-implement.yaml +38 -23
- package/lib/dist/workflows/defaults/spec-relink.yaml +5 -5
- package/lib/dist/workflows/defaults/spec-verify.yaml +3 -3
- package/lib/dist/workflows/executor.d.ts +7 -0
- package/lib/dist/workflows/executor.d.ts.map +1 -1
- package/lib/dist/workflows/executor.js +22 -5
- package/lib/dist/workflows/executor.js.map +1 -1
- package/lib/node_modules/.package-lock.json +1 -1
- package/lib/package.json +3 -2
- package/package.json +1 -1
- package/lib/dist/installer/config-writer.d.ts.map +0 -1
- package/lib/dist/installer/config-writer.js.map +0 -1
- package/lib/dist/installer/gemini-commands.d.ts.map +0 -1
- package/lib/dist/installer/gemini-commands.js.map +0 -1
- package/lib/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/lib/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/lib/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/lib/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/lib/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/lib/dist/ui/assets/index-BzuUWUAE.js +0 -50
- package/lib/dist/ui/assets/index-ezwX2EfG.css +0 -1
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
* module is that channel, shipped as an installer-written `UserPromptSubmit`
|
|
11
11
|
* hook (REQ-STEER-001) whose command is `specship steer-nudge`.
|
|
12
12
|
*/
|
|
13
|
+
import { type HostTraits } from './hook-output';
|
|
13
14
|
/**
|
|
14
15
|
* Render a steering template with the calling host's tool-name form
|
|
15
16
|
* (AGENTADAPT-DOC, REQ-AGENTADAPT-001): Claude Code calls the tool
|
|
16
17
|
* `mcp__specship__specship_explore`, Gemini CLI calls it `specship_explore`.
|
|
17
|
-
* The
|
|
18
|
+
* The profile comes from the hook adapter — this module never names a host,
|
|
19
|
+
* and the profile is a required argument (REQ-AGENTSWITCH-001.A3).
|
|
18
20
|
*/
|
|
19
|
-
export declare function renderSteering(template: string,
|
|
21
|
+
export declare function renderSteering(template: string, traits: HostTraits): string;
|
|
20
22
|
/** The standard line as Claude Code (the legacy default host) receives it. */
|
|
21
23
|
export declare const STEERING_TEXT: string;
|
|
22
24
|
/** The lite line as Claude Code (the legacy default host) receives it. */
|
|
@@ -27,7 +29,8 @@ export declare const STEERING_TEXT_LITE: string;
|
|
|
27
29
|
* user opted out via `SPECSHIP_NO_STEERING=1`. Uninitialized projects and
|
|
28
30
|
* opted-out users get zero prompt noise. Tier-aware (REQ-LOWMODEL-002):
|
|
29
31
|
* lite-tier sessions get the prescriptive template; standard and frontier keep
|
|
30
|
-
* the standard line.
|
|
32
|
+
* the standard line. `traits` is the calling host's profile and is required
|
|
33
|
+
* (REQ-AGENTSWITCH-001.A3) — callers with no host pass `DEFAULT_HOST_TRAITS`.
|
|
31
34
|
*/
|
|
32
|
-
export declare function buildSteeringNudge(cwd: string, env?: NodeJS.ProcessEnv, homedir?: string
|
|
35
|
+
export declare function buildSteeringNudge(cwd: string, traits: HostTraits, env?: NodeJS.ProcessEnv, homedir?: string): string | null;
|
|
33
36
|
//# sourceMappingURL=steering.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steering.d.ts","sourceRoot":"","sources":["../../src/activation/steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
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
|
|
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,
|
|
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.
|
|
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.
|
|
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
|
|
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,
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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
|
|
5
|
-
*
|
|
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
|
|
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
|
|
6
|
-
*
|
|
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 =
|
|
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":";AAAA
|
|
1
|
+
{"version":3,"file":"specship-impact.js","sourceRoot":"","sources":["../../src/analytics/specship-impact.ts"],"names":[],"mappings":"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"}
|