universal-agent-protocol 0.5.0

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 (415) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +462 -0
  3. package/dist/analyzers/index.d.ts +3 -0
  4. package/dist/analyzers/index.d.ts.map +1 -0
  5. package/dist/analyzers/index.js +656 -0
  6. package/dist/analyzers/index.js.map +1 -0
  7. package/dist/bin/cli.d.ts +3 -0
  8. package/dist/bin/cli.d.ts.map +1 -0
  9. package/dist/bin/cli.js +506 -0
  10. package/dist/bin/cli.js.map +1 -0
  11. package/dist/bin/tool-calls.d.ts +3 -0
  12. package/dist/bin/tool-calls.d.ts.map +1 -0
  13. package/dist/bin/tool-calls.js +4 -0
  14. package/dist/bin/tool-calls.js.map +1 -0
  15. package/dist/cli/agent.d.ts +20 -0
  16. package/dist/cli/agent.d.ts.map +1 -0
  17. package/dist/cli/agent.js +434 -0
  18. package/dist/cli/agent.js.map +1 -0
  19. package/dist/cli/analyze.d.ts +7 -0
  20. package/dist/cli/analyze.d.ts.map +1 -0
  21. package/dist/cli/analyze.js +103 -0
  22. package/dist/cli/analyze.js.map +1 -0
  23. package/dist/cli/coord.d.ts +7 -0
  24. package/dist/cli/coord.d.ts.map +1 -0
  25. package/dist/cli/coord.js +138 -0
  26. package/dist/cli/coord.js.map +1 -0
  27. package/dist/cli/dashboard.d.ts +8 -0
  28. package/dist/cli/dashboard.d.ts.map +1 -0
  29. package/dist/cli/dashboard.js +704 -0
  30. package/dist/cli/dashboard.js.map +1 -0
  31. package/dist/cli/deploy.d.ts +19 -0
  32. package/dist/cli/deploy.d.ts.map +1 -0
  33. package/dist/cli/deploy.js +267 -0
  34. package/dist/cli/deploy.js.map +1 -0
  35. package/dist/cli/droids.d.ts +9 -0
  36. package/dist/cli/droids.d.ts.map +1 -0
  37. package/dist/cli/droids.js +227 -0
  38. package/dist/cli/droids.js.map +1 -0
  39. package/dist/cli/generate.d.ts +17 -0
  40. package/dist/cli/generate.d.ts.map +1 -0
  41. package/dist/cli/generate.js +432 -0
  42. package/dist/cli/generate.js.map +1 -0
  43. package/dist/cli/hooks.d.ts +9 -0
  44. package/dist/cli/hooks.d.ts.map +1 -0
  45. package/dist/cli/hooks.js +374 -0
  46. package/dist/cli/hooks.js.map +1 -0
  47. package/dist/cli/init.d.ts +11 -0
  48. package/dist/cli/init.d.ts.map +1 -0
  49. package/dist/cli/init.js +316 -0
  50. package/dist/cli/init.js.map +1 -0
  51. package/dist/cli/mcp-router.d.ts +16 -0
  52. package/dist/cli/mcp-router.d.ts.map +1 -0
  53. package/dist/cli/mcp-router.js +143 -0
  54. package/dist/cli/mcp-router.js.map +1 -0
  55. package/dist/cli/memory.d.ts +24 -0
  56. package/dist/cli/memory.d.ts.map +1 -0
  57. package/dist/cli/memory.js +877 -0
  58. package/dist/cli/memory.js.map +1 -0
  59. package/dist/cli/model.d.ts +15 -0
  60. package/dist/cli/model.d.ts.map +1 -0
  61. package/dist/cli/model.js +270 -0
  62. package/dist/cli/model.js.map +1 -0
  63. package/dist/cli/patterns.d.ts +26 -0
  64. package/dist/cli/patterns.d.ts.map +1 -0
  65. package/dist/cli/patterns.js +587 -0
  66. package/dist/cli/patterns.js.map +1 -0
  67. package/dist/cli/setup-mcp-router.d.ts +8 -0
  68. package/dist/cli/setup-mcp-router.d.ts.map +1 -0
  69. package/dist/cli/setup-mcp-router.js +163 -0
  70. package/dist/cli/setup-mcp-router.js.map +1 -0
  71. package/dist/cli/setup.d.ts +13 -0
  72. package/dist/cli/setup.d.ts.map +1 -0
  73. package/dist/cli/setup.js +146 -0
  74. package/dist/cli/setup.js.map +1 -0
  75. package/dist/cli/sync.d.ts +7 -0
  76. package/dist/cli/sync.d.ts.map +1 -0
  77. package/dist/cli/sync.js +26 -0
  78. package/dist/cli/sync.js.map +1 -0
  79. package/dist/cli/task.d.ts +33 -0
  80. package/dist/cli/task.d.ts.map +1 -0
  81. package/dist/cli/task.js +616 -0
  82. package/dist/cli/task.js.map +1 -0
  83. package/dist/cli/tool-calls.d.ts +8 -0
  84. package/dist/cli/tool-calls.d.ts.map +1 -0
  85. package/dist/cli/tool-calls.js +239 -0
  86. package/dist/cli/tool-calls.js.map +1 -0
  87. package/dist/cli/update.d.ts +10 -0
  88. package/dist/cli/update.d.ts.map +1 -0
  89. package/dist/cli/update.js +300 -0
  90. package/dist/cli/update.js.map +1 -0
  91. package/dist/cli/visualize.d.ts +77 -0
  92. package/dist/cli/visualize.d.ts.map +1 -0
  93. package/dist/cli/visualize.js +287 -0
  94. package/dist/cli/visualize.js.map +1 -0
  95. package/dist/cli/worktree.d.ts +9 -0
  96. package/dist/cli/worktree.d.ts.map +1 -0
  97. package/dist/cli/worktree.js +175 -0
  98. package/dist/cli/worktree.js.map +1 -0
  99. package/dist/coordination/capability-router.d.ts +79 -0
  100. package/dist/coordination/capability-router.d.ts.map +1 -0
  101. package/dist/coordination/capability-router.js +324 -0
  102. package/dist/coordination/capability-router.js.map +1 -0
  103. package/dist/coordination/database.d.ts +13 -0
  104. package/dist/coordination/database.d.ts.map +1 -0
  105. package/dist/coordination/database.js +131 -0
  106. package/dist/coordination/database.js.map +1 -0
  107. package/dist/coordination/deploy-batcher.d.ts +101 -0
  108. package/dist/coordination/deploy-batcher.d.ts.map +1 -0
  109. package/dist/coordination/deploy-batcher.js +565 -0
  110. package/dist/coordination/deploy-batcher.js.map +1 -0
  111. package/dist/coordination/index.d.ts +5 -0
  112. package/dist/coordination/index.d.ts.map +1 -0
  113. package/dist/coordination/index.js +5 -0
  114. package/dist/coordination/index.js.map +1 -0
  115. package/dist/coordination/service.d.ts +81 -0
  116. package/dist/coordination/service.d.ts.map +1 -0
  117. package/dist/coordination/service.js +603 -0
  118. package/dist/coordination/service.js.map +1 -0
  119. package/dist/generators/claude-md.d.ts +3 -0
  120. package/dist/generators/claude-md.d.ts.map +1 -0
  121. package/dist/generators/claude-md.js +977 -0
  122. package/dist/generators/claude-md.js.map +1 -0
  123. package/dist/generators/template-loader.d.ts +105 -0
  124. package/dist/generators/template-loader.d.ts.map +1 -0
  125. package/dist/generators/template-loader.js +291 -0
  126. package/dist/generators/template-loader.js.map +1 -0
  127. package/dist/index.d.ts +47 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +59 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/mcp-router/config/parser.d.ts +9 -0
  132. package/dist/mcp-router/config/parser.d.ts.map +1 -0
  133. package/dist/mcp-router/config/parser.js +174 -0
  134. package/dist/mcp-router/config/parser.js.map +1 -0
  135. package/dist/mcp-router/executor/client.d.ts +31 -0
  136. package/dist/mcp-router/executor/client.d.ts.map +1 -0
  137. package/dist/mcp-router/executor/client.js +187 -0
  138. package/dist/mcp-router/executor/client.js.map +1 -0
  139. package/dist/mcp-router/index.d.ts +22 -0
  140. package/dist/mcp-router/index.d.ts.map +1 -0
  141. package/dist/mcp-router/index.js +18 -0
  142. package/dist/mcp-router/index.js.map +1 -0
  143. package/dist/mcp-router/output-compressor.d.ts +26 -0
  144. package/dist/mcp-router/output-compressor.d.ts.map +1 -0
  145. package/dist/mcp-router/output-compressor.js +236 -0
  146. package/dist/mcp-router/output-compressor.js.map +1 -0
  147. package/dist/mcp-router/search/fuzzy.d.ts +26 -0
  148. package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
  149. package/dist/mcp-router/search/fuzzy.js +94 -0
  150. package/dist/mcp-router/search/fuzzy.js.map +1 -0
  151. package/dist/mcp-router/server.d.ts +50 -0
  152. package/dist/mcp-router/server.d.ts.map +1 -0
  153. package/dist/mcp-router/server.js +229 -0
  154. package/dist/mcp-router/server.js.map +1 -0
  155. package/dist/mcp-router/session-stats.d.ts +37 -0
  156. package/dist/mcp-router/session-stats.d.ts.map +1 -0
  157. package/dist/mcp-router/session-stats.js +56 -0
  158. package/dist/mcp-router/session-stats.js.map +1 -0
  159. package/dist/mcp-router/tools/discover.d.ts +37 -0
  160. package/dist/mcp-router/tools/discover.d.ts.map +1 -0
  161. package/dist/mcp-router/tools/discover.js +65 -0
  162. package/dist/mcp-router/tools/discover.js.map +1 -0
  163. package/dist/mcp-router/tools/execute.d.ts +43 -0
  164. package/dist/mcp-router/tools/execute.d.ts.map +1 -0
  165. package/dist/mcp-router/tools/execute.js +103 -0
  166. package/dist/mcp-router/tools/execute.js.map +1 -0
  167. package/dist/mcp-router/types.d.ts +62 -0
  168. package/dist/mcp-router/types.d.ts.map +1 -0
  169. package/dist/mcp-router/types.js +6 -0
  170. package/dist/mcp-router/types.js.map +1 -0
  171. package/dist/memory/adaptive-context.d.ts +146 -0
  172. package/dist/memory/adaptive-context.d.ts.map +1 -0
  173. package/dist/memory/adaptive-context.js +1022 -0
  174. package/dist/memory/adaptive-context.js.map +1 -0
  175. package/dist/memory/agent-scoped-memory.d.ts +67 -0
  176. package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
  177. package/dist/memory/agent-scoped-memory.js +126 -0
  178. package/dist/memory/agent-scoped-memory.js.map +1 -0
  179. package/dist/memory/backends/base.d.ts +18 -0
  180. package/dist/memory/backends/base.d.ts.map +1 -0
  181. package/dist/memory/backends/base.js +2 -0
  182. package/dist/memory/backends/base.js.map +1 -0
  183. package/dist/memory/backends/factory.d.ts +4 -0
  184. package/dist/memory/backends/factory.d.ts.map +1 -0
  185. package/dist/memory/backends/factory.js +53 -0
  186. package/dist/memory/backends/factory.js.map +1 -0
  187. package/dist/memory/backends/github.d.ts +22 -0
  188. package/dist/memory/backends/github.d.ts.map +1 -0
  189. package/dist/memory/backends/github.js +118 -0
  190. package/dist/memory/backends/github.js.map +1 -0
  191. package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
  192. package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
  193. package/dist/memory/backends/qdrant-cloud.js +168 -0
  194. package/dist/memory/backends/qdrant-cloud.js.map +1 -0
  195. package/dist/memory/context-compressor.d.ts +74 -0
  196. package/dist/memory/context-compressor.d.ts.map +1 -0
  197. package/dist/memory/context-compressor.js +289 -0
  198. package/dist/memory/context-compressor.js.map +1 -0
  199. package/dist/memory/correction-propagator.d.ts +44 -0
  200. package/dist/memory/correction-propagator.d.ts.map +1 -0
  201. package/dist/memory/correction-propagator.js +156 -0
  202. package/dist/memory/correction-propagator.js.map +1 -0
  203. package/dist/memory/daily-log.d.ts +67 -0
  204. package/dist/memory/daily-log.d.ts.map +1 -0
  205. package/dist/memory/daily-log.js +143 -0
  206. package/dist/memory/daily-log.js.map +1 -0
  207. package/dist/memory/dynamic-retrieval.d.ts +110 -0
  208. package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
  209. package/dist/memory/dynamic-retrieval.js +688 -0
  210. package/dist/memory/dynamic-retrieval.js.map +1 -0
  211. package/dist/memory/embeddings.d.ts +116 -0
  212. package/dist/memory/embeddings.d.ts.map +1 -0
  213. package/dist/memory/embeddings.js +461 -0
  214. package/dist/memory/embeddings.js.map +1 -0
  215. package/dist/memory/hierarchical-memory.d.ts +141 -0
  216. package/dist/memory/hierarchical-memory.d.ts.map +1 -0
  217. package/dist/memory/hierarchical-memory.js +477 -0
  218. package/dist/memory/hierarchical-memory.js.map +1 -0
  219. package/dist/memory/memory-consolidator.d.ts +124 -0
  220. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  221. package/dist/memory/memory-consolidator.js +514 -0
  222. package/dist/memory/memory-consolidator.js.map +1 -0
  223. package/dist/memory/memory-maintenance.d.ts +39 -0
  224. package/dist/memory/memory-maintenance.d.ts.map +1 -0
  225. package/dist/memory/memory-maintenance.js +305 -0
  226. package/dist/memory/memory-maintenance.js.map +1 -0
  227. package/dist/memory/model-router.d.ts +102 -0
  228. package/dist/memory/model-router.d.ts.map +1 -0
  229. package/dist/memory/model-router.js +448 -0
  230. package/dist/memory/model-router.js.map +1 -0
  231. package/dist/memory/multi-view-memory.d.ts +134 -0
  232. package/dist/memory/multi-view-memory.d.ts.map +1 -0
  233. package/dist/memory/multi-view-memory.js +420 -0
  234. package/dist/memory/multi-view-memory.js.map +1 -0
  235. package/dist/memory/prepopulate.d.ts +76 -0
  236. package/dist/memory/prepopulate.d.ts.map +1 -0
  237. package/dist/memory/prepopulate.js +815 -0
  238. package/dist/memory/prepopulate.js.map +1 -0
  239. package/dist/memory/semantic-compression.d.ts +77 -0
  240. package/dist/memory/semantic-compression.d.ts.map +1 -0
  241. package/dist/memory/semantic-compression.js +348 -0
  242. package/dist/memory/semantic-compression.js.map +1 -0
  243. package/dist/memory/serverless-qdrant.d.ts +102 -0
  244. package/dist/memory/serverless-qdrant.d.ts.map +1 -0
  245. package/dist/memory/serverless-qdrant.js +369 -0
  246. package/dist/memory/serverless-qdrant.js.map +1 -0
  247. package/dist/memory/short-term/factory.d.ts +26 -0
  248. package/dist/memory/short-term/factory.d.ts.map +1 -0
  249. package/dist/memory/short-term/factory.js +28 -0
  250. package/dist/memory/short-term/factory.js.map +1 -0
  251. package/dist/memory/short-term/indexeddb.d.ts +25 -0
  252. package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
  253. package/dist/memory/short-term/indexeddb.js +64 -0
  254. package/dist/memory/short-term/indexeddb.js.map +1 -0
  255. package/dist/memory/short-term/schema.d.ts +6 -0
  256. package/dist/memory/short-term/schema.d.ts.map +1 -0
  257. package/dist/memory/short-term/schema.js +119 -0
  258. package/dist/memory/short-term/schema.js.map +1 -0
  259. package/dist/memory/short-term/sqlite.d.ts +50 -0
  260. package/dist/memory/short-term/sqlite.d.ts.map +1 -0
  261. package/dist/memory/short-term/sqlite.js +221 -0
  262. package/dist/memory/short-term/sqlite.js.map +1 -0
  263. package/dist/memory/speculative-cache.d.ts +111 -0
  264. package/dist/memory/speculative-cache.d.ts.map +1 -0
  265. package/dist/memory/speculative-cache.js +409 -0
  266. package/dist/memory/speculative-cache.js.map +1 -0
  267. package/dist/memory/task-classifier.d.ts +34 -0
  268. package/dist/memory/task-classifier.d.ts.map +1 -0
  269. package/dist/memory/task-classifier.js +300 -0
  270. package/dist/memory/task-classifier.js.map +1 -0
  271. package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
  272. package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
  273. package/dist/memory/terminal-bench-knowledge.js +399 -0
  274. package/dist/memory/terminal-bench-knowledge.js.map +1 -0
  275. package/dist/memory/write-gate.d.ts +39 -0
  276. package/dist/memory/write-gate.d.ts.map +1 -0
  277. package/dist/memory/write-gate.js +190 -0
  278. package/dist/memory/write-gate.js.map +1 -0
  279. package/dist/models/executor.d.ts +130 -0
  280. package/dist/models/executor.d.ts.map +1 -0
  281. package/dist/models/executor.js +383 -0
  282. package/dist/models/executor.js.map +1 -0
  283. package/dist/models/index.d.ts +15 -0
  284. package/dist/models/index.d.ts.map +1 -0
  285. package/dist/models/index.js +17 -0
  286. package/dist/models/index.js.map +1 -0
  287. package/dist/models/planner.d.ts +71 -0
  288. package/dist/models/planner.d.ts.map +1 -0
  289. package/dist/models/planner.js +344 -0
  290. package/dist/models/planner.js.map +1 -0
  291. package/dist/models/router.d.ts +75 -0
  292. package/dist/models/router.d.ts.map +1 -0
  293. package/dist/models/router.js +344 -0
  294. package/dist/models/router.js.map +1 -0
  295. package/dist/models/types.d.ts +370 -0
  296. package/dist/models/types.d.ts.map +1 -0
  297. package/dist/models/types.js +181 -0
  298. package/dist/models/types.js.map +1 -0
  299. package/dist/tasks/coordination.d.ts +74 -0
  300. package/dist/tasks/coordination.d.ts.map +1 -0
  301. package/dist/tasks/coordination.js +237 -0
  302. package/dist/tasks/coordination.js.map +1 -0
  303. package/dist/tasks/database.d.ts +14 -0
  304. package/dist/tasks/database.d.ts.map +1 -0
  305. package/dist/tasks/database.js +128 -0
  306. package/dist/tasks/database.js.map +1 -0
  307. package/dist/tasks/index.d.ts +5 -0
  308. package/dist/tasks/index.d.ts.map +1 -0
  309. package/dist/tasks/index.js +5 -0
  310. package/dist/tasks/index.js.map +1 -0
  311. package/dist/tasks/service.d.ts +39 -0
  312. package/dist/tasks/service.d.ts.map +1 -0
  313. package/dist/tasks/service.js +582 -0
  314. package/dist/tasks/service.js.map +1 -0
  315. package/dist/tasks/types.d.ts +224 -0
  316. package/dist/tasks/types.d.ts.map +1 -0
  317. package/dist/tasks/types.js +64 -0
  318. package/dist/tasks/types.js.map +1 -0
  319. package/dist/types/analysis.d.ts +82 -0
  320. package/dist/types/analysis.d.ts.map +1 -0
  321. package/dist/types/analysis.js +2 -0
  322. package/dist/types/analysis.js.map +1 -0
  323. package/dist/types/config.d.ts +3023 -0
  324. package/dist/types/config.d.ts.map +1 -0
  325. package/dist/types/config.js +292 -0
  326. package/dist/types/config.js.map +1 -0
  327. package/dist/types/coordination.d.ts +240 -0
  328. package/dist/types/coordination.d.ts.map +1 -0
  329. package/dist/types/coordination.js +43 -0
  330. package/dist/types/coordination.js.map +1 -0
  331. package/dist/types/index.d.ts +4 -0
  332. package/dist/types/index.d.ts.map +1 -0
  333. package/dist/types/index.js +4 -0
  334. package/dist/types/index.js.map +1 -0
  335. package/dist/utils/calculate-average.d.ts +15 -0
  336. package/dist/utils/calculate-average.d.ts.map +1 -0
  337. package/dist/utils/calculate-average.js +21 -0
  338. package/dist/utils/calculate-average.js.map +1 -0
  339. package/dist/utils/config-manager.d.ts +30 -0
  340. package/dist/utils/config-manager.d.ts.map +1 -0
  341. package/dist/utils/config-manager.js +41 -0
  342. package/dist/utils/config-manager.js.map +1 -0
  343. package/dist/utils/dijkstra.d.ts +17 -0
  344. package/dist/utils/dijkstra.d.ts.map +1 -0
  345. package/dist/utils/dijkstra.js +91 -0
  346. package/dist/utils/dijkstra.js.map +1 -0
  347. package/dist/utils/fetch-with-retry.d.ts +5 -0
  348. package/dist/utils/fetch-with-retry.d.ts.map +1 -0
  349. package/dist/utils/fetch-with-retry.js +61 -0
  350. package/dist/utils/fetch-with-retry.js.map +1 -0
  351. package/dist/utils/merge-claude-md.d.ts +28 -0
  352. package/dist/utils/merge-claude-md.d.ts.map +1 -0
  353. package/dist/utils/merge-claude-md.js +342 -0
  354. package/dist/utils/merge-claude-md.js.map +1 -0
  355. package/dist/utils/order-processor-refactored.d.ts +126 -0
  356. package/dist/utils/order-processor-refactored.d.ts.map +1 -0
  357. package/dist/utils/order-processor-refactored.js +165 -0
  358. package/dist/utils/order-processor-refactored.js.map +1 -0
  359. package/dist/utils/order-processor-strategy.d.ts +72 -0
  360. package/dist/utils/order-processor-strategy.d.ts.map +1 -0
  361. package/dist/utils/order-processor-strategy.js +158 -0
  362. package/dist/utils/order-processor-strategy.js.map +1 -0
  363. package/dist/utils/order-processor.d.ts +242 -0
  364. package/dist/utils/order-processor.d.ts.map +1 -0
  365. package/dist/utils/order-processor.js +370 -0
  366. package/dist/utils/order-processor.js.map +1 -0
  367. package/dist/utils/rate-limiter-simple.d.ts +58 -0
  368. package/dist/utils/rate-limiter-simple.d.ts.map +1 -0
  369. package/dist/utils/rate-limiter-simple.js +100 -0
  370. package/dist/utils/rate-limiter-simple.js.map +1 -0
  371. package/dist/utils/rate-limiter.d.ts +62 -0
  372. package/dist/utils/rate-limiter.d.ts.map +1 -0
  373. package/dist/utils/rate-limiter.js +150 -0
  374. package/dist/utils/rate-limiter.js.map +1 -0
  375. package/dist/utils/string-similarity.d.ts +37 -0
  376. package/dist/utils/string-similarity.d.ts.map +1 -0
  377. package/dist/utils/string-similarity.js +114 -0
  378. package/dist/utils/string-similarity.js.map +1 -0
  379. package/dist/utils/validate-json.d.ts +51 -0
  380. package/dist/utils/validate-json.d.ts.map +1 -0
  381. package/dist/utils/validate-json.js +99 -0
  382. package/dist/utils/validate-json.js.map +1 -0
  383. package/package.json +96 -0
  384. package/templates/CLAUDE.template.md +11 -0
  385. package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
  386. package/templates/CLAUDE_CODING.template.md +125 -0
  387. package/templates/CLAUDE_DROIDS.template.md +109 -0
  388. package/templates/CLAUDE_MEMORY.template.md +130 -0
  389. package/templates/CLAUDE_WORKFLOWS.template.md +136 -0
  390. package/templates/PROJECT.template.md +209 -0
  391. package/templates/SCHEMA.md +57 -0
  392. package/templates/archive/CLAUDE.template.root-v6.md +762 -0
  393. package/templates/archive/CLAUDE.template.v6.md +762 -0
  394. package/templates/hooks/pre-compact.sh +68 -0
  395. package/templates/hooks/session-start.sh +106 -0
  396. package/tools/agents/README.md +224 -0
  397. package/tools/agents/UAP/README.md +351 -0
  398. package/tools/agents/UAP/__init__.py +9 -0
  399. package/tools/agents/UAP/cli.py +675 -0
  400. package/tools/agents/UAP/version.py +2 -0
  401. package/tools/agents/benchmarks/benchmark_memory_systems.py +637 -0
  402. package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
  403. package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
  404. package/tools/agents/config/chat_template.jinja +172 -0
  405. package/tools/agents/docker-compose.qdrant.yml +24 -0
  406. package/tools/agents/migrations/apply.py +256 -0
  407. package/tools/agents/scripts/fix_qwen_chat_template.py +314 -0
  408. package/tools/agents/scripts/init_qdrant.py +151 -0
  409. package/tools/agents/scripts/memory_migration.py +518 -0
  410. package/tools/agents/scripts/migrate_memory_to_qdrant.py +113 -0
  411. package/tools/agents/scripts/query_memory.py +189 -0
  412. package/tools/agents/scripts/qwen_tool_call_test.py +419 -0
  413. package/tools/agents/scripts/qwen_tool_call_wrapper.py +517 -0
  414. package/tools/agents/scripts/start-services.sh +96 -0
  415. package/tools/agents/tests/test_uap_compliance.py +257 -0
