@rasensio/aidlc 1.15.2 → 1.17.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/README.md +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/compliance.d.ts +36 -0
- package/dist/commands/compliance.d.ts.map +1 -0
- package/dist/commands/compliance.js +275 -0
- package/dist/commands/compliance.js.map +1 -0
- package/dist/commands/constitution.d.ts +26 -0
- package/dist/commands/constitution.d.ts.map +1 -0
- package/dist/commands/constitution.js +145 -0
- package/dist/commands/constitution.js.map +1 -0
- package/dist/commands/cost.d.ts.map +1 -1
- package/dist/commands/cost.js +54 -35
- package/dist/commands/cost.js.map +1 -1
- package/dist/commands/doctor.js +7 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/gate.d.ts.map +1 -1
- package/dist/commands/gate.js +13 -0
- package/dist/commands/gate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +119 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +6 -1
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/review.d.ts +2 -27
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +10 -166
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +7 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transition.d.ts.map +1 -1
- package/dist/commands/transition.js +24 -1
- package/dist/commands/transition.js.map +1 -1
- package/dist/compile/adapters/claude-code.d.ts.map +1 -1
- package/dist/compile/adapters/claude-code.js +2 -1
- package/dist/compile/adapters/claude-code.js.map +1 -1
- package/dist/compile/adapters/codex.d.ts +22 -1
- package/dist/compile/adapters/codex.d.ts.map +1 -1
- package/dist/compile/adapters/codex.js +61 -27
- package/dist/compile/adapters/codex.js.map +1 -1
- package/dist/compile/adapters/cursor.d.ts.map +1 -1
- package/dist/compile/adapters/cursor.js +2 -19
- package/dist/compile/adapters/cursor.js.map +1 -1
- package/dist/compile/adapters/kiro.d.ts.map +1 -1
- package/dist/compile/adapters/kiro.js +1 -19
- package/dist/compile/adapters/kiro.js.map +1 -1
- package/dist/compile/adapters/windsurf.d.ts.map +1 -1
- package/dist/compile/adapters/windsurf.js +2 -1
- package/dist/compile/adapters/windsurf.js.map +1 -1
- package/dist/compile/guidance-install.d.ts +16 -19
- package/dist/compile/guidance-install.d.ts.map +1 -1
- package/dist/compile/guidance-install.js +26 -111
- package/dist/compile/guidance-install.js.map +1 -1
- package/dist/compile/layer-install.d.ts +122 -0
- package/dist/compile/layer-install.d.ts.map +1 -0
- package/dist/compile/layer-install.js +195 -0
- package/dist/compile/layer-install.js.map +1 -0
- package/dist/compile/loaders.d.ts +14 -0
- package/dist/compile/loaders.d.ts.map +1 -1
- package/dist/compile/loaders.js +23 -18
- package/dist/compile/loaders.js.map +1 -1
- package/dist/compile/skill-format.d.ts +39 -0
- package/dist/compile/skill-format.d.ts.map +1 -0
- package/dist/compile/skill-format.js +50 -0
- package/dist/compile/skill-format.js.map +1 -0
- package/dist/compliance/check.d.ts +79 -0
- package/dist/compliance/check.d.ts.map +1 -0
- package/dist/compliance/check.js +224 -0
- package/dist/compliance/check.js.map +1 -0
- package/dist/compliance/config.d.ts +91 -0
- package/dist/compliance/config.d.ts.map +1 -0
- package/dist/compliance/config.js +173 -0
- package/dist/compliance/config.js.map +1 -0
- package/dist/compliance/findings.d.ts +70 -0
- package/dist/compliance/findings.d.ts.map +1 -0
- package/dist/compliance/findings.js +132 -0
- package/dist/compliance/findings.js.map +1 -0
- package/dist/compliance/gate-criterion.d.ts +87 -0
- package/dist/compliance/gate-criterion.d.ts.map +1 -0
- package/dist/compliance/gate-criterion.js +168 -0
- package/dist/compliance/gate-criterion.js.map +1 -0
- package/dist/compliance/install.d.ts +135 -0
- package/dist/compliance/install.d.ts.map +1 -0
- package/dist/compliance/install.js +291 -0
- package/dist/compliance/install.js.map +1 -0
- package/dist/compliance/report.d.ts +144 -0
- package/dist/compliance/report.d.ts.map +1 -0
- package/dist/compliance/report.js +347 -0
- package/dist/compliance/report.js.map +1 -0
- package/dist/compliance/resolver.d.ts +65 -0
- package/dist/compliance/resolver.d.ts.map +1 -0
- package/dist/compliance/resolver.js +176 -0
- package/dist/compliance/resolver.js.map +1 -0
- package/dist/compliance/schema.d.ts +74 -0
- package/dist/compliance/schema.d.ts.map +1 -0
- package/dist/compliance/schema.js +474 -0
- package/dist/compliance/schema.js.map +1 -0
- package/dist/compliance/types.d.ts +140 -0
- package/dist/compliance/types.d.ts.map +1 -0
- package/dist/compliance/types.js +29 -0
- package/dist/compliance/types.js.map +1 -0
- package/dist/constitution/check.d.ts +22 -0
- package/dist/constitution/check.d.ts.map +1 -0
- package/dist/constitution/check.js +89 -0
- package/dist/constitution/check.js.map +1 -0
- package/dist/constitution/docx.d.ts +51 -0
- package/dist/constitution/docx.d.ts.map +1 -0
- package/dist/constitution/docx.js +157 -0
- package/dist/constitution/docx.js.map +1 -0
- package/dist/constitution/entries.d.ts +27 -0
- package/dist/constitution/entries.d.ts.map +1 -0
- package/dist/constitution/entries.js +65 -0
- package/dist/constitution/entries.js.map +1 -0
- package/dist/constitution/extract.d.ts +34 -0
- package/dist/constitution/extract.d.ts.map +1 -0
- package/dist/constitution/extract.js +117 -0
- package/dist/constitution/extract.js.map +1 -0
- package/dist/constitution/snapshot.d.ts +47 -0
- package/dist/constitution/snapshot.d.ts.map +1 -0
- package/dist/constitution/snapshot.js +159 -0
- package/dist/constitution/snapshot.js.map +1 -0
- package/dist/constitution/statements.d.ts +37 -0
- package/dist/constitution/statements.d.ts.map +1 -0
- package/dist/constitution/statements.js +64 -0
- package/dist/constitution/statements.js.map +1 -0
- package/dist/constitution/types.d.ts +80 -0
- package/dist/constitution/types.d.ts.map +1 -0
- package/dist/constitution/types.js +9 -0
- package/dist/constitution/types.js.map +1 -0
- package/dist/core/gate.d.ts +10 -0
- package/dist/core/gate.d.ts.map +1 -1
- package/dist/core/gate.js.map +1 -1
- package/dist/core/paths.d.ts +48 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +57 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/types.d.ts +12 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/cost/hooks/registry.d.ts +44 -0
- package/dist/cost/hooks/registry.d.ts.map +1 -0
- package/dist/cost/hooks/registry.js +66 -0
- package/dist/cost/hooks/registry.js.map +1 -0
- package/dist/cost/pin.d.ts +63 -0
- package/dist/cost/pin.d.ts.map +1 -0
- package/dist/cost/pin.js +95 -0
- package/dist/cost/pin.js.map +1 -0
- package/dist/cost/providers/claude-code.d.ts +9 -2
- package/dist/cost/providers/claude-code.d.ts.map +1 -1
- package/dist/cost/providers/claude-code.js +10 -5
- package/dist/cost/providers/claude-code.js.map +1 -1
- package/dist/cost/providers/codex.d.ts +107 -0
- package/dist/cost/providers/codex.d.ts.map +1 -0
- package/dist/cost/providers/codex.js +283 -0
- package/dist/cost/providers/codex.js.map +1 -0
- package/dist/cost/providers/index.d.ts.map +1 -1
- package/dist/cost/providers/index.js +6 -0
- package/dist/cost/providers/index.js.map +1 -1
- package/dist/cost/rates.d.ts.map +1 -1
- package/dist/cost/rates.js +14 -0
- package/dist/cost/rates.js.map +1 -1
- package/dist/cost/report.d.ts +23 -1
- package/dist/cost/report.d.ts.map +1 -1
- package/dist/cost/report.js +26 -5
- package/dist/cost/report.js.map +1 -1
- package/dist/cost/sessions.d.ts +10 -1
- package/dist/cost/sessions.d.ts.map +1 -1
- package/dist/cost/sessions.js +10 -2
- package/dist/cost/sessions.js.map +1 -1
- package/dist/cost/sync.d.ts.map +1 -1
- package/dist/cost/sync.js +190 -5
- package/dist/cost/sync.js.map +1 -1
- package/dist/doctor/migrations/compliance-pack-drift.d.ts +62 -0
- package/dist/doctor/migrations/compliance-pack-drift.d.ts.map +1 -0
- package/dist/doctor/migrations/compliance-pack-drift.js +255 -0
- package/dist/doctor/migrations/compliance-pack-drift.js.map +1 -0
- package/dist/doctor/migrations/index.d.ts.map +1 -1
- package/dist/doctor/migrations/index.js +11 -0
- package/dist/doctor/migrations/index.js.map +1 -1
- package/dist/doctor/migrations/legacy-cost-hooks.d.ts.map +1 -1
- package/dist/doctor/migrations/legacy-cost-hooks.js +7 -4
- package/dist/doctor/migrations/legacy-cost-hooks.js.map +1 -1
- package/dist/doctor/migrations/missing-cost-shim.d.ts.map +1 -1
- package/dist/doctor/migrations/missing-cost-shim.js +5 -4
- package/dist/doctor/migrations/missing-cost-shim.js.map +1 -1
- package/dist/doctor/migrations/outdated-cost-hooks.d.ts.map +1 -1
- package/dist/doctor/migrations/outdated-cost-hooks.js +7 -4
- package/dist/doctor/migrations/outdated-cost-hooks.js.map +1 -1
- package/dist/doctor/runner.js +14 -0
- package/dist/doctor/runner.js.map +1 -1
- package/dist/doctor/types.d.ts +35 -3
- package/dist/doctor/types.d.ts.map +1 -1
- package/dist/menu/roster.d.ts.map +1 -1
- package/dist/menu/roster.js +5 -0
- package/dist/menu/roster.js.map +1 -1
- package/dist/metrics/report.d.ts.map +1 -1
- package/dist/metrics/report.js +11 -2
- package/dist/metrics/report.js.map +1 -1
- package/dist/review/findings-parser.d.ts +92 -0
- package/dist/review/findings-parser.d.ts.map +1 -0
- package/dist/review/findings-parser.js +196 -0
- package/dist/review/findings-parser.js.map +1 -0
- package/dist/setup/setup-compute.d.ts +10 -15
- package/dist/setup/setup-compute.d.ts.map +1 -1
- package/dist/setup/setup-compute.js +39 -0
- package/dist/setup/setup-compute.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -51,6 +51,7 @@ The CLI has two core jobs: **bootstrap** (installing and refreshing skills) and
|
|
|
51
51
|
| `aidlc docs` | Generate onboarding documentation |
|
|
52
52
|
| `aidlc knowledge <subcommand>` | Query and update the local knowledge graph (see below) |
|
|
53
53
|
| `aidlc add action <description>` | Create lifecycle automation from a natural language description |
|
|
54
|
+
| `aidlc compliance <subcommand>` | Install compliance packs and report evidence per control (`list`, `add`, `remove`, `check`, `report`) |
|
|
54
55
|
|
|
55
56
|
## Knowledge Graph
|
|
56
57
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAcH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAcH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAiCtC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAM,GAAG,SAA2B,GAC1C,OAAO,CAQT"}
|
package/dist/cli.js
CHANGED
|
@@ -38,6 +38,8 @@ import { registerClaim } from './commands/claim.js';
|
|
|
38
38
|
import { registerMetrics } from './commands/metrics.js';
|
|
39
39
|
import { registerDoctor } from './commands/doctor.js';
|
|
40
40
|
import { registerAddSkill } from './commands/add-skill.js';
|
|
41
|
+
import { registerCompliance } from './commands/compliance.js';
|
|
42
|
+
import { registerConstitution } from './commands/constitution.js';
|
|
41
43
|
import { registerMenu } from './commands/menu.js';
|
|
42
44
|
import { isBareInvocation } from './menu/invocation.js';
|
|
43
45
|
import { openMenu } from './menu/index.js';
|
|
@@ -72,6 +74,8 @@ export function buildProgram() {
|
|
|
72
74
|
registerMetrics(program);
|
|
73
75
|
registerDoctor(program);
|
|
74
76
|
registerAddSkill(program);
|
|
77
|
+
registerCompliance(program);
|
|
78
|
+
registerConstitution(program);
|
|
75
79
|
// Last, so `menu` renders last in `aidlc --help` (interactive-cli-menu/AC-5).
|
|
76
80
|
// Takes the factory, not `program`: the menu dispatches on a throwaway copy so
|
|
77
81
|
// the caller's program never carries an `exitOverride` it cannot undo.
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `aidlc compliance` command group — install, inspect and report on
|
|
3
|
+
* compliance packs.
|
|
4
|
+
*
|
|
5
|
+
* Registered early in the instance, before any subcommand has an implementation,
|
|
6
|
+
* for two reasons the design review established. Six later tasks assert
|
|
7
|
+
* observable properties of invocations of these commands, so the commands have to
|
|
8
|
+
* exist before those tasks can be written. And the moment a top-level command is
|
|
9
|
+
* registered, five pre-existing pins fail — the website's exact sorted command
|
|
10
|
+
* set, the website's generated CLI reference, the entrypoint command count, the
|
|
11
|
+
* menu's unaccounted-commands tripwire, and the two hand-maintained README
|
|
12
|
+
* tables. Those updates belong in one commit with the registration rather than
|
|
13
|
+
* spread across the tasks that follow it.
|
|
14
|
+
*
|
|
15
|
+
* The full option surface is declared here even though the actions are not
|
|
16
|
+
* implemented, because the generated CLI reference is produced by a `--help` walk
|
|
17
|
+
* of the built CLI. Declaring the surface once means regenerating that reference
|
|
18
|
+
* once.
|
|
19
|
+
*
|
|
20
|
+
* Every action currently exits 2 with a message naming the task that will
|
|
21
|
+
* implement it. Exit 2 is this feature's usage-or-load-error class, so an
|
|
22
|
+
* unimplemented subcommand cannot be mistaken for a passing check — a compliance
|
|
23
|
+
* command that exited 0 while doing nothing is precisely the silent false-green
|
|
24
|
+
* this feature exists to avoid.
|
|
25
|
+
*
|
|
26
|
+
* Requirements: compliance-packs/AC-51 (menu accounting). The behaviour of each
|
|
27
|
+
* subcommand is carried by its own task and its own criteria.
|
|
28
|
+
*/
|
|
29
|
+
import { Command } from 'commander';
|
|
30
|
+
/**
|
|
31
|
+
* Register the `aidlc compliance` group and its subcommands.
|
|
32
|
+
*
|
|
33
|
+
* @param program - The commander program.
|
|
34
|
+
*/
|
|
35
|
+
export declare function registerCompliance(program: Command): void;
|
|
36
|
+
//# sourceMappingURL=compliance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.d.ts","sourceRoot":"","sources":["../../src/commands/compliance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkPpC;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4CzD"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `aidlc compliance` command group — install, inspect and report on
|
|
3
|
+
* compliance packs.
|
|
4
|
+
*
|
|
5
|
+
* Registered early in the instance, before any subcommand has an implementation,
|
|
6
|
+
* for two reasons the design review established. Six later tasks assert
|
|
7
|
+
* observable properties of invocations of these commands, so the commands have to
|
|
8
|
+
* exist before those tasks can be written. And the moment a top-level command is
|
|
9
|
+
* registered, five pre-existing pins fail — the website's exact sorted command
|
|
10
|
+
* set, the website's generated CLI reference, the entrypoint command count, the
|
|
11
|
+
* menu's unaccounted-commands tripwire, and the two hand-maintained README
|
|
12
|
+
* tables. Those updates belong in one commit with the registration rather than
|
|
13
|
+
* spread across the tasks that follow it.
|
|
14
|
+
*
|
|
15
|
+
* The full option surface is declared here even though the actions are not
|
|
16
|
+
* implemented, because the generated CLI reference is produced by a `--help` walk
|
|
17
|
+
* of the built CLI. Declaring the surface once means regenerating that reference
|
|
18
|
+
* once.
|
|
19
|
+
*
|
|
20
|
+
* Every action currently exits 2 with a message naming the task that will
|
|
21
|
+
* implement it. Exit 2 is this feature's usage-or-load-error class, so an
|
|
22
|
+
* unimplemented subcommand cannot be mistaken for a passing check — a compliance
|
|
23
|
+
* command that exited 0 while doing nothing is precisely the silent false-green
|
|
24
|
+
* this feature exists to avoid.
|
|
25
|
+
*
|
|
26
|
+
* Requirements: compliance-packs/AC-51 (menu accounting). The behaviour of each
|
|
27
|
+
* subcommand is carried by its own task and its own criteria.
|
|
28
|
+
*/
|
|
29
|
+
import { Command } from 'commander';
|
|
30
|
+
import { resolveProjectRoot } from '../core/project-root.js';
|
|
31
|
+
import { installPack, packStatuses, removePack, upgradePack, } from '../compliance/install.js';
|
|
32
|
+
import { availablePackIds } from '../compliance/resolver.js';
|
|
33
|
+
import { checkDiff } from '../compliance/check.js';
|
|
34
|
+
import { computeComplianceReport, renderComplianceReport, } from '../compliance/report.js';
|
|
35
|
+
/**
|
|
36
|
+
* Report a pack error and exit.
|
|
37
|
+
*
|
|
38
|
+
* Exit 2 for a pack that exists but will not load — a usage-or-load error, shared
|
|
39
|
+
* with the check command's code 2 — and exit 1 for a pack that is simply not there,
|
|
40
|
+
* which is an ordinary "you asked for the wrong thing".
|
|
41
|
+
*/
|
|
42
|
+
function failPack(error) {
|
|
43
|
+
process.stderr.write(`aidlc compliance: ${error.errors.join('\n ')}\n`);
|
|
44
|
+
if (error.code === 'not-found') {
|
|
45
|
+
const available = availablePackIds();
|
|
46
|
+
process.stderr.write(available.length > 0
|
|
47
|
+
? `available packs: ${available.join(', ')}\n`
|
|
48
|
+
: 'no compliance packs are available in this installation\n');
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
process.exit(2);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* `aidlc compliance report`
|
|
55
|
+
*
|
|
56
|
+
* Read-only. Writes nothing under `.aidlc/`, which a test asserts by comparing the
|
|
57
|
+
* whole tree before and after.
|
|
58
|
+
*/
|
|
59
|
+
function runReport(opts) {
|
|
60
|
+
const projectRoot = resolveProjectRoot();
|
|
61
|
+
const report = computeComplianceReport(projectRoot, {
|
|
62
|
+
...(opts.instance !== undefined && { instance: opts.instance }),
|
|
63
|
+
...(opts.since !== undefined && { since: opts.since }),
|
|
64
|
+
});
|
|
65
|
+
process.stdout.write(opts.json
|
|
66
|
+
? `${JSON.stringify(report, null, 2)}\n`
|
|
67
|
+
: renderComplianceReport(report));
|
|
68
|
+
for (const warning of report.warnings) {
|
|
69
|
+
process.stderr.write(`warning: ${warning}\n`);
|
|
70
|
+
}
|
|
71
|
+
// No pack installed is a legitimate state, said out loud rather than an empty
|
|
72
|
+
// document that reads like a clean bill of health.
|
|
73
|
+
if (report.packs.length === 0) {
|
|
74
|
+
process.stderr.write('no compliance pack is installed — nothing to report\n');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
// Subcommand bodies
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
/** `aidlc compliance list` */
|
|
81
|
+
function runList(opts) {
|
|
82
|
+
const projectRoot = resolveProjectRoot();
|
|
83
|
+
const { statuses, errors } = packStatuses(projectRoot);
|
|
84
|
+
if (opts.json) {
|
|
85
|
+
process.stdout.write(`${JSON.stringify({ packs: statuses, errors }, null, 2)}\n`);
|
|
86
|
+
}
|
|
87
|
+
else if (statuses.length === 0) {
|
|
88
|
+
// Loud rather than an empty list: "no packs" and "packs exist but none loaded"
|
|
89
|
+
// are different situations and must not look the same.
|
|
90
|
+
process.stdout.write('No compliance packs are available in this installation.\n');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
for (const s of statuses) {
|
|
94
|
+
const state = s.installed === null ? 'not installed' : `installed ${s.installed}`;
|
|
95
|
+
const availability = s.available === null ? 'no longer shipped' : `available ${s.available}`;
|
|
96
|
+
const flags = [
|
|
97
|
+
s.stale ? 'UPGRADE AVAILABLE' : null,
|
|
98
|
+
s.installed !== null && !s.reviewed ? 'unreviewed draft' : null,
|
|
99
|
+
s.drifted.length > 0 ? `${s.drifted.length} locally edited` : null,
|
|
100
|
+
].filter(Boolean);
|
|
101
|
+
process.stdout.write(`${s.id.padEnd(12)} ${s.regime.padEnd(10)} ${state}, ${availability}` +
|
|
102
|
+
`${flags.length > 0 ? ` — ${flags.join('; ')}` : ''}\n`);
|
|
103
|
+
for (const path of s.drifted) {
|
|
104
|
+
process.stdout.write(` locally edited: ${path}\n`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// A pack present but unloadable is an error, never an omission.
|
|
109
|
+
for (const error of errors) {
|
|
110
|
+
process.stderr.write(`error: pack '${error.id}' did not load: ${error.errors.join('; ')}\n`);
|
|
111
|
+
}
|
|
112
|
+
if (errors.length > 0)
|
|
113
|
+
process.exit(2);
|
|
114
|
+
}
|
|
115
|
+
/** `aidlc compliance add <pack>` */
|
|
116
|
+
function runAdd(id) {
|
|
117
|
+
const projectRoot = resolveProjectRoot();
|
|
118
|
+
const result = installPack(projectRoot, id);
|
|
119
|
+
if (!result.ok)
|
|
120
|
+
failPack(result.error);
|
|
121
|
+
if (result.unchanged && result.installed.length === 0) {
|
|
122
|
+
process.stdout.write(`pack '${id}' is already installed and current\n`);
|
|
123
|
+
}
|
|
124
|
+
else if (result.installed.length > 0) {
|
|
125
|
+
process.stdout.write(`installed pack '${id}': ${result.installed.join(', ')}\n`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
process.stdout.write(`pack '${id}' recorded; no layer files needed writing\n`);
|
|
129
|
+
}
|
|
130
|
+
for (const name of result.locallyModified) {
|
|
131
|
+
process.stdout.write(` kept your edited copy of layer '${name}' — it was not overwritten\n`);
|
|
132
|
+
}
|
|
133
|
+
for (const warning of result.warnings) {
|
|
134
|
+
process.stderr.write(`warning: ${warning}\n`);
|
|
135
|
+
}
|
|
136
|
+
process.stdout.write('The pack applies from the next phase onwards. Findings are advisory unless ' +
|
|
137
|
+
'`compliance.enforce: true` is set in .aidlc/config.yaml.\n');
|
|
138
|
+
}
|
|
139
|
+
/** `aidlc compliance remove <pack>` */
|
|
140
|
+
function runRemove(id) {
|
|
141
|
+
const projectRoot = resolveProjectRoot();
|
|
142
|
+
const result = removePack(projectRoot, id);
|
|
143
|
+
if (!result.ok)
|
|
144
|
+
failPack(result.error);
|
|
145
|
+
process.stdout.write(`removed pack '${id}'\n`);
|
|
146
|
+
for (const path of result.deleted) {
|
|
147
|
+
process.stdout.write(` deleted ${path}\n`);
|
|
148
|
+
}
|
|
149
|
+
for (const name of result.unregistered) {
|
|
150
|
+
process.stdout.write(` unregistered layer '${name}'\n`);
|
|
151
|
+
}
|
|
152
|
+
// A file we kept is inert but still present, so say where it is and how to finish
|
|
153
|
+
// the job. Silence here is what turns a preserved edit into a mystery file.
|
|
154
|
+
for (const path of result.keptPaths) {
|
|
155
|
+
process.stdout.write(` kept ${path} — you edited it, so it was not deleted. It no longer applies. ` +
|
|
156
|
+
`Remove it with: rm ${path}\n`);
|
|
157
|
+
}
|
|
158
|
+
for (const warning of result.warnings) {
|
|
159
|
+
process.stderr.write(`warning: ${warning}\n`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* `aidlc compliance check`
|
|
164
|
+
*
|
|
165
|
+
* The wording below is pinned by test. `no applicable controls` on stderr with exit 0
|
|
166
|
+
* is a legitimate, visible state; an installed pack that will not load is exit 2 and
|
|
167
|
+
* never an empty success.
|
|
168
|
+
*/
|
|
169
|
+
function runCheck(opts) {
|
|
170
|
+
const projectRoot = resolveProjectRoot();
|
|
171
|
+
const result = checkDiff(projectRoot, {
|
|
172
|
+
...(opts.diff !== undefined && { diffRef: opts.diff }),
|
|
173
|
+
...(opts.enforce !== undefined && { enforce: opts.enforce }),
|
|
174
|
+
});
|
|
175
|
+
if (opts.json) {
|
|
176
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
for (const outcome of result.controls) {
|
|
180
|
+
const label = outcome.status === 'failing'
|
|
181
|
+
? `FAILING (${outcome.severity})`
|
|
182
|
+
: outcome.status === 'no-issues'
|
|
183
|
+
? 'no issues'
|
|
184
|
+
: 'NOT ASSESSED';
|
|
185
|
+
process.stdout.write(`${outcome.control.padEnd(8)} ${label} [${outcome.how}]\n`);
|
|
186
|
+
if (outcome.status === 'failing') {
|
|
187
|
+
process.stdout.write(` ${outcome.detail}\n`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (result.controls.length === 0 && result.errors.length === 0) {
|
|
191
|
+
// Visible, and on stderr so it cannot be mistaken for report data on stdout.
|
|
192
|
+
process.stderr.write('no applicable controls\n');
|
|
193
|
+
}
|
|
194
|
+
const pending = result.controls.filter((c) => c.status === 'pending-agent-review');
|
|
195
|
+
if (pending.length > 0) {
|
|
196
|
+
process.stderr.write(`${pending.length} control(s) not assessed. A control nothing looked at is not a pass — ` +
|
|
197
|
+
`run a phase review, or assess them and record the outcome in the compliance findings stream.\n`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
for (const warning of result.warnings) {
|
|
201
|
+
process.stderr.write(`warning: ${warning}\n`);
|
|
202
|
+
}
|
|
203
|
+
for (const error of result.errors) {
|
|
204
|
+
process.stderr.write(`error: ${error}\n`);
|
|
205
|
+
}
|
|
206
|
+
process.exit(result.exitCode);
|
|
207
|
+
}
|
|
208
|
+
/** `aidlc compliance upgrade <pack>` */
|
|
209
|
+
function runUpgrade(id) {
|
|
210
|
+
const projectRoot = resolveProjectRoot();
|
|
211
|
+
const result = upgradePack(projectRoot, id);
|
|
212
|
+
if (!result.ok)
|
|
213
|
+
failPack(result.error);
|
|
214
|
+
if (result.from === result.to) {
|
|
215
|
+
process.stdout.write(`pack '${id}' is already at ${result.to}\n`);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
process.stdout.write(`upgraded pack '${id}' from ${result.from} to ${result.to}\n`);
|
|
219
|
+
}
|
|
220
|
+
for (const path of result.replaced) {
|
|
221
|
+
process.stdout.write(` replaced ${path}\n`);
|
|
222
|
+
}
|
|
223
|
+
for (const path of result.keptPaths) {
|
|
224
|
+
process.stdout.write(` kept ${path} — you edited it, so the new version was not written. ` +
|
|
225
|
+
`Delete it and re-run to take the update.\n`);
|
|
226
|
+
}
|
|
227
|
+
for (const warning of result.warnings) {
|
|
228
|
+
process.stderr.write(`warning: ${warning}\n`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Register the `aidlc compliance` group and its subcommands.
|
|
233
|
+
*
|
|
234
|
+
* @param program - The commander program.
|
|
235
|
+
*/
|
|
236
|
+
export function registerCompliance(program) {
|
|
237
|
+
const compliance = program
|
|
238
|
+
.command('compliance')
|
|
239
|
+
.description('Compliance packs — install, check, and report evidence per control');
|
|
240
|
+
compliance
|
|
241
|
+
.command('list')
|
|
242
|
+
.description('List available compliance packs and whether each is installed')
|
|
243
|
+
.option('--json', 'Output machine-readable JSON')
|
|
244
|
+
.action((opts) => runList(opts));
|
|
245
|
+
compliance
|
|
246
|
+
.command('add')
|
|
247
|
+
.description('Install a compliance pack into this project')
|
|
248
|
+
.argument('<pack>', 'Pack id, as reported by `aidlc compliance list`')
|
|
249
|
+
.action((pack) => runAdd(pack));
|
|
250
|
+
compliance
|
|
251
|
+
.command('remove')
|
|
252
|
+
.description('Remove an installed compliance pack')
|
|
253
|
+
.argument('<pack>', 'Pack id')
|
|
254
|
+
.action((pack) => runRemove(pack));
|
|
255
|
+
compliance
|
|
256
|
+
.command('upgrade')
|
|
257
|
+
.description('Upgrade an installed pack to the available version')
|
|
258
|
+
.argument('<pack>', 'Pack id')
|
|
259
|
+
.action((pack) => runUpgrade(pack));
|
|
260
|
+
compliance
|
|
261
|
+
.command('check')
|
|
262
|
+
.description('Check a change against the installed packs’ controls')
|
|
263
|
+
.option('--diff <ref>', 'Assess the diff against this git ref instead of the working tree')
|
|
264
|
+
.option('--enforce', 'Exit non-zero on a failing or unassessed control')
|
|
265
|
+
.option('--json', 'Output machine-readable JSON')
|
|
266
|
+
.action((opts) => runCheck(opts));
|
|
267
|
+
compliance
|
|
268
|
+
.command('report')
|
|
269
|
+
.description('Evidence report: what each control requires and where the evidence is')
|
|
270
|
+
.option('--instance <name>', 'Limit the report to one instance')
|
|
271
|
+
.option('--since <date>', 'Limit the report to instances completed on or after this date')
|
|
272
|
+
.option('--json', 'Output machine-readable JSON')
|
|
273
|
+
.action((opts) => runReport(opts));
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../src/commands/compliance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aidlc constitution` — import a product vision document, and check whether the
|
|
3
|
+
* repo's constitution has drifted from it.
|
|
4
|
+
*
|
|
5
|
+
* Two leaves, both read-mostly:
|
|
6
|
+
*
|
|
7
|
+
* aidlc constitution import <path> extract → snapshot, print the statements
|
|
8
|
+
* aidlc constitution check snapshot vs source, report added/removed
|
|
9
|
+
*
|
|
10
|
+
* `check` exits 0 even when it finds drift (design D6). The roadmap item rules
|
|
11
|
+
* out adding a gate every future instance has to clear, so the failing exit is
|
|
12
|
+
* opt-in via `--exit-code` for a project that wants one in CI.
|
|
13
|
+
*
|
|
14
|
+
* The constitution document itself is written by the `aidlc-constitution` skill,
|
|
15
|
+
* not by this command. Deriving which slice of a vision a repo owns is judgement,
|
|
16
|
+
* and judgement does not belong in a CLI.
|
|
17
|
+
*
|
|
18
|
+
* Requirements: project-constitution/AC-1, project-constitution/AC-4,
|
|
19
|
+
* project-constitution/AC-12, project-constitution/AC-14,
|
|
20
|
+
* project-constitution/AC-15, project-constitution/AC-16
|
|
21
|
+
*
|
|
22
|
+
* @module
|
|
23
|
+
*/
|
|
24
|
+
import { Command } from 'commander';
|
|
25
|
+
export declare function registerConstitution(program: Command): void;
|
|
26
|
+
//# sourceMappingURL=constitution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constitution.d.ts","sourceRoot":"","sources":["../../src/commands/constitution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgF3D"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aidlc constitution` — import a product vision document, and check whether the
|
|
3
|
+
* repo's constitution has drifted from it.
|
|
4
|
+
*
|
|
5
|
+
* Two leaves, both read-mostly:
|
|
6
|
+
*
|
|
7
|
+
* aidlc constitution import <path> extract → snapshot, print the statements
|
|
8
|
+
* aidlc constitution check snapshot vs source, report added/removed
|
|
9
|
+
*
|
|
10
|
+
* `check` exits 0 even when it finds drift (design D6). The roadmap item rules
|
|
11
|
+
* out adding a gate every future instance has to clear, so the failing exit is
|
|
12
|
+
* opt-in via `--exit-code` for a project that wants one in CI.
|
|
13
|
+
*
|
|
14
|
+
* The constitution document itself is written by the `aidlc-constitution` skill,
|
|
15
|
+
* not by this command. Deriving which slice of a vision a repo owns is judgement,
|
|
16
|
+
* and judgement does not belong in a CLI.
|
|
17
|
+
*
|
|
18
|
+
* Requirements: project-constitution/AC-1, project-constitution/AC-4,
|
|
19
|
+
* project-constitution/AC-12, project-constitution/AC-14,
|
|
20
|
+
* project-constitution/AC-15, project-constitution/AC-16
|
|
21
|
+
*
|
|
22
|
+
* @module
|
|
23
|
+
*/
|
|
24
|
+
import { Command } from 'commander';
|
|
25
|
+
import { resolveProjectRoot } from '../core/project-root.js';
|
|
26
|
+
import { checkDrift } from '../constitution/check.js';
|
|
27
|
+
import { CONSTITUTION_RELATIVE } from '../constitution/entries.js';
|
|
28
|
+
import { extractVision, unsupportedFormatHelp } from '../constitution/extract.js';
|
|
29
|
+
import { SNAPSHOT_RELATIVE, buildSnapshot, writeSnapshot } from '../constitution/snapshot.js';
|
|
30
|
+
export function registerConstitution(program) {
|
|
31
|
+
const constitution = program
|
|
32
|
+
.command('constitution')
|
|
33
|
+
.description('Import a product vision document and track the repo scope derived from it');
|
|
34
|
+
constitution
|
|
35
|
+
.command('import')
|
|
36
|
+
.description('Read a vision document (.docx, .md, .markdown, .txt) into a snapshot')
|
|
37
|
+
.argument('<path>', 'Vision document inside this project')
|
|
38
|
+
.option('--json', 'Output machine-readable JSON')
|
|
39
|
+
.action((path, opts) => {
|
|
40
|
+
const projectRoot = resolveProjectRoot();
|
|
41
|
+
const extracted = extractVision(projectRoot, path);
|
|
42
|
+
if (!extracted.ok) {
|
|
43
|
+
const message = extracted.reason === 'unsupported-format'
|
|
44
|
+
? unsupportedFormatHelp(extracted.detail)
|
|
45
|
+
: `Cannot read this vision document: ${extracted.detail}.`;
|
|
46
|
+
if (opts.json) {
|
|
47
|
+
process.stdout.write(JSON.stringify({ ok: false, reason: extracted.reason, detail: extracted.detail }, null, 2) + '\n');
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
process.stderr.write(message + '\n');
|
|
51
|
+
}
|
|
52
|
+
process.exitCode = 1;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const snapshot = buildSnapshot({
|
|
56
|
+
relativePath: extracted.relativePath,
|
|
57
|
+
sha256: extracted.sha256,
|
|
58
|
+
extractor: extracted.extractor,
|
|
59
|
+
text: extracted.text,
|
|
60
|
+
now: new Date(),
|
|
61
|
+
});
|
|
62
|
+
const outcome = writeSnapshot(projectRoot, snapshot);
|
|
63
|
+
if (opts.json) {
|
|
64
|
+
process.stdout.write(JSON.stringify({
|
|
65
|
+
ok: true,
|
|
66
|
+
snapshot: SNAPSHOT_RELATIVE,
|
|
67
|
+
outcome,
|
|
68
|
+
source_path: snapshot.sourcePath,
|
|
69
|
+
source_sha256: snapshot.sourceSha256,
|
|
70
|
+
extractor: snapshot.extractor,
|
|
71
|
+
statement_count: snapshot.statements.length,
|
|
72
|
+
statements: snapshot.statements,
|
|
73
|
+
}, null, 2) + '\n');
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
process.stdout.write(renderImport(snapshot, outcome));
|
|
77
|
+
});
|
|
78
|
+
constitution
|
|
79
|
+
.command('check')
|
|
80
|
+
.description('Report vision statements added or removed since the last import')
|
|
81
|
+
.option('--json', 'Output machine-readable JSON')
|
|
82
|
+
.option('--exit-code', 'Exit 1 when drift is found (default: always exit 0)')
|
|
83
|
+
.action((opts) => {
|
|
84
|
+
const projectRoot = resolveProjectRoot();
|
|
85
|
+
const report = checkDrift(projectRoot);
|
|
86
|
+
if (opts.json) {
|
|
87
|
+
process.stdout.write(JSON.stringify(report, null, 2) + '\n');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
process.stdout.write(renderCheck(report));
|
|
91
|
+
}
|
|
92
|
+
const drifted = report.added.length > 0 || report.removed.length > 0;
|
|
93
|
+
if (opts.exitCode && drifted)
|
|
94
|
+
process.exitCode = 1;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function renderImport(snapshot, outcome) {
|
|
98
|
+
const lines = [];
|
|
99
|
+
lines.push(outcome === 'written'
|
|
100
|
+
? `Imported ${snapshot.sourcePath} → ${SNAPSHOT_RELATIVE}`
|
|
101
|
+
: `${snapshot.sourcePath} is unchanged since the last import — ${SNAPSHOT_RELATIVE} not rewritten`);
|
|
102
|
+
lines.push(` extractor: ${snapshot.extractor}, statements: ${snapshot.statements.length}`);
|
|
103
|
+
lines.push('');
|
|
104
|
+
for (const statement of snapshot.statements) {
|
|
105
|
+
const suffix = statement.occurrences > 1 ? ` (×${statement.occurrences})` : '';
|
|
106
|
+
lines.push(` ${statement.id} ${truncate(statement.text)}${suffix}`);
|
|
107
|
+
}
|
|
108
|
+
lines.push('');
|
|
109
|
+
lines.push(`Next: the aidlc-constitution skill turns these into ${CONSTITUTION_RELATIVE}.`);
|
|
110
|
+
return lines.join('\n') + '\n';
|
|
111
|
+
}
|
|
112
|
+
function renderCheck(report) {
|
|
113
|
+
if (report.state !== 'ok') {
|
|
114
|
+
return `Cannot evaluate drift: ${report.detail ?? report.state}.\n`;
|
|
115
|
+
}
|
|
116
|
+
const lines = [];
|
|
117
|
+
if (report.added.length === 0 && report.removed.length === 0) {
|
|
118
|
+
lines.push(`No drift: ${report.source_path} matches ${SNAPSHOT_RELATIVE}.`);
|
|
119
|
+
return lines.join('\n') + '\n';
|
|
120
|
+
}
|
|
121
|
+
lines.push(`Vision drift against ${report.source_path}:`);
|
|
122
|
+
if (report.added.length > 0)
|
|
123
|
+
lines.push(` added: ${report.added.join(', ')}`);
|
|
124
|
+
if (report.removed.length > 0)
|
|
125
|
+
lines.push(` removed: ${report.removed.join(', ')}`);
|
|
126
|
+
if (report.affected_entries.length > 0) {
|
|
127
|
+
lines.push('');
|
|
128
|
+
lines.push(`Constitution entries citing a removed statement (${CONSTITUTION_RELATIVE}):`);
|
|
129
|
+
for (const affected of report.affected_entries) {
|
|
130
|
+
lines.push(` ${affected.entry} (line ${affected.line}) cites ${affected.cites}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
lines.push('');
|
|
135
|
+
lines.push('No constitution entry cites a removed statement.');
|
|
136
|
+
}
|
|
137
|
+
lines.push('');
|
|
138
|
+
lines.push('Advisory only — this never fails a phase. Re-run the aidlc-constitution skill');
|
|
139
|
+
lines.push('to propose amendments.');
|
|
140
|
+
return lines.join('\n') + '\n';
|
|
141
|
+
}
|
|
142
|
+
function truncate(text) {
|
|
143
|
+
return text.length > 78 ? `${text.slice(0, 75)}...` : text;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=constitution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constitution.js","sourceRoot":"","sources":["../../src/commands/constitution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/commands/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/commands/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0FpC,yEAAyE;AACzE,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CASxE;AA+bD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFnD"}
|