@stackbilt/cli 0.1.19 → 0.2.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.
Files changed (40) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +137 -70
  3. package/dist/__tests__/hook.test.d.ts +2 -0
  4. package/dist/__tests__/hook.test.d.ts.map +1 -0
  5. package/dist/__tests__/hook.test.js +83 -0
  6. package/dist/__tests__/hook.test.js.map +1 -0
  7. package/dist/bin.js +0 -0
  8. package/dist/commands/adf.d.ts +8 -0
  9. package/dist/commands/adf.d.ts.map +1 -0
  10. package/dist/commands/adf.js +342 -0
  11. package/dist/commands/adf.js.map +1 -0
  12. package/dist/commands/audit.d.ts.map +1 -1
  13. package/dist/commands/audit.js +57 -22
  14. package/dist/commands/audit.js.map +1 -1
  15. package/dist/commands/drift.d.ts.map +1 -1
  16. package/dist/commands/drift.js +7 -2
  17. package/dist/commands/drift.js.map +1 -1
  18. package/dist/commands/hook.d.ts +8 -0
  19. package/dist/commands/hook.d.ts.map +1 -0
  20. package/dist/commands/hook.js +166 -0
  21. package/dist/commands/hook.js.map +1 -0
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +16 -2
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/setup.d.ts.map +1 -1
  26. package/dist/commands/setup.js +188 -17
  27. package/dist/commands/setup.js.map +1 -1
  28. package/dist/commands/validate.d.ts.map +1 -1
  29. package/dist/commands/validate.js +90 -22
  30. package/dist/commands/validate.js.map +1 -1
  31. package/dist/commands/why.js +52 -25
  32. package/dist/commands/why.js.map +1 -1
  33. package/dist/config.d.ts +1 -0
  34. package/dist/config.d.ts.map +1 -1
  35. package/dist/config.js +30 -1
  36. package/dist/config.js.map +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +9 -0
  39. package/dist/index.js.map +1 -1
  40. package/package.json +13 -12
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * charter hook
4
+ *
5
+ * Installs git hooks for commit-time governance ergonomics.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.hookCommand = hookCommand;
42
+ const node_child_process_1 = require("node:child_process");
43
+ const fs = __importStar(require("node:fs"));
44
+ const path = __importStar(require("node:path"));
45
+ const index_1 = require("../index");
46
+ const COMMIT_MSG_HOOK_MARKER = '# Managed by Charter: commit-msg trailer normalizer';
47
+ const COMMIT_MSG_HOOK_CONTENT = `#!/usr/bin/env sh
48
+ ${COMMIT_MSG_HOOK_MARKER}
49
+ set -eu
50
+
51
+ msg_file="$1"
52
+
53
+ governed_by="$(grep -i '^Governed-By:' "$msg_file" | tail -n 1 | sed -E 's/^[Gg]overned-[Bb]y:[[:space:]]*//')"
54
+ resolves_request="$(grep -i '^Resolves-Request:' "$msg_file" | tail -n 1 | sed -E 's/^[Rr]esolves-[Rr]equest:[[:space:]]*//')"
55
+
56
+ if [ -n "$governed_by" ]; then
57
+ git interpret-trailers --in-place --if-exists=replace --trailer "Governed-By: $governed_by" "$msg_file"
58
+ fi
59
+
60
+ if [ -n "$resolves_request" ]; then
61
+ git interpret-trailers --in-place --if-exists=replace --trailer "Resolves-Request: $resolves_request" "$msg_file"
62
+ fi
63
+ `;
64
+ async function hookCommand(options, args) {
65
+ if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
66
+ printHelp();
67
+ return index_1.EXIT_CODE.SUCCESS;
68
+ }
69
+ if (args[0] !== 'install') {
70
+ throw new index_1.CLIError(`Unknown hook subcommand: ${args[0]}. Supported: install`);
71
+ }
72
+ if (!args.includes('--commit-msg')) {
73
+ throw new index_1.CLIError('hook install requires --commit-msg.');
74
+ }
75
+ const force = options.yes || args.includes('--force');
76
+ const result = installCommitMsgHook(force);
77
+ if (options.format === 'json') {
78
+ console.log(JSON.stringify(result, null, 2));
79
+ }
80
+ else if (result.status === 'INSTALLED') {
81
+ console.log(` [ok] Installed commit-msg hook at ${result.hookPath}`);
82
+ }
83
+ else {
84
+ console.log(` [warn] Skipped commit-msg hook install at ${result.hookPath}: ${result.reason}`);
85
+ console.log(' Re-run with --force (or --yes) to overwrite existing non-Charter hook.');
86
+ }
87
+ return index_1.EXIT_CODE.SUCCESS;
88
+ }
89
+ function installCommitMsgHook(force) {
90
+ ensureGitRepo();
91
+ const hooksDir = resolveHooksDir();
92
+ const hookPath = path.join(hooksDir, 'commit-msg');
93
+ const normalizedHookPath = hookPath.replace(/\\/g, '/');
94
+ const exists = fs.existsSync(hookPath);
95
+ if (exists) {
96
+ const current = fs.readFileSync(hookPath, 'utf-8');
97
+ const managedByCharter = current.includes(COMMIT_MSG_HOOK_MARKER);
98
+ if (!managedByCharter && !force) {
99
+ return {
100
+ status: 'SKIPPED',
101
+ hookPath: normalizedHookPath,
102
+ reason: 'existing commit-msg hook is not managed by Charter',
103
+ };
104
+ }
105
+ }
106
+ else {
107
+ fs.mkdirSync(hooksDir, { recursive: true });
108
+ }
109
+ fs.writeFileSync(hookPath, COMMIT_MSG_HOOK_CONTENT);
110
+ setExecutableBit(hookPath);
111
+ return {
112
+ status: 'INSTALLED',
113
+ hookPath: normalizedHookPath,
114
+ };
115
+ }
116
+ function resolveHooksDir() {
117
+ const configuredPath = getGitConfig('core.hooksPath');
118
+ if (configuredPath && configuredPath.trim().length > 0) {
119
+ return path.resolve(configuredPath.trim());
120
+ }
121
+ const gitDir = runGit(['rev-parse', '--git-dir']).trim();
122
+ return path.resolve(gitDir, 'hooks');
123
+ }
124
+ function getGitConfig(key) {
125
+ try {
126
+ return runGit(['config', '--get', key]).trim();
127
+ }
128
+ catch {
129
+ return '';
130
+ }
131
+ }
132
+ function ensureGitRepo() {
133
+ try {
134
+ runGit(['rev-parse', '--is-inside-work-tree']);
135
+ }
136
+ catch {
137
+ throw new index_1.CLIError('Not inside a git repository.');
138
+ }
139
+ }
140
+ function runGit(args) {
141
+ return (0, node_child_process_1.execFileSync)('git', args, {
142
+ encoding: 'utf-8',
143
+ stdio: ['ignore', 'pipe', 'pipe'],
144
+ maxBuffer: 10 * 1024 * 1024,
145
+ });
146
+ }
147
+ function setExecutableBit(targetPath) {
148
+ try {
149
+ fs.chmodSync(targetPath, 0o755);
150
+ }
151
+ catch {
152
+ // best-effort on non-posix filesystems
153
+ }
154
+ }
155
+ function printHelp() {
156
+ console.log('');
157
+ console.log(' charter hook');
158
+ console.log('');
159
+ console.log(' Usage:');
160
+ console.log(' charter hook install --commit-msg [--force]');
161
+ console.log('');
162
+ console.log(' Install a git commit-msg hook that normalizes Governed-By and');
163
+ console.log(' Resolves-Request trailers using git interpret-trailers.');
164
+ console.log('');
165
+ }
166
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAsL1E,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3F;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,GAAE,iBAAsB,GAAG,UAAU,CAqCpH"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AA8L1E,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3F;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,GAAE,iBAAsB,GAAG,UAAU,CAqCpH"}
@@ -201,6 +201,9 @@ Governed-By: <ADR-ID or ledger entry reference>
201
201
  Resolves-Request: <governance request ID>
