steroids-api 0.2.7
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/API/src/index.d.ts +10 -0
- package/dist/API/src/index.d.ts.map +1 -0
- package/dist/API/src/index.js +130 -0
- package/dist/API/src/index.js.map +1 -0
- package/dist/API/src/routes/activity.d.ts +7 -0
- package/dist/API/src/routes/activity.d.ts.map +1 -0
- package/dist/API/src/routes/activity.js +252 -0
- package/dist/API/src/routes/activity.js.map +1 -0
- package/dist/API/src/routes/config.d.ts +7 -0
- package/dist/API/src/routes/config.d.ts.map +1 -0
- package/dist/API/src/routes/config.js +521 -0
- package/dist/API/src/routes/config.js.map +1 -0
- package/dist/API/src/routes/health.d.ts +7 -0
- package/dist/API/src/routes/health.d.ts.map +1 -0
- package/dist/API/src/routes/health.js +172 -0
- package/dist/API/src/routes/health.js.map +1 -0
- package/dist/API/src/routes/incidents.d.ts +7 -0
- package/dist/API/src/routes/incidents.d.ts.map +1 -0
- package/dist/API/src/routes/incidents.js +117 -0
- package/dist/API/src/routes/incidents.js.map +1 -0
- package/dist/API/src/routes/projects.d.ts +7 -0
- package/dist/API/src/routes/projects.d.ts.map +1 -0
- package/dist/API/src/routes/projects.js +398 -0
- package/dist/API/src/routes/projects.js.map +1 -0
- package/dist/API/src/routes/runners.d.ts +7 -0
- package/dist/API/src/routes/runners.d.ts.map +1 -0
- package/dist/API/src/routes/runners.js +242 -0
- package/dist/API/src/routes/runners.js.map +1 -0
- package/dist/API/src/routes/tasks.d.ts +7 -0
- package/dist/API/src/routes/tasks.d.ts.map +1 -0
- package/dist/API/src/routes/tasks.js +1007 -0
- package/dist/API/src/routes/tasks.js.map +1 -0
- package/dist/API/src/utils/validation.d.ts +22 -0
- package/dist/API/src/utils/validation.d.ts.map +1 -0
- package/dist/API/src/utils/validation.js +50 -0
- package/dist/API/src/utils/validation.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +184 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/activity.d.ts +7 -0
- package/dist/routes/activity.d.ts.map +1 -0
- package/dist/routes/activity.js +252 -0
- package/dist/routes/activity.js.map +1 -0
- package/dist/routes/config.d.ts +7 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +647 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/credit-alerts.d.ts +2 -0
- package/dist/routes/credit-alerts.d.ts.map +1 -0
- package/dist/routes/credit-alerts.js +97 -0
- package/dist/routes/credit-alerts.js.map +1 -0
- package/dist/routes/health.d.ts +7 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +200 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/incidents.d.ts +7 -0
- package/dist/routes/incidents.d.ts.map +1 -0
- package/dist/routes/incidents.js +117 -0
- package/dist/routes/incidents.js.map +1 -0
- package/dist/routes/projects.d.ts +7 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +643 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/runners.d.ts +7 -0
- package/dist/routes/runners.d.ts.map +1 -0
- package/dist/routes/runners.js +299 -0
- package/dist/routes/runners.js.map +1 -0
- package/dist/routes/skills.d.ts +3 -0
- package/dist/routes/skills.d.ts.map +1 -0
- package/dist/routes/skills.js +109 -0
- package/dist/routes/skills.js.map +1 -0
- package/dist/routes/storage.d.ts +7 -0
- package/dist/routes/storage.d.ts.map +1 -0
- package/dist/routes/storage.js +93 -0
- package/dist/routes/storage.js.map +1 -0
- package/dist/routes/tasks.d.ts +7 -0
- package/dist/routes/tasks.d.ts.map +1 -0
- package/dist/routes/tasks.js +1145 -0
- package/dist/routes/tasks.js.map +1 -0
- package/dist/src/cleanup/invocation-logs.d.ts +30 -0
- package/dist/src/cleanup/invocation-logs.d.ts.map +1 -0
- package/dist/src/cleanup/invocation-logs.js +66 -0
- package/dist/src/cleanup/invocation-logs.js.map +1 -0
- package/dist/src/commands/loop-phases.d.ts +11 -0
- package/dist/src/commands/loop-phases.d.ts.map +1 -0
- package/dist/src/commands/loop-phases.js +304 -0
- package/dist/src/commands/loop-phases.js.map +1 -0
- package/dist/src/config/loader.d.ts +160 -0
- package/dist/src/config/loader.d.ts.map +1 -0
- package/dist/src/config/loader.js +276 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/database/connection.d.ts +35 -0
- package/dist/src/database/connection.d.ts.map +1 -0
- package/dist/src/database/connection.js +197 -0
- package/dist/src/database/connection.js.map +1 -0
- package/dist/src/database/queries.d.ts +220 -0
- package/dist/src/database/queries.d.ts.map +1 -0
- package/dist/src/database/queries.js +589 -0
- package/dist/src/database/queries.js.map +1 -0
- package/dist/src/database/schema.d.ts +8 -0
- package/dist/src/database/schema.d.ts.map +1 -0
- package/dist/src/database/schema.js +184 -0
- package/dist/src/database/schema.js.map +1 -0
- package/dist/src/git/push.d.ts +26 -0
- package/dist/src/git/push.d.ts.map +1 -0
- package/dist/src/git/push.js +91 -0
- package/dist/src/git/push.js.map +1 -0
- package/dist/src/git/status.d.ts +83 -0
- package/dist/src/git/status.d.ts.map +1 -0
- package/dist/src/git/status.js +315 -0
- package/dist/src/git/status.js.map +1 -0
- package/dist/src/health/stuck-task-detector.d.ts +131 -0
- package/dist/src/health/stuck-task-detector.d.ts.map +1 -0
- package/dist/src/health/stuck-task-detector.js +233 -0
- package/dist/src/health/stuck-task-detector.js.map +1 -0
- package/dist/src/health/stuck-task-recovery.d.ts +45 -0
- package/dist/src/health/stuck-task-recovery.d.ts.map +1 -0
- package/dist/src/health/stuck-task-recovery.js +309 -0
- package/dist/src/health/stuck-task-recovery.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +130 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/locking/queries.d.ts +116 -0
- package/dist/src/locking/queries.d.ts.map +1 -0
- package/dist/src/locking/queries.js +232 -0
- package/dist/src/locking/queries.js.map +1 -0
- package/dist/src/locking/section-lock.d.ts +74 -0
- package/dist/src/locking/section-lock.d.ts.map +1 -0
- package/dist/src/locking/section-lock.js +196 -0
- package/dist/src/locking/section-lock.js.map +1 -0
- package/dist/src/locking/task-lock.d.ts +92 -0
- package/dist/src/locking/task-lock.d.ts.map +1 -0
- package/dist/src/locking/task-lock.js +233 -0
- package/dist/src/locking/task-lock.js.map +1 -0
- package/dist/src/migrations/index.d.ts +7 -0
- package/dist/src/migrations/index.d.ts.map +1 -0
- package/dist/src/migrations/index.js +9 -0
- package/dist/src/migrations/index.js.map +1 -0
- package/dist/src/migrations/manifest.d.ts +92 -0
- package/dist/src/migrations/manifest.d.ts.map +1 -0
- package/dist/src/migrations/manifest.js +255 -0
- package/dist/src/migrations/manifest.js.map +1 -0
- package/dist/src/migrations/runner.d.ts +84 -0
- package/dist/src/migrations/runner.d.ts.map +1 -0
- package/dist/src/migrations/runner.js +338 -0
- package/dist/src/migrations/runner.js.map +1 -0
- package/dist/src/orchestrator/coder.d.ts +32 -0
- package/dist/src/orchestrator/coder.d.ts.map +1 -0
- package/dist/src/orchestrator/coder.js +170 -0
- package/dist/src/orchestrator/coder.js.map +1 -0
- package/dist/src/orchestrator/coordinator.d.ts +28 -0
- package/dist/src/orchestrator/coordinator.d.ts.map +1 -0
- package/dist/src/orchestrator/coordinator.js +252 -0
- package/dist/src/orchestrator/coordinator.js.map +1 -0
- package/dist/src/orchestrator/fallback-handler.d.ts +24 -0
- package/dist/src/orchestrator/fallback-handler.d.ts.map +1 -0
- package/dist/src/orchestrator/fallback-handler.js +280 -0
- package/dist/src/orchestrator/fallback-handler.js.map +1 -0
- package/dist/src/orchestrator/invoke.d.ts +14 -0
- package/dist/src/orchestrator/invoke.d.ts.map +1 -0
- package/dist/src/orchestrator/invoke.js +76 -0
- package/dist/src/orchestrator/invoke.js.map +1 -0
- package/dist/src/orchestrator/post-coder.d.ts +10 -0
- package/dist/src/orchestrator/post-coder.d.ts.map +1 -0
- package/dist/src/orchestrator/post-coder.js +198 -0
- package/dist/src/orchestrator/post-coder.js.map +1 -0
- package/dist/src/orchestrator/post-reviewer.d.ts +10 -0
- package/dist/src/orchestrator/post-reviewer.d.ts.map +1 -0
- package/dist/src/orchestrator/post-reviewer.js +199 -0
- package/dist/src/orchestrator/post-reviewer.js.map +1 -0
- package/dist/src/orchestrator/reviewer.d.ts +35 -0
- package/dist/src/orchestrator/reviewer.d.ts.map +1 -0
- package/dist/src/orchestrator/reviewer.js +237 -0
- package/dist/src/orchestrator/reviewer.js.map +1 -0
- package/dist/src/orchestrator/schemas.d.ts +10 -0
- package/dist/src/orchestrator/schemas.d.ts.map +1 -0
- package/dist/src/orchestrator/schemas.js +81 -0
- package/dist/src/orchestrator/schemas.js.map +1 -0
- package/dist/src/orchestrator/task-selector.d.ts +102 -0
- package/dist/src/orchestrator/task-selector.d.ts.map +1 -0
- package/dist/src/orchestrator/task-selector.js +326 -0
- package/dist/src/orchestrator/task-selector.js.map +1 -0
- package/dist/src/orchestrator/types.d.ts +74 -0
- package/dist/src/orchestrator/types.d.ts.map +1 -0
- package/dist/src/orchestrator/types.js +5 -0
- package/dist/src/orchestrator/types.js.map +1 -0
- package/dist/src/prompts/coder.d.ts +36 -0
- package/dist/src/prompts/coder.d.ts.map +1 -0
- package/dist/src/prompts/coder.js +303 -0
- package/dist/src/prompts/coder.js.map +1 -0
- package/dist/src/prompts/prompt-helpers.d.ts +51 -0
- package/dist/src/prompts/prompt-helpers.d.ts.map +1 -0
- package/dist/src/prompts/prompt-helpers.js +299 -0
- package/dist/src/prompts/prompt-helpers.js.map +1 -0
- package/dist/src/prompts/reviewer.d.ts +40 -0
- package/dist/src/prompts/reviewer.d.ts.map +1 -0
- package/dist/src/prompts/reviewer.js +416 -0
- package/dist/src/prompts/reviewer.js.map +1 -0
- package/dist/src/providers/claude.d.ts +53 -0
- package/dist/src/providers/claude.d.ts.map +1 -0
- package/dist/src/providers/claude.js +227 -0
- package/dist/src/providers/claude.js.map +1 -0
- package/dist/src/providers/codex.d.ts +53 -0
- package/dist/src/providers/codex.d.ts.map +1 -0
- package/dist/src/providers/codex.js +253 -0
- package/dist/src/providers/codex.js.map +1 -0
- package/dist/src/providers/gemini.d.ts +58 -0
- package/dist/src/providers/gemini.d.ts.map +1 -0
- package/dist/src/providers/gemini.js +240 -0
- package/dist/src/providers/gemini.js.map +1 -0
- package/dist/src/providers/interface.d.ts +185 -0
- package/dist/src/providers/interface.d.ts.map +1 -0
- package/dist/src/providers/interface.js +92 -0
- package/dist/src/providers/interface.js.map +1 -0
- package/dist/src/providers/invocation-logger.d.ts +97 -0
- package/dist/src/providers/invocation-logger.d.ts.map +1 -0
- package/dist/src/providers/invocation-logger.js +378 -0
- package/dist/src/providers/invocation-logger.js.map +1 -0
- package/dist/src/providers/openai.d.ts +53 -0
- package/dist/src/providers/openai.d.ts.map +1 -0
- package/dist/src/providers/openai.js +230 -0
- package/dist/src/providers/openai.js.map +1 -0
- package/dist/src/providers/registry.d.ts +100 -0
- package/dist/src/providers/registry.d.ts.map +1 -0
- package/dist/src/providers/registry.js +170 -0
- package/dist/src/providers/registry.js.map +1 -0
- package/dist/src/routes/activity.d.ts +7 -0
- package/dist/src/routes/activity.d.ts.map +1 -0
- package/dist/src/routes/activity.js +252 -0
- package/dist/src/routes/activity.js.map +1 -0
- package/dist/src/routes/config.d.ts +7 -0
- package/dist/src/routes/config.d.ts.map +1 -0
- package/dist/src/routes/config.js +521 -0
- package/dist/src/routes/config.js.map +1 -0
- package/dist/src/routes/health.d.ts +7 -0
- package/dist/src/routes/health.d.ts.map +1 -0
- package/dist/src/routes/health.js +172 -0
- package/dist/src/routes/health.js.map +1 -0
- package/dist/src/routes/incidents.d.ts +7 -0
- package/dist/src/routes/incidents.d.ts.map +1 -0
- package/dist/src/routes/incidents.js +117 -0
- package/dist/src/routes/incidents.js.map +1 -0
- package/dist/src/routes/projects.d.ts +7 -0
- package/dist/src/routes/projects.d.ts.map +1 -0
- package/dist/src/routes/projects.js +398 -0
- package/dist/src/routes/projects.js.map +1 -0
- package/dist/src/routes/runners.d.ts +7 -0
- package/dist/src/routes/runners.d.ts.map +1 -0
- package/dist/src/routes/runners.js +242 -0
- package/dist/src/routes/runners.js.map +1 -0
- package/dist/src/routes/tasks.d.ts +7 -0
- package/dist/src/routes/tasks.d.ts.map +1 -0
- package/dist/src/routes/tasks.js +1007 -0
- package/dist/src/routes/tasks.js.map +1 -0
- package/dist/src/runners/activity-log.d.ts +65 -0
- package/dist/src/runners/activity-log.d.ts.map +1 -0
- package/dist/src/runners/activity-log.js +140 -0
- package/dist/src/runners/activity-log.js.map +1 -0
- package/dist/src/runners/cron.d.ts +30 -0
- package/dist/src/runners/cron.d.ts.map +1 -0
- package/dist/src/runners/cron.js +333 -0
- package/dist/src/runners/cron.js.map +1 -0
- package/dist/src/runners/daemon.d.ts +71 -0
- package/dist/src/runners/daemon.d.ts.map +1 -0
- package/dist/src/runners/daemon.js +233 -0
- package/dist/src/runners/daemon.js.map +1 -0
- package/dist/src/runners/global-db.d.ts +31 -0
- package/dist/src/runners/global-db.d.ts.map +1 -0
- package/dist/src/runners/global-db.js +220 -0
- package/dist/src/runners/global-db.js.map +1 -0
- package/dist/src/runners/hang-detector.d.ts +38 -0
- package/dist/src/runners/hang-detector.d.ts.map +1 -0
- package/dist/src/runners/hang-detector.js +130 -0
- package/dist/src/runners/hang-detector.js.map +1 -0
- package/dist/src/runners/heartbeat.d.ts +39 -0
- package/dist/src/runners/heartbeat.d.ts.map +1 -0
- package/dist/src/runners/heartbeat.js +71 -0
- package/dist/src/runners/heartbeat.js.map +1 -0
- package/dist/src/runners/lock.d.ts +47 -0
- package/dist/src/runners/lock.d.ts.map +1 -0
- package/dist/src/runners/lock.js +140 -0
- package/dist/src/runners/lock.js.map +1 -0
- package/dist/src/runners/orchestrator-loop.d.ts +20 -0
- package/dist/src/runners/orchestrator-loop.d.ts.map +1 -0
- package/dist/src/runners/orchestrator-loop.js +208 -0
- package/dist/src/runners/orchestrator-loop.js.map +1 -0
- package/dist/src/runners/projects.d.ts +96 -0
- package/dist/src/runners/projects.d.ts.map +1 -0
- package/dist/src/runners/projects.js +243 -0
- package/dist/src/runners/projects.js.map +1 -0
- package/dist/src/runners/wakeup.d.ts +37 -0
- package/dist/src/runners/wakeup.d.ts.map +1 -0
- package/dist/src/runners/wakeup.js +355 -0
- package/dist/src/runners/wakeup.js.map +1 -0
- package/dist/src/utils/validation.d.ts +22 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/src/utils/validation.js +50 -0
- package/dist/src/utils/validation.js.map +1 -0
- package/dist/utils/sqlite.d.ts +17 -0
- package/dist/utils/sqlite.d.ts.map +1 -0
- package/dist/utils/sqlite.js +27 -0
- package/dist/utils/sqlite.js.map +1 -0
- package/dist/utils/storage-cache.d.ts +33 -0
- package/dist/utils/storage-cache.d.ts.map +1 -0
- package/dist/utils/storage-cache.js +81 -0
- package/dist/utils/storage-cache.js.map +1 -0
- package/dist/utils/validation.d.ts +22 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +51 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +39 -0
- package/src/index.ts +199 -0
- package/src/routes/activity.ts +302 -0
- package/src/routes/config.ts +723 -0
- package/src/routes/credit-alerts.ts +73 -0
- package/src/routes/health.ts +219 -0
- package/src/routes/incidents.ts +131 -0
- package/src/routes/projects.ts +854 -0
- package/src/routes/runners.ts +357 -0
- package/src/routes/skills.ts +127 -0
- package/src/routes/storage.ts +108 -0
- package/src/routes/tasks.ts +1372 -0
- package/src/utils/sqlite.ts +36 -0
- package/src/utils/storage-cache.ts +107 -0
- package/src/utils/validation.ts +61 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task selection algorithm with locking integration
|
|
3
|
+
* Following ORCHESTRATOR.md specification
|
|
4
|
+
*/
|
|
5
|
+
import type Database from 'better-sqlite3';
|
|
6
|
+
import type { Task } from '../database/queries.js';
|
|
7
|
+
import { isTaskLocked, type LockAcquisitionResult, type LockReleaseResult, type HeartbeatHandle } from '../locking/task-lock.js';
|
|
8
|
+
import { acquireSectionLock, releaseSectionLock, isSectionLocked } from '../locking/section-lock.js';
|
|
9
|
+
export interface SelectedTask {
|
|
10
|
+
task: Task;
|
|
11
|
+
action: 'review' | 'resume' | 'start';
|
|
12
|
+
rejectionNotes?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SelectedTaskWithLock extends SelectedTask {
|
|
15
|
+
lockResult: LockAcquisitionResult;
|
|
16
|
+
heartbeat?: HeartbeatHandle;
|
|
17
|
+
}
|
|
18
|
+
export interface TaskSelectionOptions {
|
|
19
|
+
runnerId: string;
|
|
20
|
+
timeoutMinutes?: number;
|
|
21
|
+
noWait?: boolean;
|
|
22
|
+
waitTimeoutMs?: number;
|
|
23
|
+
pollIntervalMs?: number;
|
|
24
|
+
sectionId?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Select the next task to work on
|
|
28
|
+
*
|
|
29
|
+
* Priority order:
|
|
30
|
+
* 1. Tasks in 'review' status (complete review loop first)
|
|
31
|
+
* 2. Tasks in 'in_progress' status (resume incomplete work)
|
|
32
|
+
* 3. Tasks in 'pending' status (start new work)
|
|
33
|
+
*
|
|
34
|
+
* Within each priority, tasks are ordered by:
|
|
35
|
+
* - Section position (lower first)
|
|
36
|
+
* - Creation time (older first)
|
|
37
|
+
*/
|
|
38
|
+
export declare function selectNextTask(db: Database.Database, sectionId?: string): SelectedTask | null;
|
|
39
|
+
/**
|
|
40
|
+
* Batch of tasks from a single section
|
|
41
|
+
*/
|
|
42
|
+
export interface TaskBatch {
|
|
43
|
+
tasks: Task[];
|
|
44
|
+
sectionId: string;
|
|
45
|
+
sectionName: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Select a batch of pending tasks from the first available section
|
|
49
|
+
* Used when batch mode is enabled
|
|
50
|
+
*/
|
|
51
|
+
export declare function selectTaskBatch(db: Database.Database, maxSize?: number): TaskBatch | null;
|
|
52
|
+
/**
|
|
53
|
+
* Mark a task as in_progress when starting
|
|
54
|
+
*/
|
|
55
|
+
export declare function markTaskInProgress(db: Database.Database, taskId: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* Check if all tasks are completed
|
|
58
|
+
*/
|
|
59
|
+
export declare function areAllTasksComplete(db: Database.Database, sectionId?: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Count tasks by status
|
|
62
|
+
*/
|
|
63
|
+
export declare function getTaskCounts(db: Database.Database, sectionId?: string): {
|
|
64
|
+
pending: number;
|
|
65
|
+
in_progress: number;
|
|
66
|
+
review: number;
|
|
67
|
+
completed: number;
|
|
68
|
+
disputed: number;
|
|
69
|
+
failed: number;
|
|
70
|
+
total: number;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Select the next task and acquire a lock on it
|
|
74
|
+
* Skips tasks that are already locked by other runners
|
|
75
|
+
*/
|
|
76
|
+
export declare function selectNextTaskWithLock(db: Database.Database, options: TaskSelectionOptions): SelectedTaskWithLock | null;
|
|
77
|
+
/**
|
|
78
|
+
* Select next task with wait behavior
|
|
79
|
+
* Waits for a locked task if no unlocked tasks are available
|
|
80
|
+
*/
|
|
81
|
+
export declare function selectNextTaskWithWait(db: Database.Database, options: TaskSelectionOptions): Promise<SelectedTaskWithLock | null>;
|
|
82
|
+
/**
|
|
83
|
+
* Release task lock after completion
|
|
84
|
+
*/
|
|
85
|
+
export declare function releaseTaskLockAfterCompletion(db: Database.Database, taskId: string, runnerId: string, heartbeat?: HeartbeatHandle): LockReleaseResult;
|
|
86
|
+
/**
|
|
87
|
+
* Mark task in progress and acquire lock
|
|
88
|
+
*/
|
|
89
|
+
export declare function startTaskWithLock(db: Database.Database, taskId: string, runnerId: string, timeoutMinutes?: number): {
|
|
90
|
+
success: boolean;
|
|
91
|
+
heartbeat?: HeartbeatHandle;
|
|
92
|
+
error?: string;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Complete task and release lock
|
|
96
|
+
*/
|
|
97
|
+
export declare function completeTaskWithLock(db: Database.Database, taskId: string, runnerId: string, newStatus: 'review' | 'completed', heartbeat?: HeartbeatHandle): {
|
|
98
|
+
success: boolean;
|
|
99
|
+
error?: string;
|
|
100
|
+
};
|
|
101
|
+
export { isTaskLocked, isSectionLocked, acquireSectionLock, releaseSectionLock, };
|
|
102
|
+
//# sourceMappingURL=task-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-selector.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/task-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task selection algorithm with locking integration
|
|
3
|
+
* Following ORCHESTRATOR.md specification
|
|
4
|
+
*/
|
|
5
|
+
import { findNextTask, getTask, updateTaskStatus, getLastRejectionNotes, hasDependenciesMet } from '../database/queries.js';
|
|
6
|
+
import { acquireTaskLock, releaseTaskLock, isTaskLocked, createHeartbeatLoop, } from '../locking/task-lock.js';
|
|
7
|
+
import { acquireSectionLock, releaseSectionLock, isSectionLocked, } from '../locking/section-lock.js';
|
|
8
|
+
import { listTaskLocks } from '../locking/queries.js';
|
|
9
|
+
/**
|
|
10
|
+
* Select the next task to work on
|
|
11
|
+
*
|
|
12
|
+
* Priority order:
|
|
13
|
+
* 1. Tasks in 'review' status (complete review loop first)
|
|
14
|
+
* 2. Tasks in 'in_progress' status (resume incomplete work)
|
|
15
|
+
* 3. Tasks in 'pending' status (start new work)
|
|
16
|
+
*
|
|
17
|
+
* Within each priority, tasks are ordered by:
|
|
18
|
+
* - Section position (lower first)
|
|
19
|
+
* - Creation time (older first)
|
|
20
|
+
*/
|
|
21
|
+
export function selectNextTask(db, sectionId) {
|
|
22
|
+
const result = findNextTask(db, sectionId);
|
|
23
|
+
if (!result.task || result.action === 'idle') {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const selectedTask = {
|
|
27
|
+
task: result.task,
|
|
28
|
+
action: result.action,
|
|
29
|
+
};
|
|
30
|
+
// If resuming after rejection, get the last rejection notes
|
|
31
|
+
if (result.action === 'resume' && result.task.rejection_count > 0) {
|
|
32
|
+
selectedTask.rejectionNotes = getLastRejectionNotes(db, result.task.id) ?? undefined;
|
|
33
|
+
}
|
|
34
|
+
return selectedTask;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Select a batch of pending tasks from the first available section
|
|
38
|
+
* Used when batch mode is enabled
|
|
39
|
+
*/
|
|
40
|
+
export function selectTaskBatch(db, maxSize = 10) {
|
|
41
|
+
// Find sections with pending tasks, ordered by position
|
|
42
|
+
const sections = db
|
|
43
|
+
.prepare(`SELECT s.id, s.name, s.position,
|
|
44
|
+
SUM(CASE WHEN t.status = 'pending' THEN 1 ELSE 0 END) as pending_count,
|
|
45
|
+
SUM(CASE WHEN t.status IN ('in_progress', 'review') THEN 1 ELSE 0 END) as active_count
|
|
46
|
+
FROM sections s
|
|
47
|
+
LEFT JOIN tasks t ON t.section_id = s.id
|
|
48
|
+
GROUP BY s.id
|
|
49
|
+
HAVING pending_count > 0
|
|
50
|
+
ORDER BY s.position`)
|
|
51
|
+
.all();
|
|
52
|
+
for (const section of sections) {
|
|
53
|
+
// Skip sections with active tasks (in_progress or review)
|
|
54
|
+
if (section.active_count > 0)
|
|
55
|
+
continue;
|
|
56
|
+
// Skip sections with unmet dependencies
|
|
57
|
+
if (!hasDependenciesMet(db, section.id))
|
|
58
|
+
continue;
|
|
59
|
+
// Get pending tasks from this section
|
|
60
|
+
const tasks = db
|
|
61
|
+
.prepare(`SELECT * FROM tasks
|
|
62
|
+
WHERE section_id = ? AND status = 'pending'
|
|
63
|
+
ORDER BY created_at
|
|
64
|
+
LIMIT ?`)
|
|
65
|
+
.all(section.id, maxSize);
|
|
66
|
+
if (tasks.length > 0) {
|
|
67
|
+
return {
|
|
68
|
+
tasks,
|
|
69
|
+
sectionId: section.id,
|
|
70
|
+
sectionName: section.name,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Mark a task as in_progress when starting
|
|
78
|
+
*/
|
|
79
|
+
export function markTaskInProgress(db, taskId) {
|
|
80
|
+
const task = getTask(db, taskId);
|
|
81
|
+
if (!task)
|
|
82
|
+
return;
|
|
83
|
+
if (task.status === 'pending') {
|
|
84
|
+
updateTaskStatus(db, taskId, 'in_progress', 'orchestrator');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if all tasks are completed
|
|
89
|
+
*/
|
|
90
|
+
export function areAllTasksComplete(db, sectionId) {
|
|
91
|
+
const result = findNextTask(db, sectionId);
|
|
92
|
+
return result.action === 'idle';
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Count tasks by status
|
|
96
|
+
*/
|
|
97
|
+
export function getTaskCounts(db, sectionId) {
|
|
98
|
+
const counts = {
|
|
99
|
+
pending: 0,
|
|
100
|
+
in_progress: 0,
|
|
101
|
+
review: 0,
|
|
102
|
+
completed: 0,
|
|
103
|
+
disputed: 0,
|
|
104
|
+
failed: 0,
|
|
105
|
+
total: 0,
|
|
106
|
+
};
|
|
107
|
+
let query = 'SELECT status, COUNT(*) as count FROM tasks';
|
|
108
|
+
const params = [];
|
|
109
|
+
if (sectionId) {
|
|
110
|
+
query += ' WHERE section_id = ?';
|
|
111
|
+
params.push(sectionId);
|
|
112
|
+
}
|
|
113
|
+
query += ' GROUP BY status';
|
|
114
|
+
const rows = db.prepare(query).all(...params);
|
|
115
|
+
for (const row of rows) {
|
|
116
|
+
if (row.status in counts) {
|
|
117
|
+
counts[row.status] = row.count;
|
|
118
|
+
}
|
|
119
|
+
counts.total += row.count;
|
|
120
|
+
}
|
|
121
|
+
return counts;
|
|
122
|
+
}
|
|
123
|
+
// ============ Locking Integration ============
|
|
124
|
+
const DEFAULT_TIMEOUT_MINUTES = 60;
|
|
125
|
+
const DEFAULT_WAIT_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
|
|
126
|
+
const DEFAULT_POLL_INTERVAL_MS = 5 * 1000; // 5 seconds
|
|
127
|
+
/**
|
|
128
|
+
* Select the next task and acquire a lock on it
|
|
129
|
+
* Skips tasks that are already locked by other runners
|
|
130
|
+
*/
|
|
131
|
+
export function selectNextTaskWithLock(db, options) {
|
|
132
|
+
const { runnerId, timeoutMinutes = DEFAULT_TIMEOUT_MINUTES, } = options;
|
|
133
|
+
// Get all currently locked task IDs
|
|
134
|
+
const lockedTaskIds = new Set(listTaskLocks(db).map(lock => lock.task_id));
|
|
135
|
+
// Find next available task that is not locked
|
|
136
|
+
const candidates = findNextTaskSkippingLocked(db, lockedTaskIds, runnerId, options.sectionId);
|
|
137
|
+
if (!candidates) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
// Try to acquire lock
|
|
141
|
+
const lockResult = acquireTaskLock(db, candidates.task.id, runnerId, timeoutMinutes);
|
|
142
|
+
if (!lockResult.acquired) {
|
|
143
|
+
// Lock acquisition failed (race condition)
|
|
144
|
+
// Try again with updated lock list
|
|
145
|
+
return selectNextTaskWithLock(db, options);
|
|
146
|
+
}
|
|
147
|
+
// Create heartbeat loop for the lock
|
|
148
|
+
const heartbeat = createHeartbeatLoop(db, candidates.task.id, runnerId);
|
|
149
|
+
return {
|
|
150
|
+
task: candidates.task,
|
|
151
|
+
action: candidates.action,
|
|
152
|
+
rejectionNotes: candidates.rejectionNotes,
|
|
153
|
+
lockResult,
|
|
154
|
+
heartbeat,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Helper to check if a task's section has met dependencies
|
|
159
|
+
*/
|
|
160
|
+
function canSelectTask(db, task) {
|
|
161
|
+
if (!task.section_id) {
|
|
162
|
+
// Tasks without a section are always allowed
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
// Check if section has all dependencies met
|
|
166
|
+
return hasDependenciesMet(db, task.section_id);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Find next task, skipping locked ones and tasks in sections with unmet dependencies
|
|
170
|
+
*/
|
|
171
|
+
function findNextTaskSkippingLocked(db, lockedTaskIds, runnerId, sectionId) {
|
|
172
|
+
// Build WHERE clause for section filtering
|
|
173
|
+
const sectionFilter = sectionId ? 'AND t.section_id = ?' : '';
|
|
174
|
+
const sectionParams = sectionId ? [sectionId] : [];
|
|
175
|
+
// Priority 1: Tasks in 'review' status
|
|
176
|
+
const reviewTasks = db
|
|
177
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
178
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
179
|
+
WHERE t.status = 'review' ${sectionFilter}
|
|
180
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
181
|
+
.all(...sectionParams);
|
|
182
|
+
for (const task of reviewTasks) {
|
|
183
|
+
if (canSelectTask(db, task) && (!lockedTaskIds.has(task.id) || isLockedByUs(db, task.id, runnerId))) {
|
|
184
|
+
return { task, action: 'review' };
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Priority 2: Tasks in 'in_progress' status
|
|
188
|
+
const inProgressTasks = db
|
|
189
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
190
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
191
|
+
WHERE t.status = 'in_progress' ${sectionFilter}
|
|
192
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
193
|
+
.all(...sectionParams);
|
|
194
|
+
for (const task of inProgressTasks) {
|
|
195
|
+
if (canSelectTask(db, task) && (!lockedTaskIds.has(task.id) || isLockedByUs(db, task.id, runnerId))) {
|
|
196
|
+
const rejectionNotes = task.rejection_count > 0
|
|
197
|
+
? getLastRejectionNotes(db, task.id) ?? undefined
|
|
198
|
+
: undefined;
|
|
199
|
+
return { task, action: 'resume', rejectionNotes };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Priority 3: Pending tasks
|
|
203
|
+
const pendingTasks = db
|
|
204
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
205
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
206
|
+
WHERE t.status = 'pending' ${sectionFilter}
|
|
207
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
208
|
+
.all(...sectionParams);
|
|
209
|
+
for (const task of pendingTasks) {
|
|
210
|
+
if (canSelectTask(db, task) && (!lockedTaskIds.has(task.id) || isLockedByUs(db, task.id, runnerId))) {
|
|
211
|
+
return { task, action: 'start' };
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Check if a task is locked by the current runner
|
|
218
|
+
*/
|
|
219
|
+
function isLockedByUs(db, taskId, runnerId) {
|
|
220
|
+
const locks = listTaskLocks(db);
|
|
221
|
+
const lock = locks.find(l => l.task_id === taskId);
|
|
222
|
+
return lock?.runner_id === runnerId;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Select next task with wait behavior
|
|
226
|
+
* Waits for a locked task if no unlocked tasks are available
|
|
227
|
+
*/
|
|
228
|
+
export async function selectNextTaskWithWait(db, options) {
|
|
229
|
+
const { noWait = false, waitTimeoutMs = DEFAULT_WAIT_TIMEOUT_MS, pollIntervalMs = DEFAULT_POLL_INTERVAL_MS, } = options;
|
|
230
|
+
// First try without waiting
|
|
231
|
+
const result = selectNextTaskWithLock(db, options);
|
|
232
|
+
if (result) {
|
|
233
|
+
return result;
|
|
234
|
+
}
|
|
235
|
+
// Check if there are any tasks at all
|
|
236
|
+
const counts = getTaskCounts(db);
|
|
237
|
+
if (counts.pending === 0 && counts.in_progress === 0 && counts.review === 0) {
|
|
238
|
+
return null; // All tasks completed
|
|
239
|
+
}
|
|
240
|
+
// If noWait, return null immediately
|
|
241
|
+
if (noWait) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
// Wait for a task to become available
|
|
245
|
+
const startTime = Date.now();
|
|
246
|
+
while (Date.now() - startTime < waitTimeoutMs) {
|
|
247
|
+
await sleep(pollIntervalMs);
|
|
248
|
+
const nextResult = selectNextTaskWithLock(db, options);
|
|
249
|
+
if (nextResult) {
|
|
250
|
+
return nextResult;
|
|
251
|
+
}
|
|
252
|
+
// Check if all remaining tasks are locked
|
|
253
|
+
const currentCounts = getTaskCounts(db);
|
|
254
|
+
if (currentCounts.pending === 0 &&
|
|
255
|
+
currentCounts.in_progress === 0 &&
|
|
256
|
+
currentCounts.review === 0) {
|
|
257
|
+
return null; // All tasks completed while waiting
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Timeout reached
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Release task lock after completion
|
|
265
|
+
*/
|
|
266
|
+
export function releaseTaskLockAfterCompletion(db, taskId, runnerId, heartbeat) {
|
|
267
|
+
// Stop heartbeat if running
|
|
268
|
+
if (heartbeat) {
|
|
269
|
+
heartbeat.stop();
|
|
270
|
+
}
|
|
271
|
+
return releaseTaskLock(db, taskId, runnerId);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Mark task in progress and acquire lock
|
|
275
|
+
*/
|
|
276
|
+
export function startTaskWithLock(db, taskId, runnerId, timeoutMinutes = DEFAULT_TIMEOUT_MINUTES) {
|
|
277
|
+
const task = getTask(db, taskId);
|
|
278
|
+
if (!task) {
|
|
279
|
+
return { success: false, error: 'Task not found' };
|
|
280
|
+
}
|
|
281
|
+
// Try to acquire lock
|
|
282
|
+
const lockResult = acquireTaskLock(db, taskId, runnerId, timeoutMinutes);
|
|
283
|
+
if (!lockResult.acquired) {
|
|
284
|
+
return {
|
|
285
|
+
success: false,
|
|
286
|
+
error: lockResult.error?.message ?? 'Failed to acquire lock',
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
// Mark as in progress if pending
|
|
290
|
+
if (task.status === 'pending') {
|
|
291
|
+
updateTaskStatus(db, taskId, 'in_progress', 'orchestrator');
|
|
292
|
+
}
|
|
293
|
+
// Start heartbeat
|
|
294
|
+
const heartbeat = createHeartbeatLoop(db, taskId, runnerId);
|
|
295
|
+
heartbeat.start();
|
|
296
|
+
return { success: true, heartbeat };
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Complete task and release lock
|
|
300
|
+
*/
|
|
301
|
+
export function completeTaskWithLock(db, taskId, runnerId, newStatus, heartbeat) {
|
|
302
|
+
const task = getTask(db, taskId);
|
|
303
|
+
if (!task) {
|
|
304
|
+
if (heartbeat)
|
|
305
|
+
heartbeat.stop();
|
|
306
|
+
return { success: false, error: 'Task not found' };
|
|
307
|
+
}
|
|
308
|
+
// Update status
|
|
309
|
+
updateTaskStatus(db, taskId, newStatus, 'orchestrator');
|
|
310
|
+
// Release lock
|
|
311
|
+
const releaseResult = releaseTaskLockAfterCompletion(db, taskId, runnerId, heartbeat);
|
|
312
|
+
if (!releaseResult.released && releaseResult.error?.code !== 'LOCK_NOT_FOUND') {
|
|
313
|
+
return {
|
|
314
|
+
success: false,
|
|
315
|
+
error: releaseResult.error?.message ?? 'Failed to release lock',
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
return { success: true };
|
|
319
|
+
}
|
|
320
|
+
// ============ Helpers ============
|
|
321
|
+
function sleep(ms) {
|
|
322
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
323
|
+
}
|
|
324
|
+
// ============ Re-exports for convenience ============
|
|
325
|
+
export { isTaskLocked, isSectionLocked, acquireSectionLock, releaseSectionLock, };
|
|
326
|
+
//# sourceMappingURL=task-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-selector.js","sourceRoot":"","sources":["../../../../src/orchestrator/task-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for orchestrator decision results
|
|
3
|
+
*/
|
|
4
|
+
export interface CoderOrchestrationResult {
|
|
5
|
+
action: 'submit' | 'retry' | 'stage_commit_submit' | 'error';
|
|
6
|
+
reasoning: string;
|
|
7
|
+
commits: string[];
|
|
8
|
+
commit_message?: string;
|
|
9
|
+
next_status: 'review' | 'in_progress' | 'failed';
|
|
10
|
+
metadata: {
|
|
11
|
+
files_changed: number;
|
|
12
|
+
confidence: 'high' | 'medium' | 'low';
|
|
13
|
+
exit_clean: boolean;
|
|
14
|
+
has_commits: boolean;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface ReviewerOrchestrationResult {
|
|
18
|
+
decision: 'approve' | 'reject' | 'dispute' | 'skip' | 'unclear';
|
|
19
|
+
reasoning: string;
|
|
20
|
+
notes: string;
|
|
21
|
+
next_status: 'completed' | 'in_progress' | 'disputed' | 'skipped' | 'review';
|
|
22
|
+
metadata: {
|
|
23
|
+
rejection_count: number;
|
|
24
|
+
confidence: 'high' | 'medium' | 'low';
|
|
25
|
+
push_to_remote: boolean;
|
|
26
|
+
repeated_issue: boolean;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface CoderContext {
|
|
30
|
+
task: {
|
|
31
|
+
id: string;
|
|
32
|
+
title: string;
|
|
33
|
+
description: string;
|
|
34
|
+
rejection_notes?: string;
|
|
35
|
+
rejection_count?: number;
|
|
36
|
+
};
|
|
37
|
+
coder_output: {
|
|
38
|
+
stdout: string;
|
|
39
|
+
stderr: string;
|
|
40
|
+
exit_code: number;
|
|
41
|
+
timed_out: boolean;
|
|
42
|
+
duration_ms: number;
|
|
43
|
+
};
|
|
44
|
+
git_state: {
|
|
45
|
+
commits: Array<{
|
|
46
|
+
sha: string;
|
|
47
|
+
message: string;
|
|
48
|
+
}>;
|
|
49
|
+
files_changed: string[];
|
|
50
|
+
has_uncommitted_changes: boolean;
|
|
51
|
+
diff_summary: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface ReviewerContext {
|
|
55
|
+
task: {
|
|
56
|
+
id: string;
|
|
57
|
+
title: string;
|
|
58
|
+
rejection_count: number;
|
|
59
|
+
};
|
|
60
|
+
reviewer_output: {
|
|
61
|
+
stdout: string;
|
|
62
|
+
stderr: string;
|
|
63
|
+
exit_code: number;
|
|
64
|
+
timed_out: boolean;
|
|
65
|
+
duration_ms: number;
|
|
66
|
+
};
|
|
67
|
+
git_context: {
|
|
68
|
+
commit_sha: string;
|
|
69
|
+
files_changed: string[];
|
|
70
|
+
additions: number;
|
|
71
|
+
deletions: number;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,qBAAqB,GAAG,OAAO,CAAC;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;IACjD,QAAQ,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACtC,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC7E,QAAQ,EAAE;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACtC,cAAc,EAAE,OAAO,CAAC;QACxB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjD,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,uBAAuB,EAAE,OAAO,CAAC;QACjC,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,eAAe,EAAE;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,WAAW,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/orchestrator/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coder prompt templates
|
|
3
|
+
* Following the exact templates from PROMPTS.md
|
|
4
|
+
*/
|
|
5
|
+
import type { Task, RejectionEntry } from '../database/queries.js';
|
|
6
|
+
export interface CoderPromptContext {
|
|
7
|
+
task: Task;
|
|
8
|
+
projectPath: string;
|
|
9
|
+
previousStatus: string;
|
|
10
|
+
rejectionNotes?: string;
|
|
11
|
+
rejectionHistory?: RejectionEntry[];
|
|
12
|
+
coordinatorGuidance?: string;
|
|
13
|
+
gitStatus?: string;
|
|
14
|
+
gitDiff?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate the coder prompt for a new task
|
|
18
|
+
*/
|
|
19
|
+
export declare function generateCoderPrompt(context: CoderPromptContext): string;
|
|
20
|
+
/**
|
|
21
|
+
* Context for batch coder prompts
|
|
22
|
+
*/
|
|
23
|
+
export interface BatchCoderPromptContext {
|
|
24
|
+
tasks: Task[];
|
|
25
|
+
projectPath: string;
|
|
26
|
+
sectionName: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate the coder prompt for a batch of tasks
|
|
30
|
+
*/
|
|
31
|
+
export declare function generateBatchCoderPrompt(context: BatchCoderPromptContext): string;
|
|
32
|
+
/**
|
|
33
|
+
* Generate the coder prompt for resuming partial work
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateResumingCoderPrompt(context: CoderPromptContext): string;
|
|
36
|
+
//# sourceMappingURL=coder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coder.d.ts","sourceRoot":"","sources":["../../../../src/prompts/coder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AASnE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;IACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAoJvE;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CA4EjF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAwE/E"}
|