@amodalai/runtime 0.3.22 → 0.3.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/__fixtures__/smoke.test.js +127 -25
- package/dist/src/__fixtures__/smoke.test.js.map +1 -1
- package/dist/src/agent/local-server.js +4 -180
- package/dist/src/agent/local-server.js.map +1 -1
- package/dist/src/agent/routes/stores.js +5 -5
- package/dist/src/agent/routes/stores.js.map +1 -1
- package/dist/src/agent/routes/stores.test.js +1 -1
- package/dist/src/agent/routes/stores.test.js.map +1 -1
- package/dist/src/credentials.d.ts +44 -0
- package/dist/src/credentials.js +58 -0
- package/dist/src/credentials.js.map +1 -0
- package/dist/src/credentials.test.d.ts +6 -0
- package/dist/src/credentials.test.js +108 -0
- package/dist/src/credentials.test.js.map +1 -0
- package/dist/src/events/store-event-wrapper.js +12 -12
- package/dist/src/events/store-event-wrapper.js.map +1 -1
- package/dist/src/events/store-event-wrapper.test.js +9 -9
- package/dist/src/events/store-event-wrapper.test.js.map +1 -1
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/middleware/auth.d.ts +4 -0
- package/dist/src/middleware/auth.js.map +1 -1
- package/dist/src/routes/chat-stream.js +12 -0
- package/dist/src/routes/chat-stream.js.map +1 -1
- package/dist/src/routes/chat.js +12 -0
- package/dist/src/routes/chat.js.map +1 -1
- package/dist/src/routes/session-resolver.d.ts +11 -0
- package/dist/src/routes/session-resolver.js +30 -6
- package/dist/src/routes/session-resolver.js.map +1 -1
- package/dist/src/routes/sessions-history.d.ts +22 -0
- package/dist/src/routes/sessions-history.js +186 -0
- package/dist/src/routes/sessions-history.js.map +1 -0
- package/dist/src/scope.d.ts +18 -0
- package/dist/src/scope.js +15 -0
- package/dist/src/scope.js.map +1 -0
- package/dist/src/scope.test.d.ts +6 -0
- package/dist/src/scope.test.js +64 -0
- package/dist/src/scope.test.js.map +1 -0
- package/dist/src/server.js +12 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/session/drizzle-session-store.d.ts +12 -0
- package/dist/src/session/drizzle-session-store.js +33 -1
- package/dist/src/session/drizzle-session-store.js.map +1 -1
- package/dist/src/session/manager.d.ts +3 -1
- package/dist/src/session/manager.js +15 -1
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/session-builder.d.ts +11 -0
- package/dist/src/session/session-builder.js +22 -7
- package/dist/src/session/session-builder.js.map +1 -1
- package/dist/src/session/store.d.ts +6 -0
- package/dist/src/session/store.js +2 -3
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/store.test.js +4 -0
- package/dist/src/session/store.test.js.map +1 -1
- package/dist/src/session/tool-context-factory.d.ts +17 -1
- package/dist/src/session/tool-context-factory.js +95 -9
- package/dist/src/session/tool-context-factory.js.map +1 -1
- package/dist/src/session/tool-context-factory.test.js +2 -1
- package/dist/src/session/tool-context-factory.test.js.map +1 -1
- package/dist/src/session/types.d.ts +6 -0
- package/dist/src/stores/drizzle-store-backend.d.ts +6 -6
- package/dist/src/stores/drizzle-store-backend.js +24 -19
- package/dist/src/stores/drizzle-store-backend.js.map +1 -1
- package/dist/src/stores/drizzle-store-backend.test.js +41 -41
- package/dist/src/stores/drizzle-store-backend.test.js.map +1 -1
- package/dist/src/stores/index.d.ts +1 -0
- package/dist/src/stores/index.js +1 -0
- package/dist/src/stores/index.js.map +1 -1
- package/dist/src/stores/scoped-store-backend.d.ts +36 -0
- package/dist/src/stores/scoped-store-backend.js +59 -0
- package/dist/src/stores/scoped-store-backend.js.map +1 -0
- package/dist/src/stores/scoped-store-backend.test.d.ts +6 -0
- package/dist/src/stores/scoped-store-backend.test.js +159 -0
- package/dist/src/stores/scoped-store-backend.test.js.map +1 -0
- package/dist/src/tools/custom-tool-adapter.d.ts +1 -1
- package/dist/src/tools/custom-tool-adapter.js +1 -1
- package/dist/src/tools/custom-tool-adapter.js.map +1 -1
- package/dist/src/tools/custom-tool-adapter.test.js +2 -1
- package/dist/src/tools/custom-tool-adapter.test.js.map +1 -1
- package/dist/src/tools/fetch-url-tool.test.js +1 -0
- package/dist/src/tools/fetch-url-tool.test.js.map +1 -1
- package/dist/src/tools/mcp-tool-adapter.test.js +1 -0
- package/dist/src/tools/mcp-tool-adapter.test.js.map +1 -1
- package/dist/src/tools/memory-tool.d.ts +5 -3
- package/dist/src/tools/memory-tool.js +30 -30
- package/dist/src/tools/memory-tool.js.map +1 -1
- package/dist/src/tools/memory-tool.test.js +1 -0
- package/dist/src/tools/memory-tool.test.js.map +1 -1
- package/dist/src/tools/registry.test.js +1 -0
- package/dist/src/tools/registry.test.js.map +1 -1
- package/dist/src/tools/request-tool.test.js +1 -0
- package/dist/src/tools/request-tool.test.js.map +1 -1
- package/dist/src/tools/store-tools.js +7 -7
- package/dist/src/tools/store-tools.js.map +1 -1
- package/dist/src/tools/store-tools.test.js +8 -7
- package/dist/src/tools/store-tools.test.js.map +1 -1
- package/dist/src/tools/types.d.ts +4 -0
- package/dist/src/tools/web-search-tool.test.js +1 -0
- package/dist/src/tools/web-search-tool.test.js.map +1 -1
- package/dist/src/types.d.ts +10 -0
- package/dist/src/types.js +4 -0
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -45,94 +45,94 @@ function runSuite(makeBackend) {
|
|
|
45
45
|
});
|
|
46
46
|
describe('tenant isolation', () => {
|
|
47
47
|
it('same (store, key) across different appIds do not collide', async () => {
|
|
48
|
-
await backend.put('tenant-a', 'test-store', 'shared', { id: 'shared', value: 'A' }, {});
|
|
49
|
-
await backend.put('tenant-b', 'test-store', 'shared', { id: 'shared', value: 'B' }, {});
|
|
50
|
-
const a = await backend.get('tenant-a', 'test-store', 'shared');
|
|
51
|
-
const b = await backend.get('tenant-b', 'test-store', 'shared');
|
|
48
|
+
await backend.put('tenant-a', '', 'test-store', 'shared', { id: 'shared', value: 'A' }, {});
|
|
49
|
+
await backend.put('tenant-b', '', 'test-store', 'shared', { id: 'shared', value: 'B' }, {});
|
|
50
|
+
const a = await backend.get('tenant-a', '', 'test-store', 'shared');
|
|
51
|
+
const b = await backend.get('tenant-b', '', 'test-store', 'shared');
|
|
52
52
|
expect(a?.payload['value']).toBe('A');
|
|
53
53
|
expect(b?.payload['value']).toBe('B');
|
|
54
54
|
});
|
|
55
55
|
it('list only returns the caller\'s appId rows', async () => {
|
|
56
|
-
await backend.put('tenant-a', 'test-store', 'a1', { id: 'a1' }, {});
|
|
57
|
-
await backend.put('tenant-a', 'test-store', 'a2', { id: 'a2' }, {});
|
|
58
|
-
await backend.put('tenant-b', 'test-store', 'b1', { id: 'b1' }, {});
|
|
59
|
-
const resA = await backend.list('tenant-a', 'test-store');
|
|
60
|
-
const resB = await backend.list('tenant-b', 'test-store');
|
|
56
|
+
await backend.put('tenant-a', '', 'test-store', 'a1', { id: 'a1' }, {});
|
|
57
|
+
await backend.put('tenant-a', '', 'test-store', 'a2', { id: 'a2' }, {});
|
|
58
|
+
await backend.put('tenant-b', '', 'test-store', 'b1', { id: 'b1' }, {});
|
|
59
|
+
const resA = await backend.list('tenant-a', '', 'test-store');
|
|
60
|
+
const resB = await backend.list('tenant-b', '', 'test-store');
|
|
61
61
|
expect(resA.total).toBe(2);
|
|
62
62
|
expect(resB.total).toBe(1);
|
|
63
63
|
expect(resA.documents.every((d) => d.appId === 'tenant-a')).toBe(true);
|
|
64
64
|
expect(resB.documents.every((d) => d.appId === 'tenant-b')).toBe(true);
|
|
65
65
|
});
|
|
66
66
|
it('delete on one tenant does not affect the other', async () => {
|
|
67
|
-
await backend.put('tenant-a', 'test-store', 'k', { id: 'k' }, {});
|
|
68
|
-
await backend.put('tenant-b', 'test-store', 'k', { id: 'k' }, {});
|
|
69
|
-
await backend.delete('tenant-a', 'test-store', 'k');
|
|
70
|
-
expect(await backend.get('tenant-a', 'test-store', 'k')).toBeNull();
|
|
71
|
-
expect(await backend.get('tenant-b', 'test-store', 'k')).not.toBeNull();
|
|
67
|
+
await backend.put('tenant-a', '', 'test-store', 'k', { id: 'k' }, {});
|
|
68
|
+
await backend.put('tenant-b', '', 'test-store', 'k', { id: 'k' }, {});
|
|
69
|
+
await backend.delete('tenant-a', '', 'test-store', 'k');
|
|
70
|
+
expect(await backend.get('tenant-a', '', 'test-store', 'k')).toBeNull();
|
|
71
|
+
expect(await backend.get('tenant-b', '', 'test-store', 'k')).not.toBeNull();
|
|
72
72
|
});
|
|
73
73
|
});
|
|
74
74
|
describe('concurrent writes', () => {
|
|
75
75
|
it('serializes parallel puts to the same key via write queue', async () => {
|
|
76
|
-
const writes = Array.from({ length: 20 }, (_, i) => backend.put('app', 'test-store', 'same-key', { id: 'same-key', n: i }, {}));
|
|
76
|
+
const writes = Array.from({ length: 20 }, (_, i) => backend.put('app', '', 'test-store', 'same-key', { id: 'same-key', n: i }, {}));
|
|
77
77
|
const results = await Promise.all(writes);
|
|
78
78
|
expect(results.every((r) => r.stored)).toBe(true);
|
|
79
|
-
const final = await backend.get('app', 'test-store', 'same-key');
|
|
79
|
+
const final = await backend.get('app', '', 'test-store', 'same-key');
|
|
80
80
|
expect(final?.version).toBe(20);
|
|
81
81
|
});
|
|
82
82
|
});
|
|
83
83
|
describe('purgeExpired', () => {
|
|
84
84
|
it('removes only expired rows and returns the count', async () => {
|
|
85
|
-
await backend.put('app', 'ttl-store', 'e1', { id: 'e1' }, {});
|
|
86
|
-
await backend.put('app', 'ttl-store', 'e2', { id: 'e2' }, {});
|
|
87
|
-
await backend.put('app', 'test-store', 'keep', { id: 'keep' }, {});
|
|
85
|
+
await backend.put('app', '', 'ttl-store', 'e1', { id: 'e1' }, {});
|
|
86
|
+
await backend.put('app', '', 'ttl-store', 'e2', { id: 'e2' }, {});
|
|
87
|
+
await backend.put('app', '', 'test-store', 'keep', { id: 'keep' }, {});
|
|
88
88
|
await new Promise((r) => setTimeout(r, 1100));
|
|
89
|
-
const purged = await backend.purgeExpired('app');
|
|
89
|
+
const purged = await backend.purgeExpired('app', '');
|
|
90
90
|
expect(purged).toBe(2);
|
|
91
|
-
expect(await backend.get('app', 'ttl-store', 'e1')).toBeNull();
|
|
92
|
-
expect(await backend.get('app', 'ttl-store', 'e2')).toBeNull();
|
|
93
|
-
expect(await backend.get('app', 'test-store', 'keep')).not.toBeNull();
|
|
91
|
+
expect(await backend.get('app', '', 'ttl-store', 'e1')).toBeNull();
|
|
92
|
+
expect(await backend.get('app', '', 'ttl-store', 'e2')).toBeNull();
|
|
93
|
+
expect(await backend.get('app', '', 'test-store', 'keep')).not.toBeNull();
|
|
94
94
|
});
|
|
95
95
|
it('scoped purge only touches the named store', async () => {
|
|
96
|
-
await backend.put('app', 'ttl-store', 'a', { id: 'a' }, {});
|
|
97
|
-
await backend.put('app', 'test-store', 'b', { id: 'b' }, {});
|
|
96
|
+
await backend.put('app', '', 'ttl-store', 'a', { id: 'a' }, {});
|
|
97
|
+
await backend.put('app', '', 'test-store', 'b', { id: 'b' }, {});
|
|
98
98
|
await new Promise((r) => setTimeout(r, 1100));
|
|
99
|
-
const purged = await backend.purgeExpired('app', 'ttl-store');
|
|
99
|
+
const purged = await backend.purgeExpired('app', '', 'ttl-store');
|
|
100
100
|
expect(purged).toBe(1);
|
|
101
|
-
expect(await backend.get('app', 'test-store', 'b')).not.toBeNull();
|
|
101
|
+
expect(await backend.get('app', '', 'test-store', 'b')).not.toBeNull();
|
|
102
102
|
});
|
|
103
103
|
it('excludes expired rows from list() when includeStale is false', async () => {
|
|
104
|
-
await backend.put('app', 'ttl-store', 'x', { id: 'x' }, {});
|
|
104
|
+
await backend.put('app', '', 'ttl-store', 'x', { id: 'x' }, {});
|
|
105
105
|
await new Promise((r) => setTimeout(r, 1100));
|
|
106
|
-
const defaultList = await backend.list('app', 'ttl-store');
|
|
106
|
+
const defaultList = await backend.list('app', '', 'ttl-store');
|
|
107
107
|
expect(defaultList.total).toBe(0);
|
|
108
|
-
const withStale = await backend.list('app', 'ttl-store', { includeStale: true });
|
|
108
|
+
const withStale = await backend.list('app', '', 'ttl-store', { includeStale: true });
|
|
109
109
|
expect(withStale.total).toBe(1);
|
|
110
110
|
expect(withStale.documents[0].meta.stale).toBe(true);
|
|
111
111
|
});
|
|
112
112
|
});
|
|
113
113
|
describe('filter-field validation', () => {
|
|
114
114
|
it('rejects filter field names with injection characters', async () => {
|
|
115
|
-
await backend.put('app', 'test-store', 'k', { id: 'k' }, {});
|
|
116
|
-
await expect(backend.list('app', 'test-store', { filter: { "'; DROP TABLE store_documents; --": 'x' } })).rejects.toBeInstanceOf(StoreError);
|
|
115
|
+
await backend.put('app', '', 'test-store', 'k', { id: 'k' }, {});
|
|
116
|
+
await expect(backend.list('app', '', 'test-store', { filter: { "'; DROP TABLE store_documents; --": 'x' } })).rejects.toBeInstanceOf(StoreError);
|
|
117
117
|
});
|
|
118
118
|
it('rejects filter fields containing whitespace or punctuation', async () => {
|
|
119
|
-
await expect(backend.list('app', 'test-store', { filter: { 'value OR 1=1': 'x' } })).rejects.toBeInstanceOf(StoreError);
|
|
119
|
+
await expect(backend.list('app', '', 'test-store', { filter: { 'value OR 1=1': 'x' } })).rejects.toBeInstanceOf(StoreError);
|
|
120
120
|
});
|
|
121
121
|
it('rejects sort field with injection characters', async () => {
|
|
122
|
-
await expect(backend.list('app', 'test-store', { sort: "value); DROP TABLE x; --" })).rejects.toBeInstanceOf(StoreError);
|
|
122
|
+
await expect(backend.list('app', '', 'test-store', { sort: "value); DROP TABLE x; --" })).rejects.toBeInstanceOf(StoreError);
|
|
123
123
|
});
|
|
124
124
|
it('accepts valid snake_case filter field', async () => {
|
|
125
|
-
await backend.put('app', 'test-store', 'k', { id: 'k', my_field: 'yes' }, {});
|
|
126
|
-
const result = await backend.list('app', 'test-store', { filter: { my_field: 'yes' } });
|
|
125
|
+
await backend.put('app', '', 'test-store', 'k', { id: 'k', my_field: 'yes' }, {});
|
|
126
|
+
const result = await backend.list('app', '', 'test-store', { filter: { my_field: 'yes' } });
|
|
127
127
|
expect(result.total).toBe(1);
|
|
128
128
|
});
|
|
129
129
|
});
|
|
130
130
|
describe('versioning edge cases', () => {
|
|
131
131
|
it('history respects maxVersions trim', async () => {
|
|
132
132
|
for (let i = 1; i <= 6; i++) {
|
|
133
|
-
await backend.put('app', 'versioned-store', 'k', { id: 'k', n: i }, {});
|
|
133
|
+
await backend.put('app', '', 'versioned-store', 'k', { id: 'k', n: i }, {});
|
|
134
134
|
}
|
|
135
|
-
const history = await backend.history('app', 'versioned-store', 'k');
|
|
135
|
+
const history = await backend.history('app', '', 'versioned-store', 'k');
|
|
136
136
|
expect(history).toHaveLength(3);
|
|
137
137
|
expect(history[0].version).toBe(5);
|
|
138
138
|
expect(history[2].version).toBe(3);
|
|
@@ -140,11 +140,11 @@ function runSuite(makeBackend) {
|
|
|
140
140
|
});
|
|
141
141
|
describe('close() idempotency', () => {
|
|
142
142
|
it('double-close is safe and ops after close throw StoreError', async () => {
|
|
143
|
-
await backend.put('app', 'test-store', 'k', { id: 'k' }, {});
|
|
143
|
+
await backend.put('app', '', 'test-store', 'k', { id: 'k' }, {});
|
|
144
144
|
await backend.close();
|
|
145
145
|
await backend.close();
|
|
146
|
-
await expect(backend.get('app', 'test-store', 'k')).rejects.toBeInstanceOf(StoreError);
|
|
147
|
-
await expect(backend.put('app', 'test-store', 'k', { id: 'k' }, {})).rejects.toBeInstanceOf(StoreError);
|
|
146
|
+
await expect(backend.get('app', '', 'test-store', 'k')).rejects.toBeInstanceOf(StoreError);
|
|
147
|
+
await expect(backend.put('app', '', 'test-store', 'k', { id: 'k' }, {})).rejects.toBeInstanceOf(StoreError);
|
|
148
148
|
});
|
|
149
149
|
});
|
|
150
150
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle-store-backend.test.js","sourceRoot":"","sources":["../../../src/stores/drizzle-store-backend.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AAEH,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,QAAQ,CAAC;AAEnE,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAExC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAE1C,SAAS,SAAS,CAAC,YAAkC,EAAE;IACrD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,MAAM;YACX,MAAM,EAAE;gBACN,EAAE,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC;gBACpB,KAAK,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC;aACxB;SACF;QACD,QAAQ,EAAE,8BAA8B;QACxC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAkB;IAC5B,SAAS,EAAE;IACX,SAAS,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAC,CAAC;IACtC,SAAS,CAAC,EAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAC,QAAQ,EAAE,CAAC,EAAC,EAAC,CAAC;CAC7D,CAAC;AAOF,SAAS,QAAQ,CAAC,WAA2B;IACzC,IAAI,OAAqB,CAAC;IAC1B,IAAI,OAA4B,CAAC;IAEjC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,CAAC,GAAG,MAAM,WAAW,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACpB,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAC,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"drizzle-store-backend.test.js","sourceRoot":"","sources":["../../../src/stores/drizzle-store-backend.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,3 +8,4 @@ export { createPostgresStoreBackend } from './postgres-store-backend.js';
|
|
|
8
8
|
export type { PostgresStoreBackendOptions } from './postgres-store-backend.js';
|
|
9
9
|
export { resolveKey } from './key-resolver.js';
|
|
10
10
|
export { resolveTtl, evaluateCondition } from './ttl-resolver.js';
|
|
11
|
+
export { ScopedStoreBackend } from './scoped-store-backend.js';
|
package/dist/src/stores/index.js
CHANGED
|
@@ -7,4 +7,5 @@ export { DrizzleStoreBackend } from './drizzle-store-backend.js';
|
|
|
7
7
|
export { createPostgresStoreBackend } from './postgres-store-backend.js';
|
|
8
8
|
export { resolveKey } from './key-resolver.js';
|
|
9
9
|
export { resolveTtl, evaluateCondition } from './ttl-resolver.js';
|
|
10
|
+
export { ScopedStoreBackend } from './scoped-store-backend.js';
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAC,0BAA0B,EAAC,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,UAAU,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAC,0BAA0B,EAAC,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,UAAU,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* ScopedStoreBackend — wraps a StoreBackend and enforces scope isolation.
|
|
8
|
+
*
|
|
9
|
+
* Shared stores (marked with `shared: true` in the store JSON) are readable
|
|
10
|
+
* by all scopes but write-protected. Scoped stores read and write with the
|
|
11
|
+
* provided scopeId for per-user isolation.
|
|
12
|
+
*
|
|
13
|
+
* Scope resolution:
|
|
14
|
+
* - Reads (get, list, history): use '' for shared stores, scopeId otherwise
|
|
15
|
+
* - Writes (put, delete): throw StoreError for shared stores (read-only)
|
|
16
|
+
* - purgeExpired/initialize/close: delegate directly, no scope resolution
|
|
17
|
+
*/
|
|
18
|
+
import type { StoreBackend, StoreDocument, StoreDocumentMeta, StorePutResult, StoreListResult, StoreListOptions, LoadedStore } from '@amodalai/types';
|
|
19
|
+
export declare class ScopedStoreBackend implements StoreBackend {
|
|
20
|
+
private readonly inner;
|
|
21
|
+
private readonly scopeId;
|
|
22
|
+
private readonly sharedStores;
|
|
23
|
+
constructor(inner: StoreBackend, scopeId: string, sharedStores: Set<string>);
|
|
24
|
+
/** Resolve the scopeId to use for read operations. Shared stores always use ''. */
|
|
25
|
+
private readScopeId;
|
|
26
|
+
/** Assert a store is writable (not shared). Throws StoreError otherwise. */
|
|
27
|
+
private assertWritable;
|
|
28
|
+
initialize(stores: LoadedStore[]): Promise<void>;
|
|
29
|
+
get(appId: string, _scopeId: string, store: string, key: string): Promise<StoreDocument | null>;
|
|
30
|
+
put(appId: string, _scopeId: string, store: string, key: string, payload: Record<string, unknown>, meta: Partial<StoreDocumentMeta>): Promise<StorePutResult>;
|
|
31
|
+
list(appId: string, _scopeId: string, store: string, options?: StoreListOptions): Promise<StoreListResult>;
|
|
32
|
+
delete(appId: string, _scopeId: string, store: string, key: string): Promise<boolean>;
|
|
33
|
+
history(appId: string, _scopeId: string, store: string, key: string): Promise<StoreDocument[]>;
|
|
34
|
+
purgeExpired(appId: string, scopeId: string, store?: string): Promise<number>;
|
|
35
|
+
close(): Promise<void>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { StoreError } from '../errors.js';
|
|
7
|
+
export class ScopedStoreBackend {
|
|
8
|
+
inner;
|
|
9
|
+
scopeId;
|
|
10
|
+
sharedStores;
|
|
11
|
+
constructor(inner, scopeId, sharedStores) {
|
|
12
|
+
this.inner = inner;
|
|
13
|
+
this.scopeId = scopeId;
|
|
14
|
+
this.sharedStores = sharedStores;
|
|
15
|
+
}
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Scope helpers
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
/** Resolve the scopeId to use for read operations. Shared stores always use ''. */
|
|
20
|
+
readScopeId(store) {
|
|
21
|
+
return this.sharedStores.has(store) ? '' : this.scopeId;
|
|
22
|
+
}
|
|
23
|
+
/** Assert a store is writable (not shared). Throws StoreError otherwise. */
|
|
24
|
+
assertWritable(store, operation) {
|
|
25
|
+
if (this.sharedStores.has(store)) {
|
|
26
|
+
throw new StoreError(`Store "${store}" is shared (read-only) — writes are not allowed`, { store, operation, context: { scopeId: this.scopeId } });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// StoreBackend implementation
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
initialize(stores) {
|
|
33
|
+
return this.inner.initialize(stores);
|
|
34
|
+
}
|
|
35
|
+
get(appId, _scopeId, store, key) {
|
|
36
|
+
return this.inner.get(appId, this.readScopeId(store), store, key);
|
|
37
|
+
}
|
|
38
|
+
put(appId, _scopeId, store, key, payload, meta) {
|
|
39
|
+
this.assertWritable(store, 'put');
|
|
40
|
+
return this.inner.put(appId, this.scopeId, store, key, payload, meta);
|
|
41
|
+
}
|
|
42
|
+
list(appId, _scopeId, store, options) {
|
|
43
|
+
return this.inner.list(appId, this.readScopeId(store), store, options);
|
|
44
|
+
}
|
|
45
|
+
delete(appId, _scopeId, store, key) {
|
|
46
|
+
this.assertWritable(store, 'delete');
|
|
47
|
+
return this.inner.delete(appId, this.scopeId, store, key);
|
|
48
|
+
}
|
|
49
|
+
history(appId, _scopeId, store, key) {
|
|
50
|
+
return this.inner.history(appId, this.readScopeId(store), store, key);
|
|
51
|
+
}
|
|
52
|
+
purgeExpired(appId, scopeId, store) {
|
|
53
|
+
return this.inner.purgeExpired(appId, scopeId, store);
|
|
54
|
+
}
|
|
55
|
+
close() {
|
|
56
|
+
return this.inner.close();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=scoped-store-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-store-backend.js","sourceRoot":"","sources":["../../../src/stores/scoped-store-backend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAExC,MAAM,OAAO,kBAAkB;IAEV;IACA;IACA;IAHnB,YACmB,KAAmB,EACnB,OAAe,EACf,YAAyB;QAFzB,UAAK,GAAL,KAAK,CAAc;QACnB,YAAO,GAAP,OAAO,CAAQ;QACf,iBAAY,GAAZ,YAAY,CAAa;IACzC,CAAC;IAEJ,8EAA8E;IAC9E,gBAAgB;IAChB,8EAA8E;IAE9E,mFAAmF;IAC3E,WAAW,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1D,CAAC;IAED,4EAA4E;IACpE,cAAc,CAAC,KAAa,EAAE,SAAiB;QACrD,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,UAAU,CAClB,UAAU,KAAK,kDAAkD,EACjE,EAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,EAAC,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,8BAA8B;IAC9B,8EAA8E;IAE9E,UAAU,CAAC,MAAqB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAa,EAAE,GAAW;QAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,GAAG,CACD,KAAa,EACb,QAAgB,EAChB,KAAa,EACb,GAAW,EACX,OAAgC,EAChC,IAAgC;QAEhC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,CACF,KAAa,EACb,QAAgB,EAChB,KAAa,EACb,OAA0B;QAE1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAa,EAAE,GAAW;QAChE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAa,EAAE,GAAW;QACjE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,OAAe,EAAE,KAAc;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
7
|
+
import { ScopedStoreBackend } from './scoped-store-backend.js';
|
|
8
|
+
import { StoreError } from '../errors.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Minimal mock backend
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
function makeMockBackend() {
|
|
13
|
+
return {
|
|
14
|
+
initialize: vi.fn().mockResolvedValue(undefined),
|
|
15
|
+
get: vi.fn().mockResolvedValue(null),
|
|
16
|
+
put: vi.fn().mockResolvedValue({ stored: true, key: 'k', version: 1 }),
|
|
17
|
+
list: vi.fn().mockResolvedValue({ documents: [], total: 0, hasMore: false }),
|
|
18
|
+
delete: vi.fn().mockResolvedValue(true),
|
|
19
|
+
history: vi.fn().mockResolvedValue([]),
|
|
20
|
+
purgeExpired: vi.fn().mockResolvedValue(0),
|
|
21
|
+
close: vi.fn().mockResolvedValue(undefined),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function makeDoc() {
|
|
25
|
+
return {
|
|
26
|
+
key: 'k',
|
|
27
|
+
appId: 'app',
|
|
28
|
+
store: 'scoped-store',
|
|
29
|
+
version: 1,
|
|
30
|
+
payload: { id: 'k' },
|
|
31
|
+
meta: {},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const APP_ID = 'my-app';
|
|
35
|
+
const SCOPE_ID = 'user-99';
|
|
36
|
+
const SCOPED_STORE = 'scoped-store';
|
|
37
|
+
const SHARED_STORE = 'shared-catalog';
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Tests
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
describe('ScopedStoreBackend', () => {
|
|
42
|
+
let inner;
|
|
43
|
+
let backend;
|
|
44
|
+
beforeEach(() => {
|
|
45
|
+
inner = makeMockBackend();
|
|
46
|
+
backend = new ScopedStoreBackend(inner, SCOPE_ID, new Set([SHARED_STORE]));
|
|
47
|
+
});
|
|
48
|
+
// -------------------------------------------------------------------------
|
|
49
|
+
// get
|
|
50
|
+
// -------------------------------------------------------------------------
|
|
51
|
+
describe('get', () => {
|
|
52
|
+
it('normal store: passes scopeId to inner backend', async () => {
|
|
53
|
+
vi.mocked(inner.get).mockResolvedValueOnce(makeDoc());
|
|
54
|
+
await backend.get(APP_ID, '', SCOPED_STORE, 'k');
|
|
55
|
+
expect(inner.get).toHaveBeenCalledWith(APP_ID, SCOPE_ID, SCOPED_STORE, 'k');
|
|
56
|
+
});
|
|
57
|
+
it('shared store: passes empty scopeId to inner backend', async () => {
|
|
58
|
+
await backend.get(APP_ID, '', SHARED_STORE, 'k');
|
|
59
|
+
expect(inner.get).toHaveBeenCalledWith(APP_ID, '', SHARED_STORE, 'k');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
// -------------------------------------------------------------------------
|
|
63
|
+
// list
|
|
64
|
+
// -------------------------------------------------------------------------
|
|
65
|
+
describe('list', () => {
|
|
66
|
+
it('normal store: passes scopeId to inner backend', async () => {
|
|
67
|
+
await backend.list(APP_ID, '', SCOPED_STORE);
|
|
68
|
+
expect(inner.list).toHaveBeenCalledWith(APP_ID, SCOPE_ID, SCOPED_STORE, undefined);
|
|
69
|
+
});
|
|
70
|
+
it('shared store: passes empty scopeId to inner backend', async () => {
|
|
71
|
+
await backend.list(APP_ID, '', SHARED_STORE);
|
|
72
|
+
expect(inner.list).toHaveBeenCalledWith(APP_ID, '', SHARED_STORE, undefined);
|
|
73
|
+
});
|
|
74
|
+
it('forwards list options to inner backend', async () => {
|
|
75
|
+
const opts = { filter: { status: 'active' }, limit: 10 };
|
|
76
|
+
await backend.list(APP_ID, '', SCOPED_STORE, opts);
|
|
77
|
+
expect(inner.list).toHaveBeenCalledWith(APP_ID, SCOPE_ID, SCOPED_STORE, opts);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
// -------------------------------------------------------------------------
|
|
81
|
+
// put
|
|
82
|
+
// -------------------------------------------------------------------------
|
|
83
|
+
describe('put', () => {
|
|
84
|
+
it('normal store: passes scopeId to inner backend', async () => {
|
|
85
|
+
const payload = { id: 'k', name: 'test' };
|
|
86
|
+
const meta = { computedAt: '2026-01-01T00:00:00Z' };
|
|
87
|
+
await backend.put(APP_ID, '', SCOPED_STORE, 'k', payload, meta);
|
|
88
|
+
expect(inner.put).toHaveBeenCalledWith(APP_ID, SCOPE_ID, SCOPED_STORE, 'k', payload, meta);
|
|
89
|
+
});
|
|
90
|
+
it('shared store: throws StoreError', async () => {
|
|
91
|
+
await expect(async () => backend.put(APP_ID, '', SHARED_STORE, 'k', { id: 'k' }, {})).rejects.toBeInstanceOf(StoreError);
|
|
92
|
+
});
|
|
93
|
+
it('shared store: StoreError message mentions the store name', async () => {
|
|
94
|
+
await expect(async () => backend.put(APP_ID, '', SHARED_STORE, 'k', { id: 'k' }, {})).rejects.toThrow(SHARED_STORE);
|
|
95
|
+
});
|
|
96
|
+
it('shared store: inner put is never called', async () => {
|
|
97
|
+
await expect(async () => backend.put(APP_ID, '', SHARED_STORE, 'k', { id: 'k' }, {})).rejects.toBeInstanceOf(StoreError);
|
|
98
|
+
expect(inner.put).not.toHaveBeenCalled();
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
// -------------------------------------------------------------------------
|
|
102
|
+
// delete
|
|
103
|
+
// -------------------------------------------------------------------------
|
|
104
|
+
describe('delete', () => {
|
|
105
|
+
it('normal store: passes scopeId to inner backend', async () => {
|
|
106
|
+
await backend.delete(APP_ID, '', SCOPED_STORE, 'k');
|
|
107
|
+
expect(inner.delete).toHaveBeenCalledWith(APP_ID, SCOPE_ID, SCOPED_STORE, 'k');
|
|
108
|
+
});
|
|
109
|
+
it('shared store: throws StoreError', async () => {
|
|
110
|
+
await expect(async () => backend.delete(APP_ID, '', SHARED_STORE, 'k')).rejects.toBeInstanceOf(StoreError);
|
|
111
|
+
});
|
|
112
|
+
it('shared store: inner delete is never called', async () => {
|
|
113
|
+
await expect(async () => backend.delete(APP_ID, '', SHARED_STORE, 'k')).rejects.toBeInstanceOf(StoreError);
|
|
114
|
+
expect(inner.delete).not.toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
// -------------------------------------------------------------------------
|
|
118
|
+
// history
|
|
119
|
+
// -------------------------------------------------------------------------
|
|
120
|
+
describe('history', () => {
|
|
121
|
+
it('normal store: passes scopeId to inner backend', async () => {
|
|
122
|
+
await backend.history(APP_ID, '', SCOPED_STORE, 'k');
|
|
123
|
+
expect(inner.history).toHaveBeenCalledWith(APP_ID, SCOPE_ID, SCOPED_STORE, 'k');
|
|
124
|
+
});
|
|
125
|
+
it('shared store: passes empty scopeId to inner backend', async () => {
|
|
126
|
+
await backend.history(APP_ID, '', SHARED_STORE, 'k');
|
|
127
|
+
expect(inner.history).toHaveBeenCalledWith(APP_ID, '', SHARED_STORE, 'k');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
// -------------------------------------------------------------------------
|
|
131
|
+
// Delegation — initialize, close, purgeExpired
|
|
132
|
+
// -------------------------------------------------------------------------
|
|
133
|
+
describe('initialize', () => {
|
|
134
|
+
it('delegates to inner backend', async () => {
|
|
135
|
+
const stores = [];
|
|
136
|
+
await backend.initialize(stores);
|
|
137
|
+
expect(inner.initialize).toHaveBeenCalledWith(stores);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe('close', () => {
|
|
141
|
+
it('delegates to inner backend', async () => {
|
|
142
|
+
await backend.close();
|
|
143
|
+
expect(inner.close).toHaveBeenCalled();
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe('purgeExpired', () => {
|
|
147
|
+
it('delegates to inner backend with the provided args', async () => {
|
|
148
|
+
vi.mocked(inner.purgeExpired).mockResolvedValueOnce(5);
|
|
149
|
+
const count = await backend.purgeExpired(APP_ID, SCOPE_ID, SCOPED_STORE);
|
|
150
|
+
expect(inner.purgeExpired).toHaveBeenCalledWith(APP_ID, SCOPE_ID, SCOPED_STORE);
|
|
151
|
+
expect(count).toBe(5);
|
|
152
|
+
});
|
|
153
|
+
it('delegates purgeExpired without a store name', async () => {
|
|
154
|
+
await backend.purgeExpired(APP_ID, SCOPE_ID);
|
|
155
|
+
expect(inner.purgeExpired).toHaveBeenCalledWith(APP_ID, SCOPE_ID, undefined);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=scoped-store-backend.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped-store-backend.test.js","sourceRoot":"","sources":["../../../src/stores/scoped-store-backend.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export interface CustomToolSessionContext {
|
|
|
17
17
|
}>;
|
|
18
18
|
};
|
|
19
19
|
storeBackend?: {
|
|
20
|
-
put(appId: string, store: string, key: string, payload: Record<string, unknown>, meta: Record<string, unknown>): Promise<void>;
|
|
20
|
+
put(appId: string, scopeId: string, store: string, key: string, payload: Record<string, unknown>, meta: Record<string, unknown>): Promise<void>;
|
|
21
21
|
};
|
|
22
22
|
appId?: string;
|
|
23
23
|
shellExecutor?: {
|
|
@@ -100,7 +100,7 @@ function buildCustomToolContext(tool, sessionCtx, runtimeCtx) {
|
|
|
100
100
|
}
|
|
101
101
|
const key = resolveKey(storeDef.entity.key, payload);
|
|
102
102
|
const appId = sessionCtx.appId ?? LOCAL_APP_ID;
|
|
103
|
-
await sessionCtx.storeBackend.put(appId, storeName, key, payload, {});
|
|
103
|
+
await sessionCtx.storeBackend.put(appId, runtimeCtx.scopeId, storeName, key, payload, {});
|
|
104
104
|
return { key };
|
|
105
105
|
},
|
|
106
106
|
async exec(command, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-tool-adapter.js","sourceRoot":"","sources":["../../../src/tools/custom-tool-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"custom-tool-adapter.js","sourceRoot":"","sources":["../../../src/tools/custom-tool-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,6 +70,7 @@ function makeToolContext(overrides) {
|
|
|
70
70
|
log: vi.fn(),
|
|
71
71
|
signal: AbortSignal.timeout(30_000),
|
|
72
72
|
sessionId: 'sess-1',
|
|
73
|
+
scopeId: '',
|
|
73
74
|
...overrides,
|
|
74
75
|
};
|
|
75
76
|
}
|
|
@@ -197,7 +198,7 @@ describe('createCustomToolDefinition', () => {
|
|
|
197
198
|
};
|
|
198
199
|
const def = createCustomToolDefinition(makeTool(), executor, sessionCtx);
|
|
199
200
|
const result = await def.execute({}, makeToolContext());
|
|
200
|
-
expect(sessionCtx.storeBackend?.put).toHaveBeenCalledWith('test-app', 'alerts', 'a-1', { alert_id: 'a-1', severity: 'high' }, {});
|
|
201
|
+
expect(sessionCtx.storeBackend?.put).toHaveBeenCalledWith('test-app', '', 'alerts', 'a-1', { alert_id: 'a-1', severity: 'high' }, {});
|
|
201
202
|
expect(result).toEqual({ key: 'a-1' });
|
|
202
203
|
});
|
|
203
204
|
it('throws when store backend is not available', async () => {
|