@qduc/term2 0.2.0 → 0.3.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/dist/app.d.ts.map +1 -1
- package/dist/app.js +14 -6
- package/dist/app.js.map +1 -1
- package/dist/components/BottomArea.d.ts +3 -2
- package/dist/components/BottomArea.d.ts.map +1 -1
- package/dist/components/BottomArea.js.map +1 -1
- package/dist/components/Input/PopupManager.d.ts +1 -1
- package/dist/components/Input/PopupManager.d.ts.map +1 -1
- package/dist/components/Input/PopupManager.js.map +1 -1
- package/dist/components/Input/determine-active-menu.d.ts +2 -1
- package/dist/components/Input/determine-active-menu.d.ts.map +1 -1
- package/dist/components/Input/determine-active-menu.js +41 -28
- package/dist/components/Input/determine-active-menu.js.map +1 -1
- package/dist/components/InputBox.d.ts +3 -2
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +46 -11
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/InputBox.menu-logic.test.js +55 -15
- package/dist/components/InputBox.menu-logic.test.js.map +1 -1
- package/dist/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/components/MarkdownRenderer.js +36 -24
- package/dist/components/MarkdownRenderer.js.map +1 -1
- package/dist/components/MessageList.test.js +14 -0
- package/dist/components/MessageList.test.js.map +1 -1
- package/dist/components/SlashCommandMenu.d.ts +1 -6
- package/dist/components/SlashCommandMenu.d.ts.map +1 -1
- package/dist/components/SlashCommandMenu.js.map +1 -1
- package/dist/hooks/use-app-commands.d.ts +1 -1
- package/dist/hooks/use-app-commands.d.ts.map +1 -1
- package/dist/hooks/use-app-commands.js +4 -0
- package/dist/hooks/use-app-commands.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +2 -1
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +6 -4
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +32 -11
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-model-selection.test.js +107 -10
- package/dist/hooks/use-model-selection.test.js.map +1 -1
- package/dist/hooks/use-slash-commands.d.ts +1 -1
- package/dist/hooks/use-slash-commands.d.ts.map +1 -1
- package/dist/hooks/use-trigger-detection.d.ts +3 -1
- package/dist/hooks/use-trigger-detection.d.ts.map +1 -1
- package/dist/hooks/use-trigger-detection.js +3 -3
- package/dist/hooks/use-trigger-detection.js.map +1 -1
- package/dist/lib/openai-agent-client.d.ts +2 -1
- package/dist/lib/openai-agent-client.d.ts.map +1 -1
- package/dist/lib/openai-agent-client.js +2 -4
- package/dist/lib/openai-agent-client.js.map +1 -1
- package/dist/lib/openai-agent-client.test.js +1 -1
- package/dist/lib/openai-agent-client.test.js.map +1 -1
- package/dist/lib/retry-executor.d.ts.map +1 -1
- package/dist/lib/retry-executor.js +1 -2
- package/dist/lib/retry-executor.js.map +1 -1
- package/dist/lib/retry-executor.test.js +1 -2
- package/dist/lib/retry-executor.test.js.map +1 -1
- package/dist/providers/ai-sdk-message-normalizer.d.ts +8 -0
- package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.js +70 -0
- package/dist/providers/ai-sdk-message-normalizer.js.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.test.d.ts +2 -0
- package/dist/providers/ai-sdk-message-normalizer.test.d.ts.map +1 -0
- package/dist/providers/ai-sdk-message-normalizer.test.js +195 -0
- package/dist/providers/ai-sdk-message-normalizer.test.js.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.d.ts +24 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.js +27 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.test.d.ts +2 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.test.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.test.js +68 -0
- package/dist/providers/ai-sdk-openai-compatible.provider.test.js.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.d.ts +16 -0
- package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.js +22 -0
- package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.d.ts +2 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.d.ts.map +1 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.js +70 -0
- package/dist/providers/ai-sdk-openrouter.provider.test.js.map +1 -0
- package/dist/providers/common/openai-compatible-messages.d.ts +8 -0
- package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -0
- package/dist/providers/common/openai-compatible-messages.js +356 -0
- package/dist/providers/common/openai-compatible-messages.js.map +1 -0
- package/dist/providers/common/openai-compatible-messages.test.d.ts +2 -0
- package/dist/providers/common/openai-compatible-messages.test.d.ts.map +1 -0
- package/dist/providers/common/openai-compatible-messages.test.js +26 -0
- package/dist/providers/common/openai-compatible-messages.test.js.map +1 -0
- package/dist/providers/common/openai-compatible-utils.d.ts +11 -0
- package/dist/providers/common/openai-compatible-utils.d.ts.map +1 -0
- package/dist/providers/common/openai-compatible-utils.js +33 -0
- package/dist/providers/common/openai-compatible-utils.js.map +1 -0
- package/dist/providers/common/provider-errors.d.ts +13 -0
- package/dist/providers/common/provider-errors.d.ts.map +1 -0
- package/dist/providers/common/provider-errors.js +25 -0
- package/dist/providers/common/provider-errors.js.map +1 -0
- package/dist/providers/openai-compatible.provider.createRunner.test.d.ts +2 -0
- package/dist/providers/openai-compatible.provider.createRunner.test.d.ts.map +1 -0
- package/dist/providers/openai-compatible.provider.createRunner.test.js +39 -0
- package/dist/providers/openai-compatible.provider.createRunner.test.js.map +1 -0
- package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
- package/dist/providers/openai-compatible.provider.js +18 -8
- package/dist/providers/openai-compatible.provider.js.map +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +1 -3
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/openrouter.provider.createRunner.test.js +28 -0
- package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -1
- package/dist/providers/openrouter.provider.js +14 -5
- package/dist/providers/openrouter.provider.js.map +1 -1
- package/dist/scripts/eval-auto-approval/dataset.d.ts +2 -2
- package/dist/services/conversation-session.d.ts +3 -2
- package/dist/services/conversation-session.d.ts.map +1 -1
- package/dist/services/conversation-session.js +12 -6
- package/dist/services/conversation-session.js.map +1 -1
- package/dist/services/conversation-store.d.ts +2 -0
- package/dist/services/conversation-store.d.ts.map +1 -1
- package/dist/services/conversation-store.js +27 -0
- package/dist/services/conversation-store.js.map +1 -1
- package/dist/services/conversation-store.test.js +34 -0
- package/dist/services/conversation-store.test.js.map +1 -1
- package/dist/services/logging-contract.d.ts +3 -3
- package/dist/services/logging-service.d.ts.map +1 -1
- package/dist/services/logging-service.js +5 -1
- package/dist/services/logging-service.js.map +1 -1
- package/dist/services/model-service.test.js +1 -5
- package/dist/services/model-service.test.js.map +1 -1
- package/dist/services/settings-schema.d.ts +12 -8
- package/dist/services/settings-schema.d.ts.map +1 -1
- package/dist/services/settings-schema.js +9 -0
- package/dist/services/settings-schema.js.map +1 -1
- package/dist/services/stream-event-parsing.js +1 -1
- package/dist/services/stream-event-parsing.js.map +1 -1
- package/dist/services/stream-event-parsing.test.js +13 -0
- package/dist/services/stream-event-parsing.test.js.map +1 -1
- package/dist/slash-commands.d.ts +20 -0
- package/dist/slash-commands.d.ts.map +1 -0
- package/dist/slash-commands.js +2 -0
- package/dist/slash-commands.js.map +1 -0
- package/dist/types/user-turn.d.ts +16 -0
- package/dist/types/user-turn.d.ts.map +1 -0
- package/dist/types/user-turn.js +27 -0
- package/dist/types/user-turn.js.map +1 -0
- package/dist/types/user-turn.test.d.ts +2 -0
- package/dist/types/user-turn.test.d.ts.map +1 -0
- package/dist/types/user-turn.test.js +32 -0
- package/dist/types/user-turn.test.js.map +1 -0
- package/dist/utils/log-truncation.d.ts +7 -0
- package/dist/utils/log-truncation.d.ts.map +1 -0
- package/dist/utils/log-truncation.js +66 -0
- package/dist/utils/log-truncation.js.map +1 -0
- package/dist/utils/log-truncation.test.d.ts +2 -0
- package/dist/utils/log-truncation.test.d.ts.map +1 -0
- package/dist/utils/log-truncation.test.js +44 -0
- package/dist/utils/log-truncation.test.js.map +1 -0
- package/dist/utils/settings-command.d.ts +1 -1
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +2 -0
- package/dist/utils/settings-command.js.map +1 -1
- package/package.json +6 -2
- package/readme.md +29 -24
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAA0B,MAAM,OAAO,CAAC;AAU1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAI/D,OAAO,EAAgB,OAAO,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAA0B,MAAM,OAAO,CAAC;AAU1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAI/D,OAAO,EAAgB,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAIlE,UAAU,QAAQ;IAChB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,QAAA,MAAM,GAAG,EAAE,EAAE,CAAC,QAAQ,CAyMrB,CAAC;AAEF,eAAe,GAAG,CAAC"}
|
package/dist/app.js
CHANGED
|
@@ -12,6 +12,7 @@ import { parseInput } from './utils/input-parser.js';
|
|
|
12
12
|
import { useRuntimeSettings } from './hooks/use-runtime-settings.js';
|
|
13
13
|
import { useShellMode } from './hooks/use-shell-mode.js';
|
|
14
14
|
import { useAppCommands } from './hooks/use-app-commands.js';
|
|
15
|
+
import { hasUserTurnContent } from './types/user-turn.js';
|
|
15
16
|
const App = ({ conversationService, settingsService, historyService, loggingService, sshInfo, sshService, }) => {
|
|
16
17
|
const { exit } = useApp();
|
|
17
18
|
const { setInput } = useInputActions();
|
|
@@ -83,8 +84,10 @@ const App = ({ conversationService, settingsService, historyService, loggingServ
|
|
|
83
84
|
}
|
|
84
85
|
toggleEditMode();
|
|
85
86
|
});
|
|
86
|
-
const handleSubmit = async (
|
|
87
|
-
|
|
87
|
+
const handleSubmit = async (turn) => {
|
|
88
|
+
const value = turn.text;
|
|
89
|
+
const hasImages = Boolean(turn.images?.length);
|
|
90
|
+
if (!hasUserTurnContent(turn))
|
|
88
91
|
return;
|
|
89
92
|
// If waiting for rejection reason, handle it
|
|
90
93
|
if (waitingForRejectionReason) {
|
|
@@ -96,7 +99,7 @@ const App = ({ conversationService, settingsService, historyService, loggingServ
|
|
|
96
99
|
// If waiting for approval, ignore text input (handled by useInput)
|
|
97
100
|
if (waitingForApproval)
|
|
98
101
|
return;
|
|
99
|
-
if (liteMode && isShellMode) {
|
|
102
|
+
if (liteMode && isShellMode && !hasImages) {
|
|
100
103
|
await handleShellSubmit(value);
|
|
101
104
|
return;
|
|
102
105
|
}
|
|
@@ -104,6 +107,9 @@ const App = ({ conversationService, settingsService, historyService, loggingServ
|
|
|
104
107
|
const parsed = parseInput(value);
|
|
105
108
|
switch (parsed.type) {
|
|
106
109
|
case 'slash-command': {
|
|
110
|
+
if (hasImages) {
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
107
113
|
// Find matching command
|
|
108
114
|
const command = slashCommands.find((cmd) => cmd.name === parsed.commandName);
|
|
109
115
|
if (command) {
|
|
@@ -120,14 +126,16 @@ const App = ({ conversationService, settingsService, historyService, loggingServ
|
|
|
120
126
|
}
|
|
121
127
|
case 'message':
|
|
122
128
|
// Regular message, send to AI agent
|
|
123
|
-
|
|
129
|
+
if (value.trim()) {
|
|
130
|
+
historyService.addMessage(value);
|
|
131
|
+
}
|
|
124
132
|
setInput('');
|
|
125
|
-
await sendUserMessage(
|
|
133
|
+
await sendUserMessage(turn);
|
|
126
134
|
return;
|
|
127
135
|
}
|
|
128
136
|
// Fallback: unknown slash command, send as message
|
|
129
137
|
setInput('');
|
|
130
|
-
await sendUserMessage(
|
|
138
|
+
await sendUserMessage(turn);
|
|
131
139
|
};
|
|
132
140
|
return (React.createElement(ErrorBoundary, { loggingService: loggingService },
|
|
133
141
|
React.createElement(Box, { flexDirection: "column", flexGrow: 1, paddingX: 2 },
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAM,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,YAAY,MAAM,8BAA8B,CAAC;AACxD,OAAO,UAAU,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAM9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAW,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
|
-
import type { SlashCommand } from '
|
|
2
|
+
import type { SlashCommand } from '../slash-commands.js';
|
|
3
3
|
import type { SettingsService } from '../services/settings-service.js';
|
|
4
4
|
import type { LoggingService } from '../services/logging-service.js';
|
|
5
5
|
import type { HistoryService } from '../services/history-service.js';
|
|
6
6
|
import type { SSHInfo } from '../hooks/use-shell-mode.js';
|
|
7
7
|
import type { NormalizedUsage } from '../utils/token-usage.js';
|
|
8
8
|
import type { PendingApproval } from '../contracts/conversation.js';
|
|
9
|
+
import type { UserTurn } from '../types/user-turn.js';
|
|
9
10
|
export type BottomAreaProps = {
|
|
10
11
|
pendingApproval: PendingApproval | null;
|
|
11
12
|
waitingForApproval: boolean;
|
|
@@ -13,7 +14,7 @@ export type BottomAreaProps = {
|
|
|
13
14
|
isProcessing: boolean;
|
|
14
15
|
isShellMode?: boolean;
|
|
15
16
|
lastUsage?: NormalizedUsage | null;
|
|
16
|
-
onSubmit: (value:
|
|
17
|
+
onSubmit: (value: UserTurn) => Promise<void>;
|
|
17
18
|
slashCommands: SlashCommand[];
|
|
18
19
|
hasConversationHistory: boolean;
|
|
19
20
|
settingsService: SettingsService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomArea.d.ts","sourceRoot":"","sources":["../../source/components/BottomArea.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;AAKvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"BottomArea.d.ts","sourceRoot":"","sources":["../../source/components/BottomArea.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;AAKvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,yBAAyB,EAAE,OAAO,CAAC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,QAAA,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAyDnC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomArea.js","sourceRoot":"","sources":["../../source/components/BottomArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAM,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,SAAS,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"BottomArea.js","sourceRoot":"","sources":["../../source/components/BottomArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAM,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AA4BvC,MAAM,UAAU,GAAwB,CAAC,EACvC,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,YAAY,EACZ,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACT,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE,EAAE;IACH,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,WAAW,CAAC,CAAC,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,kBAAkB,GAAG,kBAAkB,IAAI,CAAC,YAAY,IAAI,CAAC,yBAAyB,IAAI,eAAe,CAAC;IAChH,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,yBAAyB,CAAC;IAEtF,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACxB,kBAAkB,CAAC,CAAC,CAAC,CACpB,oBAAC,cAAc,IAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAI,CACxF,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACd,oBAAC,QAAQ,IACP,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,sBAAsB,EAAE,sBAAsB,EAC9C,yBAAyB,EAAE,yBAAyB,EACpD,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,GAC9B,CACH,CAAC,CAAC,CAAC,IAAI;QAEP,YAAY,IAAI,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS;;YAAY,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAQ;QAE9E,oBAAC,SAAS,IAAC,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAI,CAC7G,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
|
-
import { SlashCommand } from '
|
|
2
|
+
import type { SlashCommand } from '../../slash-commands.js';
|
|
3
3
|
import type { PathCompletionItem } from '../../hooks/use-path-completion.js';
|
|
4
4
|
import type { SettingCompletionItem } from '../../hooks/use-settings-completion.js';
|
|
5
5
|
import type { SettingValueSuggestion } from '../../hooks/use-settings-value-completion.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PopupManager.d.ts","sourceRoot":"","sources":["../../../source/components/Input/PopupManager.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PopupManager.d.ts","sourceRoot":"","sources":["../../../source/components/Input/PopupManager.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAK5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,UAAU,iBAAiB;IACzB,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE;QACJ,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,qBAAqB,EAAE,CAAC;QAC/B,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,aAAa,EAAE;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,KAAK,EAAE,sBAAsB,EAAE,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAiD9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PopupManager.js","sourceRoot":"","sources":["../../../source/components/Input/PopupManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAa,MAAM,OAAO,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"PopupManager.js","sourceRoot":"","sources":["../../../source/components/Input/PopupManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAa,MAAM,OAAO,CAAC;AAClC,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AAEtD,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,qBAAqB,MAAM,6BAA6B,CAAC;AAChE,OAAO,0BAA0B,MAAM,kCAAkC,CAAC;AAC1E,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAkD1D,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAClD,KAAK,EACL,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,aAAa,EACb,eAAe,GAChB,EAAE,EAAE;IACH,OAAO,CACL;QACG,MAAM,CAAC,MAAM,IAAI,CAChB,oBAAC,kBAAkB,IACjB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,aAAa,EAAE,MAAM,CAAC,aAAa,EACnC,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,YAAY,EAAE,MAAM,CAAC,YAAY,EACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAC3C,eAAe,EAAE,eAAe,GAChC,CACH;QACA,IAAI,CAAC,MAAM,IAAI,CACd,oBAAC,iBAAiB,IAChB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,KAAK,EAAE,IAAI,CAAC,KAAK,GACjB,CACH;QACA,KAAK,CAAC,MAAM,IAAI,CACf,oBAAC,gBAAgB,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAI,CACzG;QACA,QAAQ,CAAC,MAAM,IAAI,CAClB,oBAAC,qBAAqB,IAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAI,CAC/G;QACA,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,UAAU,IAAI,CACnD,oBAAC,0BAA0B,IACzB,UAAU,EAAE,aAAa,CAAC,UAAU,EACpC,KAAK,EAAE,aAAa,CAAC,KAAK,EAC1B,aAAa,EAAE,aAAa,CAAC,aAAa,EAC1C,KAAK,EAAE,aAAa,CAAC,KAAK,EAC1B,iBAAiB,EAAE,aAAa,CAAC,iBAAiB,GAClD,CACH,CACA,CACJ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SlashCommand } from '../../slash-commands.js';
|
|
1
2
|
export type ActiveMenu = {
|
|
2
3
|
type: 'none';
|
|
3
4
|
} | {
|
|
@@ -19,5 +20,5 @@ export type ActiveMenu = {
|
|
|
19
20
|
query: string;
|
|
20
21
|
};
|
|
21
22
|
};
|
|
22
|
-
export declare const determineActiveMenu: (value: string, cursorOffset: number) => ActiveMenu;
|
|
23
|
+
export declare const determineActiveMenu: (value: string, cursorOffset: number, commands?: SlashCommand[]) => ActiveMenu;
|
|
23
24
|
//# sourceMappingURL=determine-active-menu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"determine-active-menu.d.ts","sourceRoot":"","sources":["../../../source/components/Input/determine-active-menu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"determine-active-menu.d.ts","sourceRoot":"","sources":["../../../source/components/Input/determine-active-menu.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,yBAAyB,CAAC;AAUpF,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAQhE,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,EAAE,cAAc,MAAM,EAAE,WAAU,YAAY,EAAO,KAAG,UAgExG,CAAC"}
|
|
@@ -1,45 +1,58 @@
|
|
|
1
|
-
import { MODEL_TRIGGER,
|
|
2
|
-
import {
|
|
3
|
-
const
|
|
1
|
+
import { MODEL_TRIGGER, MENTOR_TRIGGER, AUTO_APPROVE_MODEL_TRIGGER, EDIT_HEALING_MODEL_TRIGGER, } from '../../hooks/use-model-selection.js';
|
|
2
|
+
import { findPathTrigger } from './triggers.js';
|
|
3
|
+
const MODEL_SETTING_TRIGGERS = [
|
|
4
4
|
MODEL_TRIGGER,
|
|
5
|
-
MODEL_CMD_TRIGGER,
|
|
6
5
|
MENTOR_TRIGGER,
|
|
7
6
|
AUTO_APPROVE_MODEL_TRIGGER,
|
|
8
7
|
EDIT_HEALING_MODEL_TRIGGER,
|
|
9
8
|
];
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
const hasCompletion = (completion) => completion !== undefined;
|
|
10
|
+
const getCommandCompletions = (commands = []) => commands.map((command) => command.completion).filter(hasCompletion);
|
|
11
|
+
export const determineActiveMenu = (value, cursorOffset, commands = []) => {
|
|
12
|
+
const commandCompletions = getCommandCompletions(commands);
|
|
13
|
+
// Priority 0: model selection. Settings-backed model keys stay in model-settings;
|
|
14
|
+
// command-backed model triggers are declared on slash commands.
|
|
15
|
+
const commandModelTriggers = commandCompletions
|
|
16
|
+
.filter((completion) => completion.type === 'model')
|
|
17
|
+
.map((completion) => completion.trigger);
|
|
18
|
+
for (const trigger of [...MODEL_SETTING_TRIGGERS, ...commandModelTriggers]) {
|
|
14
19
|
if (value.startsWith(trigger) && cursorOffset >= trigger.length) {
|
|
15
20
|
return { type: 'model', startIndex: trigger.length };
|
|
16
21
|
}
|
|
17
22
|
}
|
|
18
|
-
// Priority 1: settings (reset variant first because it's a prefix-extension),
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
// Priority 1: settings (reset variant first because it's a prefix-extension),
|
|
24
|
+
// then static setting-value command triggers.
|
|
25
|
+
for (const completion of commandCompletions) {
|
|
26
|
+
if (completion.type !== 'settings')
|
|
27
|
+
continue;
|
|
28
|
+
if (value.startsWith(completion.resetTrigger)) {
|
|
29
|
+
if (cursorOffset >= completion.resetTrigger.length) {
|
|
30
|
+
return { type: 'settings', startIndex: completion.resetTrigger.length };
|
|
31
|
+
}
|
|
32
|
+
continue;
|
|
22
33
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
if (value.startsWith(completion.trigger)) {
|
|
35
|
+
const end = Math.min(cursorOffset, value.length);
|
|
36
|
+
const afterPrefix = value.slice(completion.trigger.length, end);
|
|
37
|
+
const keyAndSpaceMatch = afterPrefix.match(/^(\S+)\s+/);
|
|
38
|
+
if (keyAndSpaceMatch) {
|
|
39
|
+
const key = keyAndSpaceMatch[1] ?? '';
|
|
40
|
+
const startIndex = completion.trigger.length + (keyAndSpaceMatch[0]?.length ?? 0);
|
|
41
|
+
return { type: 'settings_value', key, startIndex };
|
|
42
|
+
}
|
|
43
|
+
if (cursorOffset >= completion.trigger.length) {
|
|
44
|
+
return { type: 'settings', startIndex: completion.trigger.length };
|
|
45
|
+
}
|
|
35
46
|
}
|
|
36
47
|
}
|
|
37
|
-
|
|
38
|
-
if (
|
|
48
|
+
for (const completion of commandCompletions) {
|
|
49
|
+
if (completion.type !== 'setting-value')
|
|
50
|
+
continue;
|
|
51
|
+
if (value.startsWith(completion.trigger) && cursorOffset >= completion.trigger.length) {
|
|
39
52
|
return {
|
|
40
53
|
type: 'settings_value',
|
|
41
|
-
key:
|
|
42
|
-
startIndex:
|
|
54
|
+
key: completion.settingKey,
|
|
55
|
+
startIndex: completion.trigger.length,
|
|
43
56
|
};
|
|
44
57
|
}
|
|
45
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"determine-active-menu.js","sourceRoot":"","sources":["../../../source/components/Input/determine-active-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"determine-active-menu.js","sourceRoot":"","sources":["../../../source/components/Input/determine-active-menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { SlashCommand } from '
|
|
2
|
+
import type { SlashCommand } from '../slash-commands.js';
|
|
3
3
|
import type { SettingsService } from '../services/settings-service.js';
|
|
4
4
|
import type { LoggingService } from '../services/logging-service.js';
|
|
5
5
|
import type { HistoryService } from '../services/history-service.js';
|
|
6
6
|
import { calculateInputWidth } from './Input/input-width.js';
|
|
7
|
+
import type { UserTurn } from '../types/user-turn.js';
|
|
7
8
|
export { calculateInputWidth };
|
|
8
9
|
type Props = {
|
|
9
|
-
onSubmit: (v:
|
|
10
|
+
onSubmit: (v: UserTurn) => void | Promise<void>;
|
|
10
11
|
slashCommands: SlashCommand[];
|
|
11
12
|
hasConversationHistory?: boolean;
|
|
12
13
|
waitingForRejectionReason?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../source/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../source/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAa5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAS7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAmB/B,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;CAChC,CAAC;;AAgQF,wBAAoC"}
|
|
@@ -17,8 +17,24 @@ import { computePathInsertion, computeSettingInsertion, computeSettingValueInser
|
|
|
17
17
|
import { useModeHandlers } from '../hooks/use-mode-handlers.js';
|
|
18
18
|
import { toPopupProps } from './Input/popup-props.js';
|
|
19
19
|
export { calculateInputWidth };
|
|
20
|
+
const areImagesEqual = (a, b) => {
|
|
21
|
+
if (a === b)
|
|
22
|
+
return true;
|
|
23
|
+
if (a.length !== b.length)
|
|
24
|
+
return false;
|
|
25
|
+
return a.every((image, index) => {
|
|
26
|
+
const other = b[index];
|
|
27
|
+
return (other &&
|
|
28
|
+
image.id === other.id &&
|
|
29
|
+
image.data === other.data &&
|
|
30
|
+
image.mimeType === other.mimeType &&
|
|
31
|
+
image.byteSize === other.byteSize &&
|
|
32
|
+
image.displayNumber === other.displayNumber);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
20
35
|
const InputBox = ({ onSubmit, slashCommands, settingsService, loggingService, hasConversationHistory = false, waitingForRejectionReason = false, isShellMode = false, historyService, }) => {
|
|
21
36
|
const { input: value, setInput: onChange, mode, setMode, cursorOffset, setCursorOffset } = useInputContext();
|
|
37
|
+
const [images, setImages] = useState([]);
|
|
22
38
|
const escPressedRef = useRef(false);
|
|
23
39
|
const [cursorOverride, setCursorOverride] = useState(null);
|
|
24
40
|
const terminalWidth = useTerminalWidth({ waitingForRejectionReason, isShellMode });
|
|
@@ -39,6 +55,13 @@ const InputBox = ({ onSubmit, slashCommands, settingsService, loggingService, ha
|
|
|
39
55
|
const { navigateUp, navigateDown } = useInputHistory(historyService);
|
|
40
56
|
const [, setInputKey] = useState(0);
|
|
41
57
|
const remountInput = useCallback(() => setInputKey((prev) => prev + 1), []);
|
|
58
|
+
const handleImagesChange = useCallback((nextImages) => {
|
|
59
|
+
setImages((prevImages) => (areImagesEqual(prevImages, nextImages) ? prevImages : nextImages));
|
|
60
|
+
}, []);
|
|
61
|
+
const submitTextOnly = useCallback((text) => {
|
|
62
|
+
setImages([]);
|
|
63
|
+
void onSubmit({ text });
|
|
64
|
+
}, [onSubmit]);
|
|
42
65
|
const insertSelectedPath = useCallback((appendTrailingSpace) => {
|
|
43
66
|
const result = computePathInsertion({
|
|
44
67
|
selection: path.getSelectedItem(),
|
|
@@ -76,10 +99,12 @@ const InputBox = ({ onSubmit, slashCommands, settingsService, loggingService, ha
|
|
|
76
99
|
onChange(result.nextValue);
|
|
77
100
|
setCursorOverride(result.nextCursor);
|
|
78
101
|
settingsValue.close();
|
|
79
|
-
if (submitAfterInsert)
|
|
80
|
-
|
|
102
|
+
if (submitAfterInsert) {
|
|
103
|
+
setImages([]);
|
|
104
|
+
submitTextOnly(result.nextValue);
|
|
105
|
+
}
|
|
81
106
|
return true;
|
|
82
|
-
}, [settingsValue, value, onChange, cursorOffset,
|
|
107
|
+
}, [settingsValue, value, onChange, cursorOffset, submitTextOnly]);
|
|
83
108
|
const insertSelectedModel = useCallback((submitAfterInsert) => {
|
|
84
109
|
const result = computeModelInsertion({
|
|
85
110
|
selection: models.getSelectedItem(),
|
|
@@ -93,10 +118,12 @@ const InputBox = ({ onSubmit, slashCommands, settingsService, loggingService, ha
|
|
|
93
118
|
onChange(result.nextValue);
|
|
94
119
|
setCursorOverride(result.nextCursor);
|
|
95
120
|
models.close();
|
|
96
|
-
if (submitAfterInsert)
|
|
97
|
-
|
|
121
|
+
if (submitAfterInsert) {
|
|
122
|
+
setImages([]);
|
|
123
|
+
submitTextOnly(result.nextValue);
|
|
124
|
+
}
|
|
98
125
|
return true;
|
|
99
|
-
}, [models, value, onChange,
|
|
126
|
+
}, [models, value, onChange, submitTextOnly]);
|
|
100
127
|
const modeHandlers = useModeHandlers({
|
|
101
128
|
slash,
|
|
102
129
|
path,
|
|
@@ -107,7 +134,7 @@ const InputBox = ({ onSubmit, slashCommands, settingsService, loggingService, ha
|
|
|
107
134
|
insertSelectedSetting,
|
|
108
135
|
insertSelectedSettingValue,
|
|
109
136
|
insertSelectedModel,
|
|
110
|
-
onSubmit,
|
|
137
|
+
onSubmit: submitTextOnly,
|
|
111
138
|
onSlashCommandRemount: remountInput,
|
|
112
139
|
});
|
|
113
140
|
const stateRef = useRef({ mode, modeHandlers });
|
|
@@ -139,6 +166,7 @@ const InputBox = ({ onSubmit, slashCommands, settingsService, loggingService, ha
|
|
|
139
166
|
settings,
|
|
140
167
|
settingsValue,
|
|
141
168
|
models,
|
|
169
|
+
slashCommands,
|
|
142
170
|
});
|
|
143
171
|
// Tab handling for active menu (other keys flow to MultilineInput).
|
|
144
172
|
useInput((_input, key) => {
|
|
@@ -167,16 +195,23 @@ const InputBox = ({ onSubmit, slashCommands, settingsService, loggingService, ha
|
|
|
167
195
|
remountInput();
|
|
168
196
|
}
|
|
169
197
|
}, [mode, modeHandlers, navigateUp, navigateDown, value, onChange, remountInput]);
|
|
170
|
-
const handleWrapperSubmit = useCallback((submittedValue) => {
|
|
198
|
+
const handleWrapperSubmit = useCallback((submittedValue, submittedImages) => {
|
|
171
199
|
if (mode !== 'text' && modeHandlers[mode].onSubmit?.(submittedValue) === 'handled')
|
|
172
200
|
return;
|
|
173
|
-
|
|
174
|
-
|
|
201
|
+
const turnImages = submittedImages ?? images;
|
|
202
|
+
if (!submittedValue.trim() && turnImages.length === 0)
|
|
203
|
+
return;
|
|
204
|
+
setImages([]);
|
|
205
|
+
void onSubmit({ text: submittedValue, ...(turnImages.length ? { images: turnImages } : {}) });
|
|
206
|
+
}, [mode, modeHandlers, onSubmit, images]);
|
|
207
|
+
const handlePasteError = useCallback((reason) => {
|
|
208
|
+
loggingService.warn('Image paste failed', { reason });
|
|
209
|
+
}, [loggingService]);
|
|
175
210
|
return (React.createElement(Box, { flexDirection: "column" },
|
|
176
211
|
React.createElement(PopupManager, { ...toPopupProps({ slash, path, settings, settingsValue, models }), settingsService: settingsService }),
|
|
177
212
|
React.createElement(Box, null,
|
|
178
213
|
waitingForRejectionReason ? (React.createElement(Text, { color: "yellow" }, "Why? ")) : isShellMode ? (React.createElement(Text, { color: "green" }, "$ ")) : (React.createElement(Text, { color: "#22d3ee" }, "\u276F ")),
|
|
179
|
-
React.createElement(MultilineInput, { value: value, width: terminalWidth, onChange: onChange, onSubmit: handleWrapperSubmit, onCursorChange: setCursorOffset, cursorOverride: cursorOverride ?? undefined, onBoundaryArrow: handleBoundaryArrow })),
|
|
214
|
+
React.createElement(MultilineInput, { value: value, width: terminalWidth, onChange: onChange, onSubmit: handleWrapperSubmit, onCursorChange: setCursorOffset, cursorOverride: cursorOverride ?? undefined, onBoundaryArrow: handleBoundaryArrow, enableImagePaste: true, images: images, onImagesChange: handleImagesChange, onPasteError: handlePasteError, pasteThreshold: settingsService.get('ui.pasteThreshold') })),
|
|
180
215
|
escHintVisible && React.createElement(Text, { color: "#64748b" }, "Press ESC again to clear input"),
|
|
181
216
|
waitingForRejectionReason && React.createElement(Text, { color: "#64748b" }, "(or ESC to cancel)")));
|
|
182
217
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputBox.js","sourceRoot":"","sources":["../../source/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAM,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"InputBox.js","sourceRoot":"","sources":["../../source/components/InputBox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,31 @@
|
|
|
1
1
|
import test from 'ava';
|
|
2
2
|
import { findPathTrigger } from './Input/triggers.js';
|
|
3
3
|
import { determineActiveMenu } from './Input/determine-active-menu.js';
|
|
4
|
-
import { MODEL_TRIGGER,
|
|
4
|
+
import { MODEL_TRIGGER, MENTOR_TRIGGER, AUTO_APPROVE_MODEL_TRIGGER, EDIT_HEALING_MODEL_TRIGGER, } from '../hooks/use-model-selection.js';
|
|
5
|
+
const commandMetadata = [
|
|
6
|
+
{
|
|
7
|
+
name: 'model',
|
|
8
|
+
description: 'Change model',
|
|
9
|
+
expectsArgs: true,
|
|
10
|
+
completion: { type: 'model', trigger: '/model ' },
|
|
11
|
+
action: () => { },
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'settings',
|
|
15
|
+
description: 'Settings',
|
|
16
|
+
expectsArgs: true,
|
|
17
|
+
completion: { type: 'settings', trigger: '/settings ', resetTrigger: '/settings reset ' },
|
|
18
|
+
action: () => { },
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'auto-approve',
|
|
22
|
+
description: 'Shell approval',
|
|
23
|
+
expectsArgs: true,
|
|
24
|
+
completion: { type: 'setting-value', trigger: '/auto-approve ', settingKey: 'shell.autoApproveMode' },
|
|
25
|
+
action: () => { },
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
const determine = (input, cursor = input.length) => determineActiveMenu(input, cursor, commandMetadata);
|
|
5
29
|
test('determineActiveMenu - model triggers (priority 0)', (t) => {
|
|
6
30
|
const cases = [
|
|
7
31
|
{
|
|
@@ -12,7 +36,7 @@ test('determineActiveMenu - model triggers (priority 0)', (t) => {
|
|
|
12
36
|
{
|
|
13
37
|
input: '/model gpt',
|
|
14
38
|
cursor: '/model gpt'.length,
|
|
15
|
-
expected: { type: 'model', startIndex:
|
|
39
|
+
expected: { type: 'model', startIndex: '/model '.length },
|
|
16
40
|
},
|
|
17
41
|
{
|
|
18
42
|
input: '/settings agent.mentorModel claude',
|
|
@@ -31,7 +55,7 @@ test('determineActiveMenu - model triggers (priority 0)', (t) => {
|
|
|
31
55
|
},
|
|
32
56
|
];
|
|
33
57
|
for (const { input, cursor, expected } of cases) {
|
|
34
|
-
t.deepEqual(
|
|
58
|
+
t.deepEqual(determine(input, cursor), expected, `Failed for input: "${input}"`);
|
|
35
59
|
}
|
|
36
60
|
});
|
|
37
61
|
test('determineActiveMenu - settings menu (priority 1)', (t) => {
|
|
@@ -45,13 +69,13 @@ test('determineActiveMenu - settings menu (priority 1)', (t) => {
|
|
|
45
69
|
},
|
|
46
70
|
];
|
|
47
71
|
for (const { input, cursor, expected } of cases) {
|
|
48
|
-
t.deepEqual(
|
|
72
|
+
t.deepEqual(determine(input, cursor), expected, `Failed for input: "${input}"`);
|
|
49
73
|
}
|
|
50
74
|
});
|
|
51
75
|
test('determineActiveMenu - settings reset variant', (t) => {
|
|
52
76
|
const reset = '/settings reset ';
|
|
53
|
-
t.deepEqual(
|
|
54
|
-
t.deepEqual(
|
|
77
|
+
t.deepEqual(determine(reset), { type: 'settings', startIndex: reset.length });
|
|
78
|
+
t.deepEqual(determine(`${reset}log`), {
|
|
55
79
|
type: 'settings',
|
|
56
80
|
startIndex: reset.length,
|
|
57
81
|
});
|
|
@@ -59,7 +83,7 @@ test('determineActiveMenu - settings reset variant', (t) => {
|
|
|
59
83
|
test('determineActiveMenu - settings_value transition (key + space)', (t) => {
|
|
60
84
|
// Generic key, not a model trigger.
|
|
61
85
|
const input = '/settings logging.logLevel ';
|
|
62
|
-
t.deepEqual(
|
|
86
|
+
t.deepEqual(determine(input), {
|
|
63
87
|
type: 'settings_value',
|
|
64
88
|
key: 'logging.logLevel',
|
|
65
89
|
startIndex: input.length,
|
|
@@ -67,7 +91,7 @@ test('determineActiveMenu - settings_value transition (key + space)', (t) => {
|
|
|
67
91
|
});
|
|
68
92
|
test('determineActiveMenu - auto-approve trigger maps to settings_value', (t) => {
|
|
69
93
|
const input = '/auto-approve ';
|
|
70
|
-
t.deepEqual(
|
|
94
|
+
t.deepEqual(determine(input), {
|
|
71
95
|
type: 'settings_value',
|
|
72
96
|
key: 'shell.autoApproveMode',
|
|
73
97
|
startIndex: input.length,
|
|
@@ -80,7 +104,7 @@ test('determineActiveMenu - slash menu (priority 2)', (t) => {
|
|
|
80
104
|
{ input: '/clear', cursor: 6, expected: { type: 'slash' } },
|
|
81
105
|
];
|
|
82
106
|
for (const { input, cursor, expected } of cases) {
|
|
83
|
-
t.deepEqual(
|
|
107
|
+
t.deepEqual(determine(input, cursor), expected, `Failed for input: "${input}"`);
|
|
84
108
|
}
|
|
85
109
|
});
|
|
86
110
|
test('determineActiveMenu - path menu (priority 3)', (t) => {
|
|
@@ -94,7 +118,7 @@ test('determineActiveMenu - path menu (priority 3)', (t) => {
|
|
|
94
118
|
},
|
|
95
119
|
];
|
|
96
120
|
for (const { input, cursor, expected } of cases) {
|
|
97
|
-
t.deepEqual(
|
|
121
|
+
t.deepEqual(determine(input, cursor), expected, `Failed for input: "${input}"`);
|
|
98
122
|
}
|
|
99
123
|
});
|
|
100
124
|
test('determineActiveMenu - none', (t) => {
|
|
@@ -104,24 +128,40 @@ test('determineActiveMenu - none', (t) => {
|
|
|
104
128
|
{ input: 'test', cursor: 4, expected: { type: 'none' } },
|
|
105
129
|
];
|
|
106
130
|
for (const { input, cursor, expected } of cases) {
|
|
107
|
-
t.deepEqual(
|
|
131
|
+
t.deepEqual(determine(input, cursor), expected, `Failed for input: "${input}"`);
|
|
108
132
|
}
|
|
109
133
|
});
|
|
110
134
|
test('determineActiveMenu - priority enforcement', (t) => {
|
|
111
135
|
// Settings beats slash.
|
|
112
|
-
t.deepEqual(
|
|
136
|
+
t.deepEqual(determine('/settings ', 10), { type: 'settings', startIndex: 10 });
|
|
113
137
|
// Model beats settings when model trigger fully present.
|
|
114
|
-
t.deepEqual(
|
|
138
|
+
t.deepEqual(determine('/settings agent.model ', MODEL_TRIGGER.length), {
|
|
115
139
|
type: 'model',
|
|
116
140
|
startIndex: MODEL_TRIGGER.length,
|
|
117
141
|
});
|
|
118
142
|
// Slash beats path: "/@test" stays slash.
|
|
119
|
-
t.deepEqual(
|
|
143
|
+
t.deepEqual(determine('/@test', 6), { type: 'slash' });
|
|
144
|
+
});
|
|
145
|
+
test('determineActiveMenu - static setting-value commands come from command metadata', (t) => {
|
|
146
|
+
const commands = [
|
|
147
|
+
{
|
|
148
|
+
name: 'theme-mode',
|
|
149
|
+
description: 'Set theme mode',
|
|
150
|
+
expectsArgs: true,
|
|
151
|
+
completion: { type: 'setting-value', trigger: '/theme-mode ', settingKey: 'ui.theme' },
|
|
152
|
+
action: () => { },
|
|
153
|
+
},
|
|
154
|
+
];
|
|
155
|
+
t.deepEqual(determineActiveMenu('/theme-mode ', '/theme-mode '.length, commands), {
|
|
156
|
+
type: 'settings_value',
|
|
157
|
+
key: 'ui.theme',
|
|
158
|
+
startIndex: '/theme-mode '.length,
|
|
159
|
+
});
|
|
120
160
|
});
|
|
121
161
|
test('determineActiveMenu - cursor not yet past trigger returns none', (t) => {
|
|
122
162
|
// value contains "/settings " but cursor is mid-trigger; cursor < trigger.length and the trailing
|
|
123
163
|
// space disqualifies slash too, so no menu activates.
|
|
124
|
-
t.deepEqual(
|
|
164
|
+
t.deepEqual(determine('/settings ', 5), { type: 'none' });
|
|
125
165
|
});
|
|
126
166
|
test('findPathTrigger - basic behavior preserved', (t) => {
|
|
127
167
|
t.deepEqual(findPathTrigger('@', 1), { start: 0, query: '' });
|