@ngocsangairvds/vsaf 4.2.14 → 5.0.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/package.json +3 -1
- package/packages/cli/dist/adapters/adapter.d.ts +49 -0
- package/packages/cli/dist/adapters/adapter.d.ts.map +1 -0
- package/packages/cli/dist/adapters/adapter.js +19 -0
- package/packages/cli/dist/adapters/adapter.js.map +1 -0
- package/packages/cli/dist/adapters/antigravity.d.ts +5 -0
- package/packages/cli/dist/adapters/antigravity.d.ts.map +1 -0
- package/packages/cli/dist/adapters/antigravity.js +74 -0
- package/packages/cli/dist/adapters/antigravity.js.map +1 -0
- package/packages/cli/dist/adapters/claude.d.ts +3 -0
- package/packages/cli/dist/adapters/claude.d.ts.map +1 -0
- package/packages/cli/dist/adapters/claude.js +34 -0
- package/packages/cli/dist/adapters/claude.js.map +1 -0
- package/packages/cli/dist/adapters/codex.d.ts +3 -0
- package/packages/cli/dist/adapters/codex.d.ts.map +1 -0
- package/packages/cli/dist/adapters/codex.js +54 -0
- package/packages/cli/dist/adapters/codex.js.map +1 -0
- package/packages/cli/dist/adapters/cursor.d.ts +3 -0
- package/packages/cli/dist/adapters/cursor.d.ts.map +1 -0
- package/packages/cli/dist/adapters/cursor.js +59 -0
- package/packages/cli/dist/adapters/cursor.js.map +1 -0
- package/packages/cli/dist/adapters/registry.d.ts +4 -0
- package/packages/cli/dist/adapters/registry.d.ts.map +1 -0
- package/packages/cli/dist/adapters/registry.js +24 -0
- package/packages/cli/dist/adapters/registry.js.map +1 -0
- package/packages/cli/dist/adapters/shared.d.ts +29 -0
- package/packages/cli/dist/adapters/shared.d.ts.map +1 -0
- package/packages/cli/dist/adapters/shared.js +105 -0
- package/packages/cli/dist/adapters/shared.js.map +1 -0
- package/packages/cli/dist/adapters/toml-mcp.d.ts +16 -0
- package/packages/cli/dist/adapters/toml-mcp.d.ts.map +1 -0
- package/packages/cli/dist/adapters/toml-mcp.js +61 -0
- package/packages/cli/dist/adapters/toml-mcp.js.map +1 -0
- package/packages/cli/dist/commands/install.d.ts +4 -0
- package/packages/cli/dist/commands/install.d.ts.map +1 -1
- package/packages/cli/dist/commands/install.js +5 -2
- package/packages/cli/dist/commands/install.js.map +1 -1
- package/packages/cli/dist/index.js +16 -4
- package/packages/cli/dist/index.js.map +1 -1
- package/packages/cli/dist/install/config.d.ts +23 -0
- package/packages/cli/dist/install/config.d.ts.map +1 -0
- package/packages/cli/dist/install/config.js +75 -0
- package/packages/cli/dist/install/config.js.map +1 -0
- package/packages/cli/dist/install/ide-selection.d.ts +15 -0
- package/packages/cli/dist/install/ide-selection.d.ts.map +1 -0
- package/packages/cli/dist/install/ide-selection.js +56 -0
- package/packages/cli/dist/install/ide-selection.js.map +1 -0
- package/packages/cli/dist/install/orchestrator.d.ts +12 -0
- package/packages/cli/dist/install/orchestrator.d.ts.map +1 -0
- package/packages/cli/dist/install/orchestrator.js +67 -0
- package/packages/cli/dist/install/orchestrator.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngocsangairvds/vsaf",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "logging step",
|
|
5
5
|
"main": "packages/core/dist/index.js",
|
|
6
6
|
"types": "packages/core/dist/index.d.ts",
|
|
@@ -48,6 +48,8 @@
|
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@fastify/cors": "^11.2.0",
|
|
50
50
|
"@fastify/static": "^9.1.3",
|
|
51
|
+
"@iarna/toml": "^2.2.5",
|
|
52
|
+
"@inquirer/checkbox": "^4.3.2",
|
|
51
53
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
52
54
|
"chalk": "^5.3.0",
|
|
53
55
|
"commander": "^12.1.0",
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { DeployResult, BinaryCheck, InternalInstallOptions } from '../commands/install.js';
|
|
2
|
+
import type { PackInfo } from '../commands/skill.js';
|
|
3
|
+
/** The four supported target IDEs. */
|
|
4
|
+
export type IdeId = 'claude' | 'cursor' | 'codex' | 'antigravity';
|
|
5
|
+
export declare const ALL_IDES: readonly IdeId[];
|
|
6
|
+
export declare function isIdeId(value: string): value is IdeId;
|
|
7
|
+
/** Everything an adapter needs to install one pack into one project. */
|
|
8
|
+
export interface AdapterContext {
|
|
9
|
+
projectPath: string;
|
|
10
|
+
packDir: string;
|
|
11
|
+
packName: string;
|
|
12
|
+
packInfo: PackInfo;
|
|
13
|
+
/** Skill names already resolved for deployment (pack skills + bundled). */
|
|
14
|
+
deployedSkillNames: string[];
|
|
15
|
+
options: InternalInstallOptions;
|
|
16
|
+
}
|
|
17
|
+
/** Per-IDE outcome, aggregated by the orchestrator for the summary. */
|
|
18
|
+
export interface AdapterResult {
|
|
19
|
+
ide: IdeId;
|
|
20
|
+
skills: DeployResult;
|
|
21
|
+
commands: string[];
|
|
22
|
+
mcp: {
|
|
23
|
+
path: string;
|
|
24
|
+
servers: string[];
|
|
25
|
+
} | null;
|
|
26
|
+
binaries: BinaryCheck[];
|
|
27
|
+
warnings: string[];
|
|
28
|
+
errors: string[];
|
|
29
|
+
}
|
|
30
|
+
/** Create an empty result for an IDE — adapters fill it in as they progress. */
|
|
31
|
+
export declare function emptyResult(ide: IdeId): AdapterResult;
|
|
32
|
+
/**
|
|
33
|
+
* A platform adapter. Public surface is intentionally small (Deep Module): a
|
|
34
|
+
* single `install` entry composes the per-step work (deploy skills, scaffold
|
|
35
|
+
* commands, wire MCP, write instructions, install binaries) using shared
|
|
36
|
+
* helpers. The orchestrator only resolves selection and loops adapters.
|
|
37
|
+
*/
|
|
38
|
+
export interface PlatformAdapter {
|
|
39
|
+
readonly id: IdeId;
|
|
40
|
+
/** True if this IDE appears installed on the machine (for TUI pre-tick). */
|
|
41
|
+
detect(projectPath: string): boolean;
|
|
42
|
+
/** `graphify install --platform <x>` token, or null when graphify is N/A. */
|
|
43
|
+
readonly graphifyPlatform: string | null;
|
|
44
|
+
/** Binaries this IDE needs for the given pack (drives shared install + dedupe). */
|
|
45
|
+
requiredBinaries(pack: string): string[];
|
|
46
|
+
/** Materialise the pack's artifacts for this IDE. */
|
|
47
|
+
install(ctx: AdapterContext): AdapterResult;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,sCAAsC;AACtC,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AAElE,eAAO,MAAM,QAAQ,EAAE,SAAS,KAAK,EAA0D,CAAC;AAEhG,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,KAAK,CAErD;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,KAAK,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAChD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,KAAK,GAAG,aAAa,CAErD;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,4EAA4E;IAC5E,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mFAAmF;IACnF,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,qDAAqD;IACrD,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,aAAa,CAAC;CAC7C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/cli/src/adapters/adapter.ts
|
|
3
|
+
// Platform Adapter contract — one adapter per target IDE/agent.
|
|
4
|
+
// Orchestrator (execInstall) iterates the selected adapters; each adapter knows
|
|
5
|
+
// how to materialise a pack's artifacts (skills, commands, MCP, instructions,
|
|
6
|
+
// binaries) for its own platform. Heavy file/merge logic lives in ./shared.ts.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ALL_IDES = void 0;
|
|
9
|
+
exports.isIdeId = isIdeId;
|
|
10
|
+
exports.emptyResult = emptyResult;
|
|
11
|
+
exports.ALL_IDES = ['claude', 'cursor', 'codex', 'antigravity'];
|
|
12
|
+
function isIdeId(value) {
|
|
13
|
+
return exports.ALL_IDES.includes(value);
|
|
14
|
+
}
|
|
15
|
+
/** Create an empty result for an IDE — adapters fill it in as they progress. */
|
|
16
|
+
function emptyResult(ide) {
|
|
17
|
+
return { ide, skills: { deployed: [], skipped: [] }, commands: [], mcp: null, binaries: [], warnings: [], errors: [] };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapters/adapter.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,gEAAgE;AAChE,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;;;AAU/E,0BAEC;AAyBD,kCAEC;AA/BY,QAAA,QAAQ,GAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAU,CAAC;AAEhG,SAAgB,OAAO,CAAC,KAAa;IACnC,OAAQ,gBAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAwBD,gFAAgF;AAChF,SAAgB,WAAW,CAAC,GAAU;IACpC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACzH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type PlatformAdapter } from './adapter.js';
|
|
2
|
+
/** Global Antigravity MCP config path (home-level only). */
|
|
3
|
+
export declare function antigravityMcpPath(home: string): string;
|
|
4
|
+
export declare const antigravityAdapter: PlatformAdapter;
|
|
5
|
+
//# sourceMappingURL=antigravity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../src/adapters/antigravity.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,eAAe,EAAwD,MAAM,cAAc,CAAC;AAG1G,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,eAAO,MAAM,kBAAkB,EAAE,eA6DhC,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/cli/src/adapters/antigravity.ts
|
|
3
|
+
// Antigravity (Google `agy`) adapter. Antigravity has no skill object — it reads
|
|
4
|
+
// rules + workflows from .agents/ (project) and MCP from the GLOBAL file
|
|
5
|
+
// ~/.gemini/antigravity/mcp_config.json (Claude-Desktop JSON; local bins need
|
|
6
|
+
// absolute paths). Each VSAF skill becomes a /name workflow.
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.antigravityAdapter = void 0;
|
|
12
|
+
exports.antigravityMcpPath = antigravityMcpPath;
|
|
13
|
+
const fs_1 = require("fs");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
const os_1 = require("os");
|
|
16
|
+
const gray_matter_1 = __importDefault(require("gray-matter"));
|
|
17
|
+
const adapter_js_1 = require("./adapter.js");
|
|
18
|
+
const shared_js_1 = require("./shared.js");
|
|
19
|
+
/** Global Antigravity MCP config path (home-level only). */
|
|
20
|
+
function antigravityMcpPath(home) {
|
|
21
|
+
return (0, path_1.join)(home, '.gemini', 'antigravity', 'mcp_config.json');
|
|
22
|
+
}
|
|
23
|
+
exports.antigravityAdapter = {
|
|
24
|
+
id: 'antigravity',
|
|
25
|
+
graphifyPlatform: 'antigravity',
|
|
26
|
+
detect(projectPath) {
|
|
27
|
+
void projectPath;
|
|
28
|
+
return (0, fs_1.existsSync)((0, path_1.join)((0, os_1.homedir)(), '.gemini', 'antigravity'));
|
|
29
|
+
},
|
|
30
|
+
requiredBinaries(pack) {
|
|
31
|
+
return pack === 'sdlc' ? ['graphify', 'gitnexus'] : ['gitnexus'];
|
|
32
|
+
},
|
|
33
|
+
install(ctx) {
|
|
34
|
+
const result = (0, adapter_js_1.emptyResult)('antigravity');
|
|
35
|
+
const agentsDir = (0, path_1.join)(ctx.projectPath, '.agents');
|
|
36
|
+
const workflowsDir = (0, path_1.join)(agentsDir, 'workflows');
|
|
37
|
+
const rulesDir = (0, path_1.join)(agentsDir, 'rules');
|
|
38
|
+
(0, fs_1.mkdirSync)(workflowsDir, { recursive: true });
|
|
39
|
+
(0, fs_1.mkdirSync)(rulesDir, { recursive: true });
|
|
40
|
+
// 1. Each skill → a /name workflow (frontmatter + body). No native skill concept.
|
|
41
|
+
const workflowNames = [];
|
|
42
|
+
for (const name of ctx.deployedSkillNames) {
|
|
43
|
+
if (shared_js_1.SKIP_SKILLS.includes(name))
|
|
44
|
+
continue; // parity with deploySkills (e.g. 'setup')
|
|
45
|
+
const srcSkill = (0, path_1.join)(ctx.packDir, name, 'SKILL.md');
|
|
46
|
+
if (!(0, fs_1.existsSync)(srcSkill))
|
|
47
|
+
continue;
|
|
48
|
+
const raw = (0, fs_1.readFileSync)(srcSkill, 'utf-8');
|
|
49
|
+
const { data, content } = (0, gray_matter_1.default)(raw);
|
|
50
|
+
const description = typeof data.description === 'string' ? data.description : name;
|
|
51
|
+
const wfName = `${ctx.packName}-${name}`;
|
|
52
|
+
const wf = `---\nname: ${wfName}\ndescription: ${description}\n---\n\n${content}`;
|
|
53
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(workflowsDir, `${wfName}.md`), wf, 'utf-8');
|
|
54
|
+
workflowNames.push(wfName);
|
|
55
|
+
}
|
|
56
|
+
result.commands = workflowNames;
|
|
57
|
+
// 2. Rules summary listing the workflows.
|
|
58
|
+
const ruleBody = `---\nname: vsaf-${ctx.packName}\ndescription: VSAF ${ctx.packName} workflows for Antigravity\n---\n\n`
|
|
59
|
+
+ `# VSAF ${ctx.packName}\n\nWorkflows (invoke with \`/name\`):\n`
|
|
60
|
+
+ workflowNames.map(w => `- \`/${w}\``).join('\n') + '\n';
|
|
61
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(rulesDir, `vsaf-${ctx.packName}.md`), ruleBody, 'utf-8');
|
|
62
|
+
// 3. MCP → GLOBAL ~/.gemini/antigravity/mcp_config.json (absolute bin via getGitnexusMcpEntry).
|
|
63
|
+
const home = ctx.options._homeDir ?? (0, os_1.homedir)();
|
|
64
|
+
result.mcp = (0, shared_js_1.writeJsonMcp)(antigravityMcpPath(home), { vsaf: (0, shared_js_1.getVsafMcpEntry)(), gitnexus: (0, shared_js_1.getGitnexusMcpEntry)() });
|
|
65
|
+
// 4. Instruction marker block in AGENTS.md.
|
|
66
|
+
(0, shared_js_1.writeMarkerFile)((0, path_1.join)(ctx.projectPath, 'AGENTS.md'), `pack=${ctx.packName} ide=antigravity`, `## VSAF \`${ctx.packName}\` (Antigravity)\n\nWorkflows: \`.agents/workflows/\` (\`/name\`) · Rules: \`.agents/rules/\` · MCP: \`~/.gemini/antigravity/mcp_config.json\` (vsaf + gitnexus, global).`);
|
|
67
|
+
// 5. Binaries.
|
|
68
|
+
if (!ctx.options._skipGraphify && !(0, shared_js_1.installGraphifyPlatform)('antigravity')) {
|
|
69
|
+
result.warnings.push('graphify antigravity install failed — run: graphify install --platform antigravity');
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=antigravity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/adapters/antigravity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,eAAe,EAAwD,MAAM,cAAc,CAAC;AAE1G,eAAO,MAAM,aAAa,EAAE,eAwB3B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/cli/src/adapters/claude.ts
|
|
3
|
+
// Claude Code adapter. Delegates to the proven execInstall so the Claude output
|
|
4
|
+
// stays byte-identical to pre-refactor behaviour (NFR-001, golden gate). New IDEs
|
|
5
|
+
// (cursor/codex/antigravity) compose shared helpers instead.
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.claudeAdapter = void 0;
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const install_js_1 = require("../commands/install.js");
|
|
11
|
+
const adapter_js_1 = require("./adapter.js");
|
|
12
|
+
exports.claudeAdapter = {
|
|
13
|
+
id: 'claude',
|
|
14
|
+
graphifyPlatform: 'claude',
|
|
15
|
+
detect(projectPath) {
|
|
16
|
+
return (0, fs_1.existsSync)((0, path_1.join)(projectPath, '.claude'));
|
|
17
|
+
},
|
|
18
|
+
requiredBinaries(pack) {
|
|
19
|
+
return pack === 'sdlc' ? ['graphify', 'markitdown', 'gitnexus'] : [];
|
|
20
|
+
},
|
|
21
|
+
install(ctx) {
|
|
22
|
+
const result = (0, adapter_js_1.emptyResult)('claude');
|
|
23
|
+
const r = (0, install_js_1.execInstall)(ctx.packName, ctx.projectPath, ctx.options);
|
|
24
|
+
result.skills = r.deploy;
|
|
25
|
+
result.commands = r.init.commandsCreated;
|
|
26
|
+
result.mcp = { path: (0, path_1.join)(ctx.projectPath, '.mcp.json'), servers: ['vsaf', 'gitnexus'] };
|
|
27
|
+
result.binaries = r.binaries;
|
|
28
|
+
if (r.graphify && r.graphify.installed === false && r.graphify.error) {
|
|
29
|
+
result.warnings.push(`graphify: ${r.graphify.error}`);
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,gFAAgF;AAChF,kFAAkF;AAClF,6DAA6D;;;AAE7D,2BAAgC;AAChC,+BAA4B;AAC5B,uDAAqD;AACrD,6CAA0G;AAE7F,QAAA,aAAa,GAAoB;IAC5C,EAAE,EAAE,QAAQ;IACZ,gBAAgB,EAAE,QAAQ;IAE1B,MAAM,CAAC,WAAmB;QACxB,OAAO,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,OAAO,CAAC,GAAmB;QACzB,MAAM,MAAM,GAAG,IAAA,wBAAW,EAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACzB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;QACzC,MAAM,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,IAAA,WAAI,EAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QACzF,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACrE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,eAAe,EAAwD,MAAM,cAAc,CAAC;AAW1G,eAAO,MAAM,YAAY,EAAE,eAgD1B,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/cli/src/adapters/codex.ts
|
|
3
|
+
// Codex adapter. Codex natively loads skills from .agents/skills/ (project), reads
|
|
4
|
+
// AGENTS.md for instructions, and takes project MCP from .codex/config.toml. No
|
|
5
|
+
// separate command files — the skill itself is the invocable unit.
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.codexAdapter = void 0;
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const os_1 = require("os");
|
|
11
|
+
const adapter_js_1 = require("./adapter.js");
|
|
12
|
+
const shared_js_1 = require("./shared.js");
|
|
13
|
+
const toml_mcp_js_1 = require("./toml-mcp.js");
|
|
14
|
+
/** Coerce an MCP entry (with possible `type` field) to Codex's command/args shape. */
|
|
15
|
+
function toTomlEntry(entry) {
|
|
16
|
+
const command = String(entry.command);
|
|
17
|
+
const args = Array.isArray(entry.args) ? entry.args.map(String) : undefined;
|
|
18
|
+
return args ? { command, args } : { command };
|
|
19
|
+
}
|
|
20
|
+
exports.codexAdapter = {
|
|
21
|
+
id: 'codex',
|
|
22
|
+
graphifyPlatform: 'codex',
|
|
23
|
+
detect(projectPath) {
|
|
24
|
+
return (0, fs_1.existsSync)((0, path_1.join)(projectPath, '.codex')) || (0, fs_1.existsSync)((0, path_1.join)((0, os_1.homedir)(), '.codex'));
|
|
25
|
+
},
|
|
26
|
+
requiredBinaries(pack) {
|
|
27
|
+
return pack === 'sdlc' ? ['graphify', 'gitnexus'] : ['gitnexus'];
|
|
28
|
+
},
|
|
29
|
+
install(ctx) {
|
|
30
|
+
const result = (0, adapter_js_1.emptyResult)('codex');
|
|
31
|
+
// 1. Skills → .agents/skills/ (native discovery), copied verbatim.
|
|
32
|
+
result.skills = (0, shared_js_1.deploySkills)(ctx.packDir, ctx.packName, ctx.deployedSkillNames, (0, path_1.join)(ctx.projectPath, '.agents', 'skills'), { force: ctx.options.force });
|
|
33
|
+
// 2. MCP → project .codex/config.toml (surgical merge, preserves trust).
|
|
34
|
+
const tomlPath = (0, path_1.join)(ctx.projectPath, '.codex', 'config.toml');
|
|
35
|
+
try {
|
|
36
|
+
result.mcp = (0, toml_mcp_js_1.writeTomlMcp)(tomlPath, {
|
|
37
|
+
vsaf: toTomlEntry((0, shared_js_1.getVsafMcpEntry)()),
|
|
38
|
+
gitnexus: toTomlEntry((0, shared_js_1.getGitnexusMcpEntry)()),
|
|
39
|
+
});
|
|
40
|
+
result.warnings.push('Codex MCP cần project được trust — chạy `codex` trong project và chấp nhận trust nếu được hỏi.');
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
result.warnings.push(`Không cập nhật được .codex/config.toml: ${err.message}`);
|
|
44
|
+
}
|
|
45
|
+
// 3. Instruction marker block in AGENTS.md.
|
|
46
|
+
(0, shared_js_1.writeMarkerFile)((0, path_1.join)(ctx.projectPath, 'AGENTS.md'), `pack=${ctx.packName} ide=codex`, `## VSAF \`${ctx.packName}\` (Codex)\n\nSkills: \`.agents/skills/\` (auto-loaded) · MCP: \`.codex/config.toml\` [mcp_servers] (vsaf + gitnexus).`);
|
|
47
|
+
// 4. Binaries.
|
|
48
|
+
if (!ctx.options._skipGraphify && !(0, shared_js_1.installGraphifyPlatform)('codex')) {
|
|
49
|
+
result.warnings.push('graphify codex install failed — run: graphify install --platform codex');
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":";AAAA,qCAAqC;AACrC,mFAAmF;AACnF,gFAAgF;AAChF,mEAAmE;;;AAEnE,2BAAgC;AAChC,+BAA4B;AAC5B,2BAA6B;AAC7B,6CAA0G;AAC1G,2CAA2H;AAC3H,+CAA6C;AAE7C,sFAAsF;AACtF,SAAS,WAAW,CAAC,KAA8B;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAEY,QAAA,YAAY,GAAoB;IAC3C,EAAE,EAAE,OAAO;IACX,gBAAgB,EAAE,OAAO;IAEzB,MAAM,CAAC,WAAmB;QACxB,OAAO,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,GAAmB;QACzB,MAAM,MAAM,GAAG,IAAA,wBAAW,EAAC,OAAO,CAAC,CAAC;QAEpC,mEAAmE;QACnE,MAAM,CAAC,MAAM,GAAG,IAAA,wBAAY,EAC1B,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,EACjD,IAAA,WAAI,EAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC1C,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAC7B,CAAC;QAEF,yEAAyE;QACzE,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,GAAG,IAAA,0BAAY,EAAC,QAAQ,EAAE;gBAClC,IAAI,EAAE,WAAW,CAAC,IAAA,2BAAe,GAAE,CAAC;gBACpC,QAAQ,EAAE,WAAW,CAAC,IAAA,+BAAmB,GAAE,CAAC;aAC7C,CAAC,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;QACzH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,2CAA4C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,4CAA4C;QAC5C,IAAA,2BAAe,EACb,IAAA,WAAI,EAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,EAClC,QAAQ,GAAG,CAAC,QAAQ,YAAY,EAChC,aAAa,GAAG,CAAC,QAAQ,wHAAwH,CAClJ,CAAC;QAEF,eAAe;QACf,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,IAAA,mCAAuB,EAAC,OAAO,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACjG,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,eAAe,EAAwD,MAAM,cAAc,CAAC;AAG1G,eAAO,MAAM,aAAa,EAAE,eAwD3B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/cli/src/adapters/cursor.ts
|
|
3
|
+
// Cursor adapter. Cursor has no native "skill" object: copy the skill folders to
|
|
4
|
+
// .cursor/skills/, expose each as a .cursor/rules/*.mdc rule + a .cursor/commands/*.md
|
|
5
|
+
// command (full SKILL.md body), and wire MCP to .cursor/mcp.json.
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.cursorAdapter = void 0;
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const gray_matter_1 = __importDefault(require("gray-matter"));
|
|
14
|
+
const adapter_js_1 = require("./adapter.js");
|
|
15
|
+
const shared_js_1 = require("./shared.js");
|
|
16
|
+
exports.cursorAdapter = {
|
|
17
|
+
id: 'cursor',
|
|
18
|
+
graphifyPlatform: 'cursor',
|
|
19
|
+
detect(projectPath) {
|
|
20
|
+
return (0, fs_1.existsSync)((0, path_1.join)(projectPath, '.cursor'));
|
|
21
|
+
},
|
|
22
|
+
requiredBinaries(pack) {
|
|
23
|
+
return pack === 'sdlc' ? ['graphify', 'gitnexus'] : ['gitnexus'];
|
|
24
|
+
},
|
|
25
|
+
install(ctx) {
|
|
26
|
+
const result = (0, adapter_js_1.emptyResult)('cursor');
|
|
27
|
+
const cursorDir = (0, path_1.join)(ctx.projectPath, '.cursor');
|
|
28
|
+
const skillsDir = (0, path_1.join)(cursorDir, 'skills');
|
|
29
|
+
const rulesDir = (0, path_1.join)(cursorDir, 'rules');
|
|
30
|
+
const commandsDir = (0, path_1.join)(cursorDir, 'commands');
|
|
31
|
+
// 1. Copy skill folders verbatim (prefixed), preserving supporting files.
|
|
32
|
+
result.skills = (0, shared_js_1.deploySkills)(ctx.packDir, ctx.packName, ctx.deployedSkillNames, skillsDir, { force: ctx.options.force });
|
|
33
|
+
(0, fs_1.mkdirSync)(rulesDir, { recursive: true });
|
|
34
|
+
(0, fs_1.mkdirSync)(commandsDir, { recursive: true });
|
|
35
|
+
// 2. Per deployed skill → rule (.mdc) + command (.md, full body).
|
|
36
|
+
for (const name of result.skills.deployed) {
|
|
37
|
+
const skillMd = (0, path_1.join)(skillsDir, name, 'SKILL.md');
|
|
38
|
+
if (!(0, fs_1.existsSync)(skillMd))
|
|
39
|
+
continue;
|
|
40
|
+
const raw = (0, fs_1.readFileSync)(skillMd, 'utf-8');
|
|
41
|
+
const { data, content } = (0, gray_matter_1.default)(raw);
|
|
42
|
+
const description = typeof data.description === 'string' ? data.description : name;
|
|
43
|
+
const mdc = `---\ndescription: ${description}\nglobs: **/*\nalwaysApply: false\n---\n\n# ${name}\n\n> Skill source: \`.cursor/skills/${name}/SKILL.md\`\n\n${content}`;
|
|
44
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(rulesDir, `${name}.mdc`), mdc, 'utf-8');
|
|
45
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(commandsDir, `${name}.md`), raw, 'utf-8');
|
|
46
|
+
result.commands.push(name);
|
|
47
|
+
}
|
|
48
|
+
// 3. MCP (project-level JSON).
|
|
49
|
+
result.mcp = (0, shared_js_1.writeJsonMcp)((0, path_1.join)(cursorDir, 'mcp.json'), { vsaf: (0, shared_js_1.getVsafMcpEntry)(), gitnexus: (0, shared_js_1.getGitnexusMcpEntry)() });
|
|
50
|
+
// 4. Instruction marker block in AGENTS.md.
|
|
51
|
+
(0, shared_js_1.writeMarkerFile)((0, path_1.join)(ctx.projectPath, 'AGENTS.md'), `pack=${ctx.packName} ide=cursor`, `## VSAF \`${ctx.packName}\` (Cursor)\n\nRules: \`.cursor/rules/\` · Commands: \`.cursor/commands/\` · Skills: \`.cursor/skills/\` · MCP: \`.cursor/mcp.json\` (vsaf + gitnexus).`);
|
|
52
|
+
// 5. Binaries (best-effort; skipped in tests / --skip-deps).
|
|
53
|
+
if (!ctx.options._skipGraphify && !(0, shared_js_1.installGraphifyPlatform)('cursor')) {
|
|
54
|
+
result.warnings.push('graphify cursor install failed — run: graphify cursor install');
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAa3D,wBAAgB,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAElE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAE9C"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/cli/src/adapters/registry.ts
|
|
3
|
+
// Maps IdeId → PlatformAdapter. Each epic (E2 cursor, E3 codex, E4 antigravity)
|
|
4
|
+
// adds exactly one entry here (ADD-only per the conflict map).
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getAdapter = getAdapter;
|
|
7
|
+
exports.hasAdapter = hasAdapter;
|
|
8
|
+
const claude_js_1 = require("./claude.js");
|
|
9
|
+
const cursor_js_1 = require("./cursor.js");
|
|
10
|
+
const codex_js_1 = require("./codex.js");
|
|
11
|
+
const antigravity_js_1 = require("./antigravity.js");
|
|
12
|
+
const ADAPTERS = {
|
|
13
|
+
claude: claude_js_1.claudeAdapter,
|
|
14
|
+
cursor: cursor_js_1.cursorAdapter,
|
|
15
|
+
codex: codex_js_1.codexAdapter,
|
|
16
|
+
antigravity: antigravity_js_1.antigravityAdapter,
|
|
17
|
+
};
|
|
18
|
+
function getAdapter(ide) {
|
|
19
|
+
return ADAPTERS[ide];
|
|
20
|
+
}
|
|
21
|
+
function hasAdapter(ide) {
|
|
22
|
+
return ADAPTERS[ide] !== undefined;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,gFAAgF;AAChF,+DAA+D;;AAe/D,gCAEC;AAED,gCAEC;AAlBD,2CAA4C;AAC5C,2CAA4C;AAC5C,yCAA0C;AAC1C,qDAAsD;AAEtD,MAAM,QAAQ,GAA4C;IACxD,MAAM,EAAE,yBAAa;IACrB,MAAM,EAAE,yBAAa;IACrB,KAAK,EAAE,uBAAY;IACnB,WAAW,EAAE,mCAAkB;CAChC,CAAC;AAEF,SAAgB,UAAU,CAAC,GAAU;IACnC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,UAAU,CAAC,GAAU;IACnC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { deploySkills, checkVcRedist, ensureVcRedist, getGitnexusMcpEntry, resolveGitnexusBin, SKIP_SKILLS } from '../commands/install.js';
|
|
2
|
+
import type { IdeId } from './adapter.js';
|
|
3
|
+
export { deploySkills, checkVcRedist, ensureVcRedist, getGitnexusMcpEntry, resolveGitnexusBin, SKIP_SKILLS };
|
|
4
|
+
/** The `vsaf` MCP server entry (vsaf is global on PATH). */
|
|
5
|
+
export declare function getVsafMcpEntry(): Record<string, unknown>;
|
|
6
|
+
/**
|
|
7
|
+
* Merge `vsaf` + `gitnexus` into a Claude-Desktop-style JSON MCP file
|
|
8
|
+
* (`{ mcpServers: { … } }`). Used by Claude/Cursor/Antigravity. Existing servers
|
|
9
|
+
* are preserved; gitnexus is always refreshed (stale entries crash the client).
|
|
10
|
+
* `absolutePaths` is informational — callers pass already-absolute commands when
|
|
11
|
+
* the target (Antigravity, global config) cannot resolve workspace-relative bins.
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeJsonMcp(mcpPath: string, servers: Record<string, Record<string, unknown>>): {
|
|
14
|
+
path: string;
|
|
15
|
+
servers: string[];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Idempotently upsert a marker-delimited block into `existing` content.
|
|
19
|
+
* Re-running with the same key replaces the block in place (no duplication);
|
|
20
|
+
* other blocks and free text are preserved. Returns the new full content.
|
|
21
|
+
*/
|
|
22
|
+
export declare function upsertMarkerBlock(existing: string, key: string, block: string): string;
|
|
23
|
+
/** Write/append a vsaf marker block into a project file (e.g. AGENTS.md). */
|
|
24
|
+
export declare function writeMarkerFile(filePath: string, key: string, block: string): void;
|
|
25
|
+
/** Map IdeId → the `graphify install` invocation for that platform. */
|
|
26
|
+
export declare function graphifyInstallCmd(ide: IdeId): string | null;
|
|
27
|
+
/** Run the per-platform graphify skill install. Best-effort (non-fatal). */
|
|
28
|
+
export declare function installGraphifyPlatform(ide: IdeId): boolean;
|
|
29
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"AASA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;AAE7G,4DAA4D;AAC5D,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC/C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAoBrC;AAKD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAStF;AAMD,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIlF;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAQ5D;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,CAS3D"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// packages/cli/src/adapters/shared.ts
|
|
3
|
+
// Shared helpers used across Platform Adapters. Proven helpers are re-exported
|
|
4
|
+
// from commands/install.ts (kept in place to avoid regressing the Claude path);
|
|
5
|
+
// new cross-IDE helpers (JSON MCP merge, AGENTS.md marker blocks, per-platform
|
|
6
|
+
// graphify) live here.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SKIP_SKILLS = exports.resolveGitnexusBin = exports.getGitnexusMcpEntry = exports.ensureVcRedist = exports.checkVcRedist = exports.deploySkills = void 0;
|
|
9
|
+
exports.getVsafMcpEntry = getVsafMcpEntry;
|
|
10
|
+
exports.writeJsonMcp = writeJsonMcp;
|
|
11
|
+
exports.upsertMarkerBlock = upsertMarkerBlock;
|
|
12
|
+
exports.writeMarkerFile = writeMarkerFile;
|
|
13
|
+
exports.graphifyInstallCmd = graphifyInstallCmd;
|
|
14
|
+
exports.installGraphifyPlatform = installGraphifyPlatform;
|
|
15
|
+
const fs_1 = require("fs");
|
|
16
|
+
const path_1 = require("path");
|
|
17
|
+
const child_process_1 = require("child_process");
|
|
18
|
+
const install_js_1 = require("../commands/install.js");
|
|
19
|
+
Object.defineProperty(exports, "deploySkills", { enumerable: true, get: function () { return install_js_1.deploySkills; } });
|
|
20
|
+
Object.defineProperty(exports, "checkVcRedist", { enumerable: true, get: function () { return install_js_1.checkVcRedist; } });
|
|
21
|
+
Object.defineProperty(exports, "ensureVcRedist", { enumerable: true, get: function () { return install_js_1.ensureVcRedist; } });
|
|
22
|
+
Object.defineProperty(exports, "getGitnexusMcpEntry", { enumerable: true, get: function () { return install_js_1.getGitnexusMcpEntry; } });
|
|
23
|
+
Object.defineProperty(exports, "resolveGitnexusBin", { enumerable: true, get: function () { return install_js_1.resolveGitnexusBin; } });
|
|
24
|
+
Object.defineProperty(exports, "SKIP_SKILLS", { enumerable: true, get: function () { return install_js_1.SKIP_SKILLS; } });
|
|
25
|
+
/** The `vsaf` MCP server entry (vsaf is global on PATH). */
|
|
26
|
+
function getVsafMcpEntry() {
|
|
27
|
+
return { type: 'stdio', command: 'vsaf', args: ['mcp'] };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Merge `vsaf` + `gitnexus` into a Claude-Desktop-style JSON MCP file
|
|
31
|
+
* (`{ mcpServers: { … } }`). Used by Claude/Cursor/Antigravity. Existing servers
|
|
32
|
+
* are preserved; gitnexus is always refreshed (stale entries crash the client).
|
|
33
|
+
* `absolutePaths` is informational — callers pass already-absolute commands when
|
|
34
|
+
* the target (Antigravity, global config) cannot resolve workspace-relative bins.
|
|
35
|
+
*/
|
|
36
|
+
function writeJsonMcp(mcpPath, servers) {
|
|
37
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(mcpPath), { recursive: true });
|
|
38
|
+
let root = {};
|
|
39
|
+
if ((0, fs_1.existsSync)(mcpPath)) {
|
|
40
|
+
try {
|
|
41
|
+
root = JSON.parse((0, fs_1.readFileSync)(mcpPath, 'utf-8'));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
root = {};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (!root.mcpServers || typeof root.mcpServers !== 'object')
|
|
48
|
+
root.mcpServers = {};
|
|
49
|
+
const existing = root.mcpServers;
|
|
50
|
+
for (const [name, entry] of Object.entries(servers)) {
|
|
51
|
+
existing[name] = entry; // add or refresh
|
|
52
|
+
}
|
|
53
|
+
(0, fs_1.writeFileSync)(mcpPath, JSON.stringify(root, null, 2) + '\n', 'utf-8');
|
|
54
|
+
return { path: mcpPath, servers: Object.keys(servers) };
|
|
55
|
+
}
|
|
56
|
+
const MARKER_BEGIN = (key) => `<!-- vsaf:begin ${key} -->`;
|
|
57
|
+
const MARKER_END = '<!-- vsaf:end -->';
|
|
58
|
+
/**
|
|
59
|
+
* Idempotently upsert a marker-delimited block into `existing` content.
|
|
60
|
+
* Re-running with the same key replaces the block in place (no duplication);
|
|
61
|
+
* other blocks and free text are preserved. Returns the new full content.
|
|
62
|
+
*/
|
|
63
|
+
function upsertMarkerBlock(existing, key, block) {
|
|
64
|
+
const begin = MARKER_BEGIN(key);
|
|
65
|
+
const wrapped = `${begin}\n${block}\n${MARKER_END}`;
|
|
66
|
+
const re = new RegExp(`${escapeRe(begin)}[\\s\\S]*?${escapeRe(MARKER_END)}`);
|
|
67
|
+
if (re.test(existing)) {
|
|
68
|
+
return existing.replace(re, wrapped);
|
|
69
|
+
}
|
|
70
|
+
const base = existing.trimEnd();
|
|
71
|
+
return base.length > 0 ? `${base}\n\n${wrapped}\n` : `${wrapped}\n`;
|
|
72
|
+
}
|
|
73
|
+
function escapeRe(s) {
|
|
74
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
75
|
+
}
|
|
76
|
+
/** Write/append a vsaf marker block into a project file (e.g. AGENTS.md). */
|
|
77
|
+
function writeMarkerFile(filePath, key, block) {
|
|
78
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(filePath), { recursive: true });
|
|
79
|
+
const existing = (0, fs_1.existsSync)(filePath) ? (0, fs_1.readFileSync)(filePath, 'utf-8') : '';
|
|
80
|
+
(0, fs_1.writeFileSync)(filePath, upsertMarkerBlock(existing, key, block), 'utf-8');
|
|
81
|
+
}
|
|
82
|
+
/** Map IdeId → the `graphify install` invocation for that platform. */
|
|
83
|
+
function graphifyInstallCmd(ide) {
|
|
84
|
+
switch (ide) {
|
|
85
|
+
case 'claude': return 'graphify install';
|
|
86
|
+
case 'cursor': return 'graphify cursor install';
|
|
87
|
+
case 'codex': return 'graphify install --platform codex';
|
|
88
|
+
case 'antigravity': return 'graphify install --platform antigravity';
|
|
89
|
+
default: return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Run the per-platform graphify skill install. Best-effort (non-fatal). */
|
|
93
|
+
function installGraphifyPlatform(ide) {
|
|
94
|
+
const cmd = graphifyInstallCmd(ide);
|
|
95
|
+
if (!cmd)
|
|
96
|
+
return false;
|
|
97
|
+
try {
|
|
98
|
+
(0, child_process_1.execSync)(cmd, { stdio: 'pipe', encoding: 'utf-8' });
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface McpEntry {
|
|
2
|
+
command: string;
|
|
3
|
+
args?: string[];
|
|
4
|
+
env?: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Add/refresh the given MCP servers in a Codex config.toml, preserving all other
|
|
8
|
+
* content (comments, project trust, other servers). Throws if the merged result
|
|
9
|
+
* is not valid TOML (caller treats this as ERR-MIDE-003 and skips Codex MCP).
|
|
10
|
+
*/
|
|
11
|
+
export declare function writeTomlMcp(tomlPath: string, servers: Record<string, McpEntry>): {
|
|
12
|
+
path: string;
|
|
13
|
+
servers: string[];
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=toml-mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toml-mcp.d.ts","sourceRoot":"","sources":["../../src/adapters/toml-mcp.ts"],"names":[],"mappings":"AAUA,UAAU,QAAQ;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE;AAiCrF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAYrH"}
|