gm-orchestrator 0.3.3 → 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 +83 -14
- 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 +145 -4
- 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 +2 -0
- package/dist/infra/gm-client.d.ts.map +1 -1
- package/dist/infra/gm-client.js +8 -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-D6_auaif.css +0 -1
- package/dist/ui/assets/index-DEoSxdl1.js +0 -259
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;
|
|
@@ -57,17 +66,20 @@ export async function runEpic(epicId, ports, config) {
|
|
|
57
66
|
const epic = await gm.getEpic(epicId);
|
|
58
67
|
logger.section(`Epic: "${epic.title}" (${epicId})`);
|
|
59
68
|
logger.info(`Priority: ${epic.priority} Status: ${epic.status}`);
|
|
60
|
-
const epicTaskIds = new Set((epic.tasks ?? []).map((t) => t.id));
|
|
61
69
|
const failedIds = new Set();
|
|
62
70
|
const retryCounts = new Map();
|
|
63
71
|
while (true) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
if (ports.signal?.aborted) {
|
|
73
|
+
logger.warn('Epic aborted');
|
|
74
|
+
stats.durationMs = Date.now() - startTime;
|
|
75
|
+
return stats;
|
|
76
|
+
}
|
|
77
|
+
// Fetch fresh task list from the epic's dedicated endpoint
|
|
78
|
+
const allTasks = await gm.listEpicTasks(epicId);
|
|
79
|
+
const queue = sortByPriority(allTasks.filter((t) => !['done', 'cancelled'].includes(t.status) &&
|
|
68
80
|
!failedIds.has(t.id)));
|
|
69
81
|
if (!queue.length) {
|
|
70
|
-
const allDone = allTasks.every((t) => t
|
|
82
|
+
const allDone = allTasks.length > 0 && allTasks.every((t) => t.status === 'done');
|
|
71
83
|
if (allDone) {
|
|
72
84
|
logger.success('All epic tasks done — marking epic complete');
|
|
73
85
|
await gm.moveEpic(epicId, 'done');
|
|
@@ -77,7 +89,7 @@ export async function runEpic(epicId, ports, config) {
|
|
|
77
89
|
logStats(logger, stats);
|
|
78
90
|
return stats;
|
|
79
91
|
}
|
|
80
|
-
const next = findNextRunnable(queue, logger);
|
|
92
|
+
const next = await findNextRunnable(queue, logger, ports.crossProjectResolver);
|
|
81
93
|
if (!next) {
|
|
82
94
|
logger.warn('All remaining epic tasks are blocked — stopping');
|
|
83
95
|
stats.durationMs = Date.now() - startTime;
|
|
@@ -93,15 +105,31 @@ export async function runEpic(epicId, ports, config) {
|
|
|
93
105
|
}
|
|
94
106
|
}
|
|
95
107
|
// ── Internal ──────────────────────────────────────────────────────────────
|
|
96
|
-
|
|
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) {
|
|
97
115
|
for (const task of queue) {
|
|
98
|
-
|
|
99
|
-
|
|
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
|
+
}
|
|
100
128
|
logger.skip(`blocked: "${task.title}"`);
|
|
101
129
|
}
|
|
102
130
|
return null;
|
|
103
131
|
}
|
|
104
|
-
async function runOneTask(task, { gm, runner, poller, logger }, config) {
|
|
132
|
+
async function runOneTask(task, { gm, runner, poller, logger, signal }, config) {
|
|
105
133
|
logger.task(task);
|
|
106
134
|
// Mark in_progress (idempotent)
|
|
107
135
|
if (task.status !== 'in_progress') {
|
|
@@ -121,6 +149,7 @@ async function runOneTask(task, { gm, runner, poller, logger }, config) {
|
|
|
121
149
|
// Poll GraphMemory until task reaches terminal state
|
|
122
150
|
const pollResult = await poller.waitForCompletion(task.id, {
|
|
123
151
|
timeoutMs: config.timeoutMs,
|
|
152
|
+
...(signal ? { signal } : {}),
|
|
124
153
|
});
|
|
125
154
|
await sessionPromise; // let process clean up
|
|
126
155
|
if (pollResult === 'timeout') {
|
|
@@ -139,11 +168,13 @@ async function handleResult(result, task, ctx) {
|
|
|
139
168
|
const { gm, logger, stats, failedIds, retryCounts, maxRetries } = ctx;
|
|
140
169
|
if (result === 'done' || result === 'dry_run') {
|
|
141
170
|
stats.done++;
|
|
171
|
+
logger.taskResult(task, 'done');
|
|
142
172
|
return;
|
|
143
173
|
}
|
|
144
174
|
if (result === 'cancelled') {
|
|
145
175
|
stats.cancelled++;
|
|
146
176
|
failedIds.add(task.id);
|
|
177
|
+
logger.taskResult(task, 'cancelled');
|
|
147
178
|
return;
|
|
148
179
|
}
|
|
149
180
|
// timeout | error
|
|
@@ -151,16 +182,54 @@ async function handleResult(result, task, ctx) {
|
|
|
151
182
|
if (retries < maxRetries) {
|
|
152
183
|
retryCounts.set(task.id, retries + 1);
|
|
153
184
|
stats.retried++;
|
|
185
|
+
logger.taskResult(task, 'timeout', { attempt: retries + 1, maxRetries });
|
|
154
186
|
logger.warn(`Retrying (${retries + 1}/${maxRetries}): ${task.id}`);
|
|
155
187
|
await gm.moveTask(task.id, 'todo').catch(() => { });
|
|
156
188
|
}
|
|
157
189
|
else {
|
|
158
190
|
stats.errors++;
|
|
159
191
|
failedIds.add(task.id);
|
|
192
|
+
logger.taskResult(task, 'timeout');
|
|
160
193
|
logger.error(`Giving up on: ${task.id}`);
|
|
161
194
|
await gm.moveTask(task.id, 'cancelled').catch(() => { });
|
|
162
195
|
}
|
|
163
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
|
+
}
|
|
164
233
|
function logStats(logger, stats) {
|
|
165
234
|
const secs = Math.round(stats.durationMs / 1000);
|
|
166
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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"}
|