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,613 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Database query functions for tasks, sections, and audit
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.STATUS_MARKERS = void 0;
|
|
7
|
+
exports.createSection = createSection;
|
|
8
|
+
exports.listSections = listSections;
|
|
9
|
+
exports.getSection = getSection;
|
|
10
|
+
exports.getSectionByName = getSectionByName;
|
|
11
|
+
exports.getOrCreateFeedbackSection = getOrCreateFeedbackSection;
|
|
12
|
+
exports.getSectionTaskCount = getSectionTaskCount;
|
|
13
|
+
exports.getPendingDependencies = getPendingDependencies;
|
|
14
|
+
exports.hasDependenciesMet = hasDependenciesMet;
|
|
15
|
+
exports.setSectionPriority = setSectionPriority;
|
|
16
|
+
exports.wouldCreateCircularDependency = wouldCreateCircularDependency;
|
|
17
|
+
exports.addSectionDependency = addSectionDependency;
|
|
18
|
+
exports.removeSectionDependency = removeSectionDependency;
|
|
19
|
+
exports.getSectionDependencies = getSectionDependencies;
|
|
20
|
+
exports.getSectionDependents = getSectionDependents;
|
|
21
|
+
exports.createTask = createTask;
|
|
22
|
+
exports.getTask = getTask;
|
|
23
|
+
exports.getTaskByTitle = getTaskByTitle;
|
|
24
|
+
exports.listTasks = listTasks;
|
|
25
|
+
exports.updateTaskStatus = updateTaskStatus;
|
|
26
|
+
exports.resetRejectionCount = resetRejectionCount;
|
|
27
|
+
exports.approveTask = approveTask;
|
|
28
|
+
exports.rejectTask = rejectTask;
|
|
29
|
+
exports.addAuditEntry = addAuditEntry;
|
|
30
|
+
exports.getTaskAudit = getTaskAudit;
|
|
31
|
+
exports.getTaskRejections = getTaskRejections;
|
|
32
|
+
exports.getLatestSubmissionNotes = getLatestSubmissionNotes;
|
|
33
|
+
exports.createSystemDisputeForRejection = createSystemDisputeForRejection;
|
|
34
|
+
exports.findNextTask = findNextTask;
|
|
35
|
+
exports.getLastRejectionNotes = getLastRejectionNotes;
|
|
36
|
+
exports.getTaskCountsByStatus = getTaskCountsByStatus;
|
|
37
|
+
exports.createTaskInvocation = createTaskInvocation;
|
|
38
|
+
exports.getTaskInvocations = getTaskInvocations;
|
|
39
|
+
exports.getRecentTaskInvocations = getRecentTaskInvocations;
|
|
40
|
+
exports.getLatestInvocation = getLatestInvocation;
|
|
41
|
+
exports.getInvocationCount = getInvocationCount;
|
|
42
|
+
const uuid_1 = require("uuid");
|
|
43
|
+
// Status markers for display
|
|
44
|
+
exports.STATUS_MARKERS = {
|
|
45
|
+
pending: '[ ]',
|
|
46
|
+
in_progress: '[-]',
|
|
47
|
+
review: '[o]',
|
|
48
|
+
completed: '[x]',
|
|
49
|
+
disputed: '[!]',
|
|
50
|
+
failed: '[F]',
|
|
51
|
+
skipped: '[S]', // Fully skipped - external setup required
|
|
52
|
+
partial: '[s]', // Partial - coded what we could, rest is external
|
|
53
|
+
};
|
|
54
|
+
// ============ Section Operations ============
|
|
55
|
+
function createSection(db, name, position) {
|
|
56
|
+
const id = (0, uuid_1.v4)();
|
|
57
|
+
// Get max position if not specified
|
|
58
|
+
if (position === undefined) {
|
|
59
|
+
const maxPos = db
|
|
60
|
+
.prepare('SELECT MAX(position) as max FROM sections')
|
|
61
|
+
.get();
|
|
62
|
+
position = (maxPos?.max ?? -1) + 1;
|
|
63
|
+
}
|
|
64
|
+
db.prepare(`INSERT INTO sections (id, name, position) VALUES (?, ?, ?)`).run(id, name, position);
|
|
65
|
+
return {
|
|
66
|
+
id,
|
|
67
|
+
name,
|
|
68
|
+
position,
|
|
69
|
+
created_at: new Date().toISOString(),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function listSections(db) {
|
|
73
|
+
return db
|
|
74
|
+
.prepare('SELECT * FROM sections ORDER BY position ASC')
|
|
75
|
+
.all();
|
|
76
|
+
}
|
|
77
|
+
function getSection(db, id) {
|
|
78
|
+
// Try exact match first
|
|
79
|
+
let section = db
|
|
80
|
+
.prepare('SELECT * FROM sections WHERE id = ?')
|
|
81
|
+
.get(id);
|
|
82
|
+
// If not found, try prefix match (for short IDs)
|
|
83
|
+
if (!section && id.length >= 4) {
|
|
84
|
+
const matches = db
|
|
85
|
+
.prepare('SELECT * FROM sections WHERE id LIKE ?')
|
|
86
|
+
.all(`${id}%`);
|
|
87
|
+
if (matches.length === 1) {
|
|
88
|
+
section = matches[0];
|
|
89
|
+
}
|
|
90
|
+
else if (matches.length > 1) {
|
|
91
|
+
// Ambiguous prefix - throw error with suggestions
|
|
92
|
+
const matchingIds = matches.map(s => `${s.id.substring(0, 8)} (${s.name})`).join(', ');
|
|
93
|
+
throw new Error(`Ambiguous section prefix "${id}". Matches: ${matchingIds}. ` +
|
|
94
|
+
`Please provide a longer prefix or use the full section name.`);
|
|
95
|
+
}
|
|
96
|
+
// If 0 matches, section remains null and will be handled by caller
|
|
97
|
+
}
|
|
98
|
+
return section;
|
|
99
|
+
}
|
|
100
|
+
function getSectionByName(db, name) {
|
|
101
|
+
return db
|
|
102
|
+
.prepare('SELECT * FROM sections WHERE name = ?')
|
|
103
|
+
.get(name);
|
|
104
|
+
}
|
|
105
|
+
const FEEDBACK_SECTION_NAME = 'Needs User Input';
|
|
106
|
+
function getOrCreateFeedbackSection(db) {
|
|
107
|
+
const existing = getSectionByName(db, FEEDBACK_SECTION_NAME);
|
|
108
|
+
if (existing)
|
|
109
|
+
return existing;
|
|
110
|
+
const maxPos = db
|
|
111
|
+
.prepare('SELECT MAX(position) as max FROM sections')
|
|
112
|
+
.get();
|
|
113
|
+
const position = (maxPos?.max ?? -1) + 1;
|
|
114
|
+
const id = (0, uuid_1.v4)();
|
|
115
|
+
db.prepare(`INSERT INTO sections (id, name, position, priority, skipped) VALUES (?, ?, ?, ?, ?)`).run(id, FEEDBACK_SECTION_NAME, position, 100, 1);
|
|
116
|
+
return { id, name: FEEDBACK_SECTION_NAME, position, priority: 100, skipped: 1, created_at: new Date().toISOString() };
|
|
117
|
+
}
|
|
118
|
+
function getSectionTaskCount(db, sectionId) {
|
|
119
|
+
const result = db
|
|
120
|
+
.prepare('SELECT COUNT(*) as count FROM tasks WHERE section_id = ?')
|
|
121
|
+
.get(sectionId);
|
|
122
|
+
return result.count;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get dependencies for a section that have incomplete tasks
|
|
126
|
+
* Returns sections that the given section depends on and have any non-completed tasks
|
|
127
|
+
* (pending, in_progress, review, disputed, failed, skipped, partial)
|
|
128
|
+
*/
|
|
129
|
+
function getPendingDependencies(db, sectionId) {
|
|
130
|
+
return db
|
|
131
|
+
.prepare(`SELECT DISTINCT s.*
|
|
132
|
+
FROM sections s
|
|
133
|
+
INNER JOIN section_dependencies sd ON s.id = sd.depends_on_section_id
|
|
134
|
+
WHERE sd.section_id = ?
|
|
135
|
+
AND EXISTS (
|
|
136
|
+
SELECT 1 FROM tasks t
|
|
137
|
+
WHERE t.section_id = s.id
|
|
138
|
+
AND t.status != 'completed'
|
|
139
|
+
)
|
|
140
|
+
ORDER BY s.position ASC`)
|
|
141
|
+
.all(sectionId);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check if all dependencies for a section are met
|
|
145
|
+
* Dependencies are considered met when all tasks in dependent sections are completed
|
|
146
|
+
*/
|
|
147
|
+
function hasDependenciesMet(db, sectionId) {
|
|
148
|
+
const pendingDeps = getPendingDependencies(db, sectionId);
|
|
149
|
+
return pendingDeps.length === 0;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Set the priority of a section
|
|
153
|
+
* Priority range: 0 (highest) to 100 (lowest), default is 50
|
|
154
|
+
*/
|
|
155
|
+
function setSectionPriority(db, sectionId, priority) {
|
|
156
|
+
if (priority < 0 || priority > 100) {
|
|
157
|
+
throw new Error('Priority must be between 0 and 100');
|
|
158
|
+
}
|
|
159
|
+
const result = db
|
|
160
|
+
.prepare('UPDATE sections SET priority = ? WHERE id = ?')
|
|
161
|
+
.run(priority, sectionId);
|
|
162
|
+
if (result.changes === 0) {
|
|
163
|
+
throw new Error(`Section not found: ${sectionId}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if adding a dependency would create a circular dependency
|
|
168
|
+
* Returns true if circular dependency would be created
|
|
169
|
+
*/
|
|
170
|
+
function wouldCreateCircularDependency(db, sectionId, dependsOnSectionId) {
|
|
171
|
+
// Self-dependency is always circular
|
|
172
|
+
if (sectionId === dependsOnSectionId) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
// Build dependency graph
|
|
176
|
+
const visited = new Set();
|
|
177
|
+
const recursionStack = new Set();
|
|
178
|
+
function hasCycle(currentId) {
|
|
179
|
+
if (recursionStack.has(currentId)) {
|
|
180
|
+
return true; // Found a cycle
|
|
181
|
+
}
|
|
182
|
+
if (visited.has(currentId)) {
|
|
183
|
+
return false; // Already checked this path
|
|
184
|
+
}
|
|
185
|
+
visited.add(currentId);
|
|
186
|
+
recursionStack.add(currentId);
|
|
187
|
+
// Get all sections that currentId depends on
|
|
188
|
+
const deps = db
|
|
189
|
+
.prepare(`SELECT depends_on_section_id FROM section_dependencies WHERE section_id = ?`)
|
|
190
|
+
.all(currentId);
|
|
191
|
+
// Add the proposed new dependency for simulation
|
|
192
|
+
if (currentId === sectionId) {
|
|
193
|
+
deps.push({ depends_on_section_id: dependsOnSectionId });
|
|
194
|
+
}
|
|
195
|
+
for (const dep of deps) {
|
|
196
|
+
if (hasCycle(dep.depends_on_section_id)) {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
recursionStack.delete(currentId);
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
return hasCycle(sectionId);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Add a dependency between sections
|
|
207
|
+
* Makes sectionId depend on dependsOnSectionId
|
|
208
|
+
*/
|
|
209
|
+
function addSectionDependency(db, sectionId, dependsOnSectionId) {
|
|
210
|
+
// Check for circular dependencies
|
|
211
|
+
if (wouldCreateCircularDependency(db, sectionId, dependsOnSectionId)) {
|
|
212
|
+
throw new Error('Cannot add dependency: would create a circular dependency');
|
|
213
|
+
}
|
|
214
|
+
const id = (0, uuid_1.v4)();
|
|
215
|
+
try {
|
|
216
|
+
db.prepare(`INSERT INTO section_dependencies (id, section_id, depends_on_section_id)
|
|
217
|
+
VALUES (?, ?, ?)`).run(id, sectionId, dependsOnSectionId);
|
|
218
|
+
return {
|
|
219
|
+
id,
|
|
220
|
+
section_id: sectionId,
|
|
221
|
+
depends_on_section_id: dependsOnSectionId,
|
|
222
|
+
created_at: new Date().toISOString(),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
if (error.message?.includes('UNIQUE constraint')) {
|
|
227
|
+
throw new Error('This dependency already exists');
|
|
228
|
+
}
|
|
229
|
+
if (error.message?.includes('FOREIGN KEY constraint')) {
|
|
230
|
+
throw new Error('One or both section IDs are invalid');
|
|
231
|
+
}
|
|
232
|
+
throw error;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Remove a dependency between sections
|
|
237
|
+
*/
|
|
238
|
+
function removeSectionDependency(db, sectionId, dependsOnSectionId) {
|
|
239
|
+
const result = db
|
|
240
|
+
.prepare(`DELETE FROM section_dependencies
|
|
241
|
+
WHERE section_id = ? AND depends_on_section_id = ?`)
|
|
242
|
+
.run(sectionId, dependsOnSectionId);
|
|
243
|
+
if (result.changes === 0) {
|
|
244
|
+
throw new Error('Dependency not found');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get all dependencies for a section
|
|
249
|
+
*/
|
|
250
|
+
function getSectionDependencies(db, sectionId) {
|
|
251
|
+
return db
|
|
252
|
+
.prepare(`SELECT s.*
|
|
253
|
+
FROM sections s
|
|
254
|
+
INNER JOIN section_dependencies sd ON s.id = sd.depends_on_section_id
|
|
255
|
+
WHERE sd.section_id = ?
|
|
256
|
+
ORDER BY s.position ASC`)
|
|
257
|
+
.all(sectionId);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get all sections that depend on a given section
|
|
261
|
+
*/
|
|
262
|
+
function getSectionDependents(db, sectionId) {
|
|
263
|
+
return db
|
|
264
|
+
.prepare(`SELECT s.*
|
|
265
|
+
FROM sections s
|
|
266
|
+
INNER JOIN section_dependencies sd ON s.id = sd.section_id
|
|
267
|
+
WHERE sd.depends_on_section_id = ?
|
|
268
|
+
ORDER BY s.position ASC`)
|
|
269
|
+
.all(sectionId);
|
|
270
|
+
}
|
|
271
|
+
// ============ Task Operations ============
|
|
272
|
+
function createTask(db, title, options = {}) {
|
|
273
|
+
const id = (0, uuid_1.v4)();
|
|
274
|
+
const status = options.status ?? 'pending';
|
|
275
|
+
db.prepare(`INSERT INTO tasks (id, title, status, section_id, source_file, file_path, file_line, file_commit_sha, file_content_hash)
|
|
276
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, title, status, options.sectionId ?? null, options.sourceFile ?? null, options.filePath ?? null, options.fileLine ?? null, options.fileCommitSha ?? null, options.fileContentHash ?? null);
|
|
277
|
+
// Add audit entry for creation
|
|
278
|
+
addAuditEntry(db, id, null, status, 'human:cli');
|
|
279
|
+
return {
|
|
280
|
+
id,
|
|
281
|
+
title,
|
|
282
|
+
status,
|
|
283
|
+
section_id: options.sectionId ?? null,
|
|
284
|
+
source_file: options.sourceFile ?? null,
|
|
285
|
+
file_path: options.filePath ?? null,
|
|
286
|
+
file_line: options.fileLine ?? null,
|
|
287
|
+
file_commit_sha: options.fileCommitSha ?? null,
|
|
288
|
+
file_content_hash: options.fileContentHash ?? null,
|
|
289
|
+
rejection_count: 0,
|
|
290
|
+
created_at: new Date().toISOString(),
|
|
291
|
+
updated_at: new Date().toISOString(),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function getTask(db, id) {
|
|
295
|
+
// Try exact match first
|
|
296
|
+
let task = db
|
|
297
|
+
.prepare('SELECT * FROM tasks WHERE id = ?')
|
|
298
|
+
.get(id);
|
|
299
|
+
// If not found, try prefix match (for short IDs)
|
|
300
|
+
if (!task && id.length >= 6) {
|
|
301
|
+
task = db
|
|
302
|
+
.prepare('SELECT * FROM tasks WHERE id LIKE ?')
|
|
303
|
+
.get(`${id}%`);
|
|
304
|
+
}
|
|
305
|
+
return task;
|
|
306
|
+
}
|
|
307
|
+
function getTaskByTitle(db, title) {
|
|
308
|
+
// Exact match first
|
|
309
|
+
let task = db
|
|
310
|
+
.prepare('SELECT * FROM tasks WHERE title = ?')
|
|
311
|
+
.get(title);
|
|
312
|
+
if (!task) {
|
|
313
|
+
// Partial match
|
|
314
|
+
task = db
|
|
315
|
+
.prepare('SELECT * FROM tasks WHERE title LIKE ?')
|
|
316
|
+
.get(`%${title}%`);
|
|
317
|
+
}
|
|
318
|
+
return task;
|
|
319
|
+
}
|
|
320
|
+
function listTasks(db, options = {}) {
|
|
321
|
+
let sql = `
|
|
322
|
+
SELECT t.* FROM tasks t
|
|
323
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
324
|
+
WHERE 1=1
|
|
325
|
+
`;
|
|
326
|
+
const params = [];
|
|
327
|
+
if (options.status && options.status !== 'all') {
|
|
328
|
+
sql += ' AND t.status = ?';
|
|
329
|
+
params.push(options.status);
|
|
330
|
+
}
|
|
331
|
+
if (options.sectionId) {
|
|
332
|
+
sql += ' AND t.section_id = ?';
|
|
333
|
+
params.push(options.sectionId);
|
|
334
|
+
}
|
|
335
|
+
if (options.search) {
|
|
336
|
+
sql += ' AND t.title LIKE ?';
|
|
337
|
+
params.push(`%${options.search}%`);
|
|
338
|
+
}
|
|
339
|
+
sql += ' ORDER BY COALESCE(s.position, 999999), t.created_at';
|
|
340
|
+
return db.prepare(sql).all(...params);
|
|
341
|
+
}
|
|
342
|
+
function updateTaskStatus(db, taskId, newStatus, actor, notes, commitSha) {
|
|
343
|
+
const task = getTask(db, taskId);
|
|
344
|
+
if (!task) {
|
|
345
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
346
|
+
}
|
|
347
|
+
const oldStatus = task.status;
|
|
348
|
+
db.prepare(`UPDATE tasks SET status = ?, updated_at = datetime('now') WHERE id = ?`).run(newStatus, taskId);
|
|
349
|
+
addAuditEntry(db, taskId, oldStatus, newStatus, actor, notes, commitSha);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Reset rejection count to 0 (keeps audit history)
|
|
353
|
+
* Use when manually restarting a task after spec changes
|
|
354
|
+
*/
|
|
355
|
+
function resetRejectionCount(db, taskId, actor, notes) {
|
|
356
|
+
const task = getTask(db, taskId);
|
|
357
|
+
if (!task) {
|
|
358
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
359
|
+
}
|
|
360
|
+
const oldCount = task.rejection_count;
|
|
361
|
+
db.prepare(`UPDATE tasks SET rejection_count = 0, updated_at = datetime('now') WHERE id = ?`).run(taskId);
|
|
362
|
+
// Record in audit trail
|
|
363
|
+
addAuditEntry(db, taskId, task.status, task.status, actor, notes ?? `Rejection count reset from ${oldCount} to 0`);
|
|
364
|
+
return oldCount;
|
|
365
|
+
}
|
|
366
|
+
function approveTask(db, taskId, model, notes, commitSha) {
|
|
367
|
+
updateTaskStatus(db, taskId, 'completed', `model:${model}`, notes, commitSha);
|
|
368
|
+
}
|
|
369
|
+
function rejectTask(db, taskId, model, notes, commitSha) {
|
|
370
|
+
const task = getTask(db, taskId);
|
|
371
|
+
if (!task) {
|
|
372
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
373
|
+
}
|
|
374
|
+
const newRejectionCount = task.rejection_count + 1;
|
|
375
|
+
if (newRejectionCount >= 15) {
|
|
376
|
+
// Task failed - exceeded max rejections
|
|
377
|
+
db.prepare(`UPDATE tasks SET status = 'failed', rejection_count = ?, updated_at = datetime('now')
|
|
378
|
+
WHERE id = ?`).run(newRejectionCount, taskId);
|
|
379
|
+
addAuditEntry(db, taskId, task.status, 'failed', `model:${model}`, `Exceeded 15 rejections. Last note: ${notes ?? 'none'}`, commitSha);
|
|
380
|
+
// Create system dispute
|
|
381
|
+
createSystemDisputeForRejection(db, taskId, 'Exceeded 15 rejections');
|
|
382
|
+
return { status: 'failed', rejectionCount: newRejectionCount };
|
|
383
|
+
}
|
|
384
|
+
// Normal rejection - back to in_progress
|
|
385
|
+
db.prepare(`UPDATE tasks SET status = 'in_progress', rejection_count = ?, updated_at = datetime('now')
|
|
386
|
+
WHERE id = ?`).run(newRejectionCount, taskId);
|
|
387
|
+
addAuditEntry(db, taskId, task.status, 'in_progress', `model:${model}`, notes, commitSha);
|
|
388
|
+
return { status: 'retry', rejectionCount: newRejectionCount };
|
|
389
|
+
}
|
|
390
|
+
function addAuditEntry(db, taskId, fromStatus, toStatus, actor, options, commitSha) {
|
|
391
|
+
// Support legacy signature: addAuditEntry(db, taskId, from, to, actor, notes, commitSha)
|
|
392
|
+
if (typeof options === 'string' || options === undefined) {
|
|
393
|
+
const notes = options;
|
|
394
|
+
db.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, model, notes, commit_sha)
|
|
395
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(taskId, fromStatus, toStatus, actor, 'human', null, notes ?? null, commitSha ?? null);
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
// New signature with options object
|
|
399
|
+
db.prepare(`INSERT INTO audit (task_id, from_status, to_status, actor, actor_type, model, notes, commit_sha)
|
|
400
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(taskId, fromStatus, toStatus, actor, options.actorType ?? 'human', options.model ?? null, options.notes ?? null, options.commitSha ?? null);
|
|
401
|
+
}
|
|
402
|
+
function getTaskAudit(db, taskId) {
|
|
403
|
+
return db
|
|
404
|
+
.prepare('SELECT * FROM audit WHERE task_id = ? ORDER BY created_at ASC')
|
|
405
|
+
.all(taskId);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Get rejection history for a task
|
|
409
|
+
* Returns entries where a review was rejected (review -> in_progress)
|
|
410
|
+
* Includes commit hash for easy reference
|
|
411
|
+
*/
|
|
412
|
+
function getTaskRejections(db, taskId) {
|
|
413
|
+
const rejections = db
|
|
414
|
+
.prepare(`SELECT notes, commit_sha, actor, created_at
|
|
415
|
+
FROM audit
|
|
416
|
+
WHERE task_id = ?
|
|
417
|
+
AND from_status = 'review'
|
|
418
|
+
AND to_status = 'in_progress'
|
|
419
|
+
ORDER BY created_at ASC`)
|
|
420
|
+
.all(taskId);
|
|
421
|
+
return rejections.map((r, index) => ({
|
|
422
|
+
rejection_number: index + 1,
|
|
423
|
+
commit_sha: r.commit_sha,
|
|
424
|
+
notes: r.notes,
|
|
425
|
+
actor: r.actor,
|
|
426
|
+
created_at: r.created_at,
|
|
427
|
+
}));
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Get the latest submission notes (when coder submitted for review)
|
|
431
|
+
* This captures any notes the coder included with --notes flag
|
|
432
|
+
*/
|
|
433
|
+
function getLatestSubmissionNotes(db, taskId) {
|
|
434
|
+
const entry = db
|
|
435
|
+
.prepare(`SELECT notes FROM audit
|
|
436
|
+
WHERE task_id = ?
|
|
437
|
+
AND to_status = 'review'
|
|
438
|
+
ORDER BY created_at DESC
|
|
439
|
+
LIMIT 1`)
|
|
440
|
+
.get(taskId);
|
|
441
|
+
return entry?.notes ?? null;
|
|
442
|
+
}
|
|
443
|
+
// ============ Dispute Operations ============
|
|
444
|
+
// NOTE: Full dispute operations are in src/disputes/
|
|
445
|
+
// This is a minimal helper for backward compatibility with rejectTask
|
|
446
|
+
function createSystemDisputeForRejection(db, taskId, reason) {
|
|
447
|
+
const id = (0, uuid_1.v4)();
|
|
448
|
+
db.prepare(`INSERT INTO disputes (id, task_id, type, reason, created_by, coder_position)
|
|
449
|
+
VALUES (?, ?, 'system', ?, 'system', ?)`).run(id, taskId, reason, 'Task exceeded maximum rejection count and requires human intervention.');
|
|
450
|
+
return id;
|
|
451
|
+
}
|
|
452
|
+
// ============ Task Selection (for orchestrator) ============
|
|
453
|
+
/**
|
|
454
|
+
* Helper to filter out tasks from sections with unmet dependencies
|
|
455
|
+
*/
|
|
456
|
+
function filterTasksWithMetDependencies(db, tasks) {
|
|
457
|
+
return tasks.filter(task => {
|
|
458
|
+
if (!task.section_id) {
|
|
459
|
+
// Tasks without a section are always allowed
|
|
460
|
+
return true;
|
|
461
|
+
}
|
|
462
|
+
// Check if section has all dependencies met
|
|
463
|
+
return hasDependenciesMet(db, task.section_id);
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
function findNextTask(db, sectionId) {
|
|
467
|
+
// Build WHERE clause for section filtering
|
|
468
|
+
const sectionFilter = sectionId ? 'AND t.section_id = ?' : '';
|
|
469
|
+
const sectionParams = sectionId ? [sectionId] : [];
|
|
470
|
+
// Exclude tasks in skipped sections unless a specific section was requested
|
|
471
|
+
const skipFilter = sectionId ? '' : 'AND (s.skipped IS NULL OR s.skipped = 0)';
|
|
472
|
+
// Priority 1: Tasks ready for review
|
|
473
|
+
const reviewTasks = db
|
|
474
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
475
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
476
|
+
WHERE t.status = 'review' ${sectionFilter} ${skipFilter}
|
|
477
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
478
|
+
.all(...sectionParams);
|
|
479
|
+
const filteredReviewTasks = filterTasksWithMetDependencies(db, reviewTasks);
|
|
480
|
+
if (filteredReviewTasks.length > 0) {
|
|
481
|
+
return { task: filteredReviewTasks[0], action: 'review' };
|
|
482
|
+
}
|
|
483
|
+
// Priority 2: Tasks in progress
|
|
484
|
+
const inProgressTasks = db
|
|
485
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
486
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
487
|
+
WHERE t.status = 'in_progress' ${sectionFilter} ${skipFilter}
|
|
488
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
489
|
+
.all(...sectionParams);
|
|
490
|
+
const filteredInProgressTasks = filterTasksWithMetDependencies(db, inProgressTasks);
|
|
491
|
+
if (filteredInProgressTasks.length > 0) {
|
|
492
|
+
return { task: filteredInProgressTasks[0], action: 'resume' };
|
|
493
|
+
}
|
|
494
|
+
// Priority 3: Pending tasks
|
|
495
|
+
const pendingTasks = db
|
|
496
|
+
.prepare(`SELECT t.* FROM tasks t
|
|
497
|
+
LEFT JOIN sections s ON t.section_id = s.id
|
|
498
|
+
WHERE t.status = 'pending' ${sectionFilter} ${skipFilter}
|
|
499
|
+
ORDER BY COALESCE(s.position, 999999), t.created_at`)
|
|
500
|
+
.all(...sectionParams);
|
|
501
|
+
const filteredPendingTasks = filterTasksWithMetDependencies(db, pendingTasks);
|
|
502
|
+
if (filteredPendingTasks.length > 0) {
|
|
503
|
+
return { task: filteredPendingTasks[0], action: 'start' };
|
|
504
|
+
}
|
|
505
|
+
return { task: null, action: 'idle' };
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Get the last rejection notes for a task
|
|
509
|
+
*/
|
|
510
|
+
function getLastRejectionNotes(db, taskId) {
|
|
511
|
+
const entry = db
|
|
512
|
+
.prepare(`SELECT notes FROM audit
|
|
513
|
+
WHERE task_id = ? AND to_status = 'in_progress' AND notes IS NOT NULL
|
|
514
|
+
ORDER BY created_at DESC LIMIT 1`)
|
|
515
|
+
.get(taskId);
|
|
516
|
+
return entry?.notes ?? null;
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Get task counts by status for project stats
|
|
520
|
+
* Used by runner heartbeat to update global database
|
|
521
|
+
*/
|
|
522
|
+
function getTaskCountsByStatus(db) {
|
|
523
|
+
const rows = db
|
|
524
|
+
.prepare('SELECT status, COUNT(*) as count FROM tasks GROUP BY status')
|
|
525
|
+
.all();
|
|
526
|
+
const counts = {
|
|
527
|
+
pending: 0,
|
|
528
|
+
in_progress: 0,
|
|
529
|
+
review: 0,
|
|
530
|
+
completed: 0,
|
|
531
|
+
};
|
|
532
|
+
for (const row of rows) {
|
|
533
|
+
if (row.status === 'pending') {
|
|
534
|
+
counts.pending = row.count;
|
|
535
|
+
}
|
|
536
|
+
else if (row.status === 'in_progress') {
|
|
537
|
+
counts.in_progress = row.count;
|
|
538
|
+
}
|
|
539
|
+
else if (row.status === 'review') {
|
|
540
|
+
counts.review = row.count;
|
|
541
|
+
}
|
|
542
|
+
else if (row.status === 'completed') {
|
|
543
|
+
counts.completed = row.count;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
return counts;
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Log an LLM invocation for a task
|
|
550
|
+
* This stores the full prompt and response for debugging
|
|
551
|
+
*/
|
|
552
|
+
function createTaskInvocation(db, params) {
|
|
553
|
+
const result = db.prepare(`INSERT INTO task_invocations (
|
|
554
|
+
task_id, role, provider, model, prompt, response, error,
|
|
555
|
+
exit_code, duration_ms, success, timed_out, rejection_number
|
|
556
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(params.taskId, params.role, params.provider, params.model, params.prompt, params.response ?? null, params.error ?? null, params.exitCode, params.durationMs, params.success ? 1 : 0, params.timedOut ? 1 : 0, params.rejectionNumber ?? null);
|
|
557
|
+
return result.lastInsertRowid;
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Get all invocations for a task
|
|
561
|
+
* Ordered by creation time (oldest first)
|
|
562
|
+
*/
|
|
563
|
+
function getTaskInvocations(db, taskId) {
|
|
564
|
+
return db
|
|
565
|
+
.prepare(`SELECT * FROM task_invocations
|
|
566
|
+
WHERE task_id = ?
|
|
567
|
+
ORDER BY created_at ASC`)
|
|
568
|
+
.all(taskId);
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Get recent invocations for a task (limited)
|
|
572
|
+
* Ordered by creation time (newest first)
|
|
573
|
+
*/
|
|
574
|
+
function getRecentTaskInvocations(db, taskId, limit = 10) {
|
|
575
|
+
return db
|
|
576
|
+
.prepare(`SELECT * FROM task_invocations
|
|
577
|
+
WHERE task_id = ?
|
|
578
|
+
ORDER BY created_at DESC
|
|
579
|
+
LIMIT ?`)
|
|
580
|
+
.all(taskId, limit);
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Get the latest invocation for a specific role
|
|
584
|
+
*/
|
|
585
|
+
function getLatestInvocation(db, taskId, role) {
|
|
586
|
+
return db
|
|
587
|
+
.prepare(`SELECT * FROM task_invocations
|
|
588
|
+
WHERE task_id = ? AND role = ?
|
|
589
|
+
ORDER BY created_at DESC
|
|
590
|
+
LIMIT 1`)
|
|
591
|
+
.get(taskId, role);
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Get invocation count for a task
|
|
595
|
+
*/
|
|
596
|
+
function getInvocationCount(db, taskId) {
|
|
597
|
+
const rows = db
|
|
598
|
+
.prepare(`SELECT role, COUNT(*) as count
|
|
599
|
+
FROM task_invocations
|
|
600
|
+
WHERE task_id = ?
|
|
601
|
+
GROUP BY role`)
|
|
602
|
+
.all(taskId);
|
|
603
|
+
const counts = { coder: 0, reviewer: 0, total: 0 };
|
|
604
|
+
for (const row of rows) {
|
|
605
|
+
if (row.role === 'coder')
|
|
606
|
+
counts.coder = row.count;
|
|
607
|
+
if (row.role === 'reviewer')
|
|
608
|
+
counts.reviewer = row.count;
|
|
609
|
+
counts.total += row.count;
|
|
610
|
+
}
|
|
611
|
+
return counts;
|
|
612
|
+
}
|
|
613
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/database/queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database schema definitions for Steroids CLI
|
|
3
|
+
* Creates all required tables with proper constraints
|
|
4
|
+
*/
|
|
5
|
+
export declare const SCHEMA_VERSION = "0.1.0";
|
|
6
|
+
export declare const SCHEMA_SQL = "\n-- Schema metadata (version tracking)\nCREATE TABLE IF NOT EXISTS _schema (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n);\n\n-- Applied migrations log\nCREATE TABLE IF NOT EXISTS _migrations (\n id INTEGER PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n checksum TEXT NOT NULL,\n applied_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\n-- Sections (task groups)\nCREATE TABLE IF NOT EXISTS sections (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n position INTEGER NOT NULL,\n priority INTEGER DEFAULT 50,\n skipped INTEGER DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_sections_priority ON sections(priority);\n\n-- Tasks\nCREATE TABLE IF NOT EXISTS tasks (\n id TEXT PRIMARY KEY,\n title TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n section_id TEXT REFERENCES sections(id),\n source_file TEXT,\n file_path TEXT,\n file_line INTEGER,\n file_commit_sha TEXT,\n file_content_hash TEXT,\n rejection_count INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);\nCREATE INDEX IF NOT EXISTS idx_tasks_section ON tasks(section_id);\n\n-- Audit trail (immutable log of status changes)\nCREATE TABLE IF NOT EXISTS audit (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id TEXT NOT NULL REFERENCES tasks(id),\n from_status TEXT,\n to_status TEXT NOT NULL,\n actor TEXT NOT NULL,\n actor_type TEXT DEFAULT 'human',\n model TEXT,\n notes TEXT,\n commit_sha TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_audit_task ON audit(task_id);\nCREATE INDEX IF NOT EXISTS idx_audit_commit ON audit(commit_sha);\n\n-- Disputes\nCREATE TABLE IF NOT EXISTS disputes (\n id TEXT PRIMARY KEY,\n task_id TEXT NOT NULL REFERENCES tasks(id),\n type TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'open',\n reason TEXT NOT NULL,\n coder_position TEXT,\n reviewer_position TEXT,\n resolution TEXT,\n resolution_notes TEXT,\n created_by TEXT NOT NULL,\n resolved_by TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n resolved_at TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_disputes_task ON disputes(task_id);\nCREATE INDEX IF NOT EXISTS idx_disputes_status ON disputes(status);\n\n-- Task locks (for orchestrator coordination)\nCREATE TABLE IF NOT EXISTS task_locks (\n task_id TEXT PRIMARY KEY REFERENCES tasks(id),\n runner_id TEXT NOT NULL,\n acquired_at TEXT NOT NULL DEFAULT (datetime('now')),\n expires_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_task_locks_expires ON task_locks(expires_at);\n\n-- Section locks (for orchestrator coordination)\nCREATE TABLE IF NOT EXISTS section_locks (\n section_id TEXT PRIMARY KEY REFERENCES sections(id),\n runner_id TEXT NOT NULL,\n acquired_at TEXT NOT NULL DEFAULT (datetime('now')),\n expires_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_section_locks_expires ON section_locks(expires_at);\n\n-- Section dependencies (ordering constraints between sections)\nCREATE TABLE IF NOT EXISTS section_dependencies (\n id TEXT PRIMARY KEY,\n section_id TEXT NOT NULL REFERENCES sections(id),\n depends_on_section_id TEXT NOT NULL REFERENCES sections(id),\n created_at TEXT DEFAULT (datetime('now')),\n UNIQUE(section_id, depends_on_section_id)\n);\n\nCREATE INDEX IF NOT EXISTS idx_section_dependencies_section ON section_dependencies(section_id);\nCREATE INDEX IF NOT EXISTS idx_section_dependencies_depends_on ON section_dependencies(depends_on_section_id);\n\n-- Task invocations (LLM calls per task)\nCREATE TABLE IF NOT EXISTS task_invocations (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_id TEXT NOT NULL REFERENCES tasks(id),\n role TEXT NOT NULL,\n provider TEXT NOT NULL,\n model TEXT NOT NULL,\n prompt TEXT NOT NULL,\n response TEXT,\n error TEXT,\n exit_code INTEGER NOT NULL DEFAULT 0,\n duration_ms INTEGER NOT NULL DEFAULT 0,\n success INTEGER NOT NULL DEFAULT 0,\n timed_out INTEGER NOT NULL DEFAULT 0,\n rejection_number INTEGER,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_task_invocations_task ON task_invocations(task_id);\nCREATE INDEX IF NOT EXISTS idx_task_invocations_role ON task_invocations(role);\nCREATE INDEX IF NOT EXISTS idx_task_invocations_created ON task_invocations(created_at DESC);\n";
|
|
7
|
+
export declare const INITIAL_SCHEMA_DATA = "\nINSERT OR REPLACE INTO _schema (key, value) VALUES ('version', '0.1.0');\nINSERT OR REPLACE INTO _schema (key, value) VALUES ('created_at', datetime('now'));\n\n-- Mark all migrations as applied since new databases have the full schema\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (1, '001_initial_schema', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (2, '002_add_commit_sha', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (3, '003_add_section_priority', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (4, '004_add_section_dependencies', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (5, '005_add_audit_actor_model', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (6, '006_add_task_invocations', 'builtin');\nINSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (7, '007_add_file_anchor', 'builtin');\n";
|
|
8
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,eAAO,MAAM,UAAU,4jJAyItB,CAAC;AAEF,eAAO,MAAM,mBAAmB,q9BAY/B,CAAC"}
|