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.
- package/CHANGELOG.md +489 -0
- package/LICENSE +21 -0
- package/README.md +269 -0
- package/dist/a2a/index.cjs +7 -0
- package/dist/a2a/index.cjs.map +1 -0
- package/dist/a2a/index.d.cts +30 -0
- package/dist/a2a/index.d.ts +30 -0
- package/dist/a2a/index.js +7 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/agent-UIQDSYCE.js +16 -0
- package/dist/agent-UIQDSYCE.js.map +1 -0
- package/dist/agent-builder-8W3mBR-N.d.ts +1075 -0
- package/dist/agent-builder-GEMYdb1p.d.cts +1075 -0
- package/dist/agent-graph-AMQYAWNF.js +1422 -0
- package/dist/agent-graph-AMQYAWNF.js.map +1 -0
- package/dist/ai-sdk-mcp.adapter-SEN6KHNU.js +124 -0
- package/dist/ai-sdk-mcp.adapter-SEN6KHNU.js.map +1 -0
- package/dist/browser/index.js +10 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/bun-runtime.adapter-MQDAJLQM.js +8 -0
- package/dist/bun-runtime.adapter-MQDAJLQM.js.map +1 -0
- package/dist/bun-runtime.adapter-XKOUXVAK.cjs +8 -0
- package/dist/bun-runtime.adapter-XKOUXVAK.cjs.map +1 -0
- package/dist/chat-A3XMRPJL.js +129 -0
- package/dist/chat-A3XMRPJL.js.map +1 -0
- package/dist/chunk-2ZRU47NC.js +91 -0
- package/dist/chunk-2ZRU47NC.js.map +1 -0
- package/dist/chunk-3LD3JTH4.cjs +18 -0
- package/dist/chunk-3LD3JTH4.cjs.map +1 -0
- package/dist/chunk-5FE5TG2W.cjs +16 -0
- package/dist/chunk-5FE5TG2W.cjs.map +1 -0
- package/dist/chunk-6XF673YC.cjs +436 -0
- package/dist/chunk-6XF673YC.cjs.map +1 -0
- package/dist/chunk-7CKWZJNS.js +230 -0
- package/dist/chunk-7CKWZJNS.js.map +1 -0
- package/dist/chunk-BI2G665F.js +4588 -0
- package/dist/chunk-BI2G665F.js.map +1 -0
- package/dist/chunk-C5NLWJS2.js +139 -0
- package/dist/chunk-C5NLWJS2.js.map +1 -0
- package/dist/chunk-CJZ66SU3.cjs +4321 -0
- package/dist/chunk-CJZ66SU3.cjs.map +1 -0
- package/dist/chunk-DAMT2CXW.cjs +91 -0
- package/dist/chunk-DAMT2CXW.cjs.map +1 -0
- package/dist/chunk-E7WG3MO5.js +18 -0
- package/dist/chunk-E7WG3MO5.js.map +1 -0
- package/dist/chunk-EFDM6R4J.js +99 -0
- package/dist/chunk-EFDM6R4J.js.map +1 -0
- package/dist/chunk-F7WIPPEO.js +256 -0
- package/dist/chunk-F7WIPPEO.js.map +1 -0
- package/dist/chunk-FAYDE67N.js +6927 -0
- package/dist/chunk-FAYDE67N.js.map +1 -0
- package/dist/chunk-GAE2KKCM.js +21 -0
- package/dist/chunk-GAE2KKCM.js.map +1 -0
- package/dist/chunk-INLNGRXM.cjs +130 -0
- package/dist/chunk-INLNGRXM.cjs.map +1 -0
- package/dist/chunk-JKXKXB5O.js +130 -0
- package/dist/chunk-JKXKXB5O.js.map +1 -0
- package/dist/chunk-K6SAETGP.js +375 -0
- package/dist/chunk-K6SAETGP.js.map +1 -0
- package/dist/chunk-KEASLAYR.js +157 -0
- package/dist/chunk-KEASLAYR.js.map +1 -0
- package/dist/chunk-KKJVNM6O.js +436 -0
- package/dist/chunk-KKJVNM6O.js.map +1 -0
- package/dist/chunk-KYIMVRIM.js +16 -0
- package/dist/chunk-KYIMVRIM.js.map +1 -0
- package/dist/chunk-MB7NXIZD.js +4321 -0
- package/dist/chunk-MB7NXIZD.js.map +1 -0
- package/dist/chunk-MHHDXPGE.js +209 -0
- package/dist/chunk-MHHDXPGE.js.map +1 -0
- package/dist/chunk-NE6JJA5W.js +401 -0
- package/dist/chunk-NE6JJA5W.js.map +1 -0
- package/dist/chunk-PF46XZBF.cjs +6927 -0
- package/dist/chunk-PF46XZBF.cjs.map +1 -0
- package/dist/chunk-PSJIAGDE.cjs +375 -0
- package/dist/chunk-PSJIAGDE.cjs.map +1 -0
- package/dist/chunk-PWOQDXNQ.js +16 -0
- package/dist/chunk-PWOQDXNQ.js.map +1 -0
- package/dist/chunk-QYOMQBBZ.cjs +230 -0
- package/dist/chunk-QYOMQBBZ.cjs.map +1 -0
- package/dist/chunk-UDFXLC4J.cjs +16 -0
- package/dist/chunk-UDFXLC4J.cjs.map +1 -0
- package/dist/chunk-UO4NGXRT.cjs +259 -0
- package/dist/chunk-UO4NGXRT.cjs.map +1 -0
- package/dist/chunk-UPFDFLEW.js +40 -0
- package/dist/chunk-UPFDFLEW.js.map +1 -0
- package/dist/chunk-V55JSQS7.cjs +16 -0
- package/dist/chunk-V55JSQS7.cjs.map +1 -0
- package/dist/chunk-VJADHXZL.cjs +16 -0
- package/dist/chunk-VJADHXZL.cjs.map +1 -0
- package/dist/chunk-VRWD7LCI.js +59 -0
- package/dist/chunk-VRWD7LCI.js.map +1 -0
- package/dist/chunk-WKKQ443C.js +487 -0
- package/dist/chunk-WKKQ443C.js.map +1 -0
- package/dist/chunk-X2GHUHAF.js +436 -0
- package/dist/chunk-X2GHUHAF.js.map +1 -0
- package/dist/chunk-XLGW3XNI.cjs +256 -0
- package/dist/chunk-XLGW3XNI.cjs.map +1 -0
- package/dist/chunk-ZFJKX4DP.js +16 -0
- package/dist/chunk-ZFJKX4DP.js.map +1 -0
- package/dist/chunk-ZM2OEWM2.js +259 -0
- package/dist/chunk-ZM2OEWM2.js.map +1 -0
- package/dist/chunk-ZNAIP2XV.js +16 -0
- package/dist/chunk-ZNAIP2XV.js.map +1 -0
- package/dist/chunk-ZYFAZYSL.js +42 -0
- package/dist/chunk-ZYFAZYSL.js.map +1 -0
- package/dist/cli/index.js +421 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config-4MHT6TQW.js +153 -0
- package/dist/config-4MHT6TQW.js.map +1 -0
- package/dist/config-REERQFK4.cjs +153 -0
- package/dist/config-REERQFK4.cjs.map +1 -0
- package/dist/cost-tracker-JLOU7IZJ.js +7 -0
- package/dist/cost-tracker-JLOU7IZJ.js.map +1 -0
- package/dist/demo-C52GMSYH.js +188 -0
- package/dist/demo-C52GMSYH.js.map +1 -0
- package/dist/deno/index.js +306 -0
- package/dist/deno/index.js.map +1 -0
- package/dist/deno-runtime.adapter-F744HY7K.js +8 -0
- package/dist/deno-runtime.adapter-F744HY7K.js.map +1 -0
- package/dist/deno-runtime.adapter-RFEVNSCV.cjs +8 -0
- package/dist/deno-runtime.adapter-RFEVNSCV.cjs.map +1 -0
- package/dist/dev-D7DDVDA4.js +218 -0
- package/dist/dev-D7DDVDA4.js.map +1 -0
- package/dist/edge/index.js +10 -0
- package/dist/edge/index.js.map +1 -0
- package/dist/edge-runtime.adapter-UQCW2F7X.js +8 -0
- package/dist/edge-runtime.adapter-UQCW2F7X.js.map +1 -0
- package/dist/edge-runtime.adapter-YED6F3AY.cjs +8 -0
- package/dist/edge-runtime.adapter-YED6F3AY.cjs.map +1 -0
- package/dist/graph-MGFAQZ5W.js +50 -0
- package/dist/graph-MGFAQZ5W.js.map +1 -0
- package/dist/graph-visualization-HBSVQXJK.js +9 -0
- package/dist/graph-visualization-HBSVQXJK.js.map +1 -0
- package/dist/index-BRgqNnh3.d.cts +982 -0
- package/dist/index-CZxpYUxZ.d.ts +982 -0
- package/dist/index.cjs +14789 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +10275 -0
- package/dist/index.d.ts +10275 -0
- package/dist/index.js +14789 -0
- package/dist/index.js.map +1 -0
- package/dist/init-CFWXTQ35.js +133 -0
- package/dist/init-CFWXTQ35.js.map +1 -0
- package/dist/llm-VWO4MC7J.cjs +17 -0
- package/dist/llm-VWO4MC7J.cjs.map +1 -0
- package/dist/llm-XLXVSPBI.js +17 -0
- package/dist/llm-XLXVSPBI.js.map +1 -0
- package/dist/logging-WRAK5ZXT.js +33 -0
- package/dist/logging-WRAK5ZXT.js.map +1 -0
- package/dist/metrics-FAHZVVD4.js +47 -0
- package/dist/metrics-FAHZVVD4.js.map +1 -0
- package/dist/node/index.cjs +280 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +51 -0
- package/dist/node/index.d.ts +51 -0
- package/dist/node/index.js +280 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node-runtime.adapter-5L7PJ6W2.js +8 -0
- package/dist/node-runtime.adapter-5L7PJ6W2.js.map +1 -0
- package/dist/node-runtime.adapter-CCRZVGHB.cjs +8 -0
- package/dist/node-runtime.adapter-CCRZVGHB.cjs.map +1 -0
- package/dist/persist-usage-WTBTCWEF.js +7 -0
- package/dist/persist-usage-WTBTCWEF.js.map +1 -0
- package/dist/plugin-RCPBWUUA.js +207 -0
- package/dist/plugin-RCPBWUUA.js.map +1 -0
- package/dist/plugins/index.cjs +75 -0
- package/dist/plugins/index.cjs.map +1 -0
- package/dist/plugins/index.d.cts +8 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.js +75 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins-L4ING3CX.js +4625 -0
- package/dist/plugins-L4ING3CX.js.map +1 -0
- package/dist/providers/index.cjs +189 -0
- package/dist/providers/index.cjs.map +1 -0
- package/dist/providers/index.d.cts +168 -0
- package/dist/providers/index.d.ts +168 -0
- package/dist/providers/index.js +189 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers-3RNQ5CKZ.js +59 -0
- package/dist/providers-3RNQ5CKZ.js.map +1 -0
- package/dist/providers-66GPXUGQ.cjs +59 -0
- package/dist/providers-66GPXUGQ.cjs.map +1 -0
- package/dist/repl-K6QN4I2S.js +678 -0
- package/dist/repl-K6QN4I2S.js.map +1 -0
- package/dist/rest/index.cjs +17 -0
- package/dist/rest/index.cjs.map +1 -0
- package/dist/rest/index.d.cts +102 -0
- package/dist/rest/index.d.ts +102 -0
- package/dist/rest/index.js +17 -0
- package/dist/rest/index.js.map +1 -0
- package/dist/runtime-deno.js +15 -0
- package/dist/runtime-deno.js.map +1 -0
- package/dist/runtime-edge.js +15 -0
- package/dist/runtime-edge.js.map +1 -0
- package/dist/runtime-node.js +15 -0
- package/dist/runtime-node.js.map +1 -0
- package/dist/scraping/index.cjs +11 -0
- package/dist/scraping/index.cjs.map +1 -0
- package/dist/scraping/index.d.cts +17 -0
- package/dist/scraping/index.d.ts +17 -0
- package/dist/scraping/index.js +11 -0
- package/dist/scraping/index.js.map +1 -0
- package/dist/semantic-scraping.port-CZWUea88.d.cts +54 -0
- package/dist/semantic-scraping.port-CZWUea88.d.ts +54 -0
- package/dist/server/index.js +166 -0
- package/dist/server/index.js.map +1 -0
- package/dist/testing/index.cjs +25 -0
- package/dist/testing/index.cjs.map +1 -0
- package/dist/testing/index.d.cts +63 -0
- package/dist/testing/index.d.ts +63 -0
- package/dist/testing/index.js +25 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/token-counter.port-CRgxZZGe.d.ts +334 -0
- package/dist/token-counter.port-D7BHMCRR.d.cts +334 -0
- package/dist/tools-BZM33OBZ.js +10 -0
- package/dist/tools-BZM33OBZ.js.map +1 -0
- package/dist/tracing-XA3TEWP4.js +48 -0
- package/dist/tracing-XA3TEWP4.js.map +1 -0
- package/dist/types-CVsP7gFI.d.cts +235 -0
- package/dist/types-CVsP7gFI.d.ts +235 -0
- package/dist/virtual-fs.adapter-BBLS-3AY.d.ts +26 -0
- package/dist/virtual-fs.adapter-nb0CTYOj.d.cts +26 -0
- package/dist/workflow/index.cjs +9 -0
- package/dist/workflow/index.cjs.map +1 -0
- package/dist/workflow/index.d.cts +62 -0
- package/dist/workflow/index.d.ts +62 -0
- package/dist/workflow/index.js +9 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow.port-BaCttxrw.d.cts +153 -0
- package/dist/workflow.port-BaCttxrw.d.ts +153 -0
- package/package.json +230 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/repl.ts"],"sourcesContent":["// =============================================================================\n// CLI REPL — Interactive agentic chat mode\n// =============================================================================\n\nimport { createInterface } from \"node:readline/promises\";\nimport { execSync } from \"node:child_process\";\nimport { stdin, stdout } from \"node:process\";\nimport type { LanguageModel } from \"../core/llm/index.js\";\nimport { createModel, getDefaultModel, isValidProvider, SUPPORTED_PROVIDERS } from \"./providers.js\";\nimport type { ProviderName } from \"./providers.js\";\nimport { resolveApiKey, listKeys, ENV_MAP, getMcpServers, addMcpServer, removeMcpServer, loadHistory, appendHistory } from \"./config.js\";\nimport { color, bold, createSpinner, formatDuration, maskKey, formatMarkdown } from \"./format.js\";\nimport { readFile } from \"./commands/files.js\";\nimport { runBash } from \"./commands/bash.js\";\nimport { persistUsage } from \"./persist-usage.js\";\nimport { detectProjectContext, contextToSystemPrompt } from \"./project-context.js\";\nimport { DefaultCostTrackerAdapter } from \"../adapters/cost-tracker/index.js\";\nimport type { McpServerConfig } from \"../ports/mcp.port.js\";\n\nconst MAX_HISTORY = 200;\n\n/** Max characters shown for streaming tool-input deltas */\nconst MAX_DELTA_DISPLAY_LENGTH = 200;\n/** Max characters shown for tool output summaries */\nconst MAX_TOOL_OUTPUT_DISPLAY_LENGTH = 500;\n\nfunction getDefaultSystemPrompt(): string {\n try {\n const ctx = contextToSystemPrompt(detectProjectContext());\n return `You are Gauss, an AI coding assistant. ${ctx} You can read files, write files, search code, list directories, and execute bash commands. Use these tools to help the user accomplish their tasks. Be concise and direct.`;\n } catch {\n return \"You are Gauss, an AI coding assistant. You can read files, write files, search code, list directories, and execute bash commands. Use these tools to help the user accomplish their tasks. Be concise and direct.\";\n }\n}\n\nexport async function startRepl(\n initialModel: LanguageModel,\n providerName: ProviderName,\n apiKey: string,\n modelId?: string,\n yolo?: boolean,\n): Promise<void> {\n const SLASH_COMMANDS = [\n \"/help\", \"/exit\", \"/quit\", \"/clear\", \"/model\", \"/provider\",\n \"/info\", \"/settings\", \"/system\", \"/yolo\", \"/read\", \"/bash\",\n \"/history\", \"/clear-history\", \"/mcp\", \"/git\",\n \"/test\", \"/lint\", \"/fix\",\n ];\n const MCP_SUBCOMMANDS = [\"add\", \"list\", \"remove\", \"connect\", \"disconnect\"];\n\n function completer(line: string): [string[], string] {\n if (line.startsWith(\"/mcp \")) {\n const rest = line.slice(5);\n const hits = MCP_SUBCOMMANDS.filter((s) => s.startsWith(rest)).map((s) => `/mcp ${s}`);\n return [hits.length ? hits : [], line];\n }\n if (line.startsWith(\"/provider \")) {\n const rest = line.slice(10);\n const hits = (SUPPORTED_PROVIDERS as readonly string[])\n .filter((p) => p.startsWith(rest))\n .map((p) => `/provider ${p}`);\n return [hits.length ? hits : [], line];\n }\n if (line.startsWith(\"/\")) {\n const hits = SLASH_COMMANDS.filter((c) => c.startsWith(line));\n return [hits.length ? hits : SLASH_COMMANDS, line];\n }\n return [[], line];\n }\n\n const savedHistory = loadHistory();\n const rl = createInterface({\n input: stdin,\n output: stdout,\n completer,\n } as Parameters<typeof createInterface>[0]);\n\n // Load persistent history into readline\n if (Array.isArray((rl as unknown as { history: string[] }).history)) {\n (rl as unknown as { history: string[] }).history = [...savedHistory].reverse();\n }\n let currentModel = initialModel;\n let currentProvider = providerName;\n let currentModelId = modelId ?? getDefaultModel(providerName);\n let currentApiKey = apiKey;\n let systemPrompt = getDefaultSystemPrompt();\n let yoloMode = yolo ?? false;\n const sessionCostTracker = new DefaultCostTrackerAdapter();\n\n // Serialize tool confirmations to avoid concurrent readline conflicts\n let confirmLock = Promise.resolve<void>();\n\n const { AiSdkMcpAdapter } = await import(\"../adapters/mcp/ai-sdk-mcp.adapter.js\");\n const mcpAdapter = new AiSdkMcpAdapter();\n\n // Auto-connect saved MCP servers\n const savedServers = getMcpServers();\n for (const server of savedServers) {\n try {\n await mcpAdapter.connect(server);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(color(\"yellow\", ` ⚠ Failed to connect MCP server \"${server.name}\": ${msg}`));\n }\n }\n\n const history: Array<{ role: \"user\" | \"assistant\"; content: string }> = [];\n\n console.log(bold(color(\"cyan\", \"\\n ╔══════════════════════════════════════╗\")));\n console.log(bold(color(\"cyan\", \" ║ 🤖 Gauss Interactive ║\")));\n console.log(bold(color(\"cyan\", \" ╚══════════════════════════════════════╝\")));\n console.log(color(\"dim\", ` Provider: ${currentProvider} | Model: ${currentModelId}`));\n console.log(color(\"dim\", \" Tools: readFile, writeFile, bash, listFiles, searchFiles\"));\n {\n let mcpToolCount = 0;\n try {\n const mcpDefs = await mcpAdapter.discoverTools();\n mcpToolCount = Object.keys(mcpDefs).length;\n } catch {\n // MCP discovery may fail\n }\n if (savedServers.length > 0) {\n console.log(color(\"dim\", ` MCP Servers: ${savedServers.length} configured${mcpToolCount > 0 ? ` (${mcpToolCount} tools)` : \"\"}`));\n }\n }\n console.log(color(\"dim\", \" Type /help for commands, /exit to quit\\n\"));\n\n function promptText(): string {\n const yoloTag = yoloMode ? color(\"red\", \"[YOLO]\") : \"\";\n return color(\"green\", `gauss:${currentProvider}${yoloTag}> `);\n }\n\n try {\n while (true) {\n const input = await rl.question(promptText());\n const trimmed = input.trim();\n if (!trimmed) continue;\n\n // ! shortcut for bash\n if (trimmed.startsWith(\"!\")) {\n const cmd = trimmed.slice(1).trim();\n if (cmd) await handleBash(cmd);\n continue;\n }\n\n if (trimmed.startsWith(\"/\")) {\n const handled = await handleSlashCommand(trimmed);\n if (handled === \"exit\") break;\n if (handled && handled !== \"exit\") {\n // Slash command returned a prompt to send to the agent (e.g. /fix)\n await chat(handled);\n }\n continue;\n }\n\n appendHistory(trimmed);\n await chat(trimmed);\n }\n } catch (err: unknown) {\n const isEof =\n err instanceof Error &&\n (err.message.includes(\"readline was closed\") ||\n (err as NodeJS.ErrnoException).code === \"ERR_USE_AFTER_CLOSE\");\n if (!isEof) throw err;\n console.log(color(\"dim\", \"\\nGoodbye! 👋\\n\"));\n } finally {\n // fire-and-forget: usage persistence must not block exit\n await persistUsage(sessionCostTracker).catch((err: unknown) => {\n console.warn(\"[usage] Failed to persist usage data:\", err instanceof Error ? err.message : String(err));\n });\n await mcpAdapter.closeAll();\n rl.close();\n }\n\n\n async function confirmAction(description: string): Promise<boolean> {\n const previous = confirmLock;\n let release!: () => void;\n confirmLock = new Promise<void>((r) => { release = r; });\n await previous;\n\n const { createInterface: createConfirmRl } = await import(\"node:readline/promises\");\n const confirmRl = createConfirmRl({ input: stdin, output: stdout });\n try {\n const answer = await confirmRl.question(color(\"yellow\", ` ⚠ ${description} — Execute? (y/n) `));\n return answer.toLowerCase().startsWith(\"y\");\n } finally {\n confirmRl.close();\n stdin.resume();\n release();\n }\n }\n\n async function handleBash(command: string): Promise<void> {\n if (!yoloMode) {\n const ok = await confirmAction(`Run: ${command}`);\n if (!ok) {\n console.log(color(\"dim\", \" Cancelled.\\n\"));\n return;\n }\n }\n const result = runBash(command);\n if (result.stdout) process.stdout.write(result.stdout);\n if (result.stderr) process.stderr.write(color(\"red\", result.stderr));\n if (result.exitCode !== 0) {\n console.log(color(\"red\", ` Exit code: ${result.exitCode}\\n`));\n }\n }\n\n async function chat(prompt: string): Promise<void> {\n history.push({ role: \"user\", content: prompt });\n\n const { tool: aiTool } = await import(\"../core/llm/index.js\");\n const { z } = await import(\"zod\");\n const { Agent } = await import(\"../agent/agent.js\");\n const { createCliTools } = await import(\"./tools.js\");\n\n const tools = createCliTools({\n yolo: yoloMode,\n confirm: confirmAction,\n });\n\n // Discover MCP tools and merge as regular tools (avoids dispose() closing shared adapter)\n try {\n const mcpDefs = await mcpAdapter.discoverTools();\n for (const [name, def] of Object.entries(mcpDefs)) {\n tools[`mcp:${name}`] = aiTool({\n description: def.description,\n parameters: z.object({}).passthrough(),\n execute: async (args: unknown) => {\n const result = await mcpAdapter.executeTool(name, args);\n if (result.isError) throw new Error(result.content[0]?.text ?? \"MCP tool error\");\n return result.content.map((c) => c.text ?? \"\").join(\"\\n\");\n },\n });\n }\n } catch {\n // MCP discovery may fail if no servers connected — continue without MCP tools\n }\n\n const agent = Agent.create({\n model: currentModel,\n instructions: systemPrompt,\n maxSteps: 30,\n })\n .withTools(tools)\n .withCostTracker(sessionCostTracker)\n .build();\n\n const startTime = Date.now();\n const spinner = createSpinner(\"Thinking\");\n\n try {\n const stream = await agent.stream({\n messages: history as Array<{ role: string; content: unknown }>,\n });\n\n let response = \"\";\n let firstChunk = true;\n for await (const part of stream.fullStream) {\n switch (part.type) {\n case \"text-delta\":\n if (firstChunk) {\n spinner.stop();\n process.stdout.write(color(\"cyan\", \"\\n🤖 \"));\n firstChunk = false;\n }\n process.stdout.write(part.text);\n response += part.text;\n break;\n case \"tool-input-start\":\n if (firstChunk) {\n spinner.stop();\n firstChunk = false;\n }\n process.stdout.write(color(\"magenta\", `\\n 🔧 ${part.toolName} `));\n break;\n case \"tool-input-delta\":\n process.stdout.write(color(\"dim\", part.delta.length > MAX_DELTA_DISPLAY_LENGTH ? part.delta.slice(0, MAX_DELTA_DISPLAY_LENGTH) + \"…\" : part.delta));\n break;\n case \"tool-input-end\":\n process.stdout.write(\"\\n\");\n break;\n case \"tool-result\":\n {\n const raw = (part as Record<string, unknown>).output ?? (part as Record<string, unknown>).result;\n const summary = typeof raw === \"string\" ? raw : JSON.stringify(raw);\n process.stdout.write(color(\"dim\", ` ↳ ${summary.length > MAX_TOOL_OUTPUT_DISPLAY_LENGTH ? summary.slice(0, MAX_TOOL_OUTPUT_DISPLAY_LENGTH) + \"…\" : summary}\\n`));\n }\n break;\n case \"tool-error\":\n process.stdout.write(color(\"red\", ` ✗ Tool error (${(part as Record<string, unknown>).toolName}): ${(part as Record<string, unknown>).error}\\n`));\n break;\n case \"error\":\n if (firstChunk) { spinner.stop(); firstChunk = false; }\n process.stdout.write(color(\"red\", `\\n ✗ Stream error: ${(part as Record<string, unknown>).error}\\n`));\n break;\n default:\n break;\n }\n }\n\n if (response) {\n history.push({ role: \"assistant\", content: response });\n if (history.length > MAX_HISTORY) {\n history.splice(0, history.length - MAX_HISTORY);\n }\n }\n\n const elapsed = formatDuration(Date.now() - startTime);\n process.stdout.write(color(\"dim\", `\\n\\n ⏱ ${elapsed} | ${history.length} messages\\n\\n`));\n } catch (err) {\n history.pop();\n const msg = err instanceof Error ? err.message : String(err);\n console.error(color(\"red\", `\\n✗ Error: ${msg}\\n`));\n } finally {\n spinner.stop();\n await agent.dispose();\n }\n }\n\n async function handleSlashCommand(cmd: string): Promise<string | void> {\n const parts = cmd.split(/\\s+/);\n const command = parts[0]!.toLowerCase();\n\n switch (command) {\n case \"/exit\":\n case \"/quit\":\n console.log(color(\"dim\", \"Goodbye! 👋\\n\"));\n return \"exit\";\n\n case \"/help\":\n console.log(bold(\"\\nCommands:\"));\n console.log(\" /help Show this help\");\n console.log(\" /exit Exit the REPL\");\n console.log(\" /clear Clear the screen\");\n console.log(\"\");\n console.log(bold(\" Provider & Model:\"));\n console.log(\" /model <name> Switch model (e.g. /model gpt-5.2-mini)\");\n console.log(\" /provider <name> Switch provider\");\n console.log(\" /info Show current provider and model\");\n console.log(\" /settings Show all current settings\");\n console.log(\"\");\n console.log(bold(\" Agent:\"));\n console.log(\" /system [prompt] Get/set system prompt\");\n console.log(\" /yolo [on|off] Toggle YOLO mode (skip confirmations)\");\n console.log(\"\");\n console.log(bold(\" File & Shell:\"));\n console.log(\" /read <file> Read and display a file\");\n console.log(\" /bash <cmd> Execute a bash command\");\n console.log(\" !<cmd> Shortcut for /bash\");\n console.log(\"\");\n console.log(bold(\" Git:\"));\n console.log(\" /git Show git status\");\n console.log(\"\");\n console.log(bold(\" Dev:\"));\n console.log(\" /test [cmd] Run tests (default: npm test)\");\n console.log(\" /lint [cmd] Run linter (default: npm run lint)\");\n console.log(\" /fix Ask agent to fix the last error\");\n console.log(\"\");\n console.log(bold(\" History:\"));\n console.log(\" /history Show conversation history\");\n console.log(\" /clear-history Clear conversation history\");\n console.log(\"\");\n console.log(bold(\" MCP Servers:\"));\n console.log(\" /mcp add <name> <cmd> [args] Add a stdio MCP server\");\n console.log(\" /mcp list List configured MCP servers\");\n console.log(\" /mcp remove <name> Remove an MCP server\");\n console.log(\" /mcp connect <name> Connect a configured server\");\n console.log(\" /mcp disconnect <name> Disconnect a server\\n\");\n break;\n\n case \"/clear\":\n process.stdout.write(\"\\x1Bc\");\n break;\n\n case \"/info\":\n console.log(color(\"cyan\", ` Provider: ${currentProvider}`));\n console.log(color(\"cyan\", ` Model: ${currentModelId}`));\n console.log(color(\"cyan\", ` YOLO: ${yoloMode ? \"ON\" : \"OFF\"}\\n`));\n break;\n\n case \"/model\": {\n const newModel = parts[1];\n if (!newModel) {\n console.log(color(\"yellow\", ` Current model: ${currentModelId}`));\n break;\n }\n try {\n currentModel = await createModel(currentProvider, currentApiKey, newModel);\n currentModelId = newModel;\n console.log(color(\"green\", ` ✓ Switched to model: ${currentModelId}\\n`));\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(color(\"red\", ` ✗ Failed to switch model: ${msg}\\n`));\n }\n break;\n }\n\n case \"/provider\": {\n const newProvider = parts[1];\n if (!newProvider) {\n console.log(color(\"yellow\", ` Current provider: ${currentProvider}`));\n console.log(color(\"dim\", ` Available: ${SUPPORTED_PROVIDERS.join(\", \")}\\n`));\n break;\n }\n if (!isValidProvider(newProvider)) {\n console.log(color(\"red\", ` ✗ Unknown provider: ${newProvider}`));\n console.log(color(\"dim\", ` Available: ${SUPPORTED_PROVIDERS.join(\", \")}\\n`));\n break;\n }\n const key = resolveApiKey(newProvider);\n if (!key) {\n console.log(color(\"red\", ` ✗ No API key for ${newProvider}. Use: gauss config set ${newProvider} <key>\\n`));\n break;\n }\n try {\n const newModelId = getDefaultModel(newProvider);\n currentModel = await createModel(newProvider, key, newModelId);\n currentProvider = newProvider;\n currentModelId = newModelId;\n currentApiKey = key;\n console.log(color(\"green\", ` ✓ Switched to ${currentProvider} (${currentModelId})\\n`));\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(color(\"red\", ` ✗ Failed to switch provider: ${msg}\\n`));\n }\n break;\n }\n\n case \"/system\": {\n const newPrompt = parts.slice(1).join(\" \").trim();\n if (!newPrompt) {\n console.log(bold(\"\\n System prompt:\"));\n console.log(color(\"dim\", ` ${systemPrompt}\\n`));\n } else {\n systemPrompt = newPrompt;\n console.log(color(\"green\", \" ✓ System prompt updated.\\n\"));\n }\n break;\n }\n\n case \"/yolo\": {\n const arg = parts[1]?.toLowerCase();\n if (arg === \"on\") {\n yoloMode = true;\n } else if (arg === \"off\") {\n yoloMode = false;\n } else {\n yoloMode = !yoloMode;\n }\n const status = yoloMode\n ? color(\"red\", \"ON — commands execute without confirmation\")\n : color(\"green\", \"OFF — will ask before executing\");\n console.log(` YOLO mode: ${status}\\n`);\n break;\n }\n\n case \"/read\": {\n const filePath = parts[1];\n if (!filePath) {\n console.log(color(\"red\", \" Usage: /read <file-path>\\n\"));\n break;\n }\n try {\n const result = readFile(filePath);\n console.log(color(\"dim\", `\\n ─── ${result.path} ───`));\n console.log(result.content);\n console.log(color(\"dim\", \" ─────────\\n\"));\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(color(\"red\", ` ✗ ${msg}\\n`));\n }\n break;\n }\n\n case \"/bash\": {\n const bashCmd = parts.slice(1).join(\" \").trim();\n if (!bashCmd) {\n console.log(color(\"red\", \" Usage: /bash <command>\\n\"));\n break;\n }\n await handleBash(bashCmd);\n break;\n }\n\n case \"/settings\":\n console.log(bold(\"\\n ⚙ Settings:\"));\n console.log(` Provider: ${color(\"cyan\", currentProvider)}`);\n console.log(` Model: ${color(\"cyan\", currentModelId)}`);\n console.log(` API Key: ${color(\"dim\", maskKey(currentApiKey))}`);\n console.log(` YOLO: ${yoloMode ? color(\"red\", \"ON\") : color(\"green\", \"OFF\")}`);\n console.log(` System: ${color(\"dim\", systemPrompt.length > 60 ? systemPrompt.slice(0, 57) + \"...\" : systemPrompt)}`);\n console.log(` Available: ${color(\"dim\", SUPPORTED_PROVIDERS.join(\", \"))}`);\n {\n const allKeys = listKeys();\n const providerSources: Array<{ name: string; source: string }> = [];\n for (const p of SUPPORTED_PROVIDERS) {\n if (allKeys[p]) {\n providerSources.push({ name: p, source: \"config\" });\n } else if (ENV_MAP[p] && process.env[ENV_MAP[p]!]) {\n providerSources.push({ name: p, source: \"env\" });\n }\n }\n if (providerSources.length > 0) {\n console.log(bold(\" Configured providers:\"));\n for (const { name, source } of providerSources) {\n const k = allKeys[name] ?? process.env[ENV_MAP[name]!] ?? \"\";\n const masked = maskKey(k);\n const active = name === currentProvider ? color(\"green\", \" (active)\") : \"\";\n const srcLabel = source === \"env\" ? color(\"yellow\", \" [env]\") : \"\";\n console.log(` ${name}: ${color(\"dim\", masked)}${active}${srcLabel}`);\n }\n }\n }\n console.log();\n break;\n\n case \"/history\":\n if (history.length === 0) {\n console.log(color(\"dim\", \" No conversation history.\\n\"));\n } else {\n console.log(bold(\"\\n Conversation History:\"));\n for (const msg of history) {\n const prefix = msg.role === \"user\" ? color(\"green\", \" You: \") : color(\"cyan\", \" AI: \");\n const content = msg.content.length > 80 ? msg.content.slice(0, 77) + \"...\" : msg.content;\n console.log(`${prefix}${content}`);\n }\n console.log(\"\");\n }\n break;\n\n case \"/clear-history\":\n history.length = 0;\n console.log(color(\"green\", \" ✓ Conversation history cleared.\\n\"));\n break;\n\n case \"/mcp\":\n await handleMcpCommand(parts.slice(1));\n break;\n\n case \"/git\":\n try {\n const output = execSync(\"git status --short\", { encoding: \"utf8\" });\n console.log(output || \"(clean working tree)\");\n } catch { console.log(\"Not a git repository\"); }\n break;\n\n case \"/test\": {\n const testCmd = parts.slice(1).join(\" \") || \"npm test\";\n console.log(color(\"dim\", `Running: ${testCmd}`));\n try {\n const output = execSync(testCmd, { encoding: \"utf8\", maxBuffer: 10 * 1024 * 1024, timeout: 120000 });\n console.log(output);\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string; message?: string };\n console.log(e.stdout || \"\");\n console.error(color(\"red\", e.stderr || e.message || \"Test failed\"));\n }\n break;\n }\n\n case \"/lint\": {\n const lintCmd = parts.slice(1).join(\" \") || \"npm run lint\";\n console.log(color(\"dim\", `Running: ${lintCmd}`));\n try {\n const output = execSync(lintCmd, { encoding: \"utf8\", maxBuffer: 10 * 1024 * 1024, timeout: 120000 });\n console.log(output);\n } catch (err: unknown) {\n const e = err as { stdout?: string; stderr?: string; message?: string };\n console.log(e.stdout || \"\");\n console.error(color(\"red\", e.stderr || e.message || \"Lint failed\"));\n }\n break;\n }\n\n case \"/fix\":\n return \"Please analyze the last error and fix it. Look at the error output above in our conversation and determine what went wrong, then use the available tools to fix it.\";\n\n default:\n console.log(color(\"yellow\", ` Unknown command: ${command}. Type /help for available commands.\\n`));\n }\n }\n\n async function handleMcpCommand(args: string[]): Promise<void> {\n const sub = args[0]?.toLowerCase();\n\n switch (sub) {\n case \"add\": {\n const name = args[1];\n const command = args[2];\n if (!name || !command) {\n console.log(color(\"red\", \" Usage: /mcp add <name> <command> [args...]\\n\"));\n break;\n }\n const serverArgs = args.slice(3);\n const config: McpServerConfig = {\n id: name,\n name,\n transport: \"stdio\",\n command,\n args: serverArgs.length > 0 ? serverArgs : undefined,\n };\n try {\n await mcpAdapter.connect(config);\n addMcpServer(config);\n console.log(color(\"green\", ` ✓ MCP server \"${name}\" added and connected.\\n`));\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(color(\"red\", ` ✗ Failed to connect: ${msg}\\n`));\n }\n break;\n }\n\n case \"list\": {\n const servers = await mcpAdapter.listServers();\n if (servers.length === 0) {\n console.log(color(\"dim\", \" No MCP servers configured.\\n\"));\n break;\n }\n console.log(bold(\"\\n MCP Servers:\"));\n for (const s of servers) {\n const statusColor = s.status === \"connected\" ? \"green\" : s.status === \"error\" ? \"red\" : \"yellow\";\n console.log(` ${s.name} (${s.transport}) — ${color(statusColor, s.status)}`);\n }\n console.log(\"\");\n break;\n }\n\n case \"remove\": {\n const name = args[1];\n if (!name) {\n console.log(color(\"red\", \" Usage: /mcp remove <name>\\n\"));\n break;\n }\n await mcpAdapter.disconnect(name);\n const removed = removeMcpServer(name);\n if (removed) {\n console.log(color(\"green\", ` ✓ MCP server \"${name}\" removed.\\n`));\n } else {\n console.log(color(\"yellow\", ` Server \"${name}\" not found in config.\\n`));\n }\n break;\n }\n\n case \"connect\": {\n const name = args[1];\n if (!name) {\n console.log(color(\"red\", \" Usage: /mcp connect <name>\\n\"));\n break;\n }\n const saved = getMcpServers().find((s) => s.id === name);\n if (!saved) {\n console.log(color(\"red\", ` ✗ Server \"${name}\" not found in config. Use /mcp add first.\\n`));\n break;\n }\n try {\n await mcpAdapter.connect(saved);\n console.log(color(\"green\", ` ✓ Connected to \"${name}\".\\n`));\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(color(\"red\", ` ✗ Failed to connect: ${msg}\\n`));\n }\n break;\n }\n\n case \"disconnect\": {\n const name = args[1];\n if (!name) {\n console.log(color(\"red\", \" Usage: /mcp disconnect <name>\\n\"));\n break;\n }\n await mcpAdapter.disconnect(name);\n console.log(color(\"green\", ` ✓ Disconnected from \"${name}\".\\n`));\n break;\n }\n\n default:\n console.log(color(\"yellow\", \" Usage: /mcp <add|list|remove|connect|disconnect>\\n\"));\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkPF46XZBFcjs = require('../chunk-PF46XZBF.cjs');
|
|
5
|
+
require('../chunk-UDFXLC4J.cjs');
|
|
6
|
+
require('../chunk-V55JSQS7.cjs');
|
|
7
|
+
require('../chunk-5FE5TG2W.cjs');
|
|
8
|
+
require('../chunk-VJADHXZL.cjs');
|
|
9
|
+
require('../chunk-3LD3JTH4.cjs');
|
|
10
|
+
require('../chunk-XLGW3XNI.cjs');
|
|
11
|
+
require('../chunk-6XF673YC.cjs');
|
|
12
|
+
require('../chunk-PSJIAGDE.cjs');
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
exports.GaussServer = _chunkPF46XZBFcjs.GaussServer; exports.Router = _chunkPF46XZBFcjs.Router;
|
|
17
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/rest/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACF,+FAAC","file":"/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/rest/index.cjs"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { N as Agent } from '../agent-builder-GEMYdb1p.cjs';
|
|
2
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
3
|
+
import '../types-CVsP7gFI.cjs';
|
|
4
|
+
import 'zod';
|
|
5
|
+
import '../token-counter.port-D7BHMCRR.cjs';
|
|
6
|
+
|
|
7
|
+
interface ServerOptions {
|
|
8
|
+
/** Port to listen on. Default: 3456 */
|
|
9
|
+
port?: number;
|
|
10
|
+
/** Required API key for Bearer token auth. If unset, auth is disabled. */
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
/** Default AI provider. Default: "openai" */
|
|
13
|
+
defaultProvider?: string;
|
|
14
|
+
/** Default model ID. Default: "gpt-5.2" */
|
|
15
|
+
defaultModel?: string;
|
|
16
|
+
/** Enable CORS headers. Default: true */
|
|
17
|
+
cors?: boolean;
|
|
18
|
+
}
|
|
19
|
+
interface RunRequest {
|
|
20
|
+
prompt: string;
|
|
21
|
+
model?: string;
|
|
22
|
+
provider?: string;
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
instructions?: string;
|
|
25
|
+
plugins?: string[];
|
|
26
|
+
maxSteps?: number;
|
|
27
|
+
}
|
|
28
|
+
interface RunResponse {
|
|
29
|
+
text: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
steps: number;
|
|
32
|
+
duration: number;
|
|
33
|
+
}
|
|
34
|
+
interface StreamEvent {
|
|
35
|
+
type: "token" | "done" | "error";
|
|
36
|
+
content?: string;
|
|
37
|
+
text?: string;
|
|
38
|
+
sessionId?: string;
|
|
39
|
+
error?: string;
|
|
40
|
+
}
|
|
41
|
+
interface GraphRunRequest {
|
|
42
|
+
prompt: string;
|
|
43
|
+
nodes: GraphNodeDef[];
|
|
44
|
+
edges?: GraphEdgeDef[];
|
|
45
|
+
provider?: string;
|
|
46
|
+
model?: string;
|
|
47
|
+
apiKey?: string;
|
|
48
|
+
}
|
|
49
|
+
interface GraphNodeDef {
|
|
50
|
+
id: string;
|
|
51
|
+
instructions: string;
|
|
52
|
+
model?: string;
|
|
53
|
+
provider?: string;
|
|
54
|
+
}
|
|
55
|
+
interface GraphEdgeDef {
|
|
56
|
+
from: string;
|
|
57
|
+
to: string;
|
|
58
|
+
}
|
|
59
|
+
interface ErrorResponse {
|
|
60
|
+
error: {
|
|
61
|
+
code: number;
|
|
62
|
+
message: string;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
interface HealthResponse {
|
|
66
|
+
status: "ok";
|
|
67
|
+
version: string;
|
|
68
|
+
}
|
|
69
|
+
interface InfoResponse {
|
|
70
|
+
version: string;
|
|
71
|
+
defaultProvider: string;
|
|
72
|
+
defaultModel: string;
|
|
73
|
+
endpoints: string[];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
declare class GaussServer {
|
|
77
|
+
private readonly options;
|
|
78
|
+
private readonly router;
|
|
79
|
+
private server;
|
|
80
|
+
private agent?;
|
|
81
|
+
constructor(options?: ServerOptions, agent?: Agent);
|
|
82
|
+
private registerRoutes;
|
|
83
|
+
private addCorsHeaders;
|
|
84
|
+
private authenticate;
|
|
85
|
+
private handleRequest;
|
|
86
|
+
listen(port?: number): Promise<void>;
|
|
87
|
+
close(): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
type RouteHandler = (req: IncomingMessage, res: ServerResponse, params: Record<string, string>) => void | Promise<void>;
|
|
91
|
+
declare class Router {
|
|
92
|
+
private readonly routes;
|
|
93
|
+
get(path: string, handler: RouteHandler): void;
|
|
94
|
+
post(path: string, handler: RouteHandler): void;
|
|
95
|
+
options(path: string, handler: RouteHandler): void;
|
|
96
|
+
resolve(method: string, pathname: string): {
|
|
97
|
+
handler: RouteHandler;
|
|
98
|
+
params: Record<string, string>;
|
|
99
|
+
} | null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export { type ErrorResponse, GaussServer, type GraphEdgeDef, type GraphNodeDef, type GraphRunRequest, type HealthResponse, type InfoResponse, Router, type RunRequest, type RunResponse, type ServerOptions, type StreamEvent };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { N as Agent } from '../agent-builder-8W3mBR-N.js';
|
|
2
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
3
|
+
import '../types-CVsP7gFI.js';
|
|
4
|
+
import 'zod';
|
|
5
|
+
import '../token-counter.port-CRgxZZGe.js';
|
|
6
|
+
|
|
7
|
+
interface ServerOptions {
|
|
8
|
+
/** Port to listen on. Default: 3456 */
|
|
9
|
+
port?: number;
|
|
10
|
+
/** Required API key for Bearer token auth. If unset, auth is disabled. */
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
/** Default AI provider. Default: "openai" */
|
|
13
|
+
defaultProvider?: string;
|
|
14
|
+
/** Default model ID. Default: "gpt-5.2" */
|
|
15
|
+
defaultModel?: string;
|
|
16
|
+
/** Enable CORS headers. Default: true */
|
|
17
|
+
cors?: boolean;
|
|
18
|
+
}
|
|
19
|
+
interface RunRequest {
|
|
20
|
+
prompt: string;
|
|
21
|
+
model?: string;
|
|
22
|
+
provider?: string;
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
instructions?: string;
|
|
25
|
+
plugins?: string[];
|
|
26
|
+
maxSteps?: number;
|
|
27
|
+
}
|
|
28
|
+
interface RunResponse {
|
|
29
|
+
text: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
steps: number;
|
|
32
|
+
duration: number;
|
|
33
|
+
}
|
|
34
|
+
interface StreamEvent {
|
|
35
|
+
type: "token" | "done" | "error";
|
|
36
|
+
content?: string;
|
|
37
|
+
text?: string;
|
|
38
|
+
sessionId?: string;
|
|
39
|
+
error?: string;
|
|
40
|
+
}
|
|
41
|
+
interface GraphRunRequest {
|
|
42
|
+
prompt: string;
|
|
43
|
+
nodes: GraphNodeDef[];
|
|
44
|
+
edges?: GraphEdgeDef[];
|
|
45
|
+
provider?: string;
|
|
46
|
+
model?: string;
|
|
47
|
+
apiKey?: string;
|
|
48
|
+
}
|
|
49
|
+
interface GraphNodeDef {
|
|
50
|
+
id: string;
|
|
51
|
+
instructions: string;
|
|
52
|
+
model?: string;
|
|
53
|
+
provider?: string;
|
|
54
|
+
}
|
|
55
|
+
interface GraphEdgeDef {
|
|
56
|
+
from: string;
|
|
57
|
+
to: string;
|
|
58
|
+
}
|
|
59
|
+
interface ErrorResponse {
|
|
60
|
+
error: {
|
|
61
|
+
code: number;
|
|
62
|
+
message: string;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
interface HealthResponse {
|
|
66
|
+
status: "ok";
|
|
67
|
+
version: string;
|
|
68
|
+
}
|
|
69
|
+
interface InfoResponse {
|
|
70
|
+
version: string;
|
|
71
|
+
defaultProvider: string;
|
|
72
|
+
defaultModel: string;
|
|
73
|
+
endpoints: string[];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
declare class GaussServer {
|
|
77
|
+
private readonly options;
|
|
78
|
+
private readonly router;
|
|
79
|
+
private server;
|
|
80
|
+
private agent?;
|
|
81
|
+
constructor(options?: ServerOptions, agent?: Agent);
|
|
82
|
+
private registerRoutes;
|
|
83
|
+
private addCorsHeaders;
|
|
84
|
+
private authenticate;
|
|
85
|
+
private handleRequest;
|
|
86
|
+
listen(port?: number): Promise<void>;
|
|
87
|
+
close(): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
type RouteHandler = (req: IncomingMessage, res: ServerResponse, params: Record<string, string>) => void | Promise<void>;
|
|
91
|
+
declare class Router {
|
|
92
|
+
private readonly routes;
|
|
93
|
+
get(path: string, handler: RouteHandler): void;
|
|
94
|
+
post(path: string, handler: RouteHandler): void;
|
|
95
|
+
options(path: string, handler: RouteHandler): void;
|
|
96
|
+
resolve(method: string, pathname: string): {
|
|
97
|
+
handler: RouteHandler;
|
|
98
|
+
params: Record<string, string>;
|
|
99
|
+
} | null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export { type ErrorResponse, GaussServer, type GraphEdgeDef, type GraphNodeDef, type GraphRunRequest, type HealthResponse, type InfoResponse, Router, type RunRequest, type RunResponse, type ServerOptions, type StreamEvent };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GaussServer,
|
|
3
|
+
Router
|
|
4
|
+
} from "../chunk-FAYDE67N.js";
|
|
5
|
+
import "../chunk-KYIMVRIM.js";
|
|
6
|
+
import "../chunk-ZNAIP2XV.js";
|
|
7
|
+
import "../chunk-ZFJKX4DP.js";
|
|
8
|
+
import "../chunk-PWOQDXNQ.js";
|
|
9
|
+
import "../chunk-E7WG3MO5.js";
|
|
10
|
+
import "../chunk-F7WIPPEO.js";
|
|
11
|
+
import "../chunk-KKJVNM6O.js";
|
|
12
|
+
import "../chunk-K6SAETGP.js";
|
|
13
|
+
export {
|
|
14
|
+
GaussServer,
|
|
15
|
+
Router
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
export {
|
|
13
|
+
DenoRuntimeAdapter
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=runtime-deno.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,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BaseRuntimeAdapter
|
|
3
|
+
} from "./chunk-E7WG3MO5.js";
|
|
4
|
+
|
|
5
|
+
// src/adapters/runtime/edge-runtime.adapter.ts
|
|
6
|
+
var EdgeRuntimeAdapter = class extends BaseRuntimeAdapter {
|
|
7
|
+
name = "edge";
|
|
8
|
+
getEnv(_key) {
|
|
9
|
+
return void 0;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
EdgeRuntimeAdapter
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=runtime-edge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapters/runtime/edge-runtime.adapter.ts"],"sourcesContent":["import { BaseRuntimeAdapter } from \"./base-runtime.adapter.js\";\n\nexport class EdgeRuntimeAdapter extends BaseRuntimeAdapter {\n readonly name = 'edge' as const;\n\n getEnv(_key: string): string | undefined {\n // Edge runtimes (Cloudflare Workers, Vercel Edge) bind env vars\n // via the request context, not a global. Return undefined by default;\n // users should subclass or provide env via config.\n return undefined;\n }\n}\n"],"mappings":";;;;;AAEO,IAAM,qBAAN,cAAiC,mBAAmB;AAAA,EAChD,OAAO;AAAA,EAEhB,OAAO,MAAkC;AAIvC,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BaseRuntimeAdapter
|
|
3
|
+
} from "./chunk-E7WG3MO5.js";
|
|
4
|
+
|
|
5
|
+
// src/adapters/runtime/node-runtime.adapter.ts
|
|
6
|
+
var NodeRuntimeAdapter = class extends BaseRuntimeAdapter {
|
|
7
|
+
name = "node";
|
|
8
|
+
getEnv(key) {
|
|
9
|
+
return globalThis.process?.env?.[key];
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
NodeRuntimeAdapter
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=runtime-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/adapters/runtime/node-runtime.adapter.ts"],"sourcesContent":["import { BaseRuntimeAdapter } from \"./base-runtime.adapter.js\";\n\nexport class NodeRuntimeAdapter extends BaseRuntimeAdapter {\n readonly name = 'node' as const;\n\n getEnv(key: string): string | undefined {\n return globalThis.process?.env?.[key];\n }\n}\n"],"mappings":";;;;;AAEO,IAAM,qBAAN,cAAiC,mBAAmB;AAAA,EAChD,OAAO;AAAA,EAEhB,OAAO,KAAiC;AACtC,WAAO,WAAW,SAAS,MAAM,GAAG;AAAA,EACtC;AACF;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkQYOMQBBZcjs = require('../chunk-QYOMQBBZ.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.SemanticScrapingAdapter = _chunkQYOMQBBZcjs.SemanticScrapingAdapter; exports.hashTools = _chunkQYOMQBBZcjs.hashTools; exports.urlToPattern = _chunkQYOMQBBZcjs.urlToPattern;
|
|
11
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/scraping/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACF,oLAAC","file":"/Users/giulioleone/Sviluppo/gauss/gauss-flow/dist/scraping/index.cjs"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { I as ISemanticScrapingPort, a as SiteToolManifest, S as SemanticTool, M as ManifestTool } from '../semantic-scraping.port-CZWUea88.cjs';
|
|
2
|
+
export { P as PageToolSet } from '../semantic-scraping.port-CZWUea88.cjs';
|
|
3
|
+
|
|
4
|
+
/** Convert a concrete URL to a pattern for grouping (strips query values). */
|
|
5
|
+
declare function urlToPattern(url: string): string;
|
|
6
|
+
/** Deterministic hash for a set of tools (DJB2-like). */
|
|
7
|
+
declare function hashTools(tools: readonly Pick<SemanticTool, "name" | "description" | "inputSchema">[]): string;
|
|
8
|
+
declare class SemanticScrapingAdapter implements ISemanticScrapingPort {
|
|
9
|
+
private readonly manifests;
|
|
10
|
+
getManifest(origin: string): SiteToolManifest | null;
|
|
11
|
+
updatePage(origin: string, url: string, tools: SemanticTool[]): SiteToolManifest;
|
|
12
|
+
applyDiff(origin: string, url: string, added: SemanticTool[], removed: string[]): SiteToolManifest;
|
|
13
|
+
toMCPJson(origin: string): string;
|
|
14
|
+
getToolsForUrl(origin: string, url: string): ManifestTool[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { ISemanticScrapingPort, ManifestTool, SemanticScrapingAdapter, SemanticTool, SiteToolManifest, hashTools, urlToPattern };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { I as ISemanticScrapingPort, a as SiteToolManifest, S as SemanticTool, M as ManifestTool } from '../semantic-scraping.port-CZWUea88.js';
|
|
2
|
+
export { P as PageToolSet } from '../semantic-scraping.port-CZWUea88.js';
|
|
3
|
+
|
|
4
|
+
/** Convert a concrete URL to a pattern for grouping (strips query values). */
|
|
5
|
+
declare function urlToPattern(url: string): string;
|
|
6
|
+
/** Deterministic hash for a set of tools (DJB2-like). */
|
|
7
|
+
declare function hashTools(tools: readonly Pick<SemanticTool, "name" | "description" | "inputSchema">[]): string;
|
|
8
|
+
declare class SemanticScrapingAdapter implements ISemanticScrapingPort {
|
|
9
|
+
private readonly manifests;
|
|
10
|
+
getManifest(origin: string): SiteToolManifest | null;
|
|
11
|
+
updatePage(origin: string, url: string, tools: SemanticTool[]): SiteToolManifest;
|
|
12
|
+
applyDiff(origin: string, url: string, added: SemanticTool[], removed: string[]): SiteToolManifest;
|
|
13
|
+
toMCPJson(origin: string): string;
|
|
14
|
+
getToolsForUrl(origin: string, url: string): ManifestTool[];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { ISemanticScrapingPort, ManifestTool, SemanticScrapingAdapter, SemanticTool, SiteToolManifest, hashTools, urlToPattern };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** A single tool entry in the site manifest */
|
|
2
|
+
interface ManifestTool {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly description: string;
|
|
5
|
+
readonly inputSchema: Record<string, unknown>;
|
|
6
|
+
readonly category?: string;
|
|
7
|
+
readonly annotations?: Record<string, boolean>;
|
|
8
|
+
/** URL patterns where this tool was discovered */
|
|
9
|
+
readonly pagePatterns: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
/** Tools discovered on a specific page pattern */
|
|
12
|
+
interface PageToolSet {
|
|
13
|
+
/** Normalized URL pattern (e.g., "/watch?v=*") */
|
|
14
|
+
readonly urlPattern: string;
|
|
15
|
+
/** Tool names referencing SiteToolManifest.tools */
|
|
16
|
+
readonly tools: readonly string[];
|
|
17
|
+
/** Timestamp of last scan */
|
|
18
|
+
readonly lastScanned: number;
|
|
19
|
+
/** Hash for quick change detection */
|
|
20
|
+
readonly hash: string;
|
|
21
|
+
}
|
|
22
|
+
/** Complete per-site tool manifest */
|
|
23
|
+
interface SiteToolManifest {
|
|
24
|
+
readonly origin: string;
|
|
25
|
+
readonly version: number;
|
|
26
|
+
readonly generatedAt: number;
|
|
27
|
+
/** Page-level tool sets keyed by URL pattern */
|
|
28
|
+
readonly pages: Record<string, PageToolSet>;
|
|
29
|
+
/** Deduplicated cross-page tools */
|
|
30
|
+
readonly tools: readonly ManifestTool[];
|
|
31
|
+
}
|
|
32
|
+
/** Lightweight tool input used for manifest updates (decoupled from AI SDK Tool) */
|
|
33
|
+
interface SemanticTool {
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly description: string;
|
|
36
|
+
readonly inputSchema: string | Record<string, unknown>;
|
|
37
|
+
readonly confidence?: number;
|
|
38
|
+
readonly category?: string;
|
|
39
|
+
readonly annotations?: Record<string, boolean>;
|
|
40
|
+
}
|
|
41
|
+
interface ISemanticScrapingPort {
|
|
42
|
+
/** Get the current manifest for a site, or null if none exists. */
|
|
43
|
+
getManifest(origin: string): SiteToolManifest | null;
|
|
44
|
+
/** Add or replace all tools for a specific URL. Returns updated manifest. */
|
|
45
|
+
updatePage(origin: string, url: string, tools: SemanticTool[]): SiteToolManifest;
|
|
46
|
+
/** Incrementally update tools for a URL. Returns updated manifest. */
|
|
47
|
+
applyDiff(origin: string, url: string, added: SemanticTool[], removed: string[]): SiteToolManifest;
|
|
48
|
+
/** Export the manifest as MCP-compatible JSON string. */
|
|
49
|
+
toMCPJson(origin: string): string;
|
|
50
|
+
/** Get tools available on a specific URL. */
|
|
51
|
+
getToolsForUrl(origin: string, url: string): ManifestTool[];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type { ISemanticScrapingPort as I, ManifestTool as M, PageToolSet as P, SemanticTool as S, SiteToolManifest as a };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** A single tool entry in the site manifest */
|
|
2
|
+
interface ManifestTool {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly description: string;
|
|
5
|
+
readonly inputSchema: Record<string, unknown>;
|
|
6
|
+
readonly category?: string;
|
|
7
|
+
readonly annotations?: Record<string, boolean>;
|
|
8
|
+
/** URL patterns where this tool was discovered */
|
|
9
|
+
readonly pagePatterns: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
/** Tools discovered on a specific page pattern */
|
|
12
|
+
interface PageToolSet {
|
|
13
|
+
/** Normalized URL pattern (e.g., "/watch?v=*") */
|
|
14
|
+
readonly urlPattern: string;
|
|
15
|
+
/** Tool names referencing SiteToolManifest.tools */
|
|
16
|
+
readonly tools: readonly string[];
|
|
17
|
+
/** Timestamp of last scan */
|
|
18
|
+
readonly lastScanned: number;
|
|
19
|
+
/** Hash for quick change detection */
|
|
20
|
+
readonly hash: string;
|
|
21
|
+
}
|
|
22
|
+
/** Complete per-site tool manifest */
|
|
23
|
+
interface SiteToolManifest {
|
|
24
|
+
readonly origin: string;
|
|
25
|
+
readonly version: number;
|
|
26
|
+
readonly generatedAt: number;
|
|
27
|
+
/** Page-level tool sets keyed by URL pattern */
|
|
28
|
+
readonly pages: Record<string, PageToolSet>;
|
|
29
|
+
/** Deduplicated cross-page tools */
|
|
30
|
+
readonly tools: readonly ManifestTool[];
|
|
31
|
+
}
|
|
32
|
+
/** Lightweight tool input used for manifest updates (decoupled from AI SDK Tool) */
|
|
33
|
+
interface SemanticTool {
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly description: string;
|
|
36
|
+
readonly inputSchema: string | Record<string, unknown>;
|
|
37
|
+
readonly confidence?: number;
|
|
38
|
+
readonly category?: string;
|
|
39
|
+
readonly annotations?: Record<string, boolean>;
|
|
40
|
+
}
|
|
41
|
+
interface ISemanticScrapingPort {
|
|
42
|
+
/** Get the current manifest for a site, or null if none exists. */
|
|
43
|
+
getManifest(origin: string): SiteToolManifest | null;
|
|
44
|
+
/** Add or replace all tools for a specific URL. Returns updated manifest. */
|
|
45
|
+
updatePage(origin: string, url: string, tools: SemanticTool[]): SiteToolManifest;
|
|
46
|
+
/** Incrementally update tools for a URL. Returns updated manifest. */
|
|
47
|
+
applyDiff(origin: string, url: string, added: SemanticTool[], removed: string[]): SiteToolManifest;
|
|
48
|
+
/** Export the manifest as MCP-compatible JSON string. */
|
|
49
|
+
toMCPJson(origin: string): string;
|
|
50
|
+
/** Get tools available on a specific URL. */
|
|
51
|
+
getToolsForUrl(origin: string, url: string): ManifestTool[];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type { ISemanticScrapingPort as I, ManifestTool as M, PageToolSet as P, SemanticTool as S, SiteToolManifest as a };
|