@engramx/client 0.16.0-rc.12 → 0.16.0-rc.14
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/README.md +31 -8
- package/dist/EngramClient.d.ts +45 -15
- package/dist/EngramClient.js +121 -70
- package/dist/EngramClient.js.map +1 -1
- package/dist/ProfileManager.d.ts +3 -19
- package/dist/ProfileManager.js +1 -58
- package/dist/ProfileManager.js.map +1 -1
- package/dist/SessionManager.d.ts +1 -1
- package/dist/SessionManager.js.map +1 -1
- package/dist/certifiedAudit.d.ts +31 -0
- package/dist/certifiedAudit.js +124 -0
- package/dist/certifiedAudit.js.map +1 -1
- package/dist/claude-setup.d.ts +15 -6
- package/dist/claude-setup.js +30 -20
- package/dist/claude-setup.js.map +1 -1
- package/dist/cli.js +103 -166
- package/dist/cli.js.map +1 -1
- package/dist/connect-config.d.ts +109 -0
- package/dist/connect-config.js +251 -0
- package/dist/connect-config.js.map +1 -0
- package/dist/encryption.js +7 -1
- package/dist/encryption.js.map +1 -1
- package/dist/evidence.d.ts +94 -0
- package/dist/evidence.js +352 -0
- package/dist/evidence.js.map +1 -0
- package/dist/idl.d.ts +16 -1
- package/dist/idl.js +9 -1
- package/dist/idl.js.map +1 -1
- package/dist/index.d.ts +11 -5
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/ledgerfsHash.d.ts +0 -2
- package/dist/ledgerfsHash.js +0 -2
- package/dist/ledgerfsHash.js.map +1 -1
- package/dist/lineage.d.ts +7 -1
- package/dist/lineage.js +7 -1
- package/dist/lineage.js.map +1 -1
- package/dist/memoryArchive.d.ts +12 -77
- package/dist/memoryArchive.js.map +1 -1
- package/dist/migrate.d.ts +1 -30
- package/dist/migrate.js +13 -136
- package/dist/migrate.js.map +1 -1
- package/dist/openclaw-local.d.ts +86 -0
- package/dist/openclaw-local.js +332 -0
- package/dist/openclaw-local.js.map +1 -0
- package/dist/openclaw-setup.d.ts +2 -2
- package/dist/openclaw-setup.js +8 -36
- package/dist/openclaw-setup.js.map +1 -1
- package/dist/path-utils.d.ts +0 -16
- package/dist/path-utils.js +4 -27
- package/dist/path-utils.js.map +1 -1
- package/dist/publicRecord.d.ts +5 -0
- package/dist/publicRecord.js +52 -0
- package/dist/publicRecord.js.map +1 -0
- package/dist/recordChain.d.ts +69 -0
- package/dist/recordChain.js +145 -0
- package/dist/recordChain.js.map +1 -0
- package/dist/schema.d.ts +6 -17
- package/dist/schema.js +6 -28
- package/dist/schema.js.map +1 -1
- package/dist/types.d.ts +50 -453
- package/dist/verify.d.ts +6 -0
- package/dist/verify.js +16 -0
- package/dist/verify.js.map +1 -0
- package/package.json +17 -5
- package/dist/offline.d.ts +0 -21
- package/dist/offline.js +0 -104
- package/dist/offline.js.map +0 -1
package/dist/openclaw-setup.js
CHANGED
|
@@ -4,6 +4,10 @@ import * as path from 'path';
|
|
|
4
4
|
import { execFileSync } from 'child_process';
|
|
5
5
|
import { atomicWriteFileSync } from './path-utils.js';
|
|
6
6
|
import { VERSION } from './version.js';
|
|
7
|
+
// ⟨2026-10-13, the bloat audit⟩ The OpenClaw directory, the memory directory and the memory repo's
|
|
8
|
+
// .gitignore come from openclaw-local.ts, the one copy (it says how the three had drifted).
|
|
9
|
+
import { getOpenClawDir, resolveMemoryDir, GITIGNORE_CONTENT } from './openclaw-local.js';
|
|
10
|
+
export { getOpenClawDir };
|
|
7
11
|
/**
|
|
8
12
|
* Read and parse an OpenClaw config file. Returns {} when the file is absent.
|
|
9
13
|
* A malformed config throws an actionable error naming the file — never a raw
|
|
@@ -29,9 +33,6 @@ function readJsonConfig(configPath) {
|
|
|
29
33
|
`Fix the JSON and re-run — the file was left untouched.`, { cause: err });
|
|
30
34
|
}
|
|
31
35
|
}
|
|
32
|
-
export function getOpenClawDir() {
|
|
33
|
-
return process.env['OPENCLAW_CONFIG_DIR'] || path.join(process.env['HOME'] || '', '.openclaw');
|
|
34
|
-
}
|
|
35
36
|
export async function setupOpenClaw(options) {
|
|
36
37
|
const openclawDir = getOpenClawDir();
|
|
37
38
|
const configPath = path.join(openclawDir, 'openclaw.json');
|
|
@@ -275,25 +276,6 @@ export class OpenClawNotFoundError extends Error {
|
|
|
275
276
|
this.name = 'OpenClawNotFoundError';
|
|
276
277
|
}
|
|
277
278
|
}
|
|
278
|
-
// ── Git versioning setup ──────────────────────────────────────────────
|
|
279
|
-
const GITIGNORE_CONTENT = [
|
|
280
|
-
'# Auto-generated by memory-engramx',
|
|
281
|
-
'*.sqlite',
|
|
282
|
-
'*.sqlite-wal',
|
|
283
|
-
'*.sqlite-shm',
|
|
284
|
-
'*.db',
|
|
285
|
-
'*.db-wal',
|
|
286
|
-
'*.db-shm',
|
|
287
|
-
'lancedb/',
|
|
288
|
-
'.DS_Store',
|
|
289
|
-
// ⟨2026-10-13, the second review⟩ The OpenClaw plugin's record of the paths it has synced with the
|
|
290
|
-
// engram, and its write-in-progress copy (integrations/openclaw/index.ts · knownPathsFile): this
|
|
291
|
-
// machine's state, not memory. The plugin's own .gitignore already left them out; this one, which
|
|
292
|
-
// `pair --git-remote` and `git-setup` write, did not, so a memory repo made that way committed and
|
|
293
|
-
// pushed the record. Held by test/openclaw-setup.test.ts.
|
|
294
|
-
'.engramx-sync.json*',
|
|
295
|
-
'',
|
|
296
|
-
].join('\n');
|
|
297
279
|
function execSyncSafe(args, cwd) {
|
|
298
280
|
try {
|
|
299
281
|
return execFileSync('git', args, { cwd, stdio: 'pipe', timeout: 10000 }).toString().trim();
|
|
@@ -320,26 +302,16 @@ export function isGitRepo(dir) {
|
|
|
320
302
|
export function getMemoryDir() {
|
|
321
303
|
const openclawDir = getOpenClawDir();
|
|
322
304
|
const configPath = path.join(openclawDir, 'openclaw.json');
|
|
323
|
-
|
|
324
|
-
return resolveMemoryDirFromConfig(openclawDir, config);
|
|
325
|
-
}
|
|
326
|
-
export function resolveMemoryDirFromConfig(openclawDir, config) {
|
|
327
|
-
const plugins = config['plugins'];
|
|
328
|
-
const entries = plugins?.['entries'];
|
|
329
|
-
const engramxEntry = entries?.['memory-engramx'];
|
|
330
|
-
const entryConfig = engramxEntry?.['config'];
|
|
331
|
-
const memoryDir = entryConfig?.['memoryDir'];
|
|
332
|
-
if (typeof memoryDir === 'string') {
|
|
333
|
-
return path.isAbsolute(memoryDir) ? memoryDir : path.join(openclawDir, memoryDir);
|
|
334
|
-
}
|
|
335
|
-
return path.join(openclawDir, 'memory');
|
|
305
|
+
return resolveMemoryDir(openclawDir, readJsonConfig(configPath));
|
|
336
306
|
}
|
|
307
|
+
// ⟨2026-10-13⟩ resolveMemoryDirFromConfig went: openclaw-local.ts resolveMemoryDir is the one
|
|
308
|
+
// rule (this copy had no store-path step, migrate's had one).
|
|
337
309
|
export function setupGitVersioning(remoteUrl) {
|
|
338
310
|
const openclawDir = getOpenClawDir();
|
|
339
311
|
const configPath = path.join(openclawDir, 'openclaw.json');
|
|
340
312
|
const config = readJsonConfig(configPath);
|
|
341
313
|
// Resolve memory dir
|
|
342
|
-
const memoryDir =
|
|
314
|
+
const memoryDir = resolveMemoryDir(openclawDir, config);
|
|
343
315
|
fs.mkdirSync(memoryDir, { recursive: true });
|
|
344
316
|
// Git init
|
|
345
317
|
const existingRepo = isGitRepo(memoryDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-setup.js","sourceRoot":"","sources":["../src/openclaw-setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openclaw-setup.js","sourceRoot":"","sources":["../src/openclaw-setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,mGAAmG;AACnG,4FAA4F;AAC5F,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;;;;GAKG;AACH,gGAAgG;AAChG,wGAAwG;AACxG,sCAAsC;AACtC,SAAS,cAAc,CAAC,UAAkB;IACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mBAAmB,UAAU,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;YACpF,wDAAwD,EAC1D,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;AACH,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAE3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,qBAAqB,CAC7B,0CAA0C,WAAW,KAAK;YACxD,gFAAgF,CACnF,CAAC;IACJ,CAAC;IAED,kGAAkG;IAClG,wFAAwF;IACxF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAEhD,eAAe;IACf,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;QAAE,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;IAEzD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC;IAE/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,YAAY,GAA2B;QAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,YAAY,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG;QACzC,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,mFAAmF;IACnF,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAExE,OAAO;QACL,UAAU;QACV,eAAe,EAAE,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY;QAC1E,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC,SAAS,kBAAkB;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE,GAAG,EAAE;YACzF,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,mEAAmE;IACnE,OAAO,CACL,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACtD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAChD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,OAAO,EAAE,CAAC;AAgB9D,8FAA8F;AAC9F,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAGnF,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,KAAK,mBAAmB,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;YAClF,CAAC,CAAC,QAAQ,CAAC,OAAO;YAClB,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAC1C,cAAsB,cAAc,EAAE;IAEtC,MAAM,KAAK,GAA8B,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,SAA+C,EAAE,EAAE;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC;IACpE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,QAAQ,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAoC,4BAA4B,EAAE;IAElE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,2FAA2F;AAC3F,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC1E,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,IAA6B;IAChE,4FAA4F;IAC5F,kGAAkG;IAClG,4EAA4E;IAC5E,OAAO,IAAI,CAAC,SAAS,KAAK,KAAK;QAC7B,CAAC,CAAC,eAAe,eAAe,oBAAoB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAC7E,CAAC,CAAC,2BAA2B,eAAe,EAAE,CAAC;AACnD,CAAC;AAED,qFAAqF;AACrF,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAEpD,YAAY,QAAmC;QAC7C,MAAM,KAAK,GAAG;YACZ,iHAAiH;YACjH,GAAG,QAAQ,CAAC,GAAG,CACb,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAChI;YACD,mLAAmL;YACnL,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,oBAAoB;YACjE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;SAC7E,CAAC;QACF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,8FAA8F;AAC9F,SAAS,cAAc,CAAC,GAAY;IAClC,MAAM,MAAM,GAAI,GAAkD,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,WAAmB;IAEnB,MAAM,MAAM,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC1D,IAAI,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IAE7D,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,6BAA6B,WAAW,iDAAiD;SAChG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,oEAAoE,qBAAqB,GAAG;SACnG,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC;QACH,YAAY,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE;YAChE,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IAED,sDAAsD;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,YAAY,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE;YAC1D,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,iEAAiE,cAAc,CAAC,GAAG,CAAC,GAAG;SAC9F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AASD,SAAS,YAAY,CAAC,IAAc,EAAE,GAAW;IAC/C,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,wDAAwD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,YAAY,CAAC,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;AAC9E,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,YAAY;IAC1B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC3D,OAAO,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,8FAA8F;AAC9F,8DAA8D;AAE9D,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C,qBAAqB;IACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACxD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,WAAW;IACX,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,aAAa;IACb,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACrD,CAAC;IAED,SAAS;IACT,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QAChF,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE;gBAC1D,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC;QAED,uDAAuD;QACvD,sEAAsE;QACtE,+DAA+D;QAC/D,gEAAgE;QAChE,kEAAkE;QAClE,IAAI,CAAC;YACH,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAM,EAAE,CAAC,CAAC;YAC7F,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC/E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,uDAAuD;gBACvD,MAAM,YAAY,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBACvD,IAAI,EAAE;qBACN,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;qBACxC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC5B,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC7C,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;oBAC1D,CAAC;oBACD,mEAAmE;oBACnE,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,oDAAoD;wBACpD,8DAA8D;wBAC9D,YAAY,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBACtF,CAAC;yBAAM,CAAC;wBACN,6CAA6C;wBAC7C,YAAY,CACV,CAAC,OAAO,EAAE,6BAA6B,EAAE,WAAW,EAAE,UAAU,YAAY,EAAE,CAAC,EAC/E,SAAS,CACV,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAwC,CAAC;IACzE,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,SAAS,CAAwD,CAAC;IAC5F,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,QAAQ,CAA6B,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC1F,mFAAmF;QACnF,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACrC,CAAC"}
|
package/dist/path-utils.d.ts
CHANGED
|
@@ -8,19 +8,3 @@ import * as fs from 'fs';
|
|
|
8
8
|
* file would corrupt state the user can't otherwise recover.
|
|
9
9
|
*/
|
|
10
10
|
export declare function atomicWriteFileSync(targetPath: string, data: string | NodeJS.ArrayBufferView, options?: fs.WriteFileOptions): void;
|
|
11
|
-
/**
|
|
12
|
-
* Resolve a relative path against a base directory and verify
|
|
13
|
-
* the result does not escape the base via traversal (e.g. `../`).
|
|
14
|
-
* Returns the resolved absolute path, or throws if it escapes.
|
|
15
|
-
*/
|
|
16
|
-
export declare function resolveAndValidate(baseDir: string, relativePath: string): string;
|
|
17
|
-
/**
|
|
18
|
-
* Validate that a string matches the expected format for an
|
|
19
|
-
* ICP canister ID (groups of lowercase alphanumeric separated by hyphens).
|
|
20
|
-
*/
|
|
21
|
-
export declare function isValidCanisterId(id: string): boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Validate that a string is safe for use as a filesystem name component
|
|
24
|
-
* (no path separators, no traversal, no null bytes).
|
|
25
|
-
*/
|
|
26
|
-
export declare function isSafePathComponent(name: string): boolean;
|
package/dist/path-utils.js
CHANGED
|
@@ -27,31 +27,8 @@ export function atomicWriteFileSync(targetPath, data, options) {
|
|
|
27
27
|
throw err;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
*/
|
|
35
|
-
export function resolveAndValidate(baseDir, relativePath) {
|
|
36
|
-
const resolved = path.resolve(baseDir, relativePath);
|
|
37
|
-
const base = baseDir.endsWith(path.sep) ? baseDir : baseDir + path.sep;
|
|
38
|
-
if (!resolved.startsWith(base) && resolved !== baseDir) {
|
|
39
|
-
throw new Error(`Path traversal detected: ${relativePath} escapes ${baseDir}`);
|
|
40
|
-
}
|
|
41
|
-
return resolved;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Validate that a string matches the expected format for an
|
|
45
|
-
* ICP canister ID (groups of lowercase alphanumeric separated by hyphens).
|
|
46
|
-
*/
|
|
47
|
-
export function isValidCanisterId(id) {
|
|
48
|
-
return /^[a-z0-9]{5}(-[a-z0-9]{5}){4}-[a-z0-9]{3}$/.test(id);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Validate that a string is safe for use as a filesystem name component
|
|
52
|
-
* (no path separators, no traversal, no null bytes).
|
|
53
|
-
*/
|
|
54
|
-
export function isSafePathComponent(name) {
|
|
55
|
-
return /^[a-zA-Z0-9_-]+$/.test(name);
|
|
56
|
-
}
|
|
30
|
+
// ⟨2026-10-13⟩ resolveAndValidate, isValidCanisterId and isSafePathComponent were removed (the bloat
|
|
31
|
+
// audit; ruled REMOVE in the ratified R3 charter diet of 2026-08-17 and never carried out). None
|
|
32
|
+
// had a caller or a test in this repo or the platform, and isValidCanisterId's pattern wanted six
|
|
33
|
+
// five-character groups, so it answered false for every real canister id.
|
|
57
34
|
//# sourceMappingURL=path-utils.js.map
|
package/dist/path-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../src/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,IAAqC,EACrC,OAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACnF,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yEAAyE;QACzE,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../src/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,IAAqC,EACrC,OAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACnF,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yEAAyE;QACzE,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,qGAAqG;AACrG,iGAAiG;AACjG,kGAAkG;AAClG,0EAA0E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Reading a record's hash-only rows as a stranger — the fetch half of `engramx verify`.
|
|
2
|
+
//
|
|
3
|
+
// ⟨ADDED 2026-10-15, the owner's ruling 6B of 2026-10-14⟩ An engram's record read
|
|
4
|
+
// (`listAuditEntries`) is public: a caller with no role, the anonymous one included, gets every entry
|
|
5
|
+
// as a hash-only row (id, digest, entry hash) and never a body. That is all a walk to a certified
|
|
6
|
+
// head needs. This reads those rows with NO identity, from `fromId` onward, a page at a time.
|
|
7
|
+
//
|
|
8
|
+
// It refuses rather than returning a short list: below the ring floor the rows are gone from the
|
|
9
|
+
// canister (the bundle captured at the time is the only copy), and the page says where the floor is.
|
|
10
|
+
import { Actor, HttpAgent } from '@icp-sdk/core/agent';
|
|
11
|
+
import { idlFactory } from './idl.js';
|
|
12
|
+
import { sealedRowOf } from './recordChain.js';
|
|
13
|
+
import { errorMessage } from './wire.js';
|
|
14
|
+
const PAGE = 500n;
|
|
15
|
+
const MAX_PAGES = 20;
|
|
16
|
+
export async function fetchSealedRows(host, canisterId, fromId, rootKey) {
|
|
17
|
+
// Anonymous: no identity is passed. The root key matters only for update calls and read_state;
|
|
18
|
+
// a query's reply is not what is being trusted here — every row is checked against the certified
|
|
19
|
+
// head by the walk, so a lying replica can only make the check FAIL, never pass.
|
|
20
|
+
const agent = await HttpAgent.create({ host, ...(rootKey ? { rootKey } : {}) });
|
|
21
|
+
const actor = Actor.createActor(idlFactory, { agent, canisterId });
|
|
22
|
+
const rows = [];
|
|
23
|
+
let hashFirstFrom = null;
|
|
24
|
+
let next = fromId;
|
|
25
|
+
for (let pages = 0; pages < MAX_PAGES; pages++) {
|
|
26
|
+
const r = await actor.listAuditEntries(next, PAGE);
|
|
27
|
+
if ('Err' in r)
|
|
28
|
+
throw new Error(`the record read refused: ${errorMessage(r.Err)}`);
|
|
29
|
+
const page = r.Ok;
|
|
30
|
+
hashFirstFrom ?? (hashFirstFrom = page.hashFirstFrom);
|
|
31
|
+
if (page.ringFloor > next) {
|
|
32
|
+
throw new Error(`the record no longer holds entry ${next} (its ring now starts at ${page.ringFloor}); ` +
|
|
33
|
+
'those rows exist only in a bundle captured while they were retained');
|
|
34
|
+
}
|
|
35
|
+
const got = page.sealed.map((s) => ({
|
|
36
|
+
id: s.id,
|
|
37
|
+
digest: Uint8Array.from(s.digest),
|
|
38
|
+
entryHash: Uint8Array.from(s.entryHash),
|
|
39
|
+
}));
|
|
40
|
+
for (const e of page.items)
|
|
41
|
+
got.push(await sealedRowOf(e));
|
|
42
|
+
got.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
|
|
43
|
+
rows.push(...got);
|
|
44
|
+
if (got.length === 0)
|
|
45
|
+
break;
|
|
46
|
+
next = got[got.length - 1].id + 1n;
|
|
47
|
+
if (next >= page.total)
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
return { rows, hashFirstFrom: hashFirstFrom ?? 0n };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=publicRecord.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publicRecord.js","sourceRoot":"","sources":["../src/publicRecord.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** A record entry's hashed fields, as the record read decodes them or as a bundle carries them. */
|
|
2
|
+
export interface RecordEntryFields {
|
|
3
|
+
id: bigint | number | string;
|
|
4
|
+
timestampNs: bigint | number | string;
|
|
5
|
+
/** A Principal (anything with `toText()`) or its text. */
|
|
6
|
+
caller: string | {
|
|
7
|
+
toText(): string;
|
|
8
|
+
};
|
|
9
|
+
/** The role as Candid decodes it (`{ Agent: null }`) or its text (`"Agent"`). */
|
|
10
|
+
callerRole: string | Record<string, null>;
|
|
11
|
+
operation: string;
|
|
12
|
+
details: string;
|
|
13
|
+
success: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** One hash-only row of the record: what a reader who may not see an entry in full is served. */
|
|
16
|
+
export interface SealedRow {
|
|
17
|
+
id: bigint;
|
|
18
|
+
digest: Uint8Array;
|
|
19
|
+
entryHash: Uint8Array;
|
|
20
|
+
}
|
|
21
|
+
/** The bytes an entry's hash covers — byte-for-byte `AuditLog.bodyOf`. */
|
|
22
|
+
export declare function recordEntryBody(e: RecordEntryFields): Uint8Array;
|
|
23
|
+
export declare function sha256(bytes: Uint8Array): Promise<Uint8Array>;
|
|
24
|
+
/** SHA-256 of an entry's body — the digest a hash-only row carries. */
|
|
25
|
+
export declare const recordDigest: (body: Uint8Array) => Promise<Uint8Array>;
|
|
26
|
+
/** The hash-first rule: SHA-256(prev ‖ digest). */
|
|
27
|
+
export declare const recordLink: (prev: Uint8Array, digest: Uint8Array) => Promise<Uint8Array>;
|
|
28
|
+
/** The rule before a chain's switch point: SHA-256(prev ‖ body). */
|
|
29
|
+
export declare const legacyRecordLink: (prev: Uint8Array, body: Uint8Array) => Promise<Uint8Array>;
|
|
30
|
+
/**
|
|
31
|
+
* One entry's hash from its fields and the head before it, under the rule its id falls on.
|
|
32
|
+
* `hashFirstFrom` is the chain's switch point as its record read serves it.
|
|
33
|
+
*/
|
|
34
|
+
export declare function recordEntryHash(e: RecordEntryFields, prev: Uint8Array, hashFirstFrom: bigint): Promise<Uint8Array>;
|
|
35
|
+
/** A full entry turned into the row a stranger would be served — for walking a page that mixes the two. */
|
|
36
|
+
export declare function sealedRowOf(e: RecordEntryFields & {
|
|
37
|
+
entryHash: Uint8Array | number[];
|
|
38
|
+
}): Promise<SealedRow>;
|
|
39
|
+
export declare const sameBytes: (a: Uint8Array, b: Uint8Array) => boolean;
|
|
40
|
+
export declare const toHexString: (b: Uint8Array) => string;
|
|
41
|
+
export type WalkResult = {
|
|
42
|
+
ok: true;
|
|
43
|
+
/** Entries walked past the starting entry to reach the certified head (0: it IS the head). */
|
|
44
|
+
distance: bigint;
|
|
45
|
+
/** The id of the entry whose hash is the certified head. Entries ever written = this + 1. */
|
|
46
|
+
headId: bigint;
|
|
47
|
+
} | {
|
|
48
|
+
ok: false;
|
|
49
|
+
/** Which link broke, in words a person can act on. */
|
|
50
|
+
why: string;
|
|
51
|
+
/** The row id the walk stopped at, when there is one. */
|
|
52
|
+
at?: bigint;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Walk from one entry's hash, through hash-only rows, to a certified head.
|
|
56
|
+
*
|
|
57
|
+
* `rows` are taken in the order given and must continue the chain from `fromId + 1` with no gap and
|
|
58
|
+
* no reordering — the walk does NOT sort them, so a removed or a swapped row is named rather than
|
|
59
|
+
* silently repaired. Leading rows at or below `fromId` are skipped (a fetched page may start earlier).
|
|
60
|
+
* Each row's digest is chained onto the running head; when the row carries an entry hash it must
|
|
61
|
+
* agree. The walk succeeds the moment the running head equals `certifiedHead`.
|
|
62
|
+
*/
|
|
63
|
+
export declare function walkToCertifiedHead(args: {
|
|
64
|
+
fromId: bigint;
|
|
65
|
+
fromHash: Uint8Array;
|
|
66
|
+
rows: SealedRow[];
|
|
67
|
+
certifiedHead: Uint8Array;
|
|
68
|
+
hashFirstFrom: bigint;
|
|
69
|
+
}): Promise<WalkResult>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// The chained record's hash contract, and the walk from one entry to a certified head.
|
|
2
|
+
//
|
|
3
|
+
// ⟨ADDED 2026-10-15, the owner's ruling 6B of 2026-10-14⟩ WHY THIS IS PUBLIC. Every engram, the
|
|
4
|
+
// registry and the market keep a chained record: each entry's hash commits to the head before it,
|
|
5
|
+
// and the canister certifies only the newest head. A stranger who wants to check ONE entry against
|
|
6
|
+
// the subnet's signature has to walk from that entry to a certified head. Under the rule this file
|
|
7
|
+
// mirrors, each entry is HASHED FIRST, THEN CHAINED:
|
|
8
|
+
//
|
|
9
|
+
// body = id|timestampNs|caller|role|operation|details|success (success = "1" | "0")
|
|
10
|
+
// digest = SHA-256(body)
|
|
11
|
+
// entryHash = SHA-256(previous head ‖ digest) (genesis head = empty)
|
|
12
|
+
//
|
|
13
|
+
// so the walk passes through every other entry knowing only its 32-byte digest — which the record
|
|
14
|
+
// read (`listAuditEntries`) serves to anyone as a hash-only row — and never its body. Entries a
|
|
15
|
+
// chain recorded before its upgrade to this rule were hashed SHA-256(previous head ‖ body); the read
|
|
16
|
+
// says where each chain switched (`hashFirstFrom`), and a walk through an older entry needs its body.
|
|
17
|
+
//
|
|
18
|
+
// The Motoko half is src/shared/AuditLog.mo (`bodyOf`, `digestOf`, `link`, `legacyLink`). The two
|
|
19
|
+
// are locked by the same known-answer vector, computed outside both (Python's hashlib): this
|
|
20
|
+
// package's test/record-chain.test.ts and the repo's test/audit-log-hash-first.test.mo assert the
|
|
21
|
+
// same constants. A diff in either is a contract change, never a routine test update.
|
|
22
|
+
//
|
|
23
|
+
// BROWSER-SAFE: hashing is WebCrypto (`crypto.subtle`), present in every browser and in Node ≥ 19;
|
|
24
|
+
// nothing here imports a Node module (test/browser-safe-subpaths.test.ts walks `./verify`'s graph).
|
|
25
|
+
const utf8 = new TextEncoder();
|
|
26
|
+
const principalText = (p) => typeof p === 'string' ? p : p.toText();
|
|
27
|
+
const roleText = (r) => typeof r === 'string' ? r : (Object.keys(r)[0] ?? '');
|
|
28
|
+
/** The bytes an entry's hash covers — byte-for-byte `AuditLog.bodyOf`. */
|
|
29
|
+
export function recordEntryBody(e) {
|
|
30
|
+
return utf8.encode([
|
|
31
|
+
BigInt(e.id).toString(),
|
|
32
|
+
BigInt(e.timestampNs).toString(),
|
|
33
|
+
principalText(e.caller),
|
|
34
|
+
roleText(e.callerRole),
|
|
35
|
+
e.operation,
|
|
36
|
+
e.details,
|
|
37
|
+
e.success ? '1' : '0',
|
|
38
|
+
].join('|'));
|
|
39
|
+
}
|
|
40
|
+
function concat(a, b) {
|
|
41
|
+
const out = new Uint8Array(a.length + b.length);
|
|
42
|
+
out.set(a, 0);
|
|
43
|
+
out.set(b, a.length);
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
export async function sha256(bytes) {
|
|
47
|
+
return new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', bytes));
|
|
48
|
+
}
|
|
49
|
+
/** SHA-256 of an entry's body — the digest a hash-only row carries. */
|
|
50
|
+
export const recordDigest = (body) => sha256(body);
|
|
51
|
+
/** The hash-first rule: SHA-256(prev ‖ digest). */
|
|
52
|
+
export const recordLink = (prev, digest) => sha256(concat(prev, digest));
|
|
53
|
+
/** The rule before a chain's switch point: SHA-256(prev ‖ body). */
|
|
54
|
+
export const legacyRecordLink = (prev, body) => sha256(concat(prev, body));
|
|
55
|
+
/**
|
|
56
|
+
* One entry's hash from its fields and the head before it, under the rule its id falls on.
|
|
57
|
+
* `hashFirstFrom` is the chain's switch point as its record read serves it.
|
|
58
|
+
*/
|
|
59
|
+
export async function recordEntryHash(e, prev, hashFirstFrom) {
|
|
60
|
+
const body = recordEntryBody(e);
|
|
61
|
+
return BigInt(e.id) >= hashFirstFrom
|
|
62
|
+
? recordLink(prev, await recordDigest(body))
|
|
63
|
+
: legacyRecordLink(prev, body);
|
|
64
|
+
}
|
|
65
|
+
/** A full entry turned into the row a stranger would be served — for walking a page that mixes the two. */
|
|
66
|
+
export async function sealedRowOf(e) {
|
|
67
|
+
return {
|
|
68
|
+
id: BigInt(e.id),
|
|
69
|
+
digest: await recordDigest(recordEntryBody(e)),
|
|
70
|
+
entryHash: Uint8Array.from(e.entryHash),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export const sameBytes = (a, b) => a.length === b.length && a.every((x, i) => x === b[i]);
|
|
74
|
+
export const toHexString = (b) => Array.from(b, (x) => x.toString(16).padStart(2, '0')).join('');
|
|
75
|
+
/**
|
|
76
|
+
* Walk from one entry's hash, through hash-only rows, to a certified head.
|
|
77
|
+
*
|
|
78
|
+
* `rows` are taken in the order given and must continue the chain from `fromId + 1` with no gap and
|
|
79
|
+
* no reordering — the walk does NOT sort them, so a removed or a swapped row is named rather than
|
|
80
|
+
* silently repaired. Leading rows at or below `fromId` are skipped (a fetched page may start earlier).
|
|
81
|
+
* Each row's digest is chained onto the running head; when the row carries an entry hash it must
|
|
82
|
+
* agree. The walk succeeds the moment the running head equals `certifiedHead`.
|
|
83
|
+
*/
|
|
84
|
+
export async function walkToCertifiedHead(args) {
|
|
85
|
+
const { fromId, fromHash, certifiedHead, hashFirstFrom } = args;
|
|
86
|
+
if (sameBytes(fromHash, certifiedHead))
|
|
87
|
+
return { ok: true, distance: 0n, headId: fromId };
|
|
88
|
+
const rows = args.rows;
|
|
89
|
+
let i = 0;
|
|
90
|
+
while (i < rows.length && rows[i].id <= fromId)
|
|
91
|
+
i++;
|
|
92
|
+
let h = fromHash;
|
|
93
|
+
let expected = fromId + 1n;
|
|
94
|
+
for (; i < rows.length; i++, expected++) {
|
|
95
|
+
const row = rows[i];
|
|
96
|
+
if (row.id !== expected) {
|
|
97
|
+
const next = rows[i + 1];
|
|
98
|
+
if (next && next.id === expected && row.id === expected + 1n) {
|
|
99
|
+
return {
|
|
100
|
+
ok: false,
|
|
101
|
+
at: expected,
|
|
102
|
+
why: `rows ${expected} and ${row.id} are swapped: the chain is walked in id order, and a reordered row breaks it`,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
if (row.id > expected) {
|
|
106
|
+
return {
|
|
107
|
+
ok: false,
|
|
108
|
+
at: expected,
|
|
109
|
+
why: `row ${expected} is missing: the rows jump from ${expected - 1n} to ${row.id}, and every entry between the one checked and the certified head is needed`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
ok: false,
|
|
114
|
+
at: row.id,
|
|
115
|
+
why: `row ${row.id} is out of order: it comes after row ${expected - 1n}`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (row.id < hashFirstFrom) {
|
|
119
|
+
return {
|
|
120
|
+
ok: false,
|
|
121
|
+
at: row.id,
|
|
122
|
+
why: `row ${row.id} was hashed under the record's older rule (below its switch point ${hashFirstFrom}): a walk through it needs its body, not its digest`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const next = await recordLink(h, row.digest);
|
|
126
|
+
if (row.entryHash.length > 0 && !sameBytes(next, row.entryHash)) {
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
at: row.id,
|
|
130
|
+
why: `row ${row.id} does not chain: SHA-256(previous head ‖ its digest) is ${toHexString(next)}, its entry hash is ${toHexString(row.entryHash)} — the row was altered, or a row before it was`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
h = next;
|
|
134
|
+
if (sameBytes(h, certifiedHead))
|
|
135
|
+
return { ok: true, distance: expected - fromId, headId: expected };
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
ok: false,
|
|
139
|
+
at: expected,
|
|
140
|
+
why: `the certified head was not reached: walking ${expected - 1n - fromId} row(s) from entry ${fromId} ` +
|
|
141
|
+
`(to id ${expected - 1n}) never produced it. Either the rows stop short of the certified head, or the ` +
|
|
142
|
+
`certificate certifies a head from BEFORE this entry`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=recordChain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordChain.js","sourceRoot":"","sources":["../src/recordChain.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
* Formalises the memory layout so that Claude, OpenClaw, and any future
|
|
5
5
|
* MCP-compatible platform share the same vocabulary for what files mean
|
|
6
6
|
* and where they live inside an engram canister.
|
|
7
|
+
*
|
|
8
|
+
* ⟨2026-10-13⟩ CONFIG, DEFAULT_PROTECTED_PATHS, KNOWLEDGE_PATHS, PLATFORMS (and its Platform type)
|
|
9
|
+
* and the isIdentityPath / isKnowledgePath / isSessionPath / isConfigPath helpers were removed in
|
|
10
|
+
* the bloat audit: nothing in this repo or the platform referenced them, and nothing tested them.
|
|
11
|
+
* DEFAULT_PROTECTED_PATHS also described a default protected list the engram does not have (an
|
|
12
|
+
* engram's protected-path list starts empty).
|
|
7
13
|
*/
|
|
8
14
|
export declare const IDENTITY: {
|
|
9
15
|
/** Agent personality & principles (owner-write-only) */
|
|
@@ -27,27 +33,10 @@ export declare const SESSIONS: {
|
|
|
27
33
|
/** Session directory prefix for a platform */
|
|
28
34
|
readonly platformDir: (platform: string) => string;
|
|
29
35
|
};
|
|
30
|
-
export declare const CONFIG: {
|
|
31
|
-
/** Platform-specific config file */
|
|
32
|
-
readonly platform: (name: string) => string;
|
|
33
|
-
readonly OPENCLAW: "config/openclaw.json";
|
|
34
|
-
readonly CLAUDE: "config/claude.json";
|
|
35
|
-
};
|
|
36
|
-
/** Default protected paths (owner-write-only). */
|
|
37
|
-
export declare const DEFAULT_PROTECTED_PATHS: readonly ["identity/soul.md", "identity/user.md"];
|
|
38
36
|
/** All well-known identity paths for batch reads. */
|
|
39
37
|
export declare const IDENTITY_PATHS: readonly ["identity/soul.md", "identity/user.md", "identity/preferences.md"];
|
|
40
|
-
/** All well-known knowledge paths for batch reads. */
|
|
41
|
-
export declare const KNOWLEDGE_PATHS: readonly ["knowledge/lessons.md", "knowledge/decisions.md"];
|
|
42
38
|
/** All well-known profile paths (identity + lessons). */
|
|
43
39
|
export declare const PROFILE_PATHS: readonly ["identity/soul.md", "identity/user.md", "identity/preferences.md", "knowledge/lessons.md"];
|
|
44
|
-
export declare const PLATFORMS: readonly ["claude", "openclaw", "cursor", "windsurf"];
|
|
45
|
-
export type Platform = (typeof PLATFORMS)[number];
|
|
46
|
-
/** Check whether a path falls under a schema namespace. */
|
|
47
|
-
export declare function isIdentityPath(path: string): boolean;
|
|
48
|
-
export declare function isKnowledgePath(path: string): boolean;
|
|
49
|
-
export declare function isSessionPath(path: string): boolean;
|
|
50
|
-
export declare function isConfigPath(path: string): boolean;
|
|
51
40
|
/** Extract the platform name from a session path, or null. */
|
|
52
41
|
export declare function sessionPlatform(path: string): string | null;
|
|
53
42
|
/** Today's date as YYYY-MM-DD. */
|
package/dist/schema.js
CHANGED
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
* Formalises the memory layout so that Claude, OpenClaw, and any future
|
|
5
5
|
* MCP-compatible platform share the same vocabulary for what files mean
|
|
6
6
|
* and where they live inside an engram canister.
|
|
7
|
+
*
|
|
8
|
+
* ⟨2026-10-13⟩ CONFIG, DEFAULT_PROTECTED_PATHS, KNOWLEDGE_PATHS, PLATFORMS (and its Platform type)
|
|
9
|
+
* and the isIdentityPath / isKnowledgePath / isSessionPath / isConfigPath helpers were removed in
|
|
10
|
+
* the bloat audit: nothing in this repo or the platform referenced them, and nothing tested them.
|
|
11
|
+
* DEFAULT_PROTECTED_PATHS also described a default protected list the engram does not have (an
|
|
12
|
+
* engram's protected-path list starts empty).
|
|
7
13
|
*/
|
|
8
14
|
// ── Path constants ─────────────────────────────────────────────
|
|
9
15
|
export const IDENTITY = {
|
|
@@ -38,25 +44,10 @@ export const SESSIONS = {
|
|
|
38
44
|
return `sessions/${platform}/`;
|
|
39
45
|
},
|
|
40
46
|
};
|
|
41
|
-
export const CONFIG = {
|
|
42
|
-
/** Platform-specific config file */
|
|
43
|
-
platform: (name) => {
|
|
44
|
-
validatePlatform(name);
|
|
45
|
-
return `config/${name}.json`;
|
|
46
|
-
},
|
|
47
|
-
OPENCLAW: 'config/openclaw.json',
|
|
48
|
-
CLAUDE: 'config/claude.json',
|
|
49
|
-
};
|
|
50
|
-
/** Default protected paths (owner-write-only). */
|
|
51
|
-
export const DEFAULT_PROTECTED_PATHS = [IDENTITY.SOUL, IDENTITY.USER];
|
|
52
47
|
/** All well-known identity paths for batch reads. */
|
|
53
48
|
export const IDENTITY_PATHS = [IDENTITY.SOUL, IDENTITY.USER, IDENTITY.PREFERENCES];
|
|
54
|
-
/** All well-known knowledge paths for batch reads. */
|
|
55
|
-
export const KNOWLEDGE_PATHS = [KNOWLEDGE.LESSONS, KNOWLEDGE.DECISIONS];
|
|
56
49
|
/** All well-known profile paths (identity + lessons). */
|
|
57
50
|
export const PROFILE_PATHS = [...IDENTITY_PATHS, KNOWLEDGE.LESSONS];
|
|
58
|
-
// ── Known platforms ────────────────────────────────────────────
|
|
59
|
-
export const PLATFORMS = ['claude', 'openclaw', 'cursor', 'windsurf'];
|
|
60
51
|
// ── Validators ─────────────────────────────────────────────────
|
|
61
52
|
const SAFE_NAME_RE = /^[a-z0-9][a-z0-9_-]{0,62}$/;
|
|
62
53
|
const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
@@ -76,19 +67,6 @@ function validateDate(date) {
|
|
|
76
67
|
}
|
|
77
68
|
}
|
|
78
69
|
// ── Helpers ────────────────────────────────────────────────────
|
|
79
|
-
/** Check whether a path falls under a schema namespace. */
|
|
80
|
-
export function isIdentityPath(path) {
|
|
81
|
-
return path.startsWith('identity/');
|
|
82
|
-
}
|
|
83
|
-
export function isKnowledgePath(path) {
|
|
84
|
-
return path.startsWith('knowledge/');
|
|
85
|
-
}
|
|
86
|
-
export function isSessionPath(path) {
|
|
87
|
-
return path.startsWith('sessions/');
|
|
88
|
-
}
|
|
89
|
-
export function isConfigPath(path) {
|
|
90
|
-
return path.startsWith('config/');
|
|
91
|
-
}
|
|
92
70
|
/** Extract the platform name from a session path, or null. */
|
|
93
71
|
export function sessionPlatform(path) {
|
|
94
72
|
const match = path.match(/^sessions\/([a-z0-9_-]+)\//);
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,kEAAkE;AAElE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,wDAAwD;IACxD,IAAI,EAAE,kBAAkB;IACxB,iEAAiE;IACjE,IAAI,EAAE,kBAAkB;IACxB,wDAAwD;IACxD,WAAW,EAAE,yBAAyB;CAC9B,CAAC;AAEX,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,sDAAsD;IACtD,OAAO,EAAE,sBAAsB;IAC/B,kCAAkC;IAClC,SAAS,EAAE,wBAAwB;IACnC,qCAAqC;IACrC,MAAM,EAAE,CAAC,KAAa,EAAU,EAAE;QAChC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,qBAAqB,KAAK,KAAK,CAAC;IACzC,CAAC;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,uDAAuD;IACvD,OAAO,EAAE,CAAC,QAAgB,EAAE,IAAY,EAAU,EAAE;QAClD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,YAAY,QAAQ,IAAI,IAAI,KAAK,CAAC;IAC3C,CAAC;IACD,8CAA8C;IAC9C,WAAW,EAAE,CAAC,QAAgB,EAAU,EAAE;QACxC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO,YAAY,QAAQ,GAAG,CAAC;IACjC,CAAC;CACO,CAAC;AAEX,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAU,CAAC;AAE5F,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAG,cAAc,EAAE,SAAS,CAAC,OAAO,CAAU,CAAC;AAE7E,kEAAkE;AAElE,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAClD,MAAM,OAAO,GAAG,qBAAqB,CAAC;AAEtC,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,wEAAwE,CAChG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,wEAAwE,CACtG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,+BAA+B,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,kEAAkE;AAElE,8DAA8D;AAC9D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,KAAK;IACnB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC"}
|