nolo-cli 0.38.0-alpha.3 → 0.47.0-alpha.2

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-SWONBJ7Z.js → _executeModel-5PG6CUWD.js} +41 -42
  2. package/{action-KMBZ3LCZ.js → action-FLLC2SIX.js} +7 -7
  3. package/{addContentAction-KQ44UT2U.js → addContentAction-SVSPUUK4.js} +6 -6
  4. package/{addDialogAgentAction-ILSDCMYL.js → addDialogAgentAction-W3JGU4F7.js} +5 -5
  5. package/{agentDeleteCommand-SMUJYI6N.js → agentDeleteCommand-SHSPQZHI.js} +25 -26
  6. package/{agentEmailCommands-YWCGZ4RO.js → agentEmailCommands-LQKO5GRW.js} +54 -55
  7. package/{agentListCommands-ULFV2XJQ.js → agentListCommands-5QTNEYMQ.js} +31 -29
  8. package/{agentMachineCommands-7YZ2TIYZ.js → agentMachineCommands-P5K454CN.js} +24 -25
  9. package/{agentPullCommand-TSWAJPS2.js → agentPullCommand-M552CYSI.js} +2 -2
  10. package/{agentRecordCommands-EVOSSHJR.js → agentRecordCommands-Z4QYCNP4.js} +50 -51
  11. package/{agentRunCommand-PO55WUIY.js → agentRunCommand-HV3Y34B5.js} +52 -53
  12. package/{agentRunControl-7MUPSYDQ.js → agentRunControl-LHXOP4IU.js} +43 -1
  13. package/{agentRuntimeLocal-Q6D3G6G7.js → agentRuntimeLocal-ZKXYFLXI.js} +20 -21
  14. package/{agentSlice-6TRUUOSX.js → agentSlice-NKFLP3RI.js} +6 -6
  15. package/{agentSuperviseCommands-MKWW3ICX.js → agentSuperviseCommands-IMRZ56RC.js} +2 -2
  16. package/{appDeleteCommands-JDBSRLTX.js → appDeleteCommands-XYGAZIJX.js} +24 -25
  17. package/{appDeployCommands-Q5H2NBKQ.js → appDeployCommands-7T5CABRB.js} +24 -25
  18. package/{appDeployStatusCommands-PSYBUIZT.js → appDeployStatusCommands-KTFQMRPZ.js} +24 -25
  19. package/{appGetCommands-IX64IUW6.js → appGetCommands-HOX2ULSV.js} +24 -25
  20. package/{appListCommands-BJZFX65H.js → appListCommands-3SLCEHND.js} +24 -25
  21. package/{authCommand-B2XRHNJH.js → authCommand-OY2E2VQK.js} +12 -12
  22. package/{authCommands-GWABTFMR.js → authCommands-SBQVTD6V.js} +5 -5
  23. package/{chatQueueReduxAdapter-N7Z5MUPU.js → chatQueueReduxAdapter-WMMBQK3Y.js} +20 -20
  24. package/chunk-25J3BB35.js +6041 -0
  25. package/{chunk-U6QQLXWI.js → chunk-2X5S4IBZ.js} +1 -1
  26. package/{chunk-MJWX4JQO.js → chunk-3EEK7T3D.js} +1 -1
  27. package/{chunk-UNHKVD2N.js → chunk-43CXXVJD.js} +1 -1
  28. package/{chunk-WRP5TTM6.js → chunk-4MXGXSYN.js} +83 -3
  29. package/{chunk-7N7XKGEQ.js → chunk-4ZNDBDWG.js} +6 -6
  30. package/{chunk-XVVNNJAA.js → chunk-5BPZLBFB.js} +20 -51
  31. package/{chunk-MWGCZ4CS.js → chunk-5PPFYHU2.js} +3 -3
  32. package/{chunk-W445DPVT.js → chunk-5QRCPERU.js} +1 -1
  33. package/{chunk-GKHV4UH5.js → chunk-5UOBIU5G.js} +31 -3
  34. package/{chunk-BMB563Y6.js → chunk-6BYAXNH5.js} +3 -3
  35. package/{chunk-SMPAUSX5.js → chunk-6FGXGFAH.js} +2 -2
  36. package/{chunk-46VPXYIV.js → chunk-6LYUN76O.js} +5 -5
  37. package/{chunk-FTM4KUOZ.js → chunk-7XTC3KRG.js} +1 -1
  38. package/{chunk-IMHO5LC6.js → chunk-7XZ5GXSN.js} +1 -1
  39. package/{chunk-E2OQ5N2F.js → chunk-AEXP2UZT.js} +341 -16
  40. package/{chunk-MZZZYUZS.js → chunk-AV2CELZZ.js} +37 -12
  41. package/{chunk-JI2TIPLP.js → chunk-AYXSUBVC.js} +1 -1
  42. package/{chunk-J6WH4PYZ.js → chunk-CIF4X6ZM.js} +1 -1
  43. package/{chunk-GZRMWK5R.js → chunk-DQLYEGP7.js} +2 -2
  44. package/{chunk-GUYMR3JL.js → chunk-E2QH2AYX.js} +69 -3
  45. package/{chunk-B6H5XCT2.js → chunk-EMEUU5IY.js} +3 -3
  46. package/{chunk-X6EN3KJX.js → chunk-ENYDQKOB.js} +319 -71
  47. package/{chunk-RCFIB45Q.js → chunk-EVBFYPDC.js} +2 -2
  48. package/{chunk-PV734VZX.js → chunk-EXLOROHG.js} +1 -1
  49. package/{chunk-WRN7L5CS.js → chunk-FA4SY4F5.js} +1 -1
  50. package/{chunk-4WVNHL3V.js → chunk-FAWK6DBF.js} +157 -51
  51. package/{chunk-IFS5CUEH.js → chunk-FJHLA6SX.js} +1 -1
  52. package/{chunk-T2BZICLK.js → chunk-G46DB6KG.js} +49 -6
  53. package/{chunk-FGLKRJDI.js → chunk-GK74OOFT.js} +2 -2
  54. package/{chunk-LM6IYQ3F.js → chunk-GLKOYSRU.js} +8 -1
  55. package/{chunk-JIADXJYU.js → chunk-H2G6JXTR.js} +1 -1
  56. package/{chunk-IKGHZMK2.js → chunk-H2JQB6B6.js} +12 -12
  57. package/{chunk-MGIHZ5CJ.js → chunk-HAPCUPEO.js} +2 -2
  58. package/{chunk-LD6Y6RJY.js → chunk-HGDOIDQ4.js} +2 -2
  59. package/{chunk-NZLQ7B5P.js → chunk-HOM6NILS.js} +3 -3
  60. package/{chunk-IZNJDUJ4.js → chunk-I4JISVWK.js} +1 -1
  61. package/{chunk-N4XRDM26.js → chunk-IA3A5373.js} +2 -2
  62. package/{chunk-Y5MMUI3L.js → chunk-IWUPQUWA.js} +2 -2
  63. package/{chunk-L7SMDIL6.js → chunk-JEGPB5H2.js} +3 -3
  64. package/{chunk-GEPHJJW4.js → chunk-L7NG2M6H.js} +1 -1
  65. package/{chunk-XQES6LXQ.js → chunk-LFLWZX76.js} +2 -2
  66. package/{chunk-IIOHYLIG.js → chunk-LGUQHYAL.js} +1 -1
  67. package/{chunk-4AWH4LQA.js → chunk-LYGNQHUW.js} +3 -1
  68. package/{db-3H3JECGY.js → chunk-M5PVFLD4.js} +11 -158
  69. package/{chunk-WN5AJG5I.js → chunk-MKZRKDQM.js} +1 -1
  70. package/{chunk-VOXNBPLB.js → chunk-MUIJYGYW.js} +649 -41
  71. package/{chunk-CYAC5WXX.js → chunk-MWT2BBCH.js} +213 -45
  72. package/{chunk-V5GA74HI.js → chunk-MZXZJVVD.js} +20 -39
  73. package/{chunk-ZBB3MZR3.js → chunk-OLNC7AWK.js} +7 -4
  74. package/{chunk-J5NMOM35.js → chunk-OYNDYVSE.js} +1 -1
  75. package/{chunk-C6ELZQ7H.js → chunk-OZVGA4SY.js} +1 -1
  76. package/{chunk-K4KIFRIN.js → chunk-Q24S4NDF.js} +1 -1
  77. package/{chunk-NRROOY22.js → chunk-Q6DMA2OM.js} +271 -130
  78. package/{chunk-2WKUUY2E.js → chunk-SVEUG45B.js} +5 -3
  79. package/{chunk-IZCHPD7T.js → chunk-TNPCQNGQ.js} +11 -6
  80. package/{chunk-4DMPISV6.js → chunk-URBGEE42.js} +2 -2
  81. package/{chunk-2KO5QQFV.js → chunk-V2IPBG5U.js} +1 -1
  82. package/{chunk-B6YYACBT.js → chunk-WPFNAEIW.js} +1 -1
  83. package/{chunk-23KKIMD5.js → chunk-WVGEBWA6.js} +4 -4
  84. package/{chunk-KU6CDTZ5.js → chunk-XMI3APSU.js} +61 -49
  85. package/{chunk-64KIQZA2.js → chunk-XO3G35OV.js} +1 -1
  86. package/{chunk-UWGWUOVN.js → chunk-YNOGNUBC.js} +108 -47
  87. package/{chunk-XT73C4VH.js → chunk-Z5NW3O7V.js} +1 -1
  88. package/{codingSkills-H6N5EKSX.js → codingSkills-BYQI6EPT.js} +2 -2
  89. package/{createAgentAutomationAction-U57ZMPMS.js → createAgentAutomationAction-ENDNA3Q4.js} +21 -21
  90. package/{createDialogAction-MAJLBNK4.js → createDialogAction-2KNX6S2D.js} +23 -23
  91. package/{createPageAction-4EX7HU6G.js → createPageAction-SNBCYPK6.js} +21 -21
  92. package/db-VQSAOWAO.js +162 -0
  93. package/{dbSlice-PIQGICNM.js → dbSlice-XWUM4QOF.js} +5 -5
  94. package/deleteFile-NPZ64DFN.js +1 -1
  95. package/{dialogCommands-4MHZXEIS.js → dialogCommands-6E5P35DG.js} +28 -26
  96. package/{dialogSlice-AL3UJLOJ.js → dialogSlice-RTPOD6EW.js} +20 -20
  97. package/{docCreateCommands-GDYFEK67.js → docCreateCommands-JWY25UFB.js} +23 -24
  98. package/{docDeleteCommands-WIE5CXED.js → docDeleteCommands-BPJOCSX4.js} +24 -25
  99. package/{docReadCommands-LTOOPJVC.js → docReadCommands-BSEZCYTQ.js} +23 -24
  100. package/{docStore-35B5VAFF.js → docStore-TYHVLU7G.js} +22 -22
  101. package/{docUpdateCommands-TZGAGXSG.js → docUpdateCommands-S2IE2VV4.js} +23 -24
  102. package/{fetchMessages-CUEFN4GQ.js → fetchMessages-KZQVBXKY.js} +3 -3
  103. package/{getPricing-P3E2WRIH.js → getPricing-X3HXP6VQ.js} +3 -3
  104. package/{handleSendMessageAction-PXX2R5JS.js → handleSendMessageAction-QYXDQXGH.js} +21 -21
  105. package/index.js +69 -69
  106. package/levelLazyShim-GZBKODGI.js +7 -0
  107. package/{localDialogRead-P7CHFMIC.js → localDialogRead-NQ33HBSI.js} +2 -2
  108. package/{localRuntimeAuthority-S77B5QVB.js → localRuntimeAuthority-KQDAE64E.js} +4 -4
  109. package/{localRuntimeDb-N3H3HQ7G.js → localRuntimeDb-PF7CFKDL.js} +2 -2
  110. package/{machineCommands-VCPPY23X.js → machineCommands-QCE4KLGR.js} +48 -49
  111. package/{machineWsRunDispatch-A4C727GL.js → machineWsRunDispatch-FBRMGU5D.js} +48 -49
  112. package/{models-L7S2EKPM.js → models-7LWATQFH.js} +2 -2
  113. package/package.json +1 -1
  114. package/{read-6C2XD3YZ.js → read-DQQ75VI3.js} +2 -2
  115. package/{readDocTool-Y7AB365O.js → readDocTool-HCQQFAZD.js} +1 -1
  116. package/{readlineWorkspace-BIBIM6DG.js → readlineWorkspace-2TACWKMN.js} +164 -78
  117. package/{removeDialogAgentAction-KG5WMJRZ.js → removeDialogAgentAction-DNONRKST.js} +7 -7
  118. package/{runAgentClientLoop-RKDXMIZW.js → runAgentClientLoop-GBLDVBT5.js} +39 -39
  119. package/{runtimeDoctorCommands-HT4O2PXL.js → runtimeDoctorCommands-JKTTN723.js} +4 -4
  120. package/serverStoreFactory-YMXDF4NI.js +20 -0
  121. package/{setDialogExtraReferencesAction-O2NLXMSM.js → setDialogExtraReferencesAction-ERHUPT3F.js} +6 -6
  122. package/{setPrimaryDialogAgentAction-FYYUY7PB.js → setPrimaryDialogAgentAction-6C2HYNEC.js} +7 -7
  123. package/{settingSlice-GPLI6E3M.js → settingSlice-YVRJFKQX.js} +6 -6
  124. package/{spaceCommands-4FMO3SNP.js → spaceCommands-XOLPJMRK.js} +23 -24
  125. package/{spaceSlice-2W4GJ2OE.js → spaceSlice-OQPAGQDP.js} +21 -21
  126. package/{streamAgentChatTurn-FS52LDQP.js → streamAgentChatTurn-SN5XJJ7U.js} +91 -49
  127. package/{switchDialogAgentAction-GH5P6Q3Z.js → switchDialogAgentAction-HP57XYFP.js} +5 -5
  128. package/{tools-3J5CKEE7.js → tools-Y65Y3CI4.js} +32 -32
  129. package/{tuiSummaryLlmCaller-SHRB4RWM.js → tuiSummaryLlmCaller-NBTWT57U.js} +25 -14
  130. package/{updateDialogTitleAction-5MGPA3OO.js → updateDialogTitleAction-OAOP7CCE.js} +24 -23
  131. package/chunk-4APLX2RT.js +0 -1514
  132. package/chunk-P66M7LSQ.js +0 -58
  133. package/{chunk-6WD3OOJS.js → chunk-UV6VISQJ.js} +0 -0
  134. package/{tableCommands-PQUJ55AS.js → tableCommands-P2TXJ3CF.js} +1 -1
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  BUILTIN_SUMMARY_LLM_CONFIG
3
- } from "./chunk-RCFIB45Q.js";
3
+ } from "./chunk-EVBFYPDC.js";
4
4
  import {
5
5
  buildDialogAttachmentPlan,
6
6
  extractFileContentIds
7
- } from "./chunk-JIADXJYU.js";
7
+ } from "./chunk-H2G6JXTR.js";
8
8
  import {
9
9
  isOAuthApiKeyRef
10
10
  } from "./chunk-YYLHWIW6.js";
