@jamesaphoenix/tx-core 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/db.d.ts +6 -6
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +29 -2
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/cycle-scan-service-impl.d.ts +28 -0
- package/dist/internal/cycle-scan-service-impl.d.ts.map +1 -0
- package/dist/internal/cycle-scan-service-impl.js +877 -0
- package/dist/internal/cycle-scan-service-impl.js.map +1 -0
- package/dist/internal/doc-service-impl.d.ts +42 -0
- package/dist/internal/doc-service-impl.d.ts.map +1 -0
- package/dist/internal/doc-service-impl.js +812 -0
- package/dist/internal/doc-service-impl.js.map +1 -0
- package/dist/internal/embedding-service-impl.d.ts +202 -0
- package/dist/internal/embedding-service-impl.d.ts.map +1 -0
- package/dist/internal/embedding-service-impl.js +466 -0
- package/dist/internal/embedding-service-impl.js.map +1 -0
- package/dist/internal/memory-service-impl.d.ts +49 -0
- package/dist/internal/memory-service-impl.d.ts.map +1 -0
- package/dist/internal/memory-service-impl.js +1061 -0
- package/dist/internal/memory-service-impl.js.map +1 -0
- package/dist/internal/spec-trace-service-impl.d.ts +50 -0
- package/dist/internal/spec-trace-service-impl.d.ts.map +1 -0
- package/dist/internal/spec-trace-service-impl.js +707 -0
- package/dist/internal/spec-trace-service-impl.js.map +1 -0
- package/dist/internal/sync/service-impl.d.ts +41 -0
- package/dist/internal/sync/service-impl.d.ts.map +1 -0
- package/dist/{services/sync-service.js → internal/sync/service-impl.js} +954 -499
- package/dist/internal/sync/service-impl.js.map +1 -0
- package/dist/layer.d.ts +8 -5
- package/dist/layer.d.ts.map +1 -1
- package/dist/layer.js +22 -10
- package/dist/layer.js.map +1 -1
- package/dist/mappers/anchor.d.ts.map +1 -1
- package/dist/mappers/anchor.js +5 -4
- package/dist/mappers/anchor.js.map +1 -1
- package/dist/mappers/attempt.d.ts.map +1 -1
- package/dist/mappers/attempt.js +2 -1
- package/dist/mappers/attempt.js.map +1 -1
- package/dist/mappers/candidate.d.ts.map +1 -1
- package/dist/mappers/candidate.js +2 -1
- package/dist/mappers/candidate.js.map +1 -1
- package/dist/mappers/claim.d.ts.map +1 -1
- package/dist/mappers/claim.js +2 -1
- package/dist/mappers/claim.js.map +1 -1
- package/dist/mappers/doc.d.ts.map +1 -1
- package/dist/mappers/doc.js +9 -8
- package/dist/mappers/doc.js.map +1 -1
- package/dist/mappers/edge.d.ts.map +1 -1
- package/dist/mappers/edge.js +4 -3
- 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 +1 -0
- package/dist/mappers/index.d.ts.map +1 -1
- package/dist/mappers/index.js +2 -0
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/learning.d.ts.map +1 -1
- package/dist/mappers/learning.js +4 -3
- package/dist/mappers/learning.js.map +1 -1
- package/dist/mappers/memory.d.ts.map +1 -1
- package/dist/mappers/memory.js +7 -6
- package/dist/mappers/memory.js.map +1 -1
- package/dist/mappers/orchestrator-state.d.ts.map +1 -1
- package/dist/mappers/orchestrator-state.js +2 -1
- package/dist/mappers/orchestrator-state.js.map +1 -1
- package/dist/mappers/pin.d.ts.map +1 -1
- package/dist/mappers/pin.js +2 -1
- package/dist/mappers/pin.js.map +1 -1
- package/dist/mappers/run.d.ts.map +1 -1
- package/dist/mappers/run.js +4 -3
- package/dist/mappers/run.js.map +1 -1
- package/dist/mappers/spec-trace.d.ts +11 -0
- package/dist/mappers/spec-trace.d.ts.map +1 -0
- package/dist/mappers/spec-trace.js +59 -0
- package/dist/mappers/spec-trace.js.map +1 -0
- package/dist/mappers/task.d.ts.map +1 -1
- package/dist/mappers/task.js +4 -4
- package/dist/mappers/task.js.map +1 -1
- package/dist/mappers/worker.d.ts.map +1 -1
- package/dist/mappers/worker.js +2 -1
- package/dist/mappers/worker.js.map +1 -1
- package/dist/migrations-embedded.d.ts.map +1 -1
- package/dist/migrations-embedded.js +15 -0
- package/dist/migrations-embedded.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 +18 -17
- package/dist/repo/anchor-repo.js.map +1 -1
- package/dist/repo/attempt-repo.d.ts.map +1 -1
- package/dist/repo/attempt-repo.js +11 -10
- 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 +8 -7
- package/dist/repo/candidate-repo.js.map +1 -1
- package/dist/repo/claim-repo.d.ts +4 -4
- package/dist/repo/claim-repo.d.ts.map +1 -1
- package/dist/repo/claim-repo.js +14 -13
- package/dist/repo/claim-repo.js.map +1 -1
- package/dist/repo/compaction-repo.d.ts +4 -4
- package/dist/repo/compaction-repo.d.ts.map +1 -1
- package/dist/repo/compaction-repo.js +7 -6
- package/dist/repo/compaction-repo.js.map +1 -1
- package/dist/repo/deduplication-repo.d.ts.map +1 -1
- package/dist/repo/deduplication-repo.js +80 -57
- package/dist/repo/deduplication-repo.js.map +1 -1
- package/dist/repo/dep-repo.d.ts.map +1 -1
- package/dist/repo/dep-repo.js +90 -88
- package/dist/repo/dep-repo.js.map +1 -1
- package/dist/repo/doc-repo.d.ts +2 -63
- package/dist/repo/doc-repo.d.ts.map +1 -1
- package/dist/repo/doc-repo.js +6 -4
- package/dist/repo/doc-repo.js.map +1 -1
- package/dist/repo/doc-repo.types.d.ts +64 -0
- package/dist/repo/doc-repo.types.d.ts.map +1 -0
- package/dist/repo/doc-repo.types.js +2 -0
- package/dist/repo/doc-repo.types.js.map +1 -0
- package/dist/repo/edge-repo.d.ts.map +1 -1
- package/dist/repo/edge-repo.js +91 -81
- package/dist/repo/edge-repo.js.map +1 -1
- package/dist/repo/file-learning-repo.d.ts.map +1 -1
- package/dist/repo/file-learning-repo.js +7 -6
- package/dist/repo/file-learning-repo.js.map +1 -1
- package/dist/repo/guard-repo.d.ts +4 -4
- package/dist/repo/guard-repo.d.ts.map +1 -1
- package/dist/repo/guard-repo.js +8 -7
- package/dist/repo/guard-repo.js.map +1 -1
- package/dist/repo/index.d.ts +1 -0
- package/dist/repo/index.d.ts.map +1 -1
- package/dist/repo/index.js +1 -0
- package/dist/repo/index.js.map +1 -1
- package/dist/repo/label-repo.d.ts +4 -4
- package/dist/repo/label-repo.d.ts.map +1 -1
- package/dist/repo/label-repo.js +9 -8
- package/dist/repo/label-repo.js.map +1 -1
- package/dist/repo/learning-repo.d.ts +2 -2
- package/dist/repo/learning-repo.d.ts.map +1 -1
- package/dist/repo/learning-repo.js +37 -31
- package/dist/repo/learning-repo.js.map +1 -1
- package/dist/repo/memory-repo/document.d.ts +4 -0
- package/dist/repo/memory-repo/document.d.ts.map +1 -0
- package/dist/repo/memory-repo/document.js +205 -0
- package/dist/repo/memory-repo/document.js.map +1 -0
- package/dist/repo/memory-repo/link.d.ts +4 -0
- package/dist/repo/memory-repo/link.d.ts.map +1 -0
- package/dist/repo/memory-repo/link.js +124 -0
- package/dist/repo/memory-repo/link.js.map +1 -0
- package/dist/repo/memory-repo/property.d.ts +4 -0
- package/dist/repo/memory-repo/property.d.ts.map +1 -0
- package/dist/repo/memory-repo/property.js +56 -0
- package/dist/repo/memory-repo/property.js.map +1 -0
- package/dist/repo/memory-repo/shared.d.ts +28 -0
- package/dist/repo/memory-repo/shared.d.ts.map +1 -0
- package/dist/repo/memory-repo/shared.js +63 -0
- package/dist/repo/memory-repo/shared.js.map +1 -0
- package/dist/repo/memory-repo/source.d.ts +4 -0
- package/dist/repo/memory-repo/source.d.ts.map +1 -0
- package/dist/repo/memory-repo/source.js +58 -0
- package/dist/repo/memory-repo/source.js.map +1 -0
- package/dist/repo/memory-repo.d.ts +14 -10
- package/dist/repo/memory-repo.d.ts.map +1 -1
- package/dist/repo/memory-repo.js +8 -527
- package/dist/repo/memory-repo.js.map +1 -1
- package/dist/repo/message-repo.d.ts.map +1 -1
- package/dist/repo/message-repo.js +9 -8
- package/dist/repo/message-repo.js.map +1 -1
- package/dist/repo/orchestrator-state-repo.d.ts.map +1 -1
- package/dist/repo/orchestrator-state-repo.js +2 -1
- package/dist/repo/orchestrator-state-repo.js.map +1 -1
- package/dist/repo/pin-repo.d.ts.map +1 -1
- package/dist/repo/pin-repo.js +5 -4
- package/dist/repo/pin-repo.js.map +1 -1
- package/dist/repo/run-repo.d.ts.map +1 -1
- package/dist/repo/run-repo.js +11 -10
- package/dist/repo/run-repo.js.map +1 -1
- package/dist/repo/spec-trace-repo.d.ts +9 -0
- package/dist/repo/spec-trace-repo.d.ts.map +1 -0
- package/dist/repo/spec-trace-repo.filter.d.ts +3 -0
- package/dist/repo/spec-trace-repo.filter.d.ts.map +1 -0
- package/dist/repo/spec-trace-repo.filter.js +13 -0
- package/dist/repo/spec-trace-repo.filter.js.map +1 -0
- package/dist/repo/spec-trace-repo.js +323 -0
- package/dist/repo/spec-trace-repo.js.map +1 -0
- package/dist/repo/spec-trace-repo.types.d.ts +60 -0
- package/dist/repo/spec-trace-repo.types.d.ts.map +1 -0
- package/dist/repo/spec-trace-repo.types.js +2 -0
- package/dist/repo/spec-trace-repo.types.js.map +1 -0
- package/dist/repo/task-repo/factory.d.ts +4 -0
- package/dist/repo/task-repo/factory.d.ts.map +1 -0
- package/dist/repo/task-repo/factory.js +7 -0
- package/dist/repo/task-repo/factory.js.map +1 -0
- package/dist/repo/task-repo/read.d.ts +6 -0
- package/dist/repo/task-repo/read.d.ts.map +1 -0
- package/dist/repo/task-repo/read.js +332 -0
- package/dist/repo/task-repo/read.js.map +1 -0
- package/dist/repo/task-repo/shared.d.ts +10 -0
- package/dist/repo/task-repo/shared.d.ts.map +1 -0
- package/dist/repo/task-repo/shared.js +29 -0
- package/dist/repo/task-repo/shared.js.map +1 -0
- package/dist/repo/task-repo/write.d.ts +6 -0
- package/dist/repo/task-repo/write.d.ts.map +1 -0
- package/dist/repo/task-repo/write.js +182 -0
- package/dist/repo/task-repo/write.js.map +1 -0
- package/dist/repo/task-repo.d.ts +5 -4
- package/dist/repo/task-repo.d.ts.map +1 -1
- package/dist/repo/task-repo.js +2 -520
- 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 +6 -5
- package/dist/repo/tracked-project-repo.js.map +1 -1
- package/dist/repo/worker-repo.d.ts.map +1 -1
- package/dist/repo/worker-repo.js +60 -47
- package/dist/repo/worker-repo.js.map +1 -1
- package/dist/schemas/index.d.ts +4 -2
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +2 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/sync-events.d.ts +25 -0
- package/dist/schemas/sync-events.d.ts.map +1 -0
- package/dist/schemas/sync-events.js +23 -0
- package/dist/schemas/sync-events.js.map +1 -0
- package/dist/schemas/sync.d.ts +20 -10
- package/dist/schemas/sync.d.ts.map +1 -1
- package/dist/schemas/sync.js +10 -4
- package/dist/schemas/sync.js.map +1 -1
- package/dist/services/agent-service.d.ts +4 -4
- package/dist/services/agent-service.d.ts.map +1 -1
- package/dist/services/agent-service.js.map +1 -1
- package/dist/services/anchor/anchor-service-core-ops.d.ts +125 -0
- package/dist/services/anchor/anchor-service-core-ops.d.ts.map +1 -0
- package/dist/services/anchor/anchor-service-core-ops.js +41 -0
- package/dist/services/anchor/anchor-service-core-ops.js.map +1 -0
- package/dist/services/anchor/anchor-service-deps.d.ts +10 -0
- package/dist/services/anchor/anchor-service-deps.d.ts.map +1 -0
- package/dist/services/anchor/anchor-service-deps.js +2 -0
- package/dist/services/anchor/anchor-service-deps.js.map +1 -0
- package/dist/services/anchor/anchor-service-ops.d.ts +296 -0
- package/dist/services/anchor/anchor-service-ops.d.ts.map +1 -0
- package/dist/services/anchor/anchor-service-ops.js +9 -0
- package/dist/services/anchor/anchor-service-ops.js.map +1 -0
- package/dist/services/anchor/anchor-service-state-ops.d.ts +116 -0
- package/dist/services/anchor/anchor-service-state-ops.d.ts.map +1 -0
- package/dist/services/anchor/anchor-service-state-ops.js +150 -0
- package/dist/services/anchor/anchor-service-state-ops.js.map +1 -0
- package/dist/services/anchor/anchor-service-validation.d.ts +7 -0
- package/dist/services/anchor/anchor-service-validation.d.ts.map +1 -0
- package/dist/services/anchor/anchor-service-validation.js +114 -0
- package/dist/services/anchor/anchor-service-validation.js.map +1 -0
- package/dist/services/anchor/anchor-service-verification-ops.d.ts +71 -0
- package/dist/services/anchor/anchor-service-verification-ops.d.ts.map +1 -0
- package/dist/services/anchor/anchor-service-verification-ops.js +169 -0
- package/dist/services/anchor/anchor-service-verification-ops.js.map +1 -0
- package/dist/services/anchor/anchor-verification-batch.d.ts +12 -0
- package/dist/services/anchor/anchor-verification-batch.d.ts.map +1 -0
- package/dist/services/anchor/anchor-verification-batch.js +109 -0
- package/dist/services/anchor/anchor-verification-batch.js.map +1 -0
- package/dist/services/anchor/anchor-verification-single.d.ts +7 -0
- package/dist/services/anchor/anchor-verification-single.d.ts.map +1 -0
- package/dist/services/anchor/anchor-verification-single.js +407 -0
- package/dist/services/anchor/anchor-verification-single.js.map +1 -0
- package/dist/services/anchor/anchor-verification-utils.d.ts +19 -0
- package/dist/services/anchor/anchor-verification-utils.d.ts.map +1 -0
- package/dist/services/anchor/anchor-verification-utils.js +107 -0
- package/dist/services/anchor/anchor-verification-utils.js.map +1 -0
- package/dist/services/anchor-service.d.ts +12 -90
- package/dist/services/anchor-service.d.ts.map +1 -1
- package/dist/services/anchor-service.js +5 -530
- package/dist/services/anchor-service.js.map +1 -1
- package/dist/services/anchor-verification.d.ts +9 -60
- package/dist/services/anchor-verification.d.ts.map +1 -1
- package/dist/services/anchor-verification.js +5 -796
- package/dist/services/anchor-verification.js.map +1 -1
- package/dist/services/ast-grep-service/patterns.d.ts +90 -0
- package/dist/services/ast-grep-service/patterns.d.ts.map +1 -0
- package/dist/services/ast-grep-service/patterns.js +261 -0
- package/dist/services/ast-grep-service/patterns.js.map +1 -0
- package/dist/services/ast-grep-service.d.ts +2 -13
- package/dist/services/ast-grep-service.d.ts.map +1 -1
- package/dist/services/ast-grep-service.js +3 -261
- package/dist/services/ast-grep-service.js.map +1 -1
- package/dist/services/auto-sync-service.d.ts +3 -3
- package/dist/services/auto-sync-service.d.ts.map +1 -1
- package/dist/services/auto-sync-service.js +12 -13
- package/dist/services/auto-sync-service.js.map +1 -1
- package/dist/services/compaction-service.d.ts +6 -6
- package/dist/services/compaction-service.d.ts.map +1 -1
- package/dist/services/compaction-service.js +11 -7
- package/dist/services/compaction-service.js.map +1 -1
- package/dist/services/cycle-scan-service.d.ts +1 -27
- package/dist/services/cycle-scan-service.d.ts.map +1 -1
- package/dist/services/cycle-scan-service.js +1 -876
- package/dist/services/cycle-scan-service.js.map +1 -1
- package/dist/services/daemon-service/process.d.ts +93 -0
- package/dist/services/daemon-service/process.d.ts.map +1 -0
- package/dist/services/daemon-service/process.js +325 -0
- package/dist/services/daemon-service/process.js.map +1 -0
- package/dist/services/daemon-service/templates.d.ts +88 -0
- package/dist/services/daemon-service/templates.d.ts.map +1 -0
- package/dist/services/daemon-service/templates.js +119 -0
- package/dist/services/daemon-service/templates.js.map +1 -0
- package/dist/services/daemon-service.d.ts +8 -160
- package/dist/services/daemon-service.d.ts.map +1 -1
- package/dist/services/daemon-service.js +4 -440
- package/dist/services/daemon-service.js.map +1 -1
- package/dist/services/doc-service.d.ts +1 -41
- package/dist/services/doc-service.d.ts.map +1 -1
- package/dist/services/doc-service.js +1 -780
- package/dist/services/doc-service.js.map +1 -1
- package/dist/services/edge-service.d.ts +6 -6
- package/dist/services/edge-service.d.ts.map +1 -1
- package/dist/services/edge-service.js.map +1 -1
- package/dist/services/embedding-service.d.ts +1 -201
- package/dist/services/embedding-service.d.ts.map +1 -1
- package/dist/services/embedding-service.js +1 -465
- package/dist/services/embedding-service.js.map +1 -1
- package/dist/services/feedback-tracker.d.ts +2 -2
- package/dist/services/feedback-tracker.d.ts.map +1 -1
- package/dist/services/feedback-tracker.js.map +1 -1
- package/dist/services/file-watcher-service/shared.d.ts +76 -0
- package/dist/services/file-watcher-service/shared.d.ts.map +1 -0
- package/dist/services/file-watcher-service/shared.js +43 -0
- package/dist/services/file-watcher-service/shared.js.map +1 -0
- package/dist/services/file-watcher-service.d.ts +2 -42
- package/dist/services/file-watcher-service.d.ts.map +1 -1
- package/dist/services/file-watcher-service.js +1 -46
- package/dist/services/file-watcher-service.js.map +1 -1
- package/dist/services/graph-expansion/from-files.d.ts +14 -0
- package/dist/services/graph-expansion/from-files.d.ts.map +1 -0
- package/dist/services/graph-expansion/from-files.js +187 -0
- package/dist/services/graph-expansion/from-files.js.map +1 -0
- package/dist/services/graph-expansion/live.d.ts +11 -0
- package/dist/services/graph-expansion/live.d.ts.map +1 -0
- package/dist/services/graph-expansion/live.js +263 -0
- package/dist/services/graph-expansion/live.js.map +1 -0
- package/dist/services/graph-expansion.d.ts +17 -20
- package/dist/services/graph-expansion.d.ts.map +1 -1
- package/dist/services/graph-expansion.js +2 -439
- package/dist/services/graph-expansion.js.map +1 -1
- package/dist/services/guard-service.d.ts +2 -2
- package/dist/services/guard-service.d.ts.map +1 -1
- package/dist/services/guard-service.js.map +1 -1
- package/dist/services/index.d.ts +3 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -1
- 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.map +1 -1
- package/dist/services/llm-service.d.ts +4 -4
- package/dist/services/llm-service.d.ts.map +1 -1
- package/dist/services/llm-service.js.map +1 -1
- package/dist/services/memory-retriever-service.d.ts.map +1 -1
- package/dist/services/memory-retriever-service.js.map +1 -1
- package/dist/services/memory-service.d.ts +1 -48
- package/dist/services/memory-service.d.ts.map +1 -1
- package/dist/services/memory-service.js +1 -1060
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/migration-service.d.ts +6 -6
- package/dist/services/migration-service.d.ts.map +1 -1
- package/dist/services/migration-service.js +6 -2
- package/dist/services/migration-service.js.map +1 -1
- package/dist/services/orchestrator-service.d.ts +2 -2
- package/dist/services/orchestrator-service.d.ts.map +1 -1
- package/dist/services/orchestrator-service.js.map +1 -1
- package/dist/services/pin-service.d.ts.map +1 -1
- package/dist/services/pin-service.js +21 -28
- package/dist/services/pin-service.js.map +1 -1
- package/dist/services/promotion-service.d.ts +4 -4
- package/dist/services/promotion-service.d.ts.map +1 -1
- package/dist/services/promotion-service.js.map +1 -1
- package/dist/services/query-expansion-service.d.ts +2 -2
- package/dist/services/query-expansion-service.d.ts.map +1 -1
- package/dist/services/query-expansion-service.js.map +1 -1
- package/dist/services/reflect-service.d.ts +6 -6
- package/dist/services/reflect-service.d.ts.map +1 -1
- package/dist/services/reflect-service.js.map +1 -1
- package/dist/services/reranker-service.d.ts +2 -2
- package/dist/services/reranker-service.d.ts.map +1 -1
- package/dist/services/reranker-service.js.map +1 -1
- package/dist/services/retriever-scoring.d.ts +52 -0
- package/dist/services/retriever-scoring.d.ts.map +1 -0
- package/dist/services/retriever-scoring.js +146 -0
- package/dist/services/retriever-scoring.js.map +1 -0
- package/dist/services/retriever-service.d.ts.map +1 -1
- package/dist/services/retriever-service.js +1 -191
- package/dist/services/retriever-service.js.map +1 -1
- package/dist/services/run-heartbeat-service.d.ts +10 -10
- package/dist/services/run-heartbeat-service.d.ts.map +1 -1
- package/dist/services/run-heartbeat-service.js.map +1 -1
- package/dist/services/score-service.d.ts +2 -2
- package/dist/services/score-service.d.ts.map +1 -1
- package/dist/services/score-service.js.map +1 -1
- package/dist/services/spec-trace-service.d.ts +2 -0
- package/dist/services/spec-trace-service.d.ts.map +1 -0
- package/dist/services/spec-trace-service.js +2 -0
- package/dist/services/spec-trace-service.js.map +1 -0
- package/dist/services/stream-service.d.ts +31 -0
- package/dist/services/stream-service.d.ts.map +1 -0
- package/dist/services/stream-service.js +162 -0
- package/dist/services/stream-service.js.map +1 -0
- package/dist/services/swarm-verification/shared.d.ts +71 -0
- package/dist/services/swarm-verification/shared.d.ts.map +1 -0
- package/dist/services/swarm-verification/shared.js +108 -0
- package/dist/services/swarm-verification/shared.js.map +1 -0
- package/dist/services/swarm-verification.d.ts +4 -68
- package/dist/services/swarm-verification.d.ts.map +1 -1
- package/dist/services/swarm-verification.js +2 -122
- package/dist/services/swarm-verification.js.map +1 -1
- package/dist/services/sync/converters.d.ts +63 -0
- package/dist/services/sync/converters.d.ts.map +1 -0
- package/dist/services/sync/converters.js +253 -0
- package/dist/services/sync/converters.js.map +1 -0
- package/dist/services/sync/entity-export.d.ts +22 -0
- package/dist/services/sync/entity-export.d.ts.map +1 -0
- package/dist/services/sync/entity-export.js +15 -0
- package/dist/services/sync/entity-export.js.map +1 -0
- package/dist/services/sync/entity-import.d.ts +22 -0
- package/dist/services/sync/entity-import.d.ts.map +1 -0
- package/dist/services/sync/entity-import.js +15 -0
- package/dist/services/sync/entity-import.js.map +1 -0
- package/dist/services/sync/file-utils.d.ts +23 -0
- package/dist/services/sync/file-utils.d.ts.map +1 -0
- package/dist/services/sync/file-utils.js +97 -0
- package/dist/services/sync/file-utils.js.map +1 -0
- package/dist/services/sync/index.d.ts +3 -0
- package/dist/services/sync/index.d.ts.map +1 -0
- package/dist/services/sync/index.js +2 -0
- package/dist/services/sync/index.js.map +1 -0
- package/dist/services/sync/service.d.ts +2 -0
- package/dist/services/sync/service.d.ts.map +1 -0
- package/dist/services/sync/service.js +2 -0
- package/dist/services/sync/service.js.map +1 -0
- package/dist/services/sync/sync-helpers.d.ts +54 -0
- package/dist/services/sync/sync-helpers.d.ts.map +1 -0
- package/dist/services/sync/sync-helpers.js +245 -0
- package/dist/services/sync/sync-helpers.js.map +1 -0
- package/dist/services/sync/types.d.ts +104 -0
- package/dist/services/sync/types.d.ts.map +1 -0
- package/dist/services/sync/types.js +5 -0
- package/dist/services/sync/types.js.map +1 -0
- package/dist/services/task-service/internals.d.ts +36 -0
- package/dist/services/task-service/internals.d.ts.map +1 -0
- package/dist/services/task-service/internals.js +270 -0
- package/dist/services/task-service/internals.js.map +1 -0
- package/dist/services/task-service.d.ts +2 -1
- package/dist/services/task-service.d.ts.map +1 -1
- package/dist/services/task-service.js +28 -236
- package/dist/services/task-service.js.map +1 -1
- package/dist/services/tracing-service.d.ts +2 -2
- package/dist/services/tracing-service.d.ts.map +1 -1
- package/dist/services/tracing-service.js.map +1 -1
- package/dist/services/transcript-adapter.d.ts +6 -6
- package/dist/services/transcript-adapter.d.ts.map +1 -1
- package/dist/services/transcript-adapter.js +3 -8
- package/dist/services/transcript-adapter.js.map +1 -1
- package/dist/services/validation-service.d.ts +8 -8
- package/dist/services/validation-service.d.ts.map +1 -1
- package/dist/services/validation-service.js.map +1 -1
- package/dist/services/verify-service.d.ts +2 -2
- package/dist/services/verify-service.d.ts.map +1 -1
- package/dist/services/verify-service.js.map +1 -1
- package/dist/services/worker-process/runtime.d.ts +51 -0
- package/dist/services/worker-process/runtime.d.ts.map +1 -0
- package/dist/services/worker-process/runtime.js +150 -0
- package/dist/services/worker-process/runtime.js.map +1 -0
- package/dist/services/worker-process.d.ts +3 -18
- package/dist/services/worker-process.d.ts.map +1 -1
- package/dist/services/worker-process.js +3 -173
- package/dist/services/worker-process.js.map +1 -1
- package/dist/services/worker-service.d.ts +6 -6
- package/dist/services/worker-service.d.ts.map +1 -1
- package/dist/services/worker-service.js.map +1 -1
- package/dist/utils/db-result.d.ts +14 -0
- package/dist/utils/db-result.d.ts.map +1 -0
- package/dist/utils/db-result.js +37 -0
- package/dist/utils/db-result.js.map +1 -0
- package/dist/utils/doc-renderer.d.ts +10 -10
- package/dist/utils/doc-renderer.d.ts.map +1 -1
- package/dist/utils/doc-renderer.js.map +1 -1
- package/dist/utils/ears-validator.d.ts +2 -2
- package/dist/utils/ears-validator.d.ts.map +1 -1
- package/dist/utils/ears-validator.js.map +1 -1
- package/dist/utils/file-path.d.ts +27 -0
- package/dist/utils/file-path.d.ts.map +1 -0
- package/dist/utils/file-path.js +77 -0
- package/dist/utils/file-path.js.map +1 -0
- package/dist/utils/glob.d.ts +2 -11
- package/dist/utils/glob.d.ts.map +1 -1
- package/dist/utils/glob.js +22 -13
- package/dist/utils/glob.js.map +1 -1
- package/dist/utils/spec-discovery.d.ts +34 -0
- package/dist/utils/spec-discovery.d.ts.map +1 -0
- package/dist/utils/spec-discovery.js +344 -0
- package/dist/utils/spec-discovery.js.map +1 -0
- package/dist/utils/toml-config.d.ts +7 -2
- package/dist/utils/toml-config.d.ts.map +1 -1
- package/dist/utils/toml-config.js +106 -2
- package/dist/utils/toml-config.js.map +1 -1
- package/dist/utils/ulid.d.ts +8 -0
- package/dist/utils/ulid.d.ts.map +1 -0
- package/dist/utils/ulid.js +30 -0
- package/dist/utils/ulid.js.map +1 -0
- package/dist/worker/hooks.d.ts +10 -10
- package/dist/worker/hooks.d.ts.map +1 -1
- package/dist/worker/run-worker.d.ts.map +1 -1
- package/dist/worker/run-worker.js.map +1 -1
- package/migrations/033_sync_events.sql +33 -0
- package/migrations/034_spec_test_traceability.sql +51 -0
- package/migrations/035_anchor_schema_repair.sql +82 -0
- package/package.json +3 -2
- package/dist/services/sync-service.d.ts +0 -247
- package/dist/services/sync-service.d.ts.map +0 -1
- package/dist/services/sync-service.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-learning-repo.d.ts","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,EAAoB,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAGzF,OAAO,KAAK,EAAE,YAAY,EAAmB,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;;
|
|
1
|
+
{"version":3,"file":"file-learning-repo.d.ts","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,EAAoB,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAGzF,OAAO,KAAK,EAAE,YAAY,EAAmB,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;;qBAMhF,CAAC,KAAK,EAAE,uBAAuB,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC;uBAC5E,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,EAAE,aAAa,CAAC;sBAClE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE,EAAE,aAAa,CAAC;yBACtE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE,EAAE,aAAa,CAAC;qBAC3E,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,yBAAyB,CAAC;oBAC/E,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;;AAR9D,qBAAa,sBAAuB,SAAQ,2BAUzC;CAAG;AAEN,eAAO,MAAM,0BAA0B,0DAyFtC,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { SqliteClient } from "../db.js";
|
|
|
3
3
|
import { DatabaseError, EntityFetchError, FileLearningNotFoundError } from "../errors.js";
|
|
4
4
|
import { rowToFileLearning, matchesPattern } from "../mappers/file-learning.js";
|
|
5
5
|
import { DEFAULT_QUERY_LIMIT } from "../utils/sql.js";
|
|
6
|
+
import { coerceDbResult } from "../utils/db-result.js";
|
|
6
7
|
export class FileLearningRepository extends Context.Tag("FileLearningRepository")() {
|
|
7
8
|
}
|
|
8
9
|
export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, Effect.gen(function* () {
|
|
@@ -14,11 +15,11 @@ export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, E
|
|
|
14
15
|
const result = db.prepare(`INSERT INTO file_learnings (file_pattern, note, task_id, created_at)
|
|
15
16
|
VALUES (?, ?, ?, ?)`).run(input.filePattern, input.note, input.taskId ?? null, now);
|
|
16
17
|
// Fetch the inserted row
|
|
17
|
-
const row = db.prepare("SELECT * FROM file_learnings WHERE id = ?").get(result.lastInsertRowid);
|
|
18
|
+
const row = coerceDbResult(db.prepare("SELECT * FROM file_learnings WHERE id = ?").get(result.lastInsertRowid));
|
|
18
19
|
if (!row) {
|
|
19
20
|
throw new EntityFetchError({
|
|
20
21
|
entity: "file_learning",
|
|
21
|
-
id: result.lastInsertRowid,
|
|
22
|
+
id: coerceDbResult(result.lastInsertRowid),
|
|
22
23
|
operation: "insert"
|
|
23
24
|
});
|
|
24
25
|
}
|
|
@@ -28,14 +29,14 @@ export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, E
|
|
|
28
29
|
}),
|
|
29
30
|
findById: (id) => Effect.try({
|
|
30
31
|
try: () => {
|
|
31
|
-
const row = db.prepare("SELECT * FROM file_learnings WHERE id = ?").get(id);
|
|
32
|
+
const row = coerceDbResult(db.prepare("SELECT * FROM file_learnings WHERE id = ?").get(id));
|
|
32
33
|
return row ? rowToFileLearning(row) : null;
|
|
33
34
|
},
|
|
34
35
|
catch: (cause) => new DatabaseError({ cause })
|
|
35
36
|
}),
|
|
36
37
|
findAll: (limit) => Effect.try({
|
|
37
38
|
try: () => {
|
|
38
|
-
const rows = db.prepare(`SELECT * FROM file_learnings ORDER BY created_at DESC LIMIT ?`).all(limit ?? DEFAULT_QUERY_LIMIT);
|
|
39
|
+
const rows = coerceDbResult(db.prepare(`SELECT * FROM file_learnings ORDER BY created_at DESC LIMIT ?`).all(limit ?? DEFAULT_QUERY_LIMIT));
|
|
39
40
|
return rows.map(rowToFileLearning);
|
|
40
41
|
},
|
|
41
42
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -43,7 +44,7 @@ export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, E
|
|
|
43
44
|
findByPath: (path) => Effect.try({
|
|
44
45
|
try: () => {
|
|
45
46
|
// Get all file learnings and filter by pattern matching
|
|
46
|
-
const rows = db.prepare(`SELECT * FROM file_learnings ORDER BY created_at DESC`).all();
|
|
47
|
+
const rows = coerceDbResult(db.prepare(`SELECT * FROM file_learnings ORDER BY created_at DESC`).all());
|
|
47
48
|
return rows
|
|
48
49
|
.filter(row => matchesPattern(row.file_pattern, path))
|
|
49
50
|
.map(rowToFileLearning);
|
|
@@ -61,7 +62,7 @@ export const FileLearningRepositoryLive = Layer.effect(FileLearningRepository, E
|
|
|
61
62
|
}),
|
|
62
63
|
count: () => Effect.try({
|
|
63
64
|
try: () => {
|
|
64
|
-
const result = db.prepare("SELECT COUNT(*) as cnt FROM file_learnings").get();
|
|
65
|
+
const result = coerceDbResult(db.prepare("SELECT COUNT(*) as cnt FROM file_learnings").get());
|
|
65
66
|
return result.cnt;
|
|
66
67
|
},
|
|
67
68
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -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,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"file-learning-repo.js","sourceRoot":"","sources":["../../src/repo/file-learning-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
3
|
import { DatabaseError } from "../errors.js";
|
|
4
|
-
export
|
|
4
|
+
export type GuardRow = {
|
|
5
5
|
readonly id: number;
|
|
6
6
|
readonly scope: string;
|
|
7
7
|
readonly max_pending: number | null;
|
|
@@ -9,8 +9,8 @@ export interface GuardRow {
|
|
|
9
9
|
readonly max_depth: number | null;
|
|
10
10
|
readonly enforce: number;
|
|
11
11
|
readonly created_at: string;
|
|
12
|
-
}
|
|
13
|
-
export
|
|
12
|
+
};
|
|
13
|
+
export type Guard = {
|
|
14
14
|
readonly id: number;
|
|
15
15
|
readonly scope: string;
|
|
16
16
|
readonly maxPending: number | null;
|
|
@@ -18,7 +18,7 @@ export interface Guard {
|
|
|
18
18
|
readonly maxDepth: number | null;
|
|
19
19
|
readonly enforce: boolean;
|
|
20
20
|
readonly createdAt: string;
|
|
21
|
-
}
|
|
21
|
+
};
|
|
22
22
|
declare const GuardRepository_base: Context.TagClass<GuardRepository, "GuardRepository", {
|
|
23
23
|
readonly findByScope: (scope: string) => Effect.Effect<Guard | null, DatabaseError>;
|
|
24
24
|
readonly findAll: () => Effect.Effect<readonly Guard[], DatabaseError>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard-repo.d.ts","sourceRoot":"","sources":["../../src/repo/guard-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":"guard-repo.d.ts","sourceRoot":"","sources":["../../src/repo/guard-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;AAG5C,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;;0BAeyB,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,EAAE,aAAa,CAAC;sBACjE,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE,EAAE,aAAa,CAAC;qBACrD,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACtC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACxB,OAAO,EAAE,OAAO,CAAA;KACjB,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC;qBACxB,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;2BAClD,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;8BACvC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;0BAC9D,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;;AAdpF,qBAAa,eAAgB,SAAQ,oBAgBlC;CAAG;AAEN,eAAO,MAAM,mBAAmB,mDAkH/B,CAAA"}
|
package/dist/repo/guard-repo.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
3
|
import { DatabaseError } from "../errors.js";
|
|
4
|
+
import { coerceDbResult } from "../utils/db-result.js";
|
|
4
5
|
const rowToGuard = (row) => ({
|
|
5
6
|
id: row.id,
|
|
6
7
|
scope: row.scope,
|
|
@@ -17,14 +18,14 @@ export const GuardRepositoryLive = Layer.effect(GuardRepository, Effect.gen(func
|
|
|
17
18
|
return {
|
|
18
19
|
findByScope: (scope) => Effect.try({
|
|
19
20
|
try: () => {
|
|
20
|
-
const row = db.prepare("SELECT * FROM task_guards WHERE scope = ?").get(scope);
|
|
21
|
+
const row = coerceDbResult(db.prepare("SELECT * FROM task_guards WHERE scope = ?").get(scope));
|
|
21
22
|
return row ? rowToGuard(row) : null;
|
|
22
23
|
},
|
|
23
24
|
catch: (cause) => new DatabaseError({ cause })
|
|
24
25
|
}),
|
|
25
26
|
findAll: () => Effect.try({
|
|
26
27
|
try: () => {
|
|
27
|
-
const rows = db.prepare("SELECT * FROM task_guards ORDER BY scope").all();
|
|
28
|
+
const rows = coerceDbResult(db.prepare("SELECT * FROM task_guards ORDER BY scope").all());
|
|
28
29
|
return rows.map(rowToGuard);
|
|
29
30
|
},
|
|
30
31
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -51,7 +52,7 @@ export const GuardRepositoryLive = Layer.effect(GuardRepository, Effect.gen(func
|
|
|
51
52
|
${setChildren},
|
|
52
53
|
${setDepth},
|
|
53
54
|
enforce = excluded.enforce`).run(scope, guard.maxPending ?? null, guard.maxChildren ?? null, guard.maxDepth ?? null, guard.enforce ? 1 : 0);
|
|
54
|
-
const row = db.prepare("SELECT * FROM task_guards WHERE scope = ?").get(scope);
|
|
55
|
+
const row = coerceDbResult(db.prepare("SELECT * FROM task_guards WHERE scope = ?").get(scope));
|
|
55
56
|
return rowToGuard(row);
|
|
56
57
|
},
|
|
57
58
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -65,14 +66,14 @@ export const GuardRepositoryLive = Layer.effect(GuardRepository, Effect.gen(func
|
|
|
65
66
|
}),
|
|
66
67
|
countPending: () => Effect.try({
|
|
67
68
|
try: () => {
|
|
68
|
-
const row = db.prepare("SELECT COUNT(*) as cnt FROM tasks WHERE status != 'done'").get();
|
|
69
|
+
const row = coerceDbResult(db.prepare("SELECT COUNT(*) as cnt FROM tasks WHERE status != 'done'").get());
|
|
69
70
|
return row.cnt;
|
|
70
71
|
},
|
|
71
72
|
catch: (cause) => new DatabaseError({ cause })
|
|
72
73
|
}),
|
|
73
74
|
countChildrenOf: (parentId) => Effect.try({
|
|
74
75
|
try: () => {
|
|
75
|
-
const row = db.prepare("SELECT COUNT(*) as cnt FROM tasks WHERE parent_id = ?").get(parentId);
|
|
76
|
+
const row = coerceDbResult(db.prepare("SELECT COUNT(*) as cnt FROM tasks WHERE parent_id = ?").get(parentId));
|
|
76
77
|
return row.cnt;
|
|
77
78
|
},
|
|
78
79
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -81,14 +82,14 @@ export const GuardRepositoryLive = Layer.effect(GuardRepository, Effect.gen(func
|
|
|
81
82
|
try: () => {
|
|
82
83
|
// Count how many ancestors parentId has (0 for root, 1 for child of root, etc.)
|
|
83
84
|
// A new child under parentId would be at depth = (ancestor count of parentId) + 1
|
|
84
|
-
const row = db.prepare(`WITH RECURSIVE ancestors AS (
|
|
85
|
+
const row = coerceDbResult(db.prepare(`WITH RECURSIVE ancestors AS (
|
|
85
86
|
SELECT parent_id FROM tasks WHERE id = ?
|
|
86
87
|
UNION ALL
|
|
87
88
|
SELECT t.parent_id
|
|
88
89
|
FROM tasks t JOIN ancestors a ON t.id = a.parent_id
|
|
89
90
|
WHERE a.parent_id IS NOT NULL
|
|
90
91
|
)
|
|
91
|
-
SELECT COUNT(*) as depth FROM ancestors WHERE parent_id IS NOT NULL`).get(parentId);
|
|
92
|
+
SELECT COUNT(*) as depth FROM ancestors WHERE parent_id IS NOT NULL`).get(parentId));
|
|
92
93
|
return row.depth;
|
|
93
94
|
},
|
|
94
95
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard-repo.js","sourceRoot":"","sources":["../../src/repo/guard-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":"guard-repo.js","sourceRoot":"","sources":["../../src/repo/guard-repo.ts"],"names":[],"mappings":"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"}
|
package/dist/repo/index.d.ts
CHANGED
|
@@ -22,4 +22,5 @@ export { MemoryDocumentRepository, MemoryDocumentRepositoryLive, MemoryLinkRepos
|
|
|
22
22
|
export { PinRepository, PinRepositoryLive } from "./pin-repo.js";
|
|
23
23
|
export { GuardRepository, GuardRepositoryLive, type Guard, type GuardRow } from "./guard-repo.js";
|
|
24
24
|
export { LabelRepository, LabelRepositoryLive, type Label, type LabelRow } from "./label-repo.js";
|
|
25
|
+
export { SpecTraceRepository, SpecTraceRepositoryLive, type InvariantSummary, type SpecTraceFilter, } from "./spec-trace-repo.js";
|
|
25
26
|
//# 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,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAClG,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,oBAAoB,EAAE,wBAAwB,EAAE,KAAK,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC7I,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EACL,wBAAwB,EAAE,4BAA4B,EACtD,oBAAoB,EAAE,wBAAwB,EAC9C,wBAAwB,EAAE,4BAA4B,EACtD,sBAAsB,EAAE,0BAA0B,EAClD,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA"}
|
|
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,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAClG,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,oBAAoB,EAAE,wBAAwB,EAAE,KAAK,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC7I,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EACL,wBAAwB,EAAE,4BAA4B,EACtD,oBAAoB,EAAE,wBAAwB,EAC9C,wBAAwB,EAAE,4BAA4B,EACtD,sBAAsB,EAAE,0BAA0B,EAClD,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAA"}
|
package/dist/repo/index.js
CHANGED
|
@@ -22,4 +22,5 @@ export { MemoryDocumentRepository, MemoryDocumentRepositoryLive, MemoryLinkRepos
|
|
|
22
22
|
export { PinRepository, PinRepositoryLive } from "./pin-repo.js";
|
|
23
23
|
export { GuardRepository, GuardRepositoryLive } from "./guard-repo.js";
|
|
24
24
|
export { LabelRepository, LabelRepositoryLive } from "./label-repo.js";
|
|
25
|
+
export { SpecTraceRepository, SpecTraceRepositoryLive, } from "./spec-trace-repo.js";
|
|
25
26
|
//# 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,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAClG,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,oBAAoB,EAAE,wBAAwB,EAA0D,MAAM,sBAAsB,CAAA;AAC7I,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EACL,wBAAwB,EAAE,4BAA4B,EACtD,oBAAoB,EAAE,wBAAwB,EAC9C,wBAAwB,EAAE,4BAA4B,EACtD,sBAAsB,EAAE,0BAA0B,GAEnD,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAA6B,MAAM,iBAAiB,CAAA;AACjG,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAA6B,MAAM,iBAAiB,CAAA"}
|
|
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,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAClG,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,oBAAoB,EAAE,wBAAwB,EAA0D,MAAM,sBAAsB,CAAA;AAC7I,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EACL,wBAAwB,EAAE,4BAA4B,EACtD,oBAAoB,EAAE,wBAAwB,EAC9C,wBAAwB,EAAE,4BAA4B,EACtD,sBAAsB,EAAE,0BAA0B,GAEnD,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAA6B,MAAM,iBAAiB,CAAA;AACjG,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAA6B,MAAM,iBAAiB,CAAA;AACjG,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAGxB,MAAM,sBAAsB,CAAA"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
3
|
import { DatabaseError, LabelNotFoundError, TaskNotFoundError } from "../errors.js";
|
|
4
|
-
export
|
|
4
|
+
export type LabelRow = {
|
|
5
5
|
readonly id: number;
|
|
6
6
|
readonly name: string;
|
|
7
7
|
readonly color: string;
|
|
8
8
|
readonly created_at: string;
|
|
9
9
|
readonly updated_at: string;
|
|
10
|
-
}
|
|
11
|
-
export
|
|
10
|
+
};
|
|
11
|
+
export type Label = {
|
|
12
12
|
readonly id: number;
|
|
13
13
|
readonly name: string;
|
|
14
14
|
readonly color: string;
|
|
15
15
|
readonly createdAt: string;
|
|
16
16
|
readonly updatedAt: string;
|
|
17
|
-
}
|
|
17
|
+
};
|
|
18
18
|
declare const LabelRepository_base: Context.TagClass<LabelRepository, "LabelRepository", {
|
|
19
19
|
readonly findByName: (name: string) => Effect.Effect<Label | null, DatabaseError>;
|
|
20
20
|
readonly findAll: () => Effect.Effect<readonly Label[], DatabaseError>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label-repo.d.ts","sourceRoot":"","sources":["../../src/repo/label-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,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"label-repo.d.ts","sourceRoot":"","sources":["../../src/repo/label-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,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAGnF,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B,CAAA;;yBAawB,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,EAAE,aAAa,CAAC;sBAC/D,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE,EAAE,aAAa,CAAC;qBACrD,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC;qBACpE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;qBACvD,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;uBAChH,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,cAAc,GAAG,iBAAiB,EAAE,aAAa,CAAC;+BAC3G,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE,EAAE,aAAa,CAAC;;AATjG,qBAAa,eAAgB,SAAQ,oBAWlC;CAAG;AAEN,eAAO,MAAM,mBAAmB,mDA+G/B,CAAA"}
|
package/dist/repo/label-repo.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import { SqliteClient } from "../db.js";
|
|
3
3
|
import { DatabaseError, LabelNotFoundError, TaskNotFoundError } from "../errors.js";
|
|
4
|
+
import { coerceDbResult } from "../utils/db-result.js";
|
|
4
5
|
const rowToLabel = (row) => ({
|
|
5
6
|
id: row.id,
|
|
6
7
|
name: row.name,
|
|
@@ -15,14 +16,14 @@ export const LabelRepositoryLive = Layer.effect(LabelRepository, Effect.gen(func
|
|
|
15
16
|
return {
|
|
16
17
|
findByName: (name) => Effect.try({
|
|
17
18
|
try: () => {
|
|
18
|
-
const row = db.prepare("SELECT * FROM task_labels WHERE lower(name) = lower(?)").get(name);
|
|
19
|
+
const row = coerceDbResult(db.prepare("SELECT * FROM task_labels WHERE lower(name) = lower(?)").get(name));
|
|
19
20
|
return row ? rowToLabel(row) : null;
|
|
20
21
|
},
|
|
21
22
|
catch: (cause) => new DatabaseError({ cause })
|
|
22
23
|
}),
|
|
23
24
|
findAll: () => Effect.try({
|
|
24
25
|
try: () => {
|
|
25
|
-
const rows = db.prepare("SELECT * FROM task_labels ORDER BY name").all();
|
|
26
|
+
const rows = coerceDbResult(db.prepare("SELECT * FROM task_labels ORDER BY name").all());
|
|
26
27
|
return rows.map(rowToLabel);
|
|
27
28
|
},
|
|
28
29
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -31,7 +32,7 @@ export const LabelRepositoryLive = Layer.effect(LabelRepository, Effect.gen(func
|
|
|
31
32
|
try: () => {
|
|
32
33
|
const now = new Date().toISOString();
|
|
33
34
|
db.prepare("INSERT INTO task_labels (name, color, created_at, updated_at) VALUES (?, ?, ?, ?)").run(name, color, now, now);
|
|
34
|
-
const row = db.prepare("SELECT * FROM task_labels WHERE lower(name) = lower(?)").get(name);
|
|
35
|
+
const row = coerceDbResult(db.prepare("SELECT * FROM task_labels WHERE lower(name) = lower(?)").get(name));
|
|
35
36
|
return rowToLabel(row);
|
|
36
37
|
},
|
|
37
38
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -46,14 +47,14 @@ export const LabelRepositoryLive = Layer.effect(LabelRepository, Effect.gen(func
|
|
|
46
47
|
assign: (taskId, labelName) => Effect.gen(function* () {
|
|
47
48
|
// Validate task exists (INSERT OR IGNORE swallows FK violations silently)
|
|
48
49
|
const task = yield* Effect.try({
|
|
49
|
-
try: () => db.prepare("SELECT id FROM tasks WHERE id = ?").get(taskId),
|
|
50
|
+
try: () => coerceDbResult(db.prepare("SELECT id FROM tasks WHERE id = ?").get(taskId)),
|
|
50
51
|
catch: (cause) => new DatabaseError({ cause })
|
|
51
52
|
});
|
|
52
53
|
if (!task) {
|
|
53
54
|
return yield* Effect.fail(new TaskNotFoundError({ id: taskId }));
|
|
54
55
|
}
|
|
55
56
|
const label = yield* Effect.try({
|
|
56
|
-
try: () => db.prepare("SELECT id FROM task_labels WHERE lower(name) = lower(?)").get(labelName),
|
|
57
|
+
try: () => coerceDbResult(db.prepare("SELECT id FROM task_labels WHERE lower(name) = lower(?)").get(labelName)),
|
|
57
58
|
catch: (cause) => new DatabaseError({ cause })
|
|
58
59
|
});
|
|
59
60
|
if (!label) {
|
|
@@ -68,7 +69,7 @@ export const LabelRepositoryLive = Layer.effect(LabelRepository, Effect.gen(func
|
|
|
68
69
|
}),
|
|
69
70
|
unassign: (taskId, labelName) => Effect.try({
|
|
70
71
|
try: () => {
|
|
71
|
-
const label = db.prepare("SELECT id FROM task_labels WHERE lower(name) = lower(?)").get(labelName);
|
|
72
|
+
const label = coerceDbResult(db.prepare("SELECT id FROM task_labels WHERE lower(name) = lower(?)").get(labelName));
|
|
72
73
|
if (!label)
|
|
73
74
|
return "label_not_found";
|
|
74
75
|
const result = db.prepare("DELETE FROM task_label_assignments WHERE task_id = ? AND label_id = ?").run(taskId, label.id);
|
|
@@ -78,10 +79,10 @@ export const LabelRepositoryLive = Layer.effect(LabelRepository, Effect.gen(func
|
|
|
78
79
|
}),
|
|
79
80
|
getLabelsForTask: (taskId) => Effect.try({
|
|
80
81
|
try: () => {
|
|
81
|
-
const rows = db.prepare(`SELECT tl.* FROM task_labels tl
|
|
82
|
+
const rows = coerceDbResult(db.prepare(`SELECT tl.* FROM task_labels tl
|
|
82
83
|
JOIN task_label_assignments tla ON tla.label_id = tl.id
|
|
83
84
|
WHERE tla.task_id = ?
|
|
84
|
-
ORDER BY tl.name`).all(taskId);
|
|
85
|
+
ORDER BY tl.name`).all(taskId));
|
|
85
86
|
return rows.map(rowToLabel);
|
|
86
87
|
},
|
|
87
88
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label-repo.js","sourceRoot":"","sources":["../../src/repo/label-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,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"label-repo.js","sourceRoot":"","sources":["../../src/repo/label-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,10 @@ import { SqliteClient } from "../db.js";
|
|
|
3
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
|
-
export
|
|
6
|
+
export type BM25Result = {
|
|
7
7
|
learning: Learning;
|
|
8
8
|
score: number;
|
|
9
|
-
}
|
|
9
|
+
};
|
|
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>;
|
|
@@ -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,EAAoB,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGrF,OAAO,KAAK,EAAE,QAAQ,EAAoC,mBAAmB,EAAE,MAAM,yBAAyB,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;AAiC9G,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;;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,sDAwPlC,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { SqliteClient } from "../db.js";
|
|
|
3
3
|
import { DatabaseError, EntityFetchError, LearningNotFoundError } from "../errors.js";
|
|
4
4
|
import { rowToLearning, rowToLearningWithoutEmbedding, float32ArrayToBuffer } from "../mappers/learning.js";
|
|
5
5
|
import { DEFAULT_QUERY_LIMIT } from "../utils/sql.js";
|
|
6
|
+
import { coerceDbResult } from "../utils/db-result.js";
|
|
6
7
|
const MAX_SQL_VARIABLES = 900;
|
|
7
8
|
const chunkBySqlLimit = (values, chunkSize = MAX_SQL_VARIABLES) => {
|
|
8
9
|
if (values.length === 0) {
|
|
@@ -10,7 +11,7 @@ const chunkBySqlLimit = (values, chunkSize = MAX_SQL_VARIABLES) => {
|
|
|
10
11
|
}
|
|
11
12
|
const chunks = [];
|
|
12
13
|
for (let i = 0; i < values.length; i += chunkSize) {
|
|
13
|
-
chunks.push(values.slice(i, i + chunkSize));
|
|
14
|
+
chunks.push(coerceDbResult(values.slice(i, i + chunkSize)));
|
|
14
15
|
}
|
|
15
16
|
return chunks;
|
|
16
17
|
};
|
|
@@ -64,34 +65,39 @@ const buildFTS5Query = (query) => {
|
|
|
64
65
|
export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.gen(function* () {
|
|
65
66
|
const db = yield* SqliteClient;
|
|
66
67
|
return {
|
|
67
|
-
insert: (input) => Effect.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
insert: (input) => Effect.gen(function* () {
|
|
69
|
+
const now = new Date().toISOString();
|
|
70
|
+
const result = yield* Effect.try({
|
|
71
|
+
try: () => db.prepare(`INSERT INTO learnings (content, source_type, source_ref, created_at, keywords, category)
|
|
72
|
+
VALUES (?, ?, ?, ?, ?, ?)`).run(input.content, input.sourceType ?? "manual", input.sourceRef ?? null, now, input.keywords ? JSON.stringify(input.keywords) : null, input.category ?? null),
|
|
73
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
74
|
+
});
|
|
75
|
+
// Fetch the inserted row
|
|
76
|
+
const row = yield* Effect.try({
|
|
77
|
+
try: () => coerceDbResult(db.prepare("SELECT * FROM learnings WHERE id = ?").get(result.lastInsertRowid)),
|
|
78
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
79
|
+
});
|
|
80
|
+
if (!row) {
|
|
81
|
+
return yield* Effect.fail(new DatabaseError({
|
|
82
|
+
cause: new EntityFetchError({
|
|
76
83
|
entity: "learning",
|
|
77
|
-
id: result.lastInsertRowid,
|
|
84
|
+
id: coerceDbResult(result.lastInsertRowid),
|
|
78
85
|
operation: "insert"
|
|
79
|
-
})
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
catch: (cause) => new DatabaseError({ cause })
|
|
86
|
+
})
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
return rowToLearning(row);
|
|
84
90
|
}),
|
|
85
91
|
findById: (id) => Effect.try({
|
|
86
92
|
try: () => {
|
|
87
|
-
const row = db.prepare("SELECT * FROM learnings WHERE id = ?").get(id);
|
|
93
|
+
const row = coerceDbResult(db.prepare("SELECT * FROM learnings WHERE id = ?").get(id));
|
|
88
94
|
return row ? rowToLearning(row) : null;
|
|
89
95
|
},
|
|
90
96
|
catch: (cause) => new DatabaseError({ cause })
|
|
91
97
|
}),
|
|
92
98
|
findAll: (limit) => Effect.try({
|
|
93
99
|
try: () => {
|
|
94
|
-
const rows = db.prepare(`SELECT * FROM learnings ORDER BY created_at ASC LIMIT ?`).all(limit ?? DEFAULT_QUERY_LIMIT);
|
|
100
|
+
const rows = coerceDbResult(db.prepare(`SELECT * FROM learnings ORDER BY created_at ASC LIMIT ?`).all(limit ?? DEFAULT_QUERY_LIMIT));
|
|
95
101
|
return rows.map(rowToLearning);
|
|
96
102
|
},
|
|
97
103
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -99,8 +105,8 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
99
105
|
findPaginated: (limit, afterId) => Effect.try({
|
|
100
106
|
try: () => {
|
|
101
107
|
const rows = afterId !== undefined
|
|
102
|
-
? db.prepare(`SELECT * FROM learnings WHERE id > ? ORDER BY id ASC LIMIT ?`).all(afterId, limit)
|
|
103
|
-
: db.prepare(`SELECT * FROM learnings ORDER BY id ASC LIMIT ?`).all(limit);
|
|
108
|
+
? coerceDbResult(db.prepare(`SELECT * FROM learnings WHERE id > ? ORDER BY id ASC LIMIT ?`).all(afterId, limit))
|
|
109
|
+
: coerceDbResult(db.prepare(`SELECT * FROM learnings ORDER BY id ASC LIMIT ?`).all(limit));
|
|
104
110
|
return rows.map(rowToLearning);
|
|
105
111
|
},
|
|
106
112
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -108,22 +114,22 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
108
114
|
findWithoutEmbeddingPaginated: (limit, afterId) => Effect.try({
|
|
109
115
|
try: () => {
|
|
110
116
|
const rows = afterId !== undefined
|
|
111
|
-
? db.prepare(`SELECT * FROM learnings WHERE embedding IS NULL AND id > ? ORDER BY id ASC LIMIT ?`).all(afterId, limit)
|
|
112
|
-
: db.prepare(`SELECT * FROM learnings WHERE embedding IS NULL ORDER BY id ASC LIMIT ?`).all(limit);
|
|
117
|
+
? coerceDbResult(db.prepare(`SELECT * FROM learnings WHERE embedding IS NULL AND id > ? ORDER BY id ASC LIMIT ?`).all(afterId, limit))
|
|
118
|
+
: coerceDbResult(db.prepare(`SELECT * FROM learnings WHERE embedding IS NULL ORDER BY id ASC LIMIT ?`).all(limit));
|
|
113
119
|
return rows.map(rowToLearning);
|
|
114
120
|
},
|
|
115
121
|
catch: (cause) => new DatabaseError({ cause })
|
|
116
122
|
}),
|
|
117
123
|
findRecent: (limit) => Effect.try({
|
|
118
124
|
try: () => {
|
|
119
|
-
const rows = db.prepare(`SELECT * FROM learnings ORDER BY created_at DESC LIMIT ?`).all(limit);
|
|
125
|
+
const rows = coerceDbResult(db.prepare(`SELECT * FROM learnings ORDER BY created_at DESC LIMIT ?`).all(limit));
|
|
120
126
|
return rows.map(rowToLearning);
|
|
121
127
|
},
|
|
122
128
|
catch: (cause) => new DatabaseError({ cause })
|
|
123
129
|
}),
|
|
124
130
|
findRecentWithoutEmbedding: (limit) => Effect.try({
|
|
125
131
|
try: () => {
|
|
126
|
-
const rows = db.prepare(`SELECT ${COLS_NO_EMBEDDING} FROM learnings ORDER BY created_at DESC LIMIT ?`).all(limit);
|
|
132
|
+
const rows = coerceDbResult(db.prepare(`SELECT ${COLS_NO_EMBEDDING} FROM learnings ORDER BY created_at DESC LIMIT ?`).all(limit));
|
|
127
133
|
return rows.map(rowToLearningWithoutEmbedding);
|
|
128
134
|
},
|
|
129
135
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -136,14 +142,14 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
136
142
|
// FTS5 BM25 returns negative scores; lower (more negative) = better match
|
|
137
143
|
// Exclude embedding column — BM25 results never need it, and loading
|
|
138
144
|
// ~6KB Float32Array per row just to discard it wastes memory.
|
|
139
|
-
const rows = db.prepare(`
|
|
145
|
+
const rows = coerceDbResult(db.prepare(`
|
|
140
146
|
SELECT ${COLS_NO_EMBEDDING_QUALIFIED}, bm25(learnings_fts) as bm25_score
|
|
141
147
|
FROM learnings l
|
|
142
148
|
JOIN learnings_fts ON l.id = learnings_fts.rowid
|
|
143
149
|
WHERE learnings_fts MATCH ?
|
|
144
150
|
ORDER BY bm25_score
|
|
145
151
|
LIMIT ?
|
|
146
|
-
`).all(ftsQuery, limit * 3);
|
|
152
|
+
`).all(ftsQuery, limit * 3));
|
|
147
153
|
if (rows.length === 0)
|
|
148
154
|
return [];
|
|
149
155
|
// Use rank-based scoring: results are already sorted by relevance
|
|
@@ -158,7 +164,7 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
158
164
|
}),
|
|
159
165
|
findWithEmbeddings: (limit) => Effect.try({
|
|
160
166
|
try: () => {
|
|
161
|
-
const rows = db.prepare(`SELECT * FROM learnings WHERE embedding IS NOT NULL ORDER BY created_at DESC LIMIT ?`).all(limit);
|
|
167
|
+
const rows = coerceDbResult(db.prepare(`SELECT * FROM learnings WHERE embedding IS NOT NULL ORDER BY created_at DESC LIMIT ?`).all(limit));
|
|
162
168
|
return rows.map(rowToLearning);
|
|
163
169
|
},
|
|
164
170
|
catch: (cause) => new DatabaseError({ cause })
|
|
@@ -204,28 +210,28 @@ export const LearningRepositoryLive = Layer.effect(LearningRepository, Effect.ge
|
|
|
204
210
|
}),
|
|
205
211
|
count: () => Effect.try({
|
|
206
212
|
try: () => {
|
|
207
|
-
const result = db.prepare("SELECT COUNT(*) as cnt FROM learnings").get();
|
|
213
|
+
const result = coerceDbResult(db.prepare("SELECT COUNT(*) as cnt FROM learnings").get());
|
|
208
214
|
return result.cnt;
|
|
209
215
|
},
|
|
210
216
|
catch: (cause) => new DatabaseError({ cause })
|
|
211
217
|
}),
|
|
212
218
|
countWithEmbeddings: () => Effect.try({
|
|
213
219
|
try: () => {
|
|
214
|
-
const result = db.prepare("SELECT COUNT(*) as cnt FROM learnings WHERE embedding IS NOT NULL").get();
|
|
220
|
+
const result = coerceDbResult(db.prepare("SELECT COUNT(*) as cnt FROM learnings WHERE embedding IS NOT NULL").get());
|
|
215
221
|
return result.cnt;
|
|
216
222
|
},
|
|
217
223
|
catch: (cause) => new DatabaseError({ cause })
|
|
218
224
|
}),
|
|
219
225
|
countWithoutEmbeddings: () => Effect.try({
|
|
220
226
|
try: () => {
|
|
221
|
-
const result = db.prepare("SELECT COUNT(*) as cnt FROM learnings WHERE embedding IS NULL").get();
|
|
227
|
+
const result = coerceDbResult(db.prepare("SELECT COUNT(*) as cnt FROM learnings WHERE embedding IS NULL").get());
|
|
222
228
|
return result.cnt;
|
|
223
229
|
},
|
|
224
230
|
catch: (cause) => new DatabaseError({ cause })
|
|
225
231
|
}),
|
|
226
232
|
getConfig: (key) => Effect.try({
|
|
227
233
|
try: () => {
|
|
228
|
-
const row = db.prepare("SELECT value FROM learnings_config WHERE key = ?").get(key);
|
|
234
|
+
const row = coerceDbResult(db.prepare("SELECT value FROM learnings_config WHERE key = ?").get(key));
|
|
229
235
|
return row?.value ?? null;
|
|
230
236
|
},
|
|
231
237
|
catch: (cause) => new DatabaseError({ cause })
|