openclaw-engram 3.8.0 → 3.9.1

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.
@@ -0,0 +1,160 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-identity-v3.test.js","sourceRoot":"","sources":["../src/project-identity-v3.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engram-outcome.d.ts","sourceRoot":"","sources":["../../src/tools/engram-outcome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAepF,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,GACnB,YAAY,CAoCd"}
1
+ {"version":3,"file":"engram-outcome.d.ts","sourceRoot":"","sources":["../../src/tools/engram-outcome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAepF,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,yBAAyB,EAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,GACnB,YAAY,CAwCd"}
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.createEngramOutcomeTool = createEngramOutcomeTool;
10
10
  const zod_1 = require("zod");
11
11
  const typebox_1 = require("@sinclair/typebox");
12
+ const client_js_1 = require("../client.js");
12
13
  const formatter_js_1 = require("../context/formatter.js");
13
14
  const OutcomeParamsSchema = zod_1.z.object({
14
15
  outcome: zod_1.z.enum(['success', 'partial', 'failure', 'abandoned']),
@@ -41,8 +42,11 @@ function createEngramOutcomeTool(ctx, client, config) {
41
42
  if (!claudeSessionId) {
42
43
  return 'Cannot record outcome — no session ID available';
43
44
  }
44
- const success = await client.setSessionOutcome(claudeSessionId, parsed.data.outcome, parsed.data.reason);
45
- return success
45
+ const result = await client.setSessionOutcome(claudeSessionId, parsed.data.outcome, parsed.data.reason);
46
+ if ((0, client_js_1.isOutcomeRetirement)(result)) {
47
+ return `Session outcome callback retired: contract_version=${result.contract_version} code=${result.code} action=${result.action}`;
48
+ }
49
+ return result
46
50
  ? `Session outcome recorded: ${(0, formatter_js_1.quotedPromptScalar)(parsed.data.outcome)}${parsed.data.reason ? ` reason=${(0, formatter_js_1.quotedPromptScalar)(parsed.data.reason)}` : ''}`
47
51
  : 'Failed to record session outcome';
48
52
  },
@@ -1 +1 @@
1
- {"version":3,"file":"engram-outcome.js","sourceRoot":"","sources":["../../src/tools/engram-outcome.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAsBH,0DAwCC;AA5DD,6BAAwB;AACxB,+CAAyC;AAGzC,0DAA6D;AAG7D,MAAM,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,cAAI,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,cAAI,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,0DAA0D;QACvE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;KACrD,CAAC;IACF,MAAM,EAAE,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC,CAAC;CACxF,CAAC,CAAC;AAEH,SAAgB,uBAAuB,CACrC,GAA8B,EAC9B,MAAwB,EACxB,MAAoB;IAEpB,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,iFAAiF;YACjF,4FAA4F;YAC5F,qDAAqD;QACvD,UAAU,EAAE,iBAAiB;QAE7B,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAA+B;YAChE,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACvD,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC1B,OAAO,iEAAiE,CAAC;YAC3E,CAAC;YAED,4DAA4D;YAC5D,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;YAC9D,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,iDAAiD,CAAC;YAC3D,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAC5C,eAAe,EACf,MAAM,CAAC,IAAI,CAAC,OAAO,EACnB,MAAM,CAAC,IAAI,CAAC,MAAM,CACnB,CAAC;YAEF,OAAO,OAAO;gBACZ,CAAC,CAAC,6BAA6B,IAAA,iCAAkB,EAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAA,iCAAkB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBACxJ,CAAC,CAAC,kCAAkC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"engram-outcome.js","sourceRoot":"","sources":["../../src/tools/engram-outcome.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAuBH,0DA4CC;AAjED,6BAAwB;AACxB,+CAAyC;AACzC,4CAAmD;AAGnD,0DAA6D;AAG7D,MAAM,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,cAAI,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,cAAI,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,0DAA0D;QACvE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC;KACrD,CAAC;IACF,MAAM,EAAE,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC,CAAC;CACxF,CAAC,CAAC;AAEH,SAAgB,uBAAuB,CACrC,GAA8B,EAC9B,MAAwB,EACxB,MAAoB;IAEpB,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,iFAAiF;YACjF,4FAA4F;YAC5F,qDAAqD;QACvD,UAAU,EAAE,iBAAiB;QAE7B,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAA+B;YAChE,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACvD,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC1B,OAAO,iEAAiE,CAAC;YAC3E,CAAC;YAED,4DAA4D;YAC5D,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;YAC9D,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,iDAAiD,CAAC;YAC3D,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAC3C,eAAe,EACf,MAAM,CAAC,IAAI,CAAC,OAAO,EACnB,MAAM,CAAC,IAAI,CAAC,MAAM,CACnB,CAAC;YAEF,IAAI,IAAA,+BAAmB,EAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,OAAO,sDAAsD,MAAM,CAAC,gBAAgB,SAAS,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC;YACrI,CAAC;YAED,OAAO,MAAM;gBACX,CAAC,CAAC,6BAA6B,IAAA,iCAAkB,EAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAA,iCAAkB,EAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBACxJ,CAAC,CAAC,kCAAkC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "engram",
3
3
  "id": "engram",
4
- "version": "3.8.0",
4
+ "version": "3.9.1",
5
5
  "displayName": "Engram Memory",
6
6
  "description": "Connects OpenClaw agents to engram persistent memory server for long-term context retention",
7
7
  "kind": "memory",
@@ -18,12 +18,18 @@
18
18
  "token": {
19
19
  "type": "string",
20
20
  "description": "Bearer token for engram API authentication",
21
- "uiHints": { "sensitive": true }
21
+ "uiHints": {
22
+ "sensitive": true
23
+ }
22
24
  },
23
25
  "project": {
24
26
  "type": "string",
25
27
  "description": "Project scope override (defaults to auto-detected from workspace)"
26
28
  },
29
+ "clientInstanceId": {
30
+ "type": "string",
31
+ "description": "Opaque non-secret installation reference for V3 identity"
32
+ },
27
33
  "contextLimit": {
28
34
  "type": "number",
29
35
  "description": "Maximum observations to inject per prompt",
@@ -51,12 +57,20 @@
51
57
  },
52
58
  "logLevel": {
53
59
  "type": "string",
54
- "enum": ["debug", "info", "warn", "error"],
60
+ "enum": [
61
+ "debug",
62
+ "info",
63
+ "warn",
64
+ "error"
65
+ ],
55
66
  "description": "Log verbosity level",
56
67
  "default": "warn"
57
68
  }
58
69
  },
59
- "required": ["url", "token"]
70
+ "required": [
71
+ "url",
72
+ "token"
73
+ ]
60
74
  },
61
75
  "hooks": [
62
76
  "session_start",
@@ -83,6 +97,8 @@
83
97
  "migrate"
84
98
  ],
85
99
  "cli": {
86
- "commands": ["memory"]
100
+ "commands": [
101
+ "memory"
102
+ ]
87
103
  }
88
104
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openclaw-engram",
3
- "version": "3.8.0",
3
+ "version": "3.9.1",
4
4
  "description": "OpenClaw plugin that connects to engram persistent memory server",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",