@isaacriehm/cairn 0.22.5 → 0.23.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.
@@ -0,0 +1,75 @@
1
+ /**
2
+ * `cairn invariants <sub>` — invariant store maintenance.
3
+ *
4
+ * prune retire junk invariants the Layer A sot-align hook minted before
5
+ * the creation gate landed. Only `capture_source: layer-a-sot-align`
6
+ * invariants are eligible — curated invariants are never touched.
7
+ *
8
+ * --dry-run list what would be archived; change nothing
9
+ * --all archive EVERY sot-align invariant (full reset);
10
+ * default is surgical (only those with no constraint shape)
11
+ * --repo <p> operate on another repo root
12
+ */
13
+ import { resolve } from "node:path";
14
+ import { isAdopted, pruneInvariants, } from "@isaacriehm/cairn-core";
15
+ function parseRepoFlag(argv) {
16
+ const idx = argv.indexOf("--repo");
17
+ if (idx === -1)
18
+ return process.cwd();
19
+ const candidate = argv[idx + 1];
20
+ if (candidate === undefined || candidate.startsWith("--")) {
21
+ console.error("--repo requires a path argument");
22
+ process.exit(2);
23
+ }
24
+ return resolve(candidate);
25
+ }
26
+ function usage() {
27
+ console.error("Usage: cairn invariants prune [--dry-run] [--all] [--repo <path>]\n" +
28
+ " prune retire junk sot-align invariants (no constraint shape)\n" +
29
+ " --dry-run list candidates, change nothing\n" +
30
+ " --all archive every sot-align invariant (full reset)");
31
+ process.exit(2);
32
+ }
33
+ function renderPrune(result, mode) {
34
+ const verb = result.dryRun ? "would archive" : "archived";
35
+ process.stdout.write(`⬡ cairn invariants prune (${mode}${result.dryRun ? ", dry-run" : ""})\n\n`);
36
+ process.stdout.write(` scanned ${result.scanned} invariant${result.scanned === 1 ? "" : "s"}; ` +
37
+ `${result.sotAlignTotal} sot-align-sourced (eligible)\n`);
38
+ if (result.pruned.length === 0) {
39
+ process.stdout.write(` ✓ nothing to prune — no junk sot-align invariants found.\n`);
40
+ return;
41
+ }
42
+ process.stdout.write(` ${verb} ${result.pruned.length}; kept ${result.kept}\n\n`);
43
+ const shown = result.pruned.slice(0, 20);
44
+ for (const p of shown) {
45
+ const title = p.title.length > 0 ? p.title : "(untitled)";
46
+ process.stdout.write(` - ${p.id} ${title}\n`);
47
+ }
48
+ if (result.pruned.length > shown.length) {
49
+ process.stdout.write(` … +${result.pruned.length - shown.length} more\n`);
50
+ }
51
+ if (!result.dryRun) {
52
+ process.stdout.write(`\n Archived to .cairn/ground/.archive/invariants/ (recoverable).\n` +
53
+ ` Run \`cairn fix\` to refresh the scope-index + manifest.\n`);
54
+ }
55
+ else {
56
+ process.stdout.write(`\n Dry run — re-run without --dry-run to apply.\n`);
57
+ }
58
+ }
59
+ export async function invariantsCli(argv) {
60
+ const sub = argv[0];
61
+ if (sub !== "prune")
62
+ usage();
63
+ const flags = argv.slice(1);
64
+ const repoRoot = parseRepoFlag(flags);
65
+ if (!isAdopted(repoRoot)) {
66
+ console.error(`cairn: ${repoRoot} is not cairn-adopted (no config.yaml). Run \`cairn init\` first.`);
67
+ process.exit(2);
68
+ }
69
+ const dryRun = flags.includes("--dry-run");
70
+ const mode = flags.includes("--all") ? "all" : "surgical";
71
+ const result = pruneInvariants({ repoRoot, mode, dryRun });
72
+ renderPrune(result, mode);
73
+ process.exit(0);
74
+ }
75
+ //# sourceMappingURL=invariants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariants.js","sourceRoot":"","sources":["../../src/cli/invariants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `cairn uninstall` — remove Cairn from a repo.
3
+ *
4
+ * Destructive, so it is dry-run by default: with no `--yes` it prints the
5
+ * plan and changes nothing. `--yes` applies it.
6
+ *
7
+ * --yes apply (otherwise dry-run / preview only)
8
+ * --keep-cites leave in-source §DEC-/§INV- tokens (they will dangle)
9
+ * --repo <path> operate on another repo root
10
+ */
11
+ export declare function uninstallCli(argv: string[]): Promise<void>;
@@ -0,0 +1,63 @@
1
+ /**
2
+ * `cairn uninstall` — remove Cairn from a repo.
3
+ *
4
+ * Destructive, so it is dry-run by default: with no `--yes` it prints the
5
+ * plan and changes nothing. `--yes` applies it.
6
+ *
7
+ * --yes apply (otherwise dry-run / preview only)
8
+ * --keep-cites leave in-source §DEC-/§INV- tokens (they will dangle)
9
+ * --repo <path> operate on another repo root
10
+ */
11
+ import { resolve } from "node:path";
12
+ import { isAdopted, uninstallCairn, } from "@isaacriehm/cairn-core";
13
+ function parseRepoFlag(argv) {
14
+ const idx = argv.indexOf("--repo");
15
+ if (idx === -1)
16
+ return process.cwd();
17
+ const candidate = argv[idx + 1];
18
+ if (candidate === undefined || candidate.startsWith("--")) {
19
+ console.error("--repo requires a path argument");
20
+ process.exit(2);
21
+ }
22
+ return resolve(candidate);
23
+ }
24
+ function icon(status) {
25
+ switch (status) {
26
+ case "ok":
27
+ return "✓";
28
+ case "warn":
29
+ return "⚠";
30
+ case "skipped":
31
+ return "·";
32
+ }
33
+ }
34
+ function render(result, applied) {
35
+ process.stdout.write(`⬡ cairn uninstall${applied ? "" : " (preview — nothing changed)"}\n\n`);
36
+ for (const s of result.steps) {
37
+ process.stdout.write(` ${icon(s.status)} ${s.step.padEnd(16)} ${s.detail}\n`);
38
+ }
39
+ process.stdout.write("\n");
40
+ if (applied) {
41
+ process.stdout.write(" Cairn removed. Source kept any inlined decision/invariant bodies as plain comments.\n");
42
+ }
43
+ else {
44
+ process.stdout.write(" Preview only. Re-run with --yes to apply.\n");
45
+ }
46
+ }
47
+ export async function uninstallCli(argv) {
48
+ const repoRoot = parseRepoFlag(argv);
49
+ if (!isAdopted(repoRoot)) {
50
+ console.error(`cairn: ${repoRoot} is not cairn-adopted (no config.yaml). Nothing to uninstall.`);
51
+ process.exit(2);
52
+ }
53
+ const apply = argv.includes("--yes") || argv.includes("-y");
54
+ const keepCites = argv.includes("--keep-cites");
55
+ const result = uninstallCairn({
56
+ repoRoot,
57
+ expandCites: !keepCites,
58
+ dryRun: !apply,
59
+ });
60
+ render(result, apply);
61
+ process.exit(0);
62
+ }
63
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/cli/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,SAAS,EACT,cAAc,GAEf,MAAM,wBAAwB,CAAC;AAEhC,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAChC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,IAAI,CAAC,MAAkD;IAC9D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,IAAI;YACP,OAAO,GAAG,CAAC;QACb,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,MAAuB,EAAE,OAAgB;IACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,MAAM,CAAC,CAAC;IAC9F,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAClH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CACX,UAAU,QAAQ,+DAA+D,CAClF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,cAAc,CAAC;QAC5B,QAAQ;QACR,WAAW,EAAE,CAAC,SAAS;QACvB,MAAM,EAAE,CAAC,KAAK;KACf,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isaacriehm/cairn",
3
- "version": "0.22.5",
3
+ "version": "0.23.0",
4
4
  "description": "Cairn — state + context-loading layer for AI coding agents.",
