nolo-cli 0.33.0-alpha.29 → 0.33.0-alpha.30

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-G7HTVVFL.js";
9
9
  import {
10
10
  runAgentCreateCommand
11
- } from "./chunk-B3R26OF3.js";
12
- import "./chunk-GMFTVAKU.js";
11
+ } from "./chunk-HLXJXFXN.js";
12
+ import "./chunk-PVJS353C.js";
13
13
  import "./chunk-OXLUSM42.js";
14
14
  import {
15
15
  getReadableCliDb
@@ -86,7 +86,7 @@ async function defaultExecuteCli(provider, prompt, options) {
86
86
  return executeCli(provider, prompt, options);
87
87
  }
88
88
  async function forwardConnectorRunMessage(machine, message, pushMessage, executeCli, env, fetchImpl) {
89
- const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-RZFFUPQ6.js");
89
+ const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-XX2LNRJT.js");
90
90
  return handleConnectorRunMessage(message, pushMessage, executeCli, env, fetchImpl);
91
91
  }
92
92
  async function detectLaunchableMachineInfo() {
@@ -2,8 +2,8 @@ import {
2
2
  runAgentCreateCommand,
3
3
  runAgentReadCommand,
4
4
  runAgentUpdateCommand
5
- } from "./chunk-B3R26OF3.js";
6
- import "./chunk-GMFTVAKU.js";
5
+ } from "./chunk-HLXJXFXN.js";
6
+ import "./chunk-PVJS353C.js";
7
7
  import "./chunk-OXLUSM42.js";
8
8
  import "./chunk-UNHKVD2N.js";
9
9
  import "./chunk-PAW3XFD3.js";
@@ -5,12 +5,12 @@ import {
5
5
  prependSubjectDialogMarker,
6
6
  resolveWorkflowReference,
7
7
  runAgentRunCommand
8
- } from "./chunk-WWHORNDB.js";
8
+ } from "./chunk-BYXLXABD.js";
9
9
  import "./chunk-ESHYE7WU.js";
10
10
  import {
11
11
  parseAgentRunArgs
12
12
  } from "./chunk-G7HTVVFL.js";
13
- import "./chunk-GMFTVAKU.js";
13
+ import "./chunk-PVJS353C.js";
14
14
  import "./chunk-OXLUSM42.js";
15
15
  import "./chunk-UNHKVD2N.js";
16
16
  import "./chunk-PAW3XFD3.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createCliLocalRuntimeAdapter,
3
3
  summarizeEndpoint
4
- } from "./chunk-GMFTVAKU.js";
4
+ } from "./chunk-PVJS353C.js";
5
5
  import {
6
6
  clipMultilineText
7
7
  } from "./chunk-326E2B5C.js";
@@ -20,7 +20,7 @@ import {
20
20
  parseAgentRunEvent,
21
21
  t,
22
22
  toolLabel
23
- } from "./chunk-GMFTVAKU.js";
23
+ } from "./chunk-PVJS353C.js";
24
24
  import {
25
25
  getReadableCliDb
26
26
  } from "./chunk-UNHKVD2N.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearCliLocalRuntimePreparedAgentCache
3
- } from "./chunk-GMFTVAKU.js";
3
+ } from "./chunk-PVJS353C.js";
4
4
  import {
5
5
  getReadableCliDb
6
6
  } from "./chunk-UNHKVD2N.js";
@@ -1515,7 +1515,9 @@ async function fetchWithTransientRetry(fetchImpl, input, init, options = {}) {
1515
1515
  return await options.loopbackRequest(input, init);
1516
1516
  }
1517
1517
  const response = await fetchImpl(input, init);
