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,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Stale dispute handling
|
|
4
|
+
*
|
|
5
|
+
* Tracks disputes that have been open longer than the configured timeout
|
|
6
|
+
* and provides alerting and listing functionality.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DEFAULT_TIMEOUT_DAYS = void 0;
|
|
10
|
+
exports.checkStaleDisputes = checkStaleDisputes;
|
|
11
|
+
exports.getStaleDisputeSummary = getStaleDisputeSummary;
|
|
12
|
+
exports.alertStaleDisputes = alertStaleDisputes;
|
|
13
|
+
exports.performStaleCheck = performStaleCheck;
|
|
14
|
+
exports.listOpenDisputesByAge = listOpenDisputesByAge;
|
|
15
|
+
exports.formatDisputeAge = formatDisputeAge;
|
|
16
|
+
const queries_js_1 = require("./queries.js");
|
|
17
|
+
// ============ Configuration ============
|
|
18
|
+
/**
|
|
19
|
+
* Default timeout in days before a dispute is considered stale
|
|
20
|
+
*/
|
|
21
|
+
exports.DEFAULT_TIMEOUT_DAYS = 7;
|
|
22
|
+
/**
|
|
23
|
+
* Check for stale disputes
|
|
24
|
+
*/
|
|
25
|
+
function checkStaleDisputes(db, timeoutDays = exports.DEFAULT_TIMEOUT_DAYS) {
|
|
26
|
+
const staleDisputes = (0, queries_js_1.listDisputesWithTasks)(db, {
|
|
27
|
+
stale: true,
|
|
28
|
+
timeoutDays,
|
|
29
|
+
});
|
|
30
|
+
const disputes = staleDisputes.map((dispute) => {
|
|
31
|
+
const daysOpen = (0, queries_js_1.calculateDaysOpen)(dispute.created_at);
|
|
32
|
+
return {
|
|
33
|
+
dispute,
|
|
34
|
+
daysOpen,
|
|
35
|
+
daysPastThreshold: daysOpen - timeoutDays,
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
count: disputes.length,
|
|
40
|
+
disputes,
|
|
41
|
+
timeoutDays,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get stale dispute summary for display
|
|
46
|
+
*/
|
|
47
|
+
function getStaleDisputeSummary(db, timeoutDays = exports.DEFAULT_TIMEOUT_DAYS) {
|
|
48
|
+
const result = checkStaleDisputes(db, timeoutDays);
|
|
49
|
+
if (result.count === 0) {
|
|
50
|
+
return `No disputes have been open longer than ${timeoutDays} days.`;
|
|
51
|
+
}
|
|
52
|
+
const lines = [];
|
|
53
|
+
lines.push(`WARNING: ${result.count} dispute(s) have been open for > ${timeoutDays} days\n`);
|
|
54
|
+
lines.push('ID TASK DAYS OPEN');
|
|
55
|
+
lines.push('-'.repeat(60));
|
|
56
|
+
for (const item of result.disputes) {
|
|
57
|
+
const shortId = item.dispute.id.substring(0, 8);
|
|
58
|
+
const taskTitle = item.dispute.task_title.length > 30
|
|
59
|
+
? item.dispute.task_title.substring(0, 27) + '...'
|
|
60
|
+
: item.dispute.task_title.padEnd(30);
|
|
61
|
+
lines.push(`${shortId} ${taskTitle} ${item.daysOpen}`);
|
|
62
|
+
}
|
|
63
|
+
lines.push('');
|
|
64
|
+
lines.push('Run `steroids dispute show <id>` for details.');
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Send alert for stale disputes
|
|
69
|
+
*/
|
|
70
|
+
async function alertStaleDisputes(db, config, timeoutDays = exports.DEFAULT_TIMEOUT_DAYS) {
|
|
71
|
+
const result = checkStaleDisputes(db, timeoutDays);
|
|
72
|
+
if (result.count === 0) {
|
|
73
|
+
return {
|
|
74
|
+
success: true,
|
|
75
|
+
alertType: config.type,
|
|
76
|
+
message: 'No stale disputes found',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const prefix = config.messagePrefix ?? 'Steroids';
|
|
80
|
+
const message = `${prefix}: ${result.count} dispute(s) open > ${timeoutDays} days`;
|
|
81
|
+
switch (config.type) {
|
|
82
|
+
case 'log':
|
|
83
|
+
console.warn(message);
|
|
84
|
+
console.warn(getStaleDisputeSummary(db, timeoutDays));
|
|
85
|
+
return {
|
|
86
|
+
success: true,
|
|
87
|
+
alertType: 'log',
|
|
88
|
+
message,
|
|
89
|
+
};
|
|
90
|
+
case 'webhook':
|
|
91
|
+
if (!config.webhookUrl) {
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
alertType: 'webhook',
|
|
95
|
+
error: 'Webhook URL not configured',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
await sendWebhookAlert(config.webhookUrl, result);
|
|
100
|
+
return {
|
|
101
|
+
success: true,
|
|
102
|
+
alertType: 'webhook',
|
|
103
|
+
message,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
alertType: 'webhook',
|
|
110
|
+
error: error instanceof Error ? error.message : 'Webhook failed',
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
case 'none':
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
alertType: 'none',
|
|
117
|
+
message: 'Alerting disabled',
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Send webhook alert for stale disputes
|
|
123
|
+
*/
|
|
124
|
+
async function sendWebhookAlert(url, result) {
|
|
125
|
+
const payload = {
|
|
126
|
+
type: 'stale_disputes',
|
|
127
|
+
count: result.count,
|
|
128
|
+
timeoutDays: result.timeoutDays,
|
|
129
|
+
disputes: result.disputes.map((item) => ({
|
|
130
|
+
id: item.dispute.id,
|
|
131
|
+
taskId: item.dispute.task_id,
|
|
132
|
+
taskTitle: item.dispute.task_title,
|
|
133
|
+
type: item.dispute.type,
|
|
134
|
+
reason: item.dispute.reason,
|
|
135
|
+
daysOpen: item.daysOpen,
|
|
136
|
+
createdAt: item.dispute.created_at,
|
|
137
|
+
})),
|
|
138
|
+
timestamp: new Date().toISOString(),
|
|
139
|
+
};
|
|
140
|
+
const response = await fetch(url, {
|
|
141
|
+
method: 'POST',
|
|
142
|
+
headers: {
|
|
143
|
+
'Content-Type': 'application/json',
|
|
144
|
+
},
|
|
145
|
+
body: JSON.stringify(payload),
|
|
146
|
+
});
|
|
147
|
+
if (!response.ok) {
|
|
148
|
+
throw new Error(`Webhook failed with status ${response.status}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Perform a stale check and alert if needed
|
|
153
|
+
* Called from daemon or cron job
|
|
154
|
+
*/
|
|
155
|
+
async function performStaleCheck(db, options) {
|
|
156
|
+
const result = checkStaleDisputes(db, options.timeoutDays);
|
|
157
|
+
if (result.count === 0) {
|
|
158
|
+
return {
|
|
159
|
+
staleCount: 0,
|
|
160
|
+
alertSent: false,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
const alertResult = await alertStaleDisputes(db, options.alert, options.timeoutDays);
|
|
164
|
+
return {
|
|
165
|
+
staleCount: result.count,
|
|
166
|
+
alertSent: true,
|
|
167
|
+
alertResult,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// ============ List Helpers ============
|
|
171
|
+
/**
|
|
172
|
+
* List all open disputes sorted by age (oldest first)
|
|
173
|
+
*/
|
|
174
|
+
function listOpenDisputesByAge(db) {
|
|
175
|
+
return (0, queries_js_1.listDisputesWithTasks)(db, { status: 'open' }).sort((a, b) => {
|
|
176
|
+
return new Date(a.created_at).getTime() - new Date(b.created_at).getTime();
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get dispute age in human-readable format
|
|
181
|
+
*/
|
|
182
|
+
function formatDisputeAge(dispute) {
|
|
183
|
+
const days = (0, queries_js_1.calculateDaysOpen)(dispute.created_at);
|
|
184
|
+
if (days === 0) {
|
|
185
|
+
return 'Today';
|
|
186
|
+
}
|
|
187
|
+
else if (days === 1) {
|
|
188
|
+
return '1 day ago';
|
|
189
|
+
}
|
|
190
|
+
else if (days < 7) {
|
|
191
|
+
return `${days} days ago`;
|
|
192
|
+
}
|
|
193
|
+
else if (days < 14) {
|
|
194
|
+
return '1 week ago';
|
|
195
|
+
}
|
|
196
|
+
else if (days < 30) {
|
|
197
|
+
const weeks = Math.floor(days / 7);
|
|
198
|
+
return `${weeks} weeks ago`;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
const months = Math.floor(days / 30);
|
|
202
|
+
return months === 1 ? '1 month ago' : `${months} months ago`;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=stale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stale.js","sourceRoot":"","sources":["../../src/disputes/stale.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispute types and interfaces
|
|
3
|
+
*
|
|
4
|
+
* Disputes occur when coder and reviewer fundamentally disagree about
|
|
5
|
+
* implementation. The dispute system treats tasks as effectively complete
|
|
6
|
+
* and records both positions for optional human review.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Type of dispute
|
|
10
|
+
* - major: Blocks task, requires human resolution
|
|
11
|
+
* - minor: Logged only, continues with coder's implementation
|
|
12
|
+
* - coder: Coder disputes reviewer's rejection
|
|
13
|
+
* - reviewer: Reviewer raises concern
|
|
14
|
+
* - system: Auto-created after 15 rejections
|
|
15
|
+
*/
|
|
16
|
+
export type DisputeType = 'major' | 'minor' | 'coder' | 'reviewer' | 'system';
|
|
17
|
+
export declare const DISPUTE_TYPES: readonly DisputeType[];
|
|
18
|
+
/**
|
|
19
|
+
* Standard reasons for disputes
|
|
20
|
+
*/
|
|
21
|
+
export type DisputeReason = 'architecture' | 'specification' | 'approach' | 'requirements' | 'style' | 'security' | 'scope' | 'other';
|
|
22
|
+
export declare const DISPUTE_REASONS: readonly DisputeReason[];
|
|
23
|
+
/**
|
|
24
|
+
* Human-readable descriptions for dispute reasons
|
|
25
|
+
*/
|
|
26
|
+
export declare const DISPUTE_REASON_DESCRIPTIONS: Record<DisputeReason, string>;
|
|
27
|
+
/**
|
|
28
|
+
* Status of a dispute
|
|
29
|
+
*/
|
|
30
|
+
export type DisputeStatus = 'open' | 'resolved';
|
|
31
|
+
/**
|
|
32
|
+
* Resolution decision for a dispute
|
|
33
|
+
*/
|
|
34
|
+
export type ResolutionDecision = 'coder' | 'reviewer' | 'custom';
|
|
35
|
+
/**
|
|
36
|
+
* Full dispute record from database
|
|
37
|
+
*/
|
|
38
|
+
export interface Dispute {
|
|
39
|
+
id: string;
|
|
40
|
+
task_id: string;
|
|
41
|
+
type: DisputeType;
|
|
42
|
+
status: DisputeStatus;
|
|
43
|
+
reason: DisputeReason | string;
|
|
44
|
+
coder_position: string | null;
|
|
45
|
+
reviewer_position: string | null;
|
|
46
|
+
resolution: ResolutionDecision | null;
|
|
47
|
+
resolution_notes: string | null;
|
|
48
|
+
created_by: string;
|
|
49
|
+
resolved_by: string | null;
|
|
50
|
+
created_at: string;
|
|
51
|
+
resolved_at: string | null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Input for creating a new dispute
|
|
55
|
+
*/
|
|
56
|
+
export interface CreateDisputeInput {
|
|
57
|
+
taskId: string;
|
|
58
|
+
type: DisputeType;
|
|
59
|
+
reason: DisputeReason | string;
|
|
60
|
+
position: string;
|
|
61
|
+
createdBy: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Input for resolving a dispute
|
|
65
|
+
*/
|
|
66
|
+
export interface ResolveDisputeInput {
|
|
67
|
+
disputeId: string;
|
|
68
|
+
decision: ResolutionDecision;
|
|
69
|
+
notes?: string;
|
|
70
|
+
resolvedBy: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if a string is a valid dispute type
|
|
74
|
+
*/
|
|
75
|
+
export declare function isDisputeType(value: string): value is DisputeType;
|
|
76
|
+
/**
|
|
77
|
+
* Check if a string is a valid dispute reason
|
|
78
|
+
*/
|
|
79
|
+
export declare function isDisputeReason(value: string): value is DisputeReason;
|
|
80
|
+
/**
|
|
81
|
+
* Check if a string is a valid resolution decision
|
|
82
|
+
*/
|
|
83
|
+
export declare function isResolutionDecision(value: string): value is ResolutionDecision;
|
|
84
|
+
/**
|
|
85
|
+
* Get display marker for dispute type
|
|
86
|
+
*/
|
|
87
|
+
export declare function getDisputeTypeMarker(type: DisputeType): string;
|
|
88
|
+
/**
|
|
89
|
+
* Get human-readable description for dispute type
|
|
90
|
+
*/
|
|
91
|
+
export declare function getDisputeTypeDescription(type: DisputeType): string;
|
|
92
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/disputes/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE9E,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAMtC,CAAC;AAIX;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,eAAe,GACf,UAAU,GACV,cAAc,GACd,OAAO,GACP,UAAU,GACV,OAAO,GACP,OAAO,CAAC;AAEZ,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAS1C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CASrE,CAAC;AAIF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;AAIhD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAIjE;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAID;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAID;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAErE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,kBAAkB,CAE/E;AAID;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAa9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAanE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dispute types and interfaces
|
|
4
|
+
*
|
|
5
|
+
* Disputes occur when coder and reviewer fundamentally disagree about
|
|
6
|
+
* implementation. The dispute system treats tasks as effectively complete
|
|
7
|
+
* and records both positions for optional human review.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.DISPUTE_REASON_DESCRIPTIONS = exports.DISPUTE_REASONS = exports.DISPUTE_TYPES = void 0;
|
|
11
|
+
exports.isDisputeType = isDisputeType;
|
|
12
|
+
exports.isDisputeReason = isDisputeReason;
|
|
13
|
+
exports.isResolutionDecision = isResolutionDecision;
|
|
14
|
+
exports.getDisputeTypeMarker = getDisputeTypeMarker;
|
|
15
|
+
exports.getDisputeTypeDescription = getDisputeTypeDescription;
|
|
16
|
+
exports.DISPUTE_TYPES = [
|
|
17
|
+
'major',
|
|
18
|
+
'minor',
|
|
19
|
+
'coder',
|
|
20
|
+
'reviewer',
|
|
21
|
+
'system',
|
|
22
|
+
];
|
|
23
|
+
exports.DISPUTE_REASONS = [
|
|
24
|
+
'architecture',
|
|
25
|
+
'specification',
|
|
26
|
+
'approach',
|
|
27
|
+
'requirements',
|
|
28
|
+
'style',
|
|
29
|
+
'security',
|
|
30
|
+
'scope',
|
|
31
|
+
'other',
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Human-readable descriptions for dispute reasons
|
|
35
|
+
*/
|
|
36
|
+
exports.DISPUTE_REASON_DESCRIPTIONS = {
|
|
37
|
+
architecture: 'Architectural disagreement - different technical approaches',
|
|
38
|
+
specification: 'Specification ambiguity - unclear requirements',
|
|
39
|
+
approach: 'Different valid approaches to implementation',
|
|
40
|
+
requirements: 'Unclear or conflicting requirements',
|
|
41
|
+
style: 'Style/convention disagreement',
|
|
42
|
+
security: 'Security concern or vulnerability',
|
|
43
|
+
scope: 'Scope disagreement - what is in/out of scope',
|
|
44
|
+
other: 'Other reason (custom explanation)',
|
|
45
|
+
};
|
|
46
|
+
// ============ Type Guards ============
|
|
47
|
+
/**
|
|
48
|
+
* Check if a string is a valid dispute type
|
|
49
|
+
*/
|
|
50
|
+
function isDisputeType(value) {
|
|
51
|
+
return exports.DISPUTE_TYPES.includes(value);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if a string is a valid dispute reason
|
|
55
|
+
*/
|
|
56
|
+
function isDisputeReason(value) {
|
|
57
|
+
return exports.DISPUTE_REASONS.includes(value);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a string is a valid resolution decision
|
|
61
|
+
*/
|
|
62
|
+
function isResolutionDecision(value) {
|
|
63
|
+
return ['coder', 'reviewer', 'custom'].includes(value);
|
|
64
|
+
}
|
|
65
|
+
// ============ Display Helpers ============
|
|
66
|
+
/**
|
|
67
|
+
* Get display marker for dispute type
|
|
68
|
+
*/
|
|
69
|
+
function getDisputeTypeMarker(type) {
|
|
70
|
+
switch (type) {
|
|
71
|
+
case 'major':
|
|
72
|
+
return '[!!]';
|
|
73
|
+
case 'minor':
|
|
74
|
+
return '[~]';
|
|
75
|
+
case 'coder':
|
|
76
|
+
return '[C]';
|
|
77
|
+
case 'reviewer':
|
|
78
|
+
return '[R]';
|
|
79
|
+
case 'system':
|
|
80
|
+
return '[S]';
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get human-readable description for dispute type
|
|
85
|
+
*/
|
|
86
|
+
function getDisputeTypeDescription(type) {
|
|
87
|
+
switch (type) {
|
|
88
|
+
case 'major':
|
|
89
|
+
return 'Major dispute - blocks task, requires human resolution';
|
|
90
|
+
case 'minor':
|
|
91
|
+
return 'Minor dispute - logged only, continues with coder implementation';
|
|
92
|
+
case 'coder':
|
|
93
|
+
return 'Coder disputes reviewer rejection';
|
|
94
|
+
case 'reviewer':
|
|
95
|
+
return 'Reviewer raises concern';
|
|
96
|
+
case 'system':
|
|
97
|
+
return 'System-created after 15 rejections';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/disputes/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AA+HH,sCAEC;AAKD,0CAEC;AAKD,oDAEC;AAOD,oDAaC;AAKD,8DAaC;AAvKY,QAAA,aAAa,GAA2B;IACnD,OAAO;IACP,OAAO;IACP,OAAO;IACP,UAAU;IACV,QAAQ;CACA,CAAC;AAiBE,QAAA,eAAe,GAA6B;IACvD,cAAc;IACd,eAAe;IACf,UAAU;IACV,cAAc;IACd,OAAO;IACP,UAAU;IACV,OAAO;IACP,OAAO;CACC,CAAC;AAEX;;GAEG;AACU,QAAA,2BAA2B,GAAkC;IACxE,YAAY,EAAE,6DAA6D;IAC3E,aAAa,EAAE,gDAAgD;IAC/D,QAAQ,EAAE,8CAA8C;IACxD,YAAY,EAAE,qCAAqC;IACnD,KAAK,EAAE,+BAA+B;IACtC,QAAQ,EAAE,mCAAmC;IAC7C,KAAK,EAAE,8CAA8C;IACrD,KAAK,EAAE,mCAAmC;CAC3C,CAAC;AA8DF,wCAAwC;AAExC;;GAEG;AACH,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAQ,qBAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAa;IAC3C,OAAQ,uBAAqC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,KAAa;IAChD,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,4CAA4C;AAE5C;;GAEG;AACH,SAAgB,oBAAoB,CAAC,IAAiB;IACpD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,UAAU;YACb,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,IAAiB;IACzD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,wDAAwD,CAAC;QAClE,KAAK,OAAO;YACV,OAAO,kEAAkE,CAAC;QAC5E,KAAK,OAAO;YACV,OAAO,mCAAmC,CAAC;QAC7C,KAAK,UAAU;YACb,OAAO,yBAAyB,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,oCAAoC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git push operations
|
|
3
|
+
* Handles pushing completed work with resilience
|
|
4
|
+
*/
|
|
5
|
+
export interface PushResult {
|
|
6
|
+
success: boolean;
|
|
7
|
+
error?: string;
|
|
8
|
+
commitHash?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get the current commit hash
|
|
12
|
+
*/
|
|
13
|
+
export declare function getCurrentCommitHash(projectPath?: string): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Push to remote repository
|
|
16
|
+
*/
|
|
17
|
+
export declare function pushToRemote(projectPath?: string, remote?: string, branch?: string): PushResult;
|
|
18
|
+
/**
|
|
19
|
+
* Get remote URL for logging
|
|
20
|
+
*/
|
|
21
|
+
export declare function getRemoteUrl(projectPath?: string, remote?: string): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Check if we're on a branch that tracks a remote
|
|
24
|
+
*/
|
|
25
|
+
export declare function hasRemoteTracking(projectPath?: string): boolean;
|
|
26
|
+
//# sourceMappingURL=push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/git/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,GAAE,MAAsB,GAClC,MAAM,GAAG,IAAI,CAUf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,WAAW,GAAE,MAAsB,EACnC,MAAM,GAAE,MAAiB,EACzB,MAAM,GAAE,MAAe,GACtB,UAAU,CAqCZ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,WAAW,GAAE,MAAsB,EACnC,MAAM,GAAE,MAAiB,GACxB,MAAM,GAAG,IAAI,CAUf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,GAAE,MAAsB,GAClC,OAAO,CAWT"}
|
package/dist/git/push.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Git push operations
|
|
4
|
+
* Handles pushing completed work with resilience
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getCurrentCommitHash = getCurrentCommitHash;
|
|
8
|
+
exports.pushToRemote = pushToRemote;
|
|
9
|
+
exports.getRemoteUrl = getRemoteUrl;
|
|
10
|
+
exports.hasRemoteTracking = hasRemoteTracking;
|
|
11
|
+
const node_child_process_1 = require("node:child_process");
|
|
12
|
+
/**
|
|
13
|
+
* Get the current commit hash
|
|
14
|
+
*/
|
|
15
|
+
function getCurrentCommitHash(projectPath = process.cwd()) {
|
|
16
|
+
try {
|
|
17
|
+
return (0, node_child_process_1.execSync)('git rev-parse HEAD', {
|
|
18
|
+
cwd: projectPath,
|
|
19
|
+
encoding: 'utf-8',
|
|
20
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
21
|
+
}).trim();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Push to remote repository
|
|
29
|
+
*/
|
|
30
|
+
function pushToRemote(projectPath = process.cwd(), remote = 'origin', branch = 'main') {
|
|
31
|
+
try {
|
|
32
|
+
(0, node_child_process_1.execSync)(`git push ${remote} ${branch}`, {
|
|
33
|
+
cwd: projectPath,
|
|
34
|
+
encoding: 'utf-8',
|
|
35
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
36
|
+
timeout: 120_000, // 2 minute timeout
|
|
37
|
+
});
|
|
38
|
+
const commitHash = getCurrentCommitHash(projectPath);
|
|
39
|
+
console.log(`Successfully pushed to ${remote}/${branch}`);
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
commitHash: commitHash ?? undefined,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const err = error;
|
|
47
|
+
const errorMsg = err.stderr ?? err.message ?? 'Unknown push error';
|
|
48
|
+
console.error(`Push failed: ${errorMsg}`);
|
|
49
|
+
// Classify the error
|
|
50
|
+
const lowerError = errorMsg.toLowerCase();
|
|
51
|
+
if (lowerError.includes('non-fast-forward') || lowerError.includes('rejected')) {
|
|
52
|
+
console.warn('Push rejected due to conflict. Human intervention required.');
|
|
53
|
+
}
|
|
54
|
+
else if (lowerError.includes('connection') || lowerError.includes('timeout')) {
|
|
55
|
+
console.warn('Network error. Will retry on next task completion.');
|
|
56
|
+
}
|
|
57
|
+
else if (lowerError.includes('auth')) {
|
|
58
|
+
console.warn('Authentication error. Check git credentials.');
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
error: errorMsg,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get remote URL for logging
|
|
68
|
+
*/
|
|
69
|
+
function getRemoteUrl(projectPath = process.cwd(), remote = 'origin') {
|
|
70
|
+
try {
|
|
71
|
+
return (0, node_child_process_1.execSync)(`git remote get-url ${remote}`, {
|
|
72
|
+
cwd: projectPath,
|
|
73
|
+
encoding: 'utf-8',
|
|
74
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
75
|
+
}).trim();
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if we're on a branch that tracks a remote
|
|
83
|
+
*/
|
|
84
|
+
function hasRemoteTracking(projectPath = process.cwd()) {
|
|
85
|
+
try {
|
|
86
|
+
(0, node_child_process_1.execSync)('git rev-parse --abbrev-ref --symbolic-full-name @{u}', {
|
|
87
|
+
cwd: projectPath,
|
|
88
|
+
encoding: 'utf-8',
|
|
89
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
90
|
+
});
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/git/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git status and diff utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Get the current HEAD commit SHA
|
|
6
|
+
*/
|
|
7
|
+
export declare function getCurrentCommitSha(projectPath?: string): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* Get short (7 char) commit SHA
|
|
10
|
+
*/
|
|
11
|
+
export declare function getShortCommitSha(projectPath?: string): string | null;
|
|
12
|
+
/**
|
|
13
|
+
* Get git status output
|
|
14
|
+
*/
|
|
15
|
+
export declare function getGitStatus(projectPath?: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Get git diff output
|
|
18
|
+
*/
|
|
19
|
+
export declare function getGitDiff(projectPath?: string, ref?: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get list of modified files
|
|
22
|
+
*/
|
|
23
|
+
export declare function getModifiedFiles(projectPath?: string, ref?: string): string[];
|
|
24
|
+
/**
|
|
25
|
+
* Check if there are uncommitted changes
|
|
26
|
+
*/
|
|
27
|
+
export declare function hasUncommittedChanges(projectPath?: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Check if we're in a git repository
|
|
30
|
+
*/
|
|
31
|
+
export declare function isGitRepo(projectPath?: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Find the commit hash for a task by searching commit messages
|
|
34
|
+
* Returns the most recent commit that mentions the task title
|
|
35
|
+
*/
|
|
36
|
+
export declare function findTaskCommit(projectPath: string, taskTitle: string): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Get the diff of a specific commit
|
|
39
|
+
*/
|
|
40
|
+
export declare function getCommitDiff(projectPath: string, commitHash: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Get files changed in a specific commit
|
|
43
|
+
*/
|
|
44
|
+
export declare function getCommitFiles(projectPath: string, commitHash: string): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Check if a specific file is tracked by git
|
|
47
|
+
*/
|
|
48
|
+
export declare function isFileTracked(filePath: string, projectPath?: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Check if a specific file has uncommitted changes (staged or unstaged)
|
|
51
|
+
*/
|
|
52
|
+
export declare function isFileDirty(filePath: string, projectPath?: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Get the SHA of the most recent commit that modified a file
|
|
55
|
+
*/
|
|
56
|
+
export declare function getFileLastCommit(filePath: string, projectPath?: string): string | null;
|
|
57
|
+
/**
|
|
58
|
+
* Get the git blob hash of a file at HEAD (content-addressable hash)
|
|
59
|
+
*/
|
|
60
|
+
export declare function getFileContentHash(filePath: string, projectPath?: string): string | null;
|
|
61
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/git/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAUtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAUpF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,CAUxE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,WAAW,GAAE,MAAsB,EACnC,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAYR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,GAAE,MAAsB,EACnC,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,EAAE,CAYV;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,GAAE,MAAsB,GAClC,OAAO,CAGT;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAWtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CA+Bf;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAWV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAsB,GAClC,MAAM,GAAG,IAAI,CAUf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAsB,GAClC,MAAM,GAAG,IAAI,CAUf"}
|