@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
@@ -1,13 +1,19 @@
1
1
  import { Context, Effect, Layer } from "effect";
2
2
  import { spawn } from "node:child_process";
3
- import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
3
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync, writeSync } from "node:fs";
4
4
  import { dirname, join } from "node:path";
5
5
  import { homedir } from "node:os";
6
6
  import { DaemonError } from "../errors.js";
7
7
  /**
8
- * Default path for the daemon PID file.
8
+ * Get the path for the daemon PID file.
9
+ * Resolved relative to cwd at call time so tests can chdir() to temp dirs.
9
10
  */
10
- export const PID_FILE_PATH = ".tx/daemon.pid";
11
+ export const getPidFilePath = () => join(process.cwd(), ".tx", "daemon.pid");
12
+ /**
13
+ * @deprecated Use getPidFilePath() instead. Kept for backwards compatibility.
14
+ * Note: This is resolved at module load time and won't reflect cwd changes.
15
+ */
16
+ export const PID_FILE_PATH = join(process.cwd(), ".tx", "daemon.pid");
11
17
  /**
12
18
  * Default install path for the launchd plist file.
13
19
  * Located in the user's LaunchAgents directory for per-user daemons.
@@ -162,7 +168,7 @@ export const isProcessRunning = (pid) => Effect.try({
162
168
  // Any other error is unexpected - convert to DaemonError
163
169
  return Effect.fail(new DaemonError({
164
170
  code: "PROCESS_CHECK_FAILED",
165
- message: `Failed to check if process ${pid} is running: ${error}`,
171
+ reason: `Failed to check if process ${pid} is running: ${error}`,
166
172
  pid
167
173
  }));
168
174
  }));
@@ -175,15 +181,16 @@ export const isProcessRunning = (pid) => Effect.try({
175
181
  */
176
182
  export const writePid = (pid) => Effect.try({
177
183
  try: () => {
178
- const dir = dirname(PID_FILE_PATH);
184
+ const pidPath = getPidFilePath();
185
+ const dir = dirname(pidPath);
179
186
  if (!existsSync(dir)) {
180
187
  mkdirSync(dir, { recursive: true });
181
188
  }
182
- writeFileSync(PID_FILE_PATH, String(pid), "utf-8");
189
+ writeFileSync(pidPath, String(pid), "utf-8");
183
190
  },
184
191
  catch: (error) => new DaemonError({
185
192
  code: "PID_WRITE_FAILED",
186
- message: `Failed to write PID file: ${error}`,
193
+ reason: `Failed to write PID file: ${error}`,
187
194
  pid
188
195
  })
189
196
  });
