opencode-swarm-plugin 0.43.0 → 0.44.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/bin/cass.characterization.test.ts +422 -0
- package/bin/swarm.serve.test.ts +6 -4
- package/bin/swarm.test.ts +68 -0
- package/bin/swarm.ts +81 -8
- package/dist/compaction-prompt-scoring.js +139 -0
- package/dist/contributor-tools.d.ts +42 -0
- package/dist/contributor-tools.d.ts.map +1 -0
- package/dist/eval-capture.js +12811 -0
- package/dist/hive.d.ts.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7728 -62590
- package/dist/plugin.js +23833 -78695
- package/dist/sessions/agent-discovery.d.ts +59 -0
- package/dist/sessions/agent-discovery.d.ts.map +1 -0
- package/dist/sessions/index.d.ts +10 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/swarm-orchestrate.d.ts.map +1 -1
- package/dist/swarm-prompts.d.ts.map +1 -1
- package/dist/swarm-review.d.ts.map +1 -1
- package/package.json +17 -5
- package/.changeset/swarm-insights-data-layer.md +0 -63
- package/.hive/analysis/eval-failure-analysis-2025-12-25.md +0 -331
- package/.hive/analysis/session-data-quality-audit.md +0 -320
- package/.hive/eval-results.json +0 -483
- package/.hive/issues.jsonl +0 -138
- package/.hive/memories.jsonl +0 -729
- package/.opencode/eval-history.jsonl +0 -327
- package/.turbo/turbo-build.log +0 -9
- package/CHANGELOG.md +0 -2255
- package/SCORER-ANALYSIS.md +0 -598
- package/docs/analysis/subagent-coordination-patterns.md +0 -902
- package/docs/analysis-socratic-planner-pattern.md +0 -504
- package/docs/planning/ADR-001-monorepo-structure.md +0 -171
- package/docs/planning/ADR-002-package-extraction.md +0 -393
- package/docs/planning/ADR-003-performance-improvements.md +0 -451
- package/docs/planning/ADR-004-message-queue-features.md +0 -187
- package/docs/planning/ADR-005-devtools-observability.md +0 -202
- package/docs/planning/ADR-007-swarm-enhancements-worktree-review.md +0 -168
- package/docs/planning/ADR-008-worker-handoff-protocol.md +0 -293
- package/docs/planning/ADR-009-oh-my-opencode-patterns.md +0 -353
- package/docs/planning/ROADMAP.md +0 -368
- package/docs/semantic-memory-cli-syntax.md +0 -123
- package/docs/swarm-mail-architecture.md +0 -1147
- package/docs/testing/context-recovery-test.md +0 -470
- package/evals/ARCHITECTURE.md +0 -1189
- package/evals/README.md +0 -768
- package/evals/compaction-prompt.eval.ts +0 -149
- package/evals/compaction-resumption.eval.ts +0 -289
- package/evals/coordinator-behavior.eval.ts +0 -307
- package/evals/coordinator-session.eval.ts +0 -154
- package/evals/evalite.config.ts.bak +0 -15
- package/evals/example.eval.ts +0 -31
- package/evals/fixtures/compaction-cases.ts +0 -350
- package/evals/fixtures/compaction-prompt-cases.ts +0 -311
- package/evals/fixtures/coordinator-sessions.ts +0 -328
- package/evals/fixtures/decomposition-cases.ts +0 -105
- package/evals/lib/compaction-loader.test.ts +0 -248
- package/evals/lib/compaction-loader.ts +0 -320
- package/evals/lib/data-loader.evalite-test.ts +0 -289
- package/evals/lib/data-loader.test.ts +0 -345
- package/evals/lib/data-loader.ts +0 -281
- package/evals/lib/llm.ts +0 -115
- package/evals/scorers/compaction-prompt-scorers.ts +0 -145
- package/evals/scorers/compaction-scorers.ts +0 -305
- package/evals/scorers/coordinator-discipline.evalite-test.ts +0 -539
- package/evals/scorers/coordinator-discipline.ts +0 -325
- package/evals/scorers/index.test.ts +0 -146
- package/evals/scorers/index.ts +0 -328
- package/evals/scorers/outcome-scorers.evalite-test.ts +0 -27
- package/evals/scorers/outcome-scorers.ts +0 -349
- package/evals/swarm-decomposition.eval.ts +0 -121
- package/examples/commands/swarm.md +0 -745
- package/examples/plugin-wrapper-template.ts +0 -2426
- package/examples/skills/hive-workflow/SKILL.md +0 -212
- package/examples/skills/skill-creator/SKILL.md +0 -223
- package/examples/skills/swarm-coordination/SKILL.md +0 -292
- package/global-skills/cli-builder/SKILL.md +0 -344
- package/global-skills/cli-builder/references/advanced-patterns.md +0 -244
- package/global-skills/learning-systems/SKILL.md +0 -644
- package/global-skills/skill-creator/LICENSE.txt +0 -202
- package/global-skills/skill-creator/SKILL.md +0 -352
- package/global-skills/skill-creator/references/output-patterns.md +0 -82
- package/global-skills/skill-creator/references/workflows.md +0 -28
- package/global-skills/swarm-coordination/SKILL.md +0 -995
- package/global-skills/swarm-coordination/references/coordinator-patterns.md +0 -235
- package/global-skills/swarm-coordination/references/strategies.md +0 -138
- package/global-skills/system-design/SKILL.md +0 -213
- package/global-skills/testing-patterns/SKILL.md +0 -430
- package/global-skills/testing-patterns/references/dependency-breaking-catalog.md +0 -586
- package/opencode-swarm-plugin-0.30.7.tgz +0 -0
- package/opencode-swarm-plugin-0.31.0.tgz +0 -0
- package/scripts/cleanup-test-memories.ts +0 -346
- package/scripts/init-skill.ts +0 -222
- package/scripts/migrate-unknown-sessions.ts +0 -349
- package/scripts/validate-skill.ts +0 -204
- package/src/agent-mail.ts +0 -1724
- package/src/anti-patterns.test.ts +0 -1167
- package/src/anti-patterns.ts +0 -448
- package/src/compaction-capture.integration.test.ts +0 -257
- package/src/compaction-hook.test.ts +0 -838
- package/src/compaction-hook.ts +0 -1204
- package/src/compaction-observability.integration.test.ts +0 -139
- package/src/compaction-observability.test.ts +0 -187
- package/src/compaction-observability.ts +0 -324
- package/src/compaction-prompt-scorers.test.ts +0 -475
- package/src/compaction-prompt-scoring.ts +0 -300
- package/src/dashboard.test.ts +0 -611
- package/src/dashboard.ts +0 -462
- package/src/error-enrichment.test.ts +0 -403
- package/src/error-enrichment.ts +0 -219
- package/src/eval-capture.test.ts +0 -1015
- package/src/eval-capture.ts +0 -929
- package/src/eval-gates.test.ts +0 -306
- package/src/eval-gates.ts +0 -218
- package/src/eval-history.test.ts +0 -508
- package/src/eval-history.ts +0 -214
- package/src/eval-learning.test.ts +0 -378
- package/src/eval-learning.ts +0 -360
- package/src/eval-runner.test.ts +0 -223
- package/src/eval-runner.ts +0 -402
- package/src/export-tools.test.ts +0 -476
- package/src/export-tools.ts +0 -257
- package/src/hive.integration.test.ts +0 -2241
- package/src/hive.ts +0 -1628
- package/src/index.ts +0 -935
- package/src/learning.integration.test.ts +0 -1815
- package/src/learning.ts +0 -1079
- package/src/logger.test.ts +0 -189
- package/src/logger.ts +0 -135
- package/src/mandate-promotion.test.ts +0 -473
- package/src/mandate-promotion.ts +0 -239
- package/src/mandate-storage.integration.test.ts +0 -601
- package/src/mandate-storage.test.ts +0 -578
- package/src/mandate-storage.ts +0 -794
- package/src/mandates.ts +0 -540
- package/src/memory-tools.test.ts +0 -195
- package/src/memory-tools.ts +0 -344
- package/src/memory.integration.test.ts +0 -334
- package/src/memory.test.ts +0 -158
- package/src/memory.ts +0 -527
- package/src/model-selection.test.ts +0 -188
- package/src/model-selection.ts +0 -68
- package/src/observability-tools.test.ts +0 -359
- package/src/observability-tools.ts +0 -871
- package/src/output-guardrails.test.ts +0 -438
- package/src/output-guardrails.ts +0 -381
- package/src/pattern-maturity.test.ts +0 -1160
- package/src/pattern-maturity.ts +0 -525
- package/src/planning-guardrails.test.ts +0 -491
- package/src/planning-guardrails.ts +0 -438
- package/src/plugin.ts +0 -23
- package/src/post-compaction-tracker.test.ts +0 -251
- package/src/post-compaction-tracker.ts +0 -237
- package/src/query-tools.test.ts +0 -636
- package/src/query-tools.ts +0 -324
- package/src/rate-limiter.integration.test.ts +0 -466
- package/src/rate-limiter.ts +0 -774
- package/src/replay-tools.test.ts +0 -496
- package/src/replay-tools.ts +0 -240
- package/src/repo-crawl.integration.test.ts +0 -441
- package/src/repo-crawl.ts +0 -610
- package/src/schemas/cell-events.test.ts +0 -347
- package/src/schemas/cell-events.ts +0 -807
- package/src/schemas/cell.ts +0 -257
- package/src/schemas/evaluation.ts +0 -166
- package/src/schemas/index.test.ts +0 -199
- package/src/schemas/index.ts +0 -286
- package/src/schemas/mandate.ts +0 -232
- package/src/schemas/swarm-context.ts +0 -115
- package/src/schemas/task.ts +0 -161
- package/src/schemas/worker-handoff.test.ts +0 -302
- package/src/schemas/worker-handoff.ts +0 -131
- package/src/skills.integration.test.ts +0 -1192
- package/src/skills.test.ts +0 -643
- package/src/skills.ts +0 -1549
- package/src/storage.integration.test.ts +0 -341
- package/src/storage.ts +0 -884
- package/src/structured.integration.test.ts +0 -817
- package/src/structured.test.ts +0 -1046
- package/src/structured.ts +0 -762
- package/src/swarm-decompose.test.ts +0 -188
- package/src/swarm-decompose.ts +0 -1302
- package/src/swarm-deferred.integration.test.ts +0 -157
- package/src/swarm-deferred.test.ts +0 -38
- package/src/swarm-insights.test.ts +0 -214
- package/src/swarm-insights.ts +0 -459
- package/src/swarm-mail.integration.test.ts +0 -970
- package/src/swarm-mail.ts +0 -739
- package/src/swarm-orchestrate.integration.test.ts +0 -282
- package/src/swarm-orchestrate.test.ts +0 -548
- package/src/swarm-orchestrate.ts +0 -3084
- package/src/swarm-prompts.test.ts +0 -1270
- package/src/swarm-prompts.ts +0 -2077
- package/src/swarm-research.integration.test.ts +0 -701
- package/src/swarm-research.test.ts +0 -698
- package/src/swarm-research.ts +0 -472
- package/src/swarm-review.integration.test.ts +0 -285
- package/src/swarm-review.test.ts +0 -879
- package/src/swarm-review.ts +0 -709
- package/src/swarm-strategies.ts +0 -407
- package/src/swarm-worktree.test.ts +0 -501
- package/src/swarm-worktree.ts +0 -575
- package/src/swarm.integration.test.ts +0 -2377
- package/src/swarm.ts +0 -38
- package/src/tool-adapter.integration.test.ts +0 -1221
- package/src/tool-availability.ts +0 -461
- package/tsconfig.json +0 -28
package/src/mandate-promotion.ts
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mandate Promotion Engine
|
|
3
|
-
*
|
|
4
|
-
* Handles state transitions for mandate entries based on vote scores:
|
|
5
|
-
* - candidate → established: net_votes >= 2
|
|
6
|
-
* - established → mandate: net_votes >= 5 AND vote_ratio >= 0.7
|
|
7
|
-
* - any → rejected: net_votes <= -3
|
|
8
|
-
*
|
|
9
|
-
* Integrates with pattern-maturity.ts decay calculations and state machine patterns.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { DEFAULT_MANDATE_DECAY_CONFIG } from "./schemas/mandate";
|
|
13
|
-
import type {
|
|
14
|
-
MandateDecayConfig,
|
|
15
|
-
MandateEntry,
|
|
16
|
-
MandateScore,
|
|
17
|
-
MandateStatus,
|
|
18
|
-
} from "./schemas/mandate";
|
|
19
|
-
|
|
20
|
-
// ============================================================================
|
|
21
|
-
// Types
|
|
22
|
-
// ============================================================================
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Result of a promotion evaluation
|
|
26
|
-
*/
|
|
27
|
-
export interface PromotionResult {
|
|
28
|
-
/** The mandate entry ID */
|
|
29
|
-
mandate_id: string;
|
|
30
|
-
/** Status before evaluation */
|
|
31
|
-
previous_status: MandateStatus;
|
|
32
|
-
/** Status after evaluation */
|
|
33
|
-
new_status: MandateStatus;
|
|
34
|
-
/** Calculated score */
|
|
35
|
-
score: MandateScore;
|
|
36
|
-
/** Whether status changed */
|
|
37
|
-
promoted: boolean;
|
|
38
|
-
/** Human-readable reason for the transition (or lack thereof) */
|
|
39
|
-
reason: string;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// ============================================================================
|
|
43
|
-
// Core Functions
|
|
44
|
-
// ============================================================================
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Determine new status based on score and current status
|
|
48
|
-
*
|
|
49
|
-
* State machine:
|
|
50
|
-
* - candidate → established: net_votes >= establishedNetVotesThreshold (2)
|
|
51
|
-
* - established → mandate: net_votes >= mandateNetVotesThreshold (5) AND vote_ratio >= mandateVoteRatioThreshold (0.7)
|
|
52
|
-
* - any → rejected: net_votes <= rejectedNetVotesThreshold (-3)
|
|
53
|
-
* - mandate stays mandate (no demotion)
|
|
54
|
-
* - rejected stays rejected (permanent)
|
|
55
|
-
*
|
|
56
|
-
* @param score - Calculated mandate score with decayed votes
|
|
57
|
-
* @param currentStatus - Current status of the mandate entry
|
|
58
|
-
* @param config - Threshold configuration
|
|
59
|
-
* @returns New status after applying transition rules
|
|
60
|
-
*/
|
|
61
|
-
export function shouldPromote(
|
|
62
|
-
score: MandateScore,
|
|
63
|
-
currentStatus: MandateStatus,
|
|
64
|
-
config: MandateDecayConfig = DEFAULT_MANDATE_DECAY_CONFIG,
|
|
65
|
-
): MandateStatus {
|
|
66
|
-
// Edge case: already rejected, stays rejected (permanent)
|
|
67
|
-
if (currentStatus === "rejected") {
|
|
68
|
-
return "rejected";
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Edge case: already mandate, stays mandate (no demotion)
|
|
72
|
-
if (currentStatus === "mandate") {
|
|
73
|
-
return "mandate";
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Now we know status is either "candidate" or "established"
|
|
77
|
-
// Check rejection threshold first
|
|
78
|
-
if (score.net_votes <= config.rejectedNetVotesThreshold) {
|
|
79
|
-
return "rejected";
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Check mandate promotion (from established only)
|
|
83
|
-
if (currentStatus === "established") {
|
|
84
|
-
if (
|
|
85
|
-
score.net_votes >= config.mandateNetVotesThreshold &&
|
|
86
|
-
score.vote_ratio >= config.mandateVoteRatioThreshold
|
|
87
|
-
) {
|
|
88
|
-
return "mandate";
|
|
89
|
-
}
|
|
90
|
-
return "established"; // Stays established
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Now we know status is "candidate"
|
|
94
|
-
// Check established promotion
|
|
95
|
-
if (score.net_votes >= config.establishedNetVotesThreshold) {
|
|
96
|
-
return "established";
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return "candidate"; // Stays candidate
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Evaluate promotion for a mandate entry
|
|
104
|
-
*
|
|
105
|
-
* Main entry point for promotion logic. Calculates new status and provides
|
|
106
|
-
* detailed reasoning for the decision.
|
|
107
|
-
*
|
|
108
|
-
* @param entry - The mandate entry to evaluate
|
|
109
|
-
* @param score - Calculated score with decayed votes
|
|
110
|
-
* @param config - Threshold configuration (optional)
|
|
111
|
-
* @returns Promotion result with status change and reasoning
|
|
112
|
-
*/
|
|
113
|
-
export function evaluatePromotion(
|
|
114
|
-
entry: MandateEntry,
|
|
115
|
-
score: MandateScore,
|
|
116
|
-
config: MandateDecayConfig = DEFAULT_MANDATE_DECAY_CONFIG,
|
|
117
|
-
): PromotionResult {
|
|
118
|
-
const previousStatus = entry.status;
|
|
119
|
-
const newStatus = shouldPromote(score, previousStatus, config);
|
|
120
|
-
const promoted = newStatus !== previousStatus;
|
|
121
|
-
|
|
122
|
-
// Generate reason based on transition
|
|
123
|
-
let reason: string;
|
|
124
|
-
|
|
125
|
-
if (newStatus === "rejected" && previousStatus === "rejected") {
|
|
126
|
-
reason = `Remains rejected (permanent)`;
|
|
127
|
-
} else if (newStatus === "rejected") {
|
|
128
|
-
reason = `Rejected due to negative consensus (net_votes: ${score.net_votes.toFixed(2)} ≤ ${config.rejectedNetVotesThreshold})`;
|
|
129
|
-
} else if (newStatus === "mandate" && previousStatus === "mandate") {
|
|
130
|
-
reason = `Remains mandate (no demotion)`;
|
|
131
|
-
} else if (newStatus === "mandate" && previousStatus === "established") {
|
|
132
|
-
reason = `Promoted to mandate (net_votes: ${score.net_votes.toFixed(2)} ≥ ${config.mandateNetVotesThreshold}, ratio: ${score.vote_ratio.toFixed(2)} ≥ ${config.mandateVoteRatioThreshold})`;
|
|
133
|
-
} else if (newStatus === "established" && previousStatus === "established") {
|
|
134
|
-
reason = `Remains established (net_votes: ${score.net_votes.toFixed(2)}, ratio: ${score.vote_ratio.toFixed(2)} below mandate threshold)`;
|
|
135
|
-
} else if (newStatus === "established" && previousStatus === "candidate") {
|
|
136
|
-
reason = `Promoted to established (net_votes: ${score.net_votes.toFixed(2)} ≥ ${config.establishedNetVotesThreshold})`;
|
|
137
|
-
} else if (newStatus === "candidate") {
|
|
138
|
-
reason = `Remains candidate (net_votes: ${score.net_votes.toFixed(2)} below threshold)`;
|
|
139
|
-
} else {
|
|
140
|
-
reason = `No status change (current: ${previousStatus})`;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return {
|
|
144
|
-
mandate_id: entry.id,
|
|
145
|
-
previous_status: previousStatus,
|
|
146
|
-
new_status: newStatus,
|
|
147
|
-
score,
|
|
148
|
-
promoted,
|
|
149
|
-
reason,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Format promotion result for logging or display
|
|
155
|
-
*
|
|
156
|
-
* @param result - Promotion result
|
|
157
|
-
* @returns Formatted string
|
|
158
|
-
*/
|
|
159
|
-
export function formatPromotionResult(result: PromotionResult): string {
|
|
160
|
-
const arrow = result.promoted
|
|
161
|
-
? `${result.previous_status} → ${result.new_status}`
|
|
162
|
-
: result.new_status;
|
|
163
|
-
|
|
164
|
-
return `[${result.mandate_id}] ${arrow}: ${result.reason}`;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Batch evaluate promotions for multiple entries
|
|
169
|
-
*
|
|
170
|
-
* Useful for periodic recalculation of all mandate statuses.
|
|
171
|
-
*
|
|
172
|
-
* @param entries - Map of mandate IDs to entries
|
|
173
|
-
* @param scores - Map of mandate IDs to scores
|
|
174
|
-
* @param config - Threshold configuration (optional)
|
|
175
|
-
* @returns Array of promotion results
|
|
176
|
-
*/
|
|
177
|
-
export function evaluateBatchPromotions(
|
|
178
|
-
entries: Map<string, MandateEntry>,
|
|
179
|
-
scores: Map<string, MandateScore>,
|
|
180
|
-
config: MandateDecayConfig = DEFAULT_MANDATE_DECAY_CONFIG,
|
|
181
|
-
): PromotionResult[] {
|
|
182
|
-
const results: PromotionResult[] = [];
|
|
183
|
-
|
|
184
|
-
for (const [id, entry] of entries) {
|
|
185
|
-
const score = scores.get(id);
|
|
186
|
-
if (!score) {
|
|
187
|
-
// Skip entries without scores
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
const result = evaluatePromotion(entry, score, config);
|
|
192
|
-
results.push(result);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
return results;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Get entries that changed status (promoted or demoted)
|
|
200
|
-
*
|
|
201
|
-
* Useful for filtering batch results to only show changes.
|
|
202
|
-
*
|
|
203
|
-
* @param results - Promotion results
|
|
204
|
-
* @returns Only the results where status changed
|
|
205
|
-
*/
|
|
206
|
-
export function getStatusChanges(
|
|
207
|
-
results: PromotionResult[],
|
|
208
|
-
): PromotionResult[] {
|
|
209
|
-
return results.filter((r) => r.promoted);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Group promotion results by status transition
|
|
214
|
-
*
|
|
215
|
-
* Useful for analytics and reporting.
|
|
216
|
-
*
|
|
217
|
-
* @param results - Promotion results
|
|
218
|
-
* @returns Map of transition keys (e.g., "candidate→established") to results
|
|
219
|
-
*/
|
|
220
|
-
export function groupByTransition(
|
|
221
|
-
results: PromotionResult[],
|
|
222
|
-
): Map<string, PromotionResult[]> {
|
|
223
|
-
const groups = new Map<string, PromotionResult[]>();
|
|
224
|
-
|
|
225
|
-
for (const result of results) {
|
|
226
|
-
const key = result.promoted
|
|
227
|
-
? `${result.previous_status}→${result.new_status}`
|
|
228
|
-
: result.new_status;
|
|
229
|
-
|
|
230
|
-
const existing = groups.get(key);
|
|
231
|
-
if (existing) {
|
|
232
|
-
existing.push(result);
|
|
233
|
-
} else {
|
|
234
|
-
groups.set(key, [result]);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
return groups;
|
|
239
|
-
}
|