mcp-codex-subagent 2.0.9 → 2.0.11
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/event/bus.d.ts +53 -0
- package/dist/event/bus.d.ts.map +1 -0
- package/dist/event/bus.js +94 -0
- package/dist/event/bus.js.map +1 -0
- package/dist/event/throttle.d.ts +36 -0
- package/dist/event/throttle.d.ts.map +1 -0
- package/dist/event/throttle.js +66 -0
- package/dist/event/throttle.js.map +1 -0
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- package/dist/process/event-parser.d.ts +37 -0
- package/dist/process/event-parser.d.ts.map +1 -0
- package/dist/process/event-parser.js +141 -0
- package/dist/process/event-parser.js.map +1 -0
- package/dist/process/runner.d.ts +48 -0
- package/dist/process/runner.d.ts.map +1 -0
- package/dist/process/runner.js +227 -0
- package/dist/process/runner.js.map +1 -0
- package/dist/process/types.d.ts +74 -0
- package/dist/process/types.d.ts.map +1 -0
- package/dist/process/types.js +5 -0
- package/dist/process/types.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +128 -36
- package/dist/server.js.map +1 -1
- package/dist/services/account-rotator.d.ts +28 -0
- package/dist/services/account-rotator.d.ts.map +1 -0
- package/dist/services/account-rotator.js +216 -0
- package/dist/services/account-rotator.js.map +1 -0
- package/dist/services/output-file.d.ts.map +1 -1
- package/dist/services/output-file.js +80 -36
- package/dist/services/output-file.js.map +1 -1
- package/dist/services/template-init.d.ts +10 -0
- package/dist/services/template-init.d.ts.map +1 -0
- package/dist/services/template-init.js +41 -0
- package/dist/services/template-init.js.map +1 -0
- package/dist/session/file-storage.d.ts +27 -0
- package/dist/session/file-storage.d.ts.map +1 -0
- package/dist/session/file-storage.js +281 -0
- package/dist/session/file-storage.js.map +1 -0
- package/dist/session/storage.js +1 -1
- package/dist/session/storage.js.map +1 -1
- package/dist/task/state-machine.d.ts +27 -0
- package/dist/task/state-machine.d.ts.map +1 -0
- package/dist/task/state-machine.js +59 -0
- package/dist/task/state-machine.js.map +1 -0
- package/dist/task/store.d.ts +91 -0
- package/dist/task/store.d.ts.map +1 -0
- package/dist/task/store.js +317 -0
- package/dist/task/store.js.map +1 -0
- package/dist/task/types.d.ts +72 -0
- package/dist/task/types.d.ts.map +1 -0
- package/dist/task/types.js +13 -0
- package/dist/task/types.js.map +1 -0
- package/dist/templates/index.d.ts +16 -0
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +57 -5
- package/dist/templates/index.js.map +1 -1
- package/dist/tools/definitions.d.ts +5 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +253 -179
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/description-builder.d.ts +18 -0
- package/dist/tools/description-builder.d.ts.map +1 -0
- package/dist/tools/description-builder.js +88 -0
- package/dist/tools/description-builder.js.map +1 -0
- package/dist/tools/handlers.d.ts +19 -17
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +287 -341
- package/dist/tools/handlers.js.map +1 -1
- package/dist/types.d.ts +5 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -10
- package/dist/types.js.map +1 -1
- package/dist/utils/ring-buffer.d.ts +41 -0
- package/dist/utils/ring-buffer.d.ts.map +1 -0
- package/dist/utils/ring-buffer.js +83 -0
- package/dist/utils/ring-buffer.js.map +1 -0
- package/dist/wave/dag.d.ts +32 -0
- package/dist/wave/dag.d.ts.map +1 -0
- package/dist/wave/dag.js +186 -0
- package/dist/wave/dag.js.map +1 -0
- package/dist/wave/git.d.ts +57 -0
- package/dist/wave/git.d.ts.map +1 -0
- package/dist/wave/git.js +227 -0
- package/dist/wave/git.js.map +1 -0
- package/dist/wave/orchestrator.d.ts +15 -0
- package/dist/wave/orchestrator.d.ts.map +1 -0
- package/dist/wave/orchestrator.js +565 -0
- package/dist/wave/orchestrator.js.map +1 -0
- package/dist/wave/progress.d.ts +51 -0
- package/dist/wave/progress.d.ts.map +1 -0
- package/dist/wave/progress.js +176 -0
- package/dist/wave/progress.js.map +1 -0
- package/dist/wave/registry.d.ts +66 -0
- package/dist/wave/registry.d.ts.map +1 -0
- package/dist/wave/registry.js +340 -0
- package/dist/wave/registry.js.map +1 -0
- package/dist/wave/semaphore.d.ts +42 -0
- package/dist/wave/semaphore.d.ts.map +1 -0
- package/dist/wave/semaphore.js +119 -0
- package/dist/wave/semaphore.js.map +1 -0
- package/dist/wave/types.d.ts +197 -0
- package/dist/wave/types.d.ts.map +1 -0
- package/dist/wave/types.js +147 -0
- package/dist/wave/types.js.map +1 -0
- package/package.json +1 -1
- package/dist/services/task-manager.d.ts +0 -69
- package/dist/services/task-manager.d.ts.map +0 -1
- package/dist/services/task-manager.js +0 -173
- package/dist/services/task-manager.js.map +0 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Async counting semaphore with FIFO fairness for global concurrency control.
|
|
3
|
+
*
|
|
4
|
+
* Module-level singleton shared across all groups.
|
|
5
|
+
* Supports AbortSignal for timeout/shutdown cancellation.
|
|
6
|
+
*/
|
|
7
|
+
function envInt(name, fallback) {
|
|
8
|
+
const raw = process.env[name];
|
|
9
|
+
if (!raw)
|
|
10
|
+
return fallback;
|
|
11
|
+
const parsed = parseInt(raw, 10);
|
|
12
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
13
|
+
}
|
|
14
|
+
export class AsyncSemaphore {
|
|
15
|
+
permits;
|
|
16
|
+
maxPermits;
|
|
17
|
+
queue = [];
|
|
18
|
+
disposed = false;
|
|
19
|
+
constructor(maxPermits) {
|
|
20
|
+
this.maxPermits = maxPermits ?? envInt('MAX_CONCURRENT_AGENTS', 20);
|
|
21
|
+
this.permits = this.maxPermits;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Acquire a permit. Resolves immediately if available,
|
|
25
|
+
* otherwise FIFO-queues until a permit is released.
|
|
26
|
+
*
|
|
27
|
+
* Rejects if:
|
|
28
|
+
* - The semaphore has been disposed
|
|
29
|
+
* - The provided AbortSignal fires while queued
|
|
30
|
+
*/
|
|
31
|
+
acquire(signal) {
|
|
32
|
+
if (this.disposed) {
|
|
33
|
+
return Promise.reject(new Error('Semaphore disposed'));
|
|
34
|
+
}
|
|
35
|
+
if (signal?.aborted) {
|
|
36
|
+
return Promise.reject(new Error('Semaphore acquire aborted'));
|
|
37
|
+
}
|
|
38
|
+
if (this.permits > 0) {
|
|
39
|
+
this.permits--;
|
|
40
|
+
return Promise.resolve();
|
|
41
|
+
}
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
const waiter = { resolve, reject, signal };
|
|
44
|
+
if (signal) {
|
|
45
|
+
const onAbort = () => {
|
|
46
|
+
const idx = this.queue.indexOf(waiter);
|
|
47
|
+
if (idx >= 0) {
|
|
48
|
+
this.queue.splice(idx, 1);
|
|
49
|
+
reject(new Error('Semaphore acquire aborted'));
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
waiter.abortHandler = onAbort;
|
|
53
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
54
|
+
}
|
|
55
|
+
this.queue.push(waiter);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Release a permit. Wakes the oldest queued waiter (FIFO)
|
|
60
|
+
* or increments the available permit count.
|
|
61
|
+
*/
|
|
62
|
+
release() {
|
|
63
|
+
if (this.disposed)
|
|
64
|
+
return;
|
|
65
|
+
const next = this.queue.shift();
|
|
66
|
+
if (next) {
|
|
67
|
+
// Clean up abort listener before resolving
|
|
68
|
+
if (next.abortHandler && next.signal) {
|
|
69
|
+
next.signal.removeEventListener('abort', next.abortHandler);
|
|
70
|
+
}
|
|
71
|
+
next.resolve();
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.permits = Math.min(this.permits + 1, this.maxPermits);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Dispose the semaphore: reject all queued waiters and prevent
|
|
79
|
+
* future acquisitions. Called on server shutdown.
|
|
80
|
+
*/
|
|
81
|
+
dispose() {
|
|
82
|
+
this.disposed = true;
|
|
83
|
+
const err = new Error('Semaphore disposed');
|
|
84
|
+
while (this.queue.length > 0) {
|
|
85
|
+
const waiter = this.queue.shift();
|
|
86
|
+
if (waiter.abortHandler && waiter.signal) {
|
|
87
|
+
waiter.signal.removeEventListener('abort', waiter.abortHandler);
|
|
88
|
+
}
|
|
89
|
+
waiter.reject(err);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Number of permits currently available. */
|
|
93
|
+
get available() {
|
|
94
|
+
return this.permits;
|
|
95
|
+
}
|
|
96
|
+
/** Number of waiters currently queued. */
|
|
97
|
+
get waiting() {
|
|
98
|
+
return this.queue.length;
|
|
99
|
+
}
|
|
100
|
+
/** Whether the semaphore has been disposed. */
|
|
101
|
+
get isDisposed() {
|
|
102
|
+
return this.disposed;
|
|
103
|
+
}
|
|
104
|
+
/** Reset for testing. */
|
|
105
|
+
resetForTesting() {
|
|
106
|
+
this.disposed = false;
|
|
107
|
+
this.permits = this.maxPermits;
|
|
108
|
+
while (this.queue.length > 0) {
|
|
109
|
+
const waiter = this.queue.shift();
|
|
110
|
+
if (waiter.abortHandler && waiter.signal) {
|
|
111
|
+
waiter.signal.removeEventListener('abort', waiter.abortHandler);
|
|
112
|
+
}
|
|
113
|
+
waiter.reject(new Error('Reset for testing'));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Module-level singleton
|
|
118
|
+
export const concurrencySemaphore = new AsyncSemaphore();
|
|
119
|
+
//# sourceMappingURL=semaphore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semaphore.js","sourceRoot":"","sources":["../../src/wave/semaphore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the wave sub-agent group orchestration module.
|
|
3
|
+
*
|
|
4
|
+
* Two-level state machines:
|
|
5
|
+
* Group: waiting_deps → creating_worktree → running → committing → done_*
|
|
6
|
+
* Agent: pending → queued → running → done_* | blocked | timed_out
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import type { ToolHandlerContext } from '../types.js';
|
|
10
|
+
export type GroupState = 'waiting_deps' | 'creating_worktree' | 'running' | 'committing' | 'done_success' | 'done_failed' | 'done_timeout';
|
|
11
|
+
export declare const GROUP_TERMINAL_STATES: ReadonlySet<GroupState>;
|
|
12
|
+
/**
|
|
13
|
+
* Valid group state transitions.
|
|
14
|
+
*/
|
|
15
|
+
export declare const GROUP_TRANSITIONS: ReadonlyMap<GroupState, ReadonlySet<GroupState>>;
|
|
16
|
+
export declare function isValidGroupTransition(from: GroupState, to: GroupState): boolean;
|
|
17
|
+
export declare function isGroupTerminal(state: GroupState): boolean;
|
|
18
|
+
export type AgentState = 'pending' | 'queued' | 'running' | 'done_success' | 'done_failed' | 'blocked' | 'timed_out';
|
|
19
|
+
export declare const AGENT_TERMINAL_STATES: ReadonlySet<AgentState>;
|
|
20
|
+
/**
|
|
21
|
+
* Valid agent state transitions.
|
|
22
|
+
* Note: running → queued is the retry path.
|
|
23
|
+
*/
|
|
24
|
+
export declare const AGENT_TRANSITIONS: ReadonlyMap<AgentState, ReadonlySet<AgentState>>;
|
|
25
|
+
export declare function isValidAgentTransition(from: AgentState, to: AgentState): boolean;
|
|
26
|
+
export declare function isAgentTerminal(state: AgentState): boolean;
|
|
27
|
+
export interface AgentRecord {
|
|
28
|
+
alias: string;
|
|
29
|
+
state: AgentState;
|
|
30
|
+
taskId?: string;
|
|
31
|
+
prompt: string;
|
|
32
|
+
role?: string;
|
|
33
|
+
specialization?: string;
|
|
34
|
+
dependsOn: string[];
|
|
35
|
+
attempts: number;
|
|
36
|
+
maxAttempts: number;
|
|
37
|
+
error?: string;
|
|
38
|
+
startedAt?: string;
|
|
39
|
+
completedAt?: string;
|
|
40
|
+
pid?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface GroupRecord {
|
|
43
|
+
id: string;
|
|
44
|
+
state: GroupState;
|
|
45
|
+
agents: AgentRecord[];
|
|
46
|
+
branch: string;
|
|
47
|
+
worktreePath: string;
|
|
48
|
+
baseCwd: string;
|
|
49
|
+
baseCommit: string;
|
|
50
|
+
dependsOn: string[];
|
|
51
|
+
groupName?: string;
|
|
52
|
+
createdAt: string;
|
|
53
|
+
completedAt?: string;
|
|
54
|
+
commitSha?: string;
|
|
55
|
+
error?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface OrchestratorOptions {
|
|
58
|
+
groupId: string;
|
|
59
|
+
baseCwd: string;
|
|
60
|
+
agents: AgentSpec[];
|
|
61
|
+
commonContext?: string;
|
|
62
|
+
commonContextFiles?: ContextFileSpec[];
|
|
63
|
+
dependsOn: string[];
|
|
64
|
+
append: boolean;
|
|
65
|
+
appendToGroupTaskId?: string;
|
|
66
|
+
groupName?: string;
|
|
67
|
+
callbackUri?: string;
|
|
68
|
+
timeoutMs: number;
|
|
69
|
+
sendProgress: ToolHandlerContext['sendProgress'];
|
|
70
|
+
}
|
|
71
|
+
export interface OrchestratorResult {
|
|
72
|
+
groupId: string;
|
|
73
|
+
groupName?: string;
|
|
74
|
+
state: GroupState;
|
|
75
|
+
branch: string;
|
|
76
|
+
worktreePath: string;
|
|
77
|
+
baseCommit: string;
|
|
78
|
+
commitSha?: string;
|
|
79
|
+
agentResults: AgentResultSummary[];
|
|
80
|
+
durationMs: number;
|
|
81
|
+
error?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface AgentResultSummary {
|
|
84
|
+
alias: string;
|
|
85
|
+
state: AgentState;
|
|
86
|
+
taskId?: string;
|
|
87
|
+
attempts: number;
|
|
88
|
+
durationMs?: number;
|
|
89
|
+
error?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface DagNode {
|
|
92
|
+
alias: string;
|
|
93
|
+
dependsOn: string[];
|
|
94
|
+
state: AgentState;
|
|
95
|
+
}
|
|
96
|
+
export interface DagValidationResult {
|
|
97
|
+
valid: boolean;
|
|
98
|
+
errors: string[];
|
|
99
|
+
order: string[];
|
|
100
|
+
}
|
|
101
|
+
export declare const ContextFileSpecSchema: z.ZodObject<{
|
|
102
|
+
path: z.ZodString;
|
|
103
|
+
description: z.ZodOptional<z.ZodString>;
|
|
104
|
+
start_line: z.ZodOptional<z.ZodNumber>;
|
|
105
|
+
end_line: z.ZodOptional<z.ZodNumber>;
|
|
106
|
+
}, z.core.$strip>;
|
|
107
|
+
export type ContextFileSpec = z.infer<typeof ContextFileSpecSchema>;
|
|
108
|
+
export declare const AgentSpecSchema: z.ZodObject<{
|
|
109
|
+
alias: z.ZodString;
|
|
110
|
+
prompt: z.ZodString;
|
|
111
|
+
role: z.ZodOptional<z.ZodEnum<{
|
|
112
|
+
coder: "coder";
|
|
113
|
+
planner: "planner";
|
|
114
|
+
tester: "tester";
|
|
115
|
+
researcher: "researcher";
|
|
116
|
+
}>>;
|
|
117
|
+
specialization: z.ZodOptional<z.ZodString>;
|
|
118
|
+
context_files: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
119
|
+
path: z.ZodString;
|
|
120
|
+
description: z.ZodOptional<z.ZodString>;
|
|
121
|
+
start_line: z.ZodOptional<z.ZodNumber>;
|
|
122
|
+
end_line: z.ZodOptional<z.ZodNumber>;
|
|
123
|
+
}, z.core.$strip>>>;
|
|
124
|
+
reasoningEffort: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
125
|
+
low: "low";
|
|
126
|
+
medium: "medium";
|
|
127
|
+
high: "high";
|
|
128
|
+
xhigh: "xhigh";
|
|
129
|
+
}>>>;
|
|
130
|
+
sandbox: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
131
|
+
"read-only": "read-only";
|
|
132
|
+
"workspace-write": "workspace-write";
|
|
133
|
+
"danger-full-access": "danger-full-access";
|
|
134
|
+
}>>>;
|
|
135
|
+
depends_on: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
136
|
+
maxAttempts: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
137
|
+
}, z.core.$strip>;
|
|
138
|
+
export type AgentSpec = z.infer<typeof AgentSpecSchema>;
|
|
139
|
+
export declare const MAX_AGENTS_PER_GROUP: number;
|
|
140
|
+
export declare const SpawnAgentGroupSchema: z.ZodObject<{
|
|
141
|
+
agents: z.ZodArray<z.ZodObject<{
|
|
142
|
+
alias: z.ZodString;
|
|
143
|
+
prompt: z.ZodString;
|
|
144
|
+
role: z.ZodOptional<z.ZodEnum<{
|
|
145
|
+
coder: "coder";
|
|
146
|
+
planner: "planner";
|
|
147
|
+
tester: "tester";
|
|
148
|
+
researcher: "researcher";
|
|
149
|
+
}>>;
|
|
150
|
+
specialization: z.ZodOptional<z.ZodString>;
|
|
151
|
+
context_files: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
152
|
+
path: z.ZodString;
|
|
153
|
+
description: z.ZodOptional<z.ZodString>;
|
|
154
|
+
start_line: z.ZodOptional<z.ZodNumber>;
|
|
155
|
+
end_line: z.ZodOptional<z.ZodNumber>;
|
|
156
|
+
}, z.core.$strip>>>;
|
|
157
|
+
reasoningEffort: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
158
|
+
low: "low";
|
|
159
|
+
medium: "medium";
|
|
160
|
+
high: "high";
|
|
161
|
+
xhigh: "xhigh";
|
|
162
|
+
}>>>;
|
|
163
|
+
sandbox: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
164
|
+
"read-only": "read-only";
|
|
165
|
+
"workspace-write": "workspace-write";
|
|
166
|
+
"danger-full-access": "danger-full-access";
|
|
167
|
+
}>>>;
|
|
168
|
+
depends_on: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
169
|
+
maxAttempts: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
170
|
+
}, z.core.$strip>>;
|
|
171
|
+
commonContext: z.ZodOptional<z.ZodString>;
|
|
172
|
+
commonContextFiles: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
173
|
+
path: z.ZodString;
|
|
174
|
+
description: z.ZodOptional<z.ZodString>;
|
|
175
|
+
start_line: z.ZodOptional<z.ZodNumber>;
|
|
176
|
+
end_line: z.ZodOptional<z.ZodNumber>;
|
|
177
|
+
}, z.core.$strip>>>;
|
|
178
|
+
dependsOn: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
179
|
+
append: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
180
|
+
appendToGroupTaskId: z.ZodOptional<z.ZodString>;
|
|
181
|
+
groupName: z.ZodOptional<z.ZodString>;
|
|
182
|
+
workingDirectory: z.ZodOptional<z.ZodString>;
|
|
183
|
+
callbackUri: z.ZodOptional<z.ZodString>;
|
|
184
|
+
}, z.core.$strip>;
|
|
185
|
+
export type SpawnAgentGroupArgs = z.infer<typeof SpawnAgentGroupSchema>;
|
|
186
|
+
/** Fixed 30-minute timeout for the entire tool call. */
|
|
187
|
+
export declare const GROUP_TIMEOUT_MS: number;
|
|
188
|
+
/** Retry backoff delay in milliseconds. */
|
|
189
|
+
export declare const RETRY_BACKOFF_MS = 2000;
|
|
190
|
+
/** Default max retry attempts per agent. */
|
|
191
|
+
export declare const DEFAULT_MAX_ATTEMPTS = 2;
|
|
192
|
+
/** Dependency polling interval in milliseconds. */
|
|
193
|
+
export declare const DEP_POLL_INTERVAL_MS = 2000;
|
|
194
|
+
/** Stream verbosity levels. */
|
|
195
|
+
export type StreamVerbosity = 'low' | 'medium' | 'high';
|
|
196
|
+
export declare function getStreamVerbosity(): StreamVerbosity;
|
|
197
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wave/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the wave sub-agent group orchestration module.
|
|
3
|
+
*
|
|
4
|
+
* Two-level state machines:
|
|
5
|
+
* Group: waiting_deps → creating_worktree → running → committing → done_*
|
|
6
|
+
* Agent: pending → queued → running → done_* | blocked | timed_out
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
export const GROUP_TERMINAL_STATES = new Set([
|
|
10
|
+
'done_success',
|
|
11
|
+
'done_failed',
|
|
12
|
+
'done_timeout',
|
|
13
|
+
]);
|
|
14
|
+
/**
|
|
15
|
+
* Valid group state transitions.
|
|
16
|
+
*/
|
|
17
|
+
export const GROUP_TRANSITIONS = new Map([
|
|
18
|
+
[
|
|
19
|
+
'waiting_deps',
|
|
20
|
+
new Set(['creating_worktree', 'done_failed', 'done_timeout']),
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
'creating_worktree',
|
|
24
|
+
new Set(['running', 'done_failed', 'done_timeout']),
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
'running',
|
|
28
|
+
new Set(['committing', 'done_failed', 'done_timeout']),
|
|
29
|
+
],
|
|
30
|
+
['committing', new Set(['done_success', 'done_failed'])],
|
|
31
|
+
['done_success', new Set()],
|
|
32
|
+
['done_failed', new Set()],
|
|
33
|
+
['done_timeout', new Set()],
|
|
34
|
+
]);
|
|
35
|
+
export function isValidGroupTransition(from, to) {
|
|
36
|
+
return GROUP_TRANSITIONS.get(from)?.has(to) ?? false;
|
|
37
|
+
}
|
|
38
|
+
export function isGroupTerminal(state) {
|
|
39
|
+
return GROUP_TERMINAL_STATES.has(state);
|
|
40
|
+
}
|
|
41
|
+
export const AGENT_TERMINAL_STATES = new Set([
|
|
42
|
+
'done_success',
|
|
43
|
+
'done_failed',
|
|
44
|
+
'blocked',
|
|
45
|
+
'timed_out',
|
|
46
|
+
]);
|
|
47
|
+
/**
|
|
48
|
+
* Valid agent state transitions.
|
|
49
|
+
* Note: running → queued is the retry path.
|
|
50
|
+
*/
|
|
51
|
+
export const AGENT_TRANSITIONS = new Map([
|
|
52
|
+
['pending', new Set(['queued', 'blocked', 'timed_out'])],
|
|
53
|
+
['queued', new Set(['running', 'timed_out'])],
|
|
54
|
+
[
|
|
55
|
+
'running',
|
|
56
|
+
new Set([
|
|
57
|
+
'done_success',
|
|
58
|
+
'done_failed',
|
|
59
|
+
'queued', // retry
|
|
60
|
+
'timed_out',
|
|
61
|
+
]),
|
|
62
|
+
],
|
|
63
|
+
['done_success', new Set()],
|
|
64
|
+
['done_failed', new Set()],
|
|
65
|
+
['blocked', new Set()],
|
|
66
|
+
['timed_out', new Set()],
|
|
67
|
+
]);
|
|
68
|
+
export function isValidAgentTransition(from, to) {
|
|
69
|
+
return AGENT_TRANSITIONS.get(from)?.has(to) ?? false;
|
|
70
|
+
}
|
|
71
|
+
export function isAgentTerminal(state) {
|
|
72
|
+
return AGENT_TERMINAL_STATES.has(state);
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Zod schemas for tool input
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
export const ContextFileSpecSchema = z.object({
|
|
78
|
+
path: z.string(),
|
|
79
|
+
description: z.string().optional(),
|
|
80
|
+
start_line: z.number().int().positive().optional(),
|
|
81
|
+
end_line: z.number().int().positive().optional(),
|
|
82
|
+
});
|
|
83
|
+
export const AgentSpecSchema = z.object({
|
|
84
|
+
alias: z
|
|
85
|
+
.string()
|
|
86
|
+
.min(1)
|
|
87
|
+
.max(64)
|
|
88
|
+
.regex(/^[a-zA-Z0-9_-]+$/, {
|
|
89
|
+
error: 'Agent alias can only contain letters, numbers, hyphens, and underscores',
|
|
90
|
+
}),
|
|
91
|
+
prompt: z.string().min(1),
|
|
92
|
+
role: z.enum(['coder', 'planner', 'tester', 'researcher']).optional(),
|
|
93
|
+
specialization: z.string().optional(),
|
|
94
|
+
context_files: z.array(ContextFileSpecSchema).max(20).optional(),
|
|
95
|
+
reasoningEffort: z
|
|
96
|
+
.enum(['low', 'medium', 'high', 'xhigh'])
|
|
97
|
+
.default('xhigh')
|
|
98
|
+
.optional(),
|
|
99
|
+
sandbox: z
|
|
100
|
+
.enum(['read-only', 'workspace-write', 'danger-full-access'])
|
|
101
|
+
.default('danger-full-access')
|
|
102
|
+
.optional(),
|
|
103
|
+
depends_on: z.array(z.string()).optional(),
|
|
104
|
+
maxAttempts: z.number().int().min(1).max(5).default(2).optional(),
|
|
105
|
+
});
|
|
106
|
+
// Max agents per group (env-configurable)
|
|
107
|
+
function envInt(name, fallback) {
|
|
108
|
+
const raw = process.env[name];
|
|
109
|
+
if (!raw)
|
|
110
|
+
return fallback;
|
|
111
|
+
const parsed = parseInt(raw, 10);
|
|
112
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
113
|
+
}
|
|
114
|
+
export const MAX_AGENTS_PER_GROUP = envInt('CODEX_MAX_AGENTS_PER_GROUP', 100);
|
|
115
|
+
export const SpawnAgentGroupSchema = z.object({
|
|
116
|
+
agents: z.array(AgentSpecSchema).min(1).max(MAX_AGENTS_PER_GROUP),
|
|
117
|
+
commonContext: z.string().optional(),
|
|
118
|
+
commonContextFiles: z.array(ContextFileSpecSchema).optional(),
|
|
119
|
+
dependsOn: z.array(z.string()).optional(),
|
|
120
|
+
append: z.boolean().default(false).optional(),
|
|
121
|
+
appendToGroupTaskId: z.string().optional(),
|
|
122
|
+
groupName: z
|
|
123
|
+
.string()
|
|
124
|
+
.max(64)
|
|
125
|
+
.regex(/^[a-zA-Z0-9_-]*$/)
|
|
126
|
+
.optional(),
|
|
127
|
+
workingDirectory: z.string().optional(),
|
|
128
|
+
callbackUri: z.string().optional(),
|
|
129
|
+
});
|
|
130
|
+
// ---------------------------------------------------------------------------
|
|
131
|
+
// Constants
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
/** Fixed 30-minute timeout for the entire tool call. */
|
|
134
|
+
export const GROUP_TIMEOUT_MS = 30 * 60 * 1000;
|
|
135
|
+
/** Retry backoff delay in milliseconds. */
|
|
136
|
+
export const RETRY_BACKOFF_MS = 2000;
|
|
137
|
+
/** Default max retry attempts per agent. */
|
|
138
|
+
export const DEFAULT_MAX_ATTEMPTS = 2;
|
|
139
|
+
/** Dependency polling interval in milliseconds. */
|
|
140
|
+
export const DEP_POLL_INTERVAL_MS = 2000;
|
|
141
|
+
export function getStreamVerbosity() {
|
|
142
|
+
const raw = (process.env.CODEX_WAVE_STREAM_VERBOSITY || 'medium').toLowerCase();
|
|
143
|
+
if (raw === 'low' || raw === 'medium' || raw === 'high')
|
|
144
|
+
return raw;
|
|
145
|
+
return 'medium';
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/wave/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* In-memory task state manager for async codex execution.
|
|
3
|
-
* Tracks background codex processes and their output.
|
|
4
|
-
*/
|
|
5
|
-
import type { ChildProcess } from 'child_process';
|
|
6
|
-
export type TaskStatus = 'pending' | 'running' | 'completed' | 'failed';
|
|
7
|
-
export interface CodexTask {
|
|
8
|
-
id: string;
|
|
9
|
-
status: TaskStatus;
|
|
10
|
-
prompt: string;
|
|
11
|
-
role?: string;
|
|
12
|
-
specialization?: string;
|
|
13
|
-
model: string;
|
|
14
|
-
cwd: string;
|
|
15
|
-
startTime: string;
|
|
16
|
-
endTime?: string;
|
|
17
|
-
outputFilePath?: string;
|
|
18
|
-
outputLines: number;
|
|
19
|
-
output: string[];
|
|
20
|
-
error?: string;
|
|
21
|
-
metadata?: Record<string, unknown>;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Create a new task and return it.
|
|
25
|
-
*/
|
|
26
|
-
export declare function createTask(opts: {
|
|
27
|
-
prompt: string;
|
|
28
|
-
role?: string;
|
|
29
|
-
specialization?: string;
|
|
30
|
-
model: string;
|
|
31
|
-
cwd: string;
|
|
32
|
-
}): Promise<CodexTask>;
|
|
33
|
-
/**
|
|
34
|
-
* Get a task by ID.
|
|
35
|
-
*/
|
|
36
|
-
export declare function getTask(id: string): CodexTask | undefined;
|
|
37
|
-
/**
|
|
38
|
-
* Get all tasks.
|
|
39
|
-
*/
|
|
40
|
-
export declare function getAllTasks(): CodexTask[];
|
|
41
|
-
/**
|
|
42
|
-
* Update a task with partial data.
|
|
43
|
-
*/
|
|
44
|
-
export declare function updateTask(id: string, partial: Partial<CodexTask>): CodexTask | undefined;
|
|
45
|
-
/**
|
|
46
|
-
* Append an output line to a task and stream to output file.
|
|
47
|
-
*/
|
|
48
|
-
export declare function appendOutput(id: string, line: string): Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* Mark task as completed with optional metadata.
|
|
51
|
-
*/
|
|
52
|
-
export declare function completeTask(id: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
53
|
-
/**
|
|
54
|
-
* Mark task as failed with error.
|
|
55
|
-
*/
|
|
56
|
-
export declare function failTask(id: string, error: string): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Store a background process reference for a task.
|
|
59
|
-
*/
|
|
60
|
-
export declare function setProcess(id: string, proc: ChildProcess): void;
|
|
61
|
-
/**
|
|
62
|
-
* Get the background process for a task.
|
|
63
|
-
*/
|
|
64
|
-
export declare function getProcess(id: string): ChildProcess | undefined;
|
|
65
|
-
/**
|
|
66
|
-
* Get task counts by status.
|
|
67
|
-
*/
|
|
68
|
-
export declare function getTaskCounts(): Record<TaskStatus | 'total', number>;
|
|
69
|
-
//# sourceMappingURL=task-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-manager.d.ts","sourceRoot":"","sources":["../../src/services/task-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAUlD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAkDD;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,SAAS,CAAC,CAyBrB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEzD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,SAAS,EAAE,CAEzC;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAC1B,SAAS,GAAG,SAAS,CAMvB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE/D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAAC,UAAU,GAAG,OAAO,EAAE,MAAM,CAAC,CAepE"}
|