@@ -196,31 +203,34 @@ export const writePid = (pid) => Effect.try({
196
203
  * @returns Effect that resolves to the PID number, or null if no valid PID file exists
197
204
  */
198
205
  export const readPid = () => Effect.gen(function* () {
206
+ const pidPath = getPidFilePath();
199
207
  // Check if file exists
200
- if (!existsSync(PID_FILE_PATH)) {
208
+ if (!existsSync(pidPath)) {
201
209
  return null;
202
210
  }
203
211
  // Read the PID file
204
212
  const content = yield* Effect.try({
205
- try: () => readFileSync(PID_FILE_PATH, "utf-8").trim(),
213
+ try: () => readFileSync(pidPath, "utf-8").trim(),
206
214
  catch: (error) => new DaemonError({
207
215
  code: "PID_READ_FAILED",
208
- message: `Failed to read PID file: ${error}`,
216
+ reason: `Failed to read PID file: ${error}`,
209
217
  pid: null
210
218
  })
211
219
  });
212
220
  // Parse the PID
213
221
  const pid = parseInt(content, 10);
214
222
  if (isNaN(pid) || pid <= 0) {
215
- // Invalid PID content, remove the stale file
216
- yield* removePid();
223
+ // Invalid PID content use CAS removal so we don't delete a fresh PID
224
+ // written by a concurrent daemon start between our read and this removal.
225
+ yield* removePidIfContentMatches(content);
217
226
  return null;
218
227
  }
219
228
  // Check if the process is still running
220
229
  const running = yield* isProcessRunning(pid);
221
230
  if (!running) {
222
- // Process is not running, remove the stale PID file
223
- yield* removePid();
231
+ // Stale PID use CAS removal so we don't delete a fresh PID written
232
+ // by a concurrent daemon start between isProcessRunning() and here.
233
+ yield* removePidIfContentMatches(content);
224
234
  return null;
225
235
  }
226
236
  return pid;
@@ -233,34 +243,67 @@ export const readPid = () => Effect.gen(function* () {
233
243
  */
234
244
  export const removePid = () => Effect.try({
235
245
  try: () => {
236
- if (existsSync(PID_FILE_PATH)) {
237
- unlinkSync(PID_FILE_PATH);
246
+ const pidPath = getPidFilePath();
247
+ if (existsSync(pidPath)) {
248
+ unlinkSync(pidPath);
249
+ }
250
+ },
251
+ catch: (error) => new DaemonError({
252
+ code: "PID_REMOVE_FAILED",
253
+ reason: `Failed to remove PID file: ${error}`,
254
+ pid: null
255
+ })
256
+ });
257
+ /**
258
+ * Remove the PID file only if its current content matches the expected value.
259
+ *
260
+ * This is a compare-and-swap guard that prevents the TOCTOU race where
261
+ * readPid()'s stale cleanup could delete a freshly-written PID file created
262
+ * by a concurrent daemon start. Between isProcessRunning() returning false
263
+ * and removePid() executing, a new daemon may have written a fresh PID.
264
+ *
265
+ * If the file no longer exists or its content has changed, this is a no-op.
266
+ *
267
+ * @param expectedContent - The PID file content we originally read
268
+ * @returns Effect that resolves to void on success
269
+ */
270
+ export const removePidIfContentMatches = (expectedContent) => Effect.try({
271
+ try: () => {
272
+ const pidPath = getPidFilePath();
273
+ if (!existsSync(pidPath)) {
274
+ return;
275
+ }
276
+ const currentContent = readFileSync(pidPath, "utf-8").trim();
277
+ if (currentContent === expectedContent) {
278
+ unlinkSync(pidPath);
238
279
  }
280
+ // Content changed — a concurrent start wrote a fresh PID. Do not delete.
239
281
  },
240
282
  catch: (error) => new DaemonError({
241
283
  code: "PID_REMOVE_FAILED",
242
- message: `Failed to remove PID file: ${error}`,
284
+ reason: `Failed to remove PID file: ${error}`,
243
285
  pid: null
244
286
  })
245
287
  });
246
288
  /**
247
289
  * Path to store the daemon start timestamp for uptime calculation.
248
290
  */
249
- const STARTED_AT_PATH = ".tx/daemon.started";
291
+ const getStartedAtPath = () => join(process.cwd(), ".tx", "daemon.started");
250
292
  /**
251
293
  * Write the daemon start timestamp to a file.
252
294
  */
253
295
  const writeStartedAt = (date) => Effect.try({
254
296
  try: () => {
255
- const dir = dirname(STARTED_AT_PATH);
297
+ const startedPath = getStartedAtPath();
298
+ const dir = dirname(startedPath);
256
299
  if (!existsSync(dir)) {
257
300
  mkdirSync(dir, { recursive: true });
258
301
  }
259
- writeFileSync(STARTED_AT_PATH, date.toISOString(), "utf-8");
302
+ writeFileSync(startedPath, date.toISOString(), "utf-8");
260
303
  },
261
304
  catch: (error) => new DaemonError({
262
305
  code: "STARTED_AT_WRITE_FAILED",
263
- message: `Failed to write started_at file: ${error}`,
306
+ reason: `Failed to write started_at file: ${error}`,
264
307
  pid: null
265
308
  })
266
309
  });
@@ -269,16 +312,17 @@ const writeStartedAt = (date) => Effect.try({
269
312
  */
270
313
  const readStartedAt = () => Effect.try({
271
314
  try: () => {
272
- if (!existsSync(STARTED_AT_PATH)) {
315
+ const startedPath = getStartedAtPath();
316
+ if (!existsSync(startedPath)) {
273
317
  return null;
274
318
  }
275
- const content = readFileSync(STARTED_AT_PATH, "utf-8").trim();
319
+ const content = readFileSync(startedPath, "utf-8").trim();
276
320
  const date = new Date(content);
277
321
  return isNaN(date.getTime()) ? null : date;
278
322
  },
279
323
  catch: (error) => new DaemonError({
280
324
  code: "STARTED_AT_READ_FAILED",
281
- message: `Failed to read started_at file: ${error}`,
325
+ reason: `Failed to read started_at file: ${error}`,
282
326
  pid: null
283
327
  })
284
328
  });
@@ -287,13 +331,14 @@ const readStartedAt = () => Effect.try({
287
331
  */
288
332
  const removeStartedAt = () => Effect.try({
289
333
  try: () => {
290
- if (existsSync(STARTED_AT_PATH)) {
291
- unlinkSync(STARTED_AT_PATH);
334
+ const startedPath = getStartedAtPath();
335
+ if (existsSync(startedPath)) {
336
+ unlinkSync(startedPath);
292
337
  }
293
338
  },
294
339
  catch: (error) => new DaemonError({
295
340
  code: "STARTED_AT_REMOVE_FAILED",
296
- message: `Failed to remove started_at file: ${error}`,
341
+ reason: `Failed to remove started_at file: ${error}`,
297
342
  pid: null
298
343
  })
299
344
  });
@@ -315,7 +360,7 @@ const sendSignal = (pid, signal) => Effect.try({
315
360
  // Any other error is unexpected - convert to DaemonError
316
361
  return Effect.fail(new DaemonError({
317
362
  code: "SIGNAL_FAILED",
318
- message: `Failed to send signal ${signal} to process ${pid}: ${error}`,
363
+ reason: `Failed to send signal ${signal} to process ${pid}: ${error}`,
319
364
  pid
320
365
  }));
321
366
  }));
@@ -345,8 +390,15 @@ export const defaultDaemonConfig = {
345
390
  /**
346
391
  * Spawn a daemon process and wait for it to either start successfully or fail.
347
392
  * This properly handles the async ENOENT error that spawn emits.
393
+ *
394
+ * Uses a settlement flag to prevent race conditions between:
395
+ * - The synchronous PID check
396
+ * - The 'error' event handler
397
+ * - The setImmediate fallback
348
398
  */
349
399
  const spawnDaemonProcess = (config) => new Promise((resolve, reject) => {
400
+ // Track whether the promise has been settled to prevent double resolution/rejection
401
+ let settled = false;
350
402
  const spawnedProcess = spawn(config.command, [...config.args], {
351
403
  detached: true,
352
404
  stdio: "ignore",
@@ -355,52 +407,145 @@ const spawnDaemonProcess = (config) => new Promise((resolve, reject) => {
355
407
  });
356
408
  // Handle spawn errors (like ENOENT when command doesn't exist)
357
409
  spawnedProcess.on("error", (error) => {
410
+ if (settled)
411
+ return;
412
+ settled = true;
358
413
  if (error.code === "ENOENT") {
359
414
  reject(new DaemonError({
360
415
  code: "COMMAND_NOT_FOUND",
361
- message: `Command '${config.command}' not found. Make sure it is installed and in PATH.`,
416
+ reason: `Command '${config.command}' not found. Make sure it is installed and in PATH.`,
362
417
  pid: null
363
418
  }));
364
419
  }
365
420
  else {
366
421
  reject(new DaemonError({
367
422
  code: "SPAWN_FAILED",
368
- message: `Failed to spawn daemon process: ${error.message}`,
423
+ reason: `Failed to spawn daemon process: ${error.message}`,
369
424
  pid: null
370
425
  }));
371
426
  }
372
427
  });
373
428
  // Check if we got a PID (spawn succeeded synchronously)
374
429
  if (spawnedProcess.pid !== undefined) {
375
- // Unref to allow parent to exit independently
430
+ settled = true;
376
431
  spawnedProcess.unref();
377
432
  resolve({ child: spawnedProcess, pid: spawnedProcess.pid });
433
+ return;
434
+ }
435
+ // Wait a tick for either the error event to fire or the PID to become available
436
+ setImmediate(() => {
437
+ if (settled)
438
+ return;
439
+ settled = true;
440
+ if (spawnedProcess.pid !== undefined) {
441
+ spawnedProcess.unref();
442
+ resolve({ child: spawnedProcess, pid: spawnedProcess.pid });
443
+ }
444
+ else {
445
+ // No PID and no error - reject to prevent the promise from hanging forever
446
+ reject(new DaemonError({
447
+ code: "SPAWN_FAILED",
448
+ reason: `Failed to spawn daemon process: no PID was assigned`,
449
+ pid: null
450
+ }));
451
+ }
452
+ });
453
+ });
454
+ /**
455
+ * Try to atomically create the PID file using O_EXCL.
456
+ * Returns true if created successfully, false if the file already exists.
457
+ * This is the atomic primitive that prevents the TOCTOU race condition.
458
+ */
459
+ export const tryAtomicPidCreate = () => Effect.try({
460
+ try: () => {
461
+ // O_CREAT | O_EXCL | O_WRONLY — fails with EEXIST if file already exists
462
+ const fd = openSync(getPidFilePath(), "wx");
463
+ // Write the lock holder's PID so stale detection works.
464
+ // This is the `tx daemon start` process PID, not the daemon PID.
465
+ // After spawning, writePid() overwrites with the actual daemon PID.
466
+ writeSync(fd, String(process.pid));
467
+ closeSync(fd);
468
+ return true;
469
+ },
470
+ catch: (error) => error
471
+ }).pipe(Effect.catchAll((error) => {
472
+ if (error instanceof Error && "code" in error && error.code === "EEXIST") {
473
+ return Effect.succeed(false);
378
474
  }
379
- else {
380
- // Wait a tick for the error event to fire
381
- setImmediate(() => {
382
- if (spawnedProcess.pid !== undefined) {
383
- spawnedProcess.unref();
384
- resolve({ child: spawnedProcess, pid: spawnedProcess.pid });
475
+ return Effect.fail(new DaemonError({
476
+ code: "PID_WRITE_FAILED",
477
+ reason: `Failed to create PID lock file: ${error}`,
478
+ pid: null
479
+ }));
480
+ }));
481
+ /**
482
+ * Atomically acquire the daemon PID file lock.
483
+ *
484
+ * Uses O_EXCL flag to prevent the TOCTOU race condition where two concurrent
485
+ * `tx daemon start` commands both pass the existence check before either writes
486
+ * the PID file. With O_EXCL, the filesystem guarantees only one process can
487
+ * create the file — the loser gets EEXIST immediately.
488
+ *
489
+ * If the file already exists, checks whether the PID is stale (process dead).
490
+ * Stale files are removed and creation is retried once.
491
+ */
492
+ export const acquirePidLock = () => Effect.gen(function* () {
493
+ const pidPath = getPidFilePath();
494
+ const dir = dirname(pidPath);
495
+ if (!existsSync(dir)) {
496
+ mkdirSync(dir, { recursive: true });
497
+ }
498
+ // First attempt: atomic file creation
499
+ const created = yield* tryAtomicPidCreate();
500
+ if (created)
501
+ return;
502
+ // File already exists — check if the PID inside is stale
503
+ const existingContent = yield* Effect.try({
504
+ try: () => existsSync(pidPath) ? readFileSync(pidPath, "utf-8").trim() : null,
505
+ catch: (error) => new DaemonError({
506
+ code: "PID_READ_FAILED",
507
+ reason: `Failed to read existing PID file: ${error}`,
508
+ pid: null
509
+ })
510
+ });
511
+ if (existingContent !== null && existingContent !== "") {
512
+ const pid = parseInt(existingContent, 10);
513
+ if (!isNaN(pid) && pid > 0) {
514
+ const running = yield* isProcessRunning(pid);
515
+ if (running) {
516
+ return yield* Effect.fail(new DaemonError({
517
+ code: "ALREADY_RUNNING",
518
+ reason: `Daemon is already running with PID ${pid}`,
519
+ pid
520
+ }));
385
521
  }
386
- // If still no PID, the error handler will reject
387
- });
522
+ }
523
+ }
524
+ // PID file is stale — CAS removal to avoid deleting a fresh PID written
525
+ // by a concurrent start that raced us between isProcessRunning() and here.
526
+ if (existingContent !== null) {
527
+ yield* removePidIfContentMatches(existingContent);
528
+ }
529
+ const retryCreated = yield* tryAtomicPidCreate();
530
+ if (!retryCreated) {
531
+ // Another process won the race after our stale cleanup
532
+ return yield* Effect.fail(new DaemonError({
533
+ code: "ALREADY_RUNNING",
534
+ reason: "Another daemon start is in progress",
535
+ pid: null
536
+ }));
388
537
  }
389
538
  });
390
539
  /**
391
540
  * Internal start implementation for the daemon.
392
541
  * Extracted to allow reuse in restart without circular dependency.
542
+ *
543
+ * Uses atomic PID file locking (O_EXCL) to prevent the TOCTOU race condition
544
+ * where two concurrent starts could both pass the existence check.
393
545
  */
394
546
  const startDaemonImpl = (config) => Effect.gen(function* () {
395
- // Check if daemon is already running
396
- const existingPid = yield* readPid();
397
- if (existingPid !== null) {
398
- return yield* Effect.fail(new DaemonError({
399
- code: "ALREADY_RUNNING",
400
- message: `Daemon is already running with PID ${existingPid}`,
401
- pid: existingPid
402
- }));
403
- }
547
+ // Atomically acquire PID file lock (prevents TOCTOU race)
548
+ yield* acquirePidLock();
404
549
  // Spawn the daemon process with proper error handling
405
550
  const { pid } = yield* Effect.tryPromise({
406
551
  try: () => spawnDaemonProcess(config),
@@ -410,12 +555,14 @@ const startDaemonImpl = (config) => Effect.gen(function* () {
410
555
  }
411
556
  return new DaemonError({
412
557
  code: "SPAWN_FAILED",
413
- message: `Failed to spawn daemon process: ${error}`,
558
+ reason: `Failed to spawn daemon process: ${error}`,
414
559
  pid: null
415
560
  });
416
561
  }
417
- });
418
- // Write PID file
562
+ }).pipe(
563
+ // If spawn fails, clean up the lock file we acquired
564
+ Effect.tapError(() => removePid()));
565
+ // Update the lock file with the actual PID
419
566
  yield* writePid(pid);
420
567
  // Write started timestamp
421
568
  yield* writeStartedAt(new Date());
@@ -428,7 +575,7 @@ const startDaemonImpl = (config) => Effect.gen(function* () {
428
575
  yield* removeStartedAt();
429
576
  return yield* Effect.fail(new DaemonError({
430
577
  code: "PROCESS_DIED",
431
- message: "Daemon process exited immediately after starting",
578
+ reason: "Daemon process exited immediately after starting",
432
579
  pid
433
580
  }));
434
581
  }
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-service.js","sourceRoot":"","sources":["../../src/services/daemon-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon-service.js","sourceRoot":"","sources":["../../src/services/daemon-service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Context, Effect, Layer } from "effect";
2
2
  import { DeduplicationRepository } from "../repo/deduplication-repo.js";
3
- import { DatabaseError } from "../errors.js";
3
+ import { BatchProcessingError, DatabaseError } from "../errors.js";
4
4
  import type { FileProgress, LineProcessResult, FileProcessResult, DeduplicationOptions } from "@jamesaphoenix/tx-types";
5
5
  declare const DeduplicationService_base: Context.TagClass<DeduplicationService, "DeduplicationService", {
6
6
  /**
@@ -12,20 +12,24 @@ declare const DeduplicationService_base: Context.TagClass<DeduplicationService,
12
12
  /**
13
13
  * Process multiple JSONL lines with batch hash checking.
14
14
  * More efficient than calling processLine repeatedly.
15
+ * Returns BatchProcessingError with partial results if a batch fails.
15
16
  */
16
17
  readonly processLines: (lines: readonly {
17
18
  content: string;
18
19
  lineNumber: number;
19
- }[], filePath: string, options?: DeduplicationOptions) => Effect.Effect<FileProcessResult, DatabaseError>;
20
+ }[], filePath: string, options?: DeduplicationOptions) => Effect.Effect<FileProcessResult, DatabaseError | BatchProcessingError<FileProcessResult>>;
20
21
  /**
21
22
  * Check if a content hash has already been processed.
22
23
  */
23
24
  readonly isProcessed: (content: string) => Effect.Effect<boolean, DatabaseError>;
24
25
  /**
25
- * Check multiple content strings at once.
26
+ * Check multiple content strings at once with batch processing.
26
27
  * Returns the set of content strings that have been processed.
28
+ * Returns BatchProcessingError with partial results if a batch fails.
27
29
  */
28
- readonly filterProcessed: (contents: readonly string[]) => Effect.Effect<Set<string>, DatabaseError>;
30
+ readonly filterProcessed: (contents: readonly string[], options?: {
31
+ batchSize?: number;
32
+ }) => Effect.Effect<Set<string>, DatabaseError | BatchProcessingError<Set<string>>>;
29
33
  /**
30
34
  * Get processing progress for a file.
31
35
  * Returns null if file has never been processed.
@@ -1 +1 @@
1
- {"version":3,"file":"deduplication-service.d.ts","sourceRoot":"","sources":["../../src/services/deduplication-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,yBAAyB,CAAA;;IAgB5B;;;;OAIG;0BACmB,CACpB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;IAEpD;;;OAGG;2BACoB,CACrB,KAAK,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,EACzD,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;IAEpD;;OAEG;0BACmB,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhF;;;OAGG;8BACuB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAEpG;;;OAGG;0BACmB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,EAAE,aAAa,CAAC;IAE7F;;OAEG;6BACsB,CACvB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,KAClB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC;IAE/C;;;OAGG;wBACiB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,EAAE,aAAa,CAAC;IAEjG;;OAEG;uBACgB,MAAM,MAAM,CAAC,MAAM,CAAC;QACrC,WAAW,EAAE,MAAM,CAAA;QACnB,YAAY,EAAE,MAAM,CAAA;KACrB,EAAE,aAAa,CAAC;IAEjB;;;OAGG;0BACmB,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM;;AA3ErD;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,yBAwEvC;CAAG;AAEN,eAAO,MAAM,wBAAwB,mEAgKpC,CAAA"}
1
+ {"version":3,"file":"deduplication-service.d.ts","sourceRoot":"","sources":["../../src/services/deduplication-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAEvE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,yBAAyB,CAAA;;IAgB5B;;;;OAIG;0BACmB,CACpB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;IAEpD;;;;OAIG;2BACoB,CACrB,KAAK,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,EACzD,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAE9F;;OAEG;0BACmB,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhF;;;;OAIG;8BACuB,CACxB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAElF;;;OAGG;0BACmB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,EAAE,aAAa,CAAC;IAE7F;;OAEG;6BACsB,CACvB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,KAClB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC;IAE/C;;;OAGG;wBACiB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,EAAE,aAAa,CAAC;IAEjG;;OAEG;uBACgB,MAAM,MAAM,CAAC,MAAM,CAAC;QACrC,WAAW,EAAE,MAAM,CAAA;QACnB,YAAY,EAAE,MAAM,CAAA;KACrB,EAAE,aAAa,CAAC;IAEjB;;;OAGG;0BACmB,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM;;AAhFrD;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,yBA6EvC;CAAG;AAEN,eAAO,MAAM,wBAAwB,mEAkOpC,CAAA"}