11
+ import {
12
+ runLlm
13
+ } from "./chunk-6LYUN76O.js";
11
14
  import {
12
15
  getApproxPricePerImage
13
16
  } from "./chunk-AGGIDPCZ.js";
14
- import {
15
- runLlm
16
- } from "./chunk-46VPXYIV.js";
17
17
  import {
18
18
  cleanupCliSessionForDialog
19
- } from "./chunk-MGIHZ5CJ.js";
19
+ } from "./chunk-HAPCUPEO.js";
20
20
  import {
21
21
  getActiveDialogAgentId,
22
22
  getDialogAgentIds,
@@ -43,10 +43,15 @@ import {
43
43
  import {
44
44
  DEFAULT_AUTO_EXECUTION_PROFILE,
45
45
  DEFAULT_CONTEXT_WINDOW,
46
+ EMPTY_ASSISTANT_FALLBACK_MESSAGE,
47
+ LENGTH_TRUNCATED_FALLBACK_MESSAGE,
48
+ REPETITION_LOOP_FALLBACK_MESSAGE,
49
+ STAGNANT_TOOL_CALLS_FALLBACK_MESSAGE,
50
+ STREAM_TRUNCATED_FALLBACK_MESSAGE,
46
51
  getModelContextWindow,
47
52
  getModelInfo,
48
53
  resolveAutoExecutionProfile
49
- } from "./chunk-WRP5TTM6.js";
54
+ } from "./chunk-4MXGXSYN.js";
50
55
  import {
51
56
  COMPACTION_SUMMARY_SYSTEM_PROMPT,
52
57
  buildCompactionMetricsFromPlan,
@@ -58,26 +63,26 @@ import {
58
63
  normalizeAssistantContentBuffer,
59
64
  planCompression,
60
65
  serializeMessageContent
61
- } from "./chunk-FGLKRJDI.js";
66
+ } from "./chunk-GK74OOFT.js";
62
67
  import {
63
68
  findModelConfig,
64
69
  getModelConfig
65
- } from "./chunk-C6ELZQ7H.js";
70
+ } from "./chunk-OZVGA4SY.js";
66
71
  import {
67
72
  toErrorMessage
68
73
  } from "./chunk-HNMXYYJR.js";
69
74
  import {
70
75
  fetchMessages
71
- } from "./chunk-WRN7L5CS.js";
76
+ } from "./chunk-FA4SY4F5.js";
72
77
  import {
73
78
  getPlatformHostedDeepSeekV4Price,
74
79
  isPlatformHostedDeepSeekV4Model,
75
80
  isPlatformHostedImageModel,
76
81
  isPlatformHostedOpenAIImageModel
77
- } from "./chunk-X6EN3KJX.js";
82
+ } from "./chunk-ENYDQKOB.js";
78
83
  import {
79
84
  nolotusId
80
- } from "./chunk-B6H5XCT2.js";
85
+ } from "./chunk-EMEUU5IY.js";
81
86
  import {
82
87
  asRecordOrEmpty
83
88
  } from "./chunk-KX6YBIHG.js";
