@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,6 +1,8 @@
1
1
  /**
2
2
  * OrchestratorState mappers - convert database rows to domain objects
3
3
  */
4
+ import { InvalidStatusError } from "../errors.js";
5
+ import { parseDate } from "./parse-date.js";
4
6
  /**
5
7
  * Valid orchestrator statuses.
6
8
  */
@@ -11,24 +13,48 @@ export const ORCHESTRATOR_STATUSES = ["stopped", "starting", "running", "stoppin
11
13
  export const isValidOrchestratorStatus = (s) => {
12
14
  return ORCHESTRATOR_STATUSES.includes(s);
13
15
  };
16
+ /**
17
+ * Safely parse a JSON object string, returning empty object on failure.
18
+ */
19
+ const safeParseMetadata = (json) => {
20
+ try {
21
+ const parsed = JSON.parse(json || "{}");
22
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
23
+ const result = {};
24
+ for (const [key, value] of Object.entries(parsed)) {
25
+ result[key] = value;
26
+ }
27
+ return result;
28
+ }
29
+ return {};
30
+ }
31
+ catch {
32
+ return {};
33
+ }
34
+ };
14
35
  /**
15
36
  * Convert a database row to an OrchestratorState domain object.
16
- * Throws if status is invalid.
37
+ * Throws InvalidStatusError if status is invalid.
17
38
  */
18
39
  export const rowToOrchestratorState = (row) => {
19
40
  if (!isValidOrchestratorStatus(row.status)) {
20
- throw new Error(`Invalid orchestrator status: ${row.status}`);
41
+ throw new InvalidStatusError({
42
+ entity: "orchestrator",
43
+ status: row.status,
44
+ validStatuses: ORCHESTRATOR_STATUSES,
45
+ rowId: row.id
46
+ });
21
47
  }
22
48
  return {
23
49
  status: row.status,
24
50
  pid: row.pid,
25
- startedAt: row.started_at ? new Date(row.started_at) : null,
26
- lastReconcileAt: row.last_reconcile_at ? new Date(row.last_reconcile_at) : null,
51
+ startedAt: row.started_at ? parseDate(row.started_at, "started_at", row.id) : null,
52
+ lastReconcileAt: row.last_reconcile_at ? parseDate(row.last_reconcile_at, "last_reconcile_at", row.id) : null,
27
53
  workerPoolSize: row.worker_pool_size,
28
54
  reconcileIntervalSeconds: row.reconcile_interval_seconds,
29
55
  heartbeatIntervalSeconds: row.heartbeat_interval_seconds,
30
56
  leaseDurationMinutes: row.lease_duration_minutes,
31
- metadata: JSON.parse(row.metadata || "{}")
57
+ metadata: safeParseMetadata(row.metadata)
32
58
  };
33
59
  };
34
60
  //# sourceMappingURL=orchestrator-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-state.js","sourceRoot":"","sources":["../../src/mappers/orchestrator-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAA;AAE5F;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAS,EAA2B,EAAE;IAC9E,OAAQ,qBAA2C,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAyB,EAAqB,EAAE;IACrF,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;QAC3D,eAAe,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/E,cAAc,EAAE,GAAG,CAAC,gBAAgB;QACpC,wBAAwB,EAAE,GAAG,CAAC,0BAA0B;QACxD,wBAAwB,EAAE,GAAG,CAAC,0BAA0B;QACxD,oBAAoB,EAAE,GAAG,CAAC,sBAAsB;QAChD,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;KAC3C,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"orchestrator-state.js","sourceRoot":"","sources":["../../src/mappers/orchestrator-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAmB3C;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAA;AAE5F;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAS,EAA2B,EAAE;IAC9E,OAAQ,qBAA2C,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAA+B,EAA2B,EAAE;IACrF,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAA4B,EAAE,CAAA;YAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACrB,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAyB,EAAqB,EAAE;IACrF,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,kBAAkB,CAAC;YAC3B,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,qBAAqB;YACpC,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAClF,eAAe,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7G,cAAc,EAAE,GAAG,CAAC,gBAAgB;QACpC,wBAAwB,EAAE,GAAG,CAAC,0BAA0B;QACxD,wBAAwB,EAAE,GAAG,CAAC,0BAA0B;QACxD,oBAAoB,EAAE,GAAG,CAAC,sBAAsB;QAChD,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC1C,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Shared date parsing utility for all mapper functions.
