nolo-cli 0.16.0 → 0.18.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 (134) hide show
  1. package/{_executeModel-AVCA2NAV.js → _executeModel-X5PCIZN6.js} +50 -44
  2. package/{action-F5JACQBG.js → action-LT7BRFLK.js} +10 -9
  3. package/{addContentAction-AQXEYRBE.js → addContentAction-PL3KKBDH.js} +9 -8
  4. package/{addDialogAgentAction-EJHHJZWW.js → addDialogAgentAction-FCMSKYAF.js} +8 -7
  5. package/{agentDeleteCommand-QW5PUMDQ.js → agentDeleteCommand-2BZDQV36.js} +32 -29
  6. package/{agentEmailCommands-4ORVLGVQ.js → agentEmailCommands-2QJDGRMB.js} +62 -56
  7. package/{agentListCommands-YWBYRTYC.js → agentListCommands-6VEPTKBI.js} +31 -28
  8. package/{agentMachineCommands-JSQW4FOA.js → agentMachineCommands-NVVHNWYI.js} +30 -27
  9. package/{agentPullCommand-6HWUT3SW.js → agentPullCommand-ZZGU5KOY.js} +4 -4
  10. package/{agentRecordCommands-AASIWOBT.js → agentRecordCommands-4GGRDMD4.js} +57 -51
  11. package/{agentRunCommand-TB5BHXUH.js → agentRunCommand-XOLQNKBZ.js} +63 -54
  12. package/{agentRunControl-6ADXVYMR.js → agentRunControl-Y5AFH5PQ.js} +24 -1
  13. package/{agentRuntimeLocal-QNPNJRVH.js → agentRuntimeLocal-7WYWCGL4.js} +25 -22
  14. package/{agentSlice-RUNXC62Y.js → agentSlice-EAXPGEYV.js} +9 -8
  15. package/appDeleteCommands-77KR2RJ4.js +127 -0
  16. package/appDeployCommands-K7CAHGBI.js +166 -0
  17. package/appDeployStatusCommands-4OEKLTBT.js +147 -0
  18. package/appGetCommands-VM2WDLAZ.js +122 -0
  19. package/appListCommands-GX6BBA6U.js +125 -0
  20. package/{authCommand-YFTR3347.js → authCommand-DY6UUL6O.js} +16 -9
  21. package/{authCommands-YXGOXNBZ.js → authCommands-XTBV7OFZ.js} +6 -5
  22. package/{chunk-DPAB4FQ7.js → chunk-23FZYPLC.js} +1608 -212
  23. package/{chunk-LPEUV5RE.js → chunk-34WPV75U.js} +23 -2
  24. package/{chunk-XPC5C7BK.js → chunk-3ND52WIL.js} +2 -2
  25. package/{chunk-SOTZ6RDN.js → chunk-3Q7WHGCB.js} +1 -1
  26. package/{chunk-3OIRVWXA.js → chunk-3ZX7PERL.js} +10 -1
  27. package/{chunk-KKY4B2Q2.js → chunk-4PWB7JRR.js} +4 -1
  28. package/{chunk-6N4KODMN.js → chunk-4T5F7YZQ.js} +1 -1
  29. package/chunk-7BUYEZ6U.js +671 -0
  30. package/{chunk-AS3ZQ3O2.js → chunk-7OBMZCRD.js} +1 -1
  31. package/{chunk-IGXREZW2.js → chunk-AHCY2S2I.js} +1 -1
  32. package/{chunk-QLUFR47U.js → chunk-AL2V7U3E.js} +1 -1
  33. package/{chunk-MTU75CZ2.js → chunk-B5TOXZAK.js} +1 -1
  34. package/{chunk-AUURUT6L.js → chunk-BV4VEE3W.js} +264 -424
  35. package/{chunk-FRV6A633.js → chunk-CZ6NYQTV.js} +13 -4
  36. package/{chunk-PCTUYVUM.js → chunk-DFCFMCY6.js} +10 -3
  37. package/{chunk-JTMNCCWF.js → chunk-DKZFOK24.js} +16 -87
  38. package/chunk-DL6EPNIK.js +50 -0
  39. package/{chunk-ZQBL7LIC.js → chunk-EDV7EBOI.js} +317 -216
  40. package/{chunk-IWLUTMYX.js → chunk-ELT65PZW.js} +2 -2
  41. package/chunk-FQZZLA3C.js +223 -0
  42. package/{chunk-55NSNCFM.js → chunk-FXUSIQC2.js} +1 -1
  43. package/{chunk-MR6ISAGB.js → chunk-G5U6LDLG.js} +6 -6
  44. package/chunk-GFUIQ4RY.js +136 -0
  45. package/{chunk-NVEWUJVX.js → chunk-HEGV7BH3.js} +1 -1
  46. package/{chunk-BEBNFWDU.js → chunk-HWW2M4SN.js} +3 -3
  47. package/{chunk-4L2OJPCU.js → chunk-I2ZJKTG5.js} +58 -8
  48. package/{chunk-Z5JQNBNY.js → chunk-IYEXFJPC.js} +34 -15
  49. package/{setDialogExtraReferencesAction-LR6MSIXO.js → chunk-JLA4FXYC.js} +2 -17
  50. package/chunk-KFEVY3ST.js +255 -0
  51. package/{chunk-4FX6NVDW.js → chunk-L4F3I4SR.js} +3 -136
  52. package/{chunk-XBS2WYJ2.js → chunk-LLWKHDG4.js} +1 -1
  53. package/{chunk-3WGLLTK4.js → chunk-LSFAWXKC.js} +100 -3
  54. package/{chunk-6EVITP2G.js → chunk-MHSGJW4Z.js} +2 -251
  55. package/{chunk-O6W2O2DA.js → chunk-MKA6QE5E.js} +6 -2
  56. package/{chunk-DGEYDWEZ.js → chunk-MPVYDS7I.js} +3 -3
  57. package/{chunk-KFHN5NGJ.js → chunk-MVQ4TBSD.js} +1 -1
  58. package/{chunk-AVVZUXXC.js → chunk-N54HIJVJ.js} +34 -13
  59. package/{chunk-EHLHSX7R.js → chunk-OK6YSWLH.js} +9 -2
  60. package/{chunk-33BJUVK4.js → chunk-PIZYJVHQ.js} +5 -5
  61. package/{chunk-RLCXU7A5.js → chunk-PJSV3IZ5.js} +1 -1
  62. package/{chunk-7UKFVQ5W.js → chunk-R35XMF6F.js} +126 -41
  63. package/{chunk-OOSFSFMA.js → chunk-R5V5G73M.js} +2 -0
  64. package/{chunk-S2LXHNHG.js → chunk-REA4JLBH.js} +6 -6
  65. package/chunk-RQN4SEKL.js +107 -0
  66. package/{chunk-EABWT43X.js → chunk-RVOUXDFU.js} +5 -5
  67. package/{chunk-NSCHQQPU.js → chunk-SCTYAHYK.js} +470 -325
  68. package/{chunk-JTINRTBT.js → chunk-SKDNBYZK.js} +2 -2
  69. package/{chunk-M43KDE25.js → chunk-SWDPIPOY.js} +2 -8
  70. package/{chunk-KMQPSTMJ.js → chunk-TRT4I4UD.js} +2 -2
  71. package/{chunk-66X4VSRC.js → chunk-UAIVG4J6.js} +42 -2
  72. package/{chunk-3663CXZN.js → chunk-UBHAWFQ6.js} +143 -31
  73. package/{chunk-YJKXGHJ6.js → chunk-UGUW3FHG.js} +4 -4
  74. package/{chunk-P3RIAYGG.js → chunk-V3ED5AWK.js} +3 -3
  75. package/chunk-V5R4NZP2.js +78 -0
  76. package/{chunk-4IJYA27C.js → chunk-VDXCXCXH.js} +1 -1
  77. package/{chunk-MYMMNKYL.js → chunk-VNAEBGDK.js} +156 -6
  78. package/{chunk-FY233ZFU.js → chunk-VYHDJEQD.js} +110 -192
  79. package/{chunk-W4NVOSFF.js → chunk-WFHXMLHZ.js} +1 -1
  80. package/{chunk-H33743XH.js → chunk-WJRJDX2W.js} +1 -1
  81. package/chunk-X4Q4UZEY.js +26 -0
  82. package/{chunk-RPDGJO4D.js → chunk-XHG22OEX.js} +4 -4
  83. package/{chunk-DVRHHFEA.js → chunk-XMLRJUU5.js} +1 -1
  84. package/{chunk-3S2VOMIF.js → chunk-XRZJGPFI.js} +7 -7
  85. package/{chunk-GSINCD4P.js → chunk-YGW4G5W5.js} +25 -12
  86. package/chunk-ZZ2MH7LE.js +84 -0
  87. package/{cliExecutor-K3F7DMRO.js → cliExecutor-DNE7TCC4.js} +2 -2
  88. package/codingSkills-36KN5NQT.js +48 -0
  89. package/{createAgentAutomationAction-FNHPSKKO.js → createAgentAutomationAction-GNFF524X.js} +20 -19
  90. package/{createDialogAction-TZCVQ3NU.js → createDialogAction-RB55KCLO.js} +22 -21
  91. package/{createPageAction-EIGZ3BKT.js → createPageAction-Y7343GLU.js} +26 -25
  92. package/{db-HCJ5PRB5.js → db-W3O47YGF.js} +38 -12
  93. package/{dbSlice-7KQH6GOU.js → dbSlice-CGSRFJN3.js} +8 -7
  94. package/{deleteFile-WPWVZE4B.js → deleteFile-WDZ3VM7B.js} +3 -3
  95. package/{dialogCommands-FO77J5DQ.js → dialogCommands-IAZK6YHQ.js} +30 -27
  96. package/{dialogSlice-MM5U4KE2.js → dialogSlice-UQAXF23P.js} +20 -19
  97. package/{docCreateCommands-I3BS3AZI.js → docCreateCommands-I2EWZGCI.js} +33 -28
  98. package/{docDeleteCommands-Q2OPV52P.js → docDeleteCommands-IZ45UZKG.js} +32 -27
  99. package/{docReadCommands-YOOFACYZ.js → docReadCommands-R6Z4QJYU.js} +31 -26
  100. package/{docStore-NGYQ2JTR.js → docStore-5HOJ4D7D.js} +21 -20
  101. package/{docUpdateCommands-2B32ITHN.js → docUpdateCommands-2LRBKQPY.js} +32 -27
  102. package/{fetchMessages-KTNM7QAR.js → fetchMessages-BMGVZVSE.js} +4 -3
  103. package/{getPricing-P4XRJRZB.js → getPricing-G7DLAST6.js} +3 -3
  104. package/{handleSendMessageAction-JRZWWBKP.js → handleSendMessageAction-Q4HY35WX.js} +21 -20
  105. package/index.js +95 -64
  106. package/{localDialogRead-2VRI24F4.js → localDialogRead-4H3QJFLW.js} +2 -2
  107. package/{localRuntimeDb-LGDF6FQP.js → localRuntimeDb-THJZGAOJ.js} +1 -1
  108. package/{machineCommands-WRWF2ICZ.js → machineCommands-PKBPQKTY.js} +63 -57
  109. package/{machineWsRunDispatch-ZX7Q3TWZ.js → machineWsRunDispatch-UZAW4OXJ.js} +55 -49
  110. package/{models-WQ5N4OJM.js → models-DJFSJ7SW.js} +2 -2
  111. package/package.json +1 -1
  112. package/queryRunOverlay-O4LOMMPO.js +161 -0
  113. package/{read-CN3TNXIP.js → read-3FMPZPER.js} +3 -3
  114. package/{readDocTool-WF3675ED.js → readDocTool-VSYHKK3V.js} +1 -1
  115. package/{readlineWorkspace-ZTGRGW46.js → readlineWorkspace-Y2RDOFZG.js} +762 -218
  116. package/{removeDialogAgentAction-YDHBFEGI.js → removeDialogAgentAction-OAGA2G3U.js} +10 -9
  117. package/{runAgentClientLoop-JZCOP7LG.js → runAgentClientLoop-NBPIKJ6J.js} +44 -38
  118. package/runOverlayPresentation-ZO4VCWEU.js +11 -0
  119. package/{runtimeDoctorCommands-THIHX2SY.js → runtimeDoctorCommands-E2OUORHK.js} +6 -6
  120. package/setDialogExtraReferencesAction-JZEXA5SL.js +27 -0
  121. package/{setPrimaryDialogAgentAction-IIVDCY5C.js → setPrimaryDialogAgentAction-4ZUQQKDG.js} +26 -17
  122. package/{settingSlice-O23YDK2O.js → settingSlice-7MNKHZ6R.js} +9 -8
  123. package/{skillDiscovery-6M2BZUFN.js → skillDiscovery-KJWT7JBU.js} +3 -3
  124. package/{spaceCommands-VV4GTPQK.js → spaceCommands-DHCZ7J5I.js} +31 -28
  125. package/{spaceSlice-DRWWZJP7.js → spaceSlice-ZXLLG3CR.js} +20 -19
  126. package/{streamAgentChatTurn-Y6WGATQR.js → streamAgentChatTurn-L3YW6LSB.js} +98 -57
  127. package/{tableCommands-3P7MJ3PF.js → tableCommands-BEQAGE4I.js} +1 -1
  128. package/{tools-PUNBY3AH.js → tools-ECGXR5QF.js} +33 -28
  129. package/{tuiSummaryLlmCaller-F64WLSAF.js → tuiSummaryLlmCaller-OMSCNHXA.js} +6 -5
  130. package/types-ZSTJ7MPR.js +7 -0
  131. package/{updateDialogTitleAction-YSR4TCMB.js → updateDialogTitleAction-HQ2EUDFT.js} +23 -22
  132. package/{chunk-O4BU24WZ.js → chunk-6Y7A3OQQ.js} +3 -3
  133. package/{chunk-CMKUBIGW.js → chunk-X7W4TNB4.js} +3 -3
  134. package/{localRuntimeAuthority-TEGCOWX4.js → localRuntimeAuthority-4IXJCHZ7.js} +3 -3
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getRuntimeServerContext,
3
3
  scheduleDeleteReplication
