@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.
- package/README.md +30 -12
- package/dist/agent.d.ts +74 -1
- package/dist/agent.js +259 -76
- package/dist/anchors/index.d.ts +9 -0
- package/dist/anchors/index.js +9 -0
- package/dist/anchors/project-anchors.d.ts +79 -0
- package/dist/anchors/project-anchors.js +202 -0
- package/dist/commands/handler-types.d.ts +68 -0
- package/dist/commands/handler-types.js +8 -0
- package/dist/commands/handlers/agent-commands.d.ts +13 -0
- package/dist/commands/handlers/agent-commands.js +305 -0
- package/dist/commands/handlers/design-commands.d.ts +15 -0
- package/dist/commands/handlers/design-commands.js +334 -0
- package/dist/commands/handlers/index.d.ts +20 -0
- package/dist/commands/handlers/index.js +43 -0
- package/dist/commands/handlers/overlay-commands.d.ts +21 -0
- package/dist/commands/handlers/overlay-commands.js +287 -0
- package/dist/commands/handlers/project-commands.d.ts +11 -0
- package/dist/commands/handlers/project-commands.js +167 -0
- package/dist/commands/handlers/simple-commands.d.ts +19 -0
- package/dist/commands/handlers/simple-commands.js +144 -0
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands/registry.d.ts +50 -0
- package/dist/commands/registry.js +75 -0
- package/dist/commands-v2/handlers/context.d.ts +13 -0
- package/dist/commands-v2/handlers/context.js +348 -0
- package/dist/commands-v2/handlers/core.d.ts +13 -0
- package/dist/commands-v2/handlers/core.js +165 -0
- package/dist/commands-v2/handlers/debug.d.ts +11 -0
- package/dist/commands-v2/handlers/debug.js +159 -0
- package/dist/commands-v2/handlers/index.d.ts +12 -0
- package/dist/commands-v2/handlers/index.js +24 -0
- package/dist/commands-v2/handlers/project.d.ts +22 -0
- package/dist/commands-v2/handlers/project.js +814 -0
- package/dist/commands-v2/handlers/settings.d.ts +15 -0
- package/dist/commands-v2/handlers/settings.js +235 -0
- package/dist/commands-v2/index.d.ts +13 -0
- package/dist/commands-v2/index.js +15 -0
- package/dist/commands-v2/registry.d.ts +37 -0
- package/dist/commands-v2/registry.js +80 -0
- package/dist/commands-v2/types.d.ts +75 -0
- package/dist/commands-v2/types.js +7 -0
- package/dist/commands.js +110 -7
- package/dist/index.js +288 -29
- package/dist/input-handlers/index.d.ts +7 -0
- package/dist/input-handlers/index.js +7 -0
- package/dist/input-handlers/memory-handler.d.ts +26 -0
- package/dist/input-handlers/memory-handler.js +68 -0
- package/dist/repl-helpers.d.ts +63 -0
- package/dist/repl-helpers.js +318 -0
- package/dist/repl-v2.d.ts +155 -0
- package/dist/repl-v2.js +774 -0
- package/dist/repl.d.ts +32 -4
- package/dist/repl.js +250 -977
- package/dist/settings/index.d.ts +23 -0
- package/dist/settings/index.js +48 -0
- package/dist/settings/paths.d.ts +110 -0
- package/dist/settings/paths.js +264 -0
- package/dist/templates/compilr-md.js +7 -4
- package/dist/templates/index.js +3 -4
- package/dist/themes/colors.js +3 -1
- package/dist/themes/registry.d.ts +5 -36
- package/dist/themes/registry.js +11 -95
- package/dist/themes/types.d.ts +3 -38
- package/dist/themes/types.js +2 -2
- package/dist/tools/anchor-tools.d.ts +31 -0
- package/dist/tools/anchor-tools.js +255 -0
- package/dist/tools/backlog-wrappers.d.ts +54 -0
- package/dist/tools/backlog-wrappers.js +338 -0
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +65 -0
- package/dist/tools/db-tools.js +19 -0
- package/dist/tools/document-db.d.ts +43 -0
- package/dist/tools/document-db.js +220 -0
- package/dist/tools/project-db.d.ts +102 -0
- package/dist/tools/project-db.js +370 -0
- package/dist/tools/workitem-db.d.ts +103 -0
- package/dist/tools/workitem-db.js +549 -0
- package/dist/tools.js +13 -3
- package/dist/ui/agents-overlay-v2.d.ts +43 -0
- package/dist/ui/agents-overlay-v2.js +809 -0
- package/dist/ui/agents-overlay.d.ts +5 -5
- package/dist/ui/agents-overlay.js +782 -420
- package/dist/ui/anchors-overlay.d.ts +12 -0
- package/dist/ui/anchors-overlay.js +775 -0
- package/dist/ui/arch-type-overlay.d.ts +1 -6
- package/dist/ui/arch-type-overlay.js +175 -203
- package/dist/ui/ask-user-overlay-v2.d.ts +26 -0
- package/dist/ui/ask-user-overlay-v2.js +555 -0
- package/dist/ui/ask-user-overlay.d.ts +2 -2
- package/dist/ui/ask-user-overlay.js +443 -535
- package/dist/ui/ask-user-simple-overlay-v2.d.ts +25 -0
- package/dist/ui/ask-user-simple-overlay-v2.js +215 -0
- package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
- package/dist/ui/ask-user-simple-overlay.js +182 -209
- package/dist/ui/backlog-overlay.d.ts +16 -1
- package/dist/ui/backlog-overlay.js +525 -659
- package/dist/ui/base/index.d.ts +26 -0
- package/dist/ui/base/index.js +33 -0
- package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
- package/dist/ui/base/inline-overlay-utils.js +320 -0
- package/dist/ui/base/inline-overlay.d.ts +159 -0
- package/dist/ui/base/inline-overlay.js +257 -0
- package/dist/ui/base/key-utils.d.ts +15 -0
- package/dist/ui/base/key-utils.js +30 -0
- package/dist/ui/base/overlay-base-v2.d.ts +193 -0
- package/dist/ui/base/overlay-base-v2.js +246 -0
- package/dist/ui/base/overlay-base.d.ts +156 -0
- package/dist/ui/base/overlay-base.js +238 -0
- package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
- package/dist/ui/base/overlay-lifecycle.js +159 -0
- package/dist/ui/base/overlay-types.d.ts +185 -0
- package/dist/ui/base/overlay-types.js +7 -0
- package/dist/ui/base/render-utils.d.ts +8 -0
- package/dist/ui/base/render-utils.js +11 -0
- package/dist/ui/base/screen-stack.d.ts +148 -0
- package/dist/ui/base/screen-stack.js +184 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +103 -0
- package/dist/ui/base/tabbed-list-overlay-v2.js +317 -0
- package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
- package/dist/ui/base/tabbed-list-overlay.js +369 -0
- package/dist/ui/commands-overlay-v2.d.ts +33 -0
- package/dist/ui/commands-overlay-v2.js +441 -0
- package/dist/ui/commands-overlay.d.ts +7 -2
- package/dist/ui/commands-overlay.js +384 -355
- package/dist/ui/config-overlay.d.ts +5 -4
- package/dist/ui/config-overlay.js +243 -513
- package/dist/ui/conversation.d.ts +75 -4
- package/dist/ui/conversation.js +374 -161
- package/dist/ui/docs-overlay.d.ts +17 -0
- package/dist/ui/docs-overlay.js +303 -0
- package/dist/ui/ephemeral.d.ts +1 -1
- package/dist/ui/ephemeral.js +1 -1
- package/dist/ui/features/index.d.ts +34 -0
- package/dist/ui/features/index.js +34 -0
- package/dist/ui/features/input-feature.d.ts +85 -0
- package/dist/ui/features/input-feature.js +238 -0
- package/dist/ui/features/list-feature.d.ts +155 -0
- package/dist/ui/features/list-feature.js +244 -0
- package/dist/ui/features/pagination-feature.d.ts +154 -0
- package/dist/ui/features/pagination-feature.js +238 -0
- package/dist/ui/features/search-feature.d.ts +148 -0
- package/dist/ui/features/search-feature.js +185 -0
- package/dist/ui/features/tab-feature.d.ts +194 -0
- package/dist/ui/features/tab-feature.js +307 -0
- package/dist/ui/footer-v2.d.ts +222 -0
- package/dist/ui/footer-v2.js +1349 -0
- package/dist/ui/footer.d.ts +107 -0
- package/dist/ui/footer.js +359 -67
- package/dist/ui/guardrail-overlay.d.ts +29 -0
- package/dist/ui/guardrail-overlay.js +145 -0
- package/dist/ui/help-overlay-v2.d.ts +34 -0
- package/dist/ui/help-overlay-v2.js +309 -0
- package/dist/ui/help-overlay.d.ts +16 -0
- package/dist/ui/help-overlay.js +316 -0
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -3
- package/dist/ui/init-overlay-v2.d.ts +34 -0
- package/dist/ui/init-overlay-v2.js +600 -0
- package/dist/ui/init-overlay.d.ts +12 -2
- package/dist/ui/init-overlay.js +349 -270
- package/dist/ui/input-prompt-v2.d.ts +1 -0
- package/dist/ui/input-prompt-v2.js +14 -6
- package/dist/ui/input-prompt.d.ts +116 -33
- package/dist/ui/input-prompt.js +536 -337
- package/dist/ui/iteration-limit-overlay-v2.d.ts +21 -0
- package/dist/ui/iteration-limit-overlay-v2.js +114 -0
- package/dist/ui/iteration-limit-overlay.d.ts +2 -2
- package/dist/ui/iteration-limit-overlay.js +92 -128
- package/dist/ui/keys-overlay-v2.d.ts +41 -0
- package/dist/ui/keys-overlay-v2.js +248 -0
- package/dist/ui/keys-overlay.d.ts +1 -0
- package/dist/ui/keys-overlay.js +203 -141
- package/dist/ui/line-utils.d.ts +88 -0
- package/dist/ui/line-utils.js +150 -0
- package/dist/ui/live-region.d.ts +161 -0
- package/dist/ui/live-region.js +387 -0
- package/dist/ui/mascot/expressions.d.ts +32 -0
- package/dist/ui/mascot/expressions.js +213 -0
- package/dist/ui/mascot/index.d.ts +8 -0
- package/dist/ui/mascot/index.js +8 -0
- package/dist/ui/mascot/renderer.d.ts +19 -0
- package/dist/ui/mascot/renderer.js +97 -0
- package/dist/ui/mascot-overlay-v2.d.ts +41 -0
- package/dist/ui/mascot-overlay-v2.js +138 -0
- package/dist/ui/mascot-overlay.d.ts +21 -0
- package/dist/ui/mascot-overlay.js +146 -0
- package/dist/ui/model-overlay-v2.d.ts +49 -0
- package/dist/ui/model-overlay-v2.js +118 -0
- package/dist/ui/model-overlay.d.ts +27 -0
- package/dist/ui/model-overlay.js +221 -0
- package/dist/ui/model-warning-overlay.js +3 -5
- package/dist/ui/new-overlay.d.ts +34 -0
- package/dist/ui/new-overlay.js +604 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +825 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +783 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +584 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +642 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +441 -0
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +100 -0
- package/dist/ui/overlay/impl/config-overlay-v2.js +654 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +55 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +359 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +114 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +77 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1071 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +34 -0
- package/dist/ui/overlay/impl/help-overlay-v2.js +309 -0
- package/dist/ui/overlay/impl/init-overlay-v2.d.ts +77 -0
- package/dist/ui/overlay/impl/init-overlay-v2.js +593 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/model-overlay-v2.js +118 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +77 -0
- package/dist/ui/overlay/impl/new-overlay-v2.js +593 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +499 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +218 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +1035 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +637 -0
- package/dist/ui/overlay/index.d.ts +33 -0
- package/dist/ui/overlay/index.js +35 -0
- package/dist/ui/overlay/key-utils.d.ts +6 -0
- package/dist/ui/overlay/key-utils.js +6 -0
- package/dist/ui/overlay/overlay-types.d.ts +128 -0
- package/dist/ui/overlay/overlay-types.js +22 -0
- package/dist/ui/overlay/types.d.ts +135 -0
- package/dist/ui/overlay/types.js +22 -0
- package/dist/ui/overlays/help-overlay-v2.d.ts +28 -0
- package/dist/ui/overlays/help-overlay-v2.js +198 -0
- package/dist/ui/overlays/index.d.ts +11 -0
- package/dist/ui/overlays/index.js +11 -0
- package/dist/ui/overlays.d.ts +0 -4
- package/dist/ui/overlays.js +0 -444
- package/dist/ui/permission-overlay-v2.d.ts +36 -0
- package/dist/ui/permission-overlay-v2.js +380 -0
- package/dist/ui/permission-overlay.d.ts +1 -1
- package/dist/ui/permission-overlay.js +186 -298
- package/dist/ui/projects-overlay.d.ts +19 -0
- package/dist/ui/projects-overlay.js +484 -0
- package/dist/ui/providers/types.d.ts +178 -0
- package/dist/ui/providers/types.js +9 -0
- package/dist/ui/render-modes.d.ts +36 -0
- package/dist/ui/render-modes.js +44 -0
- package/dist/ui/startup-menu.d.ts +36 -0
- package/dist/ui/startup-menu.js +236 -0
- package/dist/ui/subagent-renderer.d.ts +117 -0
- package/dist/ui/subagent-renderer.js +334 -0
- package/dist/ui/terminal-codes.d.ts +94 -0
- package/dist/ui/terminal-codes.js +124 -0
- package/dist/ui/terminal-renderer.d.ts +221 -0
- package/dist/ui/terminal-renderer.js +751 -0
- package/dist/ui/terminal-ui.d.ts +463 -0
- package/dist/ui/terminal-ui.js +2296 -0
- package/dist/ui/terminal.d.ts +20 -0
- package/dist/ui/terminal.js +72 -0
- package/dist/ui/theme-overlay-v2.d.ts +42 -0
- package/dist/ui/theme-overlay-v2.js +135 -0
- package/dist/ui/theme-overlay.d.ts +24 -0
- package/dist/ui/theme-overlay.js +127 -0
- package/dist/ui/todo-zone.js +53 -25
- package/dist/ui/tool-formatters.d.ts +16 -0
- package/dist/ui/tool-formatters.js +516 -0
- package/dist/ui/tools-overlay-v2.d.ts +47 -0
- package/dist/ui/tools-overlay-v2.js +218 -0
- package/dist/ui/tools-overlay.d.ts +10 -2
- package/dist/ui/tools-overlay.js +172 -220
- package/dist/ui/tutorial-overlay-v2.d.ts +31 -0
- package/dist/ui/tutorial-overlay-v2.js +1035 -0
- package/dist/ui/tutorial-overlay.d.ts +1 -0
- package/dist/ui/tutorial-overlay.js +400 -302
- package/dist/ui/workflow-overlay.d.ts +22 -0
- package/dist/ui/workflow-overlay.js +636 -0
- package/dist/utils/debug-log.d.ts +28 -0
- package/dist/utils/debug-log.js +57 -0
- package/dist/utils/model-tiers.js +1 -1
- package/dist/utils/path-safety.d.ts +56 -0
- package/dist/utils/path-safety.js +239 -0
- package/dist/workflow/guided-mode-injector.d.ts +42 -0
- package/dist/workflow/guided-mode-injector.js +191 -0
- package/dist/workflow/index.d.ts +8 -0
- package/dist/workflow/index.js +8 -0
- package/dist/workflow/step-criteria.d.ts +62 -0
- package/dist/workflow/step-criteria.js +150 -0
- package/dist/workflow/step-tracker.d.ts +92 -0
- package/dist/workflow/step-tracker.js +141 -0
- 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
|
+
];
|
package/dist/tools/backlog.js
CHANGED
|
@@ -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 /
|
|
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
|
+
}>[];
|