@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,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Architecture Type Selection Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Shows options for what type of architecture documentation to create.
|
|
5
|
+
* Uses BaseOverlayV2 for TerminalUI integration.
|
|
6
|
+
*
|
|
7
|
+
* Has two "screens":
|
|
8
|
+
* - Select: Choose from predefined doc types
|
|
9
|
+
* - Custom input: Enter a custom topic
|
|
10
|
+
*/
|
|
11
|
+
import { BaseOverlayV2 } from '../../base/index.js';
|
|
12
|
+
import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
|
|
13
|
+
export type ArchDocType = 'adr' | 'diagram' | 'data-model' | 'api' | 'custom';
|
|
14
|
+
export interface ArchTypeChoiceV2 {
|
|
15
|
+
type: ArchDocType;
|
|
16
|
+
customTopic?: string;
|
|
17
|
+
}
|
|
18
|
+
type ScreenMode = 'select' | 'custom-input';
|
|
19
|
+
interface ArchTypeState {
|
|
20
|
+
mode: ScreenMode;
|
|
21
|
+
selectedIndex: number;
|
|
22
|
+
inputBuffer: string;
|
|
23
|
+
inputCursorPos: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class ArchTypeOverlayV2 extends BaseOverlayV2<ArchTypeState, ArchTypeChoiceV2 | null> {
|
|
26
|
+
readonly type: "inline";
|
|
27
|
+
readonly id = "arch-type-overlay-v2";
|
|
28
|
+
constructor();
|
|
29
|
+
protected renderContent(context: RenderContext): string[];
|
|
30
|
+
private renderSelectScreen;
|
|
31
|
+
private renderCustomInputScreen;
|
|
32
|
+
handleKey(key: KeyEvent): OverlayAction<ArchTypeChoiceV2 | null>;
|
|
33
|
+
private handleSelectKey;
|
|
34
|
+
private handleCustomInputKey;
|
|
35
|
+
getCloseSummary(result: ArchTypeChoiceV2 | null): string | null;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Architecture Type Selection Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Shows options for what type of architecture documentation to create.
|
|
5
|
+
* Uses BaseOverlayV2 for TerminalUI integration.
|
|
6
|
+
*
|
|
7
|
+
* Has two "screens":
|
|
8
|
+
* - Select: Choose from predefined doc types
|
|
9
|
+
* - Custom input: Enter a custom topic
|
|
10
|
+
*/
|
|
11
|
+
import { BaseOverlayV2, renderBorder } from '../../base/index.js';
|
|
12
|
+
const ARCH_OPTIONS = [
|
|
13
|
+
{ type: 'adr', label: 'Decision Record (ADR)', description: '"Why we chose X over Y"' },
|
|
14
|
+
{ type: 'diagram', label: 'System Diagram', description: 'Mermaid component diagram' },
|
|
15
|
+
{ type: 'data-model', label: 'Data Model', description: 'Entities and relationships' },
|
|
16
|
+
{ type: 'api', label: 'API Design', description: 'Endpoints and contracts' },
|
|
17
|
+
{ type: 'custom', label: 'Custom topic...', description: 'Specify your own' },
|
|
18
|
+
];
|
|
19
|
+
// =============================================================================
|
|
20
|
+
// Overlay Implementation
|
|
21
|
+
// =============================================================================
|
|
22
|
+
export class ArchTypeOverlayV2 extends BaseOverlayV2 {
|
|
23
|
+
type = 'inline';
|
|
24
|
+
id = 'arch-type-overlay-v2';
|
|
25
|
+
constructor() {
|
|
26
|
+
super({
|
|
27
|
+
mode: 'select',
|
|
28
|
+
selectedIndex: 0,
|
|
29
|
+
inputBuffer: '',
|
|
30
|
+
inputCursorPos: 0,
|
|
31
|
+
});
|
|
32
|
+
this.minHeight = 14; // Prevent jitter between screens
|
|
33
|
+
}
|
|
34
|
+
// ===========================================================================
|
|
35
|
+
// Rendering
|
|
36
|
+
// ===========================================================================
|
|
37
|
+
renderContent(context) {
|
|
38
|
+
if (this.state.mode === 'select') {
|
|
39
|
+
return this.renderSelectScreen(context);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return this.renderCustomInputScreen(context);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
renderSelectScreen(context) {
|
|
46
|
+
const s = context.styles;
|
|
47
|
+
const lines = [];
|
|
48
|
+
const border = renderBorder(context.width, s);
|
|
49
|
+
// Header
|
|
50
|
+
lines.push(border);
|
|
51
|
+
lines.push(' ' + s.primary('Architecture Documentation'));
|
|
52
|
+
lines.push('');
|
|
53
|
+
// Question
|
|
54
|
+
lines.push(' What would you like to document?');
|
|
55
|
+
lines.push('');
|
|
56
|
+
// Options
|
|
57
|
+
const maxLabelLen = Math.max(...ARCH_OPTIONS.map((o) => o.label.length));
|
|
58
|
+
for (let i = 0; i < ARCH_OPTIONS.length; i++) {
|
|
59
|
+
const opt = ARCH_OPTIONS[i];
|
|
60
|
+
const isCursor = this.state.selectedIndex === i;
|
|
61
|
+
const prefix = isCursor ? ' > ' : ' ';
|
|
62
|
+
const paddedLabel = opt.label.padEnd(maxLabelLen + 2);
|
|
63
|
+
if (isCursor) {
|
|
64
|
+
lines.push(s.primary(`${prefix}${paddedLabel}`) + s.muted(opt.description));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
lines.push(s.muted(`${prefix}${paddedLabel}${opt.description}`));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Footer
|
|
71
|
+
lines.push('');
|
|
72
|
+
lines.push(s.muted(' Up/Down Navigate | Enter Select | q/Esc Cancel'));
|
|
73
|
+
lines.push(border);
|
|
74
|
+
return lines;
|
|
75
|
+
}
|
|
76
|
+
renderCustomInputScreen(context) {
|
|
77
|
+
const s = context.styles;
|
|
78
|
+
const lines = [];
|
|
79
|
+
const border = renderBorder(context.width, s);
|
|
80
|
+
// Header
|
|
81
|
+
lines.push(border);
|
|
82
|
+
lines.push(' ' + s.primary('Custom Architecture Topic'));
|
|
83
|
+
lines.push('');
|
|
84
|
+
// Input field
|
|
85
|
+
lines.push(' Enter the topic you want to document:');
|
|
86
|
+
lines.push('');
|
|
87
|
+
// Render input with cursor
|
|
88
|
+
const displayValue = this.state.inputBuffer || s.muted('e.g., Security Architecture');
|
|
89
|
+
if (this.state.inputBuffer) {
|
|
90
|
+
// Show cursor position
|
|
91
|
+
const before = this.state.inputBuffer.slice(0, this.state.inputCursorPos);
|
|
92
|
+
const after = this.state.inputBuffer.slice(this.state.inputCursorPos);
|
|
93
|
+
lines.push(` > ${before}|${after}`);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
lines.push(` > |${displayValue}`);
|
|
97
|
+
}
|
|
98
|
+
lines.push('');
|
|
99
|
+
// Footer
|
|
100
|
+
lines.push(s.muted(' Enter Confirm | Esc Back | Left/Right Move cursor'));
|
|
101
|
+
lines.push(border);
|
|
102
|
+
return lines;
|
|
103
|
+
}
|
|
104
|
+
// ===========================================================================
|
|
105
|
+
// Key Handling
|
|
106
|
+
// ===========================================================================
|
|
107
|
+
handleKey(key) {
|
|
108
|
+
// Ctrl+C always cancels
|
|
109
|
+
if (this.isInterruptKey(key)) {
|
|
110
|
+
return this.close(null);
|
|
111
|
+
}
|
|
112
|
+
if (this.state.mode === 'select') {
|
|
113
|
+
return this.handleSelectKey(key);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
return this.handleCustomInputKey(key);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
handleSelectKey(key) {
|
|
120
|
+
// Close keys (q or Escape)
|
|
121
|
+
if (this.isCloseKey(key)) {
|
|
122
|
+
return this.close(null);
|
|
123
|
+
}
|
|
124
|
+
// Navigation up
|
|
125
|
+
if (this.isUpKey(key)) {
|
|
126
|
+
this.state.selectedIndex = Math.max(0, this.state.selectedIndex - 1);
|
|
127
|
+
return this.rerender();
|
|
128
|
+
}
|
|
129
|
+
// Navigation down
|
|
130
|
+
if (this.isDownKey(key)) {
|
|
131
|
+
this.state.selectedIndex = Math.min(ARCH_OPTIONS.length - 1, this.state.selectedIndex + 1);
|
|
132
|
+
return this.rerender();
|
|
133
|
+
}
|
|
134
|
+
// Enter - select option
|
|
135
|
+
if (this.isEnterKey(key)) {
|
|
136
|
+
const selected = ARCH_OPTIONS[this.state.selectedIndex];
|
|
137
|
+
if (selected.type === 'custom') {
|
|
138
|
+
// Switch to custom input screen
|
|
139
|
+
this.state.mode = 'custom-input';
|
|
140
|
+
this.state.inputBuffer = '';
|
|
141
|
+
this.state.inputCursorPos = 0;
|
|
142
|
+
return this.rerender();
|
|
143
|
+
}
|
|
144
|
+
return this.close({ type: selected.type });
|
|
145
|
+
}
|
|
146
|
+
return this.noAction();
|
|
147
|
+
}
|
|
148
|
+
handleCustomInputKey(key) {
|
|
149
|
+
// Escape goes back to select screen
|
|
150
|
+
if (key.name === 'escape') {
|
|
151
|
+
this.state.mode = 'select';
|
|
152
|
+
return this.rerender();
|
|
153
|
+
}
|
|
154
|
+
// Enter confirms input
|
|
155
|
+
if (this.isEnterKey(key)) {
|
|
156
|
+
const value = this.state.inputBuffer.trim();
|
|
157
|
+
if (value) {
|
|
158
|
+
return this.close({ type: 'custom', customTopic: value });
|
|
159
|
+
}
|
|
160
|
+
// Don't allow empty - just ignore enter
|
|
161
|
+
return this.noAction();
|
|
162
|
+
}
|
|
163
|
+
// Backspace
|
|
164
|
+
if (key.name === 'backspace') {
|
|
165
|
+
if (this.state.inputCursorPos > 0) {
|
|
166
|
+
const before = this.state.inputBuffer.slice(0, this.state.inputCursorPos - 1);
|
|
167
|
+
const after = this.state.inputBuffer.slice(this.state.inputCursorPos);
|
|
168
|
+
this.state.inputBuffer = before + after;
|
|
169
|
+
this.state.inputCursorPos--;
|
|
170
|
+
return this.rerender();
|
|
171
|
+
}
|
|
172
|
+
return this.noAction();
|
|
173
|
+
}
|
|
174
|
+
// Delete
|
|
175
|
+
if (key.name === 'delete') {
|
|
176
|
+
if (this.state.inputCursorPos < this.state.inputBuffer.length) {
|
|
177
|
+
const before = this.state.inputBuffer.slice(0, this.state.inputCursorPos);
|
|
178
|
+
const after = this.state.inputBuffer.slice(this.state.inputCursorPos + 1);
|
|
179
|
+
this.state.inputBuffer = before + after;
|
|
180
|
+
return this.rerender();
|
|
181
|
+
}
|
|
182
|
+
return this.noAction();
|
|
183
|
+
}
|
|
184
|
+
// Left arrow - move cursor
|
|
185
|
+
if (key.name === 'left') {
|
|
186
|
+
if (this.state.inputCursorPos > 0) {
|
|
187
|
+
this.state.inputCursorPos--;
|
|
188
|
+
return this.rerender();
|
|
189
|
+
}
|
|
190
|
+
return this.noAction();
|
|
191
|
+
}
|
|
192
|
+
// Right arrow - move cursor
|
|
193
|
+
if (key.name === 'right') {
|
|
194
|
+
if (this.state.inputCursorPos < this.state.inputBuffer.length) {
|
|
195
|
+
this.state.inputCursorPos++;
|
|
196
|
+
return this.rerender();
|
|
197
|
+
}
|
|
198
|
+
return this.noAction();
|
|
199
|
+
}
|
|
200
|
+
// Home - move to start
|
|
201
|
+
if (key.name === 'home') {
|
|
202
|
+
this.state.inputCursorPos = 0;
|
|
203
|
+
return this.rerender();
|
|
204
|
+
}
|
|
205
|
+
// End - move to end
|
|
206
|
+
if (key.name === 'end') {
|
|
207
|
+
this.state.inputCursorPos = this.state.inputBuffer.length;
|
|
208
|
+
return this.rerender();
|
|
209
|
+
}
|
|
210
|
+
// Regular character input
|
|
211
|
+
if (key.char && key.char.length === 1 && key.char >= ' ' && key.char <= '~') {
|
|
212
|
+
const before = this.state.inputBuffer.slice(0, this.state.inputCursorPos);
|
|
213
|
+
const after = this.state.inputBuffer.slice(this.state.inputCursorPos);
|
|
214
|
+
this.state.inputBuffer = before + key.char + after;
|
|
215
|
+
this.state.inputCursorPos++;
|
|
216
|
+
return this.rerender();
|
|
217
|
+
}
|
|
218
|
+
return this.noAction();
|
|
219
|
+
}
|
|
220
|
+
// ===========================================================================
|
|
221
|
+
// Close Summary
|
|
222
|
+
// ===========================================================================
|
|
223
|
+
getCloseSummary(result) {
|
|
224
|
+
const s = this.getStyles();
|
|
225
|
+
if (!result) {
|
|
226
|
+
return s.muted('Arch: ') + s.warning('Cancelled');
|
|
227
|
+
}
|
|
228
|
+
if (result.customTopic) {
|
|
229
|
+
return s.muted('Arch: ') + s.primary(`Custom: ${result.customTopic}`);
|
|
230
|
+
}
|
|
231
|
+
const labels = {
|
|
232
|
+
'adr': 'ADR',
|
|
233
|
+
'diagram': 'Diagram',
|
|
234
|
+
'data-model': 'Data Model',
|
|
235
|
+
'api': 'API Design',
|
|
236
|
+
'custom': 'Custom',
|
|
237
|
+
};
|
|
238
|
+
return s.muted('Arch: ') + s.primary(labels[result.type]);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ask User Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Modal overlay for presenting multi-question forms to the user.
|
|
5
|
+
* Uses BaseOverlayV2 for TerminalUI integration.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Multiple questions with navigation (Left/Right or Tab)
|
|
9
|
+
* - Options to select from with arrow keys
|
|
10
|
+
* - Custom text input option
|
|
11
|
+
* - Multi-select support
|
|
12
|
+
* - Progress indicator showing answered questions
|
|
13
|
+
* - Submit tab at the end
|
|
14
|
+
*/
|
|
15
|
+
import { BaseOverlayV2 } from '../../base/index.js';
|
|
16
|
+
import type { RenderContext, OverlayAction, KeyEvent } from '../types.js';
|
|
17
|
+
import type { AskUserQuestion } from '../../../shared-handlers.js';
|
|
18
|
+
interface AskUserState {
|
|
19
|
+
/** Current question index */
|
|
20
|
+
currentQuestion: number;
|
|
21
|
+
/** Selected option index for current question */
|
|
22
|
+
selectedIndex: number;
|
|
23
|
+
/** Custom input buffer for free-text */
|
|
24
|
+
inputBuffer: string;
|
|
25
|
+
/** Whether currently typing custom input */
|
|
26
|
+
isTypingCustom: boolean;
|
|
27
|
+
/** Collected answers */
|
|
28
|
+
answers: Record<string, string | string[]>;
|
|
29
|
+
/** Multi-select selections for current question */
|
|
30
|
+
multiSelections: Set<number>;
|
|
31
|
+
/** Warning message to display (e.g., incomplete questions) */
|
|
32
|
+
warningMessage: string;
|
|
33
|
+
/** Whether currently on the Submit tab */
|
|
34
|
+
isOnSubmitTab: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface AskUserOptionsV2 {
|
|
37
|
+
questions: AskUserQuestion[];
|
|
38
|
+
context?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface AskUserResultV2 {
|
|
41
|
+
answers: Record<string, string | string[]>;
|
|
42
|
+
skipped: string[];
|
|
43
|
+
}
|
|
44
|
+
export declare class AskUserOverlayV2 extends BaseOverlayV2<AskUserState, AskUserResultV2> {
|
|
45
|
+
readonly type: "inline";
|
|
46
|
+
readonly id = "ask-user-overlay-v2";
|
|
47
|
+
private readonly questions;
|
|
48
|
+
private readonly context?;
|
|
49
|
+
constructor(options: AskUserOptionsV2);
|
|
50
|
+
protected renderContent(context: RenderContext): string[];
|
|
51
|
+
handleKey(key: KeyEvent): OverlayAction<AskUserResultV2>;
|
|
52
|
+
/**
|
|
53
|
+
* Summary shown after overlay closes.
|
|
54
|
+
*/
|
|
55
|
+
getCloseSummary(result: AskUserResultV2): string | null;
|
|
56
|
+
private renderTabBar;
|
|
57
|
+
private renderQuestion;
|
|
58
|
+
private renderSubmitTab;
|
|
59
|
+
private renderInstructions;
|
|
60
|
+
private handleSubmitTabKey;
|
|
61
|
+
private handleTypingKey;
|
|
62
|
+
private handleNavigationKey;
|
|
63
|
+
private getResult;
|
|
64
|
+
private getOptionCount;
|
|
65
|
+
private getAnswerInfo;
|
|
66
|
+
private restoreFromAnswer;
|
|
67
|
+
private nextQuestion;
|
|
68
|
+
private prevQuestion;
|
|
69
|
+
private tryComplete;
|
|
70
|
+
private submitAnswer;
|
|
71
|
+
}
|
|
72
|
+
export {};
|