4
- } from "./chunk-DVRHHFEA.js";
4
+ } from "./chunk-XMLRJUU5.js";
5
5
  import {
6
6
  fetchFromClientDb
7
- } from "./chunk-OOSFSFMA.js";
7
+ } from "./chunk-R5V5G73M.js";
8
8
  import {
9
9
  buildTombstoneRecord
10
10
  } from "./chunk-GBRG75BQ.js";
@@ -1,19 +1,13 @@
1
1
  import {
2
2
  buildAgentRuntimeAgentLookupKeys,
3
3
  shouldFetchAgentRuntimeRecordRemotely
4
- } from "./chunk-7UKFVQ5W.js";
4
+ } from "./chunk-R35XMF6F.js";
5
5
 
6
6
  // packages/cli/client/localAgentRecords.ts
7
7
  var buildLocalAgentLookupKeys = buildAgentRuntimeAgentLookupKeys;
8
8
  var shouldReadAgentKeyRemotely = shouldFetchAgentRuntimeRecordRemotely;
9
9
 
10
- // packages/core/agentHandle.ts
11
- function normalizeAgentHandle(value) {
12
- return typeof value === "string" && value.trim() ? value.trim().toLowerCase().replace(/\s+/g, " ") : void 0;
13
- }
14
-
15
10
  export {
16
11
  buildLocalAgentLookupKeys,
17
- shouldReadAgentKeyRemotely,
18
- normalizeAgentHandle
12
+ shouldReadAgentKeyRemotely
19
13
  };
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-6HYVJV7B.js";
4
4
  import {
5
5
  getDefaultCliLocalRuntimeDb
6
- } from "./chunk-H33743XH.js";
6
+ } from "./chunk-WJRJDX2W.js";
7
7
  import {
8
8
  buildCliRuntimeEnv,
9
9
  clearProfileAuthToken,
@@ -23,7 +23,7 @@ import {
23
23
  createMemoryOwnerIndexKey,
24
24
  createMemorySubjectKindIndexKey,
25
25
  memoryOwnerRange
26
- } from "./chunk-O4BU24WZ.js";
26
+ } from "./chunk-6Y7A3OQQ.js";
27
27
  import {
28
28
  asTrimmedNonEmptyStringArray
29
29
  } from "./chunk-I42VC5KR.js";
