@xandout/libra-harness 0.1.8

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 (289) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +486 -0
  3. package/dist/agent.d.ts +174 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +575 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/ai-sdk-model.d.ts +26 -0
  8. package/dist/ai-sdk-model.d.ts.map +1 -0
  9. package/dist/ai-sdk-model.js +260 -0
  10. package/dist/ai-sdk-model.js.map +1 -0
  11. package/dist/context.d.ts +75 -0
  12. package/dist/context.d.ts.map +1 -0
  13. package/dist/context.js +2 -0
  14. package/dist/context.js.map +1 -0
  15. package/dist/errors.d.ts +33 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +59 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/extension.d.ts +63 -0
  20. package/dist/extension.d.ts.map +1 -0
  21. package/dist/extension.js +2 -0
  22. package/dist/extension.js.map +1 -0
  23. package/dist/extras/extension-loader.d.ts +205 -0
  24. package/dist/extras/extension-loader.d.ts.map +1 -0
  25. package/dist/extras/extension-loader.js +315 -0
  26. package/dist/extras/extension-loader.js.map +1 -0
  27. package/dist/extras/extensions/auto-steer/extension.d.ts +46 -0
  28. package/dist/extras/extensions/auto-steer/extension.d.ts.map +1 -0
  29. package/dist/extras/extensions/auto-steer/extension.js +52 -0
  30. package/dist/extras/extensions/auto-steer/extension.js.map +1 -0
  31. package/dist/extras/extensions/auto-steer/extension.json +7 -0
  32. package/dist/extras/extensions/auto-steer/index.d.ts +3 -0
  33. package/dist/extras/extensions/auto-steer/index.d.ts.map +1 -0
  34. package/dist/extras/extensions/auto-steer/index.js +2 -0
  35. package/dist/extras/extensions/auto-steer/index.js.map +1 -0
  36. package/dist/extras/extensions/disk-session/extension.d.ts +167 -0
  37. package/dist/extras/extensions/disk-session/extension.d.ts.map +1 -0
  38. package/dist/extras/extensions/disk-session/extension.js +492 -0
  39. package/dist/extras/extensions/disk-session/extension.js.map +1 -0
  40. package/dist/extras/extensions/disk-session/extension.json +6 -0
  41. package/dist/extras/extensions/disk-session/extension.test.d.ts +2 -0
  42. package/dist/extras/extensions/disk-session/extension.test.d.ts.map +1 -0
  43. package/dist/extras/extensions/disk-session/extension.test.js +672 -0
  44. package/dist/extras/extensions/disk-session/extension.test.js.map +1 -0
  45. package/dist/extras/extensions/disk-session/index.d.ts +3 -0
  46. package/dist/extras/extensions/disk-session/index.d.ts.map +1 -0
  47. package/dist/extras/extensions/disk-session/index.js +2 -0
  48. package/dist/extras/extensions/disk-session/index.js.map +1 -0
  49. package/dist/extras/extensions/emoji/extension.d.ts +20 -0
  50. package/dist/extras/extensions/emoji/extension.d.ts.map +1 -0
  51. package/dist/extras/extensions/emoji/extension.js +22 -0
  52. package/dist/extras/extensions/emoji/extension.js.map +1 -0
  53. package/dist/extras/extensions/emoji/extension.json +7 -0
  54. package/dist/extras/extensions/emoji/index.d.ts +3 -0
  55. package/dist/extras/extensions/emoji/index.d.ts.map +1 -0
  56. package/dist/extras/extensions/emoji/index.js +2 -0
  57. package/dist/extras/extensions/emoji/index.js.map +1 -0
  58. package/dist/extras/extensions/filesystem/extension.d.ts +53 -0
  59. package/dist/extras/extensions/filesystem/extension.d.ts.map +1 -0
  60. package/dist/extras/extensions/filesystem/extension.js +350 -0
  61. package/dist/extras/extensions/filesystem/extension.js.map +1 -0
  62. package/dist/extras/extensions/filesystem/extension.json +6 -0
  63. package/dist/extras/extensions/filesystem/extension.test.d.ts +2 -0
  64. package/dist/extras/extensions/filesystem/extension.test.d.ts.map +1 -0
  65. package/dist/extras/extensions/filesystem/extension.test.js +387 -0
  66. package/dist/extras/extensions/filesystem/extension.test.js.map +1 -0
  67. package/dist/extras/extensions/filesystem/index.d.ts +2 -0
  68. package/dist/extras/extensions/filesystem/index.d.ts.map +1 -0
  69. package/dist/extras/extensions/filesystem/index.js +2 -0
  70. package/dist/extras/extensions/filesystem/index.js.map +1 -0
  71. package/dist/extras/extensions/keyword-extractor/extension.d.ts +53 -0
  72. package/dist/extras/extensions/keyword-extractor/extension.d.ts.map +1 -0
  73. package/dist/extras/extensions/keyword-extractor/extension.js +61 -0
  74. package/dist/extras/extensions/keyword-extractor/extension.js.map +1 -0
  75. package/dist/extras/extensions/keyword-extractor/extension.json +6 -0
  76. package/dist/extras/extensions/keyword-extractor/extension.test.d.ts +2 -0
  77. package/dist/extras/extensions/keyword-extractor/extension.test.d.ts.map +1 -0
  78. package/dist/extras/extensions/keyword-extractor/extension.test.js +105 -0
  79. package/dist/extras/extensions/keyword-extractor/extension.test.js.map +1 -0
  80. package/dist/extras/extensions/keyword-extractor/index.d.ts +5 -0
  81. package/dist/extras/extensions/keyword-extractor/index.d.ts.map +1 -0
  82. package/dist/extras/extensions/keyword-extractor/index.js +3 -0
  83. package/dist/extras/extensions/keyword-extractor/index.js.map +1 -0
  84. package/dist/extras/extensions/keyword-extractor/nlp.d.ts +68 -0
  85. package/dist/extras/extensions/keyword-extractor/nlp.d.ts.map +1 -0
  86. package/dist/extras/extensions/keyword-extractor/nlp.js +156 -0
  87. package/dist/extras/extensions/keyword-extractor/nlp.js.map +1 -0
  88. package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts +2 -0
  89. package/dist/extras/extensions/keyword-extractor/nlp.test.d.ts.map +1 -0
  90. package/dist/extras/extensions/keyword-extractor/nlp.test.js +176 -0
  91. package/dist/extras/extensions/keyword-extractor/nlp.test.js.map +1 -0
  92. package/dist/extras/extensions/logger/extension.d.ts +52 -0
  93. package/dist/extras/extensions/logger/extension.d.ts.map +1 -0
  94. package/dist/extras/extensions/logger/extension.js +68 -0
  95. package/dist/extras/extensions/logger/extension.js.map +1 -0
  96. package/dist/extras/extensions/logger/extension.json +7 -0
  97. package/dist/extras/extensions/logger/index.d.ts +3 -0
  98. package/dist/extras/extensions/logger/index.d.ts.map +1 -0
  99. package/dist/extras/extensions/logger/index.js +2 -0
  100. package/dist/extras/extensions/logger/index.js.map +1 -0
  101. package/dist/extras/extensions/mcp/extension.d.ts +63 -0
  102. package/dist/extras/extensions/mcp/extension.d.ts.map +1 -0
  103. package/dist/extras/extensions/mcp/extension.js +437 -0
  104. package/dist/extras/extensions/mcp/extension.js.map +1 -0
  105. package/dist/extras/extensions/mcp/extension.json +7 -0
  106. package/dist/extras/extensions/mcp/extension.test.d.ts +2 -0
  107. package/dist/extras/extensions/mcp/extension.test.d.ts.map +1 -0
  108. package/dist/extras/extensions/mcp/extension.test.js +286 -0
  109. package/dist/extras/extensions/mcp/extension.test.js.map +1 -0
  110. package/dist/extras/extensions/mcp/index.d.ts +3 -0
  111. package/dist/extras/extensions/mcp/index.d.ts.map +1 -0
  112. package/dist/extras/extensions/mcp/index.js +2 -0
  113. package/dist/extras/extensions/mcp/index.js.map +1 -0
  114. package/dist/extras/extensions/mem-session/extension.d.ts +24 -0
  115. package/dist/extras/extensions/mem-session/extension.d.ts.map +1 -0
  116. package/dist/extras/extensions/mem-session/extension.js +49 -0
  117. package/dist/extras/extensions/mem-session/extension.js.map +1 -0
  118. package/dist/extras/extensions/mem-session/extension.json +6 -0
  119. package/dist/extras/extensions/mem-session/index.d.ts +2 -0
  120. package/dist/extras/extensions/mem-session/index.d.ts.map +1 -0
  121. package/dist/extras/extensions/mem-session/index.js +2 -0
  122. package/dist/extras/extensions/mem-session/index.js.map +1 -0
  123. package/dist/extras/extensions/memory/extension.d.ts +54 -0
  124. package/dist/extras/extensions/memory/extension.d.ts.map +1 -0
  125. package/dist/extras/extensions/memory/extension.js +143 -0
  126. package/dist/extras/extensions/memory/extension.js.map +1 -0
  127. package/dist/extras/extensions/memory/extension.json +7 -0
  128. package/dist/extras/extensions/memory/index.d.ts +5 -0
  129. package/dist/extras/extensions/memory/index.d.ts.map +1 -0
  130. package/dist/extras/extensions/memory/index.js +3 -0
  131. package/dist/extras/extensions/memory/index.js.map +1 -0
  132. package/dist/extras/extensions/memory/llm-extractor.d.ts +42 -0
  133. package/dist/extras/extensions/memory/llm-extractor.d.ts.map +1 -0
  134. package/dist/extras/extensions/memory/llm-extractor.js +89 -0
  135. package/dist/extras/extensions/memory/llm-extractor.js.map +1 -0
  136. package/dist/extras/extensions/memory/types.d.ts +142 -0
  137. package/dist/extras/extensions/memory/types.d.ts.map +1 -0
  138. package/dist/extras/extensions/memory/types.js +2 -0
  139. package/dist/extras/extensions/memory/types.js.map +1 -0
  140. package/dist/extras/extensions/otel/extension.d.ts +57 -0
  141. package/dist/extras/extensions/otel/extension.d.ts.map +1 -0
  142. package/dist/extras/extensions/otel/extension.js +253 -0
  143. package/dist/extras/extensions/otel/extension.js.map +1 -0
  144. package/dist/extras/extensions/otel/extension.json +7 -0
  145. package/dist/extras/extensions/otel/extension.test.d.ts +2 -0
  146. package/dist/extras/extensions/otel/extension.test.d.ts.map +1 -0
  147. package/dist/extras/extensions/otel/extension.test.js +399 -0
  148. package/dist/extras/extensions/otel/extension.test.js.map +1 -0
  149. package/dist/extras/extensions/otel/index.d.ts +4 -0
  150. package/dist/extras/extensions/otel/index.d.ts.map +1 -0
  151. package/dist/extras/extensions/otel/index.js +3 -0
  152. package/dist/extras/extensions/otel/index.js.map +1 -0
  153. package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts +60 -0
  154. package/dist/extras/extensions/otel/jsonl-span-exporter.d.ts.map +1 -0
  155. package/dist/extras/extensions/otel/jsonl-span-exporter.js +134 -0
  156. package/dist/extras/extensions/otel/jsonl-span-exporter.js.map +1 -0
  157. package/dist/extras/extensions/scripts/extension.d.ts +180 -0
  158. package/dist/extras/extensions/scripts/extension.d.ts.map +1 -0
  159. package/dist/extras/extensions/scripts/extension.js +618 -0
  160. package/dist/extras/extensions/scripts/extension.js.map +1 -0
  161. package/dist/extras/extensions/scripts/extension.json +7 -0
  162. package/dist/extras/extensions/scripts/extension.test.d.ts +2 -0
  163. package/dist/extras/extensions/scripts/extension.test.d.ts.map +1 -0
  164. package/dist/extras/extensions/scripts/extension.test.js +552 -0
  165. package/dist/extras/extensions/scripts/extension.test.js.map +1 -0
  166. package/dist/extras/extensions/scripts/index.d.ts +3 -0
  167. package/dist/extras/extensions/scripts/index.d.ts.map +1 -0
  168. package/dist/extras/extensions/scripts/index.js +2 -0
  169. package/dist/extras/extensions/scripts/index.js.map +1 -0
  170. package/dist/extras/extensions/skills/extension.d.ts +105 -0
  171. package/dist/extras/extensions/skills/extension.d.ts.map +1 -0
  172. package/dist/extras/extensions/skills/extension.js +419 -0
  173. package/dist/extras/extensions/skills/extension.js.map +1 -0
  174. package/dist/extras/extensions/skills/extension.json +7 -0
  175. package/dist/extras/extensions/skills/extension.test.d.ts +2 -0
  176. package/dist/extras/extensions/skills/extension.test.d.ts.map +1 -0
  177. package/dist/extras/extensions/skills/extension.test.js +184 -0
  178. package/dist/extras/extensions/skills/extension.test.js.map +1 -0
  179. package/dist/extras/extensions/skills/index.d.ts +4 -0
  180. package/dist/extras/extensions/skills/index.d.ts.map +1 -0
  181. package/dist/extras/extensions/skills/index.js +3 -0
  182. package/dist/extras/extensions/skills/index.js.map +1 -0
  183. package/dist/extras/extensions/streaming/extension.d.ts +15 -0
  184. package/dist/extras/extensions/streaming/extension.d.ts.map +1 -0
  185. package/dist/extras/extensions/streaming/extension.js +41 -0
  186. package/dist/extras/extensions/streaming/extension.js.map +1 -0
  187. package/dist/extras/extensions/streaming/extension.json +6 -0
  188. package/dist/extras/extensions/streaming/index.d.ts +2 -0
  189. package/dist/extras/extensions/streaming/index.d.ts.map +1 -0
  190. package/dist/extras/extensions/streaming/index.js +2 -0
  191. package/dist/extras/extensions/streaming/index.js.map +1 -0
  192. package/dist/extras/extensions/structured-output/extension.d.ts +11 -0
  193. package/dist/extras/extensions/structured-output/extension.d.ts.map +1 -0
  194. package/dist/extras/extensions/structured-output/extension.js +102 -0
  195. package/dist/extras/extensions/structured-output/extension.js.map +1 -0
  196. package/dist/extras/extensions/structured-output/extension.json +7 -0
  197. package/dist/extras/extensions/structured-output/index.d.ts +3 -0
  198. package/dist/extras/extensions/structured-output/index.d.ts.map +1 -0
  199. package/dist/extras/extensions/structured-output/index.js +2 -0
  200. package/dist/extras/extensions/structured-output/index.js.map +1 -0
  201. package/dist/extras/extensions/timestamp/extension.d.ts +11 -0
  202. package/dist/extras/extensions/timestamp/extension.d.ts.map +1 -0
  203. package/dist/extras/extensions/timestamp/extension.js +21 -0
  204. package/dist/extras/extensions/timestamp/extension.js.map +1 -0
  205. package/dist/extras/extensions/timestamp/extension.json +6 -0
  206. package/dist/extras/extensions/timestamp/index.d.ts +2 -0
  207. package/dist/extras/extensions/timestamp/index.d.ts.map +1 -0
  208. package/dist/extras/extensions/timestamp/index.js +2 -0
  209. package/dist/extras/extensions/timestamp/index.js.map +1 -0
  210. package/dist/extras/extensions/token-stats/extension.d.ts +50 -0
  211. package/dist/extras/extensions/token-stats/extension.d.ts.map +1 -0
  212. package/dist/extras/extensions/token-stats/extension.js +99 -0
  213. package/dist/extras/extensions/token-stats/extension.js.map +1 -0
  214. package/dist/extras/extensions/token-stats/extension.json +7 -0
  215. package/dist/extras/extensions/token-stats/extension.test.d.ts +2 -0
  216. package/dist/extras/extensions/token-stats/extension.test.d.ts.map +1 -0
  217. package/dist/extras/extensions/token-stats/extension.test.js +197 -0
  218. package/dist/extras/extensions/token-stats/extension.test.js.map +1 -0
  219. package/dist/extras/extensions/token-stats/index.d.ts +3 -0
  220. package/dist/extras/extensions/token-stats/index.d.ts.map +1 -0
  221. package/dist/extras/extensions/token-stats/index.js +2 -0
  222. package/dist/extras/extensions/token-stats/index.js.map +1 -0
  223. package/dist/extras/extensions/tool-buffer/extension.d.ts +89 -0
  224. package/dist/extras/extensions/tool-buffer/extension.d.ts.map +1 -0
  225. package/dist/extras/extensions/tool-buffer/extension.js +182 -0
  226. package/dist/extras/extensions/tool-buffer/extension.js.map +1 -0
  227. package/dist/extras/extensions/tool-buffer/extension.json +7 -0
  228. package/dist/extras/extensions/tool-buffer/extension.test.d.ts +2 -0
  229. package/dist/extras/extensions/tool-buffer/extension.test.d.ts.map +1 -0
  230. package/dist/extras/extensions/tool-buffer/extension.test.js +549 -0
  231. package/dist/extras/extensions/tool-buffer/extension.test.js.map +1 -0
  232. package/dist/extras/extensions/tool-buffer/index.d.ts +3 -0
  233. package/dist/extras/extensions/tool-buffer/index.d.ts.map +1 -0
  234. package/dist/extras/extensions/tool-buffer/index.js +2 -0
  235. package/dist/extras/extensions/tool-buffer/index.js.map +1 -0
  236. package/dist/extras/extensions/weather-tool/extension.d.ts +22 -0
  237. package/dist/extras/extensions/weather-tool/extension.d.ts.map +1 -0
  238. package/dist/extras/extensions/weather-tool/extension.js +33 -0
  239. package/dist/extras/extensions/weather-tool/extension.js.map +1 -0
  240. package/dist/extras/extensions/weather-tool/extension.json +7 -0
  241. package/dist/extras/extensions/weather-tool/index.d.ts +3 -0
  242. package/dist/extras/extensions/weather-tool/index.d.ts.map +1 -0
  243. package/dist/extras/extensions/weather-tool/index.js +2 -0
  244. package/dist/extras/extensions/weather-tool/index.js.map +1 -0
  245. package/dist/extras/models/ai-sdk-resolver.d.ts +15 -0
  246. package/dist/extras/models/ai-sdk-resolver.d.ts.map +1 -0
  247. package/dist/extras/models/ai-sdk-resolver.js +57 -0
  248. package/dist/extras/models/ai-sdk-resolver.js.map +1 -0
  249. package/dist/extras/models/index.d.ts +5 -0
  250. package/dist/extras/models/index.d.ts.map +1 -0
  251. package/dist/extras/models/index.js +3 -0
  252. package/dist/extras/models/index.js.map +1 -0
  253. package/dist/extras/models/routing-model.d.ts +18 -0
  254. package/dist/extras/models/routing-model.d.ts.map +1 -0
  255. package/dist/extras/models/routing-model.js +24 -0
  256. package/dist/extras/models/routing-model.js.map +1 -0
  257. package/dist/extras/openai-provider/index.d.ts +3 -0
  258. package/dist/extras/openai-provider/index.d.ts.map +1 -0
  259. package/dist/extras/openai-provider/index.js +2 -0
  260. package/dist/extras/openai-provider/index.js.map +1 -0
  261. package/dist/extras/openai-provider/server.d.ts +34 -0
  262. package/dist/extras/openai-provider/server.d.ts.map +1 -0
  263. package/dist/extras/openai-provider/server.js +335 -0
  264. package/dist/extras/openai-provider/server.js.map +1 -0
  265. package/dist/handle.d.ts +56 -0
  266. package/dist/handle.d.ts.map +1 -0
  267. package/dist/handle.js +2 -0
  268. package/dist/handle.js.map +1 -0
  269. package/dist/hooks.d.ts +98 -0
  270. package/dist/hooks.d.ts.map +1 -0
  271. package/dist/hooks.js +53 -0
  272. package/dist/hooks.js.map +1 -0
  273. package/dist/index.d.ts +16 -0
  274. package/dist/index.d.ts.map +1 -0
  275. package/dist/index.js +9 -0
  276. package/dist/index.js.map +1 -0
  277. package/dist/model.d.ts +75 -0
  278. package/dist/model.d.ts.map +1 -0
  279. package/dist/model.js +2 -0
  280. package/dist/model.js.map +1 -0
  281. package/dist/tool.d.ts +78 -0
  282. package/dist/tool.d.ts.map +1 -0
  283. package/dist/tool.js +78 -0
  284. package/dist/tool.js.map +1 -0
  285. package/dist/types.d.ts +83 -0
  286. package/dist/types.d.ts.map +1 -0
  287. package/dist/types.js +21 -0
  288. package/dist/types.js.map +1 -0
  289. package/package.json +178 -0
