@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
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Worker Hooks - PRD-018
3
+ *
4
+ * Type definitions for the headless worker hooks system.
5
+ * Two hooks. That's it. Extensible context for user customization.
6
+ *
7
+ * See PRD-018 "Worker Hooks (Customization Points)" section and
8
+ * DD-018 "Worker Hooks Interface" section.
9
+ */
10
+ import type { Task } from "@jamesaphoenix/tx-types";
11
+ /**
12
+ * Result from executing a task.
13
+ */
14
+ export interface ExecutionResult {
15
+ /** Whether the execution succeeded */
16
+ readonly success: boolean;
17
+ /** Optional output from the execution */
18
+ readonly output?: string;
19
+ /** Error message if execution failed */
20
+ readonly error?: string;
21
+ }
22
+ /**
23
+ * IO capture paths for run tracking.
24
+ */
25
+ export interface IOCapture {
26
+ /** Path to transcript file */
27
+ readonly transcriptPath?: string;
28
+ /** Path to stderr capture file */
29
+ readonly stderrPath?: string;
30
+ /** Path to stdout capture file */
31
+ readonly stdoutPath?: string;
32
+ }
33
+ /**
34
+ * Context provided to the execute hook by tx.
35
+ * Contains tx primitives and mutable state.
36
+ */
37
+ export interface WorkerContext {
38
+ /** ID of the worker processing this task */
39
+ readonly workerId: string;
40
+ /** Unique ID for this run/execution */
41
+ readonly runId: string;
42
+ /** Renew the lease on the current task to prevent expiration */
43
+ readonly renewLease: () => Promise<void>;
44
+ /** Log a message (associated with this worker/run) */
45
+ readonly log: (message: string) => void;
46
+ /** Mutable state that persists across calls within a single task execution */
47
+ readonly state: Record<string, unknown>;
48
+ }
49
+ /**
50
+ * Worker hooks interface.
51
+ * Two hooks. That's it.
52
+ *
53
+ * @template TContext - Custom context type merged with WorkerContext
54
+ */
55
+ export interface WorkerHooks<TContext = object> {
56
+ /**
57
+ * Execute the work - YOUR logic lives here.
58
+ * Called for each task claimed by the worker.
59
+ *
60
+ * @param task - The task to execute
61
+ * @param ctx - Combined WorkerContext + your custom TContext
62
+ * @returns ExecutionResult indicating success/failure
63
+ */
64
+ readonly execute: (task: Task, ctx: WorkerContext & TContext) => Promise<ExecutionResult>;
65
+ /**
66
+ * Where to capture IO (optional).
67
+ * Called before execute to determine where to store run output.
68
+ *
69
+ * @param runId - The unique run ID
70
+ * @param task - The task being executed
71
+ * @returns IOCapture with paths for transcript/stderr/stdout
72
+ */
73
+ readonly captureIO?: (runId: string, task: Task) => IOCapture;
74
+ }
75
+ /**
76
+ * Configuration for runWorker().
77
+ * Combines hooks with worker settings and custom context.
78
+ *
79
+ * @template TContext - Custom context type merged with WorkerContext
80
+ */
81
+ export interface WorkerConfig<TContext = object> {
82
+ /** Optional worker name. Defaults to auto-generated name. */
83
+ readonly name?: string;
84
+ /** Heartbeat interval in seconds. Should match orchestrator config. Default: 30 */
85
+ readonly heartbeatIntervalSeconds?: number;
86
+ /**
87
+ * Your custom context - merged into ctx.
88
+ * Use this to pass your own primitives (db clients, LLM clients, etc.)
89
+ */
90
+ readonly context?: TContext;
91
+ /**
92
+ * Execute hook - YOUR logic lives here.
93
+ * Called for each task claimed by the worker.
94
+ */
95
+ readonly execute: WorkerHooks<TContext>["execute"];
96
+ /**
97
+ * Optional IO capture hook.
98
+ * Called before execute to determine where to store run output.
99
+ */
100
+ readonly captureIO?: WorkerHooks<TContext>["captureIO"];
101
+ }
102
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/worker/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAEnD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,kCAAkC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,kCAAkC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW,CAAC,QAAQ,GAAG,MAAM;IAC5C;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,CAChB,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,aAAa,GAAG,QAAQ,KAC1B,OAAO,CAAC,eAAe,CAAC,CAAA;IAE7B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,SAAS,CAAA;CAC9D;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,MAAM;IAC7C,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,mFAAmF;IACnF,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAC1C;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;IAC3B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAA;IAClD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAA;CACxD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Worker Hooks - PRD-018
3
+ *
4
+ * Type definitions for the headless worker hooks system.
5
+ * Two hooks. That's it. Extensible context for user customization.
6
+ *
7
+ * See PRD-018 "Worker Hooks (Customization Points)" section and
8
+ * DD-018 "Worker Hooks Interface" section.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/worker/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @tx/core/worker - Worker exports
3
+ *
4
+ * Headless worker primitives for agent orchestration.
5
+ * See PRD-018 and DD-018 for design specification.
6
+ */
7
+ export { type ExecutionResult, type IOCapture, type WorkerContext, type WorkerHooks, type WorkerConfig } from "./hooks.js";
8
+ export { runWorker } from "./run-worker.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @tx/core/worker - Worker exports
3
+ *
4
+ * Headless worker primitives for agent orchestration.
5
+ * See PRD-018 and DD-018 for design specification.
6
+ */
7
+ export { runWorker } from "./run-worker.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * runWorker - PRD-018
3
+ *
4
+ * Headless worker that executes tasks using user-provided hooks.
5
+ * Two hooks: execute (required), captureIO (optional).
6
+ * Extensible context for user customization.
7
+ *
8
+ * See PRD-018 "Worker Hooks (Customization Points)" section and
9
+ * DD-018 "Headless Worker Design" section.
10
+ */
11
+ import { Effect } from "effect";
12
+ import { WorkerService } from "../services/worker-service.js";
13
+ import { ClaimService } from "../services/claim-service.js";
14
+ import { ReadyService } from "../services/ready-service.js";
15
+ import { RunRepository } from "../repo/run-repo.js";
16
+ import type { WorkerConfig } from "./hooks.js";
17
+ /**
18
+ * Run a headless worker that executes tasks using user-provided hooks.
19
+ *
20
+ * This function:
21
+ * 1. Registers the worker with the orchestrator
22
+ * 2. Starts a background heartbeat fiber
23
+ * 3. Runs a work loop that claims and processes tasks
24
+ * 4. Calls user's execute hook for each task with merged context
25
+ * 5. Creates run records with optional IO capture
26
+ * 6. Handles graceful shutdown via SIGTERM/SIGINT
27
+ *
28
+ * @template TContext - Custom context type merged with WorkerContext
29
+ * @param config - Worker configuration with hooks and optional custom context
30
+ * @returns Effect that runs until shutdown is requested
31
+ */
32
+ export declare const runWorker: <TContext = object>(config: WorkerConfig<TContext>) => Effect.Effect<void, import("../errors.js").DatabaseError | import("../errors.js").WorkerNotFoundError | import("../errors.js").RegistrationError, ReadyService | RunRepository | WorkerService | ClaimService>;
33
+ //# sourceMappingURL=run-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-worker.d.ts","sourceRoot":"","sources":["../../src/worker/run-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAwB,MAAM,QAAQ,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAA6C,MAAM,YAAY,CAAA;AAoBzF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,MAAM,EACzC,QAAQ,YAAY,CAAC,QAAQ,CAAC,mNAsO5B,CAAA"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * runWorker - PRD-018
3
+ *
4
+ * Headless worker that executes tasks using user-provided hooks.
5
+ * Two hooks: execute (required), captureIO (optional).
6
+ * Extensible context for user customization.
7
+ *
8
+ * See PRD-018 "Worker Hooks (Customization Points)" section and
9
+ * DD-018 "Headless Worker Design" section.
10
+ */
11
+ import { Effect, Duration, Fiber, Ref } from "effect";
12
+ import * as os from "os";
13
+ import { WorkerService } from "../services/worker-service.js";
14
+ import { ClaimService } from "../services/claim-service.js";
15
+ import { ReadyService } from "../services/ready-service.js";
16
+ import { RunRepository } from "../repo/run-repo.js";
17
+ /**
18
+ * Default heartbeat interval in seconds.
19
+ */
20
+ const DEFAULT_HEARTBEAT_INTERVAL = 30;
21
+ /**
22
+ * Default lease renewal interval multiplier (10x heartbeat = 5 minutes at default).
23
+ */
24
+ const LEASE_RENEWAL_MULTIPLIER = 10;
25
+ /**
26
+ * Run a headless worker that executes tasks using user-provided hooks.
27
+ *
28
+ * This function:
29
+ * 1. Registers the worker with the orchestrator
30
+ * 2. Starts a background heartbeat fiber
31
+ * 3. Runs a work loop that claims and processes tasks
32
+ * 4. Calls user's execute hook for each task with merged context
33
+ * 5. Creates run records with optional IO capture
34
+ * 6. Handles graceful shutdown via SIGTERM/SIGINT
35
+ *
36
+ * @template TContext - Custom context type merged with WorkerContext
37
+ * @param config - Worker configuration with hooks and optional custom context
38
+ * @returns Effect that runs until shutdown is requested
39
+ */
40
+ export const runWorker = (config) => Effect.gen(function* () {
41
+ const workerService = yield* WorkerService;
42
+ const claimService = yield* ClaimService;
43
+ const readyService = yield* ReadyService;
44
+ const runRepo = yield* RunRepository;
45
+ const heartbeatInterval = config.heartbeatIntervalSeconds ?? DEFAULT_HEARTBEAT_INTERVAL;
46
+ // Shutdown state ref (mutable, shared with signal handlers)
47
+ const shutdownState = yield* Ref.make({
48
+ requested: false
49
+ });
50
+ // Register with orchestrator
51
+ const worker = yield* workerService.register({
52
+ name: config.name,
53
+ hostname: os.hostname(),
54
+ pid: process.pid
55
+ });
56
+ const workerId = worker.id;
57
+ yield* Effect.log(`runWorker: Worker ${workerId} registered`);
58
+ // Set up signal handlers for graceful shutdown
59
+ const handleSignal = (signal) => {
60
+ console.log(`runWorker: Worker ${workerId} received ${signal}`);
61
+ // Mark shutdown as requested (sync since signal handlers can't use async)
62
+ Effect.runSync(Ref.update(shutdownState, (state) => ({
63
+ ...state,
64
+ requested: true
65
+ })));
66
+ };
67
+ const sigTermHandler = () => handleSignal("SIGTERM");
68
+ const sigIntHandler = () => handleSignal("SIGINT");
69
+ process.on("SIGTERM", sigTermHandler);
70
+ process.on("SIGINT", sigIntHandler);
71
+ // Completed tasks counter for metrics
72
+ const tasksCompletedRef = yield* Ref.make(0);
73
+ // Heartbeat fiber - runs continuously in background
74
+ const heartbeatFiber = yield* Effect.fork(runHeartbeatLoop(workerId, heartbeatInterval, shutdownState, tasksCompletedRef));
75
+ try {
76
+ // Main work loop
77
+ while (true) {
78
+ // Check if shutdown was requested
79
+ const state = yield* Ref.get(shutdownState);
80
+ if (state.requested) {
81
+ yield* Effect.log(`runWorker: Worker ${workerId} shutting down gracefully`);
82
+ break;
83
+ }
84
+ // Update status to idle
85
+ yield* workerService.updateStatus(workerId, "idle");
86
+ // Check for available work
87
+ const readyTasks = yield* readyService.getReady(1);
88
+ if (readyTasks.length === 0) {
89
+ // No work available, wait and try again
90
+ yield* Effect.sleep(Duration.seconds(5));
91
+ continue;
92
+ }
93
+ const task = readyTasks[0];
94
+ // Try to claim the task
95
+ const claimResult = yield* claimService.claim(task.id, workerId).pipe(Effect.either);
96
+ if (claimResult._tag === "Left") {
97
+ // Someone else claimed it, try again
98
+ yield* Effect.log(`runWorker: Worker ${workerId} failed to claim task ${task.id}: ${claimResult.left._tag}`);
99
+ continue;
100
+ }
101
+ yield* Effect.log(`runWorker: Worker ${workerId} claimed task ${task.id}`);
102
+ // Create run record (this generates the run ID)
103
+ const runRecord = yield* runRepo.create({
104
+ taskId: task.id,
105
+ agent: workerId,
106
+ pid: process.pid
107
+ });
108
+ const runId = runRecord.id;
109
+ // Get IO capture paths from user's hook if provided
110
+ const ioCapture = config.captureIO?.(runId, task) ?? {};
111
+ // Update run record with IO paths if provided
112
+ if (ioCapture.transcriptPath || ioCapture.stderrPath || ioCapture.stdoutPath) {
113
+ yield* runRepo.update(runId, {
114
+ transcriptPath: ioCapture.transcriptPath,
115
+ stderrPath: ioCapture.stderrPath,
116
+ stdoutPath: ioCapture.stdoutPath
117
+ });
118
+ }
119
+ // Update worker status to busy
120
+ const tasksCompleted = yield* Ref.get(tasksCompletedRef);
121
+ yield* workerService.heartbeat({
122
+ workerId,
123
+ timestamp: new Date(),
124
+ status: "busy",
125
+ currentTaskId: task.id,
126
+ metrics: {
127
+ cpuPercent: process.cpuUsage().user / 1000000,
128
+ memoryMb: process.memoryUsage().heapUsed / 1024 / 1024,
129
+ tasksCompleted
130
+ }
131
+ });
132
+ // Start lease renewal fiber
133
+ const renewalInterval = heartbeatInterval * LEASE_RENEWAL_MULTIPLIER;
134
+ const renewFiber = yield* Effect.fork(runLeaseRenewalLoop(task.id, workerId, renewalInterval, shutdownState));
135
+ // Build worker context with tx primitives
136
+ const baseContext = {
137
+ workerId,
138
+ runId,
139
+ renewLease: async () => {
140
+ await Effect.runPromise(claimService.renew(task.id, workerId).pipe(Effect.catchAll((error) => {
141
+ console.error(`runWorker: renewLease failed: ${error._tag}`);
142
+ return Effect.void;
143
+ })));
144
+ },
145
+ log: (message) => {
146
+ console.log(`[${workerId}] ${message}`);
147
+ },
148
+ state: {}
149
+ };
150
+ // Merge user's custom context
151
+ const mergedContext = {
152
+ ...baseContext,
153
+ ...(config.context ?? {})
154
+ };
155
+ let result;
156
+ try {
157
+ // USER HOOK: Execute (all your logic here)
158
+ // Use Effect.tryPromise to properly handle the async execute hook
159
+ result = yield* Effect.tryPromise({
160
+ try: () => config.execute(task, mergedContext),
161
+ catch: (error) => error
162
+ }).pipe(Effect.catchAll((error) => {
163
+ const errorMessage = error instanceof Error ? error.message : String(error);
164
+ return Effect.succeed({
165
+ success: false,
166
+ error: errorMessage
167
+ });
168
+ }));
169
+ // Update run status based on result
170
+ yield* runRepo.update(runId, {
171
+ status: result.success ? "completed" : "failed",
172
+ endedAt: new Date(),
173
+ exitCode: result.success ? 0 : 1,
174
+ summary: result.output,
175
+ errorMessage: result.error
176
+ });
177
+ if (result.success) {
178
+ yield* Ref.update(tasksCompletedRef, (n) => n + 1);
179
+ yield* Effect.log(`runWorker: Task ${task.id} completed successfully`);
180
+ }
181
+ else {
182
+ yield* Effect.log(`runWorker: Task ${task.id} failed: ${result.error ?? "Unknown error"}`);
183
+ }
184
+ }
185
+ finally {
186
+ // Stop renewal fiber
187
+ yield* Fiber.interrupt(renewFiber);
188
+ }
189
+ // Release the claim
190
+ yield* claimService.release(task.id, workerId).pipe(Effect.catchAll((error) => Effect.log(`runWorker: Failed to release claim for task ${task.id}: ${error.message}`)));
191
+ }
192
+ // Graceful shutdown: mark as stopping
193
+ yield* workerService.updateStatus(workerId, "stopping");
194
+ }
195
+ finally {
196
+ // Remove signal handlers to prevent accumulation across multiple runWorker calls
197
+ process.removeListener("SIGTERM", sigTermHandler);
198
+ process.removeListener("SIGINT", sigIntHandler);
199
+ // Cleanup: stop heartbeat fiber and deregister
200
+ yield* Fiber.interrupt(heartbeatFiber);
201
+ // Release any active claims before deregistering
202
+ yield* claimService.releaseByWorker(workerId).pipe(Effect.catchAll((error) => Effect.log(`runWorker: Failed to release claims for worker ${workerId}: ${error.message}`).pipe(Effect.as(0))));
203
+ yield* workerService.deregister(workerId).pipe(Effect.catchAll((error) => Effect.log(`runWorker: Failed to deregister worker ${workerId}: ${error.message}`)));
204
+ yield* Effect.log(`runWorker: Worker ${workerId} shutdown complete`);
205
+ }
206
+ });
207
+ /**
208
+ * Run the heartbeat loop.
209
+ * Sends periodic heartbeats to the orchestrator.
210
+ */
211
+ const runHeartbeatLoop = (workerId, intervalSeconds, shutdownState, tasksCompletedRef) => Effect.gen(function* () {
212
+ const workerService = yield* WorkerService;
213
+ while (true) {
214
+ // Check shutdown before heartbeat
215
+ const state = yield* Ref.get(shutdownState);
216
+ if (state.requested)
217
+ break;
218
+ const tasksCompleted = yield* Ref.get(tasksCompletedRef);
219
+ yield* workerService
220
+ .heartbeat({
221
+ workerId,
222
+ timestamp: new Date(),
223
+ status: "idle", // Will be updated by main loop when busy
224
+ currentTaskId: undefined,
225
+ metrics: {
226
+ cpuPercent: process.cpuUsage().user / 1000000,
227
+ memoryMb: process.memoryUsage().heapUsed / 1024 / 1024,
228
+ tasksCompleted
229
+ }
230
+ })
231
+ .pipe(Effect.catchAll((error) => Effect.log(`runWorker: Heartbeat failed for ${workerId}: ${error.message}`)));
232
+ yield* Effect.sleep(Duration.seconds(intervalSeconds));
233
+ }
234
+ });
235
+ /**
236
+ * Run the lease renewal loop.
237
+ * Periodically renews the lease on a claimed task.
238
+ */
239
+ const runLeaseRenewalLoop = (taskId, workerId, intervalSeconds, shutdownState) => Effect.gen(function* () {
240
+ const claimService = yield* ClaimService;
241
+ while (true) {
242
+ // Wait before first renewal
243
+ yield* Effect.sleep(Duration.seconds(intervalSeconds));
244
+ // Check shutdown before renewal
245
+ const state = yield* Ref.get(shutdownState);
246
+ if (state.requested)
247
+ break;
248
+ const renewResult = yield* claimService
249
+ .renew(taskId, workerId)
250
+ .pipe(Effect.tap(() => Effect.log(`runWorker: Renewed lease on task ${taskId}`)), Effect.map(() => true), Effect.catchAll((error) => Effect.gen(function* () {
251
+ yield* Effect.log(`runWorker: CRITICAL: Lease renewal failed for task ${taskId}: ${error.message}. Stopping worker to prevent duplicate execution.`);
252
+ // Stop the worker to prevent duplicate task execution
253
+ // Another worker may have claimed this task after lease expiry
254
+ yield* Ref.update(shutdownState, (state) => ({
255
+ ...state,
256
+ requested: true
257
+ }));
258
+ return false;
259
+ })));
260
+ // Exit renewal loop if renewal failed
261
+ if (!renewResult)
262
+ break;
263
+ }
264
+ });
265
+ //# sourceMappingURL=run-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-worker.js","sourceRoot":"","sources":["../../src/worker/run-worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jamesaphoenix/tx-core",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Core business logic for tx - Effect-TS services and repositories",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -32,35 +32,37 @@
32
32
  }
