@redplanethq/corebrain 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/browser/close.d.ts +10 -0
- package/dist/commands/browser/close.d.ts.map +1 -0
- package/dist/commands/browser/close.js +60 -0
- package/dist/commands/browser/close.js.map +1 -0
- package/dist/commands/browser/command.d.ts +10 -0
- package/dist/commands/browser/command.d.ts.map +1 -0
- package/dist/commands/browser/command.js +67 -0
- package/dist/commands/browser/command.js.map +1 -0
- package/dist/commands/browser/create-profile.d.ts +10 -0
- package/dist/commands/browser/create-profile.d.ts.map +1 -0
- package/dist/commands/browser/create-profile.js +29 -0
- package/dist/commands/browser/create-profile.js.map +1 -0
- package/dist/commands/browser/delete-profile.d.ts +10 -0
- package/dist/commands/browser/delete-profile.d.ts.map +1 -0
- package/dist/commands/browser/delete-profile.js +27 -0
- package/dist/commands/browser/delete-profile.js.map +1 -0
- package/dist/commands/browser/install.d.ts +8 -0
- package/dist/commands/browser/install.d.ts.map +1 -0
- package/dist/commands/browser/install.js +49 -0
- package/dist/commands/browser/install.js.map +1 -0
- package/dist/commands/browser/open.d.ts +12 -0
- package/dist/commands/browser/open.d.ts.map +1 -0
- package/dist/commands/browser/open.js +65 -0
- package/dist/commands/browser/open.js.map +1 -0
- package/dist/commands/browser/status.d.ts +8 -0
- package/dist/commands/browser/status.d.ts.map +1 -0
- package/dist/commands/browser/status.js +48 -0
- package/dist/commands/browser/status.js.map +1 -0
- package/dist/commands/coding/[agent]/config.d.ts +18 -0
- package/dist/commands/coding/[agent]/config.d.ts.map +1 -0
- package/dist/commands/coding/[agent]/config.js +91 -0
- package/dist/commands/coding/[agent]/config.js.map +1 -0
- package/dist/commands/coding/config.d.ts +23 -0
- package/dist/commands/coding/config.d.ts.map +1 -0
- package/dist/commands/coding/config.js +116 -0
- package/dist/commands/coding/config.js.map +1 -0
- package/dist/commands/coding/index.d.ts +8 -0
- package/dist/commands/coding/index.d.ts.map +1 -0
- package/dist/commands/coding/index.js +42 -0
- package/dist/commands/coding/index.js.map +1 -0
- package/dist/commands/coding/remove.d.ts +10 -0
- package/dist/commands/coding/remove.d.ts.map +1 -0
- package/dist/commands/coding/remove.js +37 -0
- package/dist/commands/coding/remove.js.map +1 -0
- package/dist/commands/coding/setup.d.ts +8 -0
- package/dist/commands/coding/setup.d.ts.map +1 -0
- package/dist/commands/coding/setup.js +114 -0
- package/dist/commands/coding/setup.js.map +1 -0
- package/dist/commands/exec/config.d.ts +14 -0
- package/dist/commands/exec/config.d.ts.map +1 -0
- package/dist/commands/exec/config.js +79 -0
- package/dist/commands/exec/config.js.map +1 -0
- package/dist/commands/gateway/config.d.ts +8 -0
- package/dist/commands/gateway/config.d.ts.map +1 -0
- package/dist/commands/gateway/config.js +192 -0
- package/dist/commands/gateway/config.js.map +1 -0
- package/dist/commands/gateway/index.d.ts +14 -0
- package/dist/commands/gateway/index.d.ts.map +1 -0
- package/dist/commands/gateway/index.js +10 -0
- package/dist/commands/gateway/index.js.map +1 -0
- package/dist/commands/gateway/off.d.ts +8 -0
- package/dist/commands/gateway/off.d.ts.map +1 -0
- package/dist/commands/gateway/off.js +70 -0
- package/dist/commands/gateway/off.js.map +1 -0
- package/dist/commands/gateway/on.d.ts +8 -0
- package/dist/commands/gateway/on.d.ts.map +1 -0
- package/dist/commands/gateway/on.js +135 -0
- package/dist/commands/gateway/on.js.map +1 -0
- package/dist/commands/gateway/restart.d.ts +8 -0
- package/dist/commands/gateway/restart.d.ts.map +1 -0
- package/dist/commands/gateway/restart.js +70 -0
- package/dist/commands/gateway/restart.js.map +1 -0
- package/dist/commands/gateway/status.d.ts +8 -0
- package/dist/commands/gateway/status.d.ts.map +1 -0
- package/dist/commands/gateway/status.js +98 -0
- package/dist/commands/gateway/status.js.map +1 -0
- package/dist/commands/gateway/uninstall.d.ts +8 -0
- package/dist/commands/gateway/uninstall.d.ts.map +1 -0
- package/dist/commands/gateway/uninstall.js +80 -0
- package/dist/commands/gateway/uninstall.js.map +1 -0
- package/dist/commands/index.d.ts +1 -5
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/login.d.ts +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/logout.d.ts +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/me.d.ts +1 -1
- package/dist/commands/me.d.ts.map +1 -1
- package/dist/commands/server.d.ts +10 -0
- package/dist/commands/server.d.ts.map +1 -0
- package/dist/commands/server.js +60 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/commands/token.d.ts +1 -1
- package/dist/commands/token.d.ts.map +1 -1
- package/dist/components/error-message.d.ts.map +1 -1
- package/dist/components/error-message.js +6 -1
- package/dist/components/error-message.js.map +1 -1
- package/dist/components/info-message.d.ts.map +1 -1
- package/dist/components/info-message.js +5 -1
- package/dist/components/info-message.js.map +1 -1
- package/dist/components/success-message.d.ts.map +1 -1
- package/dist/components/success-message.js +5 -1
- package/dist/components/success-message.js.map +1 -1
- package/dist/components/warning-message.d.ts +2 -3
- package/dist/components/warning-message.d.ts.map +1 -1
- package/dist/components/warning-message.js +10 -4
- package/dist/components/warning-message.js.map +1 -1
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +31 -30
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +4 -36
- package/dist/config/paths.js.map +1 -1
- package/dist/config/preferences.d.ts +14 -0
- package/dist/config/preferences.d.ts.map +1 -0
- package/dist/config/preferences.js +82 -0
- package/dist/config/preferences.js.map +1 -0
- package/dist/config/themes.d.ts +5 -0
- package/dist/config/themes.d.ts.map +1 -1
- package/dist/config/themes.js +5 -0
- package/dist/config/themes.js.map +1 -1
- package/dist/server/gateway-client.d.ts +75 -0
- package/dist/server/gateway-client.d.ts.map +1 -0
- package/dist/server/gateway-client.js +264 -0
- package/dist/server/gateway-client.js.map +1 -0
- package/dist/server/gateway-entry.d.ts +7 -0
- package/dist/server/gateway-entry.d.ts.map +1 -0
- package/dist/server/gateway-entry.js +113 -0
- package/dist/server/gateway-entry.js.map +1 -0
- package/dist/server/gateway.d.ts +5 -0
- package/dist/server/gateway.d.ts.map +1 -0
- package/dist/server/gateway.js +136 -0
- package/dist/server/gateway.js.map +1 -0
- package/dist/server/tools/browser-tools.d.ts +28 -0
- package/dist/server/tools/browser-tools.d.ts.map +1 -0
- package/dist/server/tools/browser-tools.js +179 -0
- package/dist/server/tools/browser-tools.js.map +1 -0
- package/dist/server/tools/coding-tools.d.ts +27 -0
- package/dist/server/tools/coding-tools.d.ts.map +1 -0
- package/dist/server/tools/coding-tools.js +345 -0
- package/dist/server/tools/coding-tools.js.map +1 -0
- package/dist/server/tools/exec-tools.d.ts +14 -0
- package/dist/server/tools/exec-tools.d.ts.map +1 -0
- package/dist/server/tools/exec-tools.js +203 -0
- package/dist/server/tools/exec-tools.js.map +1 -0
- package/dist/types/config.d.ts +36 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/agent-browser.d.ts +63 -0
- package/dist/utils/agent-browser.d.ts.map +1 -0
- package/dist/utils/agent-browser.js +301 -0
- package/dist/utils/agent-browser.js.map +1 -0
- package/dist/utils/coding-runner.d.ts +60 -0
- package/dist/utils/coding-runner.d.ts.map +1 -0
- package/dist/utils/coding-runner.js +174 -0
- package/dist/utils/coding-runner.js.map +1 -0
- package/dist/utils/coding-sessions.d.ts +61 -0
- package/dist/utils/coding-sessions.d.ts.map +1 -0
- package/dist/utils/coding-sessions.js +112 -0
- package/dist/utils/coding-sessions.js.map +1 -0
- package/dist/utils/process.d.ts +22 -0
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +81 -0
- package/dist/utils/process.js.map +1 -0
- package/dist/utils/service-manager/index.d.ts +49 -0
- package/dist/utils/service-manager/index.d.ts.map +1 -0
- package/dist/utils/service-manager/index.js +137 -0
- package/dist/utils/service-manager/index.js.map +1 -0
- package/dist/utils/service-manager/launchd.d.ts +31 -0
- package/dist/utils/service-manager/launchd.d.ts.map +1 -0
- package/dist/utils/service-manager/launchd.js +208 -0
- package/dist/utils/service-manager/launchd.js.map +1 -0
- package/dist/utils/service-manager/systemd.d.ts +31 -0
- package/dist/utils/service-manager/systemd.d.ts.map +1 -0
- package/dist/utils/service-manager/systemd.js +187 -0
- package/dist/utils/service-manager/systemd.js.map +1 -0
- package/dist/utils/tmux.d.ts +37 -0
- package/dist/utils/tmux.d.ts.map +1 -0
- package/dist/utils/tmux.js +96 -0
- package/dist/utils/tmux.js.map +1 -0
- package/package.json +15 -12
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import zod from 'zod';
|
|
2
|
+
import { browserOpen, browserClose, browserCommand, browserListSessions, browserGetProfiles, isBlockedCommand, } from '../../utils/agent-browser.js';
|
|
3
|
+
// ============ Zod Schemas ============
|
|
4
|
+
export const BrowserOpenSchema = zod.object({
|
|
5
|
+
session_name: zod.string().describe('Unique session name'),
|
|
6
|
+
url: zod.string().describe('URL to open'),
|
|
7
|
+
profile: zod.string().optional().default('corebrain').describe('Browser profile to use (default: corebrain)'),
|
|
8
|
+
});
|
|
9
|
+
export const BrowserCloseSchema = zod.object({
|
|
10
|
+
session_name: zod.string().describe('Session name to close'),
|
|
11
|
+
});
|
|
12
|
+
export const BrowserCommandSchema = zod.object({
|
|
13
|
+
session_name: zod.string().describe('Session name to run command on'),
|
|
14
|
+
command: zod.string().describe('Command to run (e.g., click, fill, type, screenshot, etc.)'),
|
|
15
|
+
args: zod.array(zod.string()).optional().default([]).describe('Command arguments'),
|
|
16
|
+
});
|
|
17
|
+
export const BrowserListSessionsSchema = zod.object({});
|
|
18
|
+
export const BrowserGetProfilesSchema = zod.object({});
|
|
19
|
+
// ============ JSON Schemas ============
|
|
20
|
+
const jsonSchemas = {
|
|
21
|
+
browser_open: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
session_name: { type: 'string', description: 'Unique session name' },
|
|
25
|
+
url: { type: 'string', description: 'URL to open' },
|
|
26
|
+
profile: { type: 'string', description: 'Browser profile to use (default: corebrain)' },
|
|
27
|
+
},
|
|
28
|
+
required: ['session_name', 'url'],
|
|
29
|
+
},
|
|
30
|
+
browser_close: {
|
|
31
|
+
type: 'object',
|
|
32
|
+
properties: {
|
|
33
|
+
session_name: { type: 'string', description: 'Session name to close' },
|
|
34
|
+
},
|
|
35
|
+
required: ['session_name'],
|
|
36
|
+
},
|
|
37
|
+
browser_command: {
|
|
38
|
+
type: 'object',
|
|
39
|
+
properties: {
|
|
40
|
+
session_name: { type: 'string', description: 'Session name to run command on' },
|
|
41
|
+
command: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'Command to run. Available: click, dblclick, fill, type, press, hover, select, check, uncheck, scroll, screenshot, snapshot, eval, get, is, find, wait, mouse, set, tab, frame, back, forward, reload. Blocked: open, close, cookies, storage, network, trace, highlight, console, errors, state, download',
|
|
44
|
+
},
|
|
45
|
+
args: {
|
|
46
|
+
type: 'array',
|
|
47
|
+
items: { type: 'string' },
|
|
48
|
+
description: 'Command arguments (selector, text, etc.)',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
required: ['session_name', 'command'],
|
|
52
|
+
},
|
|
53
|
+
browser_list_sessions: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {},
|
|
56
|
+
required: [],
|
|
57
|
+
description: 'List all active browser sessions (max 3)',
|
|
58
|
+
},
|
|
59
|
+
browser_get_profiles: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {},
|
|
62
|
+
required: [],
|
|
63
|
+
description: 'List all available browser profiles',
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
// ============ Tool Definitions ============
|
|
67
|
+
export const browserTools = [
|
|
68
|
+
{
|
|
69
|
+
name: 'browser_open',
|
|
70
|
+
description: 'Open a browser session with a URL. Creates profile if it doesn\'t exist. Max 3 concurrent sessions.',
|
|
71
|
+
inputSchema: jsonSchemas.browser_open,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'browser_close',
|
|
75
|
+
description: 'Close a browser session',
|
|
76
|
+
inputSchema: jsonSchemas.browser_close,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'browser_command',
|
|
80
|
+
description: 'Run a browser command on a session. Commands: click, dblclick, fill, type, press, hover, select, check, uncheck, scroll, screenshot, snapshot, eval, get, is, find, wait, mouse, set, tab, frame, back, forward, reload',
|
|
81
|
+
inputSchema: jsonSchemas.browser_command,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'browser_list_sessions',
|
|
85
|
+
description: 'List all active browser sessions',
|
|
86
|
+
inputSchema: jsonSchemas.browser_list_sessions,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'browser_get_profiles',
|
|
90
|
+
description: 'List all available browser profiles',
|
|
91
|
+
inputSchema: jsonSchemas.browser_get_profiles,
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
// ============ Tool Execution ============
|
|
95
|
+
export async function executeBrowserTool(toolName, params) {
|
|
96
|
+
try {
|
|
97
|
+
switch (toolName) {
|
|
98
|
+
case 'browser_open': {
|
|
99
|
+
const p = BrowserOpenSchema.parse(params);
|
|
100
|
+
const r = await browserOpen(p.session_name, p.url, p.profile);
|
|
101
|
+
if (r.code !== 0) {
|
|
102
|
+
return { success: false, error: r.stderr || 'Failed to open browser' };
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
success: true,
|
|
106
|
+
result: {
|
|
107
|
+
message: `Opened ${p.url} in session "${p.session_name}"`,
|
|
108
|
+
session_name: p.session_name,
|
|
109
|
+
profile: p.profile,
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
case 'browser_close': {
|
|
114
|
+
const p = BrowserCloseSchema.parse(params);
|
|
115
|
+
const r = await browserClose(p.session_name);
|
|
116
|
+
if (r.code !== 0) {
|
|
117
|
+
return { success: false, error: r.stderr || 'Failed to close browser' };
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
success: true,
|
|
121
|
+
result: { message: `Closed session "${p.session_name}"` },
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
case 'browser_command': {
|
|
125
|
+
const p = BrowserCommandSchema.parse(params);
|
|
126
|
+
// Check if command is blocked before executing
|
|
127
|
+
if (isBlockedCommand(p.command)) {
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
error: `Command "${p.command}" is blocked. Use browser_open or browser_close instead for open/close, other blocked commands are not available.`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const r = await browserCommand(p.session_name, p.command, p.args);
|
|
134
|
+
if (r.code !== 0) {
|
|
135
|
+
return { success: false, error: r.stderr || `Failed to run "${p.command}"` };
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
success: true,
|
|
139
|
+
result: {
|
|
140
|
+
message: `Executed "${p.command}" on session "${p.session_name}"`,
|
|
141
|
+
output: r.stdout,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
case 'browser_list_sessions': {
|
|
146
|
+
BrowserListSessionsSchema.parse(params);
|
|
147
|
+
const sessions = browserListSessions();
|
|
148
|
+
return {
|
|
149
|
+
success: true,
|
|
150
|
+
result: {
|
|
151
|
+
sessions,
|
|
152
|
+
count: sessions.length,
|
|
153
|
+
max_sessions: 3,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
case 'browser_get_profiles': {
|
|
158
|
+
BrowserGetProfilesSchema.parse(params);
|
|
159
|
+
const profiles = browserGetProfiles();
|
|
160
|
+
return {
|
|
161
|
+
success: true,
|
|
162
|
+
result: { profiles },
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
default:
|
|
166
|
+
return { success: false, error: `Unknown tool: ${toolName}` };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
if (err instanceof zod.ZodError) {
|
|
171
|
+
return { success: false, error: `Invalid parameters: ${err.message}` };
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
success: false,
|
|
175
|
+
error: err instanceof Error ? err.message : 'Unknown error',
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=browser-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-tools.js","sourceRoot":"","sources":["../../../src/server/tools/browser-tools.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EACN,WAAW,EACX,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,uBAAuB,CAAC;AAE/B,wCAAwC;AAExC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC;IAC3C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC1D,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CAC7G,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,CAAC;IAC5C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAC5D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IAC5F,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAClF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAUvD,yCAAyC;AAEzC,MAAM,WAAW,GAA4C;IAC5D,YAAY,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACX,YAAY,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAC;YAClE,GAAG,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAC;YACjD,OAAO,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAC;SACrF;QACD,QAAQ,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC;KACjC;IACD,aAAa,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACX,YAAY,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAC;SACpE;QACD,QAAQ,EAAE,CAAC,cAAc,CAAC;KAC1B;IACD,eAAe,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACX,YAAY,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAC;YAC7E,OAAO,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2SAA2S;aACxT;YACD,IAAI,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC;gBACvB,WAAW,EAAE,0CAA0C;aACvD;SACD;QACD,QAAQ,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC;KACrC;IACD,qBAAqB,EAAE;QACtB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,0CAA0C;KACvD;IACD,oBAAoB,EAAE;QACrB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,qCAAqC;KAClD;CACD,CAAC;AAEF,6CAA6C;AAE7C,MAAM,CAAC,MAAM,YAAY,GAAkB;IAC1C;QACC,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,qGAAqG;QAClH,WAAW,EAAE,WAAW,CAAC,YAAa;KACtC;IACD;QACC,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,WAAW,CAAC,aAAc;KACvC;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,yNAAyN;QACtO,WAAW,EAAE,WAAW,CAAC,eAAgB;KACzC;IACD;QACC,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE,WAAW,CAAC,qBAAsB;KAC/C;IACD;QACC,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE,WAAW,CAAC,oBAAqB;KAC9C;CACD,CAAC;AAEF,2CAA2C;AAE3C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,QAAgB,EAChB,MAA+B;IAE/B,IAAI,CAAC;QACJ,QAAQ,QAAQ,EAAE,CAAC;YAClB,KAAK,cAAc,CAAC,CAAC,CAAC;gBACrB,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC1C,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAClB,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,wBAAwB,EAAC,CAAC;gBACtE,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE;wBACP,OAAO,EAAE,UAAU,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,YAAY,GAAG;wBACzD,YAAY,EAAE,CAAC,CAAC,YAAY;wBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;qBAClB;iBACD,CAAC;YACH,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACtB,MAAM,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAClB,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,yBAAyB,EAAC,CAAC;gBACvE,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,EAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,YAAY,GAAG,EAAC;iBACvD,CAAC;YACH,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACxB,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAE7C,+CAA+C;gBAC/C,IAAI,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;oBACjC,OAAO;wBACN,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,YAAY,CAAC,CAAC,OAAO,mHAAmH;qBAC/I,CAAC;gBACH,CAAC;gBAED,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAClB,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,kBAAkB,CAAC,CAAC,OAAO,GAAG,EAAC,CAAC;gBAC5E,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE;wBACP,OAAO,EAAE,aAAa,CAAC,CAAC,OAAO,iBAAiB,CAAC,CAAC,YAAY,GAAG;wBACjE,MAAM,EAAE,CAAC,CAAC,MAAM;qBAChB;iBACD,CAAC;YACH,CAAC;YAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;gBAC9B,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;gBACvC,OAAO;oBACN,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE;wBACP,QAAQ;wBACR,KAAK,EAAE,QAAQ,CAAC,MAAM;wBACtB,YAAY,EAAE,CAAC;qBACf;iBACD,CAAC;YACH,CAAC;YAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC7B,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACvC,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;gBACtC,OAAO;oBACN,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,EAAC,QAAQ,EAAC;iBAClB,CAAC;YACH,CAAC;YAED;gBACC,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,QAAQ,EAAE,EAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,GAAG,CAAC,OAAO,EAAE,EAAC,CAAC;QACtE,CAAC;QACD,OAAO;YACN,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAC3D,CAAC;IACH,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import zod from 'zod';
|
|
2
|
+
import type { GatewayTool } from './browser-tools.js';
|
|
3
|
+
export declare const StartSessionSchema: zod.ZodObject<{
|
|
4
|
+
agent: zod.ZodString;
|
|
5
|
+
prompt: zod.ZodString;
|
|
6
|
+
dir: zod.ZodString;
|
|
7
|
+
model: zod.ZodOptional<zod.ZodString>;
|
|
8
|
+
systemPrompt: zod.ZodOptional<zod.ZodString>;
|
|
9
|
+
}, zod.core.$strip>;
|
|
10
|
+
export declare const ResumeSessionSchema: zod.ZodObject<{
|
|
11
|
+
sessionId: zod.ZodString;
|
|
12
|
+
prompt: zod.ZodString;
|
|
13
|
+
}, zod.core.$strip>;
|
|
14
|
+
export declare const CloseSessionSchema: zod.ZodObject<{
|
|
15
|
+
sessionId: zod.ZodString;
|
|
16
|
+
}, zod.core.$strip>;
|
|
17
|
+
export declare const ReadSessionSchema: zod.ZodObject<{
|
|
18
|
+
sessionId: zod.ZodString;
|
|
19
|
+
}, zod.core.$strip>;
|
|
20
|
+
export declare const ListSessionsSchema: zod.ZodObject<{}, zod.core.$strip>;
|
|
21
|
+
export declare const codingTools: GatewayTool[];
|
|
22
|
+
export declare function executeCodingTool(toolName: string, params: Record<string, unknown>): Promise<{
|
|
23
|
+
success: boolean;
|
|
24
|
+
result?: unknown;
|
|
25
|
+
error?: string;
|
|
26
|
+
}>;
|
|
27
|
+
//# sourceMappingURL=coding-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coding-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/coding-tools.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAoBjD,eAAO,MAAM,kBAAkB;;;;;;mBAM7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;mBAG9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;mBAE7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;mBAE5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,oCAAiB,CAAC;AA2EjD,eAAO,MAAM,WAAW,EAAE,WAAW,EA0BpC,CAAC;AA+NF,wBAAsB,iBAAiB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CA+B/D"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
import zod from 'zod';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { getSession, updateSession, listSessions, createSession, closeSession as closeStoredSession, } from '../../utils/coding-sessions.js';
|
|
5
|
+
import { getAgentConfig, buildStartArgs, buildResumeArgs, startAgentProcess, readProcessOutput, isProcessRunning, stopProcess, } from '../../utils/coding-runner.js';
|
|
6
|
+
// ============ Zod Schemas ============
|
|
7
|
+
export const StartSessionSchema = zod.object({
|
|
8
|
+
agent: zod.string(),
|
|
9
|
+
prompt: zod.string(),
|
|
10
|
+
dir: zod.string(),
|
|
11
|
+
model: zod.string().optional(),
|
|
12
|
+
systemPrompt: zod.string().optional(),
|
|
13
|
+
});
|
|
14
|
+
export const ResumeSessionSchema = zod.object({
|
|
15
|
+
sessionId: zod.string(),
|
|
16
|
+
prompt: zod.string(),
|
|
17
|
+
});
|
|
18
|
+
export const CloseSessionSchema = zod.object({
|
|
19
|
+
sessionId: zod.string(),
|
|
20
|
+
});
|
|
21
|
+
export const ReadSessionSchema = zod.object({
|
|
22
|
+
sessionId: zod.string(),
|
|
23
|
+
});
|
|
24
|
+
export const ListSessionsSchema = zod.object({});
|
|
25
|
+
// ============ JSON Schemas ============
|
|
26
|
+
const jsonSchemas = {
|
|
27
|
+
coding_start_session: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
agent: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Coding agent to use (e.g., "claude-code")',
|
|
33
|
+
},
|
|
34
|
+
prompt: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'The task/prompt to send to the agent',
|
|
37
|
+
},
|
|
38
|
+
dir: {
|
|
39
|
+
type: 'string',
|
|
40
|
+
description: 'Working directory for the session (must exist)',
|
|
41
|
+
},
|
|
42
|
+
model: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
description: 'Model to use (optional)',
|
|
45
|
+
},
|
|
46
|
+
systemPrompt: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'System prompt (optional)',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
required: ['agent', 'prompt', 'dir'],
|
|
52
|
+
},
|
|
53
|
+
coding_resume_session: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
sessionId: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
description: 'Session ID to resume',
|
|
59
|
+
},
|
|
60
|
+
prompt: {
|
|
61
|
+
type: 'string',
|
|
62
|
+
description: 'The prompt to send to continue the session',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
required: ['sessionId', 'prompt'],
|
|
66
|
+
},
|
|
67
|
+
coding_close_session: {
|
|
68
|
+
type: 'object',
|
|
69
|
+
properties: {
|
|
70
|
+
sessionId: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
description: 'Session ID to close',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
required: ['sessionId'],
|
|
76
|
+
},
|
|
77
|
+
coding_read_session: {
|
|
78
|
+
type: 'object',
|
|
79
|
+
properties: {
|
|
80
|
+
sessionId: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
description: 'Session ID to read output from',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
required: ['sessionId'],
|
|
86
|
+
},
|
|
87
|
+
coding_list_sessions: {
|
|
88
|
+
type: 'object',
|
|
89
|
+
properties: {},
|
|
90
|
+
required: [],
|
|
91
|
+
description: 'List all coding sessions',
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
// ============ Tool Definitions ============
|
|
95
|
+
export const codingTools = [
|
|
96
|
+
{
|
|
97
|
+
name: 'coding_start_session',
|
|
98
|
+
description: 'Start a new coding session with the specified agent (runs in background)',
|
|
99
|
+
inputSchema: jsonSchemas.coding_start_session,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'coding_resume_session',
|
|
103
|
+
description: 'Resume an existing coding session',
|
|
104
|
+
inputSchema: jsonSchemas.coding_resume_session,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'coding_close_session',
|
|
108
|
+
description: 'Close/stop a coding session',
|
|
109
|
+
inputSchema: jsonSchemas.coding_close_session,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'coding_read_session',
|
|
113
|
+
description: 'Read current output from a coding session (works while running)',
|
|
114
|
+
inputSchema: jsonSchemas.coding_read_session,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'coding_list_sessions',
|
|
118
|
+
description: 'List all coding sessions',
|
|
119
|
+
inputSchema: jsonSchemas.coding_list_sessions,
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
// ============ Tool Handlers ============
|
|
123
|
+
async function handleStartSession(params) {
|
|
124
|
+
// Check if directory exists
|
|
125
|
+
if (!existsSync(params.dir)) {
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
error: `Directory "${params.dir}" does not exist`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Get agent config
|
|
132
|
+
const config = getAgentConfig(params.agent);
|
|
133
|
+
if (!config) {
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
error: `Agent "${params.agent}" not configured. Run 'corebrain coding config --agent ${params.agent}' to set up.`,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Generate session ID and create session
|
|
140
|
+
const sessionId = randomUUID();
|
|
141
|
+
const session = createSession({
|
|
142
|
+
sessionId,
|
|
143
|
+
agent: params.agent,
|
|
144
|
+
prompt: params.prompt,
|
|
145
|
+
dir: params.dir,
|
|
146
|
+
});
|
|
147
|
+
updateSession(session);
|
|
148
|
+
// Build command args
|
|
149
|
+
const args = buildStartArgs(config, {
|
|
150
|
+
prompt: params.prompt,
|
|
151
|
+
sessionId,
|
|
152
|
+
model: params.model,
|
|
153
|
+
systemPrompt: params.systemPrompt,
|
|
154
|
+
});
|
|
155
|
+
// Start process in background
|
|
156
|
+
const { pid } = startAgentProcess(sessionId, config, args, params.dir);
|
|
157
|
+
return {
|
|
158
|
+
success: true,
|
|
159
|
+
result: {
|
|
160
|
+
sessionId,
|
|
161
|
+
pid,
|
|
162
|
+
status: 'running',
|
|
163
|
+
message: 'Session started. Use coding_read_session to check output.',
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
async function handleResumeSession(params) {
|
|
168
|
+
// Get existing session
|
|
169
|
+
const session = getSession(params.sessionId);
|
|
170
|
+
if (!session) {
|
|
171
|
+
return {
|
|
172
|
+
success: false,
|
|
173
|
+
error: `Session "${params.sessionId}" not found`,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Check if already running
|
|
177
|
+
if (isProcessRunning(params.sessionId)) {
|
|
178
|
+
return {
|
|
179
|
+
success: false,
|
|
180
|
+
error: `Session "${params.sessionId}" is already running`,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// Check if directory still exists
|
|
184
|
+
if (!existsSync(session.dir)) {
|
|
185
|
+
return {
|
|
186
|
+
success: false,
|
|
187
|
+
error: `Session directory "${session.dir}" no longer exists`,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// Get agent config
|
|
191
|
+
const config = getAgentConfig(session.agent);
|
|
192
|
+
if (!config) {
|
|
193
|
+
return {
|
|
194
|
+
success: false,
|
|
195
|
+
error: `Agent "${session.agent}" not configured`,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// Update session status
|
|
199
|
+
session.status = 'running';
|
|
200
|
+
session.prompt = params.prompt;
|
|
201
|
+
session.updatedAt = Date.now();
|
|
202
|
+
updateSession(session);
|
|
203
|
+
// Build resume args
|
|
204
|
+
const args = buildResumeArgs(config, {
|
|
205
|
+
prompt: params.prompt,
|
|
206
|
+
sessionId: params.sessionId,
|
|
207
|
+
});
|
|
208
|
+
// Start process in background
|
|
209
|
+
const { pid } = startAgentProcess(params.sessionId, config, args, session.dir);
|
|
210
|
+
return {
|
|
211
|
+
success: true,
|
|
212
|
+
result: {
|
|
213
|
+
sessionId: params.sessionId,
|
|
214
|
+
pid,
|
|
215
|
+
status: 'running',
|
|
216
|
+
message: 'Session resumed. Use coding_read_session to check output.',
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
function handleCloseSession(params) {
|
|
221
|
+
const session = getSession(params.sessionId);
|
|
222
|
+
if (!session) {
|
|
223
|
+
return {
|
|
224
|
+
success: false,
|
|
225
|
+
error: `Session "${params.sessionId}" not found`,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
// Stop the process if running (this triggers auto-save in runner)
|
|
229
|
+
const wasRunning = stopProcess(params.sessionId);
|
|
230
|
+
// Mark as closed in sessions.json
|
|
231
|
+
closeStoredSession(params.sessionId);
|
|
232
|
+
return {
|
|
233
|
+
success: true,
|
|
234
|
+
result: {
|
|
235
|
+
sessionId: params.sessionId,
|
|
236
|
+
wasRunning,
|
|
237
|
+
message: 'Session closed',
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function handleReadSession(params) {
|
|
242
|
+
// First check stored session exists
|
|
243
|
+
const session = getSession(params.sessionId);
|
|
244
|
+
if (!session) {
|
|
245
|
+
return {
|
|
246
|
+
success: false,
|
|
247
|
+
error: `Session "${params.sessionId}" not found`,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
// Read from running process
|
|
251
|
+
const output = readProcessOutput(params.sessionId);
|
|
252
|
+
if (output.found) {
|
|
253
|
+
// Process is tracked in memory, return live output
|
|
254
|
+
const status = output.running
|
|
255
|
+
? 'running'
|
|
256
|
+
: output.exitCode === 0
|
|
257
|
+
? 'completed'
|
|
258
|
+
: 'error';
|
|
259
|
+
return {
|
|
260
|
+
success: true,
|
|
261
|
+
result: {
|
|
262
|
+
sessionId: session.sessionId,
|
|
263
|
+
agent: session.agent,
|
|
264
|
+
prompt: session.prompt,
|
|
265
|
+
dir: session.dir,
|
|
266
|
+
status,
|
|
267
|
+
running: output.running,
|
|
268
|
+
output: output.stdout,
|
|
269
|
+
error: output.stderr || undefined,
|
|
270
|
+
exitCode: output.exitCode,
|
|
271
|
+
startedAt: session.startedAt,
|
|
272
|
+
updatedAt: session.updatedAt,
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
// Process not in memory, return stored session data from sessions.json
|
|
277
|
+
return {
|
|
278
|
+
success: true,
|
|
279
|
+
result: {
|
|
280
|
+
sessionId: session.sessionId,
|
|
281
|
+
agent: session.agent,
|
|
282
|
+
prompt: session.prompt,
|
|
283
|
+
dir: session.dir,
|
|
284
|
+
status: session.status,
|
|
285
|
+
running: false,
|
|
286
|
+
output: session.output,
|
|
287
|
+
error: session.error,
|
|
288
|
+
exitCode: null,
|
|
289
|
+
startedAt: session.startedAt,
|
|
290
|
+
updatedAt: session.updatedAt,
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function handleListSessions() {
|
|
295
|
+
const sessions = listSessions();
|
|
296
|
+
return {
|
|
297
|
+
success: true,
|
|
298
|
+
result: {
|
|
299
|
+
sessions: sessions.map((s) => {
|
|
300
|
+
// Check if process is still running
|
|
301
|
+
const running = isProcessRunning(s.sessionId);
|
|
302
|
+
return {
|
|
303
|
+
sessionId: s.sessionId,
|
|
304
|
+
agent: s.agent,
|
|
305
|
+
dir: s.dir,
|
|
306
|
+
status: running ? 'running' : s.status,
|
|
307
|
+
running,
|
|
308
|
+
startedAt: s.startedAt,
|
|
309
|
+
updatedAt: s.updatedAt,
|
|
310
|
+
};
|
|
311
|
+
}),
|
|
312
|
+
count: sessions.length,
|
|
313
|
+
},
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
// ============ Tool Execution ============
|
|
317
|
+
export async function executeCodingTool(toolName, params) {
|
|
318
|
+
try {
|
|
319
|
+
switch (toolName) {
|
|
320
|
+
case 'coding_start_session':
|
|
321
|
+
return await handleStartSession(StartSessionSchema.parse(params));
|
|
322
|
+
case 'coding_resume_session':
|
|
323
|
+
return await handleResumeSession(ResumeSessionSchema.parse(params));
|
|
324
|
+
case 'coding_close_session':
|
|
325
|
+
return handleCloseSession(CloseSessionSchema.parse(params));
|
|
326
|
+
case 'coding_read_session':
|
|
327
|
+
return handleReadSession(ReadSessionSchema.parse(params));
|
|
328
|
+
case 'coding_list_sessions':
|
|
329
|
+
ListSessionsSchema.parse(params);
|
|
330
|
+
return handleListSessions();
|
|
331
|
+
default:
|
|
332
|
+
return { success: false, error: `Unknown tool: ${toolName}` };
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
if (err instanceof zod.ZodError) {
|
|
337
|
+
return { success: false, error: `Invalid parameters: ${err.message}` };
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
success: false,
|
|
341
|
+
error: err instanceof Error ? err.message : 'Unknown error',
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=coding-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coding-tools.js","sourceRoot":"","sources":["../../../src/server/tools/coding-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import zod from 'zod';
|
|
2
|
+
import type { GatewayTool } from './browser-tools.js';
|
|
3
|
+
export declare const ExecCommandSchema: zod.ZodObject<{
|
|
4
|
+
command: zod.ZodString;
|
|
5
|
+
dir: zod.ZodOptional<zod.ZodString>;
|
|
6
|
+
timeout: zod.ZodOptional<zod.ZodNumber>;
|
|
7
|
+
}, zod.core.$strip>;
|
|
8
|
+
export declare const execTools: GatewayTool[];
|
|
9
|
+
export declare function executeExecTool(toolName: string, params: Record<string, unknown>): Promise<{
|
|
10
|
+
success: boolean;
|
|
11
|
+
result?: unknown;
|
|
12
|
+
error?: string;
|
|
13
|
+
}>;
|
|
14
|
+
//# sourceMappingURL=exec-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/exec-tools.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAKtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAQjD,eAAO,MAAM,iBAAiB;;;;mBAI5B,CAAC;AA2BH,eAAO,MAAM,SAAS,EAAE,WAAW,EAMlC,CAAC;AA4KF,wBAAsB,eAAe,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,CAkB/D"}
|