@isaacriehm/cairn 0.1.10 → 0.3.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/dist/.tsbuildinfo +1 -1
- package/dist/cli/doctor.d.ts +0 -2
- package/dist/cli/doctor.js +0 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/hook.d.ts +6 -6
- package/dist/cli/hook.js +19 -15
- package/dist/cli/hook.js.map +1 -1
- package/dist/cli/index.js +47 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.js +2 -1
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/scope.d.ts +0 -2
- package/dist/cli/scope.js +3 -5
- package/dist/cli/scope.js.map +1 -1
- package/dist/cli/sensor-run.d.ts +12 -0
- package/dist/cli/sensor-run.js +92 -0
- package/dist/cli/sensor-run.js.map +1 -0
- package/dist/cli/trace.d.ts +9 -0
- package/dist/cli/trace.js +261 -0
- package/dist/cli/trace.js.map +1 -0
- package/package.json +12 -7
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `cairn doctor` — verify the adoption is healthy.
|
|
3
3
|
* `cairn fix` — auto-resolve the warnings doctor flags where we can.
|
|
4
|
-
*
|
|
5
|
-
* Spec: BUILD_REPORT.md "Task D — cairn doctor command".
|
|
6
4
|
*/
|
|
7
5
|
export declare function doctorCli(argv: string[]): Promise<void>;
|
|
8
6
|
export declare function fixCli(argv: string[]): Promise<void>;
|
package/dist/cli/doctor.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `cairn doctor` — verify the adoption is healthy.
|
|
3
3
|
* `cairn fix` — auto-resolve the warnings doctor flags where we can.
|
|
4
|
-
*
|
|
5
|
-
* Spec: BUILD_REPORT.md "Task D — cairn doctor command".
|
|
6
4
|
*/
|
|
7
5
|
import { existsSync } from "node:fs";
|
|
8
6
|
import { resolve } from "node:path";
|
package/dist/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/hook.d.ts
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
* plugin (e.g. terminal-side debug). Both routes call the same runners.
|
|
8
8
|
*
|
|
9
9
|
* cairn hook session-start
|
|
10
|
-
* cairn hook session-end
|
|
11
|
-
* cairn hook stop
|
|
12
|
-
* cairn hook
|
|
13
|
-
* cairn hook
|
|
10
|
+
* cairn hook session-end cleanup per-session state dir
|
|
11
|
+
* cairn hook stop assistant turn end — drain events + heartbeat
|
|
12
|
+
* cairn hook user-prompt-submit resolves @-attached file citations
|
|
13
|
+
* cairn hook read-enrich PostToolUse on Read — citation legend
|
|
14
|
+
* cairn hook write-guard PostToolUse on Write/Edit — copy-safety + scope reminder
|
|
14
15
|
*
|
|
15
|
-
* PreToolUse is intentionally NOT supported
|
|
16
|
-
* RESUME §2 — bricks the session if the hook fails).
|
|
16
|
+
* PreToolUse is intentionally NOT supported — bricks the session if the hook fails.
|
|
17
17
|
*/
|
|
18
18
|
export declare function hookCli(argv: string[]): Promise<void>;
|
package/dist/cli/hook.js
CHANGED
|
@@ -7,27 +7,28 @@
|
|
|
7
7
|
* plugin (e.g. terminal-side debug). Both routes call the same runners.
|
|
8
8
|
*
|
|
9
9
|
* cairn hook session-start
|
|
10
|
-
* cairn hook session-end
|
|
11
|
-
* cairn hook stop
|
|
12
|
-
* cairn hook
|
|
13
|
-
* cairn hook
|
|
10
|
+
* cairn hook session-end cleanup per-session state dir
|
|
11
|
+
* cairn hook stop assistant turn end — drain events + heartbeat
|
|
12
|
+
* cairn hook user-prompt-submit resolves @-attached file citations
|
|
13
|
+
* cairn hook read-enrich PostToolUse on Read — citation legend
|
|
14
|
+
* cairn hook write-guard PostToolUse on Write/Edit — copy-safety + scope reminder
|
|
14
15
|
*
|
|
15
|
-
* PreToolUse is intentionally NOT supported
|
|
16
|
-
* RESUME §2 — bricks the session if the hook fails).
|
|
16
|
+
* PreToolUse is intentionally NOT supported — bricks the session if the hook fails.
|
|
17
17
|
*/
|
|
18
|
-
import { runReadEnricher, runSessionEndHook, runSessionStartHook, runStopHook, runWriteGuardian, } from "@isaacriehm/cairn-core";
|
|
18
|
+
import { runReadEnricher, runSessionEndHook, runSessionStartHook, runStopHook, runUserPromptSubmitHook, runWriteGuardian, } from "@isaacriehm/cairn-core";
|
|
19
19
|
function usage() {
|
|
20
20
|
console.error("Usage: cairn hook <event>\n" +
|
|
21
|
-
" session-start
|
|
22
|
-
" session-end
|
|
23
|
-
" stop
|
|
24
|
-
"
|
|
25
|
-
"
|
|
21
|
+
" session-start SessionStart hook (default)\n" +
|
|
22
|
+
" session-end SessionEnd cleanup of per-session state dir\n" +
|
|
23
|
+
" stop Stop hook — drain events + status heartbeat\n" +
|
|
24
|
+
" user-prompt-submit UserPromptSubmit — resolve citations in @-attached files\n" +
|
|
25
|
+
" read-enrich PostToolUse on Read — citation legend enricher\n" +
|
|
26
|
+
" write-guard PostToolUse on Write/Edit — copy-safety + scope reminder\n" +
|
|
26
27
|
"\n" +
|
|
27
28
|
"Reads the Claude Code hook payload JSON on stdin, emits the\n" +
|
|
28
|
-
"Shape-B response on stdout.
|
|
29
|
-
"
|
|
30
|
-
"
|
|
29
|
+
"Shape-B response on stdout. Wired by the Claude Code plugin's\n" +
|
|
30
|
+
"hooks/hooks.json — adopted projects do not need their own\n" +
|
|
31
|
+
"`.claude/settings.json` hook entries.\n");
|
|
31
32
|
process.exit(1);
|
|
32
33
|
}
|
|
33
34
|
export async function hookCli(argv) {
|
|
@@ -43,6 +44,9 @@ export async function hookCli(argv) {
|
|
|
43
44
|
case "stop":
|
|
44
45
|
await runStopHook();
|
|
45
46
|
return;
|
|
47
|
+
case "user-prompt-submit":
|
|
48
|
+
await runUserPromptSubmitHook();
|
|
49
|
+
return;
|
|
46
50
|
case "read-enrich":
|
|
47
51
|
await runReadEnricher();
|
|
48
52
|
return;
|
package/dist/cli/hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/cli/hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,SAAS,KAAK;IACZ,OAAO,CAAC,KAAK,CACX,6BAA6B;QAC3B,
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/cli/hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,SAAS,KAAK;IACZ,OAAO,CAAC,KAAK,CACX,6BAA6B;QAC3B,uDAAuD;QACvD,uEAAuE;QACvE,uEAAuE;QACvE,oFAAoF;QACpF,0EAA0E;QAC1E,oFAAoF;QACpF,IAAI;QACJ,+DAA+D;QAC/D,iEAAiE;QACjE,6DAA6D;QAC7D,yCAAyC,CAC5C,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,eAAe;YAClB,MAAM,mBAAmB,EAAE,CAAC;YAC5B,OAAO;QACT,KAAK,aAAa;YAChB,MAAM,iBAAiB,EAAE,CAAC;YAC1B,OAAO;QACT,KAAK,MAAM;YACT,MAAM,WAAW,EAAE,CAAC;YACpB,OAAO;QACT,KAAK,oBAAoB;YACvB,MAAM,uBAAuB,EAAE,CAAC;YAChC,OAAO;QACT,KAAK,aAAa;YAChB,MAAM,eAAe,EAAE,CAAC;YACxB,OAAO;QACT,KAAK,aAAa;YAChB,MAAM,gBAAgB,EAAE,CAAC;YACzB,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,GAAG,CAAC,CAAC;YACpD,KAAK,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -8,7 +8,35 @@ import { initCli } from "./init.js";
|
|
|
8
8
|
import { joinCli } from "./join.js";
|
|
9
9
|
import { mcpCli } from "./mcp.js";
|
|
10
10
|
import { scopeCli } from "./scope.js";
|
|
11
|
-
|
|
11
|
+
import { sensorRunCli } from "./sensor-run.js";
|
|
12
|
+
import { traceCli } from "./trace.js";
|
|
13
|
+
function decodePayload(text) {
|
|
14
|
+
if (text.length === 0)
|
|
15
|
+
return { sessionId: null, ctx: null };
|
|
16
|
+
let parsed;
|
|
17
|
+
try {
|
|
18
|
+
parsed = JSON.parse(text);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return { sessionId: null, ctx: null };
|
|
22
|
+
}
|
|
23
|
+
const sid = parsed["session_id"];
|
|
24
|
+
const sessionId = typeof sid === "string" && sid.length > 0 ? sid : null;
|
|
25
|
+
const cw = parsed["context_window"];
|
|
26
|
+
let ctx = null;
|
|
27
|
+
if (cw !== null && typeof cw === "object") {
|
|
28
|
+
const w = cw;
|
|
29
|
+
const remaining = w["remaining_percentage"];
|
|
30
|
+
const total = w["total_tokens"];
|
|
31
|
+
if (typeof remaining === "number" && typeof total === "number" && total > 0) {
|
|
32
|
+
const usedPct = Math.max(0, Math.min(100, 100 - remaining));
|
|
33
|
+
const usedTokens = Math.round((total * usedPct) / 100);
|
|
34
|
+
ctx = { usedPct, usedTokens };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return { sessionId, ctx };
|
|
38
|
+
}
|
|
39
|
+
async function readStatusLinePayload() {
|
|
12
40
|
return new Promise((resolveP) => {
|
|
13
41
|
const chunks = [];
|
|
14
42
|
let settled = false;
|
|
@@ -20,22 +48,10 @@ async function readSessionIdFromStdin() {
|
|
|
20
48
|
};
|
|
21
49
|
process.stdin.on("data", (chunk) => chunks.push(chunk));
|
|
22
50
|
process.stdin.on("end", () => {
|
|
23
|
-
|
|
24
|
-
if (text.length === 0)
|
|
25
|
-
return settle(null);
|
|
26
|
-
try {
|
|
27
|
-
const parsed = JSON.parse(text);
|
|
28
|
-
if (typeof parsed?.session_id === "string" && parsed.session_id.length > 0) {
|
|
29
|
-
return settle(parsed.session_id);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
// fall through to null
|
|
34
|
-
}
|
|
35
|
-
settle(null);
|
|
51
|
+
settle(decodePayload(Buffer.concat(chunks).toString("utf8").trim()));
|
|
36
52
|
});
|
|
37
|
-
process.stdin.on("error", () => settle(null));
|
|
38
|
-
setTimeout(() => settle(null), 250);
|
|
53
|
+
process.stdin.on("error", () => settle({ sessionId: null, ctx: null }));
|
|
54
|
+
setTimeout(() => settle({ sessionId: null, ctx: null }), 250);
|
|
39
55
|
});
|
|
40
56
|
}
|
|
41
57
|
const [, , subcommand, ...rest] = process.argv;
|
|
@@ -67,6 +83,12 @@ switch (subcommand) {
|
|
|
67
83
|
case "hook":
|
|
68
84
|
await hookCli(rest);
|
|
69
85
|
break;
|
|
86
|
+
case "sensor-run":
|
|
87
|
+
await sensorRunCli(rest);
|
|
88
|
+
break;
|
|
89
|
+
case "trace":
|
|
90
|
+
await traceCli(rest);
|
|
91
|
+
break;
|
|
70
92
|
case "status-line": {
|
|
71
93
|
const projectRootIdx = rest.indexOf("--project-root");
|
|
72
94
|
let projectRoot;
|
|
@@ -83,6 +105,7 @@ switch (subcommand) {
|
|
|
83
105
|
}
|
|
84
106
|
const sessionIdIdx = rest.indexOf("--session-id");
|
|
85
107
|
let sessionId = null;
|
|
108
|
+
let ctx = null;
|
|
86
109
|
if (sessionIdIdx !== -1 && sessionIdIdx + 1 < rest.length) {
|
|
87
110
|
const candidate = rest[sessionIdIdx + 1];
|
|
88
111
|
if (candidate === undefined) {
|
|
@@ -92,9 +115,11 @@ switch (subcommand) {
|
|
|
92
115
|
sessionId = candidate;
|
|
93
116
|
}
|
|
94
117
|
else if (!process.stdin.isTTY) {
|
|
95
|
-
|
|
118
|
+
const payload = await readStatusLinePayload();
|
|
119
|
+
sessionId = payload.sessionId;
|
|
120
|
+
ctx = payload.ctx;
|
|
96
121
|
}
|
|
97
|
-
process.stdout.write(`${readStatusForCLI(projectRoot, sessionId)}\n`);
|
|
122
|
+
process.stdout.write(`${readStatusForCLI(projectRoot, sessionId, ctx ?? undefined)}\n`);
|
|
98
123
|
process.exit(0);
|
|
99
124
|
}
|
|
100
125
|
case "--version":
|
|
@@ -119,6 +144,10 @@ switch (subcommand) {
|
|
|
119
144
|
" (--repo <path>?)\n" +
|
|
120
145
|
" hook Claude Code hook runner (stdin = hook payload JSON)\n" +
|
|
121
146
|
" (subcommands: session-start | read-enrich | write-guard)\n" +
|
|
147
|
+
" sensor-run git-hook sensor sweep (--staged | --commit-msg <path>)\n" +
|
|
148
|
+
" trace pretty-print the unified live-session trace log\n" +
|
|
149
|
+
" (--tail | --session <id> | --repo <path> | --source <name> |\n" +
|
|
150
|
+
" --kind <substr> | --errors-only | --wide | --json)\n" +
|
|
122
151
|
" status-line print formatted status line\n" +
|
|
123
152
|
" (--project-root <path>? --session-id <id>?\n" +
|
|
124
153
|
" or pipe Claude Code status-line payload JSON on stdin)");
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/mcp.js
CHANGED
|
@@ -30,7 +30,8 @@ function usage() {
|
|
|
30
30
|
" --repo-root <path> adopted-project repo root (default: CAIRN_REPO_ROOT or cwd)\n" +
|
|
31
31
|
" --run-id <id> scope telemetry to a run id (default: top-level)\n" +
|
|
32
32
|
"\n" +
|
|
33
|
-
"Speaks MCP over stdio.
|
|
33
|
+
"Speaks MCP over stdio. The Claude Code plugin's .mcp.json wires this in;\n" +
|
|
34
|
+
"for other clients, register the bundled cli.mjs as the cairn server.");
|
|
34
35
|
process.exit(1);
|
|
35
36
|
}
|
|
36
37
|
export async function mcpCli(argv) {
|
package/dist/cli/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE/E,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAO9B,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAqC,EAAE,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAClB,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,CAAC,KAAK,CACX,oCAAoC;QAClC,sFAAsF;QACtF,2EAA2E;QAC3E,IAAI;QACJ,4EAA4E,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/scope.d.ts
CHANGED
package/dist/cli/scope.js
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
* `cairn scope <subcommand>` — scope-index commands.
|
|
3
3
|
*
|
|
4
4
|
* cairn scope rebuild [--repo <path>] — re-run mapper, rewrite scope-index.yaml
|
|
5
|
-
*
|
|
6
|
-
* Spec: BUILD_REPORT.md Gap 1 / DOCS_SPEC.md §3.8.
|
|
7
5
|
*/
|
|
8
6
|
import { existsSync } from "node:fs";
|
|
9
7
|
import { resolve } from "node:path";
|
|
@@ -35,18 +33,18 @@ async function rebuildHandler(argv) {
|
|
|
35
33
|
console.error(`cairn scope rebuild: ${repoRoot} is not cairn-adopted (no .cairn/). Run \`cairn init\` first.`);
|
|
36
34
|
process.exit(2);
|
|
37
35
|
}
|
|
38
|
-
process.stdout.write("⬡ cairn scope rebuild —
|
|
36
|
+
process.stdout.write("⬡ cairn scope rebuild — deterministic regex rescan…\n");
|
|
39
37
|
try {
|
|
40
38
|
const result = await rebuildScopeIndex({ repoRoot });
|
|
41
39
|
const relPath = result.path.startsWith(repoRoot)
|
|
42
40
|
? result.path.slice(repoRoot.length + 1)
|
|
43
41
|
: result.path;
|
|
44
|
-
process.stdout.write(` ✓ wrote ${relPath} — ${result.filesClassified} file${result.filesClassified === 1 ? "" : "s"}
|
|
42
|
+
process.stdout.write(` ✓ wrote ${relPath} — ${result.filesClassified} file${result.filesClassified === 1 ? "" : "s"} scanned (${result.durationMs}ms)\n`);
|
|
45
43
|
process.exit(0);
|
|
46
44
|
}
|
|
47
45
|
catch (err) {
|
|
48
46
|
const msg = err instanceof Error ? err.message : String(err);
|
|
49
|
-
console.error(`cairn scope rebuild:
|
|
47
|
+
console.error(`cairn scope rebuild: rescan failed — ${msg}`);
|
|
50
48
|
process.exit(1);
|
|
51
49
|
}
|
|
52
50
|
}
|
package/dist/cli/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/cli/scope.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/cli/scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cairn sensor-run` — invoked by the cairn git hooks (pre-commit,
|
|
3
|
+
* commit-msg).
|
|
4
|
+
*
|
|
5
|
+
* Parses the trigger flag, loads `.cairn/config/sensors.yaml`, and
|
|
6
|
+
* exits cleanly. Pre-commit / commit-msg sensor execution is not yet
|
|
7
|
+
* wired; the canonical sweep runs at adoption (phase 8 baseline) and
|
|
8
|
+
* the Stop-hook bypass-tracker (post-commit).
|
|
9
|
+
*
|
|
10
|
+
* Exits 0 unless the repo is misconfigured (no `.cairn/` at all).
|
|
11
|
+
*/
|
|
12
|
+
export declare function sensorRunCli(argv: string[]): Promise<void>;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cairn sensor-run` — invoked by the cairn git hooks (pre-commit,
|
|
3
|
+
* commit-msg).
|
|
4
|
+
*
|
|
5
|
+
* Parses the trigger flag, loads `.cairn/config/sensors.yaml`, and
|
|
6
|
+
* exits cleanly. Pre-commit / commit-msg sensor execution is not yet
|
|
7
|
+
* wired; the canonical sweep runs at adoption (phase 8 baseline) and
|
|
8
|
+
* the Stop-hook bypass-tracker (post-commit).
|
|
9
|
+
*
|
|
10
|
+
* Exits 0 unless the repo is misconfigured (no `.cairn/` at all).
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
13
|
+
import { join, resolve } from "node:path";
|
|
14
|
+
import { parse as parseYaml } from "yaml";
|
|
15
|
+
function findRepoRoot(start) {
|
|
16
|
+
let cur = resolve(start);
|
|
17
|
+
for (let i = 0; i < 80; i++) {
|
|
18
|
+
if (existsSync(join(cur, ".cairn")))
|
|
19
|
+
return cur;
|
|
20
|
+
const parent = resolve(cur, "..");
|
|
21
|
+
if (parent === cur)
|
|
22
|
+
return null;
|
|
23
|
+
cur = parent;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
function loadSensors(repoRoot) {
|
|
28
|
+
const path = join(repoRoot, ".cairn", "config", "sensors.yaml");
|
|
29
|
+
if (!existsSync(path))
|
|
30
|
+
return null;
|
|
31
|
+
try {
|
|
32
|
+
const parsed = parseYaml(readFileSync(path, "utf8"));
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function sensorsForTrigger(cfg, trigger) {
|
|
40
|
+
if (cfg === null || !Array.isArray(cfg.sensors))
|
|
41
|
+
return [];
|
|
42
|
+
return cfg.sensors.filter((s) => Array.isArray(s.triggers) && s.triggers.includes(trigger));
|
|
43
|
+
}
|
|
44
|
+
function parseFlags(argv) {
|
|
45
|
+
let trigger = null;
|
|
46
|
+
let commitMsgPath = null;
|
|
47
|
+
for (let i = 0; i < argv.length; i++) {
|
|
48
|
+
const a = argv[i];
|
|
49
|
+
if (a === "--staged") {
|
|
50
|
+
trigger = "pre-commit";
|
|
51
|
+
}
|
|
52
|
+
else if (a === "--commit-msg") {
|
|
53
|
+
trigger = "commit-msg";
|
|
54
|
+
const next = argv[i + 1];
|
|
55
|
+
if (typeof next === "string" && !next.startsWith("--")) {
|
|
56
|
+
commitMsgPath = next;
|
|
57
|
+
i += 1;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (trigger === null)
|
|
62
|
+
return null;
|
|
63
|
+
return { trigger, commitMsgPath };
|
|
64
|
+
}
|
|
65
|
+
export async function sensorRunCli(argv) {
|
|
66
|
+
const flags = parseFlags(argv);
|
|
67
|
+
if (flags === null) {
|
|
68
|
+
console.error("Usage: cairn sensor-run --staged | --commit-msg <path>\n" +
|
|
69
|
+
"Invoked by the cairn pre-commit / commit-msg git hooks.");
|
|
70
|
+
process.exit(2);
|
|
71
|
+
}
|
|
72
|
+
const repoRoot = findRepoRoot(process.cwd());
|
|
73
|
+
if (repoRoot === null) {
|
|
74
|
+
// Not a cairn-adopted repo — hooks call us defensively, exit clean.
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}
|
|
77
|
+
const cfg = loadSensors(repoRoot);
|
|
78
|
+
const matched = sensorsForTrigger(cfg, flags.trigger);
|
|
79
|
+
if (matched.length === 0) {
|
|
80
|
+
// No sensors configured for this trigger — silent pass.
|
|
81
|
+
process.exit(0);
|
|
82
|
+
}
|
|
83
|
+
// Pre-commit / commit-msg sensor execution is not yet wired.
|
|
84
|
+
// The canonical sweep runs at adoption (phase 8 baseline); the Stop hook
|
|
85
|
+
// bypass-tracker (post-commit) catches `--no-verify` after the fact.
|
|
86
|
+
// Surface a one-line note so operators with active triggers know
|
|
87
|
+
// their sensors are pending hookup.
|
|
88
|
+
const ids = matched.map((s) => s.id).join(", ");
|
|
89
|
+
console.error(`cairn: ${flags.trigger} sensors configured (${ids}) but execution not yet wired for this trigger`);
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=sensor-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensor-run.js","sourceRoot":"","sources":["../../src/cli/sensor-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cairn trace` — pretty-print the unified trace log.
|
|
3
|
+
*
|
|
4
|
+
* Reads `~/.local/cairn/trace/trace-<YYYY-MM-DD>.jsonl` for the most
|
|
5
|
+
* recent two days, time-sorts the rows, and prints a one-line-per-event
|
|
6
|
+
* summary. Optional flags filter by session, repo, source, kind, or
|
|
7
|
+
* follow live.
|
|
8
|
+
*/
|
|
9
|
+
export declare function traceCli(argv: string[]): Promise<void>;
|