@@ -0,0 +1,582 @@
1
+ import { createHash, randomBytes } from 'crypto';
2
+ import { TaskDatabase, getDefaultTaskDbPath } from './database.js';
3
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
4
+ import { dirname } from 'path';
5
+ export class TaskService {
6
+ db;
7
+ jsonlPath;
8
+ agentId;
9
+ constructor(config = {}) {
10
+ const dbPath = config.dbPath || getDefaultTaskDbPath();
11
+ this.db = TaskDatabase.getInstance(dbPath).getDatabase();
12
+ this.jsonlPath = config.jsonlPath || './.uap/tasks/tasks.jsonl';
13
+ this.agentId = config.agentId;
14
+ }
15
+ // ==================== ID Generation ====================
16
+ generateId() {
17
+ const bytes = randomBytes(4);
18
+ const hash = createHash('md5').update(bytes).digest('hex').slice(0, 4);
19
+ return `uap-${hash}`;
20
+ }
21
+ // ==================== CRUD Operations ====================
22
+ create(input) {
23
+ const id = this.generateId();
24
+ const now = new Date().toISOString();
25
+ const task = {
26
+ id,
27
+ title: input.title,
28
+ description: input.description,
29
+ type: input.type || 'task',
30
+ status: 'open',
31
+ priority: (input.priority ?? 2),
32
+ assignee: input.assignee,
33
+ labels: input.labels || [],
34
+ notes: input.notes,
35
+ parentId: input.parentId,
36
+ createdAt: now,
37
+ updatedAt: now,
38
+ };
39
+ const stmt = this.db.prepare(`
40
+ INSERT INTO tasks (id, title, description, type, status, priority, assignee, labels, notes, parent_id, created_at, updated_at)
41
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
42
+ `);
43
+ stmt.run(task.id, task.title, task.description || null, task.type, task.status, task.priority, task.assignee || null, JSON.stringify(task.labels), task.notes || null, task.parentId || null, task.createdAt, task.updatedAt);
44
+ // Record activity
45
+ this.recordActivity(id, 'created', `Created task: ${task.title}`);
46
+ // Record history
47
+ this.recordHistory(id, 'created', null, task.title);
48
+ return task;
49
+ }
50
+ get(id) {
51
+ const stmt = this.db.prepare(`
52
+ SELECT id, title, description, type, status, priority, assignee,
53
+ worktree_branch as worktreeBranch, labels, notes, parent_id as parentId,
54
+ created_at as createdAt, updated_at as updatedAt,
55
+ closed_at as closedAt, closed_reason as closedReason
56
+ FROM tasks WHERE id = ?
57
+ `);
58
+ const row = stmt.get(id);
59
+ if (!row)
60
+ return null;
61
+ return {
62
+ ...row,
63
+ labels: row.labels ? JSON.parse(row.labels) : [],
64
+ };
65
+ }
66
+ getWithRelations(id) {
67
+ const task = this.get(id);
68
+ if (!task)
69
+ return null;
70
+ const deps = this.getDependencies(id);
71
+ const blockedBy = deps.filter(d => d.fromTask === id && d.depType === 'blocks').map(d => d.toTask);
72
+ const blocks = deps.filter(d => d.toTask === id && d.depType === 'blocks').map(d => d.fromTask);
73
+ const relatedTo = deps.filter(d => d.depType === 'related').map(d => d.fromTask === id ? d.toTask : d.fromTask);
74
+ const children = this.getChildren(id).map(t => t.id);
75
+ const parent = task.parentId ? this.get(task.parentId) || undefined : undefined;
76
+ // Check if blocked (has unresolved blocking dependencies)
77
+ const unresolvedBlockers = blockedBy.filter(blockerId => {
78
+ const blocker = this.get(blockerId);
79
+ return blocker && blocker.status !== 'done' && blocker.status !== 'wont_do';
80
+ });
81
+ const isBlocked = unresolvedBlockers.length > 0;
82
+ const isReady = task.status === 'open' && !isBlocked;
83
+ return {
84
+ ...task,
85
+ blockedBy,
86
+ blocks,
87
+ relatedTo,
88
+ children,
89
+ parent,
90
+ isBlocked,
91
+ isReady,
92
+ };
93
+ }
94
+ update(id, input) {
95
+ const existing = this.get(id);
96
+ if (!existing)
97
+ return null;
98
+ const now = new Date().toISOString();
99
+ const updates = [];
100
+ const params = [];
101
+ // Track changes for history
102
+ const changes = [];
103
+ if (input.title !== undefined && input.title !== existing.title) {
104
+ updates.push('title = ?');
105
+ params.push(input.title);
106
+ changes.push({ field: 'title', oldValue: existing.title, newValue: input.title });
107
+ }
108
+ if (input.description !== undefined && input.description !== existing.description) {
109
+ updates.push('description = ?');
110
+ params.push(input.description || null);
111
+ changes.push({ field: 'description', oldValue: existing.description || null, newValue: input.description || null });
112
+ }
113
+ if (input.type !== undefined && input.type !== existing.type) {
114
+ updates.push('type = ?');
115
+ params.push(input.type);
116
+ changes.push({ field: 'type', oldValue: existing.type, newValue: input.type });
117
+ }
118
+ if (input.status !== undefined && input.status !== existing.status) {
119
+ updates.push('status = ?');
120
+ params.push(input.status);
121
+ changes.push({ field: 'status', oldValue: existing.status, newValue: input.status });
122
+ // Set closed_at if closing
123
+ if (input.status === 'done' || input.status === 'wont_do') {
124
+ updates.push('closed_at = ?');
125
+ params.push(now);
126
+ }
127
+ }
128
+ if (input.priority !== undefined && input.priority !== existing.priority) {
129
+ updates.push('priority = ?');
130
+ params.push(input.priority);
131
+ changes.push({ field: 'priority', oldValue: String(existing.priority), newValue: String(input.priority) });
132
+ }
133
+ if (input.assignee !== undefined && input.assignee !== existing.assignee) {
134
+ updates.push('assignee = ?');
135
+ params.push(input.assignee || null);
136
+ changes.push({ field: 'assignee', oldValue: existing.assignee || null, newValue: input.assignee || null });
137
+ }
138
+ if (input.worktreeBranch !== undefined && input.worktreeBranch !== existing.worktreeBranch) {
139
+ updates.push('worktree_branch = ?');
140
+ params.push(input.worktreeBranch || null);
141
+ changes.push({ field: 'worktreeBranch', oldValue: existing.worktreeBranch || null, newValue: input.worktreeBranch || null });
142
+ }
143
+ if (input.labels !== undefined) {
144
+ const newLabels = JSON.stringify(input.labels);
145
+ const oldLabels = JSON.stringify(existing.labels);
146
+ if (newLabels !== oldLabels) {
147
+ updates.push('labels = ?');
148
+ params.push(newLabels);
149
+ changes.push({ field: 'labels', oldValue: oldLabels, newValue: newLabels });
150
+ }
151
+ }
152
+ if (input.notes !== undefined && input.notes !== existing.notes) {
153
+ updates.push('notes = ?');
154
+ params.push(input.notes || null);
155
+ changes.push({ field: 'notes', oldValue: existing.notes || null, newValue: input.notes || null });
156
+ }
157
+ if (updates.length === 0) {
158
+ return existing;
159
+ }
160
+ updates.push('updated_at = ?');
161
+ params.push(now);
162
+ params.push(id);
163
+ const stmt = this.db.prepare(`
164
+ UPDATE tasks SET ${updates.join(', ')} WHERE id = ?
165
+ `);
166
+ stmt.run(...params);
167
+ // Record history for each change
168
+ for (const change of changes) {
169
+ this.recordHistory(id, change.field, change.oldValue, change.newValue);
170
+ }
171
+ // Record activity
172
+ this.recordActivity(id, 'updated', `Updated: ${changes.map(c => c.field).join(', ')}`);
173
+ return this.get(id);
174
+ }
175
+ close(id, reason) {
176
+ const task = this.get(id);
177
+ if (!task)
178
+ return null;
179
+ const now = new Date().toISOString();
180
+ const stmt = this.db.prepare(`
181
+ UPDATE tasks SET status = 'done', closed_at = ?, closed_reason = ?, updated_at = ?
182
+ WHERE id = ?
183
+ `);
184
+ stmt.run(now, reason || null, now, id);
185
+ this.recordHistory(id, 'status', task.status, 'done');
186
+ this.recordActivity(id, 'closed', reason || 'Task completed');
187
+ return this.get(id);
188
+ }
189
+ delete(id) {
190
+ // Delete dependencies first
191
+ this.db.prepare('DELETE FROM task_dependencies WHERE from_task = ? OR to_task = ?').run(id, id);
192
+ // Delete history
193
+ this.db.prepare('DELETE FROM task_history WHERE task_id = ?').run(id);
194
+ // Delete activity
195
+ this.db.prepare('DELETE FROM task_activity WHERE task_id = ?').run(id);
196
+ // Delete task
197
+ const result = this.db.prepare('DELETE FROM tasks WHERE id = ?').run(id);
198
+ return result.changes > 0;
199
+ }
200
+ // ==================== Query Operations ====================
201
+ list(filter = {}) {
202
+ let sql = `
203
+ SELECT id, title, description, type, status, priority, assignee,
204
+ worktree_branch as worktreeBranch, labels, notes, parent_id as parentId,
205
+ created_at as createdAt, updated_at as updatedAt,
206
+ closed_at as closedAt, closed_reason as closedReason
207
+ FROM tasks WHERE 1=1
208
+ `;
209
+ const params = [];
210
+ if (filter.status) {
211
+ const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
212
+ sql += ` AND status IN (${statuses.map(() => '?').join(',')})`;
213
+ params.push(...statuses);
214
+ }
215
+ if (filter.type) {
216
+ const types = Array.isArray(filter.type) ? filter.type : [filter.type];
217
+ sql += ` AND type IN (${types.map(() => '?').join(',')})`;
218
+ params.push(...types);
219
+ }
220
+ if (filter.priority !== undefined) {
221
+ const priorities = Array.isArray(filter.priority) ? filter.priority : [filter.priority];
222
+ sql += ` AND priority IN (${priorities.map(() => '?').join(',')})`;
223
+ params.push(...priorities);
224
+ }
225
+ if (filter.assignee) {
226
+ sql += ' AND assignee = ?';
227
+ params.push(filter.assignee);
228
+ }
229
+ if (filter.parentId) {
230
+ sql += ' AND parent_id = ?';
231
+ params.push(filter.parentId);
232
+ }
233
+ if (filter.labels && filter.labels.length > 0) {
234
+ // Match any of the specified labels
235
+ const labelConditions = filter.labels.map(() => "labels LIKE ?");
236
+ sql += ` AND (${labelConditions.join(' OR ')})`;
237
+ params.push(...filter.labels.map(l => `%"${l}"%`));
238
+ }
239
+ if (filter.search) {
240
+ sql += ' AND (title LIKE ? OR description LIKE ?)';
241
+ const searchPattern = `%${filter.search}%`;
242
+ params.push(searchPattern, searchPattern);
243
+ }
244
+ sql += ' ORDER BY priority ASC, created_at DESC';
245
+ const stmt = this.db.prepare(sql);
246
+ const rows = stmt.all(...params);
247
+ let tasks = rows.map(row => ({
248
+ ...row,
249
+ labels: row.labels ? JSON.parse(row.labels) : [],
250
+ }));
251
+ // Post-filter for blocked/ready (requires dependency check)
252
+ if (filter.isBlocked !== undefined || filter.isReady !== undefined) {
253
+ tasks = tasks.filter(task => {
254
+ const withRelations = this.getWithRelations(task.id);
255
+ if (!withRelations)
256
+ return false;
257
+ if (filter.isBlocked !== undefined && withRelations.isBlocked !== filter.isBlocked) {
258
+ return false;
259
+ }
260
+ if (filter.isReady !== undefined && withRelations.isReady !== filter.isReady) {
261
+ return false;
262
+ }
263
+ return true;
264
+ });
265
+ }
266
+ return tasks;
267
+ }
268
+ ready() {
269
+ const openTasks = this.list({ status: 'open' });
270
+ return openTasks
271
+ .map(t => this.getWithRelations(t.id))
272
+ .filter((t) => t !== null && t.isReady);
273
+ }
274
+ blocked() {
275
+ const tasks = this.list({ status: ['open', 'in_progress'] });
276
+ return tasks
277
+ .map(t => this.getWithRelations(t.id))
278
+ .filter((t) => t !== null && t.isBlocked);
279
+ }
280
+ getChildren(parentId) {
281
+ return this.list({ parentId });
282
+ }
283
+ // ==================== Dependencies ====================
284
+ addDependency(fromTask, toTask, depType = 'blocks') {
285
+ // Validate both tasks exist
286
+ if (!this.get(fromTask) || !this.get(toTask)) {
287
+ return null;
288
+ }
289
+ // Prevent self-dependency
290
+ if (fromTask === toTask) {
291
+ return null;
292
+ }
293
+ // Check for cycles (for blocking dependencies)
294
+ if (depType === 'blocks' && this.wouldCreateCycle(fromTask, toTask)) {
295
+ return null;
296
+ }
297
+ const now = new Date().toISOString();
298
+ try {
299
+ const stmt = this.db.prepare(`
300
+ INSERT INTO task_dependencies (from_task, to_task, dep_type, created_at)
301
+ VALUES (?, ?, ?, ?)
302
+ `);
303
+ const result = stmt.run(fromTask, toTask, depType, now);
304
+ return {
305
+ id: result.lastInsertRowid,
306
+ fromTask,
307
+ toTask,
308
+ depType,
309
+ createdAt: now,
310
+ };
311
+ }
312
+ catch {
313
+ // Duplicate dependency
314
+ return null;
315
+ }
316
+ }
317
+ removeDependency(fromTask, toTask) {
318
+ const result = this.db.prepare(`
319
+ DELETE FROM task_dependencies WHERE from_task = ? AND to_task = ?
320
+ `).run(fromTask, toTask);
321
+ return result.changes > 0;
322
+ }
323
+ getDependencies(taskId) {
324
+ const stmt = this.db.prepare(`
325
+ SELECT id, from_task as fromTask, to_task as toTask, dep_type as depType, created_at as createdAt
326
+ FROM task_dependencies
327
+ WHERE from_task = ? OR to_task = ?
328
+ `);
329
+ return stmt.all(taskId, taskId);
330
+ }
331
+ getBlockers(taskId) {
332
+ const stmt = this.db.prepare(`
333
+ SELECT t.* FROM tasks t
334
+ JOIN task_dependencies d ON t.id = d.to_task
335
+ WHERE d.from_task = ? AND d.dep_type = 'blocks'
336
+ `);
337
+ const rows = stmt.all(taskId);
338
+ return rows.map(row => ({
339
+ ...row,
340
+ labels: row.labels ? JSON.parse(row.labels) : [],
341
+ }));
342
+ }
343
+ wouldCreateCycle(fromTask, toTask) {
344
+ // BFS to check if toTask can reach fromTask
345
+ const visited = new Set();
346
+ const queue = [toTask];
347
+ while (queue.length > 0) {
348
+ const current = queue.shift();
349
+ if (current === fromTask) {
350
+ return true; // Cycle detected
351
+ }
352
+ if (visited.has(current)) {
353
+ continue;
354
+ }
355
+ visited.add(current);
356
+ // Get tasks that current blocks
357
+ const stmt = this.db.prepare(`
358
+ SELECT to_task FROM task_dependencies
359
+ WHERE from_task = ? AND dep_type = 'blocks'
360
+ `);
361
+ const deps = stmt.all(current);
362
+ queue.push(...deps.map(d => d.to_task));
363
+ }
364
+ return false;
365
+ }
366
+ // ==================== History & Activity ====================
367
+ recordHistory(taskId, field, oldValue, newValue) {
368
+ const stmt = this.db.prepare(`
369
+ INSERT INTO task_history (task_id, field, old_value, new_value, changed_by, changed_at)
370
+ VALUES (?, ?, ?, ?, ?, ?)
371
+ `);
372
+ stmt.run(taskId, field, oldValue, newValue, this.agentId || null, new Date().toISOString());
373
+ }
374
+ recordActivity(taskId, activity, details) {
375
+ if (!this.agentId)
376
+ return;
377
+ const stmt = this.db.prepare(`
378
+ INSERT INTO task_activity (task_id, agent_id, activity, details, timestamp)
379
+ VALUES (?, ?, ?, ?, ?)
380
+ `);
381
+ stmt.run(taskId, this.agentId, activity, details || null, new Date().toISOString());
382
+ }
383
+ getHistory(taskId) {
384
+ const stmt = this.db.prepare(`
385
+ SELECT id, task_id as taskId, field, old_value as oldValue, new_value as newValue,
386
+ changed_by as changedBy, changed_at as changedAt
387
+ FROM task_history
388
+ WHERE task_id = ?
389
+ ORDER BY changed_at DESC
390
+ `);
391
+ return stmt.all(taskId);
392
+ }
393
+ getActivity(taskId) {
394
+ const stmt = this.db.prepare(`
395
+ SELECT id, task_id as taskId, agent_id as agentId, activity, details, timestamp
396
+ FROM task_activity
397
+ WHERE task_id = ?
398
+ ORDER BY timestamp DESC
399
+ `);
400
+ return stmt.all(taskId);
401
+ }
402
+ // ==================== Statistics ====================
403
+ getStats() {
404
+ const total = this.db.prepare('SELECT COUNT(*) as count FROM tasks').get().count;
405
+ const byStatus = {
406
+ open: 0, in_progress: 0, blocked: 0, done: 0, wont_do: 0
407
+ };
408
+ const statusRows = this.db.prepare('SELECT status, COUNT(*) as count FROM tasks GROUP BY status').all();
409
+ for (const row of statusRows) {
410
+ byStatus[row.status] = row.count;
411
+ }
412
+ const byType = {
413
+ task: 0, bug: 0, feature: 0, epic: 0, chore: 0, story: 0
414
+ };
415
+ const typeRows = this.db.prepare('SELECT type, COUNT(*) as count FROM tasks GROUP BY type').all();
416
+ for (const row of typeRows) {
417
+ byType[row.type] = row.count;
418
+ }
419
+ const byPriority = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0 };
420
+ const priorityRows = this.db.prepare('SELECT priority, COUNT(*) as count FROM tasks GROUP BY priority').all();
421
+ for (const row of priorityRows) {
422
+ byPriority[row.priority] = row.count;
423
+ }
424
+ const blocked = this.blocked().length;
425
+ const ready = this.ready().length;
426
+ return {
427
+ total,
428
+ byStatus,
429
+ byType,
430
+ byPriority,
431
+ blocked,
432
+ ready,
433
+ overdue: 0, // TODO: implement with due dates
434
+ };
435
+ }
436
+ // ==================== JSONL Sync ====================
437
+ exportToJSONL() {
438
+ const tasks = this.list({});
439
+ const lines = [];
440
+ for (const task of tasks) {
441
+ const deps = this.getDependencies(task.id)
442
+ .filter(d => d.fromTask === task.id)
443
+ .map(d => ({ toTask: d.toTask, depType: d.depType }));
444
+ const jsonl = {
445
+ id: task.id,
446
+ title: task.title,
447
+ description: task.description,
448
+ type: task.type,
449
+ status: task.status,
450
+ priority: task.priority,
451
+ assignee: task.assignee,
452
+ worktreeBranch: task.worktreeBranch,
453
+ labels: task.labels,
454
+ notes: task.notes,
455
+ parentId: task.parentId,
456
+ createdAt: task.createdAt,
457
+ updatedAt: task.updatedAt,
458
+ closedAt: task.closedAt,
459
+ closedReason: task.closedReason,
460
+ dependencies: deps,
461
+ };
462
+ lines.push(JSON.stringify(jsonl));
463
+ }
464
+ return lines.join('\n');
465
+ }
466
+ saveToJSONL() {
467
+ const dir = dirname(this.jsonlPath);
468
+ if (!existsSync(dir)) {
469
+ mkdirSync(dir, { recursive: true });
470
+ }
471
+ const content = this.exportToJSONL();
472
+ writeFileSync(this.jsonlPath, content);
473
+ }
474
+ importFromJSONL() {
475
+ if (!existsSync(this.jsonlPath)) {
476
+ return 0;
477
+ }
478
+ const content = readFileSync(this.jsonlPath, 'utf-8');
479
+ const lines = content.split('\n').filter(l => l.trim());
480
+ let imported = 0;
481
+ for (const line of lines) {
482
+ try {
483
+ const data = JSON.parse(line);
484
+ // Check if task exists
485
+ const existing = this.get(data.id);
486
+ if (existing) {
487
+ // Update if JSONL is newer
488
+ if (data.updatedAt > existing.updatedAt) {
489
+ this.db.prepare(`
490
+ UPDATE tasks SET title = ?, description = ?, type = ?, status = ?, priority = ?,
491
+ assignee = ?, worktree_branch = ?, labels = ?, notes = ?, parent_id = ?,
492
+ updated_at = ?, closed_at = ?, closed_reason = ?
493
+ WHERE id = ?
494
+ `).run(data.title, data.description || null, data.type, data.status, data.priority, data.assignee || null, data.worktreeBranch || null, JSON.stringify(data.labels), data.notes || null, data.parentId || null, data.updatedAt, data.closedAt || null, data.closedReason || null, data.id);
495
+ }
496
+ }
497
+ else {
498
+ // Insert new task
499
+ this.db.prepare(`
500
+ INSERT INTO tasks (id, title, description, type, status, priority, assignee,
501
+ worktree_branch, labels, notes, parent_id, created_at, updated_at, closed_at, closed_reason)
502
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
503
+ `).run(data.id, data.title, data.description || null, data.type, data.status, data.priority, data.assignee || null, data.worktreeBranch || null, JSON.stringify(data.labels), data.notes || null, data.parentId || null, data.createdAt, data.updatedAt, data.closedAt || null, data.closedReason || null);
504
+ imported++;
505
+ }
506
+ // Sync dependencies
507
+ for (const dep of data.dependencies || []) {
508
+ this.addDependency(data.id, dep.toTask, dep.depType);
509
+ }
510
+ }
511
+ catch {
512
+ // Skip invalid lines
513
+ }
514
+ }
515
+ return imported;
516
+ }
517
+ // ==================== Compaction ====================
518
+ compact(olderThanDays = 90) {
519
+ const cutoff = new Date(Date.now() - olderThanDays * 86400000).toISOString();
520
+ // Find old closed tasks
521
+ const stmt = this.db.prepare(`
522
+ SELECT id, title, type, labels, closed_at as closedAt
523
+ FROM tasks
524
+ WHERE status IN ('done', 'wont_do') AND closed_at < ?
525
+ ORDER BY closed_at ASC
526
+ `);
527
+ const oldTasks = stmt.all(cutoff);
528
+ if (oldTasks.length === 0) {
529
+ return null;
530
+ }
531
+ // Group by quarter
532
+ const quarters = new Map();
533
+ for (const task of oldTasks) {
534
+ const date = new Date(task.closedAt);
535
+ const quarter = `${date.getFullYear()}-Q${Math.floor(date.getMonth() / 3) + 1}`;
536
+ const existing = quarters.get(quarter) || [];
537
+ existing.push(task);
538
+ quarters.set(quarter, existing);
539
+ }
540
+ // Create summaries
541
+ const summaries = [];
542
+ for (const [period, tasks] of quarters) {
543
+ const allLabels = new Set();
544
+ for (const task of tasks) {
545
+ const labels = task.labels ? JSON.parse(task.labels) : [];
546
+ labels.forEach(l => allLabels.add(l));
547
+ }
548
+ const summary = `Completed ${tasks.length} tasks: ${tasks.slice(0, 5).map(t => t.title).join(', ')}${tasks.length > 5 ? '...' : ''}`;
549
+ const insertStmt = this.db.prepare(`
550
+ INSERT INTO task_summaries (original_ids, summary, labels, closed_period, created_at)
551
+ VALUES (?, ?, ?, ?, ?)
552
+ `);
553
+ const result = insertStmt.run(JSON.stringify(tasks.map(t => t.id)), summary, JSON.stringify([...allLabels]), period, new Date().toISOString());
554
+ summaries.push({
555
+ id: result.lastInsertRowid,
556
+ originalIds: tasks.map(t => t.id),
557
+ summary,
558
+ labels: [...allLabels],
559
+ closedPeriod: period,
560
+ createdAt: new Date().toISOString(),
561
+ });
562
+ // Delete compacted tasks
563
+ const ids = tasks.map(t => t.id);
564
+ this.db.prepare(`DELETE FROM tasks WHERE id IN (${ids.map(() => '?').join(',')})`).run(...ids);
565
+ }
566
+ return summaries[0] || null;
567
+ }
568
+ getSummaries() {
569
+ const stmt = this.db.prepare(`
570
+ SELECT id, original_ids as originalIds, summary, labels, closed_period as closedPeriod, created_at as createdAt
571
+ FROM task_summaries
572
+ ORDER BY closed_period DESC
573
+ `);
574
+ const rows = stmt.all();
575
+ return rows.map(row => ({
576
+ ...row,
577
+ originalIds: JSON.parse(row.originalIds),
578
+ labels: row.labels ? JSON.parse(row.labels) : [],
579
+ }));
580
+ }
581
+ }
582
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/tasks/service.ts"],"names":[],"mappings":"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"}