@@ -15,7 +15,7 @@ import {
15
15
  platformHostedModels,
16
16
  xaiModels,
17
17
  zaiModels
18
- } from "./chunk-O6W2O2DA.js";
18
+ } from "./chunk-MKA6QE5E.js";
19
19
  import {
20
20
  __export
21
21
  } from "./chunk-4VNS5WPM.js";
@@ -78,6 +78,45 @@ var anthropicModels = [
78
78
  }
79
79
  ];
80
80
 
81
+ // packages/integrations/anthropic/anthropicOAuthModels.ts
82
+ var oauthModel = ({ name, displayName, contextWindow, thinkingMode, maxOutputTokens }) => ({
83
+ name,
84
+ displayName,
85
+ hasVision: true,
86
+ description: `OAuth \u8BA2\u9605\u6A21\u578B\uFF08${displayName}\uFF0C${thinkingMode === "adaptive" ? "Adaptive thinking" : "Extended thinking"}\uFF09`,
87
+ contextWindow,
88
+ ...maxOutputTokens ? { maxOutputTokens } : {},
89
+ supportsReasoningEffort: true,
90
+ price: { input: 0, output: 0 }
91
+ });
92
+ var anthropicOAuthModels = [
93
+ // 5 代(1M + Adaptive thinking always-on;官方 max output 128k)
94
+ oauthModel({ name: "claude-fable-5", displayName: "Claude Fable 5", contextWindow: 1e6, thinkingMode: "adaptive", maxOutputTokens: 128e3 }),
95
+ oauthModel({ name: "claude-opus-5", displayName: "Claude Opus 5", contextWindow: 1e6, thinkingMode: "adaptive", maxOutputTokens: 128e3 }),
96
+ oauthModel({ name: "claude-sonnet-5", displayName: "Claude Sonnet 5", contextWindow: 1e6, thinkingMode: "adaptive", maxOutputTokens: 128e3 }),
97
+ // 4.6/4.7/4.8 系(Adaptive thinking;context 官方未单列,参照 fuzzy claude-4.6→1M)
98
+ oauthModel({ name: "claude-opus-4-8", displayName: "Claude Opus 4.8", contextWindow: 1e6, thinkingMode: "adaptive" }),
99
+ oauthModel({ name: "claude-opus-4-7", displayName: "Claude Opus 4.7", contextWindow: 1e6, thinkingMode: "adaptive" }),
100
+ oauthModel({ name: "claude-sonnet-4-6", displayName: "Claude Sonnet 4.6", contextWindow: 1e6, thinkingMode: "adaptive" }),
101
+ oauthModel({ name: "claude-opus-4-6", displayName: "Claude Opus 4.6", contextWindow: 1e6, thinkingMode: "adaptive" }),
102
+ // 4.5 系(Extended thinking;官方发布规格 1M)
103
+ oauthModel({ name: "claude-opus-4-5-20251101", displayName: "Claude Opus 4.5", contextWindow: 1e6, thinkingMode: "extended" }),
104
+ oauthModel({ name: "claude-sonnet-4-5-20250929", displayName: "Claude Sonnet 4.5", contextWindow: 1e6, thinkingMode: "extended" }),
105
+ // haiku-4-5(官方明确 context=200k + Extended thinking)
106
+ oauthModel({ name: "claude-haiku-4-5-20251001", displayName: "Claude Haiku 4.5", contextWindow: 2e5, thinkingMode: "extended" })
107
+ ];
108
+ var OAUTH_MODEL_THINKING_MODE = new Map(
109
+ anthropicOAuthModels.map((m) => [m.name, m.thinkingMode])
110
+ );
111
+ function isAdaptiveThinkingModelId(model) {
112
+ if (!model) return false;
113
+ const tableMode = OAUTH_MODEL_THINKING_MODE.get(model);
114
+ if (tableMode === "adaptive") return true;
115
+ if (tableMode === "extended") return false;
116
+ const n = model.toLowerCase();
117
+ return n.includes("fable-5") || n.includes("opus-5") || n.includes("sonnet-5") || n.includes("opus-4-8") || n.includes("opus-4-7") || n.includes("sonnet-4-6") || n.includes("opus-4-6");
118
+ }
119
+
81
120
  // packages/integrations/qwen/models.ts
