opencode-swarm 6.6.1 → 6.8.1
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/README.md +121 -6
- package/dist/index.js +26976 -22154
- package/dist/src/agents/architect.d.ts +8 -0
- package/dist/{agents/test-engineer.d.ts → src/agents/coder.d.ts} +2 -1
- package/dist/src/agents/critic.d.ts +3 -0
- package/dist/src/agents/designer.d.ts +3 -0
- package/dist/src/agents/docs.d.ts +3 -0
- package/dist/src/agents/explorer.d.ts +3 -0
- package/dist/src/agents/model.d.ts +2 -0
- package/dist/{agents → src/agents}/reviewer.d.ts +2 -1
- package/dist/src/agents/sme.d.ts +3 -0
- package/dist/src/agents/test-engineer.d.ts +3 -0
- package/dist/src/agents/test-engineer.security.test.d.ts +1 -0
- package/dist/src/background/circuit-breaker.d.ts +149 -0
- package/dist/src/background/event-bus.d.ts +60 -0
- package/dist/src/background/evidence-summary-integration.d.ts +73 -0
- package/dist/src/background/index.d.ts +22 -0
- package/dist/src/background/manager.d.ts +122 -0
- package/dist/src/background/plan-sync-worker.d.ts +117 -0
- package/dist/src/background/queue.d.ts +116 -0
- package/dist/src/background/status-artifact.d.ts +115 -0
- package/dist/src/background/trigger.d.ts +159 -0
- package/dist/src/background/trigger.vulnerability.test.d.ts +1 -0
- package/dist/src/background/worker.d.ts +92 -0
- package/dist/src/commands/command-adapters.security.test.d.ts +14 -0
- package/dist/src/commands/commands.test.d.ts +1 -0
- package/dist/src/commands/diagnose.d.ts +1 -0
- package/dist/src/commands/doctor.d.ts +5 -0
- package/dist/src/commands/evidence.d.ts +1 -0
- package/dist/src/commands/export.d.ts +1 -0
- package/dist/src/commands/history.d.ts +1 -0
- package/dist/{commands → src/commands}/index.d.ts +3 -0
- package/dist/src/commands/plan.d.ts +1 -0
- package/dist/src/commands/preflight.d.ts +1 -0
- package/dist/src/commands/status.d.ts +1 -0
- package/dist/src/commands/sync-plan.d.ts +8 -0
- package/dist/{config → src/config}/index.d.ts +2 -2
- package/dist/src/config/loader.d.ts +16 -0
- package/dist/{config → src/config}/schema.d.ts +224 -0
- package/dist/{hooks → src/hooks}/index.d.ts +1 -0
- package/dist/src/hooks/phase-monitor.d.ts +16 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/{plan → src/plan}/manager.d.ts +13 -6
- package/dist/src/services/config-doctor.d.ts +125 -0
- package/dist/src/services/config-doctor.security.test.d.ts +1 -0
- package/dist/src/services/config-doctor.test.d.ts +1 -0
- package/dist/src/services/decision-drift-analyzer.d.ts +96 -0
- package/dist/src/services/diagnose-service.d.ts +31 -0
- package/dist/src/services/evidence-service.d.ts +65 -0
- package/dist/src/services/evidence-summary-service.d.ts +75 -0
- package/dist/src/services/export-service.d.ts +23 -0
- package/dist/src/services/history-service.d.ts +35 -0
- package/dist/src/services/index.d.ts +11 -0
- package/dist/src/services/plan-service.d.ts +25 -0
- package/dist/src/services/preflight-integration.d.ts +38 -0
- package/dist/src/services/preflight-service.d.ts +62 -0
- package/dist/src/services/status-service.d.ts +28 -0
- package/dist/{state.d.ts → src/state.d.ts} +5 -0
- package/dist/{tools → src/tools}/gitingest.d.ts +2 -1
- package/dist/{tools → src/tools}/secretscan.d.ts +4 -0
- package/dist/{tools/test-runner.d.ts → src/tools/test-runner/constants.d.ts} +0 -4
- package/dist/src/tools/test-runner/detect.d.ts +2 -0
- package/dist/src/tools/test-runner/discover.d.ts +4 -0
- package/dist/src/tools/test-runner/index.d.ts +6 -0
- package/dist/src/tools/test-runner/run.d.ts +2 -0
- package/dist/src/tools/test-runner/validate.d.ts +2 -0
- package/dist/src/utils/index.d.ts +8 -0
- package/package.json +1 -1
- package/dist/agents/architect.d.ts +0 -7
- package/dist/agents/coder.d.ts +0 -2
- package/dist/agents/critic.d.ts +0 -2
- package/dist/agents/designer.d.ts +0 -2
- package/dist/agents/docs.d.ts +0 -2
- package/dist/agents/explorer.d.ts +0 -2
- package/dist/agents/sme.d.ts +0 -2
- package/dist/commands/diagnose.d.ts +0 -5
- package/dist/commands/evidence.d.ts +0 -5
- package/dist/commands/export.d.ts +0 -5
- package/dist/commands/history.d.ts +0 -5
- package/dist/commands/plan.d.ts +0 -1
- package/dist/commands/status.d.ts +0 -2
- package/dist/config/loader.d.ts +0 -32
- package/dist/index.d.ts +0 -15
- package/dist/utils/index.d.ts +0 -3
- package/dist/{agents/test-engineer.security.test.d.ts → src/__tests__/security-adversarial.test.d.ts} +0 -0
- package/dist/{agents → src/agents}/index.d.ts +0 -0
- package/dist/{agents → src/agents}/test-engineer.adversarial.test.d.ts +0 -0
- package/dist/{cli → src/cli}/index.d.ts +0 -0
- package/dist/{commands → src/commands}/agents.d.ts +0 -0
- package/dist/{commands → src/commands}/archive.d.ts +0 -0
- package/dist/{commands → src/commands}/benchmark.d.ts +0 -0
- package/dist/{commands → src/commands}/config.d.ts +0 -0
- package/dist/{commands → src/commands}/reset.d.ts +0 -0
- package/dist/{commands → src/commands}/retrieve.d.ts +0 -0
- package/dist/{config → src/config}/constants.d.ts +0 -0
- package/dist/{config → src/config}/evidence-schema.d.ts +0 -0
- package/dist/{config → src/config}/plan-schema.d.ts +4 -4
- /package/dist/{evidence → src/evidence}/index.d.ts +0 -0
- /package/dist/{evidence → src/evidence}/manager.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/agent-activity.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/compaction-customizer.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/context-budget.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/context-scoring.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/delegation-gate.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/delegation-tracker.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/extractors.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/guardrails.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/pipeline-tracker.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/system-enhancer.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/tool-summarizer.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/utils.d.ts +0 -0
- /package/dist/{plan → src/plan}/index.d.ts +0 -0
- /package/dist/{summaries → src/summaries}/index.d.ts +0 -0
- /package/dist/{summaries → src/summaries}/manager.d.ts +0 -0
- /package/dist/{summaries → src/summaries}/summarizer.d.ts +0 -0
- /package/dist/{tools → src/tools}/checkpoint.d.ts +0 -0
- /package/dist/{tools → src/tools}/complexity-hotspots.d.ts +0 -0
- /package/dist/{tools → src/tools}/diff.d.ts +0 -0
- /package/dist/{tools → src/tools}/domain-detector.d.ts +0 -0
- /package/dist/{tools → src/tools}/evidence-check.d.ts +0 -0
- /package/dist/{tools → src/tools}/file-extractor.d.ts +0 -0
- /package/dist/{tools → src/tools}/imports.d.ts +0 -0
- /package/dist/{tools → src/tools}/index.d.ts +0 -0
- /package/dist/{tools → src/tools}/lint.d.ts +0 -0
- /package/dist/{tools → src/tools}/pkg-audit.d.ts +0 -0
- /package/dist/{tools → src/tools}/retrieve-summary.d.ts +0 -0
- /package/dist/{tools → src/tools}/schema-drift.d.ts +0 -0
- /package/dist/{tools → src/tools}/symbols.d.ts +0 -0
- /package/dist/{tools → src/tools}/test-runner.security-adversarial.test.d.ts +0 -0
- /package/dist/{tools → src/tools}/todo-extract.d.ts +0 -0
- /package/dist/{utils → src/utils}/errors.d.ts +0 -0
- /package/dist/{utils → src/utils}/logger.d.ts +0 -0
- /package/dist/{utils → src/utils}/merge.d.ts +0 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight In-Process Queue with Priorities and Retry Metadata
|
|
3
|
+
*
|
|
4
|
+
* Provides a simple but powerful queue abstraction for background automation.
|
|
5
|
+
* Supports priorities, retry logic, and in-memory persistence only.
|
|
6
|
+
*/
|
|
7
|
+
/** Queue priority levels */
|
|
8
|
+
export type QueuePriority = 'critical' | 'high' | 'normal' | 'low';
|
|
9
|
+
/** Retry metadata for failed items */
|
|
10
|
+
export interface RetryMetadata {
|
|
11
|
+
attempts: number;
|
|
12
|
+
maxAttempts: number;
|
|
13
|
+
lastAttempt?: number;
|
|
14
|
+
nextAttemptAt?: number;
|
|
15
|
+
backoffMs: number;
|
|
16
|
+
maxBackoffMs: number;
|
|
17
|
+
}
|
|
18
|
+
/** Queue item structure */
|
|
19
|
+
export interface QueueItem<T = unknown> {
|
|
20
|
+
id: string;
|
|
21
|
+
priority: QueuePriority;
|
|
22
|
+
payload: T;
|
|
23
|
+
createdAt: number;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
retry?: RetryMetadata;
|
|
26
|
+
}
|
|
27
|
+
/** Queue configuration */
|
|
28
|
+
export interface QueueConfig {
|
|
29
|
+
priorityLevels?: QueuePriority[];
|
|
30
|
+
maxSize?: number;
|
|
31
|
+
defaultMaxRetries?: number;
|
|
32
|
+
defaultBackoffMs?: number;
|
|
33
|
+
maxBackoffMs?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* In-process queue with priority support and retry metadata
|
|
37
|
+
*/
|
|
38
|
+
export declare class AutomationQueue<T = unknown> {
|
|
39
|
+
private items;
|
|
40
|
+
private readonly maxSize;
|
|
41
|
+
private readonly defaultMaxRetries;
|
|
42
|
+
private readonly defaultBackoffMs;
|
|
43
|
+
private readonly maxBackoffMs;
|
|
44
|
+
private readonly eventBus;
|
|
45
|
+
private itemCounter;
|
|
46
|
+
constructor(config?: QueueConfig);
|
|
47
|
+
/**
|
|
48
|
+
* Generate unique item ID
|
|
49
|
+
*/
|
|
50
|
+
private generateId;
|
|
51
|
+
/**
|
|
52
|
+
* Enqueue an item with priority
|
|
53
|
+
*/
|
|
54
|
+
enqueue(payload: T, priority?: QueuePriority, metadata?: Record<string, unknown>): string;
|
|
55
|
+
/**
|
|
56
|
+
* Dequeue the highest priority item
|
|
57
|
+
*/
|
|
58
|
+
dequeue(): QueueItem<T> | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Peek at the highest priority item without removing
|
|
61
|
+
*/
|
|
62
|
+
peek(): QueueItem<T> | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Get item by ID
|
|
65
|
+
*/
|
|
66
|
+
get(id: string): QueueItem<T> | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Remove specific item by ID
|
|
69
|
+
*/
|
|
70
|
+
remove(id: string): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Mark item as completed and remove from queue
|
|
73
|
+
*/
|
|
74
|
+
complete(id: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Mark item as failed and schedule retry if possible
|
|
77
|
+
*/
|
|
78
|
+
retry(id: string, _error?: unknown): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Get items due for retry
|
|
81
|
+
*/
|
|
82
|
+
getRetryableItems(): QueueItem<T>[];
|
|
83
|
+
/**
|
|
84
|
+
* Get current queue size
|
|
85
|
+
*/
|
|
86
|
+
size(): number;
|
|
87
|
+
/**
|
|
88
|
+
* Check if queue is empty
|
|
89
|
+
*/
|
|
90
|
+
isEmpty(): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Check if queue is full
|
|
93
|
+
*/
|
|
94
|
+
isFull(): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Clear all items from queue
|
|
97
|
+
*/
|
|
98
|
+
clear(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Get all items (for debugging/inspection)
|
|
101
|
+
*/
|
|
102
|
+
getAll(): QueueItem<T>[];
|
|
103
|
+
/**
|
|
104
|
+
* Get items by priority
|
|
105
|
+
*/
|
|
106
|
+
getByPriority(priority: QueuePriority): QueueItem<T>[];
|
|
107
|
+
/**
|
|
108
|
+
* Get queue statistics
|
|
109
|
+
*/
|
|
110
|
+
getStats(): {
|
|
111
|
+
size: number;
|
|
112
|
+
maxSize: number;
|
|
113
|
+
byPriority: Record<QueuePriority, number>;
|
|
114
|
+
retryable: number;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passive Status Artifact Writer
|
|
3
|
+
*
|
|
4
|
+
* Writes automation status snapshots to .swarm/ for GUI visibility.
|
|
5
|
+
* Provides passive, read-only status information without affecting workflow.
|
|
6
|
+
*/
|
|
7
|
+
/** Automation status snapshot structure */
|
|
8
|
+
export interface AutomationStatusSnapshot {
|
|
9
|
+
/** When this snapshot was generated */
|
|
10
|
+
timestamp: number;
|
|
11
|
+
/** Current automation mode */
|
|
12
|
+
mode: 'manual' | 'hybrid' | 'auto';
|
|
13
|
+
/** Whether automation is enabled */
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
/** Current phase */
|
|
16
|
+
currentPhase: number;
|
|
17
|
+
/** Last trigger information */
|
|
18
|
+
lastTrigger: {
|
|
19
|
+
triggeredAt: number | null;
|
|
20
|
+
triggeredPhase: number | null;
|
|
21
|
+
source: string | null;
|
|
22
|
+
reason: string | null;
|
|
23
|
+
} | null;
|
|
24
|
+
/** Pending actions count */
|
|
25
|
+
pendingActions: number;
|
|
26
|
+
/** Last outcome state */
|
|
27
|
+
lastOutcome: {
|
|
28
|
+
state: 'success' | 'failure' | 'skipped' | 'none';
|
|
29
|
+
phase: number | null;
|
|
30
|
+
outcomeAt: number | null;
|
|
31
|
+
message: string | null;
|
|
32
|
+
} | null;
|
|
33
|
+
/** Feature flags status */
|
|
34
|
+
capabilities: {
|
|
35
|
+
plan_sync: boolean;
|
|
36
|
+
phase_preflight: boolean;
|
|
37
|
+
config_doctor_on_startup: boolean;
|
|
38
|
+
config_doctor_autofix: boolean;
|
|
39
|
+
evidence_auto_summaries: boolean;
|
|
40
|
+
decision_drift_detection: boolean;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Automation Status Artifact Manager
|
|
45
|
+
*
|
|
46
|
+
* Writes passive status snapshots to .swarm/automation-status.json
|
|
47
|
+
*/
|
|
48
|
+
export declare class AutomationStatusArtifact {
|
|
49
|
+
private readonly swarmDir;
|
|
50
|
+
private readonly filename;
|
|
51
|
+
private currentSnapshot;
|
|
52
|
+
constructor(swarmDir: string, filename?: string);
|
|
53
|
+
/**
|
|
54
|
+
* Get the full path to the status file
|
|
55
|
+
*/
|
|
56
|
+
private getFilePath;
|
|
57
|
+
/**
|
|
58
|
+
* Load existing snapshot from disk
|
|
59
|
+
*/
|
|
60
|
+
load(): AutomationStatusSnapshot | null;
|
|
61
|
+
/**
|
|
62
|
+
* Write snapshot to disk
|
|
63
|
+
*/
|
|
64
|
+
private write;
|
|
65
|
+
/**
|
|
66
|
+
* Get current snapshot (in-memory)
|
|
67
|
+
*/
|
|
68
|
+
getSnapshot(): AutomationStatusSnapshot;
|
|
69
|
+
/**
|
|
70
|
+
* Read snapshot from disk (forces reload)
|
|
71
|
+
*/
|
|
72
|
+
read(): AutomationStatusSnapshot;
|
|
73
|
+
/**
|
|
74
|
+
* Update mode and capabilities
|
|
75
|
+
*/
|
|
76
|
+
updateConfig(mode: 'manual' | 'hybrid' | 'auto', capabilities: AutomationStatusSnapshot['capabilities']): void;
|
|
77
|
+
/**
|
|
78
|
+
* Update current phase
|
|
79
|
+
*/
|
|
80
|
+
updatePhase(phase: number): void;
|
|
81
|
+
/**
|
|
82
|
+
* Record a trigger event
|
|
83
|
+
*/
|
|
84
|
+
recordTrigger(triggeredAt: number, triggeredPhase: number, source: string, reason: string): void;
|
|
85
|
+
/**
|
|
86
|
+
* Update pending actions count
|
|
87
|
+
*/
|
|
88
|
+
updatePendingActions(count: number): void;
|
|
89
|
+
/**
|
|
90
|
+
* Record an outcome
|
|
91
|
+
*/
|
|
92
|
+
recordOutcome(state: 'success' | 'failure' | 'skipped', phase: number, message?: string): void;
|
|
93
|
+
/**
|
|
94
|
+
* Clear the last outcome (reset to none)
|
|
95
|
+
*/
|
|
96
|
+
clearOutcome(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Check if automation is enabled (mode != manual)
|
|
99
|
+
*/
|
|
100
|
+
isEnabled(): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Check if a specific capability is enabled
|
|
103
|
+
*/
|
|
104
|
+
hasCapability(capability: keyof AutomationStatusSnapshot['capabilities']): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Get summary for GUI display
|
|
107
|
+
*/
|
|
108
|
+
getGuiSummary(): {
|
|
109
|
+
status: string;
|
|
110
|
+
phase: number;
|
|
111
|
+
lastTrigger: string | null;
|
|
112
|
+
pending: number;
|
|
113
|
+
outcome: string | null;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase-Boundary Preflight Trigger
|
|
3
|
+
*
|
|
4
|
+
* Detects phase-boundary conditions and triggers preflight requests.
|
|
5
|
+
* This is the plumbing/scaffold for Task 5.5 - full preflight logic comes in Task 5.6.
|
|
6
|
+
*/
|
|
7
|
+
import type { AutomationConfig } from '../config/schema';
|
|
8
|
+
import { type AutomationEventBus } from './event-bus';
|
|
9
|
+
/** Event types for preflight triggers */
|
|
10
|
+
export type PreflightTriggerEventType = 'preflight.requested' | 'preflight.triggered' | 'preflight.skipped' | 'phase.boundary.detected';
|
|
11
|
+
/** Preflight trigger payload */
|
|
12
|
+
export interface PreflightRequestPayload {
|
|
13
|
+
triggerSource: 'phase_boundary' | 'manual' | 'scheduled';
|
|
14
|
+
currentPhase: number;
|
|
15
|
+
reason: string;
|
|
16
|
+
metadata?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
/** Phase boundary detection result */
|
|
19
|
+
export interface PhaseBoundaryResult {
|
|
20
|
+
detected: boolean;
|
|
21
|
+
previousPhase: number;
|
|
22
|
+
currentPhase: number;
|
|
23
|
+
reason: string;
|
|
24
|
+
completedTaskCount: number;
|
|
25
|
+
totalTaskCount: number;
|
|
26
|
+
}
|
|
27
|
+
/** Preflight trigger configuration */
|
|
28
|
+
export interface PreflightTriggerConfig {
|
|
29
|
+
/** Minimum tasks that must be completed in a phase to trigger */
|
|
30
|
+
minCompletedTasksThreshold?: number;
|
|
31
|
+
/** Enable trigger even if no tasks (phase auto-complete mode) */
|
|
32
|
+
allowZeroTaskTrigger?: boolean;
|
|
33
|
+
/** Directory to run preflight checks in */
|
|
34
|
+
directory?: string;
|
|
35
|
+
}
|
|
36
|
+
/** Preflight handler type */
|
|
37
|
+
export type PreflightHandler = (request: PreflightRequest) => Promise<void>;
|
|
38
|
+
/** Preflight request queue item */
|
|
39
|
+
export interface PreflightRequest {
|
|
40
|
+
id: string;
|
|
41
|
+
triggeredAt: number;
|
|
42
|
+
currentPhase: number;
|
|
43
|
+
source: 'phase_boundary' | 'manual' | 'scheduled';
|
|
44
|
+
reason: string;
|
|
45
|
+
metadata?: Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Phase-Boundary Trigger Detector
|
|
49
|
+
*
|
|
50
|
+
* Monitors plan state to detect when a phase transition occurs.
|
|
51
|
+
*/
|
|
52
|
+
export declare class PhaseBoundaryTrigger {
|
|
53
|
+
private readonly eventBus;
|
|
54
|
+
private readonly config;
|
|
55
|
+
private lastKnownPhase;
|
|
56
|
+
private lastTriggeredPhase;
|
|
57
|
+
constructor(eventBus?: AutomationEventBus, config?: PreflightTriggerConfig);
|
|
58
|
+
/**
|
|
59
|
+
* Set the current phase from external source (plan)
|
|
60
|
+
*/
|
|
61
|
+
setCurrentPhase(phase: number): void;
|
|
62
|
+
/**
|
|
63
|
+
* Get the last known phase
|
|
64
|
+
*/
|
|
65
|
+
getCurrentPhase(): number;
|
|
66
|
+
/**
|
|
67
|
+
* Check if a phase boundary has been crossed
|
|
68
|
+
* Returns the result of the detection
|
|
69
|
+
*/
|
|
70
|
+
detectBoundary(newPhase: number, completedTasks: number, totalTasks: number): PhaseBoundaryResult;
|
|
71
|
+
/**
|
|
72
|
+
* Check if preflight should be triggered based on phase boundary
|
|
73
|
+
* Must be called AFTER phase boundary is detected
|
|
74
|
+
*/
|
|
75
|
+
shouldTriggerPreflight(boundaryResult: PhaseBoundaryResult): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Mark that preflight was triggered for a phase
|
|
78
|
+
*/
|
|
79
|
+
markTriggered(phase: number): void;
|
|
80
|
+
/**
|
|
81
|
+
* Reset trigger state (for testing)
|
|
82
|
+
*/
|
|
83
|
+
reset(): void;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Preflight Trigger Manager
|
|
87
|
+
*
|
|
88
|
+
* Orchestrates trigger detection, feature flag gating, and request publishing.
|
|
89
|
+
*/
|
|
90
|
+
export declare class PreflightTriggerManager {
|
|
91
|
+
private readonly automationConfig;
|
|
92
|
+
private readonly eventBus;
|
|
93
|
+
private readonly trigger;
|
|
94
|
+
private readonly requestQueue;
|
|
95
|
+
private requestCounter;
|
|
96
|
+
private preflightHandler;
|
|
97
|
+
private unsubscribe;
|
|
98
|
+
constructor(automationConfig: AutomationConfig, eventBus?: AutomationEventBus, triggerConfig?: PreflightTriggerConfig);
|
|
99
|
+
/**
|
|
100
|
+
* Check if preflight triggers are enabled via feature flags
|
|
101
|
+
* Returns false if config is missing/invalid (fail-safe)
|
|
102
|
+
*/
|
|
103
|
+
isEnabled(): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Get the automation mode
|
|
106
|
+
* Returns 'unknown' for malformed config (fail-safe)
|
|
107
|
+
*/
|
|
108
|
+
getMode(): string;
|
|
109
|
+
/**
|
|
110
|
+
* Update current phase from plan state
|
|
111
|
+
*/
|
|
112
|
+
updatePhase(phase: number): void;
|
|
113
|
+
/**
|
|
114
|
+
* Check for phase boundary and potentially trigger preflight
|
|
115
|
+
* Returns true if preflight was triggered
|
|
116
|
+
*/
|
|
117
|
+
checkAndTrigger(currentPhase: number, completedTasks: number, totalTasks: number): Promise<boolean>;
|
|
118
|
+
/**
|
|
119
|
+
* Trigger a preflight request
|
|
120
|
+
*/
|
|
121
|
+
private triggerPreflight;
|
|
122
|
+
/**
|
|
123
|
+
* Get pending preflight requests
|
|
124
|
+
*/
|
|
125
|
+
getPendingRequests(): PreflightRequest[];
|
|
126
|
+
/**
|
|
127
|
+
* Get queue size
|
|
128
|
+
*/
|
|
129
|
+
getQueueSize(): number;
|
|
130
|
+
/**
|
|
131
|
+
* Get trigger stats
|
|
132
|
+
* All values are fail-safe for malformed config
|
|
133
|
+
*/
|
|
134
|
+
getStats(): {
|
|
135
|
+
enabled: boolean;
|
|
136
|
+
mode: string;
|
|
137
|
+
currentPhase: number;
|
|
138
|
+
lastTriggeredPhase: number;
|
|
139
|
+
pendingRequests: number;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Reset state (for testing)
|
|
143
|
+
*/
|
|
144
|
+
reset(): void;
|
|
145
|
+
/**
|
|
146
|
+
* Register a handler to be called when preflight is requested.
|
|
147
|
+
* The handler will be invoked with the preflight request details.
|
|
148
|
+
* Only one handler can be registered at a time.
|
|
149
|
+
*/
|
|
150
|
+
registerHandler(handler: PreflightHandler): void;
|
|
151
|
+
/**
|
|
152
|
+
* Unregister the preflight handler
|
|
153
|
+
*/
|
|
154
|
+
unregisterHandler(): void;
|
|
155
|
+
/**
|
|
156
|
+
* Check if a handler is registered
|
|
157
|
+
*/
|
|
158
|
+
hasHandler(): boolean;
|
|
159
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Lifecycle Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages worker threads for background automation.
|
|
5
|
+
* Handles registration, start/stop, and handler coordination.
|
|
6
|
+
*/
|
|
7
|
+
import type { AutomationQueue, QueueItem } from './queue';
|
|
8
|
+
/** Worker handler function */
|
|
9
|
+
export type WorkerHandler<T = unknown> = (item: QueueItem<T>) => Promise<{
|
|
10
|
+
success: boolean;
|
|
11
|
+
result?: unknown;
|
|
12
|
+
error?: unknown;
|
|
13
|
+
}>;
|
|
14
|
+
/** Worker registration options */
|
|
15
|
+
export interface WorkerRegistration {
|
|
16
|
+
name: string;
|
|
17
|
+
handler: WorkerHandler;
|
|
18
|
+
queue: AutomationQueue;
|
|
19
|
+
concurrency?: number;
|
|
20
|
+
autoStart?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Worker status */
|
|
23
|
+
export type WorkerStatus = 'idle' | 'running' | 'stopping' | 'stopped' | 'error';
|
|
24
|
+
/**
|
|
25
|
+
* Worker Lifecycle Manager
|
|
26
|
+
*
|
|
27
|
+
* Manages worker registration, lifecycle, and processing.
|
|
28
|
+
*/
|
|
29
|
+
export declare class WorkerManager {
|
|
30
|
+
private workers;
|
|
31
|
+
private readonly eventBus;
|
|
32
|
+
constructor();
|
|
33
|
+
/**
|
|
34
|
+
* Register a new worker
|
|
35
|
+
*/
|
|
36
|
+
register(registration: WorkerRegistration): void;
|
|
37
|
+
/**
|
|
38
|
+
* Unregister a worker
|
|
39
|
+
*/
|
|
40
|
+
unregister(name: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Start a worker
|
|
43
|
+
*/
|
|
44
|
+
start(name: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Start processing loop for a worker
|
|
47
|
+
*/
|
|
48
|
+
private startProcessingLoop;
|
|
49
|
+
/**
|
|
50
|
+
* Handle a single queue item
|
|
51
|
+
*/
|
|
52
|
+
private handleItem;
|
|
53
|
+
/**
|
|
54
|
+
* Stop a worker
|
|
55
|
+
*/
|
|
56
|
+
stop(name: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Start all workers
|
|
59
|
+
*/
|
|
60
|
+
startAll(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Stop all workers
|
|
63
|
+
*/
|
|
64
|
+
stopAll(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Get worker status
|
|
67
|
+
*/
|
|
68
|
+
getStatus(name: string): WorkerStatus | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Get worker statistics
|
|
71
|
+
*/
|
|
72
|
+
getStats(name: string): {
|
|
73
|
+
status: WorkerStatus;
|
|
74
|
+
activeCount: number;
|
|
75
|
+
processedCount: number;
|
|
76
|
+
errorCount: number;
|
|
77
|
+
lastError?: unknown;
|
|
78
|
+
queueSize: number;
|
|
79
|
+
} | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Get all worker names
|
|
82
|
+
*/
|
|
83
|
+
getWorkerNames(): string[];
|
|
84
|
+
/**
|
|
85
|
+
* Check if any workers are running
|
|
86
|
+
*/
|
|
87
|
+
isAnyRunning(): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Get total statistics across all workers
|
|
90
|
+
*/
|
|
91
|
+
getTotalStats(): Record<string, ReturnType<WorkerManager['getStats']>>;
|
|
92
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adversarial Security Tests for Command Adapters (Task 5.10)
|
|
3
|
+
*
|
|
4
|
+
* ATTACK VECTORS COVERED:
|
|
5
|
+
* 1. Path Traversal - attempts to escape .swarm directory via command args
|
|
6
|
+
* 2. Null Byte Injection - injecting null bytes to truncate paths/strings
|
|
7
|
+
* 3. Control Character Injection - injecting control chars (0x00-0x1F)
|
|
8
|
+
* 4. Command Injection - shell metacharacters in args
|
|
9
|
+
* 5. Argument Pollution - malformed, oversized, special character args
|
|
10
|
+
* 6. Flag Injection - malicious flag values and combinations
|
|
11
|
+
* 7. Unicode Attacks - unicode normalization/replacement attacks
|
|
12
|
+
* 8. Edge Cases - empty, extremely long, boundary values
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { handleDiagnoseCommand } from '../services/diagnose-service';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { handleEvidenceCommand, handleEvidenceSummaryCommand, } from '../services/evidence-service';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { handleExportCommand } from '../services/export-service';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { handleHistoryCommand } from '../services/history-service';
|
|
@@ -4,13 +4,16 @@ export { handleArchiveCommand } from './archive';
|
|
|
4
4
|
export { handleBenchmarkCommand } from './benchmark';
|
|
5
5
|
export { handleConfigCommand } from './config';
|
|
6
6
|
export { handleDiagnoseCommand } from './diagnose';
|
|
7
|
+
export { handleDoctorCommand } from './doctor';
|
|
7
8
|
export { handleEvidenceCommand } from './evidence';
|
|
8
9
|
export { handleExportCommand } from './export';
|
|
9
10
|
export { handleHistoryCommand } from './history';
|
|
10
11
|
export { handlePlanCommand } from './plan';
|
|
12
|
+
export { handlePreflightCommand } from './preflight';
|
|
11
13
|
export { handleResetCommand } from './reset';
|
|
12
14
|
export { handleRetrieveCommand } from './retrieve';
|
|
13
15
|
export { handleStatusCommand } from './status';
|
|
16
|
+
export { handleSyncPlanCommand } from './sync-plan';
|
|
14
17
|
/**
|
|
15
18
|
* Creates a command.execute.before handler for /swarm commands.
|
|
16
19
|
* Uses factory pattern to close over directory and agents.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { handlePlanCommand } from '../services/plan-service';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { handlePreflightCommand } from '../services/preflight-service';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { handleStatusCommand } from '../services/status-service';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handle /swarm sync-plan command.
|
|
3
|
+
* Maps to: plan service (loadPlan which triggers auto-heal/sync)
|
|
4
|
+
*
|
|
5
|
+
* This command ensures plan.json and plan.md are in sync.
|
|
6
|
+
* The loadPlan function automatically regenerates plan.md from plan.json if needed.
|
|
7
|
+
*/
|
|
8
|
+
export declare function handleSyncPlanCommand(directory: string, _args: string[]): Promise<string>;
|
|
@@ -5,5 +5,5 @@ export { ApprovalEvidenceSchema, BaseEvidenceSchema, DiffEvidenceSchema, EVIDENC
|
|
|
5
5
|
export { loadAgentPrompt, loadPluginConfig, loadPluginConfigWithMeta, } from './loader';
|
|
6
6
|
export type { MigrationStatus, Phase, PhaseStatus, Plan, Task, TaskSize, TaskStatus, } from './plan-schema';
|
|
7
7
|
export { MigrationStatusSchema, PhaseSchema, PhaseStatusSchema, PlanSchema, TaskSchema, TaskSizeSchema, TaskStatusSchema, } from './plan-schema';
|
|
8
|
-
export type { AgentOverrideConfig, PluginConfig, SwarmConfig, } from './schema';
|
|
9
|
-
export { AgentOverrideConfigSchema, PluginConfigSchema, SwarmConfigSchema, } from './schema';
|
|
8
|
+
export type { AgentOverrideConfig, AutomationCapabilities, AutomationConfig, AutomationMode, PluginConfig, SwarmConfig, } from './schema';
|
|
9
|
+
export { AgentOverrideConfigSchema, AutomationCapabilitiesSchema, AutomationConfigSchema, AutomationModeSchema, PluginConfigSchema, SwarmConfigSchema, } from './schema';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type PluginConfig } from './schema';
|
|
2
|
+
export declare const MAX_CONFIG_FILE_BYTES = 102400;
|
|
3
|
+
export { deepMerge, MAX_MERGE_DEPTH } from '../utils/merge';
|
|
4
|
+
export declare function loadPluginConfig(directory: string): PluginConfig;
|
|
5
|
+
export declare function loadPluginConfigWithMeta(directory: string): {
|
|
6
|
+
config: PluginConfig;
|
|
7
|
+
loadedFromFile: boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Load custom prompt for an agent from the prompts directory.
|
|
11
|
+
* Checks for {agent}.md (replaces default) and {agent}_append.md (appends).
|
|
12
|
+
*/
|
|
13
|
+
export declare function loadAgentPrompt(agentName: string): {
|
|
14
|
+
prompt?: string;
|
|
15
|
+
appendPrompt?: string;
|
|
16
|
+
};
|