@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.
Files changed (330) hide show
  1. package/README.md +480 -0
  2. package/dist/db.d.ts +28 -14
  3. package/dist/db.d.ts.map +1 -1
  4. package/dist/db.js +102 -14
  5. package/dist/db.js.map +1 -1
  6. package/dist/errors.d.ts +178 -34
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +119 -26
  9. package/dist/errors.js.map +1 -1
  10. package/dist/id.d.ts +10 -0
  11. package/dist/id.d.ts.map +1 -1
  12. package/dist/id.js +17 -1
  13. package/dist/id.js.map +1 -1
  14. package/dist/index.d.ts +15 -7
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +62 -8
  17. package/dist/index.js.map +1 -1
  18. package/dist/layer.d.ts +23 -14
  19. package/dist/layer.d.ts.map +1 -1
  20. package/dist/layer.js +75 -76
  21. package/dist/layer.js.map +1 -1
  22. package/dist/mappers/anchor.d.ts +15 -1
  23. package/dist/mappers/anchor.d.ts.map +1 -1
  24. package/dist/mappers/anchor.js +95 -28
  25. package/dist/mappers/anchor.js.map +1 -1
  26. package/dist/mappers/attempt.d.ts +3 -1
  27. package/dist/mappers/attempt.d.ts.map +1 -1
  28. package/dist/mappers/attempt.js +23 -9
  29. package/dist/mappers/attempt.js.map +1 -1
  30. package/dist/mappers/candidate.d.ts +3 -1
  31. package/dist/mappers/candidate.d.ts.map +1 -1
  32. package/dist/mappers/candidate.js +46 -16
  33. package/dist/mappers/candidate.js.map +1 -1
  34. package/dist/mappers/claim.d.ts +1 -1
  35. package/dist/mappers/claim.d.ts.map +1 -1
  36. package/dist/mappers/claim.js +11 -4
  37. package/dist/mappers/claim.js.map +1 -1
  38. package/dist/mappers/deduplication.d.ts +13 -1
  39. package/dist/mappers/deduplication.d.ts.map +1 -1
  40. package/dist/mappers/deduplication.js +22 -3
  41. package/dist/mappers/deduplication.js.map +1 -1
  42. package/dist/mappers/doc.d.ts +24 -0
  43. package/dist/mappers/doc.d.ts.map +1 -0
  44. package/dist/mappers/doc.js +161 -0
  45. package/dist/mappers/doc.js.map +1 -0
  46. package/dist/mappers/edge.d.ts +10 -1
  47. package/dist/mappers/edge.d.ts.map +1 -1
  48. package/dist/mappers/edge.js +74 -12
  49. package/dist/mappers/edge.js.map +1 -1
  50. package/dist/mappers/file-learning.d.ts.map +1 -1
  51. package/dist/mappers/file-learning.js +2 -1
  52. package/dist/mappers/file-learning.js.map +1 -1
  53. package/dist/mappers/index.d.ts +6 -7
  54. package/dist/mappers/index.d.ts.map +1 -1
  55. package/dist/mappers/index.js +10 -12
  56. package/dist/mappers/index.js.map +1 -1
  57. package/dist/mappers/learning.d.ts +9 -1
  58. package/dist/mappers/learning.d.ts.map +1 -1
  59. package/dist/mappers/learning.js +94 -14
  60. package/dist/mappers/learning.js.map +1 -1
  61. package/dist/mappers/orchestrator-state.d.ts +1 -1
  62. package/dist/mappers/orchestrator-state.d.ts.map +1 -1
  63. package/dist/mappers/orchestrator-state.js +31 -5
  64. package/dist/mappers/orchestrator-state.js.map +1 -1
  65. package/dist/mappers/parse-date.d.ts +11 -0
  66. package/dist/mappers/parse-date.d.ts.map +1 -0
  67. package/dist/mappers/parse-date.js +18 -0
  68. package/dist/mappers/parse-date.js.map +1 -0
  69. package/dist/mappers/run.d.ts +14 -4
  70. package/dist/mappers/run.d.ts.map +1 -1
  71. package/dist/mappers/run.js +49 -18
  72. package/dist/mappers/run.js.map +1 -1
  73. package/dist/mappers/task.d.ts +5 -1
  74. package/dist/mappers/task.d.ts.map +1 -1
  75. package/dist/mappers/task.js +66 -16
  76. package/dist/mappers/task.js.map +1 -1
  77. package/dist/mappers/tracked-project.d.ts +3 -1
  78. package/dist/mappers/tracked-project.d.ts.map +1 -1
  79. package/dist/mappers/tracked-project.js +23 -9
  80. package/dist/mappers/tracked-project.js.map +1 -1
  81. package/dist/mappers/worker.d.ts +1 -1
  82. package/dist/mappers/worker.d.ts.map +1 -1
  83. package/dist/mappers/worker.js +44 -6
  84. package/dist/mappers/worker.js.map +1 -1
  85. package/dist/repo/anchor-repo.d.ts +2 -2
  86. package/dist/repo/anchor-repo.d.ts.map +1 -1
  87. package/dist/repo/anchor-repo.js +46 -5
  88. package/dist/repo/anchor-repo.js.map +1 -1
  89. package/dist/repo/attempt-repo.d.ts +2 -2
  90. package/dist/repo/attempt-repo.d.ts.map +1 -1
  91. package/dist/repo/attempt-repo.js +16 -6
  92. package/dist/repo/attempt-repo.js.map +1 -1
  93. package/dist/repo/candidate-repo.d.ts.map +1 -1
  94. package/dist/repo/candidate-repo.js +22 -1
  95. package/dist/repo/candidate-repo.js.map +1 -1
  96. package/dist/repo/claim-repo.d.ts +46 -2
  97. package/dist/repo/claim-repo.d.ts.map +1 -1
  98. package/dist/repo/claim-repo.js +113 -6
  99. package/dist/repo/claim-repo.js.map +1 -1
  100. package/dist/repo/compaction-repo.d.ts +41 -0
  101. package/dist/repo/compaction-repo.d.ts.map +1 -0
  102. package/dist/repo/compaction-repo.js +84 -0
  103. package/dist/repo/compaction-repo.js.map +1 -0
  104. package/dist/repo/deduplication-repo.d.ts +9 -1
  105. package/dist/repo/deduplication-repo.d.ts.map +1 -1
  106. package/dist/repo/deduplication-repo.js +46 -9
  107. package/dist/repo/deduplication-repo.js.map +1 -1
  108. package/dist/repo/dep-repo.d.ts +27 -3
  109. package/dist/repo/dep-repo.d.ts.map +1 -1
  110. package/dist/repo/dep-repo.js +166 -39
  111. package/dist/repo/dep-repo.js.map +1 -1
  112. package/dist/repo/doc-repo.d.ts +59 -0
  113. package/dist/repo/doc-repo.d.ts.map +1 -0
  114. package/dist/repo/doc-repo.js +276 -0
  115. package/dist/repo/doc-repo.js.map +1 -0
  116. package/dist/repo/edge-repo.d.ts +1 -1
  117. package/dist/repo/edge-repo.d.ts.map +1 -1
  118. package/dist/repo/edge-repo.js +65 -34
  119. package/dist/repo/edge-repo.js.map +1 -1
  120. package/dist/repo/file-learning-repo.d.ts +3 -3
  121. package/dist/repo/file-learning-repo.d.ts.map +1 -1
  122. package/dist/repo/file-learning-repo.js +19 -8
  123. package/dist/repo/file-learning-repo.js.map +1 -1
  124. package/dist/repo/index.d.ts +4 -6
  125. package/dist/repo/index.d.ts.map +1 -1
  126. package/dist/repo/index.js +3 -5
  127. package/dist/repo/index.js.map +1 -1
  128. package/dist/repo/learning-repo.d.ts +10 -3
  129. package/dist/repo/learning-repo.d.ts.map +1 -1
  130. package/dist/repo/learning-repo.js +68 -11
  131. package/dist/repo/learning-repo.js.map +1 -1
  132. package/dist/repo/orchestrator-state-repo.d.ts.map +1 -1
  133. package/dist/repo/orchestrator-state-repo.js +8 -1
  134. package/dist/repo/orchestrator-state-repo.js.map +1 -1
  135. package/dist/repo/run-repo.d.ts +3 -3
  136. package/dist/repo/run-repo.d.ts.map +1 -1
  137. package/dist/repo/run-repo.js +40 -19
  138. package/dist/repo/run-repo.js.map +1 -1
  139. package/dist/repo/task-repo.d.ts +14 -3
  140. package/dist/repo/task-repo.d.ts.map +1 -1
  141. package/dist/repo/task-repo.js +194 -20
  142. package/dist/repo/task-repo.js.map +1 -1
  143. package/dist/repo/tracked-project-repo.d.ts.map +1 -1
  144. package/dist/repo/tracked-project-repo.js +15 -1
  145. package/dist/repo/tracked-project-repo.js.map +1 -1
  146. package/dist/repo/worker-repo.d.ts +3 -2
  147. package/dist/repo/worker-repo.d.ts.map +1 -1
  148. package/dist/repo/worker-repo.js +54 -8
  149. package/dist/repo/worker-repo.js.map +1 -1
  150. package/dist/schemas/sync.js +2 -2
  151. package/dist/schemas/sync.js.map +1 -1
  152. package/dist/schemas/worker.d.ts +1 -0
  153. package/dist/schemas/worker.d.ts.map +1 -1
  154. package/dist/schemas/worker.js +1 -0
  155. package/dist/schemas/worker.js.map +1 -1
  156. package/dist/services/agent-service.d.ts +57 -0
  157. package/dist/services/agent-service.d.ts.map +1 -0
  158. package/dist/services/agent-service.js +81 -0
  159. package/dist/services/agent-service.js.map +1 -0
  160. package/dist/services/anchor-service.js +1 -1
  161. package/dist/services/anchor-service.js.map +1 -1
  162. package/dist/services/anchor-verification.d.ts +8 -0
  163. package/dist/services/anchor-verification.d.ts.map +1 -1
  164. package/dist/services/anchor-verification.js +237 -37
  165. package/dist/services/anchor-verification.js.map +1 -1
  166. package/dist/services/ast-grep-service.d.ts.map +1 -1
  167. package/dist/services/ast-grep-service.js +93 -22
  168. package/dist/services/ast-grep-service.js.map +1 -1
  169. package/dist/services/attempt-service.d.ts.map +1 -1
  170. package/dist/services/attempt-service.js +1 -4
  171. package/dist/services/attempt-service.js.map +1 -1
  172. package/dist/services/auto-sync-service.d.ts +1 -1
  173. package/dist/services/auto-sync-service.d.ts.map +1 -1
  174. package/dist/services/auto-sync-service.js +18 -10
  175. package/dist/services/auto-sync-service.js.map +1 -1
  176. package/dist/services/claim-service.d.ts +8 -2
  177. package/dist/services/claim-service.d.ts.map +1 -1
  178. package/dist/services/claim-service.js +37 -23
  179. package/dist/services/claim-service.js.map +1 -1
  180. package/dist/services/compaction-service.d.ts +105 -0
  181. package/dist/services/compaction-service.d.ts.map +1 -0
  182. package/dist/services/compaction-service.js +369 -0
  183. package/dist/services/compaction-service.js.map +1 -0
  184. package/dist/services/cycle-scan-service.d.ts +32 -0
  185. package/dist/services/cycle-scan-service.d.ts.map +1 -0
  186. package/dist/services/cycle-scan-service.js +542 -0
  187. package/dist/services/cycle-scan-service.js.map +1 -0
  188. package/dist/services/daemon-service.d.ts +40 -2
  189. package/dist/services/daemon-service.d.ts.map +1 -1
  190. package/dist/services/daemon-service.js +199 -52
  191. package/dist/services/daemon-service.js.map +1 -1
  192. package/dist/services/deduplication-service.d.ts +8 -4
  193. package/dist/services/deduplication-service.d.ts.map +1 -1
  194. package/dist/services/deduplication-service.js +79 -25
  195. package/dist/services/deduplication-service.js.map +1 -1
  196. package/dist/services/dep-service.d.ts +2 -2
  197. package/dist/services/dep-service.d.ts.map +1 -1
  198. package/dist/services/dep-service.js +9 -5
  199. package/dist/services/dep-service.js.map +1 -1
  200. package/dist/services/diversifier-service.d.ts +2 -1
  201. package/dist/services/diversifier-service.d.ts.map +1 -1
  202. package/dist/services/diversifier-service.js +37 -43
  203. package/dist/services/diversifier-service.js.map +1 -1
  204. package/dist/services/doc-service.d.ts +49 -0
  205. package/dist/services/doc-service.d.ts.map +1 -0
  206. package/dist/services/doc-service.js +605 -0
  207. package/dist/services/doc-service.js.map +1 -0
  208. package/dist/services/edge-service.js +2 -2
  209. package/dist/services/edge-service.js.map +1 -1
  210. package/dist/services/embedding-service.d.ts +66 -2
  211. package/dist/services/embedding-service.d.ts.map +1 -1
  212. package/dist/services/embedding-service.js +138 -24
  213. package/dist/services/embedding-service.js.map +1 -1
  214. package/dist/services/file-learning-service.d.ts.map +1 -1
  215. package/dist/services/file-learning-service.js +8 -7
  216. package/dist/services/file-learning-service.js.map +1 -1
  217. package/dist/services/file-watcher-service.d.ts.map +1 -1
  218. package/dist/services/file-watcher-service.js +58 -11
  219. package/dist/services/file-watcher-service.js.map +1 -1
  220. package/dist/services/graph-expansion.d.ts +3 -0
  221. package/dist/services/graph-expansion.d.ts.map +1 -1
  222. package/dist/services/graph-expansion.js +28 -7
  223. package/dist/services/graph-expansion.js.map +1 -1
  224. package/dist/services/hierarchy-service.d.ts +1 -1
  225. package/dist/services/hierarchy-service.d.ts.map +1 -1
  226. package/dist/services/hierarchy-service.js +50 -32
  227. package/dist/services/hierarchy-service.js.map +1 -1
  228. package/dist/services/index.d.ts +13 -15
  229. package/dist/services/index.d.ts.map +1 -1
  230. package/dist/services/index.js +13 -15
  231. package/dist/services/index.js.map +1 -1
  232. package/dist/services/learning-service.d.ts +4 -4
  233. package/dist/services/learning-service.d.ts.map +1 -1
  234. package/dist/services/learning-service.js +75 -42
  235. package/dist/services/learning-service.js.map +1 -1
  236. package/dist/services/llm-service.d.ts +62 -0
  237. package/dist/services/llm-service.d.ts.map +1 -0
  238. package/dist/services/llm-service.js +172 -0
  239. package/dist/services/llm-service.js.map +1 -0
  240. package/dist/services/migration-service.d.ts +1 -1
  241. package/dist/services/migration-service.d.ts.map +1 -1
  242. package/dist/services/migration-service.js +18 -7
  243. package/dist/services/migration-service.js.map +1 -1
  244. package/dist/services/orchestrator-service.d.ts +4 -3
  245. package/dist/services/orchestrator-service.d.ts.map +1 -1
  246. package/dist/services/orchestrator-service.js +67 -29
  247. package/dist/services/orchestrator-service.js.map +1 -1
  248. package/dist/services/promotion-service.d.ts +1 -1
  249. package/dist/services/promotion-service.js +1 -1
  250. package/dist/services/promotion-service.js.map +1 -1
  251. package/dist/services/query-expansion-service.d.ts +30 -9
  252. package/dist/services/query-expansion-service.d.ts.map +1 -1
  253. package/dist/services/query-expansion-service.js +54 -63
  254. package/dist/services/query-expansion-service.js.map +1 -1
  255. package/dist/services/ready-service.d.ts +21 -1
  256. package/dist/services/ready-service.d.ts.map +1 -1
  257. package/dist/services/ready-service.js +44 -21
  258. package/dist/services/ready-service.js.map +1 -1
  259. package/dist/services/retriever-service.d.ts +10 -10
  260. package/dist/services/retriever-service.d.ts.map +1 -1
  261. package/dist/services/retriever-service.js +53 -161
  262. package/dist/services/retriever-service.js.map +1 -1
  263. package/dist/services/swarm-verification.d.ts +2 -2
  264. package/dist/services/swarm-verification.d.ts.map +1 -1
  265. package/dist/services/swarm-verification.js +12 -6
  266. package/dist/services/swarm-verification.js.map +1 -1
  267. package/dist/services/sync-service.d.ts +17 -4
  268. package/dist/services/sync-service.d.ts.map +1 -1
  269. package/dist/services/sync-service.js +378 -114
  270. package/dist/services/sync-service.js.map +1 -1
  271. package/dist/services/task-service.d.ts +6 -4
  272. package/dist/services/task-service.d.ts.map +1 -1
  273. package/dist/services/task-service.js +162 -33
  274. package/dist/services/task-service.js.map +1 -1
  275. package/dist/services/tracing-service.d.ts +55 -0
  276. package/dist/services/tracing-service.d.ts.map +1 -0
  277. package/dist/services/tracing-service.js +99 -0
  278. package/dist/services/tracing-service.js.map +1 -0
  279. package/dist/services/transcript-adapter.d.ts +99 -0
  280. package/dist/services/transcript-adapter.d.ts.map +1 -0
  281. package/dist/services/transcript-adapter.js +283 -0
  282. package/dist/services/transcript-adapter.js.map +1 -0
  283. package/dist/services/validation-service.d.ts +85 -0
  284. package/dist/services/validation-service.d.ts.map +1 -0
  285. package/dist/services/validation-service.js +289 -0
  286. package/dist/services/validation-service.js.map +1 -0
  287. package/dist/services/worker-process.d.ts +23 -4
  288. package/dist/services/worker-process.d.ts.map +1 -1
  289. package/dist/services/worker-process.js +159 -70
  290. package/dist/services/worker-process.js.map +1 -1
  291. package/dist/services/worker-service.d.ts.map +1 -1
  292. package/dist/services/worker-service.js +7 -12
  293. package/dist/services/worker-service.js.map +1 -1
  294. package/dist/sync/claude-task-writer.d.ts +49 -0
  295. package/dist/sync/claude-task-writer.d.ts.map +1 -0
  296. package/dist/sync/claude-task-writer.js +135 -0
  297. package/dist/sync/claude-task-writer.js.map +1 -0
  298. package/dist/utils/doc-hash.d.ts +10 -0
  299. package/dist/utils/doc-hash.d.ts.map +1 -0
  300. package/dist/utils/doc-hash.js +14 -0
  301. package/dist/utils/doc-hash.js.map +1 -0
  302. package/dist/utils/doc-renderer.d.ts +44 -0
  303. package/dist/utils/doc-renderer.d.ts.map +1 -0
  304. package/dist/utils/doc-renderer.js +202 -0
  305. package/dist/utils/doc-renderer.js.map +1 -0
  306. package/dist/utils/math.d.ts +5 -1
  307. package/dist/utils/math.d.ts.map +1 -1
  308. package/dist/utils/math.js +12 -4
  309. package/dist/utils/math.js.map +1 -1
  310. package/dist/utils/sql.d.ts +9 -0
  311. package/dist/utils/sql.d.ts.map +1 -0
  312. package/dist/utils/sql.js +9 -0
  313. package/dist/utils/sql.js.map +1 -0
  314. package/dist/utils/toml-config.d.ts +22 -0
  315. package/dist/utils/toml-config.d.ts.map +1 -0
  316. package/dist/utils/toml-config.js +75 -0
  317. package/dist/utils/toml-config.js.map +1 -0
  318. package/dist/worker/hooks.d.ts +102 -0
  319. package/dist/worker/hooks.d.ts.map +1 -0
  320. package/dist/worker/hooks.js +11 -0
  321. package/dist/worker/hooks.js.map +1 -0
  322. package/dist/worker/index.d.ts +9 -0
  323. package/dist/worker/index.d.ts.map +1 -0
  324. package/dist/worker/index.js +8 -0
  325. package/dist/worker/index.js.map +1 -0
  326. package/dist/worker/run-worker.d.ts +33 -0
  327. package/dist/worker/run-worker.d.ts.map +1 -0
  328. package/dist/worker/run-worker.js +265 -0
  329. package/dist/worker/run-worker.js.map +1 -0
  330. package/package.json +14 -12
