nolo-cli 0.170.0 → 0.170.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.
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-62TBKWTV.js";
7
7
  import {
8
8
  clearCliLocalRuntimePreparedAgentCache
9
- } from "./chunk-B4VCTNZL.js";
9
+ } from "./chunk-WC7UXON2.js";
10
10
  import "./chunk-G3VYRPTV.js";
11
11
  import "./chunk-R4BMKAR5.js";
12
12
  import {
@@ -132,7 +132,7 @@ import {
132
132
  import "./chunk-5EMSBTQ6.js";
133
133
  import "./chunk-I42VC5KR.js";
134
134
  import "./chunk-U6VC4MU4.js";
135
- import "./chunk-WO5P2HTX.js";
135
+ import "./chunk-URW5UM6Y.js";
136
136
  import "./chunk-PJNFNEJE.js";
137
137
  import "./chunk-PSCNXBYA.js";
138
138
  import {
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-I7S63QUU.js";
5
5
  import {
6
6
  runAgentCreateCommand
7
- } from "./chunk-3URJF2TW.js";
7
+ } from "./chunk-WVREKHHJ.js";
8
8
  import "./chunk-YGILMZ7N.js";
9
9
  import {
10
10
  positionalArgs,
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  getReadableCliDb
15
15
  } from "./chunk-62TBKWTV.js";
16
- import "./chunk-B4VCTNZL.js";
16
+ import "./chunk-WC7UXON2.js";
17
17
  import "./chunk-G3VYRPTV.js";
18
18
  import "./chunk-R4BMKAR5.js";
19
19
  import "./chunk-TDX2L4W2.js";
@@ -132,7 +132,7 @@ import {
132
132
  } from "./chunk-5EMSBTQ6.js";
133
133
  import "./chunk-I42VC5KR.js";
134
134
  import "./chunk-U6VC4MU4.js";
135
- import "./chunk-WO5P2HTX.js";
135
+ import "./chunk-URW5UM6Y.js";
136
136
  import "./chunk-PJNFNEJE.js";
137
137
  import "./chunk-PSCNXBYA.js";
138
138
  import "./chunk-FDLDMJTM.js";
@@ -93,7 +93,7 @@ async function defaultExecuteCli(provider, prompt, options) {
93
93
  return executeCli(provider, prompt, options);
94
94
  }
95
95
  async function forwardConnectorRunMessage(machine, message, pushMessage, executeCli, env, fetchImpl) {
96
- const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-7CRVOKDC.js");
96
+ const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-7A3TSH4Q.js");
97
97
  return handleConnectorRunMessage(message, pushMessage, executeCli, env, fetchImpl);
98
98
  }
99
99
  async function detectLaunchableMachineInfo() {
@@ -2,10 +2,10 @@ import {
2
2
  runAgentCreateCommand,
3
3
  runAgentReadCommand,
4
4
  runAgentUpdateCommand
5
- } from "./chunk-3URJF2TW.js";
5
+ } from "./chunk-WVREKHHJ.js";
6
6
  import "./chunk-YGILMZ7N.js";
7
7
  import "./chunk-62TBKWTV.js";
8
- import "./chunk-B4VCTNZL.js";
8
+ import "./chunk-WC7UXON2.js";
9
9
  import "./chunk-G3VYRPTV.js";
10
10
  import "./chunk-R4BMKAR5.js";
11
11
  import "./chunk-TDX2L4W2.js";
@@ -117,7 +117,7 @@ import "./chunk-M2EJHDJP.js";
117
117
  import "./chunk-5EMSBTQ6.js";
118
118
  import "./chunk-I42VC5KR.js";
119
119
  import "./chunk-U6VC4MU4.js";
120
- import "./chunk-WO5P2HTX.js";
120
+ import "./chunk-URW5UM6Y.js";
121
121
  import "./chunk-PJNFNEJE.js";
122
122
  import "./chunk-PSCNXBYA.js";
123
123
  import "./chunk-FDLDMJTM.js";
@@ -9,13 +9,13 @@ import {
9
9
  resolveRunSettlementNote,
10
10
  resolveWorkflowReference,
11
11
  runAgentRunCommand
12
- } from "./chunk-RKKJ6SVM.js";
12
+ } from "./chunk-O2AY3CVI.js";
13
13
  import "./chunk-6QDYSCPW.js";
14
14
  import {
15
15
  parseAgentRunArgs
16
16
  } from "./chunk-DHNQA4VI.js";
17
17
  import "./chunk-62TBKWTV.js";
18
- import "./chunk-B4VCTNZL.js";
18
+ import "./chunk-WC7UXON2.js";
19
19
  import "./chunk-G3VYRPTV.js";
20
20
  import "./chunk-R4BMKAR5.js";
21
21
  import "./chunk-TDX2L4W2.js";
@@ -136,7 +136,7 @@ import "./chunk-M2EJHDJP.js";
136
136
  import "./chunk-5EMSBTQ6.js";
137
137
  import "./chunk-I42VC5KR.js";
138
138
  import "./chunk-U6VC4MU4.js";
139
- import "./chunk-WO5P2HTX.js";
139
+ import "./chunk-URW5UM6Y.js";
140
140
  import "./chunk-PJNFNEJE.js";
141
141
  import "./chunk-PSCNXBYA.js";
142
142
  import "./chunk-EXAJ6DCR.js";
@@ -53,6 +53,7 @@ import {
53
53
  readQueueMessages,
54
54
  readRunRecord,
55
55
  releaseRunRecordAck,
56
+ reportRunProcessIdentity,
56
57
  resolveNoloHome,
57
58
  resolveRunLogPath,
58
59
  resolveRunQueuePath,
@@ -73,7 +74,7 @@ import {
73
74
  withQueueLock,
74
75
  withRunRecordLock,
75
76
  writeRunRecord
76
- } from "./chunk-WO5P2HTX.js";
77
+ } from "./chunk-URW5UM6Y.js";
77
78
  import "./chunk-PJNFNEJE.js";
78
79
  import "./chunk-PSCNXBYA.js";
79
80
  import "./chunk-WACI5I6V.js";
@@ -146,6 +147,7 @@ export {
146
147
  readQueueMessages,
147
148
  readRunRecord,
148
149
  releaseRunRecordAck,
150
+ reportRunProcessIdentity,
149
151
  resolveNoloHome,
150
152
  resolveRunLogPath,
151
153
  resolveRunQueuePath,
@@ -42,7 +42,7 @@ import {
42
42
  } from "./chunk-I42VC5KR.js";
43
43
  import {
44
44
  resolveRunsDir
45
- } from "./chunk-WO5P2HTX.js";
45
+ } from "./chunk-URW5UM6Y.js";
46
46
  import {
47
47
  getDefaultCliLocalRuntimeDb
48
48
  } from "./chunk-GAGGEA7D.js";
@@ -31,7 +31,7 @@ import {
31
31
  resolveFileWriteGateEnabled,
32
32
  resolveLocalUserId,
33
33
  validateInstaboxWorkspaceSelection
34
- } from "./chunk-B4VCTNZL.js";
34
+ } from "./chunk-WC7UXON2.js";
35
35
  import {
36
36
  clearCredentialAvailability,
37
37
  readEffectiveCredentialEntry,
@@ -182,13 +182,14 @@ import {
182
182
  popSingleQueueMessage,
183
183
  readRunRecord,
184
184
  recordRunResultHeaderMeta,
185
+ reportRunProcessIdentity,
185
186
  resolveResultServerMeta,
186
187
  resolveRunQueuePath,
187
188
  resolveRunsDir,
188
189
  serverOriginForDialog,
189
190
  settleRunTerminalAuthoritatively,
190
191
  spawnLocalBackgroundRun
191
- } from "./chunk-WO5P2HTX.js";
192
+ } from "./chunk-URW5UM6Y.js";
192
193
  import {
193
194
  formatAgentListCard,
194
195
  formatFinishedRunCard,
@@ -15600,6 +15601,7 @@ async function runAgentRunCommand(args, deps) {
15600
15601
  const nowMs = () => deps.now ? deps.now().getTime() : Date.now();
15601
15602
  const childRunId = env.NOLO_AGENT_RUN_ID;
15602
15603
  const hasRegistry = typeof childRunId === "string" && childRunId.length > 0;
15604
+ if (hasRegistry) reportRunProcessIdentity(childRunId, { env, homedir: deps.homedir, fs: deps.fs, now: deps.now });
15603
15605
  const processExit = deps.processExit ?? ((code) => process.exit(code));
15604
15606
  const stallTimeoutMs = resolvePositiveMs(
15605
15607
  deps.stallTimeoutMs ?? env.NOLO_LOCAL_RUN_STALL_TIMEOUT_MS,
@@ -828,7 +828,7 @@ function scanActiveReservations(reservationsDir, deps) {
828
828
  } catch {
829
829
  }
830
830
  const reused = expectedStart && actualStart && Number.isFinite(actualStart.getTime()) && actualStart.toISOString() !== expectedStart;
831
- if (!alive || reused || record.status === "active" && ageMs >= startupWindowMs) {
831
+ if (!alive || reused || record.status === "active" && !!expectedStart && record.childIdentity !== "unverified" && ageMs >= startupWindowMs) {
832
832
  updateReservationFile(filePath, fs, (r) => {
833
833
  r.status = "reclaimed";
834
834
  r.reclaimedAt = new Date(nowMs).toISOString();
@@ -909,14 +909,14 @@ function reserveHostMemory(deps) {
909
909
  const validStart = !!params.processStartedAt && Number.isFinite(Date.parse(params.processStartedAt));
910
910
  locked(() => updateReservationFile(recordPath, fs, (r) => {
911
911
  if (r.status !== "reserved") throw new Error("Reservation is not reserved");
912
+ r.status = "active";
913
+ r.childIdentity = validStart ? "verified" : "unverified";
912
914
  if (validStart) {
913
- r.status = "active";
914
915
  r.childStartedAt = params.processStartedAt;
915
916
  }
916
917
  if (params.runId) r.runId = params.runId;
917
918
  if (typeof params.pid === "number") r.childPid = params.pid;
918
919
  }));
919
- if (!validStart) throw new Error("Child starttime unknown; reservation retained");
920
920
  },
921
921
  release(reason) {
922
922
  locked(() => updateReservationFile(recordPath, fs, (r) => {
@@ -1472,6 +1472,17 @@ function writeRunRecord(record, deps = {}) {
1472
1472
  }
1473
1473
  fs.writeFileSync(path, payload);
1474
1474
  }
1475
+ function reportRunProcessIdentity(runId, deps = {}) {
1476
+ const processStartedAt = new Date(Date.now() - process.uptime() * 1e3).toISOString();
1477
+ withRunRecordLock(runId, deps, () => {
1478
+ const record = readRunRecord(runId, deps);
1479
+ if (!record || record.pid !== void 0 && record.pid !== process.pid) return;
1480
+ record.pid = process.pid;
1481
+ record.processStartedAt = processStartedAt;
1482
+ record.processIdentity = "verified";
1483
+ writeRunRecord(record, deps);
1484
+ }, { strict: true });
1485
+ }
1475
1486
  var FILE_EDIT_TOOL_NAMES = /* @__PURE__ */ new Set(["writeFile", "editFile"]);
1476
1487
  var DEFAULT_ACTIVITY_WRITE_INTERVAL_MS = 2e3;
1477
1488
  function createRunActivityTracker(runId, deps = {}, options = {}) {
@@ -1932,7 +1943,8 @@ async function spawnLocalBackgroundRun(input, deps = {}) {
1932
1943
  fs: reservationFs,
1933
1944
  now: resolvedDeps.now,
1934
1945
  readHostMemory: () => hostMemory = (resolvedDeps.readHostMemory ?? readHostMemory)(),
1935
- getProcessStartTime: resolvedDeps.getProcessStartTime ?? defaultGetProcessStartTime,
1946
+ // Admission remains conservative for existing reservations; no OS probes on startup.
1947
+ getProcessStartTime: () => null,
1936
1948
  withLock: (id, fn, opts) => withRunRecordLock(id, resolvedDeps, fn, opts)
1937
1949
  });
1938
1950
  proc = spawn(execPath, childArgs, {
@@ -1966,24 +1978,17 @@ async function spawnLocalBackgroundRun(input, deps = {}) {
1966
1978
  });
1967
1979
  const hostMemoryNotice = emitHostMemoryNotice(hostMemory, input.output);
1968
1980
  if (typeof proc.pid === "number") {
1969
- let processStartedAt;
1970
- try {
1971
- processStartedAt = (resolvedDeps.getProcessStartTime ?? defaultGetProcessStartTime)(proc.pid);
1972
- if (processStartedAt && !Number.isFinite(processStartedAt.getTime())) processStartedAt = null;
1973
- } catch {
1974
- processStartedAt = null;
1975
- }
1976
1981
  withRunRecordLock(runId, resolvedDeps, () => {
1977
1982
  const latest = readRunRecord(runId, resolvedDeps) ?? record;
1978
1983
  latest.pid = proc.pid;
1979
- if (processStartedAt) latest.processStartedAt = processStartedAt.toISOString();
1984
+ latest.processIdentity ??= "unverified";
1980
1985
  writeRunRecord(latest, resolvedDeps);
1981
1986
  return true;
1982
1987
  }, { strict: true });
1983
1988
  try {
1984
1989
  const persisted = readRunRecord(runId, resolvedDeps);
1985
- reservation.associate({ runId, pid: proc.pid, processStartedAt: processStartedAt?.toISOString() });
1986
- if (persisted?.pid !== proc.pid || !persisted.processStartedAt) throw new Error("Child identity persistence failed");
1990
+ reservation.associate({ runId, pid: proc.pid, processStartedAt: persisted?.processStartedAt });
1991
+ if (persisted?.pid !== proc.pid) throw new Error("Child identity persistence failed: pid not bound");
1987
1992
  } catch (error) {
1988
1993
  throw new Error(`[host-memory-reservation] child ${proc.pid}, run ${runId}: association failed: ${error}`);
1989
1994
  }
@@ -2187,12 +2192,14 @@ function isPidGone(pid, deps = {}) {
2187
2192
  return error.code === "ESRCH";
2188
2193
  }
2189
2194
  }
2190
- function defaultGetProcessStartTime(pid) {
2195
+ function defaultGetProcessStartTime(pid, deps = {}) {
2191
2196
  if (!Number.isSafeInteger(pid) || pid <= 0) return null;
2192
2197
  try {
2193
- if (process.platform === "win32") {
2194
- const shell = process.env.SystemRoot ? join2(process.env.SystemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe") : "powershell.exe";
2195
- const output2 = nodeExecFileSync(shell, [
2198
+ const execFileSync = deps.execFileSync ?? nodeExecFileSync;
2199
+ if ((deps.platform ?? process.platform) === "win32") {
2200
+ const systemRoot = (deps.env ?? process.env).SystemRoot;
2201
+ const shell = systemRoot ? join2(systemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe") : "powershell.exe";
2202
+ const output2 = execFileSync(shell, [
2196
2203
  "-NoProfile",
2197
2204
  "-NonInteractive",
2198
2205
  "-Command",
@@ -2207,7 +2214,7 @@ function defaultGetProcessStartTime(pid) {
2207
2214
  const date = new Date(output2);
2208
2215
  return Number.isFinite(date.getTime()) ? date : null;
2209
2216
  }
2210
- const output = nodeExecFileSync("ps", ["-o", "lstart=", "-p", String(pid)], {
2217
+ const output = execFileSync("ps", ["-o", "lstart=", "-p", String(pid)], {
2211
2218
  encoding: "utf8",
2212
2219
  stdio: ["ignore", "pipe", "ignore"],
2213
2220
  timeout: 1e3,
@@ -2228,6 +2235,14 @@ function defaultGetProcessStartTime(pid) {
2228
2235
  }
2229
2236
  var MAX_PROCESS_START_TIME_DIFF_MS = 3e4;
2230
2237
  var MAX_PERSISTED_PROCESS_START_TIME_DIFF_MS = 2e3;
2238
+ function probeProcessStartTime(pid, deps) {
2239
+ try {
2240
+ const date = deps.getProcessStartTime ? deps.getProcessStartTime(pid) : defaultGetProcessStartTime(pid, deps);
2241
+ return date && Number.isFinite(date.getTime()) ? date : null;
2242
+ } catch {
2243
+ return null;
2244
+ }
2245
+ }
2231
2246
  var ORPHAN_HEARTBEAT_GRACE_MS = 1e4;
2232
2247
  function readTimestampMs(value) {
2233
2248
  if (!value) return null;
@@ -2235,8 +2250,7 @@ function readTimestampMs(value) {
2235
2250
  return Number.isNaN(ms) ? null : ms;
2236
2251
  }
2237
2252
  function isPidReused(pid, expectedStartedAt, deps = {}, maxDiffMs = MAX_PROCESS_START_TIME_DIFF_MS) {
2238
- const getStartTime = deps.getProcessStartTime ?? defaultGetProcessStartTime;
2239
- const procStartTime = getStartTime(pid);
2253
+ const procStartTime = probeProcessStartTime(pid, deps);
2240
2254
  if (!procStartTime) {
2241
2255
  return false;
2242
2256
  }
@@ -2253,7 +2267,7 @@ function checkStaleRun(runId, deps = {}) {
2253
2267
  const pidGone = isPidGone(record.pid, deps);
2254
2268
  const expectedStartedAt = record.processStartedAt ?? record.startedAt;
2255
2269
  const maxStartTimeDiffMs = record.processStartedAt ? MAX_PERSISTED_PROCESS_START_TIME_DIFF_MS : MAX_PROCESS_START_TIME_DIFF_MS;
2256
- const pidReused = !pidGone && isPidReused(record.pid, expectedStartedAt, deps, maxStartTimeDiffMs);
2270
+ const pidReused = !pidGone && record.processIdentity !== "unverified" && isPidReused(record.pid, expectedStartedAt, deps, maxStartTimeDiffMs);
2257
2271
  if (!pidGone && !pidReused) return record;
2258
2272
  const now = deps.now ?? (() => /* @__PURE__ */ new Date());
2259
2273
  const heartbeatAt = readTimestampMs(record.activity?.updatedAt);
@@ -2621,8 +2635,30 @@ async function terminateRunProcess(record, initialSignal, deps) {
2621
2635
  const sleep = deps.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
2622
2636
  const nowMs = () => deps.now ? deps.now().getTime() : Date.now();
2623
2637
  const signalGroup = (sig) => {
2638
+ const fail = (reason) => {
2639
+ throw new Error(`Run ${record.runId}, pid ${pid}, platform ${deps.platform ?? process.platform}: \u8EAB\u4EFD\u672A\u9A8C\u8BC1\uFF0C\u65E0\u6CD5\u5B89\u5168\u7EC8\u6B62 (${reason}). \u53EF\u5148\u786E\u8BA4\u8FDB\u7A0B\u72B6\u6001\u6216\u91CD\u542F\u8BE5 run\uFF1B\u786E\u8BA4\u8EAB\u4EFD\u540E\u91CD\u8BD5 stop/kill\u3002`);
2640
+ };
2641
+ const expectedMs = readTimestampMs(record.processStartedAt ?? record.startedAt);
2642
+ if (expectedMs === null) fail("no trusted process start baseline");
2643
+ const maxDiffMs = record.processStartedAt ? MAX_PERSISTED_PROCESS_START_TIME_DIFF_MS : MAX_PROCESS_START_TIME_DIFF_MS;
2644
+ const actual = probeProcessStartTime(pid, deps);
2645
+ if (!actual || Math.abs(actual.getTime() - expectedMs) > maxDiffMs) {
2646
+ fail("identity probe failed or PID start time mismatch");
2647
+ }
2648
+ const persisted = withRunRecordLock(record.runId, deps, () => {
2649
+ const latest = readRunRecord(record.runId, deps);
2650
+ if (latest) {
2651
+ if (latest.pid !== pid || latest.processStartedAt !== record.processStartedAt || latest.startedAt !== record.startedAt) {
2652
+ fail("record changed");
2653
+ }
2654
+ latest.processIdentity = "verified";
2655
+ writeRunRecord(latest, deps);
2656
+ }
2657
+ return true;
2658
+ }, { strict: true });
2659
+ if (persisted !== true) fail("identity persistence lock contended");
2624
2660
  try {
2625
- if (process.platform !== "win32") {
2661
+ if ((deps.platform ?? process.platform) !== "win32") {
2626
2662
  kill(-pid, sig);
2627
2663
  } else {
2628
2664
  kill(pid, sig);
@@ -2666,7 +2702,7 @@ async function runSignalCommand(args, signal, verb, deps) {
2666
2702
  `);
2667
2703
  return 1;
2668
2704
  }
2669
- const reconciled = checkStaleRun(record.runId, deps) ?? record;
2705
+ const reconciled = record.status === "running" && typeof record.pid === "number" && isPidGone(record.pid, deps) ? checkStaleRun(record.runId, deps) ?? record : record;
2670
2706
  if (isAgentRunTerminalStatus(reconciled.status)) {
2671
2707
  deps.output.write(`Run ${reconciled.runId} is already ${reconciled.status}.
2672
2708
  `);
@@ -2677,7 +2713,14 @@ async function runSignalCommand(args, signal, verb, deps) {
2677
2713
  `);
2678
2714
  return 1;
2679
2715
  }
2680
- const confirmed = await terminateRunProcess(reconciled, signal, deps);
2716
+ let confirmed;
2717
+ try {
2718
+ confirmed = await terminateRunProcess(reconciled, signal, deps);
2719
+ } catch (error) {
2720
+ deps.output.write(`${error instanceof Error ? error.message : String(error)}
2721
+ `);
2722
+ return 1;
2723
+ }
2681
2724
  if (!confirmed) {
2682
2725
  deps.output.write(
2683
2726
  `Failed to ${verb} ${record.runId} (pid ${record.pid}): process still alive after SIGKILL.
@@ -2743,6 +2786,7 @@ export {
2743
2786
  defaultGenerateBatchId,
2744
2787
  withRunRecordLock,
2745
2788
  writeRunRecord,
2789
+ reportRunProcessIdentity,
2746
2790
  createRunActivityTracker,
2747
2791
  readRunRecord,
2748
2792
  backfillRunRecordParentDialog,
@@ -303,7 +303,7 @@ import {
303
303
  terminateRunProcess,
304
304
  transitionRunToTerminal,
305
305
  withQueueLock
306
- } from "./chunk-WO5P2HTX.js";
306
+ } from "./chunk-URW5UM6Y.js";
307
307
  import {
308
308
  TASK_PREVIEW_MAX,
309
309
  formatListRunsCard,
@@ -12169,7 +12169,7 @@ function createCliLocalRuntimeAdapter(deps) {
12169
12169
  const recordRunExecutionIsolation = async () => {
12170
12170
  try {
12171
12171
  const { writeFileSync: writeFileSync4, mkdirSync: mkdirSync4 } = await import("node:fs");
12172
- const { resolveRunsDir: resolveRunsDir2 } = await import("./agentRunControl-QBONJVI4.js");
12172
+ const { resolveRunsDir: resolveRunsDir2 } = await import("./agentRunControl-EI3BGJFM.js");
12173
12173
  const fact = resolveLocalRunExecutionIsolationFact({
12174
12174
  // F1:显式点名宿主执行的 run 在审计里必须与 docker 沙盒区分开
12175
12175
  // (reason: host-explicit-writes vs docker-workload)。
@@ -12201,7 +12201,7 @@ function createCliLocalRuntimeAdapter(deps) {
12201
12201
  dockerWorkloadReleased = true;
12202
12202
  dockerWorkloadLoad = null;
12203
12203
  if (loaded) {
12204
- const { resolveRunsDir: resolveRunsDir2 } = await import("./agentRunControl-QBONJVI4.js");
12204
+ const { resolveRunsDir: resolveRunsDir2 } = await import("./agentRunControl-EI3BGJFM.js");
12205
12205
  const exportRunDiff = deps.exportDockerRunDiffArtifact ?? exportDockerRunDiffArtifact;
12206
12206
  const warn = (message) => process.stderr.write(`[nolo] ${message}
12207
12207
  `);
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-62TBKWTV.js";
7
7
  import {
8
8
  clearCliLocalRuntimePreparedAgentCache
9
- } from "./chunk-B4VCTNZL.js";
9
+ } from "./chunk-WC7UXON2.js";
10
10
  import {
11
11
  readCredentialAvailability
12
12
  } from "./chunk-R4BMKAR5.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createCliLocalRuntimeAdapter,
3
3
  summarizeEndpoint
4
- } from "./chunk-B4VCTNZL.js";
4
+ } from "./chunk-WC7UXON2.js";
5
5
  import {
6
6
  t
7
7
  } from "./chunk-TDX2L4W2.js";
@@ -110,7 +110,7 @@ function createDaemonShortcutCommand(path, description, command) {
110
110
  // packages/cli/agentInternalCommandEntries.ts
111
111
  function getAgentInternalCommandEntries() {
112
112
  const createAgentRunCommand = (path, description) => createContextCommand(path, description, async (args, ctx) => {
113
- const { runAgentRunCommand } = await import("./agentRunCommand-76DUQVWC.js");
113
+ const { runAgentRunCommand } = await import("./agentRunCommand-U2F74LTS.js");
114
114
  return runAgentRunCommand(args, {
115
115
  env: ctx.env,
116
116
  scriptDir: ctx.scriptDir,
@@ -126,7 +126,7 @@ function getAgentInternalCommandEntries() {
126
126
  return runAgentListCommand(args, deps);
127
127
  }),
128
128
  createEnvCommand(["agent", "create"], "Create a new agent", async (args, deps) => {
129
- const { runAgentCreateCommand } = await import("./agentRecordCommands-YNLE7IBY.js");
129
+ const { runAgentCreateCommand } = await import("./agentRecordCommands-PDWACZFR.js");
130
130
  return runAgentCreateCommand(args, deps);
131
131
  }),
132
132
  createEnvCommand(["agent", "models"], "List models: --preset <id> (server discovery, exit 1 on static fallback) or --url <base> --api-key <key> (OpenAI-compatible /models)", async (args, deps) => {
@@ -142,28 +142,28 @@ function getAgentInternalCommandEntries() {
142
142
  return runAgentPullCommand(args, deps);
143
143
  }),
144
144
  createEnvCommand(["agent", "read"], "Read a single agent", async (args, deps) => {
145
- const { runAgentReadCommand } = await import("./agentRecordCommands-YNLE7IBY.js");
145
+ const { runAgentReadCommand } = await import("./agentRecordCommands-PDWACZFR.js");
146
146
  return runAgentReadCommand(args, deps);
147
147
  }),
148
148
  createAgentRunCommand(["agent", "run"], "Run an agent"),
149
149
  createEnvCommand(["agent", "ps"], "List active and recent local agent runs (--json for machine-readable output)", async (_args, deps) => {
150
- const { runAgentPsCommand } = await import("./agentRunControl-QBONJVI4.js");
150
+ const { runAgentPsCommand } = await import("./agentRunControl-EI3BGJFM.js");
151
151
  return runAgentPsCommand(_args, { ...deps, output: process.stdout });
152
152
  }),
153
153
  createEnvCommand(["agent", "status"], "Show status of a local agent run (--json, --watch, --interval-ms N)", async (args, deps) => {
154
- const { runAgentStatusCommand } = await import("./agentRunControl-QBONJVI4.js");
154
+ const { runAgentStatusCommand } = await import("./agentRunControl-EI3BGJFM.js");
155
155
  return runAgentStatusCommand(args, { ...deps, output: process.stdout });
156
156
  }),
157
157
  createEnvCommand(["agent", "logs"], "Show logs of a local agent run", async (args, deps) => {
158
- const { runAgentLogsCommand } = await import("./agentRunControl-QBONJVI4.js");
158
+ const { runAgentLogsCommand } = await import("./agentRunControl-EI3BGJFM.js");
159
159
  return runAgentLogsCommand(args, { ...deps, output: process.stdout });
160
160
  }),
161
161
  createEnvCommand(["agent", "stop"], "Stop a local agent run", async (args, deps) => {
162
- const { runAgentStopCommand } = await import("./agentRunControl-QBONJVI4.js");
162
+ const { runAgentStopCommand } = await import("./agentRunControl-EI3BGJFM.js");
163
163
  return runAgentStopCommand(args, { ...deps, output: process.stdout });
164
164
  }),
165
165
  createEnvCommand(["agent", "kill"], "Kill a local agent run", async (args, deps) => {
166
- const { runAgentKillCommand } = await import("./agentRunControl-QBONJVI4.js");
166
+ const { runAgentKillCommand } = await import("./agentRunControl-EI3BGJFM.js");
167
167
  return runAgentKillCommand(args, { ...deps, output: process.stdout });
168
168
  }),
169
169
  createEnvCommand(["agent", "setup-offline-marxists"], "Create or update the Marxists.org offline book agent", async (args, deps) => {
@@ -171,31 +171,31 @@ function getAgentInternalCommandEntries() {
171
171
  return runSetupOfflineMarxistsAgentCommand(args, deps);
172
172
  }),
173
173
  createEnvCommand(["agent", "update"], "Update agent fields", async (args, deps) => {
174
- const { runAgentUpdateCommand } = await import("./agentRecordCommands-YNLE7IBY.js");
174
+ const { runAgentUpdateCommand } = await import("./agentRecordCommands-PDWACZFR.js");
175
175
  return runAgentUpdateCommand(args, deps);
176
176
  }),
177
177
  createEnvCommand(["agent", "email", "provision"], "Provision a controlled inbox for an agent", async (args, deps) => {
178
- const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-MS6MACO5.js");
178
+ const { runAgentEmailProvisionCommand } = await import("./agentEmailCommands-M4SHODDA.js");
179
179
  return runAgentEmailProvisionCommand(args, deps);
180
180
  }),
181
181
  createEnvCommand(["agent", "email", "bind"], "Bind an existing email address to an agent", async (args, deps) => {
182
- const { runAgentEmailBindCommand } = await import("./agentEmailCommands-MS6MACO5.js");
182
+ const { runAgentEmailBindCommand } = await import("./agentEmailCommands-M4SHODDA.js");
183
183
  return runAgentEmailBindCommand(args, deps);
184
184
  }),
185
185
  createEnvCommand(["agent", "email", "transfer"], "Transfer an email identity from one agent to another (cross-account)", async (args, deps) => {
186
- const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-MS6MACO5.js");
186
+ const { runAgentEmailTransferCommand } = await import("./agentEmailCommands-M4SHODDA.js");
187
187
  return runAgentEmailTransferCommand(args, deps);
188
188
  }),
189
189
  createEnvCommand(
190
190
  ["agent", "email", "create-and-provision"],
191
191
  "Create an agent and provision its controlled inbox",
192
192
  async (args, deps) => {
193
- const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-MS6MACO5.js");
193
+ const { runAgentEmailCreateAndProvisionCommand } = await import("./agentEmailCommands-M4SHODDA.js");
194
194
  return runAgentEmailCreateAndProvisionCommand(args, deps);
195
195
  }
196
196
  ),
197
197
  createEnvCommand(["agent", "delete"], "Hard-delete an agent's private and public records", async (args, deps) => {
198
- const { runAgentDeleteCommand } = await import("./agentDeleteCommand-4RAEG26P.js");
198
+ const { runAgentDeleteCommand } = await import("./agentDeleteCommand-F66NIWCF.js");
199
199
  return runAgentDeleteCommand(args, deps);
200
200
  }),
201
201
  createEnvCommand(["agent", "grant"], "Grant another user access to this agent's owner credentials", async (args, deps) => {
@@ -211,15 +211,15 @@ function getAgentInternalCommandEntries() {
211
211
  return runAgentRevokeGrantCommand(args, deps);
212
212
  }),
213
213
  createEnvCommand(["agent", "bind-current"], "Bind an agent to this machine", async (args, deps) => {
214
- const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-4OQUFTD2.js");
214
+ const { runAgentBindCurrentCommand } = await import("./agentMachineCommands-R55P5SZY.js");
215
215
  return runAgentBindCurrentCommand(args, deps);
216
216
  }),
217
217
  createEnvCommand(["agent", "smoke-current"], "Smoke test a bound agent through this machine", async (args, deps) => {
218
- const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-4OQUFTD2.js");
218
+ const { runAgentSmokeCurrentCommand } = await import("./agentMachineCommands-R55P5SZY.js");
219
219
  return runAgentSmokeCurrentCommand(args, deps);
220
220
  }),
221
221
  createEnvCommand(["agent", "runtime-doctor"], "Diagnose current machine runtime compatibility", async (args, deps) => {
222
- const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-4OQUFTD2.js");
222
+ const { runAgentRuntimeDoctorCommand } = await import("./agentMachineCommands-R55P5SZY.js");
223
223
  return runAgentRuntimeDoctorCommand(args, deps);
224
224
  }),
225
225
  createAgentRunCommand(["agent", "chat"], "Chat with an agent")
@@ -374,27 +374,27 @@ function getCiInternalCommandEntries() {
374
374
  function getDialogInternalCommandEntries() {
375
375
  return [
376
376
  createEnvCommand(["dialog", "search"], "Search dialog messages across dialogs", async (args, deps) => {
377
- const { runDialogSearchCommand } = await import("./dialogCommands-6POPB6FB.js");
377
+ const { runDialogSearchCommand } = await import("./dialogCommands-P5HSDZ7T.js");
378
378
  return runDialogSearchCommand(args, deps);
379
379
  }),
380
380
  createEnvCommand(["dialog", "list"], "List dialogs (default --limit 50; --all/--limit 0 full; --jsonl streams)", async (args, deps) => {
381
- const { runDialogListCommand } = await import("./dialogCommands-6POPB6FB.js");
381
+ const { runDialogListCommand } = await import("./dialogCommands-P5HSDZ7T.js");
382
382
  return runDialogListCommand(args, deps);
383
383
  }),
384
384
  createEnvCommand(["dialog", "delete"], "Delete one or more dialogs", async (args, deps) => {
385
- const { runDialogDeleteCommand } = await import("./dialogCommands-6POPB6FB.js");
385
+ const { runDialogDeleteCommand } = await import("./dialogCommands-P5HSDZ7T.js");
386
386
  return runDialogDeleteCommand(args, deps);
387
387
  }),
388
388
  createEnvCommand(["dialog", "query"], "Query dialogs by subject refs (default --limit 50; --all full; --jsonl streams)", async (args, deps) => {
389
- const { runDialogQueryCommand } = await import("./dialogCommands-6POPB6FB.js");
389
+ const { runDialogQueryCommand } = await import("./dialogCommands-P5HSDZ7T.js");
390
390
  return runDialogQueryCommand(args, deps);
391
391
  }),
392
392
  createEnvCommand(["dialog", "read"], "Read a dialog", async (args, deps) => {
393
- const { runDialogReadCommand } = await import("./dialogCommands-6POPB6FB.js");
393
+ const { runDialogReadCommand } = await import("./dialogCommands-P5HSDZ7T.js");
394
394
  return runDialogReadCommand(args, deps);
395
395
  }),
396
396
  createEnvCommand(["dialog", "status"], "Read compact dialog status", async (args, deps) => {
397
- const { runDialogStatusCommand } = await import("./dialogCommands-6POPB6FB.js");
397
+ const { runDialogStatusCommand } = await import("./dialogCommands-P5HSDZ7T.js");
398
398
  return runDialogStatusCommand(args, deps);
399
399
  })
400
400
  ];
@@ -530,15 +530,15 @@ function getSystemInternalCommandEntries(renderHelpText2) {
530
530
  return runWhoamiCommand({ args, env: ctx.env });
531
531
  }),
532
532
  createEntrypointEnvCommand(["connect"], "Send machine heartbeats or hold a connector websocket", async (args, deps) => {
533
- const { runMachineConnectCommand } = await import("./machineCommands-CTE5QJBU.js");
533
+ const { runMachineConnectCommand } = await import("./machineCommands-3LSEP24P.js");
534
534
  return runMachineConnectCommand(args, deps);
535
535
  }),
536
536
  createDaemonShortcutCommand(["daemon"], "Run the connector daemon shortcut", async (args, deps) => {
537
- const { runMachineConnectCommand } = await import("./machineCommands-CTE5QJBU.js");
537
+ const { runMachineConnectCommand } = await import("./machineCommands-3LSEP24P.js");
538
538
  return runMachineConnectCommand(args, deps);
539
539
  }),
540
540
  createEnvCommand(["machine", "status"], "List machines registered to the current profile", async (args, deps) => {
541
- const { runMachineStatusCommand } = await import("./machineCommands-CTE5QJBU.js");
541
+ const { runMachineStatusCommand } = await import("./machineCommands-3LSEP24P.js");
542
542
  return runMachineStatusCommand(args, deps);
543
543
  }),
544
544
  createEnvCommand(["doctor", "runtime"], "Diagnose local-first agent runtime selection", async (args, deps) => {
@@ -15,7 +15,7 @@ import {
15
15
  runDialogSearchCommand,
16
16
  runDialogStatusCommand,
17
17
  sortDialogs
18
- } from "./chunk-O4R4M4M5.js";
18
+ } from "./chunk-IMMA7QFE.js";
19
19
  import "./chunk-ID4G2MAR.js";
20
20
  import "./chunk-LEZLJTQ4.js";
21
21
  import "./chunk-Y5GCAMGP.js";
@@ -66,7 +66,7 @@ import "./chunk-M2EJHDJP.js";
66
66
  import "./chunk-5EMSBTQ6.js";
67
67
  import "./chunk-I42VC5KR.js";
68
68
  import "./chunk-U6VC4MU4.js";
69
- import "./chunk-WO5P2HTX.js";
69
+ import "./chunk-URW5UM6Y.js";
70
70
  import "./chunk-PJNFNEJE.js";
71
71
  import "./chunk-PSCNXBYA.js";
72
72
  import "./chunk-GAGGEA7D.js";
package/index.js CHANGED
@@ -71,9 +71,9 @@ async function runScript(script, forwardedArgs, env) {
71
71
  return proc.exited;
72
72
  }
73
73
  async function launchTuiWorkspace(args2) {
74
- const { startTuiWorkspace } = await import("./readlineWorkspace-3WLNCNV4.js");
74
+ const { startTuiWorkspace } = await import("./readlineWorkspace-OFBP6OA7.js");
75
75
  const { createTuiSummaryLlmCaller } = await import("./tuiSummaryLlmCaller-FQOEF4IE.js");
76
- const { setCliAutoCompactionSummaryFallback } = await import("./localRuntimeAdapter-6P7JHQOK.js");
76
+ const { setCliAutoCompactionSummaryFallback } = await import("./localRuntimeAdapter-ZIAOTUBE.js");
77
77
  setCliAutoCompactionSummaryFallback(
78
78
  createTuiSummaryLlmCaller(args2.env, { timeoutMs: 3e4 })
79
79
  );
@@ -85,7 +85,7 @@ async function launchTuiWorkspace(args2) {
85
85
  });
86
86
  }
87
87
  async function main() {
88
- const { createCliRuntimeContext, looksLikeDaemonShortcut, renderHelpText, resolveCommand, runResolvedCommand } = await import("./commandRegistry-PDKCQHG3.js");
88
+ const { createCliRuntimeContext, looksLikeDaemonShortcut, renderHelpText, resolveCommand, runResolvedCommand } = await import("./commandRegistry-3XBG7JHS.js");
89
89
  const { buildCliRuntimeEnv, loadProfileConfig } = await import("./profileConfig-KN3N2BLF.js");
90
90
  const { resolveTuiLaunchMode } = await import("./runtimeModeArgs-2Y7BALTO.js");
91
91
  const runtimeEnv = {
@@ -46,7 +46,7 @@ import {
46
46
  withRuntimeEnabledPacksAndPrompt,
47
47
  writeDialog,
48
48
  writeLocalTokenRecord
49
- } from "./chunk-B4VCTNZL.js";
49
+ } from "./chunk-WC7UXON2.js";
50
50
  import "./chunk-G3VYRPTV.js";
51
51
  import "./chunk-R4BMKAR5.js";
52
52
  import "./chunk-TDX2L4W2.js";
@@ -164,7 +164,7 @@ import "./chunk-I42VC5KR.js";
164
164
  import "./chunk-U6VC4MU4.js";
165
165
  import {
166
166
  setRemoteDialogSyncTimeoutForTest
167
- } from "./chunk-WO5P2HTX.js";
167
+ } from "./chunk-URW5UM6Y.js";
168
168
  import "./chunk-PJNFNEJE.js";
169
169
  import "./chunk-PSCNXBYA.js";
170
170
  import "./chunk-FDLDMJTM.js";
@@ -2,7 +2,7 @@ import {
2
2
  buildMachinePermissionPromptBlock,
3
3
  handleConnectorRunMessage,
4
4
  resolveMachineRunPermissionPolicy
5
- } from "./chunk-AIHY74D3.js";
5
+ } from "./chunk-Z6HR75HX.js";
6
6
  import {
7
7
  MAX_CONNECTOR_TIMER_DELAY_MS,
8
8
  clampConnectorTimerDelayMs,
@@ -11,7 +11,7 @@ import {
11
11
  resolveConnectorProbeTimeoutMs,
12
12
  resolveConnectorWebSocketTarget
13
13
  } from "./chunk-BLVSFYQ3.js";
14
- import "./chunk-B4VCTNZL.js";
14
+ import "./chunk-WC7UXON2.js";
15
15
  import "./chunk-G3VYRPTV.js";
16
16
  import "./chunk-R4BMKAR5.js";
17
17
  import "./chunk-TDX2L4W2.js";
@@ -135,7 +135,7 @@ import "./chunk-M2EJHDJP.js";
135
135
  import "./chunk-5EMSBTQ6.js";
136
136
  import "./chunk-I42VC5KR.js";
137
137
  import "./chunk-U6VC4MU4.js";
138
- import "./chunk-WO5P2HTX.js";
138
+ import "./chunk-URW5UM6Y.js";
139
139
  import "./chunk-PJNFNEJE.js";
140
140
  import "./chunk-PSCNXBYA.js";
141
141
  import "./chunk-FDLDMJTM.js";
@@ -11,8 +11,8 @@ import {
11
11
  runtimeWorkspacePermissionPolicy,
12
12
  scopePermissionPolicyToRuntimeWorkspace,
13
13
  summarizeAgentConfigForLogs
14
- } from "./chunk-AIHY74D3.js";
15
- import "./chunk-B4VCTNZL.js";
14
+ } from "./chunk-Z6HR75HX.js";
15
+ import "./chunk-WC7UXON2.js";
16
16
  import "./chunk-G3VYRPTV.js";
17
17
  import "./chunk-R4BMKAR5.js";
18
18
  import "./chunk-TDX2L4W2.js";
@@ -123,7 +123,7 @@ import "./chunk-M2EJHDJP.js";
123
123
  import "./chunk-5EMSBTQ6.js";
124
124
  import "./chunk-I42VC5KR.js";
125
125
  import "./chunk-U6VC4MU4.js";
126
- import "./chunk-WO5P2HTX.js";
126
+ import "./chunk-URW5UM6Y.js";
127
127
  import "./chunk-PJNFNEJE.js";
128
128
  import "./chunk-PSCNXBYA.js";
129
129
  import "./chunk-FDLDMJTM.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolo-cli",
3
- "version": "0.170.0",
3
+ "version": "0.170.1",
4
4
  "type": "module",
5
5
  "description": "Agent-first terminal workspace for Nolo",
6
6
  "bin": {
@@ -90,7 +90,7 @@ import {
90
90
  wrapTextToLines,
91
91
  wrapTranscriptLine,
92
92
  wrapTranscriptLineWithLayout
93
- } from "./chunk-RKKJ6SVM.js";
93
+ } from "./chunk-O2AY3CVI.js";
94
94
  import "./chunk-6QDYSCPW.js";
95
95
  import "./chunk-DHNQA4VI.js";
96
96
  import {
@@ -102,7 +102,7 @@ import {
102
102
  createCliLocalRuntimeAdapter,
103
103
  createOriginShellGrant,
104
104
  readTimestamp
105
- } from "./chunk-B4VCTNZL.js";
105
+ } from "./chunk-WC7UXON2.js";
106
106
  import "./chunk-G3VYRPTV.js";
107
107
  import "./chunk-R4BMKAR5.js";
108
108
  import {
@@ -123,7 +123,7 @@ import {
123
123
  normalizeDialogRecord,
124
124
  readDialogSnapshot,
125
125
  sortDialogs
126
- } from "./chunk-O4R4M4M5.js";
126
+ } from "./chunk-IMMA7QFE.js";
127
127
  import "./chunk-ID4G2MAR.js";
128
128
  import {
129
129
  listUserRecordsFromServers,
@@ -320,7 +320,7 @@ import {
320
320
  isRunRecordClaimed,
321
321
  listRunRecords,
322
322
  readRunRecord
323
- } from "./chunk-WO5P2HTX.js";
323
+ } from "./chunk-URW5UM6Y.js";
324
324
  import {
325
325
  clipText,
326
326
  formatDuration,