opencode-swarm-plugin 0.21.0 → 0.23.0
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/.turbo/turbo-build.log +9 -0
- package/CHANGELOG.md +12 -0
- package/README.md +111 -166
- package/dist/agent-mail.d.ts +480 -0
- package/dist/agent-mail.d.ts.map +1 -0
- package/dist/anti-patterns.d.ts +257 -0
- package/dist/anti-patterns.d.ts.map +1 -0
- package/dist/beads.d.ts +377 -0
- package/dist/beads.d.ts.map +1 -0
- package/dist/eval-capture.d.ts +206 -0
- package/dist/eval-capture.d.ts.map +1 -0
- package/dist/index.d.ts +1299 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +776 -4387
- package/dist/learning.d.ts +670 -0
- package/dist/learning.d.ts.map +1 -0
- package/dist/mandate-promotion.d.ts +93 -0
- package/dist/mandate-promotion.d.ts.map +1 -0
- package/dist/mandate-storage.d.ts +209 -0
- package/dist/mandate-storage.d.ts.map +1 -0
- package/dist/mandates.d.ts +230 -0
- package/dist/mandates.d.ts.map +1 -0
- package/dist/output-guardrails.d.ts +125 -0
- package/dist/output-guardrails.d.ts.map +1 -0
- package/dist/pattern-maturity.d.ts +246 -0
- package/dist/pattern-maturity.d.ts.map +1 -0
- package/dist/plugin.d.ts +22 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +755 -4375
- package/dist/rate-limiter.d.ts +218 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/repo-crawl.d.ts +146 -0
- package/dist/repo-crawl.d.ts.map +1 -0
- package/dist/schemas/bead.d.ts +255 -0
- package/dist/schemas/bead.d.ts.map +1 -0
- package/dist/schemas/evaluation.d.ts +161 -0
- package/dist/schemas/evaluation.d.ts.map +1 -0
- package/dist/schemas/index.d.ts +34 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/mandate.d.ts +336 -0
- package/dist/schemas/mandate.d.ts.map +1 -0
- package/dist/schemas/swarm-context.d.ts +131 -0
- package/dist/schemas/swarm-context.d.ts.map +1 -0
- package/dist/schemas/task.d.ts +188 -0
- package/dist/schemas/task.d.ts.map +1 -0
- package/dist/skills.d.ts +471 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/storage.d.ts +260 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/structured.d.ts +196 -0
- package/dist/structured.d.ts.map +1 -0
- package/dist/swarm-decompose.d.ts +201 -0
- package/dist/swarm-decompose.d.ts.map +1 -0
- package/dist/swarm-mail.d.ts +240 -0
- package/dist/swarm-mail.d.ts.map +1 -0
- package/dist/swarm-orchestrate.d.ts +708 -0
- package/dist/swarm-orchestrate.d.ts.map +1 -0
- package/dist/swarm-prompts.d.ts +292 -0
- package/dist/swarm-prompts.d.ts.map +1 -0
- package/dist/swarm-strategies.d.ts +100 -0
- package/dist/swarm-strategies.d.ts.map +1 -0
- package/dist/swarm.d.ts +455 -0
- package/dist/swarm.d.ts.map +1 -0
- package/dist/tool-availability.d.ts +91 -0
- package/dist/tool-availability.d.ts.map +1 -0
- package/docs/planning/ADR-001-monorepo-structure.md +171 -0
- package/docs/planning/ADR-002-package-extraction.md +393 -0
- package/docs/planning/ADR-003-performance-improvements.md +451 -0
- package/docs/planning/ADR-004-message-queue-features.md +187 -0
- package/docs/planning/ADR-005-devtools-observability.md +202 -0
- package/docs/planning/ROADMAP.md +368 -0
- package/docs/semantic-memory-cli-syntax.md +123 -0
- package/docs/swarm-mail-architecture.md +1147 -0
- package/package.json +13 -24
- package/scripts/cleanup-test-memories.ts +346 -0
- package/src/agent-mail.ts +1 -1
- package/src/beads.ts +1 -2
- package/src/index.ts +2 -2
- package/src/learning.integration.test.ts +80 -10
- package/src/mandate-storage.test.ts +3 -3
- package/src/storage.ts +189 -9
- package/src/swarm-mail.ts +3 -3
- package/src/swarm-orchestrate.ts +399 -246
- package/src/swarm.integration.test.ts +124 -0
- package/src/tool-availability.ts +1 -1
- package/tsconfig.json +1 -1
- package/.beads/.local_version +0 -1
- package/.beads/README.md +0 -81
- package/.beads/analysis/skill-architecture-meta-skills.md +0 -1562
- package/.beads/config.yaml +0 -62
- package/.beads/issues.jsonl +0 -2186
- package/.beads/metadata.json +0 -4
- package/.gitattributes +0 -3
- package/.github/workflows/ci.yml +0 -30
- package/.github/workflows/opencode.yml +0 -31
- package/.opencode/skills/tdd/SKILL.md +0 -182
- package/INTEGRATION_EXAMPLE.md +0 -66
- package/VERIFICATION_QUALITY_PATTERNS.md +0 -565
- package/bun.lock +0 -286
- package/dist/pglite.data +0 -0
- package/dist/pglite.wasm +0 -0
- package/src/streams/agent-mail.test.ts +0 -777
- package/src/streams/agent-mail.ts +0 -535
- package/src/streams/debug.test.ts +0 -500
- package/src/streams/debug.ts +0 -727
- package/src/streams/effect/ask.integration.test.ts +0 -314
- package/src/streams/effect/ask.ts +0 -202
- package/src/streams/effect/cursor.integration.test.ts +0 -418
- package/src/streams/effect/cursor.ts +0 -288
- package/src/streams/effect/deferred.test.ts +0 -357
- package/src/streams/effect/deferred.ts +0 -445
- package/src/streams/effect/index.ts +0 -17
- package/src/streams/effect/layers.ts +0 -73
- package/src/streams/effect/lock.test.ts +0 -385
- package/src/streams/effect/lock.ts +0 -399
- package/src/streams/effect/mailbox.test.ts +0 -260
- package/src/streams/effect/mailbox.ts +0 -318
- package/src/streams/events.test.ts +0 -924
- package/src/streams/events.ts +0 -329
- package/src/streams/index.test.ts +0 -229
- package/src/streams/index.ts +0 -578
- package/src/streams/migrations.test.ts +0 -359
- package/src/streams/migrations.ts +0 -362
- package/src/streams/projections.test.ts +0 -611
- package/src/streams/projections.ts +0 -504
- package/src/streams/store.integration.test.ts +0 -658
- package/src/streams/store.ts +0 -1075
- package/src/streams/swarm-mail.ts +0 -552
- package/test-bug-fixes.ts +0 -86
- package/vitest.integration.config.ts +0 -13
- package/workflow-integration-analysis.md +0 -876
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eval Data Capture - Captures real swarm execution data for evals
|
|
3
|
+
*
|
|
4
|
+
* Records decomposition inputs, outputs, and outcomes to JSONL files
|
|
5
|
+
* that can be used as ground truth for Evalite evals.
|
|
6
|
+
*
|
|
7
|
+
* Data flow:
|
|
8
|
+
* 1. swarm_decompose captures: task, context, generated decomposition
|
|
9
|
+
* 2. swarm_complete captures: outcome signals per subtask
|
|
10
|
+
* 3. swarm_record_outcome captures: learning signals
|
|
11
|
+
* 4. Human feedback (optional): accept/reject/modify
|
|
12
|
+
*
|
|
13
|
+
* @module eval-capture
|
|
14
|
+
*/
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
/**
|
|
17
|
+
* Subtask outcome - what actually happened
|
|
18
|
+
*/
|
|
19
|
+
export declare const SubtaskOutcomeSchema: z.ZodObject<{
|
|
20
|
+
bead_id: z.ZodString;
|
|
21
|
+
title: z.ZodString;
|
|
22
|
+
planned_files: z.ZodArray<z.ZodString>;
|
|
23
|
+
actual_files: z.ZodArray<z.ZodString>;
|
|
24
|
+
duration_ms: z.ZodNumber;
|
|
25
|
+
error_count: z.ZodNumber;
|
|
26
|
+
retry_count: z.ZodNumber;
|
|
27
|
+
success: z.ZodBoolean;
|
|
28
|
+
failure_mode: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
export type SubtaskOutcome = z.infer<typeof SubtaskOutcomeSchema>;
|
|
31
|
+
/**
|
|
32
|
+
* Complete eval record - input, output, and outcome
|
|
33
|
+
*/
|
|
34
|
+
export declare const EvalRecordSchema: z.ZodObject<{
|
|
35
|
+
id: z.ZodString;
|
|
36
|
+
timestamp: z.ZodString;
|
|
37
|
+
project_path: z.ZodString;
|
|
38
|
+
task: z.ZodString;
|
|
39
|
+
context: z.ZodOptional<z.ZodString>;
|
|
40
|
+
strategy: z.ZodEnum<{
|
|
41
|
+
"file-based": "file-based";
|
|
42
|
+
"feature-based": "feature-based";
|
|
43
|
+
"risk-based": "risk-based";
|
|
44
|
+
auto: "auto";
|
|
45
|
+
}>;
|
|
46
|
+
max_subtasks: z.ZodNumber;
|
|
47
|
+
epic_title: z.ZodString;
|
|
48
|
+
epic_description: z.ZodOptional<z.ZodString>;
|
|
49
|
+
subtasks: z.ZodArray<z.ZodObject<{
|
|
50
|
+
title: z.ZodString;
|
|
51
|
+
description: z.ZodOptional<z.ZodString>;
|
|
52
|
+
files: z.ZodArray<z.ZodString>;
|
|
53
|
+
dependencies: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
54
|
+
estimated_complexity: z.ZodOptional<z.ZodNumber>;
|
|
55
|
+
}, z.core.$strip>>;
|
|
56
|
+
outcomes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
57
|
+
bead_id: z.ZodString;
|
|
58
|
+
title: z.ZodString;
|
|
59
|
+
planned_files: z.ZodArray<z.ZodString>;
|
|
60
|
+
actual_files: z.ZodArray<z.ZodString>;
|
|
61
|
+
duration_ms: z.ZodNumber;
|
|
62
|
+
error_count: z.ZodNumber;
|
|
63
|
+
retry_count: z.ZodNumber;
|
|
64
|
+
success: z.ZodBoolean;
|
|
65
|
+
failure_mode: z.ZodOptional<z.ZodString>;
|
|
66
|
+
}, z.core.$strip>>>;
|
|
67
|
+
overall_success: z.ZodOptional<z.ZodBoolean>;
|
|
68
|
+
total_duration_ms: z.ZodOptional<z.ZodNumber>;
|
|
69
|
+
total_errors: z.ZodOptional<z.ZodNumber>;
|
|
70
|
+
human_accepted: z.ZodOptional<z.ZodBoolean>;
|
|
71
|
+
human_modified: z.ZodOptional<z.ZodBoolean>;
|
|
72
|
+
human_notes: z.ZodOptional<z.ZodString>;
|
|
73
|
+
file_overlap_count: z.ZodOptional<z.ZodNumber>;
|
|
74
|
+
scope_accuracy: z.ZodOptional<z.ZodNumber>;
|
|
75
|
+
time_balance_ratio: z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
}, z.core.$strip>;
|
|
77
|
+
export type EvalRecord = z.infer<typeof EvalRecordSchema>;
|
|
78
|
+
/**
|
|
79
|
+
* Partial record for in-progress capture
|
|
80
|
+
*/
|
|
81
|
+
export type PartialEvalRecord = Partial<EvalRecord> & {
|
|
82
|
+
id: string;
|
|
83
|
+
timestamp: string;
|
|
84
|
+
task: string;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Default path for eval data
|
|
88
|
+
*/
|
|
89
|
+
export declare const DEFAULT_EVAL_DATA_PATH = ".opencode/eval-data.jsonl";
|
|
90
|
+
/**
|
|
91
|
+
* Get the eval data file path for a project
|
|
92
|
+
*/
|
|
93
|
+
export declare function getEvalDataPath(projectPath: string): string;
|
|
94
|
+
/**
|
|
95
|
+
* Ensure the eval data directory exists
|
|
96
|
+
*/
|
|
97
|
+
export declare function ensureEvalDataDir(projectPath: string): void;
|
|
98
|
+
/**
|
|
99
|
+
* Append an eval record to the JSONL file
|
|
100
|
+
*/
|
|
101
|
+
export declare function appendEvalRecord(projectPath: string, record: EvalRecord | PartialEvalRecord): void;
|
|
102
|
+
/**
|
|
103
|
+
* Read all eval records from a project
|
|
104
|
+
*/
|
|
105
|
+
export declare function readEvalRecords(projectPath: string): EvalRecord[];
|
|
106
|
+
/**
|
|
107
|
+
* Read partial records (for updating in-progress records)
|
|
108
|
+
*/
|
|
109
|
+
export declare function readPartialRecords(projectPath: string): PartialEvalRecord[];
|
|
110
|
+
/**
|
|
111
|
+
* Update an existing record by ID
|
|
112
|
+
*/
|
|
113
|
+
export declare function updateEvalRecord(projectPath: string, id: string, updates: Partial<EvalRecord>): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Start capturing a decomposition
|
|
116
|
+
*
|
|
117
|
+
* Called when swarm_decompose generates a decomposition.
|
|
118
|
+
* Creates a partial record that will be completed when outcomes arrive.
|
|
119
|
+
*/
|
|
120
|
+
export declare function captureDecomposition(params: {
|
|
121
|
+
epicId: string;
|
|
122
|
+
projectPath: string;
|
|
123
|
+
task: string;
|
|
124
|
+
context?: string;
|
|
125
|
+
strategy: "file-based" | "feature-based" | "risk-based" | "auto";
|
|
126
|
+
maxSubtasks: number;
|
|
127
|
+
epicTitle: string;
|
|
128
|
+
epicDescription?: string;
|
|
129
|
+
subtasks: Array<{
|
|
130
|
+
title: string;
|
|
131
|
+
description?: string;
|
|
132
|
+
files: string[];
|
|
133
|
+
dependencies?: number[];
|
|
134
|
+
estimated_complexity?: number;
|
|
135
|
+
}>;
|
|
136
|
+
}): PartialEvalRecord;
|
|
137
|
+
/**
|
|
138
|
+
* Capture a subtask outcome
|
|
139
|
+
*
|
|
140
|
+
* Called when swarm_complete finishes a subtask.
|
|
141
|
+
* Updates the in-progress record with outcome data.
|
|
142
|
+
*/
|
|
143
|
+
export declare function captureSubtaskOutcome(params: {
|
|
144
|
+
epicId: string;
|
|
145
|
+
projectPath: string;
|
|
146
|
+
beadId: string;
|
|
147
|
+
title: string;
|
|
148
|
+
plannedFiles: string[];
|
|
149
|
+
actualFiles: string[];
|
|
150
|
+
durationMs: number;
|
|
151
|
+
errorCount: number;
|
|
152
|
+
retryCount: number;
|
|
153
|
+
success: boolean;
|
|
154
|
+
failureMode?: string;
|
|
155
|
+
}): void;
|
|
156
|
+
/**
|
|
157
|
+
* Finalize an eval record
|
|
158
|
+
*
|
|
159
|
+
* Called when all subtasks are complete.
|
|
160
|
+
* Computes aggregate metrics and marks record as complete.
|
|
161
|
+
*/
|
|
162
|
+
export declare function finalizeEvalRecord(params: {
|
|
163
|
+
epicId: string;
|
|
164
|
+
projectPath: string;
|
|
165
|
+
}): EvalRecord | null;
|
|
166
|
+
/**
|
|
167
|
+
* Capture human feedback on a decomposition
|
|
168
|
+
*/
|
|
169
|
+
export declare function captureHumanFeedback(params: {
|
|
170
|
+
epicId: string;
|
|
171
|
+
projectPath: string;
|
|
172
|
+
accepted: boolean;
|
|
173
|
+
modified: boolean;
|
|
174
|
+
notes?: string;
|
|
175
|
+
}): void;
|
|
176
|
+
/**
|
|
177
|
+
* Export eval records as Evalite-compatible test cases
|
|
178
|
+
*
|
|
179
|
+
* Filters to only complete records with outcomes.
|
|
180
|
+
*/
|
|
181
|
+
export declare function exportForEvalite(projectPath: string): Array<{
|
|
182
|
+
input: {
|
|
183
|
+
task: string;
|
|
184
|
+
context?: string;
|
|
185
|
+
};
|
|
186
|
+
expected: {
|
|
187
|
+
minSubtasks: number;
|
|
188
|
+
maxSubtasks: number;
|
|
189
|
+
requiredFiles?: string[];
|
|
190
|
+
overallSuccess?: boolean;
|
|
191
|
+
};
|
|
192
|
+
actual: EvalRecord;
|
|
193
|
+
}>;
|
|
194
|
+
/**
|
|
195
|
+
* Get statistics about captured eval data
|
|
196
|
+
*/
|
|
197
|
+
export declare function getEvalDataStats(projectPath: string): {
|
|
198
|
+
totalRecords: number;
|
|
199
|
+
completeRecords: number;
|
|
200
|
+
successRate: number;
|
|
201
|
+
avgSubtasks: number;
|
|
202
|
+
avgDurationMs: number;
|
|
203
|
+
avgScopeAccuracy: number;
|
|
204
|
+
avgTimeBalance: number;
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=eval-capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval-capture.d.ts","sourceRoot":"","sources":["../src/eval-capture.ts"],"names":[],"mappings":"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"}
|