@agent-vm/agent-vm-worker 0.0.20
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/LICENSE +21 -0
- package/dist/config/worker-config.d.ts +158 -0
- package/dist/config/worker-config.d.ts.map +1 -0
- package/dist/config/worker-config.js +280 -0
- package/dist/config/worker-config.js.map +1 -0
- package/dist/context/gather-context.d.ts +9 -0
- package/dist/context/gather-context.d.ts.map +1 -0
- package/dist/context/gather-context.js +72 -0
- package/dist/context/gather-context.js.map +1 -0
- package/dist/coordinator/coordinator-helpers.d.ts +13 -0
- package/dist/coordinator/coordinator-helpers.d.ts.map +1 -0
- package/dist/coordinator/coordinator-helpers.js +63 -0
- package/dist/coordinator/coordinator-helpers.js.map +1 -0
- package/dist/coordinator/coordinator-types.d.ts +25 -0
- package/dist/coordinator/coordinator-types.d.ts.map +1 -0
- package/dist/coordinator/coordinator-types.js +2 -0
- package/dist/coordinator/coordinator-types.js.map +1 -0
- package/dist/coordinator/coordinator.d.ts +4 -0
- package/dist/coordinator/coordinator.d.ts.map +1 -0
- package/dist/coordinator/coordinator.js +74 -0
- package/dist/coordinator/coordinator.js.map +1 -0
- package/dist/coordinator/task-runner.d.ts +5 -0
- package/dist/coordinator/task-runner.d.ts.map +1 -0
- package/dist/coordinator/task-runner.js +310 -0
- package/dist/coordinator/task-runner.js.map +1 -0
- package/dist/git/git-operations.d.ts +33 -0
- package/dist/git/git-operations.d.ts.map +1 -0
- package/dist/git/git-operations.js +109 -0
- package/dist/git/git-operations.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +11 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +140 -0
- package/dist/main.js.map +1 -0
- package/dist/plan-phase/plan-cycle.d.ts +27 -0
- package/dist/plan-phase/plan-cycle.d.ts.map +1 -0
- package/dist/plan-phase/plan-cycle.js +83 -0
- package/dist/plan-phase/plan-cycle.js.map +1 -0
- package/dist/prompt/message-builders.d.ts +44 -0
- package/dist/prompt/message-builders.d.ts.map +1 -0
- package/dist/prompt/message-builders.js +83 -0
- package/dist/prompt/message-builders.js.map +1 -0
- package/dist/prompt/prompt-assembler.d.ts +11 -0
- package/dist/prompt/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt/prompt-assembler.js +34 -0
- package/dist/prompt/prompt-assembler.js.map +1 -0
- package/dist/prompt/prompt-defaults.d.ts +10 -0
- package/dist/prompt/prompt-defaults.d.ts.map +1 -0
- package/dist/prompt/prompt-defaults.js +200 -0
- package/dist/prompt/prompt-defaults.js.map +1 -0
- package/dist/server.d.ts +32 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +75 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/phase-names.d.ts +8 -0
- package/dist/shared/phase-names.d.ts.map +1 -0
- package/dist/shared/phase-names.js +11 -0
- package/dist/shared/phase-names.js.map +1 -0
- package/dist/shared/repo-location.d.ts +13 -0
- package/dist/shared/repo-location.d.ts.map +1 -0
- package/dist/shared/repo-location.js +9 -0
- package/dist/shared/repo-location.js.map +1 -0
- package/dist/shared/review-result.d.ts +17 -0
- package/dist/shared/review-result.d.ts.map +1 -0
- package/dist/shared/review-result.js +12 -0
- package/dist/shared/review-result.js.map +1 -0
- package/dist/shared/skill-types.d.ts +7 -0
- package/dist/shared/skill-types.d.ts.map +1 -0
- package/dist/shared/skill-types.js +6 -0
- package/dist/shared/skill-types.js.map +1 -0
- package/dist/shared/stderr.d.ts +2 -0
- package/dist/shared/stderr.d.ts.map +1 -0
- package/dist/shared/stderr.js +4 -0
- package/dist/shared/stderr.js.map +1 -0
- package/dist/state/event-log.d.ts +4 -0
- package/dist/state/event-log.d.ts.map +1 -0
- package/dist/state/event-log.js +67 -0
- package/dist/state/event-log.js.map +1 -0
- package/dist/state/task-event-types.d.ts +280 -0
- package/dist/state/task-event-types.d.ts.map +1 -0
- package/dist/state/task-event-types.js +106 -0
- package/dist/state/task-event-types.js.map +1 -0
- package/dist/state/task-state.d.ts +35 -0
- package/dist/state/task-state.d.ts.map +1 -0
- package/dist/state/task-state.js +191 -0
- package/dist/state/task-state.js.map +1 -0
- package/dist/validation-runner/verification-runner.d.ts +30 -0
- package/dist/validation-runner/verification-runner.d.ts.map +1 -0
- package/dist/validation-runner/verification-runner.js +196 -0
- package/dist/validation-runner/verification-runner.js.map +1 -0
- package/dist/work-executor/codex-executor.d.ts +9 -0
- package/dist/work-executor/codex-executor.d.ts.map +1 -0
- package/dist/work-executor/codex-executor.js +159 -0
- package/dist/work-executor/codex-executor.js.map +1 -0
- package/dist/work-executor/executor-factory.d.ts +4 -0
- package/dist/work-executor/executor-factory.d.ts.map +1 -0
- package/dist/work-executor/executor-factory.js +17 -0
- package/dist/work-executor/executor-factory.js.map +1 -0
- package/dist/work-executor/executor-interface.d.ts +33 -0
- package/dist/work-executor/executor-interface.d.ts.map +1 -0
- package/dist/work-executor/executor-interface.js +2 -0
- package/dist/work-executor/executor-interface.js.map +1 -0
- package/dist/work-executor/local-tool-mcp-server.d.ts +8 -0
- package/dist/work-executor/local-tool-mcp-server.d.ts.map +1 -0
- package/dist/work-executor/local-tool-mcp-server.js +187 -0
- package/dist/work-executor/local-tool-mcp-server.js.map +1 -0
- package/dist/work-executor/persistent-thread.d.ts +16 -0
- package/dist/work-executor/persistent-thread.d.ts.map +1 -0
- package/dist/work-executor/persistent-thread.js +37 -0
- package/dist/work-executor/persistent-thread.js.map +1 -0
- package/dist/work-phase/controller-tools/controller-tool-support.d.ts +19 -0
- package/dist/work-phase/controller-tools/controller-tool-support.d.ts.map +1 -0
- package/dist/work-phase/controller-tools/controller-tool-support.js +92 -0
- package/dist/work-phase/controller-tools/controller-tool-support.js.map +1 -0
- package/dist/work-phase/controller-tools/git-pull-default-tool.d.ts +10 -0
- package/dist/work-phase/controller-tools/git-pull-default-tool.d.ts.map +1 -0
- package/dist/work-phase/controller-tools/git-pull-default-tool.js +36 -0
- package/dist/work-phase/controller-tools/git-pull-default-tool.js.map +1 -0
- package/dist/work-phase/controller-tools/git-push-tool.d.ts +10 -0
- package/dist/work-phase/controller-tools/git-push-tool.d.ts.map +1 -0
- package/dist/work-phase/controller-tools/git-push-tool.js +45 -0
- package/dist/work-phase/controller-tools/git-push-tool.js.map +1 -0
- package/dist/work-phase/validation-tool.d.ts +11 -0
- package/dist/work-phase/validation-tool.d.ts.map +1 -0
- package/dist/work-phase/validation-tool.js +25 -0
- package/dist/work-phase/validation-tool.js.map +1 -0
- package/dist/work-phase/work-cycle.d.ts +28 -0
- package/dist/work-phase/work-cycle.d.ts.map +1 -0
- package/dist/work-phase/work-cycle.js +122 -0
- package/dist/work-phase/work-cycle.js.map +1 -0
- package/dist/wrapup-phase/wrapup-runner.d.ts +30 -0
- package/dist/wrapup-phase/wrapup-runner.d.ts.map +1 -0
- package/dist/wrapup-phase/wrapup-runner.js +91 -0
- package/dist/wrapup-phase/wrapup-runner.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import net from 'node:net';
|
|
2
|
+
import { serve } from '@hono/node-server';
|
|
3
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
4
|
+
import { WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js';
|
|
5
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
import { Hono } from 'hono';
|
|
7
|
+
const localToolServerCache = new Map();
|
|
8
|
+
let registeredCleanup = false;
|
|
9
|
+
function isPlainObject(value) {
|
|
10
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
11
|
+
}
|
|
12
|
+
function isCallToolContentItem(value) {
|
|
13
|
+
if (!isPlainObject(value) || typeof value.type !== 'string') {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
switch (value.type) {
|
|
17
|
+
case 'text':
|
|
18
|
+
return typeof value.text === 'string';
|
|
19
|
+
case 'image':
|
|
20
|
+
return typeof value.data === 'string' && typeof value.mimeType === 'string';
|
|
21
|
+
case 'audio':
|
|
22
|
+
return typeof value.data === 'string' && typeof value.mimeType === 'string';
|
|
23
|
+
case 'resource':
|
|
24
|
+
return isPlainObject(value.resource);
|
|
25
|
+
case 'resource_link':
|
|
26
|
+
return typeof value.uri === 'string' && typeof value.name === 'string';
|
|
27
|
+
default:
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function isCallToolResult(value) {
|
|
32
|
+
if (!isPlainObject(value) || !Array.isArray(value.content)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (!value.content.every((item) => isCallToolContentItem(item))) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if ('isError' in value && value.isError !== undefined && typeof value.isError !== 'boolean') {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if ('structuredContent' in value &&
|
|
42
|
+
value.structuredContent !== undefined &&
|
|
43
|
+
!isPlainObject(value.structuredContent)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
function toolSignature(tools) {
|
|
49
|
+
return JSON.stringify(tools.map((tool) => ({
|
|
50
|
+
name: tool.name,
|
|
51
|
+
description: tool.description,
|
|
52
|
+
inputSchema: tool.inputSchema,
|
|
53
|
+
})));
|
|
54
|
+
}
|
|
55
|
+
async function findOpenPort() {
|
|
56
|
+
return await new Promise((resolve, reject) => {
|
|
57
|
+
const server = net.createServer();
|
|
58
|
+
server.once('error', reject);
|
|
59
|
+
server.listen(0, '127.0.0.1', () => {
|
|
60
|
+
const address = server.address();
|
|
61
|
+
if (!address || typeof address === 'string') {
|
|
62
|
+
server.close(() => reject(new Error('Could not determine an open port.')));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
server.close((error) => {
|
|
66
|
+
if (error) {
|
|
67
|
+
reject(error);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
resolve(address.port);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function createToolDescriptor(tool) {
|
|
76
|
+
return {
|
|
77
|
+
name: tool.name,
|
|
78
|
+
description: tool.description,
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: 'object',
|
|
81
|
+
...tool.inputSchema,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function normalizeToolResult(result) {
|
|
86
|
+
if (isCallToolResult(result)) {
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
content: [
|
|
91
|
+
{
|
|
92
|
+
type: 'text',
|
|
93
|
+
text: typeof result === 'string' ? result : (JSON.stringify(result, null, 2) ?? 'null'),
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
...(isPlainObject(result) ? { structuredContent: result } : {}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function buildMcpApp(tools) {
|
|
100
|
+
const toolMap = new Map();
|
|
101
|
+
for (const tool of tools) {
|
|
102
|
+
toolMap.set(tool.name, tool);
|
|
103
|
+
}
|
|
104
|
+
const app = new Hono();
|
|
105
|
+
app.all('/mcp', async (context) => {
|
|
106
|
+
const transport = new WebStandardStreamableHTTPServerTransport();
|
|
107
|
+
const server = new Server({ name: 'agent-vm-local-tools', version: '1.0.0' }, { capabilities: { tools: { listChanged: false } } });
|
|
108
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
109
|
+
tools: tools.map((tool) => createToolDescriptor(tool)),
|
|
110
|
+
}));
|
|
111
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
112
|
+
const tool = toolMap.get(request.params.name);
|
|
113
|
+
if (!tool) {
|
|
114
|
+
return {
|
|
115
|
+
content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }],
|
|
116
|
+
isError: true,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const result = await tool.execute(request.params.arguments ?? {});
|
|
121
|
+
return normalizeToolResult(result);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
return {
|
|
125
|
+
content: [
|
|
126
|
+
{
|
|
127
|
+
type: 'text',
|
|
128
|
+
text: error instanceof Error ? error.message : String(error),
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
isError: true,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
await server.connect(transport);
|
|
136
|
+
return await transport.handleRequest(context.req.raw);
|
|
137
|
+
});
|
|
138
|
+
return app;
|
|
139
|
+
}
|
|
140
|
+
export async function getOrCreateLocalToolMcpServer(tools) {
|
|
141
|
+
if (tools.length === 0) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
const signature = toolSignature(tools);
|
|
145
|
+
const existing = localToolServerCache.get(signature);
|
|
146
|
+
if (existing) {
|
|
147
|
+
return existing;
|
|
148
|
+
}
|
|
149
|
+
const port = await findOpenPort();
|
|
150
|
+
const app = buildMcpApp(tools);
|
|
151
|
+
const serverHandle = serve({ fetch: app.fetch, port });
|
|
152
|
+
if (!registeredCleanup) {
|
|
153
|
+
const closeAllServers = () => {
|
|
154
|
+
for (const server of localToolServerCache.values()) {
|
|
155
|
+
void server.close();
|
|
156
|
+
}
|
|
157
|
+
localToolServerCache.clear();
|
|
158
|
+
};
|
|
159
|
+
process.once('exit', closeAllServers);
|
|
160
|
+
process.once('SIGINT', () => {
|
|
161
|
+
closeAllServers();
|
|
162
|
+
process.exit(130);
|
|
163
|
+
});
|
|
164
|
+
process.once('SIGTERM', () => {
|
|
165
|
+
closeAllServers();
|
|
166
|
+
process.exit(143);
|
|
167
|
+
});
|
|
168
|
+
registeredCleanup = true;
|
|
169
|
+
}
|
|
170
|
+
const server = {
|
|
171
|
+
url: `http://127.0.0.1:${port}/mcp`,
|
|
172
|
+
close: async () => {
|
|
173
|
+
await new Promise((resolve, reject) => {
|
|
174
|
+
serverHandle.close((error) => {
|
|
175
|
+
if (error) {
|
|
176
|
+
reject(error);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
resolve();
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
localToolServerCache.set(signature, server);
|
|
185
|
+
return server;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=local-tool-mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-tool-mcp-server.js","sourceRoot":"","sources":["../../src/work-executor/local-tool-mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { WorkExecutor } from './executor-interface.js';
|
|
2
|
+
export interface PersistentThreadResponse {
|
|
3
|
+
readonly response: string;
|
|
4
|
+
readonly tokenCount: number;
|
|
5
|
+
readonly threadId: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PersistentThread {
|
|
8
|
+
readonly send: (input: string) => Promise<PersistentThreadResponse>;
|
|
9
|
+
readonly threadId: () => string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface CreatePersistentThreadProps {
|
|
12
|
+
readonly executor: WorkExecutor;
|
|
13
|
+
readonly turnTimeoutMs: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function createPersistentThread(props: CreatePersistentThreadProps): PersistentThread;
|
|
16
|
+
//# sourceMappingURL=persistent-thread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-thread.d.ts","sourceRoot":"","sources":["../../src/work-executor/persistent-thread.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE7E,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAC/B;AA6BD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,gBAAgB,CAuB3F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
function toStructuredInput(input) {
|
|
2
|
+
return [{ type: 'text', text: input }];
|
|
3
|
+
}
|
|
4
|
+
function withTimeout(promise, timeoutMs, label) {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
const timeout = setTimeout(() => {
|
|
7
|
+
reject(new Error(`${label} timed out after ${String(timeoutMs)}ms`));
|
|
8
|
+
}, timeoutMs);
|
|
9
|
+
promise.then((value) => {
|
|
10
|
+
clearTimeout(timeout);
|
|
11
|
+
resolve(value);
|
|
12
|
+
}, (error) => {
|
|
13
|
+
clearTimeout(timeout);
|
|
14
|
+
reject(error);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function createPersistentThread(props) {
|
|
19
|
+
let started = false;
|
|
20
|
+
return {
|
|
21
|
+
async send(input) {
|
|
22
|
+
const result = await withTimeout(started
|
|
23
|
+
? props.executor.fix(toStructuredInput(input))
|
|
24
|
+
: props.executor.execute(toStructuredInput(input)), props.turnTimeoutMs, 'persistent-thread.send');
|
|
25
|
+
started = true;
|
|
26
|
+
return {
|
|
27
|
+
response: result.response,
|
|
28
|
+
tokenCount: result.tokenCount,
|
|
29
|
+
threadId: result.threadId,
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
threadId() {
|
|
33
|
+
return props.executor.getThreadId();
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=persistent-thread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-thread.js","sourceRoot":"","sources":["../../src/work-executor/persistent-thread.ts"],"names":[],"mappings":"AAkBA,SAAS,iBAAiB,CAAC,KAAa;IACvC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CACnB,OAAwB,EACxB,SAAiB,EACjB,KAAa;IAEb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,OAAO,CAAC,IAAI,CACX,CAAC,KAAK,EAAE,EAAE;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YAClB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,CAAC;QACf,CAAC,CACD,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAkC;IACxE,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO;QACN,KAAK,CAAC,IAAI,CAAC,KAAa;YACvB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC/B,OAAO;gBACN,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC9C,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EACnD,KAAK,CAAC,aAAa,EACnB,wBAAwB,CACxB,CAAC;YACF,OAAO,GAAG,IAAI,CAAC;YACf,OAAO;gBACN,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;aACzB,CAAC;QACH,CAAC;QACD,QAAQ;YACP,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { RepoLocation } from '../../shared/repo-location.js';
|
|
2
|
+
export interface ControllerToolRepoSelection {
|
|
3
|
+
readonly repo: RepoLocation | null;
|
|
4
|
+
readonly error: string | null;
|
|
5
|
+
}
|
|
6
|
+
export interface ControllerToolFailure {
|
|
7
|
+
readonly type: 'controller-error';
|
|
8
|
+
readonly success: false;
|
|
9
|
+
readonly artifact: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function isControllerToolFailure(value: unknown): value is ControllerToolFailure;
|
|
12
|
+
export declare function selectRepo(repos: readonly RepoLocation[], params: Record<string, unknown>): ControllerToolRepoSelection;
|
|
13
|
+
export declare function currentBranch(cwd: string): Promise<string | null>;
|
|
14
|
+
export declare function postControllerJson(options: {
|
|
15
|
+
readonly url: string;
|
|
16
|
+
readonly body: Record<string, unknown>;
|
|
17
|
+
readonly timeoutMs: number;
|
|
18
|
+
}): Promise<unknown>;
|
|
19
|
+
//# sourceMappingURL=controller-tool-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-tool-support.d.ts","sourceRoot":"","sources":["../../../src/work-phase/controller-tools/controller-tool-support.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAWtF;AAED,wBAAgB,UAAU,CACzB,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,2BAA2B,CAmC7B;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASvE;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IACjD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,OAAO,CAAC,CAiCnB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
export function isControllerToolFailure(value) {
|
|
3
|
+
return (typeof value === 'object' &&
|
|
4
|
+
value !== null &&
|
|
5
|
+
'type' in value &&
|
|
6
|
+
value.type === 'controller-error' &&
|
|
7
|
+
'success' in value &&
|
|
8
|
+
value.success === false &&
|
|
9
|
+
'artifact' in value &&
|
|
10
|
+
typeof value.artifact === 'string');
|
|
11
|
+
}
|
|
12
|
+
export function selectRepo(repos, params) {
|
|
13
|
+
const requestedWorkspacePath = typeof params.repoWorkspacePath === 'string' ? params.repoWorkspacePath : null;
|
|
14
|
+
const requestedRepoUrl = typeof params.repoUrl === 'string' ? params.repoUrl : null;
|
|
15
|
+
const configured = repos.map((repo) => `${repo.workspacePath} (${repo.repoUrl})`).join(', ');
|
|
16
|
+
if (repos.length === 0) {
|
|
17
|
+
return { repo: null, error: 'No repo configured.' };
|
|
18
|
+
}
|
|
19
|
+
if (requestedWorkspacePath) {
|
|
20
|
+
const repo = repos.find((candidate) => candidate.workspacePath === requestedWorkspacePath) ?? null;
|
|
21
|
+
return repo
|
|
22
|
+
? { repo, error: null }
|
|
23
|
+
: {
|
|
24
|
+
repo: null,
|
|
25
|
+
error: `repoWorkspacePath '${requestedWorkspacePath}' not found; configured repos: ${configured}`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (requestedRepoUrl) {
|
|
29
|
+
const repo = repos.find((candidate) => candidate.repoUrl === requestedRepoUrl) ?? null;
|
|
30
|
+
return repo
|
|
31
|
+
? { repo, error: null }
|
|
32
|
+
: {
|
|
33
|
+
repo: null,
|
|
34
|
+
error: `repoUrl '${requestedRepoUrl}' not found; configured repos: ${configured}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (repos.length > 1) {
|
|
38
|
+
return {
|
|
39
|
+
repo: null,
|
|
40
|
+
error: 'Multiple repos configured; provide repoWorkspacePath or repoUrl.',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return { repo: repos[0] ?? null, error: null };
|
|
44
|
+
}
|
|
45
|
+
export async function currentBranch(cwd) {
|
|
46
|
+
const result = await execa('git', ['branch', '--show-current'], {
|
|
47
|
+
cwd,
|
|
48
|
+
reject: false,
|
|
49
|
+
timeout: 10_000,
|
|
50
|
+
});
|
|
51
|
+
if ((result.exitCode ?? 0) !== 0)
|
|
52
|
+
return null;
|
|
53
|
+
const branch = result.stdout.trim();
|
|
54
|
+
return branch.length > 0 ? branch : null;
|
|
55
|
+
}
|
|
56
|
+
export async function postControllerJson(options) {
|
|
57
|
+
let response;
|
|
58
|
+
try {
|
|
59
|
+
response = await fetch(options.url, {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
headers: { 'content-type': 'application/json' },
|
|
62
|
+
signal: AbortSignal.timeout(options.timeoutMs),
|
|
63
|
+
body: JSON.stringify(options.body),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
return {
|
|
68
|
+
type: 'controller-error',
|
|
69
|
+
success: false,
|
|
70
|
+
artifact: `Controller request failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const text = await response.text();
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
return {
|
|
76
|
+
type: 'controller-error',
|
|
77
|
+
success: false,
|
|
78
|
+
artifact: `Controller request failed with HTTP ${String(response.status)}: ${text}`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
return JSON.parse(text);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return {
|
|
86
|
+
type: 'controller-error',
|
|
87
|
+
success: false,
|
|
88
|
+
artifact: `Controller response was not JSON: ${error instanceof Error ? error.message : String(error)}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=controller-tool-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-tool-support.js","sourceRoot":"","sources":["../../../src/work-phase/controller-tools/controller-tool-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RepoLocation } from '../../shared/repo-location.js';
|
|
2
|
+
import type { ToolDefinition } from '../../work-executor/executor-interface.js';
|
|
3
|
+
export interface CreateGitPullDefaultToolProps {
|
|
4
|
+
readonly controllerBaseUrl: string;
|
|
5
|
+
readonly zoneId: string;
|
|
6
|
+
readonly taskId: string;
|
|
7
|
+
readonly repos: readonly RepoLocation[];
|
|
8
|
+
}
|
|
9
|
+
export declare function createGitPullDefaultTool(props: CreateGitPullDefaultToolProps): ToolDefinition;
|
|
10
|
+
//# sourceMappingURL=git-pull-default-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-pull-default-tool.d.ts","sourceRoot":"","sources":["../../../src/work-phase/controller-tools/git-pull-default-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAShF,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;CACxC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,GAAG,cAAc,CAkC7F"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { isControllerToolFailure, postControllerJson, selectRepo, } from './controller-tool-support.js';
|
|
2
|
+
const CONTROLLER_TOOL_TIMEOUT_MS = 120_000;
|
|
3
|
+
export function createGitPullDefaultTool(props) {
|
|
4
|
+
return {
|
|
5
|
+
name: 'git-pull-default',
|
|
6
|
+
description: 'Ask the controller to fetch origin/default and fast-forward the local default branch ref. Does not modify your current branch. Returns commits added to default and divergence vs your current branch.',
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
repoWorkspacePath: { type: 'string' },
|
|
11
|
+
repoUrl: { type: 'string' },
|
|
12
|
+
},
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
},
|
|
15
|
+
async execute(params) {
|
|
16
|
+
const selected = selectRepo(props.repos, params);
|
|
17
|
+
if (!selected.repo) {
|
|
18
|
+
return {
|
|
19
|
+
type: 'pull-default',
|
|
20
|
+
success: false,
|
|
21
|
+
artifact: selected.error ?? 'Repo not found.',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const result = await postControllerJson({
|
|
25
|
+
url: `${props.controllerBaseUrl}/zones/${props.zoneId}/tasks/${props.taskId}/pull-default`,
|
|
26
|
+
timeoutMs: CONTROLLER_TOOL_TIMEOUT_MS,
|
|
27
|
+
body: { repoUrl: selected.repo.repoUrl },
|
|
28
|
+
});
|
|
29
|
+
if (isControllerToolFailure(result)) {
|
|
30
|
+
return { type: 'pull-default', success: false, artifact: result.artifact };
|
|
31
|
+
}
|
|
32
|
+
return { type: 'pull-default', success: true, artifact: result };
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=git-pull-default-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-pull-default-tool.js","sourceRoot":"","sources":["../../../src/work-phase/controller-tools/git-pull-default-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,uBAAuB,EACvB,kBAAkB,EAClB,UAAU,GACV,MAAM,8BAA8B,CAAC;AAEtC,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAS3C,MAAM,UAAU,wBAAwB,CAAC,KAAoC;IAC5E,OAAO;QACN,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACV,wMAAwM;QACzM,WAAW,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACX,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC3B;YACD,oBAAoB,EAAE,KAAK;SAC3B;QACD,KAAK,CAAC,OAAO,CAAC,MAAM;YACnB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpB,OAAO;oBACN,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,iBAAiB;iBAC7C,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;gBACvC,GAAG,EAAE,GAAG,KAAK,CAAC,iBAAiB,UAAU,KAAK,CAAC,MAAM,UAAU,KAAK,CAAC,MAAM,eAAe;gBAC1F,SAAS,EAAE,0BAA0B;gBACrC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;aACxC,CAAC,CAAC;YACH,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5E,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAClE,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RepoLocation } from '../../shared/repo-location.js';
|
|
2
|
+
import type { ToolDefinition } from '../../work-executor/executor-interface.js';
|
|
3
|
+
export interface CreateGitPushToolProps {
|
|
4
|
+
readonly controllerBaseUrl: string;
|
|
5
|
+
readonly zoneId: string;
|
|
6
|
+
readonly taskId: string;
|
|
7
|
+
readonly repos: readonly RepoLocation[];
|
|
8
|
+
}
|
|
9
|
+
export declare function createGitPushTool(props: CreateGitPushToolProps): ToolDefinition;
|
|
10
|
+
//# sourceMappingURL=git-push-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-push-tool.d.ts","sourceRoot":"","sources":["../../../src/work-phase/controller-tools/git-push-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAUhF,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;CACxC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,cAAc,CA2C/E"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { currentBranch, isControllerToolFailure, postControllerJson, selectRepo, } from './controller-tool-support.js';
|
|
2
|
+
const CONTROLLER_TOOL_TIMEOUT_MS = 120_000;
|
|
3
|
+
export function createGitPushTool(props) {
|
|
4
|
+
return {
|
|
5
|
+
name: 'git-push',
|
|
6
|
+
description: 'Push the current agent branch to origin via the controller. The VM has no GitHub token; only the controller can push. Refuses the repo default branch. Returns pushed commits and branch divergence.',
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
repoWorkspacePath: { type: 'string' },
|
|
11
|
+
repoUrl: { type: 'string' },
|
|
12
|
+
},
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
},
|
|
15
|
+
async execute(params) {
|
|
16
|
+
const selected = selectRepo(props.repos, params);
|
|
17
|
+
if (!selected.repo) {
|
|
18
|
+
return { type: 'push', success: false, artifact: selected.error ?? 'Repo not found.' };
|
|
19
|
+
}
|
|
20
|
+
const branchName = await currentBranch(selected.repo.workspacePath);
|
|
21
|
+
if (!branchName) {
|
|
22
|
+
return { type: 'push', success: false, artifact: 'Refusing to push from detached HEAD.' };
|
|
23
|
+
}
|
|
24
|
+
if (branchName === selected.repo.baseBranch) {
|
|
25
|
+
return {
|
|
26
|
+
type: 'push',
|
|
27
|
+
success: false,
|
|
28
|
+
artifact: `Refusing to push: you are on the default branch "${selected.repo.baseBranch}". Create an agent/* branch first and move your commits to it.`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const result = await postControllerJson({
|
|
32
|
+
url: `${props.controllerBaseUrl}/zones/${props.zoneId}/tasks/${props.taskId}/push-branches`,
|
|
33
|
+
timeoutMs: CONTROLLER_TOOL_TIMEOUT_MS,
|
|
34
|
+
body: {
|
|
35
|
+
branches: [{ repoUrl: selected.repo.repoUrl, branchName }],
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
if (isControllerToolFailure(result)) {
|
|
39
|
+
return { type: 'push', success: false, artifact: result.artifact };
|
|
40
|
+
}
|
|
41
|
+
return { type: 'push', success: true, artifact: result };
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=git-push-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-push-tool.js","sourceRoot":"","sources":["../../../src/work-phase/controller-tools/git-push-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,UAAU,GACV,MAAM,8BAA8B,CAAC;AAEtC,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAS3C,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC9D,OAAO;QACN,IAAI,EAAE,UAAU;QAChB,WAAW,EACV,sMAAsM;QACvM,WAAW,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACX,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC3B;YACD,oBAAoB,EAAE,KAAK;SAC3B;QACD,KAAK,CAAC,OAAO,CAAC,MAAM;YACnB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACxF,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACpE,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,sCAAsC,EAAE,CAAC;YAC3F,CAAC;YACD,IAAI,UAAU,KAAK,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC7C,OAAO;oBACN,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,oDAAoD,QAAQ,CAAC,IAAI,CAAC,UAAU,gEAAgE;iBACtJ,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;gBACvC,GAAG,EAAE,GAAG,KAAK,CAAC,iBAAiB,UAAU,KAAK,CAAC,MAAM,UAAU,KAAK,CAAC,MAAM,gBAAgB;gBAC3F,SAAS,EAAE,0BAA0B;gBACrC,IAAI,EAAE;oBACL,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;iBAC1D;aACD,CAAC,CAAC;YACH,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpE,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC1D,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { VerificationCommand } from '../validation-runner/verification-runner.js';
|
|
2
|
+
import type { ToolDefinition } from '../work-executor/executor-interface.js';
|
|
3
|
+
export interface BuildValidationToolProps {
|
|
4
|
+
readonly commands: readonly VerificationCommand[];
|
|
5
|
+
readonly cwd: string;
|
|
6
|
+
readonly timeoutMs: number;
|
|
7
|
+
readonly rawLogDir: string;
|
|
8
|
+
readonly attemptLabelPrefix: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function buildValidationTool(props: BuildValidationToolProps): ToolDefinition;
|
|
11
|
+
//# sourceMappingURL=validation-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-tool.d.ts","sourceRoot":"","sources":["../../src/work-phase/validation-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAEvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACpC;AAKD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,cAAc,CAsBnF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { runVerification } from '../validation-runner/verification-runner.js';
|
|
2
|
+
const DESCRIPTION = 'Runs the project-configured validation commands in sequence and returns their results. Each command writes a full raw stdout/stderr log.';
|
|
3
|
+
export function buildValidationTool(props) {
|
|
4
|
+
let callCount = 0;
|
|
5
|
+
return {
|
|
6
|
+
name: 'run_validation',
|
|
7
|
+
description: DESCRIPTION,
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {},
|
|
11
|
+
additionalProperties: false,
|
|
12
|
+
},
|
|
13
|
+
async execute(_params) {
|
|
14
|
+
callCount += 1;
|
|
15
|
+
return await runVerification({
|
|
16
|
+
commands: props.commands,
|
|
17
|
+
cwd: props.cwd,
|
|
18
|
+
timeoutMs: props.timeoutMs,
|
|
19
|
+
rawLogDir: props.rawLogDir,
|
|
20
|
+
attemptLabel: `${props.attemptLabelPrefix}-call-${String(callCount)}`,
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=validation-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-tool.js","sourceRoot":"","sources":["../../src/work-phase/validation-tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAW9E,MAAM,WAAW,GAChB,0IAA0I,CAAC;AAE5I,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IAClE,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO;QACN,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,oBAAoB,EAAE,KAAK;SAC3B;QACD,KAAK,CAAC,OAAO,CAAC,OAAgC;YAC7C,SAAS,IAAI,CAAC,CAAC;YACf,OAAO,MAAM,eAAe,CAAC;gBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,YAAY,EAAE,GAAG,KAAK,CAAC,kBAAkB,SAAS,MAAM,CAAC,SAAS,CAAC,EAAE;aACrE,CAAC,CAAC;QACJ,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { WorkCycleConfig } from '../config/worker-config.js';
|
|
2
|
+
import { type ReviewResult } from '../shared/review-result.js';
|
|
3
|
+
import { type VerificationCommandResult } from '../state/task-event-types.js';
|
|
4
|
+
import type { VerificationCommand } from '../validation-runner/verification-runner.js';
|
|
5
|
+
import type { PersistentThread, PersistentThreadResponse } from '../work-executor/persistent-thread.js';
|
|
6
|
+
export interface RunWorkCycleProps {
|
|
7
|
+
readonly spec: string;
|
|
8
|
+
readonly plan: string;
|
|
9
|
+
readonly planReview: ReviewResult | null;
|
|
10
|
+
readonly validationCommandList: readonly VerificationCommand[];
|
|
11
|
+
readonly cycle: WorkCycleConfig;
|
|
12
|
+
readonly workThread: PersistentThread;
|
|
13
|
+
readonly reviewThread: PersistentThread;
|
|
14
|
+
readonly systemPromptWorkAgent: string;
|
|
15
|
+
readonly systemPromptWorkReviewer: string;
|
|
16
|
+
readonly getDiff: () => Promise<string>;
|
|
17
|
+
readonly onWorkAgentTurn: (cycle: number, result: PersistentThreadResponse) => void | Promise<void>;
|
|
18
|
+
readonly onWorkReviewerTurn: (cycle: number, result: PersistentThreadResponse, review: ReviewResult, validationResults: readonly VerificationCommandResult[], validationSkipped: boolean) => void | Promise<void>;
|
|
19
|
+
/** Abort signal from the coordinator; when set, cycle stops after the current turn. */
|
|
20
|
+
readonly isClosed?: () => boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface WorkCycleResult {
|
|
23
|
+
readonly review: ReviewResult;
|
|
24
|
+
readonly validationResults: readonly VerificationCommandResult[];
|
|
25
|
+
readonly validationSkipped: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function runWorkCycle(props: RunWorkCycleProps): Promise<WorkCycleResult>;
|
|
28
|
+
//# sourceMappingURL=work-cycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-cycle.d.ts","sourceRoot":"","sources":["../../src/work-phase/work-cycle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAMlE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEnF,OAAO,EAEN,KAAK,yBAAyB,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,KAAK,EACX,gBAAgB,EAChB,wBAAwB,EACxB,MAAM,uCAAuC,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/D,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,wBAAwB,KAC5B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,YAAY,EACpB,iBAAiB,EAAE,SAAS,yBAAyB,EAAE,EACvD,iBAAiB,EAAE,OAAO,KACtB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACjE,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACpC;AAuED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAiGrF"}
|