opencode-swarm-plugin 0.36.0 → 0.37.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/.hive/issues.jsonl +16 -4
- package/.hive/memories.jsonl +274 -1
- package/.turbo/turbo-build.log +4 -4
- package/.turbo/turbo-test.log +318 -318
- package/CHANGELOG.md +113 -0
- package/bin/swarm.test.ts +106 -0
- package/bin/swarm.ts +413 -179
- package/dist/compaction-hook.d.ts +54 -4
- package/dist/compaction-hook.d.ts.map +1 -1
- package/dist/eval-capture.d.ts +122 -17
- package/dist/eval-capture.d.ts.map +1 -1
- package/dist/index.d.ts +1 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1278 -619
- package/dist/planning-guardrails.d.ts +121 -0
- package/dist/planning-guardrails.d.ts.map +1 -1
- package/dist/plugin.d.ts +9 -9
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +1283 -329
- package/dist/schemas/task.d.ts +0 -1
- package/dist/schemas/task.d.ts.map +1 -1
- package/dist/swarm-decompose.d.ts +0 -8
- package/dist/swarm-decompose.d.ts.map +1 -1
- package/dist/swarm-orchestrate.d.ts.map +1 -1
- package/dist/swarm-prompts.d.ts +0 -4
- package/dist/swarm-prompts.d.ts.map +1 -1
- package/dist/swarm-review.d.ts.map +1 -1
- package/dist/swarm.d.ts +0 -6
- package/dist/swarm.d.ts.map +1 -1
- package/evals/README.md +38 -0
- package/evals/coordinator-session.eval.ts +154 -0
- package/evals/fixtures/coordinator-sessions.ts +328 -0
- package/evals/lib/data-loader.ts +69 -0
- package/evals/scorers/coordinator-discipline.evalite-test.ts +536 -0
- package/evals/scorers/coordinator-discipline.ts +315 -0
- package/evals/scorers/index.ts +12 -0
- package/examples/plugin-wrapper-template.ts +303 -4
- package/package.json +2 -2
- package/src/compaction-hook.test.ts +8 -1
- package/src/compaction-hook.ts +31 -21
- package/src/eval-capture.test.ts +390 -0
- package/src/eval-capture.ts +163 -4
- package/src/hive.integration.test.ts +148 -0
- package/src/hive.ts +89 -0
- package/src/index.ts +68 -1
- package/src/planning-guardrails.test.ts +387 -2
- package/src/planning-guardrails.ts +289 -0
- package/src/plugin.ts +10 -10
- package/src/swarm-decompose.test.ts +195 -0
- package/src/swarm-decompose.ts +72 -1
- package/src/swarm-orchestrate.ts +44 -0
- package/src/swarm-prompts.ts +20 -0
- package/src/swarm-review.integration.test.ts +24 -29
- package/src/swarm-review.ts +41 -0
package/dist/schemas/task.d.ts
CHANGED
|
@@ -98,7 +98,6 @@ export type TaskDecomposition = z.infer<typeof TaskDecompositionSchema>;
|
|
|
98
98
|
*/
|
|
99
99
|
export declare const DecomposeArgsSchema: z.ZodObject<{
|
|
100
100
|
task: z.ZodString;
|
|
101
|
-
max_subtasks: z.ZodDefault<z.ZodNumber>;
|
|
102
101
|
context: z.ZodOptional<z.ZodString>;
|
|
103
102
|
}, z.core.$strip>;
|
|
104
103
|
export type DecomposeArgs = z.infer<typeof DecomposeArgsSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/schemas/task.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;EAI/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;iBAYlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;iBAMlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/schemas/task.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;EAI/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;iBAYlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;iBAMlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAe7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;iBAMjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;iBAe7B,CAAC;AACJ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;iBAS5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -58,14 +58,12 @@ export declare const swarm_decompose: {
|
|
|
58
58
|
description: string;
|
|
59
59
|
args: {
|
|
60
60
|
task: z.ZodString;
|
|
61
|
-
max_subtasks: z.ZodOptional<z.ZodNumber>;
|
|
62
61
|
context: z.ZodOptional<z.ZodString>;
|
|
63
62
|
query_cass: z.ZodOptional<z.ZodBoolean>;
|
|
64
63
|
cass_limit: z.ZodOptional<z.ZodNumber>;
|
|
65
64
|
};
|
|
66
65
|
execute(args: {
|
|
67
66
|
task: string;
|
|
68
|
-
max_subtasks?: number | undefined;
|
|
69
67
|
context?: string | undefined;
|
|
70
68
|
query_cass?: boolean | undefined;
|
|
71
69
|
cass_limit?: number | undefined;
|
|
@@ -122,7 +120,6 @@ export declare const swarm_delegate_planning: {
|
|
|
122
120
|
args: {
|
|
123
121
|
task: z.ZodString;
|
|
124
122
|
context: z.ZodOptional<z.ZodString>;
|
|
125
|
-
max_subtasks: z.ZodOptional<z.ZodNumber>;
|
|
126
123
|
strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
127
124
|
"file-based": "file-based";
|
|
128
125
|
"feature-based": "feature-based";
|
|
@@ -136,7 +133,6 @@ export declare const swarm_delegate_planning: {
|
|
|
136
133
|
strategy: "file-based" | "feature-based" | "risk-based" | "auto";
|
|
137
134
|
query_cass: boolean;
|
|
138
135
|
context?: string | undefined;
|
|
139
|
-
max_subtasks?: number | undefined;
|
|
140
136
|
}, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
|
|
141
137
|
};
|
|
142
138
|
export declare class SwarmError extends Error {
|
|
@@ -200,14 +196,12 @@ export declare const decomposeTools: {
|
|
|
200
196
|
description: string;
|
|
201
197
|
args: {
|
|
202
198
|
task: z.ZodString;
|
|
203
|
-
max_subtasks: z.ZodOptional<z.ZodNumber>;
|
|
204
199
|
context: z.ZodOptional<z.ZodString>;
|
|
205
200
|
query_cass: z.ZodOptional<z.ZodBoolean>;
|
|
206
201
|
cass_limit: z.ZodOptional<z.ZodNumber>;
|
|
207
202
|
};
|
|
208
203
|
execute(args: {
|
|
209
204
|
task: string;
|
|
210
|
-
max_subtasks?: number | undefined;
|
|
211
205
|
context?: string | undefined;
|
|
212
206
|
query_cass?: boolean | undefined;
|
|
213
207
|
cass_limit?: number | undefined;
|
|
@@ -227,7 +221,6 @@ export declare const decomposeTools: {
|
|
|
227
221
|
args: {
|
|
228
222
|
task: z.ZodString;
|
|
229
223
|
context: z.ZodOptional<z.ZodString>;
|
|
230
|
-
max_subtasks: z.ZodOptional<z.ZodNumber>;
|
|
231
224
|
strategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
232
225
|
"file-based": "file-based";
|
|
233
226
|
"feature-based": "feature-based";
|
|
@@ -241,7 +234,6 @@ export declare const decomposeTools: {
|
|
|
241
234
|
strategy: "file-based" | "feature-based" | "risk-based" | "auto";
|
|
242
235
|
query_cass: boolean;
|
|
243
236
|
context?: string | undefined;
|
|
244
|
-
max_subtasks?: number | undefined;
|
|
245
237
|
}, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
|
|
246
238
|
};
|
|
247
239
|
swarm_plan_interactive: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm-decompose.d.ts","sourceRoot":"","sources":["../src/swarm-decompose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"swarm-decompose.d.ts","sourceRoot":"","sources":["../src/swarm-decompose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyJxB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,mBAAmB,GAAG,eAAe,CAAC;IACrD,WAAW,EAAE,MAAM,CAAC;CACrB;AA8CD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACvD,mBAAmB,EAAE,CAmDvB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GACnC,MAAM,EAAE,CAgBV;AA+GD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;CAiG1B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;CAkHvC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;CAuMlC,CAAC;AAMH,qBAAa,UAAW,SAAQ,KAAK;aAGjB,SAAS,EAAE,MAAM;aACjB,OAAO,CAAC,EAAE,OAAO;gBAFjC,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,YAAA;CAKpC;AAED,qBAAa,kBAAmB,SAAQ,UAAU;aAG9B,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ;gBADrC,OAAO,EAAE,MAAM,EACC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,YAAA;CAIxC;AAkCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;CA0RjC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm-orchestrate.d.ts","sourceRoot":"","sources":["../src/swarm-orchestrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"swarm-orchestrate.d.ts","sourceRoot":"","sources":["../src/swarm-orchestrate.ts"],"names":[],"mappings":"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"}
|
package/dist/swarm-prompts.d.ts
CHANGED
|
@@ -258,7 +258,6 @@ export declare const swarm_plan_prompt: {
|
|
|
258
258
|
"risk-based": "risk-based";
|
|
259
259
|
auto: "auto";
|
|
260
260
|
}>>;
|
|
261
|
-
max_subtasks: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
262
261
|
context: import("zod").ZodOptional<import("zod").ZodString>;
|
|
263
262
|
query_cass: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
264
263
|
cass_limit: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
@@ -267,7 +266,6 @@ export declare const swarm_plan_prompt: {
|
|
|
267
266
|
execute(args: {
|
|
268
267
|
task: string;
|
|
269
268
|
strategy?: "file-based" | "feature-based" | "risk-based" | "auto" | undefined;
|
|
270
|
-
max_subtasks?: number | undefined;
|
|
271
269
|
context?: string | undefined;
|
|
272
270
|
query_cass?: boolean | undefined;
|
|
273
271
|
cass_limit?: number | undefined;
|
|
@@ -394,7 +392,6 @@ export declare const promptTools: {
|
|
|
394
392
|
"risk-based": "risk-based";
|
|
395
393
|
auto: "auto";
|
|
396
394
|
}>>;
|
|
397
|
-
max_subtasks: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
398
395
|
context: import("zod").ZodOptional<import("zod").ZodString>;
|
|
399
396
|
query_cass: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
400
397
|
cass_limit: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
@@ -403,7 +400,6 @@ export declare const promptTools: {
|
|
|
403
400
|
execute(args: {
|
|
404
401
|
task: string;
|
|
405
402
|
strategy?: "file-based" | "feature-based" | "risk-based" | "auto" | undefined;
|
|
406
|
-
max_subtasks?: number | undefined;
|
|
407
403
|
context?: string | undefined;
|
|
408
404
|
query_cass?: boolean | undefined;
|
|
409
405
|
cass_limit?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm-prompts.d.ts","sourceRoot":"","sources":["../src/swarm-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"swarm-prompts.d.ts","sourceRoot":"","sources":["../src/swarm-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,s6EAkET,CAAC;AAEzB;;GAEG;AACH,eAAO,MAAM,6BAA6B,mxDAyDlB,CAAC;AAEzB;;;;;GAKG;AACH,eAAO,MAAM,cAAc,mkFAgFK,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,goUAiUnB,CAAC;AAEZ;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,4pHA4GV,CAAC;AAErB;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,u+DAyE7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,8jCAmCU,CAAC;AAMzC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,CAaT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH,GAAG,MAAM,CA2ET;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAUT;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,GAAG,MAAM,CAMT;AAMD;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;CAoC/B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkH9B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;CAsDjC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CA+I5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;CAoClC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;CAiI5B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm-review.d.ts","sourceRoot":"","sources":["../src/swarm-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"swarm-review.d.ts","sourceRoot":"","sources":["../src/swarm-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iBAAiB;;;;;iBAK5B,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,GAAG,eAAe,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;iBAkB5B,CAAC;AAEJ;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1C,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC;CACrC;AAkDD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAsGzE;AAmED;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;CA+GvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;CAkLhC,CAAC;AAMH;;GAEG;AACH,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAOD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAQhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEvD;AAMD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGvB,CAAC"}
|
package/dist/swarm.d.ts
CHANGED
|
@@ -455,7 +455,6 @@ export declare const swarmTools: {
|
|
|
455
455
|
"risk-based": "risk-based";
|
|
456
456
|
auto: "auto";
|
|
457
457
|
}>>;
|
|
458
|
-
max_subtasks: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
459
458
|
context: import("zod").ZodOptional<import("zod").ZodString>;
|
|
460
459
|
query_cass: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
461
460
|
cass_limit: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
@@ -464,7 +463,6 @@ export declare const swarmTools: {
|
|
|
464
463
|
execute(args: {
|
|
465
464
|
task: string;
|
|
466
465
|
strategy?: "file-based" | "feature-based" | "risk-based" | "auto" | undefined;
|
|
467
|
-
max_subtasks?: number | undefined;
|
|
468
466
|
context?: string | undefined;
|
|
469
467
|
query_cass?: boolean | undefined;
|
|
470
468
|
cass_limit?: number | undefined;
|
|
@@ -475,14 +473,12 @@ export declare const swarmTools: {
|
|
|
475
473
|
description: string;
|
|
476
474
|
args: {
|
|
477
475
|
task: import("zod").ZodString;
|
|
478
|
-
max_subtasks: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
479
476
|
context: import("zod").ZodOptional<import("zod").ZodString>;
|
|
480
477
|
query_cass: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
481
478
|
cass_limit: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
482
479
|
};
|
|
483
480
|
execute(args: {
|
|
484
481
|
task: string;
|
|
485
|
-
max_subtasks?: number | undefined;
|
|
486
482
|
context?: string | undefined;
|
|
487
483
|
query_cass?: boolean | undefined;
|
|
488
484
|
cass_limit?: number | undefined;
|
|
@@ -502,7 +498,6 @@ export declare const swarmTools: {
|
|
|
502
498
|
args: {
|
|
503
499
|
task: import("zod").ZodString;
|
|
504
500
|
context: import("zod").ZodOptional<import("zod").ZodString>;
|
|
505
|
-
max_subtasks: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
506
501
|
strategy: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
507
502
|
"file-based": "file-based";
|
|
508
503
|
"feature-based": "feature-based";
|
|
@@ -516,7 +511,6 @@ export declare const swarmTools: {
|
|
|
516
511
|
strategy: "file-based" | "feature-based" | "risk-based" | "auto";
|
|
517
512
|
query_cass: boolean;
|
|
518
513
|
context?: string | undefined;
|
|
519
|
-
max_subtasks?: number | undefined;
|
|
520
514
|
}, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
|
|
521
515
|
};
|
|
522
516
|
swarm_plan_interactive: {
|
package/dist/swarm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../src/swarm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AASjC;;;GAGG;AACH,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../src/swarm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AASjC;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMtB,CAAC"}
|
package/evals/README.md
CHANGED
|
@@ -107,6 +107,44 @@ See `fixtures/decomposition-cases.ts` for example test cases covering:
|
|
|
107
107
|
- Memory leak debugging
|
|
108
108
|
- Feature flag system
|
|
109
109
|
|
|
110
|
+
## Coordinator Session Eval
|
|
111
|
+
|
|
112
|
+
### coordinator-session.eval.ts
|
|
113
|
+
|
|
114
|
+
Scores coordinator discipline during swarm sessions.
|
|
115
|
+
|
|
116
|
+
**Data Sources:**
|
|
117
|
+
- Real captured sessions from `~/.config/swarm-tools/sessions/*.jsonl`
|
|
118
|
+
- Synthetic fixtures from `fixtures/coordinator-sessions.ts`
|
|
119
|
+
|
|
120
|
+
**Scorers:**
|
|
121
|
+
- `violationCount` - Protocol violations (edit files, run tests, reserve files)
|
|
122
|
+
- `spawnEfficiency` - Workers spawned / subtasks planned
|
|
123
|
+
- `reviewThoroughness` - Reviews completed / workers finished
|
|
124
|
+
- `timeToFirstSpawn` - Speed from decomposition to first worker spawn
|
|
125
|
+
- `overallDiscipline` - Weighted composite score
|
|
126
|
+
|
|
127
|
+
**Fixtures:**
|
|
128
|
+
- `perfectCoordinator` - 0 violations, 100% spawn, 100% review, 30s to spawn
|
|
129
|
+
- `badCoordinator` - 5 violations, 33% spawn, 0% review, 10min to spawn
|
|
130
|
+
- `decentCoordinator` - 1 violation, 100% spawn, 50% review, 45s to spawn
|
|
131
|
+
|
|
132
|
+
**Run:**
|
|
133
|
+
```bash
|
|
134
|
+
bunx evalite run evals/coordinator-session.eval.ts
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Data Loaders
|
|
138
|
+
|
|
139
|
+
### lib/data-loader.ts
|
|
140
|
+
|
|
141
|
+
Loads eval data from multiple sources:
|
|
142
|
+
|
|
143
|
+
- `loadEvalCases()` - PGlite eval_records table
|
|
144
|
+
- `loadCapturedSessions()` - Real coordinator sessions from `~/.config/swarm-tools/sessions/`
|
|
145
|
+
- `hasRealEvalData()` - Check if enough real data exists
|
|
146
|
+
- `getEvalDataSummary()` - Stats about available eval data
|
|
147
|
+
|
|
110
148
|
## Notes
|
|
111
149
|
|
|
112
150
|
- Evalite v1.0.0-beta.15 installed
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coordinator Session Eval - Scores Real Captured Sessions
|
|
3
|
+
*
|
|
4
|
+
* Tests that coordinators follow protocol:
|
|
5
|
+
* 1. Don't edit files directly (spawn workers)
|
|
6
|
+
* 2. Don't run tests directly (workers do verification)
|
|
7
|
+
* 3. Spawn workers for all subtasks
|
|
8
|
+
* 4. Review worker output before accepting
|
|
9
|
+
* 5. Minimize time to first spawn (don't overthink)
|
|
10
|
+
*
|
|
11
|
+
* ## Data Sources
|
|
12
|
+
*
|
|
13
|
+
* - **Real sessions**: Captured from ~/.config/swarm-tools/sessions/*.jsonl
|
|
14
|
+
* - **Synthetic fixtures**: Test cases in fixtures/coordinator-sessions.ts
|
|
15
|
+
*
|
|
16
|
+
* ## Test Flow
|
|
17
|
+
*
|
|
18
|
+
* 1. Load captured sessions from disk (via loadCapturedSessions)
|
|
19
|
+
* 2. Load synthetic fixtures for baseline validation
|
|
20
|
+
* 3. Run coordinator-discipline scorers on all sessions
|
|
21
|
+
* 4. Output scores and violation details
|
|
22
|
+
*
|
|
23
|
+
* Run with: pnpm eval:dev (watch mode) or pnpm eval:run (once)
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { evalite } from "evalite";
|
|
27
|
+
import { coordinatorSessionFixtures } from "./fixtures/coordinator-sessions.js";
|
|
28
|
+
import { loadCapturedSessions } from "./lib/data-loader.js";
|
|
29
|
+
import {
|
|
30
|
+
overallDiscipline,
|
|
31
|
+
reviewThoroughness,
|
|
32
|
+
spawnEfficiency,
|
|
33
|
+
timeToFirstSpawn,
|
|
34
|
+
violationCount,
|
|
35
|
+
} from "./scorers/index.js";
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Test 1: Synthetic Fixtures (Baseline)
|
|
39
|
+
*
|
|
40
|
+
* Validates scorers against known-good and known-bad coordinator sessions.
|
|
41
|
+
* These should have predictable scores.
|
|
42
|
+
*/
|
|
43
|
+
evalite("Coordinator Discipline - Synthetic Fixtures", {
|
|
44
|
+
data: async () =>
|
|
45
|
+
coordinatorSessionFixtures.map((fixture) => ({
|
|
46
|
+
input: fixture,
|
|
47
|
+
expected: {
|
|
48
|
+
session_id: fixture.session_id,
|
|
49
|
+
epic_id: fixture.epic_id,
|
|
50
|
+
},
|
|
51
|
+
})),
|
|
52
|
+
|
|
53
|
+
task: async (input) => {
|
|
54
|
+
// Return session as JSON string for scorers
|
|
55
|
+
return JSON.stringify(input);
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
scorers: [
|
|
59
|
+
violationCount,
|
|
60
|
+
spawnEfficiency,
|
|
61
|
+
reviewThoroughness,
|
|
62
|
+
timeToFirstSpawn,
|
|
63
|
+
overallDiscipline,
|
|
64
|
+
],
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Test 2: Real Captured Sessions
|
|
69
|
+
*
|
|
70
|
+
* Loads sessions from ~/.config/swarm-tools/sessions/ and scores them.
|
|
71
|
+
* This eval will skip if no captured sessions exist.
|
|
72
|
+
*/
|
|
73
|
+
evalite("Coordinator Discipline - Real Sessions", {
|
|
74
|
+
data: async () => {
|
|
75
|
+
// Try to load real sessions
|
|
76
|
+
const captured = await loadCapturedSessions({ limit: 20 });
|
|
77
|
+
|
|
78
|
+
// If no real sessions, return empty (eval will skip)
|
|
79
|
+
if (captured.length === 0) {
|
|
80
|
+
console.log(
|
|
81
|
+
"\n⚠️ No real coordinator sessions found in ~/.config/swarm-tools/sessions/",
|
|
82
|
+
);
|
|
83
|
+
console.log(
|
|
84
|
+
" Run a coordinator session with eval capture enabled to populate data.\n",
|
|
85
|
+
);
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
console.log(
|
|
90
|
+
`\n✓ Loaded ${captured.length} real coordinator sessions for evaluation\n`,
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
return captured.map(({ session }) => ({
|
|
94
|
+
input: session,
|
|
95
|
+
expected: {
|
|
96
|
+
session_id: session.session_id,
|
|
97
|
+
epic_id: session.epic_id,
|
|
98
|
+
},
|
|
99
|
+
}));
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
task: async (input) => {
|
|
103
|
+
return JSON.stringify(input);
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
scorers: [
|
|
107
|
+
violationCount,
|
|
108
|
+
spawnEfficiency,
|
|
109
|
+
reviewThoroughness,
|
|
110
|
+
timeToFirstSpawn,
|
|
111
|
+
overallDiscipline,
|
|
112
|
+
],
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Test 3: Perfect vs Bad Comparison
|
|
117
|
+
*
|
|
118
|
+
* Direct comparison between perfectCoordinator and badCoordinator fixtures
|
|
119
|
+
* to validate scorer ranges and weighting.
|
|
120
|
+
*/
|
|
121
|
+
evalite("Coordinator Discipline - Perfect vs Bad", {
|
|
122
|
+
data: async () => [
|
|
123
|
+
{
|
|
124
|
+
input: coordinatorSessionFixtures[0], // perfectCoordinator
|
|
125
|
+
expected: {
|
|
126
|
+
name: "perfect",
|
|
127
|
+
expectedViolations: 0,
|
|
128
|
+
expectedSpawnEfficiency: 1.0,
|
|
129
|
+
expectedReviewThoroughness: 1.0,
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
input: coordinatorSessionFixtures[1], // badCoordinator
|
|
134
|
+
expected: {
|
|
135
|
+
name: "bad",
|
|
136
|
+
expectedViolations: 5, // 3 direct violations + 2 no_worker_spawned
|
|
137
|
+
expectedSpawnEfficiency: 0.33, // 1/3 workers spawned
|
|
138
|
+
expectedReviewThoroughness: 0.0, // 0 reviews
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
|
|
143
|
+
task: async (input) => {
|
|
144
|
+
return JSON.stringify(input);
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
scorers: [
|
|
148
|
+
violationCount,
|
|
149
|
+
spawnEfficiency,
|
|
150
|
+
reviewThoroughness,
|
|
151
|
+
timeToFirstSpawn,
|
|
152
|
+
overallDiscipline,
|
|
153
|
+
],
|
|
154
|
+
});
|