@vibe-agent-toolkit/cli 0.1.37 → 0.1.39-rc.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 (149) hide show
  1. package/README.md +7 -4
  2. package/dist/bin/vat +10 -5
  3. package/dist/bin/vat.js +10 -5
  4. package/dist/bin/vat.js.map +1 -1
  5. package/dist/commands/agent/build.d.ts.map +1 -1
  6. package/dist/commands/agent/build.js +3 -0
  7. package/dist/commands/agent/build.js.map +1 -1
  8. package/dist/commands/agent/index.d.ts.map +1 -1
  9. package/dist/commands/agent/index.js +25 -1
  10. package/dist/commands/agent/index.js.map +1 -1
  11. package/dist/commands/agent/run.d.ts.map +1 -1
  12. package/dist/commands/agent/run.js +5 -0
  13. package/dist/commands/agent/run.js.map +1 -1
  14. package/dist/commands/agent/validate.d.ts.map +1 -1
  15. package/dist/commands/agent/validate.js +3 -0
  16. package/dist/commands/agent/validate.js.map +1 -1
  17. package/dist/commands/audit/hierarchical-output.d.ts +2 -1
  18. package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
  19. package/dist/commands/audit/hierarchical-output.js.map +1 -1
  20. package/dist/commands/audit.d.ts.map +1 -1
  21. package/dist/commands/audit.js +20 -9
  22. package/dist/commands/audit.js.map +1 -1
  23. package/dist/commands/build.d.ts.map +1 -1
  24. package/dist/commands/build.js +9 -0
  25. package/dist/commands/build.js.map +1 -1
  26. package/dist/commands/claude/claude-config.d.ts.map +1 -1
  27. package/dist/commands/claude/claude-config.js +4 -2
  28. package/dist/commands/claude/claude-config.js.map +1 -1
  29. package/dist/commands/claude/marketplace/git-publish.d.ts +5 -12
  30. package/dist/commands/claude/marketplace/git-publish.d.ts.map +1 -1
  31. package/dist/commands/claude/marketplace/git-publish.js +7 -80
  32. package/dist/commands/claude/marketplace/git-publish.js.map +1 -1
  33. package/dist/commands/claude/marketplace/publish-tree.d.ts +12 -4
  34. package/dist/commands/claude/marketplace/publish-tree.d.ts.map +1 -1
  35. package/dist/commands/claude/marketplace/publish-tree.js +54 -24
  36. package/dist/commands/claude/marketplace/publish-tree.js.map +1 -1
  37. package/dist/commands/claude/marketplace/publish.d.ts.map +1 -1
  38. package/dist/commands/claude/marketplace/publish.js +14 -39
  39. package/dist/commands/claude/marketplace/publish.js.map +1 -1
  40. package/dist/commands/claude/marketplace/validate.js.map +1 -1
  41. package/dist/commands/claude/plugin/install.js +2 -2
  42. package/dist/commands/claude/plugin/install.js.map +1 -1
  43. package/dist/commands/corpus/index.d.ts.map +1 -1
  44. package/dist/commands/corpus/index.js +6 -0
  45. package/dist/commands/corpus/index.js.map +1 -1
  46. package/dist/commands/corpus/report.js +2 -2
  47. package/dist/commands/corpus/report.js.map +1 -1
  48. package/dist/commands/corpus/runner.js +3 -3
  49. package/dist/commands/corpus/runner.js.map +1 -1
  50. package/dist/commands/corpus/scan.d.ts.map +1 -1
  51. package/dist/commands/corpus/scan.js +4 -0
  52. package/dist/commands/corpus/scan.js.map +1 -1
  53. package/dist/commands/corpus/seed.d.ts +24 -0
  54. package/dist/commands/corpus/seed.d.ts.map +1 -1
  55. package/dist/commands/corpus/seed.js +7 -3
  56. package/dist/commands/corpus/seed.js.map +1 -1
  57. package/dist/commands/doctor.d.ts +4 -2
  58. package/dist/commands/doctor.d.ts.map +1 -1
  59. package/dist/commands/doctor.js +24 -34
  60. package/dist/commands/doctor.js.map +1 -1
  61. package/dist/commands/rag/command-helpers.d.ts +7 -2
  62. package/dist/commands/rag/command-helpers.d.ts.map +1 -1
  63. package/dist/commands/rag/command-helpers.js +10 -5
  64. package/dist/commands/rag/command-helpers.js.map +1 -1
  65. package/dist/commands/rag/index-command.d.ts.map +1 -1
  66. package/dist/commands/rag/index-command.js +11 -3
  67. package/dist/commands/rag/index-command.js.map +1 -1
  68. package/dist/commands/rag/index.d.ts.map +1 -1
  69. package/dist/commands/rag/index.js +24 -0
  70. package/dist/commands/rag/index.js.map +1 -1
  71. package/dist/commands/resources/index.d.ts.map +1 -1
  72. package/dist/commands/resources/index.js +16 -1
  73. package/dist/commands/resources/index.js.map +1 -1
  74. package/dist/commands/resources/scan.d.ts.map +1 -1
  75. package/dist/commands/resources/scan.js +4 -1
  76. package/dist/commands/resources/scan.js.map +1 -1
  77. package/dist/commands/resources/validate.d.ts.map +1 -1
  78. package/dist/commands/resources/validate.js +162 -117
  79. package/dist/commands/resources/validate.js.map +1 -1
  80. package/dist/commands/skill/review.d.ts.map +1 -1
  81. package/dist/commands/skill/review.js +14 -2
  82. package/dist/commands/skill/review.js.map +1 -1
  83. package/dist/commands/skills/build.d.ts.map +1 -1
  84. package/dist/commands/skills/build.js +12 -0
  85. package/dist/commands/skills/build.js.map +1 -1
  86. package/dist/commands/skills/index.js +6 -0
  87. package/dist/commands/skills/index.js.map +1 -1
  88. package/dist/commands/skills/package.d.ts.map +1 -1
  89. package/dist/commands/skills/package.js +10 -0
  90. package/dist/commands/skills/package.js.map +1 -1
  91. package/dist/commands/skills/skill-discovery.d.ts +9 -2
  92. package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
  93. package/dist/commands/skills/skill-discovery.js +83 -18
  94. package/dist/commands/skills/skill-discovery.js.map +1 -1
  95. package/dist/commands/skills/validate-command.d.ts.map +1 -1
  96. package/dist/commands/skills/validate-command.js +6 -0
  97. package/dist/commands/skills/validate-command.js.map +1 -1
  98. package/dist/commands/skills/validate.d.ts.map +1 -1
  99. package/dist/commands/skills/validate.js +15 -3
  100. package/dist/commands/skills/validate.js.map +1 -1
  101. package/dist/commands/verify.d.ts.map +1 -1
  102. package/dist/commands/verify.js +9 -0
  103. package/dist/commands/verify.js.map +1 -1
  104. package/dist/index.d.ts +0 -1
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +0 -1
  107. package/dist/index.js.map +1 -1
  108. package/dist/utils/agent-discovery.d.ts.map +1 -1
  109. package/dist/utils/agent-discovery.js +2 -3
  110. package/dist/utils/agent-discovery.js.map +1 -1
  111. package/dist/utils/config-loader.d.ts +11 -24
  112. package/dist/utils/config-loader.d.ts.map +1 -1
  113. package/dist/utils/config-loader.js +34 -68
  114. package/dist/utils/config-loader.js.map +1 -1
  115. package/dist/utils/logger.d.ts +1 -0
  116. package/dist/utils/logger.d.ts.map +1 -1
  117. package/dist/utils/logger.js +3 -0
  118. package/dist/utils/logger.js.map +1 -1
  119. package/dist/utils/output.js +3 -3
  120. package/dist/utils/output.js.map +1 -1
  121. package/dist/utils/project-root-policy.d.ts +33 -0
  122. package/dist/utils/project-root-policy.d.ts.map +1 -0
  123. package/dist/utils/project-root-policy.js +49 -0
  124. package/dist/utils/project-root-policy.js.map +1 -0
  125. package/dist/utils/resource-loader.d.ts +9 -4
  126. package/dist/utils/resource-loader.d.ts.map +1 -1
  127. package/dist/utils/resource-loader.js +24 -28
  128. package/dist/utils/resource-loader.js.map +1 -1
  129. package/dist/utils/verdict-helpers.d.ts +2 -1
  130. package/dist/utils/verdict-helpers.d.ts.map +1 -1
  131. package/dist/utils/verdict-helpers.js +1 -1
  132. package/dist/utils/verdict-helpers.js.map +1 -1
  133. package/docs/agent.md +25 -0
  134. package/docs/audit.md +25 -0
  135. package/docs/doctor.md +13 -0
  136. package/docs/index.md +19 -0
  137. package/docs/mcp.md +16 -0
  138. package/docs/rag.md +18 -0
  139. package/docs/resources.md +45 -3
  140. package/docs/skills.md +61 -3
  141. package/package.json +12 -13
  142. package/dist/commands/claude/marketplace/tag-utils.d.ts +0 -11
  143. package/dist/commands/claude/marketplace/tag-utils.d.ts.map +0 -1
  144. package/dist/commands/claude/marketplace/tag-utils.js +0 -17
  145. package/dist/commands/claude/marketplace/tag-utils.js.map +0 -1
  146. package/dist/utils/project-root.d.ts +0 -30
  147. package/dist/utils/project-root.d.ts.map +0 -1
  148. package/dist/utils/project-root.js +0 -59
  149. package/dist/utils/project-root.js.map +0 -1
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import fs from 'node:fs/promises';
5
5
  import { safePath } from '@vibe-agent-toolkit/utils';
