nolo-cli 0.14.0-alpha.9 → 0.15.0

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.
Files changed (92) hide show
  1. package/{_executeModel-OQ6KPFSB.js → _executeModel-QAUS6B7J.js} +24 -24
  2. package/{action-N3KXFO5V.js → action-GUOZYYGN.js} +4 -4
  3. package/{addContentAction-4Z762DMR.js → addContentAction-QDGHGUBH.js} +3 -3
  4. package/{addDialogAgentAction-FALLEKPR.js → addDialogAgentAction-Z4YCYZIV.js} +2 -2
  5. package/{agentDeleteCommand-UBXH2FDO.js → agentDeleteCommand-QDO62EZA.js} +20 -20
  6. package/{agentEmailCommands-ZI2FIUBV.js → agentEmailCommands-UZ5BKX3P.js} +37 -37
  7. package/{agentListCommands-7M6FHCSH.js → agentListCommands-ZC33UDWT.js} +22 -22
  8. package/{agentMachineCommands-R3FW62QH.js → agentMachineCommands-RZGZEZRL.js} +20 -20
  9. package/{agentRecordCommands-WUY3C3HZ.js → agentRecordCommands-DGDXE2VH.js} +32 -32
  10. package/{agentRunCommand-CWXYVYPZ.js → agentRunCommand-SRZWFOPH.js} +34 -34
  11. package/{agentRuntimeLocal-BONMVACL.js → agentRuntimeLocal-4YCF6IRF.js} +11 -11
  12. package/{agentSlice-IHOSTSWC.js → agentSlice-IVE735EV.js} +3 -3
  13. package/appDeleteCommands-7I26L64I.js +124 -0
  14. package/appDeployCommands-TZLZNTJN.js +163 -0
  15. package/appDeployStatusCommands-OPPTLHRW.js +144 -0
  16. package/appGetCommands-N2S4HYKY.js +119 -0
  17. package/appListCommands-OBTPPKUM.js +122 -0
  18. package/{authCommand-IKIU4FZY.js → authCommand-YFTR3347.js} +5 -5
  19. package/{authCommands-QP43ADV3.js → authCommands-YXGOXNBZ.js} +3 -3
  20. package/{chunk-3B2LFO6R.js → browser-image-compression-MFDTD7K6.js} +4 -518
  21. package/{chunk-YQAG2J2T.js → chunk-472E5RMQ.js} +1 -1
  22. package/chunk-4QQFLN5C.js +552 -0
  23. package/{chunk-SZ7RUWAQ.js → chunk-5VMYGIIL.js} +97 -38
  24. package/{chunk-P6DRYHVM.js → chunk-6565R2TI.js} +16 -14
  25. package/{chunk-2ROIXEDX.js → chunk-6MHDWKOT.js} +2 -2
  26. package/{chunk-GGHFCK3X.js → chunk-AWDOJBHW.js} +426 -430
  27. package/{chunk-DUE6E46E.js → chunk-BFRVXJJJ.js} +43 -16
  28. package/{chunk-UONU6Q4P.js → chunk-G2MKOQCB.js} +1 -1
  29. package/chunk-GFUIQ4RY.js +136 -0
  30. package/{chunk-SRKNB2WB.js → chunk-HRQCKQA5.js} +4 -4
  31. package/{chunk-CDQ2ICPR.js → chunk-IOQ7IBPU.js} +1 -1
  32. package/{chunk-QLO2G5HP.js → chunk-ISYE6GZB.js} +1 -1
  33. package/{chunk-CXLGUR7M.js → chunk-IZ2QRVEU.js} +2 -2
  34. package/{chunk-U4J6ZZFY.js → chunk-JBKVPAYK.js} +7 -140
  35. package/{chunk-V6VXDXGY.js → chunk-JS33TCQ3.js} +2 -2
  36. package/{chunk-YG3CCS7C.js → chunk-K53477EY.js} +4 -4
  37. package/{chunk-3WGLLTK4.js → chunk-LSFAWXKC.js} +100 -3
  38. package/{chunk-BHK5ZAW7.js → chunk-N5424GSW.js} +1 -1
  39. package/chunk-NTC6I2FN.js +107 -0
  40. package/{chunk-QNXEDF7V.js → chunk-O53CP2QR.js} +3 -3
  41. package/{chunk-CY4TAX6S.js → chunk-OKSYPTDZ.js} +9 -9
  42. package/{chunk-NFHGY5T5.js → chunk-OQMPU2ML.js} +4 -4
  43. package/{chunk-NSZB7BYV.js → chunk-P4MJQWWF.js} +2 -2
  44. package/{chunk-JHFMRUGX.js → chunk-RKM3K52F.js} +1 -1
  45. package/{chunk-A5V7UEZJ.js → chunk-SFXYKGK2.js} +3 -3
  46. package/{chunk-S5UACFUP.js → chunk-TTGAVETO.js} +10 -2
  47. package/{chunk-BOJVWKNA.js → chunk-U7LEGLEB.js} +1 -1
  48. package/{chunk-YDOTMXTK.js → chunk-UXKQQ2MR.js} +9 -9
  49. package/{chunk-KUDUXBNE.js → chunk-VE6XMVKG.js} +189 -41
  50. package/{chunk-NJVPXLRY.js → chunk-VPTJB4HM.js} +1 -1
  51. package/{chunk-3AE4NQ5O.js → chunk-WA6KZL5V.js} +25 -6
  52. package/{chunk-T3X232L6.js → chunk-WNLPAOIT.js} +1 -1
  53. package/{chunk-MEXNTURY.js → chunk-WRN5EQT7.js} +1 -1
  54. package/{chunk-FVGJNXPJ.js → chunk-XGQZFBO5.js} +83 -206
  55. package/{chunk-3FCSMQAC.js → chunk-XVP3C2KY.js} +1 -1
  56. package/{chunk-SW3Q2OV5.js → chunk-YNHQIXX5.js} +774 -5735
  57. package/{chunk-7VKJDLPO.js → chunk-Z24FGIU2.js} +2 -2
  58. package/{createAgentAutomationAction-W4OZQ63I.js → createAgentAutomationAction-TS6NNZ4X.js} +9 -9
  59. package/{createDialogAction-G6XQLPAN.js → createDialogAction-5HVQ33EX.js} +10 -10
  60. package/{createPageAction-RNT4LCAX.js → createPageAction-4F3ZGQJD.js} +9 -9
  61. package/{dbSlice-7Q23HSWH.js → dbSlice-OP6UPXKA.js} +2 -2
  62. package/{dialogCommands-YUTOCICO.js → dialogCommands-3GEPXHFB.js} +16 -16
  63. package/{dialogSlice-QZZF4JXD.js → dialogSlice-FAWUQDJW.js} +9 -9
  64. package/{docCreateCommands-LQYOVE7D.js → docCreateCommands-ZE3S6BCP.js} +22 -20
  65. package/{docDeleteCommands-LNS5V76K.js → docDeleteCommands-TW6PGTRT.js} +21 -19
  66. package/{docReadCommands-IRCP66BG.js → docReadCommands-LDXL3B6J.js} +20 -18
  67. package/{docStore-66Q4JTTG.js → docStore-2UHVWLTV.js} +10 -10
  68. package/{docUpdateCommands-4VUX3Q7W.js → docUpdateCommands-GYD6XI5O.js} +21 -19
  69. package/{handleSendMessageAction-CB5UKK2X.js → handleSendMessageAction-LJPUYNOH.js} +9 -9
  70. package/index.js +92 -61
  71. package/{machineCommands-PX2BADIB.js → machineCommands-OKNDYS3M.js} +35 -35
  72. package/{machineWsRunDispatch-IBNCRCEQ.js → machineWsRunDispatch-ZX5AJ6FJ.js} +31 -31
  73. package/package.json +1 -1
  74. package/{read-SIWMJRHC.js → read-HXHAZBKH.js} +1 -1
  75. package/{readDocTool-TCYJY4PP.js → readDocTool-VPBDTO4G.js} +1 -1
  76. package/{readlineWorkspace-YIXJ2OOO.js → readlineWorkspace-MB3ANKHM.js} +92 -92
  77. package/{removeDialogAgentAction-WKHZT6VJ.js → removeDialogAgentAction-HUFVN35S.js} +4 -4
  78. package/{runAgentClientLoop-BXMDAQB2.js → runAgentClientLoop-A75BUU6D.js} +19 -19
  79. package/{setDialogExtraReferencesAction-GCI5QU6E.js → setDialogExtraReferencesAction-2VLGWQKG.js} +2 -2
  80. package/{setPrimaryDialogAgentAction-NRO57AS6.js → setPrimaryDialogAgentAction-VB4UV2CC.js} +4 -4
  81. package/{settingSlice-FTWZ5ZHT.js → settingSlice-7JYPQNAC.js} +3 -3
  82. package/{spaceCommands-7Z6DZFEE.js → spaceCommands-O3KJNCON.js} +21 -21
  83. package/{spaceSlice-3GLIRD3Q.js → spaceSlice-444MFUP6.js} +9 -9
  84. package/{streamAgentChatTurn-SN7YS2VV.js → streamAgentChatTurn-DJAE7USZ.js} +42 -39
  85. package/{tools-4JSNWHIK.js → tools-YB6LXSVN.js} +14 -14
  86. package/{tuiSummaryLlmCaller-PS5BDLHV.js → tuiSummaryLlmCaller-QQL3JA5I.js} +3 -3
  87. package/{updateDialogTitleAction-DUJ2JZXX.js → updateDialogTitleAction-6HGFBM64.js} +9 -9
  88. package/{agentGrantCommands-JMTM6U4B.js → agentGrantCommands-JNDE4RWR.js} +1 -1
  89. package/{agentPullCommand-UXANSFU3.js → agentPullCommand-6HWUT3SW.js} +1 -1
  90. package/{chunk-3QAF2LTL.js → chunk-DZ3XJVET.js} +3 -3
  91. package/{chunk-HBRZXXP5.js → chunk-KMQPSTMJ.js} +6 -6
  92. package/{tableCommands-V5O7QMXY.js → tableCommands-3P7MJ3PF.js} +3 -3
