nexus-canon 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ import { type HarnessName } from './canonTools.js';
1
2
  export interface CanonStoreOptions {
2
3
  /** Canon store working clone (default /tmp/canon-store — off-quota; auto-cloned). */
3
4
  store?: string;
@@ -15,6 +16,8 @@ export interface CanonSession {
15
16
  export interface CanonPullOptions extends CanonStoreOptions {
16
17
  /** Session uuid (or unique prefix) to materialize. */
17
18
  session: string;
19
+ /** Target harness for the tool-compatibility report (default nexus-cortex — where pull lands). */
20
+ target?: HarnessName;
18
21
  /** Destination directory (default {home}/omniclaude-v4/.cortex/sessions). */
19
22
  to?: string;
20
23
  /** Overwrite an existing local session file (default false — pull is a branch, never a clobber). */
@@ -1 +1 @@
1
- {"version":3,"file":"canonPull.d.ts","sourceRoot":"","sources":["../src/canonPull.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,iBAAiB;IAChC,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oGAAoG;IACpG,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAcD,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CA2CnE;AAED,qFAAqF;AACrF,wBAAsB,SAAS,CAAC,CAAC,GAAE,iBAAiB,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAWtG;AAED,qEAAqE;AACrE,wBAAsB,SAAS,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA8B7E"}
1
+ {"version":3,"file":"canonPull.d.ts","sourceRoot":"","sources":["../src/canonPull.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAqD,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtG,MAAM,WAAW,iBAAiB;IAChC,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oGAAoG;IACpG,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAcD,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CA2CnE;AAED,qFAAqF;AACrF,wBAAsB,SAAS,CAAC,CAAC,GAAE,iBAAiB,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAWtG;AAED,qEAAqE;AACrE,wBAAsB,SAAS,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqC7E"}
package/dist/canonPull.js CHANGED
@@ -17,6 +17,7 @@
17
17
  import * as fs from 'node:fs';
18
18
  import * as path from 'node:path';
19
19
  import { execFileSync } from 'node:child_process';
20
+ import { renderCompat, sessionToolNames, toolCompatibility } from './canonTools.js';
20
21
  /** Clone the store if absent, else pull — rehydrate freshness on arrival. */
21
22
  function ensureFreshStore(store, repoUrl, label = 'canon-pull') {
22
23
  const repo = repoUrl ?? process.env.CANON_REPO ?? 'https://github.com/Spitfire-Products/nexus-canon-store';
@@ -137,6 +138,15 @@ export async function canonPull(o) {
137
138
  console.log(`[canon-pull] materialized ${s.uuid} (${s.harness}${s.title ? ` — "${s.title}"` : ''})`);
138
139
  console.log(`[canon-pull] ${lines} canonical message(s), ${(s.bytes / 1024).toFixed(0)}KB → ${dest}`);
139
140
  console.log(`[canon-pull] resume with: cortex --resume ${s.uuid} "..."`);
141
+ // Phase E rung 1: the pull-time tool-ontology compatibility report — the
142
+ // receiving side learns up front which referenced tools are native, which
143
+ // map by name, and which need relay/re-expression (P4 ladder).
144
+ try {
145
+ const names = await sessionToolNames(dest);
146
+ if (names.length)
147
+ console.log(renderCompat(toolCompatibility(names, o.target ?? 'nexus-cortex')));
148
+ }
149
+ catch { /* report is best-effort — never block a pull */ }
140
150
  return { code: 0, dest, session: s };
141
151
  }
142
152
  //# sourceMappingURL=canonPull.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canonPull.js","sourceRoot":"","sources":["../src/canonPull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonPull.js","sourceRoot":"","sources":["../src/canonPull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export type HarnessName = 'claude-code' | 'nexus-cortex' | 'grok-build' | 'gemini-cli';
2
+ export declare const HARNESSES: HarnessName[];
3
+ /**
4
+ * Canonical concept → per-harness tool names. Seeded from the observed
5
+ * four-harness corpus plus each CLI's documented surface; extend as the
6
+ * §27n roster lands. A name may map to several concepts' worth of behavior —
7
+ * rung 1 keeps it 1:1 on the dominant sense.
8
+ */
9
+ export declare const TOOL_CONCEPTS: Record<string, Partial<Record<HarnessName, string[]>>>;
10
+ export interface ToolInventory {
11
+ [harness: string]: Record<string, number>;
12
+ }
13
+ /** Scan the canonical line for observed tool_use names per harness. */
14
+ export declare function deriveToolInventory(store: string): Promise<ToolInventory>;
15
+ export interface ToolCompatReport {
16
+ target: HarnessName;
17
+ referenced: string[];
18
+ mapped: {
19
+ name: string;
20
+ concept: string;
21
+ targetNames: string[];
22
+ }[];
23
+ native: string[];
24
+ mcp: string[];
25
+ unmapped: string[];
26
+ }
27
+ /** Classify one session's tool references against a target harness. */
28
+ export declare function toolCompatibility(referenced: string[], target: HarnessName): ToolCompatReport;
29
+ /** Extract the tool_use names referenced in one canonical session file. */
30
+ export declare function sessionToolNames(file: string): Promise<string[]>;
31
+ /** Render the compatibility report for terminal output. */
32
+ export declare function renderCompat(r: ToolCompatReport): string;
33
+ //# sourceMappingURL=canonTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonTools.d.ts","sourceRoot":"","sources":["../src/canonTools.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,YAAY,GAAG,YAAY,CAAC;AACvF,eAAO,MAAM,SAAS,EAAE,WAAW,EAAgE,CAAC;AAEpG;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAehF,CAAC;AAWF,MAAM,WAAW,aAAa;IAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE;AAE5E,uEAAuE;AACvE,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwB/E;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACnE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAc7F;AAED,2EAA2E;AAC3E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWtE;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CASxD"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * canonTools — Phase E rung 1 of the tool-ontology ladder (layer 2 of the
3
+ * cross-harness handoff problem; CANON_CROSS_HARNESS_PLAN.md P4/§27r).
4
+ *
5
+ * Three levers:
6
+ * - deriveToolInventory: the OBSERVED tool vocabulary per harness, scanned
7
+ * from the canonical line itself (empirical, not spec-read).
8
+ * - TOOL_CONCEPTS: the cross-harness name-mapping table, seeded from the
9
+ * real four-harness corpus (2026-08-02) — canonical concept → per-harness
10
+ * tool names. Rung 1 is the NAME map; arg-schema morphisms are rung 2.
11
+ * - toolCompatibility: classify a session's tool references against a
12
+ * target harness — the pull-time compatibility report. Key doctrine
13
+ * (§27b): canon stores RESULTS, so comprehension of a foreign session is
14
+ * never capability-bound; only future AGENCY needs mapping/relay.
15
+ *
16
+ * @module canonTools
17
+ */
18
+ import * as fs from 'node:fs';
19
+ import * as path from 'node:path';
20
+ import * as readline from 'node:readline';
21
+ export const HARNESSES = ['claude-code', 'nexus-cortex', 'grok-build', 'gemini-cli'];
22
+ /**
23
+ * Canonical concept → per-harness tool names. Seeded from the observed
24
+ * four-harness corpus plus each CLI's documented surface; extend as the
25
+ * §27n roster lands. A name may map to several concepts' worth of behavior —
26
+ * rung 1 keeps it 1:1 on the dominant sense.
27
+ */
28
+ export const TOOL_CONCEPTS = {
29
+ shell: { 'claude-code': ['Bash'], 'nexus-cortex': ['Bash'], 'grok-build': ['run_terminal_command'], 'gemini-cli': ['run_shell_command'] },
30
+ read_file: { 'claude-code': ['Read'], 'nexus-cortex': ['Read'], 'grok-build': ['read_file'], 'gemini-cli': ['read_file', 'read_many_files'] },
31
+ write_file: { 'claude-code': ['Write'], 'nexus-cortex': ['Write'], 'grok-build': ['write'], 'gemini-cli': ['write_file'] },
32
+ edit_file: { 'claude-code': ['Edit'], 'nexus-cortex': ['Edit'], 'grok-build': ['search_replace'], 'gemini-cli': ['replace'] },
33
+ list_dir: { 'nexus-cortex': ['ListDirectory'], 'grok-build': ['list_dir'], 'gemini-cli': ['list_directory'] },
34
+ glob: { 'claude-code': ['Glob'], 'nexus-cortex': ['Glob'], 'gemini-cli': ['glob'] },
35
+ grep: { 'claude-code': ['Grep'], 'nexus-cortex': ['Grep'], 'grok-build': ['grep'], 'gemini-cli': ['search_file_content'] },
36
+ web_search: { 'claude-code': ['WebSearch'], 'nexus-cortex': ['WebSearch'], 'grok-build': ['web_search'], 'gemini-cli': ['google_web_search'] },
37
+ web_fetch: { 'claude-code': ['WebFetch'], 'nexus-cortex': ['WebFetch'], 'gemini-cli': ['web_fetch'] },
38
+ spawn_agent: { 'claude-code': ['Agent'], 'nexus-cortex': ['Task'], 'gemini-cli': ['invoke_agent'] },
39
+ todo: { 'claude-code': ['TaskCreate', 'TaskUpdate'], 'nexus-cortex': ['TodoWrite', 'TodoCreate', 'TodoUpdate'] },
40
+ plan_mode: { 'claude-code': ['EnterPlanMode', 'ExitPlanMode'], 'gemini-cli': ['enter_plan_mode'] },
41
+ tool_search: { 'claude-code': ['ToolSearch'], 'nexus-cortex': ['SearchTools'] },
42
+ skill: { 'claude-code': ['Skill'], 'nexus-cortex': ['Skill'] },
43
+ };
44
+ /** name (per harness) → concept, inverted from TOOL_CONCEPTS. */
45
+ function nameToConcept() {
46
+ const m = new Map();
47
+ for (const [concept, byHarness] of Object.entries(TOOL_CONCEPTS)) {
48
+ for (const names of Object.values(byHarness))
49
+ for (const n of names)
50
+ m.set(n, concept);
51
+ }
52
+ return m;
53
+ }
54
+ /** Scan the canonical line for observed tool_use names per harness. */
55
+ export async function deriveToolInventory(store) {
56
+ const inv = {};
57
+ const root = path.join(store, 'canon');
58
+ const walk = async (dir, harness) => {
59
+ let es = [];
60
+ try {
61
+ es = fs.readdirSync(dir, { withFileTypes: true });
62
+ }
63
+ catch {
64
+ return;
65
+ }
66
+ for (const e of es) {
67
+ const p = path.join(dir, e.name);
68
+ if (e.isDirectory()) {
69
+ await walk(p, harness ?? (HARNESSES.includes(e.name) ? e.name : undefined));
70
+ continue;
71
+ }
72
+ if (!harness || e.name.endsWith('.events.jsonl') || !/\.jsonl(\.part-\d{4})?$/.test(e.name))
73
+ continue;
74
+ const rl = readline.createInterface({ input: fs.createReadStream(p), crlfDelay: Infinity });
75
+ for await (const line of rl) {
76
+ if (!line.includes('"tool_use"'))
77
+ continue;
78
+ try {
79
+ const r = JSON.parse(line);
80
+ const c = r?.message?.content;
81
+ if (!Array.isArray(c))
82
+ continue;
83
+ for (const b of c)
84
+ if (b?.type === 'tool_use' && b.name)
85
+ ((inv[harness] ??= {})[b.name] = (inv[harness][b.name] ?? 0) + 1);
86
+ }
87
+ catch { /* lint's job */ }
88
+ }
89
+ }
90
+ };
91
+ await walk(root);
92
+ return inv;
93
+ }
94
+ /** Classify one session's tool references against a target harness. */
95
+ export function toolCompatibility(referenced, target) {
96
+ const n2c = nameToConcept();
97
+ const targetNames = new Set();
98
+ for (const byHarness of Object.values(TOOL_CONCEPTS))
99
+ for (const n of byHarness[target] ?? [])
100
+ targetNames.add(n);
101
+ const report = { target, referenced: [...referenced].sort(), mapped: [], native: [], mcp: [], unmapped: [] };
102
+ for (const name of report.referenced) {
103
+ if (name.startsWith('mcp__')) {
104
+ report.mcp.push(name);
105
+ continue;
106
+ }
107
+ if (targetNames.has(name)) {
108
+ report.native.push(name);
109
+ continue;
110
+ }
111
+ const concept = n2c.get(name);
112
+ const tn = concept ? TOOL_CONCEPTS[concept][target] : undefined;
113
+ if (concept && tn?.length)
114
+ report.mapped.push({ name, concept, targetNames: tn });
115
+ else
116
+ report.unmapped.push(name);
117
+ }
118
+ return report;
119
+ }
120
+ /** Extract the tool_use names referenced in one canonical session file. */
121
+ export async function sessionToolNames(file) {
122
+ const names = new Set();
123
+ const rl = readline.createInterface({ input: fs.createReadStream(file), crlfDelay: Infinity });
124
+ for await (const line of rl) {
125
+ if (!line.includes('"tool_use"'))
126
+ continue;
127
+ try {
128
+ const c = JSON.parse(line)?.message?.content;
129
+ if (Array.isArray(c))
130
+ for (const b of c)
131
+ if (b?.type === 'tool_use' && b.name)
132
+ names.add(b.name);
133
+ }
134
+ catch { /* skip */ }
135
+ }
136
+ return [...names].sort();
137
+ }
138
+ /** Render the compatibility report for terminal output. */
139
+ export function renderCompat(r) {
140
+ const lines = [];
141
+ lines.push(`[canon] tool compatibility vs ${r.target}: ${r.referenced.length} referenced — ` +
142
+ `${r.native.length} native, ${r.mapped.length} mapped, ${r.mcp.length} mcp, ${r.unmapped.length} unmapped`);
143
+ for (const m of r.mapped)
144
+ lines.push(` map ${m.name} → ${m.targetNames.join('|')} (${m.concept})`);
145
+ if (r.mcp.length)
146
+ lines.push(` mcp ${r.mcp.join(', ')} — attach the MCP server(s) or relay to origin`);
147
+ if (r.unmapped.length)
148
+ lines.push(` gap ${r.unmapped.join(', ')} — no rung-1 mapping: relay to origin harness or let the model re-express intent`);
149
+ lines.push(` note comprehension is unaffected either way — canon stores tool RESULTS verbatim; only future agency is capability-bound`);
150
+ return lines.join('\n');
151
+ }
152
+ //# sourceMappingURL=canonTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonTools.js","sourceRoot":"","sources":["../src/canonTools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"canonTouched.d.ts","sourceRoot":"","sources":["../src/canonTouched.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,wGAAwG;IACxG,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,iGAAiG;IACjG,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAyBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CA4BrG;AAsCD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3B,OAAO,CAAC,YAAY,CAAC,CAwCvB"}
1
+ {"version":3,"file":"canonTouched.d.ts","sourceRoot":"","sources":["../src/canonTouched.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,wGAAwG;IACxG,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,iGAAiG;IACjG,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAyBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CA4BrG;AAsCD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3B,OAAO,CAAC,YAAY,CAAC,CA6DvB"}
@@ -87,7 +87,7 @@ export function bashCommandPaths(cmd, cwd, out) {
87
87
  for (const m of text.matchAll(new RegExp(String.raw `\b(?:cat|head|tail)\s+(?:-\S+\s+)*` + TOKEN, 'g')))
88
88
  add(m[1]);
89
89
  }
90
- /** Extract touched absolute paths from one canon record. Two tiers:
90
+ /** Extract touched absolute paths from one canon record. Tiers here:
91
91
  * tier 1 — structured tool_use inputs (Read/Edit/Write file_path etc.);
92
92
  * tier 2 — file-history-snapshot trackedFileBackups: the harness's own
93
93
  * checkpoint tracker, which records EVERY mutated file regardless of
@@ -147,9 +147,19 @@ export async function buildTouchedIndex(sessions, opts = {}) {
147
147
  const inferredByRel = new Map();
148
148
  let scanned = 0, cached = 0;
149
149
  for (const s of sessions) {
150
- const sig = 'v3|' + s.parts
150
+ // Sidecar participates in the signature: tier 2b mines file-history-delta
151
+ // events from <session>.events.jsonl, so sidecar changes must invalidate.
152
+ const logicalAbs = s.parts[0].replace(/\.part-\d{4}$/, '');
153
+ const sidecar = logicalAbs.replace(/\.jsonl$/, '.events.jsonl');
154
+ let sidecarSig = '0:0';
155
+ try {
156
+ const st = fs.statSync(sidecar);
157
+ sidecarSig = `${st.size}:${Math.round(st.mtimeMs)}`;
158
+ }
159
+ catch { /* none */ }
160
+ const sig = 'v4|' + s.parts
151
161
  .map((p) => { const st = fs.statSync(p); return `${st.size}:${Math.round(st.mtimeMs)}`; })
152
- .join('|');
162
+ .join('|') + '|' + sidecarSig;
153
163
  const hit = cache[s.rel];
154
164
  if (hit && hit.sig === sig) {
155
165
  byRel.set(s.rel, new Map(Object.entries(hit.files)));
@@ -170,6 +180,24 @@ export async function buildTouchedIndex(sessions, opts = {}) {
170
180
  catch { /* verify's job */ }
171
181
  }
172
182
  }
183
+ // Tier 2b — file-history-delta sidecar events: the harness's per-file
184
+ // change tracker fires for ANY mutation of a tracked file, including
185
+ // Bash/interpreter-body writes tier 3 cannot see. Harness-recorded fact
186
+ // => EXTRACTED-grade; one count per delta event.
187
+ if (fs.existsSync(sidecar)) {
188
+ const rl2 = readline.createInterface({ input: fs.createReadStream(sidecar), crlfDelay: Infinity });
189
+ for await (const line of rl2) {
190
+ if (!line.includes('file-history-delta'))
191
+ continue;
192
+ try {
193
+ const r = JSON.parse(line);
194
+ const p = r?.trackingPath;
195
+ if (typeof p === 'string' && p.startsWith('/'))
196
+ files.set(p, (files.get(p) ?? 0) + 1);
197
+ }
198
+ catch { /* verify's job */ }
199
+ }
200
+ }
173
201
  for (const k of files.keys())
174
202
  inferred.delete(k); // structured evidence wins
175
203
  byRel.set(s.rel, files);
@@ -1 +1 @@
1
- {"version":3,"file":"canonTouched.js","sourceRoot":"","sources":["../src/canonTouched.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonTouched.js","sourceRoot":"","sources":["../src/canonTouched.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA4BA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAuClF"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA8BA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAiDlF"}
package/dist/cli.js CHANGED
@@ -8,6 +8,7 @@ import { canonGraph } from './canonGraph.js';
8
8
  import { canonInit } from './canonInit.js';
9
9
  import { canonList, canonPull } from './canonPull.js';
10
10
  import { canonSync } from './canonSync.js';
11
+ import { deriveToolInventory, TOOL_CONCEPTS } from './canonTools.js';
11
12
  import { canonTranslate } from './canonTranslate.js';
12
13
  const USAGE = `nexus-canon — portable agent memory in a git repo you own
13
14
 
@@ -20,6 +21,7 @@ Verbs:
20
21
  list [--all] [--project N/A] [--store <dir>] list canon sessions
21
22
  pull <uuid> [--to <dir>] [--force] [--store <dir>] materialize a session
22
23
  artifacts [--dry-run] [--store <dir>] capture capability artifacts
24
+ tools [--store <dir>] [--json] observed tool inventory + cross-harness concept map
23
25
  graph [--project <id>] [--merge-graph <path>] [--dry-run] [--store <dir>]
24
26
 
25
27
  Default store: /tmp/canon-store (override with --store or CANON_REPO env for the remote).
@@ -57,6 +59,19 @@ export async function main(argv = process.argv.slice(2)) {
57
59
  const r = await canonPull({ session: positional, to: opt('--to'), force: flag('--force'), store: opt('--store') });
58
60
  return r.code;
59
61
  }
62
+ case 'tools': {
63
+ const inv = await deriveToolInventory(opt('--store') ?? '/tmp/canon-store');
64
+ if (flag('--json')) {
65
+ console.log(JSON.stringify({ inventory: inv, concepts: TOOL_CONCEPTS }, null, 2));
66
+ return 0;
67
+ }
68
+ for (const [h, tools] of Object.entries(inv)) {
69
+ const top = Object.entries(tools).sort((a, b) => b[1] - a[1]);
70
+ console.log(`${h} (${top.length} distinct): ${top.slice(0, 12).map(([n, c]) => `${n}:${c}`).join(', ')}`);
71
+ }
72
+ console.log(`concepts mapped: ${Object.keys(TOOL_CONCEPTS).length} (see TOOL_CONCEPTS via --json)`);
73
+ return 0;
74
+ }
60
75
  case 'artifacts':
61
76
  await canonArtifacts({ dryRun: flag('--dry-run'), store: opt('--store') });
62
77
  return 0;
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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"}
package/dist/index.d.ts CHANGED
@@ -27,4 +27,6 @@ export type { CanonGraphOptions, CanonGraphResult, ProjectEntry } from './canonG
27
27
  export { CANON_VERIFY_MJS, GITATTRIBUTES, STORE_DIRS, STORE_README, VERIFY_YML } from './scaffoldAssets.js';
28
28
  export { buildTouchedIndex } from './canonTouched.js';
29
29
  export type { TouchedIndex } from './canonTouched.js';
30
+ export { deriveToolInventory, toolCompatibility, sessionToolNames, renderCompat, TOOL_CONCEPTS, HARNESSES } from './canonTools.js';
31
+ export type { ToolInventory, ToolCompatReport, HarnessName } from './canonTools.js';
30
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtF,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtF,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnI,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -20,4 +20,5 @@ export { canonArtifacts } from './canonArtifacts.js';
20
20
  export { canonGraph, deriveProjectSessionMap, sessionProject } from './canonGraph.js';
21
21
  export { CANON_VERIFY_MJS, GITATTRIBUTES, STORE_DIRS, STORE_README, VERIFY_YML } from './scaffoldAssets.js';
22
22
  export { buildTouchedIndex } from './canonTouched.js';
23
+ export { deriveToolInventory, toolCompatibility, sessionToolNames, renderCompat, TOOL_CONCEPTS, HARNESSES } from './canonTools.js';
23
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -14,7 +14,7 @@ export declare const VERIFY_YML = "# canon-verify \u2014 Phase A4 trust layer (C
14
14
  /** .github/scripts/canon-verify.mjs — dependency-free verification lint. */
15
15
  export declare const CANON_VERIFY_MJS = "/**\n * canon-verify \u2014 Phase A4 trust layer (CANON_CROSS_HARNESS_PLAN.md 27e).\n *\n * Verifies ONLY the files changed in a push/PR range. Four checks:\n * 1. JSONL integrity \u2014 every line of every changed *.jsonl / *.jsonl.part-NNNN\n * parses as JSON (parts are split at line boundaries by construction).\n * 2. Canon schema \u2014 records in /canon (excluding *.events.jsonl sidecars)\n * carry uuid, timestamp, type, provenance.\n * 3. Secret scan \u2014 the same pattern set the sync scrub applies (minus blanket\n * hex64); any hit here means content bypassed the scrub choke-point.\n * 4. Projection refs \u2014 every changed *.ref resolves to an existing canon file\n * (single form or .part-0000 chunked form).\n *\n * Failures are grouped, annotated (::error), and fatal \u2014 never silent (D8).\n * Staging form: graduates to the published library (`cortex canon verify`)\n * at Phase C; keep this dependency-free (bare node:*, no npm install).\n *\n * Usage: node canon-verify.mjs <baseRef> <headRef>\n */\nimport { execFileSync } from 'node:child_process';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nconst [base, head] = process.argv.slice(2);\nif (!base || !head) { console.error('usage: canon-verify.mjs <base> <head>'); process.exit(2); }\n\nconst git = (a) => execFileSync('git', a, { encoding: 'utf8', maxBuffer: 256 * 1024 * 1024 });\n\nconst SECRET_PATTERNS = [\n ['sk', /sk-[A-Za-z0-9_-]{16,}/],\n ['ghp', /ghp_[A-Za-z0-9]{20,}/],\n ['ghpat', /github_pat_[A-Za-z0-9_]{20,}/],\n ['ghu', /ghu_[A-Za-z0-9]{20,}/],\n ['ghs', /ghs_[A-Za-z0-9]{20,}/],\n ['hf', /hf_[A-Za-z0-9]{20,}/],\n ['aiza', /AIza[A-Za-z0-9_-]{20,}/],\n ['xai', /xai-[A-Za-z0-9]{20,}/],\n ['nar', /nar_[A-Za-z0-9]{16,}/],\n ['gsk', /gsk_[A-Za-z0-9]{20,}/],\n ['slack', /xox[bpars]-[A-Za-z0-9-]{10,}/],\n ['akia', /AKIA[A-Z0-9]{16}/],\n ['jwt', /eyJ[A-Za-z0-9_-]{20,}\\.eyJ[A-Za-z0-9_-]{20,}\\.[A-Za-z0-9_-]{10,}/],\n];\n\nconst changed = git(['diff', '--name-only', '--diff-filter=ACMR', base, head])\n .split('\\n').map((s) => s.trim()).filter(Boolean);\n\nconst isJsonl = (f) => /\\.jsonl(\\.part-\\d{4})?$/.test(f);\nconst isCanonRecordFile = (f) => f.startsWith('canon/') && isJsonl(f) && !/\\.events\\.jsonl$/.test(f);\nconst isRef = (f) => f.endsWith('.ref');\n\nconst failures = [];\nconst fail = (file, msg) => {\n failures.push(`${file} \u2014 ${msg}`);\n console.log(`::error file=${file}::${msg}`);\n};\n\nlet checkedFiles = 0, checkedLines = 0;\nfor (const f of changed) {\n if (!fs.existsSync(f)) continue; // renamed-away edge\n const isText = isJsonl(f) || isRef(f) || f.endsWith('.md') || f.endsWith('.json');\n if (!isText) continue;\n const content = fs.readFileSync(f, 'utf8');\n checkedFiles++;\n\n // 3. secret scan (report pattern label only \u2014 NEVER echo the match)\n for (const [label, re] of SECRET_PATTERNS) {\n if (re.test(content)) fail(f, `secret-pattern hit (${label}) \u2014 content bypassed the sync scrub`);\n }\n\n // 1 + 2. JSONL parse + canon schema + tool-pairing invariants.\n // Pairing (Phase B lesson \u2014 defects here surface as provider 400s at resume\n // time): every tool_result must follow a seen tool_use (orphans are the\n // translator's job to repair), and only TAIL tool_use may go unanswered\n // (live session snapshotted mid-call). Pairing is skipped on .part-NNNN\n // chunks \u2014 pairs legitimately span part boundaries.\n if (isJsonl(f)) {\n const schema = isCanonRecordFile(f);\n const checkPairs = schema && !/\\.part-\\d{4}$/.test(f);\n const uses = new Map(); // id -> line of tool_use\n const answered = new Set();\n const uuids = new Set();\n let lastRecordLine = 0;\n let n = 0;\n for (const line of content.split('\\n')) {\n n++;\n if (!line.trim()) continue;\n checkedLines++;\n let rec;\n try { rec = JSON.parse(line); }\n catch { fail(f, `line ${n}: unparseable JSON`); continue; }\n if (schema) {\n for (const field of ['uuid', 'timestamp', 'type', 'provenance']) {\n if (rec[field] === undefined) fail(f, `line ${n}: canon record missing '${field}'`);\n }\n }\n if (checkPairs) {\n lastRecordLine = n;\n // Chain integrity: parentUuid must resolve within the canonical line\n // (append-only \u21D2 parents precede children). A dangling parent means a\n // sidecarred/dropped record broke the chain \u2014 Claude Code's renderer\n // silently EXCLUDES everything upstream of a break (a3.10 lesson: a\n // 555KB doc vanished from rendered context).\n if (rec.uuid) uuids.add(rec.uuid);\n if (typeof rec.parentUuid === 'string' && !uuids.has(rec.parentUuid)) {\n fail(f, `line ${n}: parentUuid ${rec.parentUuid} not found earlier in file \u2014 chain break (renderer will drop upstream context)`);\n }\n const blocks = Array.isArray(rec.message?.content) ? rec.message.content : [];\n for (const b of blocks) {\n if (b?.type === 'tool_use' && b.id) uses.set(b.id, n);\n if (b?.type === 'tool_result' && b.tool_use_id) {\n if (!uses.has(b.tool_use_id)) fail(f, `line ${n}: orphan tool_result (${b.tool_use_id}) \u2014 no prior tool_use; translator repair missing`);\n answered.add(b.tool_use_id);\n }\n }\n }\n }\n if (checkPairs) {\n for (const [id, line] of uses) {\n if (!answered.has(id) && lastRecordLine - line > 3) {\n fail(f, `line ${line}: unanswered tool_use (${id}) mid-file \u2014 only tail in-flight calls may dangle`);\n }\n }\n }\n }\n\n // 5. artifact-manifest schema (canon/artifacts/**.json \u2014 \u00A727p second record kind)\n if (/^canon\\/artifacts\\/.+\\.json$/.test(f) && !f.endsWith('ARTIFACTS.md')) {\n try {\n const rec = JSON.parse(content);\n for (const field of ['recordKind', 'kind', 'id', 'version', 'timestamp', 'primary', 'content', 'provenance']) {\n if (rec[field] === undefined) fail(f, `artifact manifest missing '${field}'`);\n }\n if (rec.recordKind !== 'artifact-manifest') fail(f, `recordKind must be 'artifact-manifest'`);\n if (!Array.isArray(rec.content) || rec.content.some((c) => !c.path || !c.ref)) fail(f, 'content entries need path+ref');\n } catch { fail(f, 'artifact manifest: unparseable JSON'); }\n }\n\n // 4. projection refs resolve\n if (isRef(f)) {\n const target = content.trim();\n if (!target || target.includes('\\n')) fail(f, 'ref must be a single store-relative path');\n else if (!fs.existsSync(target) && !fs.existsSync(`${target}.part-0000`)) {\n fail(f, `ref target not found: ${target}`);\n }\n }\n}\n\nif (failures.length) {\n console.log(`[FAIL] canon-verify: ${failures.length} problem(s) in ${checkedFiles} changed file(s)`);\n process.exit(1);\n}\nconsole.log(`[OK] canon-verify: ${checkedFiles} changed file(s), ${checkedLines} record line(s), 0 problems`);\n";
16
16
  /** README.md — layout, CI, token-scoping, and privacy guidance. */
17
- export declare const STORE_README = "# Canon store\n\nYour agent memory, in a git repo you own. Scaffolded by `cortex canon init`.\n\nThis repository is a **canonical agent history & memory store** (canon): sessions,\nmemory, plans, and capability artifacts from any harness, stored once in a\nprovider-neutral format and translated per consumer at the edges. Spec:\n[docs/CANON.md](https://github.com/Spitfire-Products/nexus-cortex/blob/main/docs/CANON.md)\nin the nexus-cortex repository.\n\n## Layout\n\n| Path | Owner | Carries |\n|---|---|---|\n| `/native/<harness>/` | agents | each harness's own session dialect, verbatim (the only path an agent writes) |\n| `/canon/` | tooling | the canonical line \u2014 translated, append-only, provenance-anchored |\n| `/projections/<harness>/` | tooling | canon fanned back out into each harness's dialect |\n| `/memory/` | agents | distilled memory files (index + detail) |\n| `/plans/`, `/projects/` | agents | plan docs + task state, project manifests \u2014 the intent layer |\n| `/skills/`, `/agents/`, `/mcp/`, `/plugins/` | agents | capability artifacts (harness-contract layer) |\n\n`*.jsonl` files use `merge=union` (see `.gitattributes`) so append-only concurrent\nappends auto-merge.\n\n## CI\n\n`.github/workflows/canon-verify.yml` lints changed files on every push/PR:\nJSONL integrity, canon record schema, tool-pairing/chain invariants, secret-pattern\nscan, projection-ref resolution. It never writes to the repo. Failures are grouped\nand fatal \u2014 never silent.\n\n## Access tokens\n\nPrefer a **fine-grained personal access token scoped to this single repository**\n(Contents: read/write). Never a classic all-repo token. If a workflow file itself\nmust be pushed, the pushing credential needs the `workflow` scope \u2014 grant it\ntemporarily, then revoke.\n\n## Privacy\n\nThis store may contain your working history. Keep the repository **private** by\ndefault. Scrub secrets before push (the CI secret scan is a tripwire, not the\nscrubber). `git clone --mirror` exits with your full history at any time \u2014 no\ntool or vendor holds it hostage.\n";
17
+ export declare const STORE_README = "# Canon store\n\nYour agent memory, in a git repo you own. Scaffolded by `cortex canon init`.\n\nThis repository is a **canonical agent history & memory store** (canon): sessions,\nmemory, plans, and capability artifacts from any harness, stored once in a\nprovider-neutral format and translated per consumer at the edges. Spec:\n[docs/CANON.md](https://github.com/Spitfire-Products/nexus-cortex/blob/main/docs/CANON.md)\nin the nexus-cortex repository.\n\n## Layout\n\n| Path | Owner | Carries |\n|---|---|---|\n| `/native/<harness>/` | agents | each harness's own session dialect, verbatim (the only path an agent writes) |\n| `/canon/` | tooling | the canonical line \u2014 translated, append-only, provenance-anchored |\n| `/projections/<harness>/` | tooling | canon fanned back out into each harness's dialect |\n| `/memory/` | agents | distilled memory files (index + detail) |\n| `/plans/`, `/projects/` | agents | plan docs + task state, project manifests \u2014 the intent layer |\n| `/skills/`, `/agents/`, `/mcp/`, `/plugins/` | agents | capability artifacts (harness-contract layer) |\n\n`*.jsonl` files use `merge=union` (see `.gitattributes`) so append-only concurrent\nappends auto-merge.\n\n## CI\n\n`.github/workflows/canon-verify.yml` lints changed files on every push/PR:\nJSONL integrity, canon record schema, tool-pairing/chain invariants, secret-pattern\nscan, projection-ref resolution. It never writes to the repo. Failures are grouped\nand fatal \u2014 never silent.\n\n\n## Configuration (the levers)\n\n| File | Controls |\n|---|---|\n| `HARNESSES.json` (store root) | Which harnesses `canon sync` captures: `{ \"harnesses\": { \"<label>\": { \"exts\": [\".jsonl\"], \"roots\": [\"~/.tool/sessions\"] } } }` \u2014 adding a harness is config, not code |\n| `projects/ROOTS.json` | Project-map overrides for `canon list --project` / `canon graph`: `roots` (id \u2192 absolute path), `claudeDirs`, `cortexLabels`. Derivation from `$HOME` + the filesystem covers common cases; override dash-ambiguous paths, other machines' sessions, or sub-root labels |\n\n## Derived artifacts (regenerable, never source of truth)\n\n- `/projects/<id>.json` \u2014 derived project \u2194 session map\n- `/projects/<id>/graph.json` \u2014 project knowledge graph (NetworkX node-link;\n history half = sessions/artifacts/touched edges; code half auto-folded from\n `<project-root>/graphify-out/graph.json` when present; every edge\n confidence-tagged). Rebuild anytime: `cortex canon graph` / `nexus-canon graph`\n- `/canon/artifacts/` \u2014 ArtifactManifest records for skills/agents/mcp/plugins/plans/projects\n\nFull CLI reference: `cortex canon --help` (or `nexus-canon` standalone) and the\nCANON.md spec + HARNESS_ONBOARDING.md protocol in the nexus-cortex repository.\n\n## Access tokens\n\nPrefer a **fine-grained personal access token scoped to this single repository**\n(Contents: read/write). Never a classic all-repo token. If a workflow file itself\nmust be pushed, the pushing credential needs the `workflow` scope \u2014 grant it\ntemporarily, then revoke.\n\n## Privacy\n\nThis store may contain your working history. Keep the repository **private** by\ndefault. Scrub secrets before push (the CI secret scan is a tripwire, not the\nscrubber). `git clone --mirror` exits with your full history at any time \u2014 no\ntool or vendor holds it hostage.\n";
18
18
  /** Directory taxonomy: session dimension + intent layer + artifact dimension. */
19
19
  export declare const STORE_DIRS: readonly ["native", "canon", "projections", "memory", "plans", "projects", "skills", "agents", "mcp", "plugins"];
20
20
  //# sourceMappingURL=scaffoldAssets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffoldAssets.d.ts","sourceRoot":"","sources":["../src/scaffoldAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,eAAO,MAAM,aAAa,0BAA0B,CAAC;AAErD,6EAA6E;AAC7E,eAAO,MAAM,UAAU,4yEAAkyE,CAAC;AAE1zE,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,+3NAAqyN,CAAC;AAEn0N,mEAAmE;AACnE,eAAO,MAAM,YAAY,yiEAAghE,CAAC;AAE1iE,iFAAiF;AACjF,eAAO,MAAM,UAAU,kHAWb,CAAC"}
1
+ {"version":3,"file":"scaffoldAssets.d.ts","sourceRoot":"","sources":["../src/scaffoldAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,eAAO,MAAM,aAAa,0BAA0B,CAAC;AAErD,6EAA6E;AAC7E,eAAO,MAAM,UAAU,4yEAAkyE,CAAC;AAE1zE,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,+3NAAqyN,CAAC;AAEn0N,mEAAmE;AACnE,eAAO,MAAM,YAAY,uzGAAuzG,CAAC;AAEj1G,iFAAiF;AACjF,eAAO,MAAM,UAAU,kHAWb,CAAC"}
@@ -14,7 +14,7 @@ export const VERIFY_YML = "# canon-verify — Phase A4 trust layer (CANON_CROSS_
14
14
  /** .github/scripts/canon-verify.mjs — dependency-free verification lint. */
15
15
  export const CANON_VERIFY_MJS = "/**\n * canon-verify — Phase A4 trust layer (CANON_CROSS_HARNESS_PLAN.md 27e).\n *\n * Verifies ONLY the files changed in a push/PR range. Four checks:\n * 1. JSONL integrity — every line of every changed *.jsonl / *.jsonl.part-NNNN\n * parses as JSON (parts are split at line boundaries by construction).\n * 2. Canon schema — records in /canon (excluding *.events.jsonl sidecars)\n * carry uuid, timestamp, type, provenance.\n * 3. Secret scan — the same pattern set the sync scrub applies (minus blanket\n * hex64); any hit here means content bypassed the scrub choke-point.\n * 4. Projection refs — every changed *.ref resolves to an existing canon file\n * (single form or .part-0000 chunked form).\n *\n * Failures are grouped, annotated (::error), and fatal — never silent (D8).\n * Staging form: graduates to the published library (`cortex canon verify`)\n * at Phase C; keep this dependency-free (bare node:*, no npm install).\n *\n * Usage: node canon-verify.mjs <baseRef> <headRef>\n */\nimport { execFileSync } from 'node:child_process';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nconst [base, head] = process.argv.slice(2);\nif (!base || !head) { console.error('usage: canon-verify.mjs <base> <head>'); process.exit(2); }\n\nconst git = (a) => execFileSync('git', a, { encoding: 'utf8', maxBuffer: 256 * 1024 * 1024 });\n\nconst SECRET_PATTERNS = [\n ['sk', /sk-[A-Za-z0-9_-]{16,}/],\n ['ghp', /ghp_[A-Za-z0-9]{20,}/],\n ['ghpat', /github_pat_[A-Za-z0-9_]{20,}/],\n ['ghu', /ghu_[A-Za-z0-9]{20,}/],\n ['ghs', /ghs_[A-Za-z0-9]{20,}/],\n ['hf', /hf_[A-Za-z0-9]{20,}/],\n ['aiza', /AIza[A-Za-z0-9_-]{20,}/],\n ['xai', /xai-[A-Za-z0-9]{20,}/],\n ['nar', /nar_[A-Za-z0-9]{16,}/],\n ['gsk', /gsk_[A-Za-z0-9]{20,}/],\n ['slack', /xox[bpars]-[A-Za-z0-9-]{10,}/],\n ['akia', /AKIA[A-Z0-9]{16}/],\n ['jwt', /eyJ[A-Za-z0-9_-]{20,}\\.eyJ[A-Za-z0-9_-]{20,}\\.[A-Za-z0-9_-]{10,}/],\n];\n\nconst changed = git(['diff', '--name-only', '--diff-filter=ACMR', base, head])\n .split('\\n').map((s) => s.trim()).filter(Boolean);\n\nconst isJsonl = (f) => /\\.jsonl(\\.part-\\d{4})?$/.test(f);\nconst isCanonRecordFile = (f) => f.startsWith('canon/') && isJsonl(f) && !/\\.events\\.jsonl$/.test(f);\nconst isRef = (f) => f.endsWith('.ref');\n\nconst failures = [];\nconst fail = (file, msg) => {\n failures.push(`${file} — ${msg}`);\n console.log(`::error file=${file}::${msg}`);\n};\n\nlet checkedFiles = 0, checkedLines = 0;\nfor (const f of changed) {\n if (!fs.existsSync(f)) continue; // renamed-away edge\n const isText = isJsonl(f) || isRef(f) || f.endsWith('.md') || f.endsWith('.json');\n if (!isText) continue;\n const content = fs.readFileSync(f, 'utf8');\n checkedFiles++;\n\n // 3. secret scan (report pattern label only — NEVER echo the match)\n for (const [label, re] of SECRET_PATTERNS) {\n if (re.test(content)) fail(f, `secret-pattern hit (${label}) — content bypassed the sync scrub`);\n }\n\n // 1 + 2. JSONL parse + canon schema + tool-pairing invariants.\n // Pairing (Phase B lesson — defects here surface as provider 400s at resume\n // time): every tool_result must follow a seen tool_use (orphans are the\n // translator's job to repair), and only TAIL tool_use may go unanswered\n // (live session snapshotted mid-call). Pairing is skipped on .part-NNNN\n // chunks — pairs legitimately span part boundaries.\n if (isJsonl(f)) {\n const schema = isCanonRecordFile(f);\n const checkPairs = schema && !/\\.part-\\d{4}$/.test(f);\n const uses = new Map(); // id -> line of tool_use\n const answered = new Set();\n const uuids = new Set();\n let lastRecordLine = 0;\n let n = 0;\n for (const line of content.split('\\n')) {\n n++;\n if (!line.trim()) continue;\n checkedLines++;\n let rec;\n try { rec = JSON.parse(line); }\n catch { fail(f, `line ${n}: unparseable JSON`); continue; }\n if (schema) {\n for (const field of ['uuid', 'timestamp', 'type', 'provenance']) {\n if (rec[field] === undefined) fail(f, `line ${n}: canon record missing '${field}'`);\n }\n }\n if (checkPairs) {\n lastRecordLine = n;\n // Chain integrity: parentUuid must resolve within the canonical line\n // (append-only ⇒ parents precede children). A dangling parent means a\n // sidecarred/dropped record broke the chain — Claude Code's renderer\n // silently EXCLUDES everything upstream of a break (a3.10 lesson: a\n // 555KB doc vanished from rendered context).\n if (rec.uuid) uuids.add(rec.uuid);\n if (typeof rec.parentUuid === 'string' && !uuids.has(rec.parentUuid)) {\n fail(f, `line ${n}: parentUuid ${rec.parentUuid} not found earlier in file — chain break (renderer will drop upstream context)`);\n }\n const blocks = Array.isArray(rec.message?.content) ? rec.message.content : [];\n for (const b of blocks) {\n if (b?.type === 'tool_use' && b.id) uses.set(b.id, n);\n if (b?.type === 'tool_result' && b.tool_use_id) {\n if (!uses.has(b.tool_use_id)) fail(f, `line ${n}: orphan tool_result (${b.tool_use_id}) — no prior tool_use; translator repair missing`);\n answered.add(b.tool_use_id);\n }\n }\n }\n }\n if (checkPairs) {\n for (const [id, line] of uses) {\n if (!answered.has(id) && lastRecordLine - line > 3) {\n fail(f, `line ${line}: unanswered tool_use (${id}) mid-file — only tail in-flight calls may dangle`);\n }\n }\n }\n }\n\n // 5. artifact-manifest schema (canon/artifacts/**.json — §27p second record kind)\n if (/^canon\\/artifacts\\/.+\\.json$/.test(f) && !f.endsWith('ARTIFACTS.md')) {\n try {\n const rec = JSON.parse(content);\n for (const field of ['recordKind', 'kind', 'id', 'version', 'timestamp', 'primary', 'content', 'provenance']) {\n if (rec[field] === undefined) fail(f, `artifact manifest missing '${field}'`);\n }\n if (rec.recordKind !== 'artifact-manifest') fail(f, `recordKind must be 'artifact-manifest'`);\n if (!Array.isArray(rec.content) || rec.content.some((c) => !c.path || !c.ref)) fail(f, 'content entries need path+ref');\n } catch { fail(f, 'artifact manifest: unparseable JSON'); }\n }\n\n // 4. projection refs resolve\n if (isRef(f)) {\n const target = content.trim();\n if (!target || target.includes('\\n')) fail(f, 'ref must be a single store-relative path');\n else if (!fs.existsSync(target) && !fs.existsSync(`${target}.part-0000`)) {\n fail(f, `ref target not found: ${target}`);\n }\n }\n}\n\nif (failures.length) {\n console.log(`[FAIL] canon-verify: ${failures.length} problem(s) in ${checkedFiles} changed file(s)`);\n process.exit(1);\n}\nconsole.log(`[OK] canon-verify: ${checkedFiles} changed file(s), ${checkedLines} record line(s), 0 problems`);\n";
16
16
  /** README.md — layout, CI, token-scoping, and privacy guidance. */
17
- export const STORE_README = "# Canon store\n\nYour agent memory, in a git repo you own. Scaffolded by `cortex canon init`.\n\nThis repository is a **canonical agent history & memory store** (canon): sessions,\nmemory, plans, and capability artifacts from any harness, stored once in a\nprovider-neutral format and translated per consumer at the edges. Spec:\n[docs/CANON.md](https://github.com/Spitfire-Products/nexus-cortex/blob/main/docs/CANON.md)\nin the nexus-cortex repository.\n\n## Layout\n\n| Path | Owner | Carries |\n|---|---|---|\n| `/native/<harness>/` | agents | each harness's own session dialect, verbatim (the only path an agent writes) |\n| `/canon/` | tooling | the canonical line translated, append-only, provenance-anchored |\n| `/projections/<harness>/` | tooling | canon fanned back out into each harness's dialect |\n| `/memory/` | agents | distilled memory files (index + detail) |\n| `/plans/`, `/projects/` | agents | plan docs + task state, project manifests the intent layer |\n| `/skills/`, `/agents/`, `/mcp/`, `/plugins/` | agents | capability artifacts (harness-contract layer) |\n\n`*.jsonl` files use `merge=union` (see `.gitattributes`) so append-only concurrent\nappends auto-merge.\n\n## CI\n\n`.github/workflows/canon-verify.yml` lints changed files on every push/PR:\nJSONL integrity, canon record schema, tool-pairing/chain invariants, secret-pattern\nscan, projection-ref resolution. It never writes to the repo. Failures are grouped\nand fatal never silent.\n\n## Access tokens\n\nPrefer a **fine-grained personal access token scoped to this single repository**\n(Contents: read/write). Never a classic all-repo token. If a workflow file itself\nmust be pushed, the pushing credential needs the `workflow` scope grant it\ntemporarily, then revoke.\n\n## Privacy\n\nThis store may contain your working history. Keep the repository **private** by\ndefault. Scrub secrets before push (the CI secret scan is a tripwire, not the\nscrubber). `git clone --mirror` exits with your full history at any time no\ntool or vendor holds it hostage.\n";
17
+ export const STORE_README = "# Canon store\n\nYour agent memory, in a git repo you own. Scaffolded by `cortex canon init`.\n\nThis repository is a **canonical agent history & memory store** (canon): sessions,\nmemory, plans, and capability artifacts from any harness, stored once in a\nprovider-neutral format and translated per consumer at the edges. Spec:\n[docs/CANON.md](https://github.com/Spitfire-Products/nexus-cortex/blob/main/docs/CANON.md)\nin the nexus-cortex repository.\n\n## Layout\n\n| Path | Owner | Carries |\n|---|---|---|\n| `/native/<harness>/` | agents | each harness's own session dialect, verbatim (the only path an agent writes) |\n| `/canon/` | tooling | the canonical line \u2014 translated, append-only, provenance-anchored |\n| `/projections/<harness>/` | tooling | canon fanned back out into each harness's dialect |\n| `/memory/` | agents | distilled memory files (index + detail) |\n| `/plans/`, `/projects/` | agents | plan docs + task state, project manifests \u2014 the intent layer |\n| `/skills/`, `/agents/`, `/mcp/`, `/plugins/` | agents | capability artifacts (harness-contract layer) |\n\n`*.jsonl` files use `merge=union` (see `.gitattributes`) so append-only concurrent\nappends auto-merge.\n\n## CI\n\n`.github/workflows/canon-verify.yml` lints changed files on every push/PR:\nJSONL integrity, canon record schema, tool-pairing/chain invariants, secret-pattern\nscan, projection-ref resolution. It never writes to the repo. Failures are grouped\nand fatal \u2014 never silent.\n\n\n## Configuration (the levers)\n\n| File | Controls |\n|---|---|\n| `HARNESSES.json` (store root) | Which harnesses `canon sync` captures: `{ \"harnesses\": { \"<label>\": { \"exts\": [\".jsonl\"], \"roots\": [\"~/.tool/sessions\"] } } }` \u2014 adding a harness is config, not code |\n| `projects/ROOTS.json` | Project-map overrides for `canon list --project` / `canon graph`: `roots` (id \u2192 absolute path), `claudeDirs`, `cortexLabels`. Derivation from `$HOME` + the filesystem covers common cases; override dash-ambiguous paths, other machines' sessions, or sub-root labels |\n\n## Derived artifacts (regenerable, never source of truth)\n\n- `/projects/<id>.json` \u2014 derived project \u2194 session map\n- `/projects/<id>/graph.json` \u2014 project knowledge graph (NetworkX node-link;\n history half = sessions/artifacts/touched edges; code half auto-folded from\n `<project-root>/graphify-out/graph.json` when present; every edge\n confidence-tagged). Rebuild anytime: `cortex canon graph` / `nexus-canon graph`\n- `/canon/artifacts/` \u2014 ArtifactManifest records for skills/agents/mcp/plugins/plans/projects\n\nFull CLI reference: `cortex canon --help` (or `nexus-canon` standalone) and the\nCANON.md spec + HARNESS_ONBOARDING.md protocol in the nexus-cortex repository.\n\n## Access tokens\n\nPrefer a **fine-grained personal access token scoped to this single repository**\n(Contents: read/write). Never a classic all-repo token. If a workflow file itself\nmust be pushed, the pushing credential needs the `workflow` scope \u2014 grant it\ntemporarily, then revoke.\n\n## Privacy\n\nThis store may contain your working history. Keep the repository **private** by\ndefault. Scrub secrets before push (the CI secret scan is a tripwire, not the\nscrubber). `git clone --mirror` exits with your full history at any time \u2014 no\ntool or vendor holds it hostage.\n";
18
18
  /** Directory taxonomy: session dimension + intent layer + artifact dimension. */
19
19
  export const STORE_DIRS = [
20
20
  'native',
@@ -1 +1 @@
1
- {"version":3,"file":"scaffoldAssets.js","sourceRoot":"","sources":["../src/scaffoldAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAErD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,+xEAA+xE,CAAC;AAE1zE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,kyNAAkyN,CAAC;AAEn0N,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,6gEAA6gE,CAAC;AAE1iE,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ;IACR,OAAO;IACP,aAAa;IACb,QAAQ;IACR,OAAO;IACP,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,SAAS;CACD,CAAC"}
1
+ {"version":3,"file":"scaffoldAssets.js","sourceRoot":"","sources":["../src/scaffoldAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAErD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,+xEAA+xE,CAAC;AAE1zE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,kyNAAkyN,CAAC;AAEn0N,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,ozGAAozG,CAAC;AAEj1G,iFAAiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ;IACR,OAAO;IACP,aAAa;IACb,QAAQ;IACR,OAAO;IACP,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,SAAS;CACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexus-canon",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Portable agent memory in a git repo you own — the canonical agent history & memory store (canon): sync, translate, pull, capability artifacts, and project knowledge graphs across AI coding harnesses.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,7 +19,7 @@
19
19
  "test": "vitest run --passWithNoTests"
20
20
  },
21
21
  "dependencies": {
22
- "@nexus-cortex/types": "^4.55.0"
22
+ "@nexus-cortex/types": "^4.55.1"
23
23
  },
24
24
  "files": [
25
25
  "dist",