6
- import * as yaml from 'js-yaml';
6
+ import * as yaml from 'yaml';
7
7
  /**
8
8
  * Discover all agents in common locations
9
9
  */
@@ -57,8 +57,7 @@ async function parseAgentManifest(manifestPath, agentDir) {
57
57
  try {
58
58
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- manifestPath from findManifest, trusted
59
59
  const content = await fs.readFile(manifestPath, 'utf-8');
60
- // CORE_SCHEMA: YAML 1.2 spec — see link-parser.ts for rationale.
61
- const data = yaml.load(content, { schema: yaml.CORE_SCHEMA });
60
+ const data = yaml.parse(content);
62
61
  if (data?.metadata?.name && data?.metadata?.version) {
63
62
  return {
64
63
  name: data.metadata.name,
@@ -1 +1 @@
1
- {"version":3,"file":"agent-discovery.js","sourceRoot":"","sources":["../../src/utils/agent-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-discovery.js","sourceRoot":"","sources":["../../src/utils/agent-discovery.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,6 @@
5
5
  * - VAT_TEST_CONFIG: Override config file path for testing (absolute path)
6
6
  */
7
7
  import { type ProjectConfig } from '@vibe-agent-toolkit/resources';
8
- /**
9
- * Find configuration file by walking up directory tree
10
- * @param startDir - Starting directory (defaults to cwd)
11
- * @returns Path to config file, or null if not found
12
- */
13
- export declare function findConfigPath(startDir?: string): string | null;
14
8
  /**
15
9
  * Load and validate project configuration
16
10
  *
@@ -38,26 +32,19 @@ export declare function loadConfig(projectRoot: string): ProjectConfig | undefin
38
32
  */
39
33
  export declare function getConfigDir(configPath: string): string;
40
34
  /**
41
- * Reset the governing-config cache used by {@link findGoverningConfig}.
42
- * Call at the start of each `vat audit` invocation so in-process test suites
43
- * that mutate fixtures between runs do not observe stale config data.
35
+ * Reset the cache used by {@link loadConfigCached}.
36
+ *
37
+ * Call at the start of each independent CLI invocation (e.g. `vat audit`) so
38
+ * in-process callers don't observe stale config data across runs.
44
39
  */
45
- export declare function resetGoverningConfigCache(): void;
40
+ export declare function resetLoadedConfigCache(): void;
46
41
  /**
47
- * Walk UP from `skillDir` looking for the nearest-ancestor
48
- * `vibe-agent-toolkit.config.yaml`. Loads and caches the config on first hit.
49
- *
50
- * Returns the parsed config plus the `configRoot` (directory that contained the
51
- * yaml), or `null` if no config is found anywhere up the tree.
42
+ * Cached variant of {@link loadConfig} keyed by `projectRoot`.
52
43
  *
53
- * **Cache behavior:** Both successful loads and parse failures are cached
54
- * (failures as `null`) so a broken config doesn't re-parse on every skill in
55
- * the same scan. A test that edits a broken config into a good one between
56
- * calls must invoke {@link resetGoverningConfigCache} to pick up the new
57
- * state — the audit CLI entrypoint already does this via `resetAuditCaches()`.
44
+ * Both successful loads and parse failures are cached (failures as `null`)
45
+ * so a broken config doesn't re-parse on every skill in the same scan. A
46
+ * test that edits a broken config into a good one between calls must invoke
47
+ * {@link resetLoadedConfigCache} (audit's `resetAuditCaches()` does this).
58
48
  */
59
- export declare function findGoverningConfig(skillDir: string): {
60
- config: ProjectConfig;
61
- configRoot: string;
62
- } | null;
49
+ export declare function loadConfigCached(projectRoot: string): ProjectConfig | undefined;
63
50
  //# sourceMappingURL=config-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAMxF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgB/D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAiCzE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAYD;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,GACf;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAyBtD"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAMxF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CA8BzE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAgBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAY/E"}
@@ -5,32 +5,11 @@
5
5
  * - VAT_TEST_CONFIG: Override config file path for testing (absolute path)
6
6
  */
7
7
  import { readFileSync, existsSync } from 'node:fs';
8
- import { dirname, parse } from 'node:path';
8
+ import { dirname } from 'node:path';
9
9
  import { ProjectConfigSchema } from '@vibe-agent-toolkit/resources';
10
10
  import { safePath } from '@vibe-agent-toolkit/utils';
11
- import * as yaml from 'js-yaml';
11
+ import * as yaml from 'yaml';
12
12
  const CONFIG_FILENAME = 'vibe-agent-toolkit.config.yaml';
13
- /**
14
- * Find configuration file by walking up directory tree
15
- * @param startDir - Starting directory (defaults to cwd)
16
- * @returns Path to config file, or null if not found
17
- */
18
- export function findConfigPath(startDir) {
19
- let currentDir = safePath.resolve(startDir ?? process.cwd());
20
- const root = parse(currentDir).root;
21
- while (currentDir !== root) {
22
- const configPath = safePath.join(currentDir, CONFIG_FILENAME);
23
- // eslint-disable-next-line security/detect-non-literal-fs-filename -- Dynamic path walking is required for config file search
24
- if (existsSync(configPath)) {
25
- return configPath;
26
- }
27
- const parent = dirname(currentDir);
28
- if (parent === currentDir)
29
- break; // safety: at filesystem root
30
- currentDir = parent;
31
- }
32
- return null;
33
- }
34
13
  /**
35
14
  * Load and validate project configuration
36
15
  *
@@ -62,10 +41,7 @@ export function loadConfig(projectRoot) {
62
41
  try {
63
42
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- configPath is derived from projectRoot parameter
64
43
  const content = readFileSync(configPath, 'utf-8');
65
- // CORE_SCHEMA = YAML 1.2 spec; prevents js-yaml's default DEFAULT_SCHEMA
66
- // from auto-promoting unquoted ISO dates to JS Date objects (a YAML 1.1
67
- // tag). See packages/resources/src/link-parser.ts for the full rationale.
68
- const parsed = yaml.load(content, { schema: yaml.CORE_SCHEMA });
44
+ const parsed = yaml.parse(content);
69
45
  // Validate with canonical schema from resources package
70
46
  const result = ProjectConfigSchema.safeParse(parsed);
71
47
  if (!result.success) {
@@ -87,58 +63,48 @@ export function getConfigDir(configPath) {
87
63
  return dirname(configPath);
88
64
  }
89
65
  /**
90
- * Module-level cache keyed by configRoot → parsed ProjectConfig (or null if
91
- * the file failed to load). Avoids re-parsing the same config yaml repeatedly
92
- * when audit walks up from many sibling skills.
66
+ * Layer 2 cache for {@link loadConfigCached}.
67
+ *
68
+ * Keyed by `projectRoot` parsed {@link ProjectConfig} (or `null` if the
69
+ * file failed to load). Avoids re-parsing the same config yaml repeatedly
70
+ * when audit walks up from many sibling skills sharing one governing config.
71
+ *
72
+ * Tests that mutate fixtures between runs must call
73
+ * {@link resetLoadedConfigCache} to invalidate this cache.
93
74
  *
94
- * Tests that mutate fixtures between runs must call {@link resetGoverningConfigCache}
95
- * to invalidate this cache.
75
+ * See spec docs/superpowers/specs/2026-05-17-root-model-and-leading-slash-design.md §8.
96
76
  */
97
- const governingConfigCache = new Map();
77
+ const loadedConfigCache = new Map();
98
78
  /**
99
- * Reset the governing-config cache used by {@link findGoverningConfig}.
100
- * Call at the start of each `vat audit` invocation so in-process test suites
101
- * that mutate fixtures between runs do not observe stale config data.
79
+ * Reset the cache used by {@link loadConfigCached}.
80
+ *
81
+ * Call at the start of each independent CLI invocation (e.g. `vat audit`) so
82
+ * in-process callers don't observe stale config data across runs.
102
83
  */
103
- export function resetGoverningConfigCache() {
104
- governingConfigCache.clear();
84
+ export function resetLoadedConfigCache() {
85
+ loadedConfigCache.clear();
105
86
  }
106
87
  /**
107
- * Walk UP from `skillDir` looking for the nearest-ancestor
108
- * `vibe-agent-toolkit.config.yaml`. Loads and caches the config on first hit.
109
- *
110
- * Returns the parsed config plus the `configRoot` (directory that contained the
111
- * yaml), or `null` if no config is found anywhere up the tree.
88
+ * Cached variant of {@link loadConfig} keyed by `projectRoot`.
112
89
  *
113
- * **Cache behavior:** Both successful loads and parse failures are cached
114
- * (failures as `null`) so a broken config doesn't re-parse on every skill in
115
- * the same scan. A test that edits a broken config into a good one between
116
- * calls must invoke {@link resetGoverningConfigCache} to pick up the new
117
- * state — the audit CLI entrypoint already does this via `resetAuditCaches()`.
90
+ * Both successful loads and parse failures are cached (failures as `null`)
91
+ * so a broken config doesn't re-parse on every skill in the same scan. A
92
+ * test that edits a broken config into a good one between calls must invoke
93
+ * {@link resetLoadedConfigCache} (audit's `resetAuditCaches()` does this).
118
94
  */
119
- export function findGoverningConfig(skillDir) {
120
- const configPath = findConfigPath(skillDir);
121
- if (configPath === null) {
122
- return null;
123
- }
124
- const configRoot = dirname(configPath);
125
- const cached = governingConfigCache.get(configRoot);
126
- if (cached !== undefined) {
127
- return cached === null ? null : { config: cached, configRoot };
128
- }
95
+ export function loadConfigCached(projectRoot) {
96
+ const cached = loadedConfigCache.get(projectRoot);
97
+ if (cached !== undefined)
98
+ return cached ?? undefined;
129
99
  try {
130
- const config = loadConfig(configRoot);
131
- if (config === undefined) {
132
- governingConfigCache.set(configRoot, null);
133
- return null;
134
- }
135
- governingConfigCache.set(configRoot, config);
136
- return { config, configRoot };
100
+ const config = loadConfig(projectRoot);
101
+ loadedConfigCache.set(projectRoot, config ?? null);
102
+ return config;
137
103
  }
138
104
  catch {
139
- // Invalid config — cache as null so we don't re-parse on every skill.
140
- governingConfigCache.set(configRoot, null);
141
- return null;
105
+ // Cache failures as null so a broken config doesn't re-parse per skill.
106
+ loadedConfigCache.set(projectRoot, null);
107
+ return undefined;
142
108
  }
143
109
  }
144
110
  //# sourceMappingURL=config-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAsB,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,eAAe,GAAG,gCAAgC,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,sEAAsE;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAEjG,uIAAuI;IACvI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,uHAAuH;QACvH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,wDAAwD;QACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,+BAA+B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACtD,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,iBAAiB,GAAsC,IAAI,GAAG,EAAE,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IACpC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,IAAI,SAAS,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACvC,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export interface Logger {
6
6
  info: (message: string) => void;
7
+ warn: (message: string) => void;
7
8
  error: (message: string) => void;
8
9
  debug: (message: string) => void;
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAgBhE"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAmBhE"}
@@ -8,6 +8,9 @@ export function createLogger(options = {}) {
8
8
  info: (message) => {
9
9
  process.stderr.write(`${message}\n`);
10
10
  },
11
+ warn: (message) => {
12
+ process.stderr.write(`${message}\n`);
13
+ },
11
14
  error: (message) => {
12
15
  process.stderr.write(`${message}\n`);
13
16
  },
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,UAAU,YAAY,CAAC,UAAyB,EAAE;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IAErC,OAAO;QACL,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;YACzB,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,MAAM,UAAU,YAAY,CAAC,UAAyB,EAAE;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IAErC,OAAO;QACL,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;YACzB,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -2,17 +2,17 @@
2
2
  * Output utilities for structured data
3
3
  * YAML output on stdout, logs on stderr
4
4
  */
5
- import * as yaml from 'js-yaml';
5
+ import * as yaml from 'yaml';
6
6
  /**
7
7
  * Write YAML output to stdout with document markers
8
8
  * @param data - Data to serialize as YAML
9
9
  */
10
10
  export function writeYamlOutput(data) {
11
11
  process.stdout.write('---\n');
12
- process.stdout.write(yaml.dump(data, {
12
+ process.stdout.write(yaml.stringify(data, {
13
13
  indent: 2,
14
14
  lineWidth: 120,
15
- noRefs: true,
15
+ aliasDuplicateObjects: false,
16
16
  }));
17
17
  process.stdout.write('---\n');
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACnC,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,IAAI;KACb,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,IAAY,EACZ,MAAc,EACd,OAAe;IAEf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACxC,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,GAAG;QACd,qBAAqB,EAAE,KAAK;KAC7B,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,IAAY,EACZ,MAAc,EACd,OAAe;IAEf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * CLI-boundary policy helpers for projectRoot resolution.
3
+ *
4
+ * Per docs/superpowers/specs/2026-05-17-root-model-and-leading-slash-design.md §7,
5
+ * each command picks one of these to fulfill its declared policy:
6
+ *
7
+ * - `required` → {@link requireProjectRoot} — fails fast with a clear message.
8
+ * - `loud-cwd` → {@link projectRootOrLoudCwd} — falls back to cwd with a stderr warning.
9
+ * - `tolerate null`→ {@link projectRootOrNull} — returns null; caller handles it.
10
+ *
11
+ * These helpers MUST be invoked at the CLI dispatch boundary (top-level command
12
+ * `.action(...)` callbacks). Inner library functions should take the resolved
13
+ * root as a parameter — never call `findProjectRoot` themselves.
14
+ */
15
+ import type { Logger } from './logger.js';
16
+ /**
17
+ * `required` policy — refuse to run if no projectRoot can be discovered.
18
+ *
19
+ * @throws Error with a clear "command requires a config or git ancestor" message.
20
+ */
21
+ export declare function requireProjectRoot(startDir: string, commandName: string): string;
22
+ /**
23
+ * `loud-cwd` policy — fall back to cwd with an explicit stderr log message.
24
+ *
25
+ * The message format is documented in spec §7 and asserted by integration tests:
26
+ * `no vibe-agent-toolkit.config.yaml or .git/ ancestor found; using <cwd> as projectRoot`
27
+ */
28
+ export declare function projectRootOrLoudCwd(startDir: string, logger: Logger): string;
29
+ /**
30
+ * `tolerate null` policy — return `string | null`; caller handles either case.
31
+ */
32
+ export declare function projectRootOrNull(startDir: string): string | null;
33
+ //# sourceMappingURL=project-root-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-root-policy.d.ts","sourceRoot":"","sources":["../../src/utils/project-root-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAShF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ7E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjE"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * CLI-boundary policy helpers for projectRoot resolution.
3
+ *
4
+ * Per docs/superpowers/specs/2026-05-17-root-model-and-leading-slash-design.md §7,
5
+ * each command picks one of these to fulfill its declared policy:
6
+ *
7
+ * - `required` → {@link requireProjectRoot} — fails fast with a clear message.
8
+ * - `loud-cwd` → {@link projectRootOrLoudCwd} — falls back to cwd with a stderr warning.
9
+ * - `tolerate null`→ {@link projectRootOrNull} — returns null; caller handles it.
10
+ *
11
+ * These helpers MUST be invoked at the CLI dispatch boundary (top-level command
12
+ * `.action(...)` callbacks). Inner library functions should take the resolved
13
+ * root as a parameter — never call `findProjectRoot` themselves.
14
+ */
15
+ import { findProjectRoot, safePath } from '@vibe-agent-toolkit/utils';
16
+ /**
17
+ * `required` policy — refuse to run if no projectRoot can be discovered.
18
+ *
19
+ * @throws Error with a clear "command requires a config or git ancestor" message.
20
+ */
21
+ export function requireProjectRoot(startDir, commandName) {
22
+ const root = findProjectRoot(startDir);
23
+ if (root === null) {
24
+ throw new Error(`${commandName} requires a vibe-agent-toolkit.config.yaml or .git/ ancestor. ` +
25
+ `Run from inside a VAT project or initialize one.`);
26
+ }
27
+ return root;
28
+ }
29
+ /**
30
+ * `loud-cwd` policy — fall back to cwd with an explicit stderr log message.
31
+ *
32
+ * The message format is documented in spec §7 and asserted by integration tests:
33
+ * `no vibe-agent-toolkit.config.yaml or .git/ ancestor found; using <cwd> as projectRoot`
34
+ */
35
+ export function projectRootOrLoudCwd(startDir, logger) {
36
+ const root = findProjectRoot(startDir);
37
+ if (root !== null)
38
+ return root;
39
+ const cwd = safePath.resolve(startDir);
40
+ logger.warn(`no vibe-agent-toolkit.config.yaml or .git/ ancestor found; using ${cwd} as projectRoot`);
41
+ return cwd;
42
+ }
43
+ /**
44
+ * `tolerate null` policy — return `string | null`; caller handles either case.
45
+ */
46
+ export function projectRootOrNull(startDir) {
47
+ return findProjectRoot(startDir);
48
+ }
49
+ //# sourceMappingURL=project-root-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-root-policy.js","sourceRoot":"","sources":["../../src/utils/project-root-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAItE;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,WAAmB;IACtE,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,GAAG,WAAW,gEAAgE;YAC5E,kDAAkD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,MAAc;IACnE,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,CACT,oEAAoE,GAAG,iBAAiB,CACzF,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC"}
@@ -6,7 +6,7 @@ import { GitTracker } from '@vibe-agent-toolkit/utils';
6
6
  import type { Logger } from './logger.js';
7
7
  export interface ResourceLoadResult {
8
8
  scanPath: string;
9
- projectRoot: string | null;
9
+ projectRoot: string;
10
10
  config: ProjectConfig | undefined;
11
11
  registry: ResourceRegistry;
12
12
  gitTracker: GitTracker | undefined;
@@ -16,16 +16,21 @@ export interface ResourceLoadResult {
16
16
  *
17
17
  * Common pattern for CLI commands that need to:
18
18
  * 1. Determine scan path
19
- * 2. Find project root and load config
19
+ * 2. Load config from the pre-resolved project root
20
20
  * 3. Create registry and crawl
21
21
  *
22
22
  * Behavior:
23
23
  * - When path argument provided: use as baseDir, ignore config patterns (use defaults)
24
- * - When no path argument: use project root/cwd as baseDir, apply config patterns
24
+ * - When no path argument: use project root as baseDir, apply config patterns
25
+ *
26
+ * Per CLI-boundary rule (spec §5): `projectRoot` MUST be resolved by the
27
+ * caller using one of the policy helpers in `project-root-policy.ts`. This
28
+ * function does not call `findProjectRoot` itself.
25
29
  *
26
30
  * @param pathArg - Path argument from CLI (optional)
31
+ * @param projectRoot - Pre-resolved project root from the CLI boundary
27
32
  * @param logger - Logger instance
28
33
  * @returns Resource load result with registry and metadata
29
34
  */
30
- export declare function loadResourcesWithConfig(pathArg: string | undefined, logger: Logger): Promise<ResourceLoadResult>;
35
+ export declare function loadResourcesWithConfig(pathArg: string | undefined, projectRoot: string, logger: Logger): Promise<ResourceLoadResult>;
31
36
  //# sourceMappingURL=resource-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-loader.d.ts","sourceRoot":"","sources":["../../src/utils/resource-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,CAAC,CAmE7B"}
1
+ {"version":3,"file":"resource-loader.d.ts","sourceRoot":"","sources":["../../src/utils/resource-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,CAAC,CA2D7B"}
@@ -4,50 +4,47 @@
4
4
  import { ResourceRegistry, } from '@vibe-agent-toolkit/resources';
5
5
  import { GitTracker } from '@vibe-agent-toolkit/utils';
6
6
  import { loadConfig } from './config-loader.js';
7
- import { findProjectRoot } from './project-root.js';
8
7
  /**
9
8
  * Load resources from a path with config support
10
9
  *
11
10
  * Common pattern for CLI commands that need to:
12
11
  * 1. Determine scan path
13
- * 2. Find project root and load config
12
+ * 2. Load config from the pre-resolved project root
14
13
  * 3. Create registry and crawl
15
14
  *
16
15
  * Behavior:
17
16
  * - When path argument provided: use as baseDir, ignore config patterns (use defaults)
18
- * - When no path argument: use project root/cwd as baseDir, apply config patterns
17
+ * - When no path argument: use project root as baseDir, apply config patterns
18
+ *
19
+ * Per CLI-boundary rule (spec §5): `projectRoot` MUST be resolved by the
20
+ * caller using one of the policy helpers in `project-root-policy.ts`. This
21
+ * function does not call `findProjectRoot` itself.
19
22
  *
20
23
  * @param pathArg - Path argument from CLI (optional)
24
+ * @param projectRoot - Pre-resolved project root from the CLI boundary
21
25
  * @param logger - Logger instance
22
26
  * @returns Resource load result with registry and metadata
23
27
  */
24
- export async function loadResourcesWithConfig(pathArg, logger) {
25
- // Find project root and load config
26
- const projectRoot = findProjectRoot(process.cwd());
27
- const config = projectRoot ? loadConfig(projectRoot) : undefined;
28
+ export async function loadResourcesWithConfig(pathArg, projectRoot, logger) {
29
+ // Config lookup is anchored at the resolved projectRoot.
30
+ const config = loadConfig(projectRoot);
28
31
  if (config) {
29
- logger.debug(`Loaded config from ${projectRoot ?? 'unknown'}`);
30
- }
31
- // Create and initialize GitTracker if we have a project root
32
- let gitTracker;
33
- if (projectRoot) {
34
- gitTracker = new GitTracker(projectRoot);
35
- await gitTracker.initialize();
36
- const stats = gitTracker.getStats();
37
- logger.debug(`GitTracker initialized with ${stats.cacheSize} tracked files`);
32
+ logger.debug(`Loaded config from ${projectRoot}`);
38
33
  }
34
+ // Create and initialize GitTracker anchored at the resolved projectRoot.
35
+ const gitTracker = new GitTracker(projectRoot);
36
+ await gitTracker.initialize();
37
+ const stats = gitTracker.getStats();
38
+ logger.debug(`GitTracker initialized with ${stats.cacheSize} tracked files`);
39
39
  // Create registry and crawl
40
40
  // Build options conditionally to satisfy exactOptionalPropertyTypes
41
- const registryOptions = {};
41
+ const registryOptions = {
42
+ baseDir: projectRoot,
43
+ gitTracker,
44
+ };
42
45
  if (config?.resources?.collections) {
43
46
  registryOptions.config = config;
44
47
  }
45
- if (projectRoot) {
46
- registryOptions.baseDir = projectRoot;
47
- }
48
- if (gitTracker) {
49
- registryOptions.gitTracker = gitTracker;
50
- }
51
48
  const registry = new ResourceRegistry(registryOptions);
52
49
  let crawlOptions;
53
50
  if (pathArg) {
@@ -61,11 +58,10 @@ export async function loadResourcesWithConfig(pathArg, logger) {
61
58
  };
62
59
  }
63
60
  else {
64
- // No path argument: crawl from project root (or cwd) with config patterns
65
- const scanPath = projectRoot ?? process.cwd();
66
- logger.debug(`No path argument, using: ${scanPath}`);
61
+ // No path argument: crawl from projectRoot with config patterns
62
+ logger.debug(`No path argument, using: ${projectRoot}`);
67
63
  crawlOptions = {
68
- baseDir: scanPath,
64
+ baseDir: projectRoot,
69
65
  // Apply include patterns from config (if specified)
70
66
  ...(config?.resources?.include ? { include: config.resources.include } : {}),
71
67
  // Apply exclude patterns from config (if specified)
@@ -74,7 +70,7 @@ export async function loadResourcesWithConfig(pathArg, logger) {
74
70
  }
75
71
  await registry.crawl(crawlOptions);
76
72
  return {
77
- scanPath: pathArg ?? (projectRoot ?? process.cwd()),
73
+ scanPath: pathArg ?? projectRoot,
78
74
  projectRoot,
79
75
  config,
80
76
  registry,
@@ -1 +1 @@
1
- {"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../../src/utils/resource-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-loader.js","sourceRoot":"","sources":["../../src/utils/resource-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,GAGjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAWhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA2B,EAC3B,WAAmB,EACnB,MAAc;IAEd,yDAAyD;IACzD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,yEAAyE;IACzE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,SAAS,gBAAgB,CAAC,CAAC;IAE7E,4BAA4B;IAC5B,oEAAoE;IACpE,MAAM,eAAe,GAA4B;QAC/C,OAAO,EAAE,WAAW;QACpB,UAAU;KACX,CAAC;IACF,IAAI,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QACnC,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;IAClC,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAEvD,IAAI,YAAY,CAAC;IAEjB,IAAI,OAAO,EAAE,CAAC;QACZ,0EAA0E;QAC1E,kEAAkE;QAClE,MAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAEzD,YAAY,GAAG;YACb,OAAO,EAAE,OAAO;YAChB,8DAA8D;SAC/D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,MAAM,CAAC,KAAK,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;QAExD,YAAY,GAAG;YACb,OAAO,EAAE,WAAW;YACpB,oDAAoD;YACpD,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,oDAAoD;YACpD,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEnC,OAAO;QACL,QAAQ,EAAE,OAAO,IAAI,WAAW;QAChC,WAAW;QACX,MAAM;QACN,QAAQ;QACR,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -12,7 +12,8 @@
12
12
  * nor in marketplace (which knows nothing about config-level packaging
13
13
  * options).
14
14
  */
15
- import { type Observation, type PackagingValidationResult, type ValidationIssue } from '@vibe-agent-toolkit/agent-skills';
15
+ import { type ValidationIssue } from '@vibe-agent-toolkit/agent-schema';
16
+ import { type Observation, type PackagingValidationResult } from '@vibe-agent-toolkit/agent-skills';
16
17
  import { type Target, type Verdict } from '@vibe-agent-toolkit/claude-marketplace';
17
18
  /**
18
19
  * Convert a verdict into a ValidationIssue using CODE_REGISTRY for severity,
@@ -1 +1 @@
1
- {"version":3,"file":"verdict-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/verdict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,wCAAwC,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAUlF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,QAAQ,EAAE,MAAM,GACf,eAAe,EAAE,CAiBnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,yBAAyB,EACjC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,eAAe,EAAE,MAAM,GACtB,IAAI,CAgBN"}
1
+ {"version":3,"file":"verdict-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/verdict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,wCAAwC,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAUlF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,QAAQ,EAAE,MAAM,GACf,eAAe,EAAE,CAiBnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,yBAAyB,EACjC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,eAAe,EAAE,MAAM,GACtB,IAAI,CAgBN"}
@@ -12,7 +12,7 @@
12
12
  * nor in marketplace (which knows nothing about config-level packaging
13
13
  * options).
14
14
  */
15
- import { CODE_REGISTRY, } from '@vibe-agent-toolkit/agent-skills';
15
+ import { CODE_REGISTRY } from '@vibe-agent-toolkit/agent-schema';
16
16
  import { computeVerdicts, resolveEffectiveTargets, } from '@vibe-agent-toolkit/claude-marketplace';
17
17
  /**
18
18
  * Convert a verdict into a ValidationIssue using CODE_REGISTRY for severity,
@@ -1 +1 @@
1
- {"version":3,"file":"verdict-helpers.js","sourceRoot":"","sources":["../../src/utils/verdict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,aAAa,GAId,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,uBAAuB,GAGxB,MAAM,wCAAwC,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,QAAgB;IAC/D,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,eAAe;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ;QACR,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAoC,EACpC,aAAgD,EAChD,QAAgB;IAEhB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;QAC/C,aAAa,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC3E,aAAa,EAAE,SAAS;QACxB,kBAAkB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC/B,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;QAC/B,OAAO,EAAE,gBAAgB;KAC1B,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAiC,EACjC,aAAgD,EAChD,eAAuB;IAEvB,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACjG,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;IAC1B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"verdict-helpers.js","sourceRoot":"","sources":["../../src/utils/verdict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAwB,MAAM,kCAAkC,CAAC;AAKvF,OAAO,EACL,eAAe,EACf,uBAAuB,GAGxB,MAAM,wCAAwC,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,QAAgB;IAC/D,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,eAAe;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ;QACR,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAoC,EACpC,aAAgD,EAChD,QAAgB;IAEhB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;QAC/C,aAAa,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC3E,aAAa,EAAE,SAAS;QACxB,kBAAkB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC/B,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;QAC/B,OAAO,EAAE,gBAAgB;KAC1B,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAiC,EACjC,aAAgD,EAChD,eAAuB;IAEvB,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACjG,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;IAC1B,CAAC;AACH,CAAC"}
package/docs/agent.md CHANGED
@@ -93,6 +93,31 @@ vat agent validate ./my-custom-agent/agent.yaml
93
93
  - `OPENAI_API_KEY` - API key for OpenAI
94
94
  - `GOOGLE_API_KEY` - API key for Google (Gemini)
95
95
 
96
+ ## Requirements
97
+
98
+ Each `vat agent` subcommand declares its own `projectRoot` and config policy:
99
+
100
+ | Subcommand | `projectRoot` | Config |
101
+ |---|---|---|
102
+ | `vat agent list` | optional (tolerates absence) | not used |
103
+ | `vat agent installed` | N/A | not used |
104
+ | `vat agent build <pathOrName>` | required (errors without `vibe-agent-toolkit.config.yaml` or `.git/` ancestor) | required file with `agents.*` fields populated |
105
+ | `vat agent run <pathOrName> <input>` | optional (path-explicit; tolerates absence) | optional (uses defaults if absent) |
106
+ | `vat agent validate <pathOrName>` | required | optional (uses defaults if absent) |
107
+ | `vat agent import <skillPath>` | N/A | not used |
108
+ | `vat agent install <agentName>` | N/A | not used |
109
+ | `vat agent uninstall <agentName>` | N/A | not used |
110
+
111
+ **Why `build` and `validate` require `projectRoot`:** both are explicit-adoption
112
+ operations. Building or source-validating an agent without an authoring
113
+ boundary would silently accept arbitrary trees as "the project" and would not
114
+ participate in the unified validation framework. `vat agent run` is
115
+ path-explicit and runs from anywhere; `vat agent list` discovers without
116
+ needing a project context.
117
+
118
+ See [Roots and Config — Canonical Concepts](../../../docs/concepts/roots-and-config.md)
119
+ for terminology.
120
+
96
121
  ## See Also
97
122
 
98
123
  - [@vibe-agent-toolkit/agent-schema](../../agent-schema/README.md) - Schema reference