3
+ * Validates that parsed Date objects are valid, preventing NaN cascades
4
+ * through score calculations and sorting.
5
+ */
6
+ /**
7
+ * Parse a date string from a database row and validate it.
8
+ * Throws InvalidDateError if the string produces an Invalid Date.
9
+ */
10
+ export declare const parseDate: (value: string, field: string, rowId?: string | number) => Date;
11
+ //# sourceMappingURL=parse-date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-date.d.ts","sourceRoot":"","sources":["../../src/mappers/parse-date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,GAAG,MAAM,KAAG,IAMjF,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Shared date parsing utility for all mapper functions.
3
+ * Validates that parsed Date objects are valid, preventing NaN cascades
4
+ * through score calculations and sorting.
5
+ */
6
+ import { InvalidDateError } from "../errors.js";
7
+ /**
8
+ * Parse a date string from a database row and validate it.
9
+ * Throws InvalidDateError if the string produces an Invalid Date.
10
+ */
11
+ export const parseDate = (value, field, rowId) => {
12
+ const date = new Date(value);
13
+ if (isNaN(date.getTime())) {
14
+ throw new InvalidDateError({ field, value, rowId });
15
+ }
16
+ return date;
17
+ };
18
+ //# sourceMappingURL=parse-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-date.js","sourceRoot":"","sources":["../../src/mappers/parse-date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,KAAuB,EAAQ,EAAE;IACvF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -1,21 +1,27 @@
1
1
  /**
2
2
  * Run mappers - convert database rows to domain objects
3
3
  */
4
- import type { Run, RunId, RunRow } from "@jamesaphoenix/tx-types";
5
- export { RUN_STATUSES } from "@jamesaphoenix/tx-types";
4
+ import type { Run, RunId, RunStatus, RunRow } from "@jamesaphoenix/tx-types";
5
+ import { RUN_STATUSES } from "@jamesaphoenix/tx-types";
6
+ export { RUN_STATUSES };
6
7
  /**
7
8
  * Generate a run ID from timestamp + random.
8
9
  */
9
10
  export declare const generateRunId: () => RunId;
11
+ /**
12
+ * Check if a string is a valid RunStatus.
13
+ */
14
+ export declare const isValidRunStatus: (s: string) => s is RunStatus;
10
15
  /**
11
16
  * Convert a database row to a Run domain object.
17
+ * Validates status at runtime.
12
18
  */
13
19
  export declare const rowToRun: (row: RunRow) => Run;
14
20
  /**
15
21
  * Serialize Run for JSON output.
16
22
  */
17
23
  export declare const serializeRun: (run: Run) => {
18
- id: `run-${string}`;
24
+ id: string & import("effect/Brand").Brand<"RunId">;
19
25
  taskId: string | null;
20
26
  agent: string;
21
27
  startedAt: string;
@@ -24,9 +30,13 @@ export declare const serializeRun: (run: Run) => {
24
30
  exitCode: number | null;
25
31
  pid: number | null;
26
32
  transcriptPath: string | null;
33
+ stderrPath: string | null;
34
+ stdoutPath: string | null;
27
35
  contextInjected: string | null;
28
36
  summary: string | null;
29
37
  errorMessage: string | null;
30
- metadata: Record<string, unknown>;
38
+ metadata: {
39
+ readonly [x: string]: unknown;
40
+ };
31
41
  };
32
42
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/mappers/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,GAAG,EACH,KAAK,EAEL,MAAM,EACP,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,KAMhC,CAAA;AAaD;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,GAcrC,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,GAAG;;;;;;;;;;;;;;CAcnC,CAAA"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/mappers/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,GAAG,EACH,KAAK,EACL,SAAS,EACT,MAAM,EACP,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAKtD,OAAO,EAAE,YAAY,EAAE,CAAA;AAOvB;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,KAMhC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,SAEjD,CAAA;AAeD;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,GA0BtC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,GAAG;;;;;;;;;;;;;;;;;;CAgBnC,CAAA"}
@@ -2,8 +2,16 @@
2
2
  * Run mappers - convert database rows to domain objects
3
3
  */
4
4
  import { createHash } from "crypto";
