@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,338 @@
1
+ /**
2
+ * Backlog Tool Wrappers
3
+ *
4
+ * These wrappers provide `backlog_read` and `backlog_write` tools that skills expect,
5
+ * but internally delegate to the `workitem_*` database tools.
6
+ *
7
+ * This allows library skills (which reference backlog_*) to work seamlessly
8
+ * with the CLI's database-backed workitem system.
9
+ */
10
+ import { defineTool, createSuccessResult, createErrorResult } from '@compilr-dev/agents';
11
+ import { workItemRepository } from '../db/repositories/index.js';
12
+ import { getActiveProject } from './project-db.js';
13
+ // =============================================================================
14
+ // Type Mappings (Library ↔ CLI)
15
+ // =============================================================================
16
+ // Library status → CLI status
17
+ const STATUS_TO_CLI = {
18
+ 'backlog': 'backlog',
19
+ 'in-progress': 'in_progress',
20
+ 'done': 'completed',
21
+ 'blocked': 'skipped', // closest match
22
+ };
23
+ // CLI status → Library status
24
+ const STATUS_TO_LIBRARY = {
25
+ 'backlog': 'backlog',
26
+ 'in_progress': 'in-progress',
27
+ 'completed': 'done',
28
+ 'skipped': 'blocked',
29
+ };
30
+ // Library type → CLI type
31
+ const TYPE_TO_CLI = {
32
+ 'feature': 'feature',
33
+ 'bug': 'bug',
34
+ 'chore': 'chore',
35
+ 'spike': 'tech-debt', // closest match
36
+ };
37
+ // CLI type → Library type
38
+ const TYPE_TO_LIBRARY = {
39
+ 'feature': 'feature',
40
+ 'bug': 'bug',
41
+ 'chore': 'chore',
42
+ 'tech-debt': 'spike',
43
+ };
44
+ export const backlogReadTool = defineTool({
45
+ name: 'backlog_read',
46
+ description: 'Read backlog items from the project. ' +
47
+ 'Use filters to narrow results. Use id parameter to get a specific item. ' +
48
+ 'Returns items sorted by priority (critical first) then by creation date.',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ id: {
53
+ type: 'string',
54
+ description: 'Get a specific item by ID (e.g., "FEAT-001")',
55
+ },
56
+ status: {
57
+ type: 'string',
58
+ enum: ['backlog', 'in-progress', 'done', 'blocked'],
59
+ description: 'Filter by status',
60
+ },
61
+ type: {
62
+ type: 'string',
63
+ enum: ['feature', 'bug', 'chore', 'spike'],
64
+ description: 'Filter by item type',
65
+ },
66
+ search: {
67
+ type: 'string',
68
+ description: 'Search in title and description',
69
+ },
70
+ priority: {
71
+ type: 'string',
72
+ enum: ['critical', 'high', 'medium', 'low'],
73
+ description: 'Filter by priority',
74
+ },
75
+ limit: {
76
+ type: 'number',
77
+ description: 'Maximum items to return (default: 20)',
78
+ },
79
+ },
80
+ },
81
+ execute: async (input) => {
82
+ try {
83
+ // Note: workItemRepository methods are synchronous, but we keep async for interface consistency
84
+ await Promise.resolve();
85
+ const projectId = getActiveProject()?.id;
86
+ if (!projectId) {
87
+ return createSuccessResult({
88
+ items: [],
89
+ total: 0,
90
+ filtered: 0,
91
+ message: 'No active project. Use /projects to select a project first.',
92
+ });
93
+ }
94
+ // If specific ID requested, look it up directly
95
+ if (input.id) {
96
+ const item = workItemRepository.getByItemId(projectId, input.id);
97
+ if (!item) {
98
+ return createErrorResult(`Item not found: ${input.id}`);
99
+ }
100
+ return createSuccessResult({
101
+ items: [{
102
+ id: item.itemId,
103
+ type: TYPE_TO_LIBRARY[item.type],
104
+ title: item.title,
105
+ description: item.description || '',
106
+ status: STATUS_TO_LIBRARY[item.status],
107
+ priority: item.priority,
108
+ }],
109
+ total: 1,
110
+ filtered: 1,
111
+ });
112
+ }
113
+ // Build query
114
+ const queryInput = {
115
+ project_id: projectId,
116
+ status: input.status ? STATUS_TO_CLI[input.status] : 'all',
117
+ type: input.type ? TYPE_TO_CLI[input.type] : 'all',
118
+ priority: input.priority || 'all',
119
+ search: input.search,
120
+ limit: input.limit || 20,
121
+ offset: 0,
122
+ };
123
+ const result = workItemRepository.query(queryInput);
124
+ // Map items to library format
125
+ const items = result.items.map((item) => ({
126
+ id: item.itemId,
127
+ type: TYPE_TO_LIBRARY[item.type],
128
+ title: item.title,
129
+ description: item.description || '',
130
+ status: STATUS_TO_LIBRARY[item.status],
131
+ priority: item.priority,
132
+ createdAt: item.createdAt.toISOString(),
133
+ updatedAt: item.createdAt.toISOString(), // DB doesn't track updatedAt separately
134
+ }));
135
+ return createSuccessResult({
136
+ items,
137
+ total: result.total,
138
+ filtered: items.length,
139
+ });
140
+ }
141
+ catch (error) {
142
+ return createErrorResult(error instanceof Error ? error.message : String(error));
143
+ }
144
+ },
145
+ });
146
+ export const backlogWriteTool = defineTool({
147
+ name: 'backlog_write',
148
+ description: 'Create, update, or delete backlog items. ' +
149
+ 'Actions: add (new item), update (modify existing), delete (remove), replace (full list). ' +
150
+ 'IDs are auto-generated for new items based on type (e.g., FEAT-001, BUG-002).',
151
+ inputSchema: {
152
+ type: 'object',
153
+ properties: {
154
+ action: {
155
+ type: 'string',
156
+ enum: ['add', 'update', 'delete', 'replace'],
157
+ description: 'Action to perform',
158
+ },
159
+ item: {
160
+ type: 'object',
161
+ description: 'Item to add or update (for add/update actions)',
162
+ properties: {
163
+ id: { type: 'string', description: 'Item ID (required for update)' },
164
+ type: {
165
+ type: 'string',
166
+ enum: ['feature', 'bug', 'chore', 'spike'],
167
+ description: 'Item type (required for add)',
168
+ },
169
+ title: { type: 'string', description: 'Item title' },
170
+ description: { type: 'string', description: 'Detailed description' },
171
+ status: {
172
+ type: 'string',
173
+ enum: ['backlog', 'in-progress', 'done', 'blocked'],
174
+ description: 'Item status',
175
+ },
176
+ priority: {
177
+ type: 'string',
178
+ enum: ['critical', 'high', 'medium', 'low'],
179
+ description: 'Priority level',
180
+ },
181
+ },
182
+ },
183
+ deleteId: {
184
+ type: 'string',
185
+ description: 'Item ID to delete (for delete action)',
186
+ },
187
+ items: {
188
+ type: 'array',
189
+ description: 'Full list of items (for replace action)',
190
+ items: {
191
+ type: 'object',
192
+ },
193
+ },
194
+ },
195
+ required: ['action'],
196
+ },
197
+ execute: async (input) => {
198
+ try {
199
+ // Note: workItemRepository methods are synchronous, but we keep async for interface consistency
200
+ await Promise.resolve();
201
+ const projectId = getActiveProject()?.id;
202
+ if (!projectId) {
203
+ return createErrorResult('No active project. Use /projects to select a project first.');
204
+ }
205
+ switch (input.action) {
206
+ case 'add': {
207
+ if (!input.item) {
208
+ return createErrorResult('Item is required for add action');
209
+ }
210
+ if (!input.item.type) {
211
+ return createErrorResult('Item type is required for add action');
212
+ }
213
+ if (!input.item.title) {
214
+ return createErrorResult('Item title is required for add action');
215
+ }
216
+ const createInput = {
217
+ project_id: projectId,
218
+ type: TYPE_TO_CLI[input.item.type],
219
+ title: input.item.title,
220
+ description: input.item.description,
221
+ priority: input.item.priority,
222
+ };
223
+ const item = workItemRepository.create(createInput);
224
+ return createSuccessResult({
225
+ success: true,
226
+ action: 'add',
227
+ itemId: item.itemId,
228
+ message: `Created ${item.itemId}: "${item.title}"`,
229
+ });
230
+ }
231
+ case 'update': {
232
+ if (!input.item?.id) {
233
+ return createErrorResult('Item ID is required for update action');
234
+ }
235
+ const existingItem = workItemRepository.getByItemId(projectId, input.item.id);
236
+ if (!existingItem) {
237
+ return createErrorResult(`Item not found: ${input.item.id}`);
238
+ }
239
+ const updateInput = {};
240
+ if (input.item.status) {
241
+ updateInput.status = STATUS_TO_CLI[input.item.status];
242
+ }
243
+ if (input.item.priority) {
244
+ updateInput.priority = input.item.priority;
245
+ }
246
+ if (input.item.title) {
247
+ updateInput.title = input.item.title;
248
+ }
249
+ if (input.item.description !== undefined) {
250
+ updateInput.description = input.item.description;
251
+ }
252
+ const updated = workItemRepository.update(existingItem.id, updateInput);
253
+ if (!updated) {
254
+ return createErrorResult(`Failed to update item: ${input.item.id}`);
255
+ }
256
+ return createSuccessResult({
257
+ success: true,
258
+ action: 'update',
259
+ itemId: input.item.id,
260
+ message: `Updated ${input.item.id}`,
261
+ });
262
+ }
263
+ case 'delete': {
264
+ const deleteId = input.deleteId || input.item?.id;
265
+ if (!deleteId) {
266
+ return createErrorResult('deleteId or item.id is required for delete action');
267
+ }
268
+ const existingItem = workItemRepository.getByItemId(projectId, deleteId);
269
+ if (!existingItem) {
270
+ return createErrorResult(`Item not found: ${deleteId}`);
271
+ }
272
+ const deleted = workItemRepository.delete(existingItem.id);
273
+ if (!deleted) {
274
+ return createErrorResult(`Failed to delete item: ${deleteId}`);
275
+ }
276
+ return createSuccessResult({
277
+ success: true,
278
+ action: 'delete',
279
+ itemId: deleteId,
280
+ message: `Deleted ${deleteId}`,
281
+ });
282
+ }
283
+ case 'replace': {
284
+ if (!input.items) {
285
+ return createErrorResult('Items array is required for replace action');
286
+ }
287
+ // Delete all existing items
288
+ const existing = workItemRepository.query({
289
+ project_id: projectId,
290
+ limit: 1000,
291
+ offset: 0,
292
+ });
293
+ for (const item of existing.items) {
294
+ workItemRepository.delete(item.id);
295
+ }
296
+ // Add all new items
297
+ const newIds = [];
298
+ for (const newItem of input.items) {
299
+ const createInput = {
300
+ project_id: projectId,
301
+ type: TYPE_TO_CLI[newItem.type],
302
+ title: newItem.title,
303
+ description: newItem.description,
304
+ priority: newItem.priority,
305
+ };
306
+ const created = workItemRepository.create(createInput);
307
+ newIds.push(created.itemId);
308
+ // Update status if not backlog
309
+ if (newItem.status && newItem.status !== 'backlog') {
310
+ workItemRepository.update(created.id, {
311
+ status: STATUS_TO_CLI[newItem.status],
312
+ });
313
+ }
314
+ }
315
+ return createSuccessResult({
316
+ success: true,
317
+ action: 'replace',
318
+ itemCount: input.items.length,
319
+ newIds,
320
+ message: `Replaced backlog with ${String(input.items.length)} items`,
321
+ });
322
+ }
323
+ default:
324
+ return createErrorResult(`Unknown action: ${input.action}`);
325
+ }
326
+ }
327
+ catch (error) {
328
+ return createErrorResult(error instanceof Error ? error.message : String(error));
329
+ }
330
+ },
331
+ });
332
+ /**
333
+ * All backlog wrapper tools
334
+ */
335
+ export const backlogWrapperTools = [
336
+ backlogReadTool,
337
+ backlogWriteTool,
338
+ ];
@@ -357,7 +357,7 @@ export const backlogReadTool = defineTool({
357
357
  if (!backlogPath) {
358
358
  return Promise.resolve({
359
359
  success: false,
360
- error: 'No backlog file found. Run /init to create a project first, or /design to create the backlog.',
360
+ error: 'No backlog file found. Run /new to create a project first, or /design to create the backlog.',
361
361
  });
362
362
  }
363
363
  try {
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Database Tools Index
3
+ *
4
+ * Exports all database-related tools for project, work item, and document management.
5
+ */
6
+ export { projectDbTools, projectGetTool, projectCreateTool, projectUpdateTool, projectListTool, getActiveProject, setActiveProject } from './project-db.js';
7
+ export { workitemDbTools, workitemQueryTool, workitemAddTool, workitemUpdateTool, workitemNextTool, workitemDeleteTool, workitemStatusCountsTool } from './workitem-db.js';
8
+ export { documentDbTools, projectDocumentAddTool, projectDocumentGetTool, projectDocumentListTool, projectDocumentDeleteTool } from './document-db.js';
9
+ export declare const allDbTools: (import("@compilr-dev/agents").Tool<{
10
+ project_id?: number;
11
+ name?: string;
12
+ path?: string;
13
+ }> | import("@compilr-dev/agents").Tool<{
14
+ name: string;
15
+ display_name: string;
16
+ description?: string;
17
+ path?: string;
18
+ type?: string;
19
+ workflow_mode?: string;
20
+ language?: string;
21
+ framework?: string;
22
+ package_manager?: string;
23
+ }> | import("@compilr-dev/agents").Tool<{
24
+ project_id?: number;
25
+ status?: string;
26
+ description?: string;
27
+ workflow_mode?: string;
28
+ lifecycle_state?: string;
29
+ current_item_id?: string;
30
+ last_context?: Record<string, unknown>;
31
+ }> | import("@compilr-dev/agents").Tool<{
32
+ project_id?: number;
33
+ status?: string;
34
+ type?: string;
35
+ priority?: string;
36
+ search?: string;
37
+ limit?: number;
38
+ offset?: number;
39
+ }> | import("@compilr-dev/agents").Tool<{
40
+ project_id?: number;
41
+ type: string;
42
+ title: string;
43
+ description?: string;
44
+ priority?: string;
45
+ estimated_effort?: string;
46
+ }> | import("@compilr-dev/agents").Tool<{
47
+ item_id: string;
48
+ project_id?: number;
49
+ status?: string;
50
+ priority?: string;
51
+ guided_step?: string;
52
+ title?: string;
53
+ description?: string;
54
+ commit_hash?: string;
55
+ }> | import("@compilr-dev/agents").Tool<{
56
+ item_id: string;
57
+ reason: string;
58
+ force?: boolean;
59
+ project_id?: number;
60
+ }> | import("@compilr-dev/agents").Tool<{
61
+ project_id?: number;
62
+ doc_type: string;
63
+ title: string;
64
+ content: string;
65
+ }>)[];
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Database Tools Index
3
+ *
4
+ * Exports all database-related tools for project, work item, and document management.
5
+ */
6
+ export { projectDbTools, projectGetTool, projectCreateTool, projectUpdateTool, projectListTool, getActiveProject, setActiveProject } from './project-db.js';
7
+ export { workitemDbTools, workitemQueryTool, workitemAddTool, workitemUpdateTool, workitemNextTool, workitemDeleteTool, workitemStatusCountsTool } from './workitem-db.js';
8
+ export { documentDbTools, projectDocumentAddTool, projectDocumentGetTool, projectDocumentListTool, projectDocumentDeleteTool } from './document-db.js';
9
+ /**
10
+ * All database tools combined
11
+ */
12
+ import { projectDbTools } from './project-db.js';
13
+ import { workitemDbTools } from './workitem-db.js';
14
+ import { documentDbTools } from './document-db.js';
15
+ export const allDbTools = [
16
+ ...projectDbTools,
17
+ ...workitemDbTools,
18
+ ...documentDbTools,
19
+ ];
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Document Database Tools
3
+ *
4
+ * Tools for managing project documents (PRD, architecture, design notes) in the database.
5
+ */
6
+ /**
7
+ * project_document_add - Add or update a project document
8
+ */
9
+ export declare const projectDocumentAddTool: import("@compilr-dev/agents").Tool<{
10
+ project_id?: number;
11
+ doc_type: string;
12
+ title: string;
13
+ content: string;
14
+ }>;
15
+ /**
16
+ * project_document_get - Get a project document
17
+ */
18
+ export declare const projectDocumentGetTool: import("@compilr-dev/agents").Tool<{
19
+ project_id?: number;
20
+ doc_type: string;
21
+ }>;
22
+ /**
23
+ * project_document_list - List all documents for a project
24
+ */
25
+ export declare const projectDocumentListTool: import("@compilr-dev/agents").Tool<{
26
+ project_id?: number;
27
+ }>;
28
+ /**
29
+ * project_document_delete - Delete a project document
30
+ */
31
+ export declare const projectDocumentDeleteTool: import("@compilr-dev/agents").Tool<{
32
+ project_id?: number;
33
+ doc_type: string;
34
+ }>;
35
+ /**
36
+ * All document tools
37
+ */
38
+ export declare const documentDbTools: import("@compilr-dev/agents").Tool<{
39
+ project_id?: number;
40
+ doc_type: string;
41
+ title: string;
42
+ content: string;
43
+ }>[];