nolo-cli 0.12.0-alpha.10 → 0.12.0-alpha.12

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.
@@ -8,8 +8,8 @@ import {
8
8
  } from "./chunk-3QAF2LTL.js";
9
9
  import {
10
10
  runAgentCreateCommand
11
- } from "./chunk-3XF6LCCN.js";
12
- import "./chunk-KWBH4RAL.js";
11
+ } from "./chunk-BTYBYAMP.js";
12
+ import "./chunk-UWNSWEEC.js";
13
13
  import "./chunk-TOILAPLH.js";
14
14
  import "./chunk-CMKUBIGW.js";
15
15
  import "./chunk-JBTJAPUF.js";
@@ -76,7 +76,7 @@ async function defaultExecuteCli(provider, prompt, options) {
76
76
  return executeCli(provider, prompt, options);
77
77
  }
78
78
  async function forwardConnectorRunMessage(machine, message, pushMessage, executeCli, env, fetchImpl) {
79
- const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-7YHT4TPT.js");
79
+ const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-FISQUBI2.js");
80
80
  return handleConnectorRunMessage(message, pushMessage, executeCli, env, fetchImpl);
81
81
  }
82
82
  async function detectLaunchableMachineInfo() {
@@ -2,8 +2,8 @@ import {
2
2
  runAgentCreateCommand,
3
3
  runAgentReadCommand,
4
4
  runAgentUpdateCommand
5
- } from "./chunk-3XF6LCCN.js";
6
- import "./chunk-KWBH4RAL.js";
5
+ } from "./chunk-BTYBYAMP.js";
6
+ import "./chunk-UWNSWEEC.js";
7
7
  import "./chunk-TOILAPLH.js";
8
8
  import "./chunk-CMKUBIGW.js";
9
9
  import "./chunk-JBTJAPUF.js";
@@ -6,12 +6,12 @@ import {
6
6
  prependSubjectDialogMarker,
7
7
  resolveWorkflowReference,
8
8
  runAgentRunCommand
9
- } from "./chunk-RUGEW4P7.js";
9
+ } from "./chunk-YWSEVWQV.js";
10
10
  import {
11
11
  parseAgentRunArgs
12
12
  } from "./chunk-3QAF2LTL.js";
13
13
  import "./chunk-6HYVJV7B.js";
14
- import "./chunk-KWBH4RAL.js";
14
+ import "./chunk-UWNSWEEC.js";
15
15
  import "./chunk-TOILAPLH.js";
16
16
  import "./chunk-CMKUBIGW.js";
17
17
  import "./chunk-JBTJAPUF.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearCliLocalRuntimePreparedAgentCache
3
- } from "./chunk-KWBH4RAL.js";
3
+ } from "./chunk-UWNSWEEC.js";
4
4
  import {
5
5
  getReadableCliDb
6
6
  } from "./chunk-W4NVOSFF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createCliLocalRuntimeAdapter,
3
3
  summarizeEndpoint
4
- } from "./chunk-KWBH4RAL.js";
4
+ } from "./chunk-UWNSWEEC.js";
5
5
  import {
6
6
  clipMultilineText
7
7
  } from "./chunk-MZHSAPZP.js";
@@ -287,6 +287,14 @@ var STRINGS = {
287
287
  en: "queued",
288
288
  zh: "\u6392\u961F"
289
289
  },
290
+ flushQueuedIdleHint: {
291
+ en: "Flushed {0} queued messages as one.",
292
+ zh: "\u5DF2\u628A {0} \u6761\u6392\u961F\u6D88\u606F\u5408\u5E76\u53D1\u9001\u3002"
293
+ },
294
+ flushQueuedBusyHint: {
295
+ en: "Stopped this reply and flushed {0} queued messages as one.",
296
+ zh: "\u5DF2\u505C\u6B62\u5F53\u524D\u56DE\u590D\uFF0C\u5E76\u628A {0} \u6761\u6392\u961F\u6D88\u606F\u5408\u5E76\u53D1\u9001\u3002"
297
+ },
290
298
  turnStopped: {
291
299
  en: "Stopped this reply.",
292
300
  zh: "\u5DF2\u505C\u6B62\u672C\u6B21\u56DE\u590D\u3002"
@@ -2149,6 +2157,15 @@ function createCliControlAgentRunExecutor(deps = {}) {
2149
2157
  startedAt: reconciled.startedAt,
2150
2158
  endedAt: reconciled.endedAt ?? null,
2151
2159
  exitCode: reconciled.exitCode ?? null,
2160
+ // Expose dialogId so the caller can read the agent's actual output
2161
+ // via `nolo dialog read <dialogId>`. The dialog is the authoritative
2162
+ // result store; the run log is the child process stdout/stderr,
2163
+ // whose contents vary by provider (some stream tokens to stdout,
2164
+ // some only emit startup + stderr). Because status does not carry
2165
+ // logTail by default, a "done" run with an empty logTail is
2166
+ // indistinguishable from a hung run without this field. Surfacing
2167
+ // dialogId gives the caller a reliable way to fetch the result.
2168
+ ...reconciled.dialogId ? { dialogId: reconciled.dialogId } : {},
2152
2169
  ...logTail !== void 0 ? { logTail } : {},
2153
2170
  ...logLines ? { logLines } : {}
2154
2171
  }),