82
121
  var qwenModels = [
83
122
  // ── Qwen3 旗舰 ──
@@ -4683,7 +4722,7 @@ var MODEL_MAP = {
4683
4722
  moonshot: moonshotAllModels
4684
4723
  };
4685
4724
  var MODEL_LOOKUP_MAP = {
4686
- anthropic: anthropicModels,
4725
+ anthropic: [...anthropicModels, ...anthropicOAuthModels],
4687
4726
  xai: xaiModels,
4688
4727
  ...MODEL_MAP
4689
4728
  };
@@ -4892,6 +4931,7 @@ function getApiEndpoint(agent) {
4892
4931
  }
4893
4932
 
4894
4933
  export {
4934
+ isAdaptiveThinkingModelId,
4895
4935
  isModelSupportReasoningEffort,
4896
4936
  clampReasoningEffort,
4897
4937
  MODEL_LOOKUP_MAP,
@@ -5,10 +5,10 @@ import {
5
5
  inlineImageUrlsForCustomProvider,
6
6
  prepareTools,
7
7
  shouldInlineImageUrlsForAgent
8
- } from "./chunk-FRV6A633.js";
8
+ } from "./chunk-CZ6NYQTV.js";
9
9
  import {
10
10
  performFetchRequest
11
- } from "./chunk-FY233ZFU.js";
11
+ } from "./chunk-VYHDJEQD.js";
12
12
  import {
13
13
  createSSEParser,
14
14
  createToolRunId,
@@ -19,7 +19,7 @@ import {
19
19
  toolRunSetPending,
20
20
  toolRunStarted,
21
21
  toolRunSucceeded
22
- } from "./chunk-ZQBL7LIC.js";
22
+ } from "./chunk-EDV7EBOI.js";
23
23
  import {
24
24
  getPublicImageAgentMode
25
25
  } from "./chunk-VIDPVFP3.js";
