@nexus-cortex/core 4.54.0 → 4.55.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,38 +0,0 @@
1
- export interface CanonStoreOptions {
2
- /** Canon store working clone (default /tmp/canon-store — off-quota; auto-cloned). */
3
- store?: string;
4
- /** Store remote for the auto-clone (default env CANON_REPO or the canonical repo). */
5
- repoUrl?: string;
6
- }
7
- export interface CanonSession {
8
- uuid: string;
9
- rel: string;
10
- parts: string[];
11
- bytes: number;
12
- harness: string;
13
- title?: string;
14
- }
15
- export interface CanonPullOptions extends CanonStoreOptions {
16
- /** Session uuid (or unique prefix) to materialize. */
17
- session: string;
18
- /** Destination directory (default {home}/omniclaude-v4/.cortex/sessions). */
19
- to?: string;
20
- /** Overwrite an existing local session file (default false — pull is a branch, never a clobber). */
21
- force?: boolean;
22
- home?: string;
23
- }
24
- export interface CanonPullResult {
25
- /** 0 = materialized; 1 = not found / ambiguous / exists-without-force. */
26
- code: 0 | 1;
27
- dest?: string;
28
- session?: CanonSession;
29
- }
30
- /** Discover canon sessions (part-aware; titles recovered from event sidecars). */
31
- export declare function discoverCanonSessions(store: string): CanonSession[];
32
- /** List canon sessions (prints rows; returns them). `all` includes <4KB sessions. */
33
- export declare function canonList(o?: CanonStoreOptions & {
34
- all?: boolean;
35
- }): Promise<CanonSession[]>;
36
- /** Materialize one canon session into a native session directory. */
37
- export declare function canonPull(o: CanonPullOptions): Promise<CanonPullResult>;
38
- //# sourceMappingURL=canonPull.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canonPull.d.ts","sourceRoot":"","sources":["../../src/canon/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,CAoCnE;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,133 +0,0 @@
1
- /**
2
- * canonPull — the canon rehydration leg, graduated from
3
- * `scripts/canon/canon-pull.ts` (Phase C part 2; the script is now a thin
4
- * wrapper over this module).
5
- *
6
- * Materializes a canon session into the RECEIVING harness's native session
7
- * directory, where that harness's own resume UI already looks — no proxy
8
- * layer, the filesystem is the interface. For nexus-cortex the projection is
9
- * identity (canon IS the cortex dialect): pull = freshen store + reassemble
10
- * parts + copy. Pull refuses to overwrite an existing local session unless
11
- * forced — resuming elsewhere is a BRANCH of the canonical line, never a
12
- * clobber. Discovery/materialization bodies transplanted from the proven
13
- * script; exit codes become return codes for library use.
14
- *
15
- * @module canon/canonPull
16
- */
17
- import * as fs from 'node:fs';
18
- import * as path from 'node:path';
19
- import { execFileSync } from 'node:child_process';
20
- /** Clone the store if absent, else pull — rehydrate freshness on arrival. */
21
- function ensureFreshStore(store, repoUrl, label = 'canon-pull') {
22
- const repo = repoUrl ?? process.env.CANON_REPO ?? 'https://github.com/Spitfire-Products/nexus-canon-store';
23
- const env = { ...process.env, GIT_TERMINAL_PROMPT: '0' };
24
- if (!fs.existsSync(path.join(store, '.git'))) {
25
- console.log(`[${label}] no store at ${store} — cloning ${repo}`);
26
- execFileSync('git', ['clone', '-q', repo, store], { encoding: 'utf8', env });
27
- }
28
- else {
29
- execFileSync('git', ['pull', '-q', 'origin', 'main'], { cwd: store, encoding: 'utf8', env });
30
- }
31
- }
32
- /** Discover canon sessions (part-aware; titles recovered from event sidecars). */
33
- export function discoverCanonSessions(store) {
34
- const root = path.join(store, 'canon');
35
- const groups = new Map();
36
- const walk = (dir) => {
37
- let entries = [];
38
- try {
39
- entries = fs.readdirSync(dir, { withFileTypes: true });
40
- }
41
- catch {
42
- return;
43
- }
44
- for (const e of entries) {
45
- const p = path.join(dir, e.name);
46
- if (e.isDirectory()) {
47
- walk(p);
48
- continue;
49
- }
50
- if (!e.isFile())
51
- continue;
52
- const m = e.name.match(/^(.*\.jsonl)\.part-\d{4}$/);
53
- const logical = m ? path.join(dir, m[1]) : p;
54
- if (!logical.endsWith('.jsonl') || logical.endsWith('.events.jsonl'))
55
- continue;
56
- const g = groups.get(logical) ?? [];
57
- g.push(p);
58
- groups.set(logical, g);
59
- }
60
- };
61
- walk(root);
62
- const out = [];
63
- for (const [logical, parts] of groups) {
64
- parts.sort();
65
- const rel = path.relative(root, logical);
66
- const uuid = path.basename(rel, '.jsonl');
67
- const bytes = parts.reduce((n, p) => n + fs.statSync(p).size, 0);
68
- let title;
69
- const eventsPath = logical.replace(/\.jsonl$/, '.events.jsonl');
70
- if (fs.existsSync(eventsPath)) {
71
- for (const line of fs.readFileSync(eventsPath, 'utf8').split('\n')) {
72
- if (!line.trim())
73
- continue;
74
- try {
75
- const r = JSON.parse(line);
76
- if (r.type === 'ai-title' && r.aiTitle)
77
- title = r.aiTitle;
78
- }
79
- catch { /* skip */ }
80
- }
81
- }
82
- out.push({ uuid, rel, parts, bytes, harness: rel.split(path.sep)[0] ?? '?', title });
83
- }
84
- return out.sort((a, b) => a.rel.localeCompare(b.rel));
85
- }
86
- /** List canon sessions (prints rows; returns them). `all` includes <4KB sessions. */
87
- export async function canonList(o = {}) {
88
- const store = o.store ?? '/tmp/canon-store';
89
- ensureFreshStore(store, o.repoUrl);
90
- const sessions = discoverCanonSessions(store);
91
- const rows = sessions.filter((s) => o.all || s.bytes > 4096);
92
- for (const s of rows) {
93
- const kb = (s.bytes / 1024).toFixed(0).padStart(7);
94
- console.log(`${s.uuid} ${kb}KB ${s.harness.padEnd(12)} ${s.title ?? ''}`);
95
- }
96
- console.log(`\n[canon-pull] ${rows.length} session(s)${o.all ? '' : ' >4KB (--all for every one)'} in ${store}/canon`);
97
- return rows;
98
- }
99
- /** Materialize one canon session into a native session directory. */
100
- export async function canonPull(o) {
101
- const store = o.store ?? '/tmp/canon-store';
102
- const home = o.home ?? process.env.HOME ?? '/home/runner/workspace';
103
- ensureFreshStore(store, o.repoUrl);
104
- const sessions = discoverCanonSessions(store);
105
- const matches = sessions.filter((s) => s.uuid === o.session || s.uuid.startsWith(o.session));
106
- if (matches.length === 0) {
107
- console.error(`[canon-pull] no canon session matches '${o.session}'`);
108
- return { code: 1 };
109
- }
110
- if (matches.length > 1) {
111
- console.error(`[canon-pull] ambiguous — ${matches.length} matches:`);
112
- for (const m of matches)
113
- console.error(` ${m.uuid} (${m.rel})`);
114
- return { code: 1 };
115
- }
116
- const s = matches[0];
117
- const destDir = o.to ?? path.join(home, 'omniclaude-v4', '.cortex', 'sessions');
118
- const dest = path.join(destDir, `${s.uuid}.jsonl`);
119
- if (fs.existsSync(dest) && !o.force) {
120
- console.error(`[canon-pull] ${dest} already exists — resuming elsewhere is a BRANCH; use --force to overwrite the local copy`);
121
- return { code: 1, dest, session: s };
122
- }
123
- fs.mkdirSync(destDir, { recursive: true });
124
- fs.writeFileSync(dest, '');
125
- for (const p of s.parts)
126
- fs.appendFileSync(dest, fs.readFileSync(p));
127
- const lines = fs.readFileSync(dest, 'utf8').split('\n').filter(Boolean).length;
128
- console.log(`[canon-pull] materialized ${s.uuid} (${s.harness}${s.title ? ` — "${s.title}"` : ''})`);
129
- console.log(`[canon-pull] ${lines} canonical message(s), ${(s.bytes / 1024).toFixed(0)}KB → ${dest}`);
130
- console.log(`[canon-pull] resume with: cortex --resume ${s.uuid} "..."`);
131
- return { code: 0, dest, session: s };
132
- }
133
- //# sourceMappingURL=canonPull.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canonPull.js","sourceRoot":"","sources":["../../src/canon/canonPull.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- export interface CanonSyncOptions {
2
- /** Canon store working clone (default /tmp/canon-store — off-quota; auto-cloned). */
3
- store?: string;
4
- /** Home dir for harness roots + the mtime/size manifest (default $HOME). */
5
- home?: string;
6
- /** Report what would copy; write nothing. */
7
- dryRun?: boolean;
8
- /** Store remote for the auto-clone (default env CANON_REPO or the canonical repo). */
9
- repoUrl?: string;
10
- }
11
- export interface CanonSyncResult {
12
- copied: number;
13
- unchanged: number;
14
- skipped: string[];
15
- chunked: number;
16
- scrubbedHits: number;
17
- pushed: boolean;
18
- }
19
- export declare function canonSync(o?: CanonSyncOptions): Promise<CanonSyncResult>;
20
- //# sourceMappingURL=canonSync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canonSync.d.ts","sourceRoot":"","sources":["../../src/canon/canonSync.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,CAAC,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA0LlF"}
@@ -1,243 +0,0 @@
1
- /**
2
- * canonSync — the canon local-first sync spine, graduated from
3
- * `scripts/canon/canon-sync.ts` (Phase C part 2; the script is now a thin
4
- * wrapper over this module, so the cron and the CLI run ONE implementation).
5
- *
6
- * Copies changed native session files from every registered harness store into
7
- * the canon repo's /native/<harness>/ tree, secret-scrubbed at the push
8
- * boundary only (sovereignty; no deid/quality transforms — egress concerns),
9
- * then commits + pushes one debounced commit. Oversized JSONL chunks at line
10
- * boundaries; skips are visible in /native/SKIPPED.md (D8: never silent).
11
- * Bodies transplanted verbatim from the proven script.
12
- *
13
- * @module canon/canonSync
14
- */
15
- import * as fs from 'node:fs';
16
- import * as path from 'node:path';
17
- import { execFileSync } from 'node:child_process';
18
- export async function canonSync(o = {}) {
19
- const HOME = o.home ?? process.env.HOME ?? '/home/runner/workspace';
20
- const DRY = o.dryRun ?? false;
21
- const STORE = o.store ?? '/tmp/canon-store';
22
- const MANIFEST_PATH = path.join(HOME, '.canon', 'manifest.json');
23
- const MAX_BYTES = 50 * 1024 * 1024; // GitHub hard-rejects >100MB; margin for scrub growth
24
- /** harness label -> { root, include (ext allowlist), maxDepth } */
25
- const SOURCES = {
26
- 'claude-code': { root: path.join(HOME, '.claude', 'projects'), exts: ['.jsonl'] },
27
- 'nexus-cortex': { root: '', exts: ['.jsonl', '.json'] }, // multi-root, see below
28
- 'grok-build': { root: path.join(HOME, '.grok', 'sessions'), exts: ['.jsonl', '.json'] },
29
- 'gemini-cli': { root: path.join(HOME, '.gemini', 'tmp'), exts: ['.jsonl', '.json'] },
30
- };
31
- const CORTEX_ROOTS = [
32
- // workspace-root sessions: cortex CLI runs launched from /home/runner/workspace
33
- // itself (coverage gap found 2026-07-28 — the grok freeze investigation's
34
- // sessions lived here, invisible to canon)
35
- ['workspace', path.join(HOME, '.cortex', 'sessions')],
36
- ['omniclaude-v4', path.join(HOME, 'omniclaude-v4', '.cortex', 'sessions')],
37
- ['server', path.join(HOME, 'omniclaude-v4', 'packages', 'server', '.cortex', 'sessions')],
38
- ['nexus-terminal', path.join(HOME, 'nexus-terminal', '.cortex', 'sessions')],
39
- ];
40
- // ── Secret scrub (push-boundary only; patterns = ETL's set MINUS blanket hex64) ──
41
- const SECRET_PATTERNS = [
42
- [/sk-[A-Za-z0-9_-]{16,}/g, '[redacted:sk]'],
43
- [/ghp_[A-Za-z0-9]{20,}/g, '[redacted:ghp]'],
44
- [/github_pat_[A-Za-z0-9_]{20,}/g, '[redacted:ghpat]'],
45
- [/ghu_[A-Za-z0-9]{20,}/g, '[redacted:ghu]'],
46
- [/ghs_[A-Za-z0-9]{20,}/g, '[redacted:ghs]'],
47
- [/hf_[A-Za-z0-9]{20,}/g, '[redacted:hf]'],
48
- [/AIza[A-Za-z0-9_-]{20,}/g, '[redacted:aiza]'],
49
- [/xai-[A-Za-z0-9]{20,}/g, '[redacted:xai]'],
50
- [/nar_[A-Za-z0-9]{16,}/g, '[redacted:nar]'],
51
- [/gsk_[A-Za-z0-9]{20,}/g, '[redacted:gsk]'],
52
- [/xox[bpars]-[A-Za-z0-9-]{10,}/g, '[redacted:slack]'],
53
- [/AKIA[A-Z0-9]{16}/g, '[redacted:akia]'],
54
- [/eyJ[A-Za-z0-9_-]{20,}\.eyJ[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{10,}/g, '[redacted:jwt]'],
55
- ];
56
- function scrub(s) {
57
- for (const [re, sub] of SECRET_PATTERNS)
58
- s = s.replace(re, sub);
59
- return s;
60
- }
61
- const CANON_REPO = o.repoUrl ?? process.env.CANON_REPO ?? 'https://github.com/Spitfire-Products/nexus-canon-store';
62
- if (!fs.existsSync(path.join(STORE, '.git'))) {
63
- // Working clone is disposable (quota lesson 2026-07-27: keep it OFF the
64
- // workspace quota — pass --store /tmp/canon-store); remote is the truth.
65
- console.log(`[canon-sync] no store at ${STORE} — cloning ${CANON_REPO}`);
66
- execFileSync('git', ['clone', '-q', CANON_REPO, STORE], {
67
- encoding: 'utf8', env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
68
- });
69
- }
70
- const manifest = fs.existsSync(MANIFEST_PATH)
71
- ? JSON.parse(fs.readFileSync(MANIFEST_PATH, 'utf8'))
72
- : {};
73
- function* walk(dir) {
74
- let entries = [];
75
- try {
76
- entries = fs.readdirSync(dir, { withFileTypes: true });
77
- }
78
- catch {
79
- return;
80
- }
81
- for (const e of entries) {
82
- const p = path.join(dir, e.name);
83
- if (e.isDirectory())
84
- yield* walk(p);
85
- else if (e.isFile())
86
- yield p;
87
- }
88
- }
89
- const skipped = [];
90
- let copied = 0, unchanged = 0, scrubbedHits = 0, chunked = 0;
91
- const PART_BYTES = 25 * 1024 * 1024;
92
- /** Lossless line-boundary chunking: <dest>.part-NNNN files; reassembly = cat in
93
- * order. Streams line-by-line (a 200MB read into one string is fine on this box,
94
- * but split must respect line boundaries so no record is ever cut). */
95
- function syncChunked(src, destRel, st) {
96
- if (DRY) {
97
- chunked++;
98
- copied++;
99
- return;
100
- }
101
- let content;
102
- try {
103
- content = fs.readFileSync(src, 'utf8');
104
- }
105
- catch (e) {
106
- skipped.push(`${destRel} — read failed: ${e}`);
107
- return;
108
- }
109
- const out = scrub(content);
110
- if (out.length !== content.length)
111
- scrubbedHits++;
112
- const destBase = path.join(STORE, 'native', destRel);
113
- fs.mkdirSync(path.dirname(destBase), { recursive: true });
114
- // Remove any prior single-file copy (upgraded to parts).
115
- try {
116
- fs.unlinkSync(destBase);
117
- }
118
- catch { /* none */ }
119
- let part = 0, offset = 0;
120
- while (offset < out.length) {
121
- let end = Math.min(offset + PART_BYTES, out.length);
122
- if (end < out.length) {
123
- const nl = out.lastIndexOf('\n', end);
124
- if (nl > offset)
125
- end = nl + 1; // never cut a record
126
- }
127
- const partPath = `${destBase}.part-${String(part).padStart(4, '0')}`;
128
- const slice = out.slice(offset, end);
129
- // Skip rewriting identical immutable earlier parts (delta-cheap growth).
130
- const same = fs.existsSync(partPath) && fs.statSync(partPath).size === Buffer.byteLength(slice)
131
- && fs.readFileSync(partPath, 'utf8') === slice;
132
- if (!same)
133
- fs.writeFileSync(partPath, slice);
134
- offset = end;
135
- part++;
136
- }
137
- manifest[destRel] = { mtimeMs: st.mtimeMs, size: st.size };
138
- chunked++;
139
- copied++;
140
- }
141
- function syncFile(src, destRel) {
142
- let st;
143
- try {
144
- st = fs.statSync(src);
145
- }
146
- catch (e) {
147
- skipped.push(`${destRel} — unreadable: ${e}`);
148
- return;
149
- }
150
- const key = destRel;
151
- const prev = manifest[key];
152
- if (prev && prev.mtimeMs === st.mtimeMs && prev.size === st.size) {
153
- unchanged++;
154
- return;
155
- }
156
- // Oversized JSONL: chunk at LINE boundaries into ~25MB parts (lossless: cat
157
- // parts = original; growing sessions only rewrite the LAST part, so git deltas
158
- // stay cheap). LFS rejected: no delta on growing blobs + 1GB/mo bandwidth cap.
159
- // Non-splittable oversized files remain visible skips (D8).
160
- if (st.size > MAX_BYTES) {
161
- if (src.endsWith('.jsonl')) {
162
- syncChunked(src, destRel, st);
163
- return;
164
- }
165
- skipped.push(`${destRel} — ${(st.size / 1e6).toFixed(0)}MB > 50MB cap, not line-splittable`);
166
- manifest[key] = { mtimeMs: st.mtimeMs, size: st.size };
167
- return;
168
- }
169
- const dest = path.join(STORE, 'native', destRel);
170
- if (!DRY) {
171
- fs.mkdirSync(path.dirname(dest), { recursive: true });
172
- let content;
173
- try {
174
- content = fs.readFileSync(src, 'utf8');
175
- }
176
- catch (e) {
177
- skipped.push(`${destRel} — read failed: ${e}`);
178
- return;
179
- }
180
- const out = scrub(content);
181
- if (out.length !== content.length)
182
- scrubbedHits++;
183
- fs.writeFileSync(dest, out);
184
- }
185
- manifest[key] = { mtimeMs: st.mtimeMs, size: st.size };
186
- copied++;
187
- }
188
- // claude-code
189
- for (const f of walk(SOURCES['claude-code'].root)) {
190
- if (!f.endsWith('.jsonl'))
191
- continue;
192
- syncFile(f, path.join('claude-code', path.relative(SOURCES['claude-code'].root, f)));
193
- }
194
- // nexus-cortex (multi-root)
195
- for (const [label, root] of CORTEX_ROOTS) {
196
- for (const f of walk(root)) {
197
- if (!['.jsonl', '.json'].some((x) => f.endsWith(x)))
198
- continue;
199
- syncFile(f, path.join('nexus-cortex', label, path.relative(root, f)));
200
- }
201
- }
202
- // grok-build + gemini-cli
203
- for (const h of ['grok-build', 'gemini-cli']) {
204
- const s = SOURCES[h];
205
- for (const f of walk(s.root)) {
206
- if (!s.exts.some((x) => f.endsWith(x)))
207
- continue;
208
- syncFile(f, path.join(h, path.relative(s.root, f)));
209
- }
210
- }
211
- let pushed = false;
212
- if (!DRY) {
213
- // D8: skips are VISIBLE, committed alongside the sync.
214
- const skipMd = path.join(STORE, 'native', 'SKIPPED.md');
215
- if (skipped.length) {
216
- const prev = fs.existsSync(skipMd) ? fs.readFileSync(skipMd, 'utf8') : '# Skipped files (visible, never silent — D8)\n';
217
- const news = skipped.filter((s) => !prev.includes(s));
218
- if (news.length)
219
- fs.writeFileSync(skipMd, prev + news.map((s) => `- ${new Date().toISOString()} ${s}\n`).join(''));
220
- }
221
- fs.mkdirSync(path.dirname(MANIFEST_PATH), { recursive: true });
222
- fs.writeFileSync(MANIFEST_PATH, JSON.stringify(manifest));
223
- const git = (a) => execFileSync('git', a, { cwd: STORE, encoding: 'utf8', env: { ...process.env, GIT_TERMINAL_PROMPT: '0' } });
224
- git(['add', '-A']);
225
- const status = git(['status', '--porcelain']);
226
- if (status.trim()) {
227
- git(['commit', '-q', '-m', `canon-sync: ${copied} file(s) updated, ${skipped.length} skipped`]);
228
- git(['push', '-q', 'origin', 'main']);
229
- console.log(`[canon-sync] pushed: ${copied} copied, ${unchanged} unchanged, ${skipped.length} skipped, ${chunked} chunked, ${scrubbedHits} files had secrets scrubbed`);
230
- pushed = true;
231
- }
232
- else {
233
- console.log(`[canon-sync] no changes (${unchanged} unchanged, ${skipped.length} previously-skipped)`);
234
- }
235
- }
236
- else {
237
- console.log(`[canon-sync DRY] would copy ${copied}, unchanged ${unchanged}, skip ${skipped.length}`);
238
- for (const s of skipped.slice(0, 10))
239
- console.log(' skip:', s);
240
- }
241
- return { copied, unchanged, skipped, chunked, scrubbedHits, pushed };
242
- }
243
- //# sourceMappingURL=canonSync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canonSync.js","sourceRoot":"","sources":["../../src/canon/canonSync.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- export interface CanonTranslateOptions {
2
- /** Canon store working clone (default /tmp/canon-store — off-quota; auto-cloned). */
3
- store?: string;
4
- /** Home dir for the incremental manifest (default $HOME). */
5
- home?: string;
6
- /** Report what would translate; write nothing. */
7
- dryRun?: boolean;
8
- /** Store remote for the auto-clone (default env CANON_REPO or the canonical repo). */
9
- repoUrl?: string;
10
- }
11
- export interface CanonTranslateResult {
12
- translated: number;
13
- unchanged: number;
14
- errors: string[];
15
- summary: string;
16
- pushed: boolean;
17
- }
18
- export declare function canonTranslate(o?: CanonTranslateOptions): Promise<CanonTranslateResult>;
19
- //# sourceMappingURL=canonTranslate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canonTranslate.d.ts","sourceRoot":"","sources":["../../src/canon/canonTranslate.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,qBAAqB;IACpC,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,CAAC,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwnBjG"}