@@ -4,25 +4,26 @@ import {
4
4
  providerHttpFailure,
5
5
  readSseFrames,
6
6
  throwIfChatCompletionStreamFailed
7
- } from "./chunk-3AE4NQ5O.js";
7
+ } from "./chunk-WA6KZL5V.js";
8
8
  import {
9
9
  parseToolArgumentsJson
10
- } from "./chunk-2ROIXEDX.js";
10
+ } from "./chunk-6MHDWKOT.js";
11
11
  import {
12
12
  createThinkParserState,
13
13
  createToolCallAccumulator,
14
+ createToolCallTextParserState,
14
15
  extractThinkContent,
15
16
  finalizeAccumulatedToolCalls
16
- } from "./chunk-3WGLLTK4.js";
17
+ } from "./chunk-LSFAWXKC.js";
17
18
  import {
18
19
  requiresBareImageUrl,
19
20
  toBareImageUrlMessages
20
- } from "./chunk-JHFMRUGX.js";
21
+ } from "./chunk-RKM3K52F.js";
21
22
  import {
22
23
  buildProviderAuthHeaders,
23
24
  buildProviderExecutionPlan,
24
25
  toOpenAiCompatibleMessages
25
- } from "./chunk-SRKNB2WB.js";
26
+ } from "./chunk-HRQCKQA5.js";
26
27
  import {
27
28
  canonicalizeToolName,
28
29
  createGlob,
@@ -153,6 +154,7 @@ async function readOpenAiCompatibleSseCompletion(args) {
153
154
  usage: void 0,
154
155
  accumulatedToolCalls: createToolCallAccumulator(),
155
156
  thinkState: createThinkParserState(),
157
+ toolCallTextState: createToolCallTextParserState(),
156
158
  onTextDelta: args.onTextDelta,
157
159
  onReasoningDelta: args.onReasoningDelta
158
160
  };
@@ -826,12 +828,16 @@ var buildCombinedShellInput = (args) => {
826
828
  typeof args.input === "string" ? args.input : ""
827
829
  ].filter(Boolean).join("\n");
828
830
  };
