@jmoyers/harness 0.1.11 → 0.1.20

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.
Files changed (232) hide show
  1. package/README.md +31 -39
  2. package/package.json +31 -11
  3. package/packages/harness-ai/src/anthropic-protocol.ts +68 -68
  4. package/packages/harness-ai/src/stream-text.ts +13 -91
  5. package/packages/harness-ui/src/frame-primitives.ts +158 -0
  6. package/packages/harness-ui/src/index.ts +18 -0
  7. package/packages/harness-ui/src/interaction/conversation-input-forwarder.ts +221 -0
  8. package/packages/harness-ui/src/interaction/conversation-selection-input.ts +213 -0
  9. package/packages/harness-ui/src/interaction/global-shortcut-input.ts +172 -0
  10. package/{src/ui → packages/harness-ui/src/interaction}/input-preflight.ts +10 -12
  11. package/{src/ui → packages/harness-ui/src/interaction}/input-token-router.ts +120 -69
  12. package/packages/harness-ui/src/interaction/input.ts +420 -0
  13. package/packages/harness-ui/src/interaction/left-nav-input.ts +166 -0
  14. package/{src/ui → packages/harness-ui/src/interaction}/main-pane-pointer-input.ts +91 -23
  15. package/{src/ui → packages/harness-ui/src/interaction}/pointer-routing-input.ts +112 -48
  16. package/packages/harness-ui/src/interaction/rail-pointer-input.ts +62 -0
  17. package/packages/harness-ui/src/interaction/repository-fold-input.ts +118 -0
  18. package/packages/harness-ui/src/kit.ts +476 -0
  19. package/packages/harness-ui/src/layout.ts +238 -0
  20. package/packages/harness-ui/src/modal-manager.ts +222 -0
  21. package/{src/ui → packages/harness-ui/src}/screen.ts +53 -26
  22. package/packages/harness-ui/src/surface.ts +252 -0
  23. package/packages/harness-ui/src/text-layout.ts +210 -0
  24. package/packages/nim-core/src/contracts.ts +239 -0
  25. package/packages/nim-core/src/event-store.ts +299 -0
  26. package/packages/nim-core/src/events.ts +53 -0
  27. package/packages/nim-core/src/index.ts +9 -0
  28. package/packages/nim-core/src/provider-router.ts +129 -0
  29. package/packages/nim-core/src/providers/anthropic-driver.ts +291 -0
  30. package/packages/nim-core/src/runtime-factory.ts +49 -0
  31. package/packages/nim-core/src/runtime.ts +1797 -0
  32. package/packages/nim-core/src/session-store.ts +516 -0
  33. package/packages/nim-core/src/telemetry.ts +48 -0
  34. package/packages/nim-test-tui/src/index.ts +150 -0
  35. package/packages/nim-ui-core/src/index.ts +1 -0
  36. package/packages/nim-ui-core/src/projection.ts +87 -0
  37. package/scripts/codex-live-mux-runtime.ts +2 -3872
  38. package/scripts/control-plane-daemon.ts +11 -0
  39. package/scripts/harness-bin.js +5 -0
  40. package/scripts/harness-commands.ts +300 -0
  41. package/scripts/harness-runtime.ts +82 -0
  42. package/scripts/harness.ts +33 -3019
  43. package/scripts/nim-tui-smoke.ts +748 -0
  44. package/src/cli/auth/runtime.ts +948 -0
  45. package/src/cli/gateway/runtime.ts +1872 -0
  46. package/src/cli/parsing/flags.ts +23 -0
  47. package/src/cli/parsing/session.ts +42 -0
  48. package/src/cli/runtime/context.ts +193 -0
  49. package/src/cli/runtime-app/application.ts +392 -0
  50. package/src/cli/runtime-infra/gateway-control.ts +729 -0
  51. package/{scripts/harness-inspector.ts → src/cli/workflows/inspector.ts} +14 -11
  52. package/src/cli/workflows/runtime.ts +965 -0
  53. package/src/clients/tui/left-rail-interactions.ts +519 -0
  54. package/src/clients/tui/main-pane-interactions.ts +509 -0
  55. package/src/clients/tui/modal-input-routing.ts +71 -0
  56. package/src/clients/tui/render-snapshot-adapter.ts +88 -0
  57. package/src/clients/web/synced-selectors.ts +132 -0
  58. package/src/codex/live-session.ts +82 -29
  59. package/src/config/config-core.ts +348 -8
  60. package/src/config/harness.config.template.jsonc +33 -0
  61. package/src/control-plane/agent-realtime-api.ts +82 -427
  62. package/src/control-plane/session-summary.ts +10 -81
  63. package/src/control-plane/status/reducer-base.ts +12 -12
  64. package/src/control-plane/status/reducers/claude-status-reducer.ts +3 -3
  65. package/src/control-plane/status/reducers/codex-status-reducer.ts +4 -4
  66. package/src/control-plane/status/reducers/cursor-status-reducer.ts +3 -3
  67. package/src/control-plane/stream-client.ts +12 -2
  68. package/src/control-plane/stream-command-parser.ts +83 -143
  69. package/src/control-plane/stream-protocol.ts +53 -37
  70. package/src/control-plane/stream-server-command.ts +376 -69
  71. package/src/control-plane/stream-server-session-runtime.ts +3 -2
  72. package/src/control-plane/stream-server.ts +864 -70
  73. package/src/control-plane/stream-session-runtime-types.ts +41 -0
  74. package/src/{mux/live-mux/control-plane-records.ts → core/contracts/records.ts} +24 -97
  75. package/src/core/state/observed-stream-cursor.ts +43 -0
  76. package/src/core/state/synced-observed-state.ts +273 -0
  77. package/src/core/store/harness-synced-store.ts +81 -0
  78. package/src/diff/budget.ts +136 -0
  79. package/src/diff/build.ts +289 -0
  80. package/src/diff/chunker.ts +146 -0
  81. package/src/diff/git-invoke.ts +315 -0
  82. package/src/diff/git-parse.ts +472 -0
  83. package/src/diff/hash.ts +70 -0
  84. package/src/diff/index.ts +24 -0
  85. package/src/diff/normalize.ts +134 -0
  86. package/src/diff/types.ts +178 -0
  87. package/src/diff-ui/args.ts +346 -0
  88. package/src/diff-ui/commands.ts +123 -0
  89. package/src/diff-ui/finder.ts +94 -0
  90. package/src/diff-ui/highlight.ts +127 -0
  91. package/src/diff-ui/index.ts +2 -0
  92. package/src/diff-ui/model.ts +141 -0
  93. package/src/diff-ui/pager.ts +412 -0
  94. package/src/diff-ui/render.ts +337 -0
  95. package/src/diff-ui/runtime.ts +379 -0
  96. package/src/diff-ui/state.ts +224 -0
  97. package/src/diff-ui/types.ts +236 -0
  98. package/src/domain/workspace.ts +68 -5
  99. package/src/mux/control-plane-op-queue.ts +93 -7
  100. package/src/mux/conversation-rail.ts +28 -71
  101. package/src/mux/dual-pane-core.ts +13 -13
  102. package/src/mux/harness-core-ui.ts +313 -42
  103. package/src/mux/input-shortcuts.ts +13 -131
  104. package/src/mux/keybinding-catalog.ts +340 -0
  105. package/src/mux/keybinding-registry.ts +103 -0
  106. package/src/mux/live-mux/command-menu-open-in.ts +280 -0
  107. package/src/mux/live-mux/command-menu.ts +167 -4
  108. package/src/mux/live-mux/conversation-state.ts +13 -0
  109. package/src/mux/live-mux/directory-resolution.ts +1 -1
  110. package/src/mux/live-mux/git-snapshot.ts +33 -2
  111. package/src/mux/live-mux/global-shortcut-handlers.ts +6 -0
  112. package/src/mux/live-mux/home-pane-drop.ts +1 -1
  113. package/src/mux/live-mux/home-pane-pointer.ts +10 -0
  114. package/src/mux/live-mux/input-forwarding.ts +59 -2
  115. package/src/mux/live-mux/left-nav-activation.ts +124 -7
  116. package/src/mux/live-mux/left-nav.ts +35 -0
  117. package/src/mux/live-mux/link-click.ts +292 -0
  118. package/src/mux/live-mux/modal-command-menu-handler.ts +46 -9
  119. package/src/mux/live-mux/modal-conversation-handlers.ts +5 -1
  120. package/src/mux/live-mux/modal-input-reducers.ts +77 -12
  121. package/src/mux/live-mux/modal-overlays.ts +168 -34
  122. package/src/mux/live-mux/modal-pointer.ts +3 -7
  123. package/src/mux/live-mux/modal-prompt-handlers.ts +23 -2
  124. package/src/mux/live-mux/modal-release-notes-handler.ts +111 -0
  125. package/src/mux/live-mux/modal-task-editor-handler.ts +16 -11
  126. package/src/mux/live-mux/pointer-routing.ts +5 -2
  127. package/src/mux/live-mux/project-pane-pointer.ts +8 -0
  128. package/src/mux/live-mux/rail-layout.ts +33 -30
  129. package/src/mux/live-mux/release-notes.ts +383 -0
  130. package/src/mux/live-mux/render-trace-analysis.ts +52 -7
  131. package/src/mux/live-mux/repository-folding.ts +3 -0
  132. package/src/mux/live-mux/selection.ts +0 -4
  133. package/src/mux/live-mux/session-diagnostics-paths.ts +21 -0
  134. package/src/mux/project-pane-github-review.ts +271 -0
  135. package/src/mux/render-frame.ts +4 -0
  136. package/src/mux/runtime-app/codex-live-mux-runtime.ts +5191 -0
  137. package/src/mux/task-composer.ts +21 -14
  138. package/src/mux/task-focused-pane.ts +118 -117
  139. package/src/mux/task-screen-keybindings.ts +10 -101
  140. package/src/mux/workspace-rail-model.ts +270 -104
  141. package/src/mux/workspace-rail.ts +45 -22
  142. package/src/pty/session-broker.ts +1 -1
  143. package/{scripts → src/recording}/terminal-recording-gif-lib.ts +2 -2
  144. package/src/services/control-plane.ts +50 -32
  145. package/src/services/conversation-lifecycle.ts +118 -87
  146. package/src/services/conversation-startup-hydration.ts +20 -12
  147. package/src/services/directory-hydration.ts +21 -16
  148. package/src/services/event-persistence.ts +7 -0
  149. package/src/services/left-rail-pointer-handler.ts +329 -0
  150. package/src/services/mux-ui-state-persistence.ts +5 -1
  151. package/src/services/recording.ts +34 -26
  152. package/src/services/runtime-command-menu-agent-tools.ts +1 -1
  153. package/src/services/runtime-control-actions.ts +79 -61
  154. package/src/services/runtime-control-plane-ops.ts +122 -83
  155. package/src/services/runtime-conversation-actions.ts +40 -26
  156. package/src/services/runtime-conversation-activation.ts +73 -46
  157. package/src/services/runtime-conversation-starter.ts +53 -45
  158. package/src/services/runtime-conversation-title-edit.ts +91 -80
  159. package/src/services/runtime-envelope-handler.ts +107 -105
  160. package/src/services/runtime-git-state.ts +42 -29
  161. package/src/services/runtime-layout-resize.ts +3 -1
  162. package/src/services/runtime-left-rail-render.ts +99 -63
  163. package/src/services/runtime-nim-cli-session.ts +438 -0
  164. package/src/services/runtime-nim-session.ts +705 -0
  165. package/src/services/runtime-nim-tool-bridge.ts +141 -0
  166. package/src/services/runtime-observed-event-projection-pipeline.ts +45 -0
  167. package/src/services/runtime-process-wiring.ts +29 -36
  168. package/src/services/runtime-project-pane-github-review-cache.ts +164 -0
  169. package/src/services/runtime-render-flush.ts +63 -70
  170. package/src/services/runtime-render-lifecycle.ts +65 -64
  171. package/src/services/runtime-render-orchestrator.ts +55 -45
  172. package/src/services/runtime-render-pipeline.ts +106 -103
  173. package/src/services/runtime-render-state.ts +62 -49
  174. package/src/services/runtime-repository-actions.ts +97 -72
  175. package/src/services/runtime-right-pane-render.ts +80 -53
  176. package/src/services/runtime-shutdown.ts +38 -35
  177. package/src/services/runtime-stream-subscriptions.ts +35 -27
  178. package/src/services/runtime-task-composer-persistence.ts +71 -59
  179. package/src/services/runtime-task-composer-snapshot.ts +14 -0
  180. package/src/services/runtime-task-editor-actions.ts +46 -29
  181. package/src/services/runtime-task-pane-actions.ts +220 -134
  182. package/src/services/runtime-task-pane-shortcuts.ts +323 -123
  183. package/src/services/runtime-workspace-observed-effect-queue.ts +25 -0
  184. package/src/services/runtime-workspace-observed-events.ts +33 -184
  185. package/src/services/runtime-workspace-observed-transition-policy.ts +228 -0
  186. package/src/services/session-diagnostics-store.ts +217 -0
  187. package/src/services/startup-background-resume.ts +26 -21
  188. package/src/services/startup-orchestrator.ts +16 -13
  189. package/src/services/startup-paint-tracker.ts +29 -21
  190. package/src/services/startup-persisted-conversation-queue.ts +19 -13
  191. package/src/services/startup-settled-gate.ts +25 -15
  192. package/src/services/startup-shutdown.ts +18 -22
  193. package/src/services/startup-state-hydration.ts +44 -34
  194. package/src/services/startup-visibility.ts +12 -4
  195. package/src/services/task-pane-selection-actions.ts +89 -72
  196. package/src/services/task-planning-hydration.ts +24 -18
  197. package/src/services/task-planning-observed-events.ts +50 -52
  198. package/src/services/workspace-observed-events.ts +66 -63
  199. package/src/storage/storage-lifecycle-core.ts +438 -0
  200. package/src/store/control-plane-store-normalize.ts +33 -242
  201. package/src/store/control-plane-store-types.ts +1 -35
  202. package/src/store/control-plane-store.ts +360 -56
  203. package/src/store/event-store.ts +366 -8
  204. package/src/terminal/snapshot-oracle.ts +207 -94
  205. package/src/ui/mux-theme.ts +112 -8
  206. package/src/ui/panes/home-gridfire.ts +40 -31
  207. package/src/ui/panes/home.ts +10 -2
  208. package/src/ui/panes/nim.ts +315 -0
  209. package/src/mux/live-mux/actions-task.ts +0 -115
  210. package/src/mux/live-mux/left-rail-actions.ts +0 -118
  211. package/src/mux/live-mux/left-rail-conversation-click.ts +0 -85
  212. package/src/mux/live-mux/left-rail-pointer.ts +0 -74
  213. package/src/mux/live-mux/task-pane-shortcuts.ts +0 -206
  214. package/src/services/runtime-directory-actions.ts +0 -164
  215. package/src/services/runtime-input-pipeline.ts +0 -50
  216. package/src/services/runtime-input-router.ts +0 -195
  217. package/src/services/runtime-main-pane-input.ts +0 -230
  218. package/src/services/runtime-modal-input.ts +0 -137
  219. package/src/services/runtime-navigation-input.ts +0 -197
  220. package/src/services/runtime-rail-input.ts +0 -279
  221. package/src/services/runtime-task-pane.ts +0 -62
  222. package/src/services/runtime-workspace-actions.ts +0 -158
  223. package/src/ui/conversation-input-forwarder.ts +0 -114
  224. package/src/ui/conversation-selection-input.ts +0 -103
  225. package/src/ui/global-shortcut-input.ts +0 -89
  226. package/src/ui/input.ts +0 -269
  227. package/src/ui/kit.ts +0 -509
  228. package/src/ui/left-nav-input.ts +0 -80
  229. package/src/ui/left-rail-pointer-input.ts +0 -148
  230. package/src/ui/modals/manager.ts +0 -218
  231. package/src/ui/repository-fold-input.ts +0 -91
  232. package/src/ui/surface.ts +0 -224
