@mohanscodex/spectra-code 0.4.5
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/README.md +275 -0
- package/dist/package.json +62 -0
- package/dist/src/agents/definitions.d.ts +16 -0
- package/dist/src/agents/definitions.d.ts.map +1 -0
- package/dist/src/agents/definitions.js +148 -0
- package/dist/src/agents/definitions.js.map +1 -0
- package/dist/src/agents/registry.d.ts +11 -0
- package/dist/src/agents/registry.d.ts.map +1 -0
- package/dist/src/agents/registry.js +13 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +436 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/agent.d.ts +3 -0
- package/dist/src/commands/agent.d.ts.map +1 -0
- package/dist/src/commands/agent.js +28 -0
- package/dist/src/commands/agent.js.map +1 -0
- package/dist/src/commands/db.d.ts +3 -0
- package/dist/src/commands/db.d.ts.map +1 -0
- package/dist/src/commands/db.js +47 -0
- package/dist/src/commands/db.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +12 -0
- package/dist/src/commands/doctor.d.ts.map +1 -0
- package/dist/src/commands/doctor.js +59 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/mcp.d.ts +9 -0
- package/dist/src/commands/mcp.d.ts.map +1 -0
- package/dist/src/commands/mcp.js +208 -0
- package/dist/src/commands/mcp.js.map +1 -0
- package/dist/src/commands/plugin.d.ts +3 -0
- package/dist/src/commands/plugin.d.ts.map +1 -0
- package/dist/src/commands/plugin.js +36 -0
- package/dist/src/commands/plugin.js.map +1 -0
- package/dist/src/commands/session.d.ts +3 -0
- package/dist/src/commands/session.d.ts.map +1 -0
- package/dist/src/commands/session.js +49 -0
- package/dist/src/commands/session.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +17 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/integrations/acp/index.d.ts +2 -0
- package/dist/src/integrations/acp/index.d.ts.map +1 -0
- package/dist/src/integrations/acp/index.js +2 -0
- package/dist/src/integrations/acp/index.js.map +1 -0
- package/dist/src/integrations/acp/server.d.ts +11 -0
- package/dist/src/integrations/acp/server.d.ts.map +1 -0
- package/dist/src/integrations/acp/server.js +220 -0
- package/dist/src/integrations/acp/server.js.map +1 -0
- package/dist/src/integrations/custom-tools/index.d.ts +3 -0
- package/dist/src/integrations/custom-tools/index.d.ts.map +1 -0
- package/dist/src/integrations/custom-tools/index.js +2 -0
- package/dist/src/integrations/custom-tools/index.js.map +1 -0
- package/dist/src/integrations/custom-tools/loader.d.ts +16 -0
- package/dist/src/integrations/custom-tools/loader.d.ts.map +1 -0
- package/dist/src/integrations/custom-tools/loader.js +95 -0
- package/dist/src/integrations/custom-tools/loader.js.map +1 -0
- package/dist/src/integrations/mcp/client.d.ts +32 -0
- package/dist/src/integrations/mcp/client.d.ts.map +1 -0
- package/dist/src/integrations/mcp/client.js +117 -0
- package/dist/src/integrations/mcp/client.js.map +1 -0
- package/dist/src/integrations/mcp/index.d.ts +3 -0
- package/dist/src/integrations/mcp/index.d.ts.map +1 -0
- package/dist/src/integrations/mcp/index.js +2 -0
- package/dist/src/integrations/mcp/index.js.map +1 -0
- package/dist/src/security/doom-loop.d.ts +22 -0
- package/dist/src/security/doom-loop.d.ts.map +1 -0
- package/dist/src/security/doom-loop.js +72 -0
- package/dist/src/security/doom-loop.js.map +1 -0
- package/dist/src/security/index.d.ts +46 -0
- package/dist/src/security/index.d.ts.map +1 -0
- package/dist/src/security/index.js +362 -0
- package/dist/src/security/index.js.map +1 -0
- package/dist/src/security/path-safety.d.ts +15 -0
- package/dist/src/security/path-safety.d.ts.map +1 -0
- package/dist/src/security/path-safety.js +57 -0
- package/dist/src/security/path-safety.js.map +1 -0
- package/dist/src/security/permissions.d.ts +7 -0
- package/dist/src/security/permissions.d.ts.map +1 -0
- package/dist/src/security/permissions.js +41 -0
- package/dist/src/security/permissions.js.map +1 -0
- package/dist/src/security/read-tracker.d.ts +20 -0
- package/dist/src/security/read-tracker.d.ts.map +1 -0
- package/dist/src/security/read-tracker.js +73 -0
- package/dist/src/security/read-tracker.js.map +1 -0
- package/dist/src/security/ssrf-guard.d.ts +19 -0
- package/dist/src/security/ssrf-guard.d.ts.map +1 -0
- package/dist/src/security/ssrf-guard.js +98 -0
- package/dist/src/security/ssrf-guard.js.map +1 -0
- package/dist/src/security/types.d.ts +70 -0
- package/dist/src/security/types.d.ts.map +1 -0
- package/dist/src/security/types.js +2 -0
- package/dist/src/security/types.js.map +1 -0
- package/dist/src/security/wildcard.d.ts +5 -0
- package/dist/src/security/wildcard.d.ts.map +1 -0
- package/dist/src/security/wildcard.js +50 -0
- package/dist/src/security/wildcard.js.map +1 -0
- package/dist/src/services/auth-store.d.ts +25 -0
- package/dist/src/services/auth-store.d.ts.map +1 -0
- package/dist/src/services/auth-store.js +40 -0
- package/dist/src/services/auth-store.js.map +1 -0
- package/dist/src/services/config.d.ts +66 -0
- package/dist/src/services/config.d.ts.map +1 -0
- package/dist/src/services/config.js +83 -0
- package/dist/src/services/config.js.map +1 -0
- package/dist/src/services/context.d.ts +7 -0
- package/dist/src/services/context.d.ts.map +1 -0
- package/dist/src/services/context.js +23 -0
- package/dist/src/services/context.js.map +1 -0
- package/dist/src/services/custom-providers.d.ts +5 -0
- package/dist/src/services/custom-providers.d.ts.map +1 -0
- package/dist/src/services/custom-providers.js +213 -0
- package/dist/src/services/custom-providers.js.map +1 -0
- package/dist/src/services/session-store.d.ts +76 -0
- package/dist/src/services/session-store.d.ts.map +1 -0
- package/dist/src/services/session-store.js +199 -0
- package/dist/src/services/session-store.js.map +1 -0
- package/dist/src/services/snapshot-manager.d.ts +46 -0
- package/dist/src/services/snapshot-manager.d.ts.map +1 -0
- package/dist/src/services/snapshot-manager.js +183 -0
- package/dist/src/services/snapshot-manager.js.map +1 -0
- package/dist/src/tools/edit.d.ts +3 -0
- package/dist/src/tools/edit.d.ts.map +1 -0
- package/dist/src/tools/edit.js +57 -0
- package/dist/src/tools/edit.js.map +1 -0
- package/dist/src/tools/glob.d.ts +3 -0
- package/dist/src/tools/glob.d.ts.map +1 -0
- package/dist/src/tools/glob.js +46 -0
- package/dist/src/tools/glob.js.map +1 -0
- package/dist/src/tools/grep.d.ts +3 -0
- package/dist/src/tools/grep.d.ts.map +1 -0
- package/dist/src/tools/grep.js +50 -0
- package/dist/src/tools/grep.js.map +1 -0
- package/dist/src/tools/index.d.ts +26 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +202 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +5 -0
- package/dist/src/tools/mcp-tool.d.ts.map +1 -0
- package/dist/src/tools/mcp-tool.js +82 -0
- package/dist/src/tools/mcp-tool.js.map +1 -0
- package/dist/src/tools/read.d.ts +3 -0
- package/dist/src/tools/read.d.ts.map +1 -0
- package/dist/src/tools/read.js +48 -0
- package/dist/src/tools/read.js.map +1 -0
- package/dist/src/tools/shell.d.ts +3 -0
- package/dist/src/tools/shell.d.ts.map +1 -0
- package/dist/src/tools/shell.js +266 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/tools/task.d.ts +3 -0
- package/dist/src/tools/task.d.ts.map +1 -0
- package/dist/src/tools/task.js +75 -0
- package/dist/src/tools/task.js.map +1 -0
- package/dist/src/tools/types.d.ts +18 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +2 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/tools/utils.d.ts +4 -0
- package/dist/src/tools/utils.d.ts.map +1 -0
- package/dist/src/tools/utils.js +10 -0
- package/dist/src/tools/utils.js.map +1 -0
- package/dist/src/tools/web-fetch.d.ts +3 -0
- package/dist/src/tools/web-fetch.d.ts.map +1 -0
- package/dist/src/tools/web-fetch.js +81 -0
- package/dist/src/tools/web-fetch.js.map +1 -0
- package/dist/src/tools/write.d.ts +3 -0
- package/dist/src/tools/write.d.ts.map +1 -0
- package/dist/src/tools/write.js +28 -0
- package/dist/src/tools/write.js.map +1 -0
- package/dist/src/tui/app-constants.d.ts +3 -0
- package/dist/src/tui/app-constants.d.ts.map +1 -0
- package/dist/src/tui/app-constants.js +4 -0
- package/dist/src/tui/app-constants.js.map +1 -0
- package/dist/src/tui/app.d.ts +5 -0
- package/dist/src/tui/app.d.ts.map +1 -0
- package/dist/src/tui/app.js +322 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/commands.d.ts +61 -0
- package/dist/src/tui/commands.d.ts.map +1 -0
- package/dist/src/tui/commands.js +95 -0
- package/dist/src/tui/commands.js.map +1 -0
- package/dist/src/tui/components/chat-area.d.ts +9 -0
- package/dist/src/tui/components/chat-area.d.ts.map +1 -0
- package/dist/src/tui/components/chat-area.js +12 -0
- package/dist/src/tui/components/chat-area.js.map +1 -0
- package/dist/src/tui/components/command-palette.d.ts +18 -0
- package/dist/src/tui/components/command-palette.d.ts.map +1 -0
- package/dist/src/tui/components/command-palette.js +50 -0
- package/dist/src/tui/components/command-palette.js.map +1 -0
- package/dist/src/tui/components/message.d.ts +9 -0
- package/dist/src/tui/components/message.d.ts.map +1 -0
- package/dist/src/tui/components/message.js +116 -0
- package/dist/src/tui/components/message.js.map +1 -0
- package/dist/src/tui/components/slash-autocomplete.d.ts +14 -0
- package/dist/src/tui/components/slash-autocomplete.d.ts.map +1 -0
- package/dist/src/tui/components/slash-autocomplete.js +29 -0
- package/dist/src/tui/components/slash-autocomplete.js.map +1 -0
- package/dist/src/tui/components/toast.d.ts +8 -0
- package/dist/src/tui/components/toast.d.ts.map +1 -0
- package/dist/src/tui/components/toast.js +29 -0
- package/dist/src/tui/components/toast.js.map +1 -0
- package/dist/src/tui/hooks/use-agent.d.ts +20 -0
- package/dist/src/tui/hooks/use-agent.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-agent.js +129 -0
- package/dist/src/tui/hooks/use-agent.js.map +1 -0
- package/dist/src/tui/hooks/use-app-keyboard.d.ts +53 -0
- package/dist/src/tui/hooks/use-app-keyboard.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-app-keyboard.js +155 -0
- package/dist/src/tui/hooks/use-app-keyboard.js.map +1 -0
- package/dist/src/tui/hooks/use-chat-submit.d.ts +61 -0
- package/dist/src/tui/hooks/use-chat-submit.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-chat-submit.js +269 -0
- package/dist/src/tui/hooks/use-chat-submit.js.map +1 -0
- package/dist/src/tui/hooks/use-permission-queue.d.ts +10 -0
- package/dist/src/tui/hooks/use-permission-queue.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-permission-queue.js +26 -0
- package/dist/src/tui/hooks/use-permission-queue.js.map +1 -0
- package/dist/src/tui/hooks/use-revert.d.ts +26 -0
- package/dist/src/tui/hooks/use-revert.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-revert.js +88 -0
- package/dist/src/tui/hooks/use-revert.js.map +1 -0
- package/dist/src/tui/index.d.ts +5 -0
- package/dist/src/tui/index.d.ts.map +1 -0
- package/dist/src/tui/index.js +38 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/prompt-bar.d.ts +29 -0
- package/dist/src/tui/prompt-bar.d.ts.map +1 -0
- package/dist/src/tui/prompt-bar.js +41 -0
- package/dist/src/tui/prompt-bar.js.map +1 -0
- package/dist/src/tui/slash-commands.d.ts +20 -0
- package/dist/src/tui/slash-commands.d.ts.map +1 -0
- package/dist/src/tui/slash-commands.js +30 -0
- package/dist/src/tui/slash-commands.js.map +1 -0
- package/dist/src/tui/theme.d.ts +29 -0
- package/dist/src/tui/theme.d.ts.map +1 -0
- package/dist/src/tui/theme.js +54 -0
- package/dist/src/tui/theme.js.map +1 -0
- package/dist/src/tui/tips.d.ts +2 -0
- package/dist/src/tui/tips.d.ts.map +1 -0
- package/dist/src/tui/tips.js +40 -0
- package/dist/src/tui/tips.js.map +1 -0
- package/dist/src/tui/types.d.ts +34 -0
- package/dist/src/tui/types.d.ts.map +1 -0
- package/dist/src/tui/types.js +2 -0
- package/dist/src/tui/types.js.map +1 -0
- package/dist/src/tui/ui/about-dialog.d.ts +8 -0
- package/dist/src/tui/ui/about-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/about-dialog.js +21 -0
- package/dist/src/tui/ui/about-dialog.js.map +1 -0
- package/dist/src/tui/ui/agent-switcher.d.ts +10 -0
- package/dist/src/tui/ui/agent-switcher.d.ts.map +1 -0
- package/dist/src/tui/ui/agent-switcher.js +77 -0
- package/dist/src/tui/ui/agent-switcher.js.map +1 -0
- package/dist/src/tui/ui/debug-dialog.d.ts +15 -0
- package/dist/src/tui/ui/debug-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/debug-dialog.js +74 -0
- package/dist/src/tui/ui/debug-dialog.js.map +1 -0
- package/dist/src/tui/ui/doctor-dialog.d.ts +9 -0
- package/dist/src/tui/ui/doctor-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/doctor-dialog.js +45 -0
- package/dist/src/tui/ui/doctor-dialog.js.map +1 -0
- package/dist/src/tui/ui/manage-providers-dialog.d.ts +10 -0
- package/dist/src/tui/ui/manage-providers-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/manage-providers-dialog.js +257 -0
- package/dist/src/tui/ui/manage-providers-dialog.js.map +1 -0
- package/dist/src/tui/ui/mcp-toggle-dialog.d.ts +8 -0
- package/dist/src/tui/ui/mcp-toggle-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/mcp-toggle-dialog.js +89 -0
- package/dist/src/tui/ui/mcp-toggle-dialog.js.map +1 -0
- package/dist/src/tui/ui/message-controls.d.ts +16 -0
- package/dist/src/tui/ui/message-controls.d.ts.map +1 -0
- package/dist/src/tui/ui/message-controls.js +102 -0
- package/dist/src/tui/ui/message-controls.js.map +1 -0
- package/dist/src/tui/ui/model-switcher.d.ts +10 -0
- package/dist/src/tui/ui/model-switcher.d.ts.map +1 -0
- package/dist/src/tui/ui/model-switcher.js +139 -0
- package/dist/src/tui/ui/model-switcher.js.map +1 -0
- package/dist/src/tui/ui/permission-dialog.d.ts +12 -0
- package/dist/src/tui/ui/permission-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/permission-dialog.js +37 -0
- package/dist/src/tui/ui/permission-dialog.js.map +1 -0
- package/dist/src/tui/ui/provider-dialog.d.ts +11 -0
- package/dist/src/tui/ui/provider-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/provider-dialog.js +232 -0
- package/dist/src/tui/ui/provider-dialog.js.map +1 -0
- package/dist/src/tui/ui/session-list.d.ts +23 -0
- package/dist/src/tui/ui/session-list.d.ts.map +1 -0
- package/dist/src/tui/ui/session-list.js +147 -0
- package/dist/src/tui/ui/session-list.js.map +1 -0
- package/dist/src/tui/ui/thinking-effort-dialog.d.ts +11 -0
- package/dist/src/tui/ui/thinking-effort-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/thinking-effort-dialog.js +79 -0
- package/dist/src/tui/ui/thinking-effort-dialog.js.map +1 -0
- package/dist/src/tui/utils/model-config.d.ts +9 -0
- package/dist/src/tui/utils/model-config.d.ts.map +1 -0
- package/dist/src/tui/utils/model-config.js +63 -0
- package/dist/src/tui/utils/model-config.js.map +1 -0
- package/dist/src/tui/utils/session-messages.d.ts +22 -0
- package/dist/src/tui/utils/session-messages.d.ts.map +1 -0
- package/dist/src/tui/utils/session-messages.js +62 -0
- package/dist/src/tui/utils/session-messages.js.map +1 -0
- package/dist/src/tui/utils.d.ts +6 -0
- package/dist/src/tui/utils.d.ts.map +1 -0
- package/dist/src/tui/utils.js +23 -0
- package/dist/src/tui/utils.js.map +1 -0
- package/dist/src/tui/variant-cycle.d.ts +10 -0
- package/dist/src/tui/variant-cycle.d.ts.map +1 -0
- package/dist/src/tui/variant-cycle.js +64 -0
- package/dist/src/tui/variant-cycle.js.map +1 -0
- package/dist/src/utils/paths.d.ts +10 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +106 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/platform.d.ts +10 -0
- package/dist/src/utils/platform.d.ts.map +1 -0
- package/dist/src/utils/platform.js +133 -0
- package/dist/src/utils/platform.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AgentTool } from "@mohanscodex/spectra-agent";
|
|
2
|
+
import type { Tool as McpToolDefinition } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
export declare function createMcpAgentTool(serverName: string, mcpTool: McpToolDefinition): AgentTool;
|
|
4
|
+
export declare function createMcpAgentTools(serverName: string, tools: McpToolDefinition[]): AgentTool[];
|
|
5
|
+
//# sourceMappingURL=mcp-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool.d.ts","sourceRoot":"","sources":["../../../src/tools/mcp-tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,4BAA4B,CAAC;AAExE,OAAO,KAAK,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AA6EpF,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,GACzB,SAAS,CAmBX;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,SAAS,EAAE,CAE/F"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool } from "@mohanscodex/spectra-agent";
|
|
3
|
+
import { callMcpTool, formatMcpToolName } from "../integrations/mcp/index.js";
|
|
4
|
+
import { textResult, errorResult } from "./utils.js";
|
|
5
|
+
function mcpSchemaToZod(schema) {
|
|
6
|
+
const jsonSchema = schema;
|
|
7
|
+
const properties = jsonSchema.properties ?? {};
|
|
8
|
+
const required = jsonSchema.required ?? [];
|
|
9
|
+
const zodShape = {};
|
|
10
|
+
for (const [key, prop] of Object.entries(properties)) {
|
|
11
|
+
let zodType;
|
|
12
|
+
const propType = prop.type ?? "string";
|
|
13
|
+
switch (propType) {
|
|
14
|
+
case "string":
|
|
15
|
+
zodType = z.string().describe(prop.description ?? "");
|
|
16
|
+
if (prop.enum) {
|
|
17
|
+
zodType = z.enum(prop.enum).describe(prop.description ?? "");
|
|
18
|
+
}
|
|
19
|
+
break;
|
|
20
|
+
case "number":
|
|
21
|
+
zodType = z.number().describe(prop.description ?? "");
|
|
22
|
+
break;
|
|
23
|
+
case "integer":
|
|
24
|
+
zodType = z.number().int().describe(prop.description ?? "");
|
|
25
|
+
break;
|
|
26
|
+
case "boolean":
|
|
27
|
+
zodType = z.boolean().describe(prop.description ?? "");
|
|
28
|
+
break;
|
|
29
|
+
case "array":
|
|
30
|
+
zodType = z.array(z.unknown()).describe(prop.description ?? "");
|
|
31
|
+
break;
|
|
32
|
+
case "object":
|
|
33
|
+
zodType = z.record(z.unknown()).describe(prop.description ?? "");
|
|
34
|
+
break;
|
|
35
|
+
default:
|
|
36
|
+
zodType = z.unknown().describe(prop.description ?? "");
|
|
37
|
+
}
|
|
38
|
+
if (!required.includes(key)) {
|
|
39
|
+
zodType = zodType.optional();
|
|
40
|
+
}
|
|
41
|
+
zodShape[key] = zodType;
|
|
42
|
+
}
|
|
43
|
+
return z.object(zodShape);
|
|
44
|
+
}
|
|
45
|
+
function extractResultText(result) {
|
|
46
|
+
if (result.isError) {
|
|
47
|
+
const text = result.content
|
|
48
|
+
?.filter((b) => b.type === "text")
|
|
49
|
+
.map((b) => b.text ?? "")
|
|
50
|
+
.join("\n") || "Tool execution failed";
|
|
51
|
+
return errorResult(text);
|
|
52
|
+
}
|
|
53
|
+
const text = result.content
|
|
54
|
+
?.filter((b) => b.type === "text")
|
|
55
|
+
.map((b) => b.text ?? "")
|
|
56
|
+
.join("\n") || "(no output)";
|
|
57
|
+
return textResult(text);
|
|
58
|
+
}
|
|
59
|
+
export function createMcpAgentTool(serverName, mcpTool) {
|
|
60
|
+
const toolName = formatMcpToolName(serverName, mcpTool.name);
|
|
61
|
+
const inputSchema = mcpTool.inputSchema ?? {};
|
|
62
|
+
const zodSchema = mcpSchemaToZod(inputSchema);
|
|
63
|
+
return defineTool({
|
|
64
|
+
name: toolName,
|
|
65
|
+
description: mcpTool.description ?? `MCP tool from server "${serverName}"`,
|
|
66
|
+
parameters: zodSchema,
|
|
67
|
+
execute: async (args) => {
|
|
68
|
+
try {
|
|
69
|
+
const result = await callMcpTool(serverName, mcpTool.name, args);
|
|
70
|
+
return extractResultText(result);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
74
|
+
return errorResult(`MCP tool "${toolName}" failed: ${message}`);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export function createMcpAgentTools(serverName, tools) {
|
|
80
|
+
return tools.map((tool) => createMcpAgentTool(serverName, tool));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=mcp-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool.js","sourceRoot":"","sources":["../../../src/tools/mcp-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/tools/read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,eAAO,MAAM,QAAQ,EAAE,WA+CtB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorResult, textResult } from "./utils.js";
|
|
3
|
+
import { readFileSync, statSync, readdirSync, existsSync } from "fs";
|
|
4
|
+
import { resolve, relative } from "path";
|
|
5
|
+
export const readTool = {
|
|
6
|
+
name: "read",
|
|
7
|
+
capabilities: { reads: true, writes: false },
|
|
8
|
+
description: `Read the contents of a file or directory.
|
|
9
|
+
Supports reading files with optional line ranges.
|
|
10
|
+
When reading a directory, lists entries with types.
|
|
11
|
+
For large files, use the offset and limit parameters to read specific sections.`,
|
|
12
|
+
displayName: (args) => relative(process.cwd(), resolve(args.path)),
|
|
13
|
+
parameters: z.object({
|
|
14
|
+
path: z.string().describe("Absolute or relative path to the file or directory"),
|
|
15
|
+
offset: z.number().optional().describe("Starting line number (1-indexed)"),
|
|
16
|
+
limit: z.number().optional().describe("Maximum number of lines to read"),
|
|
17
|
+
}),
|
|
18
|
+
execute: async ({ path, offset, limit }) => {
|
|
19
|
+
const resolved = resolve(process.cwd(), path);
|
|
20
|
+
if (!existsSync(resolved)) {
|
|
21
|
+
return errorResult(`File not found: ${resolved}`);
|
|
22
|
+
}
|
|
23
|
+
const stat = statSync(resolved);
|
|
24
|
+
if (stat.isDirectory()) {
|
|
25
|
+
const entries = readdirSync(resolved, { withFileTypes: true });
|
|
26
|
+
const listing = entries.map(e => `${e.isDirectory() ? "📁" : "📄"} ${e.name}`).join("\n");
|
|
27
|
+
return textResult(`Directory: ${resolved}\n${listing}`);
|
|
28
|
+
}
|
|
29
|
+
if (stat.size > 1024 * 1024) {
|
|
30
|
+
return errorResult(`File too large (${(stat.size / 1024 / 1024).toFixed(1)} MB). Use offset/limit or grep instead.`);
|
|
31
|
+
}
|
|
32
|
+
const content = readFileSync(resolved, "utf-8");
|
|
33
|
+
const lines = content.split("\n");
|
|
34
|
+
const start = offset ? Math.max(0, offset - 1) : 0;
|
|
35
|
+
const end = limit ? Math.min(lines.length, start + limit) : lines.length;
|
|
36
|
+
const slice = lines.slice(start, end);
|
|
37
|
+
const result = slice.map((line, i) => {
|
|
38
|
+
const lineNum = start + i + 1;
|
|
39
|
+
return `${String(lineNum).padStart(4)} │ ${line}`;
|
|
40
|
+
}).join("\n");
|
|
41
|
+
const header = `${resolved} (${lines.length} lines)`;
|
|
42
|
+
if (start > 0 || end < lines.length) {
|
|
43
|
+
return textResult(`${header} [lines ${start + 1}-${end}]\n${result}`);
|
|
44
|
+
}
|
|
45
|
+
return textResult(`${header}\n${result}`);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/tools/shell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAyF3D,eAAO,MAAM,SAAS,EAAE,WAgMvB,CAAC"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { spawn } from "child_process";
|
|
3
|
+
import { getPlatformInfo } from "../utils/platform.js";
|
|
4
|
+
import { tmpdir } from "os";
|
|
5
|
+
import { join } from "path";
|
|
6
|
+
import { writeFileSync, mkdirSync, existsSync } from "fs";
|
|
7
|
+
const DEFAULT_TIMEOUT = 2 * 60 * 1000;
|
|
8
|
+
const MAX_OUTPUT_LINES = 2000;
|
|
9
|
+
const MAX_OUTPUT_BYTES = 50 * 1024;
|
|
10
|
+
const SIGKILL_GRACE_MS = 200;
|
|
11
|
+
const UPDATE_MIN_INTERVAL_MS = 100;
|
|
12
|
+
const PREVIEW_BYTES = 30_000;
|
|
13
|
+
function killProcess(pid) {
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
if (process.platform === "win32") {
|
|
16
|
+
const killer = spawn("taskkill", ["/pid", String(pid), "/f", "/t"], {
|
|
17
|
+
stdio: "ignore",
|
|
18
|
+
windowsHide: true,
|
|
19
|
+
});
|
|
20
|
+
killer.once("exit", () => resolve());
|
|
21
|
+
killer.once("error", () => resolve());
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
process.kill(-pid, "SIGTERM");
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// process already gone
|
|
29
|
+
}
|
|
30
|
+
const timer = setTimeout(() => {
|
|
31
|
+
try {
|
|
32
|
+
process.kill(-pid, "SIGKILL");
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// process already gone
|
|
36
|
+
}
|
|
37
|
+
resolve();
|
|
38
|
+
}, SIGKILL_GRACE_MS);
|
|
39
|
+
timer.unref();
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function tailText(text, maxLines, maxBytes) {
|
|
43
|
+
const lines = text.split("\n");
|
|
44
|
+
if (lines.length <= maxLines && Buffer.byteLength(text, "utf-8") <= maxBytes) {
|
|
45
|
+
return { text, cut: false };
|
|
46
|
+
}
|
|
47
|
+
const out = [];
|
|
48
|
+
let bytes = 0;
|
|
49
|
+
for (let i = lines.length - 1; i >= 0 && out.length < maxLines; i--) {
|
|
50
|
+
const size = Buffer.byteLength(lines[i], "utf-8") + (out.length > 0 ? 1 : 0);
|
|
51
|
+
if (bytes + size > maxBytes) {
|
|
52
|
+
if (out.length === 0) {
|
|
53
|
+
const buf = Buffer.from(lines[i], "utf-8");
|
|
54
|
+
let start = Math.max(0, buf.length - maxBytes);
|
|
55
|
+
while (start < buf.length && (buf[start] & 0xc0) === 0x80)
|
|
56
|
+
start++;
|
|
57
|
+
out.unshift(buf.subarray(start).toString("utf-8"));
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
out.unshift(lines[i]);
|
|
62
|
+
bytes += size;
|
|
63
|
+
}
|
|
64
|
+
return { text: out.join("\n"), cut: true };
|
|
65
|
+
}
|
|
66
|
+
function previewText(text) {
|
|
67
|
+
if (text.length <= PREVIEW_BYTES)
|
|
68
|
+
return text;
|
|
69
|
+
return "...\n\n" + text.slice(-PREVIEW_BYTES);
|
|
70
|
+
}
|
|
71
|
+
function truncationDir() {
|
|
72
|
+
const dir = join(tmpdir(), "spectra-truncation");
|
|
73
|
+
if (!existsSync(dir)) {
|
|
74
|
+
mkdirSync(dir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
return dir;
|
|
77
|
+
}
|
|
78
|
+
export const shellTool = {
|
|
79
|
+
name: "bash",
|
|
80
|
+
capabilities: { reads: true, writes: true },
|
|
81
|
+
description: `Execute shell commands on the user's system.
|
|
82
|
+
Supports any command available in the system shell.
|
|
83
|
+
Output streams in realtime while the command runs.
|
|
84
|
+
Returns stdout, stderr, exit code. Long output is truncated with the full content saved to a temp file.
|
|
85
|
+
Be careful with destructive commands — seek permission for rm -rf, sudo, etc.`,
|
|
86
|
+
displayName: (args) => args.command.split("\n")[0].slice(0, 60),
|
|
87
|
+
parameters: z.object({
|
|
88
|
+
command: z.string().describe("The shell command to execute"),
|
|
89
|
+
description: z.string().optional().describe("Brief description of what this command does"),
|
|
90
|
+
timeout: z.number().optional().describe("Timeout in milliseconds (default: 2 min, max: 10 min)"),
|
|
91
|
+
workdir: z.string().optional().describe("Working directory for the command"),
|
|
92
|
+
}),
|
|
93
|
+
execute: async ({ command, description, timeout, workdir }, ctx) => {
|
|
94
|
+
return new Promise((resolve) => {
|
|
95
|
+
const info = getPlatformInfo();
|
|
96
|
+
const isWindows = info.os === "windows";
|
|
97
|
+
const shell = info.shell;
|
|
98
|
+
const isPwsh = /^pwsh(\.exe)?$/i.test(shell) || /^powershell(\.exe)?$/i.test(shell);
|
|
99
|
+
const effectiveTimeout = Math.min(timeout ?? DEFAULT_TIMEOUT, 10 * 60 * 1000);
|
|
100
|
+
const onUpdate = ctx.onUpdate;
|
|
101
|
+
let proc;
|
|
102
|
+
if (isPwsh) {
|
|
103
|
+
proc = spawn(shell, ["-NoLogo", "-NoProfile", "-NonInteractive", "-Command", command], {
|
|
104
|
+
cwd: workdir || process.cwd(),
|
|
105
|
+
env: process.env,
|
|
106
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
107
|
+
windowsHide: true,
|
|
108
|
+
detached: false,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
proc = spawn(command, [], {
|
|
113
|
+
cwd: workdir || process.cwd(),
|
|
114
|
+
env: process.env,
|
|
115
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
116
|
+
windowsHide: true,
|
|
117
|
+
shell: isWindows ? shell : true,
|
|
118
|
+
detached: !isWindows,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
let stdout = "";
|
|
122
|
+
let stderr = "";
|
|
123
|
+
let killed = false;
|
|
124
|
+
let resolved = false;
|
|
125
|
+
let forceKillTimer;
|
|
126
|
+
let lastUpdate = 0;
|
|
127
|
+
const finalize = (result) => {
|
|
128
|
+
if (resolved)
|
|
129
|
+
return;
|
|
130
|
+
resolved = true;
|
|
131
|
+
if (forceKillTimer)
|
|
132
|
+
clearTimeout(forceKillTimer);
|
|
133
|
+
resolve(result);
|
|
134
|
+
};
|
|
135
|
+
const kill = () => {
|
|
136
|
+
if (killed)
|
|
137
|
+
return;
|
|
138
|
+
killed = true;
|
|
139
|
+
if (!proc.pid)
|
|
140
|
+
return;
|
|
141
|
+
killProcess(proc.pid);
|
|
142
|
+
forceKillTimer = setTimeout(() => {
|
|
143
|
+
// If the process still hasn't exited after grace, force-resolve
|
|
144
|
+
if (!resolved && (proc.exitCode === null && proc.signalCode === null)) {
|
|
145
|
+
try {
|
|
146
|
+
proc.kill("SIGKILL");
|
|
147
|
+
}
|
|
148
|
+
catch { /* ignore */ }
|
|
149
|
+
}
|
|
150
|
+
// Give a bit more time for the exit event to fire
|
|
151
|
+
setTimeout(() => {
|
|
152
|
+
if (!resolved) {
|
|
153
|
+
const combined = `${stdout}${stderr ? "\n" + stderr : ""}`;
|
|
154
|
+
const truncated = tailText(combined, MAX_OUTPUT_LINES, MAX_OUTPUT_BYTES);
|
|
155
|
+
finalize({
|
|
156
|
+
content: [{
|
|
157
|
+
type: "text",
|
|
158
|
+
text: truncated.text + "\n\n<shell_metadata>\nshell tool terminated command after exceeding timeout " + effectiveTimeout + " ms. If this command is expected to take longer, retry with a larger timeout value.\n</shell_metadata>",
|
|
159
|
+
}],
|
|
160
|
+
details: { exitCode: -1, command, truncated: truncated.cut },
|
|
161
|
+
isError: true,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}, 500);
|
|
165
|
+
}, 3100);
|
|
166
|
+
};
|
|
167
|
+
// Timeout
|
|
168
|
+
const timeoutId = setTimeout(() => kill(), effectiveTimeout);
|
|
169
|
+
// Abort signal
|
|
170
|
+
if (ctx.signal) {
|
|
171
|
+
if (ctx.signal.aborted) {
|
|
172
|
+
kill();
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
ctx.signal.addEventListener("abort", kill, { once: true });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Streams may not exist for some shell configurations
|
|
179
|
+
if (proc.stdout) {
|
|
180
|
+
proc.stdout.on("data", (chunk) => {
|
|
181
|
+
stdout += chunk.toString("utf-8");
|
|
182
|
+
if (onUpdate) {
|
|
183
|
+
const now = Date.now();
|
|
184
|
+
if (now - lastUpdate >= UPDATE_MIN_INTERVAL_MS) {
|
|
185
|
+
lastUpdate = now;
|
|
186
|
+
onUpdate({
|
|
187
|
+
content: [{ type: "text", text: previewText(stdout + (stderr ? "\n" + stderr : "")) }],
|
|
188
|
+
details: { exitCode: 0, command },
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
if (proc.stderr) {
|
|
195
|
+
proc.stderr.on("data", (chunk) => {
|
|
196
|
+
stderr += chunk.toString("utf-8");
|
|
197
|
+
if (onUpdate) {
|
|
198
|
+
const now = Date.now();
|
|
199
|
+
if (now - lastUpdate >= UPDATE_MIN_INTERVAL_MS) {
|
|
200
|
+
lastUpdate = now;
|
|
201
|
+
onUpdate({
|
|
202
|
+
content: [{ type: "text", text: previewText(stdout + (stderr ? "\n" + stderr : "")) }],
|
|
203
|
+
details: { exitCode: 0, command },
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
proc.once("exit", (code, signal) => {
|
|
210
|
+
clearTimeout(timeoutId);
|
|
211
|
+
if (ctx.signal) {
|
|
212
|
+
ctx.signal.removeEventListener("abort", kill);
|
|
213
|
+
}
|
|
214
|
+
if (onUpdate) {
|
|
215
|
+
const combined = stdout + (stderr ? "\n" + stderr : "");
|
|
216
|
+
onUpdate({
|
|
217
|
+
content: [{ type: "text", text: previewText(combined) }],
|
|
218
|
+
details: { exitCode: code ?? (signal ? 1 : 0), command },
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
const exitCode = code ?? (signal ? 1 : 0);
|
|
222
|
+
let output = stdout;
|
|
223
|
+
if (stderr)
|
|
224
|
+
output = output ? `${output}\n${stderr}` : stderr;
|
|
225
|
+
const truncated = tailText(output, MAX_OUTPUT_LINES, MAX_OUTPUT_BYTES);
|
|
226
|
+
let finalText = truncated.text || "(no output)";
|
|
227
|
+
if (truncated.cut) {
|
|
228
|
+
const dir = truncationDir();
|
|
229
|
+
const outputPath = join(dir, `shell_${Date.now()}_${Math.random().toString(36).slice(2, 8)}.txt`);
|
|
230
|
+
writeFileSync(outputPath, output, "utf-8");
|
|
231
|
+
finalText = `...output truncated...\n\nFull output saved to: ${outputPath}\n\n` + finalText;
|
|
232
|
+
finalize({
|
|
233
|
+
content: [{ type: "text", text: finalText }],
|
|
234
|
+
details: { exitCode, command, truncated: true, outputPath },
|
|
235
|
+
isError: exitCode !== 0,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
finalize({
|
|
240
|
+
content: [{ type: "text", text: finalText }],
|
|
241
|
+
details: { exitCode, command, truncated: false },
|
|
242
|
+
isError: exitCode !== 0,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
proc.once("error", (err) => {
|
|
247
|
+
clearTimeout(timeoutId);
|
|
248
|
+
if (ctx.signal) {
|
|
249
|
+
ctx.signal.removeEventListener("abort", kill);
|
|
250
|
+
}
|
|
251
|
+
const msg = err.message || "";
|
|
252
|
+
const prefix = `Command failed: ${command}\n`;
|
|
253
|
+
const prefixCr = `Command failed: ${command}\r\n`;
|
|
254
|
+
let clean = msg.startsWith(prefix) ? msg.slice(prefix.length)
|
|
255
|
+
: msg.startsWith(prefixCr) ? msg.slice(prefixCr.length)
|
|
256
|
+
: msg;
|
|
257
|
+
finalize({
|
|
258
|
+
content: [{ type: "text", text: clean }],
|
|
259
|
+
details: { exitCode: 1, command },
|
|
260
|
+
isError: true,
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/tools/task.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAyB9C,eAAO,MAAM,QAAQ,EAAE,WA8DtB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { textResult, errorResult } from "./utils.js";
|
|
3
|
+
import { AGENT_DEFINITIONS, SUBAGENTS, filterToolsByAgent } from "../agents/definitions.js";
|
|
4
|
+
import { AgentRegistry } from "../agents/registry.js";
|
|
5
|
+
import { getSystemPrompt } from "../utils/platform.js";
|
|
6
|
+
function descriptionForTaskTool() {
|
|
7
|
+
const subagentList = SUBAGENTS.map((name) => {
|
|
8
|
+
const def = AGENT_DEFINITIONS[name];
|
|
9
|
+
return `- **${name}**: ${def.description}`;
|
|
10
|
+
}).join("\n");
|
|
11
|
+
return `Launch a new agent to handle complex, multistep tasks autonomously.
|
|
12
|
+
|
|
13
|
+
When to use the Task tool:
|
|
14
|
+
${subagentList}
|
|
15
|
+
|
|
16
|
+
Usage notes:
|
|
17
|
+
1. Launch multiple agents concurrently whenever possible, to maximize performance
|
|
18
|
+
2. Each agent invocation starts with a fresh context
|
|
19
|
+
3. The agent's outputs should generally be trusted
|
|
20
|
+
4. Clearly tell the agent whether you expect it to write code or just to do research`;
|
|
21
|
+
}
|
|
22
|
+
export const taskTool = {
|
|
23
|
+
name: "task",
|
|
24
|
+
capabilities: { reads: false, writes: false },
|
|
25
|
+
description: descriptionForTaskTool(),
|
|
26
|
+
displayName: (args) => `@${args.subagent_type || "subagent"} ${args.description || ""}`.slice(0, 60),
|
|
27
|
+
parameters: z.object({
|
|
28
|
+
description: z.string().describe("A short (3-5 words) description of the task"),
|
|
29
|
+
prompt: z.string().describe("The task for the agent to perform"),
|
|
30
|
+
subagent_type: z.string().describe("The type of specialized agent to use for this task"),
|
|
31
|
+
}),
|
|
32
|
+
execute: async ({ description, prompt, subagent_type }, ctx) => {
|
|
33
|
+
const def = AGENT_DEFINITIONS[subagent_type];
|
|
34
|
+
if (!def) {
|
|
35
|
+
const available = SUBAGENTS.join(", ");
|
|
36
|
+
return errorResult(`Unknown subagent "${subagent_type}". Available: ${available}`);
|
|
37
|
+
}
|
|
38
|
+
if (def.mode !== "subagent") {
|
|
39
|
+
return errorResult(`"${subagent_type}" is a primary agent, not a subagent. Available subagents: ${SUBAGENTS.join(", ")}`);
|
|
40
|
+
}
|
|
41
|
+
const config = AgentRegistry.getConfig();
|
|
42
|
+
if (!config) {
|
|
43
|
+
return errorResult("Task tool: no agent config available");
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const { Agent } = await import("@mohanscodex/spectra-agent");
|
|
47
|
+
const { createAllTools, spectraToolToAgentTool } = await import("./index.js");
|
|
48
|
+
const allTools = createAllTools().map((t) => spectraToolToAgentTool(t));
|
|
49
|
+
const tools = filterToolsByAgent(allTools, subagent_type);
|
|
50
|
+
const subagent = new Agent({
|
|
51
|
+
model: config.model,
|
|
52
|
+
systemPrompt: [getSystemPrompt(), def.prompt].filter(Boolean).join("\n\n"),
|
|
53
|
+
tools,
|
|
54
|
+
maxTurns: def.maxTurns,
|
|
55
|
+
getApiKey: config.getApiKey,
|
|
56
|
+
});
|
|
57
|
+
let finalText = "";
|
|
58
|
+
for await (const ev of subagent.run(prompt)) {
|
|
59
|
+
if (ev.type === "message_update" && ev.message.role === "assistant") {
|
|
60
|
+
const textBlocks = ev.message.content.filter((c) => c.type === "text");
|
|
61
|
+
finalText = textBlocks.map((b) => b.text).join("");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const resultText = finalText.trim();
|
|
65
|
+
if (!resultText) {
|
|
66
|
+
return textResult(`Subagent @${subagent_type} completed with no text output.`);
|
|
67
|
+
}
|
|
68
|
+
return textResult(resultText);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
return errorResult(`Subagent @${subagent_type} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/tools/task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { ToolResult, ToolUpdateCallback } from "@mohanscodex/spectra-agent";
|
|
3
|
+
import type { ToolCapabilities } from "../security/types.js";
|
|
4
|
+
export interface SpectraTool<TArgs extends z.ZodType = z.ZodType> {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
displayName?: string | ((args: z.infer<TArgs>, result: ToolResult) => string);
|
|
8
|
+
parameters: TArgs;
|
|
9
|
+
promptGuidelines?: string[];
|
|
10
|
+
capabilities?: ToolCapabilities;
|
|
11
|
+
execute: (args: z.infer<TArgs>, context: ToolContext) => Promise<ToolResult>;
|
|
12
|
+
}
|
|
13
|
+
export type ToolContext = {
|
|
14
|
+
toolCallId: string;
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
onUpdate?: ToolUpdateCallback;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,WAAW,CAAC,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,KAAK,MAAM,CAAC,CAAC;IAC9E,UAAU,EAAE,KAAK,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,OAAO,EAAE,CACP,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EACpB,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1B;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tools/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAKvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tools/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAoC,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAoC,CAAC;QAC5E,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../../src/tools/web-fetch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,eAAO,MAAM,YAAY,EAAE,WAuD1B,CAAC"}
|