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,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Database schema definitions for Steroids CLI
|
|
4
|
+
* Creates all required tables with proper constraints
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.INITIAL_SCHEMA_DATA = exports.SCHEMA_SQL = exports.SCHEMA_VERSION = void 0;
|
|
8
|
+
exports.SCHEMA_VERSION = '0.1.0';
|
|
9
|
+
exports.SCHEMA_SQL = `
|
|
10
|
+
-- Schema metadata (version tracking)
|
|
11
|
+
CREATE TABLE IF NOT EXISTS _schema (
|
|
12
|
+
key TEXT PRIMARY KEY,
|
|
13
|
+
value TEXT NOT NULL
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- Applied migrations log
|
|
17
|
+
CREATE TABLE IF NOT EXISTS _migrations (
|
|
18
|
+
id INTEGER PRIMARY KEY,
|
|
19
|
+
name TEXT NOT NULL UNIQUE,
|
|
20
|
+
checksum TEXT NOT NULL,
|
|
21
|
+
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
-- Sections (task groups)
|
|
25
|
+
CREATE TABLE IF NOT EXISTS sections (
|
|
26
|
+
id TEXT PRIMARY KEY,
|
|
27
|
+
name TEXT NOT NULL,
|
|
28
|
+
position INTEGER NOT NULL,
|
|
29
|
+
priority INTEGER DEFAULT 50,
|
|
30
|
+
skipped INTEGER DEFAULT 0,
|
|
31
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_sections_priority ON sections(priority);
|
|
35
|
+
|
|
36
|
+
-- Tasks
|
|
37
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
38
|
+
id TEXT PRIMARY KEY,
|
|
39
|
+
title TEXT NOT NULL,
|
|
40
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
41
|
+
section_id TEXT REFERENCES sections(id),
|
|
42
|
+
source_file TEXT,
|
|
43
|
+
file_path TEXT,
|
|
44
|
+
file_line INTEGER,
|
|
45
|
+
file_commit_sha TEXT,
|
|
46
|
+
file_content_hash TEXT,
|
|
47
|
+
rejection_count INTEGER NOT NULL DEFAULT 0,
|
|
48
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
49
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
53
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_section ON tasks(section_id);
|
|
54
|
+
|
|
55
|
+
-- Audit trail (immutable log of status changes)
|
|
56
|
+
CREATE TABLE IF NOT EXISTS audit (
|
|
57
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
58
|
+
task_id TEXT NOT NULL REFERENCES tasks(id),
|
|
59
|
+
from_status TEXT,
|
|
60
|
+
to_status TEXT NOT NULL,
|
|
61
|
+
actor TEXT NOT NULL,
|
|
62
|
+
actor_type TEXT DEFAULT 'human',
|
|
63
|
+
model TEXT,
|
|
64
|
+
notes TEXT,
|
|
65
|
+
commit_sha TEXT,
|
|
66
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
CREATE INDEX IF NOT EXISTS idx_audit_task ON audit(task_id);
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_audit_commit ON audit(commit_sha);
|
|
71
|
+
|
|
72
|
+
-- Disputes
|
|
73
|
+
CREATE TABLE IF NOT EXISTS disputes (
|
|
74
|
+
id TEXT PRIMARY KEY,
|
|
75
|
+
task_id TEXT NOT NULL REFERENCES tasks(id),
|
|
76
|
+
type TEXT NOT NULL,
|
|
77
|
+
status TEXT NOT NULL DEFAULT 'open',
|
|
78
|
+
reason TEXT NOT NULL,
|
|
79
|
+
coder_position TEXT,
|
|
80
|
+
reviewer_position TEXT,
|
|
81
|
+
resolution TEXT,
|
|
82
|
+
resolution_notes TEXT,
|
|
83
|
+
created_by TEXT NOT NULL,
|
|
84
|
+
resolved_by TEXT,
|
|
85
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
86
|
+
resolved_at TEXT
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_disputes_task ON disputes(task_id);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_disputes_status ON disputes(status);
|
|
91
|
+
|
|
92
|
+
-- Task locks (for orchestrator coordination)
|
|
93
|
+
CREATE TABLE IF NOT EXISTS task_locks (
|
|
94
|
+
task_id TEXT PRIMARY KEY REFERENCES tasks(id),
|
|
95
|
+
runner_id TEXT NOT NULL,
|
|
96
|
+
acquired_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
97
|
+
expires_at TEXT NOT NULL,
|
|
98
|
+
heartbeat_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_task_locks_expires ON task_locks(expires_at);
|
|
102
|
+
|
|
103
|
+
-- Section locks (for orchestrator coordination)
|
|
104
|
+
CREATE TABLE IF NOT EXISTS section_locks (
|
|
105
|
+
section_id TEXT PRIMARY KEY REFERENCES sections(id),
|
|
106
|
+
runner_id TEXT NOT NULL,
|
|
107
|
+
acquired_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
108
|
+
expires_at TEXT NOT NULL
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_section_locks_expires ON section_locks(expires_at);
|
|
112
|
+
|
|
113
|
+
-- Section dependencies (ordering constraints between sections)
|
|
114
|
+
CREATE TABLE IF NOT EXISTS section_dependencies (
|
|
115
|
+
id TEXT PRIMARY KEY,
|
|
116
|
+
section_id TEXT NOT NULL REFERENCES sections(id),
|
|
117
|
+
depends_on_section_id TEXT NOT NULL REFERENCES sections(id),
|
|
118
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
119
|
+
UNIQUE(section_id, depends_on_section_id)
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
CREATE INDEX IF NOT EXISTS idx_section_dependencies_section ON section_dependencies(section_id);
|
|
123
|
+
CREATE INDEX IF NOT EXISTS idx_section_dependencies_depends_on ON section_dependencies(depends_on_section_id);
|
|
124
|
+
|
|
125
|
+
-- Task invocations (LLM calls per task)
|
|
126
|
+
CREATE TABLE IF NOT EXISTS task_invocations (
|
|
127
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
128
|
+
task_id TEXT NOT NULL REFERENCES tasks(id),
|
|
129
|
+
role TEXT NOT NULL,
|
|
130
|
+
provider TEXT NOT NULL,
|
|
131
|
+
model TEXT NOT NULL,
|
|
132
|
+
prompt TEXT NOT NULL,
|
|
133
|
+
response TEXT,
|
|
134
|
+
error TEXT,
|
|
135
|
+
exit_code INTEGER NOT NULL DEFAULT 0,
|
|
136
|
+
duration_ms INTEGER NOT NULL DEFAULT 0,
|
|
137
|
+
success INTEGER NOT NULL DEFAULT 0,
|
|
138
|
+
timed_out INTEGER NOT NULL DEFAULT 0,
|
|
139
|
+
rejection_number INTEGER,
|
|
140
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
CREATE INDEX IF NOT EXISTS idx_task_invocations_task ON task_invocations(task_id);
|
|
144
|
+
CREATE INDEX IF NOT EXISTS idx_task_invocations_role ON task_invocations(role);
|
|
145
|
+
CREATE INDEX IF NOT EXISTS idx_task_invocations_created ON task_invocations(created_at DESC);
|
|
146
|
+
`;
|
|
147
|
+
exports.INITIAL_SCHEMA_DATA = `
|
|
148
|
+
INSERT OR REPLACE INTO _schema (key, value) VALUES ('version', '${exports.SCHEMA_VERSION}');
|
|
149
|
+
INSERT OR REPLACE INTO _schema (key, value) VALUES ('created_at', datetime('now'));
|
|
150
|
+
|
|
151
|
+
-- Mark all migrations as applied since new databases have the full schema
|
|
152
|
+
INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (1, '001_initial_schema', 'builtin');
|
|
153
|
+
INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (2, '002_add_commit_sha', 'builtin');
|
|
154
|
+
INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (3, '003_add_section_priority', 'builtin');
|
|
155
|
+
INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (4, '004_add_section_dependencies', 'builtin');
|
|
156
|
+
INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (5, '005_add_audit_actor_model', 'builtin');
|
|
157
|
+
INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (6, '006_add_task_invocations', 'builtin');
|
|
158
|
+
INSERT OR IGNORE INTO _migrations (id, name, checksum) VALUES (7, '007_add_file_anchor', 'builtin');
|
|
159
|
+
`;
|
|
160
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEU,QAAA,cAAc,GAAG,OAAO,CAAC;AAEzB,QAAA,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyIzB,CAAC;AAEW,QAAA,mBAAmB,GAAG;kEAC+B,sBAAc;;;;;;;;;;;CAW/E,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Major/minor dispute behavior
|
|
3
|
+
*
|
|
4
|
+
* Defines how different dispute types affect the loop:
|
|
5
|
+
* - Major disputes can block the loop if configured
|
|
6
|
+
* - Minor disputes are logged but work continues
|
|
7
|
+
*/
|
|
8
|
+
import type Database from 'better-sqlite3';
|
|
9
|
+
import type { DisputeType, Dispute } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Dispute behavior configuration
|
|
12
|
+
*/
|
|
13
|
+
export interface DisputeBehaviorConfig {
|
|
14
|
+
/** If true, major disputes block the automation loop */
|
|
15
|
+
majorBlocksLoop: boolean;
|
|
16
|
+
/** Auto-create system dispute after 15 rejections */
|
|
17
|
+
autoCreateOnMaxRejections: boolean;
|
|
18
|
+
/** Days before dispute is considered stale */
|
|
19
|
+
timeoutDays: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Default dispute behavior configuration
|
|
23
|
+
*/
|
|
24
|
+
export declare const DEFAULT_DISPUTE_BEHAVIOR: DisputeBehaviorConfig;
|
|
25
|
+
/**
|
|
26
|
+
* Result of checking if loop should be blocked
|
|
27
|
+
*/
|
|
28
|
+
export interface LoopBlockResult {
|
|
29
|
+
/** Whether the loop should be blocked */
|
|
30
|
+
blocked: boolean;
|
|
31
|
+
/** Reason for blocking */
|
|
32
|
+
reason?: string;
|
|
33
|
+
/** Disputes causing the block */
|
|
34
|
+
blockingDisputes?: Dispute[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if the loop should be blocked due to major disputes
|
|
38
|
+
*/
|
|
39
|
+
export declare function checkLoopBlocked(db: Database.Database, config?: DisputeBehaviorConfig): LoopBlockResult;
|
|
40
|
+
/**
|
|
41
|
+
* Determine the behavior for a dispute type
|
|
42
|
+
*/
|
|
43
|
+
export interface DisputeBehavior {
|
|
44
|
+
/** Whether this type blocks the task */
|
|
45
|
+
blocksTask: boolean;
|
|
46
|
+
/** Whether task status changes to 'disputed' */
|
|
47
|
+
changesTaskStatus: boolean;
|
|
48
|
+
/** Whether this type can block the loop */
|
|
49
|
+
canBlockLoop: boolean;
|
|
50
|
+
/** Human-readable description */
|
|
51
|
+
description: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the behavior for a dispute type
|
|
55
|
+
*/
|
|
56
|
+
export declare function getDisputeBehavior(type: DisputeType, config?: DisputeBehaviorConfig): DisputeBehavior;
|
|
57
|
+
/**
|
|
58
|
+
* Actions to take when a dispute is created
|
|
59
|
+
*/
|
|
60
|
+
export interface DisputeCreatedActions {
|
|
61
|
+
/** Push work to git */
|
|
62
|
+
pushToGit: boolean;
|
|
63
|
+
/** Move to next task */
|
|
64
|
+
moveToNextTask: boolean;
|
|
65
|
+
/** Block the loop */
|
|
66
|
+
blockLoop: boolean;
|
|
67
|
+
/** Update dispute.md */
|
|
68
|
+
updateDisputeLog: boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get actions to take when a dispute is created
|
|
72
|
+
*/
|
|
73
|
+
export declare function getActionsOnDisputeCreated(type: DisputeType, config?: DisputeBehaviorConfig): DisputeCreatedActions;
|
|
74
|
+
/**
|
|
75
|
+
* Get a summary of current dispute status for loop
|
|
76
|
+
*/
|
|
77
|
+
export declare function getDisputeLoopSummary(db: Database.Database, config?: DisputeBehaviorConfig): string;
|
|
78
|
+
/**
|
|
79
|
+
* Check if loop can proceed (not blocked by disputes)
|
|
80
|
+
*/
|
|
81
|
+
export declare function canLoopProceed(db: Database.Database, config?: DisputeBehaviorConfig): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Options for handling a disputed task
|
|
84
|
+
*/
|
|
85
|
+
export interface DisputedTaskHandling {
|
|
86
|
+
/** Should the task be skipped in task selection */
|
|
87
|
+
skipInSelection: boolean;
|
|
88
|
+
/** Is the task considered "done" for loop purposes */
|
|
89
|
+
consideredDone: boolean;
|
|
90
|
+
/** Should the task be included in progress reports */
|
|
91
|
+
includeInProgress: boolean;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get handling options for disputed tasks
|
|
95
|
+
*/
|
|
96
|
+
export declare function getDisputedTaskHandling(): DisputedTaskHandling;
|
|
97
|
+
/**
|
|
98
|
+
* Status markers for terminal states
|
|
99
|
+
* Disputed [!] is considered terminal like completed [x]
|
|
100
|
+
*/
|
|
101
|
+
export declare const TERMINAL_STATUSES: readonly ["completed", "disputed", "failed"];
|
|
102
|
+
/**
|
|
103
|
+
* Check if a task status is terminal (no more work needed)
|
|
104
|
+
*/
|
|
105
|
+
export declare function isTerminalStatus(status: string): boolean;
|
|
106
|
+
//# sourceMappingURL=behavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../src/disputes/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIvD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAC;IACzB,qDAAqD;IACrD,yBAAyB,EAAE,OAAO,CAAC;IACnC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,qBAItC,CAAC;AAIF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,GAAE,qBAAgD,GACvD,eAAe,CAkBjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,YAAY,EAAE,OAAO,CAAC;IACtB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,MAAM,GAAE,qBAAgD,GACvD,eAAe,CA4CjB;AAID;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,WAAW,EACjB,MAAM,GAAE,qBAAgD,GACvD,qBAAqB,CASvB;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,GAAE,qBAAgD,GACvD,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,GAAE,qBAAgD,GACvD,OAAO,CAET;AAID;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,eAAe,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,cAAc,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,oBAAoB,CAM9D;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,8CAA+C,CAAC;AAE9E;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Major/minor dispute behavior
|
|
4
|
+
*
|
|
5
|
+
* Defines how different dispute types affect the loop:
|
|
6
|
+
* - Major disputes can block the loop if configured
|
|
7
|
+
* - Minor disputes are logged but work continues
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.TERMINAL_STATUSES = exports.DEFAULT_DISPUTE_BEHAVIOR = void 0;
|
|
11
|
+
exports.checkLoopBlocked = checkLoopBlocked;
|
|
12
|
+
exports.getDisputeBehavior = getDisputeBehavior;
|
|
13
|
+
exports.getActionsOnDisputeCreated = getActionsOnDisputeCreated;
|
|
14
|
+
exports.getDisputeLoopSummary = getDisputeLoopSummary;
|
|
15
|
+
exports.canLoopProceed = canLoopProceed;
|
|
16
|
+
exports.getDisputedTaskHandling = getDisputedTaskHandling;
|
|
17
|
+
exports.isTerminalStatus = isTerminalStatus;
|
|
18
|
+
const queries_js_1 = require("./queries.js");
|
|
19
|
+
/**
|
|
20
|
+
* Default dispute behavior configuration
|
|
21
|
+
*/
|
|
22
|
+
exports.DEFAULT_DISPUTE_BEHAVIOR = {
|
|
23
|
+
majorBlocksLoop: false,
|
|
24
|
+
autoCreateOnMaxRejections: true,
|
|
25
|
+
timeoutDays: 7,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Check if the loop should be blocked due to major disputes
|
|
29
|
+
*/
|
|
30
|
+
function checkLoopBlocked(db, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
|
|
31
|
+
// If major disputes don't block the loop, return immediately
|
|
32
|
+
if (!config.majorBlocksLoop) {
|
|
33
|
+
return { blocked: false };
|
|
34
|
+
}
|
|
35
|
+
// Find open major disputes
|
|
36
|
+
const majorDisputes = (0, queries_js_1.listDisputes)(db, { type: 'major', status: 'open' });
|
|
37
|
+
if (majorDisputes.length === 0) {
|
|
38
|
+
return { blocked: false };
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
blocked: true,
|
|
42
|
+
reason: `${majorDisputes.length} major dispute(s) require human resolution`,
|
|
43
|
+
blockingDisputes: majorDisputes,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the behavior for a dispute type
|
|
48
|
+
*/
|
|
49
|
+
function getDisputeBehavior(type, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
|
|
50
|
+
switch (type) {
|
|
51
|
+
case 'major':
|
|
52
|
+
return {
|
|
53
|
+
blocksTask: true,
|
|
54
|
+
changesTaskStatus: true,
|
|
55
|
+
canBlockLoop: config.majorBlocksLoop,
|
|
56
|
+
description: config.majorBlocksLoop
|
|
57
|
+
? 'Blocks task and loop until resolved by human'
|
|
58
|
+
: 'Blocks task, loop continues to next task',
|
|
59
|
+
};
|
|
60
|
+
case 'minor':
|
|
61
|
+
return {
|
|
62
|
+
blocksTask: false,
|
|
63
|
+
changesTaskStatus: false,
|
|
64
|
+
canBlockLoop: false,
|
|
65
|
+
description: 'Logged disagreement, coder implementation continues',
|
|
66
|
+
};
|
|
67
|
+
case 'coder':
|
|
68
|
+
return {
|
|
69
|
+
blocksTask: true,
|
|
70
|
+
changesTaskStatus: true,
|
|
71
|
+
canBlockLoop: false,
|
|
72
|
+
description: 'Coder disputes rejection, task marked disputed, loop continues',
|
|
73
|
+
};
|
|
74
|
+
case 'reviewer':
|
|
75
|
+
return {
|
|
76
|
+
blocksTask: true,
|
|
77
|
+
changesTaskStatus: true,
|
|
78
|
+
canBlockLoop: false,
|
|
79
|
+
description: 'Reviewer raises concern, task marked disputed, loop continues',
|
|
80
|
+
};
|
|
81
|
+
case 'system':
|
|
82
|
+
return {
|
|
83
|
+
blocksTask: true,
|
|
84
|
+
changesTaskStatus: true,
|
|
85
|
+
canBlockLoop: false,
|
|
86
|
+
description: 'Auto-created after max rejections, requires human intervention',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get actions to take when a dispute is created
|
|
92
|
+
*/
|
|
93
|
+
function getActionsOnDisputeCreated(type, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
|
|
94
|
+
const behavior = getDisputeBehavior(type, config);
|
|
95
|
+
return {
|
|
96
|
+
pushToGit: type !== 'minor', // Always push for non-minor disputes
|
|
97
|
+
moveToNextTask: !behavior.canBlockLoop, // Move on unless loop is blocked
|
|
98
|
+
blockLoop: behavior.canBlockLoop,
|
|
99
|
+
updateDisputeLog: true, // Always update dispute.md
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// ============ Summary Helpers ============
|
|
103
|
+
/**
|
|
104
|
+
* Get a summary of current dispute status for loop
|
|
105
|
+
*/
|
|
106
|
+
function getDisputeLoopSummary(db, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
|
|
107
|
+
const counts = (0, queries_js_1.countDisputesByStatus)(db);
|
|
108
|
+
const blockResult = checkLoopBlocked(db, config);
|
|
109
|
+
const lines = [];
|
|
110
|
+
if (blockResult.blocked) {
|
|
111
|
+
lines.push(`LOOP BLOCKED: ${blockResult.reason}`);
|
|
112
|
+
lines.push('');
|
|
113
|
+
}
|
|
114
|
+
lines.push(`Disputes: ${counts.open} open, ${counts.resolved} resolved`);
|
|
115
|
+
if (config.majorBlocksLoop) {
|
|
116
|
+
lines.push('Config: Major disputes block loop');
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
lines.push('Config: Major disputes logged but loop continues');
|
|
120
|
+
}
|
|
121
|
+
return lines.join('\n');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check if loop can proceed (not blocked by disputes)
|
|
125
|
+
*/
|
|
126
|
+
function canLoopProceed(db, config = exports.DEFAULT_DISPUTE_BEHAVIOR) {
|
|
127
|
+
return !checkLoopBlocked(db, config).blocked;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get handling options for disputed tasks
|
|
131
|
+
*/
|
|
132
|
+
function getDisputedTaskHandling() {
|
|
133
|
+
return {
|
|
134
|
+
skipInSelection: true, // Disputed tasks are skipped
|
|
135
|
+
consideredDone: true, // Treated as done for loop progress
|
|
136
|
+
includeInProgress: false, // Not counted as work in progress
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Status markers for terminal states
|
|
141
|
+
* Disputed [!] is considered terminal like completed [x]
|
|
142
|
+
*/
|
|
143
|
+
exports.TERMINAL_STATUSES = ['completed', 'disputed', 'failed'];
|
|
144
|
+
/**
|
|
145
|
+
* Check if a task status is terminal (no more work needed)
|
|
146
|
+
*/
|
|
147
|
+
function isTerminalStatus(status) {
|
|
148
|
+
return exports.TERMINAL_STATUSES.includes(status);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/disputes/behavior.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispute creation logic
|
|
3
|
+
*
|
|
4
|
+
* Creates disputes linked to tasks, sets appropriate positions
|
|
5
|
+
* based on the actor (coder or reviewer), and updates task status.
|
|
6
|
+
*/
|
|
7
|
+
import type Database from 'better-sqlite3';
|
|
8
|
+
import type { DisputeType, CreateDisputeInput } from './types.js';
|
|
9
|
+
export interface CreateDisputeResult {
|
|
10
|
+
success: true;
|
|
11
|
+
disputeId: string;
|
|
12
|
+
taskId: string;
|
|
13
|
+
type: DisputeType;
|
|
14
|
+
taskStatusUpdated: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface CreateDisputeError {
|
|
17
|
+
success: false;
|
|
18
|
+
error: string;
|
|
19
|
+
code: 'TASK_NOT_FOUND' | 'DISPUTE_EXISTS' | 'INVALID_TYPE' | 'INVALID_REASON';
|
|
20
|
+
}
|
|
21
|
+
export type CreateDisputeOutcome = CreateDisputeResult | CreateDisputeError;
|
|
22
|
+
/**
|
|
23
|
+
* Create a new dispute for a task
|
|
24
|
+
*
|
|
25
|
+
* This function:
|
|
26
|
+
* 1. Validates the input
|
|
27
|
+
* 2. Creates the dispute record
|
|
28
|
+
* 3. Sets the position based on actor role (coder or reviewer)
|
|
29
|
+
* 4. Updates task status to 'disputed' (except for minor disputes)
|
|
30
|
+
* 5. Adds an audit entry
|
|
31
|
+
*/
|
|
32
|
+
export declare function createDispute(db: Database.Database, input: CreateDisputeInput): CreateDisputeOutcome;
|
|
33
|
+
/**
|
|
34
|
+
* Create a coder dispute (coder disagrees with reviewer rejection)
|
|
35
|
+
*/
|
|
36
|
+
export declare function createCoderDispute(db: Database.Database, taskId: string, reason: string, position: string, model: string): CreateDisputeOutcome;
|
|
37
|
+
/**
|
|
38
|
+
* Create a reviewer dispute (reviewer raises concern)
|
|
39
|
+
*/
|
|
40
|
+
export declare function createReviewerDispute(db: Database.Database, taskId: string, reason: string, position: string, model: string): CreateDisputeOutcome;
|
|
41
|
+
/**
|
|
42
|
+
* Create a major dispute (blocks task, requires human resolution)
|
|
43
|
+
*/
|
|
44
|
+
export declare function createMajorDispute(db: Database.Database, taskId: string, reason: string, position: string, createdBy: string): CreateDisputeOutcome;
|
|
45
|
+
/**
|
|
46
|
+
* Create a minor dispute (logged only, doesn't block)
|
|
47
|
+
*/
|
|
48
|
+
export declare function createMinorDispute(db: Database.Database, taskId: string, reason: string, position: string, createdBy: string): CreateDisputeOutcome;
|
|
49
|
+
/**
|
|
50
|
+
* Create a system dispute (auto-created after 15 rejections)
|
|
51
|
+
* Called from the task rejection logic
|
|
52
|
+
*/
|
|
53
|
+
export declare function createSystemDispute(db: Database.Database, taskId: string, reason?: string): CreateDisputeOutcome;
|
|
54
|
+
/**
|
|
55
|
+
* Log a minor disagreement without changing task status
|
|
56
|
+
* Used for non-blocking style/preference disagreements
|
|
57
|
+
*/
|
|
58
|
+
export declare function logMinorDisagreement(db: Database.Database, taskId: string, notes: string, createdBy: string): CreateDisputeOutcome;
|
|
59
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/disputes/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAEV,WAAW,EACX,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,cAAc,GAAG,gBAAgB,CAAC;CAC/E;AAED,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAiE5E;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,kBAAkB,GACxB,oBAAoB,CA2DtB;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAQtB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAiC,GACxC,oBAAoB,CAQtB;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAmCtB"}
|