@engramx/client 0.16.0-rc.2 → 0.16.0-rc.21
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 +69 -8
- package/dist/EngramClient.d.ts +60 -16
- package/dist/EngramClient.js +139 -70
- package/dist/EngramClient.js.map +1 -1
- package/dist/MarketClient.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/actionReceipt.d.ts +8 -0
- package/dist/actionReceipt.js +8 -0
- package/dist/actionReceipt.js.map +1 -1
- package/dist/birthChain.d.ts +87 -0
- package/dist/birthChain.js +233 -0
- package/dist/birthChain.js.map +1 -0
- package/dist/cache.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 -17
- package/dist/claude-setup.js.map +1 -1
- package/dist/cli.d.ts +7 -1
- package/dist/cli.js +212 -187
- 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.d.ts +4 -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 +21 -3
- package/dist/idl.js +34 -4
- package/dist/idl.js.map +1 -1
- package/dist/index.d.ts +13 -6
- package/dist/index.js +22 -5
- 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 +77 -98
- package/dist/memoryArchive.js +58 -31
- package/dist/memoryArchive.js.map +1 -1
- package/dist/migrate.d.ts +18 -30
- package/dist/migrate.js +42 -136
- package/dist/migrate.js.map +1 -1
- package/dist/openEngram.d.ts +7 -0
- package/dist/openEngram.js +27 -3
- package/dist/openEngram.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 +82 -3
- package/dist/openclaw-setup.js +162 -50
- package/dist/openclaw-setup.js.map +1 -1
- package/dist/pair.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 +11 -22
- package/dist/schema.js +6 -28
- package/dist/schema.js.map +1 -1
- package/dist/types.d.ts +67 -451
- package/dist/verify.d.ts +8 -0
- package/dist/verify.js +19 -0
- package/dist/verify.js.map +1 -0
- package/dist/version.d.ts +22 -0
- package/dist/version.js +22 -0
- package/dist/version.js.map +1 -1
- package/package.json +27 -12
- package/dist/generated/engram.idl.d.ts +0 -6
- package/dist/generated/engram.idl.js +0 -1366
- package/dist/generated/engram.idl.js.map +0 -1
- package/dist/generated/market.idl.d.ts +0 -6
- package/dist/generated/market.idl.js +0 -557
- package/dist/generated/market.idl.js.map +0 -1
- package/dist/generated/registry.idl.d.ts +0 -6
- package/dist/generated/registry.idl.js +0 -510
- package/dist/generated/registry.idl.js.map +0 -1
- 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
|
@@ -3,6 +3,11 @@ import * as net from 'net';
|
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import { execFileSync } from 'child_process';
|
|
5
5
|
import { atomicWriteFileSync } from './path-utils.js';
|
|
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 };
|
|
6
11
|
/**
|
|
7
12
|
* Read and parse an OpenClaw config file. Returns {} when the file is absent.
|
|
8
13
|
* A malformed config throws an actionable error naming the file — never a raw
|
|
@@ -28,9 +33,6 @@ function readJsonConfig(configPath) {
|
|
|
28
33
|
`Fix the JSON and re-run — the file was left untouched.`, { cause: err });
|
|
29
34
|
}
|
|
30
35
|
}
|
|
31
|
-
export function getOpenClawDir() {
|
|
32
|
-
return process.env['OPENCLAW_CONFIG_DIR'] || path.join(process.env['HOME'] || '', '.openclaw');
|
|
33
|
-
}
|
|
34
36
|
export async function setupOpenClaw(options) {
|
|
35
37
|
const openclawDir = getOpenClawDir();
|
|
36
38
|
const configPath = path.join(openclawDir, 'openclaw.json');
|
|
@@ -38,8 +40,9 @@ export async function setupOpenClaw(options) {
|
|
|
38
40
|
throw new OpenClawNotFoundError(`OpenClaw config directory not found at ${openclawDir}.\n` +
|
|
39
41
|
`Install OpenClaw first, or set OPENCLAW_CONFIG_DIR if using a custom location.`);
|
|
40
42
|
}
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
+
// Install the plugin — or refuse, before openclaw.json is touched, when a different version of it
|
|
44
|
+
// is already installed (OpenClawPluginOutdatedError; outdatedOpenClawPlugins says why).
|
|
45
|
+
const plugin = await installPlugin(openclawDir);
|
|
43
46
|
// Merge config
|
|
44
47
|
const config = readJsonConfig(configPath);
|
|
45
48
|
// Deep merge plugin config
|
|
@@ -70,8 +73,9 @@ export async function setupOpenClaw(options) {
|
|
|
70
73
|
atomicWriteFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
71
74
|
return {
|
|
72
75
|
configPath,
|
|
73
|
-
pluginInstalled:
|
|
74
|
-
pluginMethod,
|
|
76
|
+
pluginInstalled: plugin.method === 'cli' || plugin.method === 'manual-npm',
|
|
77
|
+
pluginMethod: plugin.method,
|
|
78
|
+
...(plugin.note !== undefined ? { pluginNote: plugin.note } : {}),
|
|
75
79
|
};
|
|
76
80
|
}
|
|
77
81
|
const OPENCLAW_GATEWAY_PORT = 18789;
|
|
@@ -89,30 +93,159 @@ function isGatewayReachable() {
|
|
|
89
93
|
});
|
|
90
94
|
});
|
|
91
95
|
}
|
|
92
|
-
function isPluginInstalled(openclawDir) {
|
|
93
|
-
// Check if already installed in the extensions dir for this config
|
|
94
|
-
const extPkg = path.join(openclawDir, 'extensions', 'memory-engramx', 'node_modules', '@engramx', 'openclaw');
|
|
95
|
-
return fs.existsSync(extPkg);
|
|
96
|
-
}
|
|
97
96
|
function isOpenClawConfigured(openclawDir) {
|
|
98
97
|
// A real OpenClaw installation has openclaw.json or an agents/ dir
|
|
99
98
|
return (fs.existsSync(path.join(openclawDir, 'openclaw.json')) ||
|
|
100
99
|
fs.existsSync(path.join(openclawDir, 'agents')));
|
|
101
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* The plugin `pair --target openclaw` installs: `@engramx/openclaw@<this kit's version>`.
|
|
103
|
+
*
|
|
104
|
+
* ⟨ADDED 2026-10-13, on the review of the owner's "fix … the MCP version in rc.12"⟩ WHY. Both installs
|
|
105
|
+
* below named the bare `@engramx/openclaw`, which installs npm's `latest` — the last FINAL release,
|
|
106
|
+
* 0.15.0 while 0.16.0's candidates soak under `next` (npm dist-tags, read 2026-10-13) — a plugin that
|
|
107
|
+
* cannot talk to this release's engram. The packages are released in lockstep (version.ts), so this
|
|
108
|
+
* kit's version is the plugin's. OpenClaw's installer takes the versioned name: its registry-spec
|
|
109
|
+
* parser (openclaw 2026.10.3, the npm `latest` read that day, `parseRegistryNpmSpecResult`) accepts
|
|
110
|
+
* `<name>@<exact version>`, and for a pre-release such as `0.16.0-rc.12` only when it is named
|
|
111
|
+
* exactly — a bare name that resolved to one is refused — while `@engramx/openclaw@<version>` (this
|
|
112
|
+
* kit's unread-version blank) is refused — neither an exact version nor a tag — as npm refuses it.
|
|
113
|
+
* Measured by running that parser on these four spellings (the fix notes keep the log).
|
|
114
|
+
* WHAT WOULD MAKE THIS WRONG: the packages no longer sharing one version number, or an OpenClaw
|
|
115
|
+
* release whose installer refuses an exact version. Held by test/openclaw-plugin-pinned.test.ts.
|
|
116
|
+
*/
|
|
117
|
+
export const OPENCLAW_PLUGIN = `@engramx/openclaw@${VERSION}`;
|
|
118
|
+
/** The plugin's version from its package.json; null when unreadable or not this package's. */
|
|
119
|
+
function readPluginVersion(dir) {
|
|
120
|
+
try {
|
|
121
|
+
const manifest = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8'));
|
|
122
|
+
return manifest.name === '@engramx/openclaw' && typeof manifest.version === 'string'
|
|
123
|
+
? manifest.version
|
|
124
|
+
: null;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Every copy of @engramx/openclaw in the places a plugin install puts it, under `openclawDir`:
|
|
132
|
+
* pair's own npm fallback (`extensions/memory-engramx`), and OpenClaw's installer — one npm project
|
|
133
|
+
* per package under `npm/projects/` (a package keeps more than one after an upgrade: OpenClaw's
|
|
134
|
+
* docs say upgrades "retain generation paths that running plugins may still need"), and the single
|
|
135
|
+
* `npm/` project it used before 2026.5.28. Read from openclaw 2026.10.3's own code
|
|
136
|
+
* (`resolvePluginNpmProjectDir`, `resolvePluginInstallRoots`) and docs
|
|
137
|
+
* (plugins/dependency-resolution.md, "Install roots"); no real OpenClaw was run.
|
|
138
|
+
* WHAT WOULD MAKE THIS WRONG: an OpenClaw that keeps its plugins elsewhere — `OPENCLAW_STATE_DIR`
|
|
139
|
+
* set apart from the folder pair reads (OPENCLAW_CONFIG_DIR or ~/.openclaw), a plugin loaded from a
|
|
140
|
+
* `plugins.load.paths` entry or a workspace's `.openclaw/extensions` — is not seen here.
|
|
141
|
+
*/
|
|
142
|
+
export function findInstalledOpenClawPlugins(openclawDir = getOpenClawDir()) {
|
|
143
|
+
const found = [];
|
|
144
|
+
const look = (project, installer) => {
|
|
145
|
+
const dir = path.join(project, 'node_modules', '@engramx', 'openclaw');
|
|
146
|
+
if (fs.existsSync(dir))
|
|
147
|
+
found.push({ dir, project, version: readPluginVersion(dir), installer });
|
|
148
|
+
};
|
|
149
|
+
look(path.join(openclawDir, 'extensions', 'memory-engramx'), 'npm');
|
|
150
|
+
look(path.join(openclawDir, 'npm'), 'openclaw');
|
|
151
|
+
let projects = [];
|
|
152
|
+
try {
|
|
153
|
+
projects = fs.readdirSync(path.join(openclawDir, 'npm', 'projects')).sort();
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// No OpenClaw-installed plugins.
|
|
157
|
+
}
|
|
158
|
+
for (const name of projects)
|
|
159
|
+
look(path.join(openclawDir, 'npm', 'projects', name), 'openclaw');
|
|
160
|
+
return found;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* The copies `pair` will not point at an engram: any in its own npm folder that is not this kit's
|
|
164
|
+
* version, and OpenClaw's copies when none of them is (an older folder beside a current one is what
|
|
165
|
+
* an upgrade leaves, so it is not counted against a current copy).
|
|
166
|
+
*
|
|
167
|
+
* ⟨ADDED 2026-10-13, the second review of the owner's "fix the pairing migration"⟩ WHY. pair skipped
|
|
168
|
+
* the install whenever any @engramx/openclaw sat in its npm folder, whatever its version, then wrote
|
|
169
|
+
* openclaw.json and printed "Installed EngramX plugin for OpenClaw" — and on a gateway that was not
|
|
170
|
+
* running, the same line over no install at all. The plugin that ran at OpenClaw's next start was
|
|
171
|
+
* the one already there, and one from 0.16.0-rc.11 or earlier deletes every local memory file the
|
|
172
|
+
* engram does not list before it pushes (unless more than five and more than half would go) — the
|
|
173
|
+
* files `pair` now leaves where they are without --migrate. So a different version is never
|
|
174
|
+
* configured: `pair` stops before pairing and prints the command that upgrades it
|
|
175
|
+
* (cli.ts · Step 1's check), and setupOpenClaw refuses the same before writing openclaw.json.
|
|
176
|
+
* Refusing, not upgrading in place: the refusal comes before the invite is used, so running the
|
|
177
|
+
* same pair command again afterwards works, and pair runs nothing on someone's OpenClaw that it
|
|
178
|
+
* cannot check (how OpenClaw's `plugins update` behaves without a terminal was not run). Held by
|
|
179
|
+
* test/openclaw-plugin-pinned.test.ts and test/pair-migrate.test.ts.
|
|
180
|
+
* WHAT WOULD MAKE THIS WRONG: a copy outside the places findInstalledOpenClawPlugins reads (it
|
|
181
|
+
* says which), or OpenClaw loading an older retained folder over a current one.
|
|
182
|
+
*/
|
|
183
|
+
export function outdatedOpenClawPlugins(copies = findInstalledOpenClawPlugins()) {
|
|
184
|
+
const npm = copies.filter((c) => c.installer === 'npm' && c.version !== VERSION);
|
|
185
|
+
const openclaw = copies.filter((c) => c.installer === 'openclaw');
|
|
186
|
+
return [...npm, ...(openclaw.some((c) => c.version === VERSION) ? [] : openclaw)];
|
|
187
|
+
}
|
|
188
|
+
/** A path as one shell word: bare when it is safe to read that way, else single-quoted. */
|
|
189
|
+
function shellWord(p) {
|
|
190
|
+
return /^[\w@%+=:,./-]+$/.test(p) ? p : `'${p.replace(/'/g, `'\\''`)}'`;
|
|
191
|
+
}
|
|
192
|
+
/** The command that puts `copy` at this kit's version, exact, to run as printed. */
|
|
193
|
+
export function pluginUpgradeCommand(copy) {
|
|
194
|
+
// npm: `--prefix` on the command line runs a local install in that folder (npm's own config
|
|
195
|
+
// docs). OpenClaw: `plugins update <npm spec>` resolves the spec to the tracked install and moves
|
|
196
|
+
// it to that version (OpenClaw's docs/cli/plugins/uninstall-and-update.md).
|
|
197
|
+
return copy.installer === 'npm'
|
|
198
|
+
? `npm install ${OPENCLAW_PLUGIN} --save --prefix ${shellWord(copy.project)}`
|
|
199
|
+
: `openclaw plugins update ${OPENCLAW_PLUGIN}`;
|
|
200
|
+
}
|
|
201
|
+
/** pair's refusal: each copy and its version, and the commands that upgrade them. */
|
|
202
|
+
export class OpenClawPluginOutdatedError extends Error {
|
|
203
|
+
constructor(outdated) {
|
|
204
|
+
const lines = [
|
|
205
|
+
`A different version of the EngramX plugin for OpenClaw is installed, and pair will not set it up for an engram:`,
|
|
206
|
+
...outdated.map((c) => ` ${c.dir} is ${c.version === null ? 'a version that could not be read' : `@engramx/openclaw@${c.version}`}, not ${VERSION}`),
|
|
207
|
+
`A plugin from 0.16.0-rc.11 or earlier deletes local memory files the engram does not list when OpenClaw next starts, and another version may not work with this release's engram.`,
|
|
208
|
+
outdated.length === 1 ? `Upgrade it with:` : `Upgrade them with:`,
|
|
209
|
+
...[...new Set(outdated.map(pluginUpgradeCommand))].map((cmd) => ` ${cmd}`),
|
|
210
|
+
];
|
|
211
|
+
super(lines.join('\n'));
|
|
212
|
+
this.name = 'OpenClawPluginOutdatedError';
|
|
213
|
+
this.outdated = outdated;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/** The first line worth showing from a failed installer: its stderr's, else its message's. */
|
|
217
|
+
function firstErrorLine(err) {
|
|
218
|
+
const stderr = err?.stderr?.toString() ?? '';
|
|
219
|
+
const line = stderr.split('\n').find((l) => l.trim() !== '');
|
|
220
|
+
return (line ?? (err instanceof Error ? err.message : String(err))).trim();
|
|
221
|
+
}
|
|
102
222
|
async function installPlugin(openclawDir) {
|
|
103
|
-
|
|
104
|
-
|
|
223
|
+
const copies = findInstalledOpenClawPlugins(openclawDir);
|
|
224
|
+
const outdated = outdatedOpenClawPlugins(copies);
|
|
225
|
+
if (outdated.length > 0)
|
|
226
|
+
throw new OpenClawPluginOutdatedError(outdated);
|
|
227
|
+
const current = copies.find((c) => c.version === VERSION);
|
|
228
|
+
if (current)
|
|
229
|
+
return { method: 'current', note: current.dir };
|
|
230
|
+
if (!isOpenClawConfigured(openclawDir)) {
|
|
231
|
+
return {
|
|
232
|
+
method: 'skipped',
|
|
233
|
+
note: `OpenClaw is not set up in ${openclawDir} yet (it has no openclaw.json or agents folder)`,
|
|
234
|
+
};
|
|
105
235
|
}
|
|
106
|
-
if (!
|
|
107
|
-
return
|
|
236
|
+
if (!(await isGatewayReachable())) {
|
|
237
|
+
return {
|
|
238
|
+
method: 'skipped',
|
|
239
|
+
note: `OpenClaw's gateway is not running (nothing answered on 127.0.0.1:${OPENCLAW_GATEWAY_PORT})`,
|
|
240
|
+
};
|
|
108
241
|
}
|
|
109
242
|
// Gateway is running — try openclaw CLI first
|
|
110
243
|
try {
|
|
111
|
-
execFileSync('openclaw', ['plugins', 'install',
|
|
244
|
+
execFileSync('openclaw', ['plugins', 'install', OPENCLAW_PLUGIN], {
|
|
112
245
|
stdio: 'pipe',
|
|
113
246
|
timeout: 30000,
|
|
114
247
|
});
|
|
115
|
-
return 'cli';
|
|
248
|
+
return { method: 'cli' };
|
|
116
249
|
}
|
|
117
250
|
catch {
|
|
118
251
|
// CLI failed despite gateway running
|
|
@@ -123,16 +256,18 @@ async function installPlugin(openclawDir) {
|
|
|
123
256
|
if (!fs.existsSync(extensionsDir)) {
|
|
124
257
|
fs.mkdirSync(extensionsDir, { recursive: true });
|
|
125
258
|
}
|
|
126
|
-
execFileSync('npm', ['install',
|
|
259
|
+
execFileSync('npm', ['install', OPENCLAW_PLUGIN, '--save'], {
|
|
127
260
|
cwd: extensionsDir,
|
|
128
261
|
stdio: 'pipe',
|
|
129
262
|
timeout: 60000,
|
|
130
263
|
});
|
|
131
|
-
return 'manual-npm';
|
|
264
|
+
return { method: 'manual-npm', note: extensionsDir };
|
|
132
265
|
}
|
|
133
|
-
catch {
|
|
134
|
-
|
|
135
|
-
|
|
266
|
+
catch (err) {
|
|
267
|
+
return {
|
|
268
|
+
method: 'skipped',
|
|
269
|
+
note: `\`openclaw plugins install\` and \`npm install\` both failed (${firstErrorLine(err)})`,
|
|
270
|
+
};
|
|
136
271
|
}
|
|
137
272
|
}
|
|
138
273
|
export class OpenClawNotFoundError extends Error {
|
|
@@ -141,19 +276,6 @@ export class OpenClawNotFoundError extends Error {
|
|
|
141
276
|
this.name = 'OpenClawNotFoundError';
|
|
142
277
|
}
|
|
143
278
|
}
|
|
144
|
-
// ── Git versioning setup ──────────────────────────────────────────────
|
|
145
|
-
const GITIGNORE_CONTENT = [
|
|
146
|
-
'# Auto-generated by memory-engramx',
|
|
147
|
-
'*.sqlite',
|
|
148
|
-
'*.sqlite-wal',
|
|
149
|
-
'*.sqlite-shm',
|
|
150
|
-
'*.db',
|
|
151
|
-
'*.db-wal',
|
|
152
|
-
'*.db-shm',
|
|
153
|
-
'lancedb/',
|
|
154
|
-
'.DS_Store',
|
|
155
|
-
'',
|
|
156
|
-
].join('\n');
|
|
157
279
|
function execSyncSafe(args, cwd) {
|
|
158
280
|
try {
|
|
159
281
|
return execFileSync('git', args, { cwd, stdio: 'pipe', timeout: 10000 }).toString().trim();
|
|
@@ -180,26 +302,16 @@ export function isGitRepo(dir) {
|
|
|
180
302
|
export function getMemoryDir() {
|
|
181
303
|
const openclawDir = getOpenClawDir();
|
|
182
304
|
const configPath = path.join(openclawDir, 'openclaw.json');
|
|
183
|
-
|
|
184
|
-
return resolveMemoryDirFromConfig(openclawDir, config);
|
|
185
|
-
}
|
|
186
|
-
export function resolveMemoryDirFromConfig(openclawDir, config) {
|
|
187
|
-
const plugins = config['plugins'];
|
|
188
|
-
const entries = plugins?.['entries'];
|
|
189
|
-
const engramxEntry = entries?.['memory-engramx'];
|
|
190
|
-
const entryConfig = engramxEntry?.['config'];
|
|
191
|
-
const memoryDir = entryConfig?.['memoryDir'];
|
|
192
|
-
if (typeof memoryDir === 'string') {
|
|
193
|
-
return path.isAbsolute(memoryDir) ? memoryDir : path.join(openclawDir, memoryDir);
|
|
194
|
-
}
|
|
195
|
-
return path.join(openclawDir, 'memory');
|
|
305
|
+
return resolveMemoryDir(openclawDir, readJsonConfig(configPath));
|
|
196
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).
|
|
197
309
|
export function setupGitVersioning(remoteUrl) {
|
|
198
310
|
const openclawDir = getOpenClawDir();
|
|
199
311
|
const configPath = path.join(openclawDir, 'openclaw.json');
|
|
200
312
|
const config = readJsonConfig(configPath);
|
|
201
313
|
// Resolve memory dir
|
|
202
|
-
const memoryDir =
|
|
314
|
+
const memoryDir = resolveMemoryDir(openclawDir, config);
|
|
203
315
|
fs.mkdirSync(memoryDir, { recursive: true });
|
|
204
316
|
// Git init
|
|
205
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":"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"}
|
package/dist/pair.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../src/pair.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pair.js","sourceRoot":"","sources":["../src/pair.ts"],"names":[],"mappings":"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"}
|
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>;
|