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,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Registry
|
|
3
|
+
* Manages registration and discovery of AI providers
|
|
4
|
+
*/
|
|
5
|
+
import type { IAIProvider } from './interface.js';
|
|
6
|
+
/**
|
|
7
|
+
* Provider availability status
|
|
8
|
+
*/
|
|
9
|
+
export interface ProviderStatus {
|
|
10
|
+
/** Provider name */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Human-readable display name */
|
|
13
|
+
displayName: string;
|
|
14
|
+
/** Whether the provider is available */
|
|
15
|
+
available: boolean;
|
|
16
|
+
/** Path to CLI if available */
|
|
17
|
+
cliPath?: string;
|
|
18
|
+
/** Available models */
|
|
19
|
+
models: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Provider Registry
|
|
23
|
+
* Central registry for all AI providers
|
|
24
|
+
*/
|
|
25
|
+
export declare class ProviderRegistry {
|
|
26
|
+
private providers;
|
|
27
|
+
/**
|
|
28
|
+
* Register a provider
|
|
29
|
+
*/
|
|
30
|
+
register(provider: IAIProvider): void;
|
|
31
|
+
/**
|
|
32
|
+
* Unregister a provider
|
|
33
|
+
*/
|
|
34
|
+
unregister(name: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Get a provider by name
|
|
37
|
+
* @throws Error if provider not found
|
|
38
|
+
*/
|
|
39
|
+
get(name: string): IAIProvider;
|
|
40
|
+
/**
|
|
41
|
+
* Try to get a provider by name
|
|
42
|
+
* Returns undefined if not found
|
|
43
|
+
*/
|
|
44
|
+
tryGet(name: string): IAIProvider | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Check if a provider is registered
|
|
47
|
+
*/
|
|
48
|
+
has(name: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Get all registered provider names
|
|
51
|
+
*/
|
|
52
|
+
getNames(): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Get all registered providers
|
|
55
|
+
*/
|
|
56
|
+
getAll(): IAIProvider[];
|
|
57
|
+
/**
|
|
58
|
+
* Get status of all providers
|
|
59
|
+
* Checks availability of each provider
|
|
60
|
+
*/
|
|
61
|
+
getStatus(): Promise<ProviderStatus[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Get only available providers
|
|
64
|
+
*/
|
|
65
|
+
getAvailable(): Promise<IAIProvider[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Detect and return status of all providers
|
|
68
|
+
* Useful for setup wizards
|
|
69
|
+
*/
|
|
70
|
+
detect(): Promise<ProviderStatus[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Validate that a provider and model combination is valid
|
|
73
|
+
*/
|
|
74
|
+
validateProviderModel(providerName: string, model: string): void;
|
|
75
|
+
/**
|
|
76
|
+
* Get the default provider for a role
|
|
77
|
+
* Returns the first available provider that has a default model for the role
|
|
78
|
+
*/
|
|
79
|
+
getDefaultProvider(role: 'orchestrator' | 'coder' | 'reviewer'): Promise<IAIProvider | undefined>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create a registry with default providers registered
|
|
83
|
+
*/
|
|
84
|
+
export declare function createDefaultRegistry(): ProviderRegistry;
|
|
85
|
+
/**
|
|
86
|
+
* Get the global provider registry
|
|
87
|
+
* Creates a default registry if none exists
|
|
88
|
+
*/
|
|
89
|
+
export declare function getProviderRegistry(): ProviderRegistry;
|
|
90
|
+
/**
|
|
91
|
+
* Set the global provider registry
|
|
92
|
+
* Useful for testing
|
|
93
|
+
*/
|
|
94
|
+
export declare function setProviderRegistry(registry: ProviderRegistry): void;
|
|
95
|
+
/**
|
|
96
|
+
* Reset the global provider registry
|
|
97
|
+
* Useful for testing
|
|
98
|
+
*/
|
|
99
|
+
export declare function resetProviderRegistry(): void;
|
|
100
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAuC;IAExD;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAOrC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;;OAGG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAW9B;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI7C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,QAAQ,IAAI,MAAM,EAAE;IAIpB;;OAEG;IACH,MAAM,IAAI,WAAW,EAAE;IAIvB;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAiB5C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAY5C;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIzC;;OAEG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYhE;;;OAGG;IACG,kBAAkB,CACtB,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,UAAU,GAC1C,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;CAYpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAUxD;AAOD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAKtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAEpE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Provider Registry
|
|
4
|
+
* Manages registration and discovery of AI providers
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ProviderRegistry = void 0;
|
|
8
|
+
exports.createDefaultRegistry = createDefaultRegistry;
|
|
9
|
+
exports.getProviderRegistry = getProviderRegistry;
|
|
10
|
+
exports.setProviderRegistry = setProviderRegistry;
|
|
11
|
+
exports.resetProviderRegistry = resetProviderRegistry;
|
|
12
|
+
const claude_js_1 = require("./claude.js");
|
|
13
|
+
const codex_js_1 = require("./codex.js");
|
|
14
|
+
const gemini_js_1 = require("./gemini.js");
|
|
15
|
+
const openai_js_1 = require("./openai.js");
|
|
16
|
+
/**
|
|
17
|
+
* Provider Registry
|
|
18
|
+
* Central registry for all AI providers
|
|
19
|
+
*/
|
|
20
|
+
class ProviderRegistry {
|
|
21
|
+
providers = new Map();
|
|
22
|
+
/**
|
|
23
|
+
* Register a provider
|
|
24
|
+
*/
|
|
25
|
+
register(provider) {
|
|
26
|
+
if (this.providers.has(provider.name)) {
|
|
27
|
+
throw new Error(`Provider '${provider.name}' is already registered`);
|
|
28
|
+
}
|
|
29
|
+
this.providers.set(provider.name, provider);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Unregister a provider
|
|
33
|
+
*/
|
|
34
|
+
unregister(name) {
|
|
35
|
+
return this.providers.delete(name);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get a provider by name
|
|
39
|
+
* @throws Error if provider not found
|
|
40
|
+
*/
|
|
41
|
+
get(name) {
|
|
42
|
+
const provider = this.providers.get(name);
|
|
43
|
+
if (!provider) {
|
|
44
|
+
const available = Array.from(this.providers.keys()).join(', ');
|
|
45
|
+
throw new Error(`Provider '${name}' not found. Available providers: ${available || 'none'}`);
|
|
46
|
+
}
|
|
47
|
+
return provider;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Try to get a provider by name
|
|
51
|
+
* Returns undefined if not found
|
|
52
|
+
*/
|
|
53
|
+
tryGet(name) {
|
|
54
|
+
return this.providers.get(name);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if a provider is registered
|
|
58
|
+
*/
|
|
59
|
+
has(name) {
|
|
60
|
+
return this.providers.has(name);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get all registered provider names
|
|
64
|
+
*/
|
|
65
|
+
getNames() {
|
|
66
|
+
return Array.from(this.providers.keys());
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get all registered providers
|
|
70
|
+
*/
|
|
71
|
+
getAll() {
|
|
72
|
+
return Array.from(this.providers.values());
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get status of all providers
|
|
76
|
+
* Checks availability of each provider
|
|
77
|
+
*/
|
|
78
|
+
async getStatus() {
|
|
79
|
+
const statuses = [];
|
|
80
|
+
for (const provider of this.providers.values()) {
|
|
81
|
+
const available = await provider.isAvailable();
|
|
82
|
+
statuses.push({
|
|
83
|
+
name: provider.name,
|
|
84
|
+
displayName: provider.displayName,
|
|
85
|
+
available,
|
|
86
|
+
cliPath: provider.getCliPath(),
|
|
87
|
+
models: provider.listModels(),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return statuses;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get only available providers
|
|
94
|
+
*/
|
|
95
|
+
async getAvailable() {
|
|
96
|
+
const available = [];
|
|
97
|
+
for (const provider of this.providers.values()) {
|
|
98
|
+
if (await provider.isAvailable()) {
|
|
99
|
+
available.push(provider);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return available;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Detect and return status of all providers
|
|
106
|
+
* Useful for setup wizards
|
|
107
|
+
*/
|
|
108
|
+
async detect() {
|
|
109
|
+
return this.getStatus();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Validate that a provider and model combination is valid
|
|
113
|
+
*/
|
|
114
|
+
validateProviderModel(providerName, model) {
|
|
115
|
+
const provider = this.get(providerName);
|
|
116
|
+
const models = provider.listModels();
|
|
117
|
+
if (!models.includes(model)) {
|
|
118
|
+
throw new Error(`Model '${model}' not available for provider '${providerName}'. ` +
|
|
119
|
+
`Available models: ${models.join(', ')}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get the default provider for a role
|
|
124
|
+
* Returns the first available provider that has a default model for the role
|
|
125
|
+
*/
|
|
126
|
+
async getDefaultProvider(role) {
|
|
127
|
+
const available = await this.getAvailable();
|
|
128
|
+
for (const provider of available) {
|
|
129
|
+
const defaultModel = provider.getDefaultModel(role);
|
|
130
|
+
if (defaultModel) {
|
|
131
|
+
return provider;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return available[0]; // Fall back to first available
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.ProviderRegistry = ProviderRegistry;
|
|
138
|
+
/**
|
|
139
|
+
* Create a registry with default providers registered
|
|
140
|
+
*/
|
|
141
|
+
function createDefaultRegistry() {
|
|
142
|
+
const registry = new ProviderRegistry();
|
|
143
|
+
// Register built-in providers
|
|
144
|
+
registry.register(new claude_js_1.ClaudeProvider());
|
|
145
|
+
registry.register(new codex_js_1.CodexProvider());
|
|
146
|
+
registry.register(new gemini_js_1.GeminiProvider());
|
|
147
|
+
registry.register(new openai_js_1.OpenAIProvider());
|
|
148
|
+
return registry;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Global singleton registry instance
|
|
152
|
+
*/
|
|
153
|
+
let globalRegistry = null;
|
|
154
|
+
/**
|
|
155
|
+
* Get the global provider registry
|
|
156
|
+
* Creates a default registry if none exists
|
|
157
|
+
*/
|
|
158
|
+
function getProviderRegistry() {
|
|
159
|
+
if (!globalRegistry) {
|
|
160
|
+
globalRegistry = createDefaultRegistry();
|
|
161
|
+
}
|
|
162
|
+
return globalRegistry;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Set the global provider registry
|
|
166
|
+
* Useful for testing
|
|
167
|
+
*/
|
|
168
|
+
function setProviderRegistry(registry) {
|
|
169
|
+
globalRegistry = registry;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Reset the global provider registry
|
|
173
|
+
* Useful for testing
|
|
174
|
+
*/
|
|
175
|
+
function resetProviderRegistry() {
|
|
176
|
+
globalRegistry = null;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global activity log for task completions
|
|
3
|
+
* Tracks task terminal states across all projects
|
|
4
|
+
*/
|
|
5
|
+
export type ActivityStatus = 'completed' | 'failed' | 'skipped' | 'partial' | 'disputed';
|
|
6
|
+
export interface ActivityLogEntry {
|
|
7
|
+
id: number;
|
|
8
|
+
project_path: string;
|
|
9
|
+
runner_id: string;
|
|
10
|
+
task_id: string;
|
|
11
|
+
task_title: string;
|
|
12
|
+
section_name: string | null;
|
|
13
|
+
final_status: ActivityStatus;
|
|
14
|
+
commit_message: string | null;
|
|
15
|
+
commit_sha: string | null;
|
|
16
|
+
created_at: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Log a task reaching a terminal state
|
|
20
|
+
*/
|
|
21
|
+
export declare function logActivity(projectPath: string, runnerId: string, taskId: string, taskTitle: string, sectionName: string | null, finalStatus: ActivityStatus, commitMessage?: string | null, commitSha?: string | null): void;
|
|
22
|
+
/**
|
|
23
|
+
* Query activity log for entries since a given time
|
|
24
|
+
*/
|
|
25
|
+
export declare function getActivitySince(hoursAgo?: number): ActivityLogEntry[];
|
|
26
|
+
/**
|
|
27
|
+
* Query activity log with optional filters
|
|
28
|
+
*/
|
|
29
|
+
export declare function getActivityFiltered(options: {
|
|
30
|
+
hoursAgo?: number;
|
|
31
|
+
status?: ActivityStatus;
|
|
32
|
+
projectPath?: string;
|
|
33
|
+
limit?: number;
|
|
34
|
+
}): ActivityLogEntry[];
|
|
35
|
+
/**
|
|
36
|
+
* Stats aggregated by project
|
|
37
|
+
*/
|
|
38
|
+
export interface ProjectActivityStats {
|
|
39
|
+
project_path: string;
|
|
40
|
+
project_name: string | null;
|
|
41
|
+
completed: number;
|
|
42
|
+
failed: number;
|
|
43
|
+
skipped: number;
|
|
44
|
+
partial: number;
|
|
45
|
+
disputed: number;
|
|
46
|
+
total: number;
|
|
47
|
+
first_activity: string | null;
|
|
48
|
+
last_activity: string | null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get stats aggregated by project for a time range
|
|
52
|
+
*/
|
|
53
|
+
export declare function getActivityStatsByProject(hoursAgo?: number): ProjectActivityStats[];
|
|
54
|
+
/**
|
|
55
|
+
* Get total count of activity entries
|
|
56
|
+
*/
|
|
57
|
+
export declare function getActivityCount(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Purge activity log entries older than a given time
|
|
60
|
+
* @param keepHours If provided, delete entries older than this many hours
|
|
61
|
+
* If undefined, delete ALL entries
|
|
62
|
+
* @returns Number of entries deleted
|
|
63
|
+
*/
|
|
64
|
+
export declare function purgeActivity(keepHours?: number): number;
|
|
65
|
+
//# sourceMappingURL=activity-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-log.d.ts","sourceRoot":"","sources":["../../src/runners/activity-log.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,QAAQ,GACR,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,cAAc,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,WAAW,EAAE,cAAc,EAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,EAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,IAAI,CAWN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,GAAE,MAAW,GAAG,gBAAgB,EAAE,CAa1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,gBAAgB,EAAE,CAmCrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,GAAE,MAAW,GACpB,oBAAoB,EAAE,CA0BxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAUzC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBxD"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Global activity log for task completions
|
|
4
|
+
* Tracks task terminal states across all projects
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.logActivity = logActivity;
|
|
8
|
+
exports.getActivitySince = getActivitySince;
|
|
9
|
+
exports.getActivityFiltered = getActivityFiltered;
|
|
10
|
+
exports.getActivityStatsByProject = getActivityStatsByProject;
|
|
11
|
+
exports.getActivityCount = getActivityCount;
|
|
12
|
+
exports.purgeActivity = purgeActivity;
|
|
13
|
+
const global_db_js_1 = require("./global-db.js");
|
|
14
|
+
/**
|
|
15
|
+
* Log a task reaching a terminal state
|
|
16
|
+
*/
|
|
17
|
+
function logActivity(projectPath, runnerId, taskId, taskTitle, sectionName, finalStatus, commitMessage, commitSha) {
|
|
18
|
+
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
19
|
+
try {
|
|
20
|
+
db.prepare(`INSERT INTO activity_log
|
|
21
|
+
(project_path, runner_id, task_id, task_title, section_name, final_status, commit_message, commit_sha)
|
|
22
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(projectPath, runnerId, taskId, taskTitle, sectionName, finalStatus, commitMessage ?? null, commitSha ?? null);
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
close();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Query activity log for entries since a given time
|
|
30
|
+
*/
|
|
31
|
+
function getActivitySince(hoursAgo = 12) {
|
|
32
|
+
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
33
|
+
try {
|
|
34
|
+
return db
|
|
35
|
+
.prepare(`SELECT * FROM activity_log
|
|
36
|
+
WHERE created_at >= datetime('now', ? || ' hours')
|
|
37
|
+
ORDER BY created_at DESC`)
|
|
38
|
+
.all(`-${hoursAgo}`);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Query activity log with optional filters
|
|
46
|
+
*/
|
|
47
|
+
function getActivityFiltered(options) {
|
|
48
|
+
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
49
|
+
try {
|
|
50
|
+
const conditions = [];
|
|
51
|
+
const params = [];
|
|
52
|
+
if (options.hoursAgo) {
|
|
53
|
+
conditions.push(`created_at >= datetime('now', ? || ' hours')`);
|
|
54
|
+
params.push(`-${options.hoursAgo}`);
|
|
55
|
+
}
|
|
56
|
+
if (options.status) {
|
|
57
|
+
conditions.push(`final_status = ?`);
|
|
58
|
+
params.push(options.status);
|
|
59
|
+
}
|
|
60
|
+
if (options.projectPath) {
|
|
61
|
+
conditions.push(`project_path = ?`);
|
|
62
|
+
params.push(options.projectPath);
|
|
63
|
+
}
|
|
64
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
65
|
+
const limitClause = options.limit ? `LIMIT ${options.limit}` : '';
|
|
66
|
+
return db
|
|
67
|
+
.prepare(`SELECT * FROM activity_log
|
|
68
|
+
${whereClause}
|
|
69
|
+
ORDER BY created_at DESC
|
|
70
|
+
${limitClause}`)
|
|
71
|
+
.all(...params);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
close();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get stats aggregated by project for a time range
|
|
79
|
+
*/
|
|
80
|
+
function getActivityStatsByProject(hoursAgo = 12) {
|
|
81
|
+
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
82
|
+
try {
|
|
83
|
+
return db
|
|
84
|
+
.prepare(`SELECT
|
|
85
|
+
a.project_path,
|
|
86
|
+
p.name as project_name,
|
|
87
|
+
SUM(CASE WHEN a.final_status = 'completed' THEN 1 ELSE 0 END) as completed,
|
|
88
|
+
SUM(CASE WHEN a.final_status = 'failed' THEN 1 ELSE 0 END) as failed,
|
|
89
|
+
SUM(CASE WHEN a.final_status = 'skipped' THEN 1 ELSE 0 END) as skipped,
|
|
90
|
+
SUM(CASE WHEN a.final_status = 'partial' THEN 1 ELSE 0 END) as partial,
|
|
91
|
+
SUM(CASE WHEN a.final_status = 'disputed' THEN 1 ELSE 0 END) as disputed,
|
|
92
|
+
COUNT(*) as total,
|
|
93
|
+
MIN(a.created_at) as first_activity,
|
|
94
|
+
MAX(a.created_at) as last_activity
|
|
95
|
+
FROM activity_log a
|
|
96
|
+
LEFT JOIN projects p ON a.project_path = p.path
|
|
97
|
+
WHERE a.created_at >= datetime('now', ? || ' hours')
|
|
98
|
+
GROUP BY a.project_path
|
|
99
|
+
ORDER BY a.project_path`)
|
|
100
|
+
.all(`-${hoursAgo}`);
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
close();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get total count of activity entries
|
|
108
|
+
*/
|
|
109
|
+
function getActivityCount() {
|
|
110
|
+
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
111
|
+
try {
|
|
112
|
+
const row = db
|
|
113
|
+
.prepare('SELECT COUNT(*) as count FROM activity_log')
|
|
114
|
+
.get();
|
|
115
|
+
return row.count;
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
close();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Purge activity log entries older than a given time
|
|
123
|
+
* @param keepHours If provided, delete entries older than this many hours
|
|
124
|
+
* If undefined, delete ALL entries
|
|
125
|
+
* @returns Number of entries deleted
|
|
126
|
+
*/
|
|
127
|
+
function purgeActivity(keepHours) {
|
|
128
|
+
const { db, close } = (0, global_db_js_1.openGlobalDatabase)();
|
|
129
|
+
try {
|
|
130
|
+
if (keepHours === undefined) {
|
|
131
|
+
// Delete all
|
|
132
|
+
const result = db.prepare('DELETE FROM activity_log').run();
|
|
133
|
+
return result.changes;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Delete older than threshold
|
|
137
|
+
const result = db
|
|
138
|
+
.prepare(`DELETE FROM activity_log
|
|
139
|
+
WHERE created_at < datetime('now', ? || ' hours')`)
|
|
140
|
+
.run(`-${keepHours}`);
|
|
141
|
+
return result.changes;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
close();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=activity-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-log.js","sourceRoot":"","sources":["../../src/runners/activity-log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cron management for runner wake-up
|
|
3
|
+
*/
|
|
4
|
+
export interface CronStatus {
|
|
5
|
+
installed: boolean;
|
|
6
|
+
entry?: string;
|
|
7
|
+
error?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CronResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check cron installation status
|
|
16
|
+
*/
|
|
17
|
+
export declare function cronStatus(): CronStatus;
|
|
18
|
+
/**
|
|
19
|
+
* Install cron job for runner wake-up
|
|
20
|
+
*/
|
|
21
|
+
export declare function cronInstall(): CronResult;
|
|
22
|
+
/**
|
|
23
|
+
* Uninstall cron job
|
|
24
|
+
*/
|
|
25
|
+
export declare function cronUninstall(): CronResult;
|
|
26
|
+
//# sourceMappingURL=cron.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/runners/cron.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuDD;;GAEG;AACH,wBAAgB,UAAU,IAAI,UAAU,CA8BvC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,UAAU,CAgDxC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CA6C1C"}
|