@8gi-foundation/8gent-code 0.20.12 → 0.20.13
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 +5 -0
- package/README.md +1 -1
- package/dist/cli.js +1 -1
- package/dist/node/cli.js +1 -1
- package/dist/node/tui.js +44 -11
- package/dist/tui.js +44 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,11 @@ versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [0.20.13] - 2026-10-22
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- tui: the prompt stays live in every view unless a picker owns the keyboard, and Esc always returns (0.20.12 regression) ([#4740](https://github.com/8gi-foundation/8gent-code/pull/4740))
|
|
16
|
+
|
|
12
17
|
## [0.20.12] - 2026-10-22
|
|
13
18
|
|
|
14
19
|
### Added
|
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
<p align="center">
|
|
23
23
|
<a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache_2.0-E8610A?style=for-the-badge&labelColor=1A1612" alt="Apache 2.0 License" /></a>
|
|
24
|
-
<a href="https://8gent.dev"><img src="https://img.shields.io/badge/version-0.20.
|
|
24
|
+
<a href="https://8gent.dev"><img src="https://img.shields.io/badge/version-0.20.13-2D8A56?style=for-the-badge&labelColor=1A1612" alt="v0.20.13" /></a>
|
|
25
25
|
<a href="https://eight-vessel.fly.dev"><img src="https://img.shields.io/badge/daemon-Fly.io_Amsterdam-E8610A?style=for-the-badge&labelColor=1A1612" alt="Daemon" /></a>
|
|
26
26
|
</p>
|
|
27
27
|
|
package/dist/cli.js
CHANGED
|
@@ -597524,7 +597524,7 @@ function nodeExecPath(execPath = process.execPath, env = process.env, exists = e
|
|
|
597524
597524
|
|
|
597525
597525
|
// bin/8gent.ts
|
|
597526
597526
|
refuseIfNested();
|
|
597527
|
-
var VERSION5 = "0.20.
|
|
597527
|
+
var VERSION5 = "0.20.13";
|
|
597528
597528
|
var RELAUNCH_EXIT_CODE = 75;
|
|
597529
597529
|
var MODULE_DIR = path158.dirname(fileURLToPath7(import.meta.url));
|
|
597530
597530
|
var EXEC_DIR = path158.dirname(process.execPath);
|
package/dist/node/cli.js
CHANGED
|
@@ -617700,7 +617700,7 @@ function nodeExecPath(execPath = process.execPath, env = process.env, exists = e
|
|
|
617700
617700
|
|
|
617701
617701
|
// bin/8gent.ts
|
|
617702
617702
|
refuseIfNested();
|
|
617703
|
-
var VERSION5 = "0.20.
|
|
617703
|
+
var VERSION5 = "0.20.13";
|
|
617704
617704
|
var RELAUNCH_EXIT_CODE = 75;
|
|
617705
617705
|
var MODULE_DIR = path158.dirname(fileURLToPath8(import.meta.url));
|
|
617706
617706
|
var EXEC_DIR = path158.dirname(process.execPath);
|
package/dist/node/tui.js
CHANGED
|
@@ -33286,7 +33286,7 @@ var init_permissions = __esm(() => {
|
|
|
33286
33286
|
var require_package = __commonJS(function(exports2, module2) {
|
|
33287
33287
|
module2.exports = {
|
|
33288
33288
|
name: "@8gi-foundation/8gent-code",
|
|
33289
|
-
version: "0.20.
|
|
33289
|
+
version: "0.20.13",
|
|
33290
33290
|
private: false,
|
|
33291
33291
|
engines: {
|
|
33292
33292
|
node: ">=22.5"
|
|
@@ -630291,6 +630291,25 @@ function settleSetupTranscript(messages) {
|
|
|
630291
630291
|
return out;
|
|
630292
630292
|
}
|
|
630293
630293
|
|
|
630294
|
+
// apps/tui/src/lib/prompt-focus.ts
|
|
630295
|
+
var KEYBOARD_VIEWS = new Set([
|
|
630296
|
+
"model-select",
|
|
630297
|
+
"provider-select",
|
|
630298
|
+
"theme-select",
|
|
630299
|
+
"session-picker",
|
|
630300
|
+
"session-tree",
|
|
630301
|
+
"keys"
|
|
630302
|
+
]);
|
|
630303
|
+
var ESC_RETURNS_LINE = "Esc returns to the prompt";
|
|
630304
|
+
function promptIsLive(s) {
|
|
630305
|
+
if (KEYBOARD_VIEWS.has(s.viewMode))
|
|
630306
|
+
return false;
|
|
630307
|
+
return !s.tabBodyShown && !s.isBubbleNavMode && !s.paletteOpen && !s.djKeys;
|
|
630308
|
+
}
|
|
630309
|
+
function mayAutoOpenProviderPicker(keyedHostedProviders) {
|
|
630310
|
+
return keyedHostedProviders.length !== 1;
|
|
630311
|
+
}
|
|
630312
|
+
|
|
630294
630313
|
// apps/tui/src/lib/provider-health.ts
|
|
630295
630314
|
init_text_tool_endpoint();
|
|
630296
630315
|
init_local_model_server();
|
|
@@ -639459,13 +639478,7 @@ function speakOnboardingLine(rawText, preference) {
|
|
|
639459
639478
|
})();
|
|
639460
639479
|
}
|
|
639461
639480
|
var PLAN_COLUMN_WIDTH = 24;
|
|
639462
|
-
var PICKER_VIEWS =
|
|
639463
|
-
"model-select",
|
|
639464
|
-
"provider-select",
|
|
639465
|
-
"theme-select",
|
|
639466
|
-
"session-picker",
|
|
639467
|
-
"session-tree"
|
|
639468
|
-
]);
|
|
639481
|
+
var PICKER_VIEWS = KEYBOARD_VIEWS;
|
|
639469
639482
|
var SESSION_VIEWS = new Set(["session-picker", "session-tree"]);
|
|
639470
639483
|
var PLAN_EMPTY_LINE = "No plan steps yet. They appear when the 8gent writes a PLAN: with numbered steps while working on a request.";
|
|
639471
639484
|
var AVENUES_EMPTY_LINE = "No avenues in this session. Nothing produces them yet, so this stays empty rather than showing guesses.";
|
|
@@ -640164,6 +640177,7 @@ function App2({
|
|
|
640164
640177
|
addSystemMessage(notice);
|
|
640165
640178
|
setCurrentModel(next);
|
|
640166
640179
|
}, [modelsLoading, availableModels, modelsOwner, currentProvider, currentModel]);
|
|
640180
|
+
const oneKeyNoModelNotedRef = import_react104.useRef(false);
|
|
640167
640181
|
import_react104.useEffect(() => {
|
|
640168
640182
|
if (modelsLoading)
|
|
640169
640183
|
return;
|
|
@@ -640175,6 +640189,13 @@ function App2({
|
|
|
640175
640189
|
return;
|
|
640176
640190
|
if (availableModels.some((m) => !isLikelyEmbeddingModelId(m)))
|
|
640177
640191
|
return;
|
|
640192
|
+
if (!mayAutoOpenProviderPicker(hostedKeyedProviders())) {
|
|
640193
|
+
if (viewMode === "chat" && !oneKeyNoModelNotedRef.current) {
|
|
640194
|
+
oneKeyNoModelNotedRef.current = true;
|
|
640195
|
+
addSystemMessage(`${currentProvider} listed no chat model. Check the key with /apikeys, or pick one with /provider.`);
|
|
640196
|
+
}
|
|
640197
|
+
return;
|
|
640198
|
+
}
|
|
640178
640199
|
if (viewMode === "chat")
|
|
640179
640200
|
setViewMode("provider-select");
|
|
640180
640201
|
}, [modelsLoading, availableModels, currentModel, viewMode, modelsOwner, currentProvider]);
|
|
@@ -644786,8 +644807,14 @@ ${result.commands.map((c) => ` $ ${c}`).join(`
|
|
|
644786
644807
|
}, undefined, false, undefined, this),
|
|
644787
644808
|
PICKER_VIEWS.has(viewMode) && activeTabType === "chat" && /* @__PURE__ */ jsx_dev_runtime67.jsxDEV(Box_default, {
|
|
644788
644809
|
flexShrink: 0,
|
|
644789
|
-
|
|
644790
|
-
|
|
644810
|
+
flexDirection: "column",
|
|
644811
|
+
children: [
|
|
644812
|
+
renderMainContent(),
|
|
644813
|
+
/* @__PURE__ */ jsx_dev_runtime67.jsxDEV(MutedText, {
|
|
644814
|
+
children: ESC_RETURNS_LINE
|
|
644815
|
+
}, undefined, false, undefined, this)
|
|
644816
|
+
]
|
|
644817
|
+
}, undefined, true, undefined, this),
|
|
644791
644818
|
approvalPending && /* @__PURE__ */ jsx_dev_runtime67.jsxDEV(InlineApprovalPrompt, {
|
|
644792
644819
|
target: approvalPending.target,
|
|
644793
644820
|
reason: approvalPending.reason,
|
|
@@ -644803,7 +644830,13 @@ ${result.commands.map((c) => ` $ ${c}`).join(`
|
|
|
644803
644830
|
onSubmit: handleSubmit,
|
|
644804
644831
|
isProcessing,
|
|
644805
644832
|
placeholder: showOnboarding ? onboardingPlaceholder ?? "Type your answer" : nameQuestionOpen ? "Your name" : undefined,
|
|
644806
|
-
focused: (
|
|
644833
|
+
focused: promptIsLive({
|
|
644834
|
+
viewMode,
|
|
644835
|
+
tabBodyShown: tabBody != null,
|
|
644836
|
+
isBubbleNavMode,
|
|
644837
|
+
paletteOpen,
|
|
644838
|
+
djKeys
|
|
644839
|
+
}),
|
|
644807
644840
|
typingPaused: djKeys,
|
|
644808
644841
|
processingStage,
|
|
644809
644842
|
showAnimations,
|
package/dist/tui.js
CHANGED
|
@@ -29981,7 +29981,7 @@ var init_permissions = __esm(() => {
|
|
|
29981
29981
|
var require_package = __commonJS(function(exports2, module2) {
|
|
29982
29982
|
module2.exports = {
|
|
29983
29983
|
name: "@8gi-foundation/8gent-code",
|
|
29984
|
-
version: "0.20.
|
|
29984
|
+
version: "0.20.13",
|
|
29985
29985
|
private: false,
|
|
29986
29986
|
engines: {
|
|
29987
29987
|
node: ">=22.5"
|
|
@@ -607256,6 +607256,25 @@ function settleSetupTranscript(messages) {
|
|
|
607256
607256
|
return out;
|
|
607257
607257
|
}
|
|
607258
607258
|
|
|
607259
|
+
// apps/tui/src/lib/prompt-focus.ts
|
|
607260
|
+
var KEYBOARD_VIEWS = new Set([
|
|
607261
|
+
"model-select",
|
|
607262
|
+
"provider-select",
|
|
607263
|
+
"theme-select",
|
|
607264
|
+
"session-picker",
|
|
607265
|
+
"session-tree",
|
|
607266
|
+
"keys"
|
|
607267
|
+
]);
|
|
607268
|
+
var ESC_RETURNS_LINE = "Esc returns to the prompt";
|
|
607269
|
+
function promptIsLive(s) {
|
|
607270
|
+
if (KEYBOARD_VIEWS.has(s.viewMode))
|
|
607271
|
+
return false;
|
|
607272
|
+
return !s.tabBodyShown && !s.isBubbleNavMode && !s.paletteOpen && !s.djKeys;
|
|
607273
|
+
}
|
|
607274
|
+
function mayAutoOpenProviderPicker(keyedHostedProviders) {
|
|
607275
|
+
return keyedHostedProviders.length !== 1;
|
|
607276
|
+
}
|
|
607277
|
+
|
|
607259
607278
|
// apps/tui/src/lib/provider-health.ts
|
|
607260
607279
|
init_text_tool_endpoint();
|
|
607261
607280
|
init_local_model_server();
|
|
@@ -616424,13 +616443,7 @@ function speakOnboardingLine(rawText, preference) {
|
|
|
616424
616443
|
})();
|
|
616425
616444
|
}
|
|
616426
616445
|
var PLAN_COLUMN_WIDTH = 24;
|
|
616427
|
-
var PICKER_VIEWS =
|
|
616428
|
-
"model-select",
|
|
616429
|
-
"provider-select",
|
|
616430
|
-
"theme-select",
|
|
616431
|
-
"session-picker",
|
|
616432
|
-
"session-tree"
|
|
616433
|
-
]);
|
|
616446
|
+
var PICKER_VIEWS = KEYBOARD_VIEWS;
|
|
616434
616447
|
var SESSION_VIEWS = new Set(["session-picker", "session-tree"]);
|
|
616435
616448
|
var PLAN_EMPTY_LINE = "No plan steps yet. They appear when the 8gent writes a PLAN: with numbered steps while working on a request.";
|
|
616436
616449
|
var AVENUES_EMPTY_LINE = "No avenues in this session. Nothing produces them yet, so this stays empty rather than showing guesses.";
|
|
@@ -617129,6 +617142,7 @@ function App2({
|
|
|
617129
617142
|
addSystemMessage(notice);
|
|
617130
617143
|
setCurrentModel(next);
|
|
617131
617144
|
}, [modelsLoading, availableModels, modelsOwner, currentProvider, currentModel]);
|
|
617145
|
+
const oneKeyNoModelNotedRef = import_react104.useRef(false);
|
|
617132
617146
|
import_react104.useEffect(() => {
|
|
617133
617147
|
if (modelsLoading)
|
|
617134
617148
|
return;
|
|
@@ -617140,6 +617154,13 @@ function App2({
|
|
|
617140
617154
|
return;
|
|
617141
617155
|
if (availableModels.some((m) => !isLikelyEmbeddingModelId(m)))
|
|
617142
617156
|
return;
|
|
617157
|
+
if (!mayAutoOpenProviderPicker(hostedKeyedProviders())) {
|
|
617158
|
+
if (viewMode === "chat" && !oneKeyNoModelNotedRef.current) {
|
|
617159
|
+
oneKeyNoModelNotedRef.current = true;
|
|
617160
|
+
addSystemMessage(`${currentProvider} listed no chat model. Check the key with /apikeys, or pick one with /provider.`);
|
|
617161
|
+
}
|
|
617162
|
+
return;
|
|
617163
|
+
}
|
|
617143
617164
|
if (viewMode === "chat")
|
|
617144
617165
|
setViewMode("provider-select");
|
|
617145
617166
|
}, [modelsLoading, availableModels, currentModel, viewMode, modelsOwner, currentProvider]);
|
|
@@ -621751,8 +621772,14 @@ ${result.commands.map((c) => ` $ ${c}`).join(`
|
|
|
621751
621772
|
}, undefined, false, undefined, this),
|
|
621752
621773
|
PICKER_VIEWS.has(viewMode) && activeTabType === "chat" && /* @__PURE__ */ jsx_dev_runtime67.jsxDEV(Box_default, {
|
|
621753
621774
|
flexShrink: 0,
|
|
621754
|
-
|
|
621755
|
-
|
|
621775
|
+
flexDirection: "column",
|
|
621776
|
+
children: [
|
|
621777
|
+
renderMainContent(),
|
|
621778
|
+
/* @__PURE__ */ jsx_dev_runtime67.jsxDEV(MutedText, {
|
|
621779
|
+
children: ESC_RETURNS_LINE
|
|
621780
|
+
}, undefined, false, undefined, this)
|
|
621781
|
+
]
|
|
621782
|
+
}, undefined, true, undefined, this),
|
|
621756
621783
|
approvalPending && /* @__PURE__ */ jsx_dev_runtime67.jsxDEV(InlineApprovalPrompt, {
|
|
621757
621784
|
target: approvalPending.target,
|
|
621758
621785
|
reason: approvalPending.reason,
|
|
@@ -621768,7 +621795,13 @@ ${result.commands.map((c) => ` $ ${c}`).join(`
|
|
|
621768
621795
|
onSubmit: handleSubmit,
|
|
621769
621796
|
isProcessing,
|
|
621770
621797
|
placeholder: showOnboarding ? onboardingPlaceholder ?? "Type your answer" : nameQuestionOpen ? "Your name" : undefined,
|
|
621771
|
-
focused: (
|
|
621798
|
+
focused: promptIsLive({
|
|
621799
|
+
viewMode,
|
|
621800
|
+
tabBodyShown: tabBody != null,
|
|
621801
|
+
isBubbleNavMode,
|
|
621802
|
+
paletteOpen,
|
|
621803
|
+
djKeys
|
|
621804
|
+
}),
|
|
621772
621805
|
typingPaused: djKeys,
|
|
621773
621806
|
processingStage,
|
|
621774
621807
|
showAnimations,
|