steroids-cli 0.4.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +640 -0
- package/dist/cli/colors.d.ts +110 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +228 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/env.d.ts +159 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +227 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/errors.d.ts +166 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +244 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/flags.d.ts +75 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +232 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/help.d.ts +97 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +275 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +29 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interactive.d.ts +58 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +127 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/output.d.ts +116 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +178 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/commands/about.d.ts +7 -0
- package/dist/commands/about.d.ts.map +1 -0
- package/dist/commands/about.js +259 -0
- package/dist/commands/about.js.map +1 -0
- package/dist/commands/ai.d.ts +6 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +382 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +528 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +405 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +665 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/disputes.d.ts +3 -0
- package/dist/commands/disputes.d.ts.map +1 -0
- package/dist/commands/disputes.js +499 -0
- package/dist/commands/disputes.js.map +1 -0
- package/dist/commands/gc.d.ts +3 -0
- package/dist/commands/gc.d.ts.map +1 -0
- package/dist/commands/gc.js +300 -0
- package/dist/commands/gc.js.map +1 -0
- package/dist/commands/git.d.ts +3 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +458 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/health.d.ts +3 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +604 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/hooks.d.ts +6 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +529 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +200 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/llm.d.ts +7 -0
- package/dist/commands/llm.d.ts.map +1 -0
- package/dist/commands/llm.js +285 -0
- package/dist/commands/llm.js.map +1 -0
- package/dist/commands/locks.d.ts +3 -0
- package/dist/commands/locks.d.ts.map +1 -0
- package/dist/commands/locks.js +431 -0
- package/dist/commands/locks.js.map +1 -0
- package/dist/commands/logs.d.ts +3 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +487 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/loop-phases.d.ts +11 -0
- package/dist/commands/loop-phases.d.ts.map +1 -0
- package/dist/commands/loop-phases.js +204 -0
- package/dist/commands/loop-phases.js.map +1 -0
- package/dist/commands/loop.d.ts +3 -0
- package/dist/commands/loop.d.ts.map +1 -0
- package/dist/commands/loop.js +396 -0
- package/dist/commands/loop.js.map +1 -0
- package/dist/commands/projects.d.ts +6 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +362 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/purge.d.ts +3 -0
- package/dist/commands/purge.d.ts.map +1 -0
- package/dist/commands/purge.js +516 -0
- package/dist/commands/purge.js.map +1 -0
- package/dist/commands/runners.d.ts +3 -0
- package/dist/commands/runners.d.ts.map +1 -0
- package/dist/commands/runners.js +1076 -0
- package/dist/commands/runners.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +291 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/sections-commands.d.ts +9 -0
- package/dist/commands/sections-commands.d.ts.map +1 -0
- package/dist/commands/sections-commands.js +282 -0
- package/dist/commands/sections-commands.js.map +1 -0
- package/dist/commands/sections-graph.d.ts +25 -0
- package/dist/commands/sections-graph.d.ts.map +1 -0
- package/dist/commands/sections-graph.js +180 -0
- package/dist/commands/sections-graph.js.map +1 -0
- package/dist/commands/sections.d.ts +3 -0
- package/dist/commands/sections.d.ts.map +1 -0
- package/dist/commands/sections.js +376 -0
- package/dist/commands/sections.js.map +1 -0
- package/dist/commands/stats.d.ts +6 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +324 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/tasks.d.ts +3 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +1115 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/web.d.ts +7 -0
- package/dist/commands/web.d.ts.map +1 -0
- package/dist/commands/web.js +204 -0
- package/dist/commands/web.js.map +1 -0
- package/dist/config/ai-setup.d.ts +27 -0
- package/dist/config/ai-setup.d.ts.map +1 -0
- package/dist/config/ai-setup.js +432 -0
- package/dist/config/ai-setup.js.map +1 -0
- package/dist/config/browser.d.ts +9 -0
- package/dist/config/browser.d.ts.map +1 -0
- package/dist/config/browser.js +200 -0
- package/dist/config/browser.js.map +1 -0
- package/dist/config/json-schema.d.ts +28 -0
- package/dist/config/json-schema.d.ts.map +1 -0
- package/dist/config/json-schema.js +84 -0
- package/dist/config/json-schema.js.map +1 -0
- package/dist/config/loader.d.ts +152 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +270 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +34 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +437 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validator.d.ts +32 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +187 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/database/connection.d.ts +35 -0
- package/dist/database/connection.d.ts.map +1 -0
- package/dist/database/connection.js +208 -0
- package/dist/database/connection.js.map +1 -0
- package/dist/database/queries.d.ts +218 -0
- package/dist/database/queries.d.ts.map +1 -0
- package/dist/database/queries.js +613 -0
- package/dist/database/queries.js.map +1 -0
- package/dist/database/schema.d.ts +8 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +160 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/disputes/behavior.d.ts +106 -0
- package/dist/disputes/behavior.d.ts.map +1 -0
- package/dist/disputes/behavior.js +150 -0
- package/dist/disputes/behavior.js.map +1 -0
- package/dist/disputes/create.d.ts +59 -0
- package/dist/disputes/create.d.ts.map +1 -0
- package/dist/disputes/create.js +222 -0
- package/dist/disputes/create.js.map +1 -0
- package/dist/disputes/index.d.ts +21 -0
- package/dist/disputes/index.d.ts.map +1 -0
- package/dist/disputes/index.js +76 -0
- package/dist/disputes/index.js.map +1 -0
- package/dist/disputes/markdown.d.ts +41 -0
- package/dist/disputes/markdown.d.ts.map +1 -0
- package/dist/disputes/markdown.js +261 -0
- package/dist/disputes/markdown.js.map +1 -0
- package/dist/disputes/queries.d.ts +83 -0
- package/dist/disputes/queries.d.ts.map +1 -0
- package/dist/disputes/queries.js +180 -0
- package/dist/disputes/queries.js.map +1 -0
- package/dist/disputes/resolve.d.ts +57 -0
- package/dist/disputes/resolve.d.ts.map +1 -0
- package/dist/disputes/resolve.js +171 -0
- package/dist/disputes/resolve.js.map +1 -0
- package/dist/disputes/stale.d.ts +98 -0
- package/dist/disputes/stale.d.ts.map +1 -0
- package/dist/disputes/stale.js +205 -0
- package/dist/disputes/stale.js.map +1 -0
- package/dist/disputes/types.d.ts +92 -0
- package/dist/disputes/types.d.ts.map +1 -0
- package/dist/disputes/types.js +100 -0
- package/dist/disputes/types.js.map +1 -0
- package/dist/git/push.d.ts +26 -0
- package/dist/git/push.d.ts.map +1 -0
- package/dist/git/push.js +97 -0
- package/dist/git/push.js.map +1 -0
- package/dist/git/status.d.ts +61 -0
- package/dist/git/status.d.ts.map +1 -0
- package/dist/git/status.js +251 -0
- package/dist/git/status.js.map +1 -0
- package/dist/hooks/events.d.ts +72 -0
- package/dist/hooks/events.d.ts.map +1 -0
- package/dist/hooks/events.js +120 -0
- package/dist/hooks/events.js.map +1 -0
- package/dist/hooks/index.d.ts +19 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +48 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/integration.d.ts +69 -0
- package/dist/hooks/integration.d.ts.map +1 -0
- package/dist/hooks/integration.js +179 -0
- package/dist/hooks/integration.js.map +1 -0
- package/dist/hooks/merge.d.ts +115 -0
- package/dist/hooks/merge.d.ts.map +1 -0
- package/dist/hooks/merge.js +161 -0
- package/dist/hooks/merge.js.map +1 -0
- package/dist/hooks/orchestrator.d.ts +115 -0
- package/dist/hooks/orchestrator.d.ts.map +1 -0
- package/dist/hooks/orchestrator.js +226 -0
- package/dist/hooks/orchestrator.js.map +1 -0
- package/dist/hooks/payload.d.ts +294 -0
- package/dist/hooks/payload.d.ts.map +1 -0
- package/dist/hooks/payload.js +267 -0
- package/dist/hooks/payload.js.map +1 -0
- package/dist/hooks/script-runner.d.ts +63 -0
- package/dist/hooks/script-runner.d.ts.map +1 -0
- package/dist/hooks/script-runner.js +221 -0
- package/dist/hooks/script-runner.js.map +1 -0
- package/dist/hooks/templates.d.ts +104 -0
- package/dist/hooks/templates.d.ts.map +1 -0
- package/dist/hooks/templates.js +327 -0
- package/dist/hooks/templates.js.map +1 -0
- package/dist/hooks/webhook-runner.d.ts +69 -0
- package/dist/hooks/webhook-runner.d.ts.map +1 -0
- package/dist/hooks/webhook-runner.js +208 -0
- package/dist/hooks/webhook-runner.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +281 -0
- package/dist/index.js.map +1 -0
- package/dist/locking/cleanup.d.ts +70 -0
- package/dist/locking/cleanup.d.ts.map +1 -0
- package/dist/locking/cleanup.js +157 -0
- package/dist/locking/cleanup.js.map +1 -0
- package/dist/locking/queries.d.ts +116 -0
- package/dist/locking/queries.d.ts.map +1 -0
- package/dist/locking/queries.js +255 -0
- package/dist/locking/queries.js.map +1 -0
- package/dist/locking/section-lock.d.ts +74 -0
- package/dist/locking/section-lock.d.ts.map +1 -0
- package/dist/locking/section-lock.js +207 -0
- package/dist/locking/section-lock.js.map +1 -0
- package/dist/locking/task-lock.d.ts +92 -0
- package/dist/locking/task-lock.d.ts.map +1 -0
- package/dist/locking/task-lock.js +246 -0
- package/dist/locking/task-lock.js.map +1 -0
- package/dist/migrations/index.d.ts +7 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +37 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/manifest.d.ts +92 -0
- package/dist/migrations/manifest.d.ts.map +1 -0
- package/dist/migrations/manifest.js +270 -0
- package/dist/migrations/manifest.js.map +1 -0
- package/dist/migrations/runner.d.ts +84 -0
- package/dist/migrations/runner.d.ts.map +1 -0
- package/dist/migrations/runner.js +351 -0
- package/dist/migrations/runner.js.map +1 -0
- package/dist/orchestrator/coder.d.ts +32 -0
- package/dist/orchestrator/coder.d.ts.map +1 -0
- package/dist/orchestrator/coder.js +174 -0
- package/dist/orchestrator/coder.js.map +1 -0
- package/dist/orchestrator/coordinator.d.ts +28 -0
- package/dist/orchestrator/coordinator.d.ts.map +1 -0
- package/dist/orchestrator/coordinator.js +256 -0
- package/dist/orchestrator/coordinator.js.map +1 -0
- package/dist/orchestrator/reviewer.d.ts +35 -0
- package/dist/orchestrator/reviewer.d.ts.map +1 -0
- package/dist/orchestrator/reviewer.js +241 -0
- package/dist/orchestrator/reviewer.js.map +1 -0
- package/dist/orchestrator/task-selector.d.ts +102 -0
- package/dist/orchestrator/task-selector.d.ts.map +1 -0
- package/dist/orchestrator/task-selector.js +341 -0
- package/dist/orchestrator/task-selector.js.map +1 -0
- package/dist/prompts/coder.d.ts +36 -0
- package/dist/prompts/coder.d.ts.map +1 -0
- package/dist/prompts/coder.js +315 -0
- package/dist/prompts/coder.js.map +1 -0
- package/dist/prompts/prompt-helpers.d.ts +51 -0
- package/dist/prompts/prompt-helpers.d.ts.map +1 -0
- package/dist/prompts/prompt-helpers.js +312 -0
- package/dist/prompts/prompt-helpers.js.map +1 -0
- package/dist/prompts/reviewer.d.ts +40 -0
- package/dist/prompts/reviewer.d.ts.map +1 -0
- package/dist/prompts/reviewer.js +438 -0
- package/dist/prompts/reviewer.js.map +1 -0
- package/dist/providers/api-models.d.ts +65 -0
- package/dist/providers/api-models.d.ts.map +1 -0
- package/dist/providers/api-models.js +323 -0
- package/dist/providers/api-models.js.map +1 -0
- package/dist/providers/claude.d.ts +53 -0
- package/dist/providers/claude.d.ts.map +1 -0
- package/dist/providers/claude.js +229 -0
- package/dist/providers/claude.js.map +1 -0
- package/dist/providers/codex.d.ts +53 -0
- package/dist/providers/codex.d.ts.map +1 -0
- package/dist/providers/codex.js +214 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/gemini.d.ts +58 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +242 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +49 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/interface.d.ts +173 -0
- package/dist/providers/interface.d.ts.map +1 -0
- package/dist/providers/interface.js +96 -0
- package/dist/providers/interface.js.map +1 -0
- package/dist/providers/invocation-logger.d.ts +114 -0
- package/dist/providers/invocation-logger.d.ts.map +1 -0
- package/dist/providers/invocation-logger.js +298 -0
- package/dist/providers/invocation-logger.js.map +1 -0
- package/dist/providers/openai.d.ts +53 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +232 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/registry.d.ts +100 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +178 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/runners/activity-log.d.ts +65 -0
- package/dist/runners/activity-log.d.ts.map +1 -0
- package/dist/runners/activity-log.js +148 -0
- package/dist/runners/activity-log.js.map +1 -0
- package/dist/runners/cron.d.ts +26 -0
- package/dist/runners/cron.d.ts.map +1 -0
- package/dist/runners/cron.js +176 -0
- package/dist/runners/cron.js.map +1 -0
- package/dist/runners/daemon.d.ts +71 -0
- package/dist/runners/daemon.d.ts.map +1 -0
- package/dist/runners/daemon.js +245 -0
- package/dist/runners/daemon.js.map +1 -0
- package/dist/runners/global-db.d.ts +31 -0
- package/dist/runners/global-db.d.ts.map +1 -0
- package/dist/runners/global-db.js +230 -0
- package/dist/runners/global-db.js.map +1 -0
- package/dist/runners/hang-detector.d.ts +38 -0
- package/dist/runners/hang-detector.d.ts.map +1 -0
- package/dist/runners/hang-detector.js +136 -0
- package/dist/runners/hang-detector.js.map +1 -0
- package/dist/runners/heartbeat.d.ts +39 -0
- package/dist/runners/heartbeat.d.ts.map +1 -0
- package/dist/runners/heartbeat.js +79 -0
- package/dist/runners/heartbeat.js.map +1 -0
- package/dist/runners/lock.d.ts +47 -0
- package/dist/runners/lock.d.ts.map +1 -0
- package/dist/runners/lock.js +150 -0
- package/dist/runners/lock.js.map +1 -0
- package/dist/runners/orchestrator-loop.d.ts +20 -0
- package/dist/runners/orchestrator-loop.d.ts.map +1 -0
- package/dist/runners/orchestrator-loop.js +285 -0
- package/dist/runners/orchestrator-loop.js.map +1 -0
- package/dist/runners/projects.d.ts +96 -0
- package/dist/runners/projects.d.ts.map +1 -0
- package/dist/runners/projects.js +255 -0
- package/dist/runners/projects.js.map +1 -0
- package/dist/runners/wakeup.d.ts +34 -0
- package/dist/runners/wakeup.d.ts.map +1 -0
- package/dist/runners/wakeup.js +291 -0
- package/dist/runners/wakeup.js.map +1 -0
- package/migrations/001_initial_schema.sql +106 -0
- package/migrations/002_add_commit_sha.sql +12 -0
- package/migrations/003_add_section_priority.sql +13 -0
- package/migrations/004_add_section_dependencies.sql +18 -0
- package/migrations/005_add_audit_actor_model.sql +10 -0
- package/migrations/006_add_task_invocations.sql +33 -0
- package/migrations/007_add_file_anchor.sql +14 -0
- package/migrations/manifest.json +62 -0
- package/package.json +49 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Task selection algorithm with locking integration
|
|
4
|
+
* Following ORCHESTRATOR.md specification
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.releaseSectionLock = exports.acquireSectionLock = exports.isSectionLocked = exports.isTaskLocked = void 0;
|
|
8
|
+
exports.selectNextTask = selectNextTask;
|
|
9
|
+
exports.selectTaskBatch = selectTaskBatch;
|
|
10
|
+
exports.markTaskInProgress = markTaskInProgress;
|
|
11
|
+
exports.areAllTasksComplete = areAllTasksComplete;
|
|
12
|
+
exports.getTaskCounts = getTaskCounts;
|
|
13
|
+
exports.selectNextTaskWithLock = selectNextTaskWithLock;
|
|
14
|
+
exports.selectNextTaskWithWait = selectNextTaskWithWait;
|
|
15
|
+
exports.releaseTaskLockAfterCompletion = releaseTaskLockAfterCompletion;
|
|
16
|
+
exports.startTaskWithLock = startTaskWithLock;
|
|
17
|
+
exports.completeTaskWithLock = completeTaskWithLock;
|
|
18
|
+
const queries_js_1 = require("../database/queries.js");
|
|
19
|
+
const task_lock_js_1 = require("../locking/task-lock.js");
|
|
20
|
+
Object.defineProperty(exports, "isTaskLocked", { enumerable: true, get: function () { return task_lock_js_1.isTaskLocked; } });
|
|
21
|
+
const section_lock_js_1 = require("../locking/section-lock.js");
|
|
22
|
+
Object.defineProperty(exports, "acquireSectionLock", { enumerable: true, get: function () { return section_lock_js_1.acquireSectionLock; } });
|
|
23
|
+
Object.defineProperty(exports, "releaseSectionLock", { enumerable: true, get: function () { return section_lock_js_1.releaseSectionLock; } });
|
|
24
|
+
Object.defineProperty(exports, "isSectionLocked", { enumerable: true, get: function () { return section_lock_js_1.isSectionLocked; } });
|
|
25
|
+
const queries_js_2 = require("../locking/queries.js");
|
|
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
|
+
function selectNextTask(db, sectionId) {
|
|
39
|
+
const result = (0, queries_js_1.findNextTask)(db, sectionId);
|
|
40
|
+
if (!result.task || result.action === 'idle') {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const selectedTask = {
|
|
44
|
+
task: result.task,
|
|
45
|
+
action: result.action,
|
|
46
|
+
};
|
|
47
|
+
// If resuming after rejection, get the last rejection notes
|
|
48
|
+
if (result.action === 'resume' && result.task.rejection_count > 0) {
|
|
49
|
+
selectedTask.rejectionNotes = (0, queries_js_1.getLastRejectionNotes)(db, result.task.id) ?? undefined;
|
|
50
|
+
}
|
|
51
|
+
return selectedTask;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Select a batch of pending tasks from the first available section
|
|
55
|
+
* Used when batch mode is enabled
|
|
56
|
+
*/
|
|
57
|
+
function selectTaskBatch(db, maxSize = 10) {
|
|
58
|
+
// Find sections with pending tasks, ordered by position
|
|
59
|
+
const sections = db
|
|
60
|
+
.prepare(`SELECT s.id, s.name, s.position,
|
|
61
|
+
SUM(CASE WHEN t.status = 'pending' THEN 1 ELSE 0 END) as pending_count,
|
|
62
|
+
SUM(CASE WHEN t.status IN ('in_progress', 'review') THEN 1 ELSE 0 END) as active_count
|
|
63
|
+
FROM sections s
|
|
64
|
+
LEFT JOIN tasks t ON t.section_id = s.id
|
|
65
|
+
GROUP BY s.id
|
|
66
|
+
HAVING pending_count > 0
|
|
67
|
+
ORDER BY s.position`)
|
|
68
|
+
.all();
|
|
69
|
+
for (const section of sections) {
|
|
70
|
+
// Skip sections with active tasks (in_progress or review)
|
|
71
|
+
if (section.active_count > 0)
|
|
72
|
+
continue;
|
|
73
|
+
// Skip sections with unmet dependencies
|
|
74
|
+
if (!(0, queries_js_1.hasDependenciesMet)(db, section.id))
|
|
75
|
+
continue;
|
|
76
|
+
// Get pending tasks from this section
|
|
77
|
+
const tasks = db
|
|
78
|
+
.prepare(`SELECT * FROM tasks
|
|
79
|
+
WHERE section_id = ? AND status = 'pending'
|
|
80
|
+
ORDER BY created_at
|
|
81
|
+
LIMIT ?`)
|
|
82
|
+
.all(section.id, maxSize);
|
|
83
|
+
if (tasks.length > 0) {
|
|
84
|
+
return {
|
|
85
|
+
tasks,
|
|
86
|
+
sectionId: section.id,
|
|
87
|
+
sectionName: section.name,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Mark a task as in_progress when starting
|
|
95
|
+
*/
|
|
96
|
+
function markTaskInProgress(db, taskId) {
|
|
97
|
+
const task = (0, queries_js_1.getTask)(db, taskId);
|
|
98
|
+
if (!task)
|
|
99
|
+
return;
|
|
100
|
+
if (task.status === 'pending') {
|
|
101
|
+
(0, queries_js_1.updateTaskStatus)(db, taskId, 'in_progress', 'orchestrator');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Check if all tasks are completed
|
|
106
|
+
*/
|
|
107
|
+
function areAllTasksComplete(db, sectionId) {
|
|
108
|
+
const result = (0, queries_js_1.findNextTask)(db, sectionId);
|
|
109
|
+
return result.action === 'idle';
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Count tasks by status
|
|
113
|
+
*/
|
|
114
|
+
function getTaskCounts(db, sectionId) {
|
|
115
|
+
const counts = {
|
|
116
|
+
pending: 0,
|
|
117
|
+
in_progress: 0,
|
|
118
|
+
review: 0,
|
|
119
|
+
completed: 0,
|
|
120
|
+
disputed: 0,
|
|
121
|
+
failed: 0,
|
|
122
|
+
total: 0,
|
|
123
|
+
};
|
|
124
|
+
let query = 'SELECT status, COUNT(*) as count FROM tasks';
|
|
125
|
+
const params = [];
|
|
126
|
+
if (sectionId) {
|
|
127
|
+
query += ' WHERE section_id = ?';
|
|
128
|
+
params.push(sectionId);
|
|
129
|
+
}
|
|
130
|
+
query += ' GROUP BY status';
|
|
131
|
+
const rows = db.prepare(query).all(...params);
|
|
132
|
+
for (const row of rows) {
|
|
133
|
+
if (row.status in counts) {
|
|
134
|
+
counts[row.status] = row.count;
|
|
135
|
+
}
|
|
136
|
+
counts.total += row.count;
|
|
137
|
+
}
|
|
138
|
+
return counts;
|
|
139
|
+
}
|
|
140
|
+
// ============ Locking Integration ============
|
|
141
|
+
const DEFAULT_TIMEOUT_MINUTES = 60;
|
|
142
|
+
const DEFAULT_WAIT_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
|
|
143
|
+
const DEFAULT_POLL_INTERVAL_MS = 5 * 1000; // 5 seconds
|
|
144
|
+
/**
|
|
145
|
+
* Select the next task and acquire a lock on it
|
|
146
|
+
* Skips tasks that are already locked by other runners
|
|
147
|
+
*/
|
|
148
|
+
function selectNextTaskWithLock(db, options) {
|
|
149
|
+
const { runnerId, timeoutMinutes = DEFAULT_TIMEOUT_MINUTES, } = options;
|
|
150
|
+
// Get all currently locked task IDs
|
|
151
|
+
const lockedTaskIds = new Set((0, queries_js_2.listTaskLocks)(db).map(lock => lock.task_id));
|
|
152
|
+
// Find next available task that is not locked
|
|
153
|
+
const candidates = findNextTaskSkippingLocked(db, lockedTaskIds, runnerId, options.sectionId);
|
|
154
|
+
if (!candidates) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
// Try to acquire lock
|
|
158
|
+
const lockResult = (0, task_lock_js_1.acquireTaskLock)(db, candidates.task.id, runnerId, timeoutMinutes);
|
|
159
|
+
if (!lockResult.acquired) {
|
|
160
|
+
// Lock acquisition failed (race condition)
|
|
161
|
+
// Try again with updated lock list
|
|
162
|
+
return selectNextTaskWithLock(db, options);
|
|
163
|
+
}
|
|
164
|
+
// Create heartbeat loop for the lock
|
|
165
|
+
const heartbeat = (0, task_lock_js_1.createHeartbeatLoop)(db, candidates.task.id, runnerId);
|
|
166
|
+
return {
|
|
167
|
+
task: candidates.task,
|
|
168
|
+
action: candidates.action,
|
|
169
|
+
rejectionNotes: candidates.rejectionNotes,
|
|
170
|
+
lockResult,
|
|
171
|
+
heartbeat,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Helper to check if a task's section has met dependencies
|
|
176
|
+
*/
|
|
177
|
+
function canSelectTask(db, task) {
|
|
178
|
+
if (!task.section_id) {
|
|
179
|
+
// Tasks without a section are always allowed
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
// Check if section has all dependencies met
|
|
183
|
+
return (0, queries_js_1.hasDependenciesMet)(db, task.section_id);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Find next task, skipping locked ones and tasks in sections with unmet dependencies
|
|
187
|
+
*/
|
|
188
|
+
function findNextTaskSkippingLocked(db, lockedTaskIds, runnerId, sectionId) {
|
|
189
|
+
// Build WHERE clause for section filtering
|
|
190
|
+
const sectionFilter = sectionId ? 'AND t.section_id = ?' : '';
|
|
191
|
+
const sectionParams = sectionId ? [sectionId] : [];
|
|
192
|
+
// Priority 1: Tasks in 'review' status
|
|
193
|
+
const reviewTasks = db
|
|
194
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
195
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
196
|
+
WHERE t.status = 'review' ${sectionFilter}
|
|
197
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
198
|
+
.all(...sectionParams);
|
|
199
|
+
for (const task of reviewTasks) {
|
|
200
|
+
if (canSelectTask(db, task) && (!lockedTaskIds.has(task.id) || isLockedByUs(db, task.id, runnerId))) {
|
|
201
|
+
return { task, action: 'review' };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Priority 2: Tasks in 'in_progress' status
|
|
205
|
+
const inProgressTasks = db
|
|
206
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
207
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
208
|
+
WHERE t.status = 'in_progress' ${sectionFilter}
|
|
209
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
210
|
+
.all(...sectionParams);
|
|
211
|
+
for (const task of inProgressTasks) {
|
|
212
|
+
if (canSelectTask(db, task) && (!lockedTaskIds.has(task.id) || isLockedByUs(db, task.id, runnerId))) {
|
|
213
|
+
const rejectionNotes = task.rejection_count > 0
|
|
214
|
+
? (0, queries_js_1.getLastRejectionNotes)(db, task.id) ?? undefined
|
|
215
|
+
: undefined;
|
|
216
|
+
return { task, action: 'resume', rejectionNotes };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Priority 3: Pending tasks
|
|
220
|
+
const pendingTasks = db
|
|
221
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
222
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
223
|
+
WHERE t.status = 'pending' ${sectionFilter}
|
|
224
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
225
|
+
.all(...sectionParams);
|
|
226
|
+
for (const task of pendingTasks) {
|
|
227
|
+
if (canSelectTask(db, task) && (!lockedTaskIds.has(task.id) || isLockedByUs(db, task.id, runnerId))) {
|
|
228
|
+
return { task, action: 'start' };
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Check if a task is locked by the current runner
|
|
235
|
+
*/
|
|
236
|
+
function isLockedByUs(db, taskId, runnerId) {
|
|
237
|
+
const locks = (0, queries_js_2.listTaskLocks)(db);
|
|
238
|
+
const lock = locks.find(l => l.task_id === taskId);
|
|
239
|
+
return lock?.runner_id === runnerId;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Select next task with wait behavior
|
|
243
|
+
* Waits for a locked task if no unlocked tasks are available
|
|
244
|
+
*/
|
|
245
|
+
async function selectNextTaskWithWait(db, options) {
|
|
246
|
+
const { noWait = false, waitTimeoutMs = DEFAULT_WAIT_TIMEOUT_MS, pollIntervalMs = DEFAULT_POLL_INTERVAL_MS, } = options;
|
|
247
|
+
// First try without waiting
|
|
248
|
+
const result = selectNextTaskWithLock(db, options);
|
|
249
|
+
if (result) {
|
|
250
|
+
return result;
|
|
251
|
+
}
|
|
252
|
+
// Check if there are any tasks at all
|
|
253
|
+
const counts = getTaskCounts(db);
|
|
254
|
+
if (counts.pending === 0 && counts.in_progress === 0 && counts.review === 0) {
|
|
255
|
+
return null; // All tasks completed
|
|
256
|
+
}
|
|
257
|
+
// If noWait, return null immediately
|
|
258
|
+
if (noWait) {
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
// Wait for a task to become available
|
|
262
|
+
const startTime = Date.now();
|
|
263
|
+
while (Date.now() - startTime < waitTimeoutMs) {
|
|
264
|
+
await sleep(pollIntervalMs);
|
|
265
|
+
const nextResult = selectNextTaskWithLock(db, options);
|
|
266
|
+
if (nextResult) {
|
|
267
|
+
return nextResult;
|
|
268
|
+
}
|
|
269
|
+
// Check if all remaining tasks are locked
|
|
270
|
+
const currentCounts = getTaskCounts(db);
|
|
271
|
+
if (currentCounts.pending === 0 &&
|
|
272
|
+
currentCounts.in_progress === 0 &&
|
|
273
|
+
currentCounts.review === 0) {
|
|
274
|
+
return null; // All tasks completed while waiting
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Timeout reached
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Release task lock after completion
|
|
282
|
+
*/
|
|
283
|
+
function releaseTaskLockAfterCompletion(db, taskId, runnerId, heartbeat) {
|
|
284
|
+
// Stop heartbeat if running
|
|
285
|
+
if (heartbeat) {
|
|
286
|
+
heartbeat.stop();
|
|
287
|
+
}
|
|
288
|
+
return (0, task_lock_js_1.releaseTaskLock)(db, taskId, runnerId);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Mark task in progress and acquire lock
|
|
292
|
+
*/
|
|
293
|
+
function startTaskWithLock(db, taskId, runnerId, timeoutMinutes = DEFAULT_TIMEOUT_MINUTES) {
|
|
294
|
+
const task = (0, queries_js_1.getTask)(db, taskId);
|
|
295
|
+
if (!task) {
|
|
296
|
+
return { success: false, error: 'Task not found' };
|
|
297
|
+
}
|
|
298
|
+
// Try to acquire lock
|
|
299
|
+
const lockResult = (0, task_lock_js_1.acquireTaskLock)(db, taskId, runnerId, timeoutMinutes);
|
|
300
|
+
if (!lockResult.acquired) {
|
|
301
|
+
return {
|
|
302
|
+
success: false,
|
|
303
|
+
error: lockResult.error?.message ?? 'Failed to acquire lock',
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
// Mark as in progress if pending
|
|
307
|
+
if (task.status === 'pending') {
|
|
308
|
+
(0, queries_js_1.updateTaskStatus)(db, taskId, 'in_progress', 'orchestrator');
|
|
309
|
+
}
|
|
310
|
+
// Start heartbeat
|
|
311
|
+
const heartbeat = (0, task_lock_js_1.createHeartbeatLoop)(db, taskId, runnerId);
|
|
312
|
+
heartbeat.start();
|
|
313
|
+
return { success: true, heartbeat };
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Complete task and release lock
|
|
317
|
+
*/
|
|
318
|
+
function completeTaskWithLock(db, taskId, runnerId, newStatus, heartbeat) {
|
|
319
|
+
const task = (0, queries_js_1.getTask)(db, taskId);
|
|
320
|
+
if (!task) {
|
|
321
|
+
if (heartbeat)
|
|
322
|
+
heartbeat.stop();
|
|
323
|
+
return { success: false, error: 'Task not found' };
|
|
324
|
+
}
|
|
325
|
+
// Update status
|
|
326
|
+
(0, queries_js_1.updateTaskStatus)(db, taskId, newStatus, 'orchestrator');
|
|
327
|
+
// Release lock
|
|
328
|
+
const releaseResult = releaseTaskLockAfterCompletion(db, taskId, runnerId, heartbeat);
|
|
329
|
+
if (!releaseResult.released && releaseResult.error?.code !== 'LOCK_NOT_FOUND') {
|
|
330
|
+
return {
|
|
331
|
+
success: false,
|
|
332
|
+
error: releaseResult.error?.message ?? 'Failed to release lock',
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
return { success: true };
|
|
336
|
+
}
|
|
337
|
+
// ============ Helpers ============
|
|
338
|
+
function sleep(ms) {
|
|
339
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
340
|
+
}
|
|
341
|
+
//# 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,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,CA0JvE;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,CAyE/E"}
|