@jamesaphoenix/tx-core 0.4.1

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 (289) hide show
  1. package/dist/db.d.ts +42 -0
  2. package/dist/db.d.ts.map +1 -0
  3. package/dist/db.js +46 -0
  4. package/dist/db.js.map +1 -0
  5. package/dist/errors.d.ts +231 -0
  6. package/dist/errors.d.ts.map +1 -0
  7. package/dist/errors.js +139 -0
  8. package/dist/errors.js.map +1 -0
  9. package/dist/id.d.ts +6 -0
  10. package/dist/id.d.ts.map +1 -0
  11. package/dist/id.js +21 -0
  12. package/dist/id.js.map +1 -0
  13. package/dist/index.d.ts +25 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +56 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/layer.d.ts +50 -0
  18. package/dist/layer.d.ts.map +1 -0
  19. package/dist/layer.js +155 -0
  20. package/dist/layer.js.map +1 -0
  21. package/dist/mappers/anchor.d.ts +14 -0
  22. package/dist/mappers/anchor.d.ts.map +1 -0
  23. package/dist/mappers/anchor.js +38 -0
  24. package/dist/mappers/anchor.js.map +1 -0
  25. package/dist/mappers/attempt.d.ts +15 -0
  26. package/dist/mappers/attempt.d.ts.map +1 -0
  27. package/dist/mappers/attempt.js +23 -0
  28. package/dist/mappers/attempt.js.map +1 -0
  29. package/dist/mappers/candidate.d.ts +23 -0
  30. package/dist/mappers/candidate.d.ts.map +1 -0
  31. package/dist/mappers/candidate.js +53 -0
  32. package/dist/mappers/candidate.js.map +1 -0
  33. package/dist/mappers/claim.d.ts +30 -0
  34. package/dist/mappers/claim.d.ts.map +1 -0
  35. package/dist/mappers/claim.js +32 -0
  36. package/dist/mappers/claim.js.map +1 -0
  37. package/dist/mappers/deduplication.d.ts +39 -0
  38. package/dist/mappers/deduplication.d.ts.map +1 -0
  39. package/dist/mappers/deduplication.js +53 -0
  40. package/dist/mappers/deduplication.js.map +1 -0
  41. package/dist/mappers/edge.d.ts +10 -0
  42. package/dist/mappers/edge.d.ts.map +1 -0
  43. package/dist/mappers/edge.js +19 -0
  44. package/dist/mappers/edge.js.map +1 -0
  45. package/dist/mappers/file-learning.d.ts +14 -0
  46. package/dist/mappers/file-learning.d.ts.map +1 -0
  47. package/dist/mappers/file-learning.js +75 -0
  48. package/dist/mappers/file-learning.js.map +1 -0
  49. package/dist/mappers/index.d.ts +17 -0
  50. package/dist/mappers/index.d.ts.map +1 -0
  51. package/dist/mappers/index.js +30 -0
  52. package/dist/mappers/index.js.map +1 -0
  53. package/dist/mappers/learning.d.ts +19 -0
  54. package/dist/mappers/learning.d.ts.map +1 -0
  55. package/dist/mappers/learning.js +41 -0
  56. package/dist/mappers/learning.js.map +1 -0
  57. package/dist/mappers/orchestrator-state.d.ts +33 -0
  58. package/dist/mappers/orchestrator-state.d.ts.map +1 -0
  59. package/dist/mappers/orchestrator-state.js +34 -0
  60. package/dist/mappers/orchestrator-state.js.map +1 -0
  61. package/dist/mappers/run.d.ts +32 -0
  62. package/dist/mappers/run.d.ts.map +1 -0
  63. package/dist/mappers/run.js +64 -0
  64. package/dist/mappers/run.js.map +1 -0
  65. package/dist/mappers/task.d.ts +23 -0
  66. package/dist/mappers/task.d.ts.map +1 -0
  67. package/dist/mappers/task.js +54 -0
  68. package/dist/mappers/task.js.map +1 -0
  69. package/dist/mappers/tracked-project.d.ts +15 -0
  70. package/dist/mappers/tracked-project.d.ts.map +1 -0
  71. package/dist/mappers/tracked-project.js +23 -0
  72. package/dist/mappers/tracked-project.js.map +1 -0
  73. package/dist/mappers/worker.d.ts +33 -0
  74. package/dist/mappers/worker.d.ts.map +1 -0
  75. package/dist/mappers/worker.js +35 -0
  76. package/dist/mappers/worker.js.map +1 -0
  77. package/dist/repo/anchor-repo.d.ts +52 -0
  78. package/dist/repo/anchor-repo.d.ts.map +1 -0
  79. package/dist/repo/anchor-repo.js +204 -0
  80. package/dist/repo/anchor-repo.js.map +1 -0
  81. package/dist/repo/attempt-repo.d.ts +25 -0
  82. package/dist/repo/attempt-repo.d.ts.map +1 -0
  83. package/dist/repo/attempt-repo.js +78 -0
  84. package/dist/repo/attempt-repo.js.map +1 -0
  85. package/dist/repo/candidate-repo.d.ts +16 -0
  86. package/dist/repo/candidate-repo.d.ts.map +1 -0
  87. package/dist/repo/candidate-repo.js +143 -0
  88. package/dist/repo/candidate-repo.js.map +1 -0
  89. package/dist/repo/claim-repo.d.ts +17 -0
  90. package/dist/repo/claim-repo.d.ts.map +1 -0
  91. package/dist/repo/claim-repo.js +62 -0
  92. package/dist/repo/claim-repo.js.map +1 -0
  93. package/dist/repo/deduplication-repo.d.ts +37 -0
  94. package/dist/repo/deduplication-repo.d.ts.map +1 -0
  95. package/dist/repo/deduplication-repo.js +133 -0
  96. package/dist/repo/deduplication-repo.js.map +1 -0
  97. package/dist/repo/dep-repo.d.ts +19 -0
  98. package/dist/repo/dep-repo.d.ts.map +1 -0
  99. package/dist/repo/dep-repo.js +104 -0
  100. package/dist/repo/dep-repo.js.map +1 -0
  101. package/dist/repo/edge-repo.d.ts +26 -0
  102. package/dist/repo/edge-repo.d.ts.map +1 -0
  103. package/dist/repo/edge-repo.js +227 -0
  104. package/dist/repo/edge-repo.js.map +1 -0
  105. package/dist/repo/file-learning-repo.d.ts +17 -0
  106. package/dist/repo/file-learning-repo.d.ts.map +1 -0
  107. package/dist/repo/file-learning-repo.js +60 -0
  108. package/dist/repo/file-learning-repo.js.map +1 -0
  109. package/dist/repo/index.d.ts +18 -0
  110. package/dist/repo/index.d.ts.map +1 -0
  111. package/dist/repo/index.js +18 -0
  112. package/dist/repo/index.js.map +1 -0
  113. package/dist/repo/learning-repo.d.ts +31 -0
  114. package/dist/repo/learning-repo.d.ts.map +1 -0
  115. package/dist/repo/learning-repo.js +165 -0
  116. package/dist/repo/learning-repo.js.map +1 -0
  117. package/dist/repo/orchestrator-state-repo.d.ts +27 -0
  118. package/dist/repo/orchestrator-state-repo.d.ts.map +1 -0
  119. package/dist/repo/orchestrator-state-repo.js +96 -0
  120. package/dist/repo/orchestrator-state-repo.js.map +1 -0
  121. package/dist/repo/run-repo.d.ts +31 -0
  122. package/dist/repo/run-repo.d.ts.map +1 -0
  123. package/dist/repo/run-repo.js +132 -0
  124. package/dist/repo/run-repo.js.map +1 -0
  125. package/dist/repo/task-repo.d.ts +21 -0
  126. package/dist/repo/task-repo.d.ts.map +1 -0
  127. package/dist/repo/task-repo.js +169 -0
  128. package/dist/repo/task-repo.js.map +1 -0
  129. package/dist/repo/tracked-project-repo.d.ts +16 -0
  130. package/dist/repo/tracked-project-repo.d.ts.map +1 -0
  131. package/dist/repo/tracked-project-repo.js +54 -0
  132. package/dist/repo/tracked-project-repo.js.map +1 -0
  133. package/dist/repo/worker-repo.d.ts +19 -0
  134. package/dist/repo/worker-repo.d.ts.map +1 -0
  135. package/dist/repo/worker-repo.js +72 -0
  136. package/dist/repo/worker-repo.js.map +1 -0
  137. package/dist/schemas/index.d.ts +8 -0
  138. package/dist/schemas/index.d.ts.map +1 -0
  139. package/dist/schemas/index.js +7 -0
  140. package/dist/schemas/index.js.map +1 -0
  141. package/dist/schemas/sync.d.ts +296 -0
  142. package/dist/schemas/sync.d.ts.map +1 -0
  143. package/dist/schemas/sync.js +146 -0
  144. package/dist/schemas/sync.js.map +1 -0
  145. package/dist/schemas/worker.d.ts +77 -0
  146. package/dist/schemas/worker.d.ts.map +1 -0
  147. package/dist/schemas/worker.js +80 -0
  148. package/dist/schemas/worker.js.map +1 -0
  149. package/dist/services/anchor-service.d.ts +147 -0
  150. package/dist/services/anchor-service.d.ts.map +1 -0
  151. package/dist/services/anchor-service.js +540 -0
  152. package/dist/services/anchor-service.js.map +1 -0
  153. package/dist/services/anchor-verification.d.ts +94 -0
  154. package/dist/services/anchor-verification.d.ts.map +1 -0
  155. package/dist/services/anchor-verification.js +617 -0
  156. package/dist/services/anchor-verification.js.map +1 -0
  157. package/dist/services/ast-grep-service.d.ts +58 -0
  158. package/dist/services/ast-grep-service.d.ts.map +1 -0
  159. package/dist/services/ast-grep-service.js +356 -0
  160. package/dist/services/ast-grep-service.js.map +1 -0
  161. package/dist/services/attempt-service.d.ts +24 -0
  162. package/dist/services/attempt-service.d.ts.map +1 -0
  163. package/dist/services/attempt-service.js +55 -0
  164. package/dist/services/attempt-service.js.map +1 -0
  165. package/dist/services/auto-sync-service.d.ts +56 -0
  166. package/dist/services/auto-sync-service.d.ts.map +1 -0
  167. package/dist/services/auto-sync-service.js +66 -0
  168. package/dist/services/auto-sync-service.js.map +1 -0
  169. package/dist/services/candidate-extractor-service.d.ts +56 -0
  170. package/dist/services/candidate-extractor-service.d.ts.map +1 -0
  171. package/dist/services/candidate-extractor-service.js +365 -0
  172. package/dist/services/candidate-extractor-service.js.map +1 -0
  173. package/dist/services/claim-service.d.ts +52 -0
  174. package/dist/services/claim-service.d.ts.map +1 -0
  175. package/dist/services/claim-service.js +134 -0
  176. package/dist/services/claim-service.js.map +1 -0
  177. package/dist/services/daemon-service.d.ts +214 -0
  178. package/dist/services/daemon-service.d.ts.map +1 -0
  179. package/dist/services/daemon-service.js +522 -0
  180. package/dist/services/daemon-service.js.map +1 -0
  181. package/dist/services/deduplication-service.d.ts +67 -0
  182. package/dist/services/deduplication-service.d.ts.map +1 -0
  183. package/dist/services/deduplication-service.js +145 -0
  184. package/dist/services/deduplication-service.js.map +1 -0
  185. package/dist/services/dep-service.d.ts +14 -0
  186. package/dist/services/dep-service.d.ts.map +1 -0
  187. package/dist/services/dep-service.js +34 -0
  188. package/dist/services/dep-service.js.map +1 -0
  189. package/dist/services/diversifier-service.d.ts +46 -0
  190. package/dist/services/diversifier-service.d.ts.map +1 -0
  191. package/dist/services/diversifier-service.js +197 -0
  192. package/dist/services/diversifier-service.js.map +1 -0
  193. package/dist/services/edge-service.d.ts +78 -0
  194. package/dist/services/edge-service.d.ts.map +1 -0
  195. package/dist/services/edge-service.js +158 -0
  196. package/dist/services/edge-service.js.map +1 -0
  197. package/dist/services/embedding-service.d.ts +138 -0
  198. package/dist/services/embedding-service.d.ts.map +1 -0
  199. package/dist/services/embedding-service.js +318 -0
  200. package/dist/services/embedding-service.js.map +1 -0
  201. package/dist/services/feedback-tracker.d.ts +64 -0
  202. package/dist/services/feedback-tracker.d.ts.map +1 -0
  203. package/dist/services/feedback-tracker.js +110 -0
  204. package/dist/services/feedback-tracker.js.map +1 -0
  205. package/dist/services/file-learning-service.d.ts +17 -0
  206. package/dist/services/file-learning-service.d.ts.map +1 -0
  207. package/dist/services/file-learning-service.js +41 -0
  208. package/dist/services/file-learning-service.js.map +1 -0
  209. package/dist/services/file-watcher-service.d.ts +141 -0
  210. package/dist/services/file-watcher-service.d.ts.map +1 -0
  211. package/dist/services/file-watcher-service.js +278 -0
  212. package/dist/services/file-watcher-service.js.map +1 -0
  213. package/dist/services/graph-expansion.d.ts +155 -0
  214. package/dist/services/graph-expansion.d.ts.map +1 -0
  215. package/dist/services/graph-expansion.js +466 -0
  216. package/dist/services/graph-expansion.js.map +1 -0
  217. package/dist/services/hierarchy-service.d.ts +16 -0
  218. package/dist/services/hierarchy-service.d.ts.map +1 -0
  219. package/dist/services/hierarchy-service.js +66 -0
  220. package/dist/services/hierarchy-service.js.map +1 -0
  221. package/dist/services/index.d.ts +36 -0
  222. package/dist/services/index.d.ts.map +1 -0
  223. package/dist/services/index.js +36 -0
  224. package/dist/services/index.js.map +1 -0
  225. package/dist/services/learning-service.d.ts +39 -0
  226. package/dist/services/learning-service.d.ts.map +1 -0
  227. package/dist/services/learning-service.js +151 -0
  228. package/dist/services/learning-service.js.map +1 -0
  229. package/dist/services/migration-service.d.ts +67 -0
  230. package/dist/services/migration-service.d.ts.map +1 -0
  231. package/dist/services/migration-service.js +144 -0
  232. package/dist/services/migration-service.js.map +1 -0
  233. package/dist/services/orchestrator-service.d.ts +52 -0
  234. package/dist/services/orchestrator-service.d.ts.map +1 -0
  235. package/dist/services/orchestrator-service.js +203 -0
  236. package/dist/services/orchestrator-service.js.map +1 -0
  237. package/dist/services/promotion-service.d.ts +67 -0
  238. package/dist/services/promotion-service.d.ts.map +1 -0
  239. package/dist/services/promotion-service.js +151 -0
  240. package/dist/services/promotion-service.js.map +1 -0
  241. package/dist/services/query-expansion-service.d.ts +55 -0
  242. package/dist/services/query-expansion-service.d.ts.map +1 -0
  243. package/dist/services/query-expansion-service.js +174 -0
  244. package/dist/services/query-expansion-service.js.map +1 -0
  245. package/dist/services/ready-service.d.ts +16 -0
  246. package/dist/services/ready-service.d.ts.map +1 -0
  247. package/dist/services/ready-service.js +70 -0
  248. package/dist/services/ready-service.js.map +1 -0
  249. package/dist/services/reranker-service.d.ts +51 -0
  250. package/dist/services/reranker-service.d.ts.map +1 -0
  251. package/dist/services/reranker-service.js +128 -0
  252. package/dist/services/reranker-service.js.map +1 -0
  253. package/dist/services/retriever-service.d.ts +49 -0
  254. package/dist/services/retriever-service.d.ts.map +1 -0
  255. package/dist/services/retriever-service.js +419 -0
  256. package/dist/services/retriever-service.js.map +1 -0
  257. package/dist/services/score-service.d.ts +43 -0
  258. package/dist/services/score-service.d.ts.map +1 -0
  259. package/dist/services/score-service.js +82 -0
  260. package/dist/services/score-service.js.map +1 -0
  261. package/dist/services/swarm-verification.d.ts +104 -0
  262. package/dist/services/swarm-verification.d.ts.map +1 -0
  263. package/dist/services/swarm-verification.js +400 -0
  264. package/dist/services/swarm-verification.js.map +1 -0
  265. package/dist/services/sync-service.d.ts +115 -0
  266. package/dist/services/sync-service.d.ts.map +1 -0
  267. package/dist/services/sync-service.js +350 -0
  268. package/dist/services/sync-service.js.map +1 -0
  269. package/dist/services/task-service.d.ts +22 -0
  270. package/dist/services/task-service.d.ts.map +1 -0
  271. package/dist/services/task-service.js +221 -0
  272. package/dist/services/task-service.js.map +1 -0
  273. package/dist/services/worker-process.d.ts +41 -0
  274. package/dist/services/worker-process.d.ts.map +1 -0
  275. package/dist/services/worker-process.js +280 -0
  276. package/dist/services/worker-process.js.map +1 -0
  277. package/dist/services/worker-service.d.ts +74 -0
  278. package/dist/services/worker-service.d.ts.map +1 -0
  279. package/dist/services/worker-service.js +148 -0
  280. package/dist/services/worker-service.js.map +1 -0
  281. package/dist/utils/glob.d.ts +15 -0
  282. package/dist/utils/glob.d.ts.map +1 -0
  283. package/dist/utils/glob.js +27 -0
  284. package/dist/utils/glob.js.map +1 -0
  285. package/dist/utils/math.d.ts +6 -0
  286. package/dist/utils/math.d.ts.map +1 -0
  287. package/dist/utils/math.js +21 -0
  288. package/dist/utils/math.js.map +1 -0
  289. package/package.json +72 -0
