blun-king-cli 9.1.572 → 9.1.573
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 +13 -0
- package/blun.mjs +23 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
## 9.1.573
|
|
2
|
+
|
|
3
|
+
- Keep the input field visible and focused after the startup goal choice,
|
|
4
|
+
including Escape and a failed goal-resume request. Preserve unsent drafts.
|
|
5
|
+
- Show a compact with/without-goal choice instead of the entire objective.
|
|
6
|
+
- Ctrl+S leaves that choice without approving the goal and reaches the normal
|
|
7
|
+
queue shortcut. It also handles pending input while the session is idle.
|
|
8
|
+
- Preserve existing Escape behavior: queued work is cleared before a subsequent
|
|
9
|
+
Escape cancels the active turn. No automatic deletion of session history.
|
|
10
|
+
|
|
11
|
+
The release does not reconstruct acknowledgements lost by an older process
|
|
12
|
+
before upgrading. Genuinely pending messages remain attached to their session.
|
|
13
|
+
|
|
1
14
|
# Changelog
|
|
2
15
|
|
|
3
16
|
## 9.1.572
|
package/blun.mjs
CHANGED
|
@@ -417373,6 +417373,10 @@ var ChoicePickerComponent = class extends Container {
|
|
|
417373
417373
|
}
|
|
417374
417374
|
handleInput(data) {
|
|
417375
417375
|
if (isKeyRelease(data)) return;
|
|
417376
|
+
if (matchesKey(normalizeCapsLockedCtrl(data), Key.ctrl("s")) && this.opts.onCtrlS !== void 0) {
|
|
417377
|
+
this.opts.onCtrlS();
|
|
417378
|
+
return;
|
|
417379
|
+
}
|
|
417376
417380
|
if (matchesKey(data, Key.ctrl("c")) && this.opts.onCtrlC !== void 0) {
|
|
417377
417381
|
this.opts.onCtrlC();
|
|
417378
417382
|
return;
|
|
@@ -508611,7 +508615,7 @@ var EditorKeyboardController = class {
|
|
|
508611
508615
|
};
|
|
508612
508616
|
editor.onCtrlS = () => {
|
|
508613
508617
|
const draft = (editor.getExpandedText?.() ?? editor.getText()).trim();
|
|
508614
|
-
if (!host.streamingUI.hasActiveTurn() && host.state.appState.streamingPhase === "idle" &&
|
|
508618
|
+
if (!host.streamingUI.hasActiveTurn() && host.state.appState.streamingPhase === "idle" && draft.length === 0 && host.state.queuedMessages.length === 0) return;
|
|
508615
508619
|
host.flushQueuedMessages(draft, editor.inputMode);
|
|
508616
508620
|
host.updateQueueDisplay();
|
|
508617
508621
|
host.state.ui.requestRender();
|
|
@@ -519807,13 +519811,14 @@ function startupResumeGoalPromptCopy() {
|
|
|
519807
519811
|
withGoal: uiText("startupResumeGoal.resume")
|
|
519808
519812
|
};
|
|
519809
519813
|
}
|
|
519810
|
-
function promptStartupResumeGoal(host, objective, copy) {
|
|
519814
|
+
function promptStartupResumeGoal(host, objective, copy, onFlushQueue) {
|
|
519811
519815
|
return new Promise((resolve) => {
|
|
519812
519816
|
let done = false;
|
|
519813
519817
|
const finish = (choice) => {
|
|
519814
519818
|
if (done) return;
|
|
519815
519819
|
done = true;
|
|
519816
|
-
host.dismissEditorReplacement();
|
|
519820
|
+
if (choice === "exit") host.dismissEditorReplacement();
|
|
519821
|
+
else host.restoreEditor();
|
|
519817
519822
|
resolve(choice);
|
|
519818
519823
|
};
|
|
519819
519824
|
host.mountEditorReplacement(new ChoicePickerComponent({
|
|
@@ -519824,8 +519829,7 @@ function promptStartupResumeGoal(host, objective, copy) {
|
|
|
519824
519829
|
label: copy.withoutGoal
|
|
519825
519830
|
}, {
|
|
519826
519831
|
value: "resume",
|
|
519827
|
-
label: copy.withGoal
|
|
519828
|
-
description: objective
|
|
519832
|
+
label: copy.withGoal
|
|
519829
519833
|
}],
|
|
519830
519834
|
onSelect: (value) => {
|
|
519831
519835
|
finish(value);
|
|
@@ -519838,6 +519842,11 @@ function promptStartupResumeGoal(host, objective, copy) {
|
|
|
519838
519842
|
},
|
|
519839
519843
|
onCtrlD: () => {
|
|
519840
519844
|
finish("exit");
|
|
519845
|
+
},
|
|
519846
|
+
onCtrlS: () => {
|
|
519847
|
+
if (done) return;
|
|
519848
|
+
finish("without");
|
|
519849
|
+
onFlushQueue?.();
|
|
519841
519850
|
}
|
|
519842
519851
|
}));
|
|
519843
519852
|
});
|
|
@@ -521194,13 +521203,15 @@ const telegramBoundary = this.captureTelegramQueueBoundary();
|
|
|
521194
521203
|
this.syncGoalTimeTrigger();
|
|
521195
521204
|
if (goal.status !== "paused" && goal.status !== "blocked") return;
|
|
521196
521205
|
this.startupGoalPromptedSessionId = sessionId;
|
|
521197
|
-
|
|
521198
|
-
|
|
521199
|
-
|
|
521200
|
-
|
|
521201
|
-
|
|
521202
|
-
|
|
521203
|
-
|
|
521206
|
+
await this.withTelegramQueuePaused(async () => {
|
|
521207
|
+
const choice = await promptStartupResumeGoal(this, goal.objective, startupResumeGoalPromptCopy(), () => { this.state.editor.handleInput("\u0013"); });
|
|
521208
|
+
if (this.aborted || this.session?.id !== sessionId) return;
|
|
521209
|
+
if (choice === "exit") {
|
|
521210
|
+
await this.stop(0);
|
|
521211
|
+
return;
|
|
521212
|
+
}
|
|
521213
|
+
if (choice === "resume") await handleGoalCommand(this, "resume");
|
|
521214
|
+
});
|
|
521204
521215
|
}
|
|
521205
521216
|
async stop(exitCode) {
|
|
521206
521217
|
if (this.isShuttingDown) return;
|