@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,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
|
/**
|