openclaw-engram 3.9.1 → 3.9.2

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.
Files changed (68) hide show
  1. package/README.md +15 -2
  2. package/dist/client.d.ts +18 -36
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +24 -304
  5. package/dist/client.js.map +1 -1
  6. package/dist/commands/remember.d.ts.map +1 -1
  7. package/dist/commands/remember.js +1 -1
  8. package/dist/commands/remember.js.map +1 -1
  9. package/dist/config.d.ts +0 -4
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +2 -8
  12. package/dist/config.js.map +1 -1
  13. package/dist/hooks/after-tool-call.js +1 -1
  14. package/dist/hooks/after-tool-call.js.map +1 -1
  15. package/dist/hooks/before-agent-start.d.ts.map +1 -1
  16. package/dist/hooks/before-agent-start.js +2 -2
  17. package/dist/hooks/before-agent-start.js.map +1 -1
  18. package/dist/hooks/before-compaction.js +1 -1
  19. package/dist/hooks/before-compaction.js.map +1 -1
  20. package/dist/hooks/before-prompt-build.js +1 -1
  21. package/dist/hooks/before-prompt-build.js.map +1 -1
  22. package/dist/hooks/before-tool-call.js +1 -1
  23. package/dist/hooks/before-tool-call.js.map +1 -1
  24. package/dist/hooks/session-end.js +1 -1
  25. package/dist/hooks/session-end.js.map +1 -1
  26. package/dist/hooks/session-start.js +1 -1
  27. package/dist/hooks/session-start.js.map +1 -1
  28. package/dist/identity.d.ts +8 -52
  29. package/dist/identity.d.ts.map +1 -1
  30. package/dist/identity.js +39 -368
  31. package/dist/identity.js.map +1 -1
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +3 -4
  35. package/dist/index.js.map +1 -1
  36. package/dist/services/file-watcher.d.ts.map +1 -1
  37. package/dist/services/file-watcher.js +1 -1
  38. package/dist/services/file-watcher.js.map +1 -1
  39. package/dist/tools/engram-decisions.js +1 -1
  40. package/dist/tools/engram-decisions.js.map +1 -1
  41. package/dist/tools/engram-issues.js +1 -1
  42. package/dist/tools/engram-issues.js.map +1 -1
  43. package/dist/tools/engram-presets.js +1 -1
  44. package/dist/tools/engram-presets.js.map +1 -1
  45. package/dist/tools/engram-remember.js +1 -1
  46. package/dist/tools/engram-remember.js.map +1 -1
  47. package/dist/tools/engram-search.js +1 -1
  48. package/dist/tools/engram-search.js.map +1 -1
  49. package/dist/tools/engram-timeline.js +1 -1
  50. package/dist/tools/engram-timeline.js.map +1 -1
  51. package/dist/tools/engram-vault.d.ts +1 -1
  52. package/dist/tools/engram-vault.d.ts.map +1 -1
  53. package/dist/tools/engram-vault.js +25 -6
  54. package/dist/tools/engram-vault.js.map +1 -1
  55. package/dist/tools/memory-get.js +2 -2
  56. package/dist/tools/memory-get.js.map +1 -1
  57. package/dist/tools/memory-migrate.js +1 -1
  58. package/dist/tools/memory-migrate.js.map +1 -1
  59. package/openclaw.plugin.json +3 -6
  60. package/package.json +1 -1
  61. package/dist/project-identity-v3.d.ts +0 -49
  62. package/dist/project-identity-v3.d.ts.map +0 -1
  63. package/dist/project-identity-v3.js +0 -228
  64. package/dist/project-identity-v3.js.map +0 -1
  65. package/dist/project-identity-v3.test.d.ts +0 -2
  66. package/dist/project-identity-v3.test.d.ts.map +0 -1
  67. package/dist/project-identity-v3.test.js +0 -160
  68. package/dist/project-identity-v3.test.js.map +0 -1
