@wingman-ai/gateway 0.3.0 → 0.3.1
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 +8 -0
- package/dist/agent/config/agentConfig.cjs +12 -0
- package/dist/agent/config/agentConfig.d.ts +22 -0
- package/dist/agent/config/agentConfig.js +10 -1
- package/dist/agent/config/agentLoader.cjs +9 -0
- package/dist/agent/config/agentLoader.js +9 -0
- package/dist/agent/config/toolRegistry.cjs +17 -0
- package/dist/agent/config/toolRegistry.d.ts +15 -0
- package/dist/agent/config/toolRegistry.js +17 -0
- package/dist/agent/tests/agentConfig.test.cjs +6 -1
- package/dist/agent/tests/agentConfig.test.js +6 -1
- package/dist/agent/tests/browserControlHelpers.test.cjs +35 -0
- package/dist/agent/tests/browserControlHelpers.test.d.ts +1 -0
- package/dist/agent/tests/browserControlHelpers.test.js +29 -0
- package/dist/agent/tests/browserControlTool.test.cjs +2117 -0
- package/dist/agent/tests/browserControlTool.test.d.ts +1 -0
- package/dist/agent/tests/browserControlTool.test.js +2111 -0
- package/dist/agent/tests/toolRegistry.test.cjs +6 -0
- package/dist/agent/tests/toolRegistry.test.js +6 -0
- package/dist/agent/tools/browser_control.cjs +1282 -0
- package/dist/agent/tools/browser_control.d.ts +478 -0
- package/dist/agent/tools/browser_control.js +1242 -0
- package/dist/cli/commands/agent.cjs +16 -2
- package/dist/cli/commands/agent.js +16 -2
- package/dist/cli/commands/browser.cjs +603 -0
- package/dist/cli/commands/browser.d.ts +13 -0
- package/dist/cli/commands/browser.js +566 -0
- package/dist/cli/commands/gateway.cjs +18 -7
- package/dist/cli/commands/gateway.d.ts +5 -1
- package/dist/cli/commands/gateway.js +18 -7
- package/dist/cli/commands/init.cjs +134 -45
- package/dist/cli/commands/init.js +134 -45
- package/dist/cli/commands/skill.cjs +3 -2
- package/dist/cli/commands/skill.js +3 -2
- package/dist/cli/config/loader.cjs +15 -0
- package/dist/cli/config/loader.js +15 -0
- package/dist/cli/config/schema.cjs +51 -2
- package/dist/cli/config/schema.d.ts +49 -0
- package/dist/cli/config/schema.js +44 -1
- package/dist/cli/core/workspace.cjs +89 -0
- package/dist/cli/core/workspace.d.ts +1 -0
- package/dist/cli/core/workspace.js +55 -0
- package/dist/cli/index.cjs +53 -5
- package/dist/cli/index.js +53 -5
- package/dist/cli/types/browser.cjs +18 -0
- package/dist/cli/types/browser.d.ts +9 -0
- package/dist/cli/types/browser.js +0 -0
- package/dist/gateway/browserRelayServer.cjs +338 -0
- package/dist/gateway/browserRelayServer.d.ts +38 -0
- package/dist/gateway/browserRelayServer.js +301 -0
- package/dist/gateway/http/agents.cjs +22 -0
- package/dist/gateway/http/agents.js +22 -0
- package/dist/gateway/http/fs.cjs +57 -0
- package/dist/gateway/http/fs.js +58 -1
- package/dist/gateway/server.cjs +43 -6
- package/dist/gateway/server.d.ts +4 -1
- package/dist/gateway/server.js +36 -5
- package/dist/gateway/transport/websocket.cjs +45 -10
- package/dist/gateway/transport/websocket.d.ts +1 -0
- package/dist/gateway/transport/websocket.js +41 -9
- package/dist/gateway/types.d.ts +4 -0
- package/dist/tests/agents-api.test.cjs +52 -0
- package/dist/tests/agents-api.test.js +53 -1
- package/dist/tests/browser-command.test.cjs +264 -0
- package/dist/tests/browser-command.test.d.ts +1 -0
- package/dist/tests/browser-command.test.js +258 -0
- package/dist/tests/browser-relay-server.test.cjs +20 -0
- package/dist/tests/browser-relay-server.test.d.ts +1 -0
- package/dist/tests/browser-relay-server.test.js +14 -0
- package/dist/tests/cli-config-loader.test.cjs +43 -0
- package/dist/tests/cli-config-loader.test.js +43 -0
- package/dist/tests/cli-init.test.cjs +25 -2
- package/dist/tests/cli-init.test.js +25 -2
- package/dist/tests/cli-workspace-root.test.cjs +114 -0
- package/dist/tests/cli-workspace-root.test.d.ts +1 -0
- package/dist/tests/cli-workspace-root.test.js +108 -0
- package/dist/tests/fs-api.test.cjs +138 -0
- package/dist/tests/fs-api.test.d.ts +1 -0
- package/dist/tests/fs-api.test.js +132 -0
- package/dist/tests/gateway-command-workspace.test.cjs +150 -0
- package/dist/tests/gateway-command-workspace.test.d.ts +1 -0
- package/dist/tests/gateway-command-workspace.test.js +144 -0
- package/dist/tests/gateway-request-execution-overrides.test.cjs +42 -0
- package/dist/tests/gateway-request-execution-overrides.test.d.ts +1 -0
- package/dist/tests/gateway-request-execution-overrides.test.js +36 -0
- package/dist/tests/gateway.test.cjs +31 -0
- package/dist/tests/gateway.test.js +31 -0
- package/dist/tests/websocket-transport.test.cjs +31 -0
- package/dist/tests/websocket-transport.test.d.ts +1 -0
- package/dist/tests/websocket-transport.test.js +25 -0
- package/dist/webui/assets/index-BW9nM0J2.css +11 -0
- package/dist/webui/assets/{index-0nUBsUUq.js → index-C8-oboEC.js} +107 -107
- package/dist/webui/index.html +2 -2
- package/extensions/wingman-browser-extension/README.md +27 -0
- package/extensions/wingman-browser-extension/background.js +416 -0
- package/extensions/wingman-browser-extension/manifest.json +19 -0
- package/extensions/wingman-browser-extension/options.html +156 -0
- package/extensions/wingman-browser-extension/options.js +106 -0
- package/package.json +8 -6
- package/{.wingman → templates}/agents/README.md +2 -1
- package/{.wingman → templates}/agents/coding/agent.md +0 -1
- package/{.wingman → templates}/agents/coding-v2/agent.md +0 -1
- package/{.wingman → templates}/agents/game-dev/agent.md +8 -1
- package/{.wingman → templates}/agents/game-dev/art-generation.md +1 -0
- package/{.wingman → templates}/agents/main/agent.md +5 -0
- package/{.wingman → templates}/agents/researcher/agent.md +9 -0
- package/{.wingman → templates}/agents/stock-trader/agent.md +1 -0
- package/dist/webui/assets/index-kk7OrD-G.css +0 -11
- /package/{.wingman → templates}/agents/coding-v2/implementor.md +0 -0
- /package/{.wingman → templates}/agents/game-dev/asset-refinement.md +0 -0
- /package/{.wingman → templates}/agents/game-dev/planning-idea.md +0 -0
- /package/{.wingman → templates}/agents/game-dev/ui-specialist.md +0 -0
- /package/{.wingman → templates}/agents/stock-trader/chain-curator.md +0 -0
- /package/{.wingman → templates}/agents/stock-trader/goal-translator.md +0 -0
- /package/{.wingman → templates}/agents/stock-trader/guardrails-veto.md +0 -0
- /package/{.wingman → templates}/agents/stock-trader/path-planner.md +0 -0
- /package/{.wingman → templates}/agents/stock-trader/regime-analyst.md +0 -0
- /package/{.wingman → templates}/agents/stock-trader/risk.md +0 -0
- /package/{.wingman → templates}/agents/stock-trader/selection.md +0 -0
- /package/{.wingman → templates}/agents/stock-trader/strategy-composer.md +0 -0
package/README.md
CHANGED
|
@@ -74,6 +74,14 @@ npm install -g @wingman-ai/gateway
|
|
|
74
74
|
wingman init
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
+
### Re-sync Bundled Agent Templates
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
wingman init --mode sync --only agents
|
|
81
|
+
wingman init --mode sync --only agents --agents main,coding
|
|
82
|
+
wingman init --mode sync --only agents --force
|
|
83
|
+
```
|
|
84
|
+
|
|
77
85
|
### Start the Gateway
|
|
78
86
|
|
|
79
87
|
```bash
|
|
@@ -24,6 +24,7 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
AgentBrowserTransportSchema: ()=>AgentBrowserTransportSchema,
|
|
27
28
|
WingmanDirectory: ()=>WingmanDirectory,
|
|
28
29
|
AgentConfigSchema: ()=>AgentConfigSchema,
|
|
29
30
|
AvailableToolNames: ()=>AvailableToolNames,
|
|
@@ -38,6 +39,7 @@ const WingmanDirectory = ".wingman";
|
|
|
38
39
|
const AvailableToolNames = external_zod_namespaceObject["enum"]([
|
|
39
40
|
"internet_search",
|
|
40
41
|
"web_crawler",
|
|
42
|
+
"browser_control",
|
|
41
43
|
"command_execute",
|
|
42
44
|
"background_terminal",
|
|
43
45
|
"think",
|
|
@@ -56,6 +58,11 @@ const ReasoningEffortSchema = external_zod_namespaceObject.preprocess((value)=>{
|
|
|
56
58
|
"medium",
|
|
57
59
|
"high"
|
|
58
60
|
]));
|
|
61
|
+
const AgentBrowserTransportSchema = external_zod_namespaceObject["enum"]([
|
|
62
|
+
"auto",
|
|
63
|
+
"playwright",
|
|
64
|
+
"relay"
|
|
65
|
+
]);
|
|
59
66
|
const PromptRefinementSchema = external_zod_namespaceObject.preprocess((value)=>{
|
|
60
67
|
if (void 0 === value) return;
|
|
61
68
|
if ("boolean" == typeof value) return {
|
|
@@ -76,6 +83,9 @@ const BaseAgentConfigSchema = external_zod_namespaceObject.object({
|
|
|
76
83
|
blockedCommands: external_zod_namespaceObject.array(external_zod_namespaceObject.string()).optional().describe("List of blocked commands for command_execute tool (e.g., ['rm', 'mv'])"),
|
|
77
84
|
allowScriptExecution: external_zod_namespaceObject.boolean().optional().default(true).describe("Whether to allow script execution in command_execute tool"),
|
|
78
85
|
commandTimeout: external_zod_namespaceObject.number().optional().default(300000).describe("Command execution timeout in milliseconds (default: 300000)"),
|
|
86
|
+
browserProfile: external_zod_namespaceObject.string().min(1).optional().describe("Optional named browser profile ID for persistent browser_control sessions"),
|
|
87
|
+
browserTransport: AgentBrowserTransportSchema.optional().describe('Optional browser_control transport preference ("auto", "playwright", or "relay")'),
|
|
88
|
+
browserExtensions: external_zod_namespaceObject.array(external_zod_namespaceObject.string().min(1)).optional().describe("Optional extension IDs to load for browser_control sessions (maps from wingman.config browser.extensions)"),
|
|
79
89
|
toolHooks: types_cjs_namespaceObject.HooksConfigSchema.optional().describe("Agent-specific tool hooks configuration"),
|
|
80
90
|
mcp: mcp_cjs_namespaceObject.MCPServersConfigSchema.optional().describe("Agent-specific MCP server configurations"),
|
|
81
91
|
mcpUseGlobal: external_zod_namespaceObject.boolean().optional().default(false).describe("Whether this agent should also load global MCP servers from wingman.config.json"),
|
|
@@ -135,12 +145,14 @@ function validateAgentConfig(config) {
|
|
|
135
145
|
};
|
|
136
146
|
}
|
|
137
147
|
}
|
|
148
|
+
exports.AgentBrowserTransportSchema = __webpack_exports__.AgentBrowserTransportSchema;
|
|
138
149
|
exports.AgentConfigSchema = __webpack_exports__.AgentConfigSchema;
|
|
139
150
|
exports.AvailableToolNames = __webpack_exports__.AvailableToolNames;
|
|
140
151
|
exports.ReasoningEffortSchema = __webpack_exports__.ReasoningEffortSchema;
|
|
141
152
|
exports.WingmanDirectory = __webpack_exports__.WingmanDirectory;
|
|
142
153
|
exports.validateAgentConfig = __webpack_exports__.validateAgentConfig;
|
|
143
154
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
155
|
+
"AgentBrowserTransportSchema",
|
|
144
156
|
"AgentConfigSchema",
|
|
145
157
|
"AvailableToolNames",
|
|
146
158
|
"ReasoningEffortSchema",
|
|
@@ -6,6 +6,7 @@ export declare const WingmanDirectory = ".wingman";
|
|
|
6
6
|
export declare const AvailableToolNames: z.ZodEnum<{
|
|
7
7
|
internet_search: "internet_search";
|
|
8
8
|
web_crawler: "web_crawler";
|
|
9
|
+
browser_control: "browser_control";
|
|
9
10
|
command_execute: "command_execute";
|
|
10
11
|
background_terminal: "background_terminal";
|
|
11
12
|
think: "think";
|
|
@@ -23,6 +24,11 @@ export declare const ReasoningEffortSchema: z.ZodPipe<z.ZodTransform<unknown, un
|
|
|
23
24
|
high: "high";
|
|
24
25
|
}>>;
|
|
25
26
|
export type ReasoningEffort = z.infer<typeof ReasoningEffortSchema>;
|
|
27
|
+
export declare const AgentBrowserTransportSchema: z.ZodEnum<{
|
|
28
|
+
auto: "auto";
|
|
29
|
+
playwright: "playwright";
|
|
30
|
+
relay: "relay";
|
|
31
|
+
}>;
|
|
26
32
|
declare const PromptRefinementSchema: z.ZodPipe<z.ZodTransform<{} | null | undefined, unknown>, z.ZodObject<{
|
|
27
33
|
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
28
34
|
instructionsPath: z.ZodOptional<z.ZodString>;
|
|
@@ -35,6 +41,7 @@ export declare const AgentConfigSchema: z.ZodObject<{
|
|
|
35
41
|
tools: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
36
42
|
internet_search: "internet_search";
|
|
37
43
|
web_crawler: "web_crawler";
|
|
44
|
+
browser_control: "browser_control";
|
|
38
45
|
command_execute: "command_execute";
|
|
39
46
|
background_terminal: "background_terminal";
|
|
40
47
|
think: "think";
|
|
@@ -54,6 +61,13 @@ export declare const AgentConfigSchema: z.ZodObject<{
|
|
|
54
61
|
blockedCommands: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
55
62
|
allowScriptExecution: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
56
63
|
commandTimeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
64
|
+
browserProfile: z.ZodOptional<z.ZodString>;
|
|
65
|
+
browserTransport: z.ZodOptional<z.ZodEnum<{
|
|
66
|
+
auto: "auto";
|
|
67
|
+
playwright: "playwright";
|
|
68
|
+
relay: "relay";
|
|
69
|
+
}>>;
|
|
70
|
+
browserExtensions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
57
71
|
toolHooks: z.ZodOptional<z.ZodObject<{
|
|
58
72
|
PreToolUse: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
59
73
|
matcher: z.ZodOptional<z.ZodString>;
|
|
@@ -131,6 +145,7 @@ export declare const AgentConfigSchema: z.ZodObject<{
|
|
|
131
145
|
tools: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
132
146
|
internet_search: "internet_search";
|
|
133
147
|
web_crawler: "web_crawler";
|
|
148
|
+
browser_control: "browser_control";
|
|
134
149
|
command_execute: "command_execute";
|
|
135
150
|
background_terminal: "background_terminal";
|
|
136
151
|
think: "think";
|
|
@@ -150,6 +165,13 @@ export declare const AgentConfigSchema: z.ZodObject<{
|
|
|
150
165
|
blockedCommands: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
151
166
|
allowScriptExecution: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
152
167
|
commandTimeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
168
|
+
browserProfile: z.ZodOptional<z.ZodString>;
|
|
169
|
+
browserTransport: z.ZodOptional<z.ZodEnum<{
|
|
170
|
+
auto: "auto";
|
|
171
|
+
playwright: "playwright";
|
|
172
|
+
relay: "relay";
|
|
173
|
+
}>>;
|
|
174
|
+
browserExtensions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
153
175
|
toolHooks: z.ZodOptional<z.ZodObject<{
|
|
154
176
|
PreToolUse: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
155
177
|
matcher: z.ZodOptional<z.ZodString>;
|
|
@@ -6,6 +6,7 @@ const WingmanDirectory = ".wingman";
|
|
|
6
6
|
const AvailableToolNames = external_zod_enum([
|
|
7
7
|
"internet_search",
|
|
8
8
|
"web_crawler",
|
|
9
|
+
"browser_control",
|
|
9
10
|
"command_execute",
|
|
10
11
|
"background_terminal",
|
|
11
12
|
"think",
|
|
@@ -24,6 +25,11 @@ const ReasoningEffortSchema = preprocess((value)=>{
|
|
|
24
25
|
"medium",
|
|
25
26
|
"high"
|
|
26
27
|
]));
|
|
28
|
+
const AgentBrowserTransportSchema = external_zod_enum([
|
|
29
|
+
"auto",
|
|
30
|
+
"playwright",
|
|
31
|
+
"relay"
|
|
32
|
+
]);
|
|
27
33
|
const PromptRefinementSchema = preprocess((value)=>{
|
|
28
34
|
if (void 0 === value) return;
|
|
29
35
|
if ("boolean" == typeof value) return {
|
|
@@ -44,6 +50,9 @@ const BaseAgentConfigSchema = object({
|
|
|
44
50
|
blockedCommands: array(string()).optional().describe("List of blocked commands for command_execute tool (e.g., ['rm', 'mv'])"),
|
|
45
51
|
allowScriptExecution: external_zod_boolean().optional().default(true).describe("Whether to allow script execution in command_execute tool"),
|
|
46
52
|
commandTimeout: number().optional().default(300000).describe("Command execution timeout in milliseconds (default: 300000)"),
|
|
53
|
+
browserProfile: string().min(1).optional().describe("Optional named browser profile ID for persistent browser_control sessions"),
|
|
54
|
+
browserTransport: AgentBrowserTransportSchema.optional().describe('Optional browser_control transport preference ("auto", "playwright", or "relay")'),
|
|
55
|
+
browserExtensions: array(string().min(1)).optional().describe("Optional extension IDs to load for browser_control sessions (maps from wingman.config browser.extensions)"),
|
|
47
56
|
toolHooks: HooksConfigSchema.optional().describe("Agent-specific tool hooks configuration"),
|
|
48
57
|
mcp: MCPServersConfigSchema.optional().describe("Agent-specific MCP server configurations"),
|
|
49
58
|
mcpUseGlobal: external_zod_boolean().optional().default(false).describe("Whether this agent should also load global MCP servers from wingman.config.json"),
|
|
@@ -103,4 +112,4 @@ function validateAgentConfig(config) {
|
|
|
103
112
|
};
|
|
104
113
|
}
|
|
105
114
|
}
|
|
106
|
-
export { AgentConfigSchema, AvailableToolNames, ReasoningEffortSchema, WingmanDirectory, validateAgentConfig };
|
|
115
|
+
export { AgentBrowserTransportSchema, AgentConfigSchema, AvailableToolNames, ReasoningEffortSchema, WingmanDirectory, validateAgentConfig };
|
|
@@ -228,6 +228,15 @@ class AgentLoader {
|
|
|
228
228
|
blockedCommands: source.blockedCommands,
|
|
229
229
|
allowScriptExecution: source.allowScriptExecution,
|
|
230
230
|
timeout: source.commandTimeout,
|
|
231
|
+
browserProfile: source.browserProfile || this.wingmanConfig?.browser?.defaultProfile,
|
|
232
|
+
browserTransport: source.browserTransport || this.wingmanConfig?.browser?.transport,
|
|
233
|
+
browserProfilesDirectory: this.wingmanConfig?.browser?.profilesDir,
|
|
234
|
+
browserProfiles: this.wingmanConfig?.browser?.profiles,
|
|
235
|
+
browserExtensions: source.browserExtensions,
|
|
236
|
+
browserExtensionsDirectory: this.wingmanConfig?.browser?.extensionsDir,
|
|
237
|
+
browserExtensionsById: this.wingmanConfig?.browser?.extensions,
|
|
238
|
+
browserDefaultExtensions: this.wingmanConfig?.browser?.defaultExtensions,
|
|
239
|
+
browserRelay: this.wingmanConfig?.browser?.relay,
|
|
231
240
|
searchConfig: this.wingmanConfig?.search,
|
|
232
241
|
mcpConfigs,
|
|
233
242
|
skillsDirectory,
|
|
@@ -200,6 +200,15 @@ class AgentLoader {
|
|
|
200
200
|
blockedCommands: source.blockedCommands,
|
|
201
201
|
allowScriptExecution: source.allowScriptExecution,
|
|
202
202
|
timeout: source.commandTimeout,
|
|
203
|
+
browserProfile: source.browserProfile || this.wingmanConfig?.browser?.defaultProfile,
|
|
204
|
+
browserTransport: source.browserTransport || this.wingmanConfig?.browser?.transport,
|
|
205
|
+
browserProfilesDirectory: this.wingmanConfig?.browser?.profilesDir,
|
|
206
|
+
browserProfiles: this.wingmanConfig?.browser?.profiles,
|
|
207
|
+
browserExtensions: source.browserExtensions,
|
|
208
|
+
browserExtensionsDirectory: this.wingmanConfig?.browser?.extensionsDir,
|
|
209
|
+
browserExtensionsById: this.wingmanConfig?.browser?.extensions,
|
|
210
|
+
browserDefaultExtensions: this.wingmanConfig?.browser?.defaultExtensions,
|
|
211
|
+
browserRelay: this.wingmanConfig?.browser?.relay,
|
|
203
212
|
searchConfig: this.wingmanConfig?.search,
|
|
204
213
|
mcpConfigs,
|
|
205
214
|
skillsDirectory,
|
|
@@ -31,6 +31,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
});
|
|
32
32
|
const external_logger_cjs_namespaceObject = require("../../logger.cjs");
|
|
33
33
|
const background_terminal_cjs_namespaceObject = require("../tools/background_terminal.cjs");
|
|
34
|
+
const browser_control_cjs_namespaceObject = require("../tools/browser_control.cjs");
|
|
34
35
|
const code_search_cjs_namespaceObject = require("../tools/code_search.cjs");
|
|
35
36
|
const command_execute_cjs_namespaceObject = require("../tools/command_execute.cjs");
|
|
36
37
|
const git_status_cjs_namespaceObject = require("../tools/git_status.cjs");
|
|
@@ -65,6 +66,21 @@ function createTool(name, options = {}) {
|
|
|
65
66
|
return (0, internet_search_cjs_namespaceObject.createInternetSearchTool)(searchConfig);
|
|
66
67
|
case "web_crawler":
|
|
67
68
|
return web_crawler_cjs_namespaceObject.webCrawler;
|
|
69
|
+
case "browser_control":
|
|
70
|
+
return (0, browser_control_cjs_namespaceObject.createBrowserControlTool)({
|
|
71
|
+
workspace: runtimeWorkspace,
|
|
72
|
+
configWorkspace: workspace,
|
|
73
|
+
launchTimeoutMs: timeout,
|
|
74
|
+
browserProfile: options.browserProfile,
|
|
75
|
+
browserTransport: options.browserTransport,
|
|
76
|
+
profilesRootDir: options.browserProfilesDirectory,
|
|
77
|
+
profilePaths: options.browserProfiles,
|
|
78
|
+
browserExtensions: options.browserExtensions,
|
|
79
|
+
extensionsRootDir: options.browserExtensionsDirectory,
|
|
80
|
+
extensionPaths: options.browserExtensionsById,
|
|
81
|
+
defaultExtensions: options.browserDefaultExtensions,
|
|
82
|
+
relayConfig: options.browserRelay
|
|
83
|
+
});
|
|
68
84
|
case "command_execute":
|
|
69
85
|
return (0, command_execute_cjs_namespaceObject.createCommandExecuteTool)(runtimeWorkspace, process.env, blockedCommands, allowScriptExecution, timeout);
|
|
70
86
|
case "background_terminal":
|
|
@@ -121,6 +137,7 @@ function getAvailableTools() {
|
|
|
121
137
|
return [
|
|
122
138
|
"internet_search",
|
|
123
139
|
"web_crawler",
|
|
140
|
+
"browser_control",
|
|
124
141
|
"command_execute",
|
|
125
142
|
"background_terminal",
|
|
126
143
|
"think",
|
|
@@ -9,6 +9,21 @@ export interface ToolOptions {
|
|
|
9
9
|
blockedCommands?: string[];
|
|
10
10
|
allowScriptExecution?: boolean;
|
|
11
11
|
timeout?: number;
|
|
12
|
+
browserProfile?: string;
|
|
13
|
+
browserTransport?: "auto" | "playwright" | "relay";
|
|
14
|
+
browserProfilesDirectory?: string;
|
|
15
|
+
browserProfiles?: Record<string, string>;
|
|
16
|
+
browserExtensions?: string[];
|
|
17
|
+
browserExtensionsDirectory?: string;
|
|
18
|
+
browserExtensionsById?: Record<string, string>;
|
|
19
|
+
browserDefaultExtensions?: string[];
|
|
20
|
+
browserRelay?: {
|
|
21
|
+
enabled?: boolean;
|
|
22
|
+
host?: string;
|
|
23
|
+
port?: number;
|
|
24
|
+
requireAuth?: boolean;
|
|
25
|
+
authToken?: string;
|
|
26
|
+
};
|
|
12
27
|
terminalOwnerId?: string;
|
|
13
28
|
terminalSessionManager?: TerminalSessionManager;
|
|
14
29
|
searchConfig?: SearchConfig;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createLogger } from "../../logger.js";
|
|
2
2
|
import { createBackgroundTerminalTool } from "../tools/background_terminal.js";
|
|
3
|
+
import { createBrowserControlTool } from "../tools/browser_control.js";
|
|
3
4
|
import { createCodeSearchTool } from "../tools/code_search.js";
|
|
4
5
|
import { createCommandExecuteTool } from "../tools/command_execute.js";
|
|
5
6
|
import { createGitStatusTool } from "../tools/git_status.js";
|
|
@@ -34,6 +35,21 @@ function createTool(name, options = {}) {
|
|
|
34
35
|
return createInternetSearchTool(searchConfig);
|
|
35
36
|
case "web_crawler":
|
|
36
37
|
return webCrawler;
|
|
38
|
+
case "browser_control":
|
|
39
|
+
return createBrowserControlTool({
|
|
40
|
+
workspace: runtimeWorkspace,
|
|
41
|
+
configWorkspace: workspace,
|
|
42
|
+
launchTimeoutMs: timeout,
|
|
43
|
+
browserProfile: options.browserProfile,
|
|
44
|
+
browserTransport: options.browserTransport,
|
|
45
|
+
profilesRootDir: options.browserProfilesDirectory,
|
|
46
|
+
profilePaths: options.browserProfiles,
|
|
47
|
+
browserExtensions: options.browserExtensions,
|
|
48
|
+
extensionsRootDir: options.browserExtensionsDirectory,
|
|
49
|
+
extensionPaths: options.browserExtensionsById,
|
|
50
|
+
defaultExtensions: options.browserDefaultExtensions,
|
|
51
|
+
relayConfig: options.browserRelay
|
|
52
|
+
});
|
|
37
53
|
case "command_execute":
|
|
38
54
|
return createCommandExecuteTool(runtimeWorkspace, process.env, blockedCommands, allowScriptExecution, timeout);
|
|
39
55
|
case "background_terminal":
|
|
@@ -90,6 +106,7 @@ function getAvailableTools() {
|
|
|
90
106
|
return [
|
|
91
107
|
"internet_search",
|
|
92
108
|
"web_crawler",
|
|
109
|
+
"browser_control",
|
|
93
110
|
"command_execute",
|
|
94
111
|
"background_terminal",
|
|
95
112
|
"think",
|
|
@@ -34,7 +34,9 @@ const agentConfig_cjs_namespaceObject = require("../config/agentConfig.cjs");
|
|
|
34
34
|
"mv"
|
|
35
35
|
],
|
|
36
36
|
allowScriptExecution: true,
|
|
37
|
-
commandTimeout: 300000
|
|
37
|
+
commandTimeout: 300000,
|
|
38
|
+
browserProfile: "trading",
|
|
39
|
+
browserTransport: "relay"
|
|
38
40
|
};
|
|
39
41
|
const result = (0, agentConfig_cjs_namespaceObject.validateAgentConfig)(config);
|
|
40
42
|
(0, external_vitest_namespaceObject.expect)(result.success).toBe(true);
|
|
@@ -51,6 +53,8 @@ const agentConfig_cjs_namespaceObject = require("../config/agentConfig.cjs");
|
|
|
51
53
|
]);
|
|
52
54
|
(0, external_vitest_namespaceObject.expect)(result.data.allowScriptExecution).toBe(true);
|
|
53
55
|
(0, external_vitest_namespaceObject.expect)(result.data.commandTimeout).toBe(300000);
|
|
56
|
+
(0, external_vitest_namespaceObject.expect)(result.data.browserProfile).toBe("trading");
|
|
57
|
+
(0, external_vitest_namespaceObject.expect)(result.data.browserTransport).toBe("relay");
|
|
54
58
|
}
|
|
55
59
|
});
|
|
56
60
|
(0, external_vitest_namespaceObject.it)("should allow subagents to override models", ()=>{
|
|
@@ -189,6 +193,7 @@ const agentConfig_cjs_namespaceObject = require("../config/agentConfig.cjs");
|
|
|
189
193
|
const validTools = [
|
|
190
194
|
"internet_search",
|
|
191
195
|
"web_crawler",
|
|
196
|
+
"browser_control",
|
|
192
197
|
"command_execute",
|
|
193
198
|
"background_terminal",
|
|
194
199
|
"think",
|
|
@@ -32,7 +32,9 @@ describe("Agent Configuration Schema", ()=>{
|
|
|
32
32
|
"mv"
|
|
33
33
|
],
|
|
34
34
|
allowScriptExecution: true,
|
|
35
|
-
commandTimeout: 300000
|
|
35
|
+
commandTimeout: 300000,
|
|
36
|
+
browserProfile: "trading",
|
|
37
|
+
browserTransport: "relay"
|
|
36
38
|
};
|
|
37
39
|
const result = validateAgentConfig(config);
|
|
38
40
|
expect(result.success).toBe(true);
|
|
@@ -49,6 +51,8 @@ describe("Agent Configuration Schema", ()=>{
|
|
|
49
51
|
]);
|
|
50
52
|
expect(result.data.allowScriptExecution).toBe(true);
|
|
51
53
|
expect(result.data.commandTimeout).toBe(300000);
|
|
54
|
+
expect(result.data.browserProfile).toBe("trading");
|
|
55
|
+
expect(result.data.browserTransport).toBe("relay");
|
|
52
56
|
}
|
|
53
57
|
});
|
|
54
58
|
it("should allow subagents to override models", ()=>{
|
|
@@ -187,6 +191,7 @@ describe("Agent Configuration Schema", ()=>{
|
|
|
187
191
|
const validTools = [
|
|
188
192
|
"internet_search",
|
|
189
193
|
"web_crawler",
|
|
194
|
+
"browser_control",
|
|
190
195
|
"command_execute",
|
|
191
196
|
"background_terminal",
|
|
192
197
|
"think",
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_exports__ = {};
|
|
3
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
4
|
+
const external_node_os_namespaceObject = require("node:os");
|
|
5
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
6
|
+
const external_vitest_namespaceObject = require("vitest");
|
|
7
|
+
const browser_control_cjs_namespaceObject = require("../tools/browser_control.cjs");
|
|
8
|
+
(0, external_vitest_namespaceObject.describe)("browser_control helpers", ()=>{
|
|
9
|
+
const tempDirs = [];
|
|
10
|
+
(0, external_vitest_namespaceObject.afterEach)(()=>{
|
|
11
|
+
for (const dir of tempDirs)(0, external_node_fs_namespaceObject.rmSync)(dir, {
|
|
12
|
+
recursive: true,
|
|
13
|
+
force: true
|
|
14
|
+
});
|
|
15
|
+
tempDirs.length = 0;
|
|
16
|
+
});
|
|
17
|
+
(0, external_vitest_namespaceObject.it)("removes stale DevToolsActivePort before launch", ()=>{
|
|
18
|
+
const userDataDir = (0, external_node_fs_namespaceObject.mkdtempSync)((0, external_node_path_namespaceObject.join)((0, external_node_os_namespaceObject.tmpdir)(), "wingman-browser-profile-"));
|
|
19
|
+
tempDirs.push(userDataDir);
|
|
20
|
+
const activePortPath = (0, external_node_path_namespaceObject.join)(userDataDir, "DevToolsActivePort");
|
|
21
|
+
(0, external_node_fs_namespaceObject.writeFileSync)(activePortPath, "52145\n/devtools/browser/stale");
|
|
22
|
+
(0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(activePortPath)).toBe(true);
|
|
23
|
+
(0, browser_control_cjs_namespaceObject.clearStaleDevtoolsArtifacts)(userDataDir);
|
|
24
|
+
(0, external_vitest_namespaceObject.expect)((0, external_node_fs_namespaceObject.existsSync)(activePortPath)).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
(0, external_vitest_namespaceObject.it)("does not throw when DevToolsActivePort is absent", ()=>{
|
|
27
|
+
const userDataDir = (0, external_node_fs_namespaceObject.mkdtempSync)((0, external_node_path_namespaceObject.join)((0, external_node_os_namespaceObject.tmpdir)(), "wingman-browser-profile-"));
|
|
28
|
+
tempDirs.push(userDataDir);
|
|
29
|
+
(0, external_vitest_namespaceObject.expect)(()=>(0, browser_control_cjs_namespaceObject.clearStaleDevtoolsArtifacts)(userDataDir)).not.toThrow();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
33
|
+
Object.defineProperty(exports, '__esModule', {
|
|
34
|
+
value: true
|
|
35
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { clearStaleDevtoolsArtifacts } from "../tools/browser_control.js";
|
|
6
|
+
describe("browser_control helpers", ()=>{
|
|
7
|
+
const tempDirs = [];
|
|
8
|
+
afterEach(()=>{
|
|
9
|
+
for (const dir of tempDirs)rmSync(dir, {
|
|
10
|
+
recursive: true,
|
|
11
|
+
force: true
|
|
12
|
+
});
|
|
13
|
+
tempDirs.length = 0;
|
|
14
|
+
});
|
|
15
|
+
it("removes stale DevToolsActivePort before launch", ()=>{
|
|
16
|
+
const userDataDir = mkdtempSync(join(tmpdir(), "wingman-browser-profile-"));
|
|
17
|
+
tempDirs.push(userDataDir);
|
|
18
|
+
const activePortPath = join(userDataDir, "DevToolsActivePort");
|
|
19
|
+
writeFileSync(activePortPath, "52145\n/devtools/browser/stale");
|
|
20
|
+
expect(existsSync(activePortPath)).toBe(true);
|
|
21
|
+
clearStaleDevtoolsArtifacts(userDataDir);
|
|
22
|
+
expect(existsSync(activePortPath)).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
it("does not throw when DevToolsActivePort is absent", ()=>{
|
|
25
|
+
const userDataDir = mkdtempSync(join(tmpdir(), "wingman-browser-profile-"));
|
|
26
|
+
tempDirs.push(userDataDir);
|
|
27
|
+
expect(()=>clearStaleDevtoolsArtifacts(userDataDir)).not.toThrow();
|
|
28
|
+
});
|
|
29
|
+
});
|