@specship/specship-darwin-arm64 0.28.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +252 -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 +16 -1
- 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/design-md/check.d.ts +51 -0
- package/lib/dist/design-md/check.d.ts.map +1 -0
- package/lib/dist/design-md/check.js +335 -0
- package/lib/dist/design-md/check.js.map +1 -0
- package/lib/dist/design-md/css.d.ts +40 -0
- package/lib/dist/design-md/css.d.ts.map +1 -0
- package/lib/dist/design-md/css.js +224 -0
- package/lib/dist/design-md/css.js.map +1 -0
- package/lib/dist/design-md/extract.d.ts +84 -0
- package/lib/dist/design-md/extract.d.ts.map +1 -0
- package/lib/dist/design-md/extract.js +595 -0
- package/lib/dist/design-md/extract.js.map +1 -0
- package/lib/dist/design-md/maintain.d.ts +45 -0
- package/lib/dist/design-md/maintain.d.ts.map +1 -0
- package/lib/dist/design-md/maintain.js +127 -0
- package/lib/dist/design-md/maintain.js.map +1 -0
- package/lib/dist/design-md/render.d.ts +28 -0
- package/lib/dist/design-md/render.d.ts.map +1 -0
- package/lib/dist/design-md/render.js +178 -0
- package/lib/dist/design-md/render.js.map +1 -0
- package/lib/dist/design-md/upkeep.d.ts +48 -0
- package/lib/dist/design-md/upkeep.d.ts.map +1 -0
- package/lib/dist/design-md/upkeep.js +169 -0
- package/lib/dist/design-md/upkeep.js.map +1 -0
- package/lib/dist/design-md/verify.d.ts +65 -0
- package/lib/dist/design-md/verify.d.ts.map +1 -0
- package/lib/dist/design-md/verify.js +311 -0
- package/lib/dist/design-md/verify.js.map +1 -0
- 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 +29 -2
- package/lib/dist/installer/targets/claude.d.ts.map +1 -1
- package/lib/dist/installer/targets/claude.js +44 -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} +37 -9
- 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/design-md/SKILL.md +172 -0
- package/lib/dist/skills/design-md/references/authored-sections.md +90 -0
- package/lib/dist/skills/design-md/references/sources.md +71 -0
- 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/spec-quality/postcheck.d.ts +7 -1
- package/lib/dist/spec-quality/postcheck.d.ts.map +1 -1
- package/lib/dist/spec-quality/postcheck.js +31 -0
- package/lib/dist/spec-quality/postcheck.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 +44 -15
- 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 +54 -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
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LITE_SERVER_INSTRUCTIONS = exports.SERVER_INSTRUCTIONS = void 0;
|
|
4
4
|
exports.serverInstructionsFor = serverInstructionsFor;
|
|
5
|
+
exports.renderServerInstructions = renderServerInstructions;
|
|
5
6
|
exports.resolveServerInstructions = resolveServerInstructions;
|
|
6
7
|
/**
|
|
7
8
|
* Server-level instructions emitted in the MCP `initialize` response.
|
|
@@ -26,12 +27,45 @@ exports.resolveServerInstructions = resolveServerInstructions;
|
|
|
26
27
|
*/
|
|
27
28
|
const directory_1 = require("../directory");
|
|
28
29
|
const model_context_1 = require("./model-context");
|
|
29
|
-
|
|
30
|
+
const hook_output_1 = require("../activation/hook-output");
|
|
31
|
+
const detect_1 = require("../agents/detect");
|
|
32
|
+
/** Today's wording — what the default host (and an unknown client) receives byte for byte. */
|
|
33
|
+
const LEGACY_VOCAB = {
|
|
34
|
+
hostNote: '',
|
|
35
|
+
rawTools: 'Read/Grep',
|
|
36
|
+
neverReadAFile: 'never Read a file',
|
|
37
|
+
readingTheSpecFile: 'Read-ing the spec file',
|
|
38
|
+
readThoseFiles: 'Read those specific files',
|
|
39
|
+
alreadyRead: 'Read',
|
|
40
|
+
sweepTools: 'Grep/Glob/Read',
|
|
41
|
+
dontSweep: "Don't Grep/Glob/Read",
|
|
42
|
+
readOnlyListed: 'Read only the files',
|
|
43
|
+
};
|
|
44
|
+
/** The phrasing for a non-default host, built from its profile's tool and file names. */
|
|
45
|
+
function vocabFor(traits) {
|
|
46
|
+
const tick = (n) => `\`${n}\``;
|
|
47
|
+
const read = tick(traits.readTools[0] ?? 'read');
|
|
48
|
+
const search = traits.searchTools.map(tick);
|
|
49
|
+
const sweep = [...search, read].join('/');
|
|
50
|
+
return {
|
|
51
|
+
hostNote: `\n\nSpecShip's project rules for ${traits.displayName} live in the SpecShip block of ` +
|
|
52
|
+
`${tick(traits.memoryFile)} — follow them alongside these instructions.`,
|
|
53
|
+
rawTools: [read, ...search].join('/'),
|
|
54
|
+
neverReadAFile: `never call ${read} on a file`,
|
|
55
|
+
readingTheSpecFile: `reading the spec file with ${read}`,
|
|
56
|
+
readThoseFiles: `read those specific files with ${read}`,
|
|
57
|
+
alreadyRead: 'read',
|
|
58
|
+
sweepTools: sweep,
|
|
59
|
+
dontSweep: `Don't call ${sweep}`,
|
|
60
|
+
readOnlyListed: `use ${read} on only the files`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const fullInstructions = (v) => `# Specship — code intelligence over an indexed knowledge graph
|
|
30
64
|
|
|
31
65
|
Specship is a SQLite knowledge graph of every symbol, edge, and file
|
|
32
66
|
in the workspace. Reads are sub-millisecond; the index lags writes by
|
|
33
67
|
about a second through the file watcher. Consult it BEFORE writing or
|
|
34
|
-
editing code, not during.
|
|
68
|
+
editing code, not during.${v.hostNote}
|
|
35
69
|
|
|
36
70
|
## Answer directly — don't delegate exploration
|
|
37
71
|
|
|
@@ -43,7 +77,7 @@ grouped by file, so it is Read-equivalent and most often the ONLY
|
|
|
43
77
|
specship call you need. Specship IS the pre-built search index — so
|
|
44
78
|
delegating the lookup to a separate file-reading sub-task/agent, or
|
|
45
79
|
running your own grep + read loop, repeats work specship already did and
|
|
46
|
-
costs more for the same answer. Reach for raw
|
|
80
|
+
costs more for the same answer. Reach for raw ${v.rawTools} only to confirm a
|
|
47
81
|
specific detail specship didn't cover. A direct specship answer is
|
|
48
82
|
typically one to a few calls; a grep/read exploration is dozens.
|
|
49
83
|
|
|
@@ -53,11 +87,11 @@ typically one to a few calls; a grep/read exploration is dozens.
|
|
|
53
87
|
- **"How does X reach/become Y? / the flow / the path from X to Y"** → \`specship_explore\`, naming the symbols that span the flow (e.g. \`mutateElement renderScene\`) — it surfaces the call path among them, including dynamic-dispatch hops (callbacks, React re-render, JSX children) grep can't follow
|
|
54
88
|
- **"What is the symbol named X?" (just its location)** → \`specship_search\`
|
|
55
89
|
- **"What calls this?" / "What does this call?" / "What would changing this break?"** → \`specship_callers\` / \`specship_callees\` / \`specship_impact\`
|
|
56
|
-
- **One specific symbol's full source (esp. a body \`specship_explore\` trimmed), or an OVERLOADED name** → \`specship_node\` (with \`includeCode\`): for an ambiguous name it returns EVERY matching definition's body in one call, so you
|
|
90
|
+
- **One specific symbol's full source (esp. a body \`specship_explore\` trimmed), or an OVERLOADED name** → \`specship_node\` (with \`includeCode\`): for an ambiguous name it returns EVERY matching definition's body in one call, so you ${v.neverReadAFile} to find the right overload
|
|
57
91
|
- **"What's in directory X?"** → \`specship_files\`
|
|
58
92
|
- **"Is the index ready / what's its size?" or "which SpecShip is running / what version am I on?"** → \`specship_status\` (one tool for both: index stats plus the serving process's version, install method, install dir, node and project root; works with no project open)
|
|
59
93
|
- **"Is this code healthy / does it violate our architecture rules?"** → \`specship_health\` (coupling + oversized symbols + god-files + cycles + dead-code candidates, and architecture-fitness violations; narrow with \`checks: ["maintainability"]\` or \`["fitness"]\`)
|
|
60
|
-
- **User mentions a spec ID or requirement (e.g. "REQ-AUTH-005", "the rate-limit requirement")** → \`specship_spec\` FIRST. Returns spec body + parent/siblings + linked code with state (verified / drifted / orphaned) — more than
|
|
94
|
+
- **User mentions a spec ID or requirement (e.g. "REQ-AUTH-005", "the rate-limit requirement")** → \`specship_spec\` FIRST. Returns spec body + parent/siblings + linked code with state (verified / drifted / orphaned) — more than ${v.readingTheSpecFile} alone. If domain facts (ubiquitous-language terms, business rules) are linked to the spec, they come back inline under "Domain facts" — no separate tool. Then jump into linked code via \`specship_node\`.
|
|
61
95
|
- **User describes a change without naming a spec (a bug, an error, a one-line enhancement) and you need to find which existing spec it belongs to** → \`specship_spec\` with a free-text \`query\`. Returns scored, ranked candidate specs (id, title, kind, snippet) over the spec index — use it to route the change to the right requirement before authoring a new doc. (No \`query\`/\`spec_id\` → the lifecycle funnel; add \`list: true\` for a flat inventory of every requirement's single rolled-up status + per-status totals, or \`ideas: true\` for the ideas review view — the idea-state briefs with age since capture + labels, closing with the promotion hand-off.)
|
|
62
96
|
- **Authoring end-to-end tests for a requirement** → \`specship_spec\` with \`spec_id\` + \`behaviour_surface: true\`. Returns the requirement's linked code plus the surrounding routes / components / handlers grouped into a UI tier (Playwright targets) and a backend/batch tier (API/job targets) — the flow map to write tests from.
|
|
63
97
|
- **After editing code in response to a spec** → call \`specship_link_assert\` before reporting done. Idempotent. Supersedes the \`// @implements REQ-X\` comment backstop (which the extractor catches on its own). The target is validated against the graph — an unresolvable \`file:symbol\` is refused with near-miss suggestions, so re-call it with a real target rather than assuming it recorded.
|
|
@@ -78,7 +112,7 @@ typically one to a few calls; a grep/read exploration is dozens.
|
|
|
78
112
|
- **Don't grep first** when looking up a symbol by name — \`specship_search\` is faster and returns kind + location + signature.
|
|
79
113
|
- **Don't chain \`specship_search\` + \`specship_node\`** to understand an area — ONE \`specship_explore\` returns the relevant symbols' source together in a single round-trip.
|
|
80
114
|
- **Don't loop \`specship_node\` over many symbols** — one \`specship_explore\` call returns them all grouped by file, while each separate call re-reads the whole context and costs far more. Use \`specship_node\` for a single symbol.
|
|
81
|
-
- **After editing, check the staleness banner.** When a tool response starts with "⚠️ Some files referenced below were edited since the last index sync…", the listed files are pending re-index —
|
|
115
|
+
- **After editing, check the staleness banner.** When a tool response starts with "⚠️ Some files referenced below were edited since the last index sync…", the listed files are pending re-index — ${v.readThoseFiles} for accurate content. Every file NOT in that banner is fresh, so still trust specship. \`specship_status\` also lists pending files under "Pending sync".
|
|
82
116
|
|
|
83
117
|
## JIRA integration
|
|
84
118
|
|
|
@@ -108,10 +142,10 @@ Any request about the user's JIRA issues/tasks/tickets goes to these tools by de
|
|
|
108
142
|
* tools that survive `applyLiteTierTrim`, and the anti-patterns that stop a
|
|
109
143
|
* grep fallback. No JIRA section, and no tool the lite menu trimmed away.
|
|
110
144
|
*/
|
|
111
|
-
|
|
145
|
+
const liteInstructions = (v) => `# Specship — the code index for this workspace
|
|
112
146
|
|
|
113
147
|
Specship is a pre-built index of every symbol, file, and call edge here.
|
|
114
|
-
Reads are instant; the index lags file writes by about a second.
|
|
148
|
+
Reads are instant; the index lags file writes by about a second.${v.hostNote}
|
|
115
149
|
|
|
116
150
|
## Rule 1 — explore first, answer yourself
|
|
117
151
|
|
|
@@ -119,9 +153,9 @@ Any question about how the code works, where something lives, how X reaches
|
|
|
119
153
|
Y, or what an area does: make ONE \`specship_explore\` call, then answer from
|
|
120
154
|
it. \`specship_explore\` takes a plain question or a list of symbol/file
|
|
121
155
|
names and returns the verbatim source of the matching symbols grouped by
|
|
122
|
-
file — it is Read-equivalent, so treat what it returns as already
|
|
156
|
+
file — it is Read-equivalent, so treat what it returns as already ${v.alreadyRead}.
|
|
123
157
|
Do NOT hand the lookup to a sub-agent or sub-task. Do NOT start a
|
|
124
|
-
|
|
158
|
+
${v.sweepTools} sweep. One call is usually the whole answer.
|
|
125
159
|
|
|
126
160
|
## Rule 2 — tools
|
|
127
161
|
|
|
@@ -134,29 +168,44 @@ Grep/Glob/Read sweep. One call is usually the whole answer.
|
|
|
134
168
|
|
|
135
169
|
## Rule 3 — anti-patterns
|
|
136
170
|
|
|
137
|
-
-
|
|
171
|
+
- ${v.dontSweep} to find code. Ask \`specship_explore\` instead.
|
|
138
172
|
- Don't re-run \`specship_explore\` for something a previous call already returned — re-read your earlier result.
|
|
139
173
|
- Don't verify a specship answer with grep. It comes from a full parse.
|
|
140
174
|
- Don't chain \`specship_search\` + \`specship_node\` to understand an area — one \`specship_explore\` covers it.
|
|
141
|
-
- If a response opens with a ⚠️ staleness banner,
|
|
175
|
+
- If a response opens with a ⚠️ staleness banner, ${v.readOnlyListed} it lists; everything else is fresh.
|
|
142
176
|
- If a tool says the project isn't initialized, offer to run \`specship init -i\`.
|
|
143
177
|
`;
|
|
178
|
+
/** The full instruction text the default host receives. */
|
|
179
|
+
exports.SERVER_INSTRUCTIONS = fullInstructions(LEGACY_VOCAB);
|
|
180
|
+
/** The compact (lite-tier) instruction text the default host receives. */
|
|
181
|
+
exports.LITE_SERVER_INSTRUCTIONS = liteInstructions(LEGACY_VOCAB);
|
|
144
182
|
/** Instruction text for a resolved tier (REQ-LOWEND-003.A3: non-lite is unchanged). */
|
|
145
183
|
function serverInstructionsFor(tier) {
|
|
146
184
|
return tier === 'lite' ? exports.LITE_SERVER_INSTRUCTIONS : exports.SERVER_INSTRUCTIONS;
|
|
147
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Instruction text for a tier and host profile (REQ-AGENTSWITCH-002). No
|
|
188
|
+
* profile, or the default host's, returns the shipped constants unchanged;
|
|
189
|
+
* any other host gets the same text naming its own read/search tools and
|
|
190
|
+
* memory file.
|
|
191
|
+
*/
|
|
192
|
+
function renderServerInstructions(tier, traits) {
|
|
193
|
+
if (!traits || traits.id === hook_output_1.DEFAULT_HOST_TRAITS.id)
|
|
194
|
+
return serverInstructionsFor(tier);
|
|
195
|
+
const vocab = vocabFor(traits);
|
|
196
|
+
return tier === 'lite' ? liteInstructions(vocab) : fullInstructions(vocab);
|
|
197
|
+
}
|
|
148
198
|
/**
|
|
149
199
|
* Resolve the instructions for a project-root hint, mirroring
|
|
150
200
|
* `applyLiteTierTrim`'s resolution exactly so the menu trim and the
|
|
151
201
|
* instruction trim always agree. Marker-file only — no DB open. A null or
|
|
152
|
-
* unresolvable hint gets the full text (never compact blind).
|
|
202
|
+
* unresolvable hint gets the full text (never compact blind). `agent` is the
|
|
203
|
+
* client detected at `initialize`; an unknown client gets today's text.
|
|
153
204
|
*/
|
|
154
|
-
function resolveServerInstructions(hint) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
return exports.SERVER_INSTRUCTIONS;
|
|
160
|
-
return serverInstructionsFor((0, model_context_1.detectModelTier)(root));
|
|
205
|
+
function resolveServerInstructions(hint, agent = detect_1.UNKNOWN_AGENT) {
|
|
206
|
+
const traits = agent === detect_1.UNKNOWN_AGENT ? undefined : (0, hook_output_1.hostTraitsFor)(agent);
|
|
207
|
+
const root = hint ? (0, directory_1.findNearestSpecShipRoot)(hint) : null;
|
|
208
|
+
const tier = root ? (0, model_context_1.detectModelTier)(root) : 'full';
|
|
209
|
+
return renderServerInstructions(tier, traits);
|
|
161
210
|
}
|
|
162
211
|
//# sourceMappingURL=server-instructions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-instructions.js","sourceRoot":"","sources":["../../src/mcp/server-instructions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"server-instructions.js","sourceRoot":"","sources":["../../src/mcp/server-instructions.ts"],"names":[],"mappings":";;;AA0MA,sDAEC;AAQD,4DAIC;AASD,8DAQC;AAzOD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,4CAAuD;AACvD,mDAAkE;AAClE,2DAAgG;AAChG,6CAAqE;AAoBrE,8FAA8F;AAC9F,MAAM,YAAY,GAAqB;IACrC,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,WAAW;IACrB,cAAc,EAAE,mBAAmB;IACnC,kBAAkB,EAAE,wBAAwB;IAC5C,cAAc,EAAE,2BAA2B;IAC3C,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,gBAAgB;IAC5B,SAAS,EAAE,sBAAsB;IACjC,cAAc,EAAE,qBAAqB;CACtC,CAAC;AAEF,yFAAyF;AACzF,SAAS,QAAQ,CAAC,MAAkB;IAClC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO;QACL,QAAQ,EACN,oCAAoC,MAAM,CAAC,WAAW,iCAAiC;YACvF,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,8CAA8C;QAC1E,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACrC,cAAc,EAAE,cAAc,IAAI,YAAY;QAC9C,kBAAkB,EAAE,8BAA8B,IAAI,EAAE;QACxD,cAAc,EAAE,kCAAkC,IAAI,EAAE;QACxD,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,cAAc,KAAK,EAAE;QAChC,cAAc,EAAE,OAAO,IAAI,oBAAoB;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,CAAmB,EAAU,EAAE,CAAC;;;;;2BAK/B,CAAC,CAAC,QAAQ;;;;;;;;;;;;gDAYW,CAAC,CAAC,QAAQ;;;;;;;;;;8OAUoL,CAAC,CAAC,cAAc;;;;uOAIvB,CAAC,CAAC,kBAAkB;;;;;;;;;;;;;;;;;;;;;qMAqBtD,CAAC,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;;;;CAuBpN,CAAC;AAEF;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAmB,EAAU,EAAE,CAAC;;;kEAGQ,CAAC,CAAC,QAAQ;;;;;;;;oEAQR,CAAC,CAAC,WAAW;;EAE/E,CAAC,CAAC,UAAU;;;;;;;;;;;;;IAaV,CAAC,CAAC,SAAS;;;;oDAIqC,CAAC,CAAC,cAAc;;CAEnE,CAAC;AAEF,2DAA2D;AAC9C,QAAA,mBAAmB,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAElE,0EAA0E;AAC7D,QAAA,wBAAwB,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAEvE,uFAAuF;AACvF,SAAgB,qBAAqB,CAAC,IAAe;IACnD,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,gCAAwB,CAAC,CAAC,CAAC,2BAAmB,CAAC;AAC1E,CAAC;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB,CAAC,IAAe,EAAE,MAAmB;IAC3E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,iCAAmB,CAAC,EAAE;QAAE,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,yBAAyB,CACvC,IAAmB,EACnB,QAAuB,sBAAa;IAEpC,MAAM,MAAM,GAAG,KAAK,KAAK,sBAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,2BAAa,EAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAA,mCAAuB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,MAAM,IAAI,GAAc,IAAI,CAAC,CAAC,CAAC,IAAA,+BAAe,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { JsonRpcTransport } from './transport';
|
|
15
15
|
import { MCPEngine } from './engine';
|
|
16
|
+
import { type DetectedAgent } from '../agents/detect';
|
|
16
17
|
/**
|
|
17
18
|
* MCP Server Info — kept on the session because some clients log it. The
|
|
18
19
|
* version tracks the real package version (was a hard-coded '0.1.0').
|
|
@@ -43,6 +44,9 @@ export declare class MCPSession {
|
|
|
43
44
|
private resolvePromise;
|
|
44
45
|
private explicitProjectPath;
|
|
45
46
|
private removeTierListener;
|
|
47
|
+
private detectedAgent;
|
|
48
|
+
/** One-line auto-setup notice for the first tool response (REQ-AGENTSWITCH-008). */
|
|
49
|
+
private migrationNotice;
|
|
46
50
|
constructor(transport: JsonRpcTransport, engine: MCPEngine, opts?: MCPSessionOptions);
|
|
47
51
|
/**
|
|
48
52
|
* Start handling messages from the transport. Returns immediately — the
|
|
@@ -54,10 +58,17 @@ export declare class MCPSession {
|
|
|
54
58
|
* other sessions) or call `process.exit` (the daemon decides when to exit).
|
|
55
59
|
*/
|
|
56
60
|
stop(): void;
|
|
61
|
+
/**
|
|
62
|
+
* The agent this session serves, from the MCP client name sent at
|
|
63
|
+
* `initialize` (REQ-AGENTSWITCH-007); `unknown` until then or when the
|
|
64
|
+
* name matches no supported agent.
|
|
65
|
+
*/
|
|
66
|
+
getDetectedAgent(): DetectedAgent;
|
|
57
67
|
/** Underlying transport — exposed for daemon-side close hooks. */
|
|
58
68
|
getTransport(): JsonRpcTransport;
|
|
59
69
|
private handleMessage;
|
|
60
70
|
private handleInitialize;
|
|
71
|
+
private runAutoMigrate;
|
|
61
72
|
private handleToolsList;
|
|
62
73
|
private handleToolsCall;
|
|
63
74
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAuC,gBAAgB,EAAc,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAuC,gBAAgB,EAAc,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIrC,OAAO,EAAsB,KAAK,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AAGzF;;;GAGG;AAGH,eAAO,MAAM,WAAW;;;CAGvB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAmC7C,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,UAAU;IAWnB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IAXhB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,aAAa,CAAgC;IACrD,oFAAoF;IACpF,OAAO,CAAC,eAAe,CAAuB;gBAGpC,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,SAAS,EACzB,IAAI,GAAE,iBAAsB;IAK9B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAWb;;;OAGG;IACH,IAAI,IAAI,IAAI;IAMZ;;;;OAIG;IACH,gBAAgB,IAAI,aAAa;IAIjC,kEAAkE;IAClE,YAAY,IAAI,gBAAgB;YAIlB,aAAa;YA0Cb,gBAAgB;IAgD9B,OAAO,CAAC,cAAc;YAWR,eAAe;YAOf,eAAe;IAqC7B;;;;;;;OAOG;YACW,iBAAiB;IAyB/B;;;OAGG;YACW,aAAa;CAgB5B"}
|
package/lib/dist/mcp/session.js
CHANGED
|
@@ -52,6 +52,8 @@ const transport_1 = require("./transport");
|
|
|
52
52
|
const tools_1 = require("./tools");
|
|
53
53
|
const server_instructions_1 = require("./server-instructions");
|
|
54
54
|
const version_1 = require("./version");
|
|
55
|
+
const detect_1 = require("../agents/detect");
|
|
56
|
+
const auto_migrate_1 = require("../installer/auto-migrate");
|
|
55
57
|
/**
|
|
56
58
|
* MCP Server Info — kept on the session because some clients log it. The
|
|
57
59
|
* version tracks the real package version (was a hard-coded '0.1.0').
|
|
@@ -110,6 +112,9 @@ class MCPSession {
|
|
|
110
112
|
resolvePromise = null;
|
|
111
113
|
explicitProjectPath;
|
|
112
114
|
removeTierListener = null;
|
|
115
|
+
detectedAgent = detect_1.UNKNOWN_AGENT;
|
|
116
|
+
/** One-line auto-setup notice for the first tool response (REQ-AGENTSWITCH-008). */
|
|
117
|
+
migrationNotice = null;
|
|
113
118
|
constructor(transport, engine, opts = {}) {
|
|
114
119
|
this.transport = transport;
|
|
115
120
|
this.engine = engine;
|
|
@@ -141,6 +146,14 @@ class MCPSession {
|
|
|
141
146
|
this.removeTierListener = null;
|
|
142
147
|
this.transport.stop();
|
|
143
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* The agent this session serves, from the MCP client name sent at
|
|
151
|
+
* `initialize` (REQ-AGENTSWITCH-007); `unknown` until then or when the
|
|
152
|
+
* name matches no supported agent.
|
|
153
|
+
*/
|
|
154
|
+
getDetectedAgent() {
|
|
155
|
+
return this.detectedAgent;
|
|
156
|
+
}
|
|
144
157
|
/** Underlying transport — exposed for daemon-side close hooks. */
|
|
145
158
|
getTransport() {
|
|
146
159
|
return this.transport;
|
|
@@ -192,6 +205,9 @@ class MCPSession {
|
|
|
192
205
|
async handleInitialize(request) {
|
|
193
206
|
const params = request.params;
|
|
194
207
|
this.clientSupportsRoots = !!params?.capabilities?.roots;
|
|
208
|
+
// The detected client picks the instruction wording below (REQ-AGENTSWITCH-002):
|
|
209
|
+
// a known host gets its own tool and file names, an unknown one today's text.
|
|
210
|
+
this.detectedAgent = (0, detect_1.agentFromMcpClient)(params?.clientInfo);
|
|
195
211
|
// Explicit project signal, strongest first: client-provided rootUri /
|
|
196
212
|
// workspaceFolders (LSP-style), else the --path the server was launched
|
|
197
213
|
// with. cwd is NOT used here — we defer it so a roots/list answer can
|
|
@@ -211,8 +227,13 @@ class MCPSession {
|
|
|
211
227
|
protocolVersion: exports.PROTOCOL_VERSION,
|
|
212
228
|
capabilities: { tools: {} },
|
|
213
229
|
serverInfo: exports.SERVER_INFO,
|
|
214
|
-
instructions: (0, server_instructions_1.resolveServerInstructions)(explicitPath ?? this.explicitProjectPath ?? null),
|
|
230
|
+
instructions: (0, server_instructions_1.resolveServerInstructions)(explicitPath ?? this.explicitProjectPath ?? null, this.detectedAgent),
|
|
215
231
|
});
|
|
232
|
+
// REQ-AGENTSWITCH-008: a supported agent the record doesn't list for this
|
|
233
|
+
// project gets SpecShip set up for it, once. Runs after the handshake
|
|
234
|
+
// reply so the client never waits on it; the notice goes to stderr now
|
|
235
|
+
// and prefixes the first tool response (stdout stays protocol-only).
|
|
236
|
+
this.runAutoMigrate(explicitPath ?? process.cwd());
|
|
216
237
|
if (explicitPath) {
|
|
217
238
|
// Kick off engine init in the background. If another session in the
|
|
218
239
|
// same daemon already opened the project, `ensureInitialized` is a
|
|
@@ -220,6 +241,18 @@ class MCPSession {
|
|
|
220
241
|
this.resolvePromise = this.engine.ensureInitialized(explicitPath);
|
|
221
242
|
}
|
|
222
243
|
}
|
|
244
|
+
runAutoMigrate(projectRoot) {
|
|
245
|
+
try {
|
|
246
|
+
const line = (0, auto_migrate_1.migrationLine)((0, auto_migrate_1.maybeAutoMigrate)(this.detectedAgent, { projectRoot }));
|
|
247
|
+
if (!line)
|
|
248
|
+
return;
|
|
249
|
+
this.migrationNotice = line;
|
|
250
|
+
process.stderr.write(`[SpecShip MCP] ${line}\n`);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
/* advisory — never breaks a session */
|
|
254
|
+
}
|
|
255
|
+
}
|
|
223
256
|
async handleToolsList(request) {
|
|
224
257
|
await this.retryInitIfNeeded();
|
|
225
258
|
this.transport.sendResult(request.id, {
|
|
@@ -241,6 +274,15 @@ class MCPSession {
|
|
|
241
274
|
}
|
|
242
275
|
await this.retryInitIfNeeded();
|
|
243
276
|
const result = await this.engine.getToolHandler().execute(toolName, toolArgs);
|
|
277
|
+
if (this.migrationNotice) {
|
|
278
|
+
const notice = this.migrationNotice;
|
|
279
|
+
this.migrationNotice = null;
|
|
280
|
+
const first = result.content?.[0];
|
|
281
|
+
if (first && first.type === 'text')
|
|
282
|
+
first.text = `${notice}\n\n${first.text}`;
|
|
283
|
+
else
|
|
284
|
+
result.content = [{ type: 'text', text: notice }, ...(result.content ?? [])];
|
|
285
|
+
}
|
|
244
286
|
this.transport.sendResult(request.id, result);
|
|
245
287
|
}
|
|
246
288
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,2CAAgG;AAEhG,mCAAgC;AAChC,+DAAkE;AAClE,uCAAmD;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
package/lib/dist/mcp/tools.js
CHANGED
|
@@ -3451,6 +3451,14 @@ class ToolHandler {
|
|
|
3451
3451
|
lines.push(`> ⚠ ${(0, worktree_1.worktreeMismatchWarning)(mismatch).replace(/\n/g, '\n> ')}`, '');
|
|
3452
3452
|
}
|
|
3453
3453
|
lines.push(`**Files indexed:** ${stats.fileCount}`, `**Total nodes:** ${stats.nodeCount}`, `**Total edges:** ${stats.edgeCount}`, `**Database size:** ${(stats.dbSizeBytes / 1024 / 1024).toFixed(2)} MB`);
|
|
3454
|
+
// Recorded index revision vs live HEAD (REQ-MULTIDEV-004). Report-only —
|
|
3455
|
+
// a moved HEAD never triggers a sync from here.
|
|
3456
|
+
const freshness = cg.getIndexFreshness();
|
|
3457
|
+
if (freshness) {
|
|
3458
|
+
lines.push(`**Indexed:** ${(0, worktree_1.formatRevision)(freshness.indexedBranch, freshness.indexedCommit)}`, `**HEAD:** ${(0, worktree_1.formatRevision)(freshness.headBranch, freshness.headCommit)}`);
|
|
3459
|
+
if (freshness.stale)
|
|
3460
|
+
lines.push(`**⚠ ${(0, worktree_1.indexStaleNotice)(freshness)}**`);
|
|
3461
|
+
}
|
|
3454
3462
|
// Surface the active SQLite backend (node:sqlite, Node's built-in real
|
|
3455
3463
|
// SQLite — full WAL + FTS5, no native build).
|
|
3456
3464
|
lines.push(`**Backend:** node:sqlite (Node built-in) — full WAL + FTS5`);
|