opencode-swarm-plugin 0.44.0 → 0.44.2
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/swarm.serve.test.ts +6 -4
- package/bin/swarm.ts +18 -12
- package/dist/compaction-prompt-scoring.js +139 -0
- package/dist/eval-capture.js +12811 -0
- package/dist/hive.d.ts.map +1 -1
- package/dist/hive.js +14834 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7743 -62593
- package/dist/plugin.js +24052 -78907
- package/dist/swarm-orchestrate.d.ts.map +1 -1
- package/dist/swarm-prompts.d.ts.map +1 -1
- package/dist/swarm-prompts.js +39407 -0
- package/dist/swarm-review.d.ts.map +1 -1
- package/dist/swarm-validation.d.ts +127 -0
- package/dist/swarm-validation.d.ts.map +1 -0
- package/dist/validators/index.d.ts +7 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/schema-validator.d.ts +58 -0
- package/dist/validators/schema-validator.d.ts.map +1 -0
- 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 -2286
- 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/ADR-010-cass-inhousing.md +0 -1215
- 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/cass-baseline.ts +0 -217
- 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 -2515
- 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/contributor-tools.test.ts +0 -133
- package/src/contributor-tools.ts +0 -201
- 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 -940
- 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/sessions/agent-discovery.test.ts +0 -137
- package/src/sessions/agent-discovery.ts +0 -112
- package/src/sessions/index.ts +0 -15
- 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
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Storage Integration Tests
|
|
3
|
-
*
|
|
4
|
-
* Tests the storage module with real semantic-memory backend.
|
|
5
|
-
* Requires semantic-memory to be available (native or via bunx).
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { describe, it, expect, beforeAll, afterAll } from "vitest";
|
|
9
|
-
import {
|
|
10
|
-
SemanticMemoryStorage,
|
|
11
|
-
InMemoryStorage,
|
|
12
|
-
isSemanticMemoryAvailable,
|
|
13
|
-
getResolvedCommand,
|
|
14
|
-
resetCommandCache,
|
|
15
|
-
createStorage,
|
|
16
|
-
createStorageWithFallback,
|
|
17
|
-
} from "./storage";
|
|
18
|
-
import type { FeedbackEvent } from "./learning";
|
|
19
|
-
import type { DecompositionPattern } from "./anti-patterns";
|
|
20
|
-
import type { PatternMaturity, MaturityFeedback } from "./pattern-maturity";
|
|
21
|
-
|
|
22
|
-
// Use unique collection names to avoid conflicts with other tests
|
|
23
|
-
const TEST_COLLECTIONS = {
|
|
24
|
-
feedback: `test-feedback-${Date.now()}`,
|
|
25
|
-
patterns: `test-patterns-${Date.now()}`,
|
|
26
|
-
maturity: `test-maturity-${Date.now()}`,
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
describe("Storage Command Resolution", () => {
|
|
30
|
-
beforeAll(() => {
|
|
31
|
-
resetCommandCache();
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
afterAll(() => {
|
|
35
|
-
resetCommandCache();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it("should resolve semantic-memory command", async () => {
|
|
39
|
-
const cmd = await getResolvedCommand();
|
|
40
|
-
expect(cmd).toBeDefined();
|
|
41
|
-
expect(cmd.length).toBeGreaterThan(0);
|
|
42
|
-
|
|
43
|
-
// Should be either native or bunx
|
|
44
|
-
if (cmd.length === 1) {
|
|
45
|
-
expect(cmd[0]).toBe("semantic-memory");
|
|
46
|
-
} else {
|
|
47
|
-
expect(cmd[0]).toBe("bunx");
|
|
48
|
-
expect(cmd[1]).toBe("semantic-memory");
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it("should cache the resolved command", async () => {
|
|
53
|
-
const cmd1 = await getResolvedCommand();
|
|
54
|
-
const cmd2 = await getResolvedCommand();
|
|
55
|
-
expect(cmd1).toBe(cmd2); // Same reference = cached
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it("should reset cache when requested", async () => {
|
|
59
|
-
const cmd1 = await getResolvedCommand();
|
|
60
|
-
resetCommandCache();
|
|
61
|
-
const cmd2 = await getResolvedCommand();
|
|
62
|
-
// After reset, should resolve again (may be same value but different reference)
|
|
63
|
-
expect(cmd1).toEqual(cmd2);
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
describe("Storage Availability Check", () => {
|
|
68
|
-
it("should detect semantic-memory availability", async () => {
|
|
69
|
-
const available = await isSemanticMemoryAvailable();
|
|
70
|
-
// This test passes regardless - we just verify it returns a boolean
|
|
71
|
-
expect(typeof available).toBe("boolean");
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
describe("SemanticMemoryStorage Integration", () => {
|
|
76
|
-
let storage: SemanticMemoryStorage;
|
|
77
|
-
let isAvailable: boolean;
|
|
78
|
-
|
|
79
|
-
beforeAll(async () => {
|
|
80
|
-
isAvailable = await isSemanticMemoryAvailable();
|
|
81
|
-
if (isAvailable) {
|
|
82
|
-
storage = new SemanticMemoryStorage({
|
|
83
|
-
collections: TEST_COLLECTIONS,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
afterAll(async () => {
|
|
89
|
-
if (storage) {
|
|
90
|
-
await storage.close();
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
describe("Feedback Operations", () => {
|
|
95
|
-
it.skipIf(!isAvailable)("should store and retrieve feedback", async () => {
|
|
96
|
-
const event: FeedbackEvent = {
|
|
97
|
-
id: `feedback-${Date.now()}`,
|
|
98
|
-
criterion: "test-criterion-storage",
|
|
99
|
-
type: "helpful",
|
|
100
|
-
timestamp: new Date().toISOString(),
|
|
101
|
-
bead_id: "bd-storage-test",
|
|
102
|
-
context: "Integration test feedback",
|
|
103
|
-
raw_value: 1,
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
await storage.storeFeedback(event);
|
|
107
|
-
|
|
108
|
-
// Give it a moment to persist
|
|
109
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
110
|
-
|
|
111
|
-
const all = await storage.getAllFeedback();
|
|
112
|
-
expect(all.length).toBeGreaterThanOrEqual(0); // May be empty if semantic search doesn't find it immediately
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it.skipIf(!isAvailable)("should find similar feedback", async () => {
|
|
116
|
-
const results = await storage.findSimilarFeedback("test", 5);
|
|
117
|
-
expect(Array.isArray(results)).toBe(true);
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
describe("Pattern Operations", () => {
|
|
122
|
-
it.skipIf(!isAvailable)("should store and retrieve patterns", async () => {
|
|
123
|
-
const pattern: DecompositionPattern = {
|
|
124
|
-
id: `pattern-storage-${Date.now()}`,
|
|
125
|
-
kind: "pattern",
|
|
126
|
-
content: "Test pattern for storage integration",
|
|
127
|
-
is_negative: false,
|
|
128
|
-
success_count: 1,
|
|
129
|
-
failure_count: 0,
|
|
130
|
-
created_at: new Date().toISOString(),
|
|
131
|
-
updated_at: new Date().toISOString(),
|
|
132
|
-
tags: ["test", "storage"],
|
|
133
|
-
example_beads: [],
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
await storage.storePattern(pattern);
|
|
137
|
-
|
|
138
|
-
// Give it a moment to persist
|
|
139
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
140
|
-
|
|
141
|
-
const all = await storage.getAllPatterns();
|
|
142
|
-
expect(Array.isArray(all)).toBe(true);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it.skipIf(!isAvailable)("should find similar patterns", async () => {
|
|
146
|
-
const results = await storage.findSimilarPatterns("test", 5);
|
|
147
|
-
expect(Array.isArray(results)).toBe(true);
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it.skipIf(!isAvailable)("should get anti-patterns", async () => {
|
|
151
|
-
const results = await storage.getAntiPatterns();
|
|
152
|
-
expect(Array.isArray(results)).toBe(true);
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
describe("Maturity Operations", () => {
|
|
157
|
-
it.skipIf(!isAvailable)("should store and retrieve maturity", async () => {
|
|
158
|
-
const maturity: PatternMaturity = {
|
|
159
|
-
pattern_id: `maturity-storage-${Date.now()}`,
|
|
160
|
-
state: "candidate",
|
|
161
|
-
helpful_count: 0,
|
|
162
|
-
harmful_count: 0,
|
|
163
|
-
last_validated: new Date().toISOString(),
|
|
164
|
-
promoted_at: undefined,
|
|
165
|
-
deprecated_at: undefined,
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
await storage.storeMaturity(maturity);
|
|
169
|
-
|
|
170
|
-
// Give it a moment to persist
|
|
171
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
172
|
-
|
|
173
|
-
const all = await storage.getAllMaturity();
|
|
174
|
-
expect(Array.isArray(all)).toBe(true);
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it.skipIf(!isAvailable)(
|
|
178
|
-
"should store and retrieve maturity feedback",
|
|
179
|
-
async () => {
|
|
180
|
-
const feedback: MaturityFeedback = {
|
|
181
|
-
pattern_id: `maturity-feedback-${Date.now()}`,
|
|
182
|
-
type: "helpful",
|
|
183
|
-
timestamp: new Date().toISOString(),
|
|
184
|
-
weight: 1,
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
await storage.storeMaturityFeedback(feedback);
|
|
188
|
-
|
|
189
|
-
// Give it a moment to persist
|
|
190
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
191
|
-
|
|
192
|
-
const results = await storage.getMaturityFeedback(feedback.pattern_id);
|
|
193
|
-
expect(Array.isArray(results)).toBe(true);
|
|
194
|
-
},
|
|
195
|
-
);
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
describe("Storage Factory", () => {
|
|
200
|
-
it("should create in-memory storage", () => {
|
|
201
|
-
const storage = createStorage({ backend: "memory" });
|
|
202
|
-
expect(storage).toBeInstanceOf(InMemoryStorage);
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
it("should create semantic-memory storage", () => {
|
|
206
|
-
const storage = createStorage({ backend: "semantic-memory" });
|
|
207
|
-
expect(storage).toBeInstanceOf(SemanticMemoryStorage);
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
it("should use default backend (semantic-memory)", () => {
|
|
211
|
-
const storage = createStorage();
|
|
212
|
-
expect(storage).toBeInstanceOf(SemanticMemoryStorage);
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
it("should throw on unknown backend", () => {
|
|
216
|
-
expect(() => createStorage({ backend: "unknown" as any })).toThrow(
|
|
217
|
-
"Unknown storage backend",
|
|
218
|
-
);
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
describe("Storage Factory with Fallback", () => {
|
|
223
|
-
it("should create storage with fallback", async () => {
|
|
224
|
-
const storage = await createStorageWithFallback();
|
|
225
|
-
expect(storage).toBeDefined();
|
|
226
|
-
// Will be SemanticMemoryStorage if available, InMemoryStorage otherwise
|
|
227
|
-
expect(
|
|
228
|
-
storage instanceof SemanticMemoryStorage ||
|
|
229
|
-
storage instanceof InMemoryStorage,
|
|
230
|
-
).toBe(true);
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
it("should respect explicit memory backend", async () => {
|
|
234
|
-
const storage = await createStorageWithFallback({ backend: "memory" });
|
|
235
|
-
expect(storage).toBeInstanceOf(InMemoryStorage);
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
describe("InMemoryStorage Parity", () => {
|
|
240
|
-
let storage: InMemoryStorage;
|
|
241
|
-
|
|
242
|
-
beforeAll(() => {
|
|
243
|
-
storage = new InMemoryStorage();
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
afterAll(async () => {
|
|
247
|
-
await storage.close();
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
it("should store and retrieve feedback", async () => {
|
|
251
|
-
const event: FeedbackEvent = {
|
|
252
|
-
id: `memory-feedback-${Date.now()}`,
|
|
253
|
-
criterion: "memory-test-criterion",
|
|
254
|
-
type: "helpful",
|
|
255
|
-
timestamp: new Date().toISOString(),
|
|
256
|
-
bead_id: "bd-memory-test",
|
|
257
|
-
raw_value: 1,
|
|
258
|
-
};
|
|
259
|
-
|
|
260
|
-
await storage.storeFeedback(event);
|
|
261
|
-
const results = await storage.getFeedbackByCriterion(
|
|
262
|
-
"memory-test-criterion",
|
|
263
|
-
);
|
|
264
|
-
expect(results).toHaveLength(1);
|
|
265
|
-
expect(results[0].criterion).toBe("memory-test-criterion");
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
it("should store and retrieve patterns", async () => {
|
|
269
|
-
const pattern: DecompositionPattern = {
|
|
270
|
-
id: "memory-pattern-1",
|
|
271
|
-
kind: "pattern",
|
|
272
|
-
content: "Memory test pattern",
|
|
273
|
-
is_negative: false,
|
|
274
|
-
success_count: 1,
|
|
275
|
-
failure_count: 0,
|
|
276
|
-
created_at: new Date().toISOString(),
|
|
277
|
-
updated_at: new Date().toISOString(),
|
|
278
|
-
tags: ["memory", "test"],
|
|
279
|
-
example_beads: [],
|
|
280
|
-
};
|
|
281
|
-
|
|
282
|
-
await storage.storePattern(pattern);
|
|
283
|
-
const result = await storage.getPattern("memory-pattern-1");
|
|
284
|
-
expect(result).not.toBeNull();
|
|
285
|
-
expect(result?.id).toBe("memory-pattern-1");
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
it("should store and retrieve maturity", async () => {
|
|
289
|
-
const maturity: PatternMaturity = {
|
|
290
|
-
pattern_id: "memory-maturity-1",
|
|
291
|
-
state: "candidate",
|
|
292
|
-
helpful_count: 0,
|
|
293
|
-
harmful_count: 0,
|
|
294
|
-
last_validated: new Date().toISOString(),
|
|
295
|
-
promoted_at: undefined,
|
|
296
|
-
deprecated_at: undefined,
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
await storage.storeMaturity(maturity);
|
|
300
|
-
const result = await storage.getMaturity("memory-maturity-1");
|
|
301
|
-
expect(result).not.toBeNull();
|
|
302
|
-
expect(result?.pattern_id).toBe("memory-maturity-1");
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
it("should find similar feedback by query", async () => {
|
|
306
|
-
const event: FeedbackEvent = {
|
|
307
|
-
id: `searchable-feedback-${Date.now()}`,
|
|
308
|
-
criterion: "searchable-criterion",
|
|
309
|
-
type: "harmful",
|
|
310
|
-
timestamp: new Date().toISOString(),
|
|
311
|
-
context: "This is searchable context",
|
|
312
|
-
raw_value: 1,
|
|
313
|
-
};
|
|
314
|
-
|
|
315
|
-
await storage.storeFeedback(event);
|
|
316
|
-
const results = await storage.findSimilarFeedback("searchable", 10);
|
|
317
|
-
expect(results.length).toBeGreaterThan(0);
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
it("should find similar patterns by query", async () => {
|
|
321
|
-
const pattern: DecompositionPattern = {
|
|
322
|
-
id: "searchable-pattern",
|
|
323
|
-
kind: "pattern",
|
|
324
|
-
content: "A uniquely searchable pattern description",
|
|
325
|
-
is_negative: false,
|
|
326
|
-
success_count: 1,
|
|
327
|
-
failure_count: 0,
|
|
328
|
-
created_at: new Date().toISOString(),
|
|
329
|
-
updated_at: new Date().toISOString(),
|
|
330
|
-
tags: ["searchable"],
|
|
331
|
-
example_beads: [],
|
|
332
|
-
};
|
|
333
|
-
|
|
334
|
-
await storage.storePattern(pattern);
|
|
335
|
-
const results = await storage.findSimilarPatterns(
|
|
336
|
-
"uniquely searchable",
|
|
337
|
-
10,
|
|
338
|
-
);
|
|
339
|
-
expect(results.length).toBeGreaterThan(0);
|
|
340
|
-
});
|
|
341
|
-
});
|