@@ -0,0 +1,96 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { SqliteClient } from "../db.js";
3
+ import { DatabaseError } from "../errors.js";
4
+ import { rowToOrchestratorState } from "../mappers/orchestrator-state.js";
5
+ export class OrchestratorStateRepository extends Context.Tag("OrchestratorStateRepository")() {
6
+ }
7
+ /**
8
+ * Default values for orchestrator state initialization.
9
+ */
10
+ const DEFAULT_STATE = {
11
+ status: "stopped",
12
+ pid: null,
13
+ startedAt: null,
14
+ lastReconcileAt: null,
15
+ workerPoolSize: 1,
16
+ reconcileIntervalSeconds: 60,
17
+ heartbeatIntervalSeconds: 30,
18
+ leaseDurationMinutes: 30,
19
+ metadata: {}
20
+ };
21
+ export const OrchestratorStateRepositoryLive = Layer.effect(OrchestratorStateRepository, Effect.gen(function* () {
22
+ const db = yield* SqliteClient;
23
+ /**
24
+ * Initialize the singleton row if it doesn't exist.
25
+ * Uses INSERT OR IGNORE to be idempotent.
26
+ */
27
+ const ensureSingletonExists = () => {
28
+ db.prepare(`INSERT OR IGNORE INTO orchestrator_state
29
+ (id, status, pid, started_at, last_reconcile_at, worker_pool_size,
30
+ reconcile_interval_seconds, heartbeat_interval_seconds, lease_duration_minutes, metadata)
31
+ VALUES (1, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(DEFAULT_STATE.status, DEFAULT_STATE.pid, DEFAULT_STATE.startedAt?.toISOString() ?? null, DEFAULT_STATE.lastReconcileAt?.toISOString() ?? null, DEFAULT_STATE.workerPoolSize, DEFAULT_STATE.reconcileIntervalSeconds, DEFAULT_STATE.heartbeatIntervalSeconds, DEFAULT_STATE.leaseDurationMinutes, JSON.stringify(DEFAULT_STATE.metadata));
32
+ };
33
+ return {
34
+ get: () => Effect.try({
35
+ try: () => {
36
+ // Ensure singleton exists before querying
37
+ ensureSingletonExists();
38
+ const row = db.prepare("SELECT * FROM orchestrator_state WHERE id = 1").get();
39
+ return rowToOrchestratorState(row);
40
+ },
41
+ catch: (cause) => new DatabaseError({ cause })
42
+ }),
43
+ update: (partial) => Effect.try({
44
+ try: () => {
45
+ // Ensure singleton exists before updating
46
+ ensureSingletonExists();
47
+ // Build dynamic UPDATE based on provided fields
48
+ const setClauses = [];
49
+ const params = [];
50
+ if (partial.status !== undefined) {
51
+ setClauses.push("status = ?");
52
+ params.push(partial.status);
53
+ }
54
+ if (partial.pid !== undefined) {
55
+ setClauses.push("pid = ?");
56
+ params.push(partial.pid);
57
+ }
58
+ if (partial.startedAt !== undefined) {
59
+ setClauses.push("started_at = ?");
60
+ params.push(partial.startedAt?.toISOString() ?? null);
61
+ }
62
+ if (partial.lastReconcileAt !== undefined) {
63
+ setClauses.push("last_reconcile_at = ?");
64
+ params.push(partial.lastReconcileAt?.toISOString() ?? null);
65
+ }
66
+ if (partial.workerPoolSize !== undefined) {
67
+ setClauses.push("worker_pool_size = ?");
68
+ params.push(partial.workerPoolSize);
69
+ }
70
+ if (partial.reconcileIntervalSeconds !== undefined) {
71
+ setClauses.push("reconcile_interval_seconds = ?");
72
+ params.push(partial.reconcileIntervalSeconds);
73
+ }
74
+ if (partial.heartbeatIntervalSeconds !== undefined) {
75
+ setClauses.push("heartbeat_interval_seconds = ?");
76
+ params.push(partial.heartbeatIntervalSeconds);
77
+ }
78
+ if (partial.leaseDurationMinutes !== undefined) {
79
+ setClauses.push("lease_duration_minutes = ?");
80
+ params.push(partial.leaseDurationMinutes);
81
+ }
82
+ if (partial.metadata !== undefined) {
83
+ setClauses.push("metadata = ?");
84
+ params.push(JSON.stringify(partial.metadata));
85
+ }
86
+ // Only run UPDATE if there are fields to update
87
+ if (setClauses.length > 0) {
88
+ params.push(1); // WHERE id = 1
89
+ db.prepare(`UPDATE orchestrator_state SET ${setClauses.join(", ")} WHERE id = ?`).run(...params);
90
+ }
91
+ },
92
+ catch: (cause) => new DatabaseError({ cause })
93
+ })
94
+ };
95
+ }));
96
+ //# sourceMappingURL=orchestrator-state-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-state-repo.js","sourceRoot":"","sources":["../../src/repo/orchestrator-state-repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { SqliteClient } from "../db.js";
3
+ import { DatabaseError } from "../errors.js";
4
+ import type { Run, RunId, RunStatus, CreateRunInput, UpdateRunInput } from "@jamesaphoenix/tx-types";
5
+ declare const RunRepository_base: Context.TagClass<RunRepository, "RunRepository", {
6
+ /** Create a new run record */
7
+ readonly create: (input: CreateRunInput) => Effect.Effect<Run, DatabaseError>;
8
+ /** Find a run by ID */
9
+ readonly findById: (id: RunId) => Effect.Effect<Run | null, DatabaseError>;
10
+ /** Find runs by task ID */
11
+ readonly findByTaskId: (taskId: string) => Effect.Effect<readonly Run[], DatabaseError>;
12
+ /** Find runs by status */
13
+ readonly findByStatus: (status: RunStatus) => Effect.Effect<readonly Run[], DatabaseError>;
14
+ /** Get recent runs */
15
+ readonly findRecent: (limit: number) => Effect.Effect<readonly Run[], DatabaseError>;
16
+ /** Update a run */
17
+ readonly update: (id: RunId, input: UpdateRunInput) => Effect.Effect<void, DatabaseError>;
18
+ /** Mark a run as completed */
19
+ readonly complete: (id: RunId, exitCode: number, summary?: string) => Effect.Effect<void, DatabaseError>;
20
+ /** Mark a run as failed */
21
+ readonly fail: (id: RunId, errorMessage: string, exitCode?: number) => Effect.Effect<void, DatabaseError>;
22
+ /** Get currently running runs */
23
+ readonly getRunning: () => Effect.Effect<readonly Run[], DatabaseError>;
24
+ /** Count runs by status */
25
+ readonly countByStatus: () => Effect.Effect<Record<RunStatus, number>, DatabaseError>;
26
+ }>;
27
+ export declare class RunRepository extends RunRepository_base {
28
+ }
29
+ export declare const RunRepositoryLive: Layer.Layer<RunRepository, never, SqliteClient>;
30
+ export {};
31
+ //# sourceMappingURL=run-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-repo.d.ts","sourceRoot":"","sources":["../../src/repo/run-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAU,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;;IAKxG,8BAA8B;qBACb,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC;IAE7E,uBAAuB;uBACJ,CAAC,EAAE,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,aAAa,CAAC;IAE1E,2BAA2B;2BACJ,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,aAAa,CAAC;IAEvF,0BAA0B;2BACH,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,aAAa,CAAC;IAE1F,sBAAsB;yBACD,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,aAAa,CAAC;IAEpF,mBAAmB;qBACF,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;IAEzF,8BAA8B;uBACX,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;IAExG,2BAA2B;mBACZ,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;IAEzG,iCAAiC;yBACZ,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,aAAa,CAAC;IAEvE,2BAA2B;4BACH,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC;;AA/BzF,qBAAa,aAAc,SAAQ,kBAiChC;CAAG;AAEN,eAAO,MAAM,iBAAiB,iDA6K7B,CAAA"}
@@ -0,0 +1,132 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { SqliteClient } from "../db.js";
3
+ import { DatabaseError } from "../errors.js";
4
+ import { rowToRun, generateRunId } from "../mappers/run.js";
5
+ export class RunRepository extends Context.Tag("RunRepository")() {
6
+ }
7
+ export const RunRepositoryLive = Layer.effect(RunRepository, Effect.gen(function* () {
8
+ const db = yield* SqliteClient;
9
+ return {
10
+ create: (input) => Effect.try({
11
+ try: () => {
12
+ const id = generateRunId();
13
+ const now = new Date().toISOString();
14
+ db.prepare(`
15
+ INSERT INTO runs (id, task_id, agent, started_at, status, pid, transcript_path, context_injected, metadata)
16
+ VALUES (?, ?, ?, ?, 'running', ?, ?, ?, ?)
17
+ `).run(id, input.taskId ?? null, input.agent, now, input.pid ?? null, input.transcriptPath ?? null, input.contextInjected ?? null, JSON.stringify(input.metadata ?? {}));
18
+ const row = db.prepare("SELECT * FROM runs WHERE id = ?").get(id);
19
+ return rowToRun(row);
20
+ },
21
+ catch: (cause) => new DatabaseError({ cause })
22
+ }),
23
+ findById: (id) => Effect.try({
24
+ try: () => {
25
+ const row = db.prepare("SELECT * FROM runs WHERE id = ?").get(id);
26
+ return row ? rowToRun(row) : null;
27
+ },
28
+ catch: (cause) => new DatabaseError({ cause })
29
+ }),
30
+ findByTaskId: (taskId) => Effect.try({
31
+ try: () => {
32
+ const rows = db.prepare("SELECT * FROM runs WHERE task_id = ? ORDER BY started_at DESC").all(taskId);
33
+ return rows.map(rowToRun);
34
+ },
35
+ catch: (cause) => new DatabaseError({ cause })
36
+ }),
37
+ findByStatus: (status) => Effect.try({
38
+ try: () => {
39
+ const rows = db.prepare("SELECT * FROM runs WHERE status = ? ORDER BY started_at DESC").all(status);
40
+ return rows.map(rowToRun);
41
+ },
42
+ catch: (cause) => new DatabaseError({ cause })
43
+ }),
44
+ findRecent: (limit) => Effect.try({
45
+ try: () => {
46
+ const rows = db.prepare("SELECT * FROM runs ORDER BY started_at DESC LIMIT ?").all(limit);
47
+ return rows.map(rowToRun);
48
+ },
49
+ catch: (cause) => new DatabaseError({ cause })
50
+ }),
51
+ update: (id, input) => Effect.try({
52
+ try: () => {
53
+ const updates = [];
54
+ const values = [];
55
+ if (input.status !== undefined) {
56
+ updates.push("status = ?");
57
+ values.push(input.status);
58
+ }
59
+ if (input.endedAt !== undefined) {
60
+ updates.push("ended_at = ?");
61
+ values.push(input.endedAt.toISOString());
62
+ }
63
+ if (input.exitCode !== undefined) {
64
+ updates.push("exit_code = ?");
65
+ values.push(input.exitCode);
66
+ }
67
+ if (input.summary !== undefined) {
68
+ updates.push("summary = ?");
69
+ values.push(input.summary);
70
+ }
71
+ if (input.errorMessage !== undefined) {
72
+ updates.push("error_message = ?");
73
+ values.push(input.errorMessage);
74
+ }
75
+ if (input.transcriptPath !== undefined) {
76
+ updates.push("transcript_path = ?");
77
+ values.push(input.transcriptPath);
78
+ }
79
+ if (updates.length === 0)
80
+ return;
81
+ values.push(id);
82
+ db.prepare(`UPDATE runs SET ${updates.join(", ")} WHERE id = ?`).run(...values);
83
+ },
84
+ catch: (cause) => new DatabaseError({ cause })
85
+ }),
86
+ complete: (id, exitCode, summary) => Effect.try({
87
+ try: () => {
88
+ db.prepare(`
89
+ UPDATE runs
90
+ SET status = 'completed', ended_at = ?, exit_code = ?, summary = ?
91
+ WHERE id = ?
92
+ `).run(new Date().toISOString(), exitCode, summary ?? null, id);
93
+ },
94
+ catch: (cause) => new DatabaseError({ cause })
95
+ }),
96
+ fail: (id, errorMessage, exitCode) => Effect.try({
97
+ try: () => {
98
+ db.prepare(`
99
+ UPDATE runs
100
+ SET status = 'failed', ended_at = ?, exit_code = ?, error_message = ?
101
+ WHERE id = ?
102
+ `).run(new Date().toISOString(), exitCode ?? null, errorMessage, id);
103
+ },
104
+ catch: (cause) => new DatabaseError({ cause })
105
+ }),
106
+ getRunning: () => Effect.try({
107
+ try: () => {
108
+ const rows = db.prepare("SELECT * FROM runs WHERE status = 'running' ORDER BY started_at DESC").all();
109
+ return rows.map(rowToRun);
110
+ },
111
+ catch: (cause) => new DatabaseError({ cause })
112
+ }),
113
+ countByStatus: () => Effect.try({
114
+ try: () => {
115
+ const rows = db.prepare("SELECT status, COUNT(*) as count FROM runs GROUP BY status").all();
116
+ const counts = {
117
+ running: 0,
118
+ completed: 0,
119
+ failed: 0,
120
+ timeout: 0,
121
+ cancelled: 0
122
+ };
123
+ for (const row of rows) {
124
+ counts[row.status] = row.count;
125
+ }
126
+ return counts;
127
+ },
128
+ catch: (cause) => new DatabaseError({ cause })
129
+ })
130
+ };
131
+ }));
132
+ //# sourceMappingURL=run-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-repo.js","sourceRoot":"","sources":["../../src/repo/run-repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { SqliteClient } from "../db.js";
3
+ import { DatabaseError } from "../errors.js";
4
+ import type { Task, TaskId, TaskFilter } from "@jamesaphoenix/tx-types";
5
+ declare const TaskRepository_base: Context.TagClass<TaskRepository, "TaskRepository", {
6
+ readonly findById: (id: string) => Effect.Effect<Task | null, DatabaseError>;
7
+ readonly findByIds: (ids: readonly string[]) => Effect.Effect<readonly Task[], DatabaseError>;
8
+ readonly findAll: (filter?: TaskFilter) => Effect.Effect<readonly Task[], DatabaseError>;
9
+ readonly findByParent: (parentId: string | null) => Effect.Effect<readonly Task[], DatabaseError>;
10
+ readonly getChildIds: (id: string) => Effect.Effect<readonly TaskId[], DatabaseError>;
11
+ readonly getChildIdsForMany: (ids: readonly string[]) => Effect.Effect<Map<string, readonly TaskId[]>, DatabaseError>;
12
+ readonly insert: (task: Task) => Effect.Effect<void, DatabaseError>;
13
+ readonly update: (task: Task) => Effect.Effect<void, DatabaseError>;
14
+ readonly remove: (id: string) => Effect.Effect<void, DatabaseError>;
15
+ readonly count: (filter?: TaskFilter) => Effect.Effect<number, DatabaseError>;
16
+ }>;
17
+ export declare class TaskRepository extends TaskRepository_base {
18
+ }
19
+ export declare const TaskRepositoryLive: Layer.Layer<TaskRepository, never, SqliteClient>;
20
+ export {};
21
+ //# sourceMappingURL=task-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-repo.d.ts","sourceRoot":"","sources":["../../src/repo/task-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAW,MAAM,yBAAyB,CAAA;;uBAKzD,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,aAAa,CAAC;wBACxD,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;sBAC3E,CAAC,MAAM,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;2BACjE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;0BAC3E,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,aAAa,CAAC;iCACxD,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC;qBACpG,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;qBAClD,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;qBAClD,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;oBACnD,CAAC,MAAM,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;;AAZjF,qBAAa,cAAe,SAAQ,mBAcjC;CAAG;AAEN,eAAO,MAAM,kBAAkB,kDA2N9B,CAAA"}
@@ -0,0 +1,169 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { SqliteClient } from "../db.js";
3
+ import { DatabaseError } from "../errors.js";
4
+ import { rowToTask } from "../mappers/task.js";
5
+ export class TaskRepository extends Context.Tag("TaskRepository")() {
6
+ }
7
+ export const TaskRepositoryLive = Layer.effect(TaskRepository, Effect.gen(function* () {
8
+ const db = yield* SqliteClient;
9
+ return {
10
+ findById: (id) => Effect.try({
11
+ try: () => {
12
+ const row = db.prepare("SELECT * FROM tasks WHERE id = ?").get(id);
13
+ return row ? rowToTask(row) : null;
14
+ },
15
+ catch: (cause) => new DatabaseError({ cause })
16
+ }),
17
+ findByIds: (ids) => Effect.try({
18
+ try: () => {
19
+ if (ids.length === 0)
20
+ return [];
21
+ const placeholders = ids.map(() => "?").join(",");
22
+ const rows = db.prepare(`SELECT * FROM tasks WHERE id IN (${placeholders})`).all(...ids);
23
+ return rows.map(rowToTask);
24
+ },
25
+ catch: (cause) => new DatabaseError({ cause })
26
+ }),
27
+ findAll: (filter) => Effect.try({
28
+ try: () => {
29
+ const conditions = [];
30
+ const params = [];
31
+ if (filter?.status) {
32
+ if (Array.isArray(filter.status)) {
33
+ const placeholders = filter.status.map(() => "?").join(",");
34
+ conditions.push(`status IN (${placeholders})`);
35
+ params.push(...filter.status);
36
+ }
37
+ else {
38
+ conditions.push("status = ?");
39
+ params.push(filter.status);
40
+ }
41
+ }
42
+ if (filter?.parentId !== undefined) {
43
+ if (filter.parentId === null) {
44
+ conditions.push("parent_id IS NULL");
45
+ }
46
+ else {
47
+ conditions.push("parent_id = ?");
48
+ params.push(filter.parentId);
49
+ }
50
+ }
51
+ // Search filter: case-insensitive search in title and description
52
+ if (filter?.search) {
53
+ const searchPattern = `%${filter.search}%`;
54
+ conditions.push("(title LIKE ? COLLATE NOCASE OR description LIKE ? COLLATE NOCASE)");
55
+ params.push(searchPattern, searchPattern);
56
+ }
57
+ // Cursor-based pagination: fetch tasks after the cursor position
58
+ // Order is score DESC, id ASC, so "after cursor" means:
59
+ // (score < cursor.score) OR (score = cursor.score AND id > cursor.id)
60
+ if (filter?.cursor) {
61
+ conditions.push("(score < ? OR (score = ? AND id > ?))");
62
+ params.push(filter.cursor.score, filter.cursor.score, filter.cursor.id);
63
+ }
64
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
65
+ const limit = filter?.limit ? `LIMIT ${filter.limit}` : "";
66
+ const sql = `SELECT * FROM tasks ${where} ORDER BY score DESC, id ASC ${limit}`;
67
+ const rows = db.prepare(sql).all(...params);
68
+ return rows.map(rowToTask);
69
+ },
70
+ catch: (cause) => new DatabaseError({ cause })
71
+ }),
72
+ findByParent: (parentId) => Effect.try({
73
+ try: () => {
74
+ const rows = parentId === null
75
+ ? db.prepare("SELECT * FROM tasks WHERE parent_id IS NULL ORDER BY score DESC").all()
76
+ : db.prepare("SELECT * FROM tasks WHERE parent_id = ? ORDER BY score DESC").all(parentId);
77
+ return rows.map(rowToTask);
78
+ },
79
+ catch: (cause) => new DatabaseError({ cause })
80
+ }),
81
+ getChildIds: (id) => Effect.try({
82
+ try: () => {
83
+ const rows = db.prepare("SELECT id FROM tasks WHERE parent_id = ?").all(id);
84
+ return rows.map(r => r.id);
85
+ },
86
+ catch: (cause) => new DatabaseError({ cause })
87
+ }),
88
+ getChildIdsForMany: (ids) => Effect.try({
89
+ try: () => {
90
+ const result = new Map();
91
+ if (ids.length === 0)
92
+ return result;
93
+ const placeholders = ids.map(() => "?").join(",");
94
+ const rows = db.prepare(`SELECT id, parent_id FROM tasks WHERE parent_id IN (${placeholders})`).all(...ids);
95
+ // Initialize all requested IDs with empty arrays
96
+ for (const id of ids) {
97
+ result.set(id, []);
98
+ }
99
+ // Group by parent_id
100
+ for (const row of rows) {
101
+ const existing = result.get(row.parent_id) ?? [];
102
+ result.set(row.parent_id, [...existing, row.id]);
103
+ }
104
+ return result;
105
+ },
106
+ catch: (cause) => new DatabaseError({ cause })
107
+ }),
108
+ insert: (task) => Effect.try({
109
+ try: () => {
110
+ db.prepare(`INSERT INTO tasks (id, title, description, status, parent_id, score, created_at, updated_at, completed_at, metadata)
111
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(task.id, task.title, task.description, task.status, task.parentId, task.score, task.createdAt.toISOString(), task.updatedAt.toISOString(), task.completedAt?.toISOString() ?? null, JSON.stringify(task.metadata));
112
+ },
113
+ catch: (cause) => new DatabaseError({ cause })
114
+ }),
115
+ update: (task) => Effect.try({
116
+ try: () => {
117
+ db.prepare(`UPDATE tasks SET
118
+ title = ?, description = ?, status = ?, parent_id = ?,
119
+ score = ?, updated_at = ?, completed_at = ?, metadata = ?
120
+ WHERE id = ?`).run(task.title, task.description, task.status, task.parentId, task.score, task.updatedAt.toISOString(), task.completedAt?.toISOString() ?? null, JSON.stringify(task.metadata), task.id);
121
+ },
122
+ catch: (cause) => new DatabaseError({ cause })
123
+ }),
124
+ remove: (id) => Effect.try({
125
+ try: () => {
126
+ db.prepare("DELETE FROM tasks WHERE id = ?").run(id);
127
+ },
128
+ catch: (cause) => new DatabaseError({ cause })
129
+ }),
130
+ count: (filter) => Effect.try({
131
+ try: () => {
132
+ const conditions = [];
133
+ const params = [];
134
+ if (filter?.status) {
135
+ if (Array.isArray(filter.status)) {
136
+ const placeholders = filter.status.map(() => "?").join(",");
137
+ conditions.push(`status IN (${placeholders})`);
138
+ params.push(...filter.status);
139
+ }
140
+ else {
141
+ conditions.push("status = ?");
142
+ params.push(filter.status);
143
+ }
144
+ }
145
+ if (filter?.parentId !== undefined) {
146
+ if (filter.parentId === null) {
147
+ conditions.push("parent_id IS NULL");
148
+ }
149
+ else {
150
+ conditions.push("parent_id = ?");
151
+ params.push(filter.parentId);
152
+ }
153
+ }
154
+ // Search filter for count (same as findAll)
155
+ if (filter?.search) {
156
+ const searchPattern = `%${filter.search}%`;
157
+ conditions.push("(title LIKE ? COLLATE NOCASE OR description LIKE ? COLLATE NOCASE)");
158
+ params.push(searchPattern, searchPattern);
159
+ }
160
+ // Note: cursor is intentionally not included in count - we want total matching records
161
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
162
+ const result = db.prepare(`SELECT COUNT(*) as cnt FROM tasks ${where}`).get(...params);
163
+ return result.cnt;
164
+ },
165
+ catch: (cause) => new DatabaseError({ cause })
166
+ })
167
+ };
168
+ }));
169
+ //# sourceMappingURL=task-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-repo.js","sourceRoot":"","sources":["../../src/repo/task-repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { SqliteClient } from "../db.js";
3
+ import { DatabaseError } from "../errors.js";
4
+ import type { TrackedProject, CreateTrackedProjectInput } from "@jamesaphoenix/tx-types";
5
+ declare const TrackedProjectRepository_base: Context.TagClass<TrackedProjectRepository, "TrackedProjectRepository", {
6
+ readonly insert: (input: CreateTrackedProjectInput) => Effect.Effect<TrackedProject, DatabaseError>;
7
+ readonly findAll: () => Effect.Effect<readonly TrackedProject[], DatabaseError>;
8
+ readonly findByPath: (projectPath: string) => Effect.Effect<TrackedProject | null, DatabaseError>;
9
+ readonly delete: (id: number) => Effect.Effect<boolean, DatabaseError>;
10
+ readonly setEnabled: (id: number, enabled: boolean) => Effect.Effect<TrackedProject | null, DatabaseError>;
11
+ }>;
12
+ export declare class TrackedProjectRepository extends TrackedProjectRepository_base {
13
+ }
14
+ export declare const TrackedProjectRepositoryLive: Layer.Layer<TrackedProjectRepository, never, SqliteClient>;
15
+ export {};
16
+ //# sourceMappingURL=tracked-project-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracked-project-repo.d.ts","sourceRoot":"","sources":["../../src/repo/tracked-project-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EACV,cAAc,EAEd,yBAAyB,EAC1B,MAAM,yBAAyB,CAAA;;qBAKX,CAAC,KAAK,EAAE,yBAAyB,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC;sBACjF,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,cAAc,EAAE,EAAE,aAAa,CAAC;yBAC1D,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,aAAa,CAAC;qBAChF,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;yBACjD,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,aAAa,CAAC;;AAP9G,qBAAa,wBAAyB,SAAQ,6BAS3C;CAAG;AAEN,eAAO,MAAM,4BAA4B,4DA+ExC,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { SqliteClient } from "../db.js";
3
+ import { DatabaseError } from "../errors.js";
4
+ import { rowToTrackedProject } from "../mappers/tracked-project.js";
5
+ export class TrackedProjectRepository extends Context.Tag("TrackedProjectRepository")() {
6
+ }
7
+ export const TrackedProjectRepositoryLive = Layer.effect(TrackedProjectRepository, Effect.gen(function* () {
8
+ const db = yield* SqliteClient;
9
+ return {
10
+ insert: (input) => Effect.try({
11
+ try: () => {
12
+ const result = db.prepare(`INSERT INTO daemon_tracked_projects
13
+ (project_path, project_id, source_type)
14
+ VALUES (?, ?, ?)`).run(input.projectPath, input.projectId ?? null, input.sourceType ?? "claude");
15
+ const row = db.prepare("SELECT * FROM daemon_tracked_projects WHERE id = ?").get(result.lastInsertRowid);
16
+ return rowToTrackedProject(row);
17
+ },
18
+ catch: (cause) => new DatabaseError({ cause })
19
+ }),
20
+ findAll: () => Effect.try({
21
+ try: () => {
22
+ const rows = db.prepare("SELECT * FROM daemon_tracked_projects ORDER BY added_at DESC").all();
23
+ return rows.map(rowToTrackedProject);
24
+ },
25
+ catch: (cause) => new DatabaseError({ cause })
26
+ }),
27
+ findByPath: (projectPath) => Effect.try({
28
+ try: () => {
29
+ const row = db.prepare("SELECT * FROM daemon_tracked_projects WHERE project_path = ?").get(projectPath);
30
+ return row ? rowToTrackedProject(row) : null;
31
+ },
32
+ catch: (cause) => new DatabaseError({ cause })
33
+ }),
34
+ delete: (id) => Effect.try({
35
+ try: () => {
36
+ const result = db.prepare("DELETE FROM daemon_tracked_projects WHERE id = ?").run(id);
37
+ return result.changes > 0;
38
+ },
39
+ catch: (cause) => new DatabaseError({ cause })
40
+ }),
41
+ setEnabled: (id, enabled) => Effect.try({
42
+ try: () => {
43
+ const result = db.prepare("UPDATE daemon_tracked_projects SET enabled = ? WHERE id = ?").run(enabled ? 1 : 0, id);
44
+ if (result.changes === 0) {
45
+ return null;
46
+ }
47
+ const row = db.prepare("SELECT * FROM daemon_tracked_projects WHERE id = ?").get(id);
48
+ return rowToTrackedProject(row);
49
+ },
50
+ catch: (cause) => new DatabaseError({ cause })
51
+ })
52
+ };
53
+ }));
54
+ //# sourceMappingURL=tracked-project-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracked-project-repo.js","sourceRoot":"","sources":["../../src/repo/tracked-project-repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { SqliteClient } from "../db.js";
3
+ import { DatabaseError } from "../errors.js";
4
+ import type { Worker, WorkerStatus } from "../schemas/worker.js";
5
+ declare const WorkerRepository_base: Context.TagClass<WorkerRepository, "WorkerRepository", {
6
+ readonly insert: (worker: Worker) => Effect.Effect<void, DatabaseError>;
7
+ readonly update: (worker: Worker) => Effect.Effect<void, DatabaseError>;
8
+ readonly delete: (id: string) => Effect.Effect<boolean, DatabaseError>;
9
+ readonly findById: (id: string) => Effect.Effect<Worker | null, DatabaseError>;
10
+ readonly findByStatus: (status: WorkerStatus) => Effect.Effect<readonly Worker[], DatabaseError>;
11
+ readonly findByLastHeartbeatBefore: (threshold: Date) => Effect.Effect<readonly Worker[], DatabaseError>;
12
+ readonly countByStatus: (status: WorkerStatus) => Effect.Effect<number, DatabaseError>;
13
+ readonly findAll: () => Effect.Effect<readonly Worker[], DatabaseError>;
14
+ }>;
15
+ export declare class WorkerRepository extends WorkerRepository_base {
16
+ }
17
+ export declare const WorkerRepositoryLive: Layer.Layer<WorkerRepository, never, SqliteClient>;
18
+ export {};
19
+ //# sourceMappingURL=worker-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-repo.d.ts","sourceRoot":"","sources":["../../src/repo/worker-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;;qBAK3C,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;qBACtD,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;qBACtD,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;uBACnD,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,aAAa,CAAC;2BACvD,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,aAAa,CAAC;wCAC5D,CAAC,SAAS,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,aAAa,CAAC;4BAChF,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;sBACpE,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,aAAa,CAAC;;AAV3E,qBAAa,gBAAiB,SAAQ,qBAYnC;CAAG;AAEN,eAAO,MAAM,oBAAoB,oDAqHhC,CAAA"}