@compilr-dev/cli 0.4.0 → 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 (315) hide show
  1. package/README.md +30 -12
  2. package/dist/agent.d.ts +74 -1
  3. package/dist/agent.js +259 -76
  4. package/dist/anchors/index.d.ts +9 -0
  5. package/dist/anchors/index.js +9 -0
  6. package/dist/anchors/project-anchors.d.ts +79 -0
  7. package/dist/anchors/project-anchors.js +202 -0
  8. package/dist/commands/handler-types.d.ts +68 -0
  9. package/dist/commands/handler-types.js +8 -0
  10. package/dist/commands/handlers/agent-commands.d.ts +13 -0
  11. package/dist/commands/handlers/agent-commands.js +305 -0
  12. package/dist/commands/handlers/design-commands.d.ts +15 -0
  13. package/dist/commands/handlers/design-commands.js +334 -0
  14. package/dist/commands/handlers/index.d.ts +20 -0
  15. package/dist/commands/handlers/index.js +43 -0
  16. package/dist/commands/handlers/overlay-commands.d.ts +21 -0
  17. package/dist/commands/handlers/overlay-commands.js +287 -0
  18. package/dist/commands/handlers/project-commands.d.ts +11 -0
  19. package/dist/commands/handlers/project-commands.js +167 -0
  20. package/dist/commands/handlers/simple-commands.d.ts +19 -0
  21. package/dist/commands/handlers/simple-commands.js +144 -0
  22. package/dist/commands/index.d.ts +2 -1
  23. package/dist/commands/registry.d.ts +50 -0
  24. package/dist/commands/registry.js +75 -0
  25. package/dist/commands-v2/handlers/context.d.ts +13 -0
  26. package/dist/commands-v2/handlers/context.js +348 -0
  27. package/dist/commands-v2/handlers/core.d.ts +13 -0
  28. package/dist/commands-v2/handlers/core.js +165 -0
  29. package/dist/commands-v2/handlers/debug.d.ts +11 -0
  30. package/dist/commands-v2/handlers/debug.js +159 -0
  31. package/dist/commands-v2/handlers/index.d.ts +12 -0
  32. package/dist/commands-v2/handlers/index.js +24 -0
  33. package/dist/commands-v2/handlers/project.d.ts +22 -0
  34. package/dist/commands-v2/handlers/project.js +814 -0
  35. package/dist/commands-v2/handlers/settings.d.ts +15 -0
  36. package/dist/commands-v2/handlers/settings.js +235 -0
  37. package/dist/commands-v2/index.d.ts +13 -0
  38. package/dist/commands-v2/index.js +15 -0
  39. package/dist/commands-v2/registry.d.ts +37 -0
  40. package/dist/commands-v2/registry.js +80 -0
  41. package/dist/commands-v2/types.d.ts +75 -0
  42. package/dist/commands-v2/types.js +7 -0
  43. package/dist/commands.js +110 -7
  44. package/dist/index.js +288 -29
  45. package/dist/input-handlers/index.d.ts +7 -0
  46. package/dist/input-handlers/index.js +7 -0
  47. package/dist/input-handlers/memory-handler.d.ts +26 -0
  48. package/dist/input-handlers/memory-handler.js +68 -0
  49. package/dist/repl-helpers.d.ts +63 -0
  50. package/dist/repl-helpers.js +318 -0
  51. package/dist/repl-v2.d.ts +155 -0
  52. package/dist/repl-v2.js +774 -0
  53. package/dist/repl.d.ts +32 -4
  54. package/dist/repl.js +250 -977
  55. package/dist/settings/index.d.ts +23 -0
  56. package/dist/settings/index.js +48 -0
  57. package/dist/settings/paths.d.ts +110 -0
  58. package/dist/settings/paths.js +264 -0
  59. package/dist/templates/compilr-md.js +7 -4
  60. package/dist/templates/index.js +3 -4
  61. package/dist/themes/colors.js +3 -1
  62. package/dist/themes/registry.d.ts +5 -36
  63. package/dist/themes/registry.js +11 -95
  64. package/dist/themes/types.d.ts +3 -38
  65. package/dist/themes/types.js +2 -2
  66. package/dist/tools/anchor-tools.d.ts +31 -0
  67. package/dist/tools/anchor-tools.js +255 -0
  68. package/dist/tools/backlog-wrappers.d.ts +54 -0
  69. package/dist/tools/backlog-wrappers.js +338 -0
  70. package/dist/tools/backlog.js +1 -1
  71. package/dist/tools/db-tools.d.ts +65 -0
  72. package/dist/tools/db-tools.js +19 -0
  73. package/dist/tools/document-db.d.ts +43 -0
  74. package/dist/tools/document-db.js +220 -0
  75. package/dist/tools/project-db.d.ts +102 -0
  76. package/dist/tools/project-db.js +370 -0
  77. package/dist/tools/workitem-db.d.ts +103 -0
  78. package/dist/tools/workitem-db.js +549 -0
  79. package/dist/tools.js +13 -3
  80. package/dist/ui/agents-overlay-v2.d.ts +43 -0
  81. package/dist/ui/agents-overlay-v2.js +809 -0
  82. package/dist/ui/agents-overlay.d.ts +5 -5
  83. package/dist/ui/agents-overlay.js +782 -420
  84. package/dist/ui/anchors-overlay.d.ts +12 -0
  85. package/dist/ui/anchors-overlay.js +775 -0
  86. package/dist/ui/arch-type-overlay.d.ts +1 -6
  87. package/dist/ui/arch-type-overlay.js +175 -203
  88. package/dist/ui/ask-user-overlay-v2.d.ts +26 -0
  89. package/dist/ui/ask-user-overlay-v2.js +555 -0
  90. package/dist/ui/ask-user-overlay.d.ts +2 -2
  91. package/dist/ui/ask-user-overlay.js +443 -535
  92. package/dist/ui/ask-user-simple-overlay-v2.d.ts +25 -0
  93. package/dist/ui/ask-user-simple-overlay-v2.js +215 -0
  94. package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
  95. package/dist/ui/ask-user-simple-overlay.js +182 -209
  96. package/dist/ui/backlog-overlay.d.ts +16 -1
  97. package/dist/ui/backlog-overlay.js +525 -659
  98. package/dist/ui/base/index.d.ts +26 -0
  99. package/dist/ui/base/index.js +33 -0
  100. package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
  101. package/dist/ui/base/inline-overlay-utils.js +320 -0
  102. package/dist/ui/base/inline-overlay.d.ts +159 -0
  103. package/dist/ui/base/inline-overlay.js +257 -0
  104. package/dist/ui/base/key-utils.d.ts +15 -0
  105. package/dist/ui/base/key-utils.js +30 -0
  106. package/dist/ui/base/overlay-base-v2.d.ts +193 -0
  107. package/dist/ui/base/overlay-base-v2.js +246 -0
  108. package/dist/ui/base/overlay-base.d.ts +156 -0
  109. package/dist/ui/base/overlay-base.js +238 -0
  110. package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
  111. package/dist/ui/base/overlay-lifecycle.js +159 -0
  112. package/dist/ui/base/overlay-types.d.ts +185 -0
  113. package/dist/ui/base/overlay-types.js +7 -0
  114. package/dist/ui/base/render-utils.d.ts +8 -0
  115. package/dist/ui/base/render-utils.js +11 -0
  116. package/dist/ui/base/screen-stack.d.ts +148 -0
  117. package/dist/ui/base/screen-stack.js +184 -0
  118. package/dist/ui/base/tabbed-list-overlay-v2.d.ts +103 -0
  119. package/dist/ui/base/tabbed-list-overlay-v2.js +317 -0
  120. package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
  121. package/dist/ui/base/tabbed-list-overlay.js +369 -0
  122. package/dist/ui/commands-overlay-v2.d.ts +33 -0
  123. package/dist/ui/commands-overlay-v2.js +441 -0
  124. package/dist/ui/commands-overlay.d.ts +7 -2
  125. package/dist/ui/commands-overlay.js +384 -355
  126. package/dist/ui/config-overlay.d.ts +5 -4
  127. package/dist/ui/config-overlay.js +243 -513
  128. package/dist/ui/conversation.d.ts +75 -4
  129. package/dist/ui/conversation.js +374 -161
  130. package/dist/ui/docs-overlay.d.ts +17 -0
  131. package/dist/ui/docs-overlay.js +303 -0
  132. package/dist/ui/ephemeral.d.ts +1 -1
  133. package/dist/ui/ephemeral.js +1 -1
  134. package/dist/ui/features/index.d.ts +34 -0
  135. package/dist/ui/features/index.js +34 -0
  136. package/dist/ui/features/input-feature.d.ts +85 -0
  137. package/dist/ui/features/input-feature.js +238 -0
  138. package/dist/ui/features/list-feature.d.ts +155 -0
  139. package/dist/ui/features/list-feature.js +244 -0
  140. package/dist/ui/features/pagination-feature.d.ts +154 -0
  141. package/dist/ui/features/pagination-feature.js +238 -0
  142. package/dist/ui/features/search-feature.d.ts +148 -0
  143. package/dist/ui/features/search-feature.js +185 -0
  144. package/dist/ui/features/tab-feature.d.ts +194 -0
  145. package/dist/ui/features/tab-feature.js +307 -0
  146. package/dist/ui/footer-v2.d.ts +222 -0
  147. package/dist/ui/footer-v2.js +1349 -0
  148. package/dist/ui/footer.d.ts +107 -0
  149. package/dist/ui/footer.js +359 -67
  150. package/dist/ui/guardrail-overlay.d.ts +29 -0
  151. package/dist/ui/guardrail-overlay.js +145 -0
  152. package/dist/ui/help-overlay-v2.d.ts +34 -0
  153. package/dist/ui/help-overlay-v2.js +309 -0
  154. package/dist/ui/help-overlay.d.ts +16 -0
  155. package/dist/ui/help-overlay.js +316 -0
  156. package/dist/ui/index.d.ts +1 -1
  157. package/dist/ui/index.js +1 -3
  158. package/dist/ui/init-overlay-v2.d.ts +34 -0
  159. package/dist/ui/init-overlay-v2.js +600 -0
  160. package/dist/ui/init-overlay.d.ts +12 -2
  161. package/dist/ui/init-overlay.js +349 -270
  162. package/dist/ui/input-prompt-v2.d.ts +1 -0
  163. package/dist/ui/input-prompt-v2.js +14 -6
  164. package/dist/ui/input-prompt.d.ts +116 -33
  165. package/dist/ui/input-prompt.js +536 -337
  166. package/dist/ui/iteration-limit-overlay-v2.d.ts +21 -0
  167. package/dist/ui/iteration-limit-overlay-v2.js +114 -0
  168. package/dist/ui/iteration-limit-overlay.d.ts +2 -2
  169. package/dist/ui/iteration-limit-overlay.js +92 -128
  170. package/dist/ui/keys-overlay-v2.d.ts +41 -0
  171. package/dist/ui/keys-overlay-v2.js +248 -0
  172. package/dist/ui/keys-overlay.d.ts +1 -0
  173. package/dist/ui/keys-overlay.js +203 -141
  174. package/dist/ui/line-utils.d.ts +88 -0
  175. package/dist/ui/line-utils.js +150 -0
  176. package/dist/ui/live-region.d.ts +161 -0
  177. package/dist/ui/live-region.js +387 -0
  178. package/dist/ui/mascot/expressions.d.ts +32 -0
  179. package/dist/ui/mascot/expressions.js +213 -0
  180. package/dist/ui/mascot/index.d.ts +8 -0
  181. package/dist/ui/mascot/index.js +8 -0
  182. package/dist/ui/mascot/renderer.d.ts +19 -0
  183. package/dist/ui/mascot/renderer.js +97 -0
  184. package/dist/ui/mascot-overlay-v2.d.ts +41 -0
  185. package/dist/ui/mascot-overlay-v2.js +138 -0
  186. package/dist/ui/mascot-overlay.d.ts +21 -0
  187. package/dist/ui/mascot-overlay.js +146 -0
  188. package/dist/ui/model-overlay-v2.d.ts +49 -0
  189. package/dist/ui/model-overlay-v2.js +118 -0
  190. package/dist/ui/model-overlay.d.ts +27 -0
  191. package/dist/ui/model-overlay.js +221 -0
  192. package/dist/ui/model-warning-overlay.js +3 -5
  193. package/dist/ui/new-overlay.d.ts +34 -0
  194. package/dist/ui/new-overlay.js +604 -0
  195. package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
  196. package/dist/ui/overlay/impl/agents-overlay-v2.js +825 -0
  197. package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
  198. package/dist/ui/overlay/impl/anchors-overlay-v2.js +783 -0
  199. package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
  200. package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
  201. package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
  202. package/dist/ui/overlay/impl/ask-user-overlay-v2.js +584 -0
  203. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
  204. package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
  205. package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +49 -0
  206. package/dist/ui/overlay/impl/backlog-overlay-v2.js +642 -0
  207. package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
  208. package/dist/ui/overlay/impl/commands-overlay-v2.js +441 -0
  209. package/dist/ui/overlay/impl/config-overlay-v2.d.ts +100 -0
  210. package/dist/ui/overlay/impl/config-overlay-v2.js +654 -0
  211. package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +55 -0
  212. package/dist/ui/overlay/impl/dashboard-overlay-v2.js +359 -0
  213. package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
  214. package/dist/ui/overlay/impl/docs-overlay-v2.js +114 -0
  215. package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +77 -0
  216. package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1071 -0
  217. package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
  218. package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
  219. package/dist/ui/overlay/impl/help-overlay-v2.d.ts +34 -0
  220. package/dist/ui/overlay/impl/help-overlay-v2.js +309 -0
  221. package/dist/ui/overlay/impl/init-overlay-v2.d.ts +77 -0
  222. package/dist/ui/overlay/impl/init-overlay-v2.js +593 -0
  223. package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
  224. package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
  225. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
  226. package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
  227. package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
  228. package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
  229. package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
  230. package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
  231. package/dist/ui/overlay/impl/model-overlay-v2.d.ts +49 -0
  232. package/dist/ui/overlay/impl/model-overlay-v2.js +118 -0
  233. package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
  234. package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
  235. package/dist/ui/overlay/impl/new-overlay-v2.d.ts +77 -0
  236. package/dist/ui/overlay/impl/new-overlay-v2.js +593 -0
  237. package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
  238. package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
  239. package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +36 -0
  240. package/dist/ui/overlay/impl/projects-overlay-v2.js +499 -0
  241. package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
  242. package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
  243. package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
  244. package/dist/ui/overlay/impl/tools-overlay-v2.js +218 -0
  245. package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +31 -0
  246. package/dist/ui/overlay/impl/tutorial-overlay-v2.js +1035 -0
  247. package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
  248. package/dist/ui/overlay/impl/workflow-overlay-v2.js +637 -0
  249. package/dist/ui/overlay/index.d.ts +33 -0
  250. package/dist/ui/overlay/index.js +35 -0
  251. package/dist/ui/overlay/key-utils.d.ts +6 -0
  252. package/dist/ui/overlay/key-utils.js +6 -0
  253. package/dist/ui/overlay/overlay-types.d.ts +128 -0
  254. package/dist/ui/overlay/overlay-types.js +22 -0
  255. package/dist/ui/overlay/types.d.ts +135 -0
  256. package/dist/ui/overlay/types.js +22 -0
  257. package/dist/ui/overlays/help-overlay-v2.d.ts +28 -0
  258. package/dist/ui/overlays/help-overlay-v2.js +198 -0
  259. package/dist/ui/overlays/index.d.ts +11 -0
  260. package/dist/ui/overlays/index.js +11 -0
  261. package/dist/ui/overlays.d.ts +0 -4
  262. package/dist/ui/overlays.js +0 -444
  263. package/dist/ui/permission-overlay-v2.d.ts +36 -0
  264. package/dist/ui/permission-overlay-v2.js +380 -0
  265. package/dist/ui/permission-overlay.d.ts +1 -1
  266. package/dist/ui/permission-overlay.js +186 -298
  267. package/dist/ui/projects-overlay.d.ts +19 -0
  268. package/dist/ui/projects-overlay.js +484 -0
  269. package/dist/ui/providers/types.d.ts +178 -0
  270. package/dist/ui/providers/types.js +9 -0
  271. package/dist/ui/render-modes.d.ts +36 -0
  272. package/dist/ui/render-modes.js +44 -0
  273. package/dist/ui/startup-menu.d.ts +36 -0
  274. package/dist/ui/startup-menu.js +236 -0
  275. package/dist/ui/subagent-renderer.d.ts +117 -0
  276. package/dist/ui/subagent-renderer.js +334 -0
  277. package/dist/ui/terminal-codes.d.ts +94 -0
  278. package/dist/ui/terminal-codes.js +124 -0
  279. package/dist/ui/terminal-renderer.d.ts +221 -0
  280. package/dist/ui/terminal-renderer.js +751 -0
  281. package/dist/ui/terminal-ui.d.ts +463 -0
  282. package/dist/ui/terminal-ui.js +2296 -0
  283. package/dist/ui/terminal.d.ts +20 -0
  284. package/dist/ui/terminal.js +72 -0
  285. package/dist/ui/theme-overlay-v2.d.ts +42 -0
  286. package/dist/ui/theme-overlay-v2.js +135 -0
  287. package/dist/ui/theme-overlay.d.ts +24 -0
  288. package/dist/ui/theme-overlay.js +127 -0
  289. package/dist/ui/todo-zone.js +53 -25
  290. package/dist/ui/tool-formatters.d.ts +16 -0
  291. package/dist/ui/tool-formatters.js +516 -0
  292. package/dist/ui/tools-overlay-v2.d.ts +47 -0
  293. package/dist/ui/tools-overlay-v2.js +218 -0
  294. package/dist/ui/tools-overlay.d.ts +10 -2
  295. package/dist/ui/tools-overlay.js +172 -220
  296. package/dist/ui/tutorial-overlay-v2.d.ts +31 -0
  297. package/dist/ui/tutorial-overlay-v2.js +1035 -0
  298. package/dist/ui/tutorial-overlay.d.ts +1 -0
  299. package/dist/ui/tutorial-overlay.js +400 -302
  300. package/dist/ui/workflow-overlay.d.ts +22 -0
  301. package/dist/ui/workflow-overlay.js +636 -0
  302. package/dist/utils/debug-log.d.ts +28 -0
  303. package/dist/utils/debug-log.js +57 -0
  304. package/dist/utils/model-tiers.js +1 -1
  305. package/dist/utils/path-safety.d.ts +56 -0
  306. package/dist/utils/path-safety.js +239 -0
  307. package/dist/workflow/guided-mode-injector.d.ts +42 -0
  308. package/dist/workflow/guided-mode-injector.js +191 -0
  309. package/dist/workflow/index.d.ts +8 -0
  310. package/dist/workflow/index.js +8 -0
  311. package/dist/workflow/step-criteria.d.ts +62 -0
  312. package/dist/workflow/step-criteria.js +150 -0
  313. package/dist/workflow/step-tracker.d.ts +92 -0
  314. package/dist/workflow/step-tracker.js +141 -0
  315. package/package.json +12 -5
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Work Item Database Tools
3
+ *
4
+ * Tools for managing work items (backlog items, tasks, bugs) in the database.
5
+ */
6
+ /**
7
+ * workitem_query - Query work items with filters
8
+ */
9
+ export declare const workitemQueryTool: import("@compilr-dev/agents").Tool<{
10
+ project_id?: number;
11
+ status?: string;
12
+ type?: string;
13
+ priority?: string;
14
+ search?: string;
15
+ limit?: number;
16
+ offset?: number;
17
+ }>;
18
+ /**
19
+ * workitem_add - Add a new work item
20
+ */
21
+ export declare const workitemAddTool: import("@compilr-dev/agents").Tool<{
22
+ project_id?: number;
23
+ type: string;
24
+ title: string;
25
+ description?: string;
26
+ priority?: string;
27
+ estimated_effort?: string;
28
+ }>;
29
+ /**
30
+ * workitem_update - Update a work item
31
+ */
32
+ export declare const workitemUpdateTool: import("@compilr-dev/agents").Tool<{
33
+ item_id: string;
34
+ project_id?: number;
35
+ status?: string;
36
+ priority?: string;
37
+ guided_step?: string;
38
+ title?: string;
39
+ description?: string;
40
+ commit_hash?: string;
41
+ }>;
42
+ /**
43
+ * workitem_next - Get the next work item to work on
44
+ */
45
+ export declare const workitemNextTool: import("@compilr-dev/agents").Tool<{
46
+ project_id?: number;
47
+ type?: string;
48
+ }>;
49
+ /**
50
+ * workitem_delete - Delete a work item
51
+ */
52
+ export declare const workitemDeleteTool: import("@compilr-dev/agents").Tool<{
53
+ item_id: string;
54
+ project_id?: number;
55
+ }>;
56
+ /**
57
+ * workitem_status_counts - Get work item counts by status
58
+ */
59
+ export declare const workitemStatusCountsTool: import("@compilr-dev/agents").Tool<{
60
+ project_id?: number;
61
+ }>;
62
+ /**
63
+ * workitem_advance_step - Advance to the next guided workflow step
64
+ */
65
+ export declare const workitemAdvanceStepTool: import("@compilr-dev/agents").Tool<{
66
+ item_id: string;
67
+ reason: string;
68
+ force?: boolean;
69
+ project_id?: number;
70
+ }>;
71
+ /**
72
+ * All work item tools
73
+ */
74
+ export declare const workitemDbTools: (import("@compilr-dev/agents").Tool<{
75
+ project_id?: number;
76
+ status?: string;
77
+ type?: string;
78
+ priority?: string;
79
+ search?: string;
80
+ limit?: number;
81
+ offset?: number;
82
+ }> | import("@compilr-dev/agents").Tool<{
83
+ project_id?: number;
84
+ type: string;
85
+ title: string;
86
+ description?: string;
87
+ priority?: string;
88
+ estimated_effort?: string;
89
+ }> | import("@compilr-dev/agents").Tool<{
90
+ item_id: string;
91
+ project_id?: number;
92
+ status?: string;
93
+ priority?: string;
94
+ guided_step?: string;
95
+ title?: string;
96
+ description?: string;
97
+ commit_hash?: string;
98
+ }> | import("@compilr-dev/agents").Tool<{
99
+ item_id: string;
100
+ reason: string;
101
+ force?: boolean;
102
+ project_id?: number;
103
+ }>)[];
@@ -0,0 +1,549 @@
1
+ /**
2
+ * Work Item Database Tools
3
+ *
4
+ * Tools for managing work items (backlog items, tasks, bugs) in the database.
5
+ */
6
+ import { defineTool, createSuccessResult, createErrorResult } from '@compilr-dev/agents';
7
+ import { workItemRepository } from '../db/repositories/index.js';
8
+ import { getActiveProject } from './project-db.js';
9
+ import { getNextStep, isValidTransition, getStepCriteria, formatStepDisplay, STEP_ORDER, } from '../workflow/index.js';
10
+ /**
11
+ * workitem_query - Query work items with filters
12
+ */
13
+ export const workitemQueryTool = defineTool({
14
+ name: 'workitem_query',
15
+ description: 'Query work items from the backlog. Supports filtering by status, type, priority, and search. Returns paginated results.',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ project_id: {
20
+ type: 'number',
21
+ description: 'Project ID (uses active project if not provided)',
22
+ },
23
+ status: {
24
+ type: 'string',
25
+ enum: ['backlog', 'in_progress', 'completed', 'skipped', 'all'],
26
+ description: 'Filter by status (default: all)',
27
+ },
28
+ type: {
29
+ type: 'string',
30
+ enum: ['feature', 'bug', 'tech-debt', 'chore', 'all'],
31
+ description: 'Filter by type (default: all)',
32
+ },
33
+ priority: {
34
+ type: 'string',
35
+ enum: ['critical', 'high', 'medium', 'low', 'all'],
36
+ description: 'Filter by priority (default: all)',
37
+ },
38
+ search: {
39
+ type: 'string',
40
+ description: 'Search in title and description',
41
+ },
42
+ limit: {
43
+ type: 'number',
44
+ description: 'Maximum items to return (default: 50)',
45
+ },
46
+ offset: {
47
+ type: 'number',
48
+ description: 'Offset for pagination (default: 0)',
49
+ },
50
+ },
51
+ required: [],
52
+ },
53
+ execute: async (input) => {
54
+ await Promise.resolve(); // Required for async type signature
55
+ try {
56
+ const projectId = input.project_id || getActiveProject()?.id;
57
+ if (!projectId) {
58
+ return createErrorResult('No project specified and no active project. Use project_get or /projects to select a project first.');
59
+ }
60
+ const queryInput = {
61
+ project_id: projectId,
62
+ status: input.status,
63
+ type: input.type,
64
+ priority: input.priority,
65
+ search: input.search,
66
+ limit: input.limit || 50,
67
+ offset: input.offset || 0,
68
+ };
69
+ const result = workItemRepository.query(queryInput);
70
+ const items = result.items.map((item) => ({
71
+ id: item.id,
72
+ itemId: item.itemId,
73
+ type: item.type,
74
+ status: item.status,
75
+ priority: item.priority,
76
+ guidedStep: item.guidedStep,
77
+ title: item.title,
78
+ description: item.description,
79
+ estimatedEffort: item.estimatedEffort,
80
+ completedAt: item.completedAt?.toISOString(),
81
+ commitHash: item.commitHash,
82
+ createdAt: item.createdAt.toISOString(),
83
+ }));
84
+ return createSuccessResult({
85
+ success: true,
86
+ items,
87
+ total: result.total,
88
+ hasMore: result.hasMore,
89
+ projectId,
90
+ });
91
+ }
92
+ catch (error) {
93
+ return createErrorResult(`Failed to query work items: ${error instanceof Error ? error.message : String(error)}`);
94
+ }
95
+ },
96
+ });
97
+ /**
98
+ * workitem_add - Add a new work item
99
+ */
100
+ export const workitemAddTool = defineTool({
101
+ name: 'workitem_add',
102
+ description: 'Add a new work item (feature, bug, tech-debt, or chore) to the backlog.',
103
+ inputSchema: {
104
+ type: 'object',
105
+ properties: {
106
+ project_id: {
107
+ type: 'number',
108
+ description: 'Project ID (uses active project if not provided)',
109
+ },
110
+ type: {
111
+ type: 'string',
112
+ enum: ['feature', 'bug', 'tech-debt', 'chore'],
113
+ description: 'Work item type',
114
+ },
115
+ title: {
116
+ type: 'string',
117
+ description: 'Title of the work item',
118
+ },
119
+ description: {
120
+ type: 'string',
121
+ description: 'Detailed description',
122
+ },
123
+ priority: {
124
+ type: 'string',
125
+ enum: ['critical', 'high', 'medium', 'low'],
126
+ description: 'Priority (default: medium)',
127
+ },
128
+ estimated_effort: {
129
+ type: 'string',
130
+ enum: ['low', 'medium', 'high'],
131
+ description: 'Estimated effort',
132
+ },
133
+ },
134
+ required: ['type', 'title'],
135
+ },
136
+ execute: async (input) => {
137
+ await Promise.resolve(); // Required for async type signature
138
+ try {
139
+ const projectId = input.project_id || getActiveProject()?.id;
140
+ if (!projectId) {
141
+ return createErrorResult('No project specified and no active project. Use project_get or /projects to select a project first.');
142
+ }
143
+ const createInput = {
144
+ project_id: projectId,
145
+ type: input.type,
146
+ title: input.title,
147
+ description: input.description,
148
+ priority: input.priority,
149
+ estimated_effort: input.estimated_effort,
150
+ };
151
+ const item = workItemRepository.create(createInput);
152
+ return createSuccessResult({
153
+ success: true,
154
+ message: `Work item ${item.itemId} created: "${item.title}"`,
155
+ item: {
156
+ id: item.id,
157
+ itemId: item.itemId,
158
+ type: item.type,
159
+ status: item.status,
160
+ priority: item.priority,
161
+ title: item.title,
162
+ },
163
+ });
164
+ }
165
+ catch (error) {
166
+ return createErrorResult(`Failed to add work item: ${error instanceof Error ? error.message : String(error)}`);
167
+ }
168
+ },
169
+ });
170
+ /**
171
+ * workitem_update - Update a work item
172
+ */
173
+ export const workitemUpdateTool = defineTool({
174
+ name: 'workitem_update',
175
+ description: 'Update an existing work item. Can update status, priority, title, description, guided step, and more.',
176
+ inputSchema: {
177
+ type: 'object',
178
+ properties: {
179
+ item_id: {
180
+ type: 'string',
181
+ description: 'Work item ID (e.g., "REQ-001", "BUG-002")',
182
+ },
183
+ project_id: {
184
+ type: 'number',
185
+ description: 'Project ID (uses active project if not provided)',
186
+ },
187
+ status: {
188
+ type: 'string',
189
+ enum: ['backlog', 'in_progress', 'completed', 'skipped'],
190
+ description: 'Work item status',
191
+ },
192
+ priority: {
193
+ type: 'string',
194
+ enum: ['critical', 'high', 'medium', 'low'],
195
+ description: 'Priority',
196
+ },
197
+ guided_step: {
198
+ type: 'string',
199
+ enum: ['plan', 'implement', 'test', 'commit', 'review'],
200
+ description: 'Current step in guided mode workflow',
201
+ },
202
+ title: {
203
+ type: 'string',
204
+ description: 'Updated title',
205
+ },
206
+ description: {
207
+ type: 'string',
208
+ description: 'Updated description',
209
+ },
210
+ commit_hash: {
211
+ type: 'string',
212
+ description: 'Git commit hash when completing the item',
213
+ },
214
+ },
215
+ required: ['item_id'],
216
+ },
217
+ execute: async (input) => {
218
+ await Promise.resolve(); // Required for async type signature
219
+ try {
220
+ const projectId = input.project_id || getActiveProject()?.id;
221
+ if (!projectId) {
222
+ return createErrorResult('No project specified and no active project. Use project_get or /projects to select a project first.');
223
+ }
224
+ // Find the work item by item_id
225
+ const existingItem = workItemRepository.getByItemId(projectId, input.item_id);
226
+ if (!existingItem) {
227
+ return createErrorResult(`Work item "${input.item_id}" not found in current project`);
228
+ }
229
+ const updateInput = {};
230
+ if (input.status)
231
+ updateInput.status = input.status;
232
+ if (input.priority)
233
+ updateInput.priority = input.priority;
234
+ if (input.guided_step !== undefined)
235
+ updateInput.guided_step = input.guided_step;
236
+ if (input.title)
237
+ updateInput.title = input.title;
238
+ if (input.description !== undefined)
239
+ updateInput.description = input.description;
240
+ if (input.commit_hash)
241
+ updateInput.commit_hash = input.commit_hash;
242
+ const item = workItemRepository.update(existingItem.id, updateInput);
243
+ if (!item) {
244
+ return createErrorResult(`Failed to update work item "${input.item_id}"`);
245
+ }
246
+ return createSuccessResult({
247
+ success: true,
248
+ message: `Work item ${item.itemId} updated`,
249
+ item: {
250
+ id: item.id,
251
+ itemId: item.itemId,
252
+ type: item.type,
253
+ status: item.status,
254
+ priority: item.priority,
255
+ guidedStep: item.guidedStep,
256
+ title: item.title,
257
+ completedAt: item.completedAt?.toISOString(),
258
+ commitHash: item.commitHash,
259
+ },
260
+ });
261
+ }
262
+ catch (error) {
263
+ return createErrorResult(`Failed to update work item: ${error instanceof Error ? error.message : String(error)}`);
264
+ }
265
+ },
266
+ });
267
+ /**
268
+ * workitem_next - Get the next work item to work on
269
+ */
270
+ export const workitemNextTool = defineTool({
271
+ name: 'workitem_next',
272
+ description: 'Get the next work item to work on (highest priority backlog item). Useful for guided mode to pick the next task.',
273
+ inputSchema: {
274
+ type: 'object',
275
+ properties: {
276
+ project_id: {
277
+ type: 'number',
278
+ description: 'Project ID (uses active project if not provided)',
279
+ },
280
+ type: {
281
+ type: 'string',
282
+ enum: ['feature', 'bug', 'tech-debt', 'chore'],
283
+ description: 'Filter by type (optional)',
284
+ },
285
+ },
286
+ required: [],
287
+ },
288
+ execute: async (input) => {
289
+ await Promise.resolve(); // Required for async type signature
290
+ try {
291
+ const projectId = input.project_id || getActiveProject()?.id;
292
+ if (!projectId) {
293
+ return createErrorResult('No project specified and no active project. Use project_get or /projects to select a project first.');
294
+ }
295
+ const item = workItemRepository.getNext(projectId, input.type);
296
+ if (!item) {
297
+ return createSuccessResult({
298
+ success: true,
299
+ item: null,
300
+ message: 'No backlog items found. The backlog is empty or all items are completed.',
301
+ });
302
+ }
303
+ return createSuccessResult({
304
+ success: true,
305
+ item: {
306
+ id: item.id,
307
+ itemId: item.itemId,
308
+ type: item.type,
309
+ status: item.status,
310
+ priority: item.priority,
311
+ title: item.title,
312
+ description: item.description,
313
+ estimatedEffort: item.estimatedEffort,
314
+ },
315
+ message: `Next item: ${item.itemId} "${item.title}" (${item.priority} priority)`,
316
+ });
317
+ }
318
+ catch (error) {
319
+ return createErrorResult(`Failed to get next work item: ${error instanceof Error ? error.message : String(error)}`);
320
+ }
321
+ },
322
+ });
323
+ /**
324
+ * workitem_delete - Delete a work item
325
+ */
326
+ export const workitemDeleteTool = defineTool({
327
+ name: 'workitem_delete',
328
+ description: 'Delete a work item from the backlog.',
329
+ inputSchema: {
330
+ type: 'object',
331
+ properties: {
332
+ item_id: {
333
+ type: 'string',
334
+ description: 'Work item ID (e.g., "REQ-001", "BUG-002")',
335
+ },
336
+ project_id: {
337
+ type: 'number',
338
+ description: 'Project ID (uses active project if not provided)',
339
+ },
340
+ },
341
+ required: ['item_id'],
342
+ },
343
+ execute: async (input) => {
344
+ await Promise.resolve(); // Required for async type signature
345
+ try {
346
+ const projectId = input.project_id || getActiveProject()?.id;
347
+ if (!projectId) {
348
+ return createErrorResult('No project specified and no active project. Use project_get or /projects to select a project first.');
349
+ }
350
+ // Find the work item by item_id
351
+ const existingItem = workItemRepository.getByItemId(projectId, input.item_id);
352
+ if (!existingItem) {
353
+ return createErrorResult(`Work item "${input.item_id}" not found in current project`);
354
+ }
355
+ const deleted = workItemRepository.delete(existingItem.id);
356
+ if (!deleted) {
357
+ return createErrorResult(`Failed to delete work item "${input.item_id}"`);
358
+ }
359
+ return createSuccessResult({
360
+ success: true,
361
+ message: `Work item ${input.item_id} deleted`,
362
+ });
363
+ }
364
+ catch (error) {
365
+ return createErrorResult(`Failed to delete work item: ${error instanceof Error ? error.message : String(error)}`);
366
+ }
367
+ },
368
+ });
369
+ /**
370
+ * workitem_status_counts - Get work item counts by status
371
+ */
372
+ export const workitemStatusCountsTool = defineTool({
373
+ name: 'workitem_status_counts',
374
+ description: 'Get counts of work items by status for the current project. Useful for showing progress.',
375
+ inputSchema: {
376
+ type: 'object',
377
+ properties: {
378
+ project_id: {
379
+ type: 'number',
380
+ description: 'Project ID (uses active project if not provided)',
381
+ },
382
+ },
383
+ required: [],
384
+ },
385
+ execute: async (input) => {
386
+ await Promise.resolve(); // Required for async type signature
387
+ try {
388
+ const projectId = input.project_id || getActiveProject()?.id;
389
+ if (!projectId) {
390
+ return createErrorResult('No project specified and no active project. Use project_get or /projects to select a project first.');
391
+ }
392
+ const counts = workItemRepository.getStatusCounts(projectId);
393
+ const total = counts.backlog + counts.in_progress + counts.completed + counts.skipped;
394
+ const progress = total > 0 ? Math.round((counts.completed / total) * 100) : 0;
395
+ return createSuccessResult({
396
+ success: true,
397
+ counts,
398
+ total,
399
+ progress,
400
+ summary: `${String(counts.completed)}/${String(total)} completed (${String(progress)}%)`,
401
+ });
402
+ }
403
+ catch (error) {
404
+ return createErrorResult(`Failed to get status counts: ${error instanceof Error ? error.message : String(error)}`);
405
+ }
406
+ },
407
+ });
408
+ /**
409
+ * workitem_advance_step - Advance to the next guided workflow step
410
+ */
411
+ export const workitemAdvanceStepTool = defineTool({
412
+ name: 'workitem_advance_step',
413
+ description: `Advance a work item to the next guided workflow step.
414
+ Steps progress in order: ${STEP_ORDER.join(' → ')} → complete.
415
+ Use this tool when the criteria for the current step are met.
416
+ The agent should explicitly call this to advance - it provides visibility and audit trail.`,
417
+ inputSchema: {
418
+ type: 'object',
419
+ properties: {
420
+ item_id: {
421
+ type: 'string',
422
+ description: 'Work item ID (e.g., "REQ-001", "BUG-002")',
423
+ },
424
+ reason: {
425
+ type: 'string',
426
+ description: 'Why the step criteria was met (shown to user for visibility)',
427
+ },
428
+ force: {
429
+ type: 'boolean',
430
+ description: 'Skip validation and force advance (e.g., user override after test failures)',
431
+ },
432
+ project_id: {
433
+ type: 'number',
434
+ description: 'Project ID (uses active project if not provided)',
435
+ },
436
+ },
437
+ required: ['item_id', 'reason'],
438
+ },
439
+ execute: async (input) => {
440
+ await Promise.resolve(); // Required for async type signature
441
+ try {
442
+ const projectId = input.project_id || getActiveProject()?.id;
443
+ if (!projectId) {
444
+ return createErrorResult('No project specified and no active project. Use project_get or /projects to select a project first.');
445
+ }
446
+ // Find the work item
447
+ const item = workItemRepository.getByItemId(projectId, input.item_id);
448
+ if (!item) {
449
+ return createErrorResult(`Work item "${input.item_id}" not found in current project`);
450
+ }
451
+ // Check if item is in progress
452
+ if (item.status !== 'in_progress') {
453
+ return createErrorResult(`Work item "${input.item_id}" is not in progress (status: ${item.status}). ` +
454
+ 'Use workitem_update to set status to in_progress first.');
455
+ }
456
+ // Determine current and next step
457
+ const currentStep = item.guidedStep;
458
+ const nextStep = getNextStep(currentStep);
459
+ // Check for valid transition (unless forced)
460
+ if (!input.force && currentStep !== null) {
461
+ if (!isValidTransition(currentStep, nextStep)) {
462
+ return createErrorResult(`Cannot advance from ${currentStep} to ${nextStep}. ` +
463
+ `Valid next step: ${getNextStep(currentStep)}. ` +
464
+ 'Use force=true to override.');
465
+ }
466
+ }
467
+ // Handle completion
468
+ if (nextStep === 'complete') {
469
+ // Mark item as completed
470
+ const updatedItem = workItemRepository.update(item.id, {
471
+ status: 'completed',
472
+ guided_step: null,
473
+ });
474
+ if (!updatedItem) {
475
+ return createErrorResult('Failed to update work item');
476
+ }
477
+ return createSuccessResult({
478
+ success: true,
479
+ item: {
480
+ id: updatedItem.id,
481
+ itemId: updatedItem.itemId,
482
+ type: updatedItem.type,
483
+ status: updatedItem.status,
484
+ priority: updatedItem.priority,
485
+ guidedStep: updatedItem.guidedStep,
486
+ title: updatedItem.title,
487
+ completedAt: updatedItem.completedAt?.toISOString(),
488
+ commitHash: updatedItem.commitHash,
489
+ },
490
+ previous_step: currentStep,
491
+ current_step: null,
492
+ message: currentStep
493
+ ? `✓ ${input.item_id}: ${formatStepDisplay(currentStep)} → COMPLETED`
494
+ : `✓ ${input.item_id}: COMPLETED`,
495
+ completed: true,
496
+ reason: input.reason,
497
+ next_action: 'Work item complete! Use workitem_next to pick the next item from backlog.',
498
+ });
499
+ }
500
+ // Advance to next step (we know nextStep is not 'complete' at this point
501
+ // because 'complete' case is handled above and returns early)
502
+ const nextGuidedStep = nextStep;
503
+ const updatedItem = workItemRepository.update(item.id, {
504
+ guided_step: nextGuidedStep,
505
+ });
506
+ if (!updatedItem) {
507
+ return createErrorResult('Failed to update work item');
508
+ }
509
+ // Get hints for next step
510
+ const nextCriteria = getStepCriteria(nextGuidedStep);
511
+ return createSuccessResult({
512
+ success: true,
513
+ item: {
514
+ id: updatedItem.id,
515
+ itemId: updatedItem.itemId,
516
+ type: updatedItem.type,
517
+ status: updatedItem.status,
518
+ priority: updatedItem.priority,
519
+ guidedStep: updatedItem.guidedStep,
520
+ title: updatedItem.title,
521
+ },
522
+ previous_step: currentStep,
523
+ current_step: nextGuidedStep,
524
+ message: currentStep
525
+ ? `✓ ${input.item_id}: ${formatStepDisplay(currentStep)} → ${formatStepDisplay(nextGuidedStep)}`
526
+ : `✓ ${input.item_id}: Starting ${formatStepDisplay(nextGuidedStep)}`,
527
+ completed: false,
528
+ reason: input.reason,
529
+ next_action: nextCriteria.nextActionHint,
530
+ exit_criteria: nextCriteria.exitCriteria,
531
+ });
532
+ }
533
+ catch (error) {
534
+ return createErrorResult(`Failed to advance step: ${error instanceof Error ? error.message : String(error)}`);
535
+ }
536
+ },
537
+ });
538
+ /**
539
+ * All work item tools
540
+ */
541
+ export const workitemDbTools = [
542
+ workitemQueryTool,
543
+ workitemAddTool,
544
+ workitemUpdateTool,
545
+ workitemNextTool,
546
+ workitemDeleteTool,
547
+ workitemStatusCountsTool,
548
+ workitemAdvanceStepTool,
549
+ ];
package/dist/tools.js CHANGED
@@ -71,9 +71,14 @@ const bashTool = createBashTool({
71
71
  });
