claude-code-plus-plus 0.1.0 → 0.2.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/dist/app.d.ts +52 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +318 -0
- package/dist/app.js.map +1 -0
- package/dist/cli/commands/index.d.ts +5 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +5 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/start.d.ts +16 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +20 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +31 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +112 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/validators.d.ts +46 -0
- package/dist/cli/validators.d.ts.map +1 -0
- package/dist/cli/validators.js +149 -0
- package/dist/cli/validators.js.map +1 -0
- package/dist/config/defaults.d.ts +14 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +27 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +12 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +38 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +107 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +47 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +86 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +15 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +32 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/index.d.ts +13 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +13 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/session/index.d.ts +7 -0
- package/dist/core/session/index.d.ts.map +1 -0
- package/dist/core/session/index.js +6 -0
- package/dist/core/session/index.js.map +1 -0
- package/dist/core/session/session-manager.d.ts +46 -0
- package/dist/core/session/session-manager.d.ts.map +1 -0
- package/dist/core/session/session-manager.js +245 -0
- package/dist/core/session/session-manager.js.map +1 -0
- package/dist/core/session/session.d.ts +44 -0
- package/dist/core/session/session.d.ts.map +1 -0
- package/dist/core/session/session.js +78 -0
- package/dist/core/session/session.js.map +1 -0
- package/dist/core/terminal/index.d.ts +7 -0
- package/dist/core/terminal/index.d.ts.map +1 -0
- package/dist/core/terminal/index.js +6 -0
- package/dist/core/terminal/index.js.map +1 -0
- package/dist/core/terminal/terminal-manager.d.ts +36 -0
- package/dist/core/terminal/terminal-manager.d.ts.map +1 -0
- package/dist/core/terminal/terminal-manager.js +182 -0
- package/dist/core/terminal/terminal-manager.js.map +1 -0
- package/dist/core/terminal/terminal.d.ts +27 -0
- package/dist/core/terminal/terminal.d.ts.map +1 -0
- package/dist/core/terminal/terminal.js +38 -0
- package/dist/core/terminal/terminal.js.map +1 -0
- package/dist/core/workspace/index.d.ts +7 -0
- package/dist/core/workspace/index.d.ts.map +1 -0
- package/dist/core/workspace/index.js +6 -0
- package/dist/core/workspace/index.js.map +1 -0
- package/dist/core/workspace/workspace-manager.d.ts +59 -0
- package/dist/core/workspace/workspace-manager.d.ts.map +1 -0
- package/dist/core/workspace/workspace-manager.js +224 -0
- package/dist/core/workspace/workspace-manager.js.map +1 -0
- package/dist/core/workspace/workspace.d.ts +56 -0
- package/dist/core/workspace/workspace.d.ts.map +1 -0
- package/dist/core/workspace/workspace.js +96 -0
- package/dist/core/workspace/workspace.js.map +1 -0
- package/dist/core/worktree/index.d.ts +7 -0
- package/dist/core/worktree/index.d.ts.map +1 -0
- package/dist/core/worktree/index.js +6 -0
- package/dist/core/worktree/index.js.map +1 -0
- package/dist/core/worktree/worktree-manager.d.ts +47 -0
- package/dist/core/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/core/worktree/worktree-manager.js +170 -0
- package/dist/core/worktree/worktree-manager.js.map +1 -0
- package/dist/core/worktree/worktree.d.ts +35 -0
- package/dist/core/worktree/worktree.d.ts.map +1 -0
- package/dist/core/worktree/worktree.js +50 -0
- package/dist/core/worktree/worktree.js.map +1 -0
- package/dist/events/bus.d.ts +76 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +223 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/handlers/index.d.ts +28 -0
- package/dist/events/handlers/index.d.ts.map +1 -0
- package/dist/events/handlers/index.js +44 -0
- package/dist/events/handlers/index.js.map +1 -0
- package/dist/events/handlers/session-events.d.ts +12 -0
- package/dist/events/handlers/session-events.d.ts.map +1 -0
- package/dist/events/handlers/session-events.js +38 -0
- package/dist/events/handlers/session-events.js.map +1 -0
- package/dist/events/handlers/terminal-events.d.ts +12 -0
- package/dist/events/handlers/terminal-events.d.ts.map +1 -0
- package/dist/events/handlers/terminal-events.js +37 -0
- package/dist/events/handlers/terminal-events.js.map +1 -0
- package/dist/events/handlers/ui-events.d.ts +11 -0
- package/dist/events/handlers/ui-events.d.ts.map +1 -0
- package/dist/events/handlers/ui-events.js +202 -0
- package/dist/events/handlers/ui-events.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +10 -0
- package/dist/events/index.js.map +1 -0
- package/dist/git/index.d.ts +5 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +5 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/worktree.d.ts +44 -0
- package/dist/git/worktree.d.ts.map +1 -0
- package/dist/git/worktree.js +158 -0
- package/dist/git/worktree.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -144
- package/dist/index.js.map +1 -1
- package/dist/launcher/index.d.ts +24 -0
- package/dist/launcher/index.d.ts.map +1 -0
- package/dist/launcher/index.js +226 -0
- package/dist/launcher/index.js.map +1 -0
- package/dist/multiplexer/base.d.ts +73 -0
- package/dist/multiplexer/base.d.ts.map +1 -0
- package/dist/multiplexer/base.js +68 -0
- package/dist/multiplexer/base.js.map +1 -0
- package/dist/multiplexer/factory.d.ts +28 -0
- package/dist/multiplexer/factory.d.ts.map +1 -0
- package/dist/multiplexer/factory.js +72 -0
- package/dist/multiplexer/factory.js.map +1 -0
- package/dist/multiplexer/index.d.ts +14 -0
- package/dist/multiplexer/index.d.ts.map +1 -0
- package/dist/multiplexer/index.js +15 -0
- package/dist/multiplexer/index.js.map +1 -0
- package/dist/multiplexer/tmux/index.d.ts +9 -0
- package/dist/multiplexer/tmux/index.d.ts.map +1 -0
- package/dist/multiplexer/tmux/index.js +7 -0
- package/dist/multiplexer/tmux/index.js.map +1 -0
- package/dist/multiplexer/tmux/tmux-commands.d.ts +96 -0
- package/dist/multiplexer/tmux/tmux-commands.d.ts.map +1 -0
- package/dist/multiplexer/tmux/tmux-commands.js +282 -0
- package/dist/multiplexer/tmux/tmux-commands.js.map +1 -0
- package/dist/multiplexer/tmux/tmux-config.d.ts +57 -0
- package/dist/multiplexer/tmux/tmux-config.d.ts.map +1 -0
- package/dist/multiplexer/tmux/tmux-config.js +103 -0
- package/dist/multiplexer/tmux/tmux-config.js.map +1 -0
- package/dist/multiplexer/tmux/tmux-multiplexer.d.ts +94 -0
- package/dist/multiplexer/tmux/tmux-multiplexer.d.ts.map +1 -0
- package/dist/multiplexer/tmux/tmux-multiplexer.js +302 -0
- package/dist/multiplexer/tmux/tmux-multiplexer.js.map +1 -0
- package/dist/multiplexer/windows/index.d.ts +5 -0
- package/dist/multiplexer/windows/index.d.ts.map +1 -0
- package/dist/multiplexer/windows/index.js +5 -0
- package/dist/multiplexer/windows/index.js.map +1 -0
- package/dist/multiplexer/windows/windows-multiplexer.d.ts +61 -0
- package/dist/multiplexer/windows/windows-multiplexer.d.ts.map +1 -0
- package/dist/multiplexer/windows/windows-multiplexer.js +151 -0
- package/dist/multiplexer/windows/windows-multiplexer.js.map +1 -0
- package/dist/platform/clipboard.d.ts +26 -0
- package/dist/platform/clipboard.d.ts.map +1 -0
- package/dist/platform/clipboard.js +154 -0
- package/dist/platform/clipboard.js.map +1 -0
- package/dist/platform/detector.d.ts +78 -0
- package/dist/platform/detector.d.ts.map +1 -0
- package/dist/platform/detector.js +169 -0
- package/dist/platform/detector.js.map +1 -0
- package/dist/platform/index.d.ts +14 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +15 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/paths.d.ts +63 -0
- package/dist/platform/paths.d.ts.map +1 -0
- package/dist/platform/paths.js +149 -0
- package/dist/platform/paths.js.map +1 -0
- package/dist/platform/shell.d.ts +43 -0
- package/dist/platform/shell.d.ts.map +1 -0
- package/dist/platform/shell.js +187 -0
- package/dist/platform/shell.js.map +1 -0
- package/dist/services/claude/claude-detector.d.ts +37 -0
- package/dist/services/claude/claude-detector.d.ts.map +1 -0
- package/dist/services/claude/claude-detector.js +83 -0
- package/dist/services/claude/claude-detector.js.map +1 -0
- package/dist/services/claude/claude-service.d.ts +57 -0
- package/dist/services/claude/claude-service.d.ts.map +1 -0
- package/dist/services/claude/claude-service.js +108 -0
- package/dist/services/claude/claude-service.js.map +1 -0
- package/dist/services/claude/index.d.ts +7 -0
- package/dist/services/claude/index.d.ts.map +1 -0
- package/dist/services/claude/index.js +6 -0
- package/dist/services/claude/index.js.map +1 -0
- package/dist/services/git/branch-service.d.ts +64 -0
- package/dist/services/git/branch-service.d.ts.map +1 -0
- package/dist/services/git/branch-service.js +217 -0
- package/dist/services/git/branch-service.js.map +1 -0
- package/dist/services/git/git-service.d.ts +44 -0
- package/dist/services/git/git-service.d.ts.map +1 -0
- package/dist/services/git/git-service.js +145 -0
- package/dist/services/git/git-service.js.map +1 -0
- package/dist/services/git/index.d.ts +8 -0
- package/dist/services/git/index.d.ts.map +1 -0
- package/dist/services/git/index.js +7 -0
- package/dist/services/git/index.js.map +1 -0
- package/dist/services/git/worktree-service.d.ts +61 -0
- package/dist/services/git/worktree-service.d.ts.map +1 -0
- package/dist/services/git/worktree-service.js +243 -0
- package/dist/services/git/worktree-service.js.map +1 -0
- package/dist/services/index.d.ts +12 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +12 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/process/index.d.ts +8 -0
- package/dist/services/process/index.d.ts.map +1 -0
- package/dist/services/process/index.js +6 -0
- package/dist/services/process/index.js.map +1 -0
- package/dist/services/process/process-monitor.d.ts +98 -0
- package/dist/services/process/process-monitor.d.ts.map +1 -0
- package/dist/services/process/process-monitor.js +173 -0
- package/dist/services/process/process-monitor.js.map +1 -0
- package/dist/services/process/process-spawner.d.ts +55 -0
- package/dist/services/process/process-spawner.d.ts.map +1 -0
- package/dist/services/process/process-spawner.js +93 -0
- package/dist/services/process/process-spawner.js.map +1 -0
- package/dist/sidebar/app.d.ts +70 -0
- package/dist/sidebar/app.d.ts.map +1 -0
- package/dist/sidebar/app.js +1203 -0
- package/dist/sidebar/app.js.map +1 -0
- package/dist/sidebar/index.d.ts +8 -0
- package/dist/sidebar/index.d.ts.map +1 -0
- package/dist/sidebar/index.js +26 -0
- package/dist/sidebar/index.js.map +1 -0
- package/dist/sidebar/input.d.ts +33 -0
- package/dist/sidebar/input.d.ts.map +1 -0
- package/dist/sidebar/input.js +153 -0
- package/dist/sidebar/input.js.map +1 -0
- package/dist/sidebar/render.d.ts +73 -0
- package/dist/sidebar/render.d.ts.map +1 -0
- package/dist/sidebar/render.js +403 -0
- package/dist/sidebar/render.js.map +1 -0
- package/dist/state/actions.d.ts +49 -0
- package/dist/state/actions.d.ts.map +1 -0
- package/dist/state/actions.js +512 -0
- package/dist/state/actions.js.map +1 -0
- package/dist/state/index.d.ts +16 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +28 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/middleware/index.d.ts +7 -0
- package/dist/state/middleware/index.d.ts.map +1 -0
- package/dist/state/middleware/index.js +6 -0
- package/dist/state/middleware/index.js.map +1 -0
- package/dist/state/middleware/logger.d.ts +22 -0
- package/dist/state/middleware/logger.d.ts.map +1 -0
- package/dist/state/middleware/logger.js +45 -0
- package/dist/state/middleware/logger.js.map +1 -0
- package/dist/state/middleware/persistence.d.ts +29 -0
- package/dist/state/middleware/persistence.d.ts.map +1 -0
- package/dist/state/middleware/persistence.js +71 -0
- package/dist/state/middleware/persistence.js.map +1 -0
- package/dist/state/persistence/file-adapter.d.ts +48 -0
- package/dist/state/persistence/file-adapter.d.ts.map +1 -0
- package/dist/state/persistence/file-adapter.js +96 -0
- package/dist/state/persistence/file-adapter.js.map +1 -0
- package/dist/state/persistence/index.d.ts +8 -0
- package/dist/state/persistence/index.d.ts.map +1 -0
- package/dist/state/persistence/index.js +6 -0
- package/dist/state/persistence/index.js.map +1 -0
- package/dist/state/persistence/serializer.d.ts +41 -0
- package/dist/state/persistence/serializer.d.ts.map +1 -0
- package/dist/state/persistence/serializer.js +114 -0
- package/dist/state/persistence/serializer.js.map +1 -0
- package/dist/state/selectors.d.ts +67 -0
- package/dist/state/selectors.d.ts.map +1 -0
- package/dist/state/selectors.js +177 -0
- package/dist/state/selectors.js.map +1 -0
- package/dist/state/store.d.ts +86 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +161 -0
- package/dist/state/store.js.map +1 -0
- package/dist/state/types.d.ts +269 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +7 -0
- package/dist/state/types.js.map +1 -0
- package/dist/terminal/bar-handler.d.ts +15 -0
- package/dist/terminal/bar-handler.d.ts.map +1 -0
- package/dist/terminal/bar-handler.js +242 -0
- package/dist/terminal/bar-handler.js.map +1 -0
- package/dist/terminal/bar-render.d.ts +33 -0
- package/dist/terminal/bar-render.d.ts.map +1 -0
- package/dist/terminal/bar-render.js +122 -0
- package/dist/terminal/bar-render.js.map +1 -0
- package/dist/terminal/index.d.ts +8 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +9 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/tmux/commands.d.ts +26 -0
- package/dist/tmux/commands.d.ts.map +1 -0
- package/dist/tmux/commands.js +67 -0
- package/dist/tmux/commands.js.map +1 -0
- package/dist/tmux/index.d.ts +6 -0
- package/dist/tmux/index.d.ts.map +1 -0
- package/dist/tmux/index.js +16 -0
- package/dist/tmux/index.js.map +1 -0
- package/dist/tmux/pane.d.ts +111 -0
- package/dist/tmux/pane.d.ts.map +1 -0
- package/dist/tmux/pane.js +206 -0
- package/dist/tmux/pane.js.map +1 -0
- package/dist/types/config.d.ts +103 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/entities.d.ts +88 -0
- package/dist/types/entities.d.ts.map +1 -0
- package/dist/types/entities.js +8 -0
- package/dist/types/entities.js.map +1 -0
- package/dist/types/events.d.ts +156 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +8 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/multiplexer.d.ts +238 -0
- package/dist/types/multiplexer.d.ts.map +1 -0
- package/dist/types/multiplexer.js +8 -0
- package/dist/types/multiplexer.js.map +1 -0
- package/dist/types.d.ts +67 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -2
- package/dist/types.js.map +1 -1
- package/dist/ui/components/base.d.ts +155 -0
- package/dist/ui/components/base.d.ts.map +1 -0
- package/dist/ui/components/base.js +269 -0
- package/dist/ui/components/base.js.map +1 -0
- package/dist/ui/components/index.d.ts +10 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/index.js +10 -0
- package/dist/ui/components/index.js.map +1 -0
- package/dist/ui/components/input-field.d.ts +98 -0
- package/dist/ui/components/input-field.d.ts.map +1 -0
- package/dist/ui/components/input-field.js +274 -0
- package/dist/ui/components/input-field.js.map +1 -0
- package/dist/ui/components/list.d.ts +94 -0
- package/dist/ui/components/list.d.ts.map +1 -0
- package/dist/ui/components/list.js +294 -0
- package/dist/ui/components/list.js.map +1 -0
- package/dist/ui/components/modal.d.ts +83 -0
- package/dist/ui/components/modal.d.ts.map +1 -0
- package/dist/ui/components/modal.js +249 -0
- package/dist/ui/components/modal.js.map +1 -0
- package/dist/ui/components/tabs.d.ts +97 -0
- package/dist/ui/components/tabs.d.ts.map +1 -0
- package/dist/ui/components/tabs.js +252 -0
- package/dist/ui/components/tabs.js.map +1 -0
- package/dist/ui/components/text.d.ts +60 -0
- package/dist/ui/components/text.d.ts.map +1 -0
- package/dist/ui/components/text.js +224 -0
- package/dist/ui/components/text.js.map +1 -0
- package/dist/ui/index.d.ts +12 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +18 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/input/index.d.ts +8 -0
- package/dist/ui/input/index.d.ts.map +1 -0
- package/dist/ui/input/index.js +8 -0
- package/dist/ui/input/index.js.map +1 -0
- package/dist/ui/input/input-manager.d.ts +83 -0
- package/dist/ui/input/input-manager.d.ts.map +1 -0
- package/dist/ui/input/input-manager.js +200 -0
- package/dist/ui/input/input-manager.js.map +1 -0
- package/dist/ui/input/keybindings.d.ts +47 -0
- package/dist/ui/input/keybindings.d.ts.map +1 -0
- package/dist/ui/input/keybindings.js +168 -0
- package/dist/ui/input/keybindings.js.map +1 -0
- package/dist/ui/input/keyboard.d.ts +24 -0
- package/dist/ui/input/keyboard.d.ts.map +1 -0
- package/dist/ui/input/keyboard.js +230 -0
- package/dist/ui/input/keyboard.js.map +1 -0
- package/dist/ui/input/mouse.d.ts +44 -0
- package/dist/ui/input/mouse.d.ts.map +1 -0
- package/dist/ui/input/mouse.js +161 -0
- package/dist/ui/input/mouse.js.map +1 -0
- package/dist/ui/layout/box.d.ts +63 -0
- package/dist/ui/layout/box.d.ts.map +1 -0
- package/dist/ui/layout/box.js +160 -0
- package/dist/ui/layout/box.js.map +1 -0
- package/dist/ui/layout/constraints.d.ts +77 -0
- package/dist/ui/layout/constraints.d.ts.map +1 -0
- package/dist/ui/layout/constraints.js +154 -0
- package/dist/ui/layout/constraints.js.map +1 -0
- package/dist/ui/layout/flex.d.ts +59 -0
- package/dist/ui/layout/flex.d.ts.map +1 -0
- package/dist/ui/layout/flex.js +163 -0
- package/dist/ui/layout/flex.js.map +1 -0
- package/dist/ui/layout/index.d.ts +7 -0
- package/dist/ui/layout/index.d.ts.map +1 -0
- package/dist/ui/layout/index.js +7 -0
- package/dist/ui/layout/index.js.map +1 -0
- package/dist/ui/modals/delete-modal.d.ts +27 -0
- package/dist/ui/modals/delete-modal.d.ts.map +1 -0
- package/dist/ui/modals/delete-modal.js +59 -0
- package/dist/ui/modals/delete-modal.js.map +1 -0
- package/dist/ui/modals/index.d.ts +7 -0
- package/dist/ui/modals/index.d.ts.map +1 -0
- package/dist/ui/modals/index.js +7 -0
- package/dist/ui/modals/index.js.map +1 -0
- package/dist/ui/modals/input-modal.d.ts +66 -0
- package/dist/ui/modals/input-modal.d.ts.map +1 -0
- package/dist/ui/modals/input-modal.js +185 -0
- package/dist/ui/modals/input-modal.js.map +1 -0
- package/dist/ui/modals/quit-modal.d.ts +30 -0
- package/dist/ui/modals/quit-modal.d.ts.map +1 -0
- package/dist/ui/modals/quit-modal.js +65 -0
- package/dist/ui/modals/quit-modal.js.map +1 -0
- package/dist/ui/renderer/ansi.d.ts +206 -0
- package/dist/ui/renderer/ansi.d.ts.map +1 -0
- package/dist/ui/renderer/ansi.js +318 -0
- package/dist/ui/renderer/ansi.js.map +1 -0
- package/dist/ui/renderer/canvas.d.ts +126 -0
- package/dist/ui/renderer/canvas.d.ts.map +1 -0
- package/dist/ui/renderer/canvas.js +346 -0
- package/dist/ui/renderer/canvas.js.map +1 -0
- package/dist/ui/renderer/colors.d.ts +65 -0
- package/dist/ui/renderer/colors.d.ts.map +1 -0
- package/dist/ui/renderer/colors.js +260 -0
- package/dist/ui/renderer/colors.js.map +1 -0
- package/dist/ui/renderer/index.d.ts +8 -0
- package/dist/ui/renderer/index.d.ts.map +1 -0
- package/dist/ui/renderer/index.js +8 -0
- package/dist/ui/renderer/index.js.map +1 -0
- package/dist/ui/renderer/symbols.d.ts +176 -0
- package/dist/ui/renderer/symbols.d.ts.map +1 -0
- package/dist/ui/renderer/symbols.js +246 -0
- package/dist/ui/renderer/symbols.js.map +1 -0
- package/dist/ui/views/index.d.ts +7 -0
- package/dist/ui/views/index.d.ts.map +1 -0
- package/dist/ui/views/index.js +7 -0
- package/dist/ui/views/index.js.map +1 -0
- package/dist/ui/views/sidebar-view.d.ts +89 -0
- package/dist/ui/views/sidebar-view.d.ts.map +1 -0
- package/dist/ui/views/sidebar-view.js +259 -0
- package/dist/ui/views/sidebar-view.js.map +1 -0
- package/dist/ui/views/terminal-bar-view.d.ts +67 -0
- package/dist/ui/views/terminal-bar-view.d.ts.map +1 -0
- package/dist/ui/views/terminal-bar-view.js +172 -0
- package/dist/ui/views/terminal-bar-view.js.map +1 -0
- package/dist/ui/views/welcome-view.d.ts +34 -0
- package/dist/ui/views/welcome-view.d.ts.map +1 -0
- package/dist/ui/views/welcome-view.js +116 -0
- package/dist/ui/views/welcome-view.js.map +1 -0
- package/dist/utils/async.d.ts +68 -0
- package/dist/utils/async.d.ts.map +1 -0
- package/dist/utils/async.js +138 -0
- package/dist/utils/async.js.map +1 -0
- package/dist/utils/errors.d.ts +136 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +224 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/id.d.ts +51 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +79 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +212 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/string.d.ts +71 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/string.js +163 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/utils/validation.d.ts +72 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +196 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +4 -4
package/dist/utils/id.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ID Generation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Functions for generating unique identifiers.
|
|
5
|
+
*/
|
|
6
|
+
import { randomBytes, createHash } from 'crypto';
|
|
7
|
+
/**
|
|
8
|
+
* Generate a random ID using crypto random bytes
|
|
9
|
+
* @param length - Length of the ID (default: 8)
|
|
10
|
+
* @returns Random alphanumeric string
|
|
11
|
+
*/
|
|
12
|
+
export function generateId(length = 8) {
|
|
13
|
+
const bytes = randomBytes(Math.ceil(length / 2));
|
|
14
|
+
return bytes.toString('hex').slice(0, length);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate a short random ID suitable for display
|
|
18
|
+
* @returns 6-character alphanumeric string
|
|
19
|
+
*/
|
|
20
|
+
export function generateShortId() {
|
|
21
|
+
return generateId(6);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate a session-safe ID (alphanumeric, starts with letter)
|
|
25
|
+
* Useful for tmux session names which have restrictions
|
|
26
|
+
* @returns Session-safe ID string
|
|
27
|
+
*/
|
|
28
|
+
export function generateSessionId() {
|
|
29
|
+
const chars = 'abcdefghijklmnopqrstuvwxyz';
|
|
30
|
+
const firstChar = chars[Math.floor(Math.random() * chars.length)];
|
|
31
|
+
return firstChar + generateId(7);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a deterministic hash from a string
|
|
35
|
+
* @param input - String to hash
|
|
36
|
+
* @param length - Length of output hash (default: 8)
|
|
37
|
+
* @returns Hex hash string
|
|
38
|
+
*/
|
|
39
|
+
export function hashString(input, length = 8) {
|
|
40
|
+
const hash = createHash('md5').update(input).digest('hex');
|
|
41
|
+
return hash.slice(0, length);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a unique project identifier from a path
|
|
45
|
+
* Format: basename-hash
|
|
46
|
+
* @param projectPath - Full path to the project
|
|
47
|
+
* @returns Unique project identifier
|
|
48
|
+
*/
|
|
49
|
+
export function createProjectId(projectPath) {
|
|
50
|
+
const basename = projectPath.split('/').pop() || 'project';
|
|
51
|
+
const hash = hashString(projectPath, 6);
|
|
52
|
+
return `${sanitizeForId(basename)}-${hash}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Sanitize a string to be safe for use in IDs
|
|
56
|
+
* Replaces non-alphanumeric characters with dashes
|
|
57
|
+
* @param input - String to sanitize
|
|
58
|
+
* @returns Sanitized string
|
|
59
|
+
*/
|
|
60
|
+
export function sanitizeForId(input) {
|
|
61
|
+
return input
|
|
62
|
+
.toLowerCase()
|
|
63
|
+
.replace(/[^a-z0-9]/g, '-')
|
|
64
|
+
.replace(/-+/g, '-')
|
|
65
|
+
.replace(/^-|-$/g, '')
|
|
66
|
+
.slice(0, 32);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create a tmux-safe session name
|
|
70
|
+
* @param projectName - Name of the project
|
|
71
|
+
* @param projectPath - Full path to the project
|
|
72
|
+
* @returns Tmux-safe session name
|
|
73
|
+
*/
|
|
74
|
+
export function createTmuxSessionName(projectName, projectPath) {
|
|
75
|
+
const sanitized = sanitizeForId(projectName);
|
|
76
|
+
const hash = hashString(projectPath, 6);
|
|
77
|
+
return `cpp-${sanitized}-${hash}`;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG,4BAA4B,CAAC;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,OAAO,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,SAAiB,CAAC;IAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;IAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxC,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,WAAmB;IAEnB,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxC,OAAO,OAAO,SAAS,IAAI,IAAI,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utils Module
|
|
3
|
+
*
|
|
4
|
+
* Shared utility functions used across the application.
|
|
5
|
+
* This module depends only on the types module.
|
|
6
|
+
*/
|
|
7
|
+
export { generateId, generateShortId, generateSessionId, hashString, createProjectId, sanitizeForId, createTmuxSessionName, } from './id';
|
|
8
|
+
export { truncate, pad, wrap, slugify, stripAnsi, visibleWidth, indent, dedent, capitalize, titleCase, } from './string';
|
|
9
|
+
export { delay, debounce, throttle, retry, withTimeout, mapWithConcurrency, createDeferred, } from './async';
|
|
10
|
+
export type { Unsubscribe } from './async';
|
|
11
|
+
export { AppError, ConfigError, MultiplexerError, GitError, WorktreeError, SessionError, TerminalError, StateError, UIError, ValidationError, NotFoundError, isAppError, wrapError, getErrorMessage, } from './errors';
|
|
12
|
+
export { Logger, getLogger, setDefaultLogger, initializeLogger, } from './logger';
|
|
13
|
+
export type { LogLevel, LoggerOptions } from './logger';
|
|
14
|
+
export { isValidBranchName, isValidSessionName, isValidTmuxSessionName, isValidPath, isValidTerminalTitle, sanitizeBranchName, sanitizeSessionName, isDefined, isNonEmptyString, isPositiveInteger, isNonNegativeInteger, assert, assertDefined, } from './validation';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,aAAa,EACb,qBAAqB,GACtB,MAAM,MAAM,CAAC;AAGd,OAAO,EACL,QAAQ,EACR,GAAG,EACH,IAAI,EACJ,OAAO,EACP,SAAS,EACT,YAAY,EACZ,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,GACV,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,aAAa,EACb,UAAU,EACV,OAAO,EACP,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,GAChB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,MAAM,EACN,aAAa,GACd,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utils Module
|
|
3
|
+
*
|
|
4
|
+
* Shared utility functions used across the application.
|
|
5
|
+
* This module depends only on the types module.
|
|
6
|
+
*/
|
|
7
|
+
// ID generation
|
|
8
|
+
export { generateId, generateShortId, generateSessionId, hashString, createProjectId, sanitizeForId, createTmuxSessionName, } from './id';
|
|
9
|
+
// String manipulation
|
|
10
|
+
export { truncate, pad, wrap, slugify, stripAnsi, visibleWidth, indent, dedent, capitalize, titleCase, } from './string';
|
|
11
|
+
// Async utilities
|
|
12
|
+
export { delay, debounce, throttle, retry, withTimeout, mapWithConcurrency, createDeferred, } from './async';
|
|
13
|
+
// Error handling
|
|
14
|
+
export { AppError, ConfigError, MultiplexerError, GitError, WorktreeError, SessionError, TerminalError, StateError, UIError, ValidationError, NotFoundError, isAppError, wrapError, getErrorMessage, } from './errors';
|
|
15
|
+
// Logging
|
|
16
|
+
export { Logger, getLogger, setDefaultLogger, initializeLogger, } from './logger';
|
|
17
|
+
// Validation
|
|
18
|
+
export { isValidBranchName, isValidSessionName, isValidTmuxSessionName, isValidPath, isValidTerminalTitle, sanitizeBranchName, sanitizeSessionName, isDefined, isNonEmptyString, isPositiveInteger, isNonNegativeInteger, assert, assertDefined, } from './validation';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gBAAgB;AAChB,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,aAAa,EACb,qBAAqB,GACtB,MAAM,MAAM,CAAC;AAEd,sBAAsB;AACtB,OAAO,EACL,QAAQ,EACR,GAAG,EACH,IAAI,EACJ,OAAO,EACP,SAAS,EACT,YAAY,EACZ,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,GACV,MAAM,UAAU,CAAC;AAElB,kBAAkB;AAClB,OAAO,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,GACf,MAAM,SAAS,CAAC;AAGjB,iBAAiB;AACjB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,aAAa,EACb,UAAU,EACV,OAAO,EACP,eAAe,EACf,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,GAChB,MAAM,UAAU,CAAC;AAElB,UAAU;AACV,OAAO,EACL,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAGlB,aAAa;AACb,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,MAAM,EACN,aAAa,GACd,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging with levels and optional file output.
|
|
5
|
+
*/
|
|
6
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
7
|
+
export interface LoggerOptions {
|
|
8
|
+
/** Minimum log level to output */
|
|
9
|
+
level: LogLevel;
|
|
10
|
+
/** Context/component name for the logger */
|
|
11
|
+
context?: string;
|
|
12
|
+
/** File path to write logs (optional) */
|
|
13
|
+
filePath?: string;
|
|
14
|
+
/** Whether to include timestamps */
|
|
15
|
+
timestamps?: boolean;
|
|
16
|
+
/** Whether to output to console (disabled in TUI) */
|
|
17
|
+
console?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Logger class for structured logging
|
|
21
|
+
*/
|
|
22
|
+
export declare class Logger {
|
|
23
|
+
private readonly options;
|
|
24
|
+
private fileInitialized;
|
|
25
|
+
constructor(options: LoggerOptions);
|
|
26
|
+
/**
|
|
27
|
+
* Check if a log level should be output
|
|
28
|
+
*/
|
|
29
|
+
private shouldLog;
|
|
30
|
+
/**
|
|
31
|
+
* Initialize the log file if needed
|
|
32
|
+
*/
|
|
33
|
+
private initializeFile;
|
|
34
|
+
/**
|
|
35
|
+
* Write a log entry
|
|
36
|
+
*/
|
|
37
|
+
private log;
|
|
38
|
+
/**
|
|
39
|
+
* Log a debug message
|
|
40
|
+
*/
|
|
41
|
+
debug(message: string, ...args: unknown[]): void;
|
|
42
|
+
/**
|
|
43
|
+
* Log an info message
|
|
44
|
+
*/
|
|
45
|
+
info(message: string, ...args: unknown[]): void;
|
|
46
|
+
/**
|
|
47
|
+
* Log a warning message
|
|
48
|
+
*/
|
|
49
|
+
warn(message: string, ...args: unknown[]): void;
|
|
50
|
+
/**
|
|
51
|
+
* Log an error message
|
|
52
|
+
*/
|
|
53
|
+
error(message: string, error?: Error | unknown): void;
|
|
54
|
+
/**
|
|
55
|
+
* Create a child logger with additional context
|
|
56
|
+
*/
|
|
57
|
+
child(context: string): Logger;
|
|
58
|
+
/**
|
|
59
|
+
* Create a logger with a specific level
|
|
60
|
+
*/
|
|
61
|
+
withLevel(level: LogLevel): Logger;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the default logger
|
|
65
|
+
*/
|
|
66
|
+
export declare function getLogger(): Logger;
|
|
67
|
+
/**
|
|
68
|
+
* Set the default logger
|
|
69
|
+
*/
|
|
70
|
+
export declare function setDefaultLogger(logger: Logger): void;
|
|
71
|
+
/**
|
|
72
|
+
* Create and set the default logger with options
|
|
73
|
+
*/
|
|
74
|
+
export declare function initializeLogger(options: LoggerOptions): Logger;
|
|
75
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS3D,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,KAAK,EAAE,QAAQ,CAAC;IAChB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA+CD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,eAAe,CAAkB;gBAE7B,OAAO,EAAE,aAAa;IAUlC;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,GAAG;IA4CX;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI;IAYrD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAW9B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAMnC;AAKD;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CASlC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAG/D"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides structured logging with levels and optional file output.
|
|
5
|
+
*/
|
|
6
|
+
import { appendFileSync, mkdirSync, existsSync } from 'fs';
|
|
7
|
+
import { dirname } from 'path';
|
|
8
|
+
const LOG_LEVEL_PRIORITY = {
|
|
9
|
+
debug: 0,
|
|
10
|
+
info: 1,
|
|
11
|
+
warn: 2,
|
|
12
|
+
error: 3,
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Format a log entry for output
|
|
16
|
+
*/
|
|
17
|
+
function formatLogEntry(entry, includeTimestamp) {
|
|
18
|
+
const parts = [];
|
|
19
|
+
if (includeTimestamp) {
|
|
20
|
+
parts.push(`[${entry.timestamp.toISOString()}]`);
|
|
21
|
+
}
|
|
22
|
+
parts.push(`[${entry.level.toUpperCase()}]`);
|
|
23
|
+
if (entry.context) {
|
|
24
|
+
parts.push(`[${entry.context}]`);
|
|
25
|
+
}
|
|
26
|
+
parts.push(entry.message);
|
|
27
|
+
if (entry.args.length > 0) {
|
|
28
|
+
const argsStr = entry.args
|
|
29
|
+
.map((arg) => {
|
|
30
|
+
if (typeof arg === 'object') {
|
|
31
|
+
try {
|
|
32
|
+
return JSON.stringify(arg, null, 2);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return String(arg);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return String(arg);
|
|
39
|
+
})
|
|
40
|
+
.join(' ');
|
|
41
|
+
parts.push(argsStr);
|
|
42
|
+
}
|
|
43
|
+
return parts.join(' ');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Logger class for structured logging
|
|
47
|
+
*/
|
|
48
|
+
export class Logger {
|
|
49
|
+
options;
|
|
50
|
+
fileInitialized = false;
|
|
51
|
+
constructor(options) {
|
|
52
|
+
this.options = {
|
|
53
|
+
level: options.level,
|
|
54
|
+
context: options.context || '',
|
|
55
|
+
filePath: options.filePath || '',
|
|
56
|
+
timestamps: options.timestamps ?? true,
|
|
57
|
+
console: options.console ?? false,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if a log level should be output
|
|
62
|
+
*/
|
|
63
|
+
shouldLog(level) {
|
|
64
|
+
return LOG_LEVEL_PRIORITY[level] >= LOG_LEVEL_PRIORITY[this.options.level];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Initialize the log file if needed
|
|
68
|
+
*/
|
|
69
|
+
initializeFile() {
|
|
70
|
+
if (this.fileInitialized || !this.options.filePath) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const dir = dirname(this.options.filePath);
|
|
75
|
+
if (!existsSync(dir)) {
|
|
76
|
+
mkdirSync(dir, { recursive: true });
|
|
77
|
+
}
|
|
78
|
+
this.fileInitialized = true;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Silently fail - logging should never crash the app
|
|
82
|
+
this.fileInitialized = true; // Don't retry
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Write a log entry
|
|
87
|
+
*/
|
|
88
|
+
log(level, message, args) {
|
|
89
|
+
if (!this.shouldLog(level)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const entry = {
|
|
93
|
+
timestamp: new Date(),
|
|
94
|
+
level,
|
|
95
|
+
context: this.options.context,
|
|
96
|
+
message,
|
|
97
|
+
args,
|
|
98
|
+
};
|
|
99
|
+
const formatted = formatLogEntry(entry, this.options.timestamps);
|
|
100
|
+
// Write to file if configured
|
|
101
|
+
if (this.options.filePath) {
|
|
102
|
+
this.initializeFile();
|
|
103
|
+
try {
|
|
104
|
+
appendFileSync(this.options.filePath, formatted + '\n');
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Silently fail
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Write to console if enabled (usually disabled in TUI mode)
|
|
111
|
+
if (this.options.console) {
|
|
112
|
+
switch (level) {
|
|
113
|
+
case 'error':
|
|
114
|
+
console.error(formatted);
|
|
115
|
+
break;
|
|
116
|
+
case 'warn':
|
|
117
|
+
console.warn(formatted);
|
|
118
|
+
break;
|
|
119
|
+
case 'info':
|
|
120
|
+
console.info(formatted);
|
|
121
|
+
break;
|
|
122
|
+
case 'debug':
|
|
123
|
+
console.log(formatted);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Log a debug message
|
|
130
|
+
*/
|
|
131
|
+
debug(message, ...args) {
|
|
132
|
+
this.log('debug', message, args);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Log an info message
|
|
136
|
+
*/
|
|
137
|
+
info(message, ...args) {
|
|
138
|
+
this.log('info', message, args);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Log a warning message
|
|
142
|
+
*/
|
|
143
|
+
warn(message, ...args) {
|
|
144
|
+
this.log('warn', message, args);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Log an error message
|
|
148
|
+
*/
|
|
149
|
+
error(message, error) {
|
|
150
|
+
if (error instanceof Error) {
|
|
151
|
+
this.log('error', message, [
|
|
152
|
+
{ message: error.message, stack: error.stack },
|
|
153
|
+
]);
|
|
154
|
+
}
|
|
155
|
+
else if (error !== undefined) {
|
|
156
|
+
this.log('error', message, [error]);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
this.log('error', message, []);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create a child logger with additional context
|
|
164
|
+
*/
|
|
165
|
+
child(context) {
|
|
166
|
+
const newContext = this.options.context
|
|
167
|
+
? `${this.options.context}:${context}`
|
|
168
|
+
: context;
|
|
169
|
+
return new Logger({
|
|
170
|
+
...this.options,
|
|
171
|
+
context: newContext,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Create a logger with a specific level
|
|
176
|
+
*/
|
|
177
|
+
withLevel(level) {
|
|
178
|
+
return new Logger({
|
|
179
|
+
...this.options,
|
|
180
|
+
level,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Default logger instance (will be configured by the app)
|
|
185
|
+
let defaultLogger = null;
|
|
186
|
+
/**
|
|
187
|
+
* Get the default logger
|
|
188
|
+
*/
|
|
189
|
+
export function getLogger() {
|
|
190
|
+
if (!defaultLogger) {
|
|
191
|
+
// Create a no-op logger if not initialized
|
|
192
|
+
defaultLogger = new Logger({
|
|
193
|
+
level: 'error',
|
|
194
|
+
console: false,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return defaultLogger;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Set the default logger
|
|
201
|
+
*/
|
|
202
|
+
export function setDefaultLogger(logger) {
|
|
203
|
+
defaultLogger = logger;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Create and set the default logger with options
|
|
207
|
+
*/
|
|
208
|
+
export function initializeLogger(options) {
|
|
209
|
+
defaultLogger = new Logger(options);
|
|
210
|
+
return defaultLogger;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* String Manipulation Utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Truncate a string to a maximum length, adding ellipsis if truncated
|
|
6
|
+
* @param str - String to truncate
|
|
7
|
+
* @param maxLength - Maximum length including ellipsis
|
|
8
|
+
* @param ellipsis - Ellipsis string (default: '…')
|
|
9
|
+
* @returns Truncated string
|
|
10
|
+
*/
|
|
11
|
+
export declare function truncate(str: string, maxLength: number, ellipsis?: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Pad a string to a minimum length
|
|
14
|
+
* @param str - String to pad
|
|
15
|
+
* @param length - Target length
|
|
16
|
+
* @param char - Padding character (default: ' ')
|
|
17
|
+
* @param direction - Pad direction (default: 'right')
|
|
18
|
+
* @returns Padded string
|
|
19
|
+
*/
|
|
20
|
+
export declare function pad(str: string, length: number, char?: string, direction?: 'left' | 'right' | 'center'): string;
|
|
21
|
+
/**
|
|
22
|
+
* Wrap text to a maximum width
|
|
23
|
+
* @param text - Text to wrap
|
|
24
|
+
* @param maxWidth - Maximum line width
|
|
25
|
+
* @returns Array of lines
|
|
26
|
+
*/
|
|
27
|
+
export declare function wrap(text: string, maxWidth: number): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Convert a string to a slug (lowercase, hyphenated)
|
|
30
|
+
* @param str - String to slugify
|
|
31
|
+
* @returns Slugified string
|
|
32
|
+
*/
|
|
33
|
+
export declare function slugify(str: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Strip ANSI escape codes from a string
|
|
36
|
+
* @param str - String with ANSI codes
|
|
37
|
+
* @returns Clean string without ANSI codes
|
|
38
|
+
*/
|
|
39
|
+
export declare function stripAnsi(str: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Calculate the visible width of a string (excluding ANSI codes)
|
|
42
|
+
* @param str - String to measure
|
|
43
|
+
* @returns Visible width in characters
|
|
44
|
+
*/
|
|
45
|
+
export declare function visibleWidth(str: string): number;
|
|
46
|
+
/**
|
|
47
|
+
* Indent each line of a string
|
|
48
|
+
* @param str - String to indent
|
|
49
|
+
* @param spaces - Number of spaces to indent
|
|
50
|
+
* @returns Indented string
|
|
51
|
+
*/
|
|
52
|
+
export declare function indent(str: string, spaces: number): string;
|
|
53
|
+
/**
|
|
54
|
+
* Remove common leading whitespace from all lines
|
|
55
|
+
* @param str - String to dedent
|
|
56
|
+
* @returns Dedented string
|
|
57
|
+
*/
|
|
58
|
+
export declare function dedent(str: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Capitalize the first letter of a string
|
|
61
|
+
* @param str - String to capitalize
|
|
62
|
+
* @returns Capitalized string
|
|
63
|
+
*/
|
|
64
|
+
export declare function capitalize(str: string): string;
|
|
65
|
+
/**
|
|
66
|
+
* Convert a string to title case
|
|
67
|
+
* @param str - String to convert
|
|
68
|
+
* @returns Title-cased string
|
|
69
|
+
*/
|
|
70
|
+
export declare function titleCase(str: string): string;
|
|
71
|
+
//# sourceMappingURL=string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAY,GACrB,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,MAAY,EAClB,SAAS,GAAE,MAAM,GAAG,OAAO,GAAG,QAAkB,GAC/C,MAAM,CAkBR;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAmC7D;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO3C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgB1C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK7C"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* String Manipulation Utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Truncate a string to a maximum length, adding ellipsis if truncated
|
|
6
|
+
* @param str - String to truncate
|
|
7
|
+
* @param maxLength - Maximum length including ellipsis
|
|
8
|
+
* @param ellipsis - Ellipsis string (default: '…')
|
|
9
|
+
* @returns Truncated string
|
|
10
|
+
*/
|
|
11
|
+
export function truncate(str, maxLength, ellipsis = '…') {
|
|
12
|
+
if (str.length <= maxLength) {
|
|
13
|
+
return str;
|
|
14
|
+
}
|
|
15
|
+
return str.slice(0, maxLength - ellipsis.length) + ellipsis;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Pad a string to a minimum length
|
|
19
|
+
* @param str - String to pad
|
|
20
|
+
* @param length - Target length
|
|
21
|
+
* @param char - Padding character (default: ' ')
|
|
22
|
+
* @param direction - Pad direction (default: 'right')
|
|
23
|
+
* @returns Padded string
|
|
24
|
+
*/
|
|
25
|
+
export function pad(str, length, char = ' ', direction = 'right') {
|
|
26
|
+
if (str.length >= length) {
|
|
27
|
+
return str;
|
|
28
|
+
}
|
|
29
|
+
const padding = char.repeat(length - str.length);
|
|
30
|
+
switch (direction) {
|
|
31
|
+
case 'left':
|
|
32
|
+
return padding + str;
|
|
33
|
+
case 'right':
|
|
34
|
+
return str + padding;
|
|
35
|
+
case 'center': {
|
|
36
|
+
const leftPad = Math.floor(padding.length / 2);
|
|
37
|
+
const rightPad = padding.length - leftPad;
|
|
38
|
+
return char.repeat(leftPad) + str + char.repeat(rightPad);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wrap text to a maximum width
|
|
44
|
+
* @param text - Text to wrap
|
|
45
|
+
* @param maxWidth - Maximum line width
|
|
46
|
+
* @returns Array of lines
|
|
47
|
+
*/
|
|
48
|
+
export function wrap(text, maxWidth) {
|
|
49
|
+
if (text.length <= maxWidth) {
|
|
50
|
+
return [text];
|
|
51
|
+
}
|
|
52
|
+
const words = text.split(' ');
|
|
53
|
+
const lines = [];
|
|
54
|
+
let currentLine = '';
|
|
55
|
+
for (const word of words) {
|
|
56
|
+
if (currentLine.length + word.length + 1 <= maxWidth) {
|
|
57
|
+
currentLine += (currentLine ? ' ' : '') + word;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
if (currentLine) {
|
|
61
|
+
lines.push(currentLine);
|
|
62
|
+
}
|
|
63
|
+
// Handle words longer than maxWidth
|
|
64
|
+
if (word.length > maxWidth) {
|
|
65
|
+
let remaining = word;
|
|
66
|
+
while (remaining.length > maxWidth) {
|
|
67
|
+
lines.push(remaining.slice(0, maxWidth));
|
|
68
|
+
remaining = remaining.slice(maxWidth);
|
|
69
|
+
}
|
|
70
|
+
currentLine = remaining;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
currentLine = word;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (currentLine) {
|
|
78
|
+
lines.push(currentLine);
|
|
79
|
+
}
|
|
80
|
+
return lines;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Convert a string to a slug (lowercase, hyphenated)
|
|
84
|
+
* @param str - String to slugify
|
|
85
|
+
* @returns Slugified string
|
|
86
|
+
*/
|
|
87
|
+
export function slugify(str) {
|
|
88
|
+
return str
|
|
89
|
+
.toLowerCase()
|
|
90
|
+
.trim()
|
|
91
|
+
.replace(/[^\w\s-]/g, '')
|
|
92
|
+
.replace(/[\s_-]+/g, '-')
|
|
93
|
+
.replace(/^-+|-+$/g, '');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Strip ANSI escape codes from a string
|
|
97
|
+
* @param str - String with ANSI codes
|
|
98
|
+
* @returns Clean string without ANSI codes
|
|
99
|
+
*/
|
|
100
|
+
export function stripAnsi(str) {
|
|
101
|
+
// eslint-disable-next-line no-control-regex
|
|
102
|
+
return str.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Calculate the visible width of a string (excluding ANSI codes)
|
|
106
|
+
* @param str - String to measure
|
|
107
|
+
* @returns Visible width in characters
|
|
108
|
+
*/
|
|
109
|
+
export function visibleWidth(str) {
|
|
110
|
+
return stripAnsi(str).length;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Indent each line of a string
|
|
114
|
+
* @param str - String to indent
|
|
115
|
+
* @param spaces - Number of spaces to indent
|
|
116
|
+
* @returns Indented string
|
|
117
|
+
*/
|
|
118
|
+
export function indent(str, spaces) {
|
|
119
|
+
const prefix = ' '.repeat(spaces);
|
|
120
|
+
return str
|
|
121
|
+
.split('\n')
|
|
122
|
+
.map((line) => prefix + line)
|
|
123
|
+
.join('\n');
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Remove common leading whitespace from all lines
|
|
127
|
+
* @param str - String to dedent
|
|
128
|
+
* @returns Dedented string
|
|
129
|
+
*/
|
|
130
|
+
export function dedent(str) {
|
|
131
|
+
const lines = str.split('\n');
|
|
132
|
+
const nonEmptyLines = lines.filter((line) => line.trim().length > 0);
|
|
133
|
+
if (nonEmptyLines.length === 0) {
|
|
134
|
+
return str;
|
|
135
|
+
}
|
|
136
|
+
const minIndent = Math.min(...nonEmptyLines.map((line) => {
|
|
137
|
+
const match = line.match(/^(\s*)/);
|
|
138
|
+
return match ? match[1].length : 0;
|
|
139
|
+
}));
|
|
140
|
+
return lines.map((line) => line.slice(minIndent)).join('\n');
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Capitalize the first letter of a string
|
|
144
|
+
* @param str - String to capitalize
|
|
145
|
+
* @returns Capitalized string
|
|
146
|
+
*/
|
|
147
|
+
export function capitalize(str) {
|
|
148
|
+
if (!str)
|
|
149
|
+
return str;
|
|
150
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Convert a string to title case
|
|
154
|
+
* @param str - String to convert
|
|
155
|
+
* @returns Title-cased string
|
|
156
|
+
*/
|
|
157
|
+
export function titleCase(str) {
|
|
158
|
+
return str
|
|
159
|
+
.split(' ')
|
|
160
|
+
.map((word) => capitalize(word.toLowerCase()))
|
|
161
|
+
.join(' ');
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"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"}
|