202
202
  \`\`\`
203
203
 
204
+ Keep governance trailers in one contiguous block at the end of the commit message.
205
+ Do not insert a blank line between governance trailers and other trailers like Co-Authored-By.
206
+
204
207
  ## Change Classification
205
208
 
206
209
  Changes are classified as:
@@ -217,6 +220,11 @@ Capture waiver reason, approver, and expiration.
217
220
 
218
221
  Cross-cutting changes require architectural review before merge.
219
222
  Escalate ambiguous or high-risk decisions for explicit approval.
223
+
224
+ ## Agent Standards Compatibility
225
+
226
+ If repository-level agent standards exist (for example \`AGENTS.md\`, \`CLAUDE.md\`, \`GEMINI.md\`), Charter policy is complementary and does not override those files.
227
+ Keep governance workflows aligned across all active agent instruction standards.
220
228
  `;
221
229
  const GITIGNORE_CONTENT = `# Charter local state
222
230
  .cache/
@@ -308,8 +316,14 @@ function getFlag(args, flag) {
308
316
  }
309
317
  function buildPatternTemplate(preset, features) {
310
318
  const base = JSON.parse(JSON.stringify(PATTERN_TEMPLATES[preset]));
319
+ const finalize = (items) => ({
320
+ customized: false,
321
+ preset,
322
+ generatedAt: new Date().toISOString(),
323
+ patterns: items,
324
+ });
311
325
  if (!features) {
312
- return base;
326
+ return finalize(base);
313
327
  }
314
328
  if (features.cloudflare) {
315
329
  base.unshift({
@@ -345,6 +359,6 @@ function buildPatternTemplate(preset, features) {
345
359
  for (const pattern of base) {
346
360
  dedup.set(pattern.name, pattern);
347
361
  }
348
- return [...dedup.values()];
362
+ return finalize([...dedup.values()]);
349
363
  }
350
364
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA2I3C,wBAAsB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwNvF"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA6J3C,wBAAsB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiOvF"}
@@ -50,7 +50,30 @@ const index_2 = require("../index");
50
50
  const init_1 = require("./init");
51
51
  const package_json_1 = __importDefault(require("../../package.json"));
52
52
  const CLI_VERSION = package_json_1.default.version;
53
- function getGithubWorkflow() {
53
+ function getGithubWorkflow(packageManager) {
54
+ const installStep = packageManager === 'pnpm'
55
+ ? ` - uses: pnpm/action-setup@v4
56
+ with:
57
+ version: 9
58
+
59
+ - uses: actions/setup-node@v4
60
+ with:
61
+ node-version: '20'
62
+ cache: 'pnpm'
63
+
64
+ - name: Install dependencies
65
+ run: pnpm install --frozen-lockfile`
66
+ : ` - uses: actions/setup-node@v4
67
+ with:
68
+ node-version: '20'
69
+
70
+ - name: Install dependencies
71
+ run: |
72
+ if [ -f package-lock.json ]; then
73
+ npm ci
74
+ else
75
+ npm install
76
+ fi`;
54
77
  return `name: Governance Check