5
+ import { Schema } from "effect";
6
+ import { RUN_STATUSES } from "@jamesaphoenix/tx-types";
7
+ import { InvalidStatusError } from "../errors.js";
8
+ import { parseDate } from "./parse-date.js";
5
9
  // Re-export constants from @tx/types for convenience
6
- export { RUN_STATUSES } from "@jamesaphoenix/tx-types";
10
+ export { RUN_STATUSES };
11
+ /**
12
+ * Schema for metadata - a record of string keys to unknown values.
13
+ */
14
+ const MetadataSchema = Schema.Record({ key: Schema.String, value: Schema.Unknown });
7
15
  /**
8
16
  * Generate a run ID from timestamp + random.
9
17
  */
@@ -15,11 +23,19 @@ export const generateRunId = () => {
15
23
  return `run-${hash}`;
16
24
  };
17
25
  /**
18
- * Safely parse JSON with fallback to empty object.
26
+ * Check if a string is a valid RunStatus.
27
+ */
28
+ export const isValidRunStatus = (s) => {
29
+ return RUN_STATUSES.includes(s);
30
+ };
31
+ /**
32
+ * Safely parse and validate metadata JSON string.
33
+ * Returns empty object if parsing fails or validation fails.
19
34
  */
20
35
  const safeParseMetadata = (json) => {
21
36
  try {
22
- return JSON.parse(json || "{}");
37
+ const parsed = JSON.parse(json || "{}");
38
+ return Schema.decodeUnknownSync(MetadataSchema)(parsed);
23
39
  }
24
40
  catch {
25
41
  return {};
@@ -27,22 +43,35 @@ const safeParseMetadata = (json) => {
27
43
  };
28
44
  /**
29
45
  * Convert a database row to a Run domain object.
46
+ * Validates status at runtime.
30
47
  */
31
- export const rowToRun = (row) => ({
32
- id: row.id,
33
- taskId: row.task_id,
34
- agent: row.agent,
35
- startedAt: new Date(row.started_at),
36
- endedAt: row.ended_at ? new Date(row.ended_at) : null,
37
- status: row.status,
38
- exitCode: row.exit_code,
39
- pid: row.pid,
40
- transcriptPath: row.transcript_path,
41
- contextInjected: row.context_injected,
42
- summary: row.summary,
43
- errorMessage: row.error_message,
44
- metadata: safeParseMetadata(row.metadata)
45
- });
48
+ export const rowToRun = (row) => {
49
+ if (!isValidRunStatus(row.status)) {
50
+ throw new InvalidStatusError({
51
+ entity: "run",
52
+ status: row.status,
53
+ validStatuses: RUN_STATUSES,
54
+ rowId: row.id
55
+ });
56
+ }
57
+ return {
58
+ id: row.id,
59
+ taskId: row.task_id,
60
+ agent: row.agent,
61
+ startedAt: parseDate(row.started_at, "started_at", row.id),
62
+ endedAt: row.ended_at ? parseDate(row.ended_at, "ended_at", row.id) : null,
63
+ status: row.status,
64
+ exitCode: row.exit_code,
65
+ pid: row.pid,
66
+ transcriptPath: row.transcript_path,
67
+ stderrPath: row.stderr_path,
68
+ stdoutPath: row.stdout_path,
69
+ contextInjected: row.context_injected,
70
+ summary: row.summary,
71
+ errorMessage: row.error_message,
72
+ metadata: safeParseMetadata(row.metadata)
73
+ };
74
+ };
46
75
  /**
47
76
  * Serialize Run for JSON output.
48
77
  */
@@ -56,6 +85,8 @@ export const serializeRun = (run) => ({
56
85
  exitCode: run.exitCode,
57
86
  pid: run.pid,
58
87
  transcriptPath: run.transcriptPath,
88
+ stderrPath: run.stderrPath,
89
+ stdoutPath: run.stdoutPath,
59
90
  contextInjected: run.contextInjected,
60
91
  summary: run.summary,
61
92
  errorMessage: run.errorMessage,
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/mappers/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAQnC,qDAAqD;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAU,EAAE;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;SAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;SACxC,MAAM,CAAC,KAAK,CAAC;SACb,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClB,OAAO,OAAO,IAAI,EAAW,CAAA;AAC/B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAA+B,EAA2B,EAAE;IACrF,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAA4B,CAAA;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAO,EAAE,CAAC,CAAC;IAC7C,EAAE,EAAE,GAAG,CAAC,EAAW;IACnB,MAAM,EAAE,GAAG,CAAC,OAAO;IACnB,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACnC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;IACrD,MAAM,EAAE,GAAG,CAAC,MAAmB;IAC/B,QAAQ,EAAE,GAAG,CAAC,SAAS;IACvB,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,cAAc,EAAE,GAAG,CAAC,eAAe;IACnC,eAAe,EAAE,GAAG,CAAC,gBAAgB;IACrC,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,YAAY,EAAE,GAAG,CAAC,aAAa;IAC/B,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;CAC1C,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;IACzC,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;IACtC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI;IAC3C,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;IACtB,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,cAAc,EAAE,GAAG,CAAC,cAAc;IAClC,eAAe,EAAE,GAAG,CAAC,eAAe;IACpC,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,YAAY,EAAE,GAAG,CAAC,YAAY;IAC9B,QAAQ,EAAE,GAAG,CAAC,QAAQ;CACvB,CAAC,CAAA"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/mappers/run.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,18 @@
2
2
  * Task mappers - convert database rows to domain objects
3
3
  */
4
4
  import type { Task, TaskStatus, TaskRow, TaskDependency, DependencyRow } from "@jamesaphoenix/tx-types";
5
+ import { TASK_STATUSES } from "@jamesaphoenix/tx-types";
5
6
  export type { TaskRow, DependencyRow } from "@jamesaphoenix/tx-types";
6
- export { TASK_STATUSES, VALID_TRANSITIONS } from "@jamesaphoenix/tx-types";
7
+ export { TASK_STATUSES };
8
+ export { VALID_TRANSITIONS } from "@jamesaphoenix/tx-types";
7
9
  /**
8
10
  * Convert a database row to a Task domain object.
11
+ * Validates status and ID fields at runtime before constructing domain object.
9
12
  */
10
13
  export declare const rowToTask: (row: TaskRow) => Task;
11
14
  /**
12
15
  * Convert a dependency database row to a TaskDependency domain object.
16
+ * Validates TaskId fields at runtime.
13
17
  */
14
18
  export declare const rowToDependency: (row: DependencyRow) => TaskDependency;
15
19
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/mappers/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,IAAI,EAEJ,UAAU,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACd,MAAM,yBAAyB,CAAA;AAGhC,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE1E;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,KAAG,IAWvC,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,aAAa,KAAG,cAInD,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,UAM9C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,UAAU,EAAE,IAAI,UAAU,KAAG,OAYpE,CAAA"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/mappers/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,IAAI,EACJ,UAAU,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACd,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAgB,aAAa,EAAE,MAAM,yBAAyB,CAAA;AA0CrE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,KAAK,OAAO,KAAG,IAqBxC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,aAAa,KAAG,cAInD,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,UAM9C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,UAAU,EAAE,IAAI,UAAU,KAAG,OAYpE,CAAA"}
@@ -1,29 +1,79 @@
1
1
  /**
2
2
  * Task mappers - convert database rows to domain objects
3
3
  */
4
- export { TASK_STATUSES, VALID_TRANSITIONS } from "@jamesaphoenix/tx-types";
4
+ import { Schema } from "effect";
5
+ import { assertTaskId, TASK_STATUSES } from "@jamesaphoenix/tx-types";
6
+ import { InvalidStatusError } from "../errors.js";
7
+ import { parseDate } from "./parse-date.js";
8
+ /**
9
+ * Schema for task metadata - a record of string keys to unknown values.
10
+ * Used to validate JSON.parse output before casting to object.
11
+ */
12
+ const MetadataSchema = Schema.Record({ key: Schema.String, value: Schema.Unknown });
13
+ /**
14
+ * Safely parse and validate metadata JSON string.
15
+ * On corruption: logs a warning, preserves the raw value under `_corruptedRaw`
16
+ * with the error message under `_corruptionError` for downstream recovery.
17
+ * Only catches expected errors (SyntaxError, Schema ParseError); re-throws unexpected ones.
18
+ */
19
+ const parseMetadata = (metadataJson) => {
20
+ if (!metadataJson)
21
+ return {};
22
+ let parsed;
23
+ try {
24
+ parsed = JSON.parse(metadataJson);
25
+ }
26
+ catch (error) {
27
+ if (!(error instanceof SyntaxError))
28
+ throw error;
29
+ console.warn(`[tx] Corrupted metadata JSON (SyntaxError): ${error.message}. Raw value preserved for recovery.`);
30
+ return { _corruptedRaw: metadataJson, _corruptionError: `SyntaxError: ${error.message}` };
31
+ }
32
+ try {
33
+ return Schema.decodeUnknownSync(MetadataSchema)(parsed);
34
+ }
35
+ catch (error) {
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ console.warn(`[tx] Metadata schema validation failed: ${message}. Raw value preserved for recovery.`);
38
+ return { _corruptedRaw: metadataJson, _corruptionError: `SchemaError: ${message}` };
39
+ }
40
+ };
41
+ export { TASK_STATUSES };
42
+ export { VALID_TRANSITIONS } from "@jamesaphoenix/tx-types";
5
43
  /**
6
44
  * Convert a database row to a Task domain object.
45
+ * Validates status and ID fields at runtime before constructing domain object.
7
46
  */
8
- export const rowToTask = (row) => ({
9
- id: row.id,
10
- title: row.title,
11
- description: row.description,
12
- status: row.status,
13
- parentId: row.parent_id,
14
- score: row.score,
15
- createdAt: new Date(row.created_at),
16
- updatedAt: new Date(row.updated_at),
17
- completedAt: row.completed_at ? new Date(row.completed_at) : null,
18
- metadata: JSON.parse(row.metadata || "{}")
19
- });
47
+ export const rowToTask = (row) => {
48
+ if (!isValidStatus(row.status)) {
49
+ throw new InvalidStatusError({
50
+ entity: "task",
51
+ status: row.status,
52
+ validStatuses: TASK_STATUSES,
53
+ rowId: row.id
54
+ });
55
+ }
56
+ return {
57
+ id: assertTaskId(row.id),
58
+ title: row.title,
59
+ description: row.description,
60
+ status: row.status,
61
+ parentId: row.parent_id ? assertTaskId(row.parent_id) : null,
62
+ score: row.score,
63
+ createdAt: parseDate(row.created_at, "created_at", row.id),
64
+ updatedAt: parseDate(row.updated_at, "updated_at", row.id),
65
+ completedAt: row.completed_at ? parseDate(row.completed_at, "completed_at", row.id) : null,
66
+ metadata: parseMetadata(row.metadata)
67
+ };
68
+ };
20
69
  /**
21
70
  * Convert a dependency database row to a TaskDependency domain object.
71
+ * Validates TaskId fields at runtime.
22
72
  */
23
73
  export const rowToDependency = (row) => ({
24
- blockerId: row.blocker_id,
25
- blockedId: row.blocked_id,
26
- createdAt: new Date(row.created_at)
74
+ blockerId: assertTaskId(row.blocker_id),
75
+ blockedId: assertTaskId(row.blocked_id),
76
+ createdAt: parseDate(row.created_at, "created_at")
27
77
  });
28
78
  /**
29
79
  * Check if a string is a valid TaskStatus.
@@ -1 +1 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/mappers/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE1E;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAY,EAAQ,EAAE,CAAC,CAAC;IAChD,EAAE,EAAE,GAAG,CAAC,EAAY;IACpB,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,WAAW,EAAE,GAAG,CAAC,WAAW;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAoB;IAChC,QAAQ,EAAE,GAAG,CAAC,SAA0B;IACxC,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACnC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACnC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;IACjE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;CAC3C,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAkB,EAAkB,EAAE,CAAC,CAAC;IACtE,SAAS,EAAE,GAAG,CAAC,UAAoB;IACnC,SAAS,EAAE,GAAG,CAAC,UAAoB;IACnC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;CACpC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAS,EAAmB,EAAE;IAC1D,MAAM,QAAQ,GAAsB;QAClC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ;QACxC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM;KACrD,CAAA;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAgB,EAAE,EAAc,EAAW,EAAE;IAC7E,MAAM,WAAW,GAA8C;QAC7D,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;QAC3D,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;QAChD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;QAChD,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;QACrC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;QACnD,MAAM,EAAE,CAAC,QAAQ,EAAE,uBAAuB,EAAE,MAAM,CAAC;QACnD,qBAAqB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;QACnD,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAA;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAA;AACjD,CAAC,CAAA"}
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/mappers/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAQ/B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C;;;GAGG;AACH,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;AAEnF;;;;;GAKG;AACH,MAAM,aAAa,GAAG,CAAC,YAA2B,EAA2B,EAAE;IAC7E,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAA;IAE5B,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;YAAE,MAAM,KAAK,CAAA;QAChD,OAAO,CAAC,IAAI,CACV,+CAA+C,KAAK,CAAC,OAAO,qCAAqC,CAClG,CAAA;QACD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAA;IAC3F,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;IACzD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,OAAO,CAAC,IAAI,CACV,2CAA2C,OAAO,qCAAqC,CACxF,CAAA;QACD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,OAAO,EAAE,EAAE,CAAA;IACrF,CAAC;AACH,CAAC,CAAA;AAID,OAAO,EAAE,aAAa,EAAE,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAY,EAAQ,EAAE;IAC9C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,kBAAkB,CAAC;YAC3B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,aAAa;YAC5B,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QAC5D,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1D,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;QAC1D,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1F,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;KACtC,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAkB,EAAkB,EAAE,CAAC,CAAC;IACtE,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;IACvC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;IACvC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC;CACnD,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAS,EAAmB,EAAE;IAC1D,MAAM,QAAQ,GAAsB;QAClC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ;QACxC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM;KACrD,CAAA;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAgB,EAAE,EAAc,EAAW,EAAE;IAC7E,MAAM,WAAW,GAA8C;QAC7D,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;QAC3D,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;QAChD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;QAChD,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;QACrC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;QACnD,MAAM,EAAE,CAAC,QAAQ,EAAE,uBAAuB,EAAE,MAAM,CAAC;QACnD,qBAAqB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;QACnD,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAA;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAA;AACjD,CAAC,CAAA"}
@@ -2,14 +2,16 @@
2
2
  * TrackedProject mappers - convert database rows to domain objects
3
3
  */
4
4
  import type { TrackedProject, TrackedProjectRow, SourceType } from "@jamesaphoenix/tx-types";
5
+ import { SOURCE_TYPES } from "@jamesaphoenix/tx-types";
5
6
  export type { TrackedProjectRow } from "@jamesaphoenix/tx-types";
6
- export { SOURCE_TYPES } from "@jamesaphoenix/tx-types";
7
+ export { SOURCE_TYPES };
7
8
  /**
8
9
  * Check if a string is a valid SourceType for tracked projects.
9
10
  */
10
11
  export declare const isValidTrackedSourceType: (s: string) => s is SourceType;
11
12
  /**
12
13
  * Convert a database row to a TrackedProject domain object.
14
+ * Validates source_type at runtime.
13
15
  */
14
16
  export declare const rowToTrackedProject: (row: TrackedProjectRow) => TrackedProject;
15
17
  //# sourceMappingURL=tracked-project.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracked-project.d.ts","sourceRoot":"","sources":["../../src/mappers/tracked-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,UAAU,EACX,MAAM,yBAAyB,CAAA;AAGhC,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;GAEG;AACH,eAAO,MAAM,wBAAwB,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,UAGzD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,iBAAiB,KAAG,cAO3D,CAAA"}
1
+ {"version":3,"file":"tracked-project.d.ts","sourceRoot":"","sources":["../../src/mappers/tracked-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,UAAU,EACX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAKtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;GAEG;AACH,eAAO,MAAM,wBAAwB,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,UAGzD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,iBAAiB,KAAG,cAiB5D,CAAA"}
@@ -1,7 +1,10 @@
1
1
  /**
2
2
  * TrackedProject mappers - convert database rows to domain objects
3
3
  */
4
- export { SOURCE_TYPES } from "@jamesaphoenix/tx-types";
4
+ import { SOURCE_TYPES } from "@jamesaphoenix/tx-types";
5
+ import { InvalidStatusError } from "../errors.js";
6
+ import { parseDate } from "./parse-date.js";
7
+ export { SOURCE_TYPES };
5
8
  /**
6
9
  * Check if a string is a valid SourceType for tracked projects.
7
10
  */
@@ -11,13 +14,24 @@ export const isValidTrackedSourceType = (s) => {
11
14
  };
12
15
  /**
13
16
  * Convert a database row to a TrackedProject domain object.
17
+ * Validates source_type at runtime.
14
18
  */
15
- export const rowToTrackedProject = (row) => ({
16
- id: row.id,
17
- projectPath: row.project_path,
18
- projectId: row.project_id,
19
- sourceType: row.source_type,
20
- addedAt: new Date(row.added_at),
21
- enabled: row.enabled === 1
22
- });
19
+ export const rowToTrackedProject = (row) => {
20
+ if (!isValidTrackedSourceType(row.source_type)) {
21
+ throw new InvalidStatusError({
22
+ entity: "tracked_project",
23
+ status: row.source_type,
24
+ validStatuses: SOURCE_TYPES,
25
+ rowId: row.id
26
+ });
27
+ }
28
+ return {
29
+ id: row.id,
30
+ projectPath: row.project_path,
31
+ projectId: row.project_id,
32
+ sourceType: row.source_type,
33
+ addedAt: parseDate(row.added_at, "added_at", row.id),
34
+ enabled: row.enabled === 1
35
+ };
36
+ };
23
37
  //# sourceMappingURL=tracked-project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracked-project.js","sourceRoot":"","sources":["../../src/mappers/tracked-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAS,EAAmB,EAAE;IACrE,MAAM,WAAW,GAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAChF,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAsB,EAAkB,EAAE,CAAC,CAAC;IAC9E,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,WAAW,EAAE,GAAG,CAAC,YAAY;IAC7B,SAAS,EAAE,GAAG,CAAC,UAAU;IACzB,UAAU,EAAE,GAAG,CAAC,WAAyB;IACzC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,CAAC;CAC3B,CAAC,CAAA"}
1
+ {"version":3,"file":"tracked-project.js","sourceRoot":"","sources":["../../src/mappers/tracked-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAS,EAAmB,EAAE;IACrE,MAAM,WAAW,GAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAChF,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAsB,EAAkB,EAAE;IAC5E,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,kBAAkB,CAAC;YAC3B,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,GAAG,CAAC,WAAW;YACvB,aAAa,EAAE,YAAY;YAC3B,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,CAAC;KAC3B,CAAA;AACH,CAAC,CAAA"}
@@ -27,7 +27,7 @@ export declare const WORKER_STATUSES: readonly ["starting", "idle", "busy", "sto
27
27
  export declare const isValidWorkerStatus: (s: string) => s is WorkerStatus;
28
28
  /**
29
29
  * Convert a database row to a Worker domain object.
30
- * Throws if status is invalid.
30
+ * Throws InvalidStatusError if status is invalid.
31
31
  */
32
32
  export declare const rowToWorker: (row: WorkerRow) => Worker;
33
33
  //# sourceMappingURL=worker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/mappers/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEhE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,2DAA4D,CAAA;AAExF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,YAEpD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,SAAS,KAAG,MAgB5C,CAAA"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/mappers/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEhE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,2DAA4D,CAAA;AAExF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,KAAG,CAAC,IAAI,YAEpD,CAAA;AAiCD;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,SAAS,KAAG,MAqB5C,CAAA"}
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Worker mappers - convert database rows to domain objects
3
3
  */
4
+ import { InvalidStatusError } from "../errors.js";
5
+ import { parseDate } from "./parse-date.js";
4
6
  /**
5
7
  * Valid worker statuses.
6
8
  */
@@ -11,13 +13,49 @@ export const WORKER_STATUSES = ["starting", "idle", "busy", "stopping", "dead"];
11
13
  export const isValidWorkerStatus = (s) => {
12
14
  return WORKER_STATUSES.includes(s);
13
15
  };
16
+ /**
17
+ * Safely parse a JSON array of strings, returning empty array on failure.
18
+ */
19
+ const safeParseCapabilities = (json) => {
20
+ try {
21
+ const parsed = JSON.parse(json || "[]");
22
+ return Array.isArray(parsed) ? parsed.filter((v) => typeof v === "string") : [];
23
+ }
24
+ catch {
25
+ return [];
26
+ }
27
+ };
28
+ /**
29
+ * Safely parse a JSON object string, returning empty object on failure.
30
+ */
31
+ const safeParseMetadata = (json) => {
32
+ try {
33
+ const parsed = JSON.parse(json || "{}");
34
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
35
+ const result = {};
36
+ for (const [key, value] of Object.entries(parsed)) {
37
+ result[key] = value;
38
+ }
39
+ return result;
40
+ }
41
+ return {};
42
+ }
43
+ catch {
44
+ return {};
45
+ }
46
+ };
14
47
  /**
15
48
  * Convert a database row to a Worker domain object.
16
- * Throws if status is invalid.
49
+ * Throws InvalidStatusError if status is invalid.
17
50
  */
18
51
  export const rowToWorker = (row) => {
19
52
  if (!isValidWorkerStatus(row.status)) {
20
- throw new Error(`Invalid worker status: ${row.status}`);
53
+ throw new InvalidStatusError({
54
+ entity: "worker",
55
+ status: row.status,
56
+ validStatuses: WORKER_STATUSES,
57
+ rowId: row.id
58
+ });
21
59
  }
22
60
  return {
23
61
  id: row.id,
@@ -25,11 +63,11 @@ export const rowToWorker = (row) => {
25
63
  hostname: row.hostname,
26
64
  pid: row.pid,
27
65
  status: row.status,
28
- registeredAt: new Date(row.registered_at),
29
- lastHeartbeatAt: new Date(row.last_heartbeat_at),
66
+ registeredAt: parseDate(row.registered_at, "registered_at", row.id),
67
+ lastHeartbeatAt: parseDate(row.last_heartbeat_at, "last_heartbeat_at", row.id),
30
68
  currentTaskId: row.current_task_id,
31
- capabilities: JSON.parse(row.capabilities || "[]"),
32
- metadata: JSON.parse(row.metadata || "{}")
69
+ capabilities: safeParseCapabilities(row.capabilities),
70
+ metadata: safeParseMetadata(row.metadata)
33
71
  };
34
72
  };
35
73
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/mappers/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAU,CAAA;AAExF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAqB,EAAE;IAClE,OAAQ,eAAqC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAc,EAAU,EAAE;IACpD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IACzD,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;QACzC,eAAe,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAChD,aAAa,EAAE,GAAG,CAAC,eAAe;QAClC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC;QAClD,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;KAC3C,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/mappers/worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAmB3C;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAU,CAAA;AAExF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAqB,EAAE;IAClE,OAAQ,eAAqC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,IAA+B,EAAY,EAAE;IAC1E,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAChD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAA+B,EAA2B,EAAE;IACrF,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAA4B,EAAE,CAAA;YAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACrB,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAc,EAAU,EAAE;IACpD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,kBAAkB,CAAC;YAC3B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE,eAAe;YAC9B,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC;QACnE,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC;QAC9E,aAAa,EAAE,GAAG,CAAC,eAAe;QAClC,YAAY,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC;QACrD,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC1C,CAAA;AACH,CAAC,CAAA"}
@@ -25,9 +25,9 @@ declare const AnchorRepository_base: Context.TagClass<AnchorRepository, "AnchorR
25
25
  readonly updateStatus: (id: number, status: AnchorStatus) => Effect.Effect<boolean, DatabaseError>;
26
26
  readonly updateVerifiedAt: (id: number) => Effect.Effect<boolean, DatabaseError>;
27
27
  /** Find all anchors */
28
- readonly findAll: () => Effect.Effect<readonly Anchor[], DatabaseError>;
28
+ readonly findAll: (limit?: number) => Effect.Effect<readonly Anchor[], DatabaseError>;
29
29
  /** Find all valid anchors (for verification) */
30
- readonly findAllValid: () => Effect.Effect<readonly Anchor[], DatabaseError>;
30
+ readonly findAllValid: (limit?: number) => Effect.Effect<readonly Anchor[], DatabaseError>;
31
31
  /** Set pinned status */
32
32
  readonly setPinned: (id: number, pinned: boolean) => Effect.Effect<boolean, DatabaseError>;
33
33
  /** Delete old invalid anchors */
@@ -1 +1 @@
1
- {"version":3,"file":"anchor-repo.d.ts","sourceRoot":"","sources":["../../src/repo/anchor-repo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anchor-repo.d.ts","sourceRoot":"","sources":["../../src/repo/anchor-repo.ts"],"names":[],"mappings":"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"}