@xandout/libra-harness 0.1.119 → 0.1.121

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 (201) hide show
  1. package/dist/agent.d.ts.map +1 -1
  2. package/dist/agent.js +4 -2
  3. package/dist/agent.js.map +1 -1
  4. package/dist/extensions/code-tools/extension.d.ts +4 -0
  5. package/dist/extensions/code-tools/extension.d.ts.map +1 -1
  6. package/dist/extensions/code-tools/extension.js +3 -13
  7. package/dist/extensions/code-tools/extension.js.map +1 -1
  8. package/dist/extensions/code-tools/tools/shell.d.ts +7 -0
  9. package/dist/extensions/code-tools/tools/shell.d.ts.map +1 -1
  10. package/dist/extensions/code-tools/tools/shell.js +9 -2
  11. package/dist/extensions/code-tools/tools/shell.js.map +1 -1
  12. package/dist/extensions/loader.d.ts +10 -10
  13. package/dist/extensions/loader.js +10 -10
  14. package/dist/types.d.ts +6 -0
  15. package/dist/types.d.ts.map +1 -1
  16. package/dist/types.js +13 -0
  17. package/dist/types.js.map +1 -1
  18. package/package.json +2 -65
  19. package/dist/extensions/auto-steer/extension.d.ts +0 -46
  20. package/dist/extensions/auto-steer/extension.d.ts.map +0 -1
  21. package/dist/extensions/auto-steer/extension.js +0 -52
  22. package/dist/extensions/auto-steer/extension.js.map +0 -1
  23. package/dist/extensions/auto-steer/extension.json +0 -7
  24. package/dist/extensions/auto-steer/index.d.ts +0 -3
  25. package/dist/extensions/auto-steer/index.d.ts.map +0 -1
  26. package/dist/extensions/auto-steer/index.js +0 -2
  27. package/dist/extensions/auto-steer/index.js.map +0 -1
  28. package/dist/extensions/emoji/extension.d.ts +0 -20
  29. package/dist/extensions/emoji/extension.d.ts.map +0 -1
  30. package/dist/extensions/emoji/extension.js +0 -22
  31. package/dist/extensions/emoji/extension.js.map +0 -1
  32. package/dist/extensions/emoji/extension.json +0 -7
  33. package/dist/extensions/emoji/index.d.ts +0 -3
  34. package/dist/extensions/emoji/index.d.ts.map +0 -1
  35. package/dist/extensions/emoji/index.js +0 -2
  36. package/dist/extensions/emoji/index.js.map +0 -1
  37. package/dist/extensions/filesystem/extension.d.ts +0 -53
  38. package/dist/extensions/filesystem/extension.d.ts.map +0 -1
  39. package/dist/extensions/filesystem/extension.js +0 -350
  40. package/dist/extensions/filesystem/extension.js.map +0 -1
  41. package/dist/extensions/filesystem/extension.json +0 -6
  42. package/dist/extensions/filesystem/extension.test.d.ts +0 -2
  43. package/dist/extensions/filesystem/extension.test.d.ts.map +0 -1
  44. package/dist/extensions/filesystem/extension.test.js +0 -387
  45. package/dist/extensions/filesystem/extension.test.js.map +0 -1
  46. package/dist/extensions/filesystem/index.d.ts +0 -2
  47. package/dist/extensions/filesystem/index.d.ts.map +0 -1
  48. package/dist/extensions/filesystem/index.js +0 -2
  49. package/dist/extensions/filesystem/index.js.map +0 -1
  50. package/dist/extensions/keyword-extractor/extension.d.ts +0 -53
  51. package/dist/extensions/keyword-extractor/extension.d.ts.map +0 -1
  52. package/dist/extensions/keyword-extractor/extension.js +0 -61
  53. package/dist/extensions/keyword-extractor/extension.js.map +0 -1
  54. package/dist/extensions/keyword-extractor/extension.json +0 -6
  55. package/dist/extensions/keyword-extractor/extension.test.d.ts +0 -2
  56. package/dist/extensions/keyword-extractor/extension.test.d.ts.map +0 -1
  57. package/dist/extensions/keyword-extractor/extension.test.js +0 -105
  58. package/dist/extensions/keyword-extractor/extension.test.js.map +0 -1
  59. package/dist/extensions/keyword-extractor/index.d.ts +0 -5
  60. package/dist/extensions/keyword-extractor/index.d.ts.map +0 -1
  61. package/dist/extensions/keyword-extractor/index.js +0 -3
  62. package/dist/extensions/keyword-extractor/index.js.map +0 -1
  63. package/dist/extensions/keyword-extractor/nlp.d.ts +0 -68
  64. package/dist/extensions/keyword-extractor/nlp.d.ts.map +0 -1
  65. package/dist/extensions/keyword-extractor/nlp.js +0 -156
  66. package/dist/extensions/keyword-extractor/nlp.js.map +0 -1
  67. package/dist/extensions/keyword-extractor/nlp.test.d.ts +0 -2
  68. package/dist/extensions/keyword-extractor/nlp.test.d.ts.map +0 -1
  69. package/dist/extensions/keyword-extractor/nlp.test.js +0 -176
  70. package/dist/extensions/keyword-extractor/nlp.test.js.map +0 -1
  71. package/dist/extensions/logger/extension.d.ts +0 -52
  72. package/dist/extensions/logger/extension.d.ts.map +0 -1
  73. package/dist/extensions/logger/extension.js +0 -68
  74. package/dist/extensions/logger/extension.js.map +0 -1
  75. package/dist/extensions/logger/extension.json +0 -7
  76. package/dist/extensions/logger/index.d.ts +0 -3
  77. package/dist/extensions/logger/index.d.ts.map +0 -1
  78. package/dist/extensions/logger/index.js +0 -2
  79. package/dist/extensions/logger/index.js.map +0 -1
  80. package/dist/extensions/mcp/extension.d.ts +0 -63
  81. package/dist/extensions/mcp/extension.d.ts.map +0 -1
  82. package/dist/extensions/mcp/extension.js +0 -437
  83. package/dist/extensions/mcp/extension.js.map +0 -1
  84. package/dist/extensions/mcp/extension.json +0 -7
  85. package/dist/extensions/mcp/extension.test.d.ts +0 -2
  86. package/dist/extensions/mcp/extension.test.d.ts.map +0 -1
  87. package/dist/extensions/mcp/extension.test.js +0 -286
  88. package/dist/extensions/mcp/extension.test.js.map +0 -1
  89. package/dist/extensions/mcp/index.d.ts +0 -3
  90. package/dist/extensions/mcp/index.d.ts.map +0 -1
  91. package/dist/extensions/mcp/index.js +0 -2
  92. package/dist/extensions/mcp/index.js.map +0 -1
  93. package/dist/extensions/mem-session/extension.d.ts +0 -24
  94. package/dist/extensions/mem-session/extension.d.ts.map +0 -1
  95. package/dist/extensions/mem-session/extension.js +0 -49
  96. package/dist/extensions/mem-session/extension.js.map +0 -1
  97. package/dist/extensions/mem-session/extension.json +0 -6
  98. package/dist/extensions/mem-session/index.d.ts +0 -2
  99. package/dist/extensions/mem-session/index.d.ts.map +0 -1
  100. package/dist/extensions/mem-session/index.js +0 -2
  101. package/dist/extensions/mem-session/index.js.map +0 -1
  102. package/dist/extensions/memory/extension.d.ts +0 -54
  103. package/dist/extensions/memory/extension.d.ts.map +0 -1
  104. package/dist/extensions/memory/extension.js +0 -143
  105. package/dist/extensions/memory/extension.js.map +0 -1
  106. package/dist/extensions/memory/extension.json +0 -7
  107. package/dist/extensions/memory/index.d.ts +0 -4
  108. package/dist/extensions/memory/index.d.ts.map +0 -1
  109. package/dist/extensions/memory/index.js +0 -3
  110. package/dist/extensions/memory/index.js.map +0 -1
  111. package/dist/extensions/memory/llm-extractor.d.ts +0 -42
  112. package/dist/extensions/memory/llm-extractor.d.ts.map +0 -1
  113. package/dist/extensions/memory/llm-extractor.js +0 -86
  114. package/dist/extensions/memory/llm-extractor.js.map +0 -1
  115. package/dist/extensions/memory/types.d.ts +0 -142
  116. package/dist/extensions/memory/types.d.ts.map +0 -1
  117. package/dist/extensions/memory/types.js +0 -2
  118. package/dist/extensions/memory/types.js.map +0 -1
  119. package/dist/extensions/otel/extension.d.ts +0 -57
  120. package/dist/extensions/otel/extension.d.ts.map +0 -1
  121. package/dist/extensions/otel/extension.js +0 -253
  122. package/dist/extensions/otel/extension.js.map +0 -1
  123. package/dist/extensions/otel/extension.json +0 -7
  124. package/dist/extensions/otel/extension.test.d.ts +0 -2
  125. package/dist/extensions/otel/extension.test.d.ts.map +0 -1
  126. package/dist/extensions/otel/extension.test.js +0 -399
  127. package/dist/extensions/otel/extension.test.js.map +0 -1
  128. package/dist/extensions/otel/index.d.ts +0 -4
  129. package/dist/extensions/otel/index.d.ts.map +0 -1
  130. package/dist/extensions/otel/index.js +0 -3
  131. package/dist/extensions/otel/index.js.map +0 -1
  132. package/dist/extensions/otel/jsonl-span-exporter.d.ts +0 -60
  133. package/dist/extensions/otel/jsonl-span-exporter.d.ts.map +0 -1
  134. package/dist/extensions/otel/jsonl-span-exporter.js +0 -134
  135. package/dist/extensions/otel/jsonl-span-exporter.js.map +0 -1
  136. package/dist/extensions/scripts/extension.d.ts +0 -180
  137. package/dist/extensions/scripts/extension.d.ts.map +0 -1
  138. package/dist/extensions/scripts/extension.js +0 -618
  139. package/dist/extensions/scripts/extension.js.map +0 -1
  140. package/dist/extensions/scripts/extension.json +0 -7
  141. package/dist/extensions/scripts/extension.test.d.ts +0 -2
  142. package/dist/extensions/scripts/extension.test.d.ts.map +0 -1
  143. package/dist/extensions/scripts/extension.test.js +0 -552
  144. package/dist/extensions/scripts/extension.test.js.map +0 -1
  145. package/dist/extensions/scripts/index.d.ts +0 -3
  146. package/dist/extensions/scripts/index.d.ts.map +0 -1
  147. package/dist/extensions/scripts/index.js +0 -2
  148. package/dist/extensions/scripts/index.js.map +0 -1
  149. package/dist/extensions/structured-output/extension.d.ts +0 -9
  150. package/dist/extensions/structured-output/extension.d.ts.map +0 -1
  151. package/dist/extensions/structured-output/extension.js +0 -93
  152. package/dist/extensions/structured-output/extension.js.map +0 -1
  153. package/dist/extensions/structured-output/extension.json +0 -7
  154. package/dist/extensions/structured-output/index.d.ts +0 -3
  155. package/dist/extensions/structured-output/index.d.ts.map +0 -1
  156. package/dist/extensions/structured-output/index.js +0 -2
  157. package/dist/extensions/structured-output/index.js.map +0 -1
  158. package/dist/extensions/timestamp/extension.d.ts +0 -11
  159. package/dist/extensions/timestamp/extension.d.ts.map +0 -1
  160. package/dist/extensions/timestamp/extension.js +0 -21
  161. package/dist/extensions/timestamp/extension.js.map +0 -1
  162. package/dist/extensions/timestamp/extension.json +0 -6
  163. package/dist/extensions/timestamp/index.d.ts +0 -2
  164. package/dist/extensions/timestamp/index.d.ts.map +0 -1
  165. package/dist/extensions/timestamp/index.js +0 -2
  166. package/dist/extensions/timestamp/index.js.map +0 -1
  167. package/dist/extensions/token-stats/extension.d.ts +0 -50
  168. package/dist/extensions/token-stats/extension.d.ts.map +0 -1
  169. package/dist/extensions/token-stats/extension.js +0 -99
  170. package/dist/extensions/token-stats/extension.js.map +0 -1
  171. package/dist/extensions/token-stats/extension.json +0 -7
  172. package/dist/extensions/token-stats/extension.test.d.ts +0 -2
  173. package/dist/extensions/token-stats/extension.test.d.ts.map +0 -1
  174. package/dist/extensions/token-stats/extension.test.js +0 -197
  175. package/dist/extensions/token-stats/extension.test.js.map +0 -1
  176. package/dist/extensions/token-stats/index.d.ts +0 -3
  177. package/dist/extensions/token-stats/index.d.ts.map +0 -1
  178. package/dist/extensions/token-stats/index.js +0 -2
  179. package/dist/extensions/token-stats/index.js.map +0 -1
  180. package/dist/extensions/tool-buffer/extension.d.ts +0 -89
  181. package/dist/extensions/tool-buffer/extension.d.ts.map +0 -1
  182. package/dist/extensions/tool-buffer/extension.js +0 -182
  183. package/dist/extensions/tool-buffer/extension.js.map +0 -1
  184. package/dist/extensions/tool-buffer/extension.json +0 -7
  185. package/dist/extensions/tool-buffer/extension.test.d.ts +0 -2
  186. package/dist/extensions/tool-buffer/extension.test.d.ts.map +0 -1
  187. package/dist/extensions/tool-buffer/extension.test.js +0 -549
  188. package/dist/extensions/tool-buffer/extension.test.js.map +0 -1
  189. package/dist/extensions/tool-buffer/index.d.ts +0 -3
  190. package/dist/extensions/tool-buffer/index.d.ts.map +0 -1
  191. package/dist/extensions/tool-buffer/index.js +0 -2
  192. package/dist/extensions/tool-buffer/index.js.map +0 -1
  193. package/dist/extensions/weather-tool/extension.d.ts +0 -22
  194. package/dist/extensions/weather-tool/extension.d.ts.map +0 -1
  195. package/dist/extensions/weather-tool/extension.js +0 -33
  196. package/dist/extensions/weather-tool/extension.js.map +0 -1
  197. package/dist/extensions/weather-tool/extension.json +0 -7
  198. package/dist/extensions/weather-tool/index.d.ts +0 -3
  199. package/dist/extensions/weather-tool/index.d.ts.map +0 -1
  200. package/dist/extensions/weather-tool/index.js +0 -2
  201. 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