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,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hook Payload Schemas
|
|
4
|
+
*
|
|
5
|
+
* Defines the payload structures for each hook event type.
|
|
6
|
+
* Payloads contain all context needed by hook handlers.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createTaskCreatedPayload = createTaskCreatedPayload;
|
|
10
|
+
exports.createTaskUpdatedPayload = createTaskUpdatedPayload;
|
|
11
|
+
exports.createTaskCompletedPayload = createTaskCompletedPayload;
|
|
12
|
+
exports.createTaskFailedPayload = createTaskFailedPayload;
|
|
13
|
+
exports.createSectionCompletedPayload = createSectionCompletedPayload;
|
|
14
|
+
exports.createProjectCompletedPayload = createProjectCompletedPayload;
|
|
15
|
+
exports.createHealthChangedPayload = createHealthChangedPayload;
|
|
16
|
+
exports.createHealthCriticalPayload = createHealthCriticalPayload;
|
|
17
|
+
exports.createDisputeCreatedPayload = createDisputeCreatedPayload;
|
|
18
|
+
exports.createDisputeResolvedPayload = createDisputeResolvedPayload;
|
|
19
|
+
exports.validatePayload = validatePayload;
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Payload Factory Functions
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Create a base payload with common fields
|
|
25
|
+
*/
|
|
26
|
+
function createBasePayload(event) {
|
|
27
|
+
return {
|
|
28
|
+
event,
|
|
29
|
+
timestamp: new Date().toISOString(),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a task.created payload
|
|
34
|
+
*/
|
|
35
|
+
function createTaskCreatedPayload(task, project) {
|
|
36
|
+
return {
|
|
37
|
+
...createBasePayload('task.created'),
|
|
38
|
+
task,
|
|
39
|
+
project,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a task.updated payload
|
|
44
|
+
*/
|
|
45
|
+
function createTaskUpdatedPayload(task, project) {
|
|
46
|
+
return {
|
|
47
|
+
...createBasePayload('task.updated'),
|
|
48
|
+
task,
|
|
49
|
+
project,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create a task.completed payload
|
|
54
|
+
*/
|
|
55
|
+
function createTaskCompletedPayload(task, project) {
|
|
56
|
+
return {
|
|
57
|
+
...createBasePayload('task.completed'),
|
|
58
|
+
task,
|
|
59
|
+
project,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Create a task.failed payload
|
|
64
|
+
*/
|
|
65
|
+
function createTaskFailedPayload(task, project, maxRejections) {
|
|
66
|
+
return {
|
|
67
|
+
...createBasePayload('task.failed'),
|
|
68
|
+
task,
|
|
69
|
+
project,
|
|
70
|
+
maxRejections,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create a section.completed payload
|
|
75
|
+
*/
|
|
76
|
+
function createSectionCompletedPayload(section, tasks, project) {
|
|
77
|
+
return {
|
|
78
|
+
...createBasePayload('section.completed'),
|
|
79
|
+
section,
|
|
80
|
+
tasks,
|
|
81
|
+
project,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Create a project.completed payload
|
|
86
|
+
*/
|
|
87
|
+
function createProjectCompletedPayload(project, summary) {
|
|
88
|
+
return {
|
|
89
|
+
...createBasePayload('project.completed'),
|
|
90
|
+
project,
|
|
91
|
+
summary,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a health.changed payload
|
|
96
|
+
*/
|
|
97
|
+
function createHealthChangedPayload(project, health) {
|
|
98
|
+
return {
|
|
99
|
+
...createBasePayload('health.changed'),
|
|
100
|
+
project,
|
|
101
|
+
health,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Create a health.critical payload
|
|
106
|
+
*/
|
|
107
|
+
function createHealthCriticalPayload(project, health, threshold) {
|
|
108
|
+
return {
|
|
109
|
+
...createBasePayload('health.critical'),
|
|
110
|
+
project,
|
|
111
|
+
health,
|
|
112
|
+
threshold,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create a dispute.created payload
|
|
117
|
+
*/
|
|
118
|
+
function createDisputeCreatedPayload(dispute, task, project) {
|
|
119
|
+
return {
|
|
120
|
+
...createBasePayload('dispute.created'),
|
|
121
|
+
dispute,
|
|
122
|
+
task,
|
|
123
|
+
project,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Create a dispute.resolved payload
|
|
128
|
+
*/
|
|
129
|
+
function createDisputeResolvedPayload(dispute, task, project) {
|
|
130
|
+
return {
|
|
131
|
+
...createBasePayload('dispute.resolved'),
|
|
132
|
+
dispute,
|
|
133
|
+
task,
|
|
134
|
+
project,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
// ============================================================================
|
|
138
|
+
// Payload Validation
|
|
139
|
+
// ============================================================================
|
|
140
|
+
/**
|
|
141
|
+
* Validate that a payload has required fields for its event type
|
|
142
|
+
*/
|
|
143
|
+
function validatePayload(payload) {
|
|
144
|
+
const errors = [];
|
|
145
|
+
// Base validation
|
|
146
|
+
if (!payload.event) {
|
|
147
|
+
errors.push('Missing required field: event');
|
|
148
|
+
}
|
|
149
|
+
if (!payload.timestamp) {
|
|
150
|
+
errors.push('Missing required field: timestamp');
|
|
151
|
+
}
|
|
152
|
+
// Event-specific validation
|
|
153
|
+
switch (payload.event) {
|
|
154
|
+
case 'task.created':
|
|
155
|
+
case 'task.updated':
|
|
156
|
+
case 'task.completed':
|
|
157
|
+
case 'task.failed':
|
|
158
|
+
validateTaskPayload(payload, errors);
|
|
159
|
+
break;
|
|
160
|
+
case 'section.completed':
|
|
161
|
+
validateSectionPayload(payload, errors);
|
|
162
|
+
break;
|
|
163
|
+
case 'project.completed':
|
|
164
|
+
validateProjectPayload(payload, errors);
|
|
165
|
+
break;
|
|
166
|
+
case 'health.changed':
|
|
167
|
+
case 'health.critical':
|
|
168
|
+
validateHealthPayload(payload, errors);
|
|
169
|
+
break;
|
|
170
|
+
case 'dispute.created':
|
|
171
|
+
case 'dispute.resolved':
|
|
172
|
+
validateDisputePayload(payload, errors);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
valid: errors.length === 0,
|
|
177
|
+
errors,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function validateTaskPayload(payload, errors) {
|
|
181
|
+
if (!payload.task) {
|
|
182
|
+
errors.push('Missing required field: task');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (!payload.task.id) {
|
|
186
|
+
errors.push('Missing required field: task.id');
|
|
187
|
+
}
|
|
188
|
+
if (!payload.task.title) {
|
|
189
|
+
errors.push('Missing required field: task.title');
|
|
190
|
+
}
|
|
191
|
+
if (!payload.task.status) {
|
|
192
|
+
errors.push('Missing required field: task.status');
|
|
193
|
+
}
|
|
194
|
+
if (!payload.project) {
|
|
195
|
+
errors.push('Missing required field: project');
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function validateSectionPayload(payload, errors) {
|
|
199
|
+
if (!payload.section) {
|
|
200
|
+
errors.push('Missing required field: section');
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (!payload.section.id) {
|
|
204
|
+
errors.push('Missing required field: section.id');
|
|
205
|
+
}
|
|
206
|
+
if (!payload.section.name) {
|
|
207
|
+
errors.push('Missing required field: section.name');
|
|
208
|
+
}
|
|
209
|
+
if (!payload.project) {
|
|
210
|
+
errors.push('Missing required field: project');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function validateProjectPayload(payload, errors) {
|
|
214
|
+
if (!payload.project) {
|
|
215
|
+
errors.push('Missing required field: project');
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (!payload.project.name) {
|
|
219
|
+
errors.push('Missing required field: project.name');
|
|
220
|
+
}
|
|
221
|
+
if (!payload.project.path) {
|
|
222
|
+
errors.push('Missing required field: project.path');
|
|
223
|
+
}
|
|
224
|
+
if (!payload.summary) {
|
|
225
|
+
errors.push('Missing required field: summary');
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function validateHealthPayload(payload, errors) {
|
|
229
|
+
if (!payload.health) {
|
|
230
|
+
errors.push('Missing required field: health');
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (typeof payload.health.score !== 'number') {
|
|
234
|
+
errors.push('Missing or invalid field: health.score');
|
|
235
|
+
}
|
|
236
|
+
if (!payload.health.status) {
|
|
237
|
+
errors.push('Missing required field: health.status');
|
|
238
|
+
}
|
|
239
|
+
if (!payload.project) {
|
|
240
|
+
errors.push('Missing required field: project');
|
|
241
|
+
}
|
|
242
|
+
if (payload.event === 'health.critical') {
|
|
243
|
+
const criticalPayload = payload;
|
|
244
|
+
if (typeof criticalPayload.threshold !== 'number') {
|
|
245
|
+
errors.push('Missing required field: threshold');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function validateDisputePayload(payload, errors) {
|
|
250
|
+
if (!payload.dispute) {
|
|
251
|
+
errors.push('Missing required field: dispute');
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (!payload.dispute.id) {
|
|
255
|
+
errors.push('Missing required field: dispute.id');
|
|
256
|
+
}
|
|
257
|
+
if (!payload.dispute.taskId) {
|
|
258
|
+
errors.push('Missing required field: dispute.taskId');
|
|
259
|
+
}
|
|
260
|
+
if (!payload.task) {
|
|
261
|
+
errors.push('Missing required field: task');
|
|
262
|
+
}
|
|
263
|
+
if (!payload.project) {
|
|
264
|
+
errors.push('Missing required field: project');
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/hooks/payload.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAiTH,4DASC;AAKD,4DASC;AAKD,gEASC;AAKD,0DAWC;AAKD,sEAWC;AAKD,sEASC;AAKD,gEASC;AAKD,kEAWC;AAKD,kEAWC;AAKD,oEAWC;AASD,0CA2CC;AAtND,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;GAEG;AACH,SAAS,iBAAiB,CAAsB,KAAQ;IACtD,OAAO;QACL,KAAK;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CACtC,IAAc,EACd,OAAuB;IAEvB,OAAO;QACL,GAAG,iBAAiB,CAAC,cAAc,CAAC;QACpC,IAAI;QACJ,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CACtC,IAAc,EACd,OAAuB;IAEvB,OAAO;QACL,GAAG,iBAAiB,CAAC,cAAc,CAAC;QACpC,IAAI;QACJ,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CACxC,IAAc,EACd,OAAuB;IAEvB,OAAO;QACL,GAAG,iBAAiB,CAAC,gBAAgB,CAAC;QACtC,IAAI;QACJ,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CACrC,IAAc,EACd,OAAuB,EACvB,aAAqB;IAErB,OAAO;QACL,GAAG,iBAAiB,CAAC,aAAa,CAAC;QACnC,IAAI;QACJ,OAAO;QACP,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,6BAA6B,CAC3C,OAAoB,EACpB,KAAoB,EACpB,OAAuB;IAEvB,OAAO;QACL,GAAG,iBAAiB,CAAC,mBAAmB,CAAC;QACzC,OAAO;QACP,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,6BAA6B,CAC3C,OAAuB,EACvB,OAAuB;IAEvB,OAAO;QACL,GAAG,iBAAiB,CAAC,mBAAmB,CAAC;QACzC,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CACxC,OAAuB,EACvB,MAAkB;IAElB,OAAO;QACL,GAAG,iBAAiB,CAAC,gBAAgB,CAAC;QACtC,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CACzC,OAAuB,EACvB,MAAkB,EAClB,SAAiB;IAEjB,OAAO;QACL,GAAG,iBAAiB,CAAC,iBAAiB,CAAC;QACvC,OAAO;QACP,MAAM;QACN,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CACzC,OAAoB,EACpB,IAAc,EACd,OAAuB;IAEvB,OAAO;QACL,GAAG,iBAAiB,CAAC,iBAAiB,CAAC;QACvC,OAAO;QACP,IAAI;QACJ,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,4BAA4B,CAC1C,OAAoB,EACpB,IAAc,EACd,OAAuB;IAEvB,OAAO;QACL,GAAG,iBAAiB,CAAC,kBAAkB,CAAC;QACxC,OAAO;QACP,IAAI;QACJ,OAAO;KACR,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,eAAe,CAAC,OAAoB;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,kBAAkB;IAClB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,4BAA4B;IAC5B,QAAQ,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,gBAAgB,CAAC;QACtB,KAAK,aAAa;YAChB,mBAAmB,CAAC,OAA2B,EAAE,MAAM,CAAC,CAAC;YACzD,MAAM;QAER,KAAK,mBAAmB;YACtB,sBAAsB,CAAC,OAAkC,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM;QAER,KAAK,mBAAmB;YACtB,sBAAsB,CAAC,OAAkC,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM;QAER,KAAK,gBAAgB,CAAC;QACtB,KAAK,iBAAiB;YACpB,qBAAqB,CAAC,OAA6B,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM;QAER,KAAK,iBAAiB,CAAC;QACvB,KAAK,kBAAkB;YACrB,sBAAsB,CAAC,OAA8B,EAAE,MAAM,CAAC,CAAC;YAC/D,MAAM;IACV,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAyB,EAAE,MAAgB;IACtE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAgC,EAAE,MAAgB;IAChF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAgC,EAAE,MAAgB;IAChF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA2B,EAAE,MAAgB;IAC1E,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;QACxC,MAAM,eAAe,GAAG,OAAgC,CAAC;QACzD,IAAI,OAAO,eAAe,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,OAA4B,EAAE,MAAgB;IAC5E,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script Hook Runner
|
|
3
|
+
*
|
|
4
|
+
* Executes shell commands as hooks with timeout and async support.
|
|
5
|
+
* Handles templated arguments and environment variable resolution.
|
|
6
|
+
*/
|
|
7
|
+
import type { HookPayload } from './payload.js';
|
|
8
|
+
/**
|
|
9
|
+
* Script hook configuration
|
|
10
|
+
*/
|
|
11
|
+
export interface ScriptHookConfig {
|
|
12
|
+
/** Hook name (for logging) */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Command to execute */
|
|
15
|
+
command: string;
|
|
16
|
+
/** Arguments (supports templates) */
|
|
17
|
+
args?: string[];
|
|
18
|
+
/** Working directory (defaults to project path) */
|
|
19
|
+
cwd?: string;
|
|
20
|
+
/** Timeout (e.g., "60s", "5m", "1h" or number in seconds) */
|
|
21
|
+
timeout?: string | number;
|
|
22
|
+
/** Run async without blocking (default false) */
|
|
23
|
+
async?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Script execution result
|
|
27
|
+
*/
|
|
28
|
+
export interface ScriptResult {
|
|
29
|
+
/** Whether execution was successful */
|
|
30
|
+
success: boolean;
|
|
31
|
+
/** Exit code */
|
|
32
|
+
exitCode: number | null;
|
|
33
|
+
/** Standard output */
|
|
34
|
+
stdout: string;
|
|
35
|
+
/** Standard error */
|
|
36
|
+
stderr: string;
|
|
37
|
+
/** Execution time in milliseconds */
|
|
38
|
+
duration: number;
|
|
39
|
+
/** Error message if failed */
|
|
40
|
+
error?: string;
|
|
41
|
+
/** Whether execution timed out */
|
|
42
|
+
timedOut?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse timeout string (e.g., "60s", "5m") to milliseconds
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseTimeout(timeout: string | number | undefined): number;
|
|
48
|
+
/**
|
|
49
|
+
* Execute a script hook
|
|
50
|
+
*
|
|
51
|
+
* @param config - Script hook configuration
|
|
52
|
+
* @param payload - Hook event payload for template resolution
|
|
53
|
+
* @returns Promise resolving to script result
|
|
54
|
+
*/
|
|
55
|
+
export declare function executeScript(config: ScriptHookConfig, payload: HookPayload): Promise<ScriptResult>;
|
|
56
|
+
/**
|
|
57
|
+
* Validate script hook configuration
|
|
58
|
+
*/
|
|
59
|
+
export declare function validateScriptConfig(config: ScriptHookConfig): {
|
|
60
|
+
valid: boolean;
|
|
61
|
+
errors: string[];
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=script-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-runner.d.ts","sourceRoot":"","sources":["../../src/hooks/script-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CA2BzE;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,CA8CvB;AAiID;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG;IAC9D,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAuBA"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Script Hook Runner
|
|
4
|
+
*
|
|
5
|
+
* Executes shell commands as hooks with timeout and async support.
|
|
6
|
+
* Handles templated arguments and environment variable resolution.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.parseTimeout = parseTimeout;
|
|
10
|
+
exports.executeScript = executeScript;
|
|
11
|
+
exports.validateScriptConfig = validateScriptConfig;
|
|
12
|
+
const node_child_process_1 = require("node:child_process");
|
|
13
|
+
const templates_js_1 = require("./templates.js");
|
|
14
|
+
/**
|
|
15
|
+
* Parse timeout string (e.g., "60s", "5m") to milliseconds
|
|
16
|
+
*/
|
|
17
|
+
function parseTimeout(timeout) {
|
|
18
|
+
if (timeout === undefined) {
|
|
19
|
+
return 60000; // 60 seconds default
|
|
20
|
+
}
|
|
21
|
+
if (typeof timeout === 'number') {
|
|
22
|
+
return timeout * 1000; // Convert seconds to ms
|
|
23
|
+
}
|
|
24
|
+
const match = timeout.match(/^(\d+)(s|m|h)?$/);
|
|
25
|
+
if (!match) {
|
|
26
|
+
throw new Error(`Invalid timeout format: ${timeout}. Use format like "60s", "5m", "1h"`);
|
|
27
|
+
}
|
|
28
|
+
const value = parseInt(match[1], 10);
|
|
29
|
+
const unit = match[2] || 's';
|
|
30
|
+
switch (unit) {
|
|
31
|
+
case 's':
|
|
32
|
+
return value * 1000;
|
|
33
|
+
case 'm':
|
|
34
|
+
return value * 60 * 1000;
|
|
35
|
+
case 'h':
|
|
36
|
+
return value * 60 * 60 * 1000;
|
|
37
|
+
default:
|
|
38
|
+
return 60000;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Execute a script hook
|
|
43
|
+
*
|
|
44
|
+
* @param config - Script hook configuration
|
|
45
|
+
* @param payload - Hook event payload for template resolution
|
|
46
|
+
* @returns Promise resolving to script result
|
|
47
|
+
*/
|
|
48
|
+
async function executeScript(config, payload) {
|
|
49
|
+
const startTime = Date.now();
|
|
50
|
+
try {
|
|
51
|
+
// Create template context from payload
|
|
52
|
+
const context = (0, templates_js_1.createTemplateContext)(payload);
|
|
53
|
+
// Parse command (resolve env vars)
|
|
54
|
+
const command = (0, templates_js_1.parseTemplate)(config.command, context);
|
|
55
|
+
// Parse arguments (resolve both templates and env vars)
|
|
56
|
+
const args = (config.args || []).map((arg) => (0, templates_js_1.parseTemplate)(arg, context));
|
|
57
|
+
// Parse working directory (default to project path)
|
|
58
|
+
const cwd = config.cwd
|
|
59
|
+
? (0, templates_js_1.parseTemplate)(config.cwd, context)
|
|
60
|
+
: payload.project.path;
|
|
61
|
+
// Parse timeout
|
|
62
|
+
const timeoutMs = parseTimeout(config.timeout);
|
|
63
|
+
// Execute
|
|
64
|
+
if (config.async) {
|
|
65
|
+
// Fire and forget - don't wait for completion
|
|
66
|
+
spawnAsync(command, args, cwd, config.name);
|
|
67
|
+
return {
|
|
68
|
+
success: true,
|
|
69
|
+
exitCode: null,
|
|
70
|
+
stdout: '',
|
|
71
|
+
stderr: '',
|
|
72
|
+
duration: Date.now() - startTime,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Wait for completion
|
|
77
|
+
return await spawnSync(command, args, cwd, timeoutMs, startTime);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return {
|
|
82
|
+
success: false,
|
|
83
|
+
exitCode: null,
|
|
84
|
+
stdout: '',
|
|
85
|
+
stderr: '',
|
|
86
|
+
duration: Date.now() - startTime,
|
|
87
|
+
error: error instanceof Error ? error.message : String(error),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Spawn a process asynchronously (fire and forget)
|
|
93
|
+
*/
|
|
94
|
+
function spawnAsync(command, args, cwd, hookName) {
|
|
95
|
+
const child = (0, node_child_process_1.spawn)(command, args, {
|
|
96
|
+
cwd,
|
|
97
|
+
detached: true,
|
|
98
|
+
stdio: 'ignore',
|
|
99
|
+
shell: false,
|
|
100
|
+
});
|
|
101
|
+
// Detach from parent process
|
|
102
|
+
child.unref();
|
|
103
|
+
// Log errors if they occur (but don't block)
|
|
104
|
+
child.on('error', (error) => {
|
|
105
|
+
console.error(`[Hook ${hookName}] Async execution error:`, error.message);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Spawn a process synchronously (wait for completion)
|
|
110
|
+
*/
|
|
111
|
+
function spawnSync(command, args, cwd, timeoutMs, startTime) {
|
|
112
|
+
return new Promise((resolve) => {
|
|
113
|
+
let stdout = '';
|
|
114
|
+
let stderr = '';
|
|
115
|
+
let timedOut = false;
|
|
116
|
+
let hasResolved = false;
|
|
117
|
+
let killTimer = null;
|
|
118
|
+
// Spawn with args as separate argv entries to preserve args-with-spaces
|
|
119
|
+
const child = (0, node_child_process_1.spawn)(command, args, {
|
|
120
|
+
cwd,
|
|
121
|
+
shell: false,
|
|
122
|
+
});
|
|
123
|
+
// Capture stdout
|
|
124
|
+
child.stdout?.on('data', (data) => {
|
|
125
|
+
stdout += data.toString();
|
|
126
|
+
});
|
|
127
|
+
// Capture stderr
|
|
128
|
+
child.stderr?.on('data', (data) => {
|
|
129
|
+
stderr += data.toString();
|
|
130
|
+
});
|
|
131
|
+
// Handle timeout
|
|
132
|
+
const timeoutHandle = setTimeout(() => {
|
|
133
|
+
if (hasResolved)
|
|
134
|
+
return;
|
|
135
|
+
timedOut = true;
|
|
136
|
+
child.kill('SIGTERM');
|
|
137
|
+
// Force kill after 5 seconds if still running
|
|
138
|
+
// Note: child.killed becomes true immediately after kill(), so we check exitCode instead
|
|
139
|
+
killTimer = setTimeout(() => {
|
|
140
|
+
if (child.exitCode === null) {
|
|
141
|
+
try {
|
|
142
|
+
child.kill('SIGKILL');
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Process already exited, ignore ESRCH
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}, 5000);
|
|
149
|
+
killTimer.unref(); // Don't keep event loop alive
|
|
150
|
+
}, timeoutMs);
|
|
151
|
+
timeoutHandle.unref(); // Don't keep event loop alive
|
|
152
|
+
// Handle process exit
|
|
153
|
+
child.on('close', (code, signal) => {
|
|
154
|
+
if (hasResolved)
|
|
155
|
+
return;
|
|
156
|
+
hasResolved = true;
|
|
157
|
+
clearTimeout(timeoutHandle);
|
|
158
|
+
if (killTimer) {
|
|
159
|
+
clearTimeout(killTimer);
|
|
160
|
+
}
|
|
161
|
+
const result = {
|
|
162
|
+
success: !timedOut && code === 0,
|
|
163
|
+
exitCode: code,
|
|
164
|
+
stdout: stdout.trim(),
|
|
165
|
+
stderr: stderr.trim(),
|
|
166
|
+
duration: Date.now() - startTime,
|
|
167
|
+
};
|
|
168
|
+
if (timedOut) {
|
|
169
|
+
result.timedOut = true;
|
|
170
|
+
result.error = `Script execution timed out after ${timeoutMs}ms`;
|
|
171
|
+
}
|
|
172
|
+
else if (signal) {
|
|
173
|
+
result.error = `Process killed by signal: ${signal}`;
|
|
174
|
+
}
|
|
175
|
+
resolve(result);
|
|
176
|
+
});
|
|
177
|
+
// Handle spawn errors
|
|
178
|
+
child.on('error', (error) => {
|
|
179
|
+
if (hasResolved)
|
|
180
|
+
return;
|
|
181
|
+
hasResolved = true;
|
|
182
|
+
clearTimeout(timeoutHandle);
|
|
183
|
+
if (killTimer) {
|
|
184
|
+
clearTimeout(killTimer);
|
|
185
|
+
}
|
|
186
|
+
resolve({
|
|
187
|
+
success: false,
|
|
188
|
+
exitCode: null,
|
|
189
|
+
stdout: stdout.trim(),
|
|
190
|
+
stderr: stderr.trim(),
|
|
191
|
+
duration: Date.now() - startTime,
|
|
192
|
+
error: error.message,
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Validate script hook configuration
|
|
199
|
+
*/
|
|
200
|
+
function validateScriptConfig(config) {
|
|
201
|
+
const errors = [];
|
|
202
|
+
if (!config.name) {
|
|
203
|
+
errors.push('Missing required field: name');
|
|
204
|
+
}
|
|
205
|
+
if (!config.command) {
|
|
206
|
+
errors.push('Missing required field: command');
|
|
207
|
+
}
|
|
208
|
+
if (config.timeout !== undefined) {
|
|
209
|
+
try {
|
|
210
|
+
parseTimeout(config.timeout);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
errors.push(error instanceof Error ? error.message : String(error));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
valid: errors.length === 0,
|
|
218
|
+
errors,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=script-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-runner.js","sourceRoot":"","sources":["../../src/hooks/script-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Variable Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses and resolves template variables in hook configurations.
|
|
5
|
+
* Supports {{variable}} syntax for hook payloads and ${VAR} for environment variables.
|
|
6
|
+
*/
|
|
7
|
+
import type { HookPayload } from './payload.js';
|
|
8
|
+
/**
|
|
9
|
+
* Context for template variable resolution
|
|
10
|
+
*/
|
|
11
|
+
export interface TemplateContext {
|
|
12
|
+
/** Event name */
|
|
13
|
+
event: string;
|
|
14
|
+
/** ISO timestamp */
|
|
15
|
+
timestamp: string;
|
|
16
|
+
/** Task data (if task event) */
|
|
17
|
+
task?: {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
status: string;
|
|
21
|
+
section?: string | null;
|
|
22
|
+
sectionId?: string | null;
|
|
23
|
+
};
|
|
24
|
+
/** Section data (if section event) */
|
|
25
|
+
section?: {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
};
|
|
29
|
+
/** Project data */
|
|
30
|
+
project: {
|
|
31
|
+
name: string;
|
|
32
|
+
path: string;
|
|
33
|
+
};
|
|
34
|
+
/** Health data (if health event) */
|
|
35
|
+
health?: {
|
|
36
|
+
score: number;
|
|
37
|
+
previousScore?: number;
|
|
38
|
+
status: string;
|
|
39
|
+
};
|
|
40
|
+
/** Dispute data (if dispute event) */
|
|
41
|
+
dispute?: {
|
|
42
|
+
id: string;
|
|
43
|
+
taskId: string;
|
|
44
|
+
type: string;
|
|
45
|
+
status: string;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parse template variables in a string
|
|
50
|
+
*
|
|
51
|
+
* @param template - String containing {{variable}} placeholders
|
|
52
|
+
* @param context - Context for variable resolution
|
|
53
|
+
* @returns Parsed string with variables replaced
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseTemplate(template: string, context: TemplateContext): string;
|
|
56
|
+
/**
|
|
57
|
+
* Parse template variables in an object (recursively)
|
|
58
|
+
*
|
|
59
|
+
* @param obj - Object containing template strings
|
|
60
|
+
* @param context - Context for variable resolution
|
|
61
|
+
* @returns New object with templates parsed
|
|
62
|
+
*/
|
|
63
|
+
export declare function parseTemplateObject<T>(obj: T, context: TemplateContext): T;
|
|
64
|
+
/**
|
|
65
|
+
* Resolve environment variables (${VAR_NAME})
|
|
66
|
+
*
|
|
67
|
+
* @param text - String containing ${VAR} placeholders
|
|
68
|
+
* @returns String with env vars replaced
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveEnvVars(text: string): string;
|
|
71
|
+
/**
|
|
72
|
+
* Resolve a single template variable path
|
|
73
|
+
*
|
|
74
|
+
* @param path - Variable path (e.g., "task.title", "project.name")
|
|
75
|
+
* @param context - Template context
|
|
76
|
+
* @returns Resolved value or undefined
|
|
77
|
+
*/
|
|
78
|
+
export declare function resolveVariable(path: string, context: TemplateContext): string | number | boolean | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* Create template context from hook payload
|
|
81
|
+
*
|
|
82
|
+
* @param payload - Hook event payload
|
|
83
|
+
* @returns Template context for variable resolution
|
|
84
|
+
*/
|
|
85
|
+
export declare function createTemplateContext(payload: HookPayload): TemplateContext;
|
|
86
|
+
/**
|
|
87
|
+
* Get all available variables for a given event type
|
|
88
|
+
*
|
|
89
|
+
* @param event - Event name
|
|
90
|
+
* @returns List of available variable paths
|
|
91
|
+
*/
|
|
92
|
+
export declare function getAvailableVariables(event: string): string[];
|
|
93
|
+
/**
|
|
94
|
+
* Validate that all template variables in a string are valid for the event
|
|
95
|
+
*
|
|
96
|
+
* @param template - Template string
|
|
97
|
+
* @param event - Event name
|
|
98
|
+
* @returns Validation result with invalid variables
|
|
99
|
+
*/
|
|
100
|
+
export declare function validateTemplate(template: string, event: string): {
|
|
101
|
+
valid: boolean;
|
|
102
|
+
invalidVars: string[];
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/hooks/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAYhD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;IACF,sCAAsC;IACtC,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,mBAAmB;IACnB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,oCAAoC;IACpC,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,sCAAsC;IACtC,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAWhF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,GAAG,CAAC,CAkB1E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,GACvB,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAgCvC;AAkHD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAyD3E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAwC7D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAgB3C"}
|