@gajae-code/coding-agent 0.12.0 → 0.12.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/CHANGELOG.md +82 -1
- package/dist/types/async/job-manager.d.ts +17 -3
- package/dist/types/config/settings-schema.d.ts +54 -0
- package/dist/types/exa/mcp-client.d.ts +10 -1
- package/dist/types/exec/bash-executor.d.ts +45 -12
- package/dist/types/extensibility/extensions/types.d.ts +16 -2
- package/dist/types/extensibility/gjc-plugins/index.d.ts +12 -2
- package/dist/types/extensibility/gjc-plugins/installer.d.ts +63 -7
- package/dist/types/extensibility/gjc-plugins/lifecycle-reconciliation.d.ts +55 -0
- package/dist/types/extensibility/gjc-plugins/lifecycle.d.ts +64 -0
- package/dist/types/extensibility/gjc-plugins/runtime-quarantine.d.ts +67 -0
- package/dist/types/extensibility/gjc-plugins/session-validation.d.ts +3 -1
- package/dist/types/extensibility/gjc-plugins/types.d.ts +124 -0
- package/dist/types/gjc-runtime/launch-tmux.d.ts +1 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +18 -0
- package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
- package/dist/types/gjc-runtime/team-runtime.d.ts +25 -0
- package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +43 -0
- package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +10 -0
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +31 -80
- package/dist/types/modes/acp/acp-agent.d.ts +2 -19
- package/dist/types/modes/components/gjc-bundle-settings.d.ts +34 -0
- package/dist/types/modes/components/notifications-settings-editor.d.ts +1 -0
- package/dist/types/modes/components/session-observer-overlay.d.ts +18 -0
- package/dist/types/modes/components/settings-selector.d.ts +9 -0
- package/dist/types/modes/components/status-line/gh.d.ts +5 -0
- package/dist/types/modes/components/transcript-viewer-overlay.d.ts +18 -1
- package/dist/types/reminders/star-reminder.d.ts +3 -13
- package/dist/types/runtime-mcp/manager.d.ts +1 -0
- package/dist/types/sdk/acp/adapter.d.ts +3 -1
- package/dist/types/sdk/broker/transport.d.ts +2 -0
- package/dist/types/sdk/bus/attachment-registry.d.ts +1 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +4 -1
- package/dist/types/sdk/bus/config.d.ts +6 -2
- package/dist/types/sdk/bus/index.d.ts +29 -0
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +8 -1
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
- package/dist/types/sdk/bus/reconciliation-store.d.ts +7 -3
- package/dist/types/sdk/bus/rich-draft.d.ts +1 -0
- package/dist/types/sdk/bus/rich-render.d.ts +2 -0
- package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +165 -0
- package/dist/types/sdk/bus/telegram-cli.d.ts +12 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +11 -4
- package/dist/types/sdk/bus/telegram-daemon.d.ts +25 -1
- package/dist/types/sdk/bus/telegram-reference.d.ts +11 -1
- package/dist/types/sdk/bus/threaded-render.d.ts +3 -2
- package/dist/types/sdk/bus/topic-registry.d.ts +11 -1
- package/dist/types/sdk/host/query/revision-store.d.ts +2 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
- package/dist/types/sdk/prompt-status.d.ts +23 -3
- package/dist/types/sdk/session.d.ts +6 -0
- package/dist/types/session/agent-session.d.ts +38 -2
- package/dist/types/session/artifacts.d.ts +8 -0
- package/dist/types/session/blob-store.d.ts +57 -4
- package/dist/types/session/internal/managed-session-storage.d.ts +8 -1
- package/dist/types/session/session-manager.d.ts +23 -6
- package/dist/types/session/session-storage.d.ts +4 -0
- package/dist/types/session/streaming-output.d.ts +36 -7
- package/dist/types/setup/credential-import.d.ts +12 -0
- package/dist/types/skill-state/active-state.d.ts +12 -0
- package/dist/types/skill-state/workflow-hud.d.ts +6 -0
- package/dist/types/task/executor.d.ts +3 -2
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/task/provider-retry-status.d.ts +8 -0
- package/dist/types/task/receipt.d.ts +7 -1
- package/dist/types/task/types.d.ts +23 -0
- package/dist/types/tools/ask-answer-registry.d.ts +2 -2
- package/dist/types/tools/bash-interactive.d.ts +4 -1
- package/dist/types/tools/bash.d.ts +3 -1
- package/dist/types/tools/image-gen.d.ts +4 -0
- package/dist/types/tools/index.d.ts +4 -0
- package/dist/types/tools/output-meta.d.ts +23 -2
- package/dist/types/tools/path-utils.d.ts +1 -0
- package/dist/types/tools/read.d.ts +0 -6
- package/dist/types/tools/review.d.ts +5 -7
- package/dist/types/tools/subagent.d.ts +2 -0
- package/dist/types/utils/gh.d.ts +13 -0
- package/dist/types/utils/image-resize.d.ts +1 -0
- package/dist/types/web/search/providers/kimi.d.ts +2 -0
- package/dist/types/web/search/providers/searxng.d.ts +7 -0
- package/dist/types/web/search/providers/xai.d.ts +2 -0
- package/package.json +10 -8
- package/scripts/acp-conformance-agent.ts +218 -0
- package/scripts/capture-gjc-bundle-settings.ts +306 -0
- package/scripts/generate-sdk-operation-inventory.ts +3 -0
- package/scripts/resident-memory-bench.ts +1341 -0
- package/scripts/run-acp-conformance.ts +285 -0
- package/src/async/job-manager.ts +78 -20
- package/src/cli/fast-help.ts +1 -1
- package/src/cli/plugin-cli.ts +176 -18
- package/src/commands/team.ts +19 -1
- package/src/config/file-lock.ts +11 -2
- package/src/config/settings-schema.ts +51 -0
- package/src/coordinator-mcp/question-gate-codec.ts +1 -1
- package/src/coordinator-mcp/server.ts +5 -12
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +1 -0
- package/src/defaults/gjc/skills/ralplan/SKILL.md +19 -16
- package/src/defaults/gjc/skills/team/SKILL.md +2 -0
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +37 -24
- package/src/defaults/gjc/skills/ultragoal/validation-batch-contracts.md +12 -0
- package/src/defaults/gjc-defaults.ts +4 -4
- package/src/exa/mcp-client.ts +12 -3
- package/src/exec/bash-executor.ts +144 -27
- package/src/extensibility/extensions/runner.ts +15 -0
- package/src/extensibility/extensions/types.ts +18 -1
- package/src/extensibility/gjc-plugins/constrained-hooks.ts +8 -2
- package/src/extensibility/gjc-plugins/index.ts +19 -2
- package/src/extensibility/gjc-plugins/installer.ts +189 -50
- package/src/extensibility/gjc-plugins/lifecycle-reconciliation.ts +199 -0
- package/src/extensibility/gjc-plugins/lifecycle.ts +626 -0
- package/src/extensibility/gjc-plugins/observability.ts +3 -3
- package/src/extensibility/gjc-plugins/prompt-appendix.ts +5 -1
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +12 -2
- package/src/extensibility/gjc-plugins/runtime-quarantine.ts +121 -0
- package/src/extensibility/gjc-plugins/schema.ts +84 -12
- package/src/extensibility/gjc-plugins/session-validation.ts +9 -3
- package/src/extensibility/gjc-plugins/types.ts +141 -0
- package/src/extensibility/gjc-plugins/validation.ts +9 -0
- package/src/gjc-runtime/launch-tmux.ts +25 -6
- package/src/gjc-runtime/managed-owner-admission.ts +1 -1
- package/src/gjc-runtime/ralplan-runtime.ts +411 -17
- package/src/gjc-runtime/team-launch.ts +8 -0
- package/src/gjc-runtime/team-runtime.ts +140 -32
- package/src/gjc-runtime/team-worker-heartbeat.ts +149 -0
- package/src/gjc-runtime/tmux-owner-isolation.ts +10 -0
- package/src/gjc-runtime/tmux-sessions.ts +58 -13
- package/src/gjc-runtime/ultragoal-runtime.ts +401 -611
- package/src/gjc-runtime/workflow-manifest.generated.json +8 -99
- package/src/gjc-runtime/workflow-manifest.ts +4 -68
- package/src/internal-urls/docs-index.generated.ts +15 -15
- package/src/modes/DESIGN.md +51 -0
- package/src/modes/acp/acp-agent.ts +298 -186
- package/src/modes/components/gjc-bundle-settings.ts +508 -0
- package/src/modes/components/notifications-settings-editor.ts +12 -1
- package/src/modes/components/oauth-selector.ts +68 -30
- package/src/modes/components/session-observer-overlay.ts +305 -86
- package/src/modes/components/settings-selector.ts +56 -5
- package/src/modes/components/status-line/gh.ts +16 -0
- package/src/modes/components/tool-status-header.ts +3 -14
- package/src/modes/components/transcript-viewer-overlay.ts +99 -24
- package/src/modes/controllers/command-controller.ts +4 -0
- package/src/modes/controllers/extension-ui-controller.ts +7 -0
- package/src/modes/controllers/selector-controller.ts +45 -0
- package/src/modes/runtime-init.ts +3 -0
- package/src/prompts/agent-fragments/ralplan-persistence.md +4 -3
- package/src/prompts/system/eager-todo.md +8 -4
- package/src/prompts/system/system-prompt.md +11 -4
- package/src/prompts/tools/bash.md +5 -5
- package/src/prompts/tools/search-tool-bm25.md +5 -0
- package/src/prompts/tools/task.md +1 -1
- package/src/reminders/star-reminder.ts +4 -42
- package/src/runtime-mcp/manager.ts +19 -4
- package/src/sdk/acp/adapter.ts +22 -6
- package/src/sdk/broker/transport.ts +35 -3
- package/src/sdk/bus/attachment-registry.ts +5 -1
- package/src/sdk/bus/chat-daemon-cli.ts +4 -39
- package/src/sdk/bus/chat-daemon-control.ts +6 -3
- package/src/sdk/bus/config.ts +18 -2
- package/src/sdk/bus/index.ts +661 -126
- package/src/sdk/bus/kind-aware-reconciliation.ts +148 -73
- package/src/sdk/bus/lifecycle-commands.ts +4 -1
- package/src/sdk/bus/lifecycle-control-runtime.ts +403 -88
- package/src/sdk/bus/reconciliation-store.ts +95 -16
- package/src/sdk/bus/rich-draft.ts +1 -1
- package/src/sdk/bus/rich-render.ts +2 -2
- package/src/sdk/bus/telegram-adoption-intent.ts +574 -0
- package/src/sdk/bus/telegram-cli.ts +33 -8
- package/src/sdk/bus/telegram-daemon-cli.ts +1 -0
- package/src/sdk/bus/telegram-daemon-contract.ts +11 -4
- package/src/sdk/bus/telegram-daemon.ts +916 -23
- package/src/sdk/bus/telegram-reference.ts +40 -3
- package/src/sdk/bus/threaded-render.ts +48 -3
- package/src/sdk/bus/topic-registry.ts +20 -0
- package/src/sdk/host/query/revision-store.ts +36 -2
- package/src/sdk/host/reverse-leases.ts +44 -7
- package/src/sdk/prompt-status.ts +16 -3
- package/src/sdk/protocol/operation-inventory.generated.json +22 -0
- package/src/sdk/session.ts +88 -9
- package/src/session/agent-session.ts +822 -172
- package/src/session/artifacts.ts +22 -0
- package/src/session/auth-broker-config.ts +10 -3
- package/src/session/blob-store.ts +915 -24
- package/src/session/internal/managed-session-scope.ts +44 -6
- package/src/session/internal/managed-session-storage.ts +48 -6
- package/src/session/session-manager.ts +1614 -435
- package/src/session/session-storage.ts +9 -1
- package/src/session/streaming-output.ts +238 -68
- package/src/setup/credential-import.ts +75 -13
- package/src/skill-state/active-state.ts +32 -0
- package/src/skill-state/workflow-hud.ts +17 -0
- package/src/skill-state/workflow-mutation-guard.ts +496 -2
- package/src/task/executor.ts +122 -39
- package/src/task/index.ts +23 -14
- package/src/task/provider-retry-status.ts +16 -0
- package/src/task/receipt.ts +23 -7
- package/src/task/render.ts +6 -2
- package/src/task/types.ts +108 -0
- package/src/tools/ask-answer-registry.ts +12 -6
- package/src/tools/ask.ts +86 -55
- package/src/tools/ast-edit.ts +1 -0
- package/src/tools/ast-grep.ts +1 -0
- package/src/tools/bash-interactive.ts +8 -3
- package/src/tools/bash.ts +503 -60
- package/src/tools/find.ts +1 -0
- package/src/tools/image-gen.ts +29 -5
- package/src/tools/index.ts +4 -0
- package/src/tools/output-meta.ts +108 -14
- package/src/tools/path-utils.ts +3 -2
- package/src/tools/read.ts +18 -0
- package/src/tools/review.ts +5 -7
- package/src/tools/search.ts +1 -0
- package/src/tools/subagent-render.ts +6 -2
- package/src/tools/subagent.ts +6 -0
- package/src/tools/telegram-send.ts +6 -3
- package/src/utils/gh.ts +39 -0
- package/src/utils/image-resize.ts +3 -0
- package/src/web/search/providers/anthropic.ts +4 -4
- package/src/web/search/providers/kimi.ts +15 -5
- package/src/web/search/providers/searxng.ts +47 -4
- package/src/web/search/providers/xai.ts +7 -2
- package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +0 -23
- package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +0 -30
- package/src/gjc-runtime/ultragoal-pipeline.ts +0 -306
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getOAuthProviders } from "@gajae-code/ai/utils/oauth";
|
|
2
2
|
import type { OAuthProviderInfo } from "@gajae-code/ai/utils/oauth/types";
|
|
3
|
-
import { Container, matchesKey, Spacer, TruncatedText } from "@gajae-code/tui";
|
|
3
|
+
import { Container, fuzzyFilter, Input, matchesKey, Spacer, TruncatedText } from "@gajae-code/tui";
|
|
4
4
|
import { recordProviderAuthHealth } from "../../config/provider-auth-health";
|
|
5
5
|
import { compareRankedProviders, type ProviderAuthState } from "../../config/provider-ranking";
|
|
6
6
|
import { theme } from "../../modes/theme/theme";
|
|
@@ -17,6 +17,8 @@ export class OAuthSelectorComponent extends Container {
|
|
|
17
17
|
#listContainer: Container;
|
|
18
18
|
#allProviders: OAuthProviderInfo[] = [];
|
|
19
19
|
#sortedProviders: OAuthProviderInfo[] = [];
|
|
20
|
+
#filteredProviders: OAuthProviderInfo[] = [];
|
|
21
|
+
#searchInput: Input;
|
|
20
22
|
#selectedIndex: number = 0;
|
|
21
23
|
#mode: "login" | "logout";
|
|
22
24
|
#authStorage: AuthStorage;
|
|
@@ -57,6 +59,14 @@ export class OAuthSelectorComponent extends Container {
|
|
|
57
59
|
const title = mode === "login" ? "Select provider to login:" : "Select provider to logout:";
|
|
58
60
|
this.addChild(new TruncatedText(theme.bold(title)));
|
|
59
61
|
this.addChild(new Spacer(1));
|
|
62
|
+
// Filter box: the provider list is long enough that arrow-key-only
|
|
63
|
+
// navigation buries entries below the visible window.
|
|
64
|
+
this.#searchInput = new Input();
|
|
65
|
+
this.#searchInput.onSubmit = () => {
|
|
66
|
+
this.#selectCurrentProvider();
|
|
67
|
+
};
|
|
68
|
+
this.addChild(this.#searchInput);
|
|
69
|
+
this.addChild(new Spacer(1));
|
|
60
70
|
// Create list container
|
|
61
71
|
this.#listContainer = new Container();
|
|
62
72
|
this.addChild(this.#listContainer);
|
|
@@ -166,7 +176,7 @@ export class OAuthSelectorComponent extends Container {
|
|
|
166
176
|
return this.#authStorage.hasAuth(providerId) ? theme.fg("success", ` ${theme.status.success} logged in`) : "";
|
|
167
177
|
}
|
|
168
178
|
#updateList(): void {
|
|
169
|
-
const selectedProviderId = this.#
|
|
179
|
+
const selectedProviderId = this.#filteredProviders[this.#selectedIndex]?.id;
|
|
170
180
|
const rankedProviders = this.#allProviders.map(provider => ({
|
|
171
181
|
provider,
|
|
172
182
|
id: provider.id,
|
|
@@ -175,16 +185,23 @@ export class OAuthSelectorComponent extends Container {
|
|
|
175
185
|
}));
|
|
176
186
|
rankedProviders.sort(compareRankedProviders);
|
|
177
187
|
this.#sortedProviders = rankedProviders.map(({ provider }) => provider);
|
|
188
|
+
// Filter after ranking so an empty query preserves the curated order and a
|
|
189
|
+
// query still surfaces matches in that same order of preference.
|
|
190
|
+
this.#filteredProviders = fuzzyFilter(
|
|
191
|
+
this.#sortedProviders,
|
|
192
|
+
this.#searchInput.getValue(),
|
|
193
|
+
provider => `${provider.name} ${provider.id}`,
|
|
194
|
+
);
|
|
178
195
|
if (selectedProviderId !== undefined) {
|
|
179
|
-
const selectedIndex = this.#
|
|
196
|
+
const selectedIndex = this.#filteredProviders.findIndex(provider => provider.id === selectedProviderId);
|
|
180
197
|
if (selectedIndex >= 0) this.#selectedIndex = selectedIndex;
|
|
181
198
|
}
|
|
182
|
-
if (this.#selectedIndex >= this.#
|
|
183
|
-
this.#selectedIndex = Math.max(0, this.#
|
|
199
|
+
if (this.#selectedIndex >= this.#filteredProviders.length) {
|
|
200
|
+
this.#selectedIndex = Math.max(0, this.#filteredProviders.length - 1);
|
|
184
201
|
}
|
|
185
202
|
this.#listContainer.clear();
|
|
186
203
|
|
|
187
|
-
const total = this.#
|
|
204
|
+
const total = this.#filteredProviders.length;
|
|
188
205
|
const maxVisible = OAUTH_SELECTOR_MAX_VISIBLE;
|
|
189
206
|
const startIndex =
|
|
190
207
|
total <= maxVisible
|
|
@@ -193,7 +210,7 @@ export class OAuthSelectorComponent extends Container {
|
|
|
193
210
|
const endIndex = Math.min(startIndex + maxVisible, total);
|
|
194
211
|
|
|
195
212
|
for (let i = startIndex; i < endIndex; i++) {
|
|
196
|
-
const provider = this.#
|
|
213
|
+
const provider = this.#filteredProviders[i];
|
|
197
214
|
if (!provider) continue;
|
|
198
215
|
const isSelected = i === this.#selectedIndex;
|
|
199
216
|
const isAvailable = provider.available;
|
|
@@ -219,8 +236,11 @@ export class OAuthSelectorComponent extends Container {
|
|
|
219
236
|
|
|
220
237
|
// Show "no providers" if empty
|
|
221
238
|
if (total === 0) {
|
|
222
|
-
const message =
|
|
223
|
-
|
|
239
|
+
const message = this.#searchInput.getValue().trim()
|
|
240
|
+
? "No providers match the filter"
|
|
241
|
+
: this.#mode === "login"
|
|
242
|
+
? "No OAuth providers available"
|
|
243
|
+
: "No OAuth providers logged in. Use /login first.";
|
|
224
244
|
this.#listContainer.addChild(new TruncatedText(theme.fg("muted", ` ${message}`), 0, 0));
|
|
225
245
|
}
|
|
226
246
|
if (this.#statusMessage) {
|
|
@@ -243,60 +263,78 @@ export class OAuthSelectorComponent extends Container {
|
|
|
243
263
|
}
|
|
244
264
|
}
|
|
245
265
|
}
|
|
266
|
+
#selectCurrentProvider(): void {
|
|
267
|
+
const selectedProvider = this.#filteredProviders[this.#selectedIndex];
|
|
268
|
+
if (selectedProvider?.available) {
|
|
269
|
+
this.#statusMessage = undefined;
|
|
270
|
+
this.stopValidation();
|
|
271
|
+
this.#onSelectCallback(selectedProvider.id);
|
|
272
|
+
} else if (selectedProvider) {
|
|
273
|
+
this.#statusMessage = "Provider unavailable in this environment.";
|
|
274
|
+
this.#updateList();
|
|
275
|
+
}
|
|
276
|
+
}
|
|
246
277
|
handleInput(keyData: string): void {
|
|
247
278
|
// Up arrow
|
|
248
279
|
if (matchesKey(keyData, "up")) {
|
|
249
|
-
if (this.#
|
|
280
|
+
if (this.#filteredProviders.length > 0) {
|
|
250
281
|
this.#selectedIndex =
|
|
251
|
-
this.#selectedIndex === 0 ? this.#
|
|
282
|
+
this.#selectedIndex === 0 ? this.#filteredProviders.length - 1 : this.#selectedIndex - 1;
|
|
252
283
|
}
|
|
253
284
|
this.#statusMessage = undefined;
|
|
254
285
|
this.#updateList();
|
|
286
|
+
return;
|
|
255
287
|
}
|
|
256
288
|
// Down arrow
|
|
257
|
-
|
|
258
|
-
if (this.#
|
|
289
|
+
if (matchesKey(keyData, "down")) {
|
|
290
|
+
if (this.#filteredProviders.length > 0) {
|
|
259
291
|
this.#selectedIndex =
|
|
260
|
-
this.#selectedIndex === this.#
|
|
292
|
+
this.#selectedIndex === this.#filteredProviders.length - 1 ? 0 : this.#selectedIndex + 1;
|
|
261
293
|
}
|
|
262
294
|
this.#statusMessage = undefined;
|
|
263
295
|
this.#updateList();
|
|
296
|
+
return;
|
|
264
297
|
}
|
|
265
298
|
// Page up - jump up by one visible page
|
|
266
|
-
|
|
267
|
-
if (this.#
|
|
299
|
+
if (matchesKey(keyData, "pageUp")) {
|
|
300
|
+
if (this.#filteredProviders.length > 0) {
|
|
268
301
|
this.#selectedIndex = Math.max(0, this.#selectedIndex - OAUTH_SELECTOR_MAX_VISIBLE);
|
|
269
302
|
}
|
|
270
303
|
this.#statusMessage = undefined;
|
|
271
304
|
this.#updateList();
|
|
305
|
+
return;
|
|
272
306
|
}
|
|
273
307
|
// Page down - jump down by one visible page
|
|
274
|
-
|
|
275
|
-
if (this.#
|
|
308
|
+
if (matchesKey(keyData, "pageDown")) {
|
|
309
|
+
if (this.#filteredProviders.length > 0) {
|
|
276
310
|
this.#selectedIndex = Math.min(
|
|
277
|
-
this.#
|
|
311
|
+
this.#filteredProviders.length - 1,
|
|
278
312
|
this.#selectedIndex + OAUTH_SELECTOR_MAX_VISIBLE,
|
|
279
313
|
);
|
|
280
314
|
}
|
|
281
315
|
this.#statusMessage = undefined;
|
|
282
316
|
this.#updateList();
|
|
317
|
+
return;
|
|
283
318
|
}
|
|
284
319
|
// Enter
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
this.#statusMessage = undefined;
|
|
289
|
-
this.stopValidation();
|
|
290
|
-
this.#onSelectCallback(selectedProvider.id);
|
|
291
|
-
} else if (selectedProvider) {
|
|
292
|
-
this.#statusMessage = "Provider unavailable in this environment.";
|
|
293
|
-
this.#updateList();
|
|
294
|
-
}
|
|
320
|
+
if (matchesKey(keyData, "enter") || matchesKey(keyData, "return") || keyData === "\n") {
|
|
321
|
+
this.#selectCurrentProvider();
|
|
322
|
+
return;
|
|
295
323
|
}
|
|
296
324
|
// Escape or Ctrl+C
|
|
297
|
-
|
|
325
|
+
if (matchesSelectCancel(keyData)) {
|
|
298
326
|
this.stopValidation();
|
|
299
327
|
this.#onCancelCallback();
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
// Everything else edits the filter. A changed query invalidates the current
|
|
331
|
+
// position, so selection restarts at the best match.
|
|
332
|
+
const previousQuery = this.#searchInput.getValue();
|
|
333
|
+
this.#searchInput.handleInput(keyData);
|
|
334
|
+
if (this.#searchInput.getValue() !== previousQuery) {
|
|
335
|
+
this.#selectedIndex = 0;
|
|
336
|
+
this.#statusMessage = undefined;
|
|
337
|
+
this.#updateList();
|
|
300
338
|
}
|
|
301
339
|
}
|
|
302
340
|
}
|