gauss-ai 4.0.0

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 (232) hide show
  1. package/CHANGELOG.md +489 -0
  2. package/LICENSE +21 -0
  3. package/README.md +269 -0
  4. package/dist/a2a/index.cjs +7 -0
  5. package/dist/a2a/index.cjs.map +1 -0
  6. package/dist/a2a/index.d.cts +30 -0
  7. package/dist/a2a/index.d.ts +30 -0
  8. package/dist/a2a/index.js +7 -0
  9. package/dist/a2a/index.js.map +1 -0
  10. package/dist/agent-UIQDSYCE.js +16 -0
  11. package/dist/agent-UIQDSYCE.js.map +1 -0
  12. package/dist/agent-builder-8W3mBR-N.d.ts +1075 -0
  13. package/dist/agent-builder-GEMYdb1p.d.cts +1075 -0
  14. package/dist/agent-graph-AMQYAWNF.js +1422 -0
  15. package/dist/agent-graph-AMQYAWNF.js.map +1 -0
  16. package/dist/ai-sdk-mcp.adapter-SEN6KHNU.js +124 -0
  17. package/dist/ai-sdk-mcp.adapter-SEN6KHNU.js.map +1 -0
  18. package/dist/browser/index.js +10 -0
  19. package/dist/browser/index.js.map +1 -0
  20. package/dist/bun-runtime.adapter-MQDAJLQM.js +8 -0
  21. package/dist/bun-runtime.adapter-MQDAJLQM.js.map +1 -0
  22. package/dist/bun-runtime.adapter-XKOUXVAK.cjs +8 -0
  23. package/dist/bun-runtime.adapter-XKOUXVAK.cjs.map +1 -0
  24. package/dist/chat-A3XMRPJL.js +129 -0
  25. package/dist/chat-A3XMRPJL.js.map +1 -0
  26. package/dist/chunk-2ZRU47NC.js +91 -0
  27. package/dist/chunk-2ZRU47NC.js.map +1 -0
  28. package/dist/chunk-3LD3JTH4.cjs +18 -0
  29. package/dist/chunk-3LD3JTH4.cjs.map +1 -0
  30. package/dist/chunk-5FE5TG2W.cjs +16 -0
  31. package/dist/chunk-5FE5TG2W.cjs.map +1 -0
  32. package/dist/chunk-6XF673YC.cjs +436 -0
  33. package/dist/chunk-6XF673YC.cjs.map +1 -0
  34. package/dist/chunk-7CKWZJNS.js +230 -0
  35. package/dist/chunk-7CKWZJNS.js.map +1 -0
  36. package/dist/chunk-BI2G665F.js +4588 -0
  37. package/dist/chunk-BI2G665F.js.map +1 -0
  38. package/dist/chunk-C5NLWJS2.js +139 -0
  39. package/dist/chunk-C5NLWJS2.js.map +1 -0
  40. package/dist/chunk-CJZ66SU3.cjs +4321 -0
  41. package/dist/chunk-CJZ66SU3.cjs.map +1 -0
  42. package/dist/chunk-DAMT2CXW.cjs +91 -0
  43. package/dist/chunk-DAMT2CXW.cjs.map +1 -0
  44. package/dist/chunk-E7WG3MO5.js +18 -0
  45. package/dist/chunk-E7WG3MO5.js.map +1 -0
  46. package/dist/chunk-EFDM6R4J.js +99 -0
  47. package/dist/chunk-EFDM6R4J.js.map +1 -0
  48. package/dist/chunk-F7WIPPEO.js +256 -0
  49. package/dist/chunk-F7WIPPEO.js.map +1 -0
  50. package/dist/chunk-FAYDE67N.js +6927 -0
  51. package/dist/chunk-FAYDE67N.js.map +1 -0
  52. package/dist/chunk-GAE2KKCM.js +21 -0
  53. package/dist/chunk-GAE2KKCM.js.map +1 -0
  54. package/dist/chunk-INLNGRXM.cjs +130 -0
  55. package/dist/chunk-INLNGRXM.cjs.map +1 -0
  56. package/dist/chunk-JKXKXB5O.js +130 -0
  57. package/dist/chunk-JKXKXB5O.js.map +1 -0
  58. package/dist/chunk-K6SAETGP.js +375 -0
  59. package/dist/chunk-K6SAETGP.js.map +1 -0
  60. package/dist/chunk-KEASLAYR.js +157 -0
  61. package/dist/chunk-KEASLAYR.js.map +1 -0
  62. package/dist/chunk-KKJVNM6O.js +436 -0
  63. package/dist/chunk-KKJVNM6O.js.map +1 -0
  64. package/dist/chunk-KYIMVRIM.js +16 -0
  65. package/dist/chunk-KYIMVRIM.js.map +1 -0
  66. package/dist/chunk-MB7NXIZD.js +4321 -0
  67. package/dist/chunk-MB7NXIZD.js.map +1 -0
  68. package/dist/chunk-MHHDXPGE.js +209 -0
  69. package/dist/chunk-MHHDXPGE.js.map +1 -0
  70. package/dist/chunk-NE6JJA5W.js +401 -0
  71. package/dist/chunk-NE6JJA5W.js.map +1 -0
  72. package/dist/chunk-PF46XZBF.cjs +6927 -0
  73. package/dist/chunk-PF46XZBF.cjs.map +1 -0
  74. package/dist/chunk-PSJIAGDE.cjs +375 -0
  75. package/dist/chunk-PSJIAGDE.cjs.map +1 -0
  76. package/dist/chunk-PWOQDXNQ.js +16 -0
  77. package/dist/chunk-PWOQDXNQ.js.map +1 -0
  78. package/dist/chunk-QYOMQBBZ.cjs +230 -0
  79. package/dist/chunk-QYOMQBBZ.cjs.map +1 -0
  80. package/dist/chunk-UDFXLC4J.cjs +16 -0
  81. package/dist/chunk-UDFXLC4J.cjs.map +1 -0
  82. package/dist/chunk-UO4NGXRT.cjs +259 -0
  83. package/dist/chunk-UO4NGXRT.cjs.map +1 -0
  84. package/dist/chunk-UPFDFLEW.js +40 -0
  85. package/dist/chunk-UPFDFLEW.js.map +1 -0
  86. package/dist/chunk-V55JSQS7.cjs +16 -0
  87. package/dist/chunk-V55JSQS7.cjs.map +1 -0
  88. package/dist/chunk-VJADHXZL.cjs +16 -0
  89. package/dist/chunk-VJADHXZL.cjs.map +1 -0
  90. package/dist/chunk-VRWD7LCI.js +59 -0
  91. package/dist/chunk-VRWD7LCI.js.map +1 -0
  92. package/dist/chunk-WKKQ443C.js +487 -0
  93. package/dist/chunk-WKKQ443C.js.map +1 -0
  94. package/dist/chunk-X2GHUHAF.js +436 -0
  95. package/dist/chunk-X2GHUHAF.js.map +1 -0
  96. package/dist/chunk-XLGW3XNI.cjs +256 -0
  97. package/dist/chunk-XLGW3XNI.cjs.map +1 -0
  98. package/dist/chunk-ZFJKX4DP.js +16 -0
  99. package/dist/chunk-ZFJKX4DP.js.map +1 -0
  100. package/dist/chunk-ZM2OEWM2.js +259 -0
  101. package/dist/chunk-ZM2OEWM2.js.map +1 -0
  102. package/dist/chunk-ZNAIP2XV.js +16 -0
  103. package/dist/chunk-ZNAIP2XV.js.map +1 -0
  104. package/dist/chunk-ZYFAZYSL.js +42 -0
  105. package/dist/chunk-ZYFAZYSL.js.map +1 -0
  106. package/dist/cli/index.js +421 -0
  107. package/dist/cli/index.js.map +1 -0
  108. package/dist/config-4MHT6TQW.js +153 -0
  109. package/dist/config-4MHT6TQW.js.map +1 -0
  110. package/dist/config-REERQFK4.cjs +153 -0
  111. package/dist/config-REERQFK4.cjs.map +1 -0
  112. package/dist/cost-tracker-JLOU7IZJ.js +7 -0
  113. package/dist/cost-tracker-JLOU7IZJ.js.map +1 -0
  114. package/dist/demo-C52GMSYH.js +188 -0
  115. package/dist/demo-C52GMSYH.js.map +1 -0
  116. package/dist/deno/index.js +306 -0
  117. package/dist/deno/index.js.map +1 -0
  118. package/dist/deno-runtime.adapter-F744HY7K.js +8 -0
  119. package/dist/deno-runtime.adapter-F744HY7K.js.map +1 -0
  120. package/dist/deno-runtime.adapter-RFEVNSCV.cjs +8 -0
  121. package/dist/deno-runtime.adapter-RFEVNSCV.cjs.map +1 -0
  122. package/dist/dev-D7DDVDA4.js +218 -0
  123. package/dist/dev-D7DDVDA4.js.map +1 -0
  124. package/dist/edge/index.js +10 -0
  125. package/dist/edge/index.js.map +1 -0
  126. package/dist/edge-runtime.adapter-UQCW2F7X.js +8 -0
  127. package/dist/edge-runtime.adapter-UQCW2F7X.js.map +1 -0
  128. package/dist/edge-runtime.adapter-YED6F3AY.cjs +8 -0
  129. package/dist/edge-runtime.adapter-YED6F3AY.cjs.map +1 -0
  130. package/dist/graph-MGFAQZ5W.js +50 -0
  131. package/dist/graph-MGFAQZ5W.js.map +1 -0
  132. package/dist/graph-visualization-HBSVQXJK.js +9 -0
  133. package/dist/graph-visualization-HBSVQXJK.js.map +1 -0
  134. package/dist/index-BRgqNnh3.d.cts +982 -0
  135. package/dist/index-CZxpYUxZ.d.ts +982 -0
  136. package/dist/index.cjs +14789 -0
  137. package/dist/index.cjs.map +1 -0
  138. package/dist/index.d.cts +10275 -0
  139. package/dist/index.d.ts +10275 -0
  140. package/dist/index.js +14789 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/init-CFWXTQ35.js +133 -0
  143. package/dist/init-CFWXTQ35.js.map +1 -0
  144. package/dist/llm-VWO4MC7J.cjs +17 -0
  145. package/dist/llm-VWO4MC7J.cjs.map +1 -0
  146. package/dist/llm-XLXVSPBI.js +17 -0
  147. package/dist/llm-XLXVSPBI.js.map +1 -0
  148. package/dist/logging-WRAK5ZXT.js +33 -0
  149. package/dist/logging-WRAK5ZXT.js.map +1 -0
  150. package/dist/metrics-FAHZVVD4.js +47 -0
  151. package/dist/metrics-FAHZVVD4.js.map +1 -0
  152. package/dist/node/index.cjs +280 -0
  153. package/dist/node/index.cjs.map +1 -0
  154. package/dist/node/index.d.cts +51 -0
  155. package/dist/node/index.d.ts +51 -0
  156. package/dist/node/index.js +280 -0
  157. package/dist/node/index.js.map +1 -0
  158. package/dist/node-runtime.adapter-5L7PJ6W2.js +8 -0
  159. package/dist/node-runtime.adapter-5L7PJ6W2.js.map +1 -0
  160. package/dist/node-runtime.adapter-CCRZVGHB.cjs +8 -0
  161. package/dist/node-runtime.adapter-CCRZVGHB.cjs.map +1 -0
  162. package/dist/persist-usage-WTBTCWEF.js +7 -0
  163. package/dist/persist-usage-WTBTCWEF.js.map +1 -0
  164. package/dist/plugin-RCPBWUUA.js +207 -0
  165. package/dist/plugin-RCPBWUUA.js.map +1 -0
  166. package/dist/plugins/index.cjs +75 -0
  167. package/dist/plugins/index.cjs.map +1 -0
  168. package/dist/plugins/index.d.cts +8 -0
  169. package/dist/plugins/index.d.ts +8 -0
  170. package/dist/plugins/index.js +75 -0
  171. package/dist/plugins/index.js.map +1 -0
  172. package/dist/plugins-L4ING3CX.js +4625 -0
  173. package/dist/plugins-L4ING3CX.js.map +1 -0
  174. package/dist/providers/index.cjs +189 -0
  175. package/dist/providers/index.cjs.map +1 -0
  176. package/dist/providers/index.d.cts +168 -0
  177. package/dist/providers/index.d.ts +168 -0
  178. package/dist/providers/index.js +189 -0
  179. package/dist/providers/index.js.map +1 -0
  180. package/dist/providers-3RNQ5CKZ.js +59 -0
  181. package/dist/providers-3RNQ5CKZ.js.map +1 -0
  182. package/dist/providers-66GPXUGQ.cjs +59 -0
  183. package/dist/providers-66GPXUGQ.cjs.map +1 -0
  184. package/dist/repl-K6QN4I2S.js +678 -0
  185. package/dist/repl-K6QN4I2S.js.map +1 -0
  186. package/dist/rest/index.cjs +17 -0
  187. package/dist/rest/index.cjs.map +1 -0
  188. package/dist/rest/index.d.cts +102 -0
  189. package/dist/rest/index.d.ts +102 -0
  190. package/dist/rest/index.js +17 -0
  191. package/dist/rest/index.js.map +1 -0
  192. package/dist/runtime-deno.js +15 -0
  193. package/dist/runtime-deno.js.map +1 -0
  194. package/dist/runtime-edge.js +15 -0
  195. package/dist/runtime-edge.js.map +1 -0
  196. package/dist/runtime-node.js +15 -0
  197. package/dist/runtime-node.js.map +1 -0
  198. package/dist/scraping/index.cjs +11 -0
  199. package/dist/scraping/index.cjs.map +1 -0
  200. package/dist/scraping/index.d.cts +17 -0
  201. package/dist/scraping/index.d.ts +17 -0
  202. package/dist/scraping/index.js +11 -0
  203. package/dist/scraping/index.js.map +1 -0
  204. package/dist/semantic-scraping.port-CZWUea88.d.cts +54 -0
  205. package/dist/semantic-scraping.port-CZWUea88.d.ts +54 -0
  206. package/dist/server/index.js +166 -0
  207. package/dist/server/index.js.map +1 -0
  208. package/dist/testing/index.cjs +25 -0
  209. package/dist/testing/index.cjs.map +1 -0
  210. package/dist/testing/index.d.cts +63 -0
  211. package/dist/testing/index.d.ts +63 -0
  212. package/dist/testing/index.js +25 -0
  213. package/dist/testing/index.js.map +1 -0
  214. package/dist/token-counter.port-CRgxZZGe.d.ts +334 -0
  215. package/dist/token-counter.port-D7BHMCRR.d.cts +334 -0
  216. package/dist/tools-BZM33OBZ.js +10 -0
  217. package/dist/tools-BZM33OBZ.js.map +1 -0
  218. package/dist/tracing-XA3TEWP4.js +48 -0
  219. package/dist/tracing-XA3TEWP4.js.map +1 -0
  220. package/dist/types-CVsP7gFI.d.cts +235 -0
  221. package/dist/types-CVsP7gFI.d.ts +235 -0
  222. package/dist/virtual-fs.adapter-BBLS-3AY.d.ts +26 -0
  223. package/dist/virtual-fs.adapter-nb0CTYOj.d.cts +26 -0
  224. package/dist/workflow/index.cjs +9 -0
  225. package/dist/workflow/index.cjs.map +1 -0
  226. package/dist/workflow/index.d.cts +62 -0
  227. package/dist/workflow/index.d.ts +62 -0
  228. package/dist/workflow/index.js +9 -0
  229. package/dist/workflow/index.js.map +1 -0
  230. package/dist/workflow.port-BaCttxrw.d.cts +153 -0
  231. package/dist/workflow.port-BaCttxrw.d.ts +153 -0
  232. package/package.json +230 -0