@@ -87,7 +92,7 @@ import {
87
92
  remove,
88
93
  selectById,
89
94
  write
90
- } from "./chunk-23KKIMD5.js";
95
+ } from "./chunk-WVGEBWA6.js";
91
96
  import {
92
97
  buildDialogAgentListIndexDeleteOps,
93
98
  createDialogMessageKeyAndId,
@@ -98,13 +103,13 @@ import {
98
103
  isDialogRecordKey,
99
104
  isPageKey,
100
105
  isTableMetaKey
101
- } from "./chunk-2WKUUY2E.js";
102
- import {
103
- asTrimmedNonEmptyStringArray
104
- } from "./chunk-I42VC5KR.js";
106
+ } from "./chunk-SVEUG45B.js";
105
107
  import {
106
108
  asOptionalFiniteNumber
107
109
  } from "./chunk-WWC7I6TA.js";
110
+ import {
111
+ asTrimmedNonEmptyStringArray
112
+ } from "./chunk-I42VC5KR.js";
108
113
  import {
109
114
  asTrimmedLowercaseString
110
115
  } from "./chunk-QSJ3HFEF.js";
@@ -112,7 +117,7 @@ import {
112
117
  builtinAgentCatalogEntryById,
113
118
  builtinRuntimeFallbackEntries,
114
119
  isBuiltinPlatformAgentKey
115
- } from "./chunk-XT73C4VH.js";
120
+ } from "./chunk-Z5NW3O7V.js";
116
121
  import {
117
122
  extractCustomId,
118
123
  extractUserId,
@@ -1432,6 +1437,38 @@ var updateDialogSummaryAction = async (args, thunkApi) => {
1432
1437
  }
1433
1438
  };
1434
1439
 
1440
+ // packages/chat/messages/normalizeHistoricalReasoning.ts
1441
+ var HISTORICAL_REASONING_FALLBACK_MESSAGES = /* @__PURE__ */ new Set([
1442
+ EMPTY_ASSISTANT_FALLBACK_MESSAGE,
1443
+ LENGTH_TRUNCATED_FALLBACK_MESSAGE,
1444
+ STREAM_TRUNCATED_FALLBACK_MESSAGE,
1445
+ REPETITION_LOOP_FALLBACK_MESSAGE,
1446
+ STAGNANT_TOOL_CALLS_FALLBACK_MESSAGE
1447
+ ]);
1448
+ function normalizeHistoricalReasoningMessage(message) {
1449
+ if (!message || typeof message !== "object") {
1450
+ return message;
1451
+ }
1452
+ if (message.role !== "assistant") {
1453
+ return message;
1454
+ }
1455
+ if (typeof message.thinkContent === "string" && message.thinkContent.trim().length > 0) {
1456
+ return message;
1457
+ }
1458
+ const reasoning = message.reasoning_content;
1459
+ if (typeof reasoning !== "string" || reasoning.trim().length === 0) {
1460
+ return message;
1461
+ }
1462
+ const content = message.content;
1463
+ if (typeof content !== "string" || !HISTORICAL_REASONING_FALLBACK_MESSAGES.has(content.trim())) {
1464
+ return message;
1465
+ }
1466
+ return {
1467
+ ...message,
1468
+ thinkContent: reasoning
1469
+ };
1470
+ }
1471
+
1435
1472
  // packages/chat/messages/messageContract.ts
