@ngocsangairvds/vsaf 4.2.14 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/package.json +3 -1
  2. package/packages/cli/dist/adapters/adapter.d.ts +49 -0
  3. package/packages/cli/dist/adapters/adapter.d.ts.map +1 -0
  4. package/packages/cli/dist/adapters/adapter.js +19 -0
  5. package/packages/cli/dist/adapters/adapter.js.map +1 -0
  6. package/packages/cli/dist/adapters/antigravity.d.ts +5 -0
  7. package/packages/cli/dist/adapters/antigravity.d.ts.map +1 -0
  8. package/packages/cli/dist/adapters/antigravity.js +74 -0
  9. package/packages/cli/dist/adapters/antigravity.js.map +1 -0
  10. package/packages/cli/dist/adapters/claude.d.ts +3 -0
  11. package/packages/cli/dist/adapters/claude.d.ts.map +1 -0
  12. package/packages/cli/dist/adapters/claude.js +34 -0
  13. package/packages/cli/dist/adapters/claude.js.map +1 -0
  14. package/packages/cli/dist/adapters/codex.d.ts +3 -0
  15. package/packages/cli/dist/adapters/codex.d.ts.map +1 -0
  16. package/packages/cli/dist/adapters/codex.js +54 -0
  17. package/packages/cli/dist/adapters/codex.js.map +1 -0
  18. package/packages/cli/dist/adapters/cursor.d.ts +3 -0
  19. package/packages/cli/dist/adapters/cursor.d.ts.map +1 -0
  20. package/packages/cli/dist/adapters/cursor.js +59 -0
  21. package/packages/cli/dist/adapters/cursor.js.map +1 -0
  22. package/packages/cli/dist/adapters/registry.d.ts +4 -0
  23. package/packages/cli/dist/adapters/registry.d.ts.map +1 -0
  24. package/packages/cli/dist/adapters/registry.js +24 -0
  25. package/packages/cli/dist/adapters/registry.js.map +1 -0
  26. package/packages/cli/dist/adapters/shared.d.ts +29 -0
  27. package/packages/cli/dist/adapters/shared.d.ts.map +1 -0
  28. package/packages/cli/dist/adapters/shared.js +105 -0
  29. package/packages/cli/dist/adapters/shared.js.map +1 -0
  30. package/packages/cli/dist/adapters/toml-mcp.d.ts +16 -0
  31. package/packages/cli/dist/adapters/toml-mcp.d.ts.map +1 -0
  32. package/packages/cli/dist/adapters/toml-mcp.js +61 -0
  33. package/packages/cli/dist/adapters/toml-mcp.js.map +1 -0
  34. package/packages/cli/dist/commands/install.d.ts +4 -0
  35. package/packages/cli/dist/commands/install.d.ts.map +1 -1
  36. package/packages/cli/dist/commands/install.js +6 -3
  37. package/packages/cli/dist/commands/install.js.map +1 -1
  38. package/packages/cli/dist/index.js +16 -4
  39. package/packages/cli/dist/index.js.map +1 -1
  40. package/packages/cli/dist/install/config.d.ts +27 -0
  41. package/packages/cli/dist/install/config.d.ts.map +1 -0
  42. package/packages/cli/dist/install/config.js +85 -0
  43. package/packages/cli/dist/install/config.js.map +1 -0
  44. package/packages/cli/dist/install/ide-selection.d.ts +15 -0
  45. package/packages/cli/dist/install/ide-selection.d.ts.map +1 -0
  46. package/packages/cli/dist/install/ide-selection.js +56 -0
  47. package/packages/cli/dist/install/ide-selection.js.map +1 -0
  48. package/packages/cli/dist/install/orchestrator.d.ts +12 -0
  49. package/packages/cli/dist/install/orchestrator.d.ts.map +1 -0
  50. package/packages/cli/dist/install/orchestrator.js +75 -0
  51. package/packages/cli/dist/install/orchestrator.js.map +1 -0
  52. package/skills/sdlc/init/SKILL.md +6 -1
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ // packages/cli/src/install/orchestrator.ts
3
+ // Multi-IDE install orchestrator. Resolves the pack once, loops the selected
4
+ // adapters (error-isolated), persists the IDE/pack memory, and prints a per-IDE
5
+ // summary. The Claude path delegates to execInstall (unchanged) for 0-regression.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.runMultiIdeInstall = runMultiIdeInstall;
8
+ exports.hasHardError = hasHardError;
9
+ const skill_js_1 = require("../commands/skill.js");
10
+ const registry_js_1 = require("../adapters/registry.js");
11
+ const adapter_js_1 = require("../adapters/adapter.js");
12
+ const config_js_1 = require("./config.js");
13
+ const version_js_1 = require("../version.js");
14
+ function runMultiIdeInstall(pack, projectPath, options) {
15
+ // Validate pack early (mirrors execInstall) so a bad name fails before any IDE work.
16
+ if (pack.includes('/') || pack.includes('\\') || pack.startsWith('.') || pack.startsWith('http')) {
17
+ throw new Error(`"${pack}" is not a valid pack name. Use a built-in pack name (e.g. "sdlc").`);
18
+ }
19
+ const packDir = (0, skill_js_1.resolveSource)(pack);
20
+ const packInfo = (0, skill_js_1.resolvePackInfo)(pack, projectPath);
21
+ const deployedSkillNames = [...packInfo.skillNames, ...packInfo.bundledNames];
22
+ const results = [];
23
+ const okIdes = [];
24
+ for (const ide of options.ides) {
25
+ const adapter = (0, registry_js_1.getAdapter)(ide);
26
+ if (!adapter) {
27
+ const r = (0, adapter_js_1.emptyResult)(ide);
28
+ r.errors.push(`adapter "${ide}" chưa được hỗ trợ trong bản này (sẽ có ở bản sau).`);
29
+ results.push(r);
30
+ continue;
31
+ }
32
+ const ctx = { projectPath, packDir, packName: pack, packInfo, deployedSkillNames, options };
33
+ try {
34
+ const r = adapter.install(ctx);
35
+ results.push(r);
36
+ okIdes.push(ide);
37
+ }
38
+ catch (err) {
39
+ // Error isolation: one IDE failing must not abort the others (NFR-005).
40
+ const r = (0, adapter_js_1.emptyResult)(ide);
41
+ r.errors.push(err.message);
42
+ results.push(r);
43
+ }
44
+ }
45
+ // Persist memory: union of successfully-installed IDEs + this pack.
46
+ // On a FRESH install (no config yet) start from an empty base so the
47
+ // back-compat default [claude] in readConfig() does not leak into an
48
+ // explicit --ide selection (F1). Existing configs still merge as a union.
49
+ if (okIdes.length > 0) {
50
+ const base = (0, config_js_1.hasConfig)(projectPath) ? (0, config_js_1.readConfig)(projectPath) : (0, config_js_1.emptyConfig)();
51
+ const merged = (0, config_js_1.mergeConfig)(base, { ides: okIdes, packs: [pack], vsafVersion: (0, version_js_1.getVersion)() });
52
+ (0, config_js_1.writeConfig)(projectPath, merged);
53
+ }
54
+ printSummary(results);
55
+ return { results };
56
+ }
57
+ function printSummary(results) {
58
+ console.log('\n[vsaf] Multi-IDE install summary:');
59
+ for (const r of results) {
60
+ const mark = r.errors.length > 0 ? '✗' : r.warnings.length > 0 ? '⚠' : '✓';
61
+ // Antigravity deploys workflows (no skills); avoid the misleading "0 skills" (F3b).
62
+ const units = r.ide === 'antigravity'
63
+ ? `${r.commands.length} workflows`
64
+ : `${r.skills.deployed.length} skills, ${r.commands.length} commands`;
65
+ console.log(` ${mark} ${r.ide}: ${units}` +
66
+ (r.mcp ? `, MCP[${r.mcp.servers.join('+')}]` : '') +
67
+ (r.warnings.length ? ` — warn: ${r.warnings.join('; ')}` : '') +
68
+ (r.errors.length ? ` — error: ${r.errors.join('; ')}` : ''));
69
+ }
70
+ }
71
+ /** True if any IDE hit a hard error — lets the CLI set a non-zero exit code. */
72
+ function hasHardError(result) {
73
+ return result.results.some(r => r.errors.length > 0);
74
+ }
75
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/install/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,12 @@ Icon: `⏳` running, `✅` done, `❌` error.
36
36
  ```
37
37
 
38
38
  1. Confirm project path exists and is a valid directory
39
- 2. Check if `.mcp.json` exists with `gitnexus` entry if not STOP: "Run `/sdlc-setup` first."
39
+ 2. Check the GitNexus MCP is configuredthe location is **IDE-specific**, so read `.vsaf/config.json` `ides` first:
40
+ - **antigravity** → MCP lives in the global `~/.gemini/antigravity/mcp_config.json` (NOT a project `.mcp.json`). Accept if that file has a `gitnexus` server.
41
+ - **codex** → check `.codex/config.toml` for an `mcp_servers.gitnexus` entry.
42
+ - **claude / cursor** (or no config) → check project `.mcp.json` for a `gitnexus` entry.
43
+ - If none of the applicable locations has `gitnexus` → STOP: "Run `/sdlc-setup` first."
44
+ - (Fallback: if the `gitnexus` binary is on PATH and an MCP entry exists in any of the above, treat the prerequisite as met.)
40
45
  3. Check if `.vsaf/docs/` already exists:
41
46
  - Already exists → Print warning: "`.vsaf/docs/` already exists. Will merge, NOT overwrite."
42
47
  - Does not exist → Proceed to create new