5
5
  "author": "Isaac Riehm",
6
6
  "license": "MIT",
@@ -37,7 +37,7 @@
37
37
  "dependencies": {
38
38
  "simple-git": "^3.36.0",
39
39
  "yaml": "^2.9.0",
40
- "@isaacriehm/cairn-core": "0.22.5"
40
+ "@isaacriehm/cairn-core": "0.23.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "^25.9.2",
@@ -71,7 +71,6 @@
71
71
  "smoke:status-line": "tsx scripts/smoke-status-line.ts",
72
72
  "smoke:handoff": "tsx scripts/smoke-handoff.ts",
73
73
  "smoke:scope-index": "tsx scripts/smoke-scope-index.ts",
74
- "smoke:config-globs": "tsx scripts/smoke-config-globs.ts",
75
74
  "smoke:sensor-gate": "tsx scripts/smoke-sensor-gate.ts",
76
75
  "smoke:migrate": "tsx scripts/smoke-migrate.ts",
77
76
  "smoke:update-check": "tsx scripts/smoke-update-check.ts",
@@ -101,10 +100,16 @@
101
100
  "smoke:id-content-addressed": "tsx scripts/smoke-id-content-addressed.ts",
102
101
  "smoke:topic-index": "tsx scripts/smoke-topic-index.ts",
103
102
  "smoke:tag-cli": "tsx scripts/smoke-tag-cli.ts",
103
+ "smoke:doctor-exit": "tsx scripts/smoke-doctor-exit.ts",
104
104
  "smoke:llm-prompt-eval": "tsx scripts/smoke-llm-prompt-eval.ts",
105
105
  "smoke:llm-detect-components": "tsx scripts/smoke-llm-detect-components.ts",
106
106
  "smoke:conflicts-queue": "tsx scripts/smoke-conflicts-queue.ts",
107
107
  "smoke:sot-align": "tsx scripts/smoke-sot-align.ts",
108
+ "smoke:sot-align-gate": "tsx scripts/smoke-sot-align-gate.ts",
109
+ "smoke:invariants-prune": "tsx scripts/smoke-invariants-prune.ts",
110
+ "smoke:cites-expand": "tsx scripts/smoke-cites-expand.ts",
111
+ "smoke:completion-integrity": "tsx scripts/smoke-completion-integrity.ts",
112
+ "smoke:uninstall": "tsx scripts/smoke-uninstall.ts",
108
113
  "smoke:layer-b-precommit": "tsx scripts/smoke-layer-b-precommit.ts",
109
114
  "smoke:layer-c-sessionstart-drain": "tsx scripts/smoke-layer-c-sessionstart-drain.ts",
110
115
  "smoke:fix-align": "tsx scripts/smoke-fix-align.ts",
@@ -122,7 +127,7 @@
122
127
  "smoke:claude-rule-import": "tsx scripts/smoke-claude-rule-import.ts",
123
128
  "smoke:components": "tsx scripts/smoke-components.ts",
124
129
  "smoke:units-multilang": "tsx scripts/smoke-units-multilang.ts",
125
- "smokes": "pnpm smoke:cairn-home && pnpm smoke:cli-path && pnpm smoke:ghost-init && pnpm smoke:ghost-gc && pnpm smoke:ghost-hooks && pnpm smoke:ghost-adopt-mcp && pnpm smoke:hooks-clobber && pnpm smoke:ghost-reanchor && pnpm smoke:ghost-backup && pnpm smoke:ghost-components && pnpm smoke:ghost-freshness && pnpm smoke:ghost-reconfirm && pnpm smoke:ghost-cleanups && pnpm smoke:lens-ghost && pnpm smoke:rebuild-derived && pnpm smoke:claude-rule-import && pnpm smoke:components && pnpm smoke:units-multilang && pnpm smoke:plugin-layout && pnpm smoke:resolve-attention && pnpm smoke:stop-hook && pnpm smoke:events && pnpm smoke:session-state && pnpm smoke:status-line && pnpm smoke:session-start && pnpm smoke:handoff && pnpm smoke:scope-index && pnpm smoke:config-globs && pnpm smoke:sensor-gate && pnpm smoke:migrate && pnpm smoke:update-check && pnpm smoke:read-enrich && pnpm smoke:init && pnpm smoke:ingestion-baseline && pnpm smoke:gc && pnpm smoke:lock && pnpm smoke:source-comments && pnpm smoke:rules-merge && pnpm smoke:join && pnpm smoke:bypass-detection && pnpm smoke:bootstrap-guard && pnpm smoke:e2e-adoption && pnpm smoke:e2e-daily-flow && pnpm smoke:plugin-bundle && pnpm smoke:init-phases-state && pnpm smoke:init-phases-all && pnpm smoke:init-mcp-tools && pnpm smoke:init-progress-heartbeat && pnpm smoke:stop-debounce && pnpm smoke:phase-ready-surface && pnpm smoke:mission-phase-brief && pnpm smoke:curator-validate && pnpm smoke:essay-shape-detector && pnpm smoke:entity-orphan && pnpm smoke:repo-root-anchor && pnpm smoke:bug-mine-0.13.3 && pnpm smoke:bug-mine-0.13.5 && pnpm smoke:bug-mine-0.13.8 && pnpm smoke:bug-mine-0.13.10",
130
+ "smokes": "pnpm smoke:cairn-home && pnpm smoke:cli-path && pnpm smoke:ghost-init && pnpm smoke:ghost-gc && pnpm smoke:ghost-hooks && pnpm smoke:ghost-adopt-mcp && pnpm smoke:hooks-clobber && pnpm smoke:ghost-reanchor && pnpm smoke:ghost-backup && pnpm smoke:ghost-components && pnpm smoke:ghost-freshness && pnpm smoke:ghost-reconfirm && pnpm smoke:ghost-cleanups && pnpm smoke:lens-ghost && pnpm smoke:rebuild-derived && pnpm smoke:claude-rule-import && pnpm smoke:components && pnpm smoke:units-multilang && pnpm smoke:plugin-layout && pnpm smoke:resolve-attention && pnpm smoke:stop-hook && pnpm smoke:events && pnpm smoke:session-state && pnpm smoke:status-line && pnpm smoke:session-start && pnpm smoke:handoff && pnpm smoke:scope-index && pnpm smoke:sensor-gate && pnpm smoke:migrate && pnpm smoke:update-check && pnpm smoke:read-enrich && pnpm smoke:init && pnpm smoke:ingestion-baseline && pnpm smoke:gc && pnpm smoke:lock && pnpm smoke:source-comments && pnpm smoke:rules-merge && pnpm smoke:join && pnpm smoke:bypass-detection && pnpm smoke:bootstrap-guard && pnpm smoke:e2e-adoption && pnpm smoke:e2e-daily-flow && pnpm smoke:plugin-bundle && pnpm smoke:init-phases-state && pnpm smoke:init-phases-all && pnpm smoke:init-mcp-tools && pnpm smoke:init-progress-heartbeat && pnpm smoke:stop-debounce && pnpm smoke:phase-ready-surface && pnpm smoke:mission-phase-brief && pnpm smoke:curator-validate && pnpm smoke:essay-shape-detector && pnpm smoke:sot-align-gate && pnpm smoke:invariants-prune && pnpm smoke:cites-expand && pnpm smoke:completion-integrity && pnpm smoke:uninstall && pnpm smoke:entity-orphan && pnpm smoke:repo-root-anchor && pnpm smoke:bug-mine-0.13.3 && pnpm smoke:bug-mine-0.13.5 && pnpm smoke:bug-mine-0.13.8 && pnpm smoke:bug-mine-0.13.10 && pnpm smoke:doctor-exit",
126
131
  "smokes:all": "pnpm run \"/^smoke:/\""
127
132
  }
128
133
  }