@@ -29,25 +29,31 @@ import {
29
29
  messageStreaming,
30
30
  selectCurrentSpaceId,
31
31
  updateToolMessage
32
- } from "./chunk-NSCHQQPU.js";
32
+ } from "./chunk-SCTYAHYK.js";
33
33
  import {
34
34
  streamAgentChatTurn
35
- } from "./chunk-S2LXHNHG.js";
35
+ } from "./chunk-REA4JLBH.js";
36
36
  import {
37
37
  EMPTY_ASSISTANT_REPAIR_PROMPT
38
- } from "./chunk-GSINCD4P.js";
38
+ } from "./chunk-YGW4G5W5.js";
39
39
  import {
40
40
  accumulateToolCallDelta,
41
41
  createThinkParserState,
42
+ createToolCallTextParserState,
42
43
  flushThinkParser,
44
+ flushToolCallTextParserIntoCallback,
45
+ processContentChunkWithToolCallStripping,
43
46
  processThinkChunk
44
- } from "./chunk-3WGLLTK4.js";
47
+ } from "./chunk-LSFAWXKC.js";
45
48
  import {
46
49
  getModelInfo
47
- } from "./chunk-4L2OJPCU.js";
50
+ } from "./chunk-I2ZJKTG5.js";
48
51
  import {
49
52
  getApiEndpoint
50
- } from "./chunk-66X4VSRC.js";
53
+ } from "./chunk-UAIVG4J6.js";
54
+ import {
55
+ toErrorMessage
56
+ } from "./chunk-HNMXYYJR.js";
51
57
  import {
52
58
  extractCustomId
53
59
  } from "./chunk-DFFIZ25G.js";
@@ -56,27 +62,24 @@ import {
56
62
  removeActiveController,
57
63
  tokenUsageLiveUpdate
58
64
  } from "./chunk-3ASDTTEI.js";
59
- import {
60
- toErrorMessage
61
- } from "./chunk-HNMXYYJR.js";
62
65
  import {
63
66
  selectCurrentServer
64
- } from "./chunk-EABWT43X.js";
67
+ } from "./chunk-RVOUXDFU.js";
65
68
  import {
66
69
  write
67
- } from "./chunk-3S2VOMIF.js";
70
+ } from "./chunk-XRZJGPFI.js";
68
71
  import {
69
72
  createDialogMessageKeyAndId,
70
73
  dialogMessageKey,
71
74
  toTrimmedString
72
- } from "./chunk-O4BU24WZ.js";
75
+ } from "./chunk-6Y7A3OQQ.js";
73
76
  import {
74
77
  createAsyncThunk,
75
78
  selectIdentityToken
76
- } from "./chunk-DVRHHFEA.js";
79
+ } from "./chunk-XMLRJUU5.js";
77
80
  import {
78
81
  isAbortError
79
- } from "./chunk-OOSFSFMA.js";
82
+ } from "./chunk-R5V5G73M.js";
80
83
  import {
81
84
  asTrimmedString
82
85
  } from "./chunk-3EUW3WEO.js";
@@ -504,7 +507,7 @@ var processToolData = createAsyncThunk(
504
507
  ...llmContext ? { llmContext } : {},
505
508
  ...activity ? { activity } : {}
506
509
  };
507
- const isUiAskChoice = canonicalName === "ui_ask_choice";
510
+ const isUiAskChoice = canonicalName === "ask_user";
508
511
  const blocking = typeof executionToolArgs?.blocking === "boolean" ? executionToolArgs.blocking : true;
509
512
  const hasPendingInteraction = isUiAskChoice && blocking === true;
