@skillsmith/core 0.12.1 → 0.12.2
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/CHANGELOG.md +155 -0
- package/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/api/client.d.ts +5 -3
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +23 -33
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/client.registry-sync.d.ts +28 -0
- package/dist/src/api/client.registry-sync.d.ts.map +1 -0
- package/dist/src/api/client.registry-sync.js +36 -0
- package/dist/src/api/client.registry-sync.js.map +1 -0
- package/dist/src/api/client.test.js +185 -0
- package/dist/src/api/client.test.js.map +1 -1
- package/dist/src/api/client.toSkill.d.ts +16 -0
- package/dist/src/api/client.toSkill.d.ts.map +1 -0
- package/dist/src/api/client.toSkill.js +46 -0
- package/dist/src/api/client.toSkill.js.map +1 -0
- package/dist/src/api/client.types.d.ts +22 -0
- package/dist/src/api/client.types.d.ts.map +1 -1
- package/dist/src/api/index.d.ts +1 -1
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js.map +1 -1
- package/dist/src/api/schemas.d.ts +28 -0
- package/dist/src/api/schemas.d.ts.map +1 -1
- package/dist/src/api/schemas.js +13 -0
- package/dist/src/api/schemas.js.map +1 -1
- package/dist/src/audit/remote-audit.d.ts +85 -0
- package/dist/src/audit/remote-audit.d.ts.map +1 -1
- package/dist/src/audit/remote-audit.js +126 -3
- package/dist/src/audit/remote-audit.js.map +1 -1
- package/dist/src/audit/remote-audit.test.js +217 -1
- package/dist/src/audit/remote-audit.test.js.map +1 -1
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.d.ts.map +1 -1
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/db/migration-runner.d.ts.map +1 -1
- package/dist/src/db/migration-runner.js +6 -0
- package/dist/src/db/migration-runner.js.map +1 -1
- package/dist/src/db/migrations/v18-skill-versions-real-content-hash.d.ts +36 -0
- package/dist/src/db/migrations/v18-skill-versions-real-content-hash.d.ts.map +1 -0
- package/dist/src/db/migrations/v18-skill-versions-real-content-hash.js +38 -0
- package/dist/src/db/migrations/v18-skill-versions-real-content-hash.js.map +1 -0
- package/dist/src/db/schema.d.ts +1 -1
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +3 -1
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/exports/services.d.ts +3 -7
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.install.d.ts +18 -0
- package/dist/src/exports/services.install.d.ts.map +1 -0
- package/dist/src/exports/services.install.js +62 -0
- package/dist/src/exports/services.install.js.map +1 -0
- package/dist/src/exports/services.js +12 -32
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/exports/types.d.ts +1 -1
- package/dist/src/exports/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +5 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/install/agent-config-merge.json.d.ts +5 -4
- package/dist/src/install/agent-config-merge.json.d.ts.map +1 -1
- package/dist/src/install/agent-config-merge.json.js +10 -9
- package/dist/src/install/agent-config-merge.json.js.map +1 -1
- package/dist/src/install/agent-config-merge.types.d.ts +11 -1
- package/dist/src/install/agent-config-merge.types.d.ts.map +1 -1
- package/dist/src/install/agent-config-merge.types.js.map +1 -1
- package/dist/src/install/agent-harness-targets.d.ts +30 -2
- package/dist/src/install/agent-harness-targets.d.ts.map +1 -1
- package/dist/src/install/agent-harness-targets.js +17 -0
- package/dist/src/install/agent-harness-targets.js.map +1 -1
- package/dist/src/install/agent-manifest-path-guard.d.ts +28 -3
- package/dist/src/install/agent-manifest-path-guard.d.ts.map +1 -1
- package/dist/src/install/agent-manifest-path-guard.js +59 -3
- package/dist/src/install/agent-manifest-path-guard.js.map +1 -1
- package/dist/src/install/agent-manifest-path-guard.test.js +27 -1
- package/dist/src/install/agent-manifest-path-guard.test.js.map +1 -1
- package/dist/src/install/agent-pack-installer.antigravity-mcp.d.ts +74 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.js +106 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.js.map +1 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.test.d.ts +2 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.test.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.test.js +157 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.test.js.map +1 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.d.ts +53 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.js +207 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.js.map +1 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.test.d.ts +2 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.test.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.test.js +285 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.test.js.map +1 -0
- package/dist/src/install/agent-pack-installer.d.ts +8 -0
- package/dist/src/install/agent-pack-installer.d.ts.map +1 -1
- package/dist/src/install/agent-pack-installer.entry.d.ts +120 -3
- package/dist/src/install/agent-pack-installer.entry.d.ts.map +1 -1
- package/dist/src/install/agent-pack-installer.entry.js +166 -3
- package/dist/src/install/agent-pack-installer.entry.js.map +1 -1
- package/dist/src/install/agent-pack-installer.js +97 -3
- package/dist/src/install/agent-pack-installer.js.map +1 -1
- package/dist/src/install/agent-pack-installer.types.d.ts +27 -0
- package/dist/src/install/agent-pack-installer.types.d.ts.map +1 -1
- package/dist/src/install/agent-pack-installer.types.js +6 -0
- package/dist/src/install/agent-pack-installer.types.js.map +1 -1
- package/dist/src/install/agent-pack-installer.workspace-scope.test.d.ts +2 -0
- package/dist/src/install/agent-pack-installer.workspace-scope.test.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.workspace-scope.test.js +148 -0
- package/dist/src/install/agent-pack-installer.workspace-scope.test.js.map +1 -0
- package/dist/src/install/agent-pack-uninstaller.d.ts +18 -7
- package/dist/src/install/agent-pack-uninstaller.d.ts.map +1 -1
- package/dist/src/install/agent-pack-uninstaller.js +59 -9
- package/dist/src/install/agent-pack-uninstaller.js.map +1 -1
- package/dist/src/install/agent-pack-uninstaller.test.js +74 -1
- package/dist/src/install/agent-pack-uninstaller.test.js.map +1 -1
- package/dist/src/install/fan-out.d.ts.map +1 -1
- package/dist/src/install/fan-out.js +6 -0
- package/dist/src/install/fan-out.js.map +1 -1
- package/dist/src/install/index.d.ts +2 -0
- package/dist/src/install/index.d.ts.map +1 -1
- package/dist/src/install/index.js +2 -0
- package/dist/src/install/index.js.map +1 -1
- package/dist/src/install/workspace-scope.d.ts +207 -0
- package/dist/src/install/workspace-scope.d.ts.map +1 -0
- package/dist/src/install/workspace-scope.js +275 -0
- package/dist/src/install/workspace-scope.js.map +1 -0
- package/dist/src/install/workspace-scope.test.d.ts +2 -0
- package/dist/src/install/workspace-scope.test.d.ts.map +1 -0
- package/dist/src/install/workspace-scope.test.js +378 -0
- package/dist/src/install/workspace-scope.test.js.map +1 -0
- package/dist/src/security/__tests__/pathValidation.test.js +30 -1
- package/dist/src/security/__tests__/pathValidation.test.js.map +1 -1
- package/dist/src/services/SubagentGenerator.client-profiles.d.ts +258 -0
- package/dist/src/services/SubagentGenerator.client-profiles.d.ts.map +1 -0
- package/dist/src/services/SubagentGenerator.client-profiles.js +260 -0
- package/dist/src/services/SubagentGenerator.client-profiles.js.map +1 -0
- package/dist/src/services/SubagentGenerator.d.ts +19 -41
- package/dist/src/services/SubagentGenerator.d.ts.map +1 -1
- package/dist/src/services/SubagentGenerator.helpers.d.ts +64 -0
- package/dist/src/services/SubagentGenerator.helpers.d.ts.map +1 -0
- package/dist/src/services/SubagentGenerator.helpers.js +228 -0
- package/dist/src/services/SubagentGenerator.helpers.js.map +1 -0
- package/dist/src/services/SubagentGenerator.js +66 -208
- package/dist/src/services/SubagentGenerator.js.map +1 -1
- package/dist/src/services/SubagentGenerator.types.d.ts +45 -0
- package/dist/src/services/SubagentGenerator.types.d.ts.map +1 -0
- package/dist/src/services/SubagentGenerator.types.js +14 -0
- package/dist/src/services/SubagentGenerator.types.js.map +1 -0
- package/dist/src/services/TransformationService.d.ts +18 -61
- package/dist/src/services/TransformationService.d.ts.map +1 -1
- package/dist/src/services/TransformationService.js +29 -17
- package/dist/src/services/TransformationService.js.map +1 -1
- package/dist/src/services/TransformationService.types.d.ts +74 -0
- package/dist/src/services/TransformationService.types.d.ts.map +1 -0
- package/dist/src/services/TransformationService.types.js +8 -0
- package/dist/src/services/TransformationService.types.js.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.d.ts +5 -0
- package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.js +72 -0
- package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.js.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.helpers.test.d.ts +2 -0
- package/dist/src/services/__tests__/SubagentGenerator.helpers.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.helpers.test.js +61 -0
- package/dist/src/services/__tests__/SubagentGenerator.helpers.test.js.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.js +155 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.js.map +1 -1
- package/dist/src/services/__tests__/TransformationService.test.js +48 -0
- package/dist/src/services/__tests__/TransformationService.test.js.map +1 -1
- package/dist/src/services/agent-pack/agent-pack.test.js +1 -0
- package/dist/src/services/agent-pack/agent-pack.test.js.map +1 -1
- package/dist/src/services/agent-pack/prompt-source.d.ts +1 -1
- package/dist/src/services/agent-pack/prompt-source.d.ts.map +1 -1
- package/dist/src/services/agent-pack/prompt-source.js +10 -3
- package/dist/src/services/agent-pack/prompt-source.js.map +1 -1
- package/dist/src/services/agent-pack/types.d.ts +26 -2
- package/dist/src/services/agent-pack/types.d.ts.map +1 -1
- package/dist/src/services/agent-pack/types.js +13 -0
- package/dist/src/services/agent-pack/types.js.map +1 -1
- package/dist/src/services/agent-tool-profile.d.ts.map +1 -1
- package/dist/src/services/agent-tool-profile.js +7 -0
- package/dist/src/services/agent-tool-profile.js.map +1 -1
- package/dist/src/services/agent-tool-profile.test.js +2 -2
- package/dist/src/services/skill-content-comparison.d.ts +71 -0
- package/dist/src/services/skill-content-comparison.d.ts.map +1 -0
- package/dist/src/services/skill-content-comparison.js +90 -0
- package/dist/src/services/skill-content-comparison.js.map +1 -0
- package/dist/src/services/skill-content-comparison.test.d.ts +6 -0
- package/dist/src/services/skill-content-comparison.test.d.ts.map +1 -0
- package/dist/src/services/skill-content-comparison.test.js +83 -0
- package/dist/src/services/skill-content-comparison.test.js.map +1 -0
- package/dist/src/services/skill-identity-classification.d.ts +202 -0
- package/dist/src/services/skill-identity-classification.d.ts.map +1 -0
- package/dist/src/services/skill-identity-classification.js +295 -0
- package/dist/src/services/skill-identity-classification.js.map +1 -0
- package/dist/src/services/skill-identity-classification.test.d.ts +6 -0
- package/dist/src/services/skill-identity-classification.test.d.ts.map +1 -0
- package/dist/src/services/skill-identity-classification.test.js +314 -0
- package/dist/src/services/skill-identity-classification.test.js.map +1 -0
- package/dist/src/services/skill-installation.content.d.ts.map +1 -1
- package/dist/src/services/skill-installation.content.js +6 -1
- package/dist/src/services/skill-installation.content.js.map +1 -1
- package/dist/src/services/skill-installation.helpers.d.ts +8 -15
- package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
- package/dist/src/services/skill-installation.helpers.js +11 -105
- package/dist/src/services/skill-installation.helpers.js.map +1 -1
- package/dist/src/services/skill-installation.helpers.test.js +106 -1
- package/dist/src/services/skill-installation.helpers.test.js.map +1 -1
- package/dist/src/services/skill-installation.service.js +1 -1
- package/dist/src/services/skill-installation.service.js.map +1 -1
- package/dist/src/services/skill-installation.types.d.ts +33 -0
- package/dist/src/services/skill-installation.types.d.ts.map +1 -1
- package/dist/src/services/skill-installation.types.js.map +1 -1
- package/dist/src/services/skill-installation.uninstall.d.ts +84 -0
- package/dist/src/services/skill-installation.uninstall.d.ts.map +1 -0
- package/dist/src/services/skill-installation.uninstall.js +252 -0
- package/dist/src/services/skill-installation.uninstall.js.map +1 -0
- package/dist/src/services/skill-manifest.d.ts +41 -0
- package/dist/src/services/skill-manifest.d.ts.map +1 -1
- package/dist/src/services/skill-manifest.js +93 -0
- package/dist/src/services/skill-manifest.js.map +1 -1
- package/dist/src/services/skill-manifest.test.js +27 -0
- package/dist/src/services/skill-manifest.test.js.map +1 -1
- package/dist/src/sync/SyncEngine.d.ts.map +1 -1
- package/dist/src/sync/SyncEngine.js +69 -77
- package/dist/src/sync/SyncEngine.js.map +1 -1
- package/dist/src/telemetry/agent-marker.d.ts +8 -0
- package/dist/src/telemetry/agent-marker.d.ts.map +1 -1
- package/dist/src/telemetry/agent-marker.js +7 -0
- package/dist/src/telemetry/agent-marker.js.map +1 -1
- package/dist/src/telemetry/agent-marker.test.js +7 -1
- package/dist/src/telemetry/agent-marker.test.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -1
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +1 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/wrap.d.ts +6 -0
- package/dist/src/telemetry/wrap.d.ts.map +1 -1
- package/dist/src/telemetry/wrap.js +65 -10
- package/dist/src/telemetry/wrap.js.map +1 -1
- package/dist/src/telemetry/wrap.test.js +81 -1
- package/dist/src/telemetry/wrap.test.js.map +1 -1
- package/dist/src/telemetry/wrap.tool-call-sink.test.d.ts +26 -0
- package/dist/src/telemetry/wrap.tool-call-sink.test.d.ts.map +1 -0
- package/dist/src/telemetry/wrap.tool-call-sink.test.js +162 -0
- package/dist/src/telemetry/wrap.tool-call-sink.test.js.map +1 -0
- package/dist/src/types/skill.d.ts +9 -1
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +1 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +1 -1
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/version-check.d.ts +61 -0
- package/dist/src/utils/version-check.d.ts.map +1 -1
- package/dist/src/utils/version-check.js +78 -1
- package/dist/src/utils/version-check.js.map +1 -1
- package/dist/src/utils/version-check.test.js +130 -1
- package/dist/src/utils/version-check.test.js.map +1 -1
- package/dist/tests/db/migration-runner-race.test.js +19 -9
- package/dist/tests/db/migration-runner-race.test.js.map +1 -1
- package/dist/tests/install/fan-out.test.js +27 -0
- package/dist/tests/install/fan-out.test.js.map +1 -1
- package/dist/tests/sync/SyncEngine.abort.test.js +15 -11
- package/dist/tests/sync/SyncEngine.abort.test.js.map +1 -1
- package/dist/tests/sync/SyncEngine.status.test.js +1 -1
- package/dist/tests/sync/SyncEngine.status.test.js.map +1 -1
- package/dist/tests/sync/SyncEngine.test.d.ts +11 -2
- package/dist/tests/sync/SyncEngine.test.d.ts.map +1 -1
- package/dist/tests/sync/SyncEngine.test.js +164 -13
- package/dist/tests/sync/SyncEngine.test.js.map +1 -1
- package/dist/tests/unit/migrations/migration-v18.test.d.ts +16 -0
- package/dist/tests/unit/migrations/migration-v18.test.d.ts.map +1 -0
- package/dist/tests/unit/migrations/migration-v18.test.js +192 -0
- package/dist/tests/unit/migrations/migration-v18.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.content.test.js +65 -1
- package/dist/tests/unit/services/skill-installation.content.test.js.map +1 -1
- package/dist/tests/unit/services/skill-installation.service.test.js +9 -8
- package/dist/tests/unit/services/skill-installation.service.test.js.map +1 -1
- package/dist/tests/unit/sync-engine.source-aware.test.js +5 -5
- package/dist/tests/unit/sync-engine.source-aware.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -8,12 +8,19 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module @skillsmith/core/install/agent-pack-installer.entry
|
|
10
10
|
*/
|
|
11
|
+
import { execFileSync } from 'node:child_process';
|
|
11
12
|
import { AGENT_TOOL_PROFILE_ENV_VAR, AGENT_TOOL_PROFILE_VALUE, } from '../services/agent-tool-profile.js';
|
|
12
13
|
/**
|
|
13
14
|
* The `skillsmith` MCP server registration value for `mcpServers`-convention
|
|
14
|
-
* harnesses (claude-code,
|
|
15
|
-
*
|
|
16
|
-
* {@link buildOpenCodeMcpEntryValue}.
|
|
15
|
+
* harnesses (claude-code, copilot, windsurf; hermes uses the same field
|
|
16
|
+
* names under YAML). OpenCode does NOT use this shape — see
|
|
17
|
+
* {@link buildOpenCodeMcpEntryValue}. Cursor ALSO does not use this shape —
|
|
18
|
+
* see {@link buildCursorMcpEntryValue} (SMI-6279 Wave 9): two independent
|
|
19
|
+
* live UAT passes proved the `npx`/`args` form here ENOENTs inside Cursor's
|
|
20
|
+
* bundled Node (GH#2368 C-01), which is why the website/CLI-template docs
|
|
21
|
+
* snippet was corrected to a resolved-binary-path form back in SMI-5893
|
|
22
|
+
* Wave 11 — this function stayed on the broken form for every OTHER
|
|
23
|
+
* harness it's still correct for, so it is deliberately left unchanged here.
|
|
17
24
|
*/
|
|
18
25
|
export function buildAgentMcpEntryValue() {
|
|
19
26
|
return {
|
|
@@ -24,6 +31,122 @@ export function buildAgentMcpEntryValue() {
|
|
|
24
31
|
},
|
|
25
32
|
};
|
|
26
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* JSON key Cursor's MCP entry is installed under (SMI-6279 Wave 9).
|
|
36
|
+
*
|
|
37
|
+
* Every OTHER `mcpServers`-convention harness still uses the literal
|
|
38
|
+
* `'skillsmith'` key (hardcoded as `mergeJsonMcpEntry`'s default `entryKey`
|
|
39
|
+
* — deliberately NOT changed here, out of scope for this fix). Cursor is
|
|
40
|
+
* the one client with a human-facing docs snippet
|
|
41
|
+
* (`packages/website/src/lib/mcp-client-snippets.ts` /
|
|
42
|
+
* `packages/cli/src/templates/mcp-server.template.snippets.ts`) that tells a
|
|
43
|
+
* user to hand-paste an entry under the PACKAGE-scoped key
|
|
44
|
+
* `@skillsmith/mcp-server` instead — a mismatch that let a user who both
|
|
45
|
+
* pasted the docs snippet AND ran `sklx agent install` end up with two
|
|
46
|
+
* different server entries coexisting in the same `mcp.json`, neither ever
|
|
47
|
+
* recognized as "the other's" by the installer's own conflict-detection
|
|
48
|
+
* (which matches purely on key). Aligning the installer's key to the docs
|
|
49
|
+
* snippet's key here means a docs-paste and an `agent install` reconcile as
|
|
50
|
+
* ONE entry: either recognized as ours and updated in place, or correctly
|
|
51
|
+
* detected as foreign (conflict) and left alone — never silently
|
|
52
|
+
* duplicated. See `agent-pack-installer.cursor-mcp.ts` for the write path
|
|
53
|
+
* (including the legacy-key cleanup for a pre-fix install that still has
|
|
54
|
+
* the old `'skillsmith'`-keyed entry) and `version-check.ts`'s
|
|
55
|
+
* `checkCursorMcpArtifact` for the read-side (`skillsmith diagnose`) use.
|
|
56
|
+
*/
|
|
57
|
+
export const CURSOR_MCP_ENTRY_KEY = '@skillsmith/mcp-server';
|
|
58
|
+
/**
|
|
59
|
+
* The JSON key every pre-SMI-6279 `sklx agent install` run wrote Cursor's
|
|
60
|
+
* MCP entry under — kept as a named constant (not a bare literal) so the
|
|
61
|
+
* legacy-key cleanup step and the `diagnose` staleness check can both point
|
|
62
|
+
* at the exact same "this is the OLD key" definition instead of drifting.
|
|
63
|
+
*/
|
|
64
|
+
export const LEGACY_MCP_ENTRY_KEY = 'skillsmith';
|
|
65
|
+
/**
|
|
66
|
+
* Placeholder command text shown when {@link resolveSkillsmithMcpBinPath}
|
|
67
|
+
* can't resolve a real path — byte-identical to the human-facing
|
|
68
|
+
* instruction already shipped in the website/CLI-template Cursor snippets
|
|
69
|
+
* (SMI-5893 Wave 11), so a user who runs `agent install` before the resolve
|
|
70
|
+
* step succeeds sees the exact same next action the docs already describe.
|
|
71
|
+
*/
|
|
72
|
+
export const CURSOR_MCP_COMMAND_PLACEHOLDER = '<paste output of: which skillsmith-mcp (macOS/Linux) or where skillsmith-mcp (Windows)>';
|
|
73
|
+
/**
|
|
74
|
+
* Bound on {@link resolveSkillsmithMcpBinPath}'s `which`/`where` call
|
|
75
|
+
* (code-review finding, GPT-5.6-Sol / SMI-6279: the call previously had no
|
|
76
|
+
* `timeout`, so a hung or substituted `which`/`where` executable could block
|
|
77
|
+
* `agent install` indefinitely). This is a local PATH lookup, not a network
|
|
78
|
+
* call — 3s is generous headroom, not a tight budget. `execFileSync` throws
|
|
79
|
+
* `ETIMEDOUT` when this elapses, which the existing blanket `catch` below
|
|
80
|
+
* already turns into the same "not found" fallback as a missing binary — no
|
|
81
|
+
* separate timeout-handling branch needed.
|
|
82
|
+
*/
|
|
83
|
+
const BIN_RESOLVE_TIMEOUT_MS = 3000;
|
|
84
|
+
/**
|
|
85
|
+
* Resolve the on-disk path of the globally-installed `skillsmith-mcp`
|
|
86
|
+
* binary by shelling out to the exact command the docs already tell a
|
|
87
|
+
* human to run by hand — `which` on macOS/Linux, `where` on Windows
|
|
88
|
+
* (SMI-6279 Wave 9).
|
|
89
|
+
*
|
|
90
|
+
* There is no reliable programmatic equivalent that doesn't shell out:
|
|
91
|
+
* `@skillsmith/mcp-server` is a SEPARATE npm package from `@skillsmith/cli`
|
|
92
|
+
* (the package this code runs inside of) and is commonly NOT installed yet
|
|
93
|
+
* when `agent install` runs — it is a peer install the docs tell the user
|
|
94
|
+
* to do themselves (`npm install -g @skillsmith/mcp-server`). Node module
|
|
95
|
+
* resolution (`require.resolve`) only finds an already-installed package's
|
|
96
|
+
* importable entry point, not a DIFFERENT package's globally-linked `bin`
|
|
97
|
+
* symlink, and `process.execPath` is the Node binary running THIS process,
|
|
98
|
+
* not `skillsmith-mcp`'s location — neither is a substitute. `which`/`where`
|
|
99
|
+
* against the global npm bin directory (already on PATH for any shell the
|
|
100
|
+
* user installed from) is the SAME resolution the docs snippet instructs a
|
|
101
|
+
* human to do; this automates exactly that step rather than inventing a new
|
|
102
|
+
* one.
|
|
103
|
+
*
|
|
104
|
+
* Never throws and never hangs — returns `undefined` when the binary isn't
|
|
105
|
+
* found (an `agent install` run commonly happens BEFORE
|
|
106
|
+
* `@skillsmith/mcp-server` is installed; that is an expected outcome here,
|
|
107
|
+
* not an exceptional one) or when the lookup exceeds
|
|
108
|
+
* {@link BIN_RESOLVE_TIMEOUT_MS}.
|
|
109
|
+
*/
|
|
110
|
+
export function resolveSkillsmithMcpBinPath() {
|
|
111
|
+
try {
|
|
112
|
+
const finder = process.platform === 'win32' ? 'where' : 'which';
|
|
113
|
+
const output = execFileSync(finder, ['skillsmith-mcp'], {
|
|
114
|
+
encoding: 'utf-8',
|
|
115
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
116
|
+
timeout: BIN_RESOLVE_TIMEOUT_MS,
|
|
117
|
+
});
|
|
118
|
+
return output
|
|
119
|
+
.split(/\r?\n/)
|
|
120
|
+
.map((line) => line.trim())
|
|
121
|
+
.find((line) => line.length > 0);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Cursor's own MCP server registration value (SMI-6279 Wave 9) — structurally
|
|
129
|
+
* different from {@link buildAgentMcpEntryValue} in two ways confirmed
|
|
130
|
+
* broken by the GH#2368 V3 repro:
|
|
131
|
+
* 1. `command` is a resolved binary path (or the documented paste-here
|
|
132
|
+
* placeholder when resolution fails), never `npx` — two independent
|
|
133
|
+
* live UAT passes proved `npx` ENOENTs inside Cursor's bundled Node.
|
|
134
|
+
* 2. `env.SKILLSMITH_CLIENT` is always set to `'cursor'` — without it,
|
|
135
|
+
* Cursor installs silently land in the default `~/.claude/skills`
|
|
136
|
+
* instead of `~/.cursor/skills` (SMI-5894 Wave 1 Step 7).
|
|
137
|
+
* `SKILLSMITH_TOOL_PROFILE` is unchanged from the generic builder — this is
|
|
138
|
+
* still the curated agent-pack registration, not a general-purpose one.
|
|
139
|
+
*/
|
|
140
|
+
export function buildCursorMcpEntryValue() {
|
|
141
|
+
const resolvedPath = resolveSkillsmithMcpBinPath();
|
|
142
|
+
return {
|
|
143
|
+
command: resolvedPath ?? CURSOR_MCP_COMMAND_PLACEHOLDER,
|
|
144
|
+
env: {
|
|
145
|
+
[AGENT_TOOL_PROFILE_ENV_VAR]: AGENT_TOOL_PROFILE_VALUE,
|
|
146
|
+
SKILLSMITH_CLIENT: 'cursor',
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
27
150
|
/**
|
|
28
151
|
* OpenCode's `mcp`-key entry value (Step-6 verified against
|
|
29
152
|
* opencode.ai/docs/mcp-servers/): entries are typed `local|remote`,
|
|
@@ -41,6 +164,46 @@ export function buildOpenCodeMcpEntryValue() {
|
|
|
41
164
|
},
|
|
42
165
|
};
|
|
43
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* AntiGravity's own MCP server registration value (SMI-6275 Wave 5).
|
|
169
|
+
*
|
|
170
|
+
* Unlike Cursor, there is no verified evidence of an `npx`-inside-bundled-Node
|
|
171
|
+
* failure for AntiGravity (Wave 7 of the SMI-6266 plan makes the same call
|
|
172
|
+
* for the website/CLI docs snippet) — so this stays on the plain `npx` form,
|
|
173
|
+
* composed directly over {@link buildAgentMcpEntryValue} rather than
|
|
174
|
+
* reimplementing it. The one addition is `env.SKILLSMITH_CLIENT = 'antigravity'`,
|
|
175
|
+
* for the same reason Cursor's builder sets it (SMI-5894 Wave 1 Step 7):
|
|
176
|
+
* without it, an MCP server spawned from THIS entry would default to
|
|
177
|
+
* `~/.claude/skills` (`resolveClientPath()`'s fallback) instead of
|
|
178
|
+
* AntiGravity's own directories.
|
|
179
|
+
*/
|
|
180
|
+
export function buildAntigravityMcpEntryValue() {
|
|
181
|
+
const base = buildAgentMcpEntryValue();
|
|
182
|
+
return {
|
|
183
|
+
...base,
|
|
184
|
+
env: {
|
|
185
|
+
...base.env,
|
|
186
|
+
SKILLSMITH_CLIENT: 'antigravity',
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* JSON key AntiGravity's `.agents/mcp_config.json` entry is installed under
|
|
192
|
+
* (SMI-6275 Wave 5) — deliberately the SAME value as {@link CURSOR_MCP_ENTRY_KEY},
|
|
193
|
+
* not the legacy `'skillsmith'` key every other non-Cursor harness's
|
|
194
|
+
* installer entry still uses. AntiGravity's OWN human-facing docs snippets
|
|
195
|
+
* (`packages/website/src/lib/mcp-client-snippets.ts`'s `STANDARD_JSON_BODY`
|
|
196
|
+
* and the CLI template's antigravity entry, both verified live 2026-08-30)
|
|
197
|
+
* already use the package-scoped key `@skillsmith/mcp-server` — aligning the
|
|
198
|
+
* installer's key here avoids the exact key-mismatch class of bug SMI-6279
|
|
199
|
+
* fixed for Cursor (a user who both pastes the docs snippet AND runs
|
|
200
|
+
* `agent install` ending up with two divergent, mutually-unrecognized
|
|
201
|
+
* entries). Unlike Cursor, AntiGravity has no PRE-EXISTING `agent install`
|
|
202
|
+
* writer to migrate away from — this is its first-ever implementation — so
|
|
203
|
+
* there is no legacy-keyed entry to clean up here (contrast
|
|
204
|
+
* `agent-pack-installer.cursor-mcp.ts`'s `stripStaleLegacyMcpKey`).
|
|
205
|
+
*/
|
|
206
|
+
export const ANTIGRAVITY_MCP_ENTRY_KEY = CURSOR_MCP_ENTRY_KEY;
|
|
44
207
|
/** Codex `[mcp_servers.skillsmith]` TOML block (text between our markers). */
|
|
45
208
|
export function buildCodexMcpTomlBlock() {
|
|
46
209
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-pack-installer.entry.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,mCAAmC,CAAA;AAE1C
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.entry.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,14 @@
|
|
|
24
24
|
* - The `skillsmith` MCP server registration (`SKILLSMITH_TOOL_PROFILE=agent`)
|
|
25
25
|
* for every detected MCP-capable harness (all 7), backup-first,
|
|
26
26
|
* idempotent, preserve-and-prompt on a foreign entry.
|
|
27
|
+
* - AntiGravity (SMI-6275 Wave 5): a workspace-scoped 8th target, handled
|
|
28
|
+
* OUTSIDE the 7-harness loop above — see the `antigravity` block near
|
|
29
|
+
* the end of `installAgentPack`. Whenever its workspace scope resolves
|
|
30
|
+
* (an existing `.agents/` marker auto-detects, or `--scope workspace`
|
|
31
|
+
* creates one), writes the skill pack AND `.agents/mcp_config.json`
|
|
32
|
+
* (`installAntigravityMcpConfig`, `agent-pack-installer.antigravity-mcp.ts`)
|
|
33
|
+
* — MCP config only, no hooks/shim this wave (stated decision, see
|
|
34
|
+
* `HOOK_HARNESSES`'s doc comment in `services/agent-pack/types.ts`).
|
|
27
35
|
*
|
|
28
36
|
* Every write funnels through `writeOwnedArtifactFile` (owned files) or the
|
|
29
37
|
* `agent-config-merge.*` helpers (shared config files), both of which record
|
|
@@ -39,11 +47,14 @@ import { join } from 'node:path';
|
|
|
39
47
|
import { AGENT_PACK_SKILL_NAME, generateAgentPack } from '../services/agent-pack/index.js';
|
|
40
48
|
import { AGENT_TOOL_PROFILE_NAMES } from '../services/agent-tool-profile.js';
|
|
41
49
|
import { CLIENT_NATIVE_PATHS } from './paths.js';
|
|
50
|
+
import { UnsatisfiableWorkspaceScopeError, resolveScopedSkillsDir } from './workspace-scope.js';
|
|
42
51
|
import { relocateUnderHome } from './agent-home-relocate.js';
|
|
43
52
|
import { writeOwnedArtifactFile } from './agent-pack-installer.fs-helpers.js';
|
|
44
53
|
import { getAgentInstallBackupsDir, getAgentManifestPath, loadAgentManifest, saveAgentManifest, } from './agent-manifest.js';
|
|
45
54
|
import { installCodexAgentsShim, installCodexHooks, installJsonHooks, installMcpConfig, installShim, } from './agent-pack-installer.harness.js';
|
|
46
55
|
import { installCursorHooks } from './agent-pack-installer.cursor-hooks.js';
|
|
56
|
+
import { installCursorMcpConfig } from './agent-pack-installer.cursor-mcp.js';
|
|
57
|
+
import { installAntigravityMcpConfig } from './agent-pack-installer.antigravity-mcp.js';
|
|
47
58
|
import { HARNESS_SUPPORT_TIER, } from './agent-pack-installer.types.js';
|
|
48
59
|
/** Harnesses considered for the SKILL.md pack copy beyond the mandatory dual path. */
|
|
49
60
|
const OPTIONAL_SKILL_PACK_HARNESSES = ['windsurf', 'opencode', 'hermes'];
|
|
@@ -200,9 +211,16 @@ export function installAgentPack(opts = {}) {
|
|
|
200
211
|
installCodexHooks(hookStartByHarness.get('codex'), hookEndByHarness.get('codex'), ctx, report);
|
|
201
212
|
installCodexAgentsShim(shimByHarness.get('codex'), ctx, report);
|
|
202
213
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
214
|
+
if (harness === 'cursor') {
|
|
215
|
+
// Cursor's MCP entry shape/key diverge from every other harness
|
|
216
|
+
// (SMI-6279 Wave 9) — see agent-pack-installer.cursor-mcp.ts.
|
|
217
|
+
installCursorMcpConfig(ctx, report);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// `harnessIds` is exactly the 7-member McpHarnessId union (all harnesses
|
|
221
|
+
// considered here support MCP registration) — safe direct cast.
|
|
222
|
+
installMcpConfig(harness, ctx, report);
|
|
223
|
+
}
|
|
206
224
|
}
|
|
207
225
|
reports.push(report);
|
|
208
226
|
}
|
|
@@ -213,6 +231,82 @@ export function installAgentPack(opts = {}) {
|
|
|
213
231
|
if (skillArtifact) {
|
|
214
232
|
writeSkillPackFor(CLIENT_NATIVE_PATHS.agents, skillArtifact.content, ctx, 'agents');
|
|
215
233
|
}
|
|
234
|
+
// ADR-139 (SMI-6274 Wave 4, point 5's Wave 5 bootstrap requirement) +
|
|
235
|
+
// SMI-6275 Wave 5: AntiGravity is a valid `agent install` target whenever
|
|
236
|
+
// its WORKSPACE scope resolves — either because `--scope workspace` was
|
|
237
|
+
// passed explicitly (the only path allowed to CREATE `.agents/`, ADR-139
|
|
238
|
+
// point 5), or because an EXISTING `.agents/` marker auto-detects
|
|
239
|
+
// (ADR-139 point 2 rank 4 — a read-only check `resolveScopedSkillsDir`
|
|
240
|
+
// already performs on its own when `explicitScope` is omitted; this
|
|
241
|
+
// function never reimplements that detection). `envScope`/
|
|
242
|
+
// `configDefaultScope` are pinned to "no value" here rather than left to
|
|
243
|
+
// read the REAL `SKILLSMITH_SCOPE` env var / `~/.skillsmith/config.json`:
|
|
244
|
+
// `agent install`'s own CLI surface exposes only `--scope`, no separate
|
|
245
|
+
// env/config channel for THIS command, and leaving them unpinned would
|
|
246
|
+
// make a bare `agent install` run's AntiGravity detection depend on
|
|
247
|
+
// whatever unrelated scope state happens to exist on the invoking
|
|
248
|
+
// machine — the same test-isolation seam `ResolveScopeParams` documents
|
|
249
|
+
// its `configDefaultScope: null` value for.
|
|
250
|
+
//
|
|
251
|
+
// AntiGravity ALWAYS gets a report row now, whether or not its workspace
|
|
252
|
+
// scope resolves — matching every OTHER harness's reporting shape
|
|
253
|
+
// (`newReport()` + a `detected` badge in the CLI table, `agent.action.ts`).
|
|
254
|
+
// Wave 4 omitted the row entirely for the undetected case; Wave 5 corrects
|
|
255
|
+
// that for reporting consistency, per its own required test ("no `.agents/`
|
|
256
|
+
// directory and no `--scope workspace` → clear message, no silent no-op —
|
|
257
|
+
// match whatever 'not detected' reporting shape other undetected harnesses
|
|
258
|
+
// already use").
|
|
259
|
+
if (skillArtifact) {
|
|
260
|
+
const antigravityReport = newReport('antigravity');
|
|
261
|
+
// GPT-5.6-Sol pr-reviewer finding (SMI-6275 Wave 5): resolveScopedSkillsDir()
|
|
262
|
+
// THROWS UnsatisfiableWorkspaceScopeError when `--scope workspace` was
|
|
263
|
+
// requested but can't be satisfied (no .agents/ marker and no ancestor
|
|
264
|
+
// .git). Left uncaught, that throw propagates out of installAgentPack()
|
|
265
|
+
// ENTIRELY — skipping saveAgentManifest() below, which is the ONLY place
|
|
266
|
+
// every other harness's already-written entries (lines 228-299 above)
|
|
267
|
+
// get persisted. The result: real files on disk for claude-code/cursor/
|
|
268
|
+
// etc, with zero manifest record of them — permanently unreachable by
|
|
269
|
+
// `agent uninstall`, and silently dropped by a subsequent re-install's
|
|
270
|
+
// carryForwardPriorBackups(). This is expected, narrow failure (a scope
|
|
271
|
+
// request AntiGravity specifically can't satisfy), not a programming
|
|
272
|
+
// bug, so it degrades to a normal not-detected report row instead of
|
|
273
|
+
// aborting the run; any OTHER error still propagates unchanged.
|
|
274
|
+
let workspaceRoot;
|
|
275
|
+
let scopeTarget;
|
|
276
|
+
try {
|
|
277
|
+
scopeTarget = resolveScopedSkillsDir({
|
|
278
|
+
client: 'antigravity',
|
|
279
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
280
|
+
explicitScope: opts.scope === 'workspace' ? 'workspace' : undefined,
|
|
281
|
+
envScope: '',
|
|
282
|
+
configDefaultScope: null,
|
|
283
|
+
});
|
|
284
|
+
// `scopeTarget.workspaceRoot` is only ever set when `scope === 'workspace'`
|
|
285
|
+
// (`ResolvedSkillScope`'s own contract) — narrowing through a single
|
|
286
|
+
// local avoids re-deriving that condition twice across the branches below.
|
|
287
|
+
workspaceRoot = scopeTarget.scope === 'workspace' ? scopeTarget.workspaceRoot : undefined;
|
|
288
|
+
}
|
|
289
|
+
catch (err) {
|
|
290
|
+
if (!(err instanceof UnsatisfiableWorkspaceScopeError))
|
|
291
|
+
throw err;
|
|
292
|
+
antigravityReport.notes.push(`AntiGravity workspace scope could not be resolved: ${err.message}`);
|
|
293
|
+
}
|
|
294
|
+
antigravityReport.detected = Boolean(workspaceRoot);
|
|
295
|
+
if (workspaceRoot && scopeTarget) {
|
|
296
|
+
writeSkillPackFor(scopeTarget.dir, skillArtifact.content, ctx, 'antigravity');
|
|
297
|
+
antigravityReport.skillPackWritten = true;
|
|
298
|
+
if (scopeTarget.created) {
|
|
299
|
+
antigravityReport.notes.push(`Created workspace skills directory: ${scopeTarget.dir}`);
|
|
300
|
+
}
|
|
301
|
+
installAntigravityMcpConfig(workspaceRoot, ctx, antigravityReport);
|
|
302
|
+
}
|
|
303
|
+
else if (antigravityReport.notes.length === 0) {
|
|
304
|
+
antigravityReport.notes.push('No .agents/ workspace directory found at or above the current directory, and ' +
|
|
305
|
+
'--scope workspace was not passed — AntiGravity was not configured. Run ' +
|
|
306
|
+
'`agent install --scope workspace` from inside your repository to create it.');
|
|
307
|
+
}
|
|
308
|
+
reports.push(antigravityReport);
|
|
309
|
+
}
|
|
216
310
|
saveAgentManifest({
|
|
217
311
|
schemaVersion: 1,
|
|
218
312
|
installedAt: new Date().toISOString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-pack-installer.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,33 @@ export interface AgentInstallOptions {
|
|
|
24
24
|
homeDir?: string;
|
|
25
25
|
/** Overwrite a foreign (non-Skillsmith) MCP/hook config entry instead of refusing. Default false. */
|
|
26
26
|
force?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* ADR-139 (SMI-6274 Wave 4, point 5's Wave 5 bootstrap requirement):
|
|
29
|
+
* `'workspace'` bootstraps AntiGravity as a target by resolving (and, if
|
|
30
|
+
* necessary, CREATING) its workspace-scoped `.agents/` directory via
|
|
31
|
+
* `resolveScopedSkillsDir()`, then writing the skill pack AND
|
|
32
|
+
* `.agents/mcp_config.json` there (SMI-6275 Wave 5 adds the latter) —
|
|
33
|
+
* this is the ONLY path that may CREATE `.agents/`.
|
|
34
|
+
*
|
|
35
|
+
* Omitted/`'global'` does NOT mean "AntiGravity untouched," despite the
|
|
36
|
+
* name — bare `agent install` still AUTO-DETECTS an already-EXISTING
|
|
37
|
+
* `.agents/` marker at or above `cwd` (ADR-139 point 2 rank 4, a
|
|
38
|
+
* read-only check that never creates anything) and, when found, installs
|
|
39
|
+
* the same skill pack + MCP config there. AntiGravity is only skipped
|
|
40
|
+
* entirely (reported `detected: false`, with a note — never a silent
|
|
41
|
+
* omission) when NO `.agents/` marker exists anywhere in the ancestry AND
|
|
42
|
+
* `scope` wasn't explicitly `'workspace'`. This auto-detect behavior is
|
|
43
|
+
* new in SMI-6275 Wave 5 — Wave 4 gated the skill-pack write on an
|
|
44
|
+
* explicit `'workspace'` value ONLY (see git history if comparing against
|
|
45
|
+
* that wave's own tests).
|
|
46
|
+
*/
|
|
47
|
+
scope?: 'global' | 'workspace';
|
|
48
|
+
/**
|
|
49
|
+
* Test seam for the workspace-scope resolution above — defaults to
|
|
50
|
+
* `process.cwd()`. Mirrors `homeDir`'s existing test-injection role for
|
|
51
|
+
* the rest of this installer.
|
|
52
|
+
*/
|
|
53
|
+
cwd?: string;
|
|
27
54
|
}
|
|
28
55
|
export interface AgentInstallResult {
|
|
29
56
|
installedAt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-pack-installer.types.d.ts","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAEhE,+CAA+C;AAC/C,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.types.d.ts","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAEhE,+CAA+C;AAC/C,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CActE,CAAA;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,OAAO,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,WAAW,GAAG,IAAI,CAAA;IAC7B,UAAU,EAAE,WAAW,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qGAAqG;IACrG,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAA;IAC9B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,oBAAoB,EAAE,CAAA;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,4GAA4G;IAC5G,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,6FAA6F;IAC7F,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB"}
|
|
@@ -12,5 +12,11 @@ export const HARNESS_SUPPORT_TIER = {
|
|
|
12
12
|
opencode: 2,
|
|
13
13
|
hermes: 2,
|
|
14
14
|
windsurf: 3,
|
|
15
|
+
// SMI-6275 Wave 5: MCP config only (no shim, no hooks) — same reduced
|
|
16
|
+
// profile as windsurf, stated explicitly per the wave's own "support tier"
|
|
17
|
+
// decision requirement (see HOOK_HARNESSES's doc comment,
|
|
18
|
+
// services/agent-pack/types.ts, and AGENT_SHIM_TARGETS.antigravity,
|
|
19
|
+
// agent-harness-targets.ts).
|
|
20
|
+
antigravity: 3,
|
|
15
21
|
};
|
|
16
22
|
//# sourceMappingURL=agent-pack-installer.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-pack-installer.types.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,CAAC,MAAM,oBAAoB,GAA0C;IACzE,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.types.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,CAAC,MAAM,oBAAoB,GAA0C;IACzE,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,sEAAsE;IACtE,2EAA2E;IAC3E,0DAA0D;IAC1D,oEAAoE;IACpE,6BAA6B;IAC7B,WAAW,EAAE,CAAC;CACf,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.workspace-scope.test.d.ts","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.workspace-scope.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview ADR-139 (SMI-6274 Wave 4) point 5's Wave 5 bootstrap
|
|
3
|
+
* requirement — `installAgentPack({ scope: 'workspace' })` must be the
|
|
4
|
+
* ONLY thing that can CREATE `.agents/skills` when it doesn't exist yet.
|
|
5
|
+
* Split from the sibling `agent-pack-installer.test.ts` (already at the
|
|
6
|
+
* 500-line gate) following this file family's existing
|
|
7
|
+
* `.cursor-hooks.test.ts`/`.cursor-mcp.test.ts` sibling convention.
|
|
8
|
+
*
|
|
9
|
+
* SMI-6275 Wave 5 correction to this file's own original assertions: Wave
|
|
10
|
+
* 4 omitted the `antigravity` report row entirely when no workspace scope
|
|
11
|
+
* resolved — this test file originally asserted exactly that omission.
|
|
12
|
+
* Wave 5's own required test ("no `.agents/` directory and no `--scope
|
|
13
|
+
* workspace` → clear message, no silent no-op — match whatever 'not
|
|
14
|
+
* detected' reporting shape other undetected harnesses already use")
|
|
15
|
+
* corrects that: AntiGravity now ALWAYS gets a row, `detected: false`
|
|
16
|
+
* with an explanatory note when its workspace scope doesn't resolve,
|
|
17
|
+
* matching every other harness's reporting shape. The first test below is
|
|
18
|
+
* updated accordingly. MCP-config-specific coverage (schema, idempotency,
|
|
19
|
+
* conflict/force, uninstall) lives in the sibling
|
|
20
|
+
* `agent-pack-installer.antigravity-mcp.test.ts`.
|
|
21
|
+
* @module @skillsmith/core/install/agent-pack-installer.workspace-scope.test
|
|
22
|
+
* @see ADR-139 required test 15.
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
|
|
25
|
+
import { tmpdir } from 'node:os';
|
|
26
|
+
import { join } from 'node:path';
|
|
27
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
28
|
+
import { installAgentPack } from './agent-pack-installer.js';
|
|
29
|
+
import { uninstallAgentPack } from './agent-pack-uninstaller.js';
|
|
30
|
+
import { AGENT_INSTALL_DIR_ENV_VAR } from './agent-manifest.js';
|
|
31
|
+
import { CLIENT_NATIVE_PATHS } from './paths.js';
|
|
32
|
+
import { relocateUnderHome } from './agent-home-relocate.js';
|
|
33
|
+
let homeDir;
|
|
34
|
+
let workspaceDir;
|
|
35
|
+
let manifestDir;
|
|
36
|
+
let prevInstallDirEnv;
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
homeDir = mkdtempSync(join(tmpdir(), 'skillsmith-agent-install-home-'));
|
|
39
|
+
workspaceDir = mkdtempSync(join(tmpdir(), 'skillsmith-agent-install-workspace-'));
|
|
40
|
+
mkdirSync(join(workspaceDir, '.git'), { recursive: true });
|
|
41
|
+
manifestDir = mkdtempSync(join(tmpdir(), 'skillsmith-agent-install-manifest-'));
|
|
42
|
+
prevInstallDirEnv = process.env[AGENT_INSTALL_DIR_ENV_VAR];
|
|
43
|
+
process.env[AGENT_INSTALL_DIR_ENV_VAR] = manifestDir;
|
|
44
|
+
});
|
|
45
|
+
afterEach(() => {
|
|
46
|
+
rmSync(homeDir, { recursive: true, force: true });
|
|
47
|
+
rmSync(workspaceDir, { recursive: true, force: true });
|
|
48
|
+
rmSync(manifestDir, { recursive: true, force: true });
|
|
49
|
+
if (prevInstallDirEnv !== undefined)
|
|
50
|
+
process.env[AGENT_INSTALL_DIR_ENV_VAR] = prevInstallDirEnv;
|
|
51
|
+
else
|
|
52
|
+
delete process.env[AGENT_INSTALL_DIR_ENV_VAR];
|
|
53
|
+
});
|
|
54
|
+
describe('installAgentPack --scope workspace (ADR-139 point 5, required test 15)', () => {
|
|
55
|
+
it('bare `agent install` (no scope, no existing .agents/) never creates .agents/skills, and reports antigravity as not detected — SMI-6275 Wave 5 correction: a row is now ALWAYS present, matching every other harness', () => {
|
|
56
|
+
const result = installAgentPack({ homeDir, cwd: workspaceDir });
|
|
57
|
+
expect(existsSync(join(workspaceDir, '.agents', 'skills'))).toBe(false);
|
|
58
|
+
const antigravityReport = result.harnessReports.find((r) => r.harness === 'antigravity');
|
|
59
|
+
expect(antigravityReport).toBeDefined();
|
|
60
|
+
expect(antigravityReport?.detected).toBe(false);
|
|
61
|
+
expect(antigravityReport?.skillPackWritten).toBe(false);
|
|
62
|
+
expect(antigravityReport?.mcpConfig).toBeNull();
|
|
63
|
+
// Clear message, not a silent no-op (SMI-6275 Wave 5 required test).
|
|
64
|
+
expect(antigravityReport?.notes.some((n) => n.includes('No .agents/') && n.includes('--scope workspace'))).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it('bare `agent install` (no scope) AUTO-DETECTS an already-existing .agents/skills marker and configures AntiGravity — SMI-6275 Wave 5', () => {
|
|
67
|
+
mkdirSync(join(workspaceDir, '.agents', 'skills'), { recursive: true });
|
|
68
|
+
const result = installAgentPack({ homeDir, cwd: workspaceDir });
|
|
69
|
+
const skillPackPath = join(workspaceDir, '.agents', 'skills', 'skillsmith-agent', 'SKILL.md');
|
|
70
|
+
expect(existsSync(skillPackPath)).toBe(true);
|
|
71
|
+
const mcpConfigPath = join(workspaceDir, '.agents', 'mcp_config.json');
|
|
72
|
+
expect(existsSync(mcpConfigPath)).toBe(true);
|
|
73
|
+
const antigravityReport = result.harnessReports.find((r) => r.harness === 'antigravity');
|
|
74
|
+
expect(antigravityReport?.detected).toBe(true);
|
|
75
|
+
expect(antigravityReport?.skillPackWritten).toBe(true);
|
|
76
|
+
expect(antigravityReport?.mcpConfig?.status).toBe('created');
|
|
77
|
+
// Auto-detect never creates — the marker already existed.
|
|
78
|
+
expect(antigravityReport?.notes.some((n) => n.includes('Created workspace'))).toBe(false);
|
|
79
|
+
});
|
|
80
|
+
it('`--scope workspace` in a repository with no .agents/ creates it and registers antigravity as a target, writing both the skill pack and mcp_config.json', () => {
|
|
81
|
+
expect(existsSync(join(workspaceDir, '.agents'))).toBe(false);
|
|
82
|
+
const result = installAgentPack({ homeDir, cwd: workspaceDir, scope: 'workspace' });
|
|
83
|
+
const skillPackPath = join(workspaceDir, '.agents', 'skills', 'skillsmith-agent', 'SKILL.md');
|
|
84
|
+
expect(existsSync(skillPackPath)).toBe(true);
|
|
85
|
+
expect(readFileSync(skillPackPath, 'utf-8').length).toBeGreaterThan(0);
|
|
86
|
+
const mcpConfigPath = join(workspaceDir, '.agents', 'mcp_config.json');
|
|
87
|
+
expect(existsSync(mcpConfigPath)).toBe(true);
|
|
88
|
+
const antigravityReport = result.harnessReports.find((r) => r.harness === 'antigravity');
|
|
89
|
+
expect(antigravityReport).toBeDefined();
|
|
90
|
+
expect(antigravityReport?.detected).toBe(true);
|
|
91
|
+
expect(antigravityReport?.skillPackWritten).toBe(true);
|
|
92
|
+
expect(antigravityReport?.mcpConfig?.status).toBe('created');
|
|
93
|
+
expect(antigravityReport?.notes.some((n) => n.includes('Created workspace'))).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
it('`--scope workspace` when .agents/skills already exists writes into it without a "Created" note', () => {
|
|
96
|
+
mkdirSync(join(workspaceDir, '.agents', 'skills'), { recursive: true });
|
|
97
|
+
const result = installAgentPack({ homeDir, cwd: workspaceDir, scope: 'workspace' });
|
|
98
|
+
const antigravityReport = result.harnessReports.find((r) => r.harness === 'antigravity');
|
|
99
|
+
expect(antigravityReport?.skillPackWritten).toBe(true);
|
|
100
|
+
expect(antigravityReport?.notes.some((n) => n.includes('Created workspace'))).toBe(false);
|
|
101
|
+
});
|
|
102
|
+
// GPT-5.6-Sol pr-reviewer finding (SMI-6275 Wave 5): resolveScopedSkillsDir()
|
|
103
|
+
// throws UnsatisfiableWorkspaceScopeError when `--scope workspace` can't be
|
|
104
|
+
// satisfied (no .agents/ marker AND no ancestor .git). Before the fix, that
|
|
105
|
+
// throw propagated out of installAgentPack() entirely, skipping
|
|
106
|
+
// saveAgentManifest() and losing every OTHER harness's already-written
|
|
107
|
+
// entries — real files on disk with no manifest record, unreachable by
|
|
108
|
+
// `agent uninstall`.
|
|
109
|
+
it('`--scope workspace` outside any workspace (no .agents/, no ancestor .git) does not throw, reports antigravity as not detected with the resolver error, and still persists every other harness to the manifest', () => {
|
|
110
|
+
const bareDir = mkdtempSync(join(tmpdir(), 'skillsmith-agent-install-bare-'));
|
|
111
|
+
try {
|
|
112
|
+
let result;
|
|
113
|
+
expect(() => {
|
|
114
|
+
result = installAgentPack({ homeDir, cwd: bareDir, scope: 'workspace' });
|
|
115
|
+
}).not.toThrow();
|
|
116
|
+
const antigravityReport = result?.harnessReports.find((r) => r.harness === 'antigravity');
|
|
117
|
+
expect(antigravityReport?.detected).toBe(false);
|
|
118
|
+
expect(antigravityReport?.skillPackWritten).toBe(false);
|
|
119
|
+
expect(antigravityReport?.notes.some((n) => n.includes('workspace scope could not be resolved'))).toBe(true);
|
|
120
|
+
// Proof the manifest actually recorded every other harness's writes
|
|
121
|
+
// (not just that the files exist on disk, which would be true even
|
|
122
|
+
// with the bug — the bug was the MANIFEST being skipped): a real
|
|
123
|
+
// installer-written file from a harness untouched by this failure
|
|
124
|
+
// must still exist...
|
|
125
|
+
const claudeSkillPath = join(relocateUnderHome(CLIENT_NATIVE_PATHS['claude-code'], homeDir), 'skillsmith-agent', 'SKILL.md');
|
|
126
|
+
expect(existsSync(claudeSkillPath)).toBe(true);
|
|
127
|
+
// ...and uninstallAgentPack (which replays ONLY the manifest, never
|
|
128
|
+
// re-deriving "what the generator would currently produce") must be
|
|
129
|
+
// able to find and remove it — impossible unless saveAgentManifest()
|
|
130
|
+
// was actually reached despite the AntiGravity resolver's throw.
|
|
131
|
+
const uninstallResult = uninstallAgentPack();
|
|
132
|
+
expect(uninstallResult.removed).toContain(claudeSkillPath);
|
|
133
|
+
expect(existsSync(claudeSkillPath)).toBe(false);
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
rmSync(bareDir, { recursive: true, force: true });
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
it('every other harness report is unaffected by --scope workspace', () => {
|
|
140
|
+
const withoutScope = installAgentPack({ homeDir, cwd: workspaceDir });
|
|
141
|
+
rmSync(homeDir, { recursive: true, force: true });
|
|
142
|
+
homeDir = mkdtempSync(join(tmpdir(), 'skillsmith-agent-install-home-'));
|
|
143
|
+
const withScope = installAgentPack({ homeDir, cwd: workspaceDir, scope: 'workspace' });
|
|
144
|
+
const nonAntigravity = (r) => r.filter((x) => x.harness !== 'antigravity').map((x) => x.harness);
|
|
145
|
+
expect(nonAntigravity(withScope.harnessReports)).toEqual(nonAntigravity(withoutScope.harnessReports));
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
//# sourceMappingURL=agent-pack-installer.workspace-scope.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.workspace-scope.test.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.workspace-scope.test.ts"],"names":[],"mappings":"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"}
|