package/src/ui/input.ts DELETED
@@ -1,269 +0,0 @@
1
- import { handleCommandMenuInput as handleCommandMenuInputFrame } from '../mux/live-mux/modal-command-menu-handler.ts';
2
- import {
3
- handleConversationTitleEditInput as handleConversationTitleEditInputFrame,
4
- handleNewThreadPromptInput as handleNewThreadPromptInputFrame,
5
- } from '../mux/live-mux/modal-conversation-handlers.ts';
6
- import {
7
- handleApiKeyPromptInput as handleApiKeyPromptInputFrame,
8
- handleAddDirectoryPromptInput as handleAddDirectoryPromptInputFrame,
9
- handleRepositoryPromptInput as handleRepositoryPromptInputFrame,
10
- } from '../mux/live-mux/modal-prompt-handlers.ts';
11
- import { handleTaskEditorPromptInput as handleTaskEditorPromptInputFrame } from '../mux/live-mux/modal-task-editor-handler.ts';
12
- import type {
13
- ApiKeyPromptState,
14
- ConversationTitleEditState,
15
- RepositoryPromptState,
16
- TaskEditorPromptState,
17
- } from '../domain/workspace.ts';
18
- import type {
19
- CommandMenuActionDescriptor,
20
- CommandMenuState,
21
- } from '../mux/live-mux/command-menu.ts';
22
- import type {
23
- createNewThreadPromptState,
24
- normalizeThreadAgentType,
25
- } from '../mux/new-thread-prompt.ts';
26
-
27
- type NewThreadPromptState = ReturnType<typeof createNewThreadPromptState>;
28
- type ThreadAgentType = ReturnType<typeof normalizeThreadAgentType>;
29
- type TaskEditorInputResult = ReturnType<typeof handleTaskEditorPromptInputFrame>;
30
- type TaskEditorSubmitPayload = NonNullable<TaskEditorInputResult['submitPayload']>;
31
-
32
- interface InputRouterOptions {
33
- readonly isModalDismissShortcut: (input: Buffer) => boolean;
34
- readonly isCommandMenuToggleShortcut: (input: Buffer) => boolean;
35
- readonly isArchiveConversationShortcut: (input: Buffer) => boolean;
36
- readonly dismissOnOutsideClick: (
37
- input: Buffer,
38
- dismiss: () => void,
39
- onInsidePointerPress?: (col: number, row: number) => boolean,
40
- ) => boolean;
41
- readonly buildConversationTitleModalOverlay: () => { top: number } | null;
42
- readonly buildCommandMenuModalOverlay: () => { top: number } | null;
43
- readonly buildNewThreadModalOverlay: () => { top: number } | null;
44
- readonly resolveNewThreadPromptAgentByRow: (
45
- overlayTop: number,
46
- row: number,
47
- ) => ThreadAgentType | null;
48
- readonly stopConversationTitleEdit: (persistPending: boolean) => void;
49
- readonly queueControlPlaneOp: (task: () => Promise<void>, label: string) => void;
50
- readonly archiveConversation: (sessionId: string) => Promise<void>;
51
- readonly createAndActivateConversationInDirectory: (
52
- directoryId: string,
53
- agentType: ThreadAgentType,
54
- ) => Promise<void>;
55
- readonly addDirectoryByPath: (path: string) => Promise<void>;
56
- readonly normalizeGitHubRemoteUrl: (remoteUrl: string) => string | null;
57
- readonly upsertRepositoryByRemoteUrl: (
58
- remoteUrl: string,
59
- existingRepositoryId?: string,
60
- ) => Promise<void>;
61
- readonly repositoriesHas: (repositoryId: string) => boolean;
62
- readonly markDirty: () => void;
63
- readonly conversations: ReadonlyMap<string, { title: string }>;
64
- readonly scheduleConversationTitlePersist: () => void;
65
- readonly getTaskEditorPrompt: () => TaskEditorPromptState | null;
66
- readonly setTaskEditorPrompt: (next: TaskEditorPromptState | null) => void;
67
- readonly submitTaskEditorPayload: (payload: TaskEditorSubmitPayload) => void;
68
- readonly getApiKeyPrompt?: () => ApiKeyPromptState | null;
69
- readonly setApiKeyPrompt?: (next: ApiKeyPromptState | null) => void;
70
- readonly persistApiKey?: (keyName: string, value: string) => void;
71
- readonly getConversationTitleEdit: () => ConversationTitleEditState | null;
72
- readonly getCommandMenu: () => CommandMenuState | null;
73
- readonly setCommandMenu: (menu: CommandMenuState | null) => void;
74
- readonly resolveCommandMenuActions: () => readonly CommandMenuActionDescriptor[];
75
- readonly executeCommandMenuAction: (actionId: string) => void;
76
- readonly getNewThreadPrompt: () => NewThreadPromptState | null;
77
- readonly setNewThreadPrompt: (prompt: NewThreadPromptState | null) => void;
78
- readonly getAddDirectoryPrompt: () => { value: string; error: string | null } | null;
79
- readonly setAddDirectoryPrompt: (
80
- next: {
81
- value: string;
82
- error: string | null;
83
- } | null,
84
- ) => void;
85
- readonly getRepositoryPrompt: () => RepositoryPromptState | null;
86
- readonly setRepositoryPrompt: (next: RepositoryPromptState | null) => void;
87
- }
88
-
89
- interface InputRouterDependencies {
90
- readonly handleCommandMenuInput?: typeof handleCommandMenuInputFrame;
91
- readonly handleTaskEditorPromptInput?: typeof handleTaskEditorPromptInputFrame;
92
- readonly handleApiKeyPromptInput?: typeof handleApiKeyPromptInputFrame;
93
- readonly handleConversationTitleEditInput?: typeof handleConversationTitleEditInputFrame;
94
- readonly handleNewThreadPromptInput?: typeof handleNewThreadPromptInputFrame;
95
- readonly handleAddDirectoryPromptInput?: typeof handleAddDirectoryPromptInputFrame;
96
- readonly handleRepositoryPromptInput?: typeof handleRepositoryPromptInputFrame;
97
- }
98
-
99
- export class InputRouter {
100
- private readonly handleCommandMenuInputFrame: typeof handleCommandMenuInputFrame;
101
- private readonly handleTaskEditorPromptInputFrame: typeof handleTaskEditorPromptInputFrame;
102
- private readonly handleApiKeyPromptInputFrame: typeof handleApiKeyPromptInputFrame;
103
- private readonly handleConversationTitleEditInputFrame: typeof handleConversationTitleEditInputFrame;
104
- private readonly handleNewThreadPromptInputFrame: typeof handleNewThreadPromptInputFrame;
105
- private readonly handleAddDirectoryPromptInputFrame: typeof handleAddDirectoryPromptInputFrame;
106
- private readonly handleRepositoryPromptInputFrame: typeof handleRepositoryPromptInputFrame;
107
-
108
- constructor(
109
- private readonly options: InputRouterOptions,
110
- dependencies: InputRouterDependencies = {},
111
- ) {
112
- this.handleCommandMenuInputFrame =
113
- dependencies.handleCommandMenuInput ?? handleCommandMenuInputFrame;
114
- this.handleTaskEditorPromptInputFrame =
115
- dependencies.handleTaskEditorPromptInput ?? handleTaskEditorPromptInputFrame;
116
- this.handleApiKeyPromptInputFrame =
117
- dependencies.handleApiKeyPromptInput ?? handleApiKeyPromptInputFrame;
118
- this.handleConversationTitleEditInputFrame =
119
- dependencies.handleConversationTitleEditInput ?? handleConversationTitleEditInputFrame;
120
- this.handleNewThreadPromptInputFrame =
121
- dependencies.handleNewThreadPromptInput ?? handleNewThreadPromptInputFrame;
122
- this.handleAddDirectoryPromptInputFrame =
123
- dependencies.handleAddDirectoryPromptInput ?? handleAddDirectoryPromptInputFrame;
124
- this.handleRepositoryPromptInputFrame =
125
- dependencies.handleRepositoryPromptInput ?? handleRepositoryPromptInputFrame;
126
- }
127
-
128
- handleCommandMenuInput(input: Buffer): boolean {
129
- return this.handleCommandMenuInputFrame({
130
- input,
131
- menu: this.options.getCommandMenu(),
132
- isQuitShortcut: this.options.isModalDismissShortcut,
133
- isToggleShortcut: this.options.isCommandMenuToggleShortcut,
134
- dismissOnOutsideClick: this.options.dismissOnOutsideClick,
135
- buildCommandMenuModalOverlay: this.options.buildCommandMenuModalOverlay,
136
- resolveActions: this.options.resolveCommandMenuActions,
137
- executeAction: this.options.executeCommandMenuAction,
138
- setMenu: this.options.setCommandMenu,
139
- markDirty: this.options.markDirty,
140
- });
141
- }
142
-
143
- handleTaskEditorPromptInput(input: Buffer): boolean {
144
- const handled = this.handleTaskEditorPromptInputFrame({
145
- input,
146
- prompt: this.options.getTaskEditorPrompt(),
147
- isQuitShortcut: this.options.isModalDismissShortcut,
148
- dismissOnOutsideClick: this.options.dismissOnOutsideClick,
149
- });
150
- if (!handled.handled) {
151
- return false;
152
- }
153
- if (handled.nextPrompt !== undefined) {
154
- this.options.setTaskEditorPrompt(handled.nextPrompt);
155
- }
156
- if (handled.markDirty) {
157
- this.options.markDirty();
158
- }
159
- if (handled.submitPayload !== undefined) {
160
- this.options.submitTaskEditorPayload(handled.submitPayload);
161
- }
162
- return true;
163
- }
164
-
165
- handleRepositoryPromptInput(input: Buffer): boolean {
166
- return this.handleRepositoryPromptInputFrame({
167
- input,
168
- prompt: this.options.getRepositoryPrompt(),
169
- isQuitShortcut: this.options.isModalDismissShortcut,
170
- dismissOnOutsideClick: this.options.dismissOnOutsideClick,
171
- setPrompt: this.options.setRepositoryPrompt,
172
- markDirty: this.options.markDirty,
173
- repositoriesHas: this.options.repositoriesHas,
174
- normalizeGitHubRemoteUrl: this.options.normalizeGitHubRemoteUrl,
175
- queueControlPlaneOp: this.options.queueControlPlaneOp,
176
- upsertRepositoryByRemoteUrl: this.options.upsertRepositoryByRemoteUrl,
177
- });
178
- }
179
-
180
- handleApiKeyPromptInput(input: Buffer): boolean {
181
- if (
182
- this.options.getApiKeyPrompt === undefined ||
183
- this.options.setApiKeyPrompt === undefined ||
184
- this.options.persistApiKey === undefined
185
- ) {
186
- return false;
187
- }
188
- return this.handleApiKeyPromptInputFrame({
189
- input,
190
- prompt: this.options.getApiKeyPrompt(),
191
- isQuitShortcut: this.options.isModalDismissShortcut,
192
- dismissOnOutsideClick: this.options.dismissOnOutsideClick,
193
- setPrompt: this.options.setApiKeyPrompt,
194
- markDirty: this.options.markDirty,
195
- persistApiKey: this.options.persistApiKey,
196
- });
197
- }
198
-
199
- handleNewThreadPromptInput(input: Buffer): boolean {
200
- return this.handleNewThreadPromptInputFrame({
201
- input,
202
- prompt: this.options.getNewThreadPrompt(),
203
- isQuitShortcut: this.options.isModalDismissShortcut,
204
- dismissOnOutsideClick: this.options.dismissOnOutsideClick,
205
- buildNewThreadModalOverlay: this.options.buildNewThreadModalOverlay,
206
- resolveNewThreadPromptAgentByRow: this.options.resolveNewThreadPromptAgentByRow,
207
- queueControlPlaneOp: this.options.queueControlPlaneOp,
208
- createAndActivateConversationInDirectory:
209
- this.options.createAndActivateConversationInDirectory,
210
- markDirty: this.options.markDirty,
211
- setPrompt: this.options.setNewThreadPrompt,
212
- });
213
- }
214
-
215
- handleConversationTitleEditInput(input: Buffer): boolean {
216
- return this.handleConversationTitleEditInputFrame({
217
- input,
218
- edit: this.options.getConversationTitleEdit(),
219
- isQuitShortcut: this.options.isModalDismissShortcut,
220
- isArchiveShortcut: this.options.isArchiveConversationShortcut,
221
- dismissOnOutsideClick: this.options.dismissOnOutsideClick,
222
- buildConversationTitleModalOverlay: this.options.buildConversationTitleModalOverlay,
223
- stopConversationTitleEdit: this.options.stopConversationTitleEdit,
224
- queueControlPlaneOp: this.options.queueControlPlaneOp,
225
- archiveConversation: this.options.archiveConversation,
226
- markDirty: this.options.markDirty,
227
- conversations: this.options.conversations,
228
- scheduleConversationTitlePersist: this.options.scheduleConversationTitlePersist,
229
- });
230
- }
231
-
232
- handleAddDirectoryPromptInput(input: Buffer): boolean {
233
- return this.handleAddDirectoryPromptInputFrame({
234
- input,
235
- prompt: this.options.getAddDirectoryPrompt(),
236
- isQuitShortcut: this.options.isModalDismissShortcut,
237
- dismissOnOutsideClick: this.options.dismissOnOutsideClick,
238
- setPrompt: this.options.setAddDirectoryPrompt,
239
- markDirty: this.options.markDirty,
240
- queueControlPlaneOp: this.options.queueControlPlaneOp,
241
- addDirectoryByPath: this.options.addDirectoryByPath,
242
- });
243
- }
244
-
245
- routeModalInput(input: Buffer): boolean {
246
- if (this.handleCommandMenuInput(input)) {
247
- return true;
248
- }
249
- if (this.handleTaskEditorPromptInput(input)) {
250
- return true;
251
- }
252
- if (this.handleRepositoryPromptInput(input)) {
253
- return true;
254
- }
255
- if (this.handleApiKeyPromptInput(input)) {
256
- return true;
257
- }
258
- if (this.handleNewThreadPromptInput(input)) {
259
- return true;
260
- }
261
- if (this.handleConversationTitleEditInput(input)) {
262
- return true;
263
- }
264
- if (this.handleAddDirectoryPromptInput(input)) {
265
- return true;
266
- }
267
- return false;
268
- }
269
- }