@wingman-ai/gateway 0.5.3 → 0.5.4
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/dist/agent/config/agentConfig.cjs +4 -0
- package/dist/agent/config/agentConfig.d.ts +12 -0
- package/dist/agent/config/agentConfig.js +4 -0
- package/dist/agent/config/toolRegistry.cjs +75 -1
- package/dist/agent/config/toolRegistry.d.ts +3 -0
- package/dist/agent/config/toolRegistry.js +75 -1
- package/dist/agent/middleware/large-tool-results.cjs +207 -0
- package/dist/agent/middleware/large-tool-results.d.ts +16 -0
- package/dist/agent/middleware/large-tool-results.js +173 -0
- package/dist/agent/tools/browser_control.cjs +9 -1231
- package/dist/agent/tools/browser_control.d.ts +126 -234
- package/dist/agent/tools/browser_control.js +7 -1226
- package/dist/agent/tools/browser_runtime.cjs +1189 -0
- package/dist/agent/tools/browser_runtime.d.ts +560 -0
- package/dist/agent/tools/browser_runtime.js +1122 -0
- package/dist/agent/tools/browser_session.cjs +153 -0
- package/dist/agent/tools/browser_session.d.ts +741 -0
- package/dist/agent/tools/browser_session.js +110 -0
- package/dist/agent/tools/browser_session_manager.cjs +202 -0
- package/dist/agent/tools/browser_session_manager.d.ts +64 -0
- package/dist/agent/tools/browser_session_manager.js +165 -0
- package/dist/cli/commands/init.cjs +5 -1
- package/dist/cli/commands/init.js +5 -1
- package/dist/cli/config/loader.cjs +0 -5
- package/dist/cli/config/loader.js +0 -5
- package/dist/cli/config/schema.cjs +3 -7
- package/dist/cli/config/schema.d.ts +6 -6
- package/dist/cli/config/schema.js +3 -7
- package/dist/cli/core/agentInvoker.cjs +86 -22
- package/dist/cli/core/agentInvoker.d.ts +10 -3
- package/dist/cli/core/agentInvoker.js +86 -25
- package/dist/cli/core/outputManager.cjs +7 -2
- package/dist/cli/core/outputManager.d.ts +2 -2
- package/dist/cli/core/outputManager.js +7 -2
- package/dist/cli/types.d.ts +2 -1
- package/dist/webui/assets/index-XrEnkZiq.css +11 -0
- package/dist/webui/assets/index-mDs6HbKM.js +215 -0
- package/dist/webui/index.html +2 -2
- package/package.json +10 -10
- package/templates/agents/README.md +2 -1
- package/templates/agents/coding/agent.md +6 -13
- package/templates/agents/coding-v2/agent.md +6 -1
- package/templates/agents/game-dev/agent.md +8 -2
- package/templates/agents/game-dev/game-designer.md +4 -0
- package/templates/agents/game-dev/scene-engineer.md +4 -0
- package/templates/agents/main/agent.md +5 -0
- package/templates/agents/researcher/agent.md +11 -0
- package/templates/agents/stock-trader/agent.md +4 -0
- package/dist/agent/tests/agentConfig.test.cjs +0 -224
- package/dist/agent/tests/agentConfig.test.d.ts +0 -1
- package/dist/agent/tests/agentConfig.test.js +0 -218
- package/dist/agent/tests/agentLoader.test.cjs +0 -335
- package/dist/agent/tests/agentLoader.test.d.ts +0 -1
- package/dist/agent/tests/agentLoader.test.js +0 -329
- package/dist/agent/tests/backgroundTerminal.test.cjs +0 -70
- package/dist/agent/tests/backgroundTerminal.test.d.ts +0 -1
- package/dist/agent/tests/backgroundTerminal.test.js +0 -64
- package/dist/agent/tests/browserControlHelpers.test.cjs +0 -35
- package/dist/agent/tests/browserControlHelpers.test.d.ts +0 -1
- package/dist/agent/tests/browserControlHelpers.test.js +0 -29
- package/dist/agent/tests/browserControlTool.test.cjs +0 -2117
- package/dist/agent/tests/browserControlTool.test.d.ts +0 -1
- package/dist/agent/tests/browserControlTool.test.js +0 -2111
- package/dist/agent/tests/commandExecuteTool.test.cjs +0 -29
- package/dist/agent/tests/commandExecuteTool.test.d.ts +0 -1
- package/dist/agent/tests/commandExecuteTool.test.js +0 -23
- package/dist/agent/tests/internet_search.test.cjs +0 -107
- package/dist/agent/tests/internet_search.test.d.ts +0 -1
- package/dist/agent/tests/internet_search.test.js +0 -101
- package/dist/agent/tests/mcpClientManager.test.cjs +0 -290
- package/dist/agent/tests/mcpClientManager.test.d.ts +0 -1
- package/dist/agent/tests/mcpClientManager.test.js +0 -284
- package/dist/agent/tests/mcpResourceTools.test.cjs +0 -101
- package/dist/agent/tests/mcpResourceTools.test.d.ts +0 -1
- package/dist/agent/tests/mcpResourceTools.test.js +0 -95
- package/dist/agent/tests/modelFactory.test.cjs +0 -190
- package/dist/agent/tests/modelFactory.test.d.ts +0 -1
- package/dist/agent/tests/modelFactory.test.js +0 -184
- package/dist/agent/tests/terminalSessionManager.test.cjs +0 -121
- package/dist/agent/tests/terminalSessionManager.test.d.ts +0 -1
- package/dist/agent/tests/terminalSessionManager.test.js +0 -115
- package/dist/agent/tests/test-agent-loader.cjs +0 -33
- package/dist/agent/tests/test-agent-loader.d.ts +0 -1
- package/dist/agent/tests/test-agent-loader.js +0 -27
- package/dist/agent/tests/test-subagent-loading.cjs +0 -99
- package/dist/agent/tests/test-subagent-loading.d.ts +0 -1
- package/dist/agent/tests/test-subagent-loading.js +0 -93
- package/dist/agent/tests/toolRegistry.test.cjs +0 -147
- package/dist/agent/tests/toolRegistry.test.d.ts +0 -1
- package/dist/agent/tests/toolRegistry.test.js +0 -141
- package/dist/agent/tests/uiRegistryTools.test.cjs +0 -114
- package/dist/agent/tests/uiRegistryTools.test.d.ts +0 -1
- package/dist/agent/tests/uiRegistryTools.test.js +0 -105
- package/dist/agent/tests/xaiImageModel.test.cjs +0 -194
- package/dist/agent/tests/xaiImageModel.test.d.ts +0 -1
- package/dist/agent/tests/xaiImageModel.test.js +0 -188
- package/dist/tests/additionalMessageMiddleware.test.cjs +0 -216
- package/dist/tests/additionalMessageMiddleware.test.d.ts +0 -1
- package/dist/tests/additionalMessageMiddleware.test.js +0 -188
- package/dist/tests/agent-config-voice.test.cjs +0 -25
- package/dist/tests/agent-config-voice.test.d.ts +0 -1
- package/dist/tests/agent-config-voice.test.js +0 -19
- package/dist/tests/agentInvokerAttachments.test.cjs +0 -190
- package/dist/tests/agentInvokerAttachments.test.d.ts +0 -1
- package/dist/tests/agentInvokerAttachments.test.js +0 -184
- package/dist/tests/agentInvokerSummarization.test.cjs +0 -613
- package/dist/tests/agentInvokerSummarization.test.d.ts +0 -1
- package/dist/tests/agentInvokerSummarization.test.js +0 -607
- package/dist/tests/agentInvokerTokenUsage.test.cjs +0 -124
- package/dist/tests/agentInvokerTokenUsage.test.d.ts +0 -1
- package/dist/tests/agentInvokerTokenUsage.test.js +0 -118
- package/dist/tests/agentInvokerWorkdir.test.cjs +0 -150
- package/dist/tests/agentInvokerWorkdir.test.d.ts +0 -1
- package/dist/tests/agentInvokerWorkdir.test.js +0 -122
- package/dist/tests/agents-api.test.cjs +0 -324
- package/dist/tests/agents-api.test.d.ts +0 -1
- package/dist/tests/agents-api.test.js +0 -318
- package/dist/tests/attachments-utils.test.cjs +0 -46
- package/dist/tests/attachments-utils.test.d.ts +0 -1
- package/dist/tests/attachments-utils.test.js +0 -40
- package/dist/tests/browser-command.test.cjs +0 -264
- package/dist/tests/browser-command.test.d.ts +0 -1
- package/dist/tests/browser-command.test.js +0 -258
- package/dist/tests/browser-relay-server.test.cjs +0 -20
- package/dist/tests/browser-relay-server.test.d.ts +0 -1
- package/dist/tests/browser-relay-server.test.js +0 -14
- package/dist/tests/bunSqliteAdapter.test.cjs +0 -265
- package/dist/tests/bunSqliteAdapter.test.d.ts +0 -1
- package/dist/tests/bunSqliteAdapter.test.js +0 -259
- package/dist/tests/candleRange.test.cjs +0 -48
- package/dist/tests/candleRange.test.d.ts +0 -1
- package/dist/tests/candleRange.test.js +0 -42
- package/dist/tests/cli-config-loader.test.cjs +0 -532
- package/dist/tests/cli-config-loader.test.d.ts +0 -1
- package/dist/tests/cli-config-loader.test.js +0 -526
- package/dist/tests/cli-config-warnings.test.cjs +0 -94
- package/dist/tests/cli-config-warnings.test.d.ts +0 -1
- package/dist/tests/cli-config-warnings.test.js +0 -88
- package/dist/tests/cli-init.test.cjs +0 -225
- package/dist/tests/cli-init.test.d.ts +0 -1
- package/dist/tests/cli-init.test.js +0 -219
- package/dist/tests/cli-workspace-root.test.cjs +0 -114
- package/dist/tests/cli-workspace-root.test.d.ts +0 -1
- package/dist/tests/cli-workspace-root.test.js +0 -108
- package/dist/tests/codex-credentials-precedence.test.cjs +0 -94
- package/dist/tests/codex-credentials-precedence.test.d.ts +0 -1
- package/dist/tests/codex-credentials-precedence.test.js +0 -88
- package/dist/tests/codex-provider.test.cjs +0 -383
- package/dist/tests/codex-provider.test.d.ts +0 -1
- package/dist/tests/codex-provider.test.js +0 -377
- package/dist/tests/config-json-schema.test.cjs +0 -37
- package/dist/tests/config-json-schema.test.d.ts +0 -1
- package/dist/tests/config-json-schema.test.js +0 -31
- package/dist/tests/discord-adapter.test.cjs +0 -89
- package/dist/tests/discord-adapter.test.d.ts +0 -1
- package/dist/tests/discord-adapter.test.js +0 -83
- package/dist/tests/falRuntime.test.cjs +0 -78
- package/dist/tests/falRuntime.test.d.ts +0 -1
- package/dist/tests/falRuntime.test.js +0 -72
- package/dist/tests/falSummary.test.cjs +0 -51
- package/dist/tests/falSummary.test.d.ts +0 -1
- package/dist/tests/falSummary.test.js +0 -45
- package/dist/tests/fs-api.test.cjs +0 -138
- package/dist/tests/fs-api.test.d.ts +0 -1
- package/dist/tests/fs-api.test.js +0 -132
- package/dist/tests/gateway-command-workspace.test.cjs +0 -150
- package/dist/tests/gateway-command-workspace.test.d.ts +0 -1
- package/dist/tests/gateway-command-workspace.test.js +0 -144
- package/dist/tests/gateway-http-security.test.cjs +0 -318
- package/dist/tests/gateway-http-security.test.d.ts +0 -1
- package/dist/tests/gateway-http-security.test.js +0 -312
- package/dist/tests/gateway-node-mode.test.cjs +0 -174
- package/dist/tests/gateway-node-mode.test.d.ts +0 -1
- package/dist/tests/gateway-node-mode.test.js +0 -168
- package/dist/tests/gateway-origin-policy.test.cjs +0 -82
- package/dist/tests/gateway-origin-policy.test.d.ts +0 -1
- package/dist/tests/gateway-origin-policy.test.js +0 -76
- package/dist/tests/gateway-request-execution-overrides.test.cjs +0 -42
- package/dist/tests/gateway-request-execution-overrides.test.d.ts +0 -1
- package/dist/tests/gateway-request-execution-overrides.test.js +0 -36
- package/dist/tests/gateway.test.cjs +0 -700
- package/dist/tests/gateway.test.d.ts +0 -1
- package/dist/tests/gateway.test.js +0 -694
- package/dist/tests/hooks-matcher.test.cjs +0 -309
- package/dist/tests/hooks-matcher.test.d.ts +0 -1
- package/dist/tests/hooks-matcher.test.js +0 -303
- package/dist/tests/hooks-merger.test.cjs +0 -528
- package/dist/tests/hooks-merger.test.d.ts +0 -1
- package/dist/tests/hooks-merger.test.js +0 -522
- package/dist/tests/imagePersistence.test.cjs +0 -169
- package/dist/tests/imagePersistence.test.d.ts +0 -1
- package/dist/tests/imagePersistence.test.js +0 -163
- package/dist/tests/integration/agent-invocation.integration.test.cjs +0 -264
- package/dist/tests/integration/agent-invocation.integration.test.d.ts +0 -1
- package/dist/tests/integration/agent-invocation.integration.test.js +0 -258
- package/dist/tests/integration/finnhub-candles.integration.test.cjs +0 -98
- package/dist/tests/integration/finnhub-candles.integration.test.d.ts +0 -1
- package/dist/tests/integration/finnhub-candles.integration.test.js +0 -92
- package/dist/tests/integration/summarization-e2e.integration.test.cjs +0 -127
- package/dist/tests/integration/summarization-e2e.integration.test.d.ts +0 -1
- package/dist/tests/integration/summarization-e2e.integration.test.js +0 -121
- package/dist/tests/logger.test.cjs +0 -353
- package/dist/tests/logger.test.d.ts +0 -1
- package/dist/tests/logger.test.js +0 -347
- package/dist/tests/mediaCompatibilityMiddleware.test.cjs +0 -106
- package/dist/tests/mediaCompatibilityMiddleware.test.d.ts +0 -1
- package/dist/tests/mediaCompatibilityMiddleware.test.js +0 -100
- package/dist/tests/node-tools.test.cjs +0 -77
- package/dist/tests/node-tools.test.d.ts +0 -1
- package/dist/tests/node-tools.test.js +0 -71
- package/dist/tests/nodes-api.test.cjs +0 -86
- package/dist/tests/nodes-api.test.d.ts +0 -1
- package/dist/tests/nodes-api.test.js +0 -80
- package/dist/tests/outputManagerContextSummarized.test.cjs +0 -43
- package/dist/tests/outputManagerContextSummarized.test.d.ts +0 -1
- package/dist/tests/outputManagerContextSummarized.test.js +0 -37
- package/dist/tests/provider-command-codex.test.cjs +0 -57
- package/dist/tests/provider-command-codex.test.d.ts +0 -1
- package/dist/tests/provider-command-codex.test.js +0 -51
- package/dist/tests/routines-api.test.cjs +0 -107
- package/dist/tests/routines-api.test.d.ts +0 -1
- package/dist/tests/routines-api.test.js +0 -101
- package/dist/tests/run-terminal-bench-official-script.test.cjs +0 -61
- package/dist/tests/run-terminal-bench-official-script.test.d.ts +0 -1
- package/dist/tests/run-terminal-bench-official-script.test.js +0 -55
- package/dist/tests/sessionManager-uionly.test.cjs +0 -50
- package/dist/tests/sessionManager-uionly.test.d.ts +0 -1
- package/dist/tests/sessionManager-uionly.test.js +0 -44
- package/dist/tests/sessionMessageAttachments.test.cjs +0 -197
- package/dist/tests/sessionMessageAttachments.test.d.ts +0 -1
- package/dist/tests/sessionMessageAttachments.test.js +0 -191
- package/dist/tests/sessionMessageRole.test.cjs +0 -44
- package/dist/tests/sessionMessageRole.test.d.ts +0 -1
- package/dist/tests/sessionMessageRole.test.js +0 -38
- package/dist/tests/sessionStateMessages.test.cjs +0 -236
- package/dist/tests/sessionStateMessages.test.d.ts +0 -1
- package/dist/tests/sessionStateMessages.test.js +0 -230
- package/dist/tests/sessions-api.test.cjs +0 -250
- package/dist/tests/sessions-api.test.d.ts +0 -1
- package/dist/tests/sessions-api.test.js +0 -244
- package/dist/tests/skill-activation.test.cjs +0 -86
- package/dist/tests/skill-activation.test.d.ts +0 -1
- package/dist/tests/skill-activation.test.js +0 -80
- package/dist/tests/skill-metadata.test.cjs +0 -119
- package/dist/tests/skill-metadata.test.d.ts +0 -1
- package/dist/tests/skill-metadata.test.js +0 -113
- package/dist/tests/skill-repository.test.cjs +0 -469
- package/dist/tests/skill-repository.test.d.ts +0 -1
- package/dist/tests/skill-repository.test.js +0 -463
- package/dist/tests/skill-security-scanner.test.cjs +0 -126
- package/dist/tests/skill-security-scanner.test.d.ts +0 -1
- package/dist/tests/skill-security-scanner.test.js +0 -120
- package/dist/tests/sms-api.test.cjs +0 -183
- package/dist/tests/sms-api.test.d.ts +0 -1
- package/dist/tests/sms-api.test.js +0 -177
- package/dist/tests/sms-commands.test.cjs +0 -90
- package/dist/tests/sms-commands.test.d.ts +0 -1
- package/dist/tests/sms-commands.test.js +0 -84
- package/dist/tests/sms-policy-store.test.cjs +0 -69
- package/dist/tests/sms-policy-store.test.d.ts +0 -1
- package/dist/tests/sms-policy-store.test.js +0 -63
- package/dist/tests/teams-adapter.test.cjs +0 -58
- package/dist/tests/teams-adapter.test.d.ts +0 -1
- package/dist/tests/teams-adapter.test.js +0 -52
- package/dist/tests/technicalIndicators.test.cjs +0 -82
- package/dist/tests/technicalIndicators.test.d.ts +0 -1
- package/dist/tests/technicalIndicators.test.js +0 -76
- package/dist/tests/terminal-bench-adapters-helpers.test.cjs +0 -64
- package/dist/tests/terminal-bench-adapters-helpers.test.d.ts +0 -1
- package/dist/tests/terminal-bench-adapters-helpers.test.js +0 -58
- package/dist/tests/terminal-bench-cleanup.test.cjs +0 -93
- package/dist/tests/terminal-bench-cleanup.test.d.ts +0 -1
- package/dist/tests/terminal-bench-cleanup.test.js +0 -87
- package/dist/tests/terminal-bench-config.test.cjs +0 -62
- package/dist/tests/terminal-bench-config.test.d.ts +0 -1
- package/dist/tests/terminal-bench-config.test.js +0 -56
- package/dist/tests/terminal-bench-official.test.cjs +0 -194
- package/dist/tests/terminal-bench-official.test.d.ts +0 -1
- package/dist/tests/terminal-bench-official.test.js +0 -188
- package/dist/tests/terminal-bench-runner.test.cjs +0 -82
- package/dist/tests/terminal-bench-runner.test.d.ts +0 -1
- package/dist/tests/terminal-bench-runner.test.js +0 -76
- package/dist/tests/terminal-bench-scoring.test.cjs +0 -128
- package/dist/tests/terminal-bench-scoring.test.d.ts +0 -1
- package/dist/tests/terminal-bench-scoring.test.js +0 -122
- package/dist/tests/terminalProbe.test.cjs +0 -45
- package/dist/tests/terminalProbe.test.d.ts +0 -1
- package/dist/tests/terminalProbe.test.js +0 -39
- package/dist/tests/terminalProbeAuth.test.cjs +0 -85
- package/dist/tests/terminalProbeAuth.test.d.ts +0 -1
- package/dist/tests/terminalProbeAuth.test.js +0 -79
- package/dist/tests/toolDisplayHelpers.test.cjs +0 -46
- package/dist/tests/toolDisplayHelpers.test.d.ts +0 -1
- package/dist/tests/toolDisplayHelpers.test.js +0 -40
- package/dist/tests/uv.test.cjs +0 -47
- package/dist/tests/uv.test.d.ts +0 -1
- package/dist/tests/uv.test.js +0 -41
- package/dist/tests/voice-config.test.cjs +0 -35
- package/dist/tests/voice-config.test.d.ts +0 -1
- package/dist/tests/voice-config.test.js +0 -29
- package/dist/tests/websocket-transport.test.cjs +0 -31
- package/dist/tests/websocket-transport.test.d.ts +0 -1
- package/dist/tests/websocket-transport.test.js +0 -25
- package/dist/tests/yahooCandles.test.cjs +0 -111
- package/dist/tests/yahooCandles.test.d.ts +0 -1
- package/dist/tests/yahooCandles.test.js +0 -105
- package/dist/tools/finance/optionsAnalytics.test.cjs +0 -128
- package/dist/tools/finance/optionsAnalytics.test.d.ts +0 -1
- package/dist/tools/finance/optionsAnalytics.test.js +0 -122
- package/dist/webui/assets/index-BMf95nv5.js +0 -215
- package/dist/webui/assets/index-DhJQ8Mbn.css +0 -11
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { AgentConfigSchema, validateAgentConfig } from "../config/agentConfig.js";
|
|
3
|
-
describe("Agent Configuration Schema", ()=>{
|
|
4
|
-
describe("validateAgentConfig", ()=>{
|
|
5
|
-
it("should validate a valid minimal agent config", ()=>{
|
|
6
|
-
const config = {
|
|
7
|
-
name: "test-agent",
|
|
8
|
-
description: "A test agent",
|
|
9
|
-
systemPrompt: "You are a test agent"
|
|
10
|
-
};
|
|
11
|
-
const result = validateAgentConfig(config);
|
|
12
|
-
expect(result.success).toBe(true);
|
|
13
|
-
if (result.success) {
|
|
14
|
-
expect(result.data.name).toBe("test-agent");
|
|
15
|
-
expect(result.data.description).toBe("A test agent");
|
|
16
|
-
expect(result.data.systemPrompt).toBe("You are a test agent");
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
it("should validate a complete agent config with all fields", ()=>{
|
|
20
|
-
const config = {
|
|
21
|
-
name: "data-analyst",
|
|
22
|
-
description: "Analyzes data",
|
|
23
|
-
systemPrompt: "You are a data analyst",
|
|
24
|
-
tools: [
|
|
25
|
-
"command_execute",
|
|
26
|
-
"think"
|
|
27
|
-
],
|
|
28
|
-
model: "anthropic:claude-opus-4-5",
|
|
29
|
-
reasoningEffort: "high",
|
|
30
|
-
blockedCommands: [
|
|
31
|
-
"rm",
|
|
32
|
-
"mv"
|
|
33
|
-
],
|
|
34
|
-
allowScriptExecution: true,
|
|
35
|
-
commandTimeout: 300000,
|
|
36
|
-
browserProfile: "trading",
|
|
37
|
-
browserTransport: "relay"
|
|
38
|
-
};
|
|
39
|
-
const result = validateAgentConfig(config);
|
|
40
|
-
expect(result.success).toBe(true);
|
|
41
|
-
if (result.success) {
|
|
42
|
-
expect(result.data.tools).toEqual([
|
|
43
|
-
"command_execute",
|
|
44
|
-
"think"
|
|
45
|
-
]);
|
|
46
|
-
expect(result.data.model).toBe("anthropic:claude-opus-4-5");
|
|
47
|
-
expect(result.data.reasoningEffort).toBe("high");
|
|
48
|
-
expect(result.data.blockedCommands).toEqual([
|
|
49
|
-
"rm",
|
|
50
|
-
"mv"
|
|
51
|
-
]);
|
|
52
|
-
expect(result.data.allowScriptExecution).toBe(true);
|
|
53
|
-
expect(result.data.commandTimeout).toBe(300000);
|
|
54
|
-
expect(result.data.browserProfile).toBe("trading");
|
|
55
|
-
expect(result.data.browserTransport).toBe("relay");
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
it("should allow subagents to override models", ()=>{
|
|
59
|
-
const config = {
|
|
60
|
-
name: "parent-agent",
|
|
61
|
-
description: "Parent agent",
|
|
62
|
-
systemPrompt: "You are the parent agent",
|
|
63
|
-
subAgents: [
|
|
64
|
-
{
|
|
65
|
-
name: "research-agent",
|
|
66
|
-
description: "Researches topics",
|
|
67
|
-
systemPrompt: "You are a researcher",
|
|
68
|
-
model: "openai:gpt-4o",
|
|
69
|
-
reasoningEffort: "low"
|
|
70
|
-
}
|
|
71
|
-
]
|
|
72
|
-
};
|
|
73
|
-
const result = validateAgentConfig(config);
|
|
74
|
-
expect(result.success).toBe(true);
|
|
75
|
-
if (result.success) {
|
|
76
|
-
expect(result.data.subAgents?.[0].model).toBe("openai:gpt-4o");
|
|
77
|
-
expect(result.data.subAgents?.[0].reasoningEffort).toBe("low");
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
it("should fail when a sub-agent shares the same name as its parent", ()=>{
|
|
81
|
-
const config = {
|
|
82
|
-
name: "coding",
|
|
83
|
-
description: "Parent coding agent",
|
|
84
|
-
systemPrompt: "You are the parent coding agent",
|
|
85
|
-
subAgents: [
|
|
86
|
-
{
|
|
87
|
-
name: "coding",
|
|
88
|
-
description: "Nested coding worker",
|
|
89
|
-
systemPrompt: "You are a worker"
|
|
90
|
-
}
|
|
91
|
-
]
|
|
92
|
-
};
|
|
93
|
-
const result = validateAgentConfig(config);
|
|
94
|
-
expect(result.success).toBe(false);
|
|
95
|
-
if (!result.success) expect(result.error).toContain("Sub-agent name must be different from parent agent name");
|
|
96
|
-
});
|
|
97
|
-
it("should fail when sub-agent names are duplicated", ()=>{
|
|
98
|
-
const config = {
|
|
99
|
-
name: "parent-agent",
|
|
100
|
-
description: "Parent agent",
|
|
101
|
-
systemPrompt: "You are the parent agent",
|
|
102
|
-
subAgents: [
|
|
103
|
-
{
|
|
104
|
-
name: "implementor",
|
|
105
|
-
description: "First implementor",
|
|
106
|
-
systemPrompt: "You implement changes"
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
name: "IMPLEMENTOR",
|
|
110
|
-
description: "Duplicate implementor",
|
|
111
|
-
systemPrompt: "You implement more changes"
|
|
112
|
-
}
|
|
113
|
-
]
|
|
114
|
-
};
|
|
115
|
-
const result = validateAgentConfig(config);
|
|
116
|
-
expect(result.success).toBe(false);
|
|
117
|
-
if (!result.success) expect(result.error).toContain("Sub-agent names must be unique within the same parent agent");
|
|
118
|
-
});
|
|
119
|
-
it("should fail validation for missing required fields", ()=>{
|
|
120
|
-
const config = {
|
|
121
|
-
name: "test-agent"
|
|
122
|
-
};
|
|
123
|
-
const result = validateAgentConfig(config);
|
|
124
|
-
expect(result.success).toBe(false);
|
|
125
|
-
if (!result.success) {
|
|
126
|
-
expect(result.error).toContain("description");
|
|
127
|
-
expect(result.error).toContain("systemPrompt");
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
it("should fail validation for invalid tool names", ()=>{
|
|
131
|
-
const config = {
|
|
132
|
-
name: "test-agent",
|
|
133
|
-
description: "Test",
|
|
134
|
-
systemPrompt: "Test",
|
|
135
|
-
tools: [
|
|
136
|
-
"invalid_tool"
|
|
137
|
-
]
|
|
138
|
-
};
|
|
139
|
-
const result = validateAgentConfig(config);
|
|
140
|
-
expect(result.success).toBe(false);
|
|
141
|
-
});
|
|
142
|
-
it("should fail validation for invalid reasoning effort", ()=>{
|
|
143
|
-
const config = {
|
|
144
|
-
name: "test-agent",
|
|
145
|
-
description: "Test",
|
|
146
|
-
systemPrompt: "Test",
|
|
147
|
-
reasoningEffort: "extreme"
|
|
148
|
-
};
|
|
149
|
-
const result = validateAgentConfig(config);
|
|
150
|
-
expect(result.success).toBe(false);
|
|
151
|
-
if (!result.success) expect(result.error).toContain("reasoningEffort");
|
|
152
|
-
});
|
|
153
|
-
it("should apply default values for optional fields", ()=>{
|
|
154
|
-
const config = {
|
|
155
|
-
name: "test-agent",
|
|
156
|
-
description: "Test",
|
|
157
|
-
systemPrompt: "Test"
|
|
158
|
-
};
|
|
159
|
-
const parsed = AgentConfigSchema.parse(config);
|
|
160
|
-
expect(parsed.allowScriptExecution).toBe(true);
|
|
161
|
-
expect(parsed.commandTimeout).toBe(300000);
|
|
162
|
-
});
|
|
163
|
-
it("should accept prompt refinement configuration", ()=>{
|
|
164
|
-
const config = {
|
|
165
|
-
name: "refiner",
|
|
166
|
-
description: "Refines its prompt",
|
|
167
|
-
systemPrompt: "You are a refiner",
|
|
168
|
-
promptRefinement: true
|
|
169
|
-
};
|
|
170
|
-
const result = validateAgentConfig(config);
|
|
171
|
-
expect(result.success).toBe(true);
|
|
172
|
-
if (result.success) expect(result.data.promptRefinement?.enabled).toBe(true);
|
|
173
|
-
const configWithPath = {
|
|
174
|
-
name: "refiner-2",
|
|
175
|
-
description: "Refines its prompt with path",
|
|
176
|
-
systemPrompt: "You are a refiner",
|
|
177
|
-
promptRefinement: {
|
|
178
|
-
instructionsPath: "/memories/agents/refiner-2/instructions.md"
|
|
179
|
-
}
|
|
180
|
-
};
|
|
181
|
-
const resultWithPath = validateAgentConfig(configWithPath);
|
|
182
|
-
expect(resultWithPath.success).toBe(true);
|
|
183
|
-
if (resultWithPath.success) {
|
|
184
|
-
expect(resultWithPath.data.promptRefinement?.instructionsPath).toBe("/memories/agents/refiner-2/instructions.md");
|
|
185
|
-
expect(resultWithPath.data.promptRefinement?.enabled).toBe(true);
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe("Tool names enum", ()=>{
|
|
190
|
-
it("should accept all valid tool names", ()=>{
|
|
191
|
-
const validTools = [
|
|
192
|
-
"internet_search",
|
|
193
|
-
"web_crawler",
|
|
194
|
-
"browser_control",
|
|
195
|
-
"command_execute",
|
|
196
|
-
"background_terminal",
|
|
197
|
-
"think",
|
|
198
|
-
"code_search",
|
|
199
|
-
"git_status",
|
|
200
|
-
"ui_registry_list",
|
|
201
|
-
"ui_registry_get",
|
|
202
|
-
"ui_present"
|
|
203
|
-
];
|
|
204
|
-
for (const tool of validTools){
|
|
205
|
-
const config = {
|
|
206
|
-
name: "test",
|
|
207
|
-
description: "test",
|
|
208
|
-
systemPrompt: "test",
|
|
209
|
-
tools: [
|
|
210
|
-
tool
|
|
211
|
-
]
|
|
212
|
-
};
|
|
213
|
-
const result = validateAgentConfig(config);
|
|
214
|
-
expect(result.success).toBe(true);
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
});
|
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __webpack_exports__ = {};
|
|
3
|
-
const external_node_fs_namespaceObject = require("node:fs");
|
|
4
|
-
const external_node_path_namespaceObject = require("node:path");
|
|
5
|
-
const external_vitest_namespaceObject = require("vitest");
|
|
6
|
-
const agentLoader_cjs_namespaceObject = require("../config/agentLoader.cjs");
|
|
7
|
-
const TEST_CONFIG_DIR = ".wingman-test";
|
|
8
|
-
(0, external_vitest_namespaceObject.describe)("AgentConfigLoader", ()=>{
|
|
9
|
-
(0, external_vitest_namespaceObject.beforeEach)(()=>{
|
|
10
|
-
if ((0, external_node_fs_namespaceObject.existsSync)(TEST_CONFIG_DIR)) (0, external_node_fs_namespaceObject.rmSync)(TEST_CONFIG_DIR, {
|
|
11
|
-
recursive: true,
|
|
12
|
-
force: true
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
(0, external_vitest_namespaceObject.afterEach)(()=>{
|
|
16
|
-
if ((0, external_node_fs_namespaceObject.existsSync)(TEST_CONFIG_DIR)) (0, external_node_fs_namespaceObject.rmSync)(TEST_CONFIG_DIR, {
|
|
17
|
-
recursive: true,
|
|
18
|
-
force: true
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
(0, external_vitest_namespaceObject.describe)("loadAllAgentConfigs", ()=>{
|
|
22
|
-
(0, external_vitest_namespaceObject.it)("should return empty array when no config exists", ()=>{
|
|
23
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
24
|
-
const agents = loader.loadAllAgentConfigs();
|
|
25
|
-
(0, external_vitest_namespaceObject.expect)(agents).toEqual([]);
|
|
26
|
-
});
|
|
27
|
-
(0, external_vitest_namespaceObject.it)("should load agent from a single agent directory", ()=>{
|
|
28
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "test-agent");
|
|
29
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
30
|
-
recursive: true
|
|
31
|
-
});
|
|
32
|
-
const config = {
|
|
33
|
-
name: "test-agent",
|
|
34
|
-
description: "A test agent",
|
|
35
|
-
systemPrompt: "You are a test agent",
|
|
36
|
-
tools: [
|
|
37
|
-
"think"
|
|
38
|
-
]
|
|
39
|
-
};
|
|
40
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
41
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
42
|
-
const agents = loader.loadAllAgentConfigs();
|
|
43
|
-
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
44
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("test-agent");
|
|
45
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].description).toBe("A test agent");
|
|
46
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].systemPrompt).toBe("You are a test agent");
|
|
47
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].tools).toHaveLength(1);
|
|
48
|
-
});
|
|
49
|
-
(0, external_vitest_namespaceObject.it)("should load agents from a directory of agent.json files", ()=>{
|
|
50
|
-
const agent1Dir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "agent-1");
|
|
51
|
-
const agent2Dir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "agent-2");
|
|
52
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agent1Dir, {
|
|
53
|
-
recursive: true
|
|
54
|
-
});
|
|
55
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agent2Dir, {
|
|
56
|
-
recursive: true
|
|
57
|
-
});
|
|
58
|
-
const agent1 = {
|
|
59
|
-
name: "agent-1",
|
|
60
|
-
description: "First agent",
|
|
61
|
-
systemPrompt: "You are agent 1"
|
|
62
|
-
};
|
|
63
|
-
const agent2 = {
|
|
64
|
-
name: "agent-2",
|
|
65
|
-
description: "Second agent",
|
|
66
|
-
systemPrompt: "You are agent 2",
|
|
67
|
-
tools: [
|
|
68
|
-
"web_crawler"
|
|
69
|
-
]
|
|
70
|
-
};
|
|
71
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agent1Dir, "agent.json"), JSON.stringify(agent1));
|
|
72
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agent2Dir, "agent.json"), JSON.stringify(agent2));
|
|
73
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
74
|
-
const agents = loader.loadAllAgentConfigs();
|
|
75
|
-
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(2);
|
|
76
|
-
(0, external_vitest_namespaceObject.expect)(agents.map((agent)=>agent.name)).toContain("agent-1");
|
|
77
|
-
(0, external_vitest_namespaceObject.expect)(agents.map((agent)=>agent.name)).toContain("agent-2");
|
|
78
|
-
const agentWithTools = agents.find((agent)=>"agent-2" === agent.name);
|
|
79
|
-
(0, external_vitest_namespaceObject.expect)(agentWithTools?.tools).toHaveLength(1);
|
|
80
|
-
});
|
|
81
|
-
(0, external_vitest_namespaceObject.it)("should prioritize agent.json over agent.md", ()=>{
|
|
82
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "mixed-agent");
|
|
83
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
84
|
-
recursive: true
|
|
85
|
-
});
|
|
86
|
-
const jsonConfig = {
|
|
87
|
-
name: "from-json",
|
|
88
|
-
description: "From JSON",
|
|
89
|
-
systemPrompt: "JSON agent"
|
|
90
|
-
};
|
|
91
|
-
const markdownConfig = `---
|
|
92
|
-
name: from-markdown
|
|
93
|
-
description: From Markdown
|
|
94
|
-
---
|
|
95
|
-
Markdown agent`;
|
|
96
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(jsonConfig));
|
|
97
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.md"), markdownConfig);
|
|
98
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
99
|
-
const agents = loader.loadAllAgentConfigs();
|
|
100
|
-
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
101
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("from-json");
|
|
102
|
-
});
|
|
103
|
-
(0, external_vitest_namespaceObject.it)("should handle malformed JSON gracefully", ()=>{
|
|
104
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "bad-agent");
|
|
105
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
106
|
-
recursive: true
|
|
107
|
-
});
|
|
108
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), "{ invalid json");
|
|
109
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
110
|
-
const agents = loader.loadAllAgentConfigs();
|
|
111
|
-
(0, external_vitest_namespaceObject.expect)(agents).toEqual([]);
|
|
112
|
-
});
|
|
113
|
-
(0, external_vitest_namespaceObject.it)("should skip invalid agent configs in directory", ()=>{
|
|
114
|
-
const validDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "valid-agent");
|
|
115
|
-
const invalidDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "invalid-agent");
|
|
116
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(validDir, {
|
|
117
|
-
recursive: true
|
|
118
|
-
});
|
|
119
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(invalidDir, {
|
|
120
|
-
recursive: true
|
|
121
|
-
});
|
|
122
|
-
const validAgent = {
|
|
123
|
-
name: "valid-agent",
|
|
124
|
-
description: "Valid agent",
|
|
125
|
-
systemPrompt: "Valid"
|
|
126
|
-
};
|
|
127
|
-
const invalidAgent = {
|
|
128
|
-
name: "invalid-agent"
|
|
129
|
-
};
|
|
130
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(validDir, "agent.json"), JSON.stringify(validAgent));
|
|
131
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(invalidDir, "agent.json"), JSON.stringify(invalidAgent));
|
|
132
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
133
|
-
const agents = loader.loadAllAgentConfigs();
|
|
134
|
-
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
135
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("valid-agent");
|
|
136
|
-
});
|
|
137
|
-
(0, external_vitest_namespaceObject.it)("should create agent with model override", ()=>{
|
|
138
|
-
const config = {
|
|
139
|
-
name: "custom-model-agent",
|
|
140
|
-
description: "Agent with custom model",
|
|
141
|
-
systemPrompt: "You are a custom agent",
|
|
142
|
-
model: "anthropic:claude-opus-4-5"
|
|
143
|
-
};
|
|
144
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "custom-model-agent");
|
|
145
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
146
|
-
recursive: true
|
|
147
|
-
});
|
|
148
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
149
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
150
|
-
const agents = loader.loadAllAgentConfigs();
|
|
151
|
-
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
152
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].model).toBeDefined();
|
|
153
|
-
});
|
|
154
|
-
(0, external_vitest_namespaceObject.it)("should create agent with command_execute tool and custom options", ()=>{
|
|
155
|
-
const config = {
|
|
156
|
-
name: "executor-agent",
|
|
157
|
-
description: "Executes commands",
|
|
158
|
-
systemPrompt: "You execute commands",
|
|
159
|
-
tools: [
|
|
160
|
-
"command_execute"
|
|
161
|
-
],
|
|
162
|
-
blockedCommands: [
|
|
163
|
-
"rm",
|
|
164
|
-
"mv"
|
|
165
|
-
],
|
|
166
|
-
allowScriptExecution: false,
|
|
167
|
-
commandTimeout: 60000
|
|
168
|
-
};
|
|
169
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "executor-agent");
|
|
170
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
171
|
-
recursive: true
|
|
172
|
-
});
|
|
173
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
174
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
175
|
-
const agents = loader.loadAllAgentConfigs();
|
|
176
|
-
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
177
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].tools).toHaveLength(1);
|
|
178
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].tools?.[0]).toBe("command_execute");
|
|
179
|
-
});
|
|
180
|
-
(0, external_vitest_namespaceObject.it)("should ignore non-JSON files in directory", ()=>{
|
|
181
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "valid-agent");
|
|
182
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
183
|
-
recursive: true
|
|
184
|
-
});
|
|
185
|
-
const validAgent = {
|
|
186
|
-
name: "valid-agent",
|
|
187
|
-
description: "Valid",
|
|
188
|
-
systemPrompt: "Valid"
|
|
189
|
-
};
|
|
190
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(validAgent));
|
|
191
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "readme.md"), "# README");
|
|
192
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "notes.txt"), "Some notes");
|
|
193
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
194
|
-
const agents = loader.loadAllAgentConfigs();
|
|
195
|
-
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
196
|
-
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("valid-agent");
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
(0, external_vitest_namespaceObject.describe)("loadAgent", ()=>{
|
|
200
|
-
(0, external_vitest_namespaceObject.it)("should always inject node tools for top-level agents", async ()=>{
|
|
201
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "node-enabled-agent");
|
|
202
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
203
|
-
recursive: true
|
|
204
|
-
});
|
|
205
|
-
const config = {
|
|
206
|
-
name: "node-enabled-agent",
|
|
207
|
-
description: "Agent with default node tools",
|
|
208
|
-
systemPrompt: "You are node capable"
|
|
209
|
-
};
|
|
210
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
211
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
212
|
-
const agent = await loader.loadAgent("node-enabled-agent");
|
|
213
|
-
const toolNames = (agent?.tools || []).map((tool)=>tool.name);
|
|
214
|
-
(0, external_vitest_namespaceObject.expect)(toolNames).toContain("node_notify");
|
|
215
|
-
(0, external_vitest_namespaceObject.expect)(toolNames).toContain("node_run");
|
|
216
|
-
});
|
|
217
|
-
(0, external_vitest_namespaceObject.it)("should always inject and deduplicate node tools for subagents", async ()=>{
|
|
218
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "node-subagent-parent");
|
|
219
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
220
|
-
recursive: true
|
|
221
|
-
});
|
|
222
|
-
const config = {
|
|
223
|
-
name: "node-subagent-parent",
|
|
224
|
-
description: "Parent agent",
|
|
225
|
-
systemPrompt: "You are the parent",
|
|
226
|
-
subAgents: [
|
|
227
|
-
{
|
|
228
|
-
name: "node-subagent",
|
|
229
|
-
description: "Subagent",
|
|
230
|
-
systemPrompt: "You are a subagent",
|
|
231
|
-
tools: [
|
|
232
|
-
"node_run"
|
|
233
|
-
]
|
|
234
|
-
}
|
|
235
|
-
]
|
|
236
|
-
};
|
|
237
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
238
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
239
|
-
const agent = await loader.loadAgent("node-subagent-parent");
|
|
240
|
-
const sub = agent?.subagents?.[0];
|
|
241
|
-
const toolNames = (sub?.tools || []).map((tool)=>tool.name);
|
|
242
|
-
(0, external_vitest_namespaceObject.expect)(toolNames).toContain("node_notify");
|
|
243
|
-
(0, external_vitest_namespaceObject.expect)(toolNames.filter((name)=>"node_run" === name)).toHaveLength(1);
|
|
244
|
-
});
|
|
245
|
-
(0, external_vitest_namespaceObject.it)("should hydrate subagent tools for runtime use", async ()=>{
|
|
246
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "parent-agent");
|
|
247
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
248
|
-
recursive: true
|
|
249
|
-
});
|
|
250
|
-
const config = {
|
|
251
|
-
name: "parent-agent",
|
|
252
|
-
description: "Parent agent",
|
|
253
|
-
systemPrompt: "You are the parent",
|
|
254
|
-
subAgents: [
|
|
255
|
-
{
|
|
256
|
-
name: "researcher",
|
|
257
|
-
description: "Research subagent",
|
|
258
|
-
systemPrompt: "You research things",
|
|
259
|
-
tools: [
|
|
260
|
-
"think"
|
|
261
|
-
]
|
|
262
|
-
}
|
|
263
|
-
]
|
|
264
|
-
};
|
|
265
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
266
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
267
|
-
const agent = await loader.loadAgent("parent-agent");
|
|
268
|
-
(0, external_vitest_namespaceObject.expect)(agent).toBeDefined();
|
|
269
|
-
(0, external_vitest_namespaceObject.expect)(agent?.subagents).toBeDefined();
|
|
270
|
-
(0, external_vitest_namespaceObject.expect)(agent?.subagents?.length).toBe(1);
|
|
271
|
-
const sub = agent?.subagents?.[0];
|
|
272
|
-
(0, external_vitest_namespaceObject.expect)(Array.isArray(sub.tools)).toBe(true);
|
|
273
|
-
(0, external_vitest_namespaceObject.expect)(sub.tools?.[0]).toHaveProperty("name", "think");
|
|
274
|
-
});
|
|
275
|
-
(0, external_vitest_namespaceObject.it)("should append prompt refinement instructions when enabled", async ()=>{
|
|
276
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "refiner-agent");
|
|
277
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
278
|
-
recursive: true
|
|
279
|
-
});
|
|
280
|
-
const config = {
|
|
281
|
-
name: "refiner-agent",
|
|
282
|
-
description: "Agent that refines its prompt",
|
|
283
|
-
systemPrompt: "You are a refiner agent",
|
|
284
|
-
promptRefinement: true
|
|
285
|
-
};
|
|
286
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
287
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
288
|
-
const agent = await loader.loadAgent("refiner-agent");
|
|
289
|
-
(0, external_vitest_namespaceObject.expect)(agent).toBeDefined();
|
|
290
|
-
(0, external_vitest_namespaceObject.expect)(agent?.systemPrompt).toContain("[[wingman:prompt-refinement]]");
|
|
291
|
-
(0, external_vitest_namespaceObject.expect)(agent?.systemPrompt).toContain("/memories/agents/refiner-agent/instructions.md");
|
|
292
|
-
(0, external_vitest_namespaceObject.expect)(agent?.systemPrompt).toContain("overlay as secondary preference memory");
|
|
293
|
-
});
|
|
294
|
-
(0, external_vitest_namespaceObject.it)("should apply reasoningEffort when model supports it", async ()=>{
|
|
295
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "reasoning-agent");
|
|
296
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
297
|
-
recursive: true
|
|
298
|
-
});
|
|
299
|
-
const config = {
|
|
300
|
-
name: "reasoning-agent",
|
|
301
|
-
description: "Agent with reasoning effort",
|
|
302
|
-
systemPrompt: "You are a reasoner",
|
|
303
|
-
model: "openai:gpt-5.2-codex",
|
|
304
|
-
reasoningEffort: "high"
|
|
305
|
-
};
|
|
306
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
307
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
308
|
-
const agent = await loader.loadAgent("reasoning-agent");
|
|
309
|
-
const model = agent?.model;
|
|
310
|
-
(0, external_vitest_namespaceObject.expect)(model.reasoning?.effort).toBe("high");
|
|
311
|
-
});
|
|
312
|
-
(0, external_vitest_namespaceObject.it)("should normalize thinkingEffort alias to reasoningEffort", async ()=>{
|
|
313
|
-
const agentDir = (0, external_node_path_namespaceObject.join)(TEST_CONFIG_DIR, "agents", "legacy-thinking-agent");
|
|
314
|
-
(0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
315
|
-
recursive: true
|
|
316
|
-
});
|
|
317
|
-
const config = {
|
|
318
|
-
name: "legacy-thinking-agent",
|
|
319
|
-
description: "Agent with legacy thinking effort field",
|
|
320
|
-
systemPrompt: "You are a reasoner",
|
|
321
|
-
model: "openai:gpt-5.2-codex",
|
|
322
|
-
thinkingEffort: "medium"
|
|
323
|
-
};
|
|
324
|
-
(0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(config));
|
|
325
|
-
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(TEST_CONFIG_DIR);
|
|
326
|
-
const agent = await loader.loadAgent("legacy-thinking-agent");
|
|
327
|
-
const model = agent?.model;
|
|
328
|
-
(0, external_vitest_namespaceObject.expect)(model.reasoning?.effort).toBe("medium");
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
});
|
|
332
|
-
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
333
|
-
Object.defineProperty(exports, '__esModule', {
|
|
334
|
-
value: true
|
|
335
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|