@compilr-dev/cli 0.4.0 → 0.5.1
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 +254 -68
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +134 -4
- package/dist/agent.js +345 -166
- 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/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.d.ts +13 -0
- package/dist/commands-v2/handlers/context.js +533 -0
- package/dist/commands-v2/handlers/core.d.ts +14 -0
- package/dist/commands-v2/handlers/core.js +290 -0
- package/dist/commands-v2/handlers/debug.d.ts +11 -0
- package/dist/commands-v2/handlers/debug.js +177 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +25 -0
- package/dist/commands-v2/handlers/index.js +63 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.d.ts +22 -0
- package/dist/commands-v2/handlers/project.js +1035 -0
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +17 -0
- package/dist/commands-v2/handlers/settings.js +417 -0
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +14 -0
- package/dist/commands-v2/index.js +18 -0
- package/dist/commands-v2/registry.d.ts +52 -0
- package/dist/commands-v2/registry.js +114 -0
- package/dist/commands-v2/types.d.ts +153 -0
- package/dist/commands-v2/types.js +7 -0
- package/dist/commands.js +123 -7
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +5 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +615 -179
- 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 +69 -0
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.d.ts +63 -0
- package/dist/repl-helpers.js +319 -0
- package/dist/repl-v2.d.ts +554 -0
- package/dist/repl-v2.js +3286 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +156 -13
- package/dist/settings/index.js +377 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +114 -0
- package/dist/settings/paths.js +270 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -58
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +35 -75
- 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/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +31 -0
- package/dist/tools/anchor-tools.js +255 -0
- package/dist/tools/artifact-tools.d.ts +42 -0
- package/dist/tools/artifact-tools.js +328 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog-wrappers.d.ts +56 -0
- package/dist/tools/backlog-wrappers.js +353 -0
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +2 -2
- package/dist/tools/db-tools.d.ts +12 -0
- package/dist/tools/db-tools.js +14 -0
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/document-db.d.ts +43 -0
- package/dist/tools/document-db.js +220 -0
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/plan-tools.d.ts +54 -0
- package/dist/tools/plan-tools.js +338 -0
- package/dist/tools/platform-adapter.d.ts +29 -0
- package/dist/tools/platform-adapter.js +394 -0
- package/dist/tools/project-db.d.ts +34 -0
- package/dist/tools/project-db.js +39 -0
- package/dist/tools/recall-work-tool.d.ts +18 -0
- package/dist/tools/recall-work-tool.js +82 -0
- package/dist/tools/workitem-db.d.ts +135 -0
- package/dist/tools/workitem-db.js +730 -0
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +238 -38
- 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.d.ts +2 -2
- package/dist/ui/ask-user-simple-overlay.js +182 -209
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- 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 +203 -0
- package/dist/ui/base/overlay-base-v2.js +260 -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 +27 -0
- package/dist/ui/base/render-utils.js +36 -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 +118 -0
- package/dist/ui/base/tabbed-list-overlay-v2.js +335 -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/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +51 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.d.ts +75 -4
- package/dist/ui/conversation.js +376 -165
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.d.ts +1 -1
- package/dist/ui/ephemeral.js +4 -10
- 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/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +181 -7
- package/dist/ui/footer.js +523 -74
- package/dist/ui/guardrail-overlay.d.ts +29 -0
- package/dist/ui/guardrail-overlay.js +145 -0
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -3
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +135 -33
- package/dist/ui/input-prompt.js +728 -337
- package/dist/ui/iteration-limit-overlay.d.ts +2 -2
- package/dist/ui/iteration-limit-overlay.js +92 -128
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -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-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +157 -0
- package/dist/ui/live-region.js +379 -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 +132 -0
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -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/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -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/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
- package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -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 +57 -0
- package/dist/ui/overlay/impl/help-overlay-v2.js +287 -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/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -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/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
- package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -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 +108 -0
- package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -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/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -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 +214 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
- package/dist/ui/overlay/index.d.ts +52 -0
- package/dist/ui/overlay/index.js +54 -0
- package/dist/ui/overlay/key-utils.d.ts +6 -0
- package/dist/ui/overlay/key-utils.js +6 -0
- package/dist/ui/overlay/types.d.ts +140 -0
- package/dist/ui/overlay/types.js +22 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.d.ts +0 -4
- package/dist/ui/overlays.js +4 -460
- package/dist/ui/permission-overlay.d.ts +1 -1
- package/dist/ui/permission-overlay.js +189 -300
- 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/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.d.ts +117 -0
- package/dist/ui/subagent-renderer.js +318 -0
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-codes.d.ts +94 -0
- package/dist/ui/terminal-codes.js +124 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +220 -0
- package/dist/ui/terminal-renderer.js +750 -0
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +331 -0
- package/dist/ui/terminal-ui.js +819 -0
- package/dist/ui/terminal.d.ts +20 -0
- package/dist/ui/terminal.js +72 -0
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +124 -38
- package/dist/ui/tool-formatters.d.ts +16 -0
- package/dist/ui/tool-formatters.js +1027 -0
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/debug-log.d.ts +28 -0
- package/dist/utils/debug-log.js +57 -0
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +39 -17
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.d.ts +56 -0
- package/dist/utils/path-safety.js +240 -0
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -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 +32 -12
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -121
- package/dist/repl.js +0 -1878
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -501
- package/dist/ui/arch-type-overlay.d.ts +0 -20
- package/dist/ui/arch-type-overlay.js +0 -229
- package/dist/ui/backlog-overlay.d.ts +0 -17
- package/dist/ui/backlog-overlay.js +0 -786
- package/dist/ui/commands-overlay.d.ts +0 -11
- package/dist/ui/commands-overlay.js +0 -410
- package/dist/ui/config-overlay.d.ts +0 -34
- package/dist/ui/config-overlay.js +0 -977
- package/dist/ui/init-overlay.d.ts +0 -24
- package/dist/ui/init-overlay.js +0 -525
- package/dist/ui/input-prompt-v2.d.ts +0 -179
- package/dist/ui/input-prompt-v2.js +0 -991
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -171
- package/dist/ui/tools-overlay.d.ts +0 -26
- package/dist/ui/tools-overlay.js +0 -278
- package/dist/ui/tutorial-overlay.d.ts +0 -10
- package/dist/ui/tutorial-overlay.js +0 -936
package/dist/ui/diff.d.ts
CHANGED
|
@@ -28,10 +28,16 @@ export declare function generateEditDiff(filePath: string, oldText: string, newT
|
|
|
28
28
|
* Format a diff header showing what changed
|
|
29
29
|
*/
|
|
30
30
|
export declare function formatDiffHeader(filePath: string, additions: number, removals: number): string;
|
|
31
|
+
/**
|
|
32
|
+
* Compute the full modified file content after applying an edit.
|
|
33
|
+
* For edit: reads file, applies text replacement, returns full modified content.
|
|
34
|
+
* Returns null if the file can't be read or the old text isn't found.
|
|
35
|
+
*/
|
|
36
|
+
export declare function computeModifiedContent(filePath: string, oldText: string, newText: string, replaceAll?: boolean): string | null;
|
|
31
37
|
/**
|
|
32
38
|
* Generate a simple diff for write_file operations (new content only)
|
|
33
39
|
*/
|
|
34
|
-
export declare function generateWriteDiff(
|
|
40
|
+
export declare function generateWriteDiff(_filePath: string, content: string, _isNew: boolean): DiffResult;
|
|
35
41
|
/**
|
|
36
42
|
* Format header for write_file operations
|
|
37
43
|
*/
|
package/dist/ui/diff.js
CHANGED
|
@@ -36,65 +36,77 @@ export function generateEditDiff(filePath, oldText, newText, replaceAll = false)
|
|
|
36
36
|
// File doesn't exist yet or can't be read
|
|
37
37
|
return null;
|
|
38
38
|
}
|
|
39
|
-
//
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
// Find all occurrences of oldText in the file (supports multi-line)
|
|
40
|
+
const occurrences = [];
|
|
41
|
+
let searchFrom = 0;
|
|
42
|
+
let idx = fileContent.indexOf(oldText, searchFrom);
|
|
43
|
+
while (idx !== -1) {
|
|
44
|
+
occurrences.push(idx);
|
|
45
|
+
if (!replaceAll)
|
|
46
|
+
break;
|
|
47
|
+
searchFrom = idx + oldText.length;
|
|
48
|
+
idx = fileContent.indexOf(oldText, searchFrom);
|
|
49
49
|
}
|
|
50
|
-
if (
|
|
51
|
-
// Old text not found
|
|
50
|
+
if (occurrences.length === 0) {
|
|
52
51
|
return null;
|
|
53
52
|
}
|
|
53
|
+
const lines = fileContent.split('\n');
|
|
54
|
+
// Convert character offset to line number
|
|
55
|
+
const charOffsetToLine = (offset) => {
|
|
56
|
+
let chars = 0;
|
|
57
|
+
for (let i = 0; i < lines.length; i++) {
|
|
58
|
+
if (offset <= chars + lines[i].length)
|
|
59
|
+
return i;
|
|
60
|
+
chars += lines[i].length + 1; // +1 for \n
|
|
61
|
+
}
|
|
62
|
+
return lines.length - 1;
|
|
63
|
+
};
|
|
64
|
+
const oldLines = oldText.split('\n');
|
|
65
|
+
const newLines = newText.split('\n');
|
|
54
66
|
// Build the diff output
|
|
55
67
|
const diffLines = [];
|
|
56
68
|
let additions = 0;
|
|
57
69
|
let removals = 0;
|
|
58
|
-
// Track which context lines have been shown
|
|
59
70
|
const shownContextLines = new Set();
|
|
60
71
|
let lastShownLine = -999;
|
|
61
|
-
for (let
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
const contextStart = Math.max(0,
|
|
65
|
-
const contextEnd = Math.min(lines.length - 1,
|
|
66
|
-
// Add separator if there's a gap
|
|
72
|
+
for (let occIdx = 0; occIdx < occurrences.length; occIdx++) {
|
|
73
|
+
const startLine = charOffsetToLine(occurrences[occIdx]);
|
|
74
|
+
const endLine = startLine + oldLines.length - 1;
|
|
75
|
+
const contextStart = Math.max(0, startLine - CONTEXT_LINES);
|
|
76
|
+
const contextEnd = Math.min(lines.length - 1, endLine + CONTEXT_LINES);
|
|
77
|
+
// Add separator if there's a gap
|
|
67
78
|
const s = getStyles();
|
|
68
79
|
if (lastShownLine >= 0 && contextStart > lastShownLine + 1) {
|
|
69
80
|
diffLines.push(s.muted(' ...'));
|
|
70
81
|
}
|
|
71
|
-
//
|
|
72
|
-
for (let i = contextStart; i <
|
|
82
|
+
// Context lines before
|
|
83
|
+
for (let i = contextStart; i < startLine; i++) {
|
|
73
84
|
if (!shownContextLines.has(i)) {
|
|
74
|
-
|
|
75
|
-
diffLines.push(formatContextLine(lineNumStr, lines[i]));
|
|
85
|
+
diffLines.push(formatContextLine(String(i + 1).padStart(6), lines[i]));
|
|
76
86
|
shownContextLines.add(i);
|
|
77
87
|
lastShownLine = i;
|
|
78
88
|
}
|
|
79
89
|
}
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
// Removed lines (old text)
|
|
91
|
+
for (let i = 0; i < oldLines.length; i++) {
|
|
92
|
+
const lineNum = startLine + i;
|
|
93
|
+
diffLines.push(formatRemovedLine(String(lineNum + 1).padStart(6), lines[lineNum]));
|
|
94
|
+
shownContextLines.add(lineNum);
|
|
95
|
+
lastShownLine = lineNum;
|
|
96
|
+
}
|
|
97
|
+
removals += oldLines.length;
|
|
98
|
+
// Added lines (new text)
|
|
99
|
+
for (let i = 0; i < newLines.length; i++) {
|
|
100
|
+
diffLines.push(formatAddedLine(String(startLine + 1).padStart(6), newLines[i]));
|
|
101
|
+
}
|
|
102
|
+
additions += newLines.length;
|
|
103
|
+
// Context lines after
|
|
104
|
+
const nextStartLine = occIdx < occurrences.length - 1
|
|
105
|
+
? charOffsetToLine(occurrences[occIdx + 1])
|
|
106
|
+
: Infinity;
|
|
107
|
+
for (let i = endLine + 1; i <= contextEnd && i < nextStartLine; i++) {
|
|
95
108
|
if (!shownContextLines.has(i)) {
|
|
96
|
-
|
|
97
|
-
diffLines.push(formatContextLine(ctxLineNumStr, lines[i]));
|
|
109
|
+
diffLines.push(formatContextLine(String(i + 1).padStart(6), lines[i]));
|
|
98
110
|
shownContextLines.add(i);
|
|
99
111
|
lastShownLine = i;
|
|
100
112
|
}
|
|
@@ -147,24 +159,49 @@ function formatAddedLine(lineNum, content) {
|
|
|
147
159
|
return `${s.muted(lineNum)} ${chalk.bgGreen.black('+')} ${chalk.bgGreen.black(content)}`;
|
|
148
160
|
}
|
|
149
161
|
// =============================================================================
|
|
162
|
+
// Modified Content Generation (for VS Code diff view)
|
|
163
|
+
// =============================================================================
|
|
164
|
+
/**
|
|
165
|
+
* Compute the full modified file content after applying an edit.
|
|
166
|
+
* For edit: reads file, applies text replacement, returns full modified content.
|
|
167
|
+
* Returns null if the file can't be read or the old text isn't found.
|
|
168
|
+
*/
|
|
169
|
+
export function computeModifiedContent(filePath, oldText, newText, replaceAll) {
|
|
170
|
+
let fileContent;
|
|
171
|
+
try {
|
|
172
|
+
fileContent = fs.readFileSync(filePath, 'utf-8');
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
// Check that oldText exists in the file
|
|
178
|
+
if (!fileContent.includes(oldText)) {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
if (replaceAll) {
|
|
182
|
+
// Replace all occurrences
|
|
183
|
+
let result = fileContent;
|
|
184
|
+
while (result.includes(oldText)) {
|
|
185
|
+
result = result.replace(oldText, newText);
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
// Replace first occurrence only
|
|
190
|
+
return fileContent.replace(oldText, newText);
|
|
191
|
+
}
|
|
192
|
+
// =============================================================================
|
|
150
193
|
// Write File Diff (for new files or complete overwrites)
|
|
151
194
|
// =============================================================================
|
|
152
195
|
/**
|
|
153
196
|
* Generate a simple diff for write_file operations (new content only)
|
|
154
197
|
*/
|
|
155
|
-
export function generateWriteDiff(
|
|
198
|
+
export function generateWriteDiff(_filePath, content, _isNew) {
|
|
156
199
|
const lines = content.split('\n');
|
|
157
200
|
const diffLines = [];
|
|
158
|
-
|
|
159
|
-
const previewLines = Math.min(lines.length, 10);
|
|
160
|
-
for (let i = 0; i < previewLines; i++) {
|
|
201
|
+
for (let i = 0; i < lines.length; i++) {
|
|
161
202
|
const lineNum = String(i + 1).padStart(6);
|
|
162
203
|
diffLines.push(formatAddedLine(lineNum, lines[i]));
|
|
163
204
|
}
|
|
164
|
-
if (lines.length > previewLines) {
|
|
165
|
-
const s = getStyles();
|
|
166
|
-
diffLines.push(s.muted(` ... ${String(lines.length - previewLines)} more lines`));
|
|
167
|
-
}
|
|
168
205
|
return {
|
|
169
206
|
lines: diffLines,
|
|
170
207
|
additions: lines.length,
|
package/dist/ui/ephemeral.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Ephemeral Zone
|
|
3
3
|
*
|
|
4
4
|
* @deprecated This module is superseded by the new Footer architecture.
|
|
5
|
-
* Use todo-zone.ts, input-prompt
|
|
5
|
+
* Use todo-zone.ts, input-prompt.ts, and footer.ts instead.
|
|
6
6
|
* This file is kept for reference and may be removed in a future cleanup.
|
|
7
7
|
*
|
|
8
8
|
* Manages the ephemeral area that is cleared and redrawn while agent works.
|
package/dist/ui/ephemeral.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Ephemeral Zone
|
|
3
3
|
*
|
|
4
4
|
* @deprecated This module is superseded by the new Footer architecture.
|
|
5
|
-
* Use todo-zone.ts, input-prompt
|
|
5
|
+
* Use todo-zone.ts, input-prompt.ts, and footer.ts instead.
|
|
6
6
|
* This file is kept for reference and may be removed in a future cleanup.
|
|
7
7
|
*
|
|
8
8
|
* Manages the ephemeral area that is cleared and redrawn while agent works.
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import chalk from 'chalk';
|
|
12
12
|
import { getStyles } from '../themes/index.js';
|
|
13
13
|
import * as terminal from './terminal.js';
|
|
14
|
+
import { formatTokens } from './base/index.js';
|
|
14
15
|
import { formatPendingMessage } from './conversation.js';
|
|
15
16
|
// Note: This file is deprecated but kept for reference.
|
|
16
17
|
// All pc.* calls below have been converted to use getStyles() for theme support.
|
|
@@ -59,15 +60,6 @@ function formatDuration(ms) {
|
|
|
59
60
|
const remainingSeconds = seconds % 60;
|
|
60
61
|
return `${String(minutes)}m ${String(remainingSeconds)}s`;
|
|
61
62
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Format token count (e.g., "1.2k", "500")
|
|
64
|
-
*/
|
|
65
|
-
function formatTokens(tokens) {
|
|
66
|
-
if (tokens >= 1000) {
|
|
67
|
-
return `${(tokens / 1000).toFixed(1)}k`;
|
|
68
|
-
}
|
|
69
|
-
return tokens.toString();
|
|
70
|
-
}
|
|
71
63
|
/**
|
|
72
64
|
* Render todo list with visual styling
|
|
73
65
|
*/
|
|
@@ -129,6 +121,8 @@ export class EphemeralZone {
|
|
|
129
121
|
this.state.spinner = {
|
|
130
122
|
text: this.thinkingWord,
|
|
131
123
|
tokens: 0,
|
|
124
|
+
inputTokens: 0,
|
|
125
|
+
outputTokens: 0,
|
|
132
126
|
startTime: Date.now(),
|
|
133
127
|
};
|
|
134
128
|
// Start animation
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay Features
|
|
3
|
+
*
|
|
4
|
+
* Composable features for building overlays.
|
|
5
|
+
* Each feature handles a specific aspect of overlay behavior.
|
|
6
|
+
*
|
|
7
|
+
* Available features:
|
|
8
|
+
* - ListFeature: List selection and navigation
|
|
9
|
+
* - TabFeature: Tab/filter navigation
|
|
10
|
+
* - InputFeature: Text input with cursor movement
|
|
11
|
+
* - PaginationFeature: Paginated list navigation with scroll tracking
|
|
12
|
+
* - SearchFeature: Search/filter text input with type-to-search
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { ListFeature, TabFeature, InputFeature, PaginationFeature, SearchFeature } from './features/index.js';
|
|
17
|
+
*
|
|
18
|
+
* const listFeature = new ListFeature(() => items);
|
|
19
|
+
* const tabFeature = new TabFeature(TABS);
|
|
20
|
+
* const inputFeature = new InputFeature({ placeholder: 'Enter text...' });
|
|
21
|
+
* const pagination = new PaginationFeature({ pageSize: 12 });
|
|
22
|
+
* const search = new SearchFeature({ onSearch: (q) => filter(q) });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export { ListFeature, createSimpleListRenderer, createLabelDescriptionRenderer, } from './list-feature.js';
|
|
26
|
+
export type { ListFeatureConfig } from './list-feature.js';
|
|
27
|
+
export { TabFeature, createTabsFromLabels, createFilterTabs, } from './tab-feature.js';
|
|
28
|
+
export type { TabFeatureConfig } from './tab-feature.js';
|
|
29
|
+
export { InputFeature } from './input-feature.js';
|
|
30
|
+
export type { InputFeatureOptions, InputKeyResult } from './input-feature.js';
|
|
31
|
+
export { PaginationFeature } from './pagination-feature.js';
|
|
32
|
+
export type { PaginationState, PaginationConfig, PaginationKeyResult, } from './pagination-feature.js';
|
|
33
|
+
export { SearchFeature } from './search-feature.js';
|
|
34
|
+
export type { SearchState, SearchConfig, SearchKeyResult, SearchBoxOptions, } from './search-feature.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay Features
|
|
3
|
+
*
|
|
4
|
+
* Composable features for building overlays.
|
|
5
|
+
* Each feature handles a specific aspect of overlay behavior.
|
|
6
|
+
*
|
|
7
|
+
* Available features:
|
|
8
|
+
* - ListFeature: List selection and navigation
|
|
9
|
+
* - TabFeature: Tab/filter navigation
|
|
10
|
+
* - InputFeature: Text input with cursor movement
|
|
11
|
+
* - PaginationFeature: Paginated list navigation with scroll tracking
|
|
12
|
+
* - SearchFeature: Search/filter text input with type-to-search
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { ListFeature, TabFeature, InputFeature, PaginationFeature, SearchFeature } from './features/index.js';
|
|
17
|
+
*
|
|
18
|
+
* const listFeature = new ListFeature(() => items);
|
|
19
|
+
* const tabFeature = new TabFeature(TABS);
|
|
20
|
+
* const inputFeature = new InputFeature({ placeholder: 'Enter text...' });
|
|
21
|
+
* const pagination = new PaginationFeature({ pageSize: 12 });
|
|
22
|
+
* const search = new SearchFeature({ onSearch: (q) => filter(q) });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
// List selection and navigation
|
|
26
|
+
export { ListFeature, createSimpleListRenderer, createLabelDescriptionRenderer, } from './list-feature.js';
|
|
27
|
+
// Tab/filter navigation
|
|
28
|
+
export { TabFeature, createTabsFromLabels, createFilterTabs, } from './tab-feature.js';
|
|
29
|
+
// Text input with cursor movement
|
|
30
|
+
export { InputFeature } from './input-feature.js';
|
|
31
|
+
// Paginated list navigation
|
|
32
|
+
export { PaginationFeature } from './pagination-feature.js';
|
|
33
|
+
// Search/filter text input
|
|
34
|
+
export { SearchFeature } from './search-feature.js';
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Feature
|
|
3
|
+
*
|
|
4
|
+
* Composable text input handling for overlays.
|
|
5
|
+
* Provides cursor movement, text editing, and rendering.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* class MyScreen extends BaseScreen {
|
|
10
|
+
* private input = new InputFeature({ placeholder: 'Enter text...' });
|
|
11
|
+
*
|
|
12
|
+
* render(): string[] {
|
|
13
|
+
* return [
|
|
14
|
+
* ' ' + this.input.render(styles),
|
|
15
|
+
* ];
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* handleKey(data: Buffer): ScreenResult {
|
|
19
|
+
* const result = this.input.handleKey(data);
|
|
20
|
+
* if (result.handled) {
|
|
21
|
+
* return stay();
|
|
22
|
+
* }
|
|
23
|
+
* // Handle other keys (Enter, Escape, etc.)
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export interface InputFeatureOptions {
|
|
29
|
+
/** Initial value */
|
|
30
|
+
initialValue?: string;
|
|
31
|
+
/** Placeholder text when empty */
|
|
32
|
+
placeholder?: string;
|
|
33
|
+
/** Maximum length (0 = unlimited) */
|
|
34
|
+
maxLength?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface InputKeyResult {
|
|
37
|
+
/** Whether the key was handled */
|
|
38
|
+
handled: boolean;
|
|
39
|
+
/** Whether to re-render */
|
|
40
|
+
render: boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare class InputFeature {
|
|
43
|
+
/** Current text value */
|
|
44
|
+
private _value;
|
|
45
|
+
/** Cursor position (0 = before first char, value.length = after last char) */
|
|
46
|
+
private _cursor;
|
|
47
|
+
/** Placeholder text */
|
|
48
|
+
private readonly placeholder;
|
|
49
|
+
/** Maximum length */
|
|
50
|
+
private readonly maxLength;
|
|
51
|
+
constructor(options?: InputFeatureOptions);
|
|
52
|
+
/** Get current value */
|
|
53
|
+
get value(): string;
|
|
54
|
+
/** Set value (resets cursor to end) */
|
|
55
|
+
set value(v: string);
|
|
56
|
+
/** Get cursor position */
|
|
57
|
+
get cursor(): number;
|
|
58
|
+
/** Check if empty */
|
|
59
|
+
get isEmpty(): boolean;
|
|
60
|
+
/** Get trimmed value */
|
|
61
|
+
get trimmedValue(): string;
|
|
62
|
+
/**
|
|
63
|
+
* Handle a key press.
|
|
64
|
+
* Returns whether the key was handled and whether to re-render.
|
|
65
|
+
*/
|
|
66
|
+
handleKey(data: Buffer): InputKeyResult;
|
|
67
|
+
/**
|
|
68
|
+
* Render the input field with cursor.
|
|
69
|
+
* Returns a string like: "> text with cursor_"
|
|
70
|
+
*
|
|
71
|
+
* @param styles - Theme styles for coloring
|
|
72
|
+
* @param prefix - Prefix before the input (default: "> ")
|
|
73
|
+
*/
|
|
74
|
+
render(styles: ReturnType<typeof import('../../themes/index.js').getStyles>, prefix?: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Render input field without cursor (for non-focused state).
|
|
77
|
+
*/
|
|
78
|
+
renderWithoutCursor(styles: ReturnType<typeof import('../../themes/index.js').getStyles>, prefix?: string): string;
|
|
79
|
+
/** Clear the input */
|
|
80
|
+
clear(): void;
|
|
81
|
+
/** Find word boundary to the left of cursor */
|
|
82
|
+
private findWordBoundaryLeft;
|
|
83
|
+
/** Find word boundary to the right of cursor */
|
|
84
|
+
private findWordBoundaryRight;
|
|
85
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Feature
|
|
3
|
+
*
|
|
4
|
+
* Composable text input handling for overlays.
|
|
5
|
+
* Provides cursor movement, text editing, and rendering.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* class MyScreen extends BaseScreen {
|
|
10
|
+
* private input = new InputFeature({ placeholder: 'Enter text...' });
|
|
11
|
+
*
|
|
12
|
+
* render(): string[] {
|
|
13
|
+
* return [
|
|
14
|
+
* ' ' + this.input.render(styles),
|
|
15
|
+
* ];
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* handleKey(data: Buffer): ScreenResult {
|
|
19
|
+
* const result = this.input.handleKey(data);
|
|
20
|
+
* if (result.handled) {
|
|
21
|
+
* return stay();
|
|
22
|
+
* }
|
|
23
|
+
* // Handle other keys (Enter, Escape, etc.)
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
import { isLeftArrow, isRightArrow, isBackspace, isDelete, isHome, isEnd, isCtrlA, isCtrlE, isWordLeft, isWordRight, extractPrintable, } from '../base/key-utils.js';
|
|
29
|
+
// =============================================================================
|
|
30
|
+
// InputFeature Class
|
|
31
|
+
// =============================================================================
|
|
32
|
+
export class InputFeature {
|
|
33
|
+
/** Current text value */
|
|
34
|
+
_value;
|
|
35
|
+
/** Cursor position (0 = before first char, value.length = after last char) */
|
|
36
|
+
_cursor;
|
|
37
|
+
/** Placeholder text */
|
|
38
|
+
placeholder;
|
|
39
|
+
/** Maximum length */
|
|
40
|
+
maxLength;
|
|
41
|
+
constructor(options = {}) {
|
|
42
|
+
this._value = options.initialValue ?? '';
|
|
43
|
+
this._cursor = this._value.length;
|
|
44
|
+
this.placeholder = options.placeholder ?? '';
|
|
45
|
+
this.maxLength = options.maxLength ?? 0;
|
|
46
|
+
}
|
|
47
|
+
// ===========================================================================
|
|
48
|
+
// Getters/Setters
|
|
49
|
+
// ===========================================================================
|
|
50
|
+
/** Get current value */
|
|
51
|
+
get value() {
|
|
52
|
+
return this._value;
|
|
53
|
+
}
|
|
54
|
+
/** Set value (resets cursor to end) */
|
|
55
|
+
set value(v) {
|
|
56
|
+
this._value = v;
|
|
57
|
+
this._cursor = v.length;
|
|
58
|
+
}
|
|
59
|
+
/** Get cursor position */
|
|
60
|
+
get cursor() {
|
|
61
|
+
return this._cursor;
|
|
62
|
+
}
|
|
63
|
+
/** Check if empty */
|
|
64
|
+
get isEmpty() {
|
|
65
|
+
return this._value.length === 0;
|
|
66
|
+
}
|
|
67
|
+
/** Get trimmed value */
|
|
68
|
+
get trimmedValue() {
|
|
69
|
+
return this._value.trim();
|
|
70
|
+
}
|
|
71
|
+
// ===========================================================================
|
|
72
|
+
// Key Handling
|
|
73
|
+
// ===========================================================================
|
|
74
|
+
/**
|
|
75
|
+
* Handle a key press.
|
|
76
|
+
* Returns whether the key was handled and whether to re-render.
|
|
77
|
+
*/
|
|
78
|
+
handleKey(data) {
|
|
79
|
+
// Left arrow - move cursor left
|
|
80
|
+
if (isLeftArrow(data)) {
|
|
81
|
+
if (this._cursor > 0) {
|
|
82
|
+
this._cursor--;
|
|
83
|
+
return { handled: true, render: true };
|
|
84
|
+
}
|
|
85
|
+
return { handled: true, render: false };
|
|
86
|
+
}
|
|
87
|
+
// Right arrow - move cursor right
|
|
88
|
+
if (isRightArrow(data)) {
|
|
89
|
+
if (this._cursor < this._value.length) {
|
|
90
|
+
this._cursor++;
|
|
91
|
+
return { handled: true, render: true };
|
|
92
|
+
}
|
|
93
|
+
return { handled: true, render: false };
|
|
94
|
+
}
|
|
95
|
+
// Home or Ctrl+A - move to start
|
|
96
|
+
if (isHome(data) || isCtrlA(data)) {
|
|
97
|
+
if (this._cursor > 0) {
|
|
98
|
+
this._cursor = 0;
|
|
99
|
+
return { handled: true, render: true };
|
|
100
|
+
}
|
|
101
|
+
return { handled: true, render: false };
|
|
102
|
+
}
|
|
103
|
+
// End or Ctrl+E - move to end
|
|
104
|
+
if (isEnd(data) || isCtrlE(data)) {
|
|
105
|
+
if (this._cursor < this._value.length) {
|
|
106
|
+
this._cursor = this._value.length;
|
|
107
|
+
return { handled: true, render: true };
|
|
108
|
+
}
|
|
109
|
+
return { handled: true, render: false };
|
|
110
|
+
}
|
|
111
|
+
// Word left (Ctrl+Left, Alt+b)
|
|
112
|
+
if (isWordLeft(data)) {
|
|
113
|
+
const newPos = this.findWordBoundaryLeft();
|
|
114
|
+
if (newPos !== this._cursor) {
|
|
115
|
+
this._cursor = newPos;
|
|
116
|
+
return { handled: true, render: true };
|
|
117
|
+
}
|
|
118
|
+
return { handled: true, render: false };
|
|
119
|
+
}
|
|
120
|
+
// Word right (Ctrl+Right, Alt+f)
|
|
121
|
+
if (isWordRight(data)) {
|
|
122
|
+
const newPos = this.findWordBoundaryRight();
|
|
123
|
+
if (newPos !== this._cursor) {
|
|
124
|
+
this._cursor = newPos;
|
|
125
|
+
return { handled: true, render: true };
|
|
126
|
+
}
|
|
127
|
+
return { handled: true, render: false };
|
|
128
|
+
}
|
|
129
|
+
// Backspace - delete before cursor
|
|
130
|
+
if (isBackspace(data)) {
|
|
131
|
+
if (this._cursor > 0) {
|
|
132
|
+
this._value =
|
|
133
|
+
this._value.slice(0, this._cursor - 1) + this._value.slice(this._cursor);
|
|
134
|
+
this._cursor--;
|
|
135
|
+
return { handled: true, render: true };
|
|
136
|
+
}
|
|
137
|
+
return { handled: true, render: false };
|
|
138
|
+
}
|
|
139
|
+
// Delete - delete at cursor
|
|
140
|
+
if (isDelete(data)) {
|
|
141
|
+
if (this._cursor < this._value.length) {
|
|
142
|
+
this._value =
|
|
143
|
+
this._value.slice(0, this._cursor) + this._value.slice(this._cursor + 1);
|
|
144
|
+
return { handled: true, render: true };
|
|
145
|
+
}
|
|
146
|
+
return { handled: true, render: false };
|
|
147
|
+
}
|
|
148
|
+
// Printable characters - insert at cursor
|
|
149
|
+
const printable = extractPrintable(data);
|
|
150
|
+
if (printable.length > 0) {
|
|
151
|
+
// Check max length
|
|
152
|
+
if (this.maxLength > 0 && this._value.length + printable.length > this.maxLength) {
|
|
153
|
+
const allowed = this.maxLength - this._value.length;
|
|
154
|
+
if (allowed <= 0) {
|
|
155
|
+
return { handled: true, render: false };
|
|
156
|
+
}
|
|
157
|
+
const truncated = printable.slice(0, allowed);
|
|
158
|
+
this._value =
|
|
159
|
+
this._value.slice(0, this._cursor) + truncated + this._value.slice(this._cursor);
|
|
160
|
+
this._cursor += truncated.length;
|
|
161
|
+
return { handled: true, render: true };
|
|
162
|
+
}
|
|
163
|
+
this._value =
|
|
164
|
+
this._value.slice(0, this._cursor) + printable + this._value.slice(this._cursor);
|
|
165
|
+
this._cursor += printable.length;
|
|
166
|
+
return { handled: true, render: true };
|
|
167
|
+
}
|
|
168
|
+
// Not handled
|
|
169
|
+
return { handled: false, render: false };
|
|
170
|
+
}
|
|
171
|
+
// ===========================================================================
|
|
172
|
+
// Rendering
|
|
173
|
+
// ===========================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Render the input field with cursor.
|
|
176
|
+
* Returns a string like: "> text with cursor_"
|
|
177
|
+
*
|
|
178
|
+
* @param styles - Theme styles for coloring
|
|
179
|
+
* @param prefix - Prefix before the input (default: "> ")
|
|
180
|
+
*/
|
|
181
|
+
render(styles, prefix = '> ') {
|
|
182
|
+
if (this._value.length === 0 && this.placeholder) {
|
|
183
|
+
// Show placeholder with cursor at start
|
|
184
|
+
return styles.primary(prefix) + styles.primary('▋') + styles.muted(this.placeholder);
|
|
185
|
+
}
|
|
186
|
+
// Split text at cursor position
|
|
187
|
+
const before = this._value.slice(0, this._cursor);
|
|
188
|
+
const after = this._value.slice(this._cursor);
|
|
189
|
+
return styles.primary(prefix) + before + styles.primary('▋') + after;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Render input field without cursor (for non-focused state).
|
|
193
|
+
*/
|
|
194
|
+
renderWithoutCursor(styles, prefix = '> ') {
|
|
195
|
+
if (this._value.length === 0 && this.placeholder) {
|
|
196
|
+
return styles.muted(prefix + this.placeholder);
|
|
197
|
+
}
|
|
198
|
+
return prefix + this._value;
|
|
199
|
+
}
|
|
200
|
+
// ===========================================================================
|
|
201
|
+
// Helpers
|
|
202
|
+
// ===========================================================================
|
|
203
|
+
/** Clear the input */
|
|
204
|
+
clear() {
|
|
205
|
+
this._value = '';
|
|
206
|
+
this._cursor = 0;
|
|
207
|
+
}
|
|
208
|
+
/** Find word boundary to the left of cursor */
|
|
209
|
+
findWordBoundaryLeft() {
|
|
210
|
+
if (this._cursor === 0)
|
|
211
|
+
return 0;
|
|
212
|
+
let pos = this._cursor - 1;
|
|
213
|
+
// Skip whitespace
|
|
214
|
+
while (pos > 0 && /\s/.test(this._value[pos])) {
|
|
215
|
+
pos--;
|
|
216
|
+
}
|
|
217
|
+
// Skip word characters
|
|
218
|
+
while (pos > 0 && !/\s/.test(this._value[pos - 1])) {
|
|
219
|
+
pos--;
|
|
220
|
+
}
|
|
221
|
+
return pos;
|
|
222
|
+
}
|
|
223
|
+
/** Find word boundary to the right of cursor */
|
|
224
|
+
findWordBoundaryRight() {
|
|
225
|
+
if (this._cursor >= this._value.length)
|
|
226
|
+
return this._value.length;
|
|
227
|
+
let pos = this._cursor;
|
|
228
|
+
// Skip current word
|
|
229
|
+
while (pos < this._value.length && !/\s/.test(this._value[pos])) {
|
|
230
|
+
pos++;
|
|
231
|
+
}
|
|
232
|
+
// Skip whitespace
|
|
233
|
+
while (pos < this._value.length && /\s/.test(this._value[pos])) {
|
|
234
|
+
pos++;
|
|
235
|
+
}
|
|
236
|
+
return pos;
|
|
237
|
+
}
|
|
238
|
+
}
|