1518
- if (retryableStatuses.has(response.status) && !init?.signal?.aborted) {
1518
+ const retryableStatus = retryableStatuses.has(response.status) && !init?.signal?.aborted;
1519
+ const callerAllowsRetry = retryableStatus ? await options.shouldRetryResponse?.(response) ?? true : false;
1520
+ if (retryableStatus && callerAllowsRetry) {
1519
1521
  const coreDraining = await isCoreDrainingResponse(response);
1520
1522
  const attemptBudget = coreDraining ? coreDrainingMaxAttempts : maxAttempts;
1521
1523
  if (attempt < attemptBudget) {
@@ -1536,6 +1538,7 @@ async function fetchWithTransientRetry(fetchImpl, input, init, options = {}) {
1536
1538
  } catch (error) {
1537
1539
  if (init?.signal?.aborted) throw error;
1538
1540
  if (!isTransientFetchError(error)) throw error;
1541
+ if (options.retryNetworkErrors === false) throw error;
1539
1542
  lastError = error;
1540
1543
  if (attempt < maxAttempts) {
1541
1544
  const delayMs = transientFetchRetryDelayMs(attempt);
@@ -9304,6 +9307,15 @@ var resolveGeminiNativeToolTransport = async (ctx) => {
9304
9307
  };
9305
9308
 
9306
9309
  // packages/cli/client/providerResolution/platformProxyTransport.ts
9310
+ async function shouldRetryPlatformProxyResponse(response) {
9311
+ if (response.status !== 503) return false;
9312
+ try {
9313
+ const body = await response.clone().json();
9314
+ return body?.reason === "core_draining";
9315
+ } catch {
9316
+ return false;
9317
+ }
9318
+ }
9307
9319
  var resolvePlatformProxyTransport = async (ctx) => {
9308
9320
  const { agentConfig, deps, fetchImpl, loopbackRequest, additionalToolNames, buildProviderOpenAiTools, recordLocalAvailability, apiKeyRefResolver, credentialBroker, syncFetcher, serverUrl, authToken } = ctx;
9309
9321
  if (shouldUsePlatformChatProvider(deps.env, agentConfig)) {
@@ -9367,10 +9379,13 @@ var resolvePlatformProxyTransport = async (ctx) => {
9367
9379
  {
9368
9380
  sleep: deps.sleep,
9369
9381
  loopbackRequest,
9370
- // auto 档位转发 nolo.chat 时,网关层 502(server: Caddy、空 body)
9371
- // 意味着请求根本没到 Bun 上游,provider 未受理,重试安全。
9372
- // 429/503 同口径:不会重复计费/重复生成。
9373
- retryableStatuses: /* @__PURE__ */ new Set([429, 502, 503]),
9382
+ // A chat POST is not safe to replay after an ambiguous network or
9383
+ // gateway failure: the server/provider may already have accepted
9384
+ // it. The client only waits through the server's explicit pre-
9385
+ // admission deployment drain signal.
9386
+ retryableStatuses: /* @__PURE__ */ new Set([503]),
9387
+ shouldRetryResponse: shouldRetryPlatformProxyResponse,
9388
+ retryNetworkErrors: false,
9374
9389
  onRetry: deps.activityReporter ? ({ attempt, maxAttempts, delayMs }) => {
9375
9390
  deps.activityReporter(
9376
9391
  `\u81EA\u52A8\u91CD\u8BD5 ${attempt}/${maxAttempts} \xB7 ${Math.ceil(delayMs / 1e3)}s`
@@ -12027,12 +12042,12 @@ function createCliLocalRuntimeAdapter(deps) {
12027
12042
  };
12028
12043
  return {
12029
12044
  ...adapterBase,
12030
- resolveProvider: async (agentConfig) => withProviderStreamRetry(
12031
- await adapterBase.resolveProviderBase(
12045
+ resolveProvider: async (agentConfig) => {
12046
+ const provider = await adapterBase.resolveProviderBase(
12032
12047
  agentConfig
12033
- ),
12034
- deps
12035
- )
12048
+ );
12049
+ return shouldUsePlatformChatProvider(deps.env, agentConfig) ? provider : withProviderStreamRetry(provider, deps);
12050
+ }
12036
12051
  };
12037
12052
  }
12038
12053
 
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-BKN27QCW.js");
129
+ const { runAgentRunCommand } = await import("./agentRunCommand-R57HN7XZ.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-BS5K2VO5.js");
145
+ const { runAgentCreateCommand } = await import("./agentRecordCommands-JN2L5AMM.js");
146
146
  return runAgentCreateCommand(args2, deps);
147
147
  }),
148
148
  createEnvCommand(["agent", "models"], "List models available on an OpenAI-compatible provider", async (args2, deps) => {
@@ -154,7 +154,7 @@ function getAgentInternalCommandEntries() {
154
154
  return runAgentPullCommand(args2, deps);
155
155
  }),
156
156
  createEnvCommand(["agent", "read"], "Read a single agent", async (args2, deps) => {
157
- const { runAgentReadCommand } = await import("./agentRecordCommands-BS5K2VO5.js");
157
+ const { runAgentReadCommand } = await import("./agentRecordCommands-JN2L5AMM.js");
158
158
  return runAgentReadCommand(args2, deps);
159
159
  }),
160
160
  createAgentRunCommand(["agent", "run"], "Run an agent"),
@@ -183,26 +183,26 @@ function getAgentInternalCommandEntries() {
183
183
  return runSetupOfflineMarxistsAgentCommand(args2, deps);
184
184
  }),
185
185
  createEnvCommand(["agent", "update"], "Update agent fields", async (args2, deps) => {
186
- const { runAgentUpdateCommand } = await import("./agentRecordCommands-BS5K2VO5.js");
186
+ const { runAgentUpdateCommand } = await import("./agentRecordCommands-JN2L5AMM.js");
187
187
  return runAgentUpdateCommand(args2, deps);
188
188
  }),
189
189
  createEnvCommand(["agent", "email", "provision"], "Provision a controlled inbox for an agent", async (args2, deps) => {
190
- const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-UAW3SE6K.js");
190
+ const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-5UPJMRRT.js");
191
191
  return runAgentEmailProvisionCommand(args2, deps);
192
192
  }),
193
193
  createEnvCommand(["agent", "email", "bind"], "Bind an existing email address to an agent", async (args2, deps) => {
194
- const { runAgentEmailBindCommand } = await import("./agentEmailCommands-UAW3SE6K.js");
194
+ const { runAgentEmailBindCommand } = await import("./agentEmailCommands-5UPJMRRT.js");
195
195
  return runAgentEmailBindCommand(args2, deps);
196
196
  }),
197
197
  createEnvCommand(["agent", "email", "transfer"], "Transfer an email identity from one agent to another (cross-account)", async (args2, deps) => {
198
- const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-UAW3SE6K.js");
198
+ const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-5UPJMRRT.js");
199
199
  return runAgentEmailTransferCommand(args2, deps);
200
200
  }),
201
201
  createEnvCommand(
202
202
  ["agent", "email", "create-and-provision"],
203
203
  "Create an agent and provision its controlled inbox",
204
204
  async (args2, deps) => {
205
- const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-UAW3SE6K.js");
205
+ const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-5UPJMRRT.js");
206
206
  return runAgentEmailCreateAndProvisionCommand(args2, deps);
207
207
  }
208
208
  ),
@@ -223,15 +223,15 @@ function getAgentInternalCommandEntries() {
223
223
  return runAgentRevokeGrantCommand(args2, deps);
224
224
  }),
225
225
  createEnvCommand(["agent", "bind-current"], "Bind an agent to this machine", async (args2, deps) => {
226
- const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-FTUR3D35.js");
226
+ const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-FNVJTZ3J.js");
227
227
  return runAgentBindCurrentCommand(args2, deps);
228
228
  }),
229
229
  createEnvCommand(["agent", "smoke-current"], "Smoke test a bound agent through this machine", async (args2, deps) => {
230
- const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-FTUR3D35.js");
230
+ const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-FNVJTZ3J.js");
231
231
  return runAgentSmokeCurrentCommand(args2, deps);
232
232
  }),
233
233
  createEnvCommand(["agent", "runtime-doctor"], "Diagnose current machine runtime compatibility", async (args2, deps) => {
234
- const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-FTUR3D35.js");
234
+ const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-FNVJTZ3J.js");
235
235
  return runAgentRuntimeDoctorCommand(args2, deps);
236
236
  }),
237
237
  createAgentRunCommand(["agent", "chat"], "Chat with an agent")
@@ -412,15 +412,15 @@ function getSystemInternalCommandEntries(renderHelpText2) {
412
412
  return runWhoamiCommand({ args: args2, env: ctx.env });
413
413
  }),
414
414
  createEntrypointEnvCommand(["connect"], "Send machine heartbeats or hold a connector websocket", async (args2, deps) => {
415
- const { runMachineConnectCommand } = await import("./machineCommands-XI5YX3CF.js");
415
+ const { runMachineConnectCommand } = await import("./machineCommands-ZDULQKUU.js");
416
416
  return runMachineConnectCommand(args2, deps);
417
417
  }),
418
418
  createDaemonShortcutCommand(["daemon"], "Run the connector daemon shortcut", async (args2, deps) => {
419
- const { runMachineConnectCommand } = await import("./machineCommands-XI5YX3CF.js");
419
+ const { runMachineConnectCommand } = await import("./machineCommands-ZDULQKUU.js");
420
420
  return runMachineConnectCommand(args2, deps);
421
421
  }),
422
422
  createEnvCommand(["machine", "status"], "List machines registered to the current profile", async (args2, deps) => {
423
- const { runMachineStatusCommand } = await import("./machineCommands-XI5YX3CF.js");
423
+ const { runMachineStatusCommand } = await import("./machineCommands-ZDULQKUU.js");
424
424
  return runMachineStatusCommand(args2, deps);
425
425
  }),
426
426
  createEnvCommand(["doctor", "runtime"], "Diagnose local-first agent runtime selection", async (args2, deps) => {
@@ -800,7 +800,7 @@ async function runScript(script, forwardedArgs, env) {
800
800
  return proc.exited;
801
801
  }
802
802
  async function launchTuiWorkspace(args2) {
803
- const { startTuiWorkspace } = await import("./readlineWorkspace-ELQL46DM.js");
803
+ const { startTuiWorkspace } = await import("./readlineWorkspace-NXB4IBLM.js");
804
804
  const { createTuiSummaryLlmCaller } = await import("./tuiSummaryLlmCaller-3RC6WWRV.js");
805
805
  return startTuiWorkspace({
806
806
  ...args2,
@@ -2,7 +2,7 @@ import {
2
2
  buildMachinePermissionPromptBlock,
3
3
  handleConnectorRunMessage,
4
4
  resolveMachineRunPermissionPolicy
5
- } from "./chunk-INLSW4W3.js";
5
+ } from "./chunk-ASWSPCJH.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-ESHYE7WU.js";
14
- import "./chunk-GMFTVAKU.js";
14
+ import "./chunk-PVJS353C.js";
15
15
  import "./chunk-OXLUSM42.js";
16
16
  import "./chunk-ZFGAPMSF.js";
17
17
  import "./chunk-EKLRRZIN.js";
@@ -11,8 +11,8 @@ import {
11
11
  runtimeWorkspacePermissionPolicy,
12
12
  scopePermissionPolicyToRuntimeWorkspace,
13
13
  summarizeAgentConfigForLogs
14
- } from "./chunk-INLSW4W3.js";
15
- import "./chunk-GMFTVAKU.js";
14
+ } from "./chunk-ASWSPCJH.js";
15
+ import "./chunk-PVJS353C.js";
16
16
  import "./chunk-OXLUSM42.js";
17
17
  import "./chunk-ZFGAPMSF.js";
18
18
  import "./chunk-EKLRRZIN.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolo-cli",
3
- "version": "0.33.0-alpha.29",
3
+ "version": "0.33.0-alpha.30",
4
4
  "type": "module",
5
5
  "description": "Agent-first terminal workspace for Nolo",
6
6
  "bin": {
@@ -60,7 +60,7 @@ import {
60
60
  wrapTextToLines,
61
61
  wrapTranscriptLine,
62
62
  wrapTranscriptLineWithLayout
63
- } from "./chunk-WWHORNDB.js";
63
+ } from "./chunk-BYXLXABD.js";
64
64
  import "./chunk-ESHYE7WU.js";
65
65
  import {
66
66
  listFavoriteAgentIdsAcrossServers,
@@ -82,7 +82,7 @@ import {
82
82
  readTimestamp,
83
83
  setCliLocale,
84
84
  t
85
- } from "./chunk-GMFTVAKU.js";
85
+ } from "./chunk-PVJS353C.js";
86
86
  import "./chunk-OXLUSM42.js";
87
87
  import {
88
88
  getReadableCliDb