72
72
  import { gitStatusTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, detectProjectTool, findProjectRootTool, runTestsTool, runLintTool, } from '@compilr-dev/agents-coding';
73
73
  // Local tools
74
- import { backlogReadTool, backlogWriteTool } from './tools/backlog.js';
75
74
  import { askUserTool } from './tools/ask-user.js';
76
75
  import { askUserSimpleTool } from './tools/ask-user-simple.js';
76
+ // Backlog wrapper tools - bridge library skills (backlog_*) to CLI DB tools (workitem_*)
77
+ import { backlogWrapperTools } from './tools/backlog-wrappers.js';
78
+ // DB tools for project, work item, and document management
79
+ import { allDbTools } from './tools/db-tools.js';
80
+ // Anchor tools for managing persistent context
81
+ import { allAnchorTools } from './tools/anchor-tools.js';
77
82
  /**
78
83
  * Creates the tool registry with all available tools.
79
84
  * Returns tools as-is - the Agent.registerTools() method handles typing.
@@ -102,10 +107,15 @@ export function createToolRegistry() {
102
107
  runTestsTool,
103
108
  runLintTool,
104
109
  // Local tools
105
- backlogReadTool,
106
- backlogWriteTool,
107
110
  askUserTool,
108
111
  askUserSimpleTool,
112
+ // Backlog wrapper tools - provide backlog_read/backlog_write for library skills
113
+ // These delegate to workitem_* DB tools internally
114
+ ...backlogWrapperTools,
115
+ // DB tools for project/work item/document management
116
+ ...allDbTools,
117
+ // Anchor tools for managing persistent context
118
+ ...allAnchorTools,
109
119
  ];
110
120
  }
111
121
  /**