829
- function isDestructiveShellCommand(args) {
831
+ function resolveScannableShellInput(args) {
830
832
  const combined = buildCombinedShellInput(args);
831
- if (!combined.trim()) return false;
832
- const scannable = SHELL_STRING_EXECUTION_PATTERNS.some(
833
+ if (!combined.trim()) return void 0;
834
+ return SHELL_STRING_EXECUTION_PATTERNS.some(
833
835
  (pattern) => pattern.test(combined)
834
836
  ) ? combined : stripQuotedSegments(combined);
837
+ }
838
+ function isDestructiveShellCommand(args) {
839
+ const scannable = resolveScannableShellInput(args);
840
+ if (scannable === void 0) return false;
835
841
  return SHELL_DESTRUCTIVE_PATTERNS.some((pattern) => pattern.test(scannable));
836
842
  }
837
843
  var LONG_RUNNING_COMMAND_PATTERNS = [
@@ -847,13 +853,42 @@ var LONG_RUNNING_COMMAND_PATTERNS = [
847
853
  /\bpm2\b.*\bstart\b/i
848
854
  ];
849
855
  function isLongRunningShellCommand(args) {
850
- const combined = buildCombinedShellInput(args);
851
- if (!combined.trim()) return false;
852
- const scannable = SHELL_STRING_EXECUTION_PATTERNS.some(
853
- (pattern) => pattern.test(combined)
854
- ) ? combined : stripQuotedSegments(combined);
856
+ const scannable = resolveScannableShellInput(args);
857
+ if (scannable === void 0) return false;
855
858
  return LONG_RUNNING_COMMAND_PATTERNS.some((pattern) => pattern.test(scannable));
856
859
  }
860
+ var IMMEDIATE_DETACH_COMMAND_PATTERNS = [
861
+ /\btail\s+(?:-\S*[fF]\S*|--follow)\b/,
862
+ /\bwatch\s+\S/,
863
+ /\bwhile\s+(?:true|:|\[\s*true\s*\])\s*;\s*do\b/
864
+ ];
865
+ var IMMEDIATE_DETACH_SLEEP_THRESHOLD_SECONDS = 5;
866
+ var SLEEP_PREFIX_PATTERN = /^(?:[A-Za-z_][A-Za-z0-9_]*=\S*\s+)*(?:nohup\s+|time\s+)*sleep\s+(\S+)/;
867
+ function parseSleepDurationSeconds(token) {
868
+ const match = /^(\d+(?:\.\d+)?)(s|m|h|d)?$/i.exec(token);
869
+ if (!match) return void 0;
870
+ const value = Number(match[1]);
871
+ if (!Number.isFinite(value)) return void 0;
872
+ const unit = (match[2] ?? "s").toLowerCase();
873
+ const factor = unit === "m" ? 60 : unit === "h" ? 3600 : unit === "d" ? 86400 : 1;
874
+ return value * factor;
875
+ }
876
+ function isLongSleepCommand(scannable) {
877
+ const match = SLEEP_PREFIX_PATTERN.exec(scannable.trim());
878
+ if (!match) return false;
879
+ const durationToken = match[1] ?? "";
880
+ if (/^inf(inity)?$/i.test(durationToken)) return true;
881
+ const seconds = parseSleepDurationSeconds(durationToken);
882
+ if (seconds === void 0) return true;
883
+ return seconds > IMMEDIATE_DETACH_SLEEP_THRESHOLD_SECONDS;
884
+ }
885
+ function isImmediateDetachShellCommand(args) {
886
+ const scannable = resolveScannableShellInput(args);
887
+ if (scannable === void 0) return false;
888
+ return isLongSleepCommand(scannable) || LONG_RUNNING_COMMAND_PATTERNS.some((pattern) => pattern.test(scannable)) || IMMEDIATE_DETACH_COMMAND_PATTERNS.some(
889
+ (pattern) => pattern.test(scannable)
890
+ );
891
+ }
857
892
  function evaluateShellCommandPolicy(args) {
858
893
  if (isDestructiveShellCommand(args) && !hasExplicitDestructivePermission(args.userInput)) {
859
894
  return {
@@ -1536,7 +1571,7 @@ function buildExecShellTool(toolName) {
1536
1571
  type: "function",
1537
1572
  function: {
1538
1573
  name: toolName,
1539
- description: "Run a shell command in the local workspace. Commands already execute from the workspace root; do not cd into guessed paths such as /workspace, /repo, /home/user, or /home/user/workspace. Prefer one command that performs a complete verification or related git operation instead of many tiny commands. For branch setup, prefer idempotent commands such as git switch -C <branch> when replacing or recreating a benchmark branch is acceptable. Use portable POSIX commands for macOS/BSD shells; avoid GNU-only flags such as cat -A. Do not use cat -A. Do not use brittle byte-offset commands such as xxd -s -32. For separator lines, use echo or printf '%s\\n'. For text-file content or trailing-newline checks, prefer readFile over shell byte inspection when that tool is available. Do not run repeated git status, git log, git rev-parse, or branch checks after a successful command already returned the needed clean status and commit information; use one final verification command. If a command fails, use the error output to adjust the next command rather than repeating the same shape. For long-running commands that should keep running in the background (dev servers, watchers, REPLs, `--watch`/`serve`/`dev` scripts), use launchProcess instead \u2014 execShell blocks until the command exits and will freeze the conversation.",
1574
+ description: "Run a shell command in the local workspace. Commands already execute from the workspace root; do not cd into guessed paths such as /workspace, /repo, /home/user, or /home/user/workspace. Prefer one command that performs a complete verification or related git operation instead of many tiny commands. For branch setup, prefer idempotent commands such as git switch -C <branch> when replacing or recreating a benchmark branch is acceptable. Use portable POSIX commands for macOS/BSD shells; avoid GNU-only flags such as cat -A. Do not use cat -A. Do not use brittle byte-offset commands such as xxd -s -32. For separator lines, use echo or printf '%s\\n'. For text-file content or trailing-newline checks, prefer readFile over shell byte inspection when that tool is available. Do not run repeated git status, git log, git rev-parse, or branch checks after a successful command already returned the needed clean status and commit information; use one final verification command. If a command fails, use the error output to adjust the next command rather than repeating the same shape. For long-running commands that should keep running in the background (dev servers, watchers, REPLs, `--watch`/`serve`/`dev` scripts), prefer launchProcess. Obviously long-running commands run via execShell (sleep over 5s, tail -f, watch, infinite loops, dev/serve/watch scripts) are moved to the background automatically and return {detached: true, pid, label} \u2014 use listProcesses to inspect or stop them, and tell the user the command is running in the background. Any other command blocks until it exits, so keep those short.",
1540
1575
  parameters: {
1541
1576
  type: "object",
1542
1577
  properties: {
@@ -1733,8 +1768,9 @@ function resolveExecShellTimeoutMs(override) {
1733
1768
  return asOptionalPositiveFiniteNumber(Number(raw));
1734
1769
  }
1735
1770
  function resolveDetachMs(override) {
1736
- const fromOverride = asOptionalPositiveFiniteNumber(override);
1737
- if (fromOverride !== void 0) return fromOverride;
1771
+ if (typeof override === "number" && Number.isFinite(override) && override >= 0) {
1772
+ return override;
1773
+ }
1738
1774
  const raw = process.env[EXEC_SHELL_DETACH_ENV];
1739
1775
  if (raw === void 0) return DEFAULT_EXEC_SHELL_DETACH_MS;
1740
1776
  const parsed = asOptionalPositiveFiniteNumber(Number(raw));
@@ -1961,15 +1997,22 @@ function isPathInsideWorkspace(args) {
1961
1997
  const relativePath = relative(args.workspaceRoot, args.targetPath);
1962
1998
  return relativePath === "" || !relativePath.startsWith("..") && !relativePath.includes(`..${sep}`);
1963
1999
  }
2000
+ var PATH_FIELD_ALIASES = ["path", "file_path", "filePath", "filename", "file", "target_file", "targetFile", "file_to_read", "fileToRead"];
2001
+ var OLD_TEXT_FIELD_ALIASES = ["oldText", "old_string", "oldString", "search", "search_string", "find", "match"];
2002
+ var NEW_TEXT_FIELD_ALIASES = ["newText", "new_string", "newString", "replacement", "replace"];
2003
+ var SEARCH_QUERY_FIELD_ALIASES = ["query", "search_query", "searchQuery", "q", "pattern", "search"];
2004
+ function pickFirstAlias(args, aliases, preserveWhitespace = false) {
2005
+ for (const key of aliases) {
2006
+ const val = args[key];
2007
+ if (typeof val === "string" && val.length > 0) return preserveWhitespace ? val : val.trim();
2008
+ }
2009
+ return void 0;
2010
+ }
1964
2011
  function requireWorkspaceToolPath(args) {
1965
- const requestedPath = readWorkspacePathAlias(args) ?? "";
2012
+ const requestedPath = pickFirstAlias(args, PATH_FIELD_ALIASES) ?? "";
1966
2013
  if (!requestedPath) throw new Error("Workspace tool requires a non-empty path.");
1967
2014
  return requestedPath;
1968
2015
  }
1969
- function readWorkspacePathAlias(args) {
1970
- const path = args.path ?? args.file_path ?? args.filePath ?? args.filename ?? args.file;
1971
- return asOptionalTrimmedString(path);
1972
- }
1973
2016
  function requireWorkspaceFileContent(args) {
1974
2017
  if (typeof args.content !== "string") {
1975
2018
  throw new Error("writeFile requires string content.");
@@ -1977,16 +2020,18 @@ function requireWorkspaceFileContent(args) {
1977
2020
  return args.content;
1978
2021
  }
1979
2022
  function requireWorkspaceOldText(args) {
1980
- if (typeof args.oldText !== "string" || !args.oldText) {
2023
+ const oldText = pickFirstAlias(args, OLD_TEXT_FIELD_ALIASES, true);
2024
+ if (!oldText || !oldText.trim()) {
1981
2025
  throw new Error("editFile requires non-empty oldText.");
1982
2026
  }
1983
- return args.oldText;
2027
+ return oldText;
1984
2028
  }
1985
2029
  function requireWorkspaceNewText(args) {
1986
- if (typeof args.newText !== "string") {
1987
- throw new Error("editFile requires string newText.");
2030
+ for (const key of NEW_TEXT_FIELD_ALIASES) {
2031
+ const val = args[key];
2032
+ if (typeof val === "string") return val;
1988
2033
  }
1989
- return args.newText;
2034
+ throw new Error("editFile requires string newText.");
1990
2035
  }
1991
2036
  function readExpectedReplacementCount(args) {
1992
2037
  if (args.expectedReplacements === void 0) return 1;
@@ -2190,7 +2235,7 @@ function clipEditSnippet(text) {
2190
2235
  return lines.slice(0, EDIT_SNIPPET_MAX_LINES).map((line) => line.length > EDIT_SNIPPET_WIDTH ? `${line.slice(0, EDIT_SNIPPET_WIDTH)}\u2026` : line).join("\n");
2191
2236
  }
2192
2237
  function requireWorkspaceSearchQuery(args) {
2193
- const query = asTrimmedString(args.query);
2238
+ const query = pickFirstAlias(args, SEARCH_QUERY_FIELD_ALIASES);
2194
2239
  if (!query) throw new Error("searchFiles requires a non-empty query.");
2195
2240
  return query;
2196
2241
  }
@@ -2489,9 +2534,9 @@ async function runWorkspaceCommand(args) {
2489
2534
  args.abortSignal.addEventListener("abort", abortListener, { once: true });
2490
2535
  }) : null;
2491
2536
  const effectiveDetachMs = resolveDetachMs(args.detachMs);
2492
- const detachPromise = effectiveDetachMs ? new Promise((r) => {
2537
+ const detachPromise = new Promise((r) => {
2493
2538
  detachTimer = setTimeout(() => r(detachResult), effectiveDetachMs);
2494
- }) : null;
2539
+ });
2495
2540
  const racers = [exitPromise];
2496
2541
  if (timeoutMs) {
2497
2542
  racers.push(
@@ -2501,7 +2546,7 @@ async function runWorkspaceCommand(args) {
2501
2546
  );
2502
2547
  }
2503
2548
  if (abortPromise) racers.push(abortPromise);
2504
- if (detachPromise) racers.push(detachPromise);
2549
+ racers.push(detachPromise);
2505
2550
  let raceWinner;
2506
2551
  try {
2507
2552
  raceWinner = await Promise.race(racers);
@@ -2534,25 +2579,35 @@ async function runWorkspaceCommand(args) {
2534
2579
  killChild("SIGKILL");
2535
2580
  }
2536
2581
  if (didDetach) {
2537
- detachSignalCleanup();
2582
+ exitPromise.catch(() => {
2583
+ });
2538
2584
  const pid = typeof proc.pid === "number" ? proc.pid : 0;
2539
2585
  const label = deriveLabel(args.command.join(" "));
2540
2586
  const pgid = pid;
2541
2587
  const registry2 = getProcessRegistry();
2542
2588
  registry2.add({ pid, pgid, command: args.command.join(" "), label });
2543
2589
  proc.on("close", (code) => {
2590
+ detachSignalCleanup();
2544
2591
  registry2.markExited(pid, code ?? 1);
2545
2592
  });
2593
+ const immediate = effectiveDetachMs === 0;
2594
+ const reason = immediate ? `command looks long-running; moved to background immediately (pid=${pid}, label=${label})` : `command detached to background after ${effectiveDetachMs}ms (pid=${pid}, label=${label})`;
2546
2595
  return {
2547
2596
  stdout: "",
2548
- stderr: `command detached to background after ${effectiveDetachMs}ms (pid=${pid}, label=${label})
2549
- Use listProcesses / processRegistry to inspect.`,
2597
+ stderr: `${reason}
2598
+ Use listProcesses to inspect or stop it.`,
2550
2599
  exitCode: 0,
2551
2600
  timedOut: false,
2552
2601
  detached: true,
2553
2602
  pid,
2554
2603
  label,
2555
- content: JSON.stringify({ detached: true, pid, label, status: "running" })
2604
+ content: JSON.stringify({
2605
+ detached: true,
2606
+ pid,
2607
+ label,
2608
+ status: "running",
2609
+ ...immediate ? { reason: "long-running-command" } : {}
2610
+ })
2556
2611
  };
2557
2612
  }
2558
2613
  const [stdout, rawStderr] = await Promise.all([
@@ -2868,7 +2923,7 @@ async function listWorkspaceEntries(args) {
2868
2923
  async function listFilesTool(args) {
2869
2924
  const parsed = parseWorkspaceToolArguments(args.call.arguments);
2870
2925
  const warnings = [];
2871
- const requestedPath = readWorkspacePathAlias(parsed) ?? ".";
2926
+ const requestedPath = pickFirstAlias(parsed, PATH_FIELD_ALIASES) ?? ".";
2872
2927
  const maxDepth = readWorkspaceMaxDepth(parsed, warnings);
2873
2928
  const maxResults = readWorkspaceMaxResults(parsed, warnings);
2874
2929
  const entryType = readWorkspaceEntryType(parsed, warnings);
@@ -2909,7 +2964,7 @@ async function searchFilesTool(args) {
2909
2964
  const contextLines = readWorkspaceContextLines(parsed, warnings);
2910
2965
  const literal = parsed.literal === true;
2911
2966
  const caseSensitive = parsed.caseSensitive === false ? false : true;
2912
- const requestedPath = readWorkspacePathAlias(parsed) ?? ".";
2967
+ const requestedPath = pickFirstAlias(parsed, PATH_FIELD_ALIASES) ?? ".";
2913
2968
  const includeIgnored = parsed.includeIgnored === true;
2914
2969
  const searchPath = await resolveLocalWorkspaceToolPath({
2915
2970
  workspaceRoot: args.workspaceRoot,
@@ -3185,7 +3240,7 @@ async function globFilesTool(args) {
3185
3240
  const pattern = requireWorkspaceGlobPattern(parsed);
3186
3241
  const exclude = readWorkspaceExcludeGlobs(parsed);
3187
3242
  const maxResults = readWorkspaceMaxResults(parsed, warnings);
3188
- const requestedPath = readWorkspacePathAlias(parsed) ?? ".";
3243
+ const requestedPath = pickFirstAlias(parsed, PATH_FIELD_ALIASES) ?? ".";
3189
3244
  const includeIgnored = parsed.includeIgnored === true;
3190
3245
  const searchPath = await resolveLocalWorkspaceToolPath({
3191
3246
  workspaceRoot: args.workspaceRoot,
@@ -3384,7 +3439,11 @@ async function execShellTool(args) {
3384
3439
  outputLimit: args.commandOutputLimit,
3385
3440
  commandPrefix: args.commandPrefix,
3386
3441
  abortSignal: args.abortSignal,
3387
- detachMs: args.detachMs
3442
+ // Commands that clearly never exit (long sleeps, tail -f, watch, dev
3443
+ // servers, infinite loops) are promoted to background immediately so the
3444
+ // turn — and the user's conversation — keeps going. Everything else keeps
3445
+ // the caller/env detach grace window.
3446
+ detachMs: isImmediateDetachShellCommand({ command }) ? 0 : args.detachMs
3388
3447
  });
3389
3448
  const activity = extractActivity(parsed);
3390
3449
  return {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  ANTIGRAVITY_CLOUD_CODE_BASE_URL,
3
3
  isAntigravityOAuthAgent
4
- } from "./chunk-QLO2G5HP.js";
4
+ } from "./chunk-ISYE6GZB.js";
5
5
  import {
6
6
  clipMultilineText,
7
7
  fetchAndSerializeTable,
8
8
  waitForAbortableDelay
9
- } from "./chunk-KUDUXBNE.js";
9
+ } from "./chunk-VE6XMVKG.js";
10
10
  import {
11
11
  createDrainExhaustedResponse,
12
12
  isCoreDrainingBody,
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-RQSOAMPJ.js";
17
17
  import {
18
18
  slateToSimplifiedMarkdown
19
- } from "./chunk-BOJVWKNA.js";
19
+ } from "./chunk-U7LEGLEB.js";
20
20
  import {
21
21
  extractCategorizedMentions
22
22
  } from "./chunk-VP4WJWKW.js";
@@ -26,17 +26,17 @@ import {
26
26
  import {
27
27
  fetchAndCacheMessages,
28
28
  shouldUseServerProxy
29
- } from "./chunk-SW3Q2OV5.js";
29
+ } from "./chunk-YNHQIXX5.js";
30
30
  import {
31
31
  fetchServerSyncedCredential
32
- } from "./chunk-NFHGY5T5.js";
32
+ } from "./chunk-OQMPU2ML.js";
33
33
  import {
34
34
  buildCurrentTimeBlock,
35
35
  buildIdentityBlock,
36
36
  buildRuntimeGuidanceBlocks,
37
37
  requiresBareImageUrl,
38
38
  toBareImageUrlMessages
39
- } from "./chunk-JHFMRUGX.js";
39
+ } from "./chunk-RKM3K52F.js";
40
40
  import {
41
41
  buildProviderAuthHeaders,
42
42
  convertMessagesToResponsesInput,
@@ -44,13 +44,13 @@ import {
44
44
  preserveAgentStateFields,
45
45
  resolvePlatformChatCompletionsEndpoint,
46
46
  resolvePlatformResponsesEndpoint
47
- } from "./chunk-SRKNB2WB.js";
47
+ } from "./chunk-HRQCKQA5.js";
48
48
  import {
49
49
  canonicalizeToolNames
50
50
  } from "./chunk-B4KT7RN2.js";
51
51
  import {
52
52
  estimateTokenCount
53
- } from "./chunk-3B2LFO6R.js";
53
+ } from "./chunk-4QQFLN5C.js";
54
54
  import {
55
55
  clampReasoningEffort,
56
56
  getModelConfig,
@@ -76,10 +76,10 @@ import {
76
76
  } from "./chunk-524BDL33.js";
77
77
  import {
78
78
  createSpaceKey
79
- } from "./chunk-3FCSMQAC.js";
79
+ } from "./chunk-XVP3C2KY.js";
80
80
  import {
81
81
  read
82
- } from "./chunk-A5V7UEZJ.js";
82
+ } from "./chunk-SFXYKGK2.js";
83
83
  import {
84
84
  asNonEmptyStringArray
85
85
  } from "./chunk-I42VC5KR.js";
@@ -760,20 +760,22 @@ var CONTEXT_USAGE_INSTRUCTIONS = `\u53C2\u8003\u8D44\u6599\u4F7F\u7528\u8BF4\u66
760
760
  var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\u540E\u53F0 Run\uFF09 ---
761
761
  \u4F60\u53EF\u7528 startAgentRun \u540E\u53F0\u542F\u52A8\u5B50 Agent\uFF08fork+exec\uFF0C\u8FD4\u56DE runId\uFF09\uFF0C\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF08wait+signal+proc\uFF09\u3002\u6838\u5FC3\u7EAA\u5F8B\uFF08\u53CD\u9762\u6559\u6750\uFF1A\u5B50\u4EE3\u7406\u5D29\u6E83/\u6302\u8D77\u800C\u7F16\u6392\u5668\u6BEB\u65E0\u5BDF\u89C9\uFF09\uFF1A
762
762
  1. \u5148\u53D1\u73B0\u518D\u6D3E\u53D1\u3002\u8C03\u7528 listAgents \u8BFB\u53D6\u5B89\u5168\u6458\u8981\u3002\u9009\u4EBA\u6309\u4F18\u5148\u7EA7\uFF1A\u7279\u5B9A\u5DE5\u5177\u9700\u6C42 \u2192 \u4EFB\u52A1\u6863\u4E0E\u6210\u672C/\u80FD\u529B\u5339\u914D \u2192 \u80DC\u4EFB\u8005\u4E2D\u7684 isFavorite \u2192 modelAbility / inputPrice/outputPrice\u3002
763
+ - \u6D3E\u53D1\u524D\u5148\u5224\u65AD"\u8BE5\u4E0D\u8BE5\u6D3E\u53D1"\uFF1A\u7236 agent \u8F6E\u8BE2 + \u4E0A\u4E0B\u6587\u4F20\u9012\u672C\u8EAB\u6709\u6210\u672C\uFF0C\u5B50\u4EE3\u7406\u5355\u4EF7\u4F4E\u4E0D\u7B49\u4E8E\u603B\u6210\u672C\u66F4\u4F4E\u3002\u5C0F\u4EFB\u52A1\u76F4\u63A5\u505A\uFF1B\u53EA\u6709\u4EFB\u52A1\u5927\u5230\u5355 agent \u88C5\u4E0D\u4E0B\u3001\u6216\u53EF\u5E76\u884C\u7701\u65F6\u95F4\uFF0C\u7F16\u6392\u624D\u5212\u7B97\u3002
763
764
  - \u5148\u4F30\u4EFB\u52A1\u6863\uFF1A\u5FAE/\u7B80\u5355\uFF08\u22642 \u6B65\u3001\u6587\u6848\u3001\u5355\u70B9 polish\uFF09\uFF5C\u4E2D\uFF08\u591A\u6587\u4EF6\u8BFB\u6539\u9A8C\uFF09\uFF5C\u9AD8\uFF08\u67B6\u6784\u3001\u6DF1 review\u3001\u9AD8\u98CE\u9669\u63A8\u7406\uFF09\u3002
764
765
  - \u9AD8\u4EF7/\u9876\u6863\u6A21\u578B\uFF08Opus\u3001GPT-5.6 Sol\u3001\u540C\u7EA7 Pro/K \u9876\u6863\u7B49\uFF09\u9ED8\u8BA4\u4E0D\u63A5\u7B80\u5355\u6D3B\uFF1B\u7B80\u5355\u6D3B\u4F18\u5148 Flash/Luna/\u4F4E\u4EF7\u6216\u6536\u85CF\u91CC\u7684\u8F7B\u91CF\u5019\u9009\u3002
765
766
  - \u7981\u6B62\u51ED\u540D\u5B57\u7F16\u9020\u7EC6\u80FD\u529B\uFF0C\u4F46\u5141\u8BB8\u7528\u4EF7\u683C\u3001modelAbility \u53CA\u660E\u663E\u9876\u6863\u65CF\u7CFB\u505A\u7C97\u6863\u4F4D\u5339\u914D\uFF0C\u907F\u514D\u5927\u6A21\u578B\u5E72\u6742\u6D3B\u3002\u4E0D\u8981\u67E5\u6307\u6D3E\u8868\uFF0C\u4E0D\u8981\u6C42 recommendedFor\u3002
766
767
  2. coding \u662F\u9ED8\u8BA4\u80FD\u529B\u3002tools \u53EA\u7528\u4E8E\u6D4F\u89C8\u5668\u3001\u56FE\u7247\u3001\u8868\u683C\u3001\u90AE\u4EF6\u3001\u6570\u636E\u5E93\u7B49\u7279\u5B9A\u5DE5\u5177\u4EFB\u52A1\uFF1B\u4E0D\u8981\u56E0\u4E3A coding agent \u7684 tools \u6458\u8981\u4E3A\u7A7A\u5C31\u6DD8\u6C70\u5B83\u3002
767
768
  3. listAgents \u8FD4\u56DE\u7684 id\u3001publicKey\u3001handle \u53EA\u662F\u5019\u9009\u6807\u8BC6\u3002\u9009\u4E2D\u540E\u4F18\u5148\u8C03\u7528 readAgent \u89E3\u6790\u53EF\u8FD0\u884C\u7684 agentKey\uFF0C\u518D\u628A\u8BE5 agentKey \u4F20\u7ED9 startAgentRun\uFF1B\u4E0D\u8981\u51ED\u5C55\u793A\u540D\u79F0\u6216 id \u731C key\uFF0C\u4E5F\u4E0D\u8981\u7D22\u53D6 prompt\u3001\u5BC6\u94A5\u6216\u6570\u636E\u5E93 key \u6765\u9009\u4EBA\u3002\u6CA1\u6709 readAgent \u65F6\u53EA\u80FD\u4F7F\u7528\u5DF2\u6709\u4E0A\u4E0B\u6587\u4E2D\u660E\u786E\u7684 agentKey\u3002
768
- 4. \u6D3E\u53D1\u540E\u5FC5\u987B\u8F6E\u8BE2\u3002startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528 controlAgentRun(action:"status", runId, tailLines:30) \u8F6E\u8BE2\uFF08\u5EFA\u8BAE 5\u201310s \u4E00\u6B21\uFF09\uFF0C\u4E0D\u8981\u53EA\u9760\u804A\u5929\u590D\u8FF0\u7ED3\u679C\u3002\u4E0D\u8F6E\u8BE2 = \u6CA1\u7F16\u6392\u3002
769
- 5. \u8BFB\u65E5\u5FD7\u786E\u8BA4\u8FDB\u5C55\u3002tailLines>0 \u8BFB\u5B9E\u9645\u8F93\u51FA/\u5DE5\u5177\u8C03\u7528\uFF0C\u4E0D\u53EA\u770B status=running\u2014\u2014\u540E\u53F0\u76D1\u89C6\u5668\u53EF\u80FD\u7A7A\u8F6C\u3002
770
- 6. stop \u524D\u5148\u770B\u65E5\u5FD7\u3002\u7528 status \u5224\u65AD\u662F\u771F\u5361\u6B7B\u8FD8\u662F\u6B63\u5E38\u8DD1\uFF0C\u786E\u8BA4\u9700\u8981\u53EB\u505C\u518D controlAgentRun(action:"stop", runId)\uFF1B\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\uFF0C\u522B\u5047\u8BBE"\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1"\u3002
769
+ 4. \u6D3E\u53D1\u540E\u8F7B\u8F6E\u8BE2\u3002startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528 controlAgentRun(action:"status", runId, tailLines:0) \u8F6E\u8BE2\u2014\u2014tailLines:0 \u53EA\u8FD4\u56DE\u72B6\u6001\u6458\u8981\uFF08\u4E0D\u62C9\u65E5\u5FD7\uFF09\uFF0C\u7701 token\u3002\u6BCF\u6B21\u8F6E\u8BE2 = \u7236 agent \u591A\u4E00\u4E2A turn = \u5168\u524D\u7F00\u91CD\u65B0\u8BA1\u4EF7\uFF0C\u6240\u4EE5\u95F4\u9694\u4E0D\u8981\u592A\u5BC6\uFF08\u5EFA\u8BAE 10\u201315s\uFF09\uFF0C\u4E0D\u8981 5s \u4E00\u6B21\u3002\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4F18\u5148\u5E76\u884C\u6D3E\u53D1\uFF08\u4E00\u6B21 startAgentRun \u591A\u4E2A\uFF09\uFF0C\u7236 agent 1 \u4E2A turn \u6D3E\u53D1 + 1 \u4E2A turn \u6536\u96C6\u7ED3\u679C\uFF0C\u800C\u975E\u4E32\u884C\u7B49\u5F85 N \u4E2A turn\u3002
770
+ 5. \u5F02\u5E38\u624D\u62C9\u65E5\u5FD7\u3002tailLines:0 \u663E\u793A running \u4E14\u8FDB\u5EA6\u6B63\u5E38 \u2192 \u7EE7\u7EED\u8F7B\u8F6E\u8BE2\uFF1B\u53EA\u6709 status=failed/\u8D85\u65F6/\u7591\u4F3C\u5361\u6B7B\u624D controlAgentRun(action:"status", runId, tailLines:30) \u62C9\u65E5\u5FD7\u8BCA\u65AD\u3002\u6B63\u5E38\u5B8C\u6210\u7684\u5B50 agent \u770B\u72B6\u6001\u6458\u8981\u5373\u53EF\uFF0C\u4E0D\u5FC5\u62C9\u5B8C\u6574\u65E5\u5FD7\u3002
771
+ 6. stop \u524D\u5148\u770B\u65E5\u5FD7\u3002\u7528 status(tailLines:30) \u5224\u65AD\u662F\u771F\u5361\u6B7B\u8FD8\u662F\u6B63\u5E38\u8DD1\uFF0C\u786E\u8BA4\u9700\u8981\u53EB\u505C\u518D controlAgentRun(action:"stop", runId)\uFF1B\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\uFF0C\u522B\u5047\u8BBE"\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1"\u3002
771
772
  \u5DE5\u5177\u9009\u62E9\uFF1A\u5B50\u4EFB\u52A1 <100s \u4E14\u8981\u7ACB\u5373\u62FF\u7ED3\u679C \u2192 callAgent\uFF08\u540C\u6B65\uFF09\uFF1B\u957F\u4EFB\u52A1 / \u5E76\u884C / \u9700\u8981\u89C2\u5BDF\u6216\u53EB\u505C \u2192 startAgentRun\uFF08\u672C\u6BB5\uFF09\u3002`;
772
773
  var AGENT_COLLABORATION_INSTRUCTIONS = `--- \u591A Agent \u534F\u4F5C\uFF08\u8BA1\u5212 \u2192 \u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
773
774
  \u7528\u5B50\u4EE3\u7406\u5B8C\u6210\u4E2D\u5927\u578B\u4EFB\u52A1\u65F6\uFF0C\u6309\u4E09\u6BB5\u7EAA\u5F8B\u6267\u884C\uFF1A
774
775
  1. \u8BA1\u5212\u5148\u884C\uFF1A\u52A8\u624B\u524D\u5148\u60F3\u6E05\u695A\u76EE\u6807\u3001\u8FB9\u754C\u3001\u9A8C\u8BC1\u65B9\u5F0F\u548C\u505C\u6B62\u6761\u4EF6\uFF1B\u9884\u8BA1 3 \u6B65\u4EE5\u4E0A\uFF08\u8BFB\u6539\u9A8C\u3001\u591A\u6587\u4EF6\u3001\u4EFB\u4F55\u6D3E\u53D1\uFF09\u5148\u5B9A\u8BA1\u5212\uFF0C\u518D\u51B3\u5B9A\u81EA\u5DF1\u505A\u5B8C\u8FD8\u662F\u6D3E\u53D1\u3002
776
+ - \u6D3E\u53D1\u524D\u505A\u6210\u672C\u6743\u8861\uFF1A\u7236 agent \u8F6E\u8BE2\u3001\u4E0A\u4E0B\u6587\u4F20\u9012\u3001\u534F\u8C03\u5F00\u9500\u672C\u8EAB\u8981\u6D88\u8017 token\uFF1B\u5B50\u4EE3\u7406\u66F4\u4FBF\u5B9C\u4E0D\u7B49\u4E8E\u7F16\u6392\u4E00\u5B9A\u66F4\u7701\u3002\u7B80\u5355/\u4E2D\u7B49\u4EFB\u52A1\u7528\u5F3A\u6A21\u578B\u76F4\u63A5\u505A\uFF0C\u5F80\u5F80\u6BD4"\u5F3A\u6A21\u578B\u6307\u6325 + \u5F31\u6A21\u578B\u5B9E\u73B0"\u66F4\u7701\uFF08\u5B9E\u6D4B\uFF1A\u6307\u6325+\u5B9E\u73B0\u7684\u53CC\u5C42 credits \u5E38\u8D85\u8FC7\u5355\u5C42\u5F3A\u6A21\u578B\u76F4\u505A\uFF09\u3002\u53EA\u6709\u4EFB\u52A1\u8DB3\u591F\u5927\uFF08\u591A\u6587\u4EF6\u6DF1\u6539\u3001\u53EF\u5E76\u884C\u3001\u5355 agent \u4E0A\u4E0B\u6587\u88C5\u4E0D\u4E0B\uFF09\u65F6\uFF0C\u7F16\u6392\u7684\u62C6\u5206\u6536\u76CA\u624D\u660E\u663E\u8D85\u8FC7\u534F\u8C03\u6210\u672C\u3002
775
777
  2. \u6D3E\u53D1\u539F\u5219\uFF1A\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\u3001\u80FD\u5E76\u884C\u5219\u5E76\u884C\uFF1B\u7ED9\u6267\u884C\u8005\u5199\u6E05\u4EFB\u52A1\u3001\u9A8C\u6536\u548C\u7981\u533A\uFF0C\u4E0D\u4F20\u65E0\u5173\u5386\u53F2\u3002\u6D3E\u53D1\u540E\u8F6E\u8BE2\u7ED3\u679C\uFF0C\u4E0D\u5047\u8BBE\u6210\u529F\u3002
776
- 3. \u72EC\u7ACB\u5BA1\u67E5\uFF1A\u91CD\u8981\u4EA7\u51FA\uFF08\u4EE3\u7801\u3001\u8FC1\u79FB\u3001\u6570\u636E\u53D8\u66F4\uFF09\u4EA4\u7ED9\u975E\u4F5C\u8005\uFF08\u6700\u597D\u662F\u4E0D\u540C\u6A21\u578B\u7684\uFF09\u72EC\u7ACB review\uFF1Breview \u53EA\u770B diff/\u8BC1\u636E\uFF0C\u4EA7\u51FA finding \u6216 Clean review\uFF0C\u518D\u51B3\u5B9A\u8FD4\u5DE5\u6216\u6536\u5C3E\u3002
778
+ 3. \u72EC\u7ACB\u5BA1\u67E5\uFF08commit \u524D\u786C\u95E8\uFF09\uFF1A\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review\u3002reviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002\u8BE6\u7EC6\u6D41\u7A0B\uFF08\u591A\u8F6E\u65E0\u4E0A\u4E0B\u6587 review\u3001\u901A\u8FC7\u6761\u4EF6\u3001ephemeral \u6D3E\u53D1\u3001\u9003\u9038\u673A\u5236\uFF09\u89C1 nolo-commit skill \u7684\u63D0\u4EA4\u524D\u81EA\u68C0\u7B2C 0 \u9879\u3002
777
779
  \u6700\u5C0F\u5B9E\u73B0\uFF1A\u80FD\u5220\u89E3\u51B3\u5C31\u4E0D\u52A0\uFF0C\u80FD\u590D\u7528\u5C31\u4E0D\u65B0\u5EFA\uFF1B\u65B0\u62BD\u8C61\u524D\u5148\u641C\u5DF2\u6709\u5B9E\u73B0\u3002\u4E0D\u8981\u4E3A\u4E86\u663E\u5F97\u5FD9\u788C\u800C\u6D3E\u53D1\u6216\u8FC7\u5EA6\u8BBE\u8BA1\u3002`;
778
780
  var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
779
781
  \u6240\u6709\u7528\u6237\u8F93\u5165\u5747\u4E3A\u7EAF\u6587\u672C\u6D88\u606F\uFF0C\u76F4\u63A5\u7406\u89E3\u5373\u53EF\uFF0C\u4E0D\u8981\u5728\u56DE\u590D\u4E2D\u63D0\u53CA\u6309\u94AE\u3001\u83DC\u5355\u3001\u754C\u9762\u7B49 UI \u5143\u7D20\u3002
@@ -2,7 +2,7 @@ import {
2
2
  buildCurrentTimeBlock,
3
3
  buildIdentityBlock,
4
4
  buildRuntimeGuidanceBlocks
5
- } from "./chunk-JHFMRUGX.js";
5
+ } from "./chunk-RKM3K52F.js";
6
6
  import {
7
7
  canonicalizeToolNames
8
8
  } from "./chunk-B4KT7RN2.js";
@@ -12,7 +12,7 @@ import {
12
12
  planCompression,
13
13
  planContextUsage,
14
14
  serializeMessageContent
15
- } from "./chunk-3B2LFO6R.js";
15
+ } from "./chunk-4QQFLN5C.js";
16
16
  import {
17
17
  clipCompactText
18
18
  } from "./chunk-5MMAK75Q.js";