@xandout/libra-harness 0.1.119 → 0.1.120

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 (186) hide show
  1. package/dist/extensions/loader.d.ts +10 -10
  2. package/dist/extensions/loader.js +10 -10
  3. package/package.json +2 -65
  4. package/dist/extensions/auto-steer/extension.d.ts +0 -46
  5. package/dist/extensions/auto-steer/extension.d.ts.map +0 -1
  6. package/dist/extensions/auto-steer/extension.js +0 -52
  7. package/dist/extensions/auto-steer/extension.js.map +0 -1
  8. package/dist/extensions/auto-steer/extension.json +0 -7
  9. package/dist/extensions/auto-steer/index.d.ts +0 -3
  10. package/dist/extensions/auto-steer/index.d.ts.map +0 -1
  11. package/dist/extensions/auto-steer/index.js +0 -2
  12. package/dist/extensions/auto-steer/index.js.map +0 -1
  13. package/dist/extensions/emoji/extension.d.ts +0 -20
  14. package/dist/extensions/emoji/extension.d.ts.map +0 -1
  15. package/dist/extensions/emoji/extension.js +0 -22
  16. package/dist/extensions/emoji/extension.js.map +0 -1
  17. package/dist/extensions/emoji/extension.json +0 -7
  18. package/dist/extensions/emoji/index.d.ts +0 -3
  19. package/dist/extensions/emoji/index.d.ts.map +0 -1
  20. package/dist/extensions/emoji/index.js +0 -2
  21. package/dist/extensions/emoji/index.js.map +0 -1
  22. package/dist/extensions/filesystem/extension.d.ts +0 -53
  23. package/dist/extensions/filesystem/extension.d.ts.map +0 -1
  24. package/dist/extensions/filesystem/extension.js +0 -350
  25. package/dist/extensions/filesystem/extension.js.map +0 -1
  26. package/dist/extensions/filesystem/extension.json +0 -6
  27. package/dist/extensions/filesystem/extension.test.d.ts +0 -2
  28. package/dist/extensions/filesystem/extension.test.d.ts.map +0 -1
  29. package/dist/extensions/filesystem/extension.test.js +0 -387
  30. package/dist/extensions/filesystem/extension.test.js.map +0 -1
  31. package/dist/extensions/filesystem/index.d.ts +0 -2
  32. package/dist/extensions/filesystem/index.d.ts.map +0 -1
  33. package/dist/extensions/filesystem/index.js +0 -2
  34. package/dist/extensions/filesystem/index.js.map +0 -1
  35. package/dist/extensions/keyword-extractor/extension.d.ts +0 -53
  36. package/dist/extensions/keyword-extractor/extension.d.ts.map +0 -1
  37. package/dist/extensions/keyword-extractor/extension.js +0 -61
  38. package/dist/extensions/keyword-extractor/extension.js.map +0 -1
  39. package/dist/extensions/keyword-extractor/extension.json +0 -6
  40. package/dist/extensions/keyword-extractor/extension.test.d.ts +0 -2
  41. package/dist/extensions/keyword-extractor/extension.test.d.ts.map +0 -1
  42. package/dist/extensions/keyword-extractor/extension.test.js +0 -105
  43. package/dist/extensions/keyword-extractor/extension.test.js.map +0 -1
  44. package/dist/extensions/keyword-extractor/index.d.ts +0 -5
  45. package/dist/extensions/keyword-extractor/index.d.ts.map +0 -1
  46. package/dist/extensions/keyword-extractor/index.js +0 -3
  47. package/dist/extensions/keyword-extractor/index.js.map +0 -1
  48. package/dist/extensions/keyword-extractor/nlp.d.ts +0 -68
  49. package/dist/extensions/keyword-extractor/nlp.d.ts.map +0 -1
  50. package/dist/extensions/keyword-extractor/nlp.js +0 -156
  51. package/dist/extensions/keyword-extractor/nlp.js.map +0 -1
  52. package/dist/extensions/keyword-extractor/nlp.test.d.ts +0 -2
  53. package/dist/extensions/keyword-extractor/nlp.test.d.ts.map +0 -1
  54. package/dist/extensions/keyword-extractor/nlp.test.js +0 -176
  55. package/dist/extensions/keyword-extractor/nlp.test.js.map +0 -1
  56. package/dist/extensions/logger/extension.d.ts +0 -52
  57. package/dist/extensions/logger/extension.d.ts.map +0 -1
  58. package/dist/extensions/logger/extension.js +0 -68
  59. package/dist/extensions/logger/extension.js.map +0 -1
  60. package/dist/extensions/logger/extension.json +0 -7
  61. package/dist/extensions/logger/index.d.ts +0 -3
  62. package/dist/extensions/logger/index.d.ts.map +0 -1
  63. package/dist/extensions/logger/index.js +0 -2
  64. package/dist/extensions/logger/index.js.map +0 -1
  65. package/dist/extensions/mcp/extension.d.ts +0 -63
  66. package/dist/extensions/mcp/extension.d.ts.map +0 -1
  67. package/dist/extensions/mcp/extension.js +0 -437
  68. package/dist/extensions/mcp/extension.js.map +0 -1
  69. package/dist/extensions/mcp/extension.json +0 -7
  70. package/dist/extensions/mcp/extension.test.d.ts +0 -2
  71. package/dist/extensions/mcp/extension.test.d.ts.map +0 -1
  72. package/dist/extensions/mcp/extension.test.js +0 -286
  73. package/dist/extensions/mcp/extension.test.js.map +0 -1
  74. package/dist/extensions/mcp/index.d.ts +0 -3
  75. package/dist/extensions/mcp/index.d.ts.map +0 -1
  76. package/dist/extensions/mcp/index.js +0 -2
  77. package/dist/extensions/mcp/index.js.map +0 -1
  78. package/dist/extensions/mem-session/extension.d.ts +0 -24
  79. package/dist/extensions/mem-session/extension.d.ts.map +0 -1
  80. package/dist/extensions/mem-session/extension.js +0 -49
  81. package/dist/extensions/mem-session/extension.js.map +0 -1
  82. package/dist/extensions/mem-session/extension.json +0 -6
  83. package/dist/extensions/mem-session/index.d.ts +0 -2
  84. package/dist/extensions/mem-session/index.d.ts.map +0 -1
  85. package/dist/extensions/mem-session/index.js +0 -2
  86. package/dist/extensions/mem-session/index.js.map +0 -1
  87. package/dist/extensions/memory/extension.d.ts +0 -54
  88. package/dist/extensions/memory/extension.d.ts.map +0 -1
  89. package/dist/extensions/memory/extension.js +0 -143
  90. package/dist/extensions/memory/extension.js.map +0 -1
  91. package/dist/extensions/memory/extension.json +0 -7
  92. package/dist/extensions/memory/index.d.ts +0 -4
  93. package/dist/extensions/memory/index.d.ts.map +0 -1
  94. package/dist/extensions/memory/index.js +0 -3
  95. package/dist/extensions/memory/index.js.map +0 -1
  96. package/dist/extensions/memory/llm-extractor.d.ts +0 -42
  97. package/dist/extensions/memory/llm-extractor.d.ts.map +0 -1
  98. package/dist/extensions/memory/llm-extractor.js +0 -86
  99. package/dist/extensions/memory/llm-extractor.js.map +0 -1
  100. package/dist/extensions/memory/types.d.ts +0 -142
  101. package/dist/extensions/memory/types.d.ts.map +0 -1
  102. package/dist/extensions/memory/types.js +0 -2
  103. package/dist/extensions/memory/types.js.map +0 -1
  104. package/dist/extensions/otel/extension.d.ts +0 -57
  105. package/dist/extensions/otel/extension.d.ts.map +0 -1
  106. package/dist/extensions/otel/extension.js +0 -253
  107. package/dist/extensions/otel/extension.js.map +0 -1
  108. package/dist/extensions/otel/extension.json +0 -7
  109. package/dist/extensions/otel/extension.test.d.ts +0 -2
  110. package/dist/extensions/otel/extension.test.d.ts.map +0 -1
  111. package/dist/extensions/otel/extension.test.js +0 -399
  112. package/dist/extensions/otel/extension.test.js.map +0 -1
  113. package/dist/extensions/otel/index.d.ts +0 -4
  114. package/dist/extensions/otel/index.d.ts.map +0 -1
  115. package/dist/extensions/otel/index.js +0 -3
  116. package/dist/extensions/otel/index.js.map +0 -1
  117. package/dist/extensions/otel/jsonl-span-exporter.d.ts +0 -60
  118. package/dist/extensions/otel/jsonl-span-exporter.d.ts.map +0 -1
  119. package/dist/extensions/otel/jsonl-span-exporter.js +0 -134
  120. package/dist/extensions/otel/jsonl-span-exporter.js.map +0 -1
  121. package/dist/extensions/scripts/extension.d.ts +0 -180
  122. package/dist/extensions/scripts/extension.d.ts.map +0 -1
  123. package/dist/extensions/scripts/extension.js +0 -618
  124. package/dist/extensions/scripts/extension.js.map +0 -1
  125. package/dist/extensions/scripts/extension.json +0 -7
  126. package/dist/extensions/scripts/extension.test.d.ts +0 -2
  127. package/dist/extensions/scripts/extension.test.d.ts.map +0 -1
  128. package/dist/extensions/scripts/extension.test.js +0 -552
  129. package/dist/extensions/scripts/extension.test.js.map +0 -1
  130. package/dist/extensions/scripts/index.d.ts +0 -3
  131. package/dist/extensions/scripts/index.d.ts.map +0 -1
  132. package/dist/extensions/scripts/index.js +0 -2
  133. package/dist/extensions/scripts/index.js.map +0 -1
  134. package/dist/extensions/structured-output/extension.d.ts +0 -9
  135. package/dist/extensions/structured-output/extension.d.ts.map +0 -1
  136. package/dist/extensions/structured-output/extension.js +0 -93
  137. package/dist/extensions/structured-output/extension.js.map +0 -1
  138. package/dist/extensions/structured-output/extension.json +0 -7
  139. package/dist/extensions/structured-output/index.d.ts +0 -3
  140. package/dist/extensions/structured-output/index.d.ts.map +0 -1
  141. package/dist/extensions/structured-output/index.js +0 -2
  142. package/dist/extensions/structured-output/index.js.map +0 -1
  143. package/dist/extensions/timestamp/extension.d.ts +0 -11
  144. package/dist/extensions/timestamp/extension.d.ts.map +0 -1
  145. package/dist/extensions/timestamp/extension.js +0 -21
  146. package/dist/extensions/timestamp/extension.js.map +0 -1
  147. package/dist/extensions/timestamp/extension.json +0 -6
  148. package/dist/extensions/timestamp/index.d.ts +0 -2
  149. package/dist/extensions/timestamp/index.d.ts.map +0 -1
  150. package/dist/extensions/timestamp/index.js +0 -2
  151. package/dist/extensions/timestamp/index.js.map +0 -1
  152. package/dist/extensions/token-stats/extension.d.ts +0 -50
  153. package/dist/extensions/token-stats/extension.d.ts.map +0 -1
  154. package/dist/extensions/token-stats/extension.js +0 -99
  155. package/dist/extensions/token-stats/extension.js.map +0 -1
  156. package/dist/extensions/token-stats/extension.json +0 -7
  157. package/dist/extensions/token-stats/extension.test.d.ts +0 -2
  158. package/dist/extensions/token-stats/extension.test.d.ts.map +0 -1
  159. package/dist/extensions/token-stats/extension.test.js +0 -197
  160. package/dist/extensions/token-stats/extension.test.js.map +0 -1
  161. package/dist/extensions/token-stats/index.d.ts +0 -3
  162. package/dist/extensions/token-stats/index.d.ts.map +0 -1
  163. package/dist/extensions/token-stats/index.js +0 -2
  164. package/dist/extensions/token-stats/index.js.map +0 -1
  165. package/dist/extensions/tool-buffer/extension.d.ts +0 -89
  166. package/dist/extensions/tool-buffer/extension.d.ts.map +0 -1
  167. package/dist/extensions/tool-buffer/extension.js +0 -182
  168. package/dist/extensions/tool-buffer/extension.js.map +0 -1
  169. package/dist/extensions/tool-buffer/extension.json +0 -7
  170. package/dist/extensions/tool-buffer/extension.test.d.ts +0 -2
  171. package/dist/extensions/tool-buffer/extension.test.d.ts.map +0 -1
  172. package/dist/extensions/tool-buffer/extension.test.js +0 -549
  173. package/dist/extensions/tool-buffer/extension.test.js.map +0 -1
  174. package/dist/extensions/tool-buffer/index.d.ts +0 -3
  175. package/dist/extensions/tool-buffer/index.d.ts.map +0 -1
  176. package/dist/extensions/tool-buffer/index.js +0 -2
  177. package/dist/extensions/tool-buffer/index.js.map +0 -1
  178. package/dist/extensions/weather-tool/extension.d.ts +0 -22
  179. package/dist/extensions/weather-tool/extension.d.ts.map +0 -1
  180. package/dist/extensions/weather-tool/extension.js +0 -33
  181. package/dist/extensions/weather-tool/extension.js.map +0 -1
  182. package/dist/extensions/weather-tool/extension.json +0 -7
  183. package/dist/extensions/weather-tool/index.d.ts +0 -3
  184. package/dist/extensions/weather-tool/index.d.ts.map +0 -1
  185. package/dist/extensions/weather-tool/index.js +0 -2
  186. package/dist/extensions/weather-tool/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.test.d.ts","sourceRoot":"","sources":["../../../src/extensions/scripts/extension.test.ts"],"names":[],"mappings":""}
