@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,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mascot Expression Library
|
|
3
|
+
*
|
|
4
|
+
* ASCII art expressions for the compilr mascot - a retro CRT monitor
|
|
5
|
+
* with rabbit-ear antennas and a 3D keyboard.
|
|
6
|
+
*
|
|
7
|
+
* Each expression is 6 lines tall and designed to sit alongside the logo.
|
|
8
|
+
*/
|
|
9
|
+
// Full mascot expressions (6 lines each)
|
|
10
|
+
// Design elements:
|
|
11
|
+
// - \|/ - Rabbit-ear antennas (retro TV)
|
|
12
|
+
// - ╭══════════╮ - Rounded top with double-line (CRT bezel)
|
|
13
|
+
// - ║ - Double left border (3D depth effect)
|
|
14
|
+
// - ' - Screen glare/reflection
|
|
15
|
+
// - ▐▌ - Rectangular eyes
|
|
16
|
+
// - ╰─═──────═─╯ - Bottom with feet (═)
|
|
17
|
+
// - \________\ - 3D perspective keyboard
|
|
18
|
+
export const EXPRESSIONS = {
|
|
19
|
+
// Standard/default - looking at user
|
|
20
|
+
neutral: [
|
|
21
|
+
' \\|/',
|
|
22
|
+
' ╭══════════╮',
|
|
23
|
+
" ║' ▐▌ ▐▌ │",
|
|
24
|
+
' ║ │',
|
|
25
|
+
' ╰─═──────═─╯',
|
|
26
|
+
' \\________\\',
|
|
27
|
+
],
|
|
28
|
+
// Processing, working on something
|
|
29
|
+
thinking: [
|
|
30
|
+
' \\|/',
|
|
31
|
+
' ╭══════════╮',
|
|
32
|
+
" ║' ▐▌ ▐▌ │",
|
|
33
|
+
' ║ ... │',
|
|
34
|
+
' ╰─═──────═─╯',
|
|
35
|
+
' \\________\\',
|
|
36
|
+
],
|
|
37
|
+
// Glancing left (3D effect switches sides)
|
|
38
|
+
looking_left: [
|
|
39
|
+
' \\|/',
|
|
40
|
+
' ╭══════════╮',
|
|
41
|
+
" │ ▐▌ ▐▌ '║",
|
|
42
|
+
' │ ║',
|
|
43
|
+
' ╰─═──────═─╯',
|
|
44
|
+
' \\________\\',
|
|
45
|
+
],
|
|
46
|
+
// Glancing right (eyes shifted)
|
|
47
|
+
looking_right: [
|
|
48
|
+
' \\|/',
|
|
49
|
+
' ╭══════════╮',
|
|
50
|
+
" ║' ▐▌ ▐▌ │",
|
|
51
|
+
' ║ │',
|
|
52
|
+
' ╰─═──────═─╯',
|
|
53
|
+
' \\________\\',
|
|
54
|
+
],
|
|
55
|
+
// Idle, waiting, inactive
|
|
56
|
+
sleeping: [
|
|
57
|
+
' \\|/',
|
|
58
|
+
' ╭══════════╮',
|
|
59
|
+
" ║' __ __ │",
|
|
60
|
+
' ║ zZ │',
|
|
61
|
+
' ╰─═──────═─╯',
|
|
62
|
+
' \\________\\',
|
|
63
|
+
],
|
|
64
|
+
// Attention needed, important notification
|
|
65
|
+
alert: [
|
|
66
|
+
' \\|||/',
|
|
67
|
+
' ╭══════════╮',
|
|
68
|
+
" ║' ▐▌ ▐▌ │",
|
|
69
|
+
' ║ ! │',
|
|
70
|
+
' ╰─═──────═─╯',
|
|
71
|
+
' \\________\\',
|
|
72
|
+
],
|
|
73
|
+
// Error occurred, confused, problem
|
|
74
|
+
error: [
|
|
75
|
+
' \\|/',
|
|
76
|
+
' ╭══════════╮',
|
|
77
|
+
" ║' × × │",
|
|
78
|
+
' ║ ??? │',
|
|
79
|
+
' ╰─═──────═─╯',
|
|
80
|
+
' \\________\\',
|
|
81
|
+
],
|
|
82
|
+
// Task completed successfully, happy
|
|
83
|
+
success: [
|
|
84
|
+
' \\|/',
|
|
85
|
+
' ╭══════════╮',
|
|
86
|
+
" ║' ^ ^ │",
|
|
87
|
+
' ║ __ │',
|
|
88
|
+
' ╰─═──────═─╯',
|
|
89
|
+
' \\________\\',
|
|
90
|
+
],
|
|
91
|
+
// Success with just happy eyes, no smile
|
|
92
|
+
success_minimal: [
|
|
93
|
+
' \\|/',
|
|
94
|
+
' ╭══════════╮',
|
|
95
|
+
" ║' ^ ^ │",
|
|
96
|
+
' ║ │',
|
|
97
|
+
' ╰─═──────═─╯',
|
|
98
|
+
' \\________\\',
|
|
99
|
+
],
|
|
100
|
+
// Looking for something, scanning
|
|
101
|
+
searching: [
|
|
102
|
+
' \\|/',
|
|
103
|
+
' ╭══════════╮',
|
|
104
|
+
" ║' ◐ ◐ │",
|
|
105
|
+
' ║ ~~~ │',
|
|
106
|
+
' ╰─═──────═─╯',
|
|
107
|
+
' \\________\\',
|
|
108
|
+
],
|
|
109
|
+
// Doubtful, questioning, side-eye
|
|
110
|
+
skeptical: [
|
|
111
|
+
' \\|/',
|
|
112
|
+
' ╭══════════╮',
|
|
113
|
+
" ║' > > │",
|
|
114
|
+
' ║ │',
|
|
115
|
+
' ╰─═──────═─╯',
|
|
116
|
+
' \\________\\',
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
// Inline mascot expressions (single line) for status updates
|
|
120
|
+
export const EXPRESSIONS_INLINE = {
|
|
121
|
+
neutral: '[•_•]',
|
|
122
|
+
thinking: '[•_•]...',
|
|
123
|
+
looking_left: '[<_<]',
|
|
124
|
+
looking_right: '[>_>]',
|
|
125
|
+
sleeping: '[-_-]zZ',
|
|
126
|
+
alert: '[•!•]',
|
|
127
|
+
error: '[×_×]',
|
|
128
|
+
success: '[^_^]',
|
|
129
|
+
success_minimal: '[^_^]',
|
|
130
|
+
searching: '[◐_◐]',
|
|
131
|
+
skeptical: '[>_>]',
|
|
132
|
+
};
|
|
133
|
+
// All expression codes for iteration
|
|
134
|
+
export const EXPRESSION_CODES = [
|
|
135
|
+
'neutral',
|
|
136
|
+
'thinking',
|
|
137
|
+
'looking_left',
|
|
138
|
+
'looking_right',
|
|
139
|
+
'sleeping',
|
|
140
|
+
'alert',
|
|
141
|
+
'error',
|
|
142
|
+
'success',
|
|
143
|
+
'success_minimal',
|
|
144
|
+
'searching',
|
|
145
|
+
'skeptical',
|
|
146
|
+
];
|
|
147
|
+
// All mascot setting options (for config menu)
|
|
148
|
+
export const MASCOT_OPTIONS = [
|
|
149
|
+
'none',
|
|
150
|
+
'random',
|
|
151
|
+
...EXPRESSION_CODES,
|
|
152
|
+
];
|
|
153
|
+
// Human-readable labels for mascot options
|
|
154
|
+
export const MASCOT_LABELS = {
|
|
155
|
+
none: 'None',
|
|
156
|
+
random: 'Random',
|
|
157
|
+
neutral: 'Neutral',
|
|
158
|
+
thinking: 'Thinking',
|
|
159
|
+
looking_left: 'Looking Left',
|
|
160
|
+
looking_right: 'Looking Right',
|
|
161
|
+
sleeping: 'Sleeping',
|
|
162
|
+
alert: 'Alert',
|
|
163
|
+
error: 'Error',
|
|
164
|
+
success: 'Success',
|
|
165
|
+
success_minimal: 'Success (Minimal)',
|
|
166
|
+
searching: 'Searching',
|
|
167
|
+
skeptical: 'Skeptical',
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Get a random expression code
|
|
171
|
+
*/
|
|
172
|
+
export function getRandomExpression() {
|
|
173
|
+
const index = Math.floor(Math.random() * EXPRESSION_CODES.length);
|
|
174
|
+
return EXPRESSION_CODES[index];
|
|
175
|
+
}
|
|
176
|
+
// Session-level cache for random expression (selected once at startup)
|
|
177
|
+
let sessionRandomExpression = null;
|
|
178
|
+
/**
|
|
179
|
+
* Get the cached session expression, or generate one if not set
|
|
180
|
+
*/
|
|
181
|
+
function getSessionExpression() {
|
|
182
|
+
if (sessionRandomExpression === null) {
|
|
183
|
+
sessionRandomExpression = getRandomExpression();
|
|
184
|
+
}
|
|
185
|
+
return sessionRandomExpression;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Reset the session expression (for next startup or when settings change)
|
|
189
|
+
*/
|
|
190
|
+
export function resetSessionExpression() {
|
|
191
|
+
sessionRandomExpression = null;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get expression lines for a mascot setting
|
|
195
|
+
* Returns null for 'none', picks random for 'random', otherwise returns the expression
|
|
196
|
+
*/
|
|
197
|
+
export function getExpressionForSetting(setting) {
|
|
198
|
+
if (setting === 'none') {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
if (setting === 'random') {
|
|
202
|
+
// Use cached session expression for consistency within a session
|
|
203
|
+
return EXPRESSIONS[getSessionExpression()];
|
|
204
|
+
}
|
|
205
|
+
return EXPRESSIONS[setting];
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get the width of the mascot (for layout calculations)
|
|
209
|
+
*/
|
|
210
|
+
export function getMascotWidth() {
|
|
211
|
+
// All expressions have the same width - use neutral as reference
|
|
212
|
+
return Math.max(...EXPRESSIONS.neutral.map((line) => line.length));
|
|
213
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mascot Module
|
|
3
|
+
*
|
|
4
|
+
* Exports for the compilr mascot system.
|
|
5
|
+
* The mascot is a retro CRT monitor that displays expressions.
|
|
6
|
+
*/
|
|
7
|
+
export { type ExpressionCode, type MascotSetting, EXPRESSIONS, EXPRESSIONS_INLINE, EXPRESSION_CODES, MASCOT_OPTIONS, MASCOT_LABELS, getRandomExpression, getExpressionForSetting, getMascotWidth, resetSessionExpression, } from './expressions.js';
|
|
8
|
+
export { renderMascotWithLogo, combineHorizontally } from './renderer.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mascot Module
|
|
3
|
+
*
|
|
4
|
+
* Exports for the compilr mascot system.
|
|
5
|
+
* The mascot is a retro CRT monitor that displays expressions.
|
|
6
|
+
*/
|
|
7
|
+
export { EXPRESSIONS, EXPRESSIONS_INLINE, EXPRESSION_CODES, MASCOT_OPTIONS, MASCOT_LABELS, getRandomExpression, getExpressionForSetting, getMascotWidth, resetSessionExpression, } from './expressions.js';
|
|
8
|
+
export { renderMascotWithLogo, combineHorizontally } from './renderer.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mascot Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering the mascot alongside the logo and applying colors.
|
|
5
|
+
*/
|
|
6
|
+
import { type MascotSetting } from './expressions.js';
|
|
7
|
+
/**
|
|
8
|
+
* Combine two sets of lines horizontally with a gap
|
|
9
|
+
*/
|
|
10
|
+
export declare function combineHorizontally(left: string[], right: string[], gap: number): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Render mascot with logo side by side
|
|
13
|
+
* Returns the combined lines ready for output
|
|
14
|
+
*
|
|
15
|
+
* @param mascotSetting - The mascot setting (expression or 'none'/'random')
|
|
16
|
+
* @param version - Version string to append to logo
|
|
17
|
+
* @param projectName - Optional active project name to show
|
|
18
|
+
*/
|
|
19
|
+
export declare function renderMascotWithLogo(mascotSetting: MascotSetting, version: string, projectName?: string | null): string[];
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mascot Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering the mascot alongside the logo and applying colors.
|
|
5
|
+
*/
|
|
6
|
+
import { getStyles } from '../../themes/index.js';
|
|
7
|
+
import { getExpressionForSetting } from './expressions.js';
|
|
8
|
+
// The compilr logo (6 lines to match mascot height)
|
|
9
|
+
const LOGO_LINES = [
|
|
10
|
+
" ___ ___ _ __ ___ _ __ (_) |_ __",
|
|
11
|
+
" / __|/ _ \\| '_ ` _ \\| '_ \\| | | '__|",
|
|
12
|
+
" | (__| (_) | | | | | | |_) | | | |",
|
|
13
|
+
" \\___|\\___/|_| |_| |_| .__/|_|_|_|",
|
|
14
|
+
" | | .dev",
|
|
15
|
+
" |_|",
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Combine two sets of lines horizontally with a gap
|
|
19
|
+
*/
|
|
20
|
+
export function combineHorizontally(left, right, gap) {
|
|
21
|
+
const maxLines = Math.max(left.length, right.length);
|
|
22
|
+
const leftWidth = Math.max(...left.map((l) => l.length));
|
|
23
|
+
const result = [];
|
|
24
|
+
for (let i = 0; i < maxLines; i++) {
|
|
25
|
+
const leftLine = (left[i] || '').padEnd(leftWidth);
|
|
26
|
+
const rightLine = right[i] || '';
|
|
27
|
+
result.push(leftLine + ' '.repeat(gap) + rightLine);
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Render mascot with logo side by side
|
|
33
|
+
* Returns the combined lines ready for output
|
|
34
|
+
*
|
|
35
|
+
* @param mascotSetting - The mascot setting (expression or 'none'/'random')
|
|
36
|
+
* @param version - Version string to append to logo
|
|
37
|
+
* @param projectName - Optional active project name to show
|
|
38
|
+
*/
|
|
39
|
+
export function renderMascotWithLogo(mascotSetting, version, projectName) {
|
|
40
|
+
const s = getStyles();
|
|
41
|
+
// Get mascot expression (or null for 'none')
|
|
42
|
+
const mascotLines = getExpressionForSetting(mascotSetting);
|
|
43
|
+
// Create logo lines with version
|
|
44
|
+
const logoWithVersion = [...LOGO_LINES];
|
|
45
|
+
logoWithVersion[5] = ` |_| v${version}`;
|
|
46
|
+
// Add tagline and project info below logo
|
|
47
|
+
const tagline = '@compilr-dev/cli - AI-powered coding assistant';
|
|
48
|
+
let result;
|
|
49
|
+
if (mascotLines) {
|
|
50
|
+
// Combine mascot + logo horizontally (5 space gap)
|
|
51
|
+
result = combineHorizontally(mascotLines, logoWithVersion, 5);
|
|
52
|
+
// Add empty line and tagline
|
|
53
|
+
result.push('');
|
|
54
|
+
result.push(tagline);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// No mascot - just show logo
|
|
58
|
+
result = [...logoWithVersion];
|
|
59
|
+
result.push('');
|
|
60
|
+
result.push(tagline);
|
|
61
|
+
}
|
|
62
|
+
// Add project info if available
|
|
63
|
+
if (projectName) {
|
|
64
|
+
result.push('');
|
|
65
|
+
result.push(`Project: ${projectName}`);
|
|
66
|
+
}
|
|
67
|
+
// Apply colors: mascot gets secondary color, logo gets accent
|
|
68
|
+
return result.map((line, index) => {
|
|
69
|
+
if (!mascotLines) {
|
|
70
|
+
// No mascot - color the logo with accent
|
|
71
|
+
if (index < logoWithVersion.length) {
|
|
72
|
+
return s.primary(line);
|
|
73
|
+
}
|
|
74
|
+
// Tagline and project info get muted color
|
|
75
|
+
if (line.startsWith('Project:')) {
|
|
76
|
+
return s.muted(line);
|
|
77
|
+
}
|
|
78
|
+
return s.muted(line);
|
|
79
|
+
}
|
|
80
|
+
// With mascot - split the line at the gap point
|
|
81
|
+
const mascotWidth = Math.max(...mascotLines.map((l) => l.length));
|
|
82
|
+
const gap = 5;
|
|
83
|
+
if (index < mascotLines.length) {
|
|
84
|
+
// Lines that have mascot + logo
|
|
85
|
+
const mascotPart = line.slice(0, mascotWidth);
|
|
86
|
+
const logoPart = line.slice(mascotWidth + gap);
|
|
87
|
+
return s.secondary(mascotPart) + ' '.repeat(gap) + s.primary(logoPart);
|
|
88
|
+
}
|
|
89
|
+
else if (line.startsWith('Project:')) {
|
|
90
|
+
return s.muted(line);
|
|
91
|
+
}
|
|
92
|
+
else if (line === tagline) {
|
|
93
|
+
return s.muted(line);
|
|
94
|
+
}
|
|
95
|
+
return line;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mascot Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Mascot selection overlay using the new Overlay interface.
|
|
5
|
+
* Shows all mascot expressions with live preview.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - All mascot expressions
|
|
9
|
+
* - Live preview
|
|
10
|
+
* - Persists selection to settings
|
|
11
|
+
* - Works with TerminalUI's overlay management
|
|
12
|
+
*/
|
|
13
|
+
import { BaseOverlayV2 } from './base/index.js';
|
|
14
|
+
import { type MascotSetting } from './mascot/index.js';
|
|
15
|
+
import type { RenderContext, OverlayAction, KeyEvent } from './overlay/index.js';
|
|
16
|
+
export interface MascotOverlayV2Options {
|
|
17
|
+
/** Current mascot setting (for highlighting current selection) */
|
|
18
|
+
currentMascot?: MascotSetting;
|
|
19
|
+
}
|
|
20
|
+
export interface MascotOverlayV2Result {
|
|
21
|
+
/** Selected mascot (if changed) */
|
|
22
|
+
mascotChanged?: MascotSetting;
|
|
23
|
+
}
|
|
24
|
+
interface MascotState {
|
|
25
|
+
/** Selected mascot index */
|
|
26
|
+
selectedIndex: number;
|
|
27
|
+
/** Current mascot for checkmark display */
|
|
28
|
+
currentMascot: MascotSetting;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Mascot overlay using the new Overlay interface.
|
|
32
|
+
* Displays mascot options with live preview.
|
|
33
|
+
*/
|
|
34
|
+
export declare class MascotOverlayV2 extends BaseOverlayV2<MascotState, MascotOverlayV2Result> {
|
|
35
|
+
readonly type: "inline";
|
|
36
|
+
readonly id = "mascot-overlay-v2";
|
|
37
|
+
constructor(options?: MascotOverlayV2Options);
|
|
38
|
+
protected renderContent(context: RenderContext): string[];
|
|
39
|
+
handleKey(key: KeyEvent): OverlayAction<MascotOverlayV2Result>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mascot Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* Mascot selection overlay using the new Overlay interface.
|
|
5
|
+
* Shows all mascot expressions with live preview.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - All mascot expressions
|
|
9
|
+
* - Live preview
|
|
10
|
+
* - Persists selection to settings
|
|
11
|
+
* - Works with TerminalUI's overlay management
|
|
12
|
+
*/
|
|
13
|
+
import { BaseOverlayV2, isEscape, isEnter, isSpace, isCtrlC, isNavigateUp, isNavigateDown, isClose, renderBorder, } from './base/index.js';
|
|
14
|
+
import { getSettings, setSetting } from '../settings/index.js';
|
|
15
|
+
import { MASCOT_OPTIONS, MASCOT_LABELS, EXPRESSIONS, } from './mascot/index.js';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Mascot Overlay V2 Class
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Mascot overlay using the new Overlay interface.
|
|
21
|
+
* Displays mascot options with live preview.
|
|
22
|
+
*/
|
|
23
|
+
export class MascotOverlayV2 extends BaseOverlayV2 {
|
|
24
|
+
type = 'inline';
|
|
25
|
+
id = 'mascot-overlay-v2';
|
|
26
|
+
constructor(options = {}) {
|
|
27
|
+
const currentMascot = options.currentMascot ?? getSettings().mascot;
|
|
28
|
+
// Find current mascot in options list
|
|
29
|
+
let selectedIndex = 0;
|
|
30
|
+
const mascotIndex = MASCOT_OPTIONS.findIndex(m => m === currentMascot);
|
|
31
|
+
if (mascotIndex >= 0) {
|
|
32
|
+
selectedIndex = mascotIndex;
|
|
33
|
+
}
|
|
34
|
+
const initialState = {
|
|
35
|
+
selectedIndex,
|
|
36
|
+
currentMascot,
|
|
37
|
+
};
|
|
38
|
+
super(initialState);
|
|
39
|
+
this.minHeight = 20;
|
|
40
|
+
}
|
|
41
|
+
renderContent(context) {
|
|
42
|
+
const s = context.styles;
|
|
43
|
+
const cols = context.width;
|
|
44
|
+
const border = renderBorder(cols, s);
|
|
45
|
+
const lines = [];
|
|
46
|
+
// Get preview lines for side-by-side layout
|
|
47
|
+
const selectedOption = MASCOT_OPTIONS[this.state.selectedIndex];
|
|
48
|
+
let previewLines = [];
|
|
49
|
+
let previewLabel = '';
|
|
50
|
+
if (selectedOption === 'none') {
|
|
51
|
+
previewLabel = '(No mascot)';
|
|
52
|
+
previewLines = ['', '', '', '', '', ''];
|
|
53
|
+
}
|
|
54
|
+
else if (selectedOption === 'random') {
|
|
55
|
+
previewLabel = '(Random on startup)';
|
|
56
|
+
previewLines = EXPRESSIONS.neutral;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
previewLabel = MASCOT_LABELS[selectedOption];
|
|
60
|
+
previewLines = EXPRESSIONS[selectedOption];
|
|
61
|
+
}
|
|
62
|
+
// Header
|
|
63
|
+
lines.push(border);
|
|
64
|
+
lines.push(` ${s.primaryBold('Select Mascot')}`);
|
|
65
|
+
lines.push('');
|
|
66
|
+
// Column widths
|
|
67
|
+
const listColWidth = 28;
|
|
68
|
+
const gap = 4;
|
|
69
|
+
const previewColStart = listColWidth + gap;
|
|
70
|
+
// Build side-by-side layout
|
|
71
|
+
const optionCount = MASCOT_OPTIONS.length;
|
|
72
|
+
const previewHeight = previewLines.length;
|
|
73
|
+
const previewStartRow = Math.max(0, Math.floor((optionCount - previewHeight) / 2));
|
|
74
|
+
for (let i = 0; i < Math.max(optionCount, previewStartRow + previewHeight + 1); i++) {
|
|
75
|
+
let leftPart = '';
|
|
76
|
+
let rightPart = '';
|
|
77
|
+
// Left column: option list
|
|
78
|
+
if (i < optionCount) {
|
|
79
|
+
const option = MASCOT_OPTIONS[i];
|
|
80
|
+
const isSelected = i === this.state.selectedIndex;
|
|
81
|
+
const isCurrent = option === this.state.currentMascot;
|
|
82
|
+
const prefix = isSelected ? s.primary('> ') : ' ';
|
|
83
|
+
const num = `${String(i + 1).padStart(2)}. `;
|
|
84
|
+
const checkmark = isCurrent ? s.success(' (current)') : '';
|
|
85
|
+
const label = isSelected ? s.primary(MASCOT_LABELS[option]) : s.muted(MASCOT_LABELS[option]);
|
|
86
|
+
leftPart = ` ${prefix}${num}${label}${checkmark}`;
|
|
87
|
+
}
|
|
88
|
+
// Right column: preview
|
|
89
|
+
const previewRow = i - previewStartRow;
|
|
90
|
+
if (previewRow === -1) {
|
|
91
|
+
rightPart = s.muted(previewLabel);
|
|
92
|
+
}
|
|
93
|
+
else if (previewRow >= 0 && previewRow < previewHeight) {
|
|
94
|
+
rightPart = s.secondary(previewLines[previewRow]);
|
|
95
|
+
}
|
|
96
|
+
// Combine columns with proper spacing
|
|
97
|
+
// eslint-disable-next-line no-control-regex
|
|
98
|
+
const leftPlain = leftPart.replace(/\x1b\[[0-9;]*m/g, '');
|
|
99
|
+
const padding = ' '.repeat(Math.max(0, previewColStart - leftPlain.length));
|
|
100
|
+
lines.push(leftPart + padding + rightPart);
|
|
101
|
+
}
|
|
102
|
+
// Footer
|
|
103
|
+
lines.push('');
|
|
104
|
+
lines.push(border);
|
|
105
|
+
lines.push(` ${s.muted('up/down/jk Navigate . Enter/Space Select . q/Esc Close')}`);
|
|
106
|
+
lines.push(border);
|
|
107
|
+
return lines;
|
|
108
|
+
}
|
|
109
|
+
handleKey(key) {
|
|
110
|
+
const data = key.raw;
|
|
111
|
+
const maxIndex = MASCOT_OPTIONS.length - 1;
|
|
112
|
+
// Ctrl+C always closes
|
|
113
|
+
if (isCtrlC(data)) {
|
|
114
|
+
return this.cancel();
|
|
115
|
+
}
|
|
116
|
+
// q or Esc closes
|
|
117
|
+
if (isEscape(data) || isClose(data)) {
|
|
118
|
+
return this.cancel();
|
|
119
|
+
}
|
|
120
|
+
// Navigation up
|
|
121
|
+
if (isNavigateUp(data) && this.state.selectedIndex > 0) {
|
|
122
|
+
this.state.selectedIndex--;
|
|
123
|
+
return this.rerender();
|
|
124
|
+
}
|
|
125
|
+
// Navigation down
|
|
126
|
+
if (isNavigateDown(data) && this.state.selectedIndex < maxIndex) {
|
|
127
|
+
this.state.selectedIndex++;
|
|
128
|
+
return this.rerender();
|
|
129
|
+
}
|
|
130
|
+
// Enter/Space to select
|
|
131
|
+
if (isEnter(data) || isSpace(data)) {
|
|
132
|
+
const selectedMascot = MASCOT_OPTIONS[this.state.selectedIndex];
|
|
133
|
+
setSetting('mascot', selectedMascot);
|
|
134
|
+
return this.close({ mascotChanged: selectedMascot });
|
|
135
|
+
}
|
|
136
|
+
return this.noAction();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mascot Overlay
|
|
3
|
+
*
|
|
4
|
+
* Standalone mascot selection overlay.
|
|
5
|
+
* Accessible via /mascot command or from Config overlay.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - All mascot expressions
|
|
9
|
+
* - Live preview
|
|
10
|
+
* - Persists selection to settings
|
|
11
|
+
*/
|
|
12
|
+
import { type MascotSetting } from './mascot/index.js';
|
|
13
|
+
export interface MascotOverlayOptions {
|
|
14
|
+
/** Current mascot setting (for highlighting current selection) */
|
|
15
|
+
currentMascot?: MascotSetting;
|
|
16
|
+
}
|
|
17
|
+
export interface MascotOverlayResult {
|
|
18
|
+
/** Selected mascot (if changed) */
|
|
19
|
+
mascotChanged?: MascotSetting;
|
|
20
|
+
}
|
|
21
|
+
export declare function showMascotOverlay(options?: MascotOverlayOptions): Promise<MascotOverlayResult>;
|