@jamesaphoenix/tx-core 0.4.2 → 0.4.4

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 (336) 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 +108 -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/attempt.d.ts +3 -1
  23. package/dist/mappers/attempt.d.ts.map +1 -1
  24. package/dist/mappers/attempt.js +23 -9
  25. package/dist/mappers/attempt.js.map +1 -1
  26. package/dist/mappers/claim.d.ts +1 -1
  27. package/dist/mappers/claim.d.ts.map +1 -1
  28. package/dist/mappers/claim.js +11 -4
  29. package/dist/mappers/claim.js.map +1 -1
  30. package/dist/mappers/deduplication.d.ts +13 -1
  31. package/dist/mappers/deduplication.d.ts.map +1 -1
  32. package/dist/mappers/deduplication.js +22 -3
  33. package/dist/mappers/deduplication.js.map +1 -1
  34. package/dist/mappers/doc.d.ts +24 -0
  35. package/dist/mappers/doc.d.ts.map +1 -0
  36. package/dist/mappers/doc.js +161 -0
  37. package/dist/mappers/doc.js.map +1 -0
  38. package/dist/mappers/file-learning.d.ts.map +1 -1
  39. package/dist/mappers/file-learning.js +2 -1
  40. package/dist/mappers/file-learning.js.map +1 -1
  41. package/dist/mappers/index.d.ts +6 -7
  42. package/dist/mappers/index.d.ts.map +1 -1
  43. package/dist/mappers/index.js +10 -12
  44. package/dist/mappers/index.js.map +1 -1
  45. package/dist/mappers/learning.d.ts +9 -1
  46. package/dist/mappers/learning.d.ts.map +1 -1
  47. package/dist/mappers/learning.js +94 -14
  48. package/dist/mappers/learning.js.map +1 -1
  49. package/dist/mappers/orchestrator-state.d.ts +1 -1
  50. package/dist/mappers/orchestrator-state.d.ts.map +1 -1
  51. package/dist/mappers/orchestrator-state.js +31 -5
  52. package/dist/mappers/orchestrator-state.js.map +1 -1
  53. package/dist/mappers/parse-date.d.ts +11 -0
  54. package/dist/mappers/parse-date.d.ts.map +1 -0
  55. package/dist/mappers/parse-date.js +18 -0
  56. package/dist/mappers/parse-date.js.map +1 -0
  57. package/dist/mappers/run.d.ts +14 -4
  58. package/dist/mappers/run.d.ts.map +1 -1
  59. package/dist/mappers/run.js +49 -18
  60. package/dist/mappers/run.js.map +1 -1
  61. package/dist/mappers/task.d.ts +5 -1
  62. package/dist/mappers/task.d.ts.map +1 -1
  63. package/dist/mappers/task.js +66 -16
  64. package/dist/mappers/task.js.map +1 -1
  65. package/dist/mappers/tracked-project.d.ts +3 -1
  66. package/dist/mappers/tracked-project.d.ts.map +1 -1
  67. package/dist/mappers/tracked-project.js +23 -9
  68. package/dist/mappers/tracked-project.js.map +1 -1
  69. package/dist/mappers/worker.d.ts +1 -1
  70. package/dist/mappers/worker.d.ts.map +1 -1
  71. package/dist/mappers/worker.js +44 -6
  72. package/dist/mappers/worker.js.map +1 -1
  73. package/dist/repo/attempt-repo.d.ts +2 -2
  74. package/dist/repo/attempt-repo.d.ts.map +1 -1
  75. package/dist/repo/attempt-repo.js +16 -6
  76. package/dist/repo/attempt-repo.js.map +1 -1
  77. package/dist/repo/claim-repo.d.ts +46 -2
  78. package/dist/repo/claim-repo.d.ts.map +1 -1
  79. package/dist/repo/claim-repo.js +113 -6
  80. package/dist/repo/claim-repo.js.map +1 -1
  81. package/dist/repo/deduplication-repo.d.ts +9 -1
  82. package/dist/repo/deduplication-repo.d.ts.map +1 -1
  83. package/dist/repo/deduplication-repo.js +46 -9
  84. package/dist/repo/deduplication-repo.js.map +1 -1
  85. package/dist/repo/dep-repo.d.ts +27 -3
  86. package/dist/repo/dep-repo.d.ts.map +1 -1
  87. package/dist/repo/dep-repo.js +166 -39
  88. package/dist/repo/dep-repo.js.map +1 -1
  89. package/dist/repo/doc-repo.d.ts +59 -0
  90. package/dist/repo/doc-repo.d.ts.map +1 -0
  91. package/dist/repo/doc-repo.js +276 -0
  92. package/dist/repo/doc-repo.js.map +1 -0
  93. package/dist/repo/file-learning-repo.d.ts +3 -3
  94. package/dist/repo/file-learning-repo.d.ts.map +1 -1
  95. package/dist/repo/file-learning-repo.js +19 -8
  96. package/dist/repo/file-learning-repo.js.map +1 -1
  97. package/dist/repo/index.d.ts +4 -6
  98. package/dist/repo/index.d.ts.map +1 -1
  99. package/dist/repo/index.js +3 -5
  100. package/dist/repo/index.js.map +1 -1
  101. package/dist/repo/learning-repo.d.ts +10 -3
  102. package/dist/repo/learning-repo.d.ts.map +1 -1
  103. package/dist/repo/learning-repo.js +68 -11
  104. package/dist/repo/learning-repo.js.map +1 -1
  105. package/dist/repo/orchestrator-state-repo.d.ts.map +1 -1
  106. package/dist/repo/orchestrator-state-repo.js +8 -1
  107. package/dist/repo/orchestrator-state-repo.js.map +1 -1
  108. package/dist/repo/run-repo.d.ts +3 -3
  109. package/dist/repo/run-repo.d.ts.map +1 -1
  110. package/dist/repo/run-repo.js +40 -19
  111. package/dist/repo/run-repo.js.map +1 -1
  112. package/dist/repo/task-repo.d.ts +14 -3
  113. package/dist/repo/task-repo.d.ts.map +1 -1
  114. package/dist/repo/task-repo.js +194 -20
  115. package/dist/repo/task-repo.js.map +1 -1
  116. package/dist/repo/tracked-project-repo.d.ts.map +1 -1
  117. package/dist/repo/tracked-project-repo.js +15 -1
  118. package/dist/repo/tracked-project-repo.js.map +1 -1
  119. package/dist/repo/worker-repo.d.ts +3 -2
  120. package/dist/repo/worker-repo.d.ts.map +1 -1
  121. package/dist/repo/worker-repo.js +54 -8
  122. package/dist/repo/worker-repo.js.map +1 -1
  123. package/dist/schemas/sync.js +2 -2
  124. package/dist/schemas/sync.js.map +1 -1
  125. package/dist/schemas/worker.d.ts +1 -0
  126. package/dist/schemas/worker.d.ts.map +1 -1
  127. package/dist/schemas/worker.js +1 -0
  128. package/dist/schemas/worker.js.map +1 -1
  129. package/dist/services/agent-service.d.ts +57 -0
  130. package/dist/services/agent-service.d.ts.map +1 -0
  131. package/dist/services/agent-service.js +81 -0
  132. package/dist/services/agent-service.js.map +1 -0
  133. package/dist/services/attempt-service.d.ts.map +1 -1
  134. package/dist/services/attempt-service.js +1 -4
  135. package/dist/services/attempt-service.js.map +1 -1
  136. package/dist/services/auto-sync-service.d.ts.map +1 -1
  137. package/dist/services/auto-sync-service.js +18 -10
  138. package/dist/services/auto-sync-service.js.map +1 -1
  139. package/dist/services/claim-service.d.ts +8 -2
  140. package/dist/services/claim-service.d.ts.map +1 -1
  141. package/dist/services/claim-service.js +37 -23
  142. package/dist/services/claim-service.js.map +1 -1
  143. package/dist/services/cycle-scan-service.d.ts +32 -0
  144. package/dist/services/cycle-scan-service.d.ts.map +1 -0
  145. package/dist/services/cycle-scan-service.js +546 -0
  146. package/dist/services/cycle-scan-service.js.map +1 -0
  147. package/dist/services/daemon-service.d.ts +40 -2
  148. package/dist/services/daemon-service.d.ts.map +1 -1
  149. package/dist/services/daemon-service.js +199 -52
  150. package/dist/services/daemon-service.js.map +1 -1
  151. package/dist/services/deduplication-service.d.ts +8 -4
  152. package/dist/services/deduplication-service.d.ts.map +1 -1
  153. package/dist/services/deduplication-service.js +79 -25
  154. package/dist/services/deduplication-service.js.map +1 -1
  155. package/dist/services/dep-service.d.ts +2 -2
  156. package/dist/services/dep-service.d.ts.map +1 -1
  157. package/dist/services/dep-service.js +9 -5
  158. package/dist/services/dep-service.js.map +1 -1
  159. package/dist/services/diversifier-service.d.ts +2 -1
  160. package/dist/services/diversifier-service.d.ts.map +1 -1
  161. package/dist/services/diversifier-service.js +37 -43
  162. package/dist/services/diversifier-service.js.map +1 -1
  163. package/dist/services/doc-service.d.ts +49 -0
  164. package/dist/services/doc-service.d.ts.map +1 -0
  165. package/dist/services/doc-service.js +605 -0
  166. package/dist/services/doc-service.js.map +1 -0
  167. package/dist/services/embedding-service.d.ts +66 -2
  168. package/dist/services/embedding-service.d.ts.map +1 -1
  169. package/dist/services/embedding-service.js +138 -24
  170. package/dist/services/embedding-service.js.map +1 -1
  171. package/dist/services/file-learning-service.d.ts.map +1 -1
  172. package/dist/services/file-learning-service.js +8 -7
  173. package/dist/services/file-learning-service.js.map +1 -1
  174. package/dist/services/file-watcher-service.d.ts.map +1 -1
  175. package/dist/services/file-watcher-service.js +58 -11
  176. package/dist/services/file-watcher-service.js.map +1 -1
  177. package/dist/services/hierarchy-service.d.ts +1 -1
  178. package/dist/services/hierarchy-service.d.ts.map +1 -1
  179. package/dist/services/hierarchy-service.js +50 -32
  180. package/dist/services/hierarchy-service.js.map +1 -1
  181. package/dist/services/index.d.ts +13 -15
  182. package/dist/services/index.d.ts.map +1 -1
  183. package/dist/services/index.js +13 -15
  184. package/dist/services/index.js.map +1 -1
  185. package/dist/services/learning-service.d.ts +3 -3
  186. package/dist/services/learning-service.d.ts.map +1 -1
  187. package/dist/services/learning-service.js +75 -42
  188. package/dist/services/learning-service.js.map +1 -1
  189. package/dist/services/llm-service.d.ts +62 -0
  190. package/dist/services/llm-service.d.ts.map +1 -0
  191. package/dist/services/llm-service.js +172 -0
  192. package/dist/services/llm-service.js.map +1 -0
  193. package/dist/services/migration-service.d.ts +1 -1
  194. package/dist/services/migration-service.d.ts.map +1 -1
  195. package/dist/services/migration-service.js +18 -7
  196. package/dist/services/migration-service.js.map +1 -1
  197. package/dist/services/orchestrator-service.d.ts +4 -3
  198. package/dist/services/orchestrator-service.d.ts.map +1 -1
  199. package/dist/services/orchestrator-service.js +66 -27
  200. package/dist/services/orchestrator-service.js.map +1 -1
  201. package/dist/services/query-expansion-service.d.ts +30 -9
  202. package/dist/services/query-expansion-service.d.ts.map +1 -1
  203. package/dist/services/query-expansion-service.js +54 -63
  204. package/dist/services/query-expansion-service.js.map +1 -1
  205. package/dist/services/ready-service.d.ts +21 -1
  206. package/dist/services/ready-service.d.ts.map +1 -1
  207. package/dist/services/ready-service.js +44 -21
  208. package/dist/services/ready-service.js.map +1 -1
  209. package/dist/services/retriever-service.d.ts +10 -10
  210. package/dist/services/retriever-service.d.ts.map +1 -1
  211. package/dist/services/retriever-service.js +53 -161
  212. package/dist/services/retriever-service.js.map +1 -1
  213. package/dist/services/sync-service.d.ts +17 -4
  214. package/dist/services/sync-service.d.ts.map +1 -1
  215. package/dist/services/sync-service.js +381 -116
  216. package/dist/services/sync-service.js.map +1 -1
  217. package/dist/services/task-service.d.ts +6 -4
  218. package/dist/services/task-service.d.ts.map +1 -1
  219. package/dist/services/task-service.js +165 -35
  220. package/dist/services/task-service.js.map +1 -1
  221. package/dist/services/tracing-service.d.ts +55 -0
  222. package/dist/services/tracing-service.d.ts.map +1 -0
  223. package/dist/services/tracing-service.js +99 -0
  224. package/dist/services/tracing-service.js.map +1 -0
  225. package/dist/services/transcript-adapter.d.ts +99 -0
  226. package/dist/services/transcript-adapter.d.ts.map +1 -0
  227. package/dist/services/transcript-adapter.js +283 -0
  228. package/dist/services/transcript-adapter.js.map +1 -0
  229. package/dist/services/validation-service.d.ts +85 -0
  230. package/dist/services/validation-service.d.ts.map +1 -0
  231. package/dist/services/validation-service.js +289 -0
  232. package/dist/services/validation-service.js.map +1 -0
  233. package/dist/services/worker-process.d.ts +23 -4
  234. package/dist/services/worker-process.d.ts.map +1 -1
  235. package/dist/services/worker-process.js +168 -72
  236. package/dist/services/worker-process.js.map +1 -1
  237. package/dist/services/worker-service.d.ts.map +1 -1
  238. package/dist/services/worker-service.js +7 -12
  239. package/dist/services/worker-service.js.map +1 -1
  240. package/dist/sync/claude-task-writer.d.ts +49 -0
  241. package/dist/sync/claude-task-writer.d.ts.map +1 -0
  242. package/dist/sync/claude-task-writer.js +135 -0
  243. package/dist/sync/claude-task-writer.js.map +1 -0
  244. package/dist/utils/doc-hash.d.ts +10 -0
  245. package/dist/utils/doc-hash.d.ts.map +1 -0
  246. package/dist/utils/doc-hash.js +14 -0
  247. package/dist/utils/doc-hash.js.map +1 -0
  248. package/dist/utils/doc-renderer.d.ts +44 -0
  249. package/dist/utils/doc-renderer.d.ts.map +1 -0
  250. package/dist/utils/doc-renderer.js +202 -0
  251. package/dist/utils/doc-renderer.js.map +1 -0
  252. package/dist/utils/math.d.ts +5 -1
  253. package/dist/utils/math.d.ts.map +1 -1
  254. package/dist/utils/math.js +12 -4
  255. package/dist/utils/math.js.map +1 -1
  256. package/dist/utils/sql.d.ts +9 -0
  257. package/dist/utils/sql.d.ts.map +1 -0
  258. package/dist/utils/sql.js +9 -0
  259. package/dist/utils/sql.js.map +1 -0
  260. package/dist/utils/toml-config.d.ts +22 -0
  261. package/dist/utils/toml-config.d.ts.map +1 -0
  262. package/dist/utils/toml-config.js +75 -0
  263. package/dist/utils/toml-config.js.map +1 -0
  264. package/dist/worker/hooks.d.ts +102 -0
  265. package/dist/worker/hooks.d.ts.map +1 -0
  266. package/dist/worker/hooks.js +11 -0
  267. package/dist/worker/hooks.js.map +1 -0
  268. package/dist/worker/index.d.ts +9 -0
  269. package/dist/worker/index.d.ts.map +1 -0
  270. package/dist/worker/index.js +8 -0
  271. package/dist/worker/index.js.map +1 -0
  272. package/dist/worker/run-worker.d.ts +33 -0
  273. package/dist/worker/run-worker.d.ts.map +1 -0
  274. package/dist/worker/run-worker.js +265 -0
  275. package/dist/worker/run-worker.js.map +1 -0
  276. package/package.json +14 -12
  277. package/dist/mappers/anchor.d.ts +0 -14
  278. package/dist/mappers/anchor.d.ts.map +0 -1
  279. package/dist/mappers/anchor.js +0 -38
  280. package/dist/mappers/anchor.js.map +0 -1
  281. package/dist/mappers/candidate.d.ts +0 -23
  282. package/dist/mappers/candidate.d.ts.map +0 -1
  283. package/dist/mappers/candidate.js +0 -53
  284. package/dist/mappers/candidate.js.map +0 -1
  285. package/dist/mappers/edge.d.ts +0 -10
  286. package/dist/mappers/edge.d.ts.map +0 -1
  287. package/dist/mappers/edge.js +0 -19
  288. package/dist/mappers/edge.js.map +0 -1
  289. package/dist/repo/anchor-repo.d.ts +0 -52
  290. package/dist/repo/anchor-repo.d.ts.map +0 -1
  291. package/dist/repo/anchor-repo.js +0 -204
  292. package/dist/repo/anchor-repo.js.map +0 -1
  293. package/dist/repo/candidate-repo.d.ts +0 -16
  294. package/dist/repo/candidate-repo.d.ts.map +0 -1
  295. package/dist/repo/candidate-repo.js +0 -143
  296. package/dist/repo/candidate-repo.js.map +0 -1
  297. package/dist/repo/edge-repo.d.ts +0 -26
  298. package/dist/repo/edge-repo.d.ts.map +0 -1
  299. package/dist/repo/edge-repo.js +0 -227
  300. package/dist/repo/edge-repo.js.map +0 -1
  301. package/dist/services/anchor-service.d.ts +0 -147
  302. package/dist/services/anchor-service.d.ts.map +0 -1
  303. package/dist/services/anchor-service.js +0 -540
  304. package/dist/services/anchor-service.js.map +0 -1
  305. package/dist/services/anchor-verification.d.ts +0 -94
  306. package/dist/services/anchor-verification.d.ts.map +0 -1
  307. package/dist/services/anchor-verification.js +0 -617
  308. package/dist/services/anchor-verification.js.map +0 -1
  309. package/dist/services/ast-grep-service.d.ts +0 -58
  310. package/dist/services/ast-grep-service.d.ts.map +0 -1
  311. package/dist/services/ast-grep-service.js +0 -356
  312. package/dist/services/ast-grep-service.js.map +0 -1
  313. package/dist/services/candidate-extractor-service.d.ts +0 -56
  314. package/dist/services/candidate-extractor-service.d.ts.map +0 -1
  315. package/dist/services/candidate-extractor-service.js +0 -365
  316. package/dist/services/candidate-extractor-service.js.map +0 -1
  317. package/dist/services/edge-service.d.ts +0 -78
  318. package/dist/services/edge-service.d.ts.map +0 -1
  319. package/dist/services/edge-service.js +0 -158
  320. package/dist/services/edge-service.js.map +0 -1
  321. package/dist/services/feedback-tracker.d.ts +0 -64
  322. package/dist/services/feedback-tracker.d.ts.map +0 -1
  323. package/dist/services/feedback-tracker.js +0 -110
  324. package/dist/services/feedback-tracker.js.map +0 -1
  325. package/dist/services/graph-expansion.d.ts +0 -155
  326. package/dist/services/graph-expansion.d.ts.map +0 -1
  327. package/dist/services/graph-expansion.js +0 -466
  328. package/dist/services/graph-expansion.js.map +0 -1
  329. package/dist/services/promotion-service.d.ts +0 -67
  330. package/dist/services/promotion-service.d.ts.map +0 -1
  331. package/dist/services/promotion-service.js +0 -151
  332. package/dist/services/promotion-service.js.map +0 -1
  333. package/dist/services/swarm-verification.d.ts +0 -104
  334. package/dist/services/swarm-verification.d.ts.map +0 -1
  335. package/dist/services/swarm-verification.js +0 -400
  336. package/dist/services/swarm-verification.js.map +0 -1
