nexus-canon 1.11.3 → 1.11.5
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/canonArchive.d.ts +20 -0
- package/dist/canonArchive.d.ts.map +1 -1
- package/dist/canonArchive.js +191 -16
- package/dist/canonArchive.js.map +1 -1
- package/dist/canonArchiveRead.d.ts +22 -0
- package/dist/canonArchiveRead.d.ts.map +1 -0
- package/dist/canonArchiveRead.js +176 -0
- package/dist/canonArchiveRead.js.map +1 -0
- package/dist/canonGraph.d.ts +1 -1
- package/dist/canonGraph.d.ts.map +1 -1
- package/dist/canonGraph.js +29 -7
- package/dist/canonGraph.js.map +1 -1
- package/dist/canonPull.d.ts +12 -0
- package/dist/canonPull.d.ts.map +1 -1
- package/dist/canonPull.js +115 -9
- package/dist/canonPull.js.map +1 -1
- package/dist/canonRepo.d.ts +21 -1
- package/dist/canonRepo.d.ts.map +1 -1
- package/dist/canonRepo.js +94 -11
- package/dist/canonRepo.js.map +1 -1
- package/dist/canonSync.d.ts.map +1 -1
- package/dist/canonSync.js +2 -0
- package/dist/canonSync.js.map +1 -1
- package/dist/canonTouched.d.ts.map +1 -1
- package/dist/canonTouched.js +35 -33
- package/dist/canonTouched.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/canonArchive.d.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Only session transcripts are archivable. The session roots also hold current-state files that must stay live:
|
|
3
|
+
* captured capability artifacts (`canon/artifacts/`), captured memory files (`…/memory/…`), and index docs
|
|
4
|
+
* (`SKIPPED.md`, `MAPPING.md`, `PROJECTIONS.md`, `.gitkeep`). 09-26: the prefix-only filter had archived ~1.3k of them.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isArchivablePath(p: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* The files of ONE session move and dedupe together: chunks (`<id>.jsonl.part-NNNN`), sidecars (`<id>.events.jsonl`,
|
|
9
|
+
* `<id>.meta.json`), and subagent files (`<id>/subagents/…`, `<id>.subagents/…`). Key = the path up to the first uuid
|
|
10
|
+
* segment (its stem), else the directory + the basename's stem.
|
|
11
|
+
*/
|
|
12
|
+
export declare function sessionUnit(p: string): string;
|
|
1
13
|
export interface CanonArchiveOptions {
|
|
2
14
|
store: string;
|
|
3
15
|
days?: number;
|
|
@@ -5,4 +17,12 @@ export interface CanonArchiveOptions {
|
|
|
5
17
|
push?: boolean;
|
|
6
18
|
}
|
|
7
19
|
export declare function canonArchive(opts: CanonArchiveOptions): Promise<number>;
|
|
20
|
+
/**
|
|
21
|
+
* Remove UNTRACKED files that are byte-identical to an archived copy at the same original path, before a commit
|
|
22
|
+
* stages them. Two writers re-create archived sessions on disk: the browser-branch fold-in (`git checkout FETCH_HEAD
|
|
23
|
+
* -- native/browser-cortex` restores every file the branch holds) and harness roots whose copies are re-staged
|
|
24
|
+
* unchanged. Without this, every sync re-adds them and every archive run drops them again (seen 09-26: 77 files per
|
|
25
|
+
* cycle). A session that grew differs from its archived copy and stays; files tracked in HEAD are never touched.
|
|
26
|
+
*/
|
|
27
|
+
export declare function dropArchivedDuplicates(store: string, label: string): number;
|
|
8
28
|
//# sourceMappingURL=canonArchive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonArchive.d.ts","sourceRoot":"","sources":["../src/canonArchive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canonArchive.d.ts","sourceRoot":"","sources":["../src/canonArchive.ts"],"names":[],"mappings":"AA6BA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAKnD;AAID;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAuBD,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwI7E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA+B3E"}
|
package/dist/canonArchive.js
CHANGED
|
@@ -15,16 +15,49 @@
|
|
|
15
15
|
* on demand (partial clone) — the "link" always resolves, like [[archive]].
|
|
16
16
|
*
|
|
17
17
|
* Safety: refuses to run on a dirty worktree (a mid-sync watcher), and only
|
|
18
|
-
* touches session
|
|
19
|
-
* (HARNESSES.json, agents/, .github/, docs)
|
|
18
|
+
* touches session transcripts under native/, canon/, projections/ (isArchivablePath) —
|
|
19
|
+
* scaffolding (HARNESSES.json, agents/, .github/, docs), capability artifacts, captured
|
|
20
|
+
* memory, and index docs are never archived. Whole sessions move together (sessionUnit),
|
|
21
|
+
* and a live session byte-identical to its archived copy is dropped (the 09-20 re-add).
|
|
20
22
|
*/
|
|
21
23
|
import { execFileSync } from 'child_process';
|
|
24
|
+
import * as fs from 'fs';
|
|
25
|
+
import * as path from 'path';
|
|
26
|
+
import { ARCHIVE_EXCLUSION_PATTERNS, ensureArchiveExclusion } from './canonRepo.js';
|
|
22
27
|
const SESSION_ROOTS = ['native/', 'canon/', 'projections/'];
|
|
28
|
+
/**
|
|
29
|
+
* Only session transcripts are archivable. The session roots also hold current-state files that must stay live:
|
|
30
|
+
* captured capability artifacts (`canon/artifacts/`), captured memory files (`…/memory/…`), and index docs
|
|
31
|
+
* (`SKIPPED.md`, `MAPPING.md`, `PROJECTIONS.md`, `.gitkeep`). 09-26: the prefix-only filter had archived ~1.3k of them.
|
|
32
|
+
*/
|
|
33
|
+
export function isArchivablePath(p) {
|
|
34
|
+
if (!SESSION_ROOTS.some((r) => p.startsWith(r)))
|
|
35
|
+
return false;
|
|
36
|
+
if (p.startsWith('canon/artifacts/'))
|
|
37
|
+
return false;
|
|
38
|
+
if (p.split('/').includes('memory'))
|
|
39
|
+
return false;
|
|
40
|
+
return !p.endsWith('.md') && !p.endsWith('.gitkeep');
|
|
41
|
+
}
|
|
42
|
+
const UUID_SEGMENT = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/;
|
|
43
|
+
/**
|
|
44
|
+
* The files of ONE session move and dedupe together: chunks (`<id>.jsonl.part-NNNN`), sidecars (`<id>.events.jsonl`,
|
|
45
|
+
* `<id>.meta.json`), and subagent files (`<id>/subagents/…`, `<id>.subagents/…`). Key = the path up to the first uuid
|
|
46
|
+
* segment (its stem), else the directory + the basename's stem.
|
|
47
|
+
*/
|
|
48
|
+
export function sessionUnit(p) {
|
|
49
|
+
const parts = p.split('/');
|
|
50
|
+
const i = parts.findIndex((s) => UUID_SEGMENT.test(s));
|
|
51
|
+
if (i >= 0)
|
|
52
|
+
return [...parts.slice(0, i), parts[i].match(UUID_SEGMENT)[0]].join('/');
|
|
53
|
+
return [...parts.slice(0, -1), parts[parts.length - 1].split('.')[0]].join('/');
|
|
54
|
+
}
|
|
23
55
|
function git(store, args, input) {
|
|
24
56
|
return execFileSync('git', ['-C', store, ...args], {
|
|
25
57
|
encoding: 'utf-8',
|
|
26
58
|
input,
|
|
27
59
|
maxBuffer: 256 * 1024 * 1024,
|
|
60
|
+
stdio: ['pipe', 'pipe', 'pipe'], // keep expected probe failures (ls-files --error-unmatch) out of the cron log
|
|
28
61
|
});
|
|
29
62
|
}
|
|
30
63
|
/** Per-path last-commit epoch: one newest-first log walk; first sighting wins. */
|
|
@@ -59,55 +92,143 @@ export async function canonArchive(opts) {
|
|
|
59
92
|
if (m)
|
|
60
93
|
entries.push({ mode: m[1], sha: m[2], path: m[3] });
|
|
61
94
|
}
|
|
62
|
-
|
|
95
|
+
// Blobs already held under archive/, by original path (a path can sit in more than one month bucket).
|
|
96
|
+
const archived = new Map();
|
|
97
|
+
for (const e of entries) {
|
|
98
|
+
const m = e.path.match(/^archive\/\d{4}-\d{2}\/(.+)$/);
|
|
99
|
+
if (m)
|
|
100
|
+
(archived.get(m[1]) ?? archived.set(m[1], new Set()).get(m[1])).add(e.sha);
|
|
101
|
+
}
|
|
102
|
+
const units = new Map();
|
|
63
103
|
for (const e of entries) {
|
|
64
|
-
if (e.path.startsWith('archive/'))
|
|
104
|
+
if (e.path.startsWith('archive/') || !isArchivablePath(e.path))
|
|
65
105
|
continue;
|
|
66
|
-
|
|
106
|
+
const k = sessionUnit(e.path);
|
|
107
|
+
(units.get(k) ?? units.set(k, []).get(k)).push(e);
|
|
108
|
+
}
|
|
109
|
+
// Per session: DROP when every live file is byte-identical to an archived copy (the 09-20 re-add left ~15k such
|
|
110
|
+
// sessions live — no age test, they are pure duplicates); MOVE when every file is older than the cutoff (a chunked
|
|
111
|
+
// session that is still growing keeps its old parts live with the new ones). A grown or changed session stays live.
|
|
112
|
+
const moves = [];
|
|
113
|
+
const drops = [];
|
|
114
|
+
for (const files of units.values()) {
|
|
115
|
+
if (files.every((e) => archived.get(e.path)?.has(e.sha))) {
|
|
116
|
+
drops.push(...files.map((e) => e.path));
|
|
67
117
|
continue;
|
|
68
|
-
|
|
69
|
-
|
|
118
|
+
}
|
|
119
|
+
const cts = files.map((e) => epochs.get(e.path) ?? 0);
|
|
120
|
+
if (cts.some((ct) => ct === 0 || ct >= cutoff))
|
|
70
121
|
continue;
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
122
|
+
for (const [i, e] of files.entries()) {
|
|
123
|
+
if (archived.get(e.path)?.has(e.sha)) {
|
|
124
|
+
drops.push(e.path);
|
|
125
|
+
continue;
|
|
126
|
+
} // already archived byte-identical: no second copy
|
|
127
|
+
const d = new Date(cts[i] * 1000);
|
|
128
|
+
const bucket = `${d.getUTCFullYear()}-${String(d.getUTCMonth() + 1).padStart(2, '0')}`;
|
|
129
|
+
moves.push({ from: e.path, to: `archive/${bucket}/${e.path}` });
|
|
130
|
+
}
|
|
74
131
|
}
|
|
75
|
-
if (moves.length === 0) {
|
|
132
|
+
if (moves.length === 0 && drops.length === 0) {
|
|
76
133
|
console.log(`[canon-archive] nothing older than ${days}d to archive (${entries.length} tracked files)`);
|
|
134
|
+
// Still enforce the local footprint: a fresh (re-)clone or an older build may have materialized archive/.
|
|
135
|
+
if (!opts.dryRun)
|
|
136
|
+
ensureArchiveExclusion(store, 'canon-archive');
|
|
77
137
|
return 0;
|
|
78
138
|
}
|
|
79
|
-
console.log(`[canon-archive] archiving ${moves.length} of ${entries.length} files (last commit > ${days}d ago)`
|
|
139
|
+
console.log(`[canon-archive] archiving ${moves.length} of ${entries.length} files (last commit > ${days}d ago); ` +
|
|
140
|
+
`dropping ${drops.length} live duplicate(s) of archived files`);
|
|
80
141
|
if (opts.dryRun) {
|
|
81
142
|
for (const m of moves.slice(0, 20))
|
|
82
143
|
console.log(` ${m.from} -> ${m.to}`);
|
|
83
144
|
if (moves.length > 20)
|
|
84
145
|
console.log(` … ${moves.length - 20} more`);
|
|
146
|
+
for (const p of drops.slice(0, 20))
|
|
147
|
+
console.log(` drop ${p} (identical copy under archive/)`);
|
|
148
|
+
if (drops.length > 20)
|
|
149
|
+
console.log(` … ${drops.length - 20} more drops`);
|
|
85
150
|
return 0;
|
|
86
151
|
}
|
|
87
|
-
// Build the new index wholesale: every entry at its final path. Renames keep
|
|
152
|
+
// Build the new index wholesale: every entry at its final path (dropped duplicates omitted). Renames keep
|
|
88
153
|
// the same blob sha — no content read, no re-upload, works in partial clones.
|
|
89
154
|
const dest = new Map(moves.map((m) => [m.from, m.to]));
|
|
155
|
+
const dropped = new Set(drops);
|
|
90
156
|
const indexInfo = entries
|
|
157
|
+
.filter((e) => !dropped.has(e.path))
|
|
91
158
|
.map((e) => `${e.mode} ${e.sha} 0\t${dest.get(e.path) ?? e.path}`)
|
|
92
159
|
.join('\n') + '\n';
|
|
93
160
|
git(store, ['read-tree', '--empty']);
|
|
94
161
|
git(store, ['update-index', '--index-info'], indexInfo);
|
|
162
|
+
// 09-26 FIX: --index-info entries carry NO stat data, so git treats every file already on disk as "not uptodate" and
|
|
163
|
+
// refuses to drop it when the exclusion applies (live: a store that had materialized archive/ kept all 1.6 GB).
|
|
164
|
+
// Re-stat what is really on disk (identical content → uptodate); missing paths (the new archive/ entries) are fine.
|
|
165
|
+
try {
|
|
166
|
+
git(store, ['update-index', '-q', '--refresh', '--ignore-missing']);
|
|
167
|
+
}
|
|
168
|
+
catch { /* exit 1 = some entries differ; harmless */ }
|
|
95
169
|
const tree = git(store, ['write-tree']).trim();
|
|
96
170
|
const parent = git(store, ['rev-parse', 'HEAD']).trim();
|
|
97
171
|
const commit = git(store, [
|
|
98
172
|
'-c', 'user.email=canon-archive@local', '-c', 'user.name=canon-archive',
|
|
99
173
|
'commit-tree', tree, '-p', parent,
|
|
100
|
-
'-m', `canon-archive: ${moves.length}
|
|
174
|
+
'-m', `canon-archive: ${moves.length} files older than ${days}d -> archive/` +
|
|
175
|
+
(drops.length ? `, ${drops.length} live duplicates of archived files dropped` : '') + (moves.length ? ' (renames only; remote keeps everything)' : ' (remote keeps everything)'),
|
|
101
176
|
]).trim();
|
|
102
177
|
git(store, ['update-ref', 'HEAD', commit]);
|
|
103
178
|
// Sparse-exclude archive/ so the local worktree DROPS the moved files (this
|
|
104
179
|
// is where the flat-forever footprint comes from), then sync the worktree.
|
|
105
|
-
git(store, ['sparse-checkout', 'set', '--no-cone',
|
|
180
|
+
git(store, ['sparse-checkout', 'set', '--no-cone', ...ARCHIVE_EXCLUSION_PATTERNS]);
|
|
106
181
|
git(store, ['read-tree', '-mu', 'HEAD']);
|
|
182
|
+
git(store, ['sparse-checkout', 'reapply']);
|
|
183
|
+
// 09-26 FIX (reproduced): the index rewrite above carries no stat data, so git leaves the moved files ON DISK
|
|
184
|
+
// at their old paths as UNTRACKED files — nothing is freed, the next archive run aborts on the dirty tree,
|
|
185
|
+
// and the next sync's `git add -A` would re-add every archived session at its old path. Remove each leftover
|
|
186
|
+
// only when its bytes hash to the archived blob (so a file a writer touched meanwhile is never lost).
|
|
187
|
+
const shaByFrom = new Map(entries.map((e) => [e.path, e.sha]));
|
|
188
|
+
let removed = 0, kept = 0, freed = 0;
|
|
189
|
+
const dirs = new Set();
|
|
190
|
+
for (const from of [...moves.map((m) => m.from), ...drops]) {
|
|
191
|
+
const abs = path.join(store, from);
|
|
192
|
+
if (!fs.existsSync(abs))
|
|
193
|
+
continue;
|
|
194
|
+
let tracked = true;
|
|
195
|
+
try {
|
|
196
|
+
git(store, ['ls-files', '--error-unmatch', '--', from]);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
tracked = false;
|
|
200
|
+
}
|
|
201
|
+
const sha = tracked ? '' : git(store, ['hash-object', '--', from]).trim();
|
|
202
|
+
if (tracked || sha !== shaByFrom.get(from)) {
|
|
203
|
+
kept++;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
freed += fs.statSync(abs).size;
|
|
207
|
+
fs.unlinkSync(abs);
|
|
208
|
+
removed++;
|
|
209
|
+
dirs.add(path.dirname(abs));
|
|
210
|
+
}
|
|
211
|
+
// Prune directories the removals emptied (deepest first), never the store root.
|
|
212
|
+
for (const d of [...dirs].sort((a, b) => b.length - a.length)) {
|
|
213
|
+
let cur = d;
|
|
214
|
+
while (cur.startsWith(store + path.sep) && cur !== store) {
|
|
215
|
+
try {
|
|
216
|
+
if (fs.readdirSync(cur).length > 0)
|
|
217
|
+
break;
|
|
218
|
+
fs.rmdirSync(cur);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
cur = path.dirname(cur);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
console.log(`[canon-archive] local worktree: removed ${removed} archived file(s) (${(freed / 1048576).toFixed(1)} MB freed)` +
|
|
227
|
+
(kept ? `, kept ${kept} that changed since the move (review)` : ''));
|
|
107
228
|
if (opts.push !== false) {
|
|
108
229
|
try {
|
|
109
230
|
git(store, ['push', 'origin', 'HEAD']);
|
|
110
|
-
console.log(`[canon-archive] pushed ${commit.slice(0, 10)} (${moves.length} archived)`);
|
|
231
|
+
console.log(`[canon-archive] pushed ${commit.slice(0, 10)} (${moves.length} archived, ${drops.length} duplicates dropped)`);
|
|
111
232
|
}
|
|
112
233
|
catch (e) {
|
|
113
234
|
console.error(`[canon-archive] PUSH FAILED (commit is local-only — rerun push): ${String(e?.message ?? e).slice(0, 200)}`);
|
|
@@ -116,4 +237,58 @@ export async function canonArchive(opts) {
|
|
|
116
237
|
}
|
|
117
238
|
return 0;
|
|
118
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Remove UNTRACKED files that are byte-identical to an archived copy at the same original path, before a commit
|
|
242
|
+
* stages them. Two writers re-create archived sessions on disk: the browser-branch fold-in (`git checkout FETCH_HEAD
|
|
243
|
+
* -- native/browser-cortex` restores every file the branch holds) and harness roots whose copies are re-staged
|
|
244
|
+
* unchanged. Without this, every sync re-adds them and every archive run drops them again (seen 09-26: 77 files per
|
|
245
|
+
* cycle). A session that grew differs from its archived copy and stays; files tracked in HEAD are never touched.
|
|
246
|
+
*/
|
|
247
|
+
export function dropArchivedDuplicates(store, label) {
|
|
248
|
+
let tree = '';
|
|
249
|
+
let untracked = '';
|
|
250
|
+
let staged = '';
|
|
251
|
+
try {
|
|
252
|
+
tree = git(store, ['ls-tree', '-r', 'HEAD', '--', 'archive']);
|
|
253
|
+
untracked = git(store, ['ls-files', '--others', '--exclude-standard', '-z']);
|
|
254
|
+
// `git checkout <tree> -- <path>` (the browser fold-in) writes AND stages — those files are added in the index, not untracked.
|
|
255
|
+
staged = git(store, ['diff', '--cached', '--name-only', '--diff-filter=A', '-z', 'HEAD']);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return 0;
|
|
259
|
+
}
|
|
260
|
+
const stagedSet = new Set(staged.split('\0').filter(Boolean));
|
|
261
|
+
const archived = new Map();
|
|
262
|
+
for (const line of tree.split('\n')) {
|
|
263
|
+
const m = line.match(/^\d{6} blob ([0-9a-f]{40,64})\tarchive\/\d{4}-\d{2}\/(.+)$/);
|
|
264
|
+
if (m && isArchivablePath(m[2]))
|
|
265
|
+
(archived.get(m[2]) ?? archived.set(m[2], new Set()).get(m[2])).add(m[1]);
|
|
266
|
+
}
|
|
267
|
+
let removed = 0;
|
|
268
|
+
for (const rel of [...untracked.split('\0'), ...stagedSet]) {
|
|
269
|
+
const shas = rel ? archived.get(rel) : undefined;
|
|
270
|
+
if (!shas)
|
|
271
|
+
continue;
|
|
272
|
+
let sha = '';
|
|
273
|
+
try {
|
|
274
|
+
sha = git(store, ['hash-object', '--', rel]).trim();
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
if (!shas.has(sha))
|
|
280
|
+
continue;
|
|
281
|
+
try {
|
|
282
|
+
if (stagedSet.has(rel))
|
|
283
|
+
git(store, ['rm', '-q', '-f', '--', rel]); // unstage + delete (only ever an index-ADDED path)
|
|
284
|
+
else
|
|
285
|
+
fs.unlinkSync(path.join(store, rel));
|
|
286
|
+
removed++;
|
|
287
|
+
}
|
|
288
|
+
catch { /* raced away */ }
|
|
289
|
+
}
|
|
290
|
+
if (removed)
|
|
291
|
+
console.log(`[${label}] skipped ${removed} file(s) identical to their archived copy (not re-added)`);
|
|
292
|
+
return removed;
|
|
293
|
+
}
|
|
119
294
|
//# sourceMappingURL=canonArchive.js.map
|
package/dist/canonArchive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonArchive.js","sourceRoot":"","sources":["../src/canonArchive.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canonArchive.js","sourceRoot":"","sources":["../src/canonArchive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CanonSession } from './canonPull.js';
|
|
2
|
+
/** Where an archived session's bytes live: git blob ids in the store (part order), plus the events sidecar. */
|
|
3
|
+
export interface ArchivedSessionRef {
|
|
4
|
+
store: string;
|
|
5
|
+
/** Repo path of the logical session under archive/ (e.g. archive/2026-08/canon/claude-code/<dir>/<id>.jsonl). */
|
|
6
|
+
path: string;
|
|
7
|
+
blobs: string[];
|
|
8
|
+
sidecarBlob?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Archived canonical sessions (HEAD `archive/<YYYY-MM>/canon/…`) whose logical path is NOT live — a live copy
|
|
12
|
+
* always wins. A session archived in more than one month bucket resolves to the newest bucket. Same grouping and
|
|
13
|
+
* uuid rules as discoverCanonSessions (parts-aware, events sidecars excluded, empty mains skipped).
|
|
14
|
+
*/
|
|
15
|
+
export declare function discoverArchivedCanonSessions(store: string, live: Iterable<string>, opts?: {
|
|
16
|
+
home?: string;
|
|
17
|
+
}): CanonSession[];
|
|
18
|
+
/** Stream a session's JSONL lines — disk parts for a live session, git blobs for an archived one. */
|
|
19
|
+
export declare function sessionLines(s: CanonSession): AsyncGenerator<string>;
|
|
20
|
+
/** Stream the events sidecar's lines (nothing when the session has none). */
|
|
21
|
+
export declare function sidecarLines(s: CanonSession): AsyncGenerator<string>;
|
|
22
|
+
//# sourceMappingURL=canonArchiveRead.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonArchiveRead.d.ts","sourceRoot":"","sources":["../src/canonArchiveRead.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,+GAA+G;AAC/G,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,iHAAiH;IACjH,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3B,YAAY,EAAE,CA+DhB;AAED,qGAAqG;AACrG,wBAAuB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAM3E;AAED,6EAA6E;AAC7E,wBAAuB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAO3E"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* canonArchiveRead — read archived canon sessions straight from the store's git objects (2026-09-26).
|
|
3
|
+
*
|
|
4
|
+
* The hot/archive split (canonArchive.ts) keeps `archive/` out of the local worktree, so anything that walks
|
|
5
|
+
* `canon/` on disk (the project graphs) would lose every session older than the archive cutoff. This module lists
|
|
6
|
+
* the archived canonical line from HEAD's tree and streams session bytes with `git cat-file` — nothing is written
|
|
7
|
+
* to disk. In a partial clone a blob that is not local yet is fetched on demand by git (promisor remote).
|
|
8
|
+
*
|
|
9
|
+
* Archived blobs never change, so consumers can key caches on the blob ids (canonTouched does): each archived
|
|
10
|
+
* session is read once per machine, then served from cache.
|
|
11
|
+
*
|
|
12
|
+
* @module canonArchiveRead
|
|
13
|
+
*/
|
|
14
|
+
import { execFileSync, spawn } from 'node:child_process';
|
|
15
|
+
import * as fs from 'node:fs';
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
import * as readline from 'node:readline';
|
|
18
|
+
/**
|
|
19
|
+
* Archived canonical sessions (HEAD `archive/<YYYY-MM>/canon/…`) whose logical path is NOT live — a live copy
|
|
20
|
+
* always wins. A session archived in more than one month bucket resolves to the newest bucket. Same grouping and
|
|
21
|
+
* uuid rules as discoverCanonSessions (parts-aware, events sidecars excluded, empty mains skipped).
|
|
22
|
+
*/
|
|
23
|
+
export function discoverArchivedCanonSessions(store, live, opts = {}) {
|
|
24
|
+
let out = '';
|
|
25
|
+
try {
|
|
26
|
+
out = execFileSync('git', ['-C', store, 'ls-tree', '-r', '-l', 'HEAD', '--', 'archive'], {
|
|
27
|
+
encoding: 'utf8', maxBuffer: 512 * 1024 * 1024, stdio: ['ignore', 'pipe', 'pipe'],
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
const liveRels = new Set(live);
|
|
34
|
+
const groups = new Map(); // key = rel under canon/ (logical .jsonl)
|
|
35
|
+
const sidecars = new Map();
|
|
36
|
+
for (const line of out.split('\n')) {
|
|
37
|
+
const m = line.match(/^\d{6} blob ([0-9a-f]{40,64}) +(\d+|-)\t(.+)$/);
|
|
38
|
+
if (!m)
|
|
39
|
+
continue;
|
|
40
|
+
const pm = m[3].match(/^archive\/(\d{4}-\d{2})\/canon\/(.+)$/);
|
|
41
|
+
if (!pm)
|
|
42
|
+
continue;
|
|
43
|
+
const [bucket, rest] = [pm[1], pm[2]];
|
|
44
|
+
if (rest.endsWith('.events.jsonl')) {
|
|
45
|
+
const logical = rest.replace(/\.events\.jsonl$/, '.jsonl');
|
|
46
|
+
const cur = sidecars.get(logical);
|
|
47
|
+
if (!cur || bucket > cur.bucket)
|
|
48
|
+
sidecars.set(logical, { bucket, sha: m[1] });
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const cm = rest.match(/^(.*\.jsonl)\.part-\d{4}$/);
|
|
52
|
+
const logical = cm ? cm[1] : rest;
|
|
53
|
+
if (!logical.endsWith('.jsonl'))
|
|
54
|
+
continue;
|
|
55
|
+
const g = groups.get(logical);
|
|
56
|
+
const part = { name: rest, sha: m[1], size: m[2] === '-' ? 0 : parseInt(m[2], 10) };
|
|
57
|
+
if (!g || bucket > g.bucket)
|
|
58
|
+
groups.set(logical, { bucket, parts: [part] });
|
|
59
|
+
else if (bucket === g.bucket)
|
|
60
|
+
g.parts.push(part);
|
|
61
|
+
}
|
|
62
|
+
const titles = loadTitleCache(opts.home);
|
|
63
|
+
let titlesChanged = false;
|
|
64
|
+
const sessions = [];
|
|
65
|
+
for (const [rel, g] of groups) {
|
|
66
|
+
if (liveRels.has(rel))
|
|
67
|
+
continue;
|
|
68
|
+
g.parts.sort((a, b) => a.name.localeCompare(b.name));
|
|
69
|
+
const bytes = g.parts.reduce((n, p) => n + p.size, 0);
|
|
70
|
+
if (bytes === 0)
|
|
71
|
+
continue;
|
|
72
|
+
let uuid = path.basename(rel, '.jsonl');
|
|
73
|
+
const parent = path.basename(path.dirname(rel));
|
|
74
|
+
if (!/^[0-9a-f]{8}-/i.test(uuid) && /^[0-9a-f]{8}-[0-9a-f-]{10,}$/i.test(parent))
|
|
75
|
+
uuid = parent;
|
|
76
|
+
const side = sidecars.get(rel);
|
|
77
|
+
let title;
|
|
78
|
+
if (side) {
|
|
79
|
+
if (side.sha in titles.map)
|
|
80
|
+
title = titles.map[side.sha] ?? undefined;
|
|
81
|
+
else {
|
|
82
|
+
title = titleFromEvents(store, side.sha);
|
|
83
|
+
titles.map[side.sha] = title ?? null;
|
|
84
|
+
titlesChanged = true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const repoPath = `archive/${g.bucket}/canon/${rel}`;
|
|
88
|
+
const archived = { store, path: repoPath, blobs: g.parts.map((p) => p.sha), sidecarBlob: side?.sha };
|
|
89
|
+
sessions.push({
|
|
90
|
+
uuid, rel, bytes, title, harness: rel.split('/')[0] ?? '?',
|
|
91
|
+
parts: g.parts.map((p) => `archive/${g.bucket}/canon/${p.name}`),
|
|
92
|
+
archived,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (titlesChanged)
|
|
96
|
+
saveTitleCache(titles);
|
|
97
|
+
return sessions.sort((a, b) => a.rel.localeCompare(b.rel));
|
|
98
|
+
}
|
|
99
|
+
/** Stream a session's JSONL lines — disk parts for a live session, git blobs for an archived one. */
|
|
100
|
+
export async function* sessionLines(s) {
|
|
101
|
+
if (!s.archived) {
|
|
102
|
+
for (const part of s.parts)
|
|
103
|
+
yield* linesOf(fs.createReadStream(part));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
for (const sha of s.archived.blobs)
|
|
107
|
+
yield* blobLines(s.archived.store, sha);
|
|
108
|
+
}
|
|
109
|
+
/** Stream the events sidecar's lines (nothing when the session has none). */
|
|
110
|
+
export async function* sidecarLines(s) {
|
|
111
|
+
if (s.archived) {
|
|
112
|
+
if (s.archived.sidecarBlob)
|
|
113
|
+
yield* blobLines(s.archived.store, s.archived.sidecarBlob);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const sidecar = s.parts[0].replace(/\.part-\d{4}$/, '').replace(/\.jsonl$/, '.events.jsonl');
|
|
117
|
+
if (fs.existsSync(sidecar))
|
|
118
|
+
yield* linesOf(fs.createReadStream(sidecar));
|
|
119
|
+
}
|
|
120
|
+
async function* linesOf(input) {
|
|
121
|
+
const rl = readline.createInterface({ input, crlfDelay: Infinity });
|
|
122
|
+
for await (const line of rl)
|
|
123
|
+
yield line;
|
|
124
|
+
}
|
|
125
|
+
async function* blobLines(store, sha) {
|
|
126
|
+
const child = spawn('git', ['-C', store, 'cat-file', 'blob', sha], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
127
|
+
let stderr = '';
|
|
128
|
+
child.stderr.on('data', (d) => { stderr += String(d); });
|
|
129
|
+
const exited = new Promise((resolve) => child.on('close', (code) => resolve(code ?? 1)));
|
|
130
|
+
yield* linesOf(child.stdout);
|
|
131
|
+
const code = await exited;
|
|
132
|
+
if (code !== 0)
|
|
133
|
+
throw new Error(`git cat-file blob ${sha.slice(0, 12)} failed (${code}): ${stderr.trim().slice(0, 200)}`);
|
|
134
|
+
}
|
|
135
|
+
function titleFromEvents(store, sha) {
|
|
136
|
+
let text = '';
|
|
137
|
+
try {
|
|
138
|
+
text = execFileSync('git', ['-C', store, 'cat-file', 'blob', sha], { encoding: 'utf8', maxBuffer: 256 * 1024 * 1024, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
let title;
|
|
144
|
+
for (const line of text.split('\n')) {
|
|
145
|
+
if (!line.includes('ai-title'))
|
|
146
|
+
continue;
|
|
147
|
+
try {
|
|
148
|
+
const r = JSON.parse(line);
|
|
149
|
+
if (r.type === 'ai-title' && r.aiTitle)
|
|
150
|
+
title = r.aiTitle;
|
|
151
|
+
}
|
|
152
|
+
catch { /* skip */ }
|
|
153
|
+
}
|
|
154
|
+
return title;
|
|
155
|
+
}
|
|
156
|
+
// Titles of archived sessions, keyed by the sidecar's blob id (immutable → never stale). Derived + disposable.
|
|
157
|
+
function titleCachePath(home) {
|
|
158
|
+
return path.join(home ?? process.env.HOME ?? '/home/runner/workspace', '.canon', 'archived-titles.json');
|
|
159
|
+
}
|
|
160
|
+
function loadTitleCache(home) {
|
|
161
|
+
const file = titleCachePath(home);
|
|
162
|
+
try {
|
|
163
|
+
return { file, map: JSON.parse(fs.readFileSync(file, 'utf8')) };
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return { file, map: {} };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function saveTitleCache(c) {
|
|
170
|
+
try {
|
|
171
|
+
fs.mkdirSync(path.dirname(c.file), { recursive: true });
|
|
172
|
+
fs.writeFileSync(c.file, JSON.stringify(c.map));
|
|
173
|
+
}
|
|
174
|
+
catch { /* cache only */ }
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=canonArchiveRead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonArchiveRead.js","sourceRoot":"","sources":["../src/canonArchiveRead.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAY1C;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAa,EACb,IAAsB,EACtB,OAA0B,EAAE;IAE5B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE;YACvF,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClF,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IACtB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC,CAAC,0CAA0C;IACnF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2C,CAAC;IACpE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAChE,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM;gBAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC;YAC/E,SAAS;QACX,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACtF,IAAI,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACvE,IAAI,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,IAAI,GAAG,MAAM,CAAC;QAChG,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAyB,CAAC;QAC9B,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG;gBAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;iBACjE,CAAC;gBACJ,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC;gBACrC,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACzH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;YAC1D,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YAChE,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IACD,IAAI,aAAa;QAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,qGAAqG;AACrG,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CAAC,CAAe;IACjD,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK;YAAE,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK;QAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CAAC,CAAe;IACjD,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW;YAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC9F,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,KAA4B;IAClD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE;QAAE,MAAM,IAAI,CAAC;AAC1C,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,KAAa,EAAE,GAAW;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1G,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;IAC1B,IAAI,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5H,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,GAAW;IACjD,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5J,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC7B,IAAI,KAAyB,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,SAAS;QACzC,IAAI,CAAC;YAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO;gBAAE,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACrH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+GAA+G;AAC/G,SAAS,cAAc,CAAC,IAAa;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,wBAAwB,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC;AAC3G,CAAC;AACD,SAAS,cAAc,CAAC,IAAa;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC;QAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAAC,CAAC;AAC9G,CAAC;AACD,SAAS,cAAc,CAAC,CAAuD;IAC7E,IAAI,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAC9I,CAAC"}
|
package/dist/canonGraph.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface ProjectEntry {
|
|
|
12
12
|
* Fully environment-derived ($HOME + filesystem + the store's own dirs);
|
|
13
13
|
* `projects/ROOTS.json` overrides win where present. No hardcoded roots.
|
|
14
14
|
*/
|
|
15
|
-
export declare function deriveProjectSessionMap(store: string): Record<string, ProjectEntry>;
|
|
15
|
+
export declare function deriveProjectSessionMap(store: string, archivedRels?: string[]): Record<string, ProjectEntry>;
|
|
16
16
|
/** Resolve which project a canon session belongs to (by path prefix). */
|
|
17
17
|
export declare function sessionProject(projects: Record<string, ProjectEntry>, s: CanonSession): string | undefined;
|
|
18
18
|
export interface CanonGraphOptions {
|
package/dist/canonGraph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonGraph.d.ts","sourceRoot":"","sources":["../src/canonGraph.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"canonGraph.d.ts","sourceRoot":"","sources":["../src/canonGraph.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQ1E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,0GAA0G;IAC1G,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAwCD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAoDhH;AAYD,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAO1G;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qIAAqI;IACrI,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,mGAAmG;AACnG,wBAAsB,UAAU,CAAC,CAAC,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4SrF"}
|