1436
1473
  function separateThinkContent(contentBuffer) {
1437
1474
  let thinkContent = "";
@@ -1907,16 +1944,27 @@ function resolveStreamEndBillingUsages(input) {
1907
1944
  const { agentConfig, totalUsage, finalVisibleContent } = input;
1908
1945
  const imageGenerationCount = countImageGenerationOutputsInContent(finalVisibleContent);
1909
1946
  const billedUsage = isOpenAIBuiltInImageGenerationAgent(agentConfig) ? withImageGenerationCount(totalUsage, imageGenerationCount) : totalUsage;
1910
- const estimatedUsage = estimateMissingUsage({
1947
+ const rawEstimatedUsage = estimateMissingUsage({
1911
1948
  content: finalVisibleContent
1912
1949
  });
1950
+ const providerCallId = typeof totalUsage === "object" && totalUsage !== null ? totalUsage.provider_call_id : void 0;
1951
+ const estimatedUsage = providerCallId ? { ...rawEstimatedUsage, provider_call_id: providerCallId } : rawEstimatedUsage;
1913
1952
  const billedEstimatedUsage = isOpenAIBuiltInImageGenerationAgent(agentConfig) ? withImageGenerationCount(estimatedUsage, imageGenerationCount) : estimatedUsage;
1914
1953
  const titleEligibleContent = serializeMessageContent(finalVisibleContent, "[\u56FE\u7247]") ?? "";
1954
+ const hasReportedTokens = Boolean(
1955
+ totalUsage && typeof totalUsage === "object" && ([
1956
+ "prompt_tokens",
1957
+ "completion_tokens",
1958
+ "total_tokens",
1959
+ "input_tokens",
1960
+ "output_tokens"
1961
+ ].some((field) => Object.prototype.hasOwnProperty.call(totalUsage, field)) || Object.prototype.hasOwnProperty.call(totalUsage, "cost") && typeof totalUsage.cost === "number")
1962
+ );
1915
1963
  return {
1916
1964
  imageGenerationCount,
1917
1965
  billedUsage,
1918
1966
  billedEstimatedUsage,
1919
- hasReportedUsage: Boolean(totalUsage),
1967
+ hasReportedUsage: hasReportedTokens,
1920
1968
  titleEligible: titleEligibleContent.trim() !== ""
1921
1969
  };
1922
1970
  }
@@ -2474,8 +2522,8 @@ function resolveStreamEndFinalMetadata(input) {
2474
2522
 
2475
2523
  // packages/chat/messages/messageStreamEndPostWritePolicy.ts
2476
2524
  function resolveStreamEndPostWritePolicy(input) {
2477
- const { hasReportedUsage, agentProvider, titleEligible, textContent, toolCalls } = input;
2478
- const billingMode = hasReportedUsage ? "reported" : agentProvider && agentProvider !== "custom" ? "estimated" : "skip";
2525
+ const { hasReportedUsage, billingFailed, skipBilling, agentProvider, titleEligible, textContent, toolCalls } = input;
2526
+ const billingMode = billingFailed || skipBilling ? "skip" : hasReportedUsage ? "reported" : agentProvider && agentProvider !== "custom" ? "estimated" : "skip";
2479
2527
  const hasText = textContent.trim() !== "";
2480
2528
  const noTools = !toolCalls || toolCalls.length === 0;
2481
2529
  return {
@@ -2503,7 +2551,8 @@ async function dispatchStreamEndBilling(input) {
2503
2551
  } = input;
2504
2552
  try {
2505
2553
  if (billingMode === "reported") {
2506
- const usageRecords = billingUsageRecords?.length ? billingUsageRecords : [{ callId: void 0, usage: billedUsage }];
2554
+ const fallbackCallId = typeof billedUsage?.provider_call_id === "string" && billedUsage.provider_call_id.trim() ? billedUsage.provider_call_id.trim() : void 0;
2555
+ const usageRecords = billingUsageRecords?.length ? billingUsageRecords : [{ callId: fallbackCallId, usage: billedUsage }];
2507
2556
  for (const usageRecord of usageRecords) {
2508
2557
  await dispatch(
2509
2558
  updateTokensAction2({
@@ -2790,13 +2839,22 @@ var findDialogIdByMessageDbKey = (state, dbKey) => {
2790
2839
  return inferDialogIdFromDbKey(dbKey);
2791
2840
  };
2792
2841
  var upsertOneMessage = (dialogState, message) => {
2793
- dialogState.msgs = messagesAdapter.upsertOne(dialogState.msgs, message);
2842
+ dialogState.msgs = messagesAdapter.upsertOne(
2843
+ dialogState.msgs,
2844
+ normalizeHistoricalReasoningMessage(message)
2845
+ );
2794
2846
  };
2795
2847
  var upsertManyMessages = (dialogState, messages) => {
2796
- dialogState.msgs = messagesAdapter.upsertMany(dialogState.msgs, messages);
2848
+ dialogState.msgs = messagesAdapter.upsertMany(
2849
+ dialogState.msgs,
2850
+ messages.map(normalizeHistoricalReasoningMessage)
2851
+ );
2797
2852
  };
2798
2853
  var addOneMessage = (dialogState, message) => {
2799
- dialogState.msgs = messagesAdapter.addOne(dialogState.msgs, message);
2854
+ dialogState.msgs = messagesAdapter.addOne(
2855
+ dialogState.msgs,
2856
+ normalizeHistoricalReasoningMessage(message)
2857
+ );
2800
2858
  };
2801
2859
  var updateOneMessage = (dialogState, payload) => {
2802
2860
  dialogState.msgs = messagesAdapter.updateOne(dialogState.msgs, payload);
@@ -2811,7 +2869,10 @@ var removeAllMessages = (dialogState) => {
2811
2869
  dialogState.msgs = messagesAdapter.removeAll(dialogState.msgs);
2812
2870
  };
2813
2871
  var setAllMessages = (dialogState, messages) => {
2814
- dialogState.msgs = messagesAdapter.setAll(dialogState.msgs, messages);
2872
+ dialogState.msgs = messagesAdapter.setAll(
2873
+ dialogState.msgs,
2874
+ messages.map(normalizeHistoricalReasoningMessage)
2875
+ );
2815
2876
  };
2816
2877
  var messageActions;
2817
2878
  var messageSlice = createSliceWithThunks({
@@ -3231,7 +3292,9 @@ var messageSlice = createSliceWithThunks({
3231
3292
  messageId,
3232
3293
  reasoningBuffer,
3233
3294
  toolCalls,
3234
- finishReason
3295
+ finishReason,
3296
+ billingFailed,
3297
+ skipBilling
3235
3298
  } = payload;
3236
3299
  const spaceId = payload.spaceId;
3237
3300
  const rawAgentName = asTrimmedString(agentConfig?.name);
@@ -3318,6 +3381,8 @@ var messageSlice = createSliceWithThunks({
3318
3381
  addRefs
3319
3382
  } = resolveStreamEndPostWritePolicy({
3320
3383
  hasReportedUsage,
3384
+ billingFailed,
3385
+ skipBilling,
3321
3386
  agentProvider: agentConfig?.provider,
3322
3387
  titleEligible,
3323
3388
  textContent,
@@ -3519,7 +3584,7 @@ var messageSlice = createSliceWithThunks({
3519
3584
  runtimeOptions: args.runtimeOptions
3520
3585
  });
3521
3586
  if (agentKeyToUse) {
3522
- const { streamAgentChatTurn } = await import("./agentSlice-6TRUUOSX.js");
3587
+ const { streamAgentChatTurn } = await import("./agentSlice-NKFLP3RI.js");
3523
3588
  await dispatch(
3524
3589
  streamAgentChatTurn({
3525
3590
  agentKey: agentKeyToUse,
@@ -4088,12 +4153,13 @@ var normalizeUsage = (usage) => {
4088
4153
  output_tokens: 0,
4089
4154
  total_tokens: 0,
4090
4155
  cache_creation_input_tokens: 0,
4091
- cache_read_input_tokens: 0
4156
+ cache_read_input_tokens: 0,
4157
+ cost: 0
4092
4158
  };
4093
4159
  }
4094
4160
  const inputTokens = "input_tokens" in usage ? usage.input_tokens ?? 0 : "prompt_tokens" in usage ? usage.prompt_tokens : 0;
4095
4161
  const outputTokens = "output_tokens" in usage ? usage.output_tokens ?? 0 : "completion_tokens" in usage ? usage.completion_tokens : 0;
4096
- const cacheCreationInputTokens = "cache_creation_input_tokens" in usage ? usage.cache_creation_input_tokens ?? 0 : "prompt_cache_miss_tokens" in usage ? usage.prompt_cache_miss_tokens : 0;
4162
+ const cacheCreationInputTokens = "cache_creation_input_tokens" in usage ? usage.cache_creation_input_tokens ?? 0 : "prompt_cache_miss_tokens" in usage ? usage.prompt_cache_miss_tokens ?? 0 : 0;
4097
4163
  const cacheReadInputTokens = finiteTokenCount(usage.cache_read_input_tokens) ?? finiteTokenCount(usage.prompt_cache_hit_tokens) ?? readNestedTokenCount(usage, ["input_tokens_details", "cached_tokens"]) ?? readNestedTokenCount(usage, ["prompt_tokens_details", "cached_tokens"]) ?? 0;
4098
4164
  let cost = 0;
4099
4165
  const providedCost = readFiniteNumberField(usage, "cost");
@@ -4120,6 +4186,7 @@ var normalizeUsage = (usage) => {
4120
4186
  return {
4121
4187
  input_tokens: inputTokens,
4122
4188
  output_tokens: outputTokens,
4189
+ total_tokens: finiteTokenCount(usage.total_tokens) ?? inputTokens + outputTokens,
4123
4190
  cache_creation_input_tokens: cacheCreationInputTokens,
4124
4191
  cache_read_input_tokens: cacheReadInputTokens,
4125
4192
  cost,
@@ -4317,7 +4384,9 @@ function normalizeDayStats(prev, userId, timeKey) {
4317
4384
  models: {},
4318
4385
  providers: {},
4319
4386
  agents: {},
4320
- entryPaths: {}
4387
+ entryPaths: {},
4388
+ categories: {},
4389
+ modelCategories: {}
4321
4390
  };
4322
4391
  }
4323
4392
  const normalizeMap = (m) => {
@@ -4326,13 +4395,37 @@ function normalizeDayStats(prev, userId, timeKey) {
4326
4395
  for (const [k, v] of Object.entries(m)) out[k] = normalizeStats(v);
4327
4396
  return out;
4328
4397
  };
4398
+ const normalizedTotal = normalizeStats(prev.total);
4399
+ const normalizedModels = normalizeMap(prev.models);
4400
+ const normalizedProviders = normalizeMap(prev.providers);
4401
+ const normalizedAgents = normalizeMap(prev.agents);
4402
+ const normalizedEntryPaths = normalizeMap(prev.entryPaths);
4403
+ let categories = normalizeMap(prev.categories);
4404
+ let modelCategories = normalizeMap(prev.modelCategories);
4405
+ const hasCategories = Object.keys(categories).length > 0;
4406
+ const hasModelCategories = Object.keys(modelCategories).length > 0;
4407
+ if (!hasCategories) {
4408
+ const hasActivity = normalizedTotal.count > 0 || normalizedTotal.failedCount > 0 || normalizedTotal.cost > 0 || normalizedTotal.tokens.input > 0 || normalizedTotal.tokens.output > 0;
4409
+ if (hasActivity) {
4410
+ categories = { platform: { ...normalizedTotal } };
4411
+ }
4412
+ }
4413
+ if (!hasModelCategories && Object.keys(normalizedModels).length > 0) {
4414
+ const legacyModelCats = {};
4415
+ for (const [modelKey, modelStat] of Object.entries(normalizedModels)) {
4416
+ legacyModelCats[`${modelKey}:::platform`] = { ...modelStat };
4417
+ }
4418
+ modelCategories = legacyModelCats;
4419
+ }
4329
4420
  return {
4330
4421
  ...prev,
4331
- total: normalizeStats(prev.total),
4332
- models: normalizeMap(prev.models),
4333
- providers: normalizeMap(prev.providers),
4334
- agents: normalizeMap(prev.agents),
4335
- entryPaths: normalizeMap(prev.entryPaths)
4422
+ total: normalizedTotal,
4423
+ models: normalizedModels,
4424
+ providers: normalizedProviders,
4425
+ agents: normalizedAgents,
4426
+ entryPaths: normalizedEntryPaths,
4427
+ categories,
4428
+ modelCategories
4336
4429
  };
4337
4430
  }
4338
4431
  function applyTokenUsageToDayStats(prev, delta) {
@@ -4342,6 +4435,8 @@ function applyTokenUsageToDayStats(prev, delta) {
4342
4435
  const cacheRead = delta.cache_read_input_tokens ?? 0;
4343
4436
  const cacheCreation = delta.cache_creation_input_tokens ?? 0;
4344
4437
  const isFailed = delta.status === "failed";
4438
+ const category = delta.billingCategory || "platform";
4439
+ const modelCategoryKey = `${modelName}:::${category}`;
4345
4440
  const inc = (s) => {
4346
4441
  const n = normalizeStats(s);
4347
4442
  if (isFailed) {
@@ -4358,7 +4453,9 @@ function applyTokenUsageToDayStats(prev, delta) {
4358
4453
  cacheRead: n.tokens.cacheRead + cacheRead,
4359
4454
  cacheCreation: n.tokens.cacheCreation + cacheCreation
4360
4455
  },
4361
- cost: Number((n.cost + delta.cost).toFixed(6)),
4456
+ // 非计费记录(订阅/OAuth/CLI,billable=false)不向平台积分统计贡献 cost
4457
+ // 订阅已付费、不按 token 计费,若不归零,图表「成本」视图会把订阅用量误显示为积分消耗。
4458
+ cost: Number((n.cost + (category === "subscription" ? 0 : delta.cost)).toFixed(6)),
4362
4459
  failedCount: n.failedCount
4363
4460
  };
4364
4461
  };
@@ -4372,6 +4469,14 @@ function applyTokenUsageToDayStats(prev, delta) {
4372
4469
  providers: {
4373
4470
  ...base.providers,
4374
4471
  [providerName]: inc(base.providers[providerName])
4472
+ },
4473
+ categories: {
4474
+ ...base.categories,
4475
+ [category]: inc(base.categories?.[category])
4476
+ },
4477
+ modelCategories: {
4478
+ ...base.modelCategories,
4479
+ [modelCategoryKey]: inc(base.modelCategories?.[modelCategoryKey])
4375
4480
  }
4376
4481
  };
4377
4482
  if (delta.agentId !== void 0) {
@@ -4443,7 +4548,8 @@ var updateStats = async (data, existingStats, key, thunkApi) => {
4443
4548
  cache_read_input_tokens: data.cache_read_input_tokens,
4444
4549
  cache_creation_input_tokens: data.cache_creation_input_tokens,
4445
4550
  agentId: data.agentId ?? data.cybotId,
4446
- entry_path: data.entry_path
4551
+ entry_path: data.entry_path,
4552
+ billingCategory: data.billable ? "platform" : "subscription"
4447
4553
  });
4448
4554
  await thunkApi.dispatch(
4449
4555
  write({
@@ -4516,8 +4622,8 @@ var updateTokensAction = async ({ dialogId, dialogKey, usage: legacyUsage, usage
4516
4622
  currentAccountUserId: currentUser?.userId ?? null
4517
4623
  });
4518
4624
  const timestamp = Date.now();
4519
- const callId = typeof usageRecord?.callId === "string" && usageRecord.callId ? usageRecord.callId : void 0;
4520
4625
  const usageRaw = usageRecord?.usage ?? legacyUsage;
4626
+ const callId = (typeof usageRecord?.callId === "string" && usageRecord.callId.trim() ? usageRecord.callId.trim() : void 0) ?? (typeof usageRaw?.provider_call_id === "string" && usageRaw.provider_call_id.trim() ? usageRaw.provider_call_id.trim() : void 0);
4521
4627
  const usageWithStableCallId = callId && !usageRaw?.provider_call_id ? { ...usageRaw, provider_call_id: callId } : usageRaw;
4522
4628
  const callAgentConfig = {
4523
4629
  ...agentConfig,
@@ -4742,7 +4848,7 @@ var deleteDialogThunk = async (payload, thunkApi) => {
4742
4848
  }
4743
4849
  if (isCurrentDialog) {
4744
4850
  await thunkApi.dispatch(resetMsgs());
4745
- const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-AL3UJLOJ.js");
4851
+ const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-RTPOD6EW.js");
4746
4852
  dispatch(clearPendingAttachments2());
4747
4853
  }
4748
4854
  return { dialogKey, isCurrentDialog, attachmentPlan };
@@ -4750,39 +4856,39 @@ var deleteDialogThunk = async (payload, thunkApi) => {
4750
4856
 
4751
4857
  // packages/chat/dialog/dialogSlice.ts
4752
4858
  var runCreateDialogAction = async (args, thunkApi) => {
4753
- const { createDialogAction } = await import("./createDialogAction-MAJLBNK4.js");
4859
+ const { createDialogAction } = await import("./createDialogAction-2KNX6S2D.js");
4754
4860
  return createDialogAction(args, thunkApi);
4755
4861
  };
4756
4862
  var runCreateAgentAutomationAction = async (args, thunkApi) => {
4757
- const { createAgentAutomationAction } = await import("./createAgentAutomationAction-U57ZMPMS.js");
4863
+ const { createAgentAutomationAction } = await import("./createAgentAutomationAction-ENDNA3Q4.js");
4758
4864
  return createAgentAutomationAction(args, thunkApi);
4759
4865
  };
4760
4866
  var runUpdateDialogTitleAction = async (args, thunkApi) => {
4761
- const { updateDialogTitleAction } = await import("./updateDialogTitleAction-5MGPA3OO.js");
4867
+ const { updateDialogTitleAction } = await import("./updateDialogTitleAction-OAOP7CCE.js");
4762
4868
  return updateDialogTitleAction(args, thunkApi);
4763
4869
  };
4764
4870
  var runAddDialogAgentAction = async (args, thunkApi) => {
4765
- const { addDialogAgentAction } = await import("./addDialogAgentAction-ILSDCMYL.js");
4871
+ const { addDialogAgentAction } = await import("./addDialogAgentAction-W3JGU4F7.js");
4766
4872
  return addDialogAgentAction(args, thunkApi);
4767
4873
  };
4768
4874
  var runRemoveDialogAgentAction = async (args, thunkApi) => {
4769
- const { removeDialogAgentAction } = await import("./removeDialogAgentAction-KG5WMJRZ.js");
4875
+ const { removeDialogAgentAction } = await import("./removeDialogAgentAction-DNONRKST.js");
4770
4876
  return removeDialogAgentAction(args, thunkApi);
4771
4877
  };
4772
4878
  var runSetPrimaryDialogAgentAction = async (args, thunkApi) => {
4773
- const { setPrimaryDialogAgentAction } = await import("./setPrimaryDialogAgentAction-FYYUY7PB.js");
4879
+ const { setPrimaryDialogAgentAction } = await import("./setPrimaryDialogAgentAction-6C2HYNEC.js");
4774
4880
  return setPrimaryDialogAgentAction(args, thunkApi);
4775
4881
  };
4776
4882
  var runSwitchDialogAgentAction = async (args, thunkApi) => {
4777
- const { switchDialogAgentAction } = await import("./switchDialogAgentAction-GH5P6Q3Z.js");
4883
+ const { switchDialogAgentAction } = await import("./switchDialogAgentAction-HP57XYFP.js");
4778
4884
  return switchDialogAgentAction(args, thunkApi);
4779
4885
  };
4780
4886
  var runSetDialogExtraReferencesAction = async (args, thunkApi) => {
4781
- const { setDialogExtraReferencesAction } = await import("./setDialogExtraReferencesAction-O2NLXMSM.js");
4887
+ const { setDialogExtraReferencesAction } = await import("./setDialogExtraReferencesAction-ERHUPT3F.js");
4782
4888
  return setDialogExtraReferencesAction(args, thunkApi);
4783
4889
  };
4784
4890
  var runHandleSendMessageAction = async (args, thunkApi) => {
4785
- const { handleSendMessageAction } = await import("./handleSendMessageAction-PXX2R5JS.js");
4891
+ const { handleSendMessageAction } = await import("./handleSendMessageAction-QYXDQXGH.js");
4786
4892
  return handleSendMessageAction(args, thunkApi);
4787
4893
  };
4788
4894
  function clearDialogState() {
@@ -4795,7 +4901,7 @@ var createPageAndAddReference = createAsyncThunk(
4795
4901
  async (payload, { dispatch, getState, rejectWithValue }) => {
4796
4902
  const { slateData, jsonData, title, type, fileId, groupId, dialogKey } = payload;
4797
4903
  try {
4798
- const { createDocState } = await import("./docStore-35B5VAFF.js");
4904
+ const { createDocState } = await import("./docStore-TYHVLU7G.js");
4799
4905
  const pageKey = await createDocState(
4800
4906
  { slateData, title },
4801
4907
  { dispatch, getState }
@@ -199,7 +199,7 @@ async function readDocFunc(args, thunkApi) {
199
199
  throw new Error(`\u65E0\u6548\u7684\u9875\u9762 ID: ${id}\u3002\u9875\u9762 ID \u901A\u5E38\u4EE5 "page-" \u5F00\u5934\u3002`);
200
200
  }
201
201
  try {
202
- const { readAction } = await import("./read-6C2XD3YZ.js");
202
+ const { readAction } = await import("./read-DQQ75VI3.js");
203
203
  const pageData = await readAction({ dbKey: id }, thunkApi);
204
204
  if (!pageData) {
205
205
  throw new Error(`\u672A\u627E\u5230 ID \u4E3A ${id} \u7684\u9875\u9762\u3002`);
@@ -1,12 +1,17 @@
1
1
  import {
2
2
  isImageUrlPart
3
- } from "./chunk-BMB563Y6.js";
3
+ } from "./chunk-6BYAXNH5.js";
4
4
  import {
5
5
  AGENT_SELECTION_PRIORITY_INSTRUCTIONS
6
- } from "./chunk-IZCHPD7T.js";
6
+ } from "./chunk-TNPCQNGQ.js";
7
7
  import {
8
8
  canonicalizeToolNames
9
9
  } from "./chunk-O6OSWFZQ.js";
10
+ import {
11
+ PLATFORM_HOSTED_KIMI_K3_MODEL,
12
+ isFireworksKimiModel,
13
+ isNoloHostedProvider
14
+ } from "./chunk-ENYDQKOB.js";
10
15
  import {
11
16
  asTrimmedLowercaseString
12
17
  } from "./chunk-QSJ3HFEF.js";
@@ -166,7 +171,7 @@ var AGENT_ORCHESTRATION_RUN_INSTRUCTIONS = `--- \u591A Agent \u7F16\u6392\uFF08\
166
171
  \u7528 startAgentRun \u542F\u52A8\u5B50 Agent\uFF08wait:false \u5F02\u6B65 fork+exec \u8FD4\u56DE runId\uFF1Bwait:true \u540C\u6B65\u7B49\u7ED3\u679C\uFF09\uFF0C\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF08wait/signal/proc \u8BED\u4E49\uFF09\u3002\u4F55\u65F6\u6D3E\u53D1\u89C1\u300C\u591A Agent \u534F\u4F5C\u300D\u6BB5\uFF1B\u672C\u6BB5\u53EA\u8BB2\u6D3E\u53D1\u4E4B\u540E\u600E\u4E48\u76EF\u3001\u600E\u4E48\u6392\u9519\u3002
167
172
 
168
173
  1. \u76EF\u68A2\uFF1A**\u5F02\u6B65\u6D3E\u53D1\u540E\u7ACB\u5373\u6536\u5C3E\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\u3002** \u8981\u7ACB\u5373\u62FF\u7ED3\u679C\u5C31\u522B\u7528\u5F02\u6B65\uFF1A<100s \u5B50\u4EFB\u52A1\u76F4\u63A5 startAgentRun({ wait: true })\uFF1B\u5DF2\u5F02\u6B65\u6D3E\u51FA\u7684\u7528 controlAgentRun(action:"wait", runId) \u963B\u585E\u5230\u7EC8\u6001\u3002\u652F\u6301\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u684C\u9762 TUI\uFF09run \u5230\u7EC8\u6001\u81EA\u52A8\u6458\u8981\u5524\u9192\u4F60\uFF0C\u65E0\u5E76\u884C\u5DE5\u4F5C\u5219\u4E00\u53E5\u8BDD\u6536\u5C3E\uFF1B\u6CA1\u6709\u7EC8\u6001\u5524\u9192\u7684\u73AF\u5883\uFF08\u88F8 CLI\u3001\u670D\u52A1\u7AEF runtime\uFF09\u7528 wait \u963B\u585E\uFF0C\u540C\u6837\u4E0D\u8981\u81EA\u5DF1\u5FAA\u73AF\u67E5\u3002
169
- 2. \u7B49\u5F85/\u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status \u7684\u8BED\u4E49\u4EE5 startAgentRun \u4E0E controlAgentRun \u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002controlAgentRun \u53EA\u5728\u300C\u7B54\u6848\u4F1A\u6539\u53D8\u4F60\u4E0B\u4E00\u6B65\u52A8\u4F5C\u300D\u65F6\u7528\uFF08\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u53EB\u505C/\u8865\u6D3E\uFF09\uFF1B\u4E00\u6B21\u6027\u6B7B\u6D3B\u68C0\u67E5\u7528 status(runId, tailLines:0)\u3002\u5E76\u884C\uFF1A\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u4E4B\u540E\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002
174
+ 2. \u7B49\u5F85/\u7981\u6B62\u8F6E\u8BE2/\u7981\u7A7A\u8F6C/\u522B\u590D\u8FF0 status \u7684\u8BED\u4E49\u4EE5 startAgentRun \u4E0E controlAgentRun \u5DE5\u5177\u63CF\u8FF0\u4E3A\u51C6\u3002controlAgentRun \u53EA\u5728\u300C\u7B54\u6848\u4F1A\u6539\u53D8\u4F60\u4E0B\u4E00\u6B65\u52A8\u4F5C\u300D\u65F6\u7528\uFF08\u80FD\u5426\u6C47\u603B\u3001\u8981\u4E0D\u8981\u53EB\u505C/\u8865\u6D3E\uFF09\uFF1B\u4E00\u6B21\u6027\u6B7B\u6D3B\u68C0\u67E5\u7528 status(runId, tailLines:0)\u3002\u5E76\u884C\uFF1A\u591A\u4E2A\u72EC\u7ACB\u5B50\u4EFB\u52A1\u4E00\u6B21\u6D3E\u5B8C\uFF0C\u4E4B\u540E\u7B49\u5404\u81EA\u7EC8\u6001\u9010\u4E2A\u6C47\u603B\u3002\u65E0\u6587\u4EF6\u4EA4\u96C6\u3001\u65E0\u771F\u5B9E\u6570\u636E\u4F9D\u8D56\u7684\u4EFB\u52A1\u9ED8\u8BA4\u5E76\u53D1\u6D3E\u53D1\u2014\u2014\u4E0D\u8981\u56E0\u5B83\u4EEC\u6070\u597D\u5171\u7528\u540C\u4E00\u6267\u884C agent/\u901A\u9053\u800C\u81EA\u884C\u52A0\u300C\u901A\u9053\u4E32\u884C\u300D\u7684\u4FDD\u5B88\u5047\u8BBE\uFF08\u540C\u901A\u9053\u5141\u8BB8\u5E76\u53D1 fork \u591A\u5B9E\u4F8B\uFF0C\u5B9E\u4F8B\u95F4\u65E0\u4E0A\u4E0B\u6587\u5171\u4EAB\uFF09\uFF1B\u53EA\u6709\u4EFB\u52A1\u95F4\u5B58\u5728\u771F\u5B9E\u6587\u4EF6/\u6570\u636E\u4F9D\u8D56\u6216 brief \u660E\u793A\u51B2\u7A81\u9762\u65F6\u624D\u4E32\u884C\u3002
170
175
  3. \u6392\u9519\uFF1A\u5148\u5206\u8BCA\u518D\u4E0B\u7ED3\u8BBA\u3002\u2460 \u590D\u6838 agentKey \u662F\u5426\u7167\u6284\u81EA listAgents\uFF08\u4E0D\u662F\u5C31\u5148\u4FEE key\uFF0C\u4E0D\u7B97\u901A\u9053\u6545\u969C\uFF09\uFF1B\u2461 \u62A5\u9519\u542B not found / invalid ref / Local agent config not found \u2192 \u5148 readAgent \u590D\u6838\uFF0C**\u7981\u6B62**\u636E\u6B64\u63A8\u65AD\u51ED\u8BC1\u7F3A\u5931\u6216\u901A\u9053\u5168\u6302\uFF1B\u2462 \u540C\u4E00\u5DF2\u9A8C\u8BC1 key \u4E0A\u4ECD\u5931\u8D25\u4E14\u9519\u8BEF\u660E\u786E\u6307\u5411\u901A\u9053\uFF08429\u3001\u9274\u6743\u5931\u8D25\u3001machine offline\uFF09\u2192 \u624D\u8BB0\u4E3A\u901A\u9053\u6545\u969C\u3002
171
176
  4. \u5224\u5B9A\u300C\u6D3E\u53D1\u901A\u9053\u6574\u4F53\u4E0D\u53EF\u7528\u300D\u524D\uFF0C\u81F3\u5C11\u5BF9 2 \u4E2A\u4E0D\u540C\u5019\u9009\u5404\u5B8C\u6210\u300C\u5DF2\u9A8C\u8BC1 key + \u4E00\u6B21\u771F\u5B9E\u6D3E\u53D1\u300D\uFF1B\u5019\u9009\u4E0D\u8DB3 2 \u4E2A\u5C31\u5982\u5B9E\u62A5\u544A\u300C\u4EC5\u6B64\u5019\u9009\u4E14\u901A\u9053\u5931\u8D25\u300D\uFF0C\u4E0D\u5F97\u5938\u5927\u6210\u5168\u5E93\u4E0D\u53EF\u7528\u3002\u53EA\u6709 status=failed/\u8D85\u65F6\u6216 progress \u957F\u65F6\u95F4\u6BEB\u65E0\u52A8\u9759\uFF08\u7591\u4F3C\u5361\u6B7B\uFF09\u624D\u62C9 tailLines:30 \u770B\u65E5\u5FD7\uFF1Bstop \u4E4B\u524D\u5148\u770B\u65E5\u5FD7\u786E\u8BA4\u662F\u771F\u5361\u6B7B\uFF0C\u5E76\u7528 list/status \u786E\u8BA4 run \u771F\u5B9E\u5B58\u5728\u4E14\u975E\u7EC8\u6001\u2014\u2014\u522B\u5047\u8BBE\u300C\u6D3E\u53D1\u4E86\u5C31\u5728\u8DD1\u300D\u3002`;
172
177
  var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C\uFF08\u591A Agent \u534F\u4F5C\uFF1A\u8BA1\u5212 \u2192 \u6309\u9700\u6D3E\u53D1 \u2192 \u5BA1\u67E5\uFF09 ---
@@ -191,11 +196,12 @@ var AGENT_COLLABORATION_INSTRUCTIONS = `--- Agent \u7F16\u6392\u4E0E\u534F\u4F5C
191
196
  ${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
192
197
  - \u4E2D\u6587\u5199\u7A3F/\u957F\u6587\u521B\u4F5C/\u4F4E AI \u5473\u5185\u5BB9\uFF1A\u4F18\u5148\u9009 \`gemini-3.7-flash\`\uFF08\u884C\u6587\u81EA\u7136\u3001\u9AD8\u6027\u4EF7\u6BD4\uFF09\u6216 \`kimi-k3\`\u3002
193
198
  - \u9876\u6863\u6A21\u578B\uFF08Opus 5\u3001GPT-5.6 Sol \u53CA\u540C\u7EA7\uFF09\u81EA\u52A8\u59D4\u6258\u786C\u95E8\uFF1A\u4EC5\u7528\u4E8E\u590D\u6742\u67B6\u6784/\u8DE8\u57DF\u8BBE\u8BA1\u3001\u91CD\u5927\u4E8B\u6545\u3001\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027\u9AD8\u98CE\u9669\u5206\u6790\u3001\u8FBE\u6807\u7684\u6DF1 review\uFF0C\u6216\u4F4E\u4EF7\u5019\u9009\u5DF2\u6709\u5931\u8D25\u8BC1\u636E\u540E\u7684\u5347\u7EA7\u3002\u6DF1 review \u8FBE\u6807\u7EBF\uFF1D\u6539\u52A8\u6587\u4EF6\u6570 \u2265 30 \u4E14\u89E6\u53CA\u8BA1\u8D39/\u5B89\u5168/\u6570\u636E\u5B8C\u6574\u6027/\u6838\u5FC3\u8DEF\u7531\uFF0C\u6216\u4F4E\u4EF7 reviewer \u5DF2 BLOCK/\u901A\u9053\u5931\u8D25\u3002\u666E\u901A review \u9ED8\u8BA4\u6D3E\u4F4E\u4EF7\u5019\u9009\u3002\u9009\u9876\u6863\u8981\u5728\u56DE\u590D\u91CC\u8BF4\u660E\u7406\u7531\uFF1B\u7528\u6237\u70B9\u540D\u4E0D\u53D7\u6B64\u9650\u3002
199
+ - \u901A\u9053\u6392\u9664\u5224\u636E\uFF1A\u53EA\u6392\u9664\u300C\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\u300D\u4E0E\u300C\u5F53\u65F6\u5B9E\u6D4B\u6B7B\u56E0\u7684\u574F\u901A\u9053\u300D\uFF08\u914D\u989D\u8017\u5C3D/\u4F59\u989D\u4E0D\u8DB3/\u9650\u6D41\uFF0C\u987B\u6709\u5F53\u6B21\u9519\u8BEF\u8BC1\u636E\uFF09\u3002\u7F16\u6392\u8005\u81EA\u8EAB\u7684 agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u65B0\u5B9E\u4F8B\u4E0D\u5E26\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF1A\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u662F\u5408\u6CD5 reviewer\uFF0C\u4E14 flash \u6863\u5E38\u662F\u6700\u4FBF\u5B9C\u7684 review \u901A\u9053\uFF1B\u300C\u4E0D\u70E7\u5E73\u53F0\u79EF\u5206\u300D\u4F18\u5148\u7EA7\u5BF9\u5927\u8DD1\u91CF\u6267\u884C\u8005\u6210\u7ACB\uFF0C\u5BF9 flash \u6863 review\uFF08\u6210\u672C\u53EF\u5FFD\u7565\uFF09\u4E0D\u9002\u7528\u3002
194
200
  - \u4E0D\u51ED\u540D\u5B57\u7F16\u9020\u80FD\u529B\uFF0C\u4E0D\u7D22\u53D6 prompt/\u5BC6\u94A5/\u6570\u636E\u5E93 key \u6765\u9009\u4EBA\uFF1B\u6D3E\u53D1\u524D\u8DF3\u8FC7\u5DF2\u77E5\u574F\u901A\u9053\uFF08\u914D\u7F6E\u7F3A\u5931/\u533A\u57DF\u9650\u5236/\u7F51\u5173 400\uFF09\u3002
195
201
 
196
- **\u62C6\u5206\u4E0E\u6D3E\u53D1\u8D28\u91CF**\uFF1A\u6309\u72EC\u7ACB\u9886\u57DF\u62C6\uFF0C\u4E0D\u6309\u6587\u4EF6\u6570\u91CF\u62C6\uFF1B\u5171\u4EAB\u63A5\u53E3/\u5F3A\u987A\u5E8F\u4F9D\u8D56\u7684\u5DE5\u4F5C\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u4E2A Agent \u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\uFF0C\u53EA\u4F20\u5B8C\u6210\u8BE5\u5B50\u4EFB\u52A1\u6240\u9700\u7684\u6700\u5C0F\u5DE5\u4F5C\u96C6\uFF08\u4E0A\u4E0B\u6587\u6700\u5C0F\u5316\uFF09\uFF0C\u4E25\u7981\u8F6C\u53D1\u65E0\u5173\u5386\u53F2\u4E0E\u65E5\u5FD7\uFF1B\u7236 Agent \u4FDD\u7559\u76EE\u6807\u3001\u5951\u7EA6\u3001\u96C6\u6210\u3001\u6700\u7EC8\u9A8C\u8BC1\u548C\u7528\u6237\u6C9F\u901A\u3002
202
+ **\u62C6\u5206\u4E0E\u6D3E\u53D1\u8D28\u91CF**\uFF1A\u6309\u72EC\u7ACB\u9886\u57DF\u62C6\uFF0C\u4E0D\u6309\u6587\u4EF6\u6570\u91CF\u62C6\uFF1B\u5171\u4EAB\u63A5\u53E3/\u5F3A\u987A\u5E8F\u4F9D\u8D56\u7684\u5DE5\u4F5C\u5148\u56FA\u5316\u5951\u7EA6\u518D\u6D3E\u53D1\uFF0C\u52FF\u8BA9\u591A\u4E2A Agent \u5404\u81EA\u731C\u540C\u4E00\u63A5\u53E3\u3002\u5B50\u4EFB\u52A1\u81EA\u5305\u542B\u3001\u8FB9\u754C\u6E05\u6670\uFF0C\u53EA\u4F20\u5B8C\u6210\u8BE5\u5B50\u4EFB\u52A1\u6240\u9700\u7684\u6700\u5C0F\u5DE5\u4F5C\u96C6\uFF08\u4E0A\u4E0B\u6587\u6700\u5C0F\u5316\uFF09\uFF0C\u4E25\u7981\u8F6C\u53D1\u65E0\u5173\u5386\u53F2\u4E0E\u65E5\u5FD7\uFF1B\u7236 Agent \u4FDD\u7559\u76EE\u6807\u3001\u5951\u7EA6\u3001\u96C6\u6210\u3001\u6700\u7EC8\u9A8C\u8BC1\u548C\u7528\u6237\u6C9F\u901A\u3002brief \u5BF9\u6D4B\u8BD5\u7C7B DoD \u5FC5\u987B\u9489\u6B7B\u57FA\u7EBF\u7CBE\u786E\u6570\u5B57\uFF08\u6D3E\u53D1\u524D\u4EB2\u81EA\u8DD1 bun test <scope> \u8BB0\u4E0B pass/fail\uFF0C\u5199\u660E\u65E2\u6709\u5931\u8D25\u5F52\u5C5E\uFF09\uFF0C\u9A8C\u6536\u65F6\u4EB2\u81EA\u590D\u8DD1\u5BF9\u7167\u2014\u2014fail \u8D85\u57FA\u7EBF\u5373\u6267\u884C\u8005\u5F15\u5165\u56DE\u5F52\uFF08flaky \u53E6\u884C\u7504\u522B\uFF09\uFF1B\u65E0\u6570\u5B57\u7684\u300C\u6D4B\u8BD5\u901A\u8FC7\u300D\u81EA\u8FF0\u6309\u672A\u9A8C\u8BC1\u5904\u7406\u3002
197
203
 
198
- **\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\uFF0Creviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\uFF1B\u65E0 review \u4E0D commit\u3002\u81EA\u52A8\u5FAA\u73AF\uFF1A\u6539\u5B8C \u2192 startAgentRun(ephemeral:true) \u6D3E reviewer \u5BA1 diff \u2192 \u6709 finding \u5219\u4FEE \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002review \u8BC1\u636E\u786C\u95E8\uFF1A\u4EC5\u5F53 reviewer \u8FD4\u56DE\u53EF\u8BFB\u7684\u6700\u7EC8\u6587\u672C\u4E14\u660E\u786E\u542B APPROVE\u3001\u65E0 CRITICAL/HIGH \u624D\u7B97\u901A\u8FC7\uFF1Bdone\u3001exit 0\u3001\u7A7A dialog\u3001messagesCount=0\u3001agentReply=null\u3001\u8D85\u65F6\u5747\u89C6\u4E3A\u672A\u5BA1\u67E5\uFF0C\u4E25\u7981\u63D0\u4EA4\u3002review context contract\uFF1A\u6D3E reviewer \u524D\u6309\u6539\u52A8\u8303\u56F4\u8BFB\u53D6 AGENTS.md\u3001docs/workflow.md\u3001\u5F53\u524D plan/progress\u3001\u547D\u4E2D\u7684 SKILL.md\u3001references\u3001\u6D89\u53CA\u4EA7\u54C1\u53D6\u820D\u65F6\u7684 docs/product-positioning.md\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\u3002\u5BA1\u67E5\u6E05\u5355\uFF1A\u53EF\u8BFB\u6027/\u53EF\u641C\u7D22\u6027\u3001\u53EF\u7EF4\u62A4\u6027/\u5220\u9664\u6210\u672C\u3001\u53EF\u7EC4\u5408\u6027/\u590D\u7528\u3001\u91CD\u590D\u5B9E\u73B0\u3001\u53EF\u5220\u9664\u4EE3\u7801\u3002\u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\u3002\u6D89\u53CA\u4ED3\u5E93\u6587\u4EF6\u5199\u5165\u5FC5\u987B\u7528\u72EC\u7ACB worktree\u3002\u4ED3\u5E93\u7EA7 plan / review / worktree \u7EAA\u5F8B\u4EE5 AGENTS.md \u4E3A\u51C6\u3002
204
+ **\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\uFF0Creviewer \u4E0D\u53EF\u662F\u672C\u6B21\u6539\u52A8\u7684\u4F5C\u8005\uFF08\u7F16\u6392\u8005\u4EE5\u81EA\u8EAB agent \u8EAB\u4EFD\u6D3E\u51FA\u7684\u5168\u65B0\u5B9E\u4F8B\u4E0D\u5171\u4EAB\u7F16\u6392\u8005\u4E0A\u4E0B\u6587\uFF0C\u4E0E\u4F5C\u8005\u8DE8\u6A21\u578B\u5BB6\u65CF\u65F6\u4E0D\u7B97\u300C\u81EA\u5DF1\u300D\uFF09\uFF1B\u5168\u90E8\u8DE8\u5BB6\u65CF\u901A\u9053\u4E0D\u53EF\u7528\u65F6\uFF0C\u540C\u6A21\u578B\u5BB6\u65CF\u7684\u6D3E\u53D1\u65B0\u5B9E\u4F8B\uFF08\u4E0A\u4E0B\u6587\u4ECD\u9694\u79BB\uFF09\u7ECF owner \u6388\u6743\u53EF\u4F5C\u964D\u7EA7 reviewer\uFF0Ctrailer \u6CE8\u660E\u5B9E\u9645\u5BA1\u67E5\u8005\u4E0E\u539F\u56E0\uFF1B\u65E0 review \u4E0D commit\u3002\u81EA\u52A8\u5FAA\u73AF\uFF1A\u6539\u5B8C \u2192 startAgentRun(ephemeral:true) \u6D3E reviewer \u5BA1 diff \u2192 \u6709 finding \u5219\u4FEE \u2192 \u590D\u5BA1\u76F4\u5230 APPROVE\uFF08\u65E0 CRITICAL/HIGH\uFF09\u624D\u63D0\u4EA4\uFF1BBLOCK \u5FC5\u4FEE\u3001WARNING \u62A5\u7528\u6237\u3002review \u8BC1\u636E\u786C\u95E8\uFF1A\u4EC5\u5F53 reviewer \u8FD4\u56DE\u53EF\u8BFB\u7684\u6700\u7EC8\u6587\u672C\u4E14\u660E\u786E\u542B APPROVE\u3001\u65E0 CRITICAL/HIGH \u624D\u7B97\u901A\u8FC7\uFF1Bdone\u3001exit 0\u3001\u7A7A dialog\u3001messagesCount=0\u3001agentReply=null\u3001\u8D85\u65F6\u5747\u89C6\u4E3A\u672A\u5BA1\u67E5\uFF0C\u4E25\u7981\u63D0\u4EA4\u3002review context contract\uFF1A\u6D3E reviewer \u524D\u6309\u6539\u52A8\u8303\u56F4\u8BFB\u53D6 AGENTS.md\u3001docs/workflow.md\u3001\u5F53\u524D plan/progress\u3001\u547D\u4E2D\u7684 SKILL.md\u3001references\u3001\u6D89\u53CA\u4EA7\u54C1\u53D6\u820D\u65F6\u7684 docs/product-positioning.md\uFF0C\u4EE5\u53CA touched files \u7684\u5B8C\u6574 diff\uFF0Cbrief \u91CC\u5217\u51FA\u5B9E\u9645\u52A0\u8F7D\u7684 context\u3002\u5BA1\u67E5\u6E05\u5355\uFF1A\u53EF\u8BFB\u6027/\u53EF\u641C\u7D22\u6027\u3001\u53EF\u7EF4\u62A4\u6027/\u5220\u9664\u6210\u672C\u3001\u53EF\u7EC4\u5408\u6027/\u590D\u7528\u3001\u91CD\u590D\u5B9E\u73B0\u3001\u53EF\u5220\u9664\u4EE3\u7801\u3002\u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\u3002\u6D89\u53CA\u4ED3\u5E93\u6587\u4EF6\u5199\u5165\u5FC5\u987B\u7528\u72EC\u7ACB worktree\u3002\u4ED3\u5E93\u7EA7 plan / review / worktree \u7EAA\u5F8B\u4EE5 AGENTS.md \u4E3A\u51C6\u3002
199
205
 
200
206
  **\u5371\u9669 / \u4E0D\u53EF\u9006\u64CD\u4F5C**\uFF1A
201
207
  - \u6D89\u53CA\u4E0D\u53EF\u9006\u64CD\u4F5C\uFF08\u4FEE\u6539\u6587\u4EF6\u3001\u5220\u9664\u6570\u636E\u3001\u53D1\u9001\u6D88\u606F\u3001\u751F\u6210\u6B63\u5F0F\u6587\u4EF6\u3001\u6267\u884C\u4EA4\u6613\u7B49\uFF09\u65F6\uFF0C\u4F18\u5148\u9884\u89C8\u6216\u5411\u7528\u6237\u786E\u8BA4\u3002
@@ -379,11 +385,48 @@ function toBareImageUrlMessages(messages) {
379
385
  });
380
386
  }
381
387
 
388
+ // packages/integrations/openai/providerBodyCompatibility.ts
389
+ var MOONSHOT_KIMI_K3_MODEL = "kimi-k3";
390
+ var isKimiK3ProviderModel = (provider, model) => {
391
+ const normalizedModel = asTrimmedLowercaseString(model);
392
+ if (asTrimmedLowercaseString(provider) === "moonshot") {
393
+ return normalizedModel === MOONSHOT_KIMI_K3_MODEL;
394
+ }
395
+ return isNoloHostedProvider(provider) && normalizedModel === PLATFORM_HOSTED_KIMI_K3_MODEL;
396
+ };
397
+ var normalizeChatCompletionsBodyForProvider = ({
398
+ body,
399
+ provider,
400
+ model
401
+ }) => {
402
+ const nextBody = { ...body, model };
403
+ const normalizedProvider = asTrimmedLowercaseString(provider);
404
+ if (normalizedProvider === "fireworks" && isFireworksKimiModel(model)) {
405
+ delete nextBody.reasoning;
406
+ delete nextBody.reasoning_effort;
407
+ }
408
+ if (isKimiK3ProviderModel(provider, model)) {
409
+ delete nextBody.temperature;
410
+ delete nextBody.top_p;
411
+ delete nextBody.frequency_penalty;
412
+ delete nextBody.presence_penalty;
413
+ if (typeof nextBody.max_tokens === "number") {
414
+ nextBody.max_completion_tokens = nextBody.max_tokens;
415
+ delete nextBody.max_tokens;
416
+ }
417
+ }
418
+ if (Array.isArray(nextBody.messages) && requiresBareImageUrl({ provider, model })) {
419
+ nextBody.messages = toBareImageUrlMessages(nextBody.messages);
420
+ }
421
+ return nextBody;
422
+ };
423
+
382
424
  export {
383
425
  buildIdentityBlock,
384
426
  buildRuntimeGuidanceBlocks,
385
427
  resolveToolGuidedSections,
386
428
  buildCurrentTimeBlock,
387
429
  requiresBareImageUrl,
388
- toBareImageUrlMessages
430
+ toBareImageUrlMessages,
431
+ normalizeChatCompletionsBodyForProvider
389
432
  };
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-DWLEOOGR.js";
4
4
  import {
5
5
  addContentAction
6
- } from "./chunk-MJWX4JQO.js";
6
+ } from "./chunk-3EEK7T3D.js";
7
7
  import {
8
8
  upload
9
- } from "./chunk-23KKIMD5.js";
9
+ } from "./chunk-WVGEBWA6.js";
10
10
  import {
11
11
  getRuntimeServerContext
12
12
  } from "./chunk-HHBXCRJS.js";
@@ -9,8 +9,15 @@ function resolveNoloHome(options = {}) {
9
9
  const env = options.env ?? process.env;
10
10
  return env.NOLO_HOME?.trim() || path.join(options.homeDir ?? homedir(), ".nolo");
11
11
  }
12
+ function resolveLocalDialogDbCandidates(options = {}) {
13
+ const candidates = [resolveServerDbPath(options)];
14
+ const noloHomeDb = path.join(resolveNoloHome(options), "data", "leveldb");
15
+ if (!candidates.includes(noloHomeDb)) candidates.push(noloHomeDb);
16
+ return candidates;
17
+ }
12
18
 
13
19
  export {
14
20
  resolveServerDbPath,
15
- resolveNoloHome
21
+ resolveNoloHome,
22
+ resolveLocalDialogDbCandidates
16
23
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  dialogMessageKey
3
- } from "./chunk-2WKUUY2E.js";
3
+ } from "./chunk-SVEUG45B.js";
4
4
  import {
5
5
  asOptionalFiniteNumber
6
6
  } from "./chunk-WWC7I6TA.js";