33
33
  },
34
34
  "files": [
35
- "dist"
35
+ "dist",
36
+ "README.md"
36
37
  ],
37
38
  "scripts": {
38
39
  "build": "tsc -b",
39
40
  "typecheck": "tsc --noEmit",
40
41
  "lint": "eslint src/",
41
- "test": "vitest run --passWithNoTests"
42
+ "test": "bun vitest run --passWithNoTests"
42
43
  },
43
44
  "dependencies": {
44
- "@jamesaphoenix/tx-types": "^0.4.1",
45
+ "@jamesaphoenix/tx-types": "*",
45
46
  "chokidar": "^5.0.0",
46
- "effect": "^3.19.15"
47
+ "effect": "^3.19.15",
48
+ "yaml": "^2.7.0"
47
49
  },
48
50
  "peerDependencies": {
49
- "@anthropic-ai/sdk": "^0.52.0",
50
- "better-sqlite3": "^11.0.0"
51
+ "@anthropic-ai/claude-agent-sdk": ">=0.1.0",
52
+ "@anthropic-ai/sdk": "^0.52.0"
51
53
  },
52
54
  "peerDependenciesMeta": {
53
- "@anthropic-ai/sdk": {
55
+ "@anthropic-ai/claude-agent-sdk": {
54
56
  "optional": true
55
57
  },
56
- "better-sqlite3": {
57
- "optional": false
58
+ "@anthropic-ai/sdk": {
59
+ "optional": true
58
60
  }
59
61
  },
60
62
  "devDependencies": {
61
- "@types/better-sqlite3": "^7.6.0",
63
+ "@types/bun": "^1.2.0",
62
64
  "typescript": "^5.7.0",
63
- "vitest": "^3.0.0"
65
+ "vitest": "^4.0.18"
64
66
  },
65
67
  "repository": {
66
68
  "type": "git",