kemdicode-mcp 1.15.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.

Potentially problematic release.


This version of kemdicode-mcp might be problematic. Click here for more details.

Files changed (872) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +486 -0
  3. package/dist/ai/agents.d.ts +40 -0
  4. package/dist/ai/agents.d.ts.map +1 -0
  5. package/dist/ai/agents.js +164 -0
  6. package/dist/ai/agents.js.map +1 -0
  7. package/dist/ai/client.d.ts +73 -0
  8. package/dist/ai/client.d.ts.map +1 -0
  9. package/dist/ai/client.js +235 -0
  10. package/dist/ai/client.js.map +1 -0
  11. package/dist/ai/execute.d.ts +61 -0
  12. package/dist/ai/execute.d.ts.map +1 -0
  13. package/dist/ai/execute.js +98 -0
  14. package/dist/ai/execute.js.map +1 -0
  15. package/dist/ai/file-context.d.ts +44 -0
  16. package/dist/ai/file-context.d.ts.map +1 -0
  17. package/dist/ai/file-context.js +220 -0
  18. package/dist/ai/file-context.js.map +1 -0
  19. package/dist/ai/index.d.ts +14 -0
  20. package/dist/ai/index.d.ts.map +1 -0
  21. package/dist/ai/index.js +21 -0
  22. package/dist/ai/index.js.map +1 -0
  23. package/dist/ai/model-spec.d.ts +33 -0
  24. package/dist/ai/model-spec.d.ts.map +1 -0
  25. package/dist/ai/model-spec.js +106 -0
  26. package/dist/ai/model-spec.js.map +1 -0
  27. package/dist/ai/providers/anthropic.provider.d.ts +23 -0
  28. package/dist/ai/providers/anthropic.provider.d.ts.map +1 -0
  29. package/dist/ai/providers/anthropic.provider.js +135 -0
  30. package/dist/ai/providers/anthropic.provider.js.map +1 -0
  31. package/dist/ai/providers/gemini.provider.d.ts +20 -0
  32. package/dist/ai/providers/gemini.provider.d.ts.map +1 -0
  33. package/dist/ai/providers/gemini.provider.js +113 -0
  34. package/dist/ai/providers/gemini.provider.js.map +1 -0
  35. package/dist/ai/providers/index.d.ts +13 -0
  36. package/dist/ai/providers/index.d.ts.map +1 -0
  37. package/dist/ai/providers/index.js +12 -0
  38. package/dist/ai/providers/index.js.map +1 -0
  39. package/dist/ai/providers/openai-compat.provider.d.ts +13 -0
  40. package/dist/ai/providers/openai-compat.provider.d.ts.map +1 -0
  41. package/dist/ai/providers/openai-compat.provider.js +68 -0
  42. package/dist/ai/providers/openai-compat.provider.js.map +1 -0
  43. package/dist/ai/providers/openai-shared.d.ts +41 -0
  44. package/dist/ai/providers/openai-shared.d.ts.map +1 -0
  45. package/dist/ai/providers/openai-shared.js +67 -0
  46. package/dist/ai/providers/openai-shared.js.map +1 -0
  47. package/dist/ai/providers/openai.provider.d.ts +22 -0
  48. package/dist/ai/providers/openai.provider.d.ts.map +1 -0
  49. package/dist/ai/providers/openai.provider.js +74 -0
  50. package/dist/ai/providers/openai.provider.js.map +1 -0
  51. package/dist/ai/providers/registry.d.ts +33 -0
  52. package/dist/ai/providers/registry.d.ts.map +1 -0
  53. package/dist/ai/providers/registry.js +137 -0
  54. package/dist/ai/providers/registry.js.map +1 -0
  55. package/dist/ai/providers/types.d.ts +59 -0
  56. package/dist/ai/providers/types.d.ts.map +1 -0
  57. package/dist/ai/providers/types.js +58 -0
  58. package/dist/ai/providers/types.js.map +1 -0
  59. package/dist/ai/workspace-editor.d.ts +59 -0
  60. package/dist/ai/workspace-editor.d.ts.map +1 -0
  61. package/dist/ai/workspace-editor.js +155 -0
  62. package/dist/ai/workspace-editor.js.map +1 -0
  63. package/dist/config/defaults.d.ts +31 -0
  64. package/dist/config/defaults.d.ts.map +1 -0
  65. package/dist/config/defaults.js +100 -0
  66. package/dist/config/defaults.js.map +1 -0
  67. package/dist/config/index.d.ts +45 -0
  68. package/dist/config/index.d.ts.map +1 -0
  69. package/dist/config/index.js +44 -0
  70. package/dist/config/index.js.map +1 -0
  71. package/dist/config/manager.d.ts +101 -0
  72. package/dist/config/manager.d.ts.map +1 -0
  73. package/dist/config/manager.js +338 -0
  74. package/dist/config/manager.js.map +1 -0
  75. package/dist/config/schema.d.ts +382 -0
  76. package/dist/config/schema.d.ts.map +1 -0
  77. package/dist/config/schema.js +150 -0
  78. package/dist/config/schema.js.map +1 -0
  79. package/dist/config/types.d.ts +189 -0
  80. package/dist/config/types.d.ts.map +1 -0
  81. package/dist/config/types.js +32 -0
  82. package/dist/config/types.js.map +1 -0
  83. package/dist/constants.d.ts +92 -0
  84. package/dist/constants.d.ts.map +1 -0
  85. package/dist/constants.js +100 -0
  86. package/dist/constants.js.map +1 -0
  87. package/dist/context/agent-monitor.d.ts +173 -0
  88. package/dist/context/agent-monitor.d.ts.map +1 -0
  89. package/dist/context/agent-monitor.js +958 -0
  90. package/dist/context/agent-monitor.js.map +1 -0
  91. package/dist/context/feedback-loop.d.ts +73 -0
  92. package/dist/context/feedback-loop.d.ts.map +1 -0
  93. package/dist/context/feedback-loop.js +303 -0
  94. package/dist/context/feedback-loop.js.map +1 -0
  95. package/dist/context/index.d.ts +29 -0
  96. package/dist/context/index.d.ts.map +1 -0
  97. package/dist/context/index.js +29 -0
  98. package/dist/context/index.js.map +1 -0
  99. package/dist/context/integration.d.ts +83 -0
  100. package/dist/context/integration.d.ts.map +1 -0
  101. package/dist/context/integration.js +276 -0
  102. package/dist/context/integration.js.map +1 -0
  103. package/dist/context/iteration-tracker.d.ts +87 -0
  104. package/dist/context/iteration-tracker.d.ts.map +1 -0
  105. package/dist/context/iteration-tracker.js +333 -0
  106. package/dist/context/iteration-tracker.js.map +1 -0
  107. package/dist/context/storage.d.ts +234 -0
  108. package/dist/context/storage.d.ts.map +1 -0
  109. package/dist/context/storage.js +513 -0
  110. package/dist/context/storage.js.map +1 -0
  111. package/dist/context/types.d.ts +396 -0
  112. package/dist/context/types.d.ts.map +1 -0
  113. package/dist/context/types.js +125 -0
  114. package/dist/context/types.js.map +1 -0
  115. package/dist/index.d.ts +70 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +207 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/infrastructure/redis/connection.d.ts +111 -0
  120. package/dist/infrastructure/redis/connection.d.ts.map +1 -0
  121. package/dist/infrastructure/redis/connection.js +242 -0
  122. package/dist/infrastructure/redis/connection.js.map +1 -0
  123. package/dist/infrastructure/redis/index.d.ts +2 -0
  124. package/dist/infrastructure/redis/index.d.ts.map +1 -0
  125. package/dist/infrastructure/redis/index.js +2 -0
  126. package/dist/infrastructure/redis/index.js.map +1 -0
  127. package/dist/infrastructure/redis/redis-backed-service.d.ts +35 -0
  128. package/dist/infrastructure/redis/redis-backed-service.d.ts.map +1 -0
  129. package/dist/infrastructure/redis/redis-backed-service.js +55 -0
  130. package/dist/infrastructure/redis/redis-backed-service.js.map +1 -0
  131. package/dist/kanban/board-store.d.ts +222 -0
  132. package/dist/kanban/board-store.d.ts.map +1 -0
  133. package/dist/kanban/board-store.js +486 -0
  134. package/dist/kanban/board-store.js.map +1 -0
  135. package/dist/kanban/index.d.ts +33 -0
  136. package/dist/kanban/index.d.ts.map +1 -0
  137. package/dist/kanban/index.js +37 -0
  138. package/dist/kanban/index.js.map +1 -0
  139. package/dist/kanban/kanban-store.d.ts +236 -0
  140. package/dist/kanban/kanban-store.d.ts.map +1 -0
  141. package/dist/kanban/kanban-store.js +854 -0
  142. package/dist/kanban/kanban-store.js.map +1 -0
  143. package/dist/kanban/membership-store.d.ts +230 -0
  144. package/dist/kanban/membership-store.d.ts.map +1 -0
  145. package/dist/kanban/membership-store.js +384 -0
  146. package/dist/kanban/membership-store.js.map +1 -0
  147. package/dist/kanban/migration.d.ts +131 -0
  148. package/dist/kanban/migration.d.ts.map +1 -0
  149. package/dist/kanban/migration.js +275 -0
  150. package/dist/kanban/migration.js.map +1 -0
  151. package/dist/kanban/types.d.ts +314 -0
  152. package/dist/kanban/types.d.ts.map +1 -0
  153. package/dist/kanban/types.js +126 -0
  154. package/dist/kanban/types.js.map +1 -0
  155. package/dist/kanban/workspace-store.d.ts +193 -0
  156. package/dist/kanban/workspace-store.d.ts.map +1 -0
  157. package/dist/kanban/workspace-store.js +386 -0
  158. package/dist/kanban/workspace-store.js.map +1 -0
  159. package/dist/loci/graph-storage.d.ts +120 -0
  160. package/dist/loci/graph-storage.d.ts.map +1 -0
  161. package/dist/loci/graph-storage.js +489 -0
  162. package/dist/loci/graph-storage.js.map +1 -0
  163. package/dist/loci/graph-traversal.d.ts +56 -0
  164. package/dist/loci/graph-traversal.d.ts.map +1 -0
  165. package/dist/loci/graph-traversal.js +291 -0
  166. package/dist/loci/graph-traversal.js.map +1 -0
  167. package/dist/loci/index.d.ts +30 -0
  168. package/dist/loci/index.d.ts.map +1 -0
  169. package/dist/loci/index.js +27 -0
  170. package/dist/loci/index.js.map +1 -0
  171. package/dist/loci/loci-manager.d.ts +119 -0
  172. package/dist/loci/loci-manager.d.ts.map +1 -0
  173. package/dist/loci/loci-manager.js +435 -0
  174. package/dist/loci/loci-manager.js.map +1 -0
  175. package/dist/loci/sequence-tracker.d.ts +89 -0
  176. package/dist/loci/sequence-tracker.d.ts.map +1 -0
  177. package/dist/loci/sequence-tracker.js +311 -0
  178. package/dist/loci/sequence-tracker.js.map +1 -0
  179. package/dist/loci/types.d.ts +306 -0
  180. package/dist/loci/types.d.ts.map +1 -0
  181. package/dist/loci/types.js +143 -0
  182. package/dist/loci/types.js.map +1 -0
  183. package/dist/mpc/auth.d.ts +67 -0
  184. package/dist/mpc/auth.d.ts.map +1 -0
  185. package/dist/mpc/auth.js +173 -0
  186. package/dist/mpc/auth.js.map +1 -0
  187. package/dist/mpc/crypto.d.ts +139 -0
  188. package/dist/mpc/crypto.d.ts.map +1 -0
  189. package/dist/mpc/crypto.js +287 -0
  190. package/dist/mpc/crypto.js.map +1 -0
  191. package/dist/mpc/index.d.ts +30 -0
  192. package/dist/mpc/index.d.ts.map +1 -0
  193. package/dist/mpc/index.js +27 -0
  194. package/dist/mpc/index.js.map +1 -0
  195. package/dist/mpc/redis-store.d.ts +88 -0
  196. package/dist/mpc/redis-store.d.ts.map +1 -0
  197. package/dist/mpc/redis-store.js +337 -0
  198. package/dist/mpc/redis-store.js.map +1 -0
  199. package/dist/mpc/share-manager.d.ts +59 -0
  200. package/dist/mpc/share-manager.d.ts.map +1 -0
  201. package/dist/mpc/share-manager.js +254 -0
  202. package/dist/mpc/share-manager.js.map +1 -0
  203. package/dist/mpc/types.d.ts +213 -0
  204. package/dist/mpc/types.d.ts.map +1 -0
  205. package/dist/mpc/types.js +42 -0
  206. package/dist/mpc/types.js.map +1 -0
  207. package/dist/recursive/index.d.ts +27 -0
  208. package/dist/recursive/index.d.ts.map +1 -0
  209. package/dist/recursive/index.js +27 -0
  210. package/dist/recursive/index.js.map +1 -0
  211. package/dist/recursive/tool-invoker.d.ts +51 -0
  212. package/dist/recursive/tool-invoker.d.ts.map +1 -0
  213. package/dist/recursive/tool-invoker.js +293 -0
  214. package/dist/recursive/tool-invoker.js.map +1 -0
  215. package/dist/recursive/types.d.ts +110 -0
  216. package/dist/recursive/types.d.ts.map +1 -0
  217. package/dist/recursive/types.js +52 -0
  218. package/dist/recursive/types.js.map +1 -0
  219. package/dist/rl/dopamine.d.ts +96 -0
  220. package/dist/rl/dopamine.d.ts.map +1 -0
  221. package/dist/rl/dopamine.js +242 -0
  222. package/dist/rl/dopamine.js.map +1 -0
  223. package/dist/rl/index.d.ts +30 -0
  224. package/dist/rl/index.d.ts.map +1 -0
  225. package/dist/rl/index.js +27 -0
  226. package/dist/rl/index.js.map +1 -0
  227. package/dist/rl/potential.d.ts +78 -0
  228. package/dist/rl/potential.d.ts.map +1 -0
  229. package/dist/rl/potential.js +152 -0
  230. package/dist/rl/potential.js.map +1 -0
  231. package/dist/rl/rewards.d.ts +92 -0
  232. package/dist/rl/rewards.d.ts.map +1 -0
  233. package/dist/rl/rewards.js +278 -0
  234. package/dist/rl/rewards.js.map +1 -0
  235. package/dist/rl/state-tracker.d.ts +107 -0
  236. package/dist/rl/state-tracker.d.ts.map +1 -0
  237. package/dist/rl/state-tracker.js +285 -0
  238. package/dist/rl/state-tracker.js.map +1 -0
  239. package/dist/rl/types.d.ts +274 -0
  240. package/dist/rl/types.d.ts.map +1 -0
  241. package/dist/rl/types.js +145 -0
  242. package/dist/rl/types.js.map +1 -0
  243. package/dist/runtime/crypto.d.ts +87 -0
  244. package/dist/runtime/crypto.d.ts.map +1 -0
  245. package/dist/runtime/crypto.js +226 -0
  246. package/dist/runtime/crypto.js.map +1 -0
  247. package/dist/runtime/http.d.ts +111 -0
  248. package/dist/runtime/http.d.ts.map +1 -0
  249. package/dist/runtime/http.js +350 -0
  250. package/dist/runtime/http.js.map +1 -0
  251. package/dist/runtime/index.d.ts +48 -0
  252. package/dist/runtime/index.d.ts.map +1 -0
  253. package/dist/runtime/index.js +43 -0
  254. package/dist/runtime/index.js.map +1 -0
  255. package/dist/runtime/net.d.ts +42 -0
  256. package/dist/runtime/net.d.ts.map +1 -0
  257. package/dist/runtime/net.js +108 -0
  258. package/dist/runtime/net.js.map +1 -0
  259. package/dist/runtime/process.d.ts +54 -0
  260. package/dist/runtime/process.d.ts.map +1 -0
  261. package/dist/runtime/process.js +247 -0
  262. package/dist/runtime/process.js.map +1 -0
  263. package/dist/runtime/types.d.ts +143 -0
  264. package/dist/runtime/types.d.ts.map +1 -0
  265. package/dist/runtime/types.js +19 -0
  266. package/dist/runtime/types.js.map +1 -0
  267. package/dist/server/http-server.d.ts +26 -0
  268. package/dist/server/http-server.d.ts.map +1 -0
  269. package/dist/server/http-server.js +290 -0
  270. package/dist/server/http-server.js.map +1 -0
  271. package/dist/server/index.d.ts +22 -0
  272. package/dist/server/index.d.ts.map +1 -0
  273. package/dist/server/index.js +25 -0
  274. package/dist/server/index.js.map +1 -0
  275. package/dist/server/progress.d.ts +74 -0
  276. package/dist/server/progress.d.ts.map +1 -0
  277. package/dist/server/progress.js +174 -0
  278. package/dist/server/progress.js.map +1 -0
  279. package/dist/server/session-server.d.ts +76 -0
  280. package/dist/server/session-server.d.ts.map +1 -0
  281. package/dist/server/session-server.js +186 -0
  282. package/dist/server/session-server.js.map +1 -0
  283. package/dist/server/types.d.ts +82 -0
  284. package/dist/server/types.d.ts.map +1 -0
  285. package/dist/server/types.js +25 -0
  286. package/dist/server/types.js.map +1 -0
  287. package/dist/session/cwd-resolver.d.ts +136 -0
  288. package/dist/session/cwd-resolver.d.ts.map +1 -0
  289. package/dist/session/cwd-resolver.js +715 -0
  290. package/dist/session/cwd-resolver.js.map +1 -0
  291. package/dist/session/index.d.ts +27 -0
  292. package/dist/session/index.d.ts.map +1 -0
  293. package/dist/session/index.js +27 -0
  294. package/dist/session/index.js.map +1 -0
  295. package/dist/session/manager.d.ts +296 -0
  296. package/dist/session/manager.d.ts.map +1 -0
  297. package/dist/session/manager.js +605 -0
  298. package/dist/session/manager.js.map +1 -0
  299. package/dist/session/types.d.ts +152 -0
  300. package/dist/session/types.d.ts.map +1 -0
  301. package/dist/session/types.js +60 -0
  302. package/dist/session/types.js.map +1 -0
  303. package/dist/tools/agents/agent-alert.tool.d.ts +20 -0
  304. package/dist/tools/agents/agent-alert.tool.d.ts.map +1 -0
  305. package/dist/tools/agents/agent-alert.tool.js +103 -0
  306. package/dist/tools/agents/agent-alert.tool.js.map +1 -0
  307. package/dist/tools/agents/agent-history.tool.d.ts +20 -0
  308. package/dist/tools/agents/agent-history.tool.d.ts.map +1 -0
  309. package/dist/tools/agents/agent-history.tool.js +133 -0
  310. package/dist/tools/agents/agent-history.tool.js.map +1 -0
  311. package/dist/tools/agents/agent-inject.tool.d.ts +39 -0
  312. package/dist/tools/agents/agent-inject.tool.d.ts.map +1 -0
  313. package/dist/tools/agents/agent-inject.tool.js +121 -0
  314. package/dist/tools/agents/agent-inject.tool.js.map +1 -0
  315. package/dist/tools/agents/agent-list.tool.d.ts +20 -0
  316. package/dist/tools/agents/agent-list.tool.d.ts.map +1 -0
  317. package/dist/tools/agents/agent-list.tool.js +86 -0
  318. package/dist/tools/agents/agent-list.tool.js.map +1 -0
  319. package/dist/tools/agents/agent-register.tool.d.ts +20 -0
  320. package/dist/tools/agents/agent-register.tool.d.ts.map +1 -0
  321. package/dist/tools/agents/agent-register.tool.js +114 -0
  322. package/dist/tools/agents/agent-register.tool.js.map +1 -0
  323. package/dist/tools/agents/agent-summary.tool.d.ts +20 -0
  324. package/dist/tools/agents/agent-summary.tool.d.ts.map +1 -0
  325. package/dist/tools/agents/agent-summary.tool.js +99 -0
  326. package/dist/tools/agents/agent-summary.tool.js.map +1 -0
  327. package/dist/tools/agents/agent-watch.tool.d.ts +20 -0
  328. package/dist/tools/agents/agent-watch.tool.d.ts.map +1 -0
  329. package/dist/tools/agents/agent-watch.tool.js +56 -0
  330. package/dist/tools/agents/agent-watch.tool.js.map +1 -0
  331. package/dist/tools/agents/index.d.ts +41 -0
  332. package/dist/tools/agents/index.d.ts.map +1 -0
  333. package/dist/tools/agents/index.js +41 -0
  334. package/dist/tools/agents/index.js.map +1 -0
  335. package/dist/tools/agents/monitor.tool.d.ts +20 -0
  336. package/dist/tools/agents/monitor.tool.d.ts.map +1 -0
  337. package/dist/tools/agents/monitor.tool.js +314 -0
  338. package/dist/tools/agents/monitor.tool.js.map +1 -0
  339. package/dist/tools/agents/queue-message.tool.d.ts +20 -0
  340. package/dist/tools/agents/queue-message.tool.d.ts.map +1 -0
  341. package/dist/tools/agents/queue-message.tool.js +176 -0
  342. package/dist/tools/agents/queue-message.tool.js.map +1 -0
  343. package/dist/tools/ask-ai.tool.d.ts +20 -0
  344. package/dist/tools/ask-ai.tool.d.ts.map +1 -0
  345. package/dist/tools/ask-ai.tool.js +49 -0
  346. package/dist/tools/ask-ai.tool.js.map +1 -0
  347. package/dist/tools/batch.tool.d.ts +42 -0
  348. package/dist/tools/batch.tool.d.ts.map +1 -0
  349. package/dist/tools/batch.tool.js +146 -0
  350. package/dist/tools/batch.tool.js.map +1 -0
  351. package/dist/tools/brainstorm.tool.d.ts +20 -0
  352. package/dist/tools/brainstorm.tool.d.ts.map +1 -0
  353. package/dist/tools/brainstorm.tool.js +86 -0
  354. package/dist/tools/brainstorm.tool.js.map +1 -0
  355. package/dist/tools/code/code-outline.tool.d.ts +20 -0
  356. package/dist/tools/code/code-outline.tool.d.ts.map +1 -0
  357. package/dist/tools/code/code-outline.tool.js +803 -0
  358. package/dist/tools/code/code-outline.tool.js.map +1 -0
  359. package/dist/tools/code/find-definition.tool.d.ts +20 -0
  360. package/dist/tools/code/find-definition.tool.d.ts.map +1 -0
  361. package/dist/tools/code/find-definition.tool.js +218 -0
  362. package/dist/tools/code/find-definition.tool.js.map +1 -0
  363. package/dist/tools/code/find-references.tool.d.ts +20 -0
  364. package/dist/tools/code/find-references.tool.d.ts.map +1 -0
  365. package/dist/tools/code/find-references.tool.js +207 -0
  366. package/dist/tools/code/find-references.tool.js.map +1 -0
  367. package/dist/tools/code/find-symbols.tool.d.ts +20 -0
  368. package/dist/tools/code/find-symbols.tool.d.ts.map +1 -0
  369. package/dist/tools/code/find-symbols.tool.js +367 -0
  370. package/dist/tools/code/find-symbols.tool.js.map +1 -0
  371. package/dist/tools/code/index.d.ts +34 -0
  372. package/dist/tools/code/index.d.ts.map +1 -0
  373. package/dist/tools/code/index.js +35 -0
  374. package/dist/tools/code/index.js.map +1 -0
  375. package/dist/tools/code/insert-after-symbol.tool.d.ts +20 -0
  376. package/dist/tools/code/insert-after-symbol.tool.d.ts.map +1 -0
  377. package/dist/tools/code/insert-after-symbol.tool.js +224 -0
  378. package/dist/tools/code/insert-after-symbol.tool.js.map +1 -0
  379. package/dist/tools/code/insert-before-symbol.tool.d.ts +20 -0
  380. package/dist/tools/code/insert-before-symbol.tool.d.ts.map +1 -0
  381. package/dist/tools/code/insert-before-symbol.tool.js +136 -0
  382. package/dist/tools/code/insert-before-symbol.tool.js.map +1 -0
  383. package/dist/tools/code/rename-symbol.tool.d.ts +20 -0
  384. package/dist/tools/code/rename-symbol.tool.d.ts.map +1 -0
  385. package/dist/tools/code/rename-symbol.tool.js +255 -0
  386. package/dist/tools/code/rename-symbol.tool.js.map +1 -0
  387. package/dist/tools/code/semantic-search.tool.d.ts +20 -0
  388. package/dist/tools/code/semantic-search.tool.d.ts.map +1 -0
  389. package/dist/tools/code/semantic-search.tool.js +172 -0
  390. package/dist/tools/code/semantic-search.tool.js.map +1 -0
  391. package/dist/tools/code/symbol-search.d.ts +39 -0
  392. package/dist/tools/code/symbol-search.d.ts.map +1 -0
  393. package/dist/tools/code/symbol-search.js +118 -0
  394. package/dist/tools/code/symbol-search.js.map +1 -0
  395. package/dist/tools/context/feedback.tool.d.ts +20 -0
  396. package/dist/tools/context/feedback.tool.d.ts.map +1 -0
  397. package/dist/tools/context/feedback.tool.js +176 -0
  398. package/dist/tools/context/feedback.tool.js.map +1 -0
  399. package/dist/tools/context/get-shared-context.tool.d.ts +20 -0
  400. package/dist/tools/context/get-shared-context.tool.d.ts.map +1 -0
  401. package/dist/tools/context/get-shared-context.tool.js +83 -0
  402. package/dist/tools/context/get-shared-context.tool.js.map +1 -0
  403. package/dist/tools/context/index.d.ts +26 -0
  404. package/dist/tools/context/index.d.ts.map +1 -0
  405. package/dist/tools/context/index.js +26 -0
  406. package/dist/tools/context/index.js.map +1 -0
  407. package/dist/tools/context/shared-thoughts.tool.d.ts +20 -0
  408. package/dist/tools/context/shared-thoughts.tool.d.ts.map +1 -0
  409. package/dist/tools/context/shared-thoughts.tool.js +199 -0
  410. package/dist/tools/context/shared-thoughts.tool.js.map +1 -0
  411. package/dist/tools/edit/delete-lines.tool.d.ts +20 -0
  412. package/dist/tools/edit/delete-lines.tool.d.ts.map +1 -0
  413. package/dist/tools/edit/delete-lines.tool.js +88 -0
  414. package/dist/tools/edit/delete-lines.tool.js.map +1 -0
  415. package/dist/tools/edit/edit-shared.d.ts +55 -0
  416. package/dist/tools/edit/edit-shared.d.ts.map +1 -0
  417. package/dist/tools/edit/edit-shared.js +122 -0
  418. package/dist/tools/edit/edit-shared.js.map +1 -0
  419. package/dist/tools/edit/index.d.ts +29 -0
  420. package/dist/tools/edit/index.d.ts.map +1 -0
  421. package/dist/tools/edit/index.js +29 -0
  422. package/dist/tools/edit/index.js.map +1 -0
  423. package/dist/tools/edit/insert-at-line.tool.d.ts +20 -0
  424. package/dist/tools/edit/insert-at-line.tool.d.ts.map +1 -0
  425. package/dist/tools/edit/insert-at-line.tool.js +92 -0
  426. package/dist/tools/edit/insert-at-line.tool.js.map +1 -0
  427. package/dist/tools/edit/replace-content.tool.d.ts +20 -0
  428. package/dist/tools/edit/replace-content.tool.d.ts.map +1 -0
  429. package/dist/tools/edit/replace-content.tool.js +214 -0
  430. package/dist/tools/edit/replace-content.tool.js.map +1 -0
  431. package/dist/tools/edit/replace-lines.tool.d.ts +20 -0
  432. package/dist/tools/edit/replace-lines.tool.d.ts.map +1 -0
  433. package/dist/tools/edit/replace-lines.tool.js +97 -0
  434. package/dist/tools/edit/replace-lines.tool.js.map +1 -0
  435. package/dist/tools/file/file-diff.tool.d.ts +20 -0
  436. package/dist/tools/file/file-diff.tool.d.ts.map +1 -0
  437. package/dist/tools/file/file-diff.tool.js +359 -0
  438. package/dist/tools/file/file-diff.tool.js.map +1 -0
  439. package/dist/tools/file/file-read.tool.d.ts +20 -0
  440. package/dist/tools/file/file-read.tool.d.ts.map +1 -0
  441. package/dist/tools/file/file-read.tool.js +270 -0
  442. package/dist/tools/file/file-read.tool.js.map +1 -0
  443. package/dist/tools/file/file-search.tool.d.ts +20 -0
  444. package/dist/tools/file/file-search.tool.d.ts.map +1 -0
  445. package/dist/tools/file/file-search.tool.js +339 -0
  446. package/dist/tools/file/file-search.tool.js.map +1 -0
  447. package/dist/tools/file/file-tree.tool.d.ts +49 -0
  448. package/dist/tools/file/file-tree.tool.d.ts.map +1 -0
  449. package/dist/tools/file/file-tree.tool.js +398 -0
  450. package/dist/tools/file/file-tree.tool.js.map +1 -0
  451. package/dist/tools/file/file-write.tool.d.ts +20 -0
  452. package/dist/tools/file/file-write.tool.d.ts.map +1 -0
  453. package/dist/tools/file/file-write.tool.js +204 -0
  454. package/dist/tools/file/file-write.tool.js.map +1 -0
  455. package/dist/tools/file/index.d.ts +31 -0
  456. package/dist/tools/file/index.d.ts.map +1 -0
  457. package/dist/tools/file/index.js +31 -0
  458. package/dist/tools/file/index.js.map +1 -0
  459. package/dist/tools/git/git-blame.tool.d.ts +20 -0
  460. package/dist/tools/git/git-blame.tool.d.ts.map +1 -0
  461. package/dist/tools/git/git-blame.tool.js +138 -0
  462. package/dist/tools/git/git-blame.tool.js.map +1 -0
  463. package/dist/tools/git/git-branch.tool.d.ts +20 -0
  464. package/dist/tools/git/git-branch.tool.d.ts.map +1 -0
  465. package/dist/tools/git/git-branch.tool.js +158 -0
  466. package/dist/tools/git/git-branch.tool.js.map +1 -0
  467. package/dist/tools/git/git-diff.tool.d.ts +20 -0
  468. package/dist/tools/git/git-diff.tool.d.ts.map +1 -0
  469. package/dist/tools/git/git-diff.tool.js +117 -0
  470. package/dist/tools/git/git-diff.tool.js.map +1 -0
  471. package/dist/tools/git/git-log.tool.d.ts +20 -0
  472. package/dist/tools/git/git-log.tool.d.ts.map +1 -0
  473. package/dist/tools/git/git-log.tool.js +150 -0
  474. package/dist/tools/git/git-log.tool.js.map +1 -0
  475. package/dist/tools/git/git-status.tool.d.ts +20 -0
  476. package/dist/tools/git/git-status.tool.d.ts.map +1 -0
  477. package/dist/tools/git/git-status.tool.js +81 -0
  478. package/dist/tools/git/git-status.tool.js.map +1 -0
  479. package/dist/tools/git/index.d.ts +31 -0
  480. package/dist/tools/git/index.d.ts.map +1 -0
  481. package/dist/tools/git/index.js +32 -0
  482. package/dist/tools/git/index.js.map +1 -0
  483. package/dist/tools/index.d.ts +19 -0
  484. package/dist/tools/index.d.ts.map +1 -0
  485. package/dist/tools/index.js +170 -0
  486. package/dist/tools/index.js.map +1 -0
  487. package/dist/tools/kanban/board-create.tool.d.ts +20 -0
  488. package/dist/tools/kanban/board-create.tool.d.ts.map +1 -0
  489. package/dist/tools/kanban/board-create.tool.js +92 -0
  490. package/dist/tools/kanban/board-create.tool.js.map +1 -0
  491. package/dist/tools/kanban/board-invite.tool.d.ts +20 -0
  492. package/dist/tools/kanban/board-invite.tool.d.ts.map +1 -0
  493. package/dist/tools/kanban/board-invite.tool.js +96 -0
  494. package/dist/tools/kanban/board-invite.tool.js.map +1 -0
  495. package/dist/tools/kanban/board-list.tool.d.ts +20 -0
  496. package/dist/tools/kanban/board-list.tool.d.ts.map +1 -0
  497. package/dist/tools/kanban/board-list.tool.js +94 -0
  498. package/dist/tools/kanban/board-list.tool.js.map +1 -0
  499. package/dist/tools/kanban/board-members.tool.d.ts +20 -0
  500. package/dist/tools/kanban/board-members.tool.d.ts.map +1 -0
  501. package/dist/tools/kanban/board-members.tool.js +153 -0
  502. package/dist/tools/kanban/board-members.tool.js.map +1 -0
  503. package/dist/tools/kanban/board-share.tool.d.ts +20 -0
  504. package/dist/tools/kanban/board-share.tool.d.ts.map +1 -0
  505. package/dist/tools/kanban/board-share.tool.js +91 -0
  506. package/dist/tools/kanban/board-share.tool.js.map +1 -0
  507. package/dist/tools/kanban/board-status.tool.d.ts +20 -0
  508. package/dist/tools/kanban/board-status.tool.d.ts.map +1 -0
  509. package/dist/tools/kanban/board-status.tool.js +79 -0
  510. package/dist/tools/kanban/board-status.tool.js.map +1 -0
  511. package/dist/tools/kanban/index.d.ts +42 -0
  512. package/dist/tools/kanban/index.d.ts.map +1 -0
  513. package/dist/tools/kanban/index.js +46 -0
  514. package/dist/tools/kanban/index.js.map +1 -0
  515. package/dist/tools/kanban/task-assign.tool.d.ts +20 -0
  516. package/dist/tools/kanban/task-assign.tool.d.ts.map +1 -0
  517. package/dist/tools/kanban/task-assign.tool.js +103 -0
  518. package/dist/tools/kanban/task-assign.tool.js.map +1 -0
  519. package/dist/tools/kanban/task-claim.tool.d.ts +20 -0
  520. package/dist/tools/kanban/task-claim.tool.d.ts.map +1 -0
  521. package/dist/tools/kanban/task-claim.tool.js +107 -0
  522. package/dist/tools/kanban/task-claim.tool.js.map +1 -0
  523. package/dist/tools/kanban/task-create.tool.d.ts +20 -0
  524. package/dist/tools/kanban/task-create.tool.d.ts.map +1 -0
  525. package/dist/tools/kanban/task-create.tool.js +123 -0
  526. package/dist/tools/kanban/task-create.tool.js.map +1 -0
  527. package/dist/tools/kanban/task-list.tool.d.ts +20 -0
  528. package/dist/tools/kanban/task-list.tool.d.ts.map +1 -0
  529. package/dist/tools/kanban/task-list.tool.js +95 -0
  530. package/dist/tools/kanban/task-list.tool.js.map +1 -0
  531. package/dist/tools/kanban/task-push-multi.tool.d.ts +20 -0
  532. package/dist/tools/kanban/task-push-multi.tool.d.ts.map +1 -0
  533. package/dist/tools/kanban/task-push-multi.tool.js +273 -0
  534. package/dist/tools/kanban/task-push-multi.tool.js.map +1 -0
  535. package/dist/tools/kanban/task-update.tool.d.ts +20 -0
  536. package/dist/tools/kanban/task-update.tool.d.ts.map +1 -0
  537. package/dist/tools/kanban/task-update.tool.js +173 -0
  538. package/dist/tools/kanban/task-update.tool.js.map +1 -0
  539. package/dist/tools/kanban/workspace-create.tool.d.ts +20 -0
  540. package/dist/tools/kanban/workspace-create.tool.d.ts.map +1 -0
  541. package/dist/tools/kanban/workspace-create.tool.js +84 -0
  542. package/dist/tools/kanban/workspace-create.tool.js.map +1 -0
  543. package/dist/tools/kanban/workspace-join.tool.d.ts +20 -0
  544. package/dist/tools/kanban/workspace-join.tool.d.ts.map +1 -0
  545. package/dist/tools/kanban/workspace-join.tool.js +76 -0
  546. package/dist/tools/kanban/workspace-join.tool.js.map +1 -0
  547. package/dist/tools/kanban/workspace-leave.tool.d.ts +20 -0
  548. package/dist/tools/kanban/workspace-leave.tool.d.ts.map +1 -0
  549. package/dist/tools/kanban/workspace-leave.tool.js +74 -0
  550. package/dist/tools/kanban/workspace-leave.tool.js.map +1 -0
  551. package/dist/tools/kanban/workspace-list.tool.d.ts +20 -0
  552. package/dist/tools/kanban/workspace-list.tool.d.ts.map +1 -0
  553. package/dist/tools/kanban/workspace-list.tool.js +75 -0
  554. package/dist/tools/kanban/workspace-list.tool.js.map +1 -0
  555. package/dist/tools/loci/graph-find-path.tool.d.ts +38 -0
  556. package/dist/tools/loci/graph-find-path.tool.d.ts.map +1 -0
  557. package/dist/tools/loci/graph-find-path.tool.js +133 -0
  558. package/dist/tools/loci/graph-find-path.tool.js.map +1 -0
  559. package/dist/tools/loci/graph-query.tool.d.ts +55 -0
  560. package/dist/tools/loci/graph-query.tool.d.ts.map +1 -0
  561. package/dist/tools/loci/graph-query.tool.js +98 -0
  562. package/dist/tools/loci/graph-query.tool.js.map +1 -0
  563. package/dist/tools/loci/index.d.ts +27 -0
  564. package/dist/tools/loci/index.d.ts.map +1 -0
  565. package/dist/tools/loci/index.js +27 -0
  566. package/dist/tools/loci/index.js.map +1 -0
  567. package/dist/tools/loci/loci-recall.tool.d.ts +33 -0
  568. package/dist/tools/loci/loci-recall.tool.d.ts.map +1 -0
  569. package/dist/tools/loci/loci-recall.tool.js +156 -0
  570. package/dist/tools/loci/loci-recall.tool.js.map +1 -0
  571. package/dist/tools/loci/sequence-recommend.tool.d.ts +33 -0
  572. package/dist/tools/loci/sequence-recommend.tool.d.ts.map +1 -0
  573. package/dist/tools/loci/sequence-recommend.tool.js +114 -0
  574. package/dist/tools/loci/sequence-recommend.tool.js.map +1 -0
  575. package/dist/tools/memory/delete-memory.tool.d.ts +20 -0
  576. package/dist/tools/memory/delete-memory.tool.d.ts.map +1 -0
  577. package/dist/tools/memory/delete-memory.tool.js +96 -0
  578. package/dist/tools/memory/delete-memory.tool.js.map +1 -0
  579. package/dist/tools/memory/edit-memory.tool.d.ts +20 -0
  580. package/dist/tools/memory/edit-memory.tool.d.ts.map +1 -0
  581. package/dist/tools/memory/edit-memory.tool.js +172 -0
  582. package/dist/tools/memory/edit-memory.tool.js.map +1 -0
  583. package/dist/tools/memory/index.d.ts +31 -0
  584. package/dist/tools/memory/index.d.ts.map +1 -0
  585. package/dist/tools/memory/index.js +31 -0
  586. package/dist/tools/memory/index.js.map +1 -0
  587. package/dist/tools/memory/list-memories.tool.d.ts +20 -0
  588. package/dist/tools/memory/list-memories.tool.d.ts.map +1 -0
  589. package/dist/tools/memory/list-memories.tool.js +142 -0
  590. package/dist/tools/memory/list-memories.tool.js.map +1 -0
  591. package/dist/tools/memory/read-memory.tool.d.ts +20 -0
  592. package/dist/tools/memory/read-memory.tool.d.ts.map +1 -0
  593. package/dist/tools/memory/read-memory.tool.js +98 -0
  594. package/dist/tools/memory/read-memory.tool.js.map +1 -0
  595. package/dist/tools/memory/write-memory.tool.d.ts +20 -0
  596. package/dist/tools/memory/write-memory.tool.d.ts.map +1 -0
  597. package/dist/tools/memory/write-memory.tool.js +162 -0
  598. package/dist/tools/memory/write-memory.tool.js.map +1 -0
  599. package/dist/tools/mpc/index.d.ts +27 -0
  600. package/dist/tools/mpc/index.d.ts.map +1 -0
  601. package/dist/tools/mpc/index.js +27 -0
  602. package/dist/tools/mpc/index.js.map +1 -0
  603. package/dist/tools/mpc/mpc-distribute.tool.d.ts +36 -0
  604. package/dist/tools/mpc/mpc-distribute.tool.d.ts.map +1 -0
  605. package/dist/tools/mpc/mpc-distribute.tool.js +129 -0
  606. package/dist/tools/mpc/mpc-distribute.tool.js.map +1 -0
  607. package/dist/tools/mpc/mpc-reconstruct.tool.d.ts +28 -0
  608. package/dist/tools/mpc/mpc-reconstruct.tool.d.ts.map +1 -0
  609. package/dist/tools/mpc/mpc-reconstruct.tool.js +125 -0
  610. package/dist/tools/mpc/mpc-reconstruct.tool.js.map +1 -0
  611. package/dist/tools/mpc/mpc-split.tool.d.ts +43 -0
  612. package/dist/tools/mpc/mpc-split.tool.d.ts.map +1 -0
  613. package/dist/tools/mpc/mpc-split.tool.js +120 -0
  614. package/dist/tools/mpc/mpc-split.tool.js.map +1 -0
  615. package/dist/tools/mpc/mpc-status.tool.d.ts +33 -0
  616. package/dist/tools/mpc/mpc-status.tool.d.ts.map +1 -0
  617. package/dist/tools/mpc/mpc-status.tool.js +129 -0
  618. package/dist/tools/mpc/mpc-status.tool.js.map +1 -0
  619. package/dist/tools/multi-llm/consensus-prompt.tool.d.ts +9 -0
  620. package/dist/tools/multi-llm/consensus-prompt.tool.d.ts.map +1 -0
  621. package/dist/tools/multi-llm/consensus-prompt.tool.js +165 -0
  622. package/dist/tools/multi-llm/consensus-prompt.tool.js.map +1 -0
  623. package/dist/tools/multi-llm/index.d.ts +8 -0
  624. package/dist/tools/multi-llm/index.d.ts.map +1 -0
  625. package/dist/tools/multi-llm/index.js +8 -0
  626. package/dist/tools/multi-llm/index.js.map +1 -0
  627. package/dist/tools/multi-llm/multi-prompt.tool.d.ts +9 -0
  628. package/dist/tools/multi-llm/multi-prompt.tool.d.ts.map +1 -0
  629. package/dist/tools/multi-llm/multi-prompt.tool.js +90 -0
  630. package/dist/tools/multi-llm/multi-prompt.tool.js.map +1 -0
  631. package/dist/tools/project/check-types.tool.d.ts +20 -0
  632. package/dist/tools/project/check-types.tool.d.ts.map +1 -0
  633. package/dist/tools/project/check-types.tool.js +254 -0
  634. package/dist/tools/project/check-types.tool.js.map +1 -0
  635. package/dist/tools/project/index.d.ts +35 -0
  636. package/dist/tools/project/index.d.ts.map +1 -0
  637. package/dist/tools/project/index.js +35 -0
  638. package/dist/tools/project/index.js.map +1 -0
  639. package/dist/tools/project/project-info.tool.d.ts +20 -0
  640. package/dist/tools/project/project-info.tool.d.ts.map +1 -0
  641. package/dist/tools/project/project-info.tool.js +364 -0
  642. package/dist/tools/project/project-info.tool.js.map +1 -0
  643. package/dist/tools/project/run-lint.tool.d.ts +20 -0
  644. package/dist/tools/project/run-lint.tool.d.ts.map +1 -0
  645. package/dist/tools/project/run-lint.tool.js +279 -0
  646. package/dist/tools/project/run-lint.tool.js.map +1 -0
  647. package/dist/tools/project/run-script.tool.d.ts +20 -0
  648. package/dist/tools/project/run-script.tool.d.ts.map +1 -0
  649. package/dist/tools/project/run-script.tool.js +141 -0
  650. package/dist/tools/project/run-script.tool.js.map +1 -0
  651. package/dist/tools/project/run-tests.tool.d.ts +20 -0
  652. package/dist/tools/project/run-tests.tool.d.ts.map +1 -0
  653. package/dist/tools/project/run-tests.tool.js +357 -0
  654. package/dist/tools/project/run-tests.tool.js.map +1 -0
  655. package/dist/tools/recursive/index.d.ts +28 -0
  656. package/dist/tools/recursive/index.d.ts.map +1 -0
  657. package/dist/tools/recursive/index.js +28 -0
  658. package/dist/tools/recursive/index.js.map +1 -0
  659. package/dist/tools/recursive/invocation-log.tool.d.ts +20 -0
  660. package/dist/tools/recursive/invocation-log.tool.d.ts.map +1 -0
  661. package/dist/tools/recursive/invocation-log.tool.js +110 -0
  662. package/dist/tools/recursive/invocation-log.tool.js.map +1 -0
  663. package/dist/tools/recursive/invoke-batch.tool.d.ts +20 -0
  664. package/dist/tools/recursive/invoke-batch.tool.d.ts.map +1 -0
  665. package/dist/tools/recursive/invoke-batch.tool.js +99 -0
  666. package/dist/tools/recursive/invoke-batch.tool.js.map +1 -0
  667. package/dist/tools/recursive/invoke-tool.tool.d.ts +20 -0
  668. package/dist/tools/recursive/invoke-tool.tool.d.ts.map +1 -0
  669. package/dist/tools/recursive/invoke-tool.tool.js +100 -0
  670. package/dist/tools/recursive/invoke-tool.tool.js.map +1 -0
  671. package/dist/tools/registry.d.ts +261 -0
  672. package/dist/tools/registry.d.ts.map +1 -0
  673. package/dist/tools/registry.js +462 -0
  674. package/dist/tools/registry.js.map +1 -0
  675. package/dist/tools/rl/index.d.ts +25 -0
  676. package/dist/tools/rl/index.d.ts.map +1 -0
  677. package/dist/tools/rl/index.js +25 -0
  678. package/dist/tools/rl/index.js.map +1 -0
  679. package/dist/tools/rl/rl-dopamine-log.tool.d.ts +32 -0
  680. package/dist/tools/rl/rl-dopamine-log.tool.d.ts.map +1 -0
  681. package/dist/tools/rl/rl-dopamine-log.tool.js +112 -0
  682. package/dist/tools/rl/rl-dopamine-log.tool.js.map +1 -0
  683. package/dist/tools/rl/rl-reward-stats.tool.d.ts +33 -0
  684. package/dist/tools/rl/rl-reward-stats.tool.d.ts.map +1 -0
  685. package/dist/tools/rl/rl-reward-stats.tool.js +100 -0
  686. package/dist/tools/rl/rl-reward-stats.tool.js.map +1 -0
  687. package/dist/tools/session/index.d.ts +28 -0
  688. package/dist/tools/session/index.d.ts.map +1 -0
  689. package/dist/tools/session/index.js +28 -0
  690. package/dist/tools/session/index.js.map +1 -0
  691. package/dist/tools/session/session-create.tool.d.ts +35 -0
  692. package/dist/tools/session/session-create.tool.d.ts.map +1 -0
  693. package/dist/tools/session/session-create.tool.js +74 -0
  694. package/dist/tools/session/session-create.tool.js.map +1 -0
  695. package/dist/tools/session/session-delete.tool.d.ts +32 -0
  696. package/dist/tools/session/session-delete.tool.d.ts.map +1 -0
  697. package/dist/tools/session/session-delete.tool.js +94 -0
  698. package/dist/tools/session/session-delete.tool.js.map +1 -0
  699. package/dist/tools/session/session-info.tool.d.ts +30 -0
  700. package/dist/tools/session/session-info.tool.d.ts.map +1 -0
  701. package/dist/tools/session/session-info.tool.js +89 -0
  702. package/dist/tools/session/session-info.tool.js.map +1 -0
  703. package/dist/tools/session/session-list.tool.d.ts +43 -0
  704. package/dist/tools/session/session-list.tool.d.ts.map +1 -0
  705. package/dist/tools/session/session-list.tool.js +85 -0
  706. package/dist/tools/session/session-list.tool.js.map +1 -0
  707. package/dist/tools/session/session-switch.tool.d.ts +32 -0
  708. package/dist/tools/session/session-switch.tool.d.ts.map +1 -0
  709. package/dist/tools/session/session-switch.tool.js +75 -0
  710. package/dist/tools/session/session-switch.tool.js.map +1 -0
  711. package/dist/tools/simple-tools.d.ts +23 -0
  712. package/dist/tools/simple-tools.d.ts.map +1 -0
  713. package/dist/tools/simple-tools.js +73 -0
  714. package/dist/tools/simple-tools.js.map +1 -0
  715. package/dist/tools/specialized/analyze-deps.tool.d.ts +20 -0
  716. package/dist/tools/specialized/analyze-deps.tool.d.ts.map +1 -0
  717. package/dist/tools/specialized/analyze-deps.tool.js +102 -0
  718. package/dist/tools/specialized/analyze-deps.tool.js.map +1 -0
  719. package/dist/tools/specialized/auto-fix-agent.tool.d.ts +12 -0
  720. package/dist/tools/specialized/auto-fix-agent.tool.d.ts.map +1 -0
  721. package/dist/tools/specialized/auto-fix-agent.tool.js +154 -0
  722. package/dist/tools/specialized/auto-fix-agent.tool.js.map +1 -0
  723. package/dist/tools/specialized/auto-fix.tool.d.ts +20 -0
  724. package/dist/tools/specialized/auto-fix.tool.d.ts.map +1 -0
  725. package/dist/tools/specialized/auto-fix.tool.js +264 -0
  726. package/dist/tools/specialized/auto-fix.tool.js.map +1 -0
  727. package/dist/tools/specialized/code-review.tool.d.ts +20 -0
  728. package/dist/tools/specialized/code-review.tool.d.ts.map +1 -0
  729. package/dist/tools/specialized/code-review.tool.js +140 -0
  730. package/dist/tools/specialized/code-review.tool.js.map +1 -0
  731. package/dist/tools/specialized/explain-code.tool.d.ts +20 -0
  732. package/dist/tools/specialized/explain-code.tool.d.ts.map +1 -0
  733. package/dist/tools/specialized/explain-code.tool.js +90 -0
  734. package/dist/tools/specialized/explain-code.tool.js.map +1 -0
  735. package/dist/tools/specialized/fix-bug.tool.d.ts +20 -0
  736. package/dist/tools/specialized/fix-bug.tool.d.ts.map +1 -0
  737. package/dist/tools/specialized/fix-bug.tool.js +107 -0
  738. package/dist/tools/specialized/fix-bug.tool.js.map +1 -0
  739. package/dist/tools/specialized/index.d.ts +26 -0
  740. package/dist/tools/specialized/index.d.ts.map +1 -0
  741. package/dist/tools/specialized/index.js +26 -0
  742. package/dist/tools/specialized/index.js.map +1 -0
  743. package/dist/tools/specialized/refactor.tool.d.ts +20 -0
  744. package/dist/tools/specialized/refactor.tool.d.ts.map +1 -0
  745. package/dist/tools/specialized/refactor.tool.js +115 -0
  746. package/dist/tools/specialized/refactor.tool.js.map +1 -0
  747. package/dist/tools/specialized/write-tests.tool.d.ts +20 -0
  748. package/dist/tools/specialized/write-tests.tool.d.ts.map +1 -0
  749. package/dist/tools/specialized/write-tests.tool.js +115 -0
  750. package/dist/tools/specialized/write-tests.tool.js.map +1 -0
  751. package/dist/tools/system/ai-config.tool.d.ts +13 -0
  752. package/dist/tools/system/ai-config.tool.d.ts.map +1 -0
  753. package/dist/tools/system/ai-config.tool.js +252 -0
  754. package/dist/tools/system/ai-config.tool.js.map +1 -0
  755. package/dist/tools/system/ai-models.tool.d.ts +45 -0
  756. package/dist/tools/system/ai-models.tool.d.ts.map +1 -0
  757. package/dist/tools/system/ai-models.tool.js +194 -0
  758. package/dist/tools/system/ai-models.tool.js.map +1 -0
  759. package/dist/tools/system/config.tool.d.ts +57 -0
  760. package/dist/tools/system/config.tool.d.ts.map +1 -0
  761. package/dist/tools/system/config.tool.js +320 -0
  762. package/dist/tools/system/config.tool.js.map +1 -0
  763. package/dist/tools/system/env-info.tool.d.ts +20 -0
  764. package/dist/tools/system/env-info.tool.d.ts.map +1 -0
  765. package/dist/tools/system/env-info.tool.js +228 -0
  766. package/dist/tools/system/env-info.tool.js.map +1 -0
  767. package/dist/tools/system/index.d.ts +37 -0
  768. package/dist/tools/system/index.d.ts.map +1 -0
  769. package/dist/tools/system/index.js +37 -0
  770. package/dist/tools/system/index.js.map +1 -0
  771. package/dist/tools/system/memory-usage.tool.d.ts +20 -0
  772. package/dist/tools/system/memory-usage.tool.d.ts.map +1 -0
  773. package/dist/tools/system/memory-usage.tool.js +223 -0
  774. package/dist/tools/system/memory-usage.tool.js.map +1 -0
  775. package/dist/tools/system/process-list.tool.d.ts +20 -0
  776. package/dist/tools/system/process-list.tool.d.ts.map +1 -0
  777. package/dist/tools/system/process-list.tool.js +202 -0
  778. package/dist/tools/system/process-list.tool.js.map +1 -0
  779. package/dist/tools/system/shell-exec.tool.d.ts +20 -0
  780. package/dist/tools/system/shell-exec.tool.d.ts.map +1 -0
  781. package/dist/tools/system/shell-exec.tool.js +293 -0
  782. package/dist/tools/system/shell-exec.tool.js.map +1 -0
  783. package/dist/tools/timeout-test.tool.d.ts +20 -0
  784. package/dist/tools/timeout-test.tool.d.ts.map +1 -0
  785. package/dist/tools/timeout-test.tool.js +46 -0
  786. package/dist/tools/timeout-test.tool.js.map +1 -0
  787. package/dist/tree-sitter/index.d.ts +27 -0
  788. package/dist/tree-sitter/index.d.ts.map +1 -0
  789. package/dist/tree-sitter/index.js +27 -0
  790. package/dist/tree-sitter/index.js.map +1 -0
  791. package/dist/tree-sitter/parser-manager.d.ts +83 -0
  792. package/dist/tree-sitter/parser-manager.d.ts.map +1 -0
  793. package/dist/tree-sitter/parser-manager.js +430 -0
  794. package/dist/tree-sitter/parser-manager.js.map +1 -0
  795. package/dist/tree-sitter/types.d.ts +117 -0
  796. package/dist/tree-sitter/types.d.ts.map +1 -0
  797. package/dist/tree-sitter/types.js +375 -0
  798. package/dist/tree-sitter/types.js.map +1 -0
  799. package/dist/types/file-types.d.ts +277 -0
  800. package/dist/types/file-types.d.ts.map +1 -0
  801. package/dist/types/file-types.js +75 -0
  802. package/dist/types/file-types.js.map +1 -0
  803. package/dist/types/git-types.d.ts +270 -0
  804. package/dist/types/git-types.d.ts.map +1 -0
  805. package/dist/types/git-types.js +26 -0
  806. package/dist/types/git-types.js.map +1 -0
  807. package/dist/types/index.d.ts +28 -0
  808. package/dist/types/index.d.ts.map +1 -0
  809. package/dist/types/index.js +31 -0
  810. package/dist/types/index.js.map +1 -0
  811. package/dist/types/tool-types.d.ts +231 -0
  812. package/dist/types/tool-types.d.ts.map +1 -0
  813. package/dist/types/tool-types.js +30 -0
  814. package/dist/types/tool-types.js.map +1 -0
  815. package/dist/utils/bun-file.d.ts +99 -0
  816. package/dist/utils/bun-file.d.ts.map +1 -0
  817. package/dist/utils/bun-file.js +393 -0
  818. package/dist/utils/bun-file.js.map +1 -0
  819. package/dist/utils/cache.d.ts +124 -0
  820. package/dist/utils/cache.d.ts.map +1 -0
  821. package/dist/utils/cache.js +228 -0
  822. package/dist/utils/cache.js.map +1 -0
  823. package/dist/utils/commandExecutor.d.ts +54 -0
  824. package/dist/utils/commandExecutor.d.ts.map +1 -0
  825. package/dist/utils/commandExecutor.js +165 -0
  826. package/dist/utils/commandExecutor.js.map +1 -0
  827. package/dist/utils/edit-utils.d.ts +72 -0
  828. package/dist/utils/edit-utils.d.ts.map +1 -0
  829. package/dist/utils/edit-utils.js +129 -0
  830. package/dist/utils/edit-utils.js.map +1 -0
  831. package/dist/utils/errors.d.ts +170 -0
  832. package/dist/utils/errors.d.ts.map +1 -0
  833. package/dist/utils/errors.js +304 -0
  834. package/dist/utils/errors.js.map +1 -0
  835. package/dist/utils/file-utils.d.ts +195 -0
  836. package/dist/utils/file-utils.d.ts.map +1 -0
  837. package/dist/utils/file-utils.js +401 -0
  838. package/dist/utils/file-utils.js.map +1 -0
  839. package/dist/utils/git-utils.d.ts +204 -0
  840. package/dist/utils/git-utils.d.ts.map +1 -0
  841. package/dist/utils/git-utils.js +352 -0
  842. package/dist/utils/git-utils.js.map +1 -0
  843. package/dist/utils/languageDetection.d.ts +54 -0
  844. package/dist/utils/languageDetection.d.ts.map +1 -0
  845. package/dist/utils/languageDetection.js +340 -0
  846. package/dist/utils/languageDetection.js.map +1 -0
  847. package/dist/utils/logger.d.ts +207 -0
  848. package/dist/utils/logger.d.ts.map +1 -0
  849. package/dist/utils/logger.js +484 -0
  850. package/dist/utils/logger.js.map +1 -0
  851. package/dist/utils/process-utils.d.ts +196 -0
  852. package/dist/utils/process-utils.d.ts.map +1 -0
  853. package/dist/utils/process-utils.js +302 -0
  854. package/dist/utils/process-utils.js.map +1 -0
  855. package/dist/utils/projectContext.enhanced.d.ts +71 -0
  856. package/dist/utils/projectContext.enhanced.d.ts.map +1 -0
  857. package/dist/utils/projectContext.enhanced.js +816 -0
  858. package/dist/utils/projectContext.enhanced.js.map +1 -0
  859. package/dist/utils/security.d.ts +123 -0
  860. package/dist/utils/security.d.ts.map +1 -0
  861. package/dist/utils/security.js +337 -0
  862. package/dist/utils/security.js.map +1 -0
  863. package/dist/utils/validation.d.ts +163 -0
  864. package/dist/utils/validation.d.ts.map +1 -0
  865. package/dist/utils/validation.js +558 -0
  866. package/dist/utils/validation.js.map +1 -0
  867. package/dist/version.d.ts +17 -0
  868. package/dist/version.d.ts.map +1 -0
  869. package/dist/version.js +17 -0
  870. package/dist/version.js.map +1 -0
  871. package/kemdi-code-mcp-logo.png +0 -0
  872. package/package.json +136 -0