@@ -4,6 +4,8 @@ import { TaskRepository } from "../repo/task-repo.js";
4
4
  import { EmbeddingService } from "./embedding-service.js";
5
5
  import { RetrieverService } from "./retriever-service.js";
6
6
  import { LearningNotFoundError, TaskNotFoundError, ValidationError } from "../errors.js";
7
+ /** Strips null bytes (\0) which cause C API truncation, JSON issues, and terminal corruption. */
8
+ const stripNullBytes = (s) => s.replace(/\0/g, "");
7
9
  export class LearningService extends Context.Tag("LearningService")() {
8
10
  }
9
11
  export const LearningServiceLive = Layer.effect(LearningService, Effect.gen(function* () {
@@ -13,13 +15,20 @@ export const LearningServiceLive = Layer.effect(LearningService, Effect.gen(func
13
15
  const retrieverService = yield* RetrieverService;
14
16
  return {
15
17
  create: (input) => Effect.gen(function* () {
16
- if (!input.content || input.content.trim().length === 0) {
18
+ const content = stripNullBytes(input.content);
19
+ if (!content || content.trim().length === 0) {
17
20
  return yield* Effect.fail(new ValidationError({ reason: "Content is required" }));
18
21
  }
19
- return yield* learningRepo.insert({
22
+ const learning = yield* learningRepo.insert({
20
23
  ...input,
21
- content: input.content.trim()
24
+ content: content.trim()
22
25
  });
26
+ // Best-effort: compute embedding inline so search works immediately
27
+ const embeddingResult = yield* Effect.either(embeddingService.embed(learning.content));
28
+ if (embeddingResult._tag === "Right") {
29
+ yield* learningRepo.updateEmbedding(learning.id, embeddingResult.right).pipe(Effect.catchTag("DatabaseError", () => Effect.void));
30
+ }
31
+ return learning;
23
32
  }),
24
33
  get: (id) => Effect.gen(function* () {
25
34
  const learning = yield* learningRepo.findById(id);
@@ -43,7 +52,7 @@ export const LearningServiceLive = Layer.effect(LearningService, Effect.gen(func
43
52
  minScore
44
53
  });
45
54
  }),
46
- getRecent: (limit = 10) => learningRepo.findRecent(limit),
55
+ getRecent: (limit = 10) => learningRepo.findRecentWithoutEmbedding(limit),
47
56
  recordUsage: (id) => Effect.gen(function* () {
48
57
  const learning = yield* learningRepo.findById(id);
49
58
  if (!learning) {
@@ -70,68 +79,92 @@ export const LearningServiceLive = Layer.effect(LearningService, Effect.gen(func
70
79
  }
71
80
  // Build search query from task content
72
81
  const searchQuery = `${task.title} ${task.description}`.trim();
73
- // Build retrieval options with optional graph expansion
82
+ // Build retrieval options
83
+ // maxTokens is semantically a result count limit (misnamed), cap to a reasonable max
84
+ const MAX_RESULTS = 50;
85
+ const requestedLimit = options?.maxTokens ?? 10;
74
86
  const retrievalOptions = {
75
- limit: 10,
76
- minScore: 0.05,
77
- graphExpansion: options?.useGraph
78
- ? {
79
- enabled: true,
80
- depth: options.expansionDepth ?? 2, // Default depth=2 per PRD-016
81
- edgeTypes: options.edgeTypes
82
- }
83
- : undefined
87
+ limit: Math.min(requestedLimit, MAX_RESULTS),
88
+ minScore: 0.05
84
89
  };
85
90
  // Delegate to RetrieverService for the actual search
86
91
  const learnings = yield* retrieverService.search(searchQuery, retrievalOptions);
87
- // Record usage for returned learnings (batch update to avoid N+1)
92
+ // Record usage for returned learnings (best-effort, don't fail context retrieval)
88
93
  if (learnings.length > 0) {
89
- yield* learningRepo.incrementUsageMany(learnings.map(l => l.id));
94
+ yield* learningRepo.incrementUsageMany(learnings.map(l => l.id)).pipe(Effect.catchTag("DatabaseError", (e) => Effect.logWarning(`Failed to increment usage for ${learnings.length} learnings: ${String(e.cause)}`)));
90
95
  }
91
- // Calculate graph expansion stats if enabled
92
- const graphExpansion = options?.useGraph
93
- ? {
94
- enabled: true,
95
- seedCount: learnings.filter(l => l.expansionHops === 0 || l.expansionHops === undefined).length,
96
- expandedCount: learnings.filter(l => l.expansionHops !== undefined && l.expansionHops > 0).length,
97
- maxDepthReached: Math.max(0, ...learnings.map(l => l.expansionHops ?? 0))
98
- }
99
- : undefined;
100
96
  return {
101
97
  taskId,
102
98
  taskTitle: task.title,
103
99
  learnings,
104
100
  searchQuery,
105
- searchDuration: Date.now() - startTime,
106
- graphExpansion
101
+ searchDuration: Date.now() - startTime
107
102
  };
108
103
  }),
109
104
  count: () => learningRepo.count(),
110
105
  embedAll: (forceAll = false) => Effect.gen(function* () {
111
- // Get learnings to embed
112
- const allLearnings = yield* learningRepo.findAll();
113
- const toEmbed = forceAll
114
- ? allLearnings
115
- : allLearnings.filter(l => !l.embedding);
106
+ const BATCH_SIZE = 100;
107
+ // Get total counts upfront for accurate reporting
108
+ const total = yield* learningRepo.count();
109
+ const withoutEmbeddings = yield* learningRepo.countWithoutEmbeddings();
116
110
  let processed = 0;
117
- let skipped = 0;
118
111
  let failed = 0;
119
- for (const learning of toEmbed) {
120
- const result = yield* Effect.either(embeddingService.embed(learning.content));
121
- if (result._tag === "Right") {
122
- yield* learningRepo.updateEmbedding(learning.id, result.right);
123
- processed++;
112
+ let lastId = undefined;
113
+ if (forceAll) {
114
+ // Process ALL learnings in batches (re-embed everything)
115
+ while (true) {
116
+ const batch = yield* learningRepo.findPaginated(BATCH_SIZE, lastId);
117
+ if (batch.length === 0)
118
+ break;
119
+ for (const learning of batch) {
120
+ const result = yield* Effect.either(embeddingService.embed(learning.content));
121
+ if (result._tag === "Right") {
122
+ yield* learningRepo.updateEmbedding(learning.id, result.right);
123
+ processed++;
124
+ }
125
+ else {
126
+ failed++;
127
+ }
128
+ }
129
+ lastId = batch[batch.length - 1].id;
130
+ if (batch.length < BATCH_SIZE)
131
+ break;
124
132
  }
125
- else {
126
- failed++;
133
+ }
134
+ else {
135
+ // Only process learnings without embeddings
136
+ while (true) {
137
+ // Always start from beginning since we're updating as we go
138
+ const batch = yield* learningRepo.findWithoutEmbeddingPaginated(BATCH_SIZE);
139
+ if (batch.length === 0)
140
+ break;
141
+ // Track per-batch progress to detect complete failures
142
+ let batchProcessed = 0;
143
+ for (const learning of batch) {
144
+ const result = yield* Effect.either(embeddingService.embed(learning.content));
145
+ if (result._tag === "Right") {
146
+ yield* learningRepo.updateEmbedding(learning.id, result.right);
147
+ processed++;
148
+ batchProcessed++;
149
+ }
150
+ else {
151
+ failed++;
152
+ }
153
+ }
154
+ // If we didn't successfully process any in this batch, abort to prevent infinite loop
155
+ // This handles cases like API rate limits or network errors affecting the entire batch
156
+ if (batchProcessed === 0 && batch.length > 0) {
157
+ yield* Effect.logError(`Batch embedding completely failed (0/${batch.length} succeeded), aborting to prevent infinite loop`);
158
+ break;
159
+ }
127
160
  }
128
161
  }
129
- skipped = allLearnings.length - toEmbed.length;
162
+ const skipped = forceAll ? 0 : (total - withoutEmbeddings);
130
163
  return {
131
164
  processed,
132
165
  skipped,
133
166
  failed,
134
- total: allLearnings.length
167
+ total
135
168
  };
136
169
  }),
137
170
  embeddingStatus: () => Effect.gen(function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"learning-service.js","sourceRoot":"","sources":["../../src/services/learning-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"learning-service.js","sourceRoot":"","sources":["../../src/services/learning-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { Context, Effect, Layer, Schema } from "effect";
2
+ import { LlmUnavailableError } from "../errors.js";
3
+ /**
4
+ * Options for LLM text completion.
5
+ */
6
+ export declare const LlmOptionsSchema: Schema.Struct<{
7
+ /** Model to use (default varies by backend) */
8
+ model: Schema.optional<typeof Schema.String>;
9
+ /** Maximum tokens in response */
10
+ maxTokens: Schema.optional<typeof Schema.Number>;
11
+ /** Temperature for generation (0-1) */
12
+ temperature: Schema.optional<typeof Schema.Number>;
13
+ }>;
14
+ export type LlmOptions = typeof LlmOptionsSchema.Type;
15
+ declare const LlmService_base: Context.TagClass<LlmService, "LlmService", {
16
+ /** Send a prompt and get a text completion */
17
+ readonly complete: (prompt: string, options?: LlmOptions) => Effect.Effect<string, LlmUnavailableError>;
18
+ /** Check if an LLM backend is available */
19
+ readonly isAvailable: () => Effect.Effect<boolean>;
20
+ /** Get the name of the active backend */
21
+ readonly backend: () => string;
22
+ }>;
23
+ /**
24
+ * LlmService provides centralized LLM text completion with swappable backends.
25
+ *
26
+ * Backends:
27
+ * - claude-agent-sdk: Uses @anthropic-ai/claude-agent-sdk query() (primary)
28
+ * - anthropic-sdk: Uses @anthropic-ai/sdk messages.create() (fallback)
29
+ * - noop: Returns empty string (tests, core commands)
30
+ *
31
+ * Design: See DD-022 for full specification.
32
+ */
33
+ export declare class LlmService extends LlmService_base {
34
+ }
35
+ /**
36
+ * Noop implementation — returns empty string for all completions.
37
+ * Used in test layers and core commands where no LLM is needed.
38
+ */
39
+ export declare const LlmServiceNoop: Layer.Layer<LlmService, never, never>;
40
+ /**
41
+ * Claude Agent SDK implementation.
42
+ * Uses query() from @anthropic-ai/claude-agent-sdk with maxTurns: 1 and no tools
43
+ * for single-turn text completion.
44
+ *
45
+ * Reads ANTHROPIC_API_KEY automatically from environment.
46
+ */
47
+ export declare const LlmServiceClaudeAgentSdk: Layer.Layer<LlmService, LlmUnavailableError, never>;
48
+ /**
49
+ * Anthropic SDK implementation.
50
+ * Uses client.messages.create() from @anthropic-ai/sdk.
51
+ * Extracted from the original QueryExpansionServiceLive.
52
+ *
53
+ * Requires ANTHROPIC_API_KEY environment variable.
54
+ */
55
+ export declare const LlmServiceAnthropicSdk: Layer.Layer<LlmService, LlmUnavailableError, never>;
56
+ /**
57
+ * Auto-detecting layer.
58
+ * Priority: TX_LLM_BACKEND env override > Claude Agent SDK > Anthropic SDK > Noop.
59
+ */
60
+ export declare const LlmServiceAuto: Layer.Layer<LlmService, LlmUnavailableError, never>;
61
+ export {};
62
+ //# sourceMappingURL=llm-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-service.d.ts","sourceRoot":"","sources":["../../src/services/llm-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAkB,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,+CAA+C;;IAE/C,iCAAiC;;IAEjC,uCAAuC;;EAEvC,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;;IAgDjD,8CAA8C;uBAC3B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACvG,2CAA2C;0BACrB,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;IAClD,yCAAyC;sBACvB,MAAM,MAAM;;AAlBlC;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,eAU7B;CAAG;AAEN;;;GAGG;AACH,eAAO,MAAM,cAAc,uCAIzB,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,qDAkDpC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,qDA+ClC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,qDAyC1B,CAAA"}
@@ -0,0 +1,172 @@
1
+ import { Context, Effect, Layer, Config, Option, Schema } from "effect";
2
+ import { LlmUnavailableError } from "../errors.js";
3
+ /**
4
+ * Options for LLM text completion.
5
+ */
6
+ export const LlmOptionsSchema = Schema.Struct({
7
+ /** Model to use (default varies by backend) */
8
+ model: Schema.optional(Schema.String),
9
+ /** Maximum tokens in response */
10
+ maxTokens: Schema.optional(Schema.Number),
11
+ /** Temperature for generation (0-1) */
12
+ temperature: Schema.optional(Schema.Number)
13
+ });
14
+ /**
15
+ * LlmService provides centralized LLM text completion with swappable backends.
16
+ *
17
+ * Backends:
18
+ * - claude-agent-sdk: Uses @anthropic-ai/claude-agent-sdk query() (primary)
19
+ * - anthropic-sdk: Uses @anthropic-ai/sdk messages.create() (fallback)
20
+ * - noop: Returns empty string (tests, core commands)
21
+ *
22
+ * Design: See DD-022 for full specification.
23
+ */
24
+ export class LlmService extends Context.Tag("LlmService")() {
25
+ }
26
+ /**
27
+ * Noop implementation — returns empty string for all completions.
28
+ * Used in test layers and core commands where no LLM is needed.
29
+ */
30
+ export const LlmServiceNoop = Layer.succeed(LlmService, {
31
+ complete: (_prompt, _options) => Effect.succeed(""),
32
+ isAvailable: () => Effect.succeed(false),
33
+ backend: () => "noop"
34
+ });
35
+ /**
36
+ * Claude Agent SDK implementation.
37
+ * Uses query() from @anthropic-ai/claude-agent-sdk with maxTurns: 1 and no tools
38
+ * for single-turn text completion.
39
+ *
40
+ * Reads ANTHROPIC_API_KEY automatically from environment.
41
+ */
42
+ export const LlmServiceClaudeAgentSdk = Layer.effect(LlmService, Effect.gen(function* () {
43
+ // Dynamic import of Claude Agent SDK (optional peer dependency)
44
+ const queryFn = yield* Effect.tryPromise({
45
+ try: async () => {
46
+ // @ts-ignore - @anthropic-ai/claude-agent-sdk is an optional peer dependency
47
+ const mod = await import("@anthropic-ai/claude-agent-sdk");
48
+ return mod.query;
49
+ },
50
+ catch: (e) => new LlmUnavailableError({
51
+ reason: `@anthropic-ai/claude-agent-sdk not installed: ${e instanceof Error ? e.message : String(e)}`
52
+ })
53
+ });
54
+ return {
55
+ complete: (prompt, options) => Effect.tryPromise({
56
+ try: async () => {
57
+ let result = "";
58
+ let errorMessage = null;
59
+ for await (const message of queryFn({
60
+ prompt,
61
+ options: {
62
+ maxTurns: 1,
63
+ allowedTools: [],
64
+ ...(options?.model ? { model: options.model } : {})
65
+ }
66
+ })) {
67
+ if (message.type === "result") {
68
+ if (message.subtype === "success" && message.result) {
69
+ result = message.result;
70
+ }
71
+ else if (message.subtype !== "success") {
72
+ errorMessage = message.errors?.join(", ") ?? message.subtype ?? "unknown error";
73
+ }
74
+ }
75
+ }
76
+ if (errorMessage) {
77
+ return Promise.reject(new Error(`Agent SDK error: ${errorMessage}`));
78
+ }
79
+ return result;
80
+ },
81
+ catch: (e) => new LlmUnavailableError({
82
+ reason: `Claude Agent SDK call failed: ${e instanceof Error ? e.message : String(e)}`
83
+ })
84
+ }),
85
+ isAvailable: () => Effect.succeed(true),
86
+ backend: () => "claude-agent-sdk"
87
+ };
88
+ }));
89
+ /**
90
+ * Anthropic SDK implementation.
91
+ * Uses client.messages.create() from @anthropic-ai/sdk.
92
+ * Extracted from the original QueryExpansionServiceLive.
93
+ *
94
+ * Requires ANTHROPIC_API_KEY environment variable.
95
+ */
96
+ export const LlmServiceAnthropicSdk = Layer.effect(LlmService, Effect.gen(function* () {
97
+ // Read API key from environment
98
+ const apiKey = yield* Config.string("ANTHROPIC_API_KEY").pipe(Effect.mapError(() => new LlmUnavailableError({
99
+ reason: "ANTHROPIC_API_KEY environment variable is not set"
100
+ })));
101
+ // Eagerly initialize the client during layer construction.
102
+ // This avoids a mutable closure variable that is not fiber-safe.
103
+ const Anthropic = yield* Effect.tryPromise({
104
+ try: async () => {
105
+ // @ts-ignore - @anthropic-ai/sdk is an optional peer dependency
106
+ const mod = await import("@anthropic-ai/sdk");
107
+ return mod.default;
108
+ },
109
+ catch: (e) => new LlmUnavailableError({
110
+ reason: `@anthropic-ai/sdk not installed: ${e instanceof Error ? e.message : String(e)}`
111
+ })
112
+ });
113
+ const anthropicClient = new Anthropic({ apiKey });
114
+ return {
115
+ complete: (prompt, options) => Effect.gen(function* () {
116
+ const anthropic = anthropicClient;
117
+ const response = yield* Effect.tryPromise({
118
+ try: () => anthropic.messages.create({
119
+ model: options?.model ?? "claude-haiku-4-5-20251001",
120
+ max_tokens: options?.maxTokens ?? 1024,
121
+ messages: [{ role: "user", content: prompt }]
122
+ }),
123
+ catch: (e) => new LlmUnavailableError({
124
+ reason: `Anthropic API call failed: ${e instanceof Error ? e.message : String(e)}`
125
+ })
126
+ });
127
+ const textContent = response.content.find(c => c.type === "text");
128
+ return textContent?.text ?? "";
129
+ }),
130
+ isAvailable: () => Effect.succeed(true),
131
+ backend: () => "anthropic-sdk"
132
+ };
133
+ }));
134
+ /**
135
+ * Auto-detecting layer.
136
+ * Priority: TX_LLM_BACKEND env override > Claude Agent SDK > Anthropic SDK > Noop.
137
+ */
138
+ export const LlmServiceAuto = Layer.unwrapEffect(Effect.gen(function* () {
139
+ // Check for explicit backend override
140
+ const backendOverride = yield* Config.string("TX_LLM_BACKEND").pipe(Effect.option);
141
+ if (Option.isSome(backendOverride)) {
142
+ const backend = backendOverride.value.trim().toLowerCase();
143
+ switch (backend) {
144
+ case "claude-agent-sdk":
145
+ return LlmServiceClaudeAgentSdk;
146
+ case "anthropic-sdk":
147
+ return LlmServiceAnthropicSdk;
148
+ case "noop":
149
+ return LlmServiceNoop;
150
+ }
151
+ }
152
+ // Auto-detect: try Claude Agent SDK first
153
+ const agentSdkAvailable = yield* Effect.tryPromise(
154
+ // @ts-ignore - @anthropic-ai/claude-agent-sdk is an optional peer dependency
155
+ () => import("@anthropic-ai/claude-agent-sdk").then(() => true)).pipe(Effect.orElseSucceed(() => false));
156
+ if (agentSdkAvailable) {
157
+ return LlmServiceClaudeAgentSdk;
158
+ }
159
+ // Try Anthropic SDK (needs API key + package)
160
+ const apiKey = yield* Config.string("ANTHROPIC_API_KEY").pipe(Effect.option);
161
+ if (Option.isSome(apiKey) && apiKey.value.trim().length > 0) {
162
+ const anthropicAvailable = yield* Effect.tryPromise(
163
+ // @ts-ignore - @anthropic-ai/sdk is an optional peer dependency
164
+ () => import("@anthropic-ai/sdk").then(() => true)).pipe(Effect.orElseSucceed(() => false));
165
+ if (anthropicAvailable) {
166
+ return LlmServiceAnthropicSdk;
167
+ }
168
+ }
169
+ // Fallback to noop
170
+ return LlmServiceNoop;
171
+ }));
172
+ //# sourceMappingURL=llm-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-service.js","sourceRoot":"","sources":["../../src/services/llm-service.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ export interface MigrationStatus {
28
28
  }
29
29
  /**
30
30
  * All migrations loaded from the migrations/ directory.
31
- * Sorted by version number.
31
+ * Sorted by version number. Uses top-level await for non-blocking I/O.
32
32
  */
33
33
  export declare const MIGRATIONS: readonly Migration[];
34
34
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"migration-service.d.ts","sourceRoot":"","sources":["../../src/services/migration-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAI/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACvD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,SAAS,EAAE,CAAA;CACjD;AAkED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EAA4B,CAAA;AAEvE;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,MAGnC,CAAA;;IASG;;;OAGG;wBACiB,MAAM,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC;IAEvE;;;;OAIG;kBACW,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAExD;;OAEG;gCACyB,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAEtE;;OAEG;mCAC4B,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,gBAAgB,EAAE,EAAE,aAAa,CAAC;;AA5BlG;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBA0BnC;CAAG;AAEN,eAAO,MAAM,oBAAoB,oDAyEhC,CAAA"}
1
+ {"version":3,"file":"migration-service.d.ts","sourceRoot":"","sources":["../../src/services/migration-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAI/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACvD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,SAAS,EAAE,CAAA;CACjD;AAmED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EAAkC,CAAA;AAE7E;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,MAGnC,CAAA;;IASG;;;OAGG;wBACiB,MAAM,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC;IAEvE;;;;OAIG;kBACW,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAExD;;OAEG;gCACyB,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAEtE;;OAEG;mCAC4B,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,gBAAgB,EAAE,EAAE,aAAa,CAAC;;AA5BlG;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBA0BnC;CAAG;AAEN,eAAO,MAAM,oBAAoB,oDAkFhC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Context, Effect, Layer } from "effect";
2
- import { readdirSync, readFileSync } from "node:fs";
2
+ import { readdir, readFile } from "node:fs/promises";
3
3
  import { dirname, join, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { SqliteClient } from "../db.js";
@@ -33,12 +33,13 @@ const parseMigrationFilename = (filename) => {
33
33
  /**
34
34
  * Load all migrations from the migrations/ directory.
35
35
  * Migrations are sorted by version number.
36
+ * Uses async fs operations to avoid blocking the event loop.
36
37
  */
37
- const loadMigrationsFromDir = () => {
38
+ const loadMigrationsFromDir = async () => {
38
39
  const migrationsDir = getMigrationsDir();
39
40
  let files;
40
41
  try {
41
- files = readdirSync(migrationsDir);
42
+ files = await readdir(migrationsDir);
42
43
  }
43
44
  catch {
44
45
  // Migrations directory doesn't exist - return empty array
@@ -51,7 +52,7 @@ const loadMigrationsFromDir = () => {
51
52
  const parsed = parseMigrationFilename(filename);
52
53
  if (!parsed)
53
54
  continue;
54
- const sql = readFileSync(join(migrationsDir, filename), "utf-8");
55
+ const sql = await readFile(join(migrationsDir, filename), "utf-8");
55
56
  migrations.push({
56
57
  version: parsed.version,
57
58
  description: parsed.description,
@@ -64,9 +65,9 @@ const loadMigrationsFromDir = () => {
64
65
  };
65
66
  /**
66
67
  * All migrations loaded from the migrations/ directory.
67
- * Sorted by version number.
68
+ * Sorted by version number. Uses top-level await for non-blocking I/O.
68
69
  */
69
- export const MIGRATIONS = loadMigrationsFromDir();
70
+ export const MIGRATIONS = await loadMigrationsFromDir();
70
71
  /**
71
72
  * Get the latest migration version.
72
73
  */
@@ -133,7 +134,17 @@ export const MigrationServiceLive = Layer.effect(MigrationService, Effect.gen(fu
133
134
  const pendingMigrations = MIGRATIONS.filter(m => m.version > currentVersion);
134
135
  for (const migration of pendingMigrations) {
135
136
  yield* Effect.try({
136
- try: () => db.exec(migration.sql),
137
+ try: () => {
138
+ db.exec("BEGIN IMMEDIATE");
139
+ try {
140
+ db.exec(migration.sql);
141
+ db.exec("COMMIT");
142
+ }
143
+ catch (e) {
144
+ db.exec("ROLLBACK");
145
+ throw e;
146
+ }
147
+ },
137
148
  catch: (cause) => new DatabaseError({ cause })
138
149
  });
139
150
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migration-service.js","sourceRoot":"","sources":["../../src/services/migration-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration-service.js","sourceRoot":"","sources":["../../src/services/migration-service.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,13 @@
5
5
  * Uses Effect-TS patterns per DD-002.
6
6
  */
7
7
  import { Context, Effect, Layer } from "effect";
8
+ import { SqliteClient } from "../db.js";
8
9
  import { OrchestratorStateRepository } from "../repo/orchestrator-state-repo.js";
9
10
  import { TaskRepository } from "../repo/task-repo.js";
10
11
  import { ClaimRepository } from "../repo/claim-repo.js";
11
12
  import { WorkerService } from "./worker-service.js";
12
13
  import { ClaimService } from "./claim-service.js";
13
- import { DatabaseError, OrchestratorError } from "../errors.js";
14
+ import { DatabaseError, OrchestratorError, TaskNotFoundError } from "../errors.js";
14
15
  import type { OrchestratorState, ReconciliationResult } from "../schemas/worker.js";
15
16
  /**
16
17
  * Configuration options for the orchestrator.
@@ -43,10 +44,10 @@ declare const OrchestratorService_base: Context.TagClass<OrchestratorService, "O
43
44
  * Detects dead workers, expires claims, recovers orphaned tasks,
44
45
  * and fixes state inconsistencies.
45
46
  */
46
- readonly reconcile: () => Effect.Effect<ReconciliationResult, DatabaseError>;
47
+ readonly reconcile: () => Effect.Effect<ReconciliationResult, DatabaseError | TaskNotFoundError>;
47
48
  }>;
48
49
  export declare class OrchestratorService extends OrchestratorService_base {
49
50
  }
50
- export declare const OrchestratorServiceLive: Layer.Layer<OrchestratorService, never, TaskRepository | ClaimRepository | OrchestratorStateRepository | WorkerService | ClaimService>;
51
+ export declare const OrchestratorServiceLive: Layer.Layer<OrchestratorService, never, TaskRepository | SqliteClient | ClaimService | ClaimRepository | OrchestratorStateRepository | WorkerService>;
51
52
  export {};
52
53
  //# sourceMappingURL=orchestrator-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-service.d.ts","sourceRoot":"","sources":["../../src/services/orchestrator-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAEnF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAC1C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAC1C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC;;IAiBG;;;OAGG;oBACa,CACd,MAAM,CAAC,EAAE,kBAAkB,KACxB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAE3D;;;OAGG;mBACY,CACb,QAAQ,EAAE,OAAO,KACd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAE3D;;OAEG;qBACc,MAAM,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;IAEtE;;;;OAIG;wBACiB,MAAM,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,aAAa,CAAC;;AA7BhF,qBAAa,mBAAoB,SAAQ,wBA+BtC;CAAG;AAEN,eAAO,MAAM,uBAAuB,wIAkPnC,CAAA"}
1
+ {"version":3,"file":"orchestrator-service.d.ts","sourceRoot":"","sources":["../../src/services/orchestrator-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAA;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAEnF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAC1C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAC1C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC;;IAiBG;;;OAGG;oBACa,CACd,MAAM,CAAC,EAAE,kBAAkB,KACxB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAE3D;;;OAGG;mBACY,CACb,QAAQ,EAAE,OAAO,KACd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAE3D;;OAEG;qBACc,MAAM,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;IAEtE;;;;OAIG;wBACiB,MAAM,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,aAAa,GAAG,iBAAiB,CAAC;;AA7BpG,qBAAa,mBAAoB,SAAQ,wBA+BtC;CAAG;AAEN,eAAO,MAAM,uBAAuB,uJA6SnC,CAAA"}