gm-orchestrator 0.3.5 → 0.4.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/cli/index.js +36 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/core/orchestrator.d.ts +17 -1
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +79 -8
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/prompt-builder.d.ts +4 -2
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/core/scheduler.d.ts +57 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +202 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/task-utils.d.ts +10 -1
- package/dist/core/task-utils.d.ts.map +1 -1
- package/dist/core/task-utils.js +22 -0
- package/dist/core/task-utils.js.map +1 -1
- package/dist/core/types.d.ts +142 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +14 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/claude-runner.d.ts.map +1 -1
- package/dist/infra/claude-runner.js +3 -1
- package/dist/infra/claude-runner.js.map +1 -1
- package/dist/infra/config.d.ts +6 -3
- package/dist/infra/config.d.ts.map +1 -1
- package/dist/infra/config.js +127 -16
- package/dist/infra/config.js.map +1 -1
- package/dist/infra/gm-client-pool.d.ts +42 -0
- package/dist/infra/gm-client-pool.d.ts.map +1 -0
- package/dist/infra/gm-client-pool.js +97 -0
- package/dist/infra/gm-client-pool.js.map +1 -0
- package/dist/infra/gm-client.d.ts +1 -0
- package/dist/infra/gm-client.d.ts.map +1 -1
- package/dist/infra/gm-client.js +4 -0
- package/dist/infra/gm-client.js.map +1 -1
- package/dist/infra/gm-discovery.d.ts +6 -4
- package/dist/infra/gm-discovery.d.ts.map +1 -1
- package/dist/infra/gm-discovery.js +34 -16
- package/dist/infra/gm-discovery.js.map +1 -1
- package/dist/infra/logger.d.ts +6 -1
- package/dist/infra/logger.d.ts.map +1 -1
- package/dist/infra/logger.js +2 -0
- package/dist/infra/logger.js.map +1 -1
- package/dist/infra/task-poller.d.ts +2 -1
- package/dist/infra/task-poller.d.ts.map +1 -1
- package/dist/infra/task-poller.js +5 -1
- package/dist/infra/task-poller.js.map +1 -1
- package/dist/server/api.d.ts +14 -2
- package/dist/server/api.d.ts.map +1 -1
- package/dist/server/api.js +192 -17
- package/dist/server/api.js.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +7 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/runner-service.d.ts +23 -1
- package/dist/server/runner-service.d.ts.map +1 -1
- package/dist/server/runner-service.js +312 -51
- package/dist/server/runner-service.js.map +1 -1
- package/dist/ui/assets/index-DI-9k03Q.js +410 -0
- package/dist/ui/assets/index-DWL0Kwcb.css +1 -0
- package/dist/ui/index.html +2 -2
- package/package.json +2 -1
- package/dist/ui/assets/index-CNWg3_sE.js +0 -259
- package/dist/ui/assets/index-iBDF7mnS.css +0 -1
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { GraphMemoryClient } from '../infra/gm-client.js';
|
|
3
|
+
import { GraphMemoryClientPool } from '../infra/gm-client-pool.js';
|
|
3
4
|
import { ClaudeRunner } from '../infra/claude-runner.js';
|
|
4
5
|
import { TaskPoller } from '../infra/task-poller.js';
|
|
5
6
|
import { consoleLogger } from '../infra/logger.js';
|
|
@@ -10,6 +11,7 @@ import { createApiRouter } from '../server/api.js';
|
|
|
10
11
|
import { createWebSocketServer } from '../server/ws.js';
|
|
11
12
|
import { createRunnerService } from '../server/runner-service.js';
|
|
12
13
|
import { discoverServers } from '../infra/gm-discovery.js';
|
|
14
|
+
import { getActiveProject } from '../core/types.js';
|
|
13
15
|
function parseArgs(argv) {
|
|
14
16
|
const args = argv.slice(2);
|
|
15
17
|
const result = {
|
|
@@ -48,9 +50,17 @@ function parseArgs(argv) {
|
|
|
48
50
|
result.overrides.configPath = args[++i];
|
|
49
51
|
break;
|
|
50
52
|
case '--project':
|
|
51
|
-
case '-p':
|
|
52
|
-
|
|
53
|
+
case '-p': {
|
|
54
|
+
const pid = args[++i];
|
|
55
|
+
result.overrides.activeProjectId = pid;
|
|
56
|
+
// Will be merged into projects array by loadConfig/mergeConfigs
|
|
57
|
+
if (!result.overrides.projects)
|
|
58
|
+
result.overrides.projects = [];
|
|
59
|
+
const existing = result.overrides.projects.find((p) => p.projectId === pid);
|
|
60
|
+
if (!existing)
|
|
61
|
+
result.overrides.projects.push({ baseUrl: 'http://localhost:3000', projectId: pid });
|
|
53
62
|
break;
|
|
63
|
+
}
|
|
54
64
|
case '--tag':
|
|
55
65
|
case '-t':
|
|
56
66
|
result.overrides.tag = args[++i];
|
|
@@ -90,14 +100,19 @@ OPTIONS
|
|
|
90
100
|
|
|
91
101
|
CONFIG FILE (.gm-orchestrator.json)
|
|
92
102
|
{
|
|
93
|
-
"
|
|
94
|
-
|
|
95
|
-
|
|
103
|
+
"projects": [
|
|
104
|
+
{ "baseUrl": "http://localhost:3000", "projectId": "my-app", "label": "My App" }
|
|
105
|
+
],
|
|
106
|
+
"activeProjectId": "my-app",
|
|
107
|
+
"concurrency": 1,
|
|
96
108
|
"timeoutMs": 900000,
|
|
97
109
|
"maxRetries": 1,
|
|
98
110
|
"claudeArgs": []
|
|
99
111
|
}
|
|
100
112
|
|
|
113
|
+
Legacy format (auto-migrated):
|
|
114
|
+
{ "baseUrl": "http://localhost:3000", "projectId": "my-app" }
|
|
115
|
+
|
|
101
116
|
ENV VARS
|
|
102
117
|
GM_BASE_URL / GM_PROJECT_ID / GM_API_KEY / GM_TIMEOUT_MS
|
|
103
118
|
`);
|
|
@@ -107,7 +122,10 @@ async function main() {
|
|
|
107
122
|
const { command, epicId, overrides, printConfig, headless } = parseArgs(process.argv);
|
|
108
123
|
const config = loadConfig(overrides);
|
|
109
124
|
if (printConfig) {
|
|
110
|
-
const display = {
|
|
125
|
+
const display = {
|
|
126
|
+
...config,
|
|
127
|
+
projects: config.projects.map(({ apiKey, ...rest }) => ({ ...rest, ...(apiKey ? { apiKey: '***' } : {}) })),
|
|
128
|
+
};
|
|
111
129
|
console.log(JSON.stringify(display, null, 2));
|
|
112
130
|
return;
|
|
113
131
|
}
|
|
@@ -126,9 +144,13 @@ async function main() {
|
|
|
126
144
|
consoleLogger.info(`gm-orchestrator v1.0.0 → http://localhost:${port}`);
|
|
127
145
|
// Server mode doesn't require projectId upfront — it's set via the UI
|
|
128
146
|
const { app, start, mountStaticUI } = createServer({ logger: consoleLogger });
|
|
147
|
+
// Init pool from all configured projects
|
|
148
|
+
const gmPool = new GraphMemoryClientPool(config.projects);
|
|
149
|
+
const active = getActiveProject(config);
|
|
129
150
|
const gmClient = new GraphMemoryClient({
|
|
130
|
-
baseUrl:
|
|
131
|
-
projectId:
|
|
151
|
+
baseUrl: active?.baseUrl ?? 'http://localhost:3000',
|
|
152
|
+
projectId: active?.projectId ?? '',
|
|
153
|
+
...(active?.apiKey !== undefined && { apiKey: active.apiKey }),
|
|
132
154
|
});
|
|
133
155
|
// Create a no-op WS bus for now — replaced after server starts
|
|
134
156
|
const wsBusHolder = {
|
|
@@ -147,6 +169,7 @@ async function main() {
|
|
|
147
169
|
logger: consoleLogger,
|
|
148
170
|
gmDiscovery: { discoverServers },
|
|
149
171
|
gmClient,
|
|
172
|
+
gmPool,
|
|
150
173
|
runner,
|
|
151
174
|
saveConfig: (partial) => saveConfig(partial),
|
|
152
175
|
});
|
|
@@ -158,10 +181,11 @@ async function main() {
|
|
|
158
181
|
return;
|
|
159
182
|
}
|
|
160
183
|
validateConfig(config);
|
|
184
|
+
const activeProj = getActiveProject(config);
|
|
161
185
|
const gm = new GraphMemoryClient({
|
|
162
|
-
baseUrl:
|
|
163
|
-
projectId:
|
|
164
|
-
...(
|
|
186
|
+
baseUrl: activeProj?.baseUrl ?? 'http://localhost:3000',
|
|
187
|
+
projectId: activeProj?.projectId ?? '',
|
|
188
|
+
...(activeProj?.apiKey !== undefined && { apiKey: activeProj.apiKey }),
|
|
165
189
|
});
|
|
166
190
|
const ports = {
|
|
167
191
|
gm,
|
|
@@ -176,7 +200,7 @@ async function main() {
|
|
|
176
200
|
gm.listTasks({ status: 'done' }),
|
|
177
201
|
]);
|
|
178
202
|
const epics = await gm.listEpics().catch(() => []);
|
|
179
|
-
consoleLogger.section(`Status — ${
|
|
203
|
+
consoleLogger.section(`Status — ${activeProj?.projectId ?? '(none)'}`);
|
|
180
204
|
console.log(` todo: ${todo.length}`);
|
|
181
205
|
console.log(` in_progress: ${inProgress.length}`);
|
|
182
206
|
console.log(` done: ${done.length}`);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import type { GraphMemoryPort, ClaudeRunnerPort, TaskPollerPort, OrchestratorConfig, SprintStats } from './types.js';
|
|
1
|
+
import type { GraphMemoryPort, ClaudeRunnerPort, TaskPollerPort, OrchestratorConfig, SprintStats, CrossProjectResolver, CrossProjectTask } from './types.js';
|
|
2
2
|
import type { Logger } from '../infra/logger.js';
|
|
3
3
|
interface Ports {
|
|
4
4
|
gm: GraphMemoryPort;
|
|
5
5
|
runner: ClaudeRunnerPort;
|
|
6
6
|
poller: TaskPollerPort;
|
|
7
7
|
logger: Logger;
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
/**
|
|
10
|
+
* Optional resolver for cross-project blockers.
|
|
11
|
+
* When provided, `findNextRunnable` will check blockers in other projects.
|
|
12
|
+
*/
|
|
13
|
+
crossProjectResolver?: CrossProjectResolver;
|
|
8
14
|
}
|
|
9
15
|
/**
|
|
10
16
|
* Orchestrates a full sprint: runs all todo/in_progress tasks in priority
|
|
@@ -17,7 +23,17 @@ export declare function runSprint(ports: Ports, config: OrchestratorConfig): Pro
|
|
|
17
23
|
/**
|
|
18
24
|
* Runs all tasks belonging to an epic, in priority order with blocker checks.
|
|
19
25
|
* Marks the epic done when all tasks complete.
|
|
26
|
+
* Supports cross-project blockers when a CrossProjectResolver is injected.
|
|
20
27
|
*/
|
|
21
28
|
export declare function runEpic(epicId: string, ports: Ports, config: OrchestratorConfig): Promise<SprintStats>;
|
|
29
|
+
/**
|
|
30
|
+
* Collect tasks for a cross-project epic.
|
|
31
|
+
* Fetches the epic from the "home" project, then gathers tasks from all
|
|
32
|
+
* referenced projects. Each task is annotated with `sourceProjectId`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function collectCrossProjectEpicTasks(epicId: string, homePorts: Pick<Ports, 'gm' | 'logger'>, resolveGm: (projectId: string) => GraphMemoryPort, homeProjectId: string): Promise<{
|
|
35
|
+
epic: Awaited<ReturnType<GraphMemoryPort['getEpic']>>;
|
|
36
|
+
tasks: CrossProjectTask[];
|
|
37
|
+
}>;
|
|
22
38
|
export {};
|
|
23
39
|
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,WAAW,
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,WAAW,EAGX,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,UAAU,KAAK;IACb,EAAE,EAAE,eAAe,CAAC;IACpB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,WAAW,CAAC,CAyDtB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,WAAW,CAAC,CA2DtB;AAyHD;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,EACvC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,eAAe,EACjD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAC,CAmC/F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getActiveProject } from './types.js';
|
|
2
|
+
import { sortByPriority, areBlockersResolved, areBlockersResolvedAsync } from './task-utils.js';
|
|
2
3
|
/**
|
|
3
4
|
* Orchestrates a full sprint: runs all todo/in_progress tasks in priority
|
|
4
5
|
* order, respecting blockers, retrying on failure, until none remain.
|
|
@@ -12,8 +13,15 @@ export async function runSprint(ports, config) {
|
|
|
12
13
|
const stats = { done: 0, cancelled: 0, retried: 0, errors: 0, skipped: 0, durationMs: 0 };
|
|
13
14
|
const failedIds = new Set();
|
|
14
15
|
const retryCounts = new Map();
|
|
15
|
-
|
|
16
|
+
const activeProject = getActiveProject(config);
|
|
17
|
+
const projectLabel = activeProject?.projectId ?? '(none)';
|
|
18
|
+
logger.section(`Sprint — project: ${projectLabel}${config.tag ? ` tag: ${config.tag}` : ''}`);
|
|
16
19
|
while (true) {
|
|
20
|
+
if (ports.signal?.aborted) {
|
|
21
|
+
logger.warn('Sprint aborted');
|
|
22
|
+
stats.durationMs = Date.now() - startTime;
|
|
23
|
+
return stats;
|
|
24
|
+
}
|
|
17
25
|
const tagFilter = config.tag !== undefined ? { tag: config.tag } : {};
|
|
18
26
|
const [inProgress, todo] = await Promise.all([
|
|
19
27
|
gm.listTasks({ status: 'in_progress', ...tagFilter }),
|
|
@@ -30,7 +38,7 @@ export async function runSprint(ports, config) {
|
|
|
30
38
|
logStats(logger, stats);
|
|
31
39
|
return stats;
|
|
32
40
|
}
|
|
33
|
-
const next = findNextRunnable(queue, logger);
|
|
41
|
+
const next = await findNextRunnable(queue, logger, ports.crossProjectResolver);
|
|
34
42
|
if (!next) {
|
|
35
43
|
logger.warn(`${queue.length} tasks remain but all are blocked — stopping`);
|
|
36
44
|
queue.forEach((t) => logger.skip(` blocked: ${t.title} (${t.id})`));
|
|
@@ -49,6 +57,7 @@ export async function runSprint(ports, config) {
|
|
|
49
57
|
/**
|
|
50
58
|
* Runs all tasks belonging to an epic, in priority order with blocker checks.
|
|
51
59
|
* Marks the epic done when all tasks complete.
|
|
60
|
+
* Supports cross-project blockers when a CrossProjectResolver is injected.
|
|
52
61
|
*/
|
|
53
62
|
export async function runEpic(epicId, ports, config) {
|
|
54
63
|
const { gm, logger } = ports;
|
|
@@ -60,6 +69,11 @@ export async function runEpic(epicId, ports, config) {
|
|
|
60
69
|
const failedIds = new Set();
|
|
61
70
|
const retryCounts = new Map();
|
|
62
71
|
while (true) {
|
|
72
|
+
if (ports.signal?.aborted) {
|
|
73
|
+
logger.warn('Epic aborted');
|
|
74
|
+
stats.durationMs = Date.now() - startTime;
|
|
75
|
+
return stats;
|
|
76
|
+
}
|
|
63
77
|
// Fetch fresh task list from the epic's dedicated endpoint
|
|
64
78
|
const allTasks = await gm.listEpicTasks(epicId);
|
|
65
79
|
const queue = sortByPriority(allTasks.filter((t) => !['done', 'cancelled'].includes(t.status) &&
|
|
@@ -75,7 +89,7 @@ export async function runEpic(epicId, ports, config) {
|
|
|
75
89
|
logStats(logger, stats);
|
|
76
90
|
return stats;
|
|
77
91
|
}
|
|
78
|
-
const next = findNextRunnable(queue, logger);
|
|
92
|
+
const next = await findNextRunnable(queue, logger, ports.crossProjectResolver);
|
|
79
93
|
if (!next) {
|
|
80
94
|
logger.warn('All remaining epic tasks are blocked — stopping');
|
|
81
95
|
stats.durationMs = Date.now() - startTime;
|
|
@@ -91,15 +105,31 @@ export async function runEpic(epicId, ports, config) {
|
|
|
91
105
|
}
|
|
92
106
|
}
|
|
93
107
|
// ── Internal ──────────────────────────────────────────────────────────────
|
|
94
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Finds the next runnable task in the queue, respecting both same-project
|
|
110
|
+
* and cross-project blockers. If a CrossProjectResolver is provided,
|
|
111
|
+
* blockers with a `projectId` field are resolved asynchronously against
|
|
112
|
+
* the remote project.
|
|
113
|
+
*/
|
|
114
|
+
async function findNextRunnable(queue, logger, resolver) {
|
|
95
115
|
for (const task of queue) {
|
|
96
|
-
|
|
97
|
-
|
|
116
|
+
// Fast path: no cross-project blockers or no resolver
|
|
117
|
+
const hasCrossProjectBlockers = task.blockedBy?.some((b) => b.projectId);
|
|
118
|
+
if (!hasCrossProjectBlockers || !resolver) {
|
|
119
|
+
if (areBlockersResolved(task))
|
|
120
|
+
return task;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// Slow path: resolve cross-project blockers
|
|
124
|
+
const resolved = await areBlockersResolvedAsync(task, resolver);
|
|
125
|
+
if (resolved)
|
|
126
|
+
return task;
|
|
127
|
+
}
|
|
98
128
|
logger.skip(`blocked: "${task.title}"`);
|
|
99
129
|
}
|
|
100
130
|
return null;
|
|
101
131
|
}
|
|
102
|
-
async function runOneTask(task, { gm, runner, poller, logger }, config) {
|
|
132
|
+
async function runOneTask(task, { gm, runner, poller, logger, signal }, config) {
|
|
103
133
|
logger.task(task);
|
|
104
134
|
// Mark in_progress (idempotent)
|
|
105
135
|
if (task.status !== 'in_progress') {
|
|
@@ -119,6 +149,7 @@ async function runOneTask(task, { gm, runner, poller, logger }, config) {
|
|
|
119
149
|
// Poll GraphMemory until task reaches terminal state
|
|
120
150
|
const pollResult = await poller.waitForCompletion(task.id, {
|
|
121
151
|
timeoutMs: config.timeoutMs,
|
|
152
|
+
...(signal ? { signal } : {}),
|
|
122
153
|
});
|
|
123
154
|
await sessionPromise; // let process clean up
|
|
124
155
|
if (pollResult === 'timeout') {
|
|
@@ -137,11 +168,13 @@ async function handleResult(result, task, ctx) {
|
|
|
137
168
|
const { gm, logger, stats, failedIds, retryCounts, maxRetries } = ctx;
|
|
138
169
|
if (result === 'done' || result === 'dry_run') {
|
|
139
170
|
stats.done++;
|
|
171
|
+
logger.taskResult(task, 'done');
|
|
140
172
|
return;
|
|
141
173
|
}
|
|
142
174
|
if (result === 'cancelled') {
|
|
143
175
|
stats.cancelled++;
|
|
144
176
|
failedIds.add(task.id);
|
|
177
|
+
logger.taskResult(task, 'cancelled');
|
|
145
178
|
return;
|
|
146
179
|
}
|
|
147
180
|
// timeout | error
|
|
@@ -149,16 +182,54 @@ async function handleResult(result, task, ctx) {
|
|
|
149
182
|
if (retries < maxRetries) {
|
|
150
183
|
retryCounts.set(task.id, retries + 1);
|
|
151
184
|
stats.retried++;
|
|
185
|
+
logger.taskResult(task, 'timeout', { attempt: retries + 1, maxRetries });
|
|
152
186
|
logger.warn(`Retrying (${retries + 1}/${maxRetries}): ${task.id}`);
|
|
153
187
|
await gm.moveTask(task.id, 'todo').catch(() => { });
|
|
154
188
|
}
|
|
155
189
|
else {
|
|
156
190
|
stats.errors++;
|
|
157
191
|
failedIds.add(task.id);
|
|
192
|
+
logger.taskResult(task, 'timeout');
|
|
158
193
|
logger.error(`Giving up on: ${task.id}`);
|
|
159
194
|
await gm.moveTask(task.id, 'cancelled').catch(() => { });
|
|
160
195
|
}
|
|
161
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Collect tasks for a cross-project epic.
|
|
199
|
+
* Fetches the epic from the "home" project, then gathers tasks from all
|
|
200
|
+
* referenced projects. Each task is annotated with `sourceProjectId`.
|
|
201
|
+
*/
|
|
202
|
+
export async function collectCrossProjectEpicTasks(epicId, homePorts, resolveGm, homeProjectId) {
|
|
203
|
+
const { gm, logger } = homePorts;
|
|
204
|
+
const epic = await gm.getEpic(epicId);
|
|
205
|
+
const taskRefs = epic.tasks ?? [];
|
|
206
|
+
// Group task refs by project — refs without projectId belong to the home project
|
|
207
|
+
const byProject = new Map();
|
|
208
|
+
for (const ref of taskRefs) {
|
|
209
|
+
const pid = ref.projectId ?? homeProjectId;
|
|
210
|
+
const ids = byProject.get(pid) ?? [];
|
|
211
|
+
ids.push(ref.id);
|
|
212
|
+
byProject.set(pid, ids);
|
|
213
|
+
}
|
|
214
|
+
// Fetch tasks from each project in parallel
|
|
215
|
+
const allTasks = [];
|
|
216
|
+
await Promise.all([...byProject.entries()].map(async ([projectId, taskIds]) => {
|
|
217
|
+
try {
|
|
218
|
+
const client = projectId === homeProjectId ? gm : resolveGm(projectId);
|
|
219
|
+
const taskIdSet = new Set(taskIds);
|
|
220
|
+
const tasks = await client.listTasks({ limit: 500 });
|
|
221
|
+
for (const t of tasks) {
|
|
222
|
+
if (taskIdSet.has(t.id)) {
|
|
223
|
+
allTasks.push({ ...t, sourceProjectId: projectId });
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
logger.warn(`Failed to fetch tasks from project "${projectId}": ${String(err)}`);
|
|
229
|
+
}
|
|
230
|
+
}));
|
|
231
|
+
return { epic, tasks: allTasks };
|
|
232
|
+
}
|
|
162
233
|
function logStats(logger, stats) {
|
|
163
234
|
const secs = Math.round(stats.durationMs / 1000);
|
|
164
235
|
logger.info(`✓ ${stats.done} done ✗ ${stats.cancelled} cancelled ` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Task
|
|
1
|
+
import type { Task } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Builds a self-contained, autonomous prompt for a single Claude Code session.
|
|
4
4
|
*
|
|
@@ -21,5 +21,7 @@ import type { Task, OrchestratorConfig } from './types.js';
|
|
|
21
21
|
* 5. MINIMAL PROMPT — only what's needed. The description might be empty
|
|
22
22
|
* deliberately (Claude fetches full context via tasks_get). Don't pad.
|
|
23
23
|
*/
|
|
24
|
-
export declare function buildPrompt(task: Task, config:
|
|
24
|
+
export declare function buildPrompt(task: Task, config: {
|
|
25
|
+
projectId: string;
|
|
26
|
+
}): string;
|
|
25
27
|
//# sourceMappingURL=prompt-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAoC7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { GraphMemoryPort, ClaudeRunnerPort, TaskPollerPort, OrchestratorConfig, SprintStats, Task, CrossProjectResolver } from './types.js';
|
|
2
|
+
import type { Logger } from '../infra/logger.js';
|
|
3
|
+
export type SchedulerStrategy = 'round-robin' | 'priority';
|
|
4
|
+
export interface RunRequest {
|
|
5
|
+
id: string;
|
|
6
|
+
projectId: string;
|
|
7
|
+
mode: 'sprint' | 'epic';
|
|
8
|
+
epicId?: string | undefined;
|
|
9
|
+
tag?: string | undefined;
|
|
10
|
+
priority: number;
|
|
11
|
+
enqueuedAt: number;
|
|
12
|
+
}
|
|
13
|
+
export type SlotStatus = 'idle' | 'running' | 'stopping';
|
|
14
|
+
export interface RunSlot {
|
|
15
|
+
id: number;
|
|
16
|
+
status: SlotStatus;
|
|
17
|
+
projectId: string | null;
|
|
18
|
+
abort: AbortController | null;
|
|
19
|
+
runPromise: Promise<SprintStats> | null;
|
|
20
|
+
activeTask: Task | null;
|
|
21
|
+
completedTasks: Task[];
|
|
22
|
+
recentLines: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface SchedulerPorts {
|
|
25
|
+
resolveGm: (projectId: string) => GraphMemoryPort;
|
|
26
|
+
createRunner: (projectId: string) => ClaudeRunnerPort;
|
|
27
|
+
createPoller: (projectId: string) => TaskPollerPort;
|
|
28
|
+
logger: Logger;
|
|
29
|
+
/** Optional resolver for cross-project blocker dependencies. */
|
|
30
|
+
crossProjectResolver?: CrossProjectResolver;
|
|
31
|
+
}
|
|
32
|
+
export interface SchedulerEvents {
|
|
33
|
+
onSlotStarted?: (slotId: number, request: RunRequest) => void;
|
|
34
|
+
onSlotCompleted?: (slotId: number, request: RunRequest, stats: SprintStats) => void;
|
|
35
|
+
onSlotError?: (slotId: number, request: RunRequest, error: Error) => void;
|
|
36
|
+
onQueueDrained?: () => void;
|
|
37
|
+
}
|
|
38
|
+
export interface Scheduler {
|
|
39
|
+
/** Enqueue a run request. Returns the request ID. */
|
|
40
|
+
enqueue(request: Omit<RunRequest, 'id' | 'enqueuedAt'>): string;
|
|
41
|
+
/** Start processing the queue with configured concurrency. */
|
|
42
|
+
start(): void;
|
|
43
|
+
/** Stop all running slots and drain the queue. */
|
|
44
|
+
stop(): Promise<void>;
|
|
45
|
+
/** Cancel a specific queued request (not yet running). Returns true if removed. */
|
|
46
|
+
cancel(requestId: string): boolean;
|
|
47
|
+
/** Get current queue state. */
|
|
48
|
+
readonly queue: ReadonlyArray<RunRequest>;
|
|
49
|
+
/** Get slot states. */
|
|
50
|
+
readonly slots: ReadonlyArray<Readonly<RunSlot>>;
|
|
51
|
+
/** True if any slot is running or queue is non-empty. */
|
|
52
|
+
readonly isActive: boolean;
|
|
53
|
+
/** Get aggregate stats across all completed runs. */
|
|
54
|
+
readonly aggregateStats: SprintStats;
|
|
55
|
+
}
|
|
56
|
+
export declare function createScheduler(config: OrchestratorConfig, ports: SchedulerPorts, events?: SchedulerEvents): Scheduler;
|
|
57
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"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"}
|