@@ -1,228 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isValidClientInstanceIdV3 = isValidClientInstanceIdV3;
7
- exports.parseProjectAnchorV3 = parseProjectAnchorV3;
8
- exports.discoverProjectAnchorV3 = discoverProjectAnchorV3;
9
- exports.normalizeGitRemoteV3 = normalizeGitRemoteV3;
10
- exports.buildProjectIdentityV3 = buildProjectIdentityV3;
11
- const node_child_process_1 = require("node:child_process");
12
- const node_fs_1 = require("node:fs");
13
- const node_path_1 = __importDefault(require("node:path"));
14
- const ANCHOR_FILE = '.engram-project';
15
- const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
16
- const CONTROL = /[\p{Cc}\p{Cf}]/u;
17
- const LEGACY_SCHEMES = {
18
- anchor_v3: true,
19
- binding_v2: true,
20
- git_remote_relative_v2: true,
21
- git_hash_v2: true,
22
- path_hash_v1: true,
23
- legacy_slug: true,
24
- non_git_anchor_v2: true,
25
- manual_alias: true,
26
- };
27
- function anchorInvalid() {
28
- throw new Error('PROJECT_ANCHOR_INVALID');
29
- }
30
- function descriptorInvalid() {
31
- throw new Error('PROJECT_DESCRIPTOR_INVALID');
32
- }
33
- function isSafeText(value) {
34
- return value.length > 0 && value.trim() === value && !/\s/u.test(value) && !CONTROL.test(value) &&
35
- !value.includes('@') && !/^[^/:\s@]+:[^@\s]+@/u.test(value);
36
- }
37
- function isValidClientInstanceIdV3(value) {
38
- return typeof value === 'string' && Array.from(value).length <= 256 && isSafeText(value) && !/[\\/]/u.test(value) && !/^[a-z][a-z0-9+.-]*:/iu.test(value);
39
- }
40
- function isValidAnchorName(value) {
41
- return typeof value === 'string' && value.length > 0 && Array.from(value).length <= 256 && !CONTROL.test(value);
42
- }
43
- function parseProjectAnchorV3(input) {
44
- if (typeof input !== 'object' || input === null || Array.isArray(input))
45
- anchorInvalid();
46
- const fields = input;
47
- const keys = Object.keys(fields);
48
- if (keys.length !== 4 || keys.some((key) => !['version', 'project_id', 'name', 'scope'].includes(key))) {
49
- anchorInvalid();
50
- }
51
- if (fields.version !== 3 || typeof fields.project_id !== 'string' || !UUID.test(fields.project_id) ||
52
- !isValidAnchorName(fields.name) || (fields.scope !== 'repository' && fields.scope !== 'directory')) {
53
- anchorInvalid();
54
- }
55
- return {
56
- version: 3,
57
- project_id: fields.project_id,
58
- name: fields.name,
59
- scope: fields.scope,
60
- };
61
- }
62
- function isSelectedGitRoot(root) {
63
- try {
64
- const gitRoot = (0, node_child_process_1.execFileSync)('git', ['-C', root, 'rev-parse', '--show-toplevel'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
65
- return node_path_1.default.resolve(root) === node_path_1.default.resolve(gitRoot);
66
- }
67
- catch {
68
- return false;
69
- }
70
- }
71
- function isTrackedAnchor(root) {
72
- try {
73
- (0, node_child_process_1.execFileSync)('git', ['-C', root, 'ls-files', '--error-unmatch', '--', ANCHOR_FILE], { stdio: 'ignore' });
74
- return true;
75
- }
76
- catch {
77
- return false;
78
- }
79
- }
80
- /** Reads only the anchor directly under the adapter-selected scope root. */
81
- function discoverProjectAnchorV3(root, selectedScope) {
82
- try {
83
- if (typeof root !== 'string' || !(0, node_fs_1.statSync)(root).isDirectory())
84
- anchorInvalid();
85
- const selectedRoot = node_path_1.default.resolve(root);
86
- const anchor = parseProjectAnchorV3(JSON.parse((0, node_fs_1.readFileSync)(node_path_1.default.join(selectedRoot, ANCHOR_FILE), 'utf8')));
87
- if (selectedScope !== undefined && anchor.scope !== selectedScope)
88
- anchorInvalid();
89
- if (selectedScope === 'repository' && (!isSelectedGitRoot(selectedRoot) || !isTrackedAnchor(selectedRoot)))
90
- anchorInvalid();
91
- return anchor;
92
- }
93
- catch (error) {
94
- if (error instanceof Error && error.message === 'PROJECT_ANCHOR_INVALID')
95
- throw error;
96
- if (error.code === 'ENOENT')
97
- return null;
98
- anchorInvalid();
99
- }
100
- }
101
- function remoteResult(disposition) {
102
- return { disposition };
103
- }
104
- function normalizePath(host, rawPath) {
105
- const normalizedHost = host.trim().toLowerCase();
106
- const segments = rawPath.replace(/\\/g, '/').split('/').filter(Boolean);
107
- if (!normalizedHost || segments.length === 0 || segments.some((segment) => !isSafeText(segment)))
108
- return remoteResult('omitted');
109
- let normalizedPath = segments.join('/');
110
- if (normalizedPath.endsWith('.git'))
111
- normalizedPath = normalizedPath.slice(0, -4);
112
- const value = `${normalizedHost}/${normalizedPath}`;
113
- return isValidNormalizedRemote(value) ? { disposition: 'normalized', value } : remoteResult('omitted');
114
- }
115
- function normalizeScpRemote(value) {
116
- const colon = value.indexOf(':');
117
- if (value.includes('://') || colon <= 0 || value.slice(0, colon).includes('/'))
118
- return null;
119
- let host = value.slice(0, colon);
120
- const rawPath = value.slice(colon + 1);
121
- if (!rawPath)
122
- return remoteResult('omitted');
123
- if (rawPath.slice(0, rawPath.indexOf('/') === -1 ? rawPath.length : rawPath.indexOf('/')).includes('@')) {
124
- return remoteResult('refused');
125
- }
126
- const at = host.lastIndexOf('@');
127
- if (at !== -1) {
128
- const user = host.slice(0, at);
129
- if (!user || user.includes(':'))
130
- return remoteResult('refused');
131
- host = host.slice(at + 1);
132
- }
133
- if (!host || /[@?#[\\\]]/u.test(host))
134
- return remoteResult('omitted');
135
- return normalizePath(host, rawPath);
136
- }
137
- function normalizeUrlRemote(value) {
138
- let url;
139
- try {
140
- url = new URL(value);
141
- }
142
- catch {
143
- return remoteResult('omitted');
144
- }
145
- const scheme = url.protocol.slice(0, -1).toLowerCase();
146
- if (!['http', 'https', 'ssh'].includes(scheme) || scheme === 'file')
147
- return remoteResult('omitted');
148
- if ((url.username || url.password) && (scheme !== 'ssh' || url.password))
149
- return remoteResult('refused');
150
- if (!url.hostname || url.search || url.hash)
151
- return remoteResult('omitted');
152
- const port = url.port;
153
- const includePort = port && !((scheme === 'http' && port === '80') || (scheme === 'https' && port === '443') || (scheme === 'ssh' && port === '22'));
154
- return normalizePath(`${url.hostname}${includePort ? `:${port}` : ''}`, url.pathname);
155
- }
156
- /** Converts an observed remote to credential-free canonical evidence. */
157
- function normalizeGitRemoteV3(input) {
158
- if (typeof input === 'object' && input !== null && !Array.isArray(input)) {
159
- const observation = input;
160
- if (typeof observation.source !== 'string') {
161
- return typeof observation.form === 'string' && observation.form.includes('credential') ? remoteResult('refused') : remoteResult('omitted');
162
- }
163
- input = observation.source;
164
- }
165
- if (typeof input !== 'string')
166
- return remoteResult('omitted');
167
- const value = input.trim();
168
- if (!value || /^file:/iu.test(value) || /^[\\/]/u.test(value) || /^[A-Za-z]:[\\/]/u.test(value))
169
- return remoteResult('omitted');
170
- return normalizeScpRemote(value) ?? normalizeUrlRemote(value);
171
- }
172
- function isValidNormalizedRemote(remote) {
173
- if (typeof remote !== 'string' || !isSafeText(remote) || remote.includes('://') || remote.includes('\\'))
174
- return false;
175
- const divider = remote.indexOf('/');
176
- if (divider <= 0 || divider === remote.length - 1)
177
- return false;
178
- const host = remote.slice(0, divider);
179
- const remotePath = remote.slice(divider + 1);
180
- if (remote.includes('?') || remote.includes('#') || remotePath.startsWith('/') || remotePath.endsWith('/') || remotePath.includes('//') || remotePath.endsWith('.git') || host !== host.toLowerCase())
181
- return false;
182
- const [hostname, port, ...extra] = host.split(':');
183
- if (!hostname || extra.length > 0 || (port !== undefined && (!/^\d+$/u.test(port) || Number(port) === 0)))
184
- return false;
185
- return hostname.split('.').every((label) => /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/u.test(label));
186
- }
187
- function isValidLegacyIdentifier(value) {
188
- if (typeof value !== 'object' || value === null || Array.isArray(value))
189
- return false;
190
- const identifier = value;
191
- return Object.keys(identifier).length === 3 &&
192
- Object.keys(identifier).every((key) => ['scheme', 'value', 'provenance'].includes(key)) &&
193
- typeof identifier.scheme === 'string' && Object.hasOwn(LEGACY_SCHEMES, identifier.scheme) &&
194
- typeof identifier.value === 'string' && isSafeText(identifier.value) &&
195
- typeof identifier.provenance === 'string' && isSafeText(identifier.provenance);
196
- }
197
- /** Builds a non-persistent V3 descriptor; the caller must supply its opaque installation ID. */
198
- function buildProjectIdentityV3(input) {
199
- if (typeof input !== 'object' || input === null || Array.isArray(input))
200
- descriptorInvalid();
201
- const fields = input;
202
- if (Object.hasOwn(fields, 'project_key'))
203
- throw new Error('PROJECT_KEY_CLIENT_ASSERTION_FORBIDDEN');
204
- if (Object.keys(fields).some((key) => !['anchor', 'version', 'anchor_project_id', 'name', 'scope', 'normalized_git_remotes', 'legacy_identifiers', 'client_instance_id'].includes(key)))
205
- descriptorInvalid();
206
- const anchor = parseProjectAnchorV3(fields.anchor);
207
- if ((fields.version !== undefined && fields.version !== 3) ||
208
- (fields.anchor_project_id !== undefined && fields.anchor_project_id !== anchor.project_id) ||
209
- (fields.name !== undefined && fields.name !== anchor.name))
210
- descriptorInvalid();
211
- if (fields.scope !== undefined && fields.scope !== anchor.scope)
212
- throw new Error('PROJECT_SCOPE_MISMATCH');
213
- const remotes = fields.normalized_git_remotes ?? [];
214
- const legacy = fields.legacy_identifiers ?? [];
215
- if (!Array.isArray(remotes) || !remotes.every(isValidNormalizedRemote) || !Array.isArray(legacy) || !legacy.every(isValidLegacyIdentifier) ||
216
- !isValidClientInstanceIdV3(fields.client_instance_id))
217
- descriptorInvalid();
218
- return {
219
- version: 3,
220
- anchor_project_id: anchor.project_id,
221
- name: anchor.name,
222
- scope: anchor.scope,
223
- normalized_git_remotes: [...remotes],
224
- legacy_identifiers: legacy.map((identifier) => ({ ...identifier })),
225
- client_instance_id: fields.client_instance_id,
226
- };
227
- }
228
- //# sourceMappingURL=project-identity-v3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-identity-v3.js","sourceRoot":"","sources":["../src/project-identity-v3.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=project-identity-v3.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-identity-v3.test.d.ts","sourceRoot":"","sources":["../src/project-identity-v3.test.ts"],"names":[],"mappings":""}
@@ -1,160 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const strict_1 = __importDefault(require("node:assert/strict"));
40
- const node_fs_1 = __importDefault(require("node:fs"));
41
- const node_os_1 = __importDefault(require("node:os"));
42
- const node_path_1 = __importDefault(require("node:path"));
43
- const node_test_1 = __importDefault(require("node:test"));
44
- const v3 = __importStar(require("./project-identity-v3.js"));
45
- const here = __dirname;
46
- const vectorsPath = node_path_1.default.resolve(here, '../../../contracts/testdata/project_identity_v3_vectors.json');
47
- const corpus = JSON.parse(node_fs_1.default.readFileSync(vectorsPath, 'utf8'));
48
- const helpers = [
49
- 'parseProjectAnchorV3',
50
- 'discoverProjectAnchorV3',
51
- 'normalizeGitRemoteV3',
52
- 'buildProjectIdentityV3',
53
- ];
54
- function descriptorInput(anchor, descriptor) {
55
- return {
56
- anchor,
57
- version: descriptor.version,
58
- anchor_project_id: descriptor.anchor_project_id,
59
- name: descriptor.name,
60
- scope: descriptor.scope,
61
- normalized_git_remotes: descriptor.normalized_git_remotes,
62
- legacy_identifiers: descriptor.legacy_identifiers,
63
- client_instance_id: descriptor.client_instance_id,
64
- ...(Object.hasOwn(descriptor, 'project_key') ? { project_key: descriptor.project_key } : {}),
65
- };
66
- }
67
- for (const helper of helpers) {
68
- (0, node_test_1.default)(`OpenClaw V3 descriptor seam exports ${helper}`, () => {
69
- strict_1.default.equal(typeof v3[helper], 'function', `${helper} is required by the frozen V3 vectors`);
70
- });
71
- }
72
- (0, node_test_1.default)('OpenClaw V3 descriptor helpers consume the frozen shared vectors', () => {
73
- strict_1.default.equal(corpus.contract, 'project_identity_v3');
74
- strict_1.default.equal(corpus.identity_version, 3);
75
- strict_1.default.equal(corpus.vectors.length, corpus.vector_counts.accepted + corpus.vector_counts.refused);
76
- for (const vector of corpus.vectors) {
77
- const anchor = vector.input.anchor;
78
- const descriptor = vector.input.descriptor;
79
- const remotes = vector.input.remote_observations ?? [];
80
- if (anchor) {
81
- const invalidAnchor = vector.expected.outcome === 'PROJECT_ANCHOR_INVALID';
82
- if (invalidAnchor) {
83
- strict_1.default.throws(() => v3.parseProjectAnchorV3(anchor), /PROJECT_ANCHOR_INVALID/, vector.id);
84
- }
85
- else {
86
- strict_1.default.deepEqual(v3.parseProjectAnchorV3(anchor), anchor, vector.id);
87
- }
88
- }
89
- for (const remote of remotes) {
90
- const normalized = v3.normalizeGitRemoteV3(remote);
91
- const disposition = remote.disposition ?? 'normalized';
92
- strict_1.default.equal(normalized.disposition, disposition, vector.id);
93
- if (disposition === 'normalized')
94
- strict_1.default.equal(normalized.value, remote.normalized, vector.id);
95
- if (disposition !== 'normalized') {
96
- strict_1.default.equal(Object.hasOwn(normalized, 'raw_value'), false, vector.id);
97
- strict_1.default.equal(Object.hasOwn(normalized, 'source'), false, vector.id);
98
- }
99
- }
100
- if (!descriptor || !anchor || anchor.version !== 3)
101
- continue;
102
- const hasClientKey = Object.hasOwn(descriptor, 'project_key');
103
- const unsupportedVersion = descriptor.version !== 3;
104
- const missingClientID = typeof descriptor.client_instance_id !== 'string' || descriptor.client_instance_id === '';
105
- const mismatchedAnchor = descriptor.name !== anchor.name || descriptor.scope !== anchor.scope ||
106
- descriptor.anchor_project_id !== anchor.project_id;
107
- const expectedDescriptorRefusal = vector.expected.outcome === 'PROJECT_DESCRIPTOR_INVALID';
108
- if (hasClientKey || unsupportedVersion || missingClientID || mismatchedAnchor || expectedDescriptorRefusal) {
109
- strict_1.default.throws(() => v3.buildProjectIdentityV3(descriptorInput(anchor, descriptor)), /PROJECT_(?:KEY_CLIENT_ASSERTION_FORBIDDEN|DESCRIPTOR_INVALID|SCOPE_MISMATCH)/, vector.id);
110
- }
111
- else {
112
- strict_1.default.deepEqual(v3.buildProjectIdentityV3(descriptorInput(anchor, descriptor)), descriptor, vector.id);
113
- }
114
- }
115
- });
116
- (0, node_test_1.default)('OpenClaw V3 directory discovery never searches upward from the selected root', (t) => {
117
- const parent = node_fs_1.default.mkdtempSync(node_path_1.default.join(node_os_1.default.tmpdir(), 'openclaw-v3-discovery-'));
118
- const selectedRoot = node_path_1.default.join(parent, 'selected');
119
- node_fs_1.default.mkdirSync(selectedRoot);
120
- node_fs_1.default.writeFileSync(node_path_1.default.join(parent, '.engram-project'), JSON.stringify(corpus.vectors[0].input.anchor));
121
- t.after(() => node_fs_1.default.rmSync(parent, { recursive: true, force: true }));
122
- strict_1.default.equal(v3.discoverProjectAnchorV3(selectedRoot), null);
123
- });
124
- (0, node_test_1.default)('OpenClaw V3 rejects credential-shaped SCP remotes without retaining input', () => {
125
- strict_1.default.deepEqual(v3.normalizeGitRemoteV3('git:pa:ss@GIT.EXAMPLE.TEST:Platform/Widget.git'), { disposition: 'refused' });
126
- });
127
- (0, node_test_1.default)('OpenClaw V3 rejects non-canonical descriptor evidence', () => {
128
- const anchor = corpus.vectors[0].input.anchor;
129
- const base = {
130
- anchor,
131
- normalized_git_remotes: [],
132
- legacy_identifiers: [],
133
- client_instance_id: 'fixture-install-edge',
134
- };
135
- strict_1.default.throws(() => v3.buildProjectIdentityV3({ ...base, normalized_git_remotes: ['git.example.test//Platform/Widget'] }), /PROJECT_DESCRIPTOR_INVALID/);
136
- for (const value of ['legacy widget alias', 'legacy-widget\u0007alias']) {
137
- strict_1.default.throws(() => v3.buildProjectIdentityV3({
138
- ...base,
139
- legacy_identifiers: [{ scheme: 'manual_alias', value, provenance: 'operator_import' }],
140
- }), /PROJECT_DESCRIPTOR_INVALID/);
141
- }
142
- });
143
- (0, node_test_1.default)('OpenClaw V3 rejects non-opaque client instance IDs', () => {
144
- const anchor = corpus.vectors[0].input.anchor;
145
- const base = {
146
- anchor,
147
- normalized_git_remotes: [],
148
- legacy_identifiers: [],
149
- };
150
- for (const client_instance_id of [
151
- '/private/operator/path',
152
- 'C:\\private\\operator',
153
- 'install / private',
154
- 'install\u0007private',
155
- 'credential@private',
156
- ]) {
157
- strict_1.default.throws(() => v3.buildProjectIdentityV3({ ...base, client_instance_id }), /PROJECT_DESCRIPTOR_INVALID/, client_instance_id);
158
- }
159
- });
160
- //# sourceMappingURL=project-identity-v3.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-identity-v3.test.js","sourceRoot":"","sources":["../src/project-identity-v3.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAwC;AACxC,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAC7B,0DAA6B;AAE7B,6DAA+C;AAE/C,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,IAAI,EAAE,8DAA8D,CAAC,CAAC;AACvG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAa7D,CAAC;AAEF,MAAM,OAAO,GAAG;IACd,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,wBAAwB;CAChB,CAAC;AAEX,SAAS,eAAe,CAAC,MAA+B,EAAE,UAAmC;IAC3F,OAAO;QACL,MAAM;QACN,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;QAC/C,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,sBAAsB,EAAE,UAAU,CAAC,sBAAsB;QACzD,kBAAkB,EAAE,UAAU,CAAC,kBAAkB;QACjD,kBAAkB,EAAE,UAAU,CAAC,kBAAkB;QACjD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7F,CAAC;AACJ,CAAC;AAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;IAC7B,IAAA,mBAAI,EAAC,uCAAuC,MAAM,EAAE,EAAE,GAAG,EAAE;QACzD,gBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,MAAM,uCAAuC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAA,mBAAI,EAAC,kEAAkE,EAAE,GAAG,EAAE;IAC5E,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACrD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACzC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAElG,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACnC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC;QACvD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,wBAAwB,CAAC;YAC3E,IAAI,aAAa,EAAE,CAAC;gBAClB,gBAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,wBAAwB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;iBAAM,CAAC;gBACN,gBAAM,CAAC,SAAS,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAA4B,CAAC;YAC9E,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,YAAY,CAAC;YACvD,gBAAM,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7D,IAAI,WAAW,KAAK,YAAY;gBAAE,gBAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/F,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvE,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,SAAS;QAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC9D,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,OAAO,UAAU,CAAC,kBAAkB,KAAK,QAAQ,IAAI,UAAU,CAAC,kBAAkB,KAAK,EAAE,CAAC;QAClH,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;YAC3F,UAAU,CAAC,iBAAiB,KAAK,MAAM,CAAC,UAAU,CAAC;QACrD,MAAM,yBAAyB,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,4BAA4B,CAAC;QAC3F,IAAI,YAAY,IAAI,kBAAkB,IAAI,eAAe,IAAI,gBAAgB,IAAI,yBAAyB,EAAE,CAAC;YAC3G,gBAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,8EAA8E,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACjL,CAAC;aAAM,CAAC;YACN,gBAAM,CAAC,SAAS,CAAC,EAAE,CAAC,sBAAsB,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,8EAA8E,EAAE,CAAC,CAAC,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,iBAAE,CAAC,WAAW,CAAC,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnD,iBAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC3B,iBAAE,CAAC,aAAa,CAAC,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACvG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,iBAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEnE,gBAAM,CAAC,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,2EAA2E,EAAE,GAAG,EAAE;IACrF,gBAAM,CAAC,SAAS,CACd,EAAE,CAAC,oBAAoB,CAAC,gDAAgD,CAAC,EACzE,EAAE,WAAW,EAAE,SAAS,EAAE,CAC3B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,uDAAuD,EAAE,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAO,CAAC;IAC/C,MAAM,IAAI,GAAG;QACX,MAAM;QACN,sBAAsB,EAAE,EAAE;QAC1B,kBAAkB,EAAE,EAAE;QACtB,kBAAkB,EAAE,sBAAsB;KAC3C,CAAC;IAEF,gBAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC,EAAE,GAAG,IAAI,EAAE,sBAAsB,EAAE,CAAC,mCAAmC,CAAC,EAAE,CAAC,EAC3G,4BAA4B,CAC7B,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,EAAE,CAAC;QACxE,gBAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC;YAC9B,GAAG,IAAI;YACP,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;SACvF,CAAC,EACF,4BAA4B,CAC7B,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAO,CAAC;IAC/C,MAAM,IAAI,GAAG;QACX,MAAM;QACN,sBAAsB,EAAE,EAAE;QAC1B,kBAAkB,EAAE,EAAE;KACvB,CAAC;IAEF,KAAK,MAAM,kBAAkB,IAAI;QAC/B,wBAAwB;QACxB,uBAAuB;QACvB,mBAAmB;QACnB,sBAAsB;QACtB,oBAAoB;KACrB,EAAE,CAAC;QACF,gBAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAChE,4BAA4B,EAC5B,kBAAkB,CACnB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC"}