510
513
  return {
@@ -1105,6 +1108,7 @@ function createInitialStreamState() {
1105
1108
  accumulatedToolCalls: [],
1106
1109
  reasoningBuffer: "",
1107
1110
  thinkState: createThinkParserState(),
1111
+ toolCallTextState: createToolCallTextParserState(),
1108
1112
  assistantToolCalls: void 0,
1109
1113
  hasHandedOff: false,
1110
1114
  hasProcessedToolCalls: false,
@@ -1219,6 +1223,7 @@ function applyDelta(state, delta) {
1219
1223
  const reasoningChunk = delta.reasoning_content ?? delta.reasoning ?? "";
1220
1224
  if (reasoningChunk) {
1221
1225
  next.reasoningBuffer = (next.reasoningBuffer || "") + reasoningChunk;
1226
+ hasNewVisibleContent = true;
1222
1227
  }
1223
1228
  if (Array.isArray(delta.tool_calls) && delta.tool_calls.length > 0) {
1224
1229
  const accumulated = accumulateToolCallChunks(
@@ -1248,10 +1253,23 @@ function applyDelta(state, delta) {
1248
1253
  }
1249
1254
  const contentChunk = delta.content || "";
1250
1255
  if (contentChunk) {
1251
- const parsed = processThinkChunk(contentChunk, next.thinkState);
1256
+ const { cleanedContent, state: tcState } = processContentChunkWithToolCallStripping(
1257
+ contentChunk,
1258
+ next.toolCallTextState,
1259
+ (name, arguments_) => {
1260
+ next.accumulatedToolCalls = accumulateToolCallChunks(
1261
+ next.accumulatedToolCalls ?? [],
1262
+ [{ index: next.accumulatedToolCalls.length, type: "function", function: { name, arguments: arguments_ } }]
1263
+ );
1264
+ }
1265
+ );
1266
+ next.toolCallTextState = tcState;
1267
+ if (!cleanedContent) return { state: next, hasNewVisibleContent };
1268
+ const parsed = processThinkChunk(cleanedContent, next.thinkState);
1252
1269
  next.thinkState = parsed.state;
1253
1270
  if (parsed.reasoning) {
1254
1271
  next.reasoningBuffer = (next.reasoningBuffer || "") + parsed.reasoning;
1272
+ hasNewVisibleContent = true;
1255
1273
  }
1256
1274
  if (parsed.content) {
1257
1275
  next = {
@@ -1280,6 +1298,58 @@ function emitStreamingUpdate(hasNewVisibleContent, state, ctx) {
1280
1298
  })
1281
1299
  );
1282
1300
  }
1301
+ function createStreamThrottler(emitUpdate, options) {
1302
+ let pendingState = null;
1303
+ let timerId = null;
1304
+ const defaultSchedule = (cb) => {
1305
+ if (typeof window !== "undefined" && typeof window.requestAnimationFrame === "function") {
1306
+ return window.requestAnimationFrame(cb);
1307
+ }
1308
+ return setTimeout(cb, 16);
1309
+ };
1310
+ const defaultCancel = (id) => {
1311
+ if (typeof window !== "undefined" && typeof window.cancelAnimationFrame === "function") {
1312
+ window.cancelAnimationFrame(id);
1313
+ return;
1314
+ }
1315
+ clearTimeout(id);
1316
+ };
1317
+ const scheduleFn = options?.schedule ?? defaultSchedule;
1318
+ const cancelFn = options?.cancel ?? defaultCancel;
1319
+ return {
1320
+ push(state) {
1321
+ pendingState = state;
1322
+ if (timerId === null) {
1323
+ timerId = scheduleFn(() => {
1324
+ timerId = null;
1325
+ if (pendingState !== null) {
1326
+ const stateToEmit = pendingState;
1327
+ pendingState = null;
1328
+ emitUpdate(stateToEmit);
1329
+ }
1330
+ });
1331
+ }
1332
+ },
1333
+ flush() {
1334
+ if (timerId !== null) {
1335
+ cancelFn(timerId);
1336
+ timerId = null;
1337
+ }
1338
+ if (pendingState !== null) {
1339
+ const stateToEmit = pendingState;
1340
+ pendingState = null;
1341
+ emitUpdate(stateToEmit);
1342
+ }
1343
+ },
1344
+ cancel() {
1345
+ if (timerId !== null) {
1346
+ cancelFn(timerId);
1347
+ timerId = null;
1348
+ }
1349
+ pendingState = null;
1350
+ }
1351
+ };
1352
+ }
1283
1353
  function validateAndPartitionToolCalls(state) {
1284
1354
  const validCalls = [];
1285
1355
  const invalidCalls = [];
@@ -1438,15 +1508,26 @@ async function readStreamChunkWithTimeout(reader, signal) {
1438
1508
  async function handleStreamCompletion(state, ctx, finalizeCtx) {
1439
1509
  let hasHandedOff = false;
1440
1510
  let hasPendingInteraction = false;
1511
+ const { residualContent, state: tcFlushState } = flushToolCallTextParserIntoCallback(
1512
+ state.toolCallTextState,
1513
+ (name, arguments_) => {
1514
+ state.accumulatedToolCalls = accumulateToolCallChunks(
1515
+ state.accumulatedToolCalls ?? [],
1516
+ [{ index: state.accumulatedToolCalls.length, type: "function", function: { name, arguments: arguments_ } }]
1517
+ );
1518
+ }
1519
+ );
1520
+ state.toolCallTextState = tcFlushState;
1441
1521
  const flushed = flushThinkParser(state.thinkState);
1442
1522
  state.thinkState = flushed.state;
1443
1523
  if (flushed.reasoning) {
1444
1524
  state.reasoningBuffer = (state.reasoningBuffer || "") + flushed.reasoning;
1445
1525
  }
1446
- if (flushed.content) {
1526
+ const combinedFlushContent = residualContent + (flushed.content ?? "");
1527
+ if (combinedFlushContent) {
1447
1528
  state = {
1448
1529
  ...state,
1449
- contentBuffer: appendTextChunk(state.contentBuffer, flushed.content)
1530
+ contentBuffer: appendTextChunk(state.contentBuffer, combinedFlushContent)
1450
1531
  };
1451
1532
  }
1452
1533
  if (!state.hasProcessedToolCalls && state.accumulatedToolCalls.length > 0) {
@@ -1483,7 +1564,8 @@ var sendOpenAICompletionsRequest = async ({
1483
1564
  parentMessageId,
1484
1565
  messageMetadata,
1485
1566
  disableToolsForThisRequest = false,
1486
- quickChatPerfStartedAt
1567
+ quickChatPerfStartedAt,
1568
+ streamThrottlerOptions
1487
1569
  }) => {
1488
1570
  const { dispatch, getState, signal: thunkSignal } = thunkApi;
1489
1571
  const dialogId = extractCustomId(dialogKey);
@@ -1530,6 +1612,16 @@ var sendOpenAICompletionsRequest = async ({
1530
1612
  let lastFinishReason = null;
1531
1613
  let activeMessageMetadata = messageMetadata;
1532
1614
  let emptyCompletionRetryUsed = false;
1615
+ const throttler = createStreamThrottler((latestState) => {
1616
+ emitStreamingUpdate(true, latestState, {
1617
+ dispatch,
1618
+ agentConfig,
1619
+ messageId,
1620
+ msgKey,
1621
+ dialogId,
1622
+ messageMetadata: activeMessageMetadata
1623
+ });
1624
+ }, streamThrottlerOptions);
1533
1625
  const buildMeta = () => ({
1534
1626
  hasToolCalls: Array.isArray(streamState.assistantToolCalls) && streamState.assistantToolCalls.length > 0,
1535
1627
  hasPendingInteraction: hasPendingInteractionOverall,
@@ -1568,7 +1660,23 @@ var sendOpenAICompletionsRequest = async ({
1568
1660
  currentServer: selectCurrentServer(getState()),
1569
1661
  signal,
1570
1662
  token,
1571
- dialogId
1663
+ dialogId,
1664
+ onRetry: (info) => {
1665
+ dispatch(
1666
+ messageStreaming({
1667
+ id: messageId,
1668
+ dialogId,
1669
+ dbKey: msgKey,
1670
+ content: "",
1671
+ role: "assistant",
1672
+ agentKey: agentConfig.dbKey,
1673
+ cybotKey: agentConfig.dbKey,
1674
+ ...activeMessageMetadata ?? {},
1675
+ isStreaming: true,
1676
+ retryProgress: info
1677
+ })
1678
+ );
1679
+ }
1572
1680
  });
1573
1681
  logQuickChatPerfStage(quickChatPerfStartedAt, "openai-completions-fetch-response", {
1574
1682
  ok: response.ok,
@@ -1621,6 +1729,7 @@ var sendOpenAICompletionsRequest = async ({
1621
1729
  while (true) {
1622
1730
  const { done, value } = await readStreamChunkWithTimeout(reader, signal);
1623
1731
  if (done) {
1732
+ throttler.flush();
1624
1733
  const producedNothing = streamState.contentBuffer.length === 0 && !streamState.reasoningBuffer.trim() && (streamState.assistantToolCalls?.length ?? 0) === 0;
1625
1734
  if (producedNothing && !emptyCompletionRetryUsed && !streamState.hasHandedOff && !streamState.alreadyFinalized && !signal.aborted) {
1626
1735
  emptyCompletionRetryUsed = true;
@@ -1640,6 +1749,7 @@ var sendOpenAICompletionsRequest = async ({
1640
1749
  dialogId
1641
1750
  });
1642
1751
  if (retryResponse.ok && retryResponse.body) {
1752
+ throttler.cancel();
1643
1753
  streamState = createInitialStreamState();
1644
1754
  parseSSE = createSSEParser();
1645
1755
  decoder = new TextDecoder();
@@ -1689,6 +1799,7 @@ var sendOpenAICompletionsRequest = async ({
1689
1799
  continue;
1690
1800
  }
1691
1801
  if (data.error) {
1802
+ throttler.flush();
1692
1803
  const errorMsg = `Error: ${formatStreamErrorMessage(data)}`;
1693
1804
  streamState = {
1694
1805
  ...streamState,
@@ -1717,19 +1828,18 @@ var sendOpenAICompletionsRequest = async ({
1717
1828
  { dialogKey }
1718
1829
  );
1719
1830
  }
1720
- emitStreamingUpdate(hasNewVisibleContent, streamState, {
1721
- dispatch,
1722
- agentConfig,
1723
- messageId,
1724
- msgKey,
1725
- dialogId,
1726
- messageMetadata: activeMessageMetadata
1727
- });
1831
+ if (hasNewVisibleContent) {
1832
+ throttler.push(streamState);
1833
+ }
1834
+ if (Array.isArray(delta.tool_calls) && delta.tool_calls.length > 0) {
1835
+ throttler.flush();
1836
+ }
1728
1837
  const finishReason = choice.finish_reason;
1729
1838
  if (finishReason) {
1730
1839
  lastFinishReason = finishReason;
1731
1840
  streamState.finishReason = finishReason;
1732
1841
  if (finishReason === "tool_calls") {
1842
+ throttler.flush();
1733
1843
  if (streamState.totalUsage) {
1734
1844
  dispatch(tokenUsageLiveUpdate({
1735
1845
  input_tokens: streamState.totalUsage.prompt_tokens ?? streamState.totalUsage.input_tokens,
@@ -1770,6 +1880,7 @@ var sendOpenAICompletionsRequest = async ({
1770
1880
  }
1771
1881
  }
1772
1882
  } catch (error) {
1883
+ throttler.flush();
1773
1884
  let errorText;
1774
1885
  const isAbort = isAbortError(error);
1775
1886
  if (isAbort) {
@@ -1791,6 +1902,7 @@ var sendOpenAICompletionsRequest = async ({
1791
1902
  }
1792
1903
  streamState = await finalizeStream(streamState, finalizeCtx);
1793
1904
  } finally {
1905
+ throttler.cancel();
1794
1906
  logQuickChatPerfStage(quickChatPerfStartedAt, "openai-completions-stream-finished", {
1795
1907
  dialogKey
1796
1908
  });
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  selectCurrentServer,
3
3
  selectRemoteServers
4
- } from "./chunk-EABWT43X.js";
4
+ } from "./chunk-RVOUXDFU.js";
5
5
  import {
6
6
  createUserKey,
7
7
  extractAgentInfo,
@@ -10,16 +10,16 @@ import {
10
10
  sanitizeShareData,
11
11
  shareKey,
12
12
  toNonEmptyString
13
- } from "./chunk-O4BU24WZ.js";
13
+ } from "./chunk-6Y7A3OQQ.js";
14
14
  import {
15
15
  noloDeleteRequest,
16
16
  noloWriteRequest,
17
17
  selectIdentityUser,
18
18
  selectIdentityUserId
19
- } from "./chunk-DVRHHFEA.js";
19
+ } from "./chunk-XMLRJUU5.js";
20
20
  import {
21
21
  normalizeTimeFields
22
- } from "./chunk-OOSFSFMA.js";
22
+ } from "./chunk-R5V5G73M.js";
23
23
 
24
24
  // packages/share/action.ts
25
25
  var generateToken = () => {
@@ -7,11 +7,11 @@ import {
7
7
  listUserRecordsFromServers,
8
8
  readDbRecordFromServers,
9
9
  readLiveDbRecordAfterTombstoneMerge
10
- } from "./chunk-NVEWUJVX.js";
10
+ } from "./chunk-HEGV7BH3.js";
11
11
  import {
12
12
  buildDialogAttachmentPlan,
13
13
  extractFileContentIds
14
- } from "./chunk-MTU75CZ2.js";
14
+ } from "./chunk-B5TOXZAK.js";
15
15
  import {
16
16
  toErrorMessage
17
17
  } from "./chunk-HNMXYYJR.js";
@@ -625,7 +625,7 @@ async function tryHttpDialogCandidates(args) {
625
625
  throw Object.assign(new Error("All HTTP dialog reads failed"), { attempts });
626
626
  }
627
627
  async function readDialogFromLocalDb(dialogKey, dialogId, limit) {
628
- const { readDialogFromLocalDb: readLocalDialog } = await import("./localDialogRead-2VRI24F4.js");
628
+ const { readDialogFromLocalDb: readLocalDialog } = await import("./localDialogRead-4H3QJFLW.js");
629
629
  const result = await readLocalDialog({ dialogKey, dialogId, limit });
630
630
  return {
631
631
  ...result,
@@ -0,0 +1,78 @@
1
+ // packages/core/chat/runOverlayPresentation.ts
2
+ var STATUS_ORDER = [
3
+ "running",
4
+ "reviewing",
5
+ "testing",
6
+ "done",
7
+ "failed",
8
+ "cancelled",
9
+ "orphaned"
10
+ ];
11
+ var STATUS_DISPLAY = {
12
+ running: { icon: "\u25B6", label: "\u6B63\u5728\u8FD0\u884C" },
13
+ reviewing: { icon: "\u{1F441}", label: "\u5F85 review" },
14
+ testing: { icon: "\u{1F9EA}", label: "\u5728\u6D4B\u8BD5" },
15
+ done: { icon: "\u2705", label: "\u5DF2\u5B8C\u6210" },
16
+ failed: { icon: "\u274C", label: "\u5931\u8D25" },
17
+ cancelled: { icon: "\u23F9", label: "\u5DF2\u53D6\u6D88" },
18
+ orphaned: { icon: "\u{1F47B}", label: "\u5B64\u513F" }
19
+ };
20
+ function statusLabel(status) {
21
+ return STATUS_DISPLAY[status]?.label ?? status;
22
+ }
23
+ function groupByStatus(runs) {
24
+ const buckets = /* @__PURE__ */ new Map();
25
+ for (const run of runs.values()) {
26
+ const arr = buckets.get(run.status);
27
+ if (arr) arr.push(run);
28
+ else buckets.set(run.status, [run]);
29
+ }
30
+ const grouped = [];
31
+ for (const status of STATUS_ORDER) {
32
+ const arr = buckets.get(status);
33
+ if (arr && arr.length > 0) grouped.push({ status, runs: arr });
34
+ }
35
+ return grouped;
36
+ }
37
+ function buildOverlayPresentation(state) {
38
+ if (state.runs.size === 0) return null;
39
+ const grouped = groupByStatus(state.runs);
40
+ const lines = [];
41
+ for (const { status, runs } of grouped) {
42
+ const { icon, label } = STATUS_DISPLAY[status];
43
+ lines.push(`${icon} ${runs.length} \u4E2A${label}`);
44
+ }
45
+ lines.push("");
46
+ lines.push("--- \u8BE6\u60C5 ---");
47
+ for (const { runs } of grouped) {
48
+ for (const run of runs) {
49
+ lines.push(detailLine(run));
50
+ }
51
+ }
52
+ return lines.join("\n");
53
+ }
54
+ function detailLine(run) {
55
+ const short = shortStatusLabel(run.status);
56
+ let suffix = short;
57
+ if (run.summary) suffix += ` \u2014 ${run.summary}`;
58
+ else if (run.status === "failed" && run.errorMessage) suffix += ` \u2014 ${run.errorMessage}`;
59
+ return `\u2022 ${run.runId} (${run.name}): ${suffix}`;
60
+ }
61
+ var SHORT_STATUS_LABEL = {
62
+ running: "\u8FD0\u884C\u4E2D",
63
+ reviewing: "\u5F85 review",
64
+ testing: "\u6D4B\u8BD5\u4E2D",
65
+ done: "\u5DF2\u5B8C\u6210",
66
+ failed: "\u5931\u8D25",
67
+ cancelled: "\u5DF2\u53D6\u6D88",
68
+ orphaned: "\u5B64\u513F"
69
+ };
70
+ function shortStatusLabel(status) {
71
+ return SHORT_STATUS_LABEL[status];
72
+ }
73
+
74
+ export {
75
+ statusLabel,
76
+ groupByStatus,
77
+ buildOverlayPresentation
78
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  generatePkcePair,
3
3
  startCallbackServer
4
- } from "./chunk-EHLHSX7R.js";
4
+ } from "./chunk-OK6YSWLH.js";
5
5
  import {
6
6
  toErrorMessage
7
7
  } from "./chunk-HNMXYYJR.js";