55
78
 
56
79
  on:
@@ -71,17 +94,7 @@ jobs:
71
94
  with:
72
95
  fetch-depth: 0
73
96
 
74
- - uses: actions/setup-node@v4
75
- with:
76
- node-version: '20'
77
-
78
- - name: Install dependencies
79
- run: |
80
- if [ -f package-lock.json ]; then
81
- npm ci
82
- else
83
- npm install
84
- fi
97
+ ${installStep}
85
98
 
86
99
  - name: Validate Commits
87
100
  run: npx charter validate --ci --format text
@@ -109,6 +122,7 @@ async function setupCommand(options, args) {
109
122
  }
110
123
  const contexts = loadPackageContexts();
111
124
  const detection = detectStack(contexts);
125
+ const packageManager = detectPackageManager(contexts);
112
126
  const selectedPreset = isValidPreset(presetFlag) ? presetFlag : detection.suggestedPreset;
113
127
  const inferenceMode = presetFlag
114
128
  ? 'preset-override'
@@ -130,6 +144,8 @@ async function setupCommand(options, args) {
130
144
  console.log(` Frameworks: ${detection.frameworks.join(', ') || 'none detected'}`);
131
145
  console.log(` State: ${detection.state.join(', ') || 'none detected'}`);
132
146
  console.log(` Sources: ${detection.sources.join(', ') || 'none'}`);
147
+ console.log(` Agent standards: ${detection.agentStandards.join(', ') || 'none detected'}`);
148
+ console.log(` Monorepo: ${detection.monorepo ? 'yes' : 'no'}`);
133
149
  console.log(` Confidence: ${detection.confidence}`);
134
150
  console.log(` Selected preset: ${selectedPreset} (${inferenceMode})`);
135
151
  if (detection.mixedStack) {
@@ -148,7 +164,7 @@ async function setupCommand(options, args) {
148
164
  const baselinePlan = planBaselineMutation(baselinePath, explicitForce);
149
165
  const workflowPath = path.join('.github', 'workflows', 'charter-governance.yml');
150
166
  const workflowPlan = ciMode === 'github'
151
- ? planManagedFile(workflowPath, getGithubWorkflow())
167
+ ? planManagedFile(workflowPath, getGithubWorkflow(packageManager))
152
168
  : { action: 'skip' };
153
169
  const manifestPlan = syncPackageManifest(selectedPreset, !noDependencySync, false);
154
170
  const initResult = (0, init_1.initializeCharter)(options.configPath, explicitForce, {
@@ -227,7 +243,7 @@ async function setupCommand(options, args) {
227
243
  },
228
244
  };
229
245
  if (ciMode === 'github') {
230
- const workflowWrite = applyManagedFile(workflowPath, getGithubWorkflow(), force);
246
+ const workflowWrite = applyManagedFile(workflowPath, getGithubWorkflow(packageManager), force);
231
247
  result.workflow = {
232
248
  mode: 'github',
233
249
  path: workflowPath,
@@ -288,9 +304,15 @@ async function setupCommand(options, args) {
288
304
  console.log(' - Audit-ready governance evidence from repo history');
289
305
  console.log('');
290
306
  console.log(' Run now:');
291
- console.log(' 1. charter validate --format text');
292
- console.log(' 2. charter drift --format text');
293
- console.log(' 3. charter audit --format text');
307
+ console.log(' 1. charter classify "<planned change summary>"');
308
+ console.log(' 2. charter hook install --commit-msg');
309
+ console.log(' 3. charter validate --format text');
310
+ console.log(' 4. charter drift --format text');
311
+ console.log(' 5. charter audit --format text');
312
+ console.log('');
313
+ console.log(' Adoption ramp option:');
314
+ console.log(' - Set "validation.citationStrictness": "WARN" in .charter/config.json for an initial non-blocking trailer policy.');
315
+ console.log(' - Keep "git.trailerThreshold" at HIGH initially, then tighten based on team maturity.');
294
316
  return index_2.EXIT_CODE.SUCCESS;
295
317
  }
296
318
  function detectStack(contexts) {
@@ -300,6 +322,8 @@ function detectStack(contexts) {
300
322
  frameworks: [],
301
323
  state: [],
302
324
  sources: [],
325
+ agentStandards: [],
326
+ monorepo: false,
303
327
  signals: {
304
328
  hasFrontend: false,
305
329
  hasBackend: false,
@@ -308,6 +332,7 @@ function detectStack(contexts) {
308
332
  hasHono: false,
309
333
  hasReact: false,
310
334
  hasVite: false,
335
+ hasPnpm: false,
311
336
  },
312
337
  mixedStack: false,
313
338
  confidence: 'LOW',
@@ -331,6 +356,12 @@ function detectStack(contexts) {
331
356
  const hasHono = hasAny(depNames, ['hono']);
332
357
  const hasReact = hasAny(depNames, ['react']);
333
358
  const hasVite = hasAny(depNames, ['vite']);
359
+ const hasPnpm = contexts.some((ctx) => !!ctx.engines?.pnpm)
360
+ || contexts.some((ctx) => typeof ctx.packageManager === 'string' && ctx.packageManager.toLowerCase().startsWith('pnpm@'))
361
+ || fs.existsSync(path.resolve('pnpm-lock.yaml'));
362
+ const monorepo = contexts.length > 1 || fs.existsSync(path.resolve('pnpm-workspace.yaml'));
363
+ const agentStandards = ['AGENTS.md', 'CLAUDE.md', 'GEMINI.md']
364
+ .filter((filename) => fs.existsSync(path.resolve(filename)));
334
365
  const frameworks = [];
335
366
  const runtime = [];
336
367
  const state = [];
@@ -359,11 +390,15 @@ function detectStack(contexts) {
359
390
  hasHono,
360
391
  hasReact,
361
392
  hasVite,
393
+ hasPnpm,
362
394
  };
363
395
  const warnings = [];
364
396
  if (dedupRuntime.length > 1 && !(hasFrontend && (hasBackend || hasWorker))) {
365
397
  warnings.push('Multiple runtime families detected without clear frontend/backend split; verify preset selection.');
366
398
  }
399
+ if (agentStandards.length > 0) {
400
+ warnings.push(`Agent standards detected (${agentStandards.join(', ')}); align Charter policy with existing agent instructions.`);
401
+ }
367
402
  if (mixedStack) {
368
403
  const isClassicMixed = hasFrontend && (hasBackend || hasWorker);
369
404
  return {
@@ -371,6 +406,8 @@ function detectStack(contexts) {
371
406
  frameworks: dedup(frameworks),
372
407
  state: dedup(state),
373
408
  sources: contexts.map((c) => c.source),
409
+ agentStandards,
410
+ monorepo,
374
411
  signals,
375
412
  mixedStack: true,
376
413
  confidence: isClassicMixed ? 'HIGH' : 'MEDIUM',
@@ -384,6 +421,8 @@ function detectStack(contexts) {
384
421
  frameworks: dedup(frameworks),
385
422
  state: dedup(state),
386
423
  sources: contexts.map((c) => c.source),
424
+ agentStandards,
425
+ monorepo,
387
426
  signals,
388
427
  mixedStack: false,
389
428
  confidence: 'HIGH',
@@ -397,6 +436,8 @@ function detectStack(contexts) {
397
436
  frameworks: dedup(frameworks),
398
437
  state: dedup(state),
399
438
  sources: contexts.map((c) => c.source),
439
+ agentStandards,
440
+ monorepo,
400
441
  signals,
401
442
  mixedStack: false,
402
443
  confidence: warnings.length > 0 ? 'MEDIUM' : 'HIGH',
@@ -410,6 +451,8 @@ function detectStack(contexts) {
410
451
  frameworks: dedup(frameworks),
411
452
  state: dedup(state),
412
453
  sources: contexts.map((c) => c.source),
454
+ agentStandards,
455
+ monorepo,
413
456
  signals,
414
457
  mixedStack: false,
415
458
  confidence: warnings.length > 0 ? 'MEDIUM' : 'HIGH',
@@ -423,6 +466,8 @@ function detectStack(contexts) {
423
466
  frameworks: dedup(frameworks),
424
467
  state: dedup(state),
425
468
  sources: contexts.map((c) => c.source),
469
+ agentStandards,
470
+ monorepo,
426
471
  signals,
427
472
  mixedStack: false,
428
473
  confidence: 'MEDIUM',
@@ -435,6 +480,8 @@ function detectStack(contexts) {
435
480
  frameworks: dedup(frameworks),
436
481
  state: dedup(state),
437
482
  sources: contexts.map((c) => c.source),
483
+ agentStandards,
484
+ monorepo,
438
485
  signals,
439
486
  mixedStack: false,
440
487
  confidence: 'LOW',
@@ -456,6 +503,17 @@ function loadPackageContexts() {
456
503
  }
457
504
  }
458
505
  }
506
+ const packagesDir = path.resolve('packages');
507
+ if (fs.existsSync(packagesDir)) {
508
+ for (const entry of fs.readdirSync(packagesDir, { withFileTypes: true })) {
509
+ if (entry.isDirectory()) {
510
+ candidates.add(path.join('packages', entry.name, 'package.json'));
511
+ }
512
+ }
513
+ }
514
+ for (const workspaceManifest of resolvePnpmWorkspacePackageJsons()) {
515
+ candidates.add(workspaceManifest);
516
+ }
459
517
  const contexts = [];
460
518
  for (const relativePath of candidates) {
461
519
  const absolutePath = path.resolve(relativePath);
@@ -468,6 +526,7 @@ function loadPackageContexts() {
468
526
  dependencies: parsed.dependencies,
469
527
  devDependencies: parsed.devDependencies,
470
528
  engines: parsed.engines,
529
+ packageManager: parsed.packageManager,
471
530
  name: parsed.name,
472
531
  });
473
532
  }
@@ -477,6 +536,118 @@ function loadPackageContexts() {
477
536
  }
478
537
  return contexts;
479
538
  }
539
+ function detectPackageManager(contexts) {
540
+ const root = contexts.find((ctx) => ctx.source === 'package.json');
541
+ if (root?.engines?.pnpm || fs.existsSync(path.resolve('pnpm-lock.yaml'))) {
542
+ return 'pnpm';
543
+ }
544
+ if (typeof root?.packageManager === 'string' && root.packageManager.toLowerCase().startsWith('pnpm@')) {
545
+ return 'pnpm';
546
+ }
547
+ return 'npm';
548
+ }
549
+ function resolvePnpmWorkspacePackageJsons() {
550
+ const workspaceFile = path.resolve('pnpm-workspace.yaml');
551
+ if (!fs.existsSync(workspaceFile))
552
+ return [];
553
+ let content = '';
554
+ try {
555
+ content = fs.readFileSync(workspaceFile, 'utf-8');
556
+ }
557
+ catch {
558
+ return [];
559
+ }
560
+ const globs = parsePnpmWorkspaceGlobs(content);
561
+ const resolved = new Set();
562
+ for (const glob of globs) {
563
+ for (const match of expandWorkspacePackageJsonGlob(glob)) {
564
+ resolved.add(match);
565
+ }
566
+ }
567
+ return [...resolved];
568
+ }
569
+ function parsePnpmWorkspaceGlobs(content) {
570
+ const lines = content.split(/\r?\n/);
571
+ const globs = [];
572
+ let inPackagesBlock = false;
573
+ for (const line of lines) {
574
+ const trimmed = line.trim();
575
+ if (!inPackagesBlock) {
576
+ if (trimmed === 'packages:') {
577
+ inPackagesBlock = true;
578
+ }
579
+ continue;
580
+ }
581
+ if (trimmed.length > 0 && !line.startsWith(' ') && !line.startsWith('\t') && !line.trimStart().startsWith('-')) {
582
+ break;
583
+ }
584
+ const match = line.match(/^\s*-\s*['"]?([^'"]+)['"]?\s*$/);
585
+ if (match) {
586
+ globs.push(match[1].trim());
587
+ }
588
+ }
589
+ return globs;
590
+ }
591
+ function expandWorkspacePackageJsonGlob(globPattern) {
592
+ const normalized = globPattern.replace(/\\/g, '/').replace(/\/+$/, '');
593
+ if (normalized.length === 0)
594
+ return [];
595
+ if (!normalized.includes('*')) {
596
+ return maybePackageJsonPathsForDir(path.resolve(normalized), normalized);
597
+ }
598
+ if (normalized.endsWith('/*')) {
599
+ const root = normalized.slice(0, -2);
600
+ const rootAbsolute = path.resolve(root);
601
+ if (!fs.existsSync(rootAbsolute) || !fs.statSync(rootAbsolute).isDirectory()) {
602
+ return [];
603
+ }
604
+ const results = [];
605
+ for (const entry of fs.readdirSync(rootAbsolute, { withFileTypes: true })) {
606
+ if (!entry.isDirectory())
607
+ continue;
608
+ const relative = path.posix.join(root, entry.name);
609
+ results.push(...maybePackageJsonPathsForDir(path.resolve(relative), relative));
610
+ }
611
+ return results;
612
+ }
613
+ if (normalized.includes('/**')) {
614
+ const root = normalized.split('/**')[0];
615
+ const rootAbsolute = path.resolve(root);
616
+ if (!fs.existsSync(rootAbsolute) || !fs.statSync(rootAbsolute).isDirectory()) {
617
+ return [];
618
+ }
619
+ return collectPackageJsonsRecursive(rootAbsolute)
620
+ .map((absolute) => path.relative(process.cwd(), absolute).replace(/\\/g, '/'));
621
+ }
622
+ return [];
623
+ }
624
+ function maybePackageJsonPathsForDir(absoluteDir, relativeDir) {
625
+ const manifest = path.join(absoluteDir, 'package.json');
626
+ if (!fs.existsSync(manifest))
627
+ return [];
628
+ return [path.posix.join(relativeDir, 'package.json')];
629
+ }
630
+ function collectPackageJsonsRecursive(rootDir) {
631
+ const results = [];
632
+ const stack = [rootDir];
633
+ while (stack.length > 0) {
634
+ const current = stack.pop();
635
+ if (!current)
636
+ continue;
637
+ const manifest = path.join(current, 'package.json');
638
+ if (fs.existsSync(manifest)) {
639
+ results.push(manifest);
640
+ }
641
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
642
+ if (!entry.isDirectory())
643
+ continue;
644
+ if (entry.name === 'node_modules' || entry.name.startsWith('.'))
645
+ continue;
646
+ stack.push(path.join(current, entry.name));
647
+ }
648
+ }
649
+ return results;
650
+ }
480
651
  function inferProjectName(contexts) {
481
652
  const root = contexts.find((c) => c.source === 'package.json');
482
653
  if (root?.name && root.name.trim().length > 0) {