@@ -0,0 +1,618 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, unlinkSync, statSync } from 'node:fs';
2
+ import { join, resolve, relative, dirname } from 'node:path';
3
+ let quickjsPromise;
4
+ /**
5
+ * Lazily load the QuickJS WASM runtime. The module is cached for the
6
+ * lifetime of the process. Throws if `quickjs-emscripten` is not
7
+ * installed — it's an optional peer dependency.
8
+ */
9
+ async function getQuickJS() {
10
+ if (!quickjsPromise) {
11
+ quickjsPromise = import('quickjs-emscripten').then((mod) => {
12
+ const get = mod.getQuickJS;
13
+ if (typeof get !== 'function') {
14
+ throw new Error("quickjs-emscripten is installed but has no getQuickJS export. Install 'quickjs-emscripten' (^0.32).");
15
+ }
16
+ return get();
17
+ });
18
+ }
19
+ return quickjsPromise;
20
+ }
21
+ /**
22
+ * Build a deadline-based interrupt checker. Equivalent to
23
+ * quickjs-emscripten's `shouldInterruptAfterDeadline`, implemented
24
+ * locally to avoid an extra import.
25
+ */
26
+ function shouldInterruptAfterDeadline(deadline) {
27
+ return () => Date.now() > deadline;
28
+ }
29
+ // ── Helpers ─────────────────────────────────────────────────────────────────
30
+ /** Sanitize a script name into a safe filename stem. */
31
+ function safeName(name) {
32
+ const cleaned = name.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '');
33
+ if (!cleaned)
34
+ throw new Error(`Script name "${name}" is empty after sanitization`);
35
+ return cleaned;
36
+ }
37
+ /** Read a script record from disk, or return undefined. */
38
+ function readScript(registryDir, name) {
39
+ const path = join(registryDir, `${safeName(name)}.json`);
40
+ if (!existsSync(path))
41
+ return undefined;
42
+ const raw = readFileSync(path, 'utf-8');
43
+ return JSON.parse(raw);
44
+ }
45
+ /** Write a script record to disk. */
46
+ function writeScript(registryDir, record) {
47
+ const path = join(registryDir, `${safeName(record.name)}.json`);
48
+ writeFileSync(path, JSON.stringify(record, null, 2), 'utf-8');
49
+ }
50
+ /** Extract the sandbox directory name prefix from a sandbox-relative path. */
51
+ function fsDirOf(path) {
52
+ const sep = path.indexOf('/');
53
+ return sep === -1 ? path : path.slice(0, sep);
54
+ }
55
+ /**
56
+ * Resolve a sandbox-relative path via the fs helper, verifying the
57
+ * sandbox directory is in the allowlist.
58
+ */
59
+ function resolveFsPath(userPath, fs, allowedFsDirs) {
60
+ const dirName = fsDirOf(userPath);
61
+ if (!allowedFsDirs.includes(dirName)) {
62
+ throw new Error(`Sandbox directory "${dirName}" is not allowed for scripts. Allowed: ${allowedFsDirs.map((d) => `"${d}"`).join(', ') || '(none)'}`);
63
+ }
64
+ return fs.resolvePath(userPath);
65
+ }
66
+ /**
67
+ * Resolve an absolute path against the standalone allowlist, verifying
68
+ * it stays within an allowed parent.
69
+ */
70
+ function resolveStandalonePath(userPath, allowedDirs) {
71
+ const abs = resolve(userPath);
72
+ for (const dir of allowedDirs) {
73
+ const absDir = resolve(dir);
74
+ const rel = relative(absDir, abs);
75
+ // Inside if rel is non-empty and doesn't escape upward.
76
+ if (rel && !rel.startsWith('..') && resolve(rel) !== rel)
77
+ return abs;
78
+ }
79
+ throw new Error(`Path "${userPath}" is not within an allowed directory. Allowed: ${allowedDirs.map((d) => `"${d}"`).join(', ') || '(none)'}`);
80
+ }
81
+ /** Try to parse a string as JSON; fall back to the raw string. */
82
+ function parseInput(raw) {
83
+ const trimmed = raw.trim();
84
+ if (!trimmed)
85
+ return '';
86
+ if (trimmed[0] === '{' || trimmed[0] === '[' || trimmed[0] === '"' || trimmed[0] === '-' || /\d/.test(trimmed[0])) {
87
+ try {
88
+ return JSON.parse(trimmed);
89
+ }
90
+ catch {
91
+ return raw;
92
+ }
93
+ }
94
+ return raw;
95
+ }
96
+ /**
97
+ * Render a thrown value into a readable string. QuickJS evalCode throws
98
+ * the native JS representation of the sandbox's thrown value, which may
99
+ * be an Error, a string, or a plain object (e.g. `{ message: '...' }`).
100
+ */
101
+ function describeError(err) {
102
+ if (err instanceof Error)
103
+ return err.message;
104
+ if (typeof err === 'string')
105
+ return err;
106
+ if (err && typeof err === 'object') {
107
+ const msg = err.message;
108
+ if (typeof msg === 'string')
109
+ return msg;
110
+ try {
111
+ return JSON.stringify(err);
112
+ }
113
+ catch {
114
+ return String(err);
115
+ }
116
+ }
117
+ return String(err);
118
+ }
119
+ // ── Extension factory ───────────────────────────────────────────────────────
120
+ /**
121
+ * Create a scripts extension that implements a durable, on-disk script
122
+ * registry and a focused tool interface for agents to write their own
123
+ * data-processing scripts.
124
+ *
125
+ * Scripts are JavaScript functions (written as the function body) that
126
+ * receive an `input` value and return a JSON-serializable result. They
127
+ * are executed in a sandboxed QuickJS WASM runtime with a memory limit
128
+ * and execution deadline, so agent-authored code cannot access the
129
+ * host process, filesystem, or network.
130
+ *
131
+ * Data can be passed to a script either:
132
+ * - inline, via the `input` argument (any JSON value), or
133
+ * - by disk path, via `inputPath` (the file is read and parsed).
134
+ *
135
+ * Disk path access is gated by an allowlist. When the `filesystem`
136
+ * extension is provided via {@link ScriptsConfig.fs}, paths are
137
+ * sandbox-relative (e.g. `"slack-files/data.json"`) and only the
138
+ * sandbox directory names listed in {@link ScriptsConfig.allowedFsDirs}
139
+ * are permitted — the same sandboxes the filesystem and slack-files
140
+ * extensions use. Without `fs`, {@link ScriptsConfig.allowedDirs}
141
+ * gates absolute parent paths.
142
+ *
143
+ * Scripts are persisted as JSON files under {@link ScriptsConfig.registryDir}
144
+ * and survive across sessions and process restarts.
145
+ *
146
+ * Tools provided (prefix defaults to `script`):
147
+ * - `script_save` — create or update a named script
148
+ * - `script_list` — list registered scripts
149
+ * - `script_get` — view a script's source and description
150
+ * - `script_delete` — remove a script
151
+ * - `script_run` — execute a script by name with inline or disk input
152
+ * - `script_pipeline` — run a chain of scripts, feeding each stage's
153
+ * output into the next stage's input
154
+ */
155
+ export default function createScriptsExtension(config) {
156
+ const registryDir = resolve(config.registryDir);
157
+ if (!existsSync(registryDir))
158
+ mkdirSync(registryDir, { recursive: true });
159
+ const prefix = config.toolPrefix ?? 'script';
160
+ const maxInputBytes = config.maxInputBytes ?? 10 * 1024 * 1024;
161
+ const maxOutputChars = config.maxOutputChars ?? 50_000;
162
+ const memoryLimitBytes = config.memoryLimitBytes ?? 128 * 1024 * 1024;
163
+ const interruptMs = config.interruptMs ?? 5_000;
164
+ const fs = config.fs;
165
+ const allowedFsDirs = config.allowedFsDirs ?? [];
166
+ const allowedDirs = config.allowedDirs ?? [];
167
+ // ── Disk I/O helpers ────────────────────────────────────────────────────
168
+ function readInputPath(inputPath) {
169
+ let abs;
170
+ if (fs) {
171
+ abs = resolveFsPath(inputPath, fs, allowedFsDirs);
172
+ }
173
+ else if (allowedDirs.length > 0) {
174
+ abs = resolveStandalonePath(inputPath, allowedDirs);
175
+ }
176
+ else {
177
+ throw new Error('Disk path input is not configured. Provide `fs` with `allowedFsDirs`, or `allowedDirs`.');
178
+ }
179
+ if (!existsSync(abs))
180
+ throw new Error(`Input file not found: ${inputPath}`);
181
+ const stat = statSync(abs);
182
+ if (stat.isDirectory())
183
+ throw new Error(`Input path is a directory: ${inputPath}`);
184
+ if (stat.size > maxInputBytes) {
185
+ throw new Error(`Input file too large (${stat.size} bytes, max ${maxInputBytes}): ${inputPath}`);
186
+ }
187
+ const raw = readFileSync(abs, 'utf-8');
188
+ return parseInput(raw);
189
+ }
190
+ function writeOutputPath(outputPath, json) {
191
+ const buf = Buffer.from(json, 'utf-8');
192
+ if (fs) {
193
+ // saveBytes creates parent dirs and returns the sandbox-prefixed path.
194
+ return fs.saveBytes(outputPath, buf, 'application/json');
195
+ }
196
+ if (allowedDirs.length > 0) {
197
+ const abs = resolveStandalonePath(outputPath, allowedDirs);
198
+ const dir = dirname(abs);
199
+ if (!existsSync(dir))
200
+ mkdirSync(dir, { recursive: true });
201
+ writeFileSync(abs, buf);
202
+ return outputPath;
203
+ }
204
+ throw new Error('Disk path output is not configured. Provide `fs` with `allowedFsDirs`, or `allowedDirs`.');
205
+ }
206
+ // ── Core execution ──────────────────────────────────────────────────────
207
+ async function executeCode(code, input) {
208
+ const QuickJS = await getQuickJS();
209
+ // Wrap the agent-authored body as a function that receives `input`.
210
+ // The input is embedded as a JSON literal so the sandbox has no
211
+ // reference to host objects.
212
+ const wrapped = `((input) => {\n${code}\n})(${JSON.stringify(input)})`;
213
+ return QuickJS.evalCode(wrapped, {
214
+ memoryLimitBytes,
215
+ shouldInterrupt: shouldInterruptAfterDeadline(Date.now() + interruptMs),
216
+ });
217
+ }
218
+ async function runScript(name, input, opts) {
219
+ const record = readScript(registryDir, name);
220
+ if (!record) {
221
+ return { ok: false, output: `Script not found: ${name}`, elapsedMs: 0 };
222
+ }
223
+ const start = Date.now();
224
+ try {
225
+ const result = await executeCode(record.code, input);
226
+ const json = JSON.stringify(result ?? null, null, 2);
227
+ let outputPath;
228
+ if (opts?.outputPath) {
229
+ outputPath = writeOutputPath(opts.outputPath, json);
230
+ }
231
+ const inline = json.length > maxOutputChars
232
+ ? json.slice(0, maxOutputChars) +
233
+ `\n\n[truncated — ${json.length} chars total${outputPath ? `, full output at ${outputPath}` : ''}]`
234
+ : json;
235
+ return { ok: true, output: inline, elapsedMs: Date.now() - start, outputPath };
236
+ }
237
+ catch (err) {
238
+ return {
239
+ ok: false,
240
+ output: describeError(err),
241
+ elapsedMs: Date.now() - start,
242
+ };
243
+ }
244
+ }
245
+ /**
246
+ * Run a pipeline of scripts. Each stage receives the previous stage's
247
+ * return value (as a native JS value) as its `input`. The first stage
248
+ * receives the initial `input`. If a stage fails, the pipeline stops
249
+ * and the error is reported.
250
+ *
251
+ * Each stage runs in its own isolated QuickJS eval — stages cannot
252
+ * share state except through the chained value.
253
+ */
254
+ async function runPipeline(stages, input, opts) {
255
+ const start = Date.now();
256
+ const stageResults = [];
257
+ let current = input;
258
+ for (const name of stages) {
259
+ const record = readScript(registryDir, name);
260
+ if (!record) {
261
+ stageResults.push({
262
+ name,
263
+ ok: false,
264
+ elapsedMs: 0,
265
+ output: '',
266
+ error: `Script not found: ${name}`,
267
+ });
268
+ return {
269
+ ok: false,
270
+ output: `Pipeline stopped at stage "${name}": Script not found`,
271
+ elapsedMs: Date.now() - start,
272
+ stages: stageResults,
273
+ };
274
+ }
275
+ const stageStart = Date.now();
276
+ try {
277
+ const value = await executeCode(record.code, current);
278
+ const json = JSON.stringify(value ?? null, null, 2);
279
+ const preview = json.length > maxOutputChars
280
+ ? json.slice(0, maxOutputChars) + `\n\n[truncated — ${json.length} chars]`
281
+ : json;
282
+ stageResults.push({
283
+ name,
284
+ ok: true,
285
+ elapsedMs: Date.now() - stageStart,
286
+ output: preview,
287
+ });
288
+ // Chain the native value to the next stage.
289
+ current = value ?? null;
290
+ }
291
+ catch (err) {
292
+ const msg = describeError(err);
293
+ stageResults.push({
294
+ name,
295
+ ok: false,
296
+ elapsedMs: Date.now() - stageStart,
297
+ output: '',
298
+ error: msg,
299
+ });
300
+ return {
301
+ ok: false,
302
+ output: `Pipeline stopped at stage "${name}": ${msg}`,
303
+ elapsedMs: Date.now() - start,
304
+ stages: stageResults,
305
+ };
306
+ }
307
+ }
308
+ // All stages succeeded — serialize the final value.
309
+ const finalJson = JSON.stringify(current, null, 2);
310
+ let outputPath;
311
+ if (opts?.outputPath) {
312
+ try {
313
+ outputPath = writeOutputPath(opts.outputPath, finalJson);
314
+ }
315
+ catch (err) {
316
+ return {
317
+ ok: false,
318
+ output: `Pipeline succeeded but output write failed: ${describeError(err)}`,
319
+ elapsedMs: Date.now() - start,
320
+ stages: stageResults,
321
+ };
322
+ }
323
+ }
324
+ const inline = finalJson.length > maxOutputChars
325
+ ? finalJson.slice(0, maxOutputChars) +
326
+ `\n\n[truncated — ${finalJson.length} chars total${outputPath ? `, full output at ${outputPath}` : ''}]`
327
+ : finalJson;
328
+ return {
329
+ ok: true,
330
+ output: inline,
331
+ elapsedMs: Date.now() - start,
332
+ stages: stageResults,
333
+ outputPath,
334
+ };
335
+ }
336
+ function getScript(name) {
337
+ return readScript(registryDir, name);
338
+ }
339
+ function listScripts() {
340
+ if (!existsSync(registryDir))
341
+ return [];
342
+ return readdirSync(registryDir)
343
+ .filter((f) => f.endsWith('.json'))
344
+ .map((f) => {
345
+ try {
346
+ return JSON.parse(readFileSync(join(registryDir, f), 'utf-8'));
347
+ }
348
+ catch {
349
+ return undefined;
350
+ }
351
+ })
352
+ .filter((r) => r !== undefined)
353
+ .sort((a, b) => a.name.localeCompare(b.name));
354
+ }
355
+ // Build a description of the available disk-path options for tool docs.
356
+ const diskDesc = fs
357
+ ? `Disk paths are sandbox-relative (e.g. "${allowedFsDirs[0] ?? 'sandbox'}/data.json") and limited to: ${allowedFsDirs.map((d) => `"${d}"`).join(', ') || '(none configured)'}.`
358
+ : allowedDirs.length > 0
359
+ ? `Disk paths must resolve within: ${allowedDirs.map((d) => `"${d}"`).join(', ')}.`
360
+ : 'Disk paths are not configured — pass data inline via `input`.';
361
+ return {
362
+ name: 'scripts',
363
+ priority: 50,
364
+ runScript,
365
+ runPipeline,
366
+ getScript,
367
+ listScripts,
368
+ install(agent) {
369
+ // ── script_save ──────────────────────────────────────────────────────
370
+ agent.tool({
371
+ name: `${prefix}_save`,
372
+ description: 'Create or update a named data-processing script. The script is JavaScript ' +
373
+ 'written as the BODY of a function that receives `input` and returns a ' +
374
+ 'JSON-serializable result. It runs in a sandboxed QuickJS runtime (no fs, ' +
375
+ 'network, or host access). Scripts are persisted to disk and can be reused ' +
376
+ 'across sessions. Use `return <value>` to produce output.',
377
+ parameters: {
378
+ type: 'object',
379
+ properties: {
380
+ name: {
381
+ type: 'string',
382
+ description: 'Unique script name (letters, numbers, ., -, _). Used to run it later.',
383
+ },
384
+ description: {
385
+ type: 'string',
386
+ description: 'Short description of what the script does and what input it expects.',
387
+ },
388
+ code: {
389
+ type: 'string',
390
+ description: 'JavaScript function body. Receives `input` (the parsed input value). ' +
391
+ 'Example: `return input.items.filter(x => x.active).map(x => x.name)`',
392
+ },
393
+ },
394
+ required: ['name', 'code'],
395
+ },
396
+ async execute(args) {
397
+ const name = String(args.name ?? '');
398
+ const description = String(args.description ?? '');
399
+ const code = String(args.code ?? '');
400
+ if (!name.trim())
401
+ return { toolCallId: '', content: 'Error: name is required' };
402
+ if (!code.trim())
403
+ return { toolCallId: '', content: 'Error: code is required' };
404
+ try {
405
+ const existing = readScript(registryDir, name);
406
+ const now = new Date().toISOString();
407
+ const createdAt = existing?.createdAt ?? now;
408
+ // Ensure updatedAt differs from createdAt even when saves happen
409
+ // within the same millisecond.
410
+ const updatedAt = createdAt === now ? new Date(Date.now() + 1).toISOString() : now;
411
+ const record = {
412
+ name,
413
+ description: description || existing?.description || '',
414
+ code,
415
+ createdAt,
416
+ updatedAt,
417
+ };
418
+ writeScript(registryDir, record);
419
+ console.log(`[scripts] saved "${name}" (${code.length} chars)`);
420
+ return {
421
+ toolCallId: '',
422
+ content: `Saved script "${name}" (${existing ? 'updated' : 'created'}, ${code.length} chars). Run it with ${prefix}_run.`,
423
+ };
424
+ }
425
+ catch (err) {
426
+ return { toolCallId: '', content: `Error: ${err instanceof Error ? err.message : String(err)}` };
427
+ }
428
+ },
429
+ });
430
+ // ── script_list ──────────────────────────────────────────────────────
431
+ agent.tool({
432
+ name: `${prefix}_list`,
433
+ description: 'List all registered data-processing scripts in the registry.',
434
+ parameters: { type: 'object', properties: {} },
435
+ async execute() {
436
+ const scripts = listScripts();
437
+ if (scripts.length === 0) {
438
+ return { toolCallId: '', content: 'No scripts registered. Use script_save to create one.' };
439
+ }
440
+ const lines = scripts.map((s) => {
441
+ const desc = s.description ? ` — ${s.description}` : '';
442
+ return ` ${s.name}${desc} (updated ${s.updatedAt})`;
443
+ });
444
+ return { toolCallId: '', content: `Registered scripts (${scripts.length}):\n${lines.join('\n')}` };
445
+ },
446
+ });
447
+ // ── script_get ───────────────────────────────────────────────────────
448
+ agent.tool({
449
+ name: `${prefix}_get`,
450
+ description: 'View the source code and description of a registered script.',
451
+ parameters: {
452
+ type: 'object',
453
+ properties: {
454
+ name: { type: 'string', description: 'Script name' },
455
+ },
456
+ required: ['name'],
457
+ },
458
+ async execute(args) {
459
+ const name = String(args.name ?? '');
460
+ const record = readScript(registryDir, name);
461
+ if (!record)
462
+ return { toolCallId: '', content: `Script not found: ${name}` };
463
+ return {
464
+ toolCallId: '',
465
+ content: `Script: ${record.name}\n` +
466
+ `Description: ${record.description || '(none)'}\n` +
467
+ `Created: ${record.createdAt}\n` +
468
+ `Updated: ${record.updatedAt}\n\n` +
469
+ `--- code ---\n${record.code}\n--- end ---`,
470
+ };
471
+ },
472
+ });
473
+ // ── script_delete ────────────────────────────────────────────────────
474
+ agent.tool({
475
+ name: `${prefix}_delete`,
476
+ description: 'Delete a registered script from the registry.',
477
+ parameters: {
478
+ type: 'object',
479
+ properties: {
480
+ name: { type: 'string', description: 'Script name' },
481
+ },
482
+ required: ['name'],
483
+ },
484
+ async execute(args) {
485
+ const name = String(args.name ?? '');
486
+ const path = join(registryDir, `${safeName(name)}.json`);
487
+ if (!existsSync(path))
488
+ return { toolCallId: '', content: `Script not found: ${name}` };
489
+ unlinkSync(path);
490
+ console.log(`[scripts] deleted "${name}"`);
491
+ return { toolCallId: '', content: `Deleted script: ${name}` };
492
+ },
493
+ });
494
+ // ── script_run ───────────────────────────────────────────────────────
495
+ agent.tool({
496
+ name: `${prefix}_run`,
497
+ description: 'Execute a registered script by name. Pass data inline via `input` (any JSON ' +
498
+ 'value) or via `inputPath` (a disk path that is read and parsed as JSON). ' +
499
+ diskDesc +
500
+ ' Optionally write the full result to `outputPath` instead of returning it inline.',
501
+ parameters: {
502
+ type: 'object',
503
+ properties: {
504
+ name: { type: 'string', description: 'Script name to run' },
505
+ input: {
506
+ description: 'Inline input value passed to the script as `input`. Any JSON value ' +
507
+ '(object, array, string, number, boolean). Use this or `inputPath`.',
508
+ },
509
+ inputPath: {
510
+ type: 'string',
511
+ description: 'Disk path to read input from (parsed as JSON, or raw string).',
512
+ },
513
+ outputPath: {
514
+ type: 'string',
515
+ description: 'Optional disk path to write the full JSON result to.',
516
+ },
517
+ },
518
+ required: ['name'],
519
+ },
520
+ async execute(args) {
521
+ const name = String(args.name ?? '');
522
+ const outputPath = args.outputPath ? String(args.outputPath) : undefined;
523
+ let input;
524
+ try {
525
+ if (args.inputPath) {
526
+ input = readInputPath(String(args.inputPath));
527
+ }
528
+ else if (args.input !== undefined) {
529
+ input = args.input;
530
+ }
531
+ else {
532
+ input = null;
533
+ }
534
+ }
535
+ catch (err) {
536
+ return { toolCallId: '', content: `Error reading input: ${err instanceof Error ? err.message : String(err)}` };
537
+ }
538
+ const result = await runScript(name, input, outputPath ? { outputPath } : undefined);
539
+ const status = result.ok ? 'OK' : 'ERROR';
540
+ const head = `Script "${name}" ${status} (${result.elapsedMs}ms)${result.outputPath ? ` → ${result.outputPath}` : ''}`;
541
+ return { toolCallId: '', content: `${head}\n${result.output}` };
542
+ },
543
+ });
544
+ // ── script_pipeline ─────────────────────────────────────────────────
545
+ agent.tool({
546
+ name: `${prefix}_pipeline`,
547
+ description: 'Run a chain of registered scripts in sequence. Each stage receives the ' +
548
+ 'previous stage\'s return value as its `input` (the first stage gets the ' +
549
+ 'initial `input` or `inputPath` value). If any stage fails, the pipeline ' +
550
+ 'stops and reports which stage failed. Each stage runs in its own isolated ' +
551
+ 'sandbox — stages share state only through the chained value. ' +
552
+ diskDesc +
553
+ ' Optionally write the final result to `outputPath`.',
554
+ parameters: {
555
+ type: 'object',
556
+ properties: {
557
+ stages: {
558
+ type: 'array',
559
+ items: { type: 'string' },
560
+ description: 'Ordered list of script names to run. Stage 1 output → stage 2 input, etc.',
561
+ },
562
+ input: {
563
+ description: 'Initial input value for the first stage (any JSON value). ' +
564
+ 'Use this or `inputPath`.',
565
+ },
566
+ inputPath: {
567
+ type: 'string',
568
+ description: 'Disk path to read the initial input from (parsed as JSON).',
569
+ },
570
+ outputPath: {
571
+ type: 'string',
572
+ description: 'Optional disk path to write the final JSON result to.',
573
+ },
574
+ },
575
+ required: ['stages'],
576
+ },
577
+ async execute(args) {
578
+ const stages = Array.isArray(args.stages)
579
+ ? args.stages.map((s) => String(s))
580
+ : [];
581
+ if (stages.length === 0) {
582
+ return { toolCallId: '', content: 'Error: stages must be a non-empty array of script names' };
583
+ }
584
+ const outputPath = args.outputPath ? String(args.outputPath) : undefined;
585
+ let input;
586
+ try {
587
+ if (args.inputPath) {
588
+ input = readInputPath(String(args.inputPath));
589
+ }
590
+ else if (args.input !== undefined) {
591
+ input = args.input;
592
+ }
593
+ else {
594
+ input = null;
595
+ }
596
+ }
597
+ catch (err) {
598
+ return { toolCallId: '', content: `Error reading input: ${err instanceof Error ? err.message : String(err)}` };
599
+ }
600
+ const result = await runPipeline(stages, input, outputPath ? { outputPath } : undefined);
601
+ // Build a per-stage summary so the agent can see the flow.
602
+ const stageLines = result.stages.map((s, i) => {
603
+ const status = s.ok ? 'OK' : 'FAIL';
604
+ const err = s.error ? ` — ${s.error}` : '';
605
+ return ` [${i + 1}] ${s.name}: ${status} (${s.elapsedMs}ms)${err}`;
606
+ });
607
+ const status = result.ok ? 'OK' : 'ERROR';
608
+ const head = `Pipeline ${status} (${result.elapsedMs}ms, ${result.stages.length} stage(s))` +
609
+ `${result.outputPath ? ` → ${result.outputPath}` : ''}\n` +
610
+ stageLines.join('\n') +
611
+ `\n--- final output ---`;
612
+ return { toolCallId: '', content: `${head}\n${result.output}` };
613
+ },
614
+ });
615
+ },
616
+ };
617
+ }
618
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../../src/extras/extensions/scripts/extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "scripts",
3
+ "description": "Durable on-disk script registry and a focused tool interface for agents to write and run their own sandboxed (QuickJS) data-processing scripts. Input can be passed inline or via allowed disk paths. Reuses the filesystem extension's sandboxes when configured.",
4
+ "enabled": true,
5
+ "priority": 50,
6
+ "configKeys": ["registryDir", "fs", "allowedFsDirs", "allowedDirs", "maxInputBytes", "maxOutputChars", "memoryLimitBytes", "interruptMs", "toolPrefix"]
7
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extension.test.d.ts.map