@jamesaphoenix/tx-core 0.4.2 → 0.4.3
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 +480 -0
- package/dist/db.d.ts +28 -14
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +102 -14
- package/dist/db.js.map +1 -1
- package/dist/errors.d.ts +178 -34
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +119 -26
- package/dist/errors.js.map +1 -1
- package/dist/id.d.ts +10 -0
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +17 -1
- package/dist/id.js.map +1 -1
- package/dist/index.d.ts +15 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -8
- package/dist/index.js.map +1 -1
- package/dist/layer.d.ts +23 -14
- package/dist/layer.d.ts.map +1 -1
- package/dist/layer.js +75 -76
- package/dist/layer.js.map +1 -1
- package/dist/mappers/anchor.d.ts +15 -1
- package/dist/mappers/anchor.d.ts.map +1 -1
- package/dist/mappers/anchor.js +95 -28
- package/dist/mappers/anchor.js.map +1 -1
- package/dist/mappers/attempt.d.ts +3 -1
- package/dist/mappers/attempt.d.ts.map +1 -1
- package/dist/mappers/attempt.js +23 -9
- package/dist/mappers/attempt.js.map +1 -1
- package/dist/mappers/candidate.d.ts +3 -1
- package/dist/mappers/candidate.d.ts.map +1 -1
- package/dist/mappers/candidate.js +46 -16
- package/dist/mappers/candidate.js.map +1 -1
- package/dist/mappers/claim.d.ts +1 -1
- package/dist/mappers/claim.d.ts.map +1 -1
- package/dist/mappers/claim.js +11 -4
- package/dist/mappers/claim.js.map +1 -1
- package/dist/mappers/deduplication.d.ts +13 -1
- package/dist/mappers/deduplication.d.ts.map +1 -1
- package/dist/mappers/deduplication.js +22 -3
- package/dist/mappers/deduplication.js.map +1 -1
- package/dist/mappers/doc.d.ts +24 -0
- package/dist/mappers/doc.d.ts.map +1 -0
- package/dist/mappers/doc.js +161 -0
- package/dist/mappers/doc.js.map +1 -0
- package/dist/mappers/edge.d.ts +10 -1
- package/dist/mappers/edge.d.ts.map +1 -1
- package/dist/mappers/edge.js +74 -12
- package/dist/mappers/edge.js.map +1 -1
- package/dist/mappers/file-learning.d.ts.map +1 -1
- package/dist/mappers/file-learning.js +2 -1
- package/dist/mappers/file-learning.js.map +1 -1
- package/dist/mappers/index.d.ts +6 -7
- package/dist/mappers/index.d.ts.map +1 -1
- package/dist/mappers/index.js +10 -12
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/learning.d.ts +9 -1
- package/dist/mappers/learning.d.ts.map +1 -1
- package/dist/mappers/learning.js +94 -14
- package/dist/mappers/learning.js.map +1 -1
- package/dist/mappers/orchestrator-state.d.ts +1 -1
- package/dist/mappers/orchestrator-state.d.ts.map +1 -1
- package/dist/mappers/orchestrator-state.js +31 -5
- package/dist/mappers/orchestrator-state.js.map +1 -1
- package/dist/mappers/parse-date.d.ts +11 -0
- package/dist/mappers/parse-date.d.ts.map +1 -0
- package/dist/mappers/parse-date.js +18 -0
- package/dist/mappers/parse-date.js.map +1 -0
- package/dist/mappers/run.d.ts +14 -4
- package/dist/mappers/run.d.ts.map +1 -1
- package/dist/mappers/run.js +49 -18
- package/dist/mappers/run.js.map +1 -1
- package/dist/mappers/task.d.ts +5 -1
- package/dist/mappers/task.d.ts.map +1 -1
- package/dist/mappers/task.js +66 -16
- package/dist/mappers/task.js.map +1 -1
- package/dist/mappers/tracked-project.d.ts +3 -1
- package/dist/mappers/tracked-project.d.ts.map +1 -1
- package/dist/mappers/tracked-project.js +23 -9
- package/dist/mappers/tracked-project.js.map +1 -1
- package/dist/mappers/worker.d.ts +1 -1
- package/dist/mappers/worker.d.ts.map +1 -1
- package/dist/mappers/worker.js +44 -6
- package/dist/mappers/worker.js.map +1 -1
- package/dist/repo/anchor-repo.d.ts +2 -2
- package/dist/repo/anchor-repo.d.ts.map +1 -1
- package/dist/repo/anchor-repo.js +46 -5
- package/dist/repo/anchor-repo.js.map +1 -1
- package/dist/repo/attempt-repo.d.ts +2 -2
- package/dist/repo/attempt-repo.d.ts.map +1 -1
- package/dist/repo/attempt-repo.js +16 -6
- package/dist/repo/attempt-repo.js.map +1 -1
- package/dist/repo/candidate-repo.d.ts.map +1 -1
- package/dist/repo/candidate-repo.js +22 -1
- package/dist/repo/candidate-repo.js.map +1 -1
- package/dist/repo/claim-repo.d.ts +46 -2
- package/dist/repo/claim-repo.d.ts.map +1 -1
- package/dist/repo/claim-repo.js +113 -6
- package/dist/repo/claim-repo.js.map +1 -1
- package/dist/repo/compaction-repo.d.ts +41 -0
- package/dist/repo/compaction-repo.d.ts.map +1 -0
- package/dist/repo/compaction-repo.js +84 -0
- package/dist/repo/compaction-repo.js.map +1 -0
- package/dist/repo/deduplication-repo.d.ts +9 -1
- package/dist/repo/deduplication-repo.d.ts.map +1 -1
- package/dist/repo/deduplication-repo.js +46 -9
- package/dist/repo/deduplication-repo.js.map +1 -1
- package/dist/repo/dep-repo.d.ts +27 -3
- package/dist/repo/dep-repo.d.ts.map +1 -1
- package/dist/repo/dep-repo.js +166 -39
- package/dist/repo/dep-repo.js.map +1 -1
- package/dist/repo/doc-repo.d.ts +59 -0
- package/dist/repo/doc-repo.d.ts.map +1 -0
- package/dist/repo/doc-repo.js +276 -0
- package/dist/repo/doc-repo.js.map +1 -0
- package/dist/repo/edge-repo.d.ts +1 -1
- package/dist/repo/edge-repo.d.ts.map +1 -1
- package/dist/repo/edge-repo.js +65 -34
- package/dist/repo/edge-repo.js.map +1 -1
- package/dist/repo/file-learning-repo.d.ts +3 -3
- package/dist/repo/file-learning-repo.d.ts.map +1 -1
- package/dist/repo/file-learning-repo.js +19 -8
- package/dist/repo/file-learning-repo.js.map +1 -1
- package/dist/repo/index.d.ts +4 -6
- package/dist/repo/index.d.ts.map +1 -1
- package/dist/repo/index.js +3 -5
- package/dist/repo/index.js.map +1 -1
- package/dist/repo/learning-repo.d.ts +10 -3
- package/dist/repo/learning-repo.d.ts.map +1 -1
- package/dist/repo/learning-repo.js +68 -11
- package/dist/repo/learning-repo.js.map +1 -1
- package/dist/repo/orchestrator-state-repo.d.ts.map +1 -1
- package/dist/repo/orchestrator-state-repo.js +8 -1
- package/dist/repo/orchestrator-state-repo.js.map +1 -1
- package/dist/repo/run-repo.d.ts +3 -3
- package/dist/repo/run-repo.d.ts.map +1 -1
- package/dist/repo/run-repo.js +40 -19
- package/dist/repo/run-repo.js.map +1 -1
- package/dist/repo/task-repo.d.ts +14 -3
- package/dist/repo/task-repo.d.ts.map +1 -1
- package/dist/repo/task-repo.js +194 -20
- package/dist/repo/task-repo.js.map +1 -1
- package/dist/repo/tracked-project-repo.d.ts.map +1 -1
- package/dist/repo/tracked-project-repo.js +15 -1
- package/dist/repo/tracked-project-repo.js.map +1 -1
- package/dist/repo/worker-repo.d.ts +3 -2
- package/dist/repo/worker-repo.d.ts.map +1 -1
- package/dist/repo/worker-repo.js +54 -8
- package/dist/repo/worker-repo.js.map +1 -1
- package/dist/schemas/sync.js +2 -2
- package/dist/schemas/sync.js.map +1 -1
- package/dist/schemas/worker.d.ts +1 -0
- package/dist/schemas/worker.d.ts.map +1 -1
- package/dist/schemas/worker.js +1 -0
- package/dist/schemas/worker.js.map +1 -1
- package/dist/services/agent-service.d.ts +57 -0
- package/dist/services/agent-service.d.ts.map +1 -0
- package/dist/services/agent-service.js +81 -0
- package/dist/services/agent-service.js.map +1 -0
- package/dist/services/anchor-service.js +1 -1
- package/dist/services/anchor-service.js.map +1 -1
- package/dist/services/anchor-verification.d.ts +8 -0
- package/dist/services/anchor-verification.d.ts.map +1 -1
- package/dist/services/anchor-verification.js +237 -37
- package/dist/services/anchor-verification.js.map +1 -1
- package/dist/services/ast-grep-service.d.ts.map +1 -1
- package/dist/services/ast-grep-service.js +93 -22
- package/dist/services/ast-grep-service.js.map +1 -1
- package/dist/services/attempt-service.d.ts.map +1 -1
- package/dist/services/attempt-service.js +1 -4
- package/dist/services/attempt-service.js.map +1 -1
- package/dist/services/auto-sync-service.d.ts +1 -1
- package/dist/services/auto-sync-service.d.ts.map +1 -1
- package/dist/services/auto-sync-service.js +18 -10
- package/dist/services/auto-sync-service.js.map +1 -1
- package/dist/services/claim-service.d.ts +8 -2
- package/dist/services/claim-service.d.ts.map +1 -1
- package/dist/services/claim-service.js +37 -23
- package/dist/services/claim-service.js.map +1 -1
- package/dist/services/compaction-service.d.ts +105 -0
- package/dist/services/compaction-service.d.ts.map +1 -0
- package/dist/services/compaction-service.js +369 -0
- package/dist/services/compaction-service.js.map +1 -0
- package/dist/services/cycle-scan-service.d.ts +32 -0
- package/dist/services/cycle-scan-service.d.ts.map +1 -0
- package/dist/services/cycle-scan-service.js +542 -0
- package/dist/services/cycle-scan-service.js.map +1 -0
- package/dist/services/daemon-service.d.ts +40 -2
- package/dist/services/daemon-service.d.ts.map +1 -1
- package/dist/services/daemon-service.js +199 -52
- package/dist/services/daemon-service.js.map +1 -1
- package/dist/services/deduplication-service.d.ts +8 -4
- package/dist/services/deduplication-service.d.ts.map +1 -1
- package/dist/services/deduplication-service.js +79 -25
- package/dist/services/deduplication-service.js.map +1 -1
- package/dist/services/dep-service.d.ts +2 -2
- package/dist/services/dep-service.d.ts.map +1 -1
- package/dist/services/dep-service.js +9 -5
- package/dist/services/dep-service.js.map +1 -1
- package/dist/services/diversifier-service.d.ts +2 -1
- package/dist/services/diversifier-service.d.ts.map +1 -1
- package/dist/services/diversifier-service.js +37 -43
- package/dist/services/diversifier-service.js.map +1 -1
- package/dist/services/doc-service.d.ts +49 -0
- package/dist/services/doc-service.d.ts.map +1 -0
- package/dist/services/doc-service.js +605 -0
- package/dist/services/doc-service.js.map +1 -0
- package/dist/services/edge-service.js +2 -2
- package/dist/services/edge-service.js.map +1 -1
- package/dist/services/embedding-service.d.ts +66 -2
- package/dist/services/embedding-service.d.ts.map +1 -1
- package/dist/services/embedding-service.js +138 -24
- package/dist/services/embedding-service.js.map +1 -1
- package/dist/services/file-learning-service.d.ts.map +1 -1
- package/dist/services/file-learning-service.js +8 -7
- package/dist/services/file-learning-service.js.map +1 -1
- package/dist/services/file-watcher-service.d.ts.map +1 -1
- package/dist/services/file-watcher-service.js +58 -11
- package/dist/services/file-watcher-service.js.map +1 -1
- package/dist/services/graph-expansion.d.ts +3 -0
- package/dist/services/graph-expansion.d.ts.map +1 -1
- package/dist/services/graph-expansion.js +28 -7
- package/dist/services/graph-expansion.js.map +1 -1
- package/dist/services/hierarchy-service.d.ts +1 -1
- package/dist/services/hierarchy-service.d.ts.map +1 -1
- package/dist/services/hierarchy-service.js +50 -32
- package/dist/services/hierarchy-service.js.map +1 -1
- package/dist/services/index.d.ts +13 -15
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +13 -15
- package/dist/services/index.js.map +1 -1
- package/dist/services/learning-service.d.ts +4 -4
- package/dist/services/learning-service.d.ts.map +1 -1
- package/dist/services/learning-service.js +75 -42
- package/dist/services/learning-service.js.map +1 -1
- package/dist/services/llm-service.d.ts +62 -0
- package/dist/services/llm-service.d.ts.map +1 -0
- package/dist/services/llm-service.js +172 -0
- package/dist/services/llm-service.js.map +1 -0
- package/dist/services/migration-service.d.ts +1 -1
- package/dist/services/migration-service.d.ts.map +1 -1
- package/dist/services/migration-service.js +18 -7
- package/dist/services/migration-service.js.map +1 -1
- package/dist/services/orchestrator-service.d.ts +4 -3
- package/dist/services/orchestrator-service.d.ts.map +1 -1
- package/dist/services/orchestrator-service.js +67 -29
- package/dist/services/orchestrator-service.js.map +1 -1
- package/dist/services/promotion-service.d.ts +1 -1
- package/dist/services/promotion-service.js +1 -1
- package/dist/services/promotion-service.js.map +1 -1
- package/dist/services/query-expansion-service.d.ts +30 -9
- package/dist/services/query-expansion-service.d.ts.map +1 -1
- package/dist/services/query-expansion-service.js +54 -63
- package/dist/services/query-expansion-service.js.map +1 -1
- package/dist/services/ready-service.d.ts +21 -1
- package/dist/services/ready-service.d.ts.map +1 -1
- package/dist/services/ready-service.js +44 -21
- package/dist/services/ready-service.js.map +1 -1
- package/dist/services/retriever-service.d.ts +10 -10
- package/dist/services/retriever-service.d.ts.map +1 -1
- package/dist/services/retriever-service.js +53 -161
- package/dist/services/retriever-service.js.map +1 -1
- package/dist/services/swarm-verification.d.ts +2 -2
- package/dist/services/swarm-verification.d.ts.map +1 -1
- package/dist/services/swarm-verification.js +12 -6
- package/dist/services/swarm-verification.js.map +1 -1
- package/dist/services/sync-service.d.ts +17 -4
- package/dist/services/sync-service.d.ts.map +1 -1
- package/dist/services/sync-service.js +378 -114
- package/dist/services/sync-service.js.map +1 -1
- package/dist/services/task-service.d.ts +6 -4
- package/dist/services/task-service.d.ts.map +1 -1
- package/dist/services/task-service.js +162 -33
- package/dist/services/task-service.js.map +1 -1
- package/dist/services/tracing-service.d.ts +55 -0
- package/dist/services/tracing-service.d.ts.map +1 -0
- package/dist/services/tracing-service.js +99 -0
- package/dist/services/tracing-service.js.map +1 -0
- package/dist/services/transcript-adapter.d.ts +99 -0
- package/dist/services/transcript-adapter.d.ts.map +1 -0
- package/dist/services/transcript-adapter.js +283 -0
- package/dist/services/transcript-adapter.js.map +1 -0
- package/dist/services/validation-service.d.ts +85 -0
- package/dist/services/validation-service.d.ts.map +1 -0
- package/dist/services/validation-service.js +289 -0
- package/dist/services/validation-service.js.map +1 -0
- package/dist/services/worker-process.d.ts +23 -4
- package/dist/services/worker-process.d.ts.map +1 -1
- package/dist/services/worker-process.js +159 -70
- package/dist/services/worker-process.js.map +1 -1
- package/dist/services/worker-service.d.ts.map +1 -1
- package/dist/services/worker-service.js +7 -12
- package/dist/services/worker-service.js.map +1 -1
- package/dist/sync/claude-task-writer.d.ts +49 -0
- package/dist/sync/claude-task-writer.d.ts.map +1 -0
- package/dist/sync/claude-task-writer.js +135 -0
- package/dist/sync/claude-task-writer.js.map +1 -0
- package/dist/utils/doc-hash.d.ts +10 -0
- package/dist/utils/doc-hash.d.ts.map +1 -0
- package/dist/utils/doc-hash.js +14 -0
- package/dist/utils/doc-hash.js.map +1 -0
- package/dist/utils/doc-renderer.d.ts +44 -0
- package/dist/utils/doc-renderer.d.ts.map +1 -0
- package/dist/utils/doc-renderer.js +202 -0
- package/dist/utils/doc-renderer.js.map +1 -0
- package/dist/utils/math.d.ts +5 -1
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +12 -4
- package/dist/utils/math.js.map +1 -1
- package/dist/utils/sql.d.ts +9 -0
- package/dist/utils/sql.d.ts.map +1 -0
- package/dist/utils/sql.js +9 -0
- package/dist/utils/sql.js.map +1 -0
- package/dist/utils/toml-config.d.ts +22 -0
- package/dist/utils/toml-config.d.ts.map +1 -0
- package/dist/utils/toml-config.js +75 -0
- package/dist/utils/toml-config.js.map +1 -0
- package/dist/worker/hooks.d.ts +102 -0
- package/dist/worker/hooks.d.ts.map +1 -0
- package/dist/worker/hooks.js +11 -0
- package/dist/worker/hooks.js.map +1 -0
- package/dist/worker/index.d.ts +9 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +8 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/run-worker.d.ts +33 -0
- package/dist/worker/run-worker.d.ts.map +1 -0
- package/dist/worker/run-worker.js +265 -0
- package/dist/worker/run-worker.js.map +1 -0
- package/package.json +14 -12
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
|
-
import { DatabaseError } from "../errors.js";
|
|
3
|
+
import { DatabaseError, EntityFetchError, FileLearningNotFoundError } from "../errors.js";
|
|
4
4
|
import { rowToFileLearning, matchesPattern } from "../mappers/file-learning.js";
|
|
5
|
+
import { DEFAULT_QUERY_LIMIT } from "../utils/sql.js";
|
|
5
6
|
export class FileLearningRepository extends Context.Tag("FileLearningRepository")() {
|
|
6
7
|
}
|
|
7
8
|
export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, Effect.gen(function* () {
|
|
@@ -14,6 +15,13 @@ export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, E
|
|
|
14
15
|
VALUES (?, ?, ?, ?)`).run(input.filePattern, input.note, input.taskId ?? null, now);
|
|
15
16
|
// Fetch the inserted row
|
|
16
17
|
const row = db.prepare("SELECT * FROM file_learnings WHERE id = ?").get(result.lastInsertRowid);
|
|
18
|
+
if (!row) {
|
|
19
|
+
throw new EntityFetchError({
|
|
20
|
+
entity: "file_learning",
|
|
21
|
+
id: result.lastInsertRowid,
|
|
22
|
+
operation: "insert"
|
|
23
|
+
});
|
|
24
|
+
}
|
|
17
25
|
return rowToFileLearning(row);
|
|
18
26
|
},
|
|
19
27
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -25,9 +33,9 @@ export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, E
|
|
|
25
33
|
},
|
|
26
34
|
catch: (cause) => new DatabaseError({ cause })
|
|
27
35
|
}),
|
|
28
|
-
findAll: () => Effect.try({
|
|
36
|
+
findAll: (limit) => Effect.try({
|
|
29
37
|
try: () => {
|
|
30
|
-
const rows = db.prepare(`SELECT * FROM file_learnings ORDER BY created_at DESC
|
|
38
|
+
const rows = db.prepare(`SELECT * FROM file_learnings ORDER BY created_at DESC LIMIT ?`).all(limit ?? DEFAULT_QUERY_LIMIT);
|
|
31
39
|
return rows.map(rowToFileLearning);
|
|
32
40
|
},
|
|
33
41
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -42,11 +50,14 @@ export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, E
|
|
|
42
50
|
},
|
|
43
51
|
catch: (cause) => new DatabaseError({ cause })
|
|
44
52
|
}),
|
|
45
|
-
remove: (id) => Effect.
|
|
46
|
-
|
|
47
|
-
db.prepare("DELETE FROM file_learnings WHERE id = ?").run(id)
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
remove: (id) => Effect.gen(function* () {
|
|
54
|
+
const result = yield* Effect.try({
|
|
55
|
+
try: () => db.prepare("DELETE FROM file_learnings WHERE id = ?").run(id),
|
|
56
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
57
|
+
});
|
|
58
|
+
if (result.changes === 0) {
|
|
59
|
+
yield* Effect.fail(new FileLearningNotFoundError({ id }));
|
|
60
|
+
}
|
|
50
61
|
}),
|
|
51
62
|
count: () => Effect.try({
|
|
52
63
|
try: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-learning-repo.js","sourceRoot":"","sources":["../../src/repo/file-learning-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"file-learning-repo.js","sourceRoot":"","sources":["../../src/repo/file-learning-repo.ts"],"names":[],"mappings":"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"}
|
package/dist/repo/index.d.ts
CHANGED
|
@@ -7,12 +7,10 @@ export { LearningRepository, LearningRepositoryLive, type BM25Result } from "./l
|
|
|
7
7
|
export { FileLearningRepository, FileLearningRepositoryLive } from "./file-learning-repo.js";
|
|
8
8
|
export { AttemptRepository, AttemptRepositoryLive } from "./attempt-repo.js";
|
|
9
9
|
export { RunRepository, RunRepositoryLive } from "./run-repo.js";
|
|
10
|
-
export { AnchorRepository, AnchorRepositoryLive } from "./anchor-repo.js";
|
|
11
|
-
export { EdgeRepository, EdgeRepositoryLive } from "./edge-repo.js";
|
|
12
|
-
export { DeduplicationRepository, DeduplicationRepositoryLive } from "./deduplication-repo.js";
|
|
13
|
-
export { CandidateRepository, CandidateRepositoryLive } from "./candidate-repo.js";
|
|
14
|
-
export { TrackedProjectRepository, TrackedProjectRepositoryLive } from "./tracked-project-repo.js";
|
|
15
10
|
export { WorkerRepository, WorkerRepositoryLive } from "./worker-repo.js";
|
|
16
|
-
export { ClaimRepository, ClaimRepositoryLive } from "./claim-repo.js";
|
|
11
|
+
export { ClaimRepository, ClaimRepositoryLive, type AtomicInsertResult, type AtomicRenewResult } from "./claim-repo.js";
|
|
17
12
|
export { OrchestratorStateRepository, OrchestratorStateRepositoryLive, type OrchestratorStateUpdate } from "./orchestrator-state-repo.js";
|
|
13
|
+
export { DeduplicationRepository, DeduplicationRepositoryLive } from "./deduplication-repo.js";
|
|
14
|
+
export { TrackedProjectRepository, TrackedProjectRepositoryLive } from "./tracked-project-repo.js";
|
|
15
|
+
export { DocRepository, DocRepositoryLive, type InsertDocInput, type UpdateDocInput } from "./doc-repo.js";
|
|
18
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/repo/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repo/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChG,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repo/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChG,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACvH,OAAO,EAAE,2BAA2B,EAAE,+BAA+B,EAAE,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACzI,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAClG,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/repo/index.js
CHANGED
|
@@ -7,12 +7,10 @@ export { LearningRepository, LearningRepositoryLive } from "./learning-repo.js";
|
|
|
7
7
|
export { FileLearningRepository, FileLearningRepositoryLive } from "./file-learning-repo.js";
|
|
8
8
|
export { AttemptRepository, AttemptRepositoryLive } from "./attempt-repo.js";
|
|
9
9
|
export { RunRepository, RunRepositoryLive } from "./run-repo.js";
|
|
10
|
-
export { AnchorRepository, AnchorRepositoryLive } from "./anchor-repo.js";
|
|
11
|
-
export { EdgeRepository, EdgeRepositoryLive } from "./edge-repo.js";
|
|
12
|
-
export { DeduplicationRepository, DeduplicationRepositoryLive } from "./deduplication-repo.js";
|
|
13
|
-
export { CandidateRepository, CandidateRepositoryLive } from "./candidate-repo.js";
|
|
14
|
-
export { TrackedProjectRepository, TrackedProjectRepositoryLive } from "./tracked-project-repo.js";
|
|
15
10
|
export { WorkerRepository, WorkerRepositoryLive } from "./worker-repo.js";
|
|
16
11
|
export { ClaimRepository, ClaimRepositoryLive } from "./claim-repo.js";
|
|
17
12
|
export { OrchestratorStateRepository, OrchestratorStateRepositoryLive } from "./orchestrator-state-repo.js";
|
|
13
|
+
export { DeduplicationRepository, DeduplicationRepositoryLive } from "./deduplication-repo.js";
|
|
14
|
+
export { TrackedProjectRepository, TrackedProjectRepositoryLive } from "./tracked-project-repo.js";
|
|
15
|
+
export { DocRepository, DocRepositoryLive } from "./doc-repo.js";
|
|
18
16
|
//# sourceMappingURL=index.js.map
|
package/dist/repo/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repo/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAmB,MAAM,oBAAoB,CAAA;AAChG,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repo/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAmB,MAAM,oBAAoB,CAAA;AAChG,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AAC5F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAmD,MAAM,iBAAiB,CAAA;AACvH,OAAO,EAAE,2BAA2B,EAAE,+BAA+B,EAAgC,MAAM,8BAA8B,CAAA;AACzI,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAClG,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAA4C,MAAM,eAAe,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
|
-
import { DatabaseError } from "../errors.js";
|
|
3
|
+
import { DatabaseError, LearningNotFoundError } from "../errors.js";
|
|
4
4
|
import type { Learning, CreateLearningInput } from "@jamesaphoenix/tx-types";
|
|
5
5
|
/** Scored learning result from BM25 search */
|
|
6
6
|
export interface BM25Result {
|
|
@@ -10,8 +10,14 @@ export interface BM25Result {
|
|
|
10
10
|
declare const LearningRepository_base: Context.TagClass<LearningRepository, "LearningRepository", {
|
|
11
11
|
readonly insert: (input: CreateLearningInput) => Effect.Effect<Learning, DatabaseError>;
|
|
12
12
|
readonly findById: (id: number) => Effect.Effect<Learning | null, DatabaseError>;
|
|
13
|
-
readonly findAll: () => Effect.Effect<readonly Learning[], DatabaseError>;
|
|
13
|
+
readonly findAll: (limit?: number) => Effect.Effect<readonly Learning[], DatabaseError>;
|
|
14
|
+
/** Find learnings with pagination (cursor-based using id for stability) */
|
|
15
|
+
readonly findPaginated: (limit: number, afterId?: number) => Effect.Effect<readonly Learning[], DatabaseError>;
|
|
16
|
+
/** Find learnings without embeddings with pagination (for batch embedding) */
|
|
17
|
+
readonly findWithoutEmbeddingPaginated: (limit: number, afterId?: number) => Effect.Effect<readonly Learning[], DatabaseError>;
|
|
14
18
|
readonly findRecent: (limit: number) => Effect.Effect<readonly Learning[], DatabaseError>;
|
|
19
|
+
/** Find recent learnings without loading embedding data (for listing/serialization) */
|
|
20
|
+
readonly findRecentWithoutEmbedding: (limit: number) => Effect.Effect<readonly Learning[], DatabaseError>;
|
|
15
21
|
readonly bm25Search: (query: string, limit: number) => Effect.Effect<readonly BM25Result[], DatabaseError>;
|
|
16
22
|
/** Find learnings that have embeddings (for vector search) */
|
|
17
23
|
readonly findWithEmbeddings: (limit: number) => Effect.Effect<readonly Learning[], DatabaseError>;
|
|
@@ -19,9 +25,10 @@ declare const LearningRepository_base: Context.TagClass<LearningRepository, "Lea
|
|
|
19
25
|
readonly incrementUsageMany: (ids: readonly number[]) => Effect.Effect<void, DatabaseError>;
|
|
20
26
|
readonly updateOutcomeScore: (id: number, score: number) => Effect.Effect<void, DatabaseError>;
|
|
21
27
|
readonly updateEmbedding: (id: number, embedding: Float32Array) => Effect.Effect<void, DatabaseError>;
|
|
22
|
-
readonly remove: (id: number) => Effect.Effect<void, DatabaseError>;
|
|
28
|
+
readonly remove: (id: number) => Effect.Effect<void, DatabaseError | LearningNotFoundError>;
|
|
23
29
|
readonly count: () => Effect.Effect<number, DatabaseError>;
|
|
24
30
|
readonly countWithEmbeddings: () => Effect.Effect<number, DatabaseError>;
|
|
31
|
+
readonly countWithoutEmbeddings: () => Effect.Effect<number, DatabaseError>;
|
|
25
32
|
readonly getConfig: (key: string) => Effect.Effect<string | null, DatabaseError>;
|
|
26
33
|
}>;
|
|
27
34
|
export declare class LearningRepository extends LearningRepository_base {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learning-repo.d.ts","sourceRoot":"","sources":["../../src/repo/learning-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"learning-repo.d.ts","sourceRoot":"","sources":["../../src/repo/learning-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAoB,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGrF,OAAO,KAAK,EAAE,QAAQ,EAAoC,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAgB9G,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;;qBAKoB,CAAC,KAAK,EAAE,mBAAmB,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;uBACpE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,aAAa,CAAC;sBAC9D,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,QAAQ,EAAE,EAAE,aAAa,CAAC;IACvF,2EAA2E;4BACnD,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,QAAQ,EAAE,EAAE,aAAa,CAAC;IAC9G,8EAA8E;4CACtC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,QAAQ,EAAE,EAAE,aAAa,CAAC;yBACzG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,QAAQ,EAAE,EAAE,aAAa,CAAC;IACzF,uFAAuF;yCAClD,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,QAAQ,EAAE,EAAE,aAAa,CAAC;yBACpF,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,UAAU,EAAE,EAAE,aAAa,CAAC;IAC1G,8DAA8D;iCACjC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,QAAQ,EAAE,EAAE,aAAa,CAAC;6BACxE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;iCAC9C,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;iCAC9D,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;8BACpE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;qBACpF,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,qBAAqB,CAAC;oBAC3E,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;kCAC5B,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;qCACvC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;wBACvD,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,aAAa,CAAC;;AAxBpF,qBAAa,kBAAmB,SAAQ,uBA0BrC;CAAG;AA0CN,eAAO,MAAM,sBAAsB,sDAgPlC,CAAA"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
|
-
import { DatabaseError } from "../errors.js";
|
|
4
|
-
import { rowToLearning, float32ArrayToBuffer } from "../mappers/learning.js";
|
|
3
|
+
import { DatabaseError, EntityFetchError, LearningNotFoundError } from "../errors.js";
|
|
4
|
+
import { rowToLearning, rowToLearningWithoutEmbedding, float32ArrayToBuffer } from "../mappers/learning.js";
|
|
5
|
+
import { DEFAULT_QUERY_LIMIT } from "../utils/sql.js";
|
|
6
|
+
/**
|
|
7
|
+
* All learning columns EXCEPT embedding.
|
|
8
|
+
* Used by queries where embedding data is discarded (BM25 search, listing, serialization).
|
|
9
|
+
* Avoids loading ~6KB Float32Array per learning that would be immediately GC'd.
|
|
10
|
+
*/
|
|
11
|
+
const COLS_NO_EMBEDDING = "id, content, source_type, source_ref, created_at, keywords, category, usage_count, last_used_at, outcome_score";
|
|
12
|
+
/**
|
|
13
|
+
* Same columns but table-qualified with `l.` prefix.
|
|
14
|
+
* Required for JOINs (e.g., with learnings_fts) where `content`, `keywords`, and
|
|
15
|
+
* `category` are ambiguous since both tables define them.
|
|
16
|
+
*/
|
|
17
|
+
const COLS_NO_EMBEDDING_QUALIFIED = "l.id, l.content, l.source_type, l.source_ref, l.created_at, l.keywords, l.category, l.usage_count, l.last_used_at, l.outcome_score";
|
|
5
18
|
export class LearningRepository extends Context.Tag("LearningRepository")() {
|
|
6
19
|
}
|
|
7
20
|
/**
|
|
@@ -47,6 +60,13 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
47
60
|
VALUES (?, ?, ?, ?, ?, ?)`).run(input.content, input.sourceType ?? "manual", input.sourceRef ?? null, now, input.keywords ? JSON.stringify(input.keywords) : null, input.category ?? null);
|
|
48
61
|
// Fetch the inserted row
|
|
49
62
|
const row = db.prepare("SELECT * FROM learnings WHERE id = ?").get(result.lastInsertRowid);
|
|
63
|
+
if (!row) {
|
|
64
|
+
throw new EntityFetchError({
|
|
65
|
+
entity: "learning",
|
|
66
|
+
id: result.lastInsertRowid,
|
|
67
|
+
operation: "insert"
|
|
68
|
+
});
|
|
69
|
+
}
|
|
50
70
|
return rowToLearning(row);
|
|
51
71
|
},
|
|
52
72
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -58,9 +78,27 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
58
78
|
},
|
|
59
79
|
catch: (cause) => new DatabaseError({ cause })
|
|
60
80
|
}),
|
|
61
|
-
findAll: () => Effect.try({
|
|
81
|
+
findAll: (limit) => Effect.try({
|
|
82
|
+
try: () => {
|
|
83
|
+
const rows = db.prepare(`SELECT * FROM learnings ORDER BY created_at ASC LIMIT ?`).all(limit ?? DEFAULT_QUERY_LIMIT);
|
|
84
|
+
return rows.map(rowToLearning);
|
|
85
|
+
},
|
|
86
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
87
|
+
}),
|
|
88
|
+
findPaginated: (limit, afterId) => Effect.try({
|
|
89
|
+
try: () => {
|
|
90
|
+
const rows = afterId !== undefined
|
|
91
|
+
? db.prepare(`SELECT * FROM learnings WHERE id > ? ORDER BY id ASC LIMIT ?`).all(afterId, limit)
|
|
92
|
+
: db.prepare(`SELECT * FROM learnings ORDER BY id ASC LIMIT ?`).all(limit);
|
|
93
|
+
return rows.map(rowToLearning);
|
|
94
|
+
},
|
|
95
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
96
|
+
}),
|
|
97
|
+
findWithoutEmbeddingPaginated: (limit, afterId) => Effect.try({
|
|
62
98
|
try: () => {
|
|
63
|
-
const rows =
|
|
99
|
+
const rows = afterId !== undefined
|
|
100
|
+
? db.prepare(`SELECT * FROM learnings WHERE embedding IS NULL AND id > ? ORDER BY id ASC LIMIT ?`).all(afterId, limit)
|
|
101
|
+
: db.prepare(`SELECT * FROM learnings WHERE embedding IS NULL ORDER BY id ASC LIMIT ?`).all(limit);
|
|
64
102
|
return rows.map(rowToLearning);
|
|
65
103
|
},
|
|
66
104
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -72,14 +110,23 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
72
110
|
},
|
|
73
111
|
catch: (cause) => new DatabaseError({ cause })
|
|
74
112
|
}),
|
|
113
|
+
findRecentWithoutEmbedding: (limit) => Effect.try({
|
|
114
|
+
try: () => {
|
|
115
|
+
const rows = db.prepare(`SELECT ${COLS_NO_EMBEDDING} FROM learnings ORDER BY created_at DESC LIMIT ?`).all(limit);
|
|
116
|
+
return rows.map(rowToLearningWithoutEmbedding);
|
|
117
|
+
},
|
|
118
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
119
|
+
}),
|
|
75
120
|
bm25Search: (query, limit) => Effect.try({
|
|
76
121
|
try: () => {
|
|
77
122
|
const ftsQuery = buildFTS5Query(query);
|
|
78
123
|
if (!ftsQuery)
|
|
79
124
|
return [];
|
|
80
125
|
// FTS5 BM25 returns negative scores; lower (more negative) = better match
|
|
126
|
+
// Exclude embedding column — BM25 results never need it, and loading
|
|
127
|
+
// ~6KB Float32Array per row just to discard it wastes memory.
|
|
81
128
|
const rows = db.prepare(`
|
|
82
|
-
SELECT
|
|
129
|
+
SELECT ${COLS_NO_EMBEDDING_QUALIFIED}, bm25(learnings_fts) as bm25_score
|
|
83
130
|
FROM learnings l
|
|
84
131
|
JOIN learnings_fts ON l.id = learnings_fts.rowid
|
|
85
132
|
WHERE learnings_fts MATCH ?
|
|
@@ -92,7 +139,7 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
92
139
|
// Best match gets 1.0, decays with rank
|
|
93
140
|
// Formula: score = 1.0 / (1 + rank * 0.1) gives 1.0, 0.91, 0.83, ...
|
|
94
141
|
return rows.map((row, rank) => ({
|
|
95
|
-
learning:
|
|
142
|
+
learning: rowToLearningWithoutEmbedding(row),
|
|
96
143
|
score: 1.0 / (1 + rank * 0.1)
|
|
97
144
|
}));
|
|
98
145
|
},
|
|
@@ -133,11 +180,14 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
133
180
|
},
|
|
134
181
|
catch: (cause) => new DatabaseError({ cause })
|
|
135
182
|
}),
|
|
136
|
-
remove: (id) => Effect.
|
|
137
|
-
|
|
138
|
-
db.prepare("DELETE FROM learnings WHERE id = ?").run(id)
|
|
139
|
-
|
|
140
|
-
|
|
183
|
+
remove: (id) => Effect.gen(function* () {
|
|
184
|
+
const result = yield* Effect.try({
|
|
185
|
+
try: () => db.prepare("DELETE FROM learnings WHERE id = ?").run(id),
|
|
186
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
187
|
+
});
|
|
188
|
+
if (result.changes === 0) {
|
|
189
|
+
yield* Effect.fail(new LearningNotFoundError({ id }));
|
|
190
|
+
}
|
|
141
191
|
}),
|
|
142
192
|
count: () => Effect.try({
|
|
143
193
|
try: () => {
|
|
@@ -153,6 +203,13 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
153
203
|
},
|
|
154
204
|
catch: (cause) => new DatabaseError({ cause })
|
|
155
205
|
}),
|
|
206
|
+
countWithoutEmbeddings: () => Effect.try({
|
|
207
|
+
try: () => {
|
|
208
|
+
const result = db.prepare("SELECT COUNT(*) as cnt FROM learnings WHERE embedding IS NULL").get();
|
|
209
|
+
return result.cnt;
|
|
210
|
+
},
|
|
211
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
212
|
+
}),
|
|
156
213
|
getConfig: (key) => Effect.try({
|
|
157
214
|
try: () => {
|
|
158
215
|
const row = db.prepare("SELECT value FROM learnings_config WHERE key = ?").get(key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learning-repo.js","sourceRoot":"","sources":["../../src/repo/learning-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"learning-repo.js","sourceRoot":"","sources":["../../src/repo/learning-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-state-repo.d.ts","sourceRoot":"","sources":["../../src/repo/orchestrator-state-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"orchestrator-state-repo.d.ts","sourceRoot":"","sources":["../../src/repo/orchestrator-state-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAoB,MAAM,cAAc,CAAA;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,GAAG;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,CAAA;;IAKG;;;OAGG;kBACW,MAAM,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;IACnE;;;OAGG;qBACc,CAAC,OAAO,EAAE,uBAAuB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;;AAZ7F,qBAAa,2BAA4B,SAAQ,gCAc9C;CAAG;AAiBN,eAAO,MAAM,+BAA+B,+DA8G3C,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
|
-
import { DatabaseError } from "../errors.js";
|
|
3
|
+
import { DatabaseError, EntityFetchError } from "../errors.js";
|
|
4
4
|
import { rowToOrchestratorState } from "../mappers/orchestrator-state.js";
|
|
5
5
|
export class OrchestratorStateRepository extends Context.Tag("OrchestratorStateRepository")() {
|
|
6
6
|
}
|
|
@@ -36,6 +36,13 @@ export const OrchestratorStateRepositoryLive = Layer.effect(OrchestratorStateRep
|
|
|
36
36
|
// Ensure singleton exists before querying
|
|
37
37
|
ensureSingletonExists();
|
|
38
38
|
const row = db.prepare("SELECT * FROM orchestrator_state WHERE id = 1").get();
|
|
39
|
+
if (!row) {
|
|
40
|
+
throw new EntityFetchError({
|
|
41
|
+
entity: "orchestrator_state",
|
|
42
|
+
id: 1,
|
|
43
|
+
operation: "insert"
|
|
44
|
+
});
|
|
45
|
+
}
|
|
39
46
|
return rowToOrchestratorState(row);
|
|
40
47
|
},
|
|
41
48
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-state-repo.js","sourceRoot":"","sources":["../../src/repo/orchestrator-state-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"orchestrator-state-repo.js","sourceRoot":"","sources":["../../src/repo/orchestrator-state-repo.ts"],"names":[],"mappings":"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"}
|
package/dist/repo/run-repo.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
|
-
import { DatabaseError } from "../errors.js";
|
|
3
|
+
import { DatabaseError, RunNotFoundError } from "../errors.js";
|
|
4
4
|
import type { Run, RunId, RunStatus, CreateRunInput, UpdateRunInput } from "@jamesaphoenix/tx-types";
|
|
5
5
|
declare const RunRepository_base: Context.TagClass<RunRepository, "RunRepository", {
|
|
6
6
|
/** Create a new run record */
|
|
@@ -16,9 +16,9 @@ declare const RunRepository_base: Context.TagClass<RunRepository, "RunRepository
|
|
|
16
16
|
/** Update a run */
|
|
17
17
|
readonly update: (id: RunId, input: UpdateRunInput) => Effect.Effect<void, DatabaseError>;
|
|
18
18
|
/** Mark a run as completed */
|
|
19
|
-
readonly complete: (id: RunId, exitCode: number, summary?: string) => Effect.Effect<void, DatabaseError>;
|
|
19
|
+
readonly complete: (id: RunId, exitCode: number, summary?: string) => Effect.Effect<void, DatabaseError | RunNotFoundError>;
|
|
20
20
|
/** Mark a run as failed */
|
|
21
|
-
readonly fail: (id: RunId, errorMessage: string, exitCode?: number) => Effect.Effect<void, DatabaseError>;
|
|
21
|
+
readonly fail: (id: RunId, errorMessage: string, exitCode?: number) => Effect.Effect<void, DatabaseError | RunNotFoundError>;
|
|
22
22
|
/** Get currently running runs */
|
|
23
23
|
readonly getRunning: () => Effect.Effect<readonly Run[], DatabaseError>;
|
|
24
24
|
/** Count runs by status */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-repo.d.ts","sourceRoot":"","sources":["../../src/repo/run-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"run-repo.d.ts","sourceRoot":"","sources":["../../src/repo/run-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAoB,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEhF,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAU,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;;IAKxG,8BAA8B;qBACb,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC;IAE7E,uBAAuB;uBACJ,CAAC,EAAE,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,aAAa,CAAC;IAE1E,2BAA2B;2BACJ,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,aAAa,CAAC;IAEvF,0BAA0B;2BACH,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,aAAa,CAAC;IAE1F,sBAAsB;yBACD,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,aAAa,CAAC;IAEpF,mBAAmB;qBACF,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;IAEzF,8BAA8B;uBACX,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,CAAC;IAE3H,2BAA2B;mBACZ,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,CAAC;IAE5H,iCAAiC;yBACZ,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,aAAa,CAAC;IAEvE,2BAA2B;4BACH,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC;;AA/BzF,qBAAa,aAAc,SAAQ,kBAiChC;CAAG;AAEN,eAAO,MAAM,iBAAiB,iDAoM7B,CAAA"}
|
package/dist/repo/run-repo.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
|
-
import { DatabaseError } from "../errors.js";
|
|
3
|
+
import { DatabaseError, EntityFetchError, RunNotFoundError } from "../errors.js";
|
|
4
4
|
import { rowToRun, generateRunId } from "../mappers/run.js";
|
|
5
5
|
export class RunRepository extends Context.Tag("RunRepository")() {
|
|
6
6
|
}
|
|
@@ -16,6 +16,13 @@ export const RunRepositoryLive = Layer.effect(RunRepository, Effect.gen(function
|
|
|
16
16
|
VALUES (?, ?, ?, ?, 'running', ?, ?, ?, ?)
|
|
17
17
|
`).run(id, input.taskId ?? null, input.agent, now, input.pid ?? null, input.transcriptPath ?? null, input.contextInjected ?? null, JSON.stringify(input.metadata ?? {}));
|
|
18
18
|
const row = db.prepare("SELECT * FROM runs WHERE id = ?").get(id);
|
|
19
|
+
if (!row) {
|
|
20
|
+
throw new EntityFetchError({
|
|
21
|
+
entity: "run",
|
|
22
|
+
id,
|
|
23
|
+
operation: "insert"
|
|
24
|
+
});
|
|
25
|
+
}
|
|
19
26
|
return rowToRun(row);
|
|
20
27
|
},
|
|
21
28
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -76,6 +83,14 @@ export const RunRepositoryLive = Layer.effect(RunRepository, Effect.gen(function
|
|
|
76
83
|
updates.push("transcript_path = ?");
|
|
77
84
|
values.push(input.transcriptPath);
|
|
78
85
|
}
|
|
86
|
+
if (input.stderrPath !== undefined) {
|
|
87
|
+
updates.push("stderr_path = ?");
|
|
88
|
+
values.push(input.stderrPath);
|
|
89
|
+
}
|
|
90
|
+
if (input.stdoutPath !== undefined) {
|
|
91
|
+
updates.push("stdout_path = ?");
|
|
92
|
+
values.push(input.stdoutPath);
|
|
93
|
+
}
|
|
79
94
|
if (updates.length === 0)
|
|
80
95
|
return;
|
|
81
96
|
values.push(id);
|
|
@@ -83,25 +98,31 @@ export const RunRepositoryLive = Layer.effect(RunRepository, Effect.gen(function
|
|
|
83
98
|
},
|
|
84
99
|
catch: (cause) => new DatabaseError({ cause })
|
|
85
100
|
}),
|
|
86
|
-
complete: (id, exitCode, summary) => Effect.
|
|
87
|
-
|
|
88
|
-
db.prepare(`
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
101
|
+
complete: (id, exitCode, summary) => Effect.gen(function* () {
|
|
102
|
+
const result = yield* Effect.try({
|
|
103
|
+
try: () => db.prepare(`
|
|
104
|
+
UPDATE runs
|
|
105
|
+
SET status = 'completed', ended_at = ?, exit_code = ?, summary = ?
|
|
106
|
+
WHERE id = ?
|
|
107
|
+
`).run(new Date().toISOString(), exitCode, summary ?? null, id),
|
|
108
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
109
|
+
});
|
|
110
|
+
if (result.changes === 0) {
|
|
111
|
+
yield* Effect.fail(new RunNotFoundError({ id }));
|
|
112
|
+
}
|
|
95
113
|
}),
|
|
96
|
-
fail: (id, errorMessage, exitCode) => Effect.
|
|
97
|
-
|
|
98
|
-
db.prepare(`
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
114
|
+
fail: (id, errorMessage, exitCode) => Effect.gen(function* () {
|
|
115
|
+
const result = yield* Effect.try({
|
|
116
|
+
try: () => db.prepare(`
|
|
117
|
+
UPDATE runs
|
|
118
|
+
SET status = 'failed', ended_at = ?, exit_code = ?, error_message = ?
|
|
119
|
+
WHERE id = ?
|
|
120
|
+
`).run(new Date().toISOString(), exitCode ?? null, errorMessage, id),
|
|
121
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
122
|
+
});
|
|
123
|
+
if (result.changes === 0) {
|
|
124
|
+
yield* Effect.fail(new RunNotFoundError({ id }));
|
|
125
|
+
}
|
|
105
126
|
}),
|
|
106
127
|
getRunning: () => Effect.try({
|
|
107
128
|
try: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-repo.js","sourceRoot":"","sources":["../../src/repo/run-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"run-repo.js","sourceRoot":"","sources":["../../src/repo/run-repo.ts"],"names":[],"mappings":"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"}
|
package/dist/repo/task-repo.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
|
-
import { DatabaseError } from "../errors.js";
|
|
3
|
+
import { DatabaseError, TaskNotFoundError, StaleDataError } from "../errors.js";
|
|
4
4
|
import type { Task, TaskId, TaskFilter } from "@jamesaphoenix/tx-types";
|
|
5
5
|
declare const TaskRepository_base: Context.TagClass<TaskRepository, "TaskRepository", {
|
|
6
6
|
readonly findById: (id: string) => Effect.Effect<Task | null, DatabaseError>;
|
|
@@ -9,10 +9,21 @@ declare const TaskRepository_base: Context.TagClass<TaskRepository, "TaskReposit
|
|
|
9
9
|
readonly findByParent: (parentId: string | null) => Effect.Effect<readonly Task[], DatabaseError>;
|
|
10
10
|
readonly getChildIds: (id: string) => Effect.Effect<readonly TaskId[], DatabaseError>;
|
|
11
11
|
readonly getChildIdsForMany: (ids: readonly string[]) => Effect.Effect<Map<string, readonly TaskId[]>, DatabaseError>;
|
|
12
|
+
readonly getAncestorChain: (id: string) => Effect.Effect<readonly Task[], DatabaseError>;
|
|
13
|
+
readonly getDescendants: (id: string, maxDepth?: number) => Effect.Effect<readonly Task[], DatabaseError>;
|
|
12
14
|
readonly insert: (task: Task) => Effect.Effect<void, DatabaseError>;
|
|
13
|
-
readonly update: (task: Task) => Effect.Effect<void, DatabaseError>;
|
|
14
|
-
readonly
|
|
15
|
+
readonly update: (task: Task, expectedUpdatedAt?: Date) => Effect.Effect<void, DatabaseError | TaskNotFoundError | StaleDataError>;
|
|
16
|
+
readonly updateMany: (tasks: readonly Task[]) => Effect.Effect<void, DatabaseError | TaskNotFoundError | StaleDataError>;
|
|
17
|
+
readonly remove: (id: string) => Effect.Effect<void, DatabaseError | TaskNotFoundError>;
|
|
15
18
|
readonly count: (filter?: TaskFilter) => Effect.Effect<number, DatabaseError>;
|
|
19
|
+
/**
|
|
20
|
+
* Atomically recover a task's status based on blocker states.
|
|
21
|
+
* Uses a single UPDATE with subquery to eliminate TOCTOU races.
|
|
22
|
+
* Sets status to 'ready' if all blockers are done, 'blocked' otherwise.
|
|
23
|
+
* Only updates if the task's current status matches expectedStatus.
|
|
24
|
+
* Returns true if a row was updated, false if no matching row found.
|
|
25
|
+
*/
|
|
26
|
+
readonly recoverTaskStatus: (taskId: string, expectedStatus: string) => Effect.Effect<boolean, DatabaseError>;
|
|
16
27
|
}>;
|
|
17
28
|
export declare class TaskRepository extends TaskRepository_base {
|
|
18
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-repo.d.ts","sourceRoot":"","sources":["../../src/repo/task-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"task-repo.d.ts","sourceRoot":"","sources":["../../src/repo/task-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAA2B,cAAc,EAAE,MAAM,cAAc,CAAA;AAExG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAW,MAAM,yBAAyB,CAAA;;uBAMzD,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,aAAa,CAAC;wBACxD,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;sBAC3E,CAAC,MAAM,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;2BACjE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;0BAC3E,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,aAAa,CAAC;iCACxD,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC;+BAC1F,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;6BAC/D,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;qBACxF,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;qBAClD,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,cAAc,CAAC;yBAC7G,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,cAAc,CAAC;qBACvG,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,CAAC;oBACvE,CAAC,MAAM,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAC7E;;;;;;OAMG;gCACyB,CAC1B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,KACnB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;;AA1B9C,qBAAa,cAAe,SAAQ,mBA4BjC;CAAG;AAEN,eAAO,MAAM,kBAAkB,kDAib9B,CAAA"}
|