@stackbilt/cli 0.12.0 → 0.15.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/LICENSE +206 -0
- package/dist/__tests__/bootstrap.test.js +95 -0
- package/dist/__tests__/bootstrap.test.js.map +1 -1
- package/dist/__tests__/context.test.d.ts +2 -0
- package/dist/__tests__/context.test.d.ts.map +1 -0
- package/dist/__tests__/context.test.js +137 -0
- package/dist/__tests__/context.test.js.map +1 -0
- package/dist/__tests__/deprecated-commands.test.d.ts +2 -0
- package/dist/__tests__/deprecated-commands.test.d.ts.map +1 -0
- package/dist/__tests__/deprecated-commands.test.js +59 -0
- package/dist/__tests__/deprecated-commands.test.js.map +1 -0
- package/dist/__tests__/login.test.js +24 -1
- package/dist/__tests__/login.test.js.map +1 -1
- package/dist/__tests__/stamp-policies.test.d.ts +2 -0
- package/dist/__tests__/stamp-policies.test.d.ts.map +1 -0
- package/dist/__tests__/stamp-policies.test.js +97 -0
- package/dist/__tests__/stamp-policies.test.js.map +1 -0
- package/dist/bin.js +0 -0
- package/dist/commands/architect.d.ts.map +1 -1
- package/dist/commands/architect.js +2 -0
- package/dist/commands/architect.js.map +1 -1
- package/dist/commands/bootstrap.d.ts.map +1 -1
- package/dist/commands/bootstrap.js +157 -7
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/context.d.ts +27 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +650 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/deprecation-warning.d.ts +4 -0
- package/dist/commands/deprecation-warning.d.ts.map +1 -0
- package/dist/commands/deprecation-warning.js +20 -0
- package/dist/commands/deprecation-warning.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +45 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/drift.d.ts.map +1 -1
- package/dist/commands/drift.js +59 -6
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +75 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +2 -7
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +2 -0
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/scaffold.d.ts.map +1 -1
- package/dist/commands/scaffold.js +2 -0
- package/dist/commands/scaffold.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +20 -0
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/stamp-policies.d.ts +15 -0
- package/dist/commands/stamp-policies.d.ts.map +1 -0
- package/dist/commands/stamp-policies.js +108 -0
- package/dist/commands/stamp-policies.js.map +1 -0
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/package.json +16 -15
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const vitest_1 = require("vitest");
|
|
4
4
|
const login_1 = require("../commands/login");
|
|
5
5
|
const credentials_1 = require("../credentials");
|
|
6
|
+
const deprecation_warning_1 = require("../commands/deprecation-warning");
|
|
6
7
|
const options = {
|
|
7
8
|
format: 'text',
|
|
8
9
|
configPath: '.charter',
|
|
@@ -11,6 +12,7 @@ const options = {
|
|
|
11
12
|
};
|
|
12
13
|
(0, vitest_1.describe)('charter login — deprecation notice', () => {
|
|
13
14
|
const originalEnv = process.env[credentials_1.API_KEY_ENV_VAR];
|
|
15
|
+
const originalSuppress = process.env[deprecation_warning_1.DEPRECATION_WARNING_ENV_VAR];
|
|
14
16
|
(0, vitest_1.beforeEach)(() => {
|
|
15
17
|
delete process.env[credentials_1.API_KEY_ENV_VAR];
|
|
16
18
|
});
|
|
@@ -21,6 +23,12 @@ const options = {
|
|
|
21
23
|
else {
|
|
22
24
|
process.env[credentials_1.API_KEY_ENV_VAR] = originalEnv;
|
|
23
25
|
}
|
|
26
|
+
if (originalSuppress === undefined) {
|
|
27
|
+
delete process.env[deprecation_warning_1.DEPRECATION_WARNING_ENV_VAR];
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
process.env[deprecation_warning_1.DEPRECATION_WARNING_ENV_VAR] = originalSuppress;
|
|
31
|
+
}
|
|
24
32
|
vitest_1.vi.restoreAllMocks();
|
|
25
33
|
});
|
|
26
34
|
(0, vitest_1.it)('writes a deprecation notice to stderr when invoked without args', async () => {
|
|
@@ -29,7 +37,7 @@ const options = {
|
|
|
29
37
|
await (0, login_1.loginCommand)(options, []);
|
|
30
38
|
const stderrOutput = stderr.mock.calls.map((c) => String(c[0])).join('');
|
|
31
39
|
(0, vitest_1.expect)(stderrOutput).toMatch(/deprecated/i);
|
|
32
|
-
(0, vitest_1.expect)(stderrOutput).toContain(
|
|
40
|
+
(0, vitest_1.expect)(stderrOutput).toContain('@stackbilt/build');
|
|
33
41
|
});
|
|
34
42
|
(0, vitest_1.it)('reports env-var usage when STACKBILT_API_KEY is set and no --key flag', async () => {
|
|
35
43
|
process.env[credentials_1.API_KEY_ENV_VAR] = 'ea_login_test_key';
|
|
@@ -39,5 +47,20 @@ const options = {
|
|
|
39
47
|
const stdoutOutput = log.mock.calls.map((c) => String(c[0])).join('\n');
|
|
40
48
|
(0, vitest_1.expect)(stdoutOutput).toMatch(new RegExp(`Using ${credentials_1.API_KEY_ENV_VAR} from environment`));
|
|
41
49
|
});
|
|
50
|
+
(0, vitest_1.it)('suppresses warning when CHARTER_NO_DEPRECATION_WARNING=1', async () => {
|
|
51
|
+
process.env[deprecation_warning_1.DEPRECATION_WARNING_ENV_VAR] = '1';
|
|
52
|
+
const stderr = vitest_1.vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
53
|
+
vitest_1.vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
54
|
+
await (0, login_1.loginCommand)(options, []);
|
|
55
|
+
const stderrOutput = stderr.mock.calls.map((c) => String(c[0])).join('');
|
|
56
|
+
(0, vitest_1.expect)(stderrOutput).toBe('');
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('suppresses warning when --no-deprecation-warning is passed', async () => {
|
|
59
|
+
const stderr = vitest_1.vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
|
|
60
|
+
vitest_1.vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
61
|
+
await (0, login_1.loginCommand)(options, ['--no-deprecation-warning']);
|
|
62
|
+
const stderrOutput = stderr.mock.calls.map((c) => String(c[0])).join('');
|
|
63
|
+
(0, vitest_1.expect)(stderrOutput).toBe('');
|
|
64
|
+
});
|
|
42
65
|
});
|
|
43
66
|
//# sourceMappingURL=login.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../src/__tests__/login.test.ts"],"names":[],"mappings":";;AAAA,mCAAyE;AACzE,6CAAiD;AAEjD,gDAAiD;
|
|
1
|
+
{"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../src/__tests__/login.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stamp-policies.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/stamp-policies.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const stamp_policies_1 = require("../commands/stamp-policies");
|
|
5
|
+
// Mock @stackbilt/policies so no real fs writes or network calls happen
|
|
6
|
+
vitest_1.vi.mock('@stackbilt/policies', () => ({
|
|
7
|
+
applyPolicies: vitest_1.vi.fn(),
|
|
8
|
+
}));
|
|
9
|
+
// Mock child_process for resolveStackbiltLlcRef
|
|
10
|
+
vitest_1.vi.mock('node:child_process', () => ({
|
|
11
|
+
exec: vitest_1.vi.fn(),
|
|
12
|
+
}));
|
|
13
|
+
const policies_1 = require("@stackbilt/policies");
|
|
14
|
+
const node_child_process_1 = require("node:child_process");
|
|
15
|
+
const mockApply = vitest_1.vi.mocked(policies_1.applyPolicies);
|
|
16
|
+
const mockExec = vitest_1.vi.mocked(node_child_process_1.exec);
|
|
17
|
+
function makeOptions(overrides = {}) {
|
|
18
|
+
return { configPath: '.charter', format: 'text', ciMode: false, yes: false, ...overrides };
|
|
19
|
+
}
|
|
20
|
+
const FAKE_REF = 'a'.repeat(40);
|
|
21
|
+
const fakeConfig = { packageManager: 'npm', nodeVersion: '20', existingWorkflows: [], floatingPins: [], hasSupplyChainWorkflow: false };
|
|
22
|
+
(0, vitest_1.beforeEach)(() => {
|
|
23
|
+
vitest_1.vi.clearAllMocks();
|
|
24
|
+
// Default: exec succeeds with fake SHA
|
|
25
|
+
mockExec.mockImplementation((_cmd, _opts, cb) => {
|
|
26
|
+
cb(null, `${FAKE_REF}\tHEAD\n`);
|
|
27
|
+
return {};
|
|
28
|
+
});
|
|
29
|
+
// Default: apply returns updated
|
|
30
|
+
mockApply.mockResolvedValue({
|
|
31
|
+
config: fakeConfig,
|
|
32
|
+
pinsPatched: 2,
|
|
33
|
+
workflowsPatched: ['.github/workflows/ci.yml'],
|
|
34
|
+
supplyChainWorkflowAdded: true,
|
|
35
|
+
charterConfigUpdated: true,
|
|
36
|
+
alreadyCompliant: false,
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.describe)('stampPoliciesCommand', () => {
|
|
40
|
+
(0, vitest_1.it)('uses --policy-repo-ref directly without calling git ls-remote', async () => {
|
|
41
|
+
const code = await (0, stamp_policies_1.stampPoliciesCommand)(makeOptions(), ['--policy-repo-ref', FAKE_REF, '--path', '/tmp']);
|
|
42
|
+
(0, vitest_1.expect)(mockExec).not.toHaveBeenCalled();
|
|
43
|
+
(0, vitest_1.expect)(mockApply).toHaveBeenCalledWith('/tmp', vitest_1.expect.objectContaining({ policyRepoRef: FAKE_REF }));
|
|
44
|
+
(0, vitest_1.expect)(code).toBe(0);
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.it)('calls git ls-remote when --policy-repo-ref is absent', async () => {
|
|
47
|
+
await (0, stamp_policies_1.stampPoliciesCommand)(makeOptions(), ['--policy-repo-ref', FAKE_REF]);
|
|
48
|
+
// Verify applyPolicies received the ref
|
|
49
|
+
(0, vitest_1.expect)(mockApply).toHaveBeenCalledWith('.', vitest_1.expect.objectContaining({ policyRepoRef: FAKE_REF }));
|
|
50
|
+
});
|
|
51
|
+
(0, vitest_1.it)('returns RUNTIME_ERROR when git ls-remote fails and no explicit ref', async () => {
|
|
52
|
+
mockExec.mockImplementation((_cmd, _opts, cb) => {
|
|
53
|
+
cb(new Error('network'), '');
|
|
54
|
+
return {};
|
|
55
|
+
});
|
|
56
|
+
const code = await (0, stamp_policies_1.stampPoliciesCommand)(makeOptions(), []);
|
|
57
|
+
(0, vitest_1.expect)(code).toBe(2);
|
|
58
|
+
(0, vitest_1.expect)(mockApply).not.toHaveBeenCalled();
|
|
59
|
+
});
|
|
60
|
+
(0, vitest_1.it)('passes --dry-run through to applyPolicies', async () => {
|
|
61
|
+
await (0, stamp_policies_1.stampPoliciesCommand)(makeOptions(), ['--policy-repo-ref', FAKE_REF, '--dry-run']);
|
|
62
|
+
(0, vitest_1.expect)(mockApply).toHaveBeenCalledWith('.', vitest_1.expect.objectContaining({ dryRun: true }));
|
|
63
|
+
});
|
|
64
|
+
(0, vitest_1.it)('passes --no-fix-pins as fixPins: false', async () => {
|
|
65
|
+
await (0, stamp_policies_1.stampPoliciesCommand)(makeOptions(), ['--policy-repo-ref', FAKE_REF, '--no-fix-pins']);
|
|
66
|
+
(0, vitest_1.expect)(mockApply).toHaveBeenCalledWith('.', vitest_1.expect.objectContaining({ fixPins: false }));
|
|
67
|
+
});
|
|
68
|
+
(0, vitest_1.it)('returns exit 0 when already compliant', async () => {
|
|
69
|
+
mockApply.mockResolvedValue({
|
|
70
|
+
config: fakeConfig,
|
|
71
|
+
pinsPatched: 0,
|
|
72
|
+
workflowsPatched: [],
|
|
73
|
+
supplyChainWorkflowAdded: false,
|
|
74
|
+
charterConfigUpdated: false,
|
|
75
|
+
alreadyCompliant: true,
|
|
76
|
+
});
|
|
77
|
+
const code = await (0, stamp_policies_1.stampPoliciesCommand)(makeOptions(), ['--policy-repo-ref', FAKE_REF]);
|
|
78
|
+
(0, vitest_1.expect)(code).toBe(0);
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.it)('emits JSON output when format is json', async () => {
|
|
81
|
+
const logs = [];
|
|
82
|
+
vitest_1.vi.spyOn(console, 'log').mockImplementation((msg) => { logs.push(msg); });
|
|
83
|
+
const code = await (0, stamp_policies_1.stampPoliciesCommand)(makeOptions({ format: 'json' }), ['--policy-repo-ref', FAKE_REF]);
|
|
84
|
+
(0, vitest_1.expect)(code).toBe(0);
|
|
85
|
+
const parsed = JSON.parse(logs.find((l) => l.startsWith('{')) ?? '{}');
|
|
86
|
+
(0, vitest_1.expect)(parsed.status).toBe('UPDATED');
|
|
87
|
+
(0, vitest_1.expect)(parsed.pinsPatched).toBe(2);
|
|
88
|
+
(0, vitest_1.expect)(parsed.policyRepoRef).toBe(FAKE_REF);
|
|
89
|
+
vitest_1.vi.restoreAllMocks();
|
|
90
|
+
});
|
|
91
|
+
(0, vitest_1.it)('returns RUNTIME_ERROR when applyPolicies throws', async () => {
|
|
92
|
+
mockApply.mockRejectedValue(new Error('disk full'));
|
|
93
|
+
const code = await (0, stamp_policies_1.stampPoliciesCommand)(makeOptions(), ['--policy-repo-ref', FAKE_REF]);
|
|
94
|
+
(0, vitest_1.expect)(code).toBe(2);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=stamp-policies.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stamp-policies.test.js","sourceRoot":"","sources":["../../src/__tests__/stamp-policies.test.ts"],"names":[],"mappings":";;AAAA,mCAA8D;AAI9D,+DAAkE;AAGlE,wEAAwE;AACxE,WAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,aAAa,EAAE,WAAE,CAAC,EAAE,EAAE;CACvB,CAAC,CAAC,CAAC;AAEJ,gDAAgD;AAChD,WAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;CACd,CAAC,CAAC,CAAC;AAEJ,kDAAoD;AACpD,2DAA0C;AAE1C,MAAM,SAAS,GAAG,WAAE,CAAC,MAAM,CAAC,wBAAa,CAAC,CAAC;AAC3C,MAAM,QAAQ,GAAG,WAAE,CAAC,MAAM,CAAC,yBAAI,CAAC,CAAC;AAEjC,SAAS,WAAW,CAAC,YAAiC,EAAE;IACtD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAChC,MAAM,UAAU,GAAG,EAAE,cAAc,EAAE,KAAc,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;AAEjJ,IAAA,mBAAU,EAAC,GAAG,EAAE;IACd,WAAE,CAAC,aAAa,EAAE,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,IAAa,EAAE,KAAc,EAAE,EAAW,EAAE,EAAE;QACxE,EAAqC,CAAC,IAAI,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAC;QACpE,OAAO,EAA6B,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,iCAAiC;IACjC,SAAS,CAAC,iBAAiB,CAAC;QAC1B,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,CAAC;QACd,gBAAgB,EAAE,CAAC,0BAA0B,CAAC;QAC9C,wBAAwB,EAAE,IAAI;QAC9B,oBAAoB,EAAE,IAAI;QAC1B,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAA,WAAE,EAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAoB,EACrC,WAAW,EAAE,EACb,CAAC,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAClD,CAAC;QACF,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACxC,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,eAAM,CAAC,gBAAgB,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACrG,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,IAAA,qCAAoB,EAAC,WAAW,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC3E,wCAAwC;QACxC,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAM,CAAC,gBAAgB,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,QAAQ,CAAC,kBAAkB,CAAC,CAAC,IAAa,EAAE,KAAc,EAAE,EAAW,EAAE,EAAE;YACxE,EAAsC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO,EAA6B,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAoB,EAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,IAAA,qCAAoB,EAAC,WAAW,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;QACxF,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAA,qCAAoB,EAAC,WAAW,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;QAC5F,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,SAAS,CAAC,iBAAiB,CAAC;YAC1B,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,EAAE;YACpB,wBAAwB,EAAE,KAAK;YAC/B,oBAAoB,EAAE,KAAK;YAC3B,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAoB,EAAC,WAAW,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxF,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAoB,EACrC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAChC,CAAC;QACF,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACvE,IAAA,eAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,eAAM,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,IAAA,eAAM,EAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,WAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,SAAS,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAoB,EAAC,WAAW,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxF,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/bin.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architect.d.ts","sourceRoot":"","sources":["../../src/commands/architect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"architect.d.ts","sourceRoot":"","sources":["../../src/commands/architect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAO3C,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsE3F"}
|
|
@@ -49,7 +49,9 @@ const index_1 = require("../index");
|
|
|
49
49
|
const flags_1 = require("../flags");
|
|
50
50
|
const credentials_1 = require("../credentials");
|
|
51
51
|
const http_client_1 = require("../http-client");
|
|
52
|
+
const deprecation_warning_1 = require("./deprecation-warning");
|
|
52
53
|
async function architectCommand(options, args) {
|
|
54
|
+
(0, deprecation_warning_1.printBuildCommandDeprecationWarning)('architect', args);
|
|
53
55
|
// Parse description from positional arg or --file
|
|
54
56
|
const filePath = (0, flags_1.getFlag)(args, '--file');
|
|
55
57
|
const positional = args.filter(a => !a.startsWith('-') && a !== filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/commands/architect.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/commands/architect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA+D3C,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA+D3C,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4Y3F"}
|
|
@@ -64,6 +64,7 @@ async function bootstrapCommand(options, args) {
|
|
|
64
64
|
const skipInstall = args.includes('--skip-install');
|
|
65
65
|
const skipDoctor = args.includes('--skip-doctor');
|
|
66
66
|
const force = args.includes('--force');
|
|
67
|
+
const securitySensitive = args.includes('--security-sensitive');
|
|
67
68
|
const nonInteractive = options.yes;
|
|
68
69
|
const setupOverwrite = options.yes || force;
|
|
69
70
|
if (ciTarget && ciTarget !== 'github') {
|
|
@@ -88,6 +89,12 @@ async function bootstrapCommand(options, args) {
|
|
|
88
89
|
const detection = detectResult.detection;
|
|
89
90
|
const contexts = detectResult.contexts;
|
|
90
91
|
const packageManager = detectResult.packageManager;
|
|
92
|
+
// Check git repo status once — used for preflight warning and gating hook next-steps
|
|
93
|
+
const inGitRepo = (0, git_helpers_1.isGitRepo)();
|
|
94
|
+
if (!inGitRepo) {
|
|
95
|
+
detectResult.step.warnings.push("Not inside a git repository. Run 'git init && git add -A && git commit -m \"initial commit\"' before installing hooks. Continuing — governance files will be written but hooks cannot be installed yet.");
|
|
96
|
+
warnings++;
|
|
97
|
+
}
|
|
91
98
|
if (options.format === 'text') {
|
|
92
99
|
console.log('[1/7] Detecting stack...');
|
|
93
100
|
console.log(` Stack: ${selectedPreset} (${detection.confidence} confidence)`);
|
|
@@ -97,12 +104,17 @@ async function bootstrapCommand(options, args) {
|
|
|
97
104
|
console.log(` Warning: ${w}`);
|
|
98
105
|
}
|
|
99
106
|
}
|
|
107
|
+
if (!inGitRepo) {
|
|
108
|
+
console.log(` Warning: Not inside a git repository.`);
|
|
109
|
+
console.log(` Run 'git init && git add -A && git commit -m "initial commit"' before installing hooks.`);
|
|
110
|
+
console.log(` Continuing — governance files will be written but hooks cannot be installed yet.`);
|
|
111
|
+
}
|
|
100
112
|
console.log('');
|
|
101
113
|
}
|
|
102
114
|
// ========================================================================
|
|
103
115
|
// Phase 2: Setup
|
|
104
116
|
// ========================================================================
|
|
105
|
-
const setupResult = runSetupPhase(options, selectedPreset, detection, contexts, ciTarget, packageManager, setupOverwrite);
|
|
117
|
+
const setupResult = runSetupPhase(options, selectedPreset, detection, contexts, ciTarget, packageManager, setupOverwrite, securitySensitive);
|
|
106
118
|
result.steps.push(setupResult.step);
|
|
107
119
|
warnings += setupResult.step.warnings.length;
|
|
108
120
|
if (options.format === 'text') {
|
|
@@ -149,14 +161,44 @@ async function bootstrapCommand(options, args) {
|
|
|
149
161
|
shouldRegister = await promptYesNo(' Register these modules now? (y/N) ');
|
|
150
162
|
}
|
|
151
163
|
if (shouldRegister) {
|
|
152
|
-
|
|
164
|
+
const manifestFilePath = path.join('.ai', 'manifest.adf');
|
|
165
|
+
// Split orphans: core.adf and state.adf belong in DEFAULT_LOAD, everything else in ON_DEMAND
|
|
166
|
+
const defaultLoadOrphans = orphans.filter(m => DEFAULT_LOAD_MODULES.has(m));
|
|
167
|
+
const onDemandOrphans = orphans.filter(m => !DEFAULT_LOAD_MODULES.has(m));
|
|
168
|
+
if (defaultLoadOrphans.length > 0) {
|
|
169
|
+
registerModulesInDefaultLoad(manifestFilePath, defaultLoadOrphans);
|
|
170
|
+
if (options.format === 'text') {
|
|
171
|
+
console.log(` Registered ${defaultLoadOrphans.length} module(s) as DEFAULT_LOAD in manifest.adf`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (onDemandOrphans.length > 0) {
|
|
175
|
+
registerOrphansInManifest(manifestFilePath, onDemandOrphans);
|
|
176
|
+
if (options.format === 'text') {
|
|
177
|
+
console.log(` Registered ${onDemandOrphans.length} module(s) as ON_DEMAND in manifest.adf`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
153
180
|
(0, adf_migrate_1.updateModuleIndex)('CLAUDE.md', '.ai');
|
|
154
181
|
if (options.format === 'text') {
|
|
155
|
-
console.log(` Registered ${orphans.length} module(s) as ON_DEMAND in manifest.adf`);
|
|
156
182
|
console.log('');
|
|
157
183
|
}
|
|
158
184
|
}
|
|
159
185
|
}
|
|
186
|
+
// Post-write manifest self-check: warn if DEFAULT_LOAD is empty but core.adf exists
|
|
187
|
+
if (fs.existsSync(path.join('.ai', 'core.adf'))) {
|
|
188
|
+
const manifestCheckPath = path.join('.ai', 'manifest.adf');
|
|
189
|
+
if (fs.existsSync(manifestCheckPath)) {
|
|
190
|
+
try {
|
|
191
|
+
const manifestDoc = (0, adf_3.parseAdf)(fs.readFileSync(manifestCheckPath, 'utf-8'));
|
|
192
|
+
const manifestParsed = (0, adf_3.parseManifest)(manifestDoc);
|
|
193
|
+
if (manifestParsed.defaultLoad.length === 0 && options.format === 'text') {
|
|
194
|
+
console.log(" Warning: manifest.adf parsed with 0 DEFAULT_LOAD entries — run 'charter adf register core.adf --load default' to repair.");
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Parse failure already flagged elsewhere
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
160
202
|
// ========================================================================
|
|
161
203
|
// Phase 4: Migrate Agent Configs
|
|
162
204
|
// ========================================================================
|
|
@@ -267,6 +309,24 @@ async function bootstrapCommand(options, args) {
|
|
|
267
309
|
required: false,
|
|
268
310
|
reason: 'Commit governance baseline',
|
|
269
311
|
});
|
|
312
|
+
// Gate hook next-steps on being inside a git repo
|
|
313
|
+
if (inGitRepo) {
|
|
314
|
+
result.nextSteps.push({
|
|
315
|
+
cmd: 'charter hook install --pre-commit',
|
|
316
|
+
required: false,
|
|
317
|
+
reason: 'Install pre-commit hook for ADF evidence gate',
|
|
318
|
+
});
|
|
319
|
+
result.nextSteps.push({
|
|
320
|
+
cmd: 'charter hook install --commit-msg',
|
|
321
|
+
required: false,
|
|
322
|
+
reason: 'Install commit-msg hook for trailer enforcement',
|
|
323
|
+
});
|
|
324
|
+
result.nextSteps.push({
|
|
325
|
+
cmd: 'echo \'charter context --write\' >> .git/hooks/post-commit && chmod +x .git/hooks/post-commit',
|
|
326
|
+
required: false,
|
|
327
|
+
reason: 'Keep .charter/context.md fresh after each commit (charter brief auto-refresh)',
|
|
328
|
+
});
|
|
329
|
+
}
|
|
270
330
|
// ========================================================================
|
|
271
331
|
// Governance Gaps — surface what's configured but not enforced
|
|
272
332
|
// ========================================================================
|
|
@@ -332,6 +392,40 @@ async function bootstrapCommand(options, args) {
|
|
|
332
392
|
result.nextSteps.forEach((step, i) => {
|
|
333
393
|
console.log(` ${i + 1}. ${step.cmd}`);
|
|
334
394
|
});
|
|
395
|
+
// Partial/failure summary banner
|
|
396
|
+
if (result.status === 'partial' || result.status === 'failure') {
|
|
397
|
+
const failedSteps = result.steps.filter(s => s.status === 'fail');
|
|
398
|
+
console.log('');
|
|
399
|
+
console.log(`⚠ Bootstrap partially complete — ${failedSteps.length} step${failedSteps.length === 1 ? '' : 's'} failed:`);
|
|
400
|
+
for (const s of failedSteps) {
|
|
401
|
+
const rawErr = s.details.error ? String(s.details.error).split('\n')[0].slice(0, 120) : '';
|
|
402
|
+
const errDetail = rawErr ? ` (${rawErr})` : '';
|
|
403
|
+
const hintLine = s.warnings.find(w => w.startsWith('Hint:'));
|
|
404
|
+
const hint = hintLine ? ` — ${hintLine}` : '';
|
|
405
|
+
console.log(` • ${s.name}${errDetail}${hint}`);
|
|
406
|
+
}
|
|
407
|
+
console.log('');
|
|
408
|
+
console.log('Next steps to complete setup:');
|
|
409
|
+
let n = 1;
|
|
410
|
+
const installFailed = failedSteps.some(s => s.name === 'install');
|
|
411
|
+
if (installFailed) {
|
|
412
|
+
const installStep = failedSteps.find(s => s.name === 'install');
|
|
413
|
+
const frozenHint = installStep?.warnings.find(w => w.includes('--no-frozen-lockfile'));
|
|
414
|
+
if (frozenHint) {
|
|
415
|
+
console.log(` ${n++}. pnpm install --no-frozen-lockfile (or see hint above)`);
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
console.log(` ${n++}. ${installStep?.details.command ?? 'npm install'} (see hint above)`);
|
|
419
|
+
}
|
|
420
|
+
console.log(` ${n++}. charter doctor`);
|
|
421
|
+
if (inGitRepo) {
|
|
422
|
+
console.log(` ${n++}. charter hook install --pre-commit`);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
console.log(` ${n++}. charter doctor`);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
335
429
|
}
|
|
336
430
|
return index_1.EXIT_CODE.SUCCESS;
|
|
337
431
|
}
|
|
@@ -415,7 +509,7 @@ function loadPackageContextsSafe() {
|
|
|
415
509
|
// ============================================================================
|
|
416
510
|
// Phase 2: Setup
|
|
417
511
|
// ============================================================================
|
|
418
|
-
function runSetupPhase(options, selectedPreset, detection, contexts, ciTarget, packageManager, force) {
|
|
512
|
+
function runSetupPhase(options, selectedPreset, detection, contexts, ciTarget, packageManager, force, securitySensitive) {
|
|
419
513
|
const warnings = [];
|
|
420
514
|
const created = [];
|
|
421
515
|
const updated = [];
|
|
@@ -430,6 +524,7 @@ function runSetupPhase(options, selectedPreset, detection, contexts, ciTarget, p
|
|
|
430
524
|
react: detection.signals.hasReact,
|
|
431
525
|
vite: detection.signals.hasVite,
|
|
432
526
|
},
|
|
527
|
+
securitySensitive,
|
|
433
528
|
});
|
|
434
529
|
if (initResult.created) {
|
|
435
530
|
for (const f of initResult.files) {
|
|
@@ -748,10 +843,10 @@ function runInstallPhase(_options, skipInstall) {
|
|
|
748
843
|
}
|
|
749
844
|
catch (err) {
|
|
750
845
|
const msg = err instanceof Error ? err.message : String(err);
|
|
751
|
-
const isPermError = msg.includes('EPERM') || msg.includes('EACCES') || msg.includes('permission denied');
|
|
752
846
|
warnings.push(`Install failed: ${msg}`);
|
|
753
|
-
|
|
754
|
-
|
|
847
|
+
const hint = classifyInstallError(msg, pm);
|
|
848
|
+
if (hint) {
|
|
849
|
+
warnings.push(`Hint: ${hint}`);
|
|
755
850
|
}
|
|
756
851
|
warnings.push(`Retry manually: ${command}`);
|
|
757
852
|
return {
|
|
@@ -764,6 +859,15 @@ function runInstallPhase(_options, skipInstall) {
|
|
|
764
859
|
};
|
|
765
860
|
}
|
|
766
861
|
}
|
|
862
|
+
function classifyInstallError(msg, pm) {
|
|
863
|
+
if (/ERR_PNPM_FROZEN_LOCKFILE|frozen[-. ]lockfile|--frozen-lockfile/i.test(msg))
|
|
864
|
+
return 'Lockfile is out of date. Retry with: pnpm install --no-frozen-lockfile';
|
|
865
|
+
if (/EPERM|EACCES|permission denied/i.test(msg))
|
|
866
|
+
return 'Permission error. On WSL/NTFS try: pnpm install --force (or move project to ~/projects/)';
|
|
867
|
+
if (/ENOTFOUND|ETIMEDOUT|fetch failed|503|network/i.test(msg))
|
|
868
|
+
return `Network error. Check connectivity and retry: ${pm} install`;
|
|
869
|
+
return '';
|
|
870
|
+
}
|
|
767
871
|
function detectPackageManagerFromLockfiles() {
|
|
768
872
|
if (fs.existsSync(path.resolve('pnpm-lock.yaml')))
|
|
769
873
|
return 'pnpm';
|
|
@@ -919,6 +1023,11 @@ function runDoctorPhase(options, skipDoctor) {
|
|
|
919
1023
|
// ============================================================================
|
|
920
1024
|
// Helpers
|
|
921
1025
|
// ============================================================================
|
|
1026
|
+
/**
|
|
1027
|
+
* Modules that must always appear in DEFAULT_LOAD rather than ON_DEMAND.
|
|
1028
|
+
* core.adf and state.adf are always loaded — they are not optional.
|
|
1029
|
+
*/
|
|
1030
|
+
const DEFAULT_LOAD_MODULES = new Set(['core.adf', 'state.adf']);
|
|
922
1031
|
function isValidPreset(value) {
|
|
923
1032
|
return value === 'worker' || value === 'frontend' || value === 'backend' || value === 'fullstack' || value === 'docs';
|
|
924
1033
|
}
|
|
@@ -981,4 +1090,45 @@ function registerOrphansInManifest(manifestPath, orphans) {
|
|
|
981
1090
|
lines.splice(insertIdx, 0, ...newEntries);
|
|
982
1091
|
fs.writeFileSync(manifestPath, lines.join('\n'));
|
|
983
1092
|
}
|
|
1093
|
+
/**
|
|
1094
|
+
* Register modules in the DEFAULT_LOAD section of manifest.adf.
|
|
1095
|
+
* Uses the structured parseAdf/formatAdf round-trip so the result is canonical.
|
|
1096
|
+
* DEFAULT_LOAD entries are plain filenames with no "(Triggers on: ...)" suffix.
|
|
1097
|
+
*/
|
|
1098
|
+
function registerModulesInDefaultLoad(manifestPath, modules) {
|
|
1099
|
+
const manifestDoc = (0, adf_3.parseAdf)(fs.readFileSync(manifestPath, 'utf-8'));
|
|
1100
|
+
const sectionKey = 'DEFAULT_LOAD';
|
|
1101
|
+
let section = manifestDoc.sections.find(s => s.key === sectionKey);
|
|
1102
|
+
if (!section) {
|
|
1103
|
+
section = {
|
|
1104
|
+
key: sectionKey,
|
|
1105
|
+
decoration: '📦',
|
|
1106
|
+
content: { type: 'list', items: [] },
|
|
1107
|
+
};
|
|
1108
|
+
// Prepend DEFAULT_LOAD before any ON_DEMAND section
|
|
1109
|
+
const onDemandIdx = manifestDoc.sections.findIndex(s => s.key === 'ON_DEMAND');
|
|
1110
|
+
if (onDemandIdx !== -1) {
|
|
1111
|
+
manifestDoc.sections.splice(onDemandIdx, 0, section);
|
|
1112
|
+
}
|
|
1113
|
+
else {
|
|
1114
|
+
manifestDoc.sections.push(section);
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
if (section.content.type !== 'list') {
|
|
1118
|
+
// Fallback: append raw text rather than throwing — bootstrap should not crash
|
|
1119
|
+
const raw = '\n\n📦 DEFAULT_LOAD:\n' + modules.map(m => ` - ${m}`).join('\n') + '\n';
|
|
1120
|
+
fs.writeFileSync(manifestPath, fs.readFileSync(manifestPath, 'utf-8').trimEnd() + raw);
|
|
1121
|
+
return;
|
|
1122
|
+
}
|
|
1123
|
+
let updated = false;
|
|
1124
|
+
for (const mod of modules) {
|
|
1125
|
+
if (!section.content.items.includes(mod)) {
|
|
1126
|
+
section.content.items.push(mod);
|
|
1127
|
+
updated = true;
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
if (updated) {
|
|
1131
|
+
fs.writeFileSync(manifestPath, (0, adf_3.formatAdf)(manifestDoc));
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
984
1134
|
//# sourceMappingURL=bootstrap.js.map
|