@@ -1,552 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { mkdtempSync, rmSync, existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import { tmpdir } from 'node:os';
5
- import { Agent } from '@xandout/libra-harness';
6
- import createScriptsExtension from './extension.js';
7
- // Minimal model that never calls the LLM — we only need tools registered.
8
- function makeAgent() {
9
- return new Agent({
10
- model: {
11
- async generate() {
12
- return { message: { role: 'assistant', content: '' }, finishReason: 'stop' };
13
- },
14
- },
15
- });
16
- }
17
- function getTool(agent, name) {
18
- return agent.tools.get(name);
19
- }
20
- // A fake filesystem helper that mimics the filesystem extension's surface,
21
- // scoped to a single sandbox directory named "data".
22
- function makeFakeFs(sandboxDir) {
23
- if (!existsSync(sandboxDir))
24
- mkdirSync(sandboxDir, { recursive: true });
25
- return {
26
- resolvePath(path) {
27
- if (!path.startsWith('data/') && path !== 'data') {
28
- throw new Error(`Path "${path}" must start with a sandbox name ("data")`);
29
- }
30
- const rel = path === 'data' ? '.' : path.slice('data/'.length);
31
- if (rel.startsWith('..'))
32
- throw new Error(`Path "${path}" escapes the sandbox`);
33
- return join(sandboxDir, rel);
34
- },
35
- saveBytes(path, data) {
36
- const abs = this.resolvePath(path);
37
- const dir = abs.slice(0, abs.lastIndexOf('/'));
38
- if (!existsSync(dir))
39
- mkdirSync(dir, { recursive: true });
40
- writeFileSync(abs, data);
41
- return path;
42
- },
43
- };
44
- }
45
- describe('scripts extension', () => {
46
- let registry;
47
- let sandbox;
48
- beforeEach(() => {
49
- registry = mkdtempSync(join(tmpdir(), 'scripts-reg-'));
50
- sandbox = mkdtempSync(join(tmpdir(), 'scripts-fs-'));
51
- });
52
- afterEach(() => {
53
- rmSync(registry, { recursive: true, force: true });
54
- rmSync(sandbox, { recursive: true, force: true });
55
- });
56
- function makeExt(overrides = {}) {
57
- return createScriptsExtension({
58
- registryDir: registry,
59
- interruptMs: 2000,
60
- ...overrides,
61
- });
62
- }
63
- // ── Registry persistence ───────────────────────────────────────────────
64
- it('persists a saved script to disk as JSON', async () => {
65
- const ext = makeExt();
66
- const agent = makeAgent();
67
- agent.use(ext);
68
- const tool = getTool(agent, 'script_save');
69
- const result = await tool.execute({ name: 'filter-active', description: 'filters', code: 'return input' });
70
- expect(result.content).toContain('Saved script "filter-active"');
71
- expect(result.content).toContain('created');
72
- const files = ext.listScripts();
73
- expect(files).toHaveLength(1);
74
- expect(files[0].name).toBe('filter-active');
75
- expect(files[0].code).toBe('return input');
76
- // Persisted to disk.
77
- const onDisk = JSON.parse(readFileSync(join(registry, 'filter-active.json'), 'utf-8'));
78
- expect(onDisk.code).toBe('return input');
79
- });
80
- it('updates an existing script and preserves createdAt', async () => {
81
- const ext = makeExt();
82
- const agent = makeAgent();
83
- agent.use(ext);
84
- await getTool(agent, 'script_save').execute({ name: 's', code: 'return 1' });
85
- const first = ext.getScript('s');
86
- await getTool(agent, 'script_save').execute({ name: 's', description: 'now described', code: 'return 2' });
87
- const second = ext.getScript('s');
88
- expect(second.code).toBe('return 2');
89
- expect(second.description).toBe('now described');
90
- expect(second.createdAt).toBe(first.createdAt);
91
- expect(second.updatedAt).not.toBe(first.createdAt);
92
- });
93
- it('rejects saving without a name or code', async () => {
94
- const ext = makeExt();
95
- const agent = makeAgent();
96
- agent.use(ext);
97
- const noName = await getTool(agent, 'script_save').execute({ code: 'return 1' });
98
- expect(noName.content).toContain('name is required');
99
- const noCode = await getTool(agent, 'script_save').execute({ name: 'x' });
100
- expect(noCode.content).toContain('code is required');
101
- });
102
- // ── list / get / delete ────────────────────────────────────────────────
103
- it('lists registered scripts', async () => {
104
- const ext = makeExt();
105
- const agent = makeAgent();
106
- agent.use(ext);
107
- await getTool(agent, 'script_save').execute({ name: 'a', description: 'first', code: 'return 1' });
108
- await getTool(agent, 'script_save').execute({ name: 'b', description: 'second', code: 'return 2' });
109
- const result = await getTool(agent, 'script_list').execute({});
110
- expect(result.content).toContain('Registered scripts (2)');
111
- expect(result.content).toContain('a — first');
112
- expect(result.content).toContain('b — second');
113
- });
114
- it('reports empty registry', async () => {
115
- const ext = makeExt();
116
- const agent = makeAgent();
117
- agent.use(ext);
118
- const result = await getTool(agent, 'script_list').execute({});
119
- expect(result.content).toContain('No scripts registered');
120
- });
121
- it('gets a script source', async () => {
122
- const ext = makeExt();
123
- const agent = makeAgent();
124
- agent.use(ext);
125
- await getTool(agent, 'script_save').execute({ name: 'g', description: 'd', code: 'return input.x' });
126
- const result = await getTool(agent, 'script_get').execute({ name: 'g' });
127
- expect(result.content).toContain('return input.x');
128
- expect(result.content).toContain('Description: d');
129
- });
130
- it('deletes a script', async () => {
131
- const ext = makeExt();
132
- const agent = makeAgent();
133
- agent.use(ext);
134
- await getTool(agent, 'script_save').execute({ name: 'del', code: 'return 1' });
135
- const result = await getTool(agent, 'script_delete').execute({ name: 'del' });
136
- expect(result.content).toContain('Deleted script: del');
137
- expect(ext.getScript('del')).toBeUndefined();
138
- expect(existsSync(join(registry, 'del.json'))).toBe(false);
139
- });
140
- // ── Execution (QuickJS sandbox) ────────────────────────────────────────
141
- it('runs a script with inline input and returns JSON output', async () => {
142
- const ext = makeExt();
143
- const agent = makeAgent();
144
- agent.use(ext);
145
- await getTool(agent, 'script_save').execute({
146
- name: 'sum',
147
- code: 'return input.a + input.b',
148
- });
149
- const result = await getTool(agent, 'script_run').execute({ name: 'sum', input: { a: 2, b: 3 } });
150
- expect(result.content).toContain('OK');
151
- expect(result.content).toContain('5');
152
- });
153
- it('filters an array input', async () => {
154
- const ext = makeExt();
155
- const agent = makeAgent();
156
- agent.use(ext);
157
- await getTool(agent, 'script_save').execute({
158
- name: 'active',
159
- code: 'return input.filter(x => x.active).map(x => x.name)',
160
- });
161
- const result = await getTool(agent, 'script_run').execute({
162
- name: 'active',
163
- input: [
164
- { name: 'a', active: true },
165
- { name: 'b', active: false },
166
- { name: 'c', active: true },
167
- ],
168
- });
169
- expect(result.content).toContain('"a"');
170
- expect(result.content).toContain('"c"');
171
- expect(result.content).not.toContain('"b"');
172
- });
173
- it('reports a runtime error from the script', async () => {
174
- const ext = makeExt();
175
- const agent = makeAgent();
176
- agent.use(ext);
177
- await getTool(agent, 'script_save').execute({
178
- name: 'boom',
179
- code: 'throw new Error("kaboom")',
180
- });
181
- const result = await getTool(agent, 'script_run').execute({ name: 'boom', input: null });
182
- expect(result.content).toContain('ERROR');
183
- expect(result.content).toContain('kaboom');
184
- });
185
- it('reports when the script is not found', async () => {
186
- const ext = makeExt();
187
- const agent = makeAgent();
188
- agent.use(ext);
189
- const result = await getTool(agent, 'script_run').execute({ name: 'missing', input: 1 });
190
- expect(result.content).toContain('Script not found: missing');
191
- });
192
- it('defaults input to null when neither input nor inputPath given', async () => {
193
- const ext = makeExt();
194
- const agent = makeAgent();
195
- agent.use(ext);
196
- await getTool(agent, 'script_save').execute({ name: 'id', code: 'return input' });
197
- const result = await getTool(agent, 'script_run').execute({ name: 'id' });
198
- expect(result.content).toContain('null');
199
- });
200
- it('cannot access the host process from inside the sandbox', async () => {
201
- const ext = makeExt();
202
- const agent = makeAgent();
203
- agent.use(ext);
204
- await getTool(agent, 'script_save').execute({
205
- name: 'escape',
206
- code: 'return typeof process',
207
- });
208
- const result = await getTool(agent, 'script_run').execute({ name: 'escape', input: null });
209
- // `process` is undefined inside QuickJS.
210
- expect(result.content).toContain('undefined');
211
- });
212
- // ── Disk path input (fs helper + allowlist) ────────────────────────────
213
- it('reads input from a sandbox disk path via fs helper', async () => {
214
- const fs = makeFakeFs(sandbox);
215
- const ext = makeExt({ fs, allowedFsDirs: ['data'] });
216
- const agent = makeAgent();
217
- agent.use(ext);
218
- // Write input file into the sandbox directly.
219
- writeFileSync(join(sandbox, 'in.json'), JSON.stringify({ value: 42 }));
220
- await getTool(agent, 'script_save').execute({ name: 'read', code: 'return input.value * 2' });
221
- const result = await getTool(agent, 'script_run').execute({ name: 'read', inputPath: 'data/in.json' });
222
- expect(result.content).toContain('84');
223
- });
224
- it('blocks disk paths from a non-allowed sandbox dir', async () => {
225
- const fs = makeFakeFs(sandbox);
226
- const ext = makeExt({ fs, allowedFsDirs: ['data'] });
227
- const agent = makeAgent();
228
- agent.use(ext);
229
- writeFileSync(join(sandbox, 'secret.json'), JSON.stringify({ x: 1 }));
230
- await getTool(agent, 'script_save').execute({ name: 'r', code: 'return input' });
231
- const result = await getTool(agent, 'script_run').execute({ name: 'r', inputPath: 'secret/secret.json' });
232
- expect(result.content).toContain('not allowed for scripts');
233
- });
234
- it('writes output to a sandbox disk path via outputPath', async () => {
235
- const fs = makeFakeFs(sandbox);
236
- const ext = makeExt({ fs, allowedFsDirs: ['data'] });
237
- const agent = makeAgent();
238
- agent.use(ext);
239
- await getTool(agent, 'script_save').execute({ name: 'gen', code: 'return { n: 7 }' });
240
- const result = await getTool(agent, 'script_run').execute({
241
- name: 'gen',
242
- input: null,
243
- outputPath: 'data/out.json',
244
- });
245
- expect(result.content).toContain('data/out.json');
246
- const written = JSON.parse(readFileSync(join(sandbox, 'out.json'), 'utf-8'));
247
- expect(written.n).toBe(7);
248
- });
249
- it('refuses disk paths when no fs or allowedDirs configured', async () => {
250
- const ext = makeExt();
251
- const agent = makeAgent();
252
- agent.use(ext);
253
- await getTool(agent, 'script_save').execute({ name: 'r', code: 'return input' });
254
- const result = await getTool(agent, 'script_run').execute({ name: 'r', inputPath: '/etc/passwd' });
255
- expect(result.content).toContain('Disk path input is not configured');
256
- });
257
- // ── Standalone allowedDirs ─────────────────────────────────────────────
258
- it('supports standalone allowedDirs for disk input', async () => {
259
- const ext = makeExt({ allowedDirs: [sandbox] });
260
- const agent = makeAgent();
261
- agent.use(ext);
262
- writeFileSync(join(sandbox, 'val.json'), JSON.stringify({ v: 'hi' }));
263
- await getTool(agent, 'script_save').execute({ name: 'r', code: 'return input.v.toUpperCase()' });
264
- const result = await getTool(agent, 'script_run').execute({ name: 'r', inputPath: join(sandbox, 'val.json') });
265
- expect(result.content).toContain('HI');
266
- });
267
- it('blocks standalone paths outside allowedDirs', async () => {
268
- const ext = makeExt({ allowedDirs: [sandbox] });
269
- const agent = makeAgent();
270
- agent.use(ext);
271
- await getTool(agent, 'script_save').execute({ name: 'r', code: 'return input' });
272
- const result = await getTool(agent, 'script_run').execute({ name: 'r', inputPath: '/etc/hosts' });
273
- expect(result.content).toContain('not within an allowed directory');
274
- });
275
- // ── Programmatic API ───────────────────────────────────────────────────
276
- it('exposes runScript/getScript/listScripts on the extension object', async () => {
277
- const ext = makeExt();
278
- const agent = makeAgent();
279
- agent.use(ext);
280
- await getTool(agent, 'script_save').execute({ name: 'p', code: 'return input + 1' });
281
- const res = await ext.runScript('p', 41);
282
- expect(res.ok).toBe(true);
283
- expect(res.output).toBe('42');
284
- expect(ext.getScript('p').code).toBe('return input + 1');
285
- expect(ext.listScripts().map((s) => s.name)).toEqual(['p']);
286
- });
287
- it('truncates large inline output', async () => {
288
- const ext = makeExt({ maxOutputChars: 100 });
289
- const agent = makeAgent();
290
- agent.use(ext);
291
- await getTool(agent, 'script_save').execute({ name: 'big', code: 'return "x".repeat(500)' });
292
- const result = await getTool(agent, 'script_run').execute({ name: 'big', input: null });
293
- expect(result.content).toContain('truncated');
294
- });
295
- // ── Disk I/O edge cases ────────────────────────────────────────────────
296
- it('readInputPath reports missing file (fs mode)', async () => {
297
- const fs = makeFakeFs(sandbox);
298
- const ext = makeExt({ fs, allowedFsDirs: ['data'] });
299
- const agent = makeAgent();
300
- agent.use(ext);
301
- await getTool(agent, 'script_save').execute({ name: 'r', code: 'return input' });
302
- const result = await getTool(agent, 'script_run').execute({ name: 'r', inputPath: 'data/missing.json' });
303
- expect(result.content).toContain('Input file not found');
304
- });
305
- it('readInputPath rejects a directory (fs mode)', async () => {
306
- const fs = makeFakeFs(sandbox);
307
- const ext = makeExt({ fs, allowedFsDirs: ['data'] });
308
- const agent = makeAgent();
309
- agent.use(ext);
310
- mkdirSync(join(sandbox, 'sub'), { recursive: true });
311
- await getTool(agent, 'script_save').execute({ name: 'r', code: 'return input' });
312
- const result = await getTool(agent, 'script_run').execute({ name: 'r', inputPath: 'data/sub' });
313
- expect(result.content).toContain('Input path is a directory');
314
- });
315
- it('readInputPath rejects oversized files', async () => {
316
- const fs = makeFakeFs(sandbox);
317
- const ext = makeExt({ fs, allowedFsDirs: ['data'], maxInputBytes: 4 });
318
- const agent = makeAgent();
319
- agent.use(ext);
320
- writeFileSync(join(sandbox, 'big.json'), JSON.stringify({ v: 'way too long' }));
321
- await getTool(agent, 'script_save').execute({ name: 'r', code: 'return input' });
322
- const result = await getTool(agent, 'script_run').execute({ name: 'r', inputPath: 'data/big.json' });
323
- expect(result.content).toContain('Input file too large');
324
- });
325
- it('readInputPath passes raw string when file is not JSON', async () => {
326
- const fs = makeFakeFs(sandbox);
327
- const ext = makeExt({ fs, allowedFsDirs: ['data'] });
328
- const agent = makeAgent();
329
- agent.use(ext);
330
- writeFileSync(join(sandbox, 'plain.txt'), 'hello world');
331
- await getTool(agent, 'script_save').execute({ name: 'r', code: 'return input.toUpperCase()' });
332
- const result = await getTool(agent, 'script_run').execute({ name: 'r', inputPath: 'data/plain.txt' });
333
- expect(result.content).toContain('HELLO WORLD');
334
- });
335
- it('writes output via standalone allowedDirs', async () => {
336
- const ext = makeExt({ allowedDirs: [sandbox] });
337
- const agent = makeAgent();
338
- agent.use(ext);
339
- await getTool(agent, 'script_save').execute({ name: 'g', code: 'return { ok: true }' });
340
- const result = await getTool(agent, 'script_run').execute({
341
- name: 'g',
342
- input: null,
343
- outputPath: join(sandbox, 'out.json'),
344
- });
345
- expect(result.content).toContain('out.json');
346
- const written = JSON.parse(readFileSync(join(sandbox, 'out.json'), 'utf-8'));
347
- expect(written.ok).toBe(true);
348
- });
349
- it('refuses outputPath when no disk config is present', async () => {
350
- const ext = makeExt();
351
- const agent = makeAgent();
352
- agent.use(ext);
353
- await getTool(agent, 'script_save').execute({ name: 'g', code: 'return 1' });
354
- const result = await getTool(agent, 'script_run').execute({ name: 'g', input: null, outputPath: 'out.json' });
355
- expect(result.content).toContain('Disk path output is not configured');
356
- });
357
- it('listScripts skips corrupt registry files', async () => {
358
- const ext = makeExt();
359
- writeFileSync(join(registry, 'broken.json'), '{ not valid json');
360
- writeFileSync(join(registry, 'good.json'), JSON.stringify({ name: 'good', description: '', code: 'return 1', createdAt: 't', updatedAt: 't' }));
361
- const list = ext.listScripts();
362
- expect(list.map((s) => s.name)).toEqual(['good']);
363
- });
364
- // ── save error + error rendering ───────────────────────────────────────
365
- it('script_save reports an error for a name that sanitizes to empty', async () => {
366
- const ext = makeExt();
367
- const agent = makeAgent();
368
- agent.use(ext);
369
- const result = await getTool(agent, 'script_save').execute({ name: '!!!', code: 'return 1' });
370
- expect(result.content).toContain('Error:');
371
- expect(result.content).toContain('empty after sanitization');
372
- });
373
- it('renders a thrown plain object with a message', async () => {
374
- const ext = makeExt();
375
- const agent = makeAgent();
376
- agent.use(ext);
377
- await getTool(agent, 'script_save').execute({ name: 'obj', code: 'throw { message: "obj-err" }' });
378
- const result = await getTool(agent, 'script_run').execute({ name: 'obj', input: null });
379
- expect(result.content).toContain('obj-err');
380
- });
381
- it('renders a thrown plain object without a message', async () => {
382
- const ext = makeExt();
383
- const agent = makeAgent();
384
- agent.use(ext);
385
- await getTool(agent, 'script_save').execute({ name: 'obj2', code: 'throw { code: 42 }' });
386
- const result = await getTool(agent, 'script_run').execute({ name: 'obj2', input: null });
387
- expect(result.content).toContain('ERROR');
388
- expect(result.content).toContain('42');
389
- });
390
- it('renders a thrown string', async () => {
391
- const ext = makeExt();
392
- const agent = makeAgent();
393
- agent.use(ext);
394
- await getTool(agent, 'script_save').execute({ name: 'str', code: 'throw "string-err"' });
395
- const result = await getTool(agent, 'script_run').execute({ name: 'str', input: null });
396
- expect(result.content).toContain('string-err');
397
- });
398
- // ── Pipeline ───────────────────────────────────────────────────────────
399
- async function setupPipelineScripts(agent) {
400
- await getTool(agent, 'script_save').execute({
401
- name: 'extract',
402
- code: 'return input.items.map(x => x.value)',
403
- });
404
- await getTool(agent, 'script_save').execute({
405
- name: 'sum',
406
- code: 'return input.reduce((a, b) => a + b, 0)',
407
- });
408
- await getTool(agent, 'script_save').execute({
409
- name: 'label',
410
- code: 'return { total: input, label: "sum=" + input }',
411
- });
412
- }
413
- it('chains script outputs through a pipeline', async () => {
414
- const ext = makeExt();
415
- const agent = makeAgent();
416
- agent.use(ext);
417
- await setupPipelineScripts(agent);
418
- const result = await getTool(agent, 'script_pipeline').execute({
419
- stages: ['extract', 'sum', 'label'],
420
- input: { items: [{ value: 1 }, { value: 2 }, { value: 3 }] },
421
- });
422
- expect(result.content).toContain('Pipeline OK');
423
- expect(result.content).toContain('[1] extract: OK');
424
- expect(result.content).toContain('[2] sum: OK');
425
- expect(result.content).toContain('[3] label: OK');
426
- expect(result.content).toContain('"total": 6');
427
- expect(result.content).toContain('"label": "sum=6"');
428
- });
429
- it('runs a single-stage pipeline', async () => {
430
- const ext = makeExt();
431
- const agent = makeAgent();
432
- agent.use(ext);
433
- await getTool(agent, 'script_save').execute({ name: 'double', code: 'return input * 2' });
434
- const result = await getTool(agent, 'script_pipeline').execute({
435
- stages: ['double'],
436
- input: 21,
437
- });
438
- expect(result.content).toContain('Pipeline OK');
439
- expect(result.content).toContain('42');
440
- });
441
- it('stops the pipeline when a stage fails', async () => {
442
- const ext = makeExt();
443
- const agent = makeAgent();
444
- agent.use(ext);
445
- await getTool(agent, 'script_save').execute({ name: 'ok', code: 'return input + 1' });
446
- await getTool(agent, 'script_save').execute({ name: 'boom', code: 'throw new Error("stage-2-fail")' });
447
- await getTool(agent, 'script_save').execute({ name: 'never', code: 'return input' });
448
- const result = await getTool(agent, 'script_pipeline').execute({
449
- stages: ['ok', 'boom', 'never'],
450
- input: 0,
451
- });
452
- expect(result.content).toContain('Pipeline ERROR');
453
- expect(result.content).toContain('[1] ok: OK');
454
- expect(result.content).toContain('[2] boom: FAIL');
455
- expect(result.content).toContain('stage-2-fail');
456
- // Third stage should not appear.
457
- expect(result.content).not.toContain('[3] never');
458
- });
459
- it('stops when a stage script is not found', async () => {
460
- const ext = makeExt();
461
- const agent = makeAgent();
462
- agent.use(ext);
463
- await getTool(agent, 'script_save').execute({ name: 'ok', code: 'return input' });
464
- const result = await getTool(agent, 'script_pipeline').execute({
465
- stages: ['ok', 'missing'],
466
- input: 1,
467
- });
468
- expect(result.content).toContain('Pipeline ERROR');
469
- expect(result.content).toContain('[2] missing: FAIL');
470
- expect(result.content).toContain('Script not found');
471
- });
472
- it('rejects an empty stages array', async () => {
473
- const ext = makeExt();
474
- const agent = makeAgent();
475
- agent.use(ext);
476
- const result = await getTool(agent, 'script_pipeline').execute({ stages: [], input: 1 });
477
- expect(result.content).toContain('stages must be a non-empty array');
478
- });
479
- it('reads pipeline input from disk via inputPath', async () => {
480
- const fs = makeFakeFs(sandbox);
481
- const ext = makeExt({ fs, allowedFsDirs: ['data'] });
482
- const agent = makeAgent();
483
- agent.use(ext);
484
- writeFileSync(join(sandbox, 'in.json'), JSON.stringify({ n: 10 }));
485
- await getTool(agent, 'script_save').execute({ name: 'add5', code: 'return input.n + 5' });
486
- await getTool(agent, 'script_save').execute({ name: 'square', code: 'return input * input' });
487
- const result = await getTool(agent, 'script_pipeline').execute({
488
- stages: ['add5', 'square'],
489
- inputPath: 'data/in.json',
490
- });
491
- expect(result.content).toContain('Pipeline OK');
492
- // 10 + 5 = 15, 15 * 15 = 225
493
- expect(result.content).toContain('225');
494
- });
495
- it('writes pipeline final output to outputPath', async () => {
496
- const fs = makeFakeFs(sandbox);
497
- const ext = makeExt({ fs, allowedFsDirs: ['data'] });
498
- const agent = makeAgent();
499
- agent.use(ext);
500
- await getTool(agent, 'script_save').execute({ name: 'inc', code: 'return input + 1' });
501
- await getTool(agent, 'script_save').execute({ name: 'str', code: 'return "v=" + input' });
502
- const result = await getTool(agent, 'script_pipeline').execute({
503
- stages: ['inc', 'str'],
504
- input: 41,
505
- outputPath: 'data/pipe-out.json',
506
- });
507
- expect(result.content).toContain('data/pipe-out.json');
508
- const written = JSON.parse(readFileSync(join(sandbox, 'pipe-out.json'), 'utf-8'));
509
- expect(written).toBe('v=42');
510
- });
511
- it('exposes runPipeline on the extension object', async () => {
512
- const ext = makeExt();
513
- const agent = makeAgent();
514
- agent.use(ext);
515
- await setupPipelineScripts(agent);
516
- const res = await ext.runPipeline(['extract', 'sum', 'label'], { items: [{ value: 10 }, { value: 20 }] });
517
- expect(res.ok).toBe(true);
518
- expect(res.stages).toHaveLength(3);
519
- expect(res.stages[0].name).toBe('extract');
520
- expect(res.stages[2].name).toBe('label');
521
- expect(res.output).toContain('"total": 30');
522
- });
523
- it('runPipeline returns per-stage results on failure', async () => {
524
- const ext = makeExt();
525
- const agent = makeAgent();
526
- agent.use(ext);
527
- await getTool(agent, 'script_save').execute({ name: 'a', code: 'return input' });
528
- await getTool(agent, 'script_save').execute({ name: 'b', code: 'throw "boom"' });
529
- const res = await ext.runPipeline(['a', 'b'], 1);
530
- expect(res.ok).toBe(false);
531
- expect(res.stages).toHaveLength(2);
532
- expect(res.stages[0].ok).toBe(true);
533
- expect(res.stages[1].ok).toBe(false);
534
- expect(res.stages[1].error).toBe('boom');
535
- });
536
- it('stages are isolated — a stage cannot see variables from a prior stage', async () => {
537
- const ext = makeExt();
538
- const agent = makeAgent();
539
- agent.use(ext);
540
- // Stage 1 declares a variable; stage 2 tries to use it.
541
- await getTool(agent, 'script_save').execute({ name: 'declare', code: 'var secret = 42; return input' });
542
- await getTool(agent, 'script_save').execute({ name: 'access', code: 'return typeof secret' });
543
- const result = await getTool(agent, 'script_pipeline').execute({
544
- stages: ['declare', 'access'],
545
- input: null,
546
- });
547
- expect(result.content).toContain('Pipeline OK');
548
- // `secret` is undefined in stage 2 — each stage is a fresh eval.
549
- expect(result.content).toContain('undefined');
550
- });
551
- });
552
- //# sourceMappingURL=extension.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../../src/extensions/scripts/extension.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export { default as createScriptsExtension } from './extension.js';
2
- export type { ScriptsConfig, ScriptRecord, ScriptRunResult, PipelineStageResult, PipelineResult, FsHelper, } from './extension.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EACV,aAAa,EACb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,QAAQ,GACT,MAAM,gBAAgB,CAAC"}
@@ -1,2 +0,0 @@
1
- export { default as createScriptsExtension } from './extension.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { Extension } from '../../extension.js';
2
- export interface StructuredOutputConfig {
3
- /** JSON schema to validate against. Required. */
4
- schema: Record<string, unknown>;
5
- /** Field name in metadata to store the parsed JSON. Default: "structured". */
6
- metadataKey?: string;
7
- }
8
- export default function createStructuredOutputExtension(config: StructuredOutputConfig): Extension | undefined;
9
- //# sourceMappingURL=extension.d.ts.map