@@ -1,466 +0,0 @@
1
- import { Context, Effect, Layer } from "effect";
2
- import { EdgeService } from "./edge-service.js";
3
- import { LearningRepository } from "../repo/learning-repo.js";
4
- import { AnchorRepository } from "../repo/anchor-repo.js";
5
- import { ValidationError } from "../errors.js";
6
- import { EDGE_TYPES } from "@jamesaphoenix/tx-types";
7
- export class GraphExpansionService extends Context.Tag("GraphExpansionService")() {
8
- }
9
- /**
10
- * Noop implementation that returns seeds without expansion.
11
- * Used when graph expansion is disabled or for testing.
12
- */
13
- export const GraphExpansionServiceNoop = Layer.succeed(GraphExpansionService, {
14
- expand: (seeds) => Effect.succeed({
15
- seeds: seeds.map(s => ({
16
- learning: s.learning,
17
- hops: 0,
18
- decayedScore: s.score,
19
- path: [s.learning.id],
20
- sourceEdge: null,
21
- edgeWeight: null
22
- })),
23
- expanded: [],
24
- all: seeds.map(s => ({
25
- learning: s.learning,
26
- hops: 0,
27
- decayedScore: s.score,
28
- path: [s.learning.id],
29
- sourceEdge: null,
30
- edgeWeight: null
31
- })),
32
- stats: {
33
- seedCount: seeds.length,
34
- expandedCount: 0,
35
- maxDepthReached: 0,
36
- nodesVisited: seeds.length
37
- }
38
- }),
39
- expandFromFiles: (files) => Effect.succeed({
40
- anchored: [],
41
- expanded: [],
42
- all: [],
43
- stats: {
44
- inputFileCount: files.length,
45
- anchoredCount: 0,
46
- expandedCount: 0,
47
- maxDepthReached: 0,
48
- filesVisited: files.length
49
- }
50
- })
51
- });
52
- /**
53
- * Default expansion options.
54
- */
55
- const DEFAULT_OPTIONS = {
56
- depth: 2,
57
- decayFactor: 0.7,
58
- maxNodes: 100,
59
- };
60
- /**
61
- * Type guard to check if edgeTypes is a simple array (backwards compatibility).
62
- */
63
- const isSimpleEdgeTypeArray = (edgeTypes) => {
64
- if (edgeTypes === undefined)
65
- return true;
66
- return Array.isArray(edgeTypes);
67
- };
68
- /**
69
- * Validate an EdgeTypeFilter for conflicting include/exclude entries.
70
- * Returns a ValidationError if the same edge type appears in both include and exclude.
71
- */
72
- const validateEdgeTypeFilter = (filter, context = "edgeTypes") => Effect.gen(function* () {
73
- const { include, exclude, perHop } = filter;
74
- // Check for overlapping types in include and exclude
75
- if (include && exclude) {
76
- const includeSet = new Set(include);
77
- const overlap = exclude.filter(t => includeSet.has(t));
78
- if (overlap.length > 0) {
79
- return yield* Effect.fail(new ValidationError({
80
- reason: `${context}: conflicting filters - edge types appear in both include and exclude: ${overlap.join(", ")}`
81
- }));
82
- }
83
- }
84
- // Recursively validate perHop filters
85
- if (perHop) {
86
- for (const [hop, hopFilter] of Object.entries(perHop)) {
87
- yield* validateEdgeTypeFilter(hopFilter, `${context}.perHop[${hop}]`);
88
- }
89
- }
90
- });
91
- /**
92
- * Resolve EdgeTypeFilter to an array of edge types for a specific hop.
93
- * Returns undefined if all edge types should be traversed.
94
- */
95
- const resolveEdgeTypesForHop = (filter, hop) => {
96
- // Simple array or undefined - pass through
97
- if (isSimpleEdgeTypeArray(filter)) {
98
- return filter;
99
- }
100
- // Check for hop-specific override
101
- const hopFilter = filter.perHop?.[hop];
102
- if (hopFilter) {
103
- // Recursively resolve (perHop filters don't have perHop themselves typically)
104
- return resolveEdgeTypesForHop(hopFilter, hop);
105
- }
106
- // Apply include/exclude from base filter
107
- const { include, exclude } = filter;
108
- if (include && include.length > 0) {
109
- return include;
110
- }
111
- if (exclude && exclude.length > 0) {
112
- // Return all edge types except excluded ones
113
- return EDGE_TYPES.filter(t => !exclude.includes(t));
114
- }
115
- // No filtering - return undefined to traverse all
116
- return undefined;
117
- };
118
- /**
119
- * Validate expansion options.
120
- */
121
- const validateOptions = (options) => Effect.gen(function* () {
122
- const depth = options.depth ?? DEFAULT_OPTIONS.depth;
123
- const decayFactor = options.decayFactor ?? DEFAULT_OPTIONS.decayFactor;
124
- const maxNodes = options.maxNodes ?? DEFAULT_OPTIONS.maxNodes;
125
- if (depth < 0) {
126
- return yield* Effect.fail(new ValidationError({
127
- reason: `Expansion depth must be >= 0, got: ${depth}`
128
- }));
129
- }
130
- if (depth > 10) {
131
- return yield* Effect.fail(new ValidationError({
132
- reason: `Expansion depth must be <= 10, got: ${depth}`
133
- }));
134
- }
135
- if (decayFactor <= 0 || decayFactor > 1) {
136
- return yield* Effect.fail(new ValidationError({
137
- reason: `Decay factor must be in (0, 1], got: ${decayFactor}`
138
- }));
139
- }
140
- if (maxNodes < 1) {
141
- return yield* Effect.fail(new ValidationError({
142
- reason: `Max nodes must be >= 1, got: ${maxNodes}`
143
- }));
144
- }
145
- // Validate EdgeTypeFilter if provided
146
- if (options.edgeTypes && !isSimpleEdgeTypeArray(options.edgeTypes)) {
147
- yield* validateEdgeTypeFilter(options.edgeTypes);
148
- }
149
- });
150
- export const GraphExpansionServiceLive = Layer.effect(GraphExpansionService, Effect.gen(function* () {
151
- const edgeService = yield* EdgeService;
152
- const learningRepo = yield* LearningRepository;
153
- const anchorRepo = yield* AnchorRepository;
154
- return {
155
- expand: (seeds, options = {}) => Effect.gen(function* () {
156
- // Validate options
157
- yield* validateOptions(options);
158
- const depth = options.depth ?? DEFAULT_OPTIONS.depth;
159
- const decayFactor = options.decayFactor ?? DEFAULT_OPTIONS.decayFactor;
160
- const maxNodes = options.maxNodes ?? DEFAULT_OPTIONS.maxNodes;
161
- const edgeTypeFilter = options.edgeTypes;
162
- // Handle empty seeds
163
- if (seeds.length === 0) {
164
- return {
165
- seeds: [],
166
- expanded: [],
167
- all: [],
168
- stats: {
169
- seedCount: 0,
170
- expandedCount: 0,
171
- maxDepthReached: 0,
172
- nodesVisited: 0,
173
- },
174
- };
175
- }
176
- // Track visited learning IDs to prevent cycles
177
- const visited = new Set();
178
- // Convert seeds to ExpandedLearning format
179
- const seedLearnings = seeds.map((seed) => {
180
- visited.add(seed.learning.id);
181
- return {
182
- learning: seed.learning,
183
- hops: 0,
184
- decayedScore: seed.score,
185
- path: [seed.learning.id],
186
- sourceEdge: null,
187
- edgeWeight: null,
188
- };
189
- });
190
- // If depth is 0, just return seeds
191
- if (depth === 0) {
192
- return {
193
- seeds: seedLearnings,
194
- expanded: [],
195
- all: seedLearnings,
196
- stats: {
197
- seedCount: seedLearnings.length,
198
- expandedCount: 0,
199
- maxDepthReached: 0,
200
- nodesVisited: seedLearnings.length,
201
- },
202
- };
203
- }
204
- let frontier = seeds.map((seed) => ({
205
- learningId: seed.learning.id,
206
- score: seed.score,
207
- path: [seed.learning.id],
208
- }));
209
- const expanded = [];
210
- let maxDepthReached = 0;
211
- // BFS traversal
212
- for (let currentHop = 1; currentHop <= depth; currentHop++) {
213
- if (frontier.length === 0)
214
- break;
215
- if (expanded.length >= maxNodes)
216
- break;
217
- const nextFrontier = [];
218
- for (const node of frontier) {
219
- if (expanded.length >= maxNodes)
220
- break;
221
- // Find neighbors bidirectionally (per PRD-016 resolved question #1)
222
- // Resolve edge types for this specific hop (supports per-hop overrides)
223
- const edgeTypesForHop = resolveEdgeTypesForHop(edgeTypeFilter, currentHop);
224
- const neighbors = yield* edgeService.findNeighbors("learning", String(node.learningId), {
225
- depth: 1,
226
- direction: "both",
227
- edgeTypes: edgeTypesForHop,
228
- });
229
- // Filter to only learning neighbors and process
230
- const learningNeighbors = neighbors.filter((n) => n.nodeType === "learning");
231
- for (const neighbor of learningNeighbors) {
232
- if (expanded.length >= maxNodes)
233
- break;
234
- const neighborId = parseInt(neighbor.nodeId, 10);
235
- if (isNaN(neighborId))
236
- continue;
237
- if (visited.has(neighborId))
238
- continue;
239
- visited.add(neighborId);
240
- // Fetch the learning to include in results
241
- const learning = yield* learningRepo.findById(neighborId);
242
- if (!learning)
243
- continue;
244
- // Calculate decayed score: parentScore * edgeWeight * decayFactor
245
- const newScore = node.score * neighbor.weight * decayFactor;
246
- const newPath = [...node.path, learning.id];
247
- expanded.push({
248
- learning,
249
- hops: currentHop,
250
- decayedScore: newScore,
251
- path: newPath,
252
- sourceEdge: neighbor.edgeType,
253
- edgeWeight: neighbor.weight,
254
- });
255
- maxDepthReached = currentHop;
256
- // Add to next frontier for further expansion
257
- nextFrontier.push({
258
- learningId: learning.id,
259
- score: newScore,
260
- path: newPath,
261
- });
262
- }
263
- }
264
- frontier = nextFrontier;
265
- }
266
- // Sort expanded by decayed score (highest first)
267
- expanded.sort((a, b) => b.decayedScore - a.decayedScore);
268
- // Enforce maxNodes limit on expanded
269
- const limitedExpanded = expanded.slice(0, maxNodes);
270
- const all = [...seedLearnings, ...limitedExpanded];
271
- return {
272
- seeds: seedLearnings,
273
- expanded: limitedExpanded,
274
- all,
275
- stats: {
276
- seedCount: seedLearnings.length,
277
- expandedCount: limitedExpanded.length,
278
- maxDepthReached,
279
- nodesVisited: visited.size,
280
- },
281
- };
282
- }),
283
- expandFromFiles: (files, options = {}) => Effect.gen(function* () {
284
- // Validate options
285
- const depth = options.depth ?? DEFAULT_OPTIONS.depth;
286
- const decayFactor = options.decayFactor ?? DEFAULT_OPTIONS.decayFactor;
287
- const maxNodes = options.maxNodes ?? DEFAULT_OPTIONS.maxNodes;
288
- if (depth < 0) {
289
- return yield* Effect.fail(new ValidationError({
290
- reason: `Expansion depth must be >= 0, got: ${depth}`
291
- }));
292
- }
293
- if (depth > 10) {
294
- return yield* Effect.fail(new ValidationError({
295
- reason: `Expansion depth must be <= 10, got: ${depth}`
296
- }));
297
- }
298
- if (decayFactor <= 0 || decayFactor > 1) {
299
- return yield* Effect.fail(new ValidationError({
300
- reason: `Decay factor must be in (0, 1], got: ${decayFactor}`
301
- }));
302
- }
303
- if (maxNodes < 1) {
304
- return yield* Effect.fail(new ValidationError({
305
- reason: `Max nodes must be >= 1, got: ${maxNodes}`
306
- }));
307
- }
308
- // Handle empty files input
309
- if (files.length === 0) {
310
- return {
311
- anchored: [],
312
- expanded: [],
313
- all: [],
314
- stats: {
315
- inputFileCount: 0,
316
- anchoredCount: 0,
317
- expandedCount: 0,
318
- maxDepthReached: 0,
319
- filesVisited: 0,
320
- },
321
- };
322
- }
323
- // Track visited files and learnings to prevent duplicates
324
- const visitedFiles = new Set(files);
325
- const visitedLearningIds = new Set();
326
- // Step 1: Find learnings ANCHORED_TO the input files (hop 0)
327
- const anchoredLearnings = [];
328
- for (const filePath of files) {
329
- const anchors = yield* anchorRepo.findByFilePath(filePath);
330
- // Filter to only valid anchors
331
- const validAnchors = anchors.filter(a => a.status === "valid");
332
- for (const anchor of validAnchors) {
333
- if (visitedLearningIds.has(anchor.learningId))
334
- continue;
335
- visitedLearningIds.add(anchor.learningId);
336
- const learning = yield* learningRepo.findById(anchor.learningId);
337
- if (!learning)
338
- continue;
339
- anchoredLearnings.push({
340
- learning,
341
- sourceFile: filePath,
342
- hops: 0,
343
- decayedScore: 1.0, // Base score for directly anchored learnings
344
- sourceEdge: "ANCHORED_TO",
345
- edgeWeight: null,
346
- });
347
- }
348
- }
349
- // If depth is 0, just return anchored learnings
350
- if (depth === 0) {
351
- const limitedAnchored = anchoredLearnings.slice(0, maxNodes);
352
- return {
353
- anchored: limitedAnchored,
354
- expanded: [],
355
- all: limitedAnchored,
356
- stats: {
357
- inputFileCount: files.length,
358
- anchoredCount: limitedAnchored.length,
359
- expandedCount: 0,
360
- maxDepthReached: 0,
361
- filesVisited: files.length,
362
- },
363
- };
364
- }
365
- let frontier = files.map(f => ({
366
- filePath: f,
367
- score: 1.0,
368
- }));
369
- const expandedLearnings = [];
370
- let maxDepthReached = 0;
371
- const totalLearnings = () => anchoredLearnings.length + expandedLearnings.length;
372
- // BFS traversal through file relationships
373
- for (let currentHop = 1; currentHop <= depth; currentHop++) {
374
- if (frontier.length === 0)
375
- break;
376
- if (totalLearnings() >= maxNodes)
377
- break;
378
- const nextFrontier = [];
379
- for (const node of frontier) {
380
- if (totalLearnings() >= maxNodes)
381
- break;
382
- // Find related files via IMPORTS and CO_CHANGES_WITH edges
383
- // Note: For file nodes, nodeType is "file" and nodeId is the file path
384
- const neighbors = yield* edgeService.findNeighbors("file", node.filePath, {
385
- depth: 1,
386
- direction: "both",
387
- edgeTypes: ["IMPORTS", "CO_CHANGES_WITH"],
388
- });
389
- // Filter to only file neighbors
390
- const fileNeighbors = neighbors.filter((n) => n.nodeType === "file");
391
- for (const neighbor of fileNeighbors) {
392
- if (totalLearnings() >= maxNodes)
393
- break;
394
- const relatedFilePath = neighbor.nodeId;
395
- if (visitedFiles.has(relatedFilePath))
396
- continue;
397
- visitedFiles.add(relatedFilePath);
398
- // Calculate decayed score for this hop
399
- const hopScore = node.score * neighbor.weight * decayFactor;
400
- // Find learnings anchored to this related file
401
- const anchors = yield* anchorRepo.findByFilePath(relatedFilePath);
402
- const validAnchors = anchors.filter(a => a.status === "valid");
403
- for (const anchor of validAnchors) {
404
- if (totalLearnings() >= maxNodes)
405
- break;
406
- if (visitedLearningIds.has(anchor.learningId))
407
- continue;
408
- visitedLearningIds.add(anchor.learningId);
409
- const learning = yield* learningRepo.findById(anchor.learningId);
410
- if (!learning)
411
- continue;
412
- expandedLearnings.push({
413
- learning,
414
- sourceFile: relatedFilePath,
415
- hops: currentHop,
416
- decayedScore: hopScore,
417
- sourceEdge: neighbor.edgeType,
418
- edgeWeight: neighbor.weight,
419
- });
420
- maxDepthReached = currentHop;
421
- }
422
- // Add to next frontier for further expansion
423
- nextFrontier.push({
424
- filePath: relatedFilePath,
425
- score: hopScore,
426
- });
427
- }
428
- }
429
- frontier = nextFrontier;
430
- }
431
- // Sort expanded by decayed score (highest first)
432
- expandedLearnings.sort((a, b) => b.decayedScore - a.decayedScore);
433
- // Enforce maxNodes limit
434
- const totalAvailable = anchoredLearnings.length + expandedLearnings.length;
435
- let limitedAnchored = anchoredLearnings;
436
- let limitedExpanded = expandedLearnings;
437
- if (totalAvailable > maxNodes) {
438
- // Prioritize anchored learnings, then fill with expanded
439
- if (anchoredLearnings.length >= maxNodes) {
440
- limitedAnchored = anchoredLearnings.slice(0, maxNodes);
441
- limitedExpanded = [];
442
- }
443
- else {
444
- const remainingSlots = maxNodes - anchoredLearnings.length;
445
- limitedExpanded = expandedLearnings.slice(0, remainingSlots);
446
- }
447
- }
448
- // Combine all and sort by decayedScore
449
- const all = [...limitedAnchored, ...limitedExpanded];
450
- all.sort((a, b) => b.decayedScore - a.decayedScore);
451
- return {
452
- anchored: limitedAnchored,
453
- expanded: limitedExpanded,
454
- all,
455
- stats: {
456
- inputFileCount: files.length,
457
- anchoredCount: limitedAnchored.length,
458
- expandedCount: limitedExpanded.length,
459
- maxDepthReached,
460
- filesVisited: visitedFiles.size,
461
- },
462
- };
463
- }),
464
- };
465
- }));
466
- //# sourceMappingURL=graph-expansion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph-expansion.js","sourceRoot":"","sources":["../../src/services/graph-expansion.ts"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- import { Context, Effect, Layer } from "effect";
2
- import { CandidateNotFoundError, DatabaseError, ValidationError } from "../errors.js";
3
- import { CandidateRepository } from "../repo/candidate-repo.js";
4
- import { LearningService } from "./learning-service.js";
5
- import { EdgeService } from "./edge-service.js";
6
- import type { LearningCandidate, CandidateFilter, CandidateId, Learning } from "@jamesaphoenix/tx-types";
7
- /**
8
- * Result of promoting a candidate to the learnings table.
9
- */
10
- export interface PromotionResult {
11
- /** The updated candidate with promoted status */
12
- readonly candidate: LearningCandidate;
13
- /** The newly created learning */
14
- readonly learning: Learning;
15
- }
16
- /**
17
- * Result of auto-promotion batch operation.
18
- */
19
- export interface AutoPromoteResult {
20
- /** Number of candidates auto-promoted */
21
- readonly promoted: number;
22
- /** Number of candidates skipped (already processed or low confidence) */
23
- readonly skipped: number;
24
- /** Number of candidates that failed to promote */
25
- readonly failed: number;
26
- /** IDs of promoted learnings */
27
- readonly learningIds: readonly number[];
28
- }
29
- declare const PromotionService_base: Context.TagClass<PromotionService, "PromotionService", {
30
- /**
31
- * List candidates matching the given filter.
32
- * Supports filtering by status, confidence, category, and pagination.
33
- */
34
- readonly list: (filter: CandidateFilter) => Effect.Effect<readonly LearningCandidate[], DatabaseError>;
35
- /**
36
- * Promote a candidate to the learnings table.
37
- * Creates a new learning and updates the candidate status to 'promoted'.
38
- */
39
- readonly promote: (id: CandidateId) => Effect.Effect<PromotionResult, CandidateNotFoundError | DatabaseError>;
40
- /**
41
- * Reject a candidate with a reason.
42
- * Updates the candidate status to 'rejected' and stores the rejection reason.
43
- */
44
- readonly reject: (id: CandidateId, reason: string) => Effect.Effect<LearningCandidate, CandidateNotFoundError | ValidationError | DatabaseError>;
45
- /**
46
- * Auto-promote high-confidence candidates.
47
- * Promotes all pending candidates with 'high' confidence level.
48
- * Uses 'auto' as the reviewer identifier.
49
- */
50
- readonly autoPromote: () => Effect.Effect<AutoPromoteResult, DatabaseError>;
51
- /**
52
- * Get all pending candidates awaiting review.
53
- * Convenience method equivalent to list({ status: 'pending' }).
54
- */
55
- readonly getPending: () => Effect.Effect<readonly LearningCandidate[], DatabaseError>;
56
- }>;
57
- /**
58
- * PromotionService manages the lifecycle of learning candidates,
59
- * including listing, promoting to learnings, rejecting, and auto-promotion.
60
- *
61
- * @see PRD-015 for the knowledge promotion pipeline
62
- */
63
- export declare class PromotionService extends PromotionService_base {
64
- }
65
- export declare const PromotionServiceLive: Layer.Layer<PromotionService, never, CandidateRepository | EdgeService | LearningService>;
66
- export {};
67
- //# sourceMappingURL=promotion-service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"promotion-service.d.ts","sourceRoot":"","sources":["../../src/services/promotion-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,QAAQ,EACT,MAAM,yBAAyB,CAAA;AAEhC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAA;IACrC,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,gCAAgC;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;CACxC;;IAWG;;;OAGG;mBACY,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,iBAAiB,EAAE,EAAE,aAAa,CAAC;IAEtG;;;OAGG;sBACe,CAAC,EAAE,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,GAAG,aAAa,CAAC;IAE7G;;;OAGG;qBACc,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,GAAG,eAAe,GAAG,aAAa,CAAC;IAEhJ;;;;OAIG;0BACmB,MAAM,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;IAE3E;;;OAGG;yBACkB,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,iBAAiB,EAAE,EAAE,aAAa,CAAC;;AAtCzF;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,qBAkCnC;CAAG;AAKN,eAAO,MAAM,oBAAoB,2FAiLhC,CAAA"}