@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
package/dist/ui/terminal.d.ts
CHANGED
|
@@ -65,6 +65,17 @@ export declare function clearLinesAbove(count: number): void;
|
|
|
65
65
|
* Clear entire screen
|
|
66
66
|
*/
|
|
67
67
|
export declare function clearScreen(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Enter alternate screen buffer.
|
|
70
|
+
* Content shown here doesn't go to main scrollback.
|
|
71
|
+
* Used for modal UIs like menus, editors.
|
|
72
|
+
*/
|
|
73
|
+
export declare function enterAlternateScreen(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Leave alternate screen buffer.
|
|
76
|
+
* Returns to main screen (previous content restored).
|
|
77
|
+
*/
|
|
78
|
+
export declare function leaveAlternateScreen(): void;
|
|
68
79
|
/**
|
|
69
80
|
* Calculate how many physical (visual) lines a string occupies
|
|
70
81
|
* given terminal width and starting column.
|
|
@@ -94,6 +105,15 @@ export declare function calculateCursorPosition(text: string, cursorPos: number,
|
|
|
94
105
|
* @returns String of repeated characters
|
|
95
106
|
*/
|
|
96
107
|
export declare function horizontalLine(char?: string): string;
|
|
108
|
+
/**
|
|
109
|
+
* Calculate total physical lines for an array of strings (joined with newlines).
|
|
110
|
+
* Each array entry is a logical line; this returns total physical lines.
|
|
111
|
+
*
|
|
112
|
+
* @param lines - Array of lines (may contain ANSI escape codes)
|
|
113
|
+
* @param termWidth - Terminal width in columns
|
|
114
|
+
* @returns Total physical line count
|
|
115
|
+
*/
|
|
116
|
+
export declare function totalPhysicalLines(lines: string[], termWidth: number): number;
|
|
97
117
|
/**
|
|
98
118
|
* Enable raw mode for stdin
|
|
99
119
|
* In raw mode, input is available character by character
|
package/dist/ui/terminal.js
CHANGED
|
@@ -120,6 +120,26 @@ export function clearLinesAbove(count) {
|
|
|
120
120
|
export function clearScreen() {
|
|
121
121
|
process.stdout.write('\x1b[2J\x1b[H');
|
|
122
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Enter alternate screen buffer.
|
|
125
|
+
* Content shown here doesn't go to main scrollback.
|
|
126
|
+
* Used for modal UIs like menus, editors.
|
|
127
|
+
*/
|
|
128
|
+
export function enterAlternateScreen() {
|
|
129
|
+
// Enter alternate screen and disable mouse tracking
|
|
130
|
+
// \x1b[?1049h - alternate screen
|
|
131
|
+
// \x1b[?1000l - disable mouse click tracking
|
|
132
|
+
// \x1b[?1002l - disable mouse drag tracking
|
|
133
|
+
// \x1b[?1003l - disable all mouse tracking
|
|
134
|
+
process.stdout.write('\x1b[?1049h\x1b[?1000l\x1b[?1002l\x1b[?1003l');
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Leave alternate screen buffer.
|
|
138
|
+
* Returns to main screen (previous content restored).
|
|
139
|
+
*/
|
|
140
|
+
export function leaveAlternateScreen() {
|
|
141
|
+
process.stdout.write('\x1b[?1049l');
|
|
142
|
+
}
|
|
123
143
|
// =============================================================================
|
|
124
144
|
// Line Calculations
|
|
125
145
|
// =============================================================================
|
|
@@ -193,6 +213,58 @@ export function horizontalLine(char = '─') {
|
|
|
193
213
|
return char.repeat(getTerminalWidth());
|
|
194
214
|
}
|
|
195
215
|
// =============================================================================
|
|
216
|
+
// ANSI-Aware Utilities (internal)
|
|
217
|
+
// =============================================================================
|
|
218
|
+
/**
|
|
219
|
+
* Strip ANSI escape codes from a string.
|
|
220
|
+
* Used to calculate visual width of styled text.
|
|
221
|
+
* (Not exported to avoid conflicts with other modules)
|
|
222
|
+
*/
|
|
223
|
+
function stripAnsiCodes(str) {
|
|
224
|
+
// eslint-disable-next-line no-control-regex
|
|
225
|
+
return str.replace(/\x1b\[[0-9;]*m/g, '');
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get the visual width of a string (excluding ANSI escape codes).
|
|
229
|
+
*/
|
|
230
|
+
function visualWidth(str) {
|
|
231
|
+
return stripAnsiCodes(str).length;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Calculate the number of physical terminal lines a string occupies.
|
|
235
|
+
* Accounts for ANSI escape codes (which don't take visual width) and line wrapping.
|
|
236
|
+
*
|
|
237
|
+
* @param text - Text to measure (may contain ANSI escape codes)
|
|
238
|
+
* @param termWidth - Terminal width in columns
|
|
239
|
+
* @returns Number of physical lines
|
|
240
|
+
*/
|
|
241
|
+
function physicalLineCount(text, termWidth) {
|
|
242
|
+
if (text.length === 0)
|
|
243
|
+
return 1; // Empty line still takes 1 line
|
|
244
|
+
const visLen = visualWidth(text);
|
|
245
|
+
if (visLen === 0)
|
|
246
|
+
return 1;
|
|
247
|
+
// Number of lines = ceil(visLen / termWidth)
|
|
248
|
+
return Math.ceil(visLen / termWidth);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Calculate total physical lines for an array of strings (joined with newlines).
|
|
252
|
+
* Each array entry is a logical line; this returns total physical lines.
|
|
253
|
+
*
|
|
254
|
+
* @param lines - Array of lines (may contain ANSI escape codes)
|
|
255
|
+
* @param termWidth - Terminal width in columns
|
|
256
|
+
* @returns Total physical line count
|
|
257
|
+
*/
|
|
258
|
+
export function totalPhysicalLines(lines, termWidth) {
|
|
259
|
+
if (lines.length === 0)
|
|
260
|
+
return 0;
|
|
261
|
+
let total = 0;
|
|
262
|
+
for (const line of lines) {
|
|
263
|
+
total += physicalLineCount(line, termWidth);
|
|
264
|
+
}
|
|
265
|
+
return total;
|
|
266
|
+
}
|
|
267
|
+
// =============================================================================
|
|
196
268
|
// Raw Mode
|
|
197
269
|
// =============================================================================
|
|
198
270
|
/**
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Theme selection overlay using TabbedListOverlayV2 for the new Overlay interface.
|
|
5
|
+
* Works with TerminalUI's overlay management.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Tabs: Curated (top picks), All, Dark, Light
|
|
9
|
+
* - Search mode with / toggle
|
|
10
|
+
* - Live preview with syntax highlighting
|
|
11
|
+
* - Persists selection to settings
|
|
12
|
+
*/
|
|
13
|
+
import { TabbedListOverlayV2 } from './base/index.js';
|
|
14
|
+
import type { KeyEvent, OverlayAction } from './overlay/index.js';
|
|
15
|
+
import { type Theme } from '../themes/index.js';
|
|
16
|
+
export interface ThemeOverlayOptions {
|
|
17
|
+
/** Current theme ID (for highlighting current selection) */
|
|
18
|
+
currentThemeId?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ThemeOverlayResult {
|
|
21
|
+
/** Selected theme ID (if changed) */
|
|
22
|
+
themeChanged?: string;
|
|
23
|
+
/** Selected theme name */
|
|
24
|
+
themeName?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Theme overlay using the new Overlay interface.
|
|
28
|
+
* Displays available themes in a searchable, tabbed list with preview.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ThemeOverlayV2 extends TabbedListOverlayV2<Theme, ThemeOverlayResult> {
|
|
31
|
+
readonly type: "inline";
|
|
32
|
+
readonly id = "theme-overlay-v2";
|
|
33
|
+
private readonly currentThemeId;
|
|
34
|
+
private readonly curatedIds;
|
|
35
|
+
constructor(options?: ThemeOverlayOptions);
|
|
36
|
+
handleKey(key: KeyEvent): OverlayAction<ThemeOverlayResult>;
|
|
37
|
+
private selectTheme;
|
|
38
|
+
/**
|
|
39
|
+
* Optional summary shown after overlay closes.
|
|
40
|
+
*/
|
|
41
|
+
getCloseSummary(result: ThemeOverlayResult): string | null;
|
|
42
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Theme selection overlay using TabbedListOverlayV2 for the new Overlay interface.
|
|
5
|
+
* Works with TerminalUI's overlay management.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Tabs: Curated (top picks), All, Dark, Light
|
|
9
|
+
* - Search mode with / toggle
|
|
10
|
+
* - Live preview with syntax highlighting
|
|
11
|
+
* - Persists selection to settings
|
|
12
|
+
*/
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import { TabbedListOverlayV2, } from './base/index.js';
|
|
15
|
+
import { getCuratedThemes, getCurrentTheme, setCurrentTheme, getAllThemes, getThemeCount, clearStyleCache, } from '../themes/index.js';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Constants
|
|
18
|
+
// =============================================================================
|
|
19
|
+
const PAGE_SIZE = 10;
|
|
20
|
+
const TABS = [
|
|
21
|
+
{ id: 'curated', label: 'Curated' },
|
|
22
|
+
{ id: 'all', label: 'All' },
|
|
23
|
+
{ id: 'dark', label: 'Dark' },
|
|
24
|
+
{ id: 'light', label: 'Light' },
|
|
25
|
+
];
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// Helper Functions
|
|
28
|
+
// =============================================================================
|
|
29
|
+
function renderPreview(theme, styles) {
|
|
30
|
+
const lines = [];
|
|
31
|
+
const colors = theme.colors;
|
|
32
|
+
lines.push(styles.muted(' Preview:'));
|
|
33
|
+
// Use chalk for hex colors in preview
|
|
34
|
+
const primary = chalk.hex(colors.primary);
|
|
35
|
+
const secondary = chalk.hex(colors.secondary || colors.primary);
|
|
36
|
+
const muted = chalk.hex(colors.muted);
|
|
37
|
+
const fg = chalk.hex(colors.foreground);
|
|
38
|
+
lines.push(' ' + primary.bold('function') + ' ' + secondary('greet') + fg('() {'));
|
|
39
|
+
lines.push(' ' + muted('// Say hello'));
|
|
40
|
+
lines.push(' ' + fg('console.') + secondary('log') + fg('("Hello, ') + primary('World') + fg('!");'));
|
|
41
|
+
lines.push(' ' + fg('}'));
|
|
42
|
+
return lines;
|
|
43
|
+
}
|
|
44
|
+
// =============================================================================
|
|
45
|
+
// Theme Overlay V2 Class
|
|
46
|
+
// =============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Theme overlay using the new Overlay interface.
|
|
49
|
+
* Displays available themes in a searchable, tabbed list with preview.
|
|
50
|
+
*/
|
|
51
|
+
export class ThemeOverlayV2 extends TabbedListOverlayV2 {
|
|
52
|
+
type = 'inline';
|
|
53
|
+
id = 'theme-overlay-v2';
|
|
54
|
+
currentThemeId;
|
|
55
|
+
curatedIds;
|
|
56
|
+
constructor(options = {}) {
|
|
57
|
+
const currentTheme = getCurrentTheme();
|
|
58
|
+
const currentThemeId = options.currentThemeId ?? currentTheme.id;
|
|
59
|
+
const curatedThemes = getCuratedThemes();
|
|
60
|
+
const curatedIds = new Set(curatedThemes.map(t => t.id));
|
|
61
|
+
const allThemes = getAllThemes();
|
|
62
|
+
const counts = getThemeCount();
|
|
63
|
+
super({
|
|
64
|
+
title: `Select Theme (${String(counts.total)})`,
|
|
65
|
+
tabs: TABS,
|
|
66
|
+
items: allThemes,
|
|
67
|
+
pageSize: PAGE_SIZE,
|
|
68
|
+
showCount: false, // We show count in title
|
|
69
|
+
filterByTab: (theme, tabId) => {
|
|
70
|
+
switch (tabId) {
|
|
71
|
+
case 'curated':
|
|
72
|
+
return curatedIds.has(theme.id);
|
|
73
|
+
case 'dark':
|
|
74
|
+
return theme.type === 'dark';
|
|
75
|
+
case 'light':
|
|
76
|
+
return theme.type === 'light';
|
|
77
|
+
default:
|
|
78
|
+
return true; // 'all'
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
getSearchText: (theme) => {
|
|
82
|
+
return `${theme.name} ${theme.id}`;
|
|
83
|
+
},
|
|
84
|
+
renderItem: (theme, isSelected, styles) => {
|
|
85
|
+
const isCurrent = theme.id === currentThemeId;
|
|
86
|
+
const prefix = isSelected ? styles.primary('> ') : ' ';
|
|
87
|
+
const icon = theme.type === 'dark' ? 'D' : 'L';
|
|
88
|
+
const checkmark = isCurrent ? styles.success(' *') : '';
|
|
89
|
+
// Pad the plain name first, then apply styling (ANSI codes break padEnd)
|
|
90
|
+
const paddedName = theme.name.padEnd(33);
|
|
91
|
+
const label = isSelected ? styles.primary(paddedName) : paddedName;
|
|
92
|
+
return ` ${prefix}${label}${icon}${checkmark}`;
|
|
93
|
+
},
|
|
94
|
+
renderSelectedPreview: (theme, styles) => {
|
|
95
|
+
return renderPreview(theme, styles);
|
|
96
|
+
},
|
|
97
|
+
footerHints: (searchMode) => {
|
|
98
|
+
if (searchMode) {
|
|
99
|
+
return 'Type to filter · ↑↓/jk Navigate · Enter Select · Esc Exit search';
|
|
100
|
+
}
|
|
101
|
+
return 'Tab Filter · ↑↓/jk · ←→/hl Pages · / Search · Enter Select · q/Esc Close';
|
|
102
|
+
},
|
|
103
|
+
emptyMessage: 'No themes available.',
|
|
104
|
+
noResultsMessage: 'No themes match the search.',
|
|
105
|
+
});
|
|
106
|
+
this.currentThemeId = currentThemeId;
|
|
107
|
+
this.curatedIds = curatedIds;
|
|
108
|
+
}
|
|
109
|
+
handleKey(key) {
|
|
110
|
+
// Handle Enter/Space to select theme
|
|
111
|
+
if ((key.name === 'return' || key.name === 'space') && this.state.filteredItems.length > 0) {
|
|
112
|
+
const theme = this.state.filteredItems[this.state.selectedIndex];
|
|
113
|
+
return this.selectTheme(theme);
|
|
114
|
+
}
|
|
115
|
+
// Let parent handle other keys
|
|
116
|
+
return super.handleKey(key);
|
|
117
|
+
}
|
|
118
|
+
selectTheme(theme) {
|
|
119
|
+
setCurrentTheme(theme.id);
|
|
120
|
+
clearStyleCache();
|
|
121
|
+
return this.close({
|
|
122
|
+
themeChanged: theme.id,
|
|
123
|
+
themeName: theme.name,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Optional summary shown after overlay closes.
|
|
128
|
+
*/
|
|
129
|
+
getCloseSummary(result) {
|
|
130
|
+
if (result.themeName) {
|
|
131
|
+
return `Theme changed to: ${result.themeName}`;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Overlay
|
|
3
|
+
*
|
|
4
|
+
* Standalone theme selection overlay using TabbedListOverlay.
|
|
5
|
+
* Accessible via /theme command or from Config overlay.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Tabs: Curated (top picks), All, Dark, Light
|
|
9
|
+
* - Search mode with / toggle
|
|
10
|
+
* - Live preview with syntax highlighting
|
|
11
|
+
* - Quick select with number keys (1-9,0) in Curated tab
|
|
12
|
+
* - Persists selection to settings
|
|
13
|
+
*/
|
|
14
|
+
export interface ThemeOverlayOptions {
|
|
15
|
+
/** Current theme ID (for highlighting current selection) */
|
|
16
|
+
currentThemeId?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ThemeOverlayResult {
|
|
19
|
+
/** Selected theme ID (if changed) */
|
|
20
|
+
themeChanged?: string;
|
|
21
|
+
/** Selected theme name */
|
|
22
|
+
themeName?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function showThemeOverlay(options?: ThemeOverlayOptions): Promise<ThemeOverlayResult>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Overlay
|
|
3
|
+
*
|
|
4
|
+
* Standalone theme selection overlay using TabbedListOverlay.
|
|
5
|
+
* Accessible via /theme command or from Config overlay.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Tabs: Curated (top picks), All, Dark, Light
|
|
9
|
+
* - Search mode with / toggle
|
|
10
|
+
* - Live preview with syntax highlighting
|
|
11
|
+
* - Quick select with number keys (1-9,0) in Curated tab
|
|
12
|
+
* - Persists selection to settings
|
|
13
|
+
*/
|
|
14
|
+
import chalk from 'chalk';
|
|
15
|
+
import { TabbedListOverlay, isEnter, isSpace, } from './base/index.js';
|
|
16
|
+
import { getCuratedThemes, getCurrentTheme, setCurrentTheme, getAllThemes, getThemeCount, clearStyleCache, } from '../themes/index.js';
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Constants
|
|
19
|
+
// =============================================================================
|
|
20
|
+
const PAGE_SIZE = 10;
|
|
21
|
+
const TABS = [
|
|
22
|
+
{ id: 'curated', label: 'Curated' },
|
|
23
|
+
{ id: 'all', label: 'All' },
|
|
24
|
+
{ id: 'dark', label: 'Dark' },
|
|
25
|
+
{ id: 'light', label: 'Light' },
|
|
26
|
+
];
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Helper Functions
|
|
29
|
+
// =============================================================================
|
|
30
|
+
function renderPreview(theme, styles) {
|
|
31
|
+
const lines = [];
|
|
32
|
+
const colors = theme.colors;
|
|
33
|
+
lines.push(styles.muted(' Preview:'));
|
|
34
|
+
// Use chalk for hex colors in preview
|
|
35
|
+
const primary = chalk.hex(colors.primary);
|
|
36
|
+
const secondary = chalk.hex(colors.secondary || colors.primary);
|
|
37
|
+
const muted = chalk.hex(colors.muted);
|
|
38
|
+
const fg = chalk.hex(colors.foreground);
|
|
39
|
+
lines.push(' ' + primary.bold('function') + ' ' + secondary('greet') + fg('() {'));
|
|
40
|
+
lines.push(' ' + muted('// Say hello'));
|
|
41
|
+
lines.push(' ' + fg('console.') + secondary('log') + fg('("Hello, ') + primary('World') + fg('!");'));
|
|
42
|
+
lines.push(' ' + fg('}'));
|
|
43
|
+
return lines;
|
|
44
|
+
}
|
|
45
|
+
// =============================================================================
|
|
46
|
+
// Theme Overlay Class
|
|
47
|
+
// =============================================================================
|
|
48
|
+
class ThemeOverlay extends TabbedListOverlay {
|
|
49
|
+
currentThemeId;
|
|
50
|
+
curatedIds;
|
|
51
|
+
constructor(options = {}) {
|
|
52
|
+
const currentTheme = getCurrentTheme();
|
|
53
|
+
const currentThemeId = options.currentThemeId ?? currentTheme.id;
|
|
54
|
+
const curatedThemes = getCuratedThemes();
|
|
55
|
+
const curatedIds = new Set(curatedThemes.map(t => t.id));
|
|
56
|
+
const allThemes = getAllThemes();
|
|
57
|
+
const counts = getThemeCount();
|
|
58
|
+
const config = {
|
|
59
|
+
title: `Select Theme (${String(counts.total)})`,
|
|
60
|
+
tabs: TABS,
|
|
61
|
+
items: allThemes,
|
|
62
|
+
pageSize: PAGE_SIZE,
|
|
63
|
+
showCount: false, // We show count in title
|
|
64
|
+
filterByTab: (theme, tabId) => {
|
|
65
|
+
switch (tabId) {
|
|
66
|
+
case 'curated':
|
|
67
|
+
return curatedIds.has(theme.id);
|
|
68
|
+
case 'dark':
|
|
69
|
+
return theme.type === 'dark';
|
|
70
|
+
case 'light':
|
|
71
|
+
return theme.type === 'light';
|
|
72
|
+
default:
|
|
73
|
+
return true; // 'all'
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
getSearchText: (theme) => {
|
|
77
|
+
return `${theme.name} ${theme.id}`;
|
|
78
|
+
},
|
|
79
|
+
renderItem: (theme, isSelected, styles) => {
|
|
80
|
+
const isCurrent = theme.id === currentThemeId;
|
|
81
|
+
const prefix = isSelected ? styles.primary('❯ ') : ' ';
|
|
82
|
+
const icon = theme.type === 'dark' ? '🌙' : '☀️';
|
|
83
|
+
const checkmark = isCurrent ? styles.success(' ✓') : '';
|
|
84
|
+
const label = isSelected ? styles.primary(theme.name) : theme.name;
|
|
85
|
+
return ` ${prefix}${label.padEnd(33)}${icon}${checkmark}`;
|
|
86
|
+
},
|
|
87
|
+
renderSelectedPreview: (theme, styles) => {
|
|
88
|
+
return renderPreview(theme, styles);
|
|
89
|
+
},
|
|
90
|
+
footerHints: (searchMode) => {
|
|
91
|
+
if (searchMode) {
|
|
92
|
+
return 'Type to filter · ↑↓/jk Navigate · Enter Select · Esc Exit search';
|
|
93
|
+
}
|
|
94
|
+
return 'Tab Filter · ↑↓/jk · ←→/hl Pages · / Search · Enter Select · q/Esc Close';
|
|
95
|
+
},
|
|
96
|
+
emptyMessage: 'No themes available.',
|
|
97
|
+
noResultsMessage: 'No themes match the search.',
|
|
98
|
+
};
|
|
99
|
+
super(config);
|
|
100
|
+
this.currentThemeId = currentThemeId;
|
|
101
|
+
this.curatedIds = curatedIds;
|
|
102
|
+
}
|
|
103
|
+
handleKey(data) {
|
|
104
|
+
// Handle Enter/Space to select theme
|
|
105
|
+
if ((isEnter(data) || isSpace(data)) && this.state.filteredItems.length > 0) {
|
|
106
|
+
const theme = this.state.filteredItems[this.state.selectedIndex];
|
|
107
|
+
this.selectTheme(theme);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Let parent handle other keys (including number keys for tab switching)
|
|
111
|
+
super.handleKey(data);
|
|
112
|
+
}
|
|
113
|
+
selectTheme(theme) {
|
|
114
|
+
setCurrentTheme(theme.id);
|
|
115
|
+
clearStyleCache();
|
|
116
|
+
this.close({
|
|
117
|
+
themeChanged: theme.id,
|
|
118
|
+
themeName: theme.name,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// =============================================================================
|
|
123
|
+
// Export Function
|
|
124
|
+
// =============================================================================
|
|
125
|
+
export async function showThemeOverlay(options = {}) {
|
|
126
|
+
return new ThemeOverlay(options).show();
|
|
127
|
+
}
|
package/dist/ui/todo-zone.js
CHANGED
|
@@ -13,32 +13,60 @@ import { getStyles } from '../themes/index.js';
|
|
|
13
13
|
// =============================================================================
|
|
14
14
|
// Thinking Words (for random selection when no active todo)
|
|
15
15
|
// =============================================================================
|
|
16
|
+
// Retro-computing themed thinking words (C64, Amiga, Spectrum era vibes)
|
|
16
17
|
const THINKING_WORDS = [
|
|
17
|
-
|
|
18
|
-
'
|
|
19
|
-
'
|
|
20
|
-
'
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
|
|
24
|
-
'
|
|
25
|
-
'
|
|
26
|
-
'
|
|
27
|
-
'
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'
|
|
34
|
-
'
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
|
|
38
|
-
'
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'
|
|
18
|
+
// Tape/Cassette Era
|
|
19
|
+
'Rewinding tape',
|
|
20
|
+
'Loading from cassette',
|
|
21
|
+
'Seeking track',
|
|
22
|
+
'Press PLAY on tape',
|
|
23
|
+
'Fast forwarding',
|
|
24
|
+
// Floppy/Disk Era
|
|
25
|
+
'Spinning diskette',
|
|
26
|
+
'Aligning heads',
|
|
27
|
+
'Seeking sector',
|
|
28
|
+
'Ejecting floppy',
|
|
29
|
+
'Formatting track',
|
|
30
|
+
'Reading FAT',
|
|
31
|
+
// CRT/Old Hardware
|
|
32
|
+
'Degaussing CRT',
|
|
33
|
+
'Warming tubes',
|
|
34
|
+
'Adjusting V-HOLD',
|
|
35
|
+
'Tuning phosphors',
|
|
36
|
+
'Calibrating beam',
|
|
37
|
+
'Syncing scanlines',
|
|
38
|
+
// Memory/System
|
|
39
|
+
'Paging memory',
|
|
40
|
+
'Swapping buffers',
|
|
41
|
+
'Defragmenting',
|
|
42
|
+
'Poking registers',
|
|
43
|
+
'Peeking bytes',
|
|
44
|
+
'Flushing cache',
|
|
45
|
+
'Allocating heap',
|
|
46
|
+
// Modem/BBS Era
|
|
47
|
+
'Dialing BBS',
|
|
48
|
+
'Waiting for carrier',
|
|
49
|
+
'Handshaking modem',
|
|
50
|
+
'Negotiating baud',
|
|
51
|
+
'Detecting ring',
|
|
52
|
+
// Terminal/Shell
|
|
53
|
+
'Parsing commands',
|
|
54
|
+
'Piping output',
|
|
55
|
+
'Forking process',
|
|
56
|
+
'Grepping logs',
|
|
57
|
+
'Spawning shell',
|
|
58
|
+
'Sourcing profile',
|
|
59
|
+
// Classic References
|
|
60
|
+
'SYS 64738',
|
|
61
|
+
'LOAD "*",8,1',
|
|
62
|
+
'Guru meditating',
|
|
63
|
+
'POKE 53280,0',
|
|
64
|
+
'RUN/STOP',
|
|
65
|
+
'Inserting cartridge',
|
|
66
|
+
// Printer/Peripherals
|
|
67
|
+
'Feeding paper',
|
|
68
|
+
'Advancing ribbon',
|
|
69
|
+
'Parking heads',
|
|
42
70
|
];
|
|
43
71
|
// =============================================================================
|
|
44
72
|
// Formatting Helpers
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Result Formatters
|
|
3
|
+
*
|
|
4
|
+
* Extracts content, summary, and success from tool results.
|
|
5
|
+
* Each tool type has its own formatter to produce human-readable output.
|
|
6
|
+
*/
|
|
7
|
+
export interface FormattedResult {
|
|
8
|
+
content: string;
|
|
9
|
+
summary: string;
|
|
10
|
+
success: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Format tool result for display.
|
|
14
|
+
* Handles the agent's structured result format.
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatToolResult(toolName: string, result: unknown): FormattedResult;
|