@@ -0,0 +1,256 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;// src/adapters/filesystem/glob-utils.ts
2
+ var regexCache = /* @__PURE__ */ new Map();
3
+ var MAX_CACHE_SIZE = 500;
4
+ function globToRegex(pattern) {
5
+ const cached = regexCache.get(pattern);
6
+ if (cached) return cached;
7
+ let result = "";
8
+ let i = 0;
9
+ while (i < pattern.length) {
10
+ const char = pattern[i];
11
+ if (char === "*" && pattern[i + 1] === "*") {
12
+ result += ".*";
13
+ i += pattern[i + 2] === "/" ? 3 : 2;
14
+ } else if (char === "*") {
15
+ result += "[^/]*";
16
+ i++;
17
+ } else if (char === "?") {
18
+ result += "[^/]";
19
+ i++;
20
+ } else if (".+^${}()|[]\\".includes(char)) {
21
+ result += "\\" + char;
22
+ i++;
23
+ } else {
24
+ result += char;
25
+ i++;
26
+ }
27
+ }
28
+ const regex = new RegExp("^" + result + "$");
29
+ if (regexCache.size >= MAX_CACHE_SIZE) {
30
+ const oldest = regexCache.keys().next().value;
31
+ regexCache.delete(oldest);
32
+ }
33
+ regexCache.set(pattern, regex);
34
+ return regex;
35
+ }
36
+
37
+ // src/adapters/filesystem/virtual-fs.adapter.ts
38
+ var VirtualFilesystem = (_class = class {
39
+ __init() {this.zones = {
40
+ transient: /* @__PURE__ */ new Map(),
41
+ persistent: /* @__PURE__ */ new Map()
42
+ }}
43
+
44
+
45
+ constructor(options = {}) {;_class.prototype.__init.call(this);
46
+ this.basePath = _nullishCoalesce(options.basePath, () => ( ""));
47
+ this.onSync = options.onSync;
48
+ }
49
+ async read(path, zone = "transient") {
50
+ const entry = this.zones[zone].get(normalizePath(path));
51
+ if (!entry || entry.isDirectory) {
52
+ throw new Error(`File not found: ${path}`);
53
+ }
54
+ return entry.content;
55
+ }
56
+ async write(path, content, zone = "transient") {
57
+ const normalized = normalizePath(path);
58
+ this.ensureParentDirs(normalized, zone);
59
+ const now = Date.now();
60
+ const existing = this.zones[zone].get(normalized);
61
+ this.zones[zone].set(normalized, {
62
+ content,
63
+ isDirectory: false,
64
+ createdAt: _nullishCoalesce(_optionalChain([existing, 'optionalAccess', _ => _.createdAt]), () => ( now)),
65
+ modifiedAt: now
66
+ });
67
+ }
68
+ async exists(path, zone = "transient") {
69
+ return this.zones[zone].has(normalizePath(path));
70
+ }
71
+ async delete(path, zone = "transient") {
72
+ const normalized = normalizePath(path);
73
+ const store = this.zones[zone];
74
+ const prefix = normalized.endsWith("/") ? normalized : normalized + "/";
75
+ for (const key of store.keys()) {
76
+ if (key === normalized || key.startsWith(prefix)) {
77
+ store.delete(key);
78
+ }
79
+ }
80
+ }
81
+ async list(path, options = {}, zone = "transient") {
82
+ const normalized = normalizePath(path);
83
+ const prefix = normalized === "" ? "" : normalized + "/";
84
+ const maxDepth = _nullishCoalesce(options.maxDepth, () => ( (options.recursive ? Infinity : 1)));
85
+ const results = [];
86
+ for (const [key, entry] of this.zones[zone]) {
87
+ if (!key.startsWith(prefix) || key === normalized) continue;
88
+ const relative = key.slice(prefix.length);
89
+ if (!options.includeHidden && relative.split("/").some((s) => s.startsWith("."))) continue;
90
+ const depth = relative.split("/").length;
91
+ if (depth > maxDepth) continue;
92
+ results.push({
93
+ name: relative.split("/").pop(),
94
+ path: key,
95
+ isDirectory: entry.isDirectory,
96
+ size: entry.content.length,
97
+ modifiedAt: entry.modifiedAt
98
+ });
99
+ }
100
+ return results;
101
+ }
102
+ async stat(path, zone = "transient") {
103
+ const entry = this.zones[zone].get(normalizePath(path));
104
+ if (!entry) throw new Error(`Not found: ${path}`);
105
+ return {
106
+ size: entry.content.length,
107
+ isDirectory: entry.isDirectory,
108
+ isFile: !entry.isDirectory,
109
+ createdAt: entry.createdAt,
110
+ modifiedAt: entry.modifiedAt
111
+ };
112
+ }
113
+ async glob(pattern, zone = "transient") {
114
+ const regex = globToRegex(pattern);
115
+ const results = [];
116
+ for (const [key, entry] of this.zones[zone]) {
117
+ if (!entry.isDirectory && regex.test(key)) {
118
+ results.push(key);
119
+ }
120
+ }
121
+ return results;
122
+ }
123
+ async search(pattern, options = {}, zone = "transient") {
124
+ const flags = options.caseSensitive === false ? "gi" : "g";
125
+ const regex = new RegExp(pattern, flags);
126
+ const fileRegex = options.filePattern ? globToRegex(options.filePattern) : null;
127
+ const results = [];
128
+ const max = _nullishCoalesce(options.maxResults, () => ( Infinity));
129
+ for (const [filePath, entry] of this.zones[zone]) {
130
+ if (entry.isDirectory) continue;
131
+ if (fileRegex && !fileRegex.test(filePath)) continue;
132
+ const lines = entry.content.split("\n");
133
+ for (let i = 0; i < lines.length && results.length < max; i++) {
134
+ regex.lastIndex = 0;
135
+ const match = regex.exec(lines[i]);
136
+ if (match) {
137
+ results.push({
138
+ filePath,
139
+ lineNumber: i + 1,
140
+ lineContent: lines[i],
141
+ matchStart: match.index,
142
+ matchEnd: match.index + match[0].length
143
+ });
144
+ }
145
+ }
146
+ if (results.length >= max) break;
147
+ }
148
+ return results;
149
+ }
150
+ async syncToPersistent() {
151
+ if (!this.onSync) {
152
+ throw new Error("syncToPersistent requires an onSync callback");
153
+ }
154
+ for (const [filePath, entry] of this.zones.persistent) {
155
+ if (entry.isDirectory) continue;
156
+ const fullPath = this.basePath ? this.basePath + "/" + filePath : filePath;
157
+ await this.onSync(fullPath, entry.content);
158
+ }
159
+ }
160
+ async clearTransient() {
161
+ this.zones.transient.clear();
162
+ }
163
+ ensureParentDirs(filePath, zone) {
164
+ const parts = filePath.split("/");
165
+ const now = Date.now();
166
+ for (let i = 1; i < parts.length; i++) {
167
+ const dirPath = parts.slice(0, i).join("/");
168
+ if (dirPath && !this.zones[zone].has(dirPath)) {
169
+ this.zones[zone].set(dirPath, {
170
+ content: "",
171
+ isDirectory: true,
172
+ createdAt: now,
173
+ modifiedAt: now
174
+ });
175
+ }
176
+ }
177
+ }
178
+ }, _class);
179
+ function normalizePath(p) {
180
+ const segments = p.replace(/\/+/g, "/").split("/");
181
+ const resolved = [];
182
+ for (const seg of segments) {
183
+ if (seg === "." || seg === "") continue;
184
+ if (seg === "..") {
185
+ resolved.pop();
186
+ } else {
187
+ resolved.push(seg);
188
+ }
189
+ }
190
+ return resolved.join("/");
191
+ }
192
+
193
+ // src/adapters/token-counter/approximate.adapter.ts
194
+ var CHARS_PER_TOKEN = 4;
195
+ var ROLE_OVERHEAD_TOKENS = 4;
196
+ var CONTEXT_WINDOW_SIZES = {
197
+ "gpt-5.2": 128e3,
198
+ "gpt-5.2-mini": 128e3,
199
+ "gpt-4-turbo": 128e3,
200
+ "gpt-4": 8192,
201
+ "gpt-3.5-turbo": 16385,
202
+ "claude-3.5-sonnet": 2e5,
203
+ "claude-3-sonnet": 2e5,
204
+ "claude-3-haiku": 2e5,
205
+ "claude-3-opus": 2e5,
206
+ "claude-4-sonnet": 2e5,
207
+ "gemini-2.5-flash-preview-05-20": 1e6,
208
+ "gemini-2.5-flash": 1e6,
209
+ "gemini-2.5-pro": 1e6,
210
+ "gemini-1.5-flash": 1e6,
211
+ "gemini-1.5-pro": 2e6
212
+ };
213
+ var DEFAULT_CONTEXT_WINDOW = 128e3;
214
+ var COST_TABLE = {
215
+ "gpt-5.2": [2.5, 10],
216
+ "gpt-5.2-mini": [0.15, 0.6],
217
+ "claude-3.5-sonnet": [3, 15],
218
+ "claude-3-haiku": [0.25, 1.25],
219
+ "gemini-2.5-flash-preview-05-20": [0.075, 0.3],
220
+ "gemini-2.5-flash": [0.15, 0.6],
221
+ "gemini-2.5-pro": [1.25, 10]
222
+ };
223
+ var DEFAULT_COST = [1, 3];
224
+ var ApproximateTokenCounter = class {
225
+ count(text) {
226
+ if (!text) return 0;
227
+ return Math.ceil(text.length / CHARS_PER_TOKEN);
228
+ }
229
+ countMessages(messages) {
230
+ if (!messages.length) return 0;
231
+ return messages.reduce(
232
+ (sum, msg) => sum + this.count(msg.content) + ROLE_OVERHEAD_TOKENS,
233
+ 0
234
+ );
235
+ }
236
+ getContextWindowSize(model) {
237
+ return _nullishCoalesce(CONTEXT_WINDOW_SIZES[model], () => ( DEFAULT_CONTEXT_WINDOW));
238
+ }
239
+ estimateCost(inputTokens, outputTokens, model) {
240
+ const [inputRate, outputRate] = _nullishCoalesce(COST_TABLE[model], () => ( DEFAULT_COST));
241
+ return inputTokens / 1e6 * inputRate + outputTokens / 1e6 * outputRate;
242
+ }
243
+ truncate(text, maxTokens) {
244
+ if (!text) return text;
245
+ const maxChars = maxTokens * CHARS_PER_TOKEN;
246
+ if (text.length <= maxChars) return text;
247
+ return text.slice(0, maxChars);
248
+ }
249
+ };
250
+
251
+
252
+
253
+
254
+
255
+ exports.globToRegex = globToRegex; exports.VirtualFilesystem = VirtualFilesystem; exports.ApproximateTokenCounter = ApproximateTokenCounter;
256
+ //# sourceMappingURL=chunk-XLGW3XNI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/chunk-XLGW3XNI.cjs","../src/adapters/filesystem/glob-utils.ts","../src/adapters/filesystem/virtual-fs.adapter.ts","../src/adapters/token-counter/approximate.adapter.ts"],"names":[],"mappings":"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","file":"/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/chunk-XLGW3XNI.cjs","sourcesContent":[null,"// =============================================================================\n// Glob pattern matching utility (no external deps)\n// =============================================================================\n\nconst regexCache = new Map<string, RegExp>();\nconst MAX_CACHE_SIZE = 500;\n\n/** Convert a glob pattern to a RegExp. Supports *, **, and ? wildcards. */\nexport function globToRegex(pattern: string): RegExp {\n const cached = regexCache.get(pattern);\n if (cached) return cached;\n\n let result = \"\";\n let i = 0;\n while (i < pattern.length) {\n const char = pattern[i]!;\n if (char === \"*\" && pattern[i + 1] === \"*\") {\n result += \".*\";\n i += pattern[i + 2] === \"/\" ? 3 : 2;\n } else if (char === \"*\") {\n result += \"[^/]*\";\n i++;\n } else if (char === \"?\") {\n result += \"[^/]\";\n i++;\n } else if (\".+^${}()|[]\\\\\".includes(char)) {\n result += \"\\\\\" + char;\n i++;\n } else {\n result += char;\n i++;\n }\n }\n const regex = new RegExp(\"^\" + result + \"$\");\n if (regexCache.size >= MAX_CACHE_SIZE) {\n const oldest = regexCache.keys().next().value as string;\n regexCache.delete(oldest);\n }\n regexCache.set(pattern, regex);\n return regex;\n}\n","// =============================================================================\n// VirtualFilesystem — In-memory filesystem with optional disk persistence\n// =============================================================================\n\nimport type { FilesystemPort } from \"../../ports/filesystem.port.js\";\nimport type {\n FileEntry,\n FileStat,\n FilesystemZone,\n ListOptions,\n SearchOptions,\n SearchResult,\n} from \"../../types.js\";\nimport { globToRegex } from \"./glob-utils.js\";\n\ninterface StoredEntry {\n content: string;\n isDirectory: boolean;\n createdAt: number;\n modifiedAt: number;\n}\n\nexport type DiskSyncFn = (filePath: string, content: string) => Promise<void>;\n\ninterface VirtualFsOptions {\n basePath?: string;\n onSync?: DiskSyncFn;\n}\n\nexport class VirtualFilesystem implements FilesystemPort {\n private readonly zones: Record<FilesystemZone, Map<string, StoredEntry>> = {\n transient: new Map(),\n persistent: new Map(),\n };\n private readonly basePath: string;\n private readonly onSync?: DiskSyncFn;\n\n constructor(options: VirtualFsOptions = {}) {\n this.basePath = options.basePath ?? \"\";\n this.onSync = options.onSync;\n }\n\n async read(path: string, zone: FilesystemZone = \"transient\"): Promise<string> {\n const entry = this.zones[zone].get(normalizePath(path));\n if (!entry || entry.isDirectory) {\n throw new Error(`File not found: ${path}`);\n }\n return entry.content;\n }\n\n async write(path: string, content: string, zone: FilesystemZone = \"transient\"): Promise<void> {\n const normalized = normalizePath(path);\n this.ensureParentDirs(normalized, zone);\n const now = Date.now();\n const existing = this.zones[zone].get(normalized);\n this.zones[zone].set(normalized, {\n content,\n isDirectory: false,\n createdAt: existing?.createdAt ?? now,\n modifiedAt: now,\n });\n }\n\n async exists(path: string, zone: FilesystemZone = \"transient\"): Promise<boolean> {\n return this.zones[zone].has(normalizePath(path));\n }\n\n async delete(path: string, zone: FilesystemZone = \"transient\"): Promise<void> {\n const normalized = normalizePath(path);\n const store = this.zones[zone];\n const prefix = normalized.endsWith(\"/\") ? normalized : normalized + \"/\";\n for (const key of store.keys()) {\n if (key === normalized || key.startsWith(prefix)) {\n store.delete(key);\n }\n }\n }\n\n async list(\n path: string,\n options: ListOptions = {},\n zone: FilesystemZone = \"transient\",\n ): Promise<FileEntry[]> {\n const normalized = normalizePath(path);\n const prefix = normalized === \"\" ? \"\" : normalized + \"/\";\n const maxDepth = options.maxDepth ?? (options.recursive ? Infinity : 1);\n const results: FileEntry[] = [];\n\n for (const [key, entry] of this.zones[zone]) {\n if (!key.startsWith(prefix) || key === normalized) continue;\n const relative = key.slice(prefix.length);\n if (!options.includeHidden && relative.split(\"/\").some((s) => s.startsWith(\".\"))) continue;\n const depth = relative.split(\"/\").length;\n if (depth > maxDepth) continue;\n results.push({\n name: relative.split(\"/\").pop()!,\n path: key,\n isDirectory: entry.isDirectory,\n size: entry.content.length,\n modifiedAt: entry.modifiedAt,\n });\n }\n return results;\n }\n\n async stat(path: string, zone: FilesystemZone = \"transient\"): Promise<FileStat> {\n const entry = this.zones[zone].get(normalizePath(path));\n if (!entry) throw new Error(`Not found: ${path}`);\n return {\n size: entry.content.length,\n isDirectory: entry.isDirectory,\n isFile: !entry.isDirectory,\n createdAt: entry.createdAt,\n modifiedAt: entry.modifiedAt,\n };\n }\n\n async glob(pattern: string, zone: FilesystemZone = \"transient\"): Promise<string[]> {\n const regex = globToRegex(pattern);\n const results: string[] = [];\n for (const [key, entry] of this.zones[zone]) {\n if (!entry.isDirectory && regex.test(key)) {\n results.push(key);\n }\n }\n return results;\n }\n\n async search(\n pattern: string,\n options: SearchOptions = {},\n zone: FilesystemZone = \"transient\",\n ): Promise<SearchResult[]> {\n const flags = options.caseSensitive === false ? \"gi\" : \"g\";\n const regex = new RegExp(pattern, flags);\n const fileRegex = options.filePattern ? globToRegex(options.filePattern) : null;\n const results: SearchResult[] = [];\n const max = options.maxResults ?? Infinity;\n\n for (const [filePath, entry] of this.zones[zone]) {\n if (entry.isDirectory) continue;\n if (fileRegex && !fileRegex.test(filePath)) continue;\n const lines = entry.content.split(\"\\n\");\n for (let i = 0; i < lines.length && results.length < max; i++) {\n regex.lastIndex = 0;\n const match = regex.exec(lines[i]!);\n if (match) {\n results.push({\n filePath,\n lineNumber: i + 1,\n lineContent: lines[i]!,\n matchStart: match.index,\n matchEnd: match.index + match[0].length,\n });\n }\n }\n if (results.length >= max) break;\n }\n return results;\n }\n\n async syncToPersistent(): Promise<void> {\n if (!this.onSync) {\n throw new Error(\"syncToPersistent requires an onSync callback\");\n }\n for (const [filePath, entry] of this.zones.persistent) {\n if (entry.isDirectory) continue;\n const fullPath = this.basePath ? this.basePath + \"/\" + filePath : filePath;\n await this.onSync(fullPath, entry.content);\n }\n }\n\n async clearTransient(): Promise<void> {\n this.zones.transient.clear();\n }\n\n private ensureParentDirs(filePath: string, zone: FilesystemZone): void {\n const parts = filePath.split(\"/\");\n const now = Date.now();\n for (let i = 1; i < parts.length; i++) {\n const dirPath = parts.slice(0, i).join(\"/\");\n if (dirPath && !this.zones[zone].has(dirPath)) {\n this.zones[zone].set(dirPath, {\n content: \"\",\n isDirectory: true,\n createdAt: now,\n modifiedAt: now,\n });\n }\n }\n }\n}\n\nfunction normalizePath(p: string): string {\n // Collapse consecutive slashes, then split into segments\n const segments = p.replace(/\\/+/g, \"/\").split(\"/\");\n const resolved: string[] = [];\n for (const seg of segments) {\n if (seg === \".\" || seg === \"\") continue;\n if (seg === \"..\") {\n resolved.pop();\n } else {\n resolved.push(seg);\n }\n }\n return resolved.join(\"/\");\n}\n","// =============================================================================\n// ApproximateTokenCounter — Char-based token estimation\n// =============================================================================\n\nimport type { Message } from \"../../types.js\";\nimport type { TokenCounterPort } from \"../../ports/token-counter.port.js\";\n\nconst CHARS_PER_TOKEN = 4;\nconst ROLE_OVERHEAD_TOKENS = 4;\n\nconst CONTEXT_WINDOW_SIZES: Record<string, number> = {\n \"gpt-5.2\": 128_000,\n \"gpt-5.2-mini\": 128_000,\n \"gpt-4-turbo\": 128_000,\n \"gpt-4\": 8_192,\n \"gpt-3.5-turbo\": 16_385,\n \"claude-3.5-sonnet\": 200_000,\n \"claude-3-sonnet\": 200_000,\n \"claude-3-haiku\": 200_000,\n \"claude-3-opus\": 200_000,\n \"claude-4-sonnet\": 200_000,\n \"gemini-2.5-flash-preview-05-20\": 1_000_000,\n \"gemini-2.5-flash\": 1_000_000,\n \"gemini-2.5-pro\": 1_000_000,\n \"gemini-1.5-flash\": 1_000_000,\n \"gemini-1.5-pro\": 2_000_000,\n};\n\nconst DEFAULT_CONTEXT_WINDOW = 128_000;\n\n// Cost per 1M tokens (USD): [input, output]\nconst COST_TABLE: Record<string, [number, number]> = {\n \"gpt-5.2\": [2.5, 10],\n \"gpt-5.2-mini\": [0.15, 0.6],\n \"claude-3.5-sonnet\": [3, 15],\n \"claude-3-haiku\": [0.25, 1.25],\n \"gemini-2.5-flash-preview-05-20\": [0.075, 0.3],\n \"gemini-2.5-flash\": [0.15, 0.6],\n \"gemini-2.5-pro\": [1.25, 10],\n};\n\nconst DEFAULT_COST: [number, number] = [1, 3];\n\nexport class ApproximateTokenCounter implements TokenCounterPort {\n count(text: string): number {\n if (!text) return 0;\n return Math.ceil(text.length / CHARS_PER_TOKEN);\n }\n\n countMessages(messages: Message[]): number {\n if (!messages.length) return 0;\n return messages.reduce(\n (sum, msg) => sum + this.count(msg.content) + ROLE_OVERHEAD_TOKENS,\n 0,\n );\n }\n\n getContextWindowSize(model: string): number {\n return CONTEXT_WINDOW_SIZES[model] ?? DEFAULT_CONTEXT_WINDOW;\n }\n\n estimateCost(\n inputTokens: number,\n outputTokens: number,\n model: string,\n ): number {\n const [inputRate, outputRate] = COST_TABLE[model] ?? DEFAULT_COST;\n return (\n (inputTokens / 1_000_000) * inputRate +\n (outputTokens / 1_000_000) * outputRate\n );\n }\n\n truncate(text: string, maxTokens: number): string {\n if (!text) return text;\n const maxChars = maxTokens * CHARS_PER_TOKEN;\n if (text.length <= maxChars) return text;\n return text.slice(0, maxChars);\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import {
2
+ BaseRuntimeAdapter
3
+ } from "./chunk-E7WG3MO5.js";
4
+
5
+ // src/adapters/runtime/bun-runtime.adapter.ts
6
+ var BunRuntimeAdapter = class extends BaseRuntimeAdapter {
7
+ name = "bun";
8
+ getEnv(key) {
9
+ return globalThis.process?.env?.[key];
10
+ }
11
+ };
12
+
13
+ export {
14
+ BunRuntimeAdapter
15
+ };
16
+ //# sourceMappingURL=chunk-ZFJKX4DP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/runtime/bun-runtime.adapter.ts"],"sourcesContent":["import { BaseRuntimeAdapter } from \"./base-runtime.adapter.js\";\n\nexport class BunRuntimeAdapter extends BaseRuntimeAdapter {\n readonly name = 'bun' as const;\n\n getEnv(key: string): string | undefined {\n return globalThis.process?.env?.[key];\n }\n}\n"],"mappings":";;;;;AAEO,IAAM,oBAAN,cAAgC,mBAAmB;AAAA,EAC/C,OAAO;AAAA,EAEhB,OAAO,KAAiC;AACtC,WAAO,WAAW,SAAS,MAAM,GAAG;AAAA,EACtC;AACF;","names":[]}
@@ -0,0 +1,259 @@
1
+ // src/testing/mock-provider.ts
2
+ function createMockProvider(responses) {
3
+ const queue = [...responses];
4
+ let callIndex = 0;
5
+ function nextResponse() {
6
+ const response = queue[callIndex] ?? queue[queue.length - 1];
7
+ if (!response) {
8
+ throw new Error("MockProvider: no responses configured");
9
+ }
10
+ callIndex++;
11
+ return response;
12
+ }
13
+ const model = {
14
+ specificationVersion: "v3",
15
+ provider: "mock-provider",
16
+ modelId: "mock-model",
17
+ defaultObjectGenerationMode: "json",
18
+ async doGenerate(options) {
19
+ const resp = nextResponse();
20
+ const usage = resp.usage ?? { inputTokens: 10, outputTokens: 20 };
21
+ const toolCalls = resp.toolCalls?.map((tc, i) => ({
22
+ toolCallType: "function",
23
+ toolCallId: `call_${callIndex - 1}_${i}`,
24
+ toolName: tc.toolName,
25
+ args: JSON.stringify(tc.args)
26
+ }));
27
+ return {
28
+ text: resp.text,
29
+ toolCalls: toolCalls ?? [],
30
+ finishReason: toolCalls && toolCalls.length > 0 ? "tool-calls" : "stop",
31
+ usage: {
32
+ inputTokens: usage.inputTokens,
33
+ outputTokens: usage.outputTokens
34
+ },
35
+ rawCall: { rawPrompt: null, rawSettings: {} },
36
+ rawResponse: { headers: {} },
37
+ warnings: [],
38
+ request: { body: "" },
39
+ response: {
40
+ id: `resp_${callIndex - 1}`,
41
+ timestamp: /* @__PURE__ */ new Date(),
42
+ modelId: "mock-model"
43
+ },
44
+ providerMetadata: {},
45
+ sources: [],
46
+ reasoning: void 0
47
+ };
48
+ },
49
+ async doStream(options) {
50
+ const resp = nextResponse();
51
+ const usage = resp.usage ?? { inputTokens: 10, outputTokens: 20 };
52
+ const toolCalls = resp.toolCalls?.map((tc, i) => ({
53
+ toolCallType: "function",
54
+ toolCallId: `call_${callIndex - 1}_${i}`,
55
+ toolName: tc.toolName,
56
+ args: JSON.stringify(tc.args)
57
+ }));
58
+ const parts = [];
59
+ if (resp.text) {
60
+ parts.push({ type: "text-delta", textDelta: resp.text });
61
+ }
62
+ if (toolCalls) {
63
+ for (const tc of toolCalls) {
64
+ parts.push({
65
+ type: "tool-call",
66
+ toolCallType: tc.toolCallType,
67
+ toolCallId: tc.toolCallId,
68
+ toolName: tc.toolName,
69
+ args: tc.args
70
+ });
71
+ }
72
+ }
73
+ parts.push({
74
+ type: "finish",
75
+ finishReason: toolCalls && toolCalls.length > 0 ? "tool-calls" : "stop",
76
+ usage: {
77
+ inputTokens: usage.inputTokens,
78
+ outputTokens: usage.outputTokens
79
+ }
80
+ });
81
+ const stream = new ReadableStream({
82
+ start(controller) {
83
+ for (const part of parts) {
84
+ controller.enqueue(part);
85
+ }
86
+ controller.close();
87
+ }
88
+ });
89
+ return {
90
+ stream,
91
+ rawCall: { rawPrompt: null, rawSettings: {} },
92
+ rawResponse: { headers: {} },
93
+ warnings: [],
94
+ request: { body: "" }
95
+ };
96
+ }
97
+ };
98
+ return model;
99
+ }
100
+
101
+ // src/testing/agent-test-runner.ts
102
+ async function runAgentTest(config) {
103
+ const { agent, prompt } = config;
104
+ const toolCalls = [];
105
+ let tokenInput = 0;
106
+ let tokenOutput = 0;
107
+ const stepHandler = (event) => {
108
+ const data = event.data;
109
+ const step = data?.step;
110
+ if (!step) return;
111
+ const calls = step.toolCalls;
112
+ const results = step.toolResults;
113
+ if (calls) {
114
+ for (let i = 0; i < calls.length; i++) {
115
+ const call = calls[i];
116
+ const result2 = results?.[i];
117
+ toolCalls.push({
118
+ name: call.toolName,
119
+ args: call.args,
120
+ result: result2?.result ?? void 0
121
+ });
122
+ }
123
+ }
124
+ };
125
+ agent.eventBus.on("step:end", stepHandler);
126
+ const start = Date.now();
127
+ let result;
128
+ try {
129
+ result = await agent.run(prompt);
130
+ } finally {
131
+ agent.eventBus.off("step:end", stepHandler);
132
+ }
133
+ const duration = Date.now() - start;
134
+ for (const step of result.steps) {
135
+ const s = step;
136
+ const usage = s.usage;
137
+ if (usage) {
138
+ tokenInput += usage.promptTokens ?? 0;
139
+ tokenOutput += usage.completionTokens ?? 0;
140
+ }
141
+ }
142
+ return {
143
+ response: result.text,
144
+ toolCalls,
145
+ tokenUsage: { input: tokenInput, output: tokenOutput },
146
+ duration,
147
+ steps: result.steps.length
148
+ };
149
+ }
150
+
151
+ // src/testing/assertions.ts
152
+ function assertToolCalled(result, toolName, args) {
153
+ const match = result.toolCalls.find((tc) => tc.name === toolName);
154
+ if (!match) {
155
+ const called = result.toolCalls.map((tc) => tc.name).join(", ") || "(none)";
156
+ throw new Error(
157
+ `Expected tool "${toolName}" to be called, but it was not. Called tools: ${called}`
158
+ );
159
+ }
160
+ if (args !== void 0) {
161
+ const actual = JSON.stringify(match.args);
162
+ const expected = JSON.stringify(args);
163
+ if (actual !== expected) {
164
+ throw new Error(
165
+ `Tool "${toolName}" was called with ${actual}, expected ${expected}`
166
+ );
167
+ }
168
+ }
169
+ }
170
+ function assertToolNotCalled(result, toolName) {
171
+ const match = result.toolCalls.find((tc) => tc.name === toolName);
172
+ if (match) {
173
+ throw new Error(
174
+ `Expected tool "${toolName}" NOT to be called, but it was called with ${JSON.stringify(match.args)}`
175
+ );
176
+ }
177
+ }
178
+ function assertResponseContains(result, substring) {
179
+ if (!result.response.includes(substring)) {
180
+ throw new Error(
181
+ `Expected response to contain "${substring}", but got: "${result.response}"`
182
+ );
183
+ }
184
+ }
185
+ function assertResponseMatches(result, pattern) {
186
+ if (!pattern.test(result.response)) {
187
+ throw new Error(
188
+ `Expected response to match ${pattern}, but got: "${result.response}"`
189
+ );
190
+ }
191
+ }
192
+ function assertMaxSteps(result, max) {
193
+ if (result.steps > max) {
194
+ throw new Error(
195
+ `Expected at most ${max} steps, but got ${result.steps}`
196
+ );
197
+ }
198
+ }
199
+ function assertMaxTokens(result, max) {
200
+ const total = result.tokenUsage.input + result.tokenUsage.output;
201
+ if (total > max) {
202
+ throw new Error(
203
+ `Expected at most ${max} total tokens, but used ${total} (input: ${result.tokenUsage.input}, output: ${result.tokenUsage.output})`
204
+ );
205
+ }
206
+ }
207
+
208
+ // src/testing/snapshot.ts
209
+ function createSnapshot(result) {
210
+ const snapshot = {
211
+ response: result.response,
212
+ steps: result.steps,
213
+ tokenUsage: {
214
+ input: result.tokenUsage.input,
215
+ output: result.tokenUsage.output
216
+ },
217
+ toolCalls: result.toolCalls.map((tc) => ({
218
+ args: tc.args,
219
+ name: tc.name,
220
+ result: tc.result
221
+ }))
222
+ };
223
+ return JSON.stringify(snapshot, null, 2);
224
+ }
225
+ function compareSnapshots(current, expected) {
226
+ if (current === expected) {
227
+ return { match: true };
228
+ }
229
+ const currentLines = current.split("\n");
230
+ const expectedLines = expected.split("\n");
231
+ const maxLines = Math.max(currentLines.length, expectedLines.length);
232
+ const diffLines = [];
233
+ for (let i = 0; i < maxLines; i++) {
234
+ const cl = currentLines[i];
235
+ const el = expectedLines[i];
236
+ if (cl !== el) {
237
+ if (el !== void 0) diffLines.push(`- ${el}`);
238
+ if (cl !== void 0) diffLines.push(`+ ${cl}`);
239
+ }
240
+ }
241
+ return {
242
+ match: false,
243
+ diff: diffLines.join("\n")
244
+ };
245
+ }
246
+
247
+ export {
248
+ createMockProvider,
249
+ runAgentTest,
250
+ assertToolCalled,
251
+ assertToolNotCalled,
252
+ assertResponseContains,
253
+ assertResponseMatches,
254
+ assertMaxSteps,
255
+ assertMaxTokens,
256
+ createSnapshot,
257
+ compareSnapshots
258
+ };
259
+ //# sourceMappingURL=chunk-ZM2OEWM2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/testing/mock-provider.ts","../src/testing/agent-test-runner.ts","../src/testing/assertions.ts","../src/testing/snapshot.ts"],"sourcesContent":["// =============================================================================\n// Mock AI SDK Provider — Canned responses for testing\n// =============================================================================\n\nimport type { LanguageModel } from \"../core/llm/index.js\";\n\nexport interface MockResponse {\n text: string;\n toolCalls?: Array<{ toolName: string; args: Record<string, unknown> }>;\n usage?: { inputTokens: number; outputTokens: number };\n}\n\n/**\n * Creates a mock LanguageModelV3 that returns canned responses in order.\n * Compatible with AI SDK v6's ToolLoopAgent.\n */\nexport function createMockProvider(responses: MockResponse[]): LanguageModel {\n const queue = [...responses];\n let callIndex = 0;\n\n function nextResponse(): MockResponse {\n const response = queue[callIndex] ?? queue[queue.length - 1];\n if (!response) {\n throw new Error(\"MockProvider: no responses configured\");\n }\n callIndex++;\n return response;\n }\n\n const model = {\n specificationVersion: \"v3\",\n provider: \"mock-provider\",\n modelId: \"mock-model\",\n defaultObjectGenerationMode: \"json\",\n\n async doGenerate(options: unknown) {\n const resp = nextResponse();\n const usage = resp.usage ?? { inputTokens: 10, outputTokens: 20 };\n\n const toolCalls = resp.toolCalls?.map((tc, i) => ({\n toolCallType: \"function\" as const,\n toolCallId: `call_${callIndex - 1}_${i}`,\n toolName: tc.toolName,\n args: JSON.stringify(tc.args),\n }));\n\n return {\n text: resp.text,\n toolCalls: toolCalls ?? [],\n finishReason: (toolCalls && toolCalls.length > 0 ? \"tool-calls\" : \"stop\") as \"stop\" | \"tool-calls\",\n usage: {\n inputTokens: usage.inputTokens,\n outputTokens: usage.outputTokens,\n },\n rawCall: { rawPrompt: null, rawSettings: {} },\n rawResponse: { headers: {} },\n warnings: [],\n request: { body: \"\" },\n response: {\n id: `resp_${callIndex - 1}`,\n timestamp: new Date(),\n modelId: \"mock-model\",\n },\n providerMetadata: {},\n sources: [],\n reasoning: undefined,\n };\n },\n\n async doStream(options: unknown) {\n const resp = nextResponse();\n const usage = resp.usage ?? { inputTokens: 10, outputTokens: 20 };\n\n const toolCalls = resp.toolCalls?.map((tc, i) => ({\n toolCallType: \"function\" as const,\n toolCallId: `call_${callIndex - 1}_${i}`,\n toolName: tc.toolName,\n args: JSON.stringify(tc.args),\n }));\n\n const parts: Array<Record<string, unknown>> = [];\n\n if (resp.text) {\n parts.push({ type: \"text-delta\", textDelta: resp.text });\n }\n\n if (toolCalls) {\n for (const tc of toolCalls) {\n parts.push({\n type: \"tool-call\",\n toolCallType: tc.toolCallType,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n args: tc.args,\n });\n }\n }\n\n parts.push({\n type: \"finish\",\n finishReason: toolCalls && toolCalls.length > 0 ? \"tool-calls\" : \"stop\",\n usage: {\n inputTokens: usage.inputTokens,\n outputTokens: usage.outputTokens,\n },\n });\n\n const stream = new ReadableStream({\n start(controller) {\n for (const part of parts) {\n controller.enqueue(part);\n }\n controller.close();\n },\n });\n\n return {\n stream,\n rawCall: { rawPrompt: null, rawSettings: {} },\n rawResponse: { headers: {} },\n warnings: [],\n request: { body: \"\" },\n };\n },\n };\n\n return model as unknown as LanguageModel;\n}\n","// =============================================================================\n// Agent Test Runner — Run a Agent and collect results\n// =============================================================================\n\nimport type { Agent, AgentResult } from \"../agent/agent.js\";\n\nexport interface AgentTestResult {\n response: string;\n toolCalls: Array<{ name: string; args: unknown; result: unknown }>;\n tokenUsage: { input: number; output: number };\n duration: number;\n steps: number;\n}\n\nexport async function runAgentTest(config: {\n agent: Agent;\n prompt: string;\n maxSteps?: number;\n}): Promise<AgentTestResult> {\n const { agent, prompt } = config;\n\n const toolCalls: AgentTestResult[\"toolCalls\"] = [];\n let tokenInput = 0;\n let tokenOutput = 0;\n\n // Listen for step events to capture tool calls\n const stepHandler = (event: { type: string; data: unknown }) => {\n const data = event.data as Record<string, unknown>;\n const step = data?.step as Record<string, unknown> | undefined;\n if (!step) return;\n\n // Extract tool calls from step data\n const calls = step.toolCalls as Array<Record<string, unknown>> | undefined;\n const results = step.toolResults as Array<Record<string, unknown>> | undefined;\n\n if (calls) {\n for (let i = 0; i < calls.length; i++) {\n const call = calls[i]!;\n const result = results?.[i];\n toolCalls.push({\n name: call.toolName as string,\n args: call.args,\n result: result?.result ?? undefined,\n });\n }\n }\n };\n\n agent.eventBus.on(\"step:end\", stepHandler);\n\n const start = Date.now();\n let result: AgentResult;\n\n try {\n result = await agent.run(prompt);\n } finally {\n agent.eventBus.off(\"step:end\", stepHandler);\n }\n\n const duration = Date.now() - start;\n\n // Extract token usage from steps if available\n for (const step of result.steps) {\n const s = step as Record<string, unknown>;\n const usage = s.usage as { promptTokens?: number; completionTokens?: number } | undefined;\n if (usage) {\n tokenInput += usage.promptTokens ?? 0;\n tokenOutput += usage.completionTokens ?? 0;\n }\n }\n\n return {\n response: result.text,\n toolCalls,\n tokenUsage: { input: tokenInput, output: tokenOutput },\n duration,\n steps: result.steps.length,\n };\n}\n","// =============================================================================\n// Test Assertions for AgentTestResult\n// =============================================================================\n\nimport type { AgentTestResult } from \"./agent-test-runner.js\";\n\nexport function assertToolCalled(\n result: AgentTestResult,\n toolName: string,\n args?: Record<string, unknown>,\n): void {\n const match = result.toolCalls.find((tc) => tc.name === toolName);\n if (!match) {\n const called = result.toolCalls.map((tc) => tc.name).join(\", \") || \"(none)\";\n throw new Error(\n `Expected tool \"${toolName}\" to be called, but it was not. Called tools: ${called}`,\n );\n }\n if (args !== undefined) {\n const actual = JSON.stringify(match.args);\n const expected = JSON.stringify(args);\n if (actual !== expected) {\n throw new Error(\n `Tool \"${toolName}\" was called with ${actual}, expected ${expected}`,\n );\n }\n }\n}\n\nexport function assertToolNotCalled(\n result: AgentTestResult,\n toolName: string,\n): void {\n const match = result.toolCalls.find((tc) => tc.name === toolName);\n if (match) {\n throw new Error(\n `Expected tool \"${toolName}\" NOT to be called, but it was called with ${JSON.stringify(match.args)}`,\n );\n }\n}\n\nexport function assertResponseContains(\n result: AgentTestResult,\n substring: string,\n): void {\n if (!result.response.includes(substring)) {\n throw new Error(\n `Expected response to contain \"${substring}\", but got: \"${result.response}\"`,\n );\n }\n}\n\nexport function assertResponseMatches(\n result: AgentTestResult,\n pattern: RegExp,\n): void {\n if (!pattern.test(result.response)) {\n throw new Error(\n `Expected response to match ${pattern}, but got: \"${result.response}\"`,\n );\n }\n}\n\nexport function assertMaxSteps(\n result: AgentTestResult,\n max: number,\n): void {\n if (result.steps > max) {\n throw new Error(\n `Expected at most ${max} steps, but got ${result.steps}`,\n );\n }\n}\n\nexport function assertMaxTokens(\n result: AgentTestResult,\n max: number,\n): void {\n const total = result.tokenUsage.input + result.tokenUsage.output;\n if (total > max) {\n throw new Error(\n `Expected at most ${max} total tokens, but used ${total} (input: ${result.tokenUsage.input}, output: ${result.tokenUsage.output})`,\n );\n }\n}\n","// =============================================================================\n// Snapshot — JSON-based snapshot creation & comparison\n// =============================================================================\n\nimport type { AgentTestResult } from \"./agent-test-runner.js\";\n\n/**\n * Creates a deterministic JSON snapshot of an AgentTestResult.\n * Excludes non-deterministic fields (duration).\n */\nexport function createSnapshot(result: AgentTestResult): string {\n const snapshot = {\n response: result.response,\n steps: result.steps,\n tokenUsage: {\n input: result.tokenUsage.input,\n output: result.tokenUsage.output,\n },\n toolCalls: result.toolCalls.map((tc) => ({\n args: tc.args,\n name: tc.name,\n result: tc.result,\n })),\n };\n return JSON.stringify(snapshot, null, 2);\n}\n\n/**\n * Compares two snapshot strings line by line.\n */\nexport function compareSnapshots(\n current: string,\n expected: string,\n): { match: boolean; diff?: string } {\n if (current === expected) {\n return { match: true };\n }\n\n const currentLines = current.split(\"\\n\");\n const expectedLines = expected.split(\"\\n\");\n const maxLines = Math.max(currentLines.length, expectedLines.length);\n const diffLines: string[] = [];\n\n for (let i = 0; i < maxLines; i++) {\n const cl = currentLines[i];\n const el = expectedLines[i];\n if (cl !== el) {\n if (el !== undefined) diffLines.push(`- ${el}`);\n if (cl !== undefined) diffLines.push(`+ ${cl}`);\n }\n }\n\n return {\n match: false,\n diff: diffLines.join(\"\\n\"),\n };\n}\n"],"mappings":"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","names":["result"]}
@@ -0,0 +1,16 @@
1
+ import {
2
+ BaseRuntimeAdapter
3
+ } from "./chunk-E7WG3MO5.js";
4
+
5
+ // src/adapters/runtime/deno-runtime.adapter.ts
6
+ var DenoRuntimeAdapter = class extends BaseRuntimeAdapter {
7
+ name = "deno";
8
+ getEnv(key) {
9
+ return globalThis.Deno?.env?.get(key);
10
+ }
11
+ };
12
+
13
+ export {
14
+ DenoRuntimeAdapter
15
+ };
16
+ //# sourceMappingURL=chunk-ZNAIP2XV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/runtime/deno-runtime.adapter.ts"],"sourcesContent":["import { BaseRuntimeAdapter } from \"./base-runtime.adapter.js\";\n\nexport class DenoRuntimeAdapter extends BaseRuntimeAdapter {\n readonly name = 'deno' as const;\n\n getEnv(key: string): string | undefined {\n return (globalThis as any).Deno?.env?.get(key);\n }\n}\n"],"mappings":";;;;;AAEO,IAAM,qBAAN,cAAiC,mBAAmB;AAAA,EAChD,OAAO;AAAA,EAEhB,OAAO,KAAiC;AACtC,WAAQ,WAAmB,MAAM,KAAK,IAAI,GAAG;AAAA,EAC/C;AACF;","names":[]}
@@ -0,0 +1,42 @@
1
+ // src/cli/commands/files.ts
2
+ import { readFileSync, writeFileSync, existsSync } from "fs";
3
+ import { resolve } from "path";
4
+ function readFile(filePath) {
5
+ const absPath = resolve(filePath);
6
+ if (!existsSync(absPath)) throw new Error(`File not found: ${absPath}`);
7
+ return { content: readFileSync(absPath, "utf-8"), path: absPath };
8
+ }
9
+ function writeFile(filePath, content) {
10
+ const absPath = resolve(filePath);
11
+ writeFileSync(absPath, content, "utf-8");
12
+ return absPath;
13
+ }
14
+
15
+ // src/cli/commands/bash.ts
16
+ import { execSync } from "child_process";
17
+ var DEFAULT_TIMEOUT_MS = 3e4;
18
+ function runBash(command, timeout = DEFAULT_TIMEOUT_MS) {
19
+ try {
20
+ const stdout = execSync(command, {
21
+ encoding: "utf-8",
22
+ timeout,
23
+ maxBuffer: 1024 * 1024,
24
+ stdio: ["pipe", "pipe", "pipe"]
25
+ });
26
+ return { stdout, stderr: "", exitCode: 0 };
27
+ } catch (err) {
28
+ const e = err;
29
+ return {
30
+ stdout: e.stdout ?? "",
31
+ stderr: e.stderr ?? "",
32
+ exitCode: e.status ?? 1
33
+ };
34
+ }
35
+ }
36
+
37
+ export {
38
+ readFile,
39
+ writeFile,
40
+ runBash
41
+ };
42
+ //# sourceMappingURL=chunk-ZYFAZYSL.js.map