@@ -18,7 +18,7 @@ import {
18
18
  isBuiltinNoloAgentRef,
19
19
  t,
20
20
  toolLabel
21
- } from "./chunk-KWBH4RAL.js";
21
+ } from "./chunk-UWNSWEEC.js";
22
22
  import {
23
23
  CliProviderQuotaError
24
24
  } from "./chunk-CMKUBIGW.js";
package/index.js CHANGED
@@ -126,7 +126,7 @@ function createDaemonShortcutCommand(path, description, command2) {
126
126
  // packages/cli/agentInternalCommandEntries.ts
127
127
  function getAgentInternalCommandEntries() {
128
128
  const createAgentRunCommand = (path, description) => createContextCommand(path, description, async (args2, ctx) => {
129
- const { runAgentRunCommand } = await import("./agentRunCommand-AA4QLRQZ.js");
129
+ const { runAgentRunCommand } = await import("./agentRunCommand-TGW6JFUW.js");
130
130
  return runAgentRunCommand(args2, {
131
131
  env: ctx.env,
132
132
  scriptDir: ctx.scriptDir,
@@ -142,7 +142,7 @@ function getAgentInternalCommandEntries() {
142
142
  return runAgentListCommand(args2, deps);
143
143
  }),
144
144
  createEnvCommand(["agent", "create"], "Create a new agent", async (args2, deps) => {
145
- const { runAgentCreateCommand } = await import("./agentRecordCommands-BTP3OAPL.js");
145
+ const { runAgentCreateCommand } = await import("./agentRecordCommands-RY7CSPPL.js");
146
146
  return runAgentCreateCommand(args2, deps);
147
147
  }),
148
148
  createEnvCommand(["agent", "pull"], "Cache an agent for local runs", async (args2, deps) => {
@@ -150,7 +150,7 @@ function getAgentInternalCommandEntries() {
150
150
  return runAgentPullCommand(args2, deps);
151
151
  }),
152
152
  createEnvCommand(["agent", "read"], "Read a single agent", async (args2, deps) => {
153
- const { runAgentReadCommand } = await import("./agentRecordCommands-BTP3OAPL.js");
153
+ const { runAgentReadCommand } = await import("./agentRecordCommands-RY7CSPPL.js");
154
154
  return runAgentReadCommand(args2, deps);
155
155
  }),
156
156
  createAgentRunCommand(["agent", "run"], "Run an agent"),
@@ -179,26 +179,26 @@ function getAgentInternalCommandEntries() {
179
179
  return runSetupOfflineMarxistsAgentCommand(args2, deps);
180
180
  }),
181
181
  createEnvCommand(["agent", "update"], "Update agent fields", async (args2, deps) => {
182
- const { runAgentUpdateCommand } = await import("./agentRecordCommands-BTP3OAPL.js");
182
+ const { runAgentUpdateCommand } = await import("./agentRecordCommands-RY7CSPPL.js");
183
183
  return runAgentUpdateCommand(args2, deps);
184
184
  }),
185
185
  createEnvCommand(["agent", "email", "provision"], "Provision a controlled inbox for an agent", async (args2, deps) => {
186
- const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-YFVKOGM7.js");
186
+ const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-VQENDYL5.js");
187
187
  return runAgentEmailProvisionCommand(args2, deps);
188
188
  }),
189
189
  createEnvCommand(["agent", "email", "bind"], "Bind an existing email address to an agent", async (args2, deps) => {
190
- const { runAgentEmailBindCommand } = await import("./agentEmailCommands-YFVKOGM7.js");
190
+ const { runAgentEmailBindCommand } = await import("./agentEmailCommands-VQENDYL5.js");
191
191
  return runAgentEmailBindCommand(args2, deps);
192
192
  }),
193
193
  createEnvCommand(["agent", "email", "transfer"], "Transfer an email identity from one agent to another (cross-account)", async (args2, deps) => {
194
- const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-YFVKOGM7.js");
194
+ const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-VQENDYL5.js");
195
195
  return runAgentEmailTransferCommand(args2, deps);
196
196
  }),
197
197
  createEnvCommand(
198
198
  ["agent", "email", "create-and-provision"],
199
199
  "Create an agent and provision its controlled inbox",
200
200
  async (args2, deps) => {
201
- const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-YFVKOGM7.js");
201
+ const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-VQENDYL5.js");
202
202
  return runAgentEmailCreateAndProvisionCommand(args2, deps);
203
203
  }
204
204
  ),
@@ -207,15 +207,15 @@ function getAgentInternalCommandEntries() {
207
207
  return runAgentDeleteCommand(args2, deps);
208
208
  }),
209
209
  createEnvCommand(["agent", "bind-current"], "Bind an agent to this machine", async (args2, deps) => {
210
- const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-55UUZNHF.js");
210
+ const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-Q3I3VDWS.js");
211
211
  return runAgentBindCurrentCommand(args2, deps);
212
212
  }),
213
213
  createEnvCommand(["agent", "smoke-current"], "Smoke test a bound agent through this machine", async (args2, deps) => {
214
- const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-55UUZNHF.js");
214
+ const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-Q3I3VDWS.js");
215
215
  return runAgentSmokeCurrentCommand(args2, deps);
216
216
  }),
217
217
  createEnvCommand(["agent", "runtime-doctor"], "Diagnose current machine runtime compatibility", async (args2, deps) => {
218
- const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-55UUZNHF.js");
218
+ const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-Q3I3VDWS.js");
219
219
  return runAgentRuntimeDoctorCommand(args2, deps);
220
220
  }),
221
221
  createAgentRunCommand(["agent", "chat"], "Chat with an agent")
@@ -370,15 +370,15 @@ function getSystemInternalCommandEntries(renderHelpText2) {
370
370
  return runWhoamiCommand({ args: args2, env: ctx.env });
371
371
  }),
372
372
  createEntrypointEnvCommand(["connect"], "Send machine heartbeats or hold a connector websocket", async (args2, deps) => {
373
- const { runMachineConnectCommand } = await import("./machineCommands-STHZKBDJ.js");
373
+ const { runMachineConnectCommand } = await import("./machineCommands-NGE4ZARV.js");
374
374
  return runMachineConnectCommand(args2, deps);
375
375
  }),
376
376
  createDaemonShortcutCommand(["daemon"], "Run the connector daemon shortcut", async (args2, deps) => {
377
- const { runMachineConnectCommand } = await import("./machineCommands-STHZKBDJ.js");
377
+ const { runMachineConnectCommand } = await import("./machineCommands-NGE4ZARV.js");
378
378
  return runMachineConnectCommand(args2, deps);
379
379
  }),
380
380
  createEnvCommand(["machine", "status"], "List machines registered to the current profile", async (args2, deps) => {
381
- const { runMachineStatusCommand } = await import("./machineCommands-STHZKBDJ.js");
381
+ const { runMachineStatusCommand } = await import("./machineCommands-NGE4ZARV.js");
382
382
  return runMachineStatusCommand(args2, deps);
383
383
  }),
384
384
  createEnvCommand(["doctor", "runtime"], "Diagnose local-first agent runtime selection", async (args2, deps) => {
@@ -753,7 +753,7 @@ async function runScript(script, forwardedArgs, env) {
753
753
  return proc.exited;
754
754
  }
755
755
  async function launchTuiWorkspace(args2) {
756
- const { startTuiWorkspace } = await import("./readlineWorkspace-OMRWYMB6.js");
756
+ const { startTuiWorkspace } = await import("./readlineWorkspace-ESNV6VBY.js");
757
757
  const { createTuiSummaryLlmCaller } = await import("./tuiSummaryLlmCaller-XDC7WG4K.js");
758
758
  return startTuiWorkspace({
759
759
  ...args2,
@@ -2,7 +2,7 @@ import {
2
2
  buildMachinePermissionPromptBlock,
3
3
  handleConnectorRunMessage,
4
4
  resolveMachineRunPermissionPolicy
5
- } from "./chunk-EIMX5ER5.js";
5
+ } from "./chunk-KGI44L4E.js";
6
6
  import {
7
7
  isConnectorWebSocketAuthError,
8
8
  isConnectorWebSocketRetryableError,
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  detectMachineInfo
13
13
  } from "./chunk-6HYVJV7B.js";
14
- import "./chunk-KWBH4RAL.js";
14
+ import "./chunk-UWNSWEEC.js";
15
15
  import "./chunk-TOILAPLH.js";
16
16
  import "./chunk-CMKUBIGW.js";
17
17
  import "./chunk-JBTJAPUF.js";
@@ -11,8 +11,8 @@ import {
11
11
  runtimeWorkspacePermissionPolicy,
12
12
  scopePermissionPolicyToRuntimeWorkspace,
13
13
  summarizeAgentConfigForLogs
14
- } from "./chunk-EIMX5ER5.js";
15
- import "./chunk-KWBH4RAL.js";
14
+ } from "./chunk-KGI44L4E.js";
15
+ import "./chunk-UWNSWEEC.js";
16
16
  import "./chunk-TOILAPLH.js";
17
17
  import "./chunk-CMKUBIGW.js";
18
18
  import "./chunk-JBTJAPUF.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolo-cli",
3
- "version": "0.12.0-alpha.10",
3
+ "version": "0.12.0-alpha.12",
4
4
  "type": "module",
5
5
  "description": "Agent-first terminal workspace for Nolo",
6
6
  "bin": {
@@ -57,7 +57,7 @@ import {
57
57
  visibleWidth,
58
58
  wrapTextToLines,
59
59
  wrapTranscriptLine
60
- } from "./chunk-RUGEW4P7.js";
60
+ } from "./chunk-YWSEVWQV.js";
61
61
  import "./chunk-3QAF2LTL.js";
62
62
  import "./chunk-6HYVJV7B.js";
63
63
  import {
@@ -76,7 +76,7 @@ import {
76
76
  parseCliLocale,
77
77
  setCliLocale,
78
78
  t
79
- } from "./chunk-KWBH4RAL.js";
79
+ } from "./chunk-UWNSWEEC.js";
80
80
  import "./chunk-TOILAPLH.js";
81
81
  import "./chunk-CMKUBIGW.js";
82
82
  import "./chunk-JBTJAPUF.js";
@@ -3848,11 +3848,18 @@ function createChatQueueTuiBinding(runTurn) {
3848
3848
  runtime.send({ type: "turn-start" });
3849
3849
  };
3850
3850
  const notifyTurnEnd = async (outcome) => {
3851
- const preempt = preemptArmed;
3852
- preemptArmed = null;
3853
- const effectiveOutcome = preempt !== null && outcome.aborted ? preempt === "drain" ? { ok: true, aborted: false } : { ok: false, aborted: false } : outcome;
3851
+ const consumePreempt = (raw) => {
3852
+ const mode = preemptArmed;
3853
+ preemptArmed = null;
3854
+ if (mode === null || !raw.aborted) return { outcome: raw, mode: null };
3855
+ return {
3856
+ outcome: mode === "drain" ? { ok: true, aborted: false } : { ok: false, aborted: false },
3857
+ mode
3858
+ };
3859
+ };
3860
+ const { outcome: effectiveOutcome, mode: consumedMode } = consumePreempt(outcome);
3854
3861
  runtime.send({ type: "turn-end", ...effectiveOutcome });
3855
- if (preempt === "stop" && outcome.aborted) {
3862
+ if (consumedMode === "stop") {
3856
3863
  runtime.send({ type: "drain-error", message: "" });
3857
3864
  }
3858
3865
  let lastOk = effectiveOutcome.ok && !effectiveOutcome.aborted;
@@ -3868,9 +3875,13 @@ function createChatQueueTuiBinding(runTurn) {
3868
3875
  } catch {
3869
3876
  turnOutcome = { ok: false, aborted: false };
3870
3877
  }
3871
- runtime.send({ type: "turn-end", ...turnOutcome });
3872
- lastOk = turnOutcome.ok && !turnOutcome.aborted;
3873
- if (turnOutcome.aborted) break;
3878
+ const { outcome: cascadeOutcome, mode: cascadeMode } = consumePreempt(turnOutcome);
3879
+ runtime.send({ type: "turn-end", ...cascadeOutcome });
3880
+ if (cascadeMode === "stop") {
3881
+ runtime.send({ type: "drain-error", message: "" });
3882
+ }
3883
+ lastOk = cascadeOutcome.ok && !cascadeOutcome.aborted;
3884
+ if (cascadeOutcome.aborted) break;
3874
3885
  if (!lastOk) break;
3875
3886
  } else {
3876
3887
  break;
@@ -3897,6 +3908,13 @@ function createChatQueueTuiBinding(runTurn) {
3897
3908
  preemptArmed = "stop";
3898
3909
  return true;
3899
3910
  };
3911
+ const snapshotAndClearQueue = () => {
3912
+ const status = runtime.getState();
3913
+ if (status.queue.length === 0) return null;
3914
+ const merged = status.queue.join("\n");
3915
+ runtime.send({ type: "clear" });
3916
+ return merged;
3917
+ };
3900
3918
  const clear = () => {
3901
3919
  runtime.send({ type: "clear" });
3902
3920
  };
@@ -3913,6 +3931,7 @@ function createChatQueueTuiBinding(runTurn) {
3913
3931
  drainHeadForManualTurn,
3914
3932
  preemptForDrain,
3915
3933
  preemptForStop,
3934
+ snapshotAndClearQueue,
3916
3935
  clear,
3917
3936
  getStatus,
3918
3937
  queueLength,
@@ -4598,6 +4617,7 @@ function createRawInputDecoder(onToken, options) {
4598
4617
  }
4599
4618
 
4600
4619
  // packages/cli/tui/readlineWorkspace.ts
4620
+ var CTRL_S = "";
4601
4621
  var AGENTS_MD_MAX_BYTES = 8192;
4602
4622
  var altScreenRestoreOutput = null;
4603
4623
  var altScreenHandlersInstalled = false;
@@ -5325,6 +5345,11 @@ ${t("copyViewHint")}
5325
5345
  });
5326
5346
  return chatQueueBinding;
5327
5347
  };
5348
+ const preemptAndAbortForDrain = (binding) => {
5349
+ if (binding.preemptForDrain() && activeTurnAbort) {
5350
+ activeTurnAbort.abort();
5351
+ }
5352
+ };
5328
5353
  const emitCommandOutput = (text) => {
5329
5354
  if (!text) return;
5330
5355
  if (!isInteractiveInput(input)) {
@@ -5752,6 +5777,30 @@ ${err.message}` : ""}`
5752
5777
  rawActionGateTokenHandler?.(sequence);
5753
5778
  return;
5754
5779
  }
5780
+ if (sequence === CTRL_S) {
5781
+ if (!chatQueueBinding || chatQueueBinding.queueLength() === 0) {
5782
+ return;
5783
+ }
5784
+ const flushCount = chatQueueBinding.queueLength();
5785
+ const merged = chatQueueBinding.snapshotAndClearQueue();
5786
+ if (!merged) return;
5787
+ const draftIncluded = !busy && buffer.trim() !== "";
5788
+ const fullText = draftIncluded ? `${buffer}
5789
+ ${merged}` : merged;
5790
+ chatQueueBinding.enqueue(fullText);
5791
+ const totalCount = flushCount + (draftIncluded ? 1 : 0);
5792
+ emitCommandOutput(
5793
+ t(busy ? "flushQueuedBusyHint" : "flushQueuedIdleHint", String(totalCount))
5794
+ );
5795
+ if (busy) {
5796
+ preemptAndAbortForDrain(chatQueueBinding);
5797
+ return;
5798
+ }
5799
+ buffer = "";
5800
+ cursorPos = 0;
5801
+ if (fixedInput.active) fixedInput.repaint(buffer, cursorPos);
5802
+ return handleInputToken("\r");
5803
+ }
5755
5804
  const busyLock = busy;
5756
5805
  const scrollAction = parseScrollAction(sequence);
5757
5806
  if (scrollAction) {
@@ -5881,11 +5930,7 @@ ${hint}` : hint;
5881
5930
  fixedInput.repaint(buffer, cursorPos);
5882
5931
  } else if (decision.kind === "queue-blocked") {
5883
5932
  } else if (decision.kind === "noop" && !submittedText.trim() && binding.queueLength() > 0) {
5884
- if (binding.preemptForDrain()) {
5885
- if (activeTurnAbort) {
5886
- activeTurnAbort.abort();
5887
- }
5888
- }
5933
+ preemptAndAbortForDrain(binding);
5889
5934
  }
5890
5935
  return;
5891
5936
  }