@@ -0,0 +1,854 @@
1
+ /**
2
+ * KemdiCode MCP Server
3
+ * Copyright (C) 2025-2026 Kemdi Sp. z o.o.
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation, either version 3 of the License, or
8
+ * (at your option) any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU General Public License
16
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ /**
19
+ * Kanban Store
20
+ *
21
+ * Redis-based persistence layer for the Kanban system.
22
+ *
23
+ * @module kanban/kanban-store
24
+ */
25
+ import { Redis } from 'ioredis';
26
+ import { v4 as uuidv4 } from 'uuid';
27
+ import { Logger } from '../utils/logger.js';
28
+ import { getSharedRedis } from '../infrastructure/redis/connection.js';
29
+ import { KANBAN_KEYS, PRIORITY_SCORES, DEFAULT_TASK_TTL, COMPLETED_TASK_TTL, MAX_EVENTS, } from './types.js';
30
+ const getRedis = getSharedRedis;
31
+ function safeParseJsonArray(value) {
32
+ try {
33
+ const parsed = JSON.parse(value || '[]');
34
+ return Array.isArray(parsed) ? parsed : [];
35
+ }
36
+ catch {
37
+ return [];
38
+ }
39
+ }
40
+ function safeParseInt(value, fallback) {
41
+ const parsed = parseInt(value || '', 10);
42
+ return isNaN(parsed) ? (fallback ?? 0) : parsed;
43
+ }
44
+ /**
45
+ * Create a new task on the Kanban board
46
+ *
47
+ * @description Creates a new task with the provided input, stores it in Redis,
48
+ * sets up blocking relationships, and emits a task-created event
49
+ * @param {CreateTaskInput} input - Task creation parameters
50
+ * @param {string} input.sessionId - Session ID for the task
51
+ * @param {string} input.title - Task title (max 200 chars)
52
+ * @param {string} [input.description] - Detailed task description
53
+ * @param {TaskPriority} [input.priority='normal'] - Task priority level
54
+ * @param {string} input.createdBy - Agent ID creating the task
55
+ * @param {string[]} [input.blockedBy] - Task IDs that block this task
56
+ * @param {string[]} [input.relatedFiles] - Related file paths
57
+ * @param {string[]} [input.labels] - Task labels for categorization
58
+ * @param {number} [input.estimatedMinutes] - Estimated completion time
59
+ * @returns {Promise<KanbanTask>} The created task with generated ID and timestamps
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * const task = await createTask({
64
+ * sessionId: 'session-123',
65
+ * title: 'Implement authentication',
66
+ * priority: 'high',
67
+ * createdBy: 'agent-1',
68
+ * labels: ['feature', 'auth'],
69
+ * });
70
+ * ```
71
+ */
72
+ export async function createTask(input) {
73
+ const client = await getRedis();
74
+ const taskId = uuidv4();
75
+ const now = Date.now();
76
+ const task = {
77
+ id: taskId,
78
+ sessionId: input.sessionId,
79
+ title: input.title,
80
+ description: input.description,
81
+ status: 'backlog',
82
+ priority: input.priority || 'normal',
83
+ createdBy: input.createdBy,
84
+ blockedBy: input.blockedBy || [],
85
+ blocks: [],
86
+ relatedFiles: input.relatedFiles || [],
87
+ labels: input.labels || [],
88
+ createdAt: now,
89
+ updatedAt: now,
90
+ estimatedMinutes: input.estimatedMinutes,
91
+ };
92
+ // Calculate score for sorting (priority + time)
93
+ const score = PRIORITY_SCORES[task.priority] * 1000000000 + (1000000000 - now / 1000);
94
+ // Store task data
95
+ await client.hset(KANBAN_KEYS.task(taskId), {
96
+ ...task,
97
+ blockedBy: JSON.stringify(task.blockedBy),
98
+ blocks: JSON.stringify(task.blocks),
99
+ relatedFiles: JSON.stringify(task.relatedFiles),
100
+ labels: JSON.stringify(task.labels),
101
+ });
102
+ // Add to session tasks ZSET
103
+ await client.zadd(KANBAN_KEYS.tasks(input.sessionId), score, taskId);
104
+ // Add to status index
105
+ await client.sadd(KANBAN_KEYS.byStatus(input.sessionId, 'backlog'), taskId);
106
+ // Set TTL
107
+ await client.expire(KANBAN_KEYS.task(taskId), DEFAULT_TASK_TTL);
108
+ // Emit event
109
+ await emitEvent({
110
+ type: 'task-created',
111
+ taskId,
112
+ agentId: input.createdBy,
113
+ sessionId: input.sessionId,
114
+ timestamp: now,
115
+ data: { title: task.title, priority: task.priority },
116
+ });
117
+ // Update blockedBy relationships
118
+ for (const blockingId of task.blockedBy) {
119
+ await addBlocksRelation(blockingId, taskId);
120
+ }
121
+ Logger.debug(`kanban: created task ${taskId}: ${task.title}`);
122
+ return task;
123
+ }
124
+ /**
125
+ * Retrieve a task by its unique identifier
126
+ *
127
+ * @description Fetches a task from Redis by ID, deserializing JSON fields
128
+ * (blockedBy, blocks, relatedFiles, labels)
129
+ * @param {string} taskId - Unique task identifier (UUID)
130
+ * @returns {Promise<KanbanTask | null>} The task if found, null otherwise
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * const task = await getTask('550e8400-e29b-41d4-a716-446655440000');
135
+ * if (task) {
136
+ * console.log(`Task: ${task.title}, Status: ${task.status}`);
137
+ * }
138
+ * ```
139
+ */
140
+ export async function getTask(taskId) {
141
+ const client = await getRedis();
142
+ const data = await client.hgetall(KANBAN_KEYS.task(taskId));
143
+ if (!data || Object.keys(data).length === 0) {
144
+ return null;
145
+ }
146
+ return {
147
+ id: data.id,
148
+ sessionId: data.sessionId,
149
+ title: data.title,
150
+ description: data.description || undefined,
151
+ status: data.status,
152
+ priority: data.priority,
153
+ assignee: data.assignee || undefined,
154
+ createdBy: data.createdBy,
155
+ blockedBy: safeParseJsonArray(data.blockedBy),
156
+ blocks: safeParseJsonArray(data.blocks),
157
+ relatedFiles: safeParseJsonArray(data.relatedFiles),
158
+ labels: safeParseJsonArray(data.labels),
159
+ createdAt: safeParseInt(data.createdAt, 0),
160
+ updatedAt: safeParseInt(data.updatedAt, 0),
161
+ startedAt: data.startedAt ? safeParseInt(data.startedAt) : undefined,
162
+ completedAt: data.completedAt ? safeParseInt(data.completedAt) : undefined,
163
+ estimatedMinutes: data.estimatedMinutes ? safeParseInt(data.estimatedMinutes) : undefined,
164
+ actualMinutes: data.actualMinutes ? safeParseInt(data.actualMinutes) : undefined,
165
+ };
166
+ }
167
+ /**
168
+ * Update an existing task with new values
169
+ *
170
+ * @description Updates task fields, handles status transitions (emitting events),
171
+ * manages blocking relationships, and persists changes to Redis
172
+ * @param {string} taskId - Unique task identifier
173
+ * @param {UpdateTaskInput} update - Fields to update
174
+ * @param {string} agentId - Agent ID performing the update
175
+ * @returns {Promise<KanbanTask | null>} Updated task or null if not found
176
+ * @throws {Error} Never throws - returns null on failure
177
+ *
178
+ * @example
179
+ * ```typescript
180
+ * const updated = await updateTask('task-123', {
181
+ * status: 'in_progress',
182
+ * priority: 'high',
183
+ * }, 'agent-1');
184
+ * ```
185
+ */
186
+ export async function updateTask(taskId, update, agentId) {
187
+ const client = await getRedis();
188
+ const task = await getTask(taskId);
189
+ if (!task)
190
+ return null;
191
+ const now = Date.now();
192
+ const oldStatus = task.status;
193
+ // Apply updates
194
+ if (update.title !== undefined)
195
+ task.title = update.title;
196
+ if (update.description !== undefined)
197
+ task.description = update.description;
198
+ if (update.priority !== undefined)
199
+ task.priority = update.priority;
200
+ if (update.assignee !== undefined)
201
+ task.assignee = update.assignee || undefined;
202
+ if (update.relatedFiles !== undefined)
203
+ task.relatedFiles = update.relatedFiles;
204
+ if (update.labels !== undefined)
205
+ task.labels = update.labels;
206
+ if (update.estimatedMinutes !== undefined)
207
+ task.estimatedMinutes = update.estimatedMinutes;
208
+ // Handle status change
209
+ let statusChanged = false;
210
+ if (update.status !== undefined && update.status !== oldStatus) {
211
+ task.status = update.status;
212
+ statusChanged = true;
213
+ // Handle status-specific updates (outside transaction - events should not be rolled back)
214
+ if (update.status === 'in_progress' && !task.startedAt) {
215
+ task.startedAt = now;
216
+ await emitEvent({
217
+ type: 'task-started',
218
+ taskId,
219
+ agentId,
220
+ sessionId: task.sessionId,
221
+ timestamp: now,
222
+ });
223
+ }
224
+ if (update.status === 'done') {
225
+ task.completedAt = now;
226
+ if (task.startedAt) {
227
+ task.actualMinutes = Math.round((now - task.startedAt) / 60000);
228
+ }
229
+ }
230
+ }
231
+ // Handle blockedBy changes (outside transaction - separate task updates)
232
+ if (update.blockedBy !== undefined) {
233
+ const oldBlockedBy = new Set(task.blockedBy);
234
+ const newBlockedBy = new Set(update.blockedBy);
235
+ // Remove old relations
236
+ for (const old of oldBlockedBy) {
237
+ if (!newBlockedBy.has(old)) {
238
+ await removeBlocksRelation(old, taskId);
239
+ }
240
+ }
241
+ // Add new relations
242
+ for (const newId of newBlockedBy) {
243
+ if (!oldBlockedBy.has(newId)) {
244
+ await addBlocksRelation(newId, taskId);
245
+ }
246
+ }
247
+ task.blockedBy = update.blockedBy;
248
+ }
249
+ task.updatedAt = now;
250
+ // ATOMIC UPDATE: Use MULTI/EXEC for status indices and task data
251
+ // This ensures consistency between status indices and task data
252
+ const multi = client.multi();
253
+ if (statusChanged) {
254
+ // Update status indices atomically
255
+ multi.srem(KANBAN_KEYS.byStatus(task.sessionId, oldStatus), taskId);
256
+ multi.sadd(KANBAN_KEYS.byStatus(task.sessionId, task.status), taskId);
257
+ }
258
+ // Store updated task
259
+ multi.hset(KANBAN_KEYS.task(taskId), {
260
+ ...task,
261
+ blockedBy: JSON.stringify(task.blockedBy),
262
+ blocks: JSON.stringify(task.blocks),
263
+ relatedFiles: JSON.stringify(task.relatedFiles),
264
+ labels: JSON.stringify(task.labels),
265
+ assignee: task.assignee || '',
266
+ description: task.description || '',
267
+ startedAt: task.startedAt?.toString() || '',
268
+ completedAt: task.completedAt?.toString() || '',
269
+ estimatedMinutes: task.estimatedMinutes?.toString() || '',
270
+ actualMinutes: task.actualMinutes?.toString() || '',
271
+ });
272
+ // Set shorter TTL for completed tasks
273
+ if (task.status === 'done') {
274
+ multi.expire(KANBAN_KEYS.task(taskId), COMPLETED_TASK_TTL);
275
+ }
276
+ // Execute all operations atomically
277
+ const results = await multi.exec();
278
+ // Check for errors in transaction
279
+ if (results) {
280
+ const errors = results.filter(([, err]) => err !== null);
281
+ if (errors.length > 0) {
282
+ throw new Error(`Redis transaction failed: ${errors.map(([, err]) => err).join(', ')}`);
283
+ }
284
+ }
285
+ // Emit events outside transaction (they shouldn't be rolled back)
286
+ if (statusChanged && task.status === 'done') {
287
+ await emitEvent({
288
+ type: 'task-completed',
289
+ taskId,
290
+ agentId,
291
+ sessionId: task.sessionId,
292
+ timestamp: now,
293
+ data: { actualMinutes: task.actualMinutes },
294
+ });
295
+ }
296
+ await emitEvent({
297
+ type: 'task-updated',
298
+ taskId,
299
+ agentId,
300
+ sessionId: task.sessionId,
301
+ timestamp: now,
302
+ data: update,
303
+ });
304
+ Logger.debug(`kanban: updated task ${taskId}`);
305
+ return task;
306
+ }
307
+ /**
308
+ * Claim a task for an agent (self-assignment)
309
+ *
310
+ * @description Allows an agent to claim an unassigned, unblocked task.
311
+ * Sets the agent as assignee and transitions status to 'in_progress'.
312
+ * Verifies blocking tasks are completed before allowing claim.
313
+ * Uses atomic Lua script to prevent race conditions.
314
+ * @param {string} taskId - Task ID to claim
315
+ * @param {string} agentId - Agent ID claiming the task
316
+ * @returns {Promise<KanbanTask | null>} Claimed task or null if not found
317
+ * @throws {Error} If task is already assigned to another agent
318
+ * @throws {Error} If task is blocked by incomplete tasks
319
+ *
320
+ * @example
321
+ * ```typescript
322
+ * try {
323
+ * const task = await claimTask('task-123', 'agent-1');
324
+ * console.log(`Claimed: ${task?.title}`);
325
+ * } catch (error) {
326
+ * console.error('Cannot claim:', error.message);
327
+ * }
328
+ * ```
329
+ */
330
+ export async function claimTask(taskId, agentId) {
331
+ const client = await getRedis();
332
+ // First, get task data and validate blocking conditions (non-atomic check)
333
+ const task = await getTask(taskId);
334
+ if (!task) {
335
+ return null;
336
+ }
337
+ // Check if task is already assigned to another agent (early validation)
338
+ if (task.assignee && task.assignee !== agentId) {
339
+ throw new Error(`Task already assigned to ${task.assignee}`);
340
+ }
341
+ // Check blocking tasks (requires reading other tasks - cannot be atomic)
342
+ if (task.blockedBy.length > 0) {
343
+ for (const blockerId of task.blockedBy) {
344
+ const blocker = await getTask(blockerId);
345
+ if (blocker && blocker.status !== 'done') {
346
+ throw new Error(`Task blocked by ${blockerId} (${blocker.title})`);
347
+ }
348
+ }
349
+ }
350
+ const now = Date.now();
351
+ const startedAt = task.startedAt || now;
352
+ // Atomically claim the task only if assignee hasn't changed
353
+ // Using HSETNX pattern: claim only if assignee field is empty or equals current agent
354
+ const luaScript = `
355
+ local taskKey = KEYS[1]
356
+ local byAgentKey = KEYS[2]
357
+ local oldStatusKey = KEYS[3]
358
+ local newStatusKey = KEYS[4]
359
+ local agentId = ARGV[1]
360
+ local taskId = ARGV[2]
361
+ local now = ARGV[3]
362
+ local startedAt = ARGV[4]
363
+ local sessionId = ARGV[5]
364
+
365
+ -- Check current assignee atomically
366
+ local currentAssignee = redis.call('hget', taskKey, 'assignee')
367
+
368
+ -- If already assigned to someone else, return error code
369
+ if currentAssignee and currentAssignee ~= '' and currentAssignee ~= agentId then
370
+ return {-1, currentAssignee}
371
+ end
372
+
373
+ -- If already assigned to this agent, return success (idempotent)
374
+ if currentAssignee == agentId then
375
+ return {1}
376
+ end
377
+
378
+ -- Atomically update task fields
379
+ redis.call('hset', taskKey, 'assignee', agentId)
380
+ redis.call('hset', taskKey, 'status', 'in_progress')
381
+ redis.call('hset', taskKey, 'updatedAt', now)
382
+ redis.call('hset', taskKey, 'startedAt', startedAt)
383
+
384
+ -- Update agent index
385
+ redis.call('sadd', byAgentKey, taskId)
386
+
387
+ -- Update status indices
388
+ redis.call('srem', oldStatusKey, taskId)
389
+ redis.call('sadd', newStatusKey, taskId)
390
+
391
+ return {0}
392
+ `;
393
+ const taskKey = KANBAN_KEYS.task(taskId);
394
+ const byAgentKey = KANBAN_KEYS.byAgent(agentId);
395
+ const oldStatusKey = KANBAN_KEYS.byStatus(task.sessionId, task.status);
396
+ const newStatusKey = KANBAN_KEYS.byStatus(task.sessionId, 'in_progress');
397
+ const result = (await client.eval(luaScript, 4, // number of keys
398
+ taskKey, byAgentKey, oldStatusKey, newStatusKey, agentId, taskId, now.toString(), startedAt.toString(), task.sessionId));
399
+ const statusCode = result[0];
400
+ // Handle results
401
+ if (statusCode === -1) {
402
+ // Task was assigned to someone else during our check
403
+ const otherAssignee = result[1];
404
+ throw new Error(`Task already assigned to ${otherAssignee}`);
405
+ }
406
+ if (statusCode === 0 || statusCode === 1) {
407
+ // Success (0 = newly claimed, 1 = already claimed by this agent)
408
+ if (statusCode === 0) {
409
+ // Emit event only on actual claim (not idempotent re-claim)
410
+ await emitEvent({
411
+ type: 'task-claimed',
412
+ taskId,
413
+ agentId,
414
+ sessionId: task.sessionId,
415
+ timestamp: now,
416
+ });
417
+ Logger.debug(`kanban: agent ${agentId} claimed task ${taskId}`);
418
+ }
419
+ // Return updated task
420
+ return {
421
+ ...task,
422
+ assignee: agentId,
423
+ status: 'in_progress',
424
+ startedAt,
425
+ updatedAt: now,
426
+ };
427
+ }
428
+ // Unexpected result
429
+ throw new Error('Unexpected result from claim operation');
430
+ }
431
+ /**
432
+ * Assign a task to a specific agent (supervisor action)
433
+ *
434
+ * @description Supervisors can assign tasks to any agent, overriding current assignment.
435
+ * Updates agent indices and emits task-assigned event.
436
+ * @param {string} taskId - Task ID to assign
437
+ * @param {string} assigneeId - Target agent ID to assign the task to
438
+ * @param {string} supervisorId - Supervisor agent ID making the assignment
439
+ * @returns {Promise<KanbanTask | null>} Assigned task or null if not found
440
+ *
441
+ * @example
442
+ * ```typescript
443
+ * const task = await assignTask('task-123', 'worker-agent', 'supervisor-agent');
444
+ * ```
445
+ */
446
+ export async function assignTask(taskId, assigneeId, supervisorId) {
447
+ const task = await getTask(taskId);
448
+ if (!task)
449
+ return null;
450
+ const client = await getRedis();
451
+ // Remove from old assignee
452
+ if (task.assignee) {
453
+ await client.srem(KANBAN_KEYS.byAgent(task.assignee), taskId);
454
+ }
455
+ // Add to new assignee
456
+ await client.sadd(KANBAN_KEYS.byAgent(assigneeId), taskId);
457
+ await emitEvent({
458
+ type: 'task-assigned',
459
+ taskId,
460
+ agentId: supervisorId,
461
+ sessionId: task.sessionId,
462
+ timestamp: Date.now(),
463
+ data: { assignee: assigneeId },
464
+ });
465
+ return updateTask(taskId, { assignee: assigneeId }, supervisorId);
466
+ }
467
+ /**
468
+ * List tasks from a session with optional filtering
469
+ *
470
+ * @description Retrieves tasks sorted by priority, applying optional filters
471
+ * for status, priority, assignee, blocked state, and labels
472
+ * @param {string} sessionId - Session ID to list tasks from
473
+ * @param {TaskFilter} [filter] - Optional filter criteria
474
+ * @param {TaskStatus|TaskStatus[]} [filter.status] - Filter by status(es)
475
+ * @param {TaskPriority|TaskPriority[]} [filter.priority] - Filter by priority(ies)
476
+ * @param {string} [filter.assignee] - Filter by assigned agent
477
+ * @param {boolean} [filter.unassigned] - Show only unassigned tasks
478
+ * @param {boolean} [filter.blocked] - Filter by blocked state
479
+ * @param {string[]} [filter.labels] - Filter by labels (any match)
480
+ * @param {number} [limit=50] - Maximum number of tasks to return
481
+ * @returns {Promise<KanbanTask[]>} Array of matching tasks sorted by priority
482
+ *
483
+ * @example
484
+ * ```typescript
485
+ * // Get all high-priority unassigned tasks
486
+ * const tasks = await listTasks('session-123', {
487
+ * priority: 'high',
488
+ * unassigned: true,
489
+ * blocked: false,
490
+ * });
491
+ * ```
492
+ */
493
+ export async function listTasks(sessionId, filter, limit = 50) {
494
+ const client = await getRedis();
495
+ // Get all task IDs for session (sorted by priority)
496
+ const taskIds = await client.zrevrange(KANBAN_KEYS.tasks(sessionId), 0, limit * 2);
497
+ const tasks = [];
498
+ for (const taskId of taskIds) {
499
+ if (tasks.length >= limit)
500
+ break;
501
+ const task = await getTask(taskId);
502
+ if (!task)
503
+ continue;
504
+ // Apply filters
505
+ if (filter) {
506
+ if (filter.status) {
507
+ const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
508
+ if (!statuses.includes(task.status))
509
+ continue;
510
+ }
511
+ if (filter.priority) {
512
+ const priorities = Array.isArray(filter.priority) ? filter.priority : [filter.priority];
513
+ if (!priorities.includes(task.priority))
514
+ continue;
515
+ }
516
+ if (filter.assignee && task.assignee !== filter.assignee)
517
+ continue;
518
+ if (filter.unassigned && task.assignee)
519
+ continue;
520
+ if (filter.blocked !== undefined) {
521
+ const isBlocked = task.blockedBy.length > 0;
522
+ if (filter.blocked !== isBlocked)
523
+ continue;
524
+ }
525
+ if (filter.labels && filter.labels.length > 0) {
526
+ const hasLabel = filter.labels.some((l) => task.labels.includes(l));
527
+ if (!hasLabel)
528
+ continue;
529
+ }
530
+ if (filter.createdBy && task.createdBy !== filter.createdBy)
531
+ continue;
532
+ // Board ID filtering (multi-board support)
533
+ if (filter.boardId && task.boardId !== filter.boardId)
534
+ continue;
535
+ if (filter.boardIds && filter.boardIds.length > 0) {
536
+ if (!task.boardId || !filter.boardIds.includes(task.boardId))
537
+ continue;
538
+ }
539
+ }
540
+ tasks.push(task);
541
+ }
542
+ return tasks;
543
+ }
544
+ /**
545
+ * Get comprehensive Kanban board summary statistics
546
+ *
547
+ * @description Aggregates task data to provide board overview including
548
+ * counts by status/priority, agent workload, and recent activity
549
+ * @param {string} sessionId - Session ID to get summary for
550
+ * @returns {Promise<BoardSummary>} Board summary with statistics and recent events
551
+ *
552
+ * @example
553
+ * ```typescript
554
+ * const summary = await getBoardSummary('session-123');
555
+ * console.log(`Total: ${summary.totalTasks}, In Progress: ${summary.byStatus.in_progress}`);
556
+ * console.log(`Blocked: ${summary.blockedTasks}, Unassigned: ${summary.unassignedTasks}`);
557
+ * ```
558
+ */
559
+ export async function getBoardSummary(sessionId) {
560
+ const client = await getRedis();
561
+ const tasks = await listTasks(sessionId, undefined, 1000);
562
+ const byStatus = {
563
+ backlog: 0,
564
+ in_progress: 0,
565
+ review: 0,
566
+ done: 0,
567
+ };
568
+ const byPriority = {
569
+ critical: 0,
570
+ high: 0,
571
+ normal: 0,
572
+ low: 0,
573
+ };
574
+ const agentStats = new Map();
575
+ let blockedTasks = 0;
576
+ let assignedTasks = 0;
577
+ let unassignedTasks = 0;
578
+ for (const task of tasks) {
579
+ byStatus[task.status]++;
580
+ byPriority[task.priority]++;
581
+ if (task.blockedBy.length > 0)
582
+ blockedTasks++;
583
+ if (task.assignee) {
584
+ assignedTasks++;
585
+ const stats = agentStats.get(task.assignee) || { taskCount: 0, inProgress: 0 };
586
+ stats.taskCount++;
587
+ if (task.status === 'in_progress')
588
+ stats.inProgress++;
589
+ agentStats.set(task.assignee, stats);
590
+ }
591
+ else {
592
+ unassignedTasks++;
593
+ }
594
+ }
595
+ // Get recent events
596
+ const eventData = await client.lrange(KANBAN_KEYS.events(sessionId), 0, 9);
597
+ const recentActivity = eventData
598
+ .map((e) => { try {
599
+ return JSON.parse(e);
600
+ }
601
+ catch {
602
+ return null;
603
+ } })
604
+ .filter((e) => e !== null);
605
+ return {
606
+ sessionId,
607
+ totalTasks: tasks.length,
608
+ byStatus,
609
+ byPriority,
610
+ blockedTasks,
611
+ assignedTasks,
612
+ unassignedTasks,
613
+ agents: Array.from(agentStats.entries()).map(([agentId, stats]) => ({
614
+ agentId,
615
+ ...stats,
616
+ })),
617
+ recentActivity,
618
+ };
619
+ }
620
+ /**
621
+ * Permanently delete a task from the Kanban board
622
+ *
623
+ * @description Removes task data, updates all indices, and cleans up
624
+ * blocking relationships with other tasks
625
+ * @param {string} taskId - Task ID to delete
626
+ * @returns {Promise<boolean>} True if task was deleted, false if not found
627
+ *
628
+ * @example
629
+ * ```typescript
630
+ * const deleted = await deleteTask('task-123');
631
+ * if (deleted) {
632
+ * console.log('Task removed');
633
+ * }
634
+ * ```
635
+ */
636
+ export async function deleteTask(taskId) {
637
+ const client = await getRedis();
638
+ const task = await getTask(taskId);
639
+ if (!task)
640
+ return false;
641
+ // Remove from all indices
642
+ await client.del(KANBAN_KEYS.task(taskId));
643
+ await client.zrem(KANBAN_KEYS.tasks(task.sessionId), taskId);
644
+ await client.srem(KANBAN_KEYS.byStatus(task.sessionId, task.status), taskId);
645
+ if (task.assignee) {
646
+ await client.srem(KANBAN_KEYS.byAgent(task.assignee), taskId);
647
+ }
648
+ // Remove blocking relationships
649
+ for (const blockerId of task.blockedBy) {
650
+ await removeBlocksRelation(blockerId, taskId);
651
+ }
652
+ for (const blockedId of task.blocks) {
653
+ const blockedTask = await getTask(blockedId);
654
+ if (blockedTask) {
655
+ const newBlockedBy = blockedTask.blockedBy.filter((id) => id !== taskId);
656
+ await updateTask(blockedId, { blockedBy: newBlockedBy }, 'system');
657
+ }
658
+ }
659
+ Logger.debug(`kanban: deleted task ${taskId}`);
660
+ return true;
661
+ }
662
+ /**
663
+ * Add a blocking relationship between two tasks
664
+ *
665
+ * @description Adds blockedId to the blocker task's "blocks" array,
666
+ * establishing a dependency relationship
667
+ * @param {string} blockerId - Task ID that blocks another task
668
+ * @param {string} blockedId - Task ID that is being blocked
669
+ * @internal
670
+ */
671
+ async function addBlocksRelation(blockerId, blockedId) {
672
+ const client = await getRedis();
673
+ const blocker = await getTask(blockerId);
674
+ if (blocker && !blocker.blocks.includes(blockedId)) {
675
+ blocker.blocks.push(blockedId);
676
+ await client.hset(KANBAN_KEYS.task(blockerId), 'blocks', JSON.stringify(blocker.blocks));
677
+ }
678
+ }
679
+ /**
680
+ * Remove a blocking relationship between two tasks
681
+ *
682
+ * @description Removes blockedId from the blocker task's "blocks" array
683
+ * @param {string} blockerId - Task ID that was blocking
684
+ * @param {string} blockedId - Task ID that was blocked
685
+ * @internal
686
+ */
687
+ async function removeBlocksRelation(blockerId, blockedId) {
688
+ const client = await getRedis();
689
+ const blocker = await getTask(blockerId);
690
+ if (blocker) {
691
+ blocker.blocks = blocker.blocks.filter((id) => id !== blockedId);
692
+ await client.hset(KANBAN_KEYS.task(blockerId), 'blocks', JSON.stringify(blocker.blocks));
693
+ }
694
+ }
695
+ /**
696
+ * Emit a task event to Redis
697
+ *
698
+ * @description Stores event in the events list (capped at MAX_EVENTS)
699
+ * and publishes to the Kanban Pub/Sub channel
700
+ * @param {TaskEvent} event - Event to emit
701
+ * @internal
702
+ */
703
+ async function emitEvent(event) {
704
+ const client = await getRedis();
705
+ // Store in events list
706
+ await client.lpush(KANBAN_KEYS.events(event.sessionId), JSON.stringify(event));
707
+ await client.ltrim(KANBAN_KEYS.events(event.sessionId), 0, MAX_EVENTS - 1);
708
+ // Publish to channel
709
+ await client.publish(KANBAN_KEYS.channel, JSON.stringify(event));
710
+ }
711
+ /**
712
+ * Subscribe to real-time Kanban board events
713
+ *
714
+ * @description Creates a Redis Pub/Sub subscription for task events.
715
+ * Returns an unsubscribe function for cleanup.
716
+ * @param {Function} callback - Function called with each TaskEvent
717
+ * @returns {Function} Unsubscribe function to stop receiving events
718
+ *
719
+ * @example
720
+ * ```typescript
721
+ * const unsubscribe = subscribeToEvents((event) => {
722
+ * console.log(`Event: ${event.type} on task ${event.taskId}`);
723
+ * });
724
+ *
725
+ * // Later, to stop listening:
726
+ * unsubscribe();
727
+ * ```
728
+ */
729
+ export function subscribeToEvents(callback) {
730
+ let subscriber = null;
731
+ let isCleanedUp = false;
732
+ let cleanupTimeout = null;
733
+ const cleanup = async () => {
734
+ if (isCleanedUp || !subscriber)
735
+ return;
736
+ isCleanedUp = true;
737
+ if (cleanupTimeout) {
738
+ clearTimeout(cleanupTimeout);
739
+ cleanupTimeout = null;
740
+ }
741
+ try {
742
+ await subscriber.unsubscribe(KANBAN_KEYS.channel);
743
+ }
744
+ catch (error) {
745
+ Logger.debug(`kanban: unsubscribe error during cleanup: ${error}`);
746
+ }
747
+ try {
748
+ subscriber.disconnect();
749
+ }
750
+ catch (error) {
751
+ Logger.debug(`kanban: disconnect error during cleanup: ${error}`);
752
+ }
753
+ };
754
+ const forceCleanup = () => {
755
+ if (subscriber && !isCleanedUp) {
756
+ Logger.warn('kanban: forcing Redis subscriber cleanup after timeout');
757
+ try {
758
+ subscriber.disconnect();
759
+ }
760
+ catch {
761
+ // Ignore errors during forced cleanup
762
+ }
763
+ isCleanedUp = true;
764
+ }
765
+ };
766
+ try {
767
+ subscriber = new Redis({
768
+ host: process.env.REDIS_HOST || '127.0.0.1',
769
+ port: parseInt(process.env.REDIS_PORT || '6379'),
770
+ password: process.env.REDIS_PASSWORD || undefined,
771
+ db: 2,
772
+ });
773
+ // Set up error handler before any async operations
774
+ subscriber.on('error', (error) => {
775
+ Logger.error(`kanban: Redis subscriber error: ${error}`);
776
+ void cleanup();
777
+ });
778
+ // Subscribe with error handling
779
+ subscriber.subscribe(KANBAN_KEYS.channel, (error) => {
780
+ if (error) {
781
+ Logger.error(`kanban: failed to subscribe to channel: ${error}`);
782
+ void cleanup();
783
+ return;
784
+ }
785
+ });
786
+ subscriber.on('message', (_channel, message) => {
787
+ try {
788
+ const event = JSON.parse(message);
789
+ callback(event);
790
+ }
791
+ catch (error) {
792
+ Logger.error(`kanban: failed to parse event: ${error}`);
793
+ }
794
+ });
795
+ // Set up forced cleanup timeout (30 seconds)
796
+ cleanupTimeout = setTimeout(forceCleanup, 30000);
797
+ return () => {
798
+ void cleanup();
799
+ };
800
+ }
801
+ catch (error) {
802
+ Logger.error(`kanban: failed to create Redis subscriber: ${error}`);
803
+ void cleanup();
804
+ // Return no-op unsubscribe function
805
+ return () => {
806
+ // No-op - already cleaned up or failed to initialize
807
+ };
808
+ }
809
+ }
810
+ /**
811
+ * Get all tasks assigned to a specific agent
812
+ *
813
+ * @description Retrieves all tasks currently assigned to the given agent
814
+ * across all sessions
815
+ * @param {string} agentId - Agent ID to get tasks for
816
+ * @returns {Promise<KanbanTask[]>} Array of tasks assigned to the agent
817
+ *
818
+ * @example
819
+ * ```typescript
820
+ * const myTasks = await getAgentTasks('agent-1');
821
+ * const inProgress = myTasks.filter(t => t.status === 'in_progress');
822
+ * ```
823
+ */
824
+ export async function getAgentTasks(agentId) {
825
+ const client = await getRedis();
826
+ const taskIds = await client.smembers(KANBAN_KEYS.byAgent(agentId));
827
+ const tasks = [];
828
+ for (const taskId of taskIds) {
829
+ const task = await getTask(taskId);
830
+ if (task)
831
+ tasks.push(task);
832
+ }
833
+ return tasks;
834
+ }
835
+ /**
836
+ * Get tasks available for claiming (unassigned, unblocked, in backlog)
837
+ *
838
+ * @description Convenience method to find tasks that agents can immediately
839
+ * claim and start working on
840
+ * @param {string} sessionId - Session ID to search in
841
+ * @returns {Promise<KanbanTask[]>} Array of available tasks sorted by priority
842
+ *
843
+ * @example
844
+ * ```typescript
845
+ * const available = await getAvailableTasks('session-123');
846
+ * if (available.length > 0) {
847
+ * await claimTask(available[0].id, 'agent-1');
848
+ * }
849
+ * ```
850
+ */
851
+ export async function getAvailableTasks(sessionId) {
852
+ return listTasks(sessionId, { unassigned: true, blocked: false, status: 'backlog' });
853
+ }
854
+ //# sourceMappingURL=kanban-store.js.map