@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,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ask User Simple Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Simplified modal overlay for single-question input.
|
|
5
|
+
* Uses BaseOverlayV2 for TerminalUI integration.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Single question (no tabs, no navigation)
|
|
9
|
+
* - Options to select from with arrow keys
|
|
10
|
+
* - Custom text input option
|
|
11
|
+
* - Simple, clean UI
|
|
12
|
+
*/
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import { BaseOverlayV2, renderBorder } from '../../base/index.js';
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// Overlay Implementation
|
|
17
|
+
// =============================================================================
|
|
18
|
+
export class AskUserSimpleOverlayV2 extends BaseOverlayV2 {
|
|
19
|
+
type = 'inline';
|
|
20
|
+
id = 'ask-user-simple-overlay-v2';
|
|
21
|
+
question;
|
|
22
|
+
choices;
|
|
23
|
+
allowCustom;
|
|
24
|
+
constructor(options) {
|
|
25
|
+
// Determine initial state
|
|
26
|
+
const choices = options.options ?? [];
|
|
27
|
+
const allowCustom = options.allowCustom ?? true;
|
|
28
|
+
const autoTyping = choices.length === 0 && allowCustom;
|
|
29
|
+
super({
|
|
30
|
+
selectedIndex: 0,
|
|
31
|
+
inputBuffer: '',
|
|
32
|
+
isTypingCustom: autoTyping,
|
|
33
|
+
});
|
|
34
|
+
this.question = options.question;
|
|
35
|
+
this.choices = choices;
|
|
36
|
+
this.allowCustom = allowCustom;
|
|
37
|
+
this.minHeight = 10; // Prevent jitter
|
|
38
|
+
}
|
|
39
|
+
renderContent(context) {
|
|
40
|
+
const s = context.styles;
|
|
41
|
+
const lines = [];
|
|
42
|
+
const border = renderBorder(context.width, s);
|
|
43
|
+
// Header
|
|
44
|
+
lines.push(border);
|
|
45
|
+
lines.push(' ' + s.primaryBold('Question'));
|
|
46
|
+
lines.push('');
|
|
47
|
+
// Question
|
|
48
|
+
lines.push(chalk.bold(` ${this.question}`));
|
|
49
|
+
lines.push('');
|
|
50
|
+
// Options
|
|
51
|
+
const customIndex = this.choices.length;
|
|
52
|
+
for (let i = 0; i < this.choices.length; i++) {
|
|
53
|
+
const isCursor = this.state.selectedIndex === i && !this.state.isTypingCustom;
|
|
54
|
+
const prefix = isCursor ? ' > ' : ' ';
|
|
55
|
+
const num = `${String(i + 1)}. `;
|
|
56
|
+
if (isCursor) {
|
|
57
|
+
lines.push(s.primary(prefix + num + this.choices[i]));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
lines.push(s.muted(prefix + num + this.choices[i]));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Custom input option (if allowed)
|
|
64
|
+
if (this.allowCustom) {
|
|
65
|
+
const isCursor = this.state.selectedIndex === customIndex && !this.state.isTypingCustom;
|
|
66
|
+
const prefix = isCursor ? ' > ' : ' ';
|
|
67
|
+
const num = `${String(this.choices.length + 1)}. `;
|
|
68
|
+
if (this.state.isTypingCustom) {
|
|
69
|
+
// Show input field with cursor
|
|
70
|
+
lines.push(s.primary(prefix + num + 'Custom: ') + s.primaryBold(this.state.inputBuffer + '_'));
|
|
71
|
+
}
|
|
72
|
+
else if (isCursor) {
|
|
73
|
+
lines.push(s.primary(prefix + num + 'Type something else...'));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
lines.push(s.muted(prefix + num + 'Type something else...'));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Footer
|
|
80
|
+
lines.push('');
|
|
81
|
+
if (this.state.isTypingCustom) {
|
|
82
|
+
lines.push(s.muted(' Enter Submit | Esc Cancel'));
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
lines.push(s.muted(' Up/Down Navigate | Enter Select | s Skip | Esc Cancel'));
|
|
86
|
+
}
|
|
87
|
+
// Bottom border
|
|
88
|
+
lines.push(border);
|
|
89
|
+
return lines;
|
|
90
|
+
}
|
|
91
|
+
handleKey(key) {
|
|
92
|
+
const customIndex = this.choices.length;
|
|
93
|
+
const optionCount = this.allowCustom ? this.choices.length + 1 : this.choices.length;
|
|
94
|
+
// Ctrl+C always cancels
|
|
95
|
+
if (key.ctrl && key.name === 'c') {
|
|
96
|
+
return this.close({ answer: '', skipped: true });
|
|
97
|
+
}
|
|
98
|
+
// If typing custom input
|
|
99
|
+
if (this.state.isTypingCustom) {
|
|
100
|
+
if (key.name === 'escape') {
|
|
101
|
+
// Cancel custom input, return to navigation
|
|
102
|
+
this.state.isTypingCustom = false;
|
|
103
|
+
this.state.inputBuffer = '';
|
|
104
|
+
return this.rerender();
|
|
105
|
+
}
|
|
106
|
+
if (key.name === 'up' && this.choices.length > 0) {
|
|
107
|
+
// Exit typing mode and navigate up (only if there are other options)
|
|
108
|
+
this.state.isTypingCustom = false;
|
|
109
|
+
this.state.inputBuffer = '';
|
|
110
|
+
this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
|
|
111
|
+
return this.rerender();
|
|
112
|
+
}
|
|
113
|
+
if (key.name === 'down') {
|
|
114
|
+
// Custom is last option, down arrow does nothing
|
|
115
|
+
return this.noAction();
|
|
116
|
+
}
|
|
117
|
+
if (key.name === 'return') {
|
|
118
|
+
// Submit custom input
|
|
119
|
+
const custom = this.state.inputBuffer.trim();
|
|
120
|
+
if (custom) {
|
|
121
|
+
return this.close({ answer: custom, skipped: false });
|
|
122
|
+
}
|
|
123
|
+
// Empty - stay in custom mode
|
|
124
|
+
return this.noAction();
|
|
125
|
+
}
|
|
126
|
+
if (key.name === 'backspace') {
|
|
127
|
+
this.state.inputBuffer = this.state.inputBuffer.slice(0, -1);
|
|
128
|
+
return this.rerender();
|
|
129
|
+
}
|
|
130
|
+
// Printable character
|
|
131
|
+
if (key.char && key.char.length === 1 && !key.ctrl && !key.meta) {
|
|
132
|
+
this.state.inputBuffer += key.char;
|
|
133
|
+
return this.rerender();
|
|
134
|
+
}
|
|
135
|
+
return this.noAction();
|
|
136
|
+
}
|
|
137
|
+
// Navigation mode
|
|
138
|
+
if (key.name === 'escape') {
|
|
139
|
+
return this.close({ answer: '', skipped: true });
|
|
140
|
+
}
|
|
141
|
+
// Skip question (s key)
|
|
142
|
+
if (key.char === 's' || key.char === 'S') {
|
|
143
|
+
return this.close({ answer: '', skipped: true });
|
|
144
|
+
}
|
|
145
|
+
if (key.name === 'up') {
|
|
146
|
+
this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
|
|
147
|
+
// Auto-enable typing when navigating to custom option
|
|
148
|
+
if (this.allowCustom && this.state.selectedIndex === customIndex) {
|
|
149
|
+
this.state.isTypingCustom = true;
|
|
150
|
+
}
|
|
151
|
+
return this.rerender();
|
|
152
|
+
}
|
|
153
|
+
if (key.name === 'down') {
|
|
154
|
+
this.state.selectedIndex = Math.min(optionCount - 1, this.state.selectedIndex + 1);
|
|
155
|
+
// Auto-enable typing when navigating to custom option
|
|
156
|
+
if (this.allowCustom && this.state.selectedIndex === customIndex) {
|
|
157
|
+
this.state.isTypingCustom = true;
|
|
158
|
+
}
|
|
159
|
+
return this.rerender();
|
|
160
|
+
}
|
|
161
|
+
if (key.name === 'return') {
|
|
162
|
+
if (this.state.selectedIndex < this.choices.length) {
|
|
163
|
+
// Selected a predefined option
|
|
164
|
+
return this.close({ answer: this.choices[this.state.selectedIndex], skipped: false });
|
|
165
|
+
}
|
|
166
|
+
else if (this.allowCustom && this.state.selectedIndex === customIndex) {
|
|
167
|
+
// Enter custom input mode
|
|
168
|
+
this.state.isTypingCustom = true;
|
|
169
|
+
return this.rerender();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Number keys 1-9
|
|
173
|
+
if (key.char && key.char >= '1' && key.char <= '9') {
|
|
174
|
+
const numIndex = parseInt(key.char, 10) - 1; // 0-indexed
|
|
175
|
+
if (numIndex < optionCount) {
|
|
176
|
+
if (numIndex < this.choices.length) {
|
|
177
|
+
// Select predefined option directly
|
|
178
|
+
return this.close({ answer: this.choices[numIndex], skipped: false });
|
|
179
|
+
}
|
|
180
|
+
else if (this.allowCustom && numIndex === customIndex) {
|
|
181
|
+
// Enter custom mode
|
|
182
|
+
this.state.selectedIndex = customIndex;
|
|
183
|
+
this.state.isTypingCustom = true;
|
|
184
|
+
return this.rerender();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return this.noAction();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Summary shown after overlay closes.
|
|
192
|
+
*/
|
|
193
|
+
getCloseSummary(result) {
|
|
194
|
+
const s = this.getStyles();
|
|
195
|
+
if (result.skipped) {
|
|
196
|
+
return s.muted('Question: ') + s.warning('Skipped');
|
|
197
|
+
}
|
|
198
|
+
// Truncate long answers
|
|
199
|
+
const displayAnswer = result.answer.length > 50
|
|
200
|
+
? result.answer.substring(0, 47) + '...'
|
|
201
|
+
: result.answer;
|
|
202
|
+
return s.muted('Question: ') + s.success(displayAnswer);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backlog Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Modal overlay for viewing and managing the project backlog.
|
|
5
|
+
* Uses TabbedListOverlayV2 for consistent list/tab/search behavior.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Search by title/description
|
|
9
|
+
* - Filter tabs by type (All/Feature/Bug/Tech-Debt/Chore)
|
|
10
|
+
* - Pagination for large backlogs
|
|
11
|
+
* - Quick status toggle with Space
|
|
12
|
+
* - Add new items with wizard
|
|
13
|
+
* - Database-backed with project isolation
|
|
14
|
+
*/
|
|
15
|
+
import { TabbedListOverlayV2, BaseScreen } from '../../base/index.js';
|
|
16
|
+
import type { OverlayAction, KeyEvent } from '../types.js';
|
|
17
|
+
import type { WorkItemType, WorkItemPriority } from '../../../db/schema.js';
|
|
18
|
+
export type BacklogType = WorkItemType;
|
|
19
|
+
export type BacklogPriority = WorkItemPriority;
|
|
20
|
+
export type BacklogStatus = '📋' | '🚧' | '✅';
|
|
21
|
+
export interface BacklogItem {
|
|
22
|
+
id: string;
|
|
23
|
+
dbId: number;
|
|
24
|
+
type: BacklogType;
|
|
25
|
+
status: BacklogStatus;
|
|
26
|
+
priority: BacklogPriority;
|
|
27
|
+
title: string;
|
|
28
|
+
description: string;
|
|
29
|
+
commit?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface BacklogOverlayV2Result {
|
|
32
|
+
modified: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare class BacklogOverlayV2 extends TabbedListOverlayV2<BacklogItem, BacklogOverlayV2Result> {
|
|
35
|
+
readonly type: "inline";
|
|
36
|
+
readonly id = "backlog-overlay-v2";
|
|
37
|
+
private readonly editState;
|
|
38
|
+
/**
|
|
39
|
+
* @param projectId - Optional project ID to view backlog for.
|
|
40
|
+
* If not provided, uses the active project.
|
|
41
|
+
* Pass this when opening from workflow overlay for a specific project.
|
|
42
|
+
*/
|
|
43
|
+
constructor(projectId?: number);
|
|
44
|
+
protected createDetailScreen(item: BacklogItem): BaseScreen | null;
|
|
45
|
+
/**
|
|
46
|
+
* Override handleKey to add custom behavior (Space toggle, 'a' add).
|
|
47
|
+
*/
|
|
48
|
+
handleKey(key: KeyEvent): OverlayAction<BacklogOverlayV2Result>;
|
|
49
|
+
}
|