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,133 @@
1
+ import {
2
+ bold,
3
+ color
4
+ } from "./chunk-VRWD7LCI.js";
5
+
6
+ // src/cli/init.ts
7
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
8
+ import { join, dirname } from "path";
9
+ import { fileURLToPath } from "url";
10
+ var TEMPLATES = {
11
+ chat: { name: "Chat Agent", description: "Minimal conversational AI with streaming" },
12
+ tools: { name: "Tool Calling Agent", description: "Agent with custom tools (weather, calculator)" },
13
+ rag: { name: "RAG Agent", description: "Retrieval-augmented generation with vector store" },
14
+ "multi-agent": { name: "Multi-Agent Workflow", description: "Orchestrated agent collaboration via graph" },
15
+ mcp: { name: "MCP Server/Client", description: "Model Context Protocol integration" },
16
+ "auth-rest": { name: "Auth + REST API", description: "Production REST server with authentication" }
17
+ };
18
+ function handleInit(args) {
19
+ const templateArg = args.find((a) => a.startsWith("--template="))?.split("=")[1] ?? args[args.indexOf("--template") + 1] ?? args.find((a) => !a.startsWith("-"));
20
+ if (args.includes("--list")) {
21
+ listTemplates();
22
+ return;
23
+ }
24
+ if (!templateArg || !(templateArg in TEMPLATES)) {
25
+ console.log(`
26
+ ${bold("gauss init")} \u2014 Scaffold a new Gauss project
27
+ `);
28
+ console.log(`${bold("Usage:")} gauss init --template <name> [directory]
29
+ `);
30
+ listTemplates();
31
+ console.log(`
32
+ ${bold("Example:")} gauss init --template chat my-agent
33
+ `);
34
+ return;
35
+ }
36
+ const template = templateArg;
37
+ const dirArg2 = args.find((a) => !a.startsWith("-") && a !== templateArg) ?? `.`;
38
+ const targetDir = join(process.cwd(), dirArg2);
39
+ scaffold(template, targetDir);
40
+ }
41
+ function listTemplates() {
42
+ console.log(`${bold("Available templates:")}
43
+ `);
44
+ for (const [key, info] of Object.entries(TEMPLATES)) {
45
+ console.log(` ${color("cyan", key.padEnd(16))} ${info.description}`);
46
+ }
47
+ }
48
+ function scaffold(template, targetDir) {
49
+ const info = TEMPLATES[template];
50
+ if (!existsSync(targetDir)) {
51
+ mkdirSync(targetDir, { recursive: true });
52
+ }
53
+ const __dirname = dirname(fileURLToPath(import.meta.url));
54
+ const templateSrc = join(__dirname, "templates", `${template}.ts`);
55
+ let templateContent;
56
+ if (existsSync(templateSrc)) {
57
+ templateContent = readFileSync(templateSrc, "utf-8");
58
+ } else {
59
+ templateContent = getInlineTemplate(template);
60
+ }
61
+ const mainFile = join(targetDir, "index.ts");
62
+ writeFileSync(mainFile, templateContent);
63
+ const pkgPath = join(targetDir, "package.json");
64
+ if (!existsSync(pkgPath)) {
65
+ const pkg = {
66
+ name: `gauss-${template}-agent`,
67
+ version: "0.1.0",
68
+ type: "module",
69
+ scripts: {
70
+ dev: "npx tsx index.ts",
71
+ start: "node --loader tsx index.ts"
72
+ },
73
+ dependencies: {
74
+ gauss: "latest",
75
+ ai: "^6.0.0",
76
+ zod: "^3.23.0"
77
+ }
78
+ };
79
+ writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
80
+ }
81
+ const tsconfigPath = join(targetDir, "tsconfig.json");
82
+ if (!existsSync(tsconfigPath)) {
83
+ const tsconfig = {
84
+ compilerOptions: {
85
+ target: "ES2022",
86
+ module: "ESNext",
87
+ moduleResolution: "bundler",
88
+ strict: true,
89
+ esModuleInterop: true,
90
+ skipLibCheck: true,
91
+ outDir: "dist"
92
+ },
93
+ include: ["*.ts"]
94
+ };
95
+ writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2) + "\n");
96
+ }
97
+ const envPath = join(targetDir, ".env.example");
98
+ if (!existsSync(envPath)) {
99
+ writeFileSync(envPath, "OPENAI_API_KEY=sk-...\n# ANTHROPIC_API_KEY=sk-ant-...\n# GOOGLE_GENERATIVE_AI_API_KEY=...\n");
100
+ }
101
+ console.log(`
102
+ ${bold("\u2728 Project scaffolded!")} Template: ${color("cyan", info.name)}
103
+ `);
104
+ console.log(` ${color("dim", "Directory:")} ${targetDir}`);
105
+ console.log(` ${color("dim", "Files:")} index.ts, package.json, tsconfig.json, .env.example
106
+ `);
107
+ console.log(`${bold("Next steps:")}`);
108
+ if (targetDir !== process.cwd()) {
109
+ console.log(` cd ${dirArg !== "." ? dirArg : ""}`);
110
+ }
111
+ console.log(` npm install`);
112
+ console.log(` # Set your API key in .env`);
113
+ console.log(` npm run dev
114
+ `);
115
+ }
116
+ function getInlineTemplate(template) {
117
+ return `// Gauss ${TEMPLATES[template].name} template
118
+ import { agent } from "gauss";
119
+ import { openai } from "gauss/providers";
120
+
121
+ const myAgent = agent({
122
+ model: openai("gpt-5.2-mini"),
123
+ instructions: "You are a helpful assistant.",
124
+ }).build();
125
+
126
+ const result = await myAgent.run("Hello!");
127
+ console.log(result.text);
128
+ `;
129
+ }
130
+ export {
131
+ handleInit
132
+ };
133
+ //# sourceMappingURL=init-CFWXTQ35.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/init.ts"],"sourcesContent":["// =============================================================================\n// gauss init — Project scaffolding command\n// =============================================================================\n\nimport { readFileSync, writeFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { color, bold } from \"./format.js\";\n\nconst TEMPLATES = {\n chat: { name: \"Chat Agent\", description: \"Minimal conversational AI with streaming\" },\n tools: { name: \"Tool Calling Agent\", description: \"Agent with custom tools (weather, calculator)\" },\n rag: { name: \"RAG Agent\", description: \"Retrieval-augmented generation with vector store\" },\n \"multi-agent\": { name: \"Multi-Agent Workflow\", description: \"Orchestrated agent collaboration via graph\" },\n mcp: { name: \"MCP Server/Client\", description: \"Model Context Protocol integration\" },\n \"auth-rest\": { name: \"Auth + REST API\", description: \"Production REST server with authentication\" },\n} as const;\n\nexport type TemplateName = keyof typeof TEMPLATES;\n\nexport function handleInit(args: string[]): void {\n const templateArg = args.find((a) => a.startsWith(\"--template=\"))?.split(\"=\")[1]\n ?? args[args.indexOf(\"--template\") + 1]\n ?? args.find((a) => !a.startsWith(\"-\"));\n\n if (args.includes(\"--list\")) {\n listTemplates();\n return;\n }\n\n if (!templateArg || !(templateArg in TEMPLATES)) {\n console.log(`\\n${bold(\"gauss init\")} — Scaffold a new Gauss project\\n`);\n console.log(`${bold(\"Usage:\")} gauss init --template <name> [directory]\\n`);\n listTemplates();\n console.log(`\\n${bold(\"Example:\")} gauss init --template chat my-agent\\n`);\n return;\n }\n\n const template = templateArg as TemplateName;\n const dirArg = args.find((a) => !a.startsWith(\"-\") && a !== templateArg) ?? `.`;\n const targetDir = join(process.cwd(), dirArg);\n\n scaffold(template, targetDir);\n}\n\nfunction listTemplates(): void {\n console.log(`${bold(\"Available templates:\")}\\n`);\n for (const [key, info] of Object.entries(TEMPLATES)) {\n console.log(` ${color(\"cyan\", key.padEnd(16))} ${info.description}`);\n }\n}\n\nfunction scaffold(template: TemplateName, targetDir: string): void {\n const info = TEMPLATES[template];\n\n // Create directory\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n\n // Resolve template source\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const templateSrc = join(__dirname, \"templates\", `${template}.ts`);\n\n let templateContent: string;\n if (existsSync(templateSrc)) {\n templateContent = readFileSync(templateSrc, \"utf-8\");\n } else {\n // Fallback: embed minimal template inline\n templateContent = getInlineTemplate(template);\n }\n\n // Write files\n const mainFile = join(targetDir, \"index.ts\");\n writeFileSync(mainFile, templateContent);\n\n // Write package.json\n const pkgPath = join(targetDir, \"package.json\");\n if (!existsSync(pkgPath)) {\n const pkg = {\n name: `gauss-${template}-agent`,\n version: \"0.1.0\",\n type: \"module\",\n scripts: {\n dev: \"npx tsx index.ts\",\n start: \"node --loader tsx index.ts\",\n },\n dependencies: {\n gauss: \"latest\",\n ai: \"^6.0.0\",\n zod: \"^3.23.0\",\n },\n };\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n }\n\n // Write tsconfig.json\n const tsconfigPath = join(targetDir, \"tsconfig.json\");\n if (!existsSync(tsconfigPath)) {\n const tsconfig = {\n compilerOptions: {\n target: \"ES2022\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n outDir: \"dist\",\n },\n include: [\"*.ts\"],\n };\n writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2) + \"\\n\");\n }\n\n // Write .env.example\n const envPath = join(targetDir, \".env.example\");\n if (!existsSync(envPath)) {\n writeFileSync(envPath, \"OPENAI_API_KEY=sk-...\\n# ANTHROPIC_API_KEY=sk-ant-...\\n# GOOGLE_GENERATIVE_AI_API_KEY=...\\n\");\n }\n\n console.log(`\\n${bold(\"✨ Project scaffolded!\")} Template: ${color(\"cyan\", info.name)}\\n`);\n console.log(` ${color(\"dim\", \"Directory:\")} ${targetDir}`);\n console.log(` ${color(\"dim\", \"Files:\")} index.ts, package.json, tsconfig.json, .env.example\\n`);\n console.log(`${bold(\"Next steps:\")}`);\n if (targetDir !== process.cwd()) {\n console.log(` cd ${dirArg !== \".\" ? dirArg : \"\"}`);\n }\n console.log(` npm install`);\n console.log(` # Set your API key in .env`);\n console.log(` npm run dev\\n`);\n}\n\nfunction getInlineTemplate(template: TemplateName): string {\n return `// Gauss ${TEMPLATES[template].name} template\nimport { agent } from \"gauss\";\nimport { openai } from \"gauss/providers\";\n\nconst myAgent = agent({\n model: openai(\"gpt-5.2-mini\"),\n instructions: \"You are a helpful assistant.\",\n}).build();\n\nconst result = await myAgent.run(\"Hello!\");\nconsole.log(result.text);\n`;\n}\n"],"mappings":"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","names":["dirArg"]}
@@ -0,0 +1,17 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+
7
+
8
+ var _chunkPSJIAGDEcjs = require('./chunk-PSJIAGDE.cjs');
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+ exports.Output = _chunkPSJIAGDEcjs.Output; exports.generateText = _chunkPSJIAGDEcjs.generateText; exports.hasToolCall = _chunkPSJIAGDEcjs.hasToolCall; exports.stepCountIs = _chunkPSJIAGDEcjs.stepCountIs; exports.streamText = _chunkPSJIAGDEcjs.streamText; exports.tool = _chunkPSJIAGDEcjs.tool;
17
+ //# sourceMappingURL=llm-VWO4MC7J.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/llm-VWO4MC7J.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,qSAAC","file":"/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/llm-VWO4MC7J.cjs"}
@@ -0,0 +1,17 @@
1
+ import {
2
+ Output,
3
+ generateText,
4
+ hasToolCall,
5
+ stepCountIs,
6
+ streamText,
7
+ tool
8
+ } from "./chunk-K6SAETGP.js";
9
+ export {
10
+ Output,
11
+ generateText,
12
+ hasToolCall,
13
+ stepCountIs,
14
+ streamText,
15
+ tool
16
+ };
17
+ //# sourceMappingURL=llm-XLXVSPBI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,33 @@
1
+ // src/adapters/logging/console-logging.adapter.ts
2
+ var ConsoleLoggingAdapter = class {
3
+ entries = [];
4
+ log(level, message, context) {
5
+ const entry = { level, message, timestamp: Date.now(), context };
6
+ this.entries.push(entry);
7
+ console[level](message, ...context ? [context] : []);
8
+ }
9
+ debug(message, context) {
10
+ this.log("debug", message, context);
11
+ }
12
+ info(message, context) {
13
+ this.log("info", message, context);
14
+ }
15
+ warn(message, context) {
16
+ this.log("warn", message, context);
17
+ }
18
+ error(message, context) {
19
+ this.log("error", message, context);
20
+ }
21
+ /** Get all recorded log entries */
22
+ getEntries() {
23
+ return this.entries;
24
+ }
25
+ /** Clear all recorded entries */
26
+ clear() {
27
+ this.entries.length = 0;
28
+ }
29
+ };
30
+ export {
31
+ ConsoleLoggingAdapter
32
+ };
33
+ //# sourceMappingURL=logging-WRAK5ZXT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/logging/console-logging.adapter.ts"],"sourcesContent":["// =============================================================================\n// ConsoleLoggingAdapter — Console-based implementation of LoggingPort\n// =============================================================================\n\nimport type { LoggingPort, LogLevel, LogEntry } from \"../../ports/logging.port.js\";\n\nexport class ConsoleLoggingAdapter implements LoggingPort {\n private readonly entries: LogEntry[] = [];\n\n log(level: LogLevel, message: string, context?: Record<string, unknown>): void {\n const entry: LogEntry = { level, message, timestamp: Date.now(), context };\n this.entries.push(entry);\n console[level](message, ...(context ? [context] : []));\n }\n\n debug(message: string, context?: Record<string, unknown>): void {\n this.log(\"debug\", message, context);\n }\n\n info(message: string, context?: Record<string, unknown>): void {\n this.log(\"info\", message, context);\n }\n\n warn(message: string, context?: Record<string, unknown>): void {\n this.log(\"warn\", message, context);\n }\n\n error(message: string, context?: Record<string, unknown>): void {\n this.log(\"error\", message, context);\n }\n\n /** Get all recorded log entries */\n getEntries(): readonly LogEntry[] {\n return this.entries;\n }\n\n /** Clear all recorded entries */\n clear(): void {\n this.entries.length = 0;\n }\n}\n"],"mappings":";AAMO,IAAM,wBAAN,MAAmD;AAAA,EACvC,UAAsB,CAAC;AAAA,EAExC,IAAI,OAAiB,SAAiB,SAAyC;AAC7E,UAAM,QAAkB,EAAE,OAAO,SAAS,WAAW,KAAK,IAAI,GAAG,QAAQ;AACzE,SAAK,QAAQ,KAAK,KAAK;AACvB,YAAQ,KAAK,EAAE,SAAS,GAAI,UAAU,CAAC,OAAO,IAAI,CAAC,CAAE;AAAA,EACvD;AAAA,EAEA,MAAM,SAAiB,SAAyC;AAC9D,SAAK,IAAI,SAAS,SAAS,OAAO;AAAA,EACpC;AAAA,EAEA,KAAK,SAAiB,SAAyC;AAC7D,SAAK,IAAI,QAAQ,SAAS,OAAO;AAAA,EACnC;AAAA,EAEA,KAAK,SAAiB,SAAyC;AAC7D,SAAK,IAAI,QAAQ,SAAS,OAAO;AAAA,EACnC;AAAA,EAEA,MAAM,SAAiB,SAAyC;AAC9D,SAAK,IAAI,SAAS,SAAS,OAAO;AAAA,EACpC;AAAA;AAAA,EAGA,aAAkC;AAChC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,QAAQ,SAAS;AAAA,EACxB;AACF;","names":[]}
@@ -0,0 +1,47 @@
1
+ // src/adapters/metrics/in-memory-metrics.adapter.ts
2
+ function labelKey(name, labels) {
3
+ if (!labels || Object.keys(labels).length === 0) return name;
4
+ const sorted = Object.entries(labels).sort(([a], [b]) => a.localeCompare(b));
5
+ return `${name}{${sorted.map(([k, v]) => `${k}="${v}"`).join(",")}}`;
6
+ }
7
+ var InMemoryMetricsAdapter = class {
8
+ counters = /* @__PURE__ */ new Map();
9
+ histograms = /* @__PURE__ */ new Map();
10
+ gauges = /* @__PURE__ */ new Map();
11
+ incrementCounter(name, value = 1, labels) {
12
+ const key = labelKey(name, labels);
13
+ this.counters.set(key, (this.counters.get(key) ?? 0) + value);
14
+ }
15
+ recordHistogram(name, value, labels) {
16
+ const key = labelKey(name, labels);
17
+ const arr = this.histograms.get(key) ?? [];
18
+ arr.push(value);
19
+ this.histograms.set(key, arr);
20
+ }
21
+ recordGauge(name, value, labels) {
22
+ const key = labelKey(name, labels);
23
+ this.gauges.set(key, value);
24
+ }
25
+ /** Get current counter value */
26
+ getCounter(name, labels) {
27
+ return this.counters.get(labelKey(name, labels)) ?? 0;
28
+ }
29
+ /** Get histogram values */
30
+ getHistogram(name, labels) {
31
+ return this.histograms.get(labelKey(name, labels)) ?? [];
32
+ }
33
+ /** Get current gauge value */
34
+ getGauge(name, labels) {
35
+ return this.gauges.get(labelKey(name, labels));
36
+ }
37
+ /** Clear all metrics */
38
+ clear() {
39
+ this.counters.clear();
40
+ this.histograms.clear();
41
+ this.gauges.clear();
42
+ }
43
+ };
44
+ export {
45
+ InMemoryMetricsAdapter
46
+ };
47
+ //# sourceMappingURL=metrics-FAHZVVD4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/metrics/in-memory-metrics.adapter.ts"],"sourcesContent":["// =============================================================================\n// InMemoryMetricsAdapter — In-memory implementation of MetricsPort for testing\n// =============================================================================\n\nimport type { MetricsPort } from \"../../ports/metrics.port.js\";\n\nfunction labelKey(name: string, labels?: Record<string, string>): string {\n if (!labels || Object.keys(labels).length === 0) return name;\n const sorted = Object.entries(labels).sort(([a], [b]) => a.localeCompare(b));\n return `${name}{${sorted.map(([k, v]) => `${k}=\"${v}\"`).join(\",\")}}`;\n}\n\nexport class InMemoryMetricsAdapter implements MetricsPort {\n private readonly counters = new Map<string, number>();\n private readonly histograms = new Map<string, number[]>();\n private readonly gauges = new Map<string, number>();\n\n incrementCounter(name: string, value = 1, labels?: Record<string, string>): void {\n const key = labelKey(name, labels);\n this.counters.set(key, (this.counters.get(key) ?? 0) + value);\n }\n\n recordHistogram(name: string, value: number, labels?: Record<string, string>): void {\n const key = labelKey(name, labels);\n const arr = this.histograms.get(key) ?? [];\n arr.push(value);\n this.histograms.set(key, arr);\n }\n\n recordGauge(name: string, value: number, labels?: Record<string, string>): void {\n const key = labelKey(name, labels);\n this.gauges.set(key, value);\n }\n\n /** Get current counter value */\n getCounter(name: string, labels?: Record<string, string>): number {\n return this.counters.get(labelKey(name, labels)) ?? 0;\n }\n\n /** Get histogram values */\n getHistogram(name: string, labels?: Record<string, string>): readonly number[] {\n return this.histograms.get(labelKey(name, labels)) ?? [];\n }\n\n /** Get current gauge value */\n getGauge(name: string, labels?: Record<string, string>): number | undefined {\n return this.gauges.get(labelKey(name, labels));\n }\n\n /** Clear all metrics */\n clear(): void {\n this.counters.clear();\n this.histograms.clear();\n this.gauges.clear();\n }\n}\n"],"mappings":";AAMA,SAAS,SAAS,MAAc,QAAyC;AACvE,MAAI,CAAC,UAAU,OAAO,KAAK,MAAM,EAAE,WAAW,EAAG,QAAO;AACxD,QAAM,SAAS,OAAO,QAAQ,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC3E,SAAO,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC;AACnE;AAEO,IAAM,yBAAN,MAAoD;AAAA,EACxC,WAAW,oBAAI,IAAoB;AAAA,EACnC,aAAa,oBAAI,IAAsB;AAAA,EACvC,SAAS,oBAAI,IAAoB;AAAA,EAElD,iBAAiB,MAAc,QAAQ,GAAG,QAAuC;AAC/E,UAAM,MAAM,SAAS,MAAM,MAAM;AACjC,SAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,GAAG,KAAK,KAAK,KAAK;AAAA,EAC9D;AAAA,EAEA,gBAAgB,MAAc,OAAe,QAAuC;AAClF,UAAM,MAAM,SAAS,MAAM,MAAM;AACjC,UAAM,MAAM,KAAK,WAAW,IAAI,GAAG,KAAK,CAAC;AACzC,QAAI,KAAK,KAAK;AACd,SAAK,WAAW,IAAI,KAAK,GAAG;AAAA,EAC9B;AAAA,EAEA,YAAY,MAAc,OAAe,QAAuC;AAC9E,UAAM,MAAM,SAAS,MAAM,MAAM;AACjC,SAAK,OAAO,IAAI,KAAK,KAAK;AAAA,EAC5B;AAAA;AAAA,EAGA,WAAW,MAAc,QAAyC;AAChE,WAAO,KAAK,SAAS,IAAI,SAAS,MAAM,MAAM,CAAC,KAAK;AAAA,EACtD;AAAA;AAAA,EAGA,aAAa,MAAc,QAAoD;AAC7E,WAAO,KAAK,WAAW,IAAI,SAAS,MAAM,MAAM,CAAC,KAAK,CAAC;AAAA,EACzD;AAAA;AAAA,EAGA,SAAS,MAAc,QAAqD;AAC1E,WAAO,KAAK,OAAO,IAAI,SAAS,MAAM,MAAM,CAAC;AAAA,EAC/C;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,SAAS,MAAM;AACpB,SAAK,WAAW,MAAM;AACtB,SAAK,OAAO,MAAM;AAAA,EACpB;AACF;","names":[]}
@@ -0,0 +1,280 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } 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;
2
+
3
+
4
+
5
+ var _chunkXLGW3XNIcjs = require('../chunk-XLGW3XNI.cjs');
6
+
7
+ // src/adapters/filesystem/local-fs.adapter.ts
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+ var _promises = require('fs/promises');
16
+ var _path = require('path');
17
+ var LocalFilesystem = class {
18
+
19
+ constructor(basePath) {
20
+ this.basePath = _path.resolve.call(void 0, basePath);
21
+ }
22
+ async read(path, zone = "transient") {
23
+ return _promises.readFile.call(void 0, this.resolvePath(path, zone), "utf-8");
24
+ }
25
+ async write(path, content, zone = "transient") {
26
+ const fullPath = this.resolvePath(path, zone);
27
+ await _promises.mkdir.call(void 0, _path.resolve.call(void 0, fullPath, ".."), { recursive: true });
28
+ await _promises.writeFile.call(void 0, fullPath, content, "utf-8");
29
+ }
30
+ async exists(path, zone = "transient") {
31
+ try {
32
+ await _promises.stat.call(void 0, this.resolvePath(path, zone));
33
+ return true;
34
+ } catch (e) {
35
+ return false;
36
+ }
37
+ }
38
+ async delete(path, zone = "transient") {
39
+ await _promises.rm.call(void 0, this.resolvePath(path, zone), { recursive: true, force: true });
40
+ }
41
+ async list(path, options = {}, zone = "transient") {
42
+ const fullPath = this.resolvePath(path, zone);
43
+ return this.readEntries(fullPath, fullPath, options, 1);
44
+ }
45
+ async stat(path, zone = "transient") {
46
+ const s = await _promises.stat.call(void 0, this.resolvePath(path, zone));
47
+ return {
48
+ size: s.size,
49
+ isDirectory: s.isDirectory(),
50
+ isFile: s.isFile(),
51
+ createdAt: s.birthtimeMs,
52
+ modifiedAt: s.mtimeMs
53
+ };
54
+ }
55
+ async glob(pattern, zone = "transient") {
56
+ const zoneRoot = this.zoneRoot(zone);
57
+ const allFiles = await this.collectFiles(zoneRoot);
58
+ const regex = _chunkXLGW3XNIcjs.globToRegex.call(void 0, pattern);
59
+ return allFiles.map((f) => _path.relative.call(void 0, zoneRoot, f).split("\\").join("/")).filter((f) => regex.test(f));
60
+ }
61
+ async search(pattern, options = {}, zone = "transient") {
62
+ const zoneRoot = this.zoneRoot(zone);
63
+ const allFiles = await this.collectFiles(zoneRoot);
64
+ const flags = options.caseSensitive === false ? "gi" : "g";
65
+ const regex = new RegExp(pattern, flags);
66
+ const fileRegex = options.filePattern ? _chunkXLGW3XNIcjs.globToRegex.call(void 0, options.filePattern) : null;
67
+ const max = _nullishCoalesce(options.maxResults, () => ( Infinity));
68
+ const results = [];
69
+ for (const absPath of allFiles) {
70
+ const relPath = _path.relative.call(void 0, zoneRoot, absPath).split("\\").join("/");
71
+ if (fileRegex && !fileRegex.test(relPath)) continue;
72
+ const content = await _promises.readFile.call(void 0, absPath, "utf-8");
73
+ const lines = content.split("\n");
74
+ for (let i = 0; i < lines.length && results.length < max; i++) {
75
+ regex.lastIndex = 0;
76
+ const match = regex.exec(lines[i]);
77
+ if (match) {
78
+ results.push({
79
+ filePath: relPath,
80
+ lineNumber: i + 1,
81
+ lineContent: lines[i],
82
+ matchStart: match.index,
83
+ matchEnd: match.index + match[0].length
84
+ });
85
+ }
86
+ }
87
+ if (results.length >= max) break;
88
+ }
89
+ return results;
90
+ }
91
+ zoneRoot(zone) {
92
+ return _path.join.call(void 0, this.basePath, zone);
93
+ }
94
+ resolvePath(path, zone) {
95
+ const zoneRoot = this.zoneRoot(zone);
96
+ const resolved = _path.resolve.call(void 0, zoneRoot, path);
97
+ const rel = _path.relative.call(void 0, zoneRoot, resolved);
98
+ if (rel.startsWith("..") || _path.resolve.call(void 0, resolved) === _path.resolve.call(void 0, zoneRoot, "..", rel)) {
99
+ throw new Error(`Path traversal denied: ${path}`);
100
+ }
101
+ return resolved;
102
+ }
103
+ async readEntries(dir, rootDir, options, depth) {
104
+ const maxDepth = _nullishCoalesce(options.maxDepth, () => ( (options.recursive ? Infinity : 1)));
105
+ if (depth > maxDepth) return [];
106
+ let entries;
107
+ try {
108
+ entries = await _promises.readdir.call(void 0, dir, { withFileTypes: true });
109
+ } catch (e2) {
110
+ return [];
111
+ }
112
+ const results = [];
113
+ for (const entry of entries) {
114
+ if (!options.includeHidden && entry.name.startsWith(".")) continue;
115
+ const fullPath = _path.join.call(void 0, dir, entry.name);
116
+ const relPath = _path.relative.call(void 0, rootDir, fullPath).split("\\").join("/");
117
+ const s = await _promises.stat.call(void 0, fullPath);
118
+ results.push({
119
+ name: entry.name,
120
+ path: relPath,
121
+ isDirectory: entry.isDirectory(),
122
+ size: s.size,
123
+ modifiedAt: s.mtimeMs
124
+ });
125
+ if (entry.isDirectory() && options.recursive) {
126
+ const children = await this.readEntries(fullPath, rootDir, options, depth + 1);
127
+ results.push(...children);
128
+ }
129
+ }
130
+ return results;
131
+ }
132
+ async collectFiles(dir) {
133
+ let entries;
134
+ try {
135
+ entries = await _promises.readdir.call(void 0, dir, { withFileTypes: true });
136
+ } catch (e3) {
137
+ return [];
138
+ }
139
+ const files = [];
140
+ for (const entry of entries) {
141
+ const fullPath = _path.join.call(void 0, dir, entry.name);
142
+ if (entry.isDirectory()) {
143
+ files.push(...await this.collectFiles(fullPath));
144
+ } else {
145
+ files.push(fullPath);
146
+ }
147
+ }
148
+ return files;
149
+ }
150
+ };
151
+
152
+ // src/adapters/token-counter/tiktoken.adapter.ts
153
+ var fallback = new (0, _chunkXLGW3XNIcjs.ApproximateTokenCounter)();
154
+ var TiktokenTokenCounter = (_class = class {
155
+ __init() {this.tiktokenModule = null}
156
+ __init2() {this.encodingCache = /* @__PURE__ */ new Map()}
157
+ __init3() {this.initPromise = null}
158
+ __init4() {this.available = false}
159
+
160
+ constructor(options) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);_class.prototype.__init4.call(this);
161
+ this.maxCacheSize = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.maxCacheSize]), () => ( 50));
162
+ this.initPromise = this.init();
163
+ }
164
+ async init() {
165
+ try {
166
+ this.tiktokenModule = await Promise.resolve().then(() => _interopRequireWildcard(require("tiktoken")));
167
+ this.available = true;
168
+ } catch (e4) {
169
+ this.available = false;
170
+ }
171
+ }
172
+ evictIfNeeded() {
173
+ while (this.encodingCache.size >= this.maxCacheSize) {
174
+ const oldest = this.encodingCache.keys().next().value;
175
+ const enc = this.encodingCache.get(oldest);
176
+ this.encodingCache.delete(oldest);
177
+ try {
178
+ _optionalChain([enc, 'optionalAccess', _2 => _2.free, 'call', _3 => _3()]);
179
+ } catch (e5) {
180
+ }
181
+ }
182
+ }
183
+ getEncoding(model) {
184
+ if (!this.available || !this.tiktokenModule) return null;
185
+ const key = _nullishCoalesce(model, () => ( "cl100k_base"));
186
+ const cached = this.encodingCache.get(key);
187
+ if (cached) return cached;
188
+ this.evictIfNeeded();
189
+ try {
190
+ const enc = model ? this.tiktokenModule.encoding_for_model(model) : this.tiktokenModule.get_encoding("cl100k_base");
191
+ this.encodingCache.set(key, enc);
192
+ return enc;
193
+ } catch (e6) {
194
+ try {
195
+ const enc = this.tiktokenModule.get_encoding("cl100k_base");
196
+ this.encodingCache.set(key, enc);
197
+ return enc;
198
+ } catch (e7) {
199
+ return null;
200
+ }
201
+ }
202
+ }
203
+ count(text, model) {
204
+ if (!text) return 0;
205
+ const enc = this.getEncoding(model);
206
+ if (!enc) return fallback.count(text);
207
+ return enc.encode(text).length;
208
+ }
209
+ countMessages(messages, model) {
210
+ if (!messages.length) return 0;
211
+ const enc = this.getEncoding(model);
212
+ if (!enc) return fallback.countMessages(messages);
213
+ return messages.reduce(
214
+ (sum, msg) => sum + enc.encode(msg.content).length + 4,
215
+ 0
216
+ );
217
+ }
218
+ getContextWindowSize(model) {
219
+ return fallback.getContextWindowSize(model);
220
+ }
221
+ estimateCost(inputTokens, outputTokens, model) {
222
+ return fallback.estimateCost(inputTokens, outputTokens, model);
223
+ }
224
+ truncate(text, maxTokens, model) {
225
+ if (!text) return text;
226
+ const enc = this.getEncoding(model);
227
+ if (!enc) return fallback.truncate(text, maxTokens);
228
+ const tokens = enc.encode(text);
229
+ if (tokens.length <= maxTokens) return text;
230
+ let low = 0;
231
+ let high = text.length;
232
+ while (low < high) {
233
+ const mid = Math.floor((low + high + 1) / 2);
234
+ if (enc.encode(text.slice(0, mid)).length <= maxTokens) {
235
+ low = mid;
236
+ } else {
237
+ high = mid - 1;
238
+ }
239
+ }
240
+ return text.slice(0, low);
241
+ }
242
+ /** Wait for tiktoken to finish loading */
243
+ async waitForInit() {
244
+ await this.initPromise;
245
+ return this.available;
246
+ }
247
+ /** Release cached encodings */
248
+ dispose() {
249
+ for (const enc of this.encodingCache.values()) {
250
+ try {
251
+ enc.free();
252
+ } catch (e8) {
253
+ }
254
+ }
255
+ this.encodingCache.clear();
256
+ }
257
+ }, _class);
258
+
259
+ // src/node/index.ts
260
+
261
+
262
+ function createNodeDiskSync() {
263
+ return async (filePath, content) => {
264
+ await _promises.mkdir.call(void 0, _path.dirname.call(void 0, filePath), { recursive: true });
265
+ await _promises.writeFile.call(void 0, filePath, content, "utf-8");
266
+ };
267
+ }
268
+ function createNodeVirtualFilesystem(basePath) {
269
+ return new (0, _chunkXLGW3XNIcjs.VirtualFilesystem)({
270
+ basePath: _nullishCoalesce(basePath, () => ( process.cwd())),
271
+ onSync: createNodeDiskSync()
272
+ });
273
+ }
274
+
275
+
276
+
277
+
278
+
279
+ exports.LocalFilesystem = LocalFilesystem; exports.TiktokenTokenCounter = TiktokenTokenCounter; exports.createNodeDiskSync = createNodeDiskSync; exports.createNodeVirtualFilesystem = createNodeVirtualFilesystem;
280
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/node/index.cjs","../../src/adapters/filesystem/local-fs.adapter.ts","../../src/adapters/token-counter/tiktoken.adapter.ts","../../src/node/index.ts"],"names":["mkdir"],"mappings":"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","file":"/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/node/index.cjs","sourcesContent":[null,"// =============================================================================\n// LocalFilesystem — Sandboxed wrapper over Node.js fs\n// =============================================================================\n\nimport {\n readFile,\n writeFile,\n mkdir,\n rm,\n readdir,\n stat as fsStat,\n} from \"node:fs/promises\";\nimport { join, resolve, relative } from \"node:path\";\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\nexport class LocalFilesystem implements FilesystemPort {\n private readonly basePath: string;\n\n constructor(basePath: string) {\n this.basePath = resolve(basePath);\n }\n\n async read(path: string, zone: FilesystemZone = \"transient\"): Promise<string> {\n return readFile(this.resolvePath(path, zone), \"utf-8\");\n }\n\n async write(path: string, content: string, zone: FilesystemZone = \"transient\"): Promise<void> {\n const fullPath = this.resolvePath(path, zone);\n await mkdir(resolve(fullPath, \"..\"), { recursive: true });\n await writeFile(fullPath, content, \"utf-8\");\n }\n\n async exists(path: string, zone: FilesystemZone = \"transient\"): Promise<boolean> {\n try {\n await fsStat(this.resolvePath(path, zone));\n return true;\n } catch {\n return false;\n }\n }\n\n async delete(path: string, zone: FilesystemZone = \"transient\"): Promise<void> {\n await rm(this.resolvePath(path, zone), { recursive: true, force: true });\n }\n\n async list(\n path: string,\n options: ListOptions = {},\n zone: FilesystemZone = \"transient\",\n ): Promise<FileEntry[]> {\n const fullPath = this.resolvePath(path, zone);\n return this.readEntries(fullPath, fullPath, options, 1);\n }\n\n async stat(path: string, zone: FilesystemZone = \"transient\"): Promise<FileStat> {\n const s = await fsStat(this.resolvePath(path, zone));\n return {\n size: s.size,\n isDirectory: s.isDirectory(),\n isFile: s.isFile(),\n createdAt: s.birthtimeMs,\n modifiedAt: s.mtimeMs,\n };\n }\n\n async glob(pattern: string, zone: FilesystemZone = \"transient\"): Promise<string[]> {\n const zoneRoot = this.zoneRoot(zone);\n const allFiles = await this.collectFiles(zoneRoot);\n const regex = globToRegex(pattern);\n return allFiles\n .map((f) => relative(zoneRoot, f).split(\"\\\\\").join(\"/\"))\n .filter((f) => regex.test(f));\n }\n\n async search(\n pattern: string,\n options: SearchOptions = {},\n zone: FilesystemZone = \"transient\",\n ): Promise<SearchResult[]> {\n const zoneRoot = this.zoneRoot(zone);\n const allFiles = await this.collectFiles(zoneRoot);\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 max = options.maxResults ?? Infinity;\n const results: SearchResult[] = [];\n\n for (const absPath of allFiles) {\n const relPath = relative(zoneRoot, absPath).split(\"\\\\\").join(\"/\");\n if (fileRegex && !fileRegex.test(relPath)) continue;\n const content = await readFile(absPath, \"utf-8\");\n const lines = 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: relPath,\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 private zoneRoot(zone: FilesystemZone): string {\n return join(this.basePath, zone);\n }\n\n private resolvePath(path: string, zone: FilesystemZone): string {\n const zoneRoot = this.zoneRoot(zone);\n const resolved = resolve(zoneRoot, path);\n const rel = relative(zoneRoot, resolved);\n if (rel.startsWith(\"..\") || resolve(resolved) === resolve(zoneRoot, \"..\", rel)) {\n throw new Error(`Path traversal denied: ${path}`);\n }\n return resolved;\n }\n\n private async readEntries(\n dir: string,\n rootDir: string,\n options: ListOptions,\n depth: number,\n ): Promise<FileEntry[]> {\n const maxDepth = options.maxDepth ?? (options.recursive ? Infinity : 1);\n if (depth > maxDepth) return [];\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n const results: FileEntry[] = [];\n for (const entry of entries) {\n if (!options.includeHidden && entry.name.startsWith(\".\")) continue;\n const fullPath = join(dir, entry.name);\n const relPath = relative(rootDir, fullPath).split(\"\\\\\").join(\"/\");\n const s = await fsStat(fullPath);\n results.push({\n name: entry.name,\n path: relPath,\n isDirectory: entry.isDirectory(),\n size: s.size,\n modifiedAt: s.mtimeMs,\n });\n if (entry.isDirectory() && options.recursive) {\n const children = await this.readEntries(fullPath, rootDir, options, depth + 1);\n results.push(...children);\n }\n }\n return results;\n }\n\n private async collectFiles(dir: string): Promise<string[]> {\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n const files: string[] = [];\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n files.push(...(await this.collectFiles(fullPath)));\n } else {\n files.push(fullPath);\n }\n }\n return files;\n }\n}\n\n\n","// =============================================================================\n// TiktokenTokenCounter — Accurate token counting via tiktoken\n// =============================================================================\n\nimport type { Message } from \"../../types.js\";\nimport type { TokenCounterPort } from \"../../ports/token-counter.port.js\";\nimport { ApproximateTokenCounter } from \"./approximate.adapter.js\";\n\ntype TiktokenEncoding = {\n encode: (text: string) => ArrayLike<number>;\n free: () => void;\n};\ntype TiktokenModule = {\n encoding_for_model: (model: string) => TiktokenEncoding;\n get_encoding: (encoding: string) => TiktokenEncoding;\n};\n\nconst fallback = new ApproximateTokenCounter();\n\nexport class TiktokenTokenCounter implements TokenCounterPort {\n private tiktokenModule: TiktokenModule | null = null;\n private encodingCache = new Map<string, TiktokenEncoding>();\n private initPromise: Promise<void> | null = null;\n private available = false;\n private readonly maxCacheSize: number;\n\n constructor(options?: { maxCacheSize?: number }) {\n this.maxCacheSize = options?.maxCacheSize ?? 50;\n this.initPromise = this.init();\n }\n\n private async init(): Promise<void> {\n try {\n this.tiktokenModule = (await import(\"tiktoken\")) as TiktokenModule;\n this.available = true;\n } catch {\n this.available = false;\n }\n }\n\n private evictIfNeeded(): void {\n while (this.encodingCache.size >= this.maxCacheSize) {\n const oldest = this.encodingCache.keys().next().value as string;\n const enc = this.encodingCache.get(oldest);\n this.encodingCache.delete(oldest);\n try { enc?.free(); } catch { /* ignore */ }\n }\n }\n\n private getEncoding(model?: string): TiktokenEncoding | null {\n if (!this.available || !this.tiktokenModule) return null;\n\n const key = model ?? \"cl100k_base\";\n const cached = this.encodingCache.get(key);\n if (cached) return cached;\n\n this.evictIfNeeded();\n\n try {\n const enc = model\n ? this.tiktokenModule.encoding_for_model(model)\n : this.tiktokenModule.get_encoding(\"cl100k_base\");\n this.encodingCache.set(key, enc);\n return enc;\n } catch {\n // Unknown model, use default encoding\n try {\n const enc = this.tiktokenModule.get_encoding(\"cl100k_base\");\n this.encodingCache.set(key, enc);\n return enc;\n } catch {\n return null;\n }\n }\n }\n\n count(text: string, model?: string): number {\n if (!text) return 0;\n const enc = this.getEncoding(model);\n if (!enc) return fallback.count(text);\n return enc.encode(text).length;\n }\n\n countMessages(messages: Message[], model?: string): number {\n if (!messages.length) return 0;\n const enc = this.getEncoding(model);\n if (!enc) return fallback.countMessages(messages);\n return messages.reduce(\n (sum, msg) => sum + enc.encode(msg.content).length + 4,\n 0,\n );\n }\n\n getContextWindowSize(model: string): number {\n return fallback.getContextWindowSize(model);\n }\n\n estimateCost(\n inputTokens: number,\n outputTokens: number,\n model: string,\n ): number {\n return fallback.estimateCost(inputTokens, outputTokens, model);\n }\n\n truncate(text: string, maxTokens: number, model?: string): string {\n if (!text) return text;\n const enc = this.getEncoding(model);\n if (!enc) return fallback.truncate(text, maxTokens);\n\n const tokens = enc.encode(text);\n if (tokens.length <= maxTokens) return text;\n\n // Binary search for the right character cut point\n let low = 0;\n let high = text.length;\n while (low < high) {\n const mid = Math.floor((low + high + 1) / 2);\n if (enc.encode(text.slice(0, mid)).length <= maxTokens) {\n low = mid;\n } else {\n high = mid - 1;\n }\n }\n return text.slice(0, low);\n }\n\n /** Wait for tiktoken to finish loading */\n async waitForInit(): Promise<boolean> {\n await this.initPromise;\n return this.available;\n }\n\n /** Release cached encodings */\n dispose(): void {\n for (const enc of this.encodingCache.values()) {\n try {\n enc.free();\n } catch {\n // ignore\n }\n }\n this.encodingCache.clear();\n }\n}\n","// gauss/node — Node.js-specific adapters\nexport { LocalFilesystem } from \"../adapters/filesystem/local-fs.adapter.js\";\nexport { TiktokenTokenCounter } from \"../adapters/token-counter/tiktoken.adapter.js\";\nexport type { DiskSyncFn } from \"../adapters/filesystem/virtual-fs.adapter.js\";\n\n// Re-export a helper to create a VirtualFilesystem with Node.js disk sync\nimport { writeFile, mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport { VirtualFilesystem } from \"../adapters/filesystem/virtual-fs.adapter.js\";\nimport type { DiskSyncFn } from \"../adapters/filesystem/virtual-fs.adapter.js\";\n\n/** Create a DiskSyncFn using Node.js fs for use with VirtualFilesystem */\nexport function createNodeDiskSync(): DiskSyncFn {\n return async (filePath: string, content: string): Promise<void> => {\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, content, \"utf-8\");\n };\n}\n\n/** Create a VirtualFilesystem with Node.js disk sync support */\nexport function createNodeVirtualFilesystem(basePath?: string): VirtualFilesystem {\n return new VirtualFilesystem({\n basePath: basePath ?? process.cwd(),\n onSync: createNodeDiskSync(),\n });\n}\n"]}