nolo-cli 0.49.0-alpha.1 → 0.49.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 (71) hide show
  1. package/{_executeModel-4BPV4B2U.js → _executeModel-KE4PQSZ3.js} +19 -19
  2. package/{agentDeleteCommand-KZSETRE3.js → agentDeleteCommand-Z67TJG3W.js} +10 -10
  3. package/{agentEmailCommands-C33KPOFP.js → agentEmailCommands-7LPIK7JE.js} +23 -23
  4. package/{agentListCommands-KVLURCS7.js → agentListCommands-5J2IM3IT.js} +12 -12
  5. package/{agentMachineCommands-ICOLSVID.js → agentMachineCommands-YXH6FXUQ.js} +11 -11
  6. package/{agentRecordCommands-OWKWVY3Y.js → agentRecordCommands-GZLCDVUS.js} +22 -22
  7. package/{agentRunCommand-FINKBYUN.js → agentRunCommand-WYH5Q54Q.js} +22 -22
  8. package/{agentRuntimeLocal-SIQYQGSK.js → agentRuntimeLocal-A6EF3RUY.js} +10 -10
  9. package/{agentSlice-VD3BAJAU.js → agentSlice-ARTDF6VD.js} +1 -1
  10. package/{appDeleteCommands-LSIIQFYN.js → appDeleteCommands-V2B7ZCLC.js} +10 -10
  11. package/{appDeployCommands-VYGKN7HU.js → appDeployCommands-AXQU44RD.js} +10 -10
  12. package/{appDeployStatusCommands-ODFHFUR7.js → appDeployStatusCommands-FWGSC2UM.js} +10 -10
  13. package/{appGetCommands-DPQY67UZ.js → appGetCommands-67R3RFZK.js} +10 -10
  14. package/{appListCommands-EFXENXWX.js → appListCommands-TTASJPGV.js} +10 -10
  15. package/{authCommand-WLWOEVYI.js → authCommand-QOPOEYEK.js} +7 -7
  16. package/{chatQueueReduxAdapter-N5432EP2.js → chatQueueReduxAdapter-6CAHUQ4O.js} +7 -7
  17. package/{chunk-Y7TGWSUN.js → chunk-56W233KG.js} +1 -1
  18. package/{chunk-C2WF2OY7.js → chunk-5WADL4O7.js} +1 -1
  19. package/{chunk-7M72YPM2.js → chunk-6SMMK7MD.js} +2 -2
  20. package/{chunk-4ZL2KBI7.js → chunk-757BGY6Y.js} +1 -1
  21. package/{chunk-IERBSHMR.js → chunk-AVKUDHJO.js} +3 -3
  22. package/{chunk-VKSBVRGP.js → chunk-CVT7L2WZ.js} +1 -1
  23. package/{chunk-MCX2LX27.js → chunk-EURF2SV6.js} +11 -11
  24. package/{chunk-7GRFFW7R.js → chunk-EXDR5D6X.js} +3 -3
  25. package/{chunk-AZ6DT2UD.js → chunk-GBADO3SM.js} +1 -1
  26. package/{chunk-XB7ACJFH.js → chunk-GDGIEGHV.js} +2 -2
  27. package/{chunk-QDNFRWAX.js → chunk-GFD7TIZU.js} +2 -2
  28. package/{chunk-QAG4ZQZ7.js → chunk-GFUOVFQA.js} +1 -1
  29. package/{chunk-RPO6WAZV.js → chunk-HCMFFI2G.js} +2 -2
  30. package/{chunk-4YAMAMNA.js → chunk-HPZL4IBN.js} +11 -10
  31. package/{chunk-S3HB4CQY.js → chunk-IKSFDJXB.js} +112 -19
  32. package/{chunk-W3RZLXMA.js → chunk-IKTHA3JH.js} +2 -2
  33. package/{chunk-VZGLZTG7.js → chunk-IRJVFYOH.js} +255 -79
  34. package/{chunk-6L6UPZNH.js → chunk-K524MUQC.js} +8 -8
  35. package/{chunk-HMMOAG2I.js → chunk-NN3AMBY3.js} +7 -4
  36. package/{chunk-BO3YFOZR.js → chunk-QDHZCAH3.js} +1 -1
  37. package/{chunk-33BBDA67.js → chunk-QUCSAM43.js} +106 -34
  38. package/{chunk-Z7A54NFZ.js → chunk-RU5D3B22.js} +1 -1
  39. package/{chunk-JBL24PK6.js → chunk-SP3DPVBH.js} +2 -2
  40. package/{chunk-F22JQTSX.js → chunk-SW7RCUGA.js} +2 -2
  41. package/{chunk-3YVCM5PE.js → chunk-U5Z7LFZF.js} +1 -1
  42. package/{chunk-OZ4JNDIL.js → chunk-UQWFIWHX.js} +1 -1
  43. package/{chunk-AV4Z57LV.js → chunk-VRJUIUIY.js} +2 -2
  44. package/{chunk-72COHDZR.js → chunk-WKOEOQCI.js} +13 -13
  45. package/{chunk-VFN256RI.js → chunk-WL3UOGYO.js} +25 -0
  46. package/{chunk-5JXRVJAC.js → chunk-WX5E6HZS.js} +3 -3
  47. package/{createAgentAutomationAction-IHKV53QC.js → createAgentAutomationAction-7BBF5YXN.js} +8 -8
  48. package/{createDialogAction-4ARDCKPP.js → createDialogAction-B5URPHP4.js} +9 -9
  49. package/{createPageAction-GQOCPICU.js → createPageAction-ISJKM5Q3.js} +8 -8
  50. package/{dialogCommands-YOTCP26N.js → dialogCommands-XHH4MVA4.js} +10 -10
  51. package/{dialogSlice-NX26W623.js → dialogSlice-NRAN5X7F.js} +7 -7
  52. package/{docCreateCommands-JVAMHES4.js → docCreateCommands-FUN2Z7HQ.js} +10 -10
  53. package/{docDeleteCommands-LW5DWICT.js → docDeleteCommands-OZDPFXPF.js} +10 -10
  54. package/{docReadCommands-AQOZS3I5.js → docReadCommands-FIPK7LE3.js} +10 -10
  55. package/{docStore-YAE7GYHZ.js → docStore-LUS7SWC3.js} +9 -9
  56. package/{docUpdateCommands-FFGGX5RG.js → docUpdateCommands-BZ5GKAN4.js} +10 -10
  57. package/{getPricing-JNOCWYDH.js → getPricing-HAU62AFM.js} +3 -3
  58. package/{handleSendMessageAction-7YKH4UBI.js → handleSendMessageAction-RA4OD2ZH.js} +7 -7
  59. package/index.js +47 -47
  60. package/{machineCommands-X7YMGFMB.js → machineCommands-WDAYEFBE.js} +22 -22
  61. package/{machineWsRunDispatch-KWWJ4HTI.js → machineWsRunDispatch-TPQ2FQVS.js} +22 -22
  62. package/{models-N4NXQ44D.js → models-4QF4BJVY.js} +2 -2
  63. package/package.json +1 -1
  64. package/{readlineWorkspace-GEZVQ7IM.js → readlineWorkspace-HN44KGIF.js} +198 -96
  65. package/{runAgentClientLoop-6NCW5AS6.js → runAgentClientLoop-ZYUI22EA.js} +17 -17
  66. package/{spaceCommands-7MJVL4XR.js → spaceCommands-OJ2567D4.js} +10 -10
  67. package/{spaceSlice-JVVDCGA3.js → spaceSlice-F7JCOZEF.js} +8 -8
  68. package/{streamAgentChatTurn-UAKCHWFN.js → streamAgentChatTurn-FNFMMGNN.js} +20 -20
  69. package/{tools-ROUITGAR.js → tools-QCDR3UMD.js} +12 -12
  70. package/{tuiSummaryLlmCaller-U4EGD2SX.js → tuiSummaryLlmCaller-LCGT62QC.js} +5 -5
  71. package/{updateDialogTitleAction-R4M6ZXCX.js → updateDialogTitleAction-Y3OGJWDB.js} +8 -8
@@ -11,7 +11,7 @@ import {
11
11
  PLATFORM_HOSTED_KIMI_K3_MODEL,
12
12
  isFireworksKimiModel,
13
13
  isNoloHostedProvider
14
- } from "./chunk-VFN256RI.js";
14
+ } from "./chunk-WL3UOGYO.js";
15
15
  import {
16
16
  asTrimmedLowercaseString
17
17
  } from "./chunk-QSJ3HFEF.js";
@@ -156,9 +156,11 @@ var MENU_USAGE_INSTRUCTIONS = `--- \u4EA4\u4E92\u8BF4\u660E ---
156
156
  \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
157
157
 
158
158
  ## \u4F55\u65F6\u8C03\u7528 ask_user
159
- \u9ED8\u8BA4\u76F4\u63A5\u884C\u52A8\uFF1A\u80FD\u57FA\u4E8E\u73B0\u6709\u4E0A\u4E0B\u6587\u7ED9\u51FA\u9AD8\u8D28\u91CF\u7B54\u6848\u65F6\u5C31\u76F4\u63A5\u505A\uFF0C\u4E0D\u8981\u4E3A\u4E86\u95EE\u800C\u95EE\u3002\u5224\u636E\u662F**\u7528\u6237\u662F\u5426\u9700\u8981\u4E3A\u8FD9\u4E2A\u9009\u62E9\u627F\u62C5\u540E\u679C**\uFF08\u82B1\u94B1\u3001\u6CC4\u9732\u6570\u636E\u3001\u52A8\u7EBF\u4E0A\u3001\u4E0D\u53EF\u56DE\u6EDA\uFF1B\u6216\u8BE5\u9009\u62E9\u7EAF\u5C5E\u4E2A\u4EBA\u53E3\u5473\u3001\u65E0\u4ECE\u63A8\u65AD\uFF09\uFF0C\u800C\u4E0D\u662F"\u8FD9\u4E2A\u9009\u62E9\u4F1A\u4E0D\u4F1A\u5F71\u54CD\u540E\u7EED\u8D70\u5411"\u3002\u4EC5\u4E09\u79CD\u60C5\u51B5\u8C03\u7528\uFF1A1\uFF09\u9700\u6C42\u5BBD\u6CDB\u6216\u6A21\u7CCA\uFF0C\u7ED9\u51FA 2\uFF5E5 \u4E2A\u4E92\u65A5\u4E14\u90FD\u5408\u7406\u7684\u65B9\u5411\u8BA9\u7528\u6237\u5148\u9009\uFF1B2\uFF09\u5206\u53C9\u7684\u540E\u679C\u7531\u7528\u6237\u627F\u62C5\u4E14\u65E0\u6CD5\u4ECE\u4E0A\u4E0B\u6587\u63A8\u65AD\u5176\u504F\u597D\uFF1B3\uFF09\u65B0\u4F1A\u8BDD\u5F00\u5934\u9700\u8981\u6309\u7528\u6237\u753B\u50CF\u505A\u529F\u80FD\u5BFC\u822A\u6216\u5F15\u5BFC\u3002
159
+ \u9ED8\u8BA4\u76F4\u63A5\u884C\u52A8\uFF08\u65E5\u5E38\u5C0F\u4E8B\uFF09\uFF1A\u95EE\u7B54\u3001\u5355\u6587\u4EF6\u5C0F\u6539\u3001\u6267\u884C\u987A\u5E8F/\u8DEF\u5F84\u9009\u62E9\u7B49\u80FD\u57FA\u4E8E\u73B0\u6709\u4E0A\u4E0B\u6587\u7ED9\u51FA\u9AD8\u8D28\u91CF\u7B54\u6848\u7684\u65E5\u5E38\u5C0F\u4E8B\uFF0C\u76F4\u63A5\u505A\uFF0C\u4E0D\u8981\u4E3A\u4E86\u95EE\u800C\u95EE\u3002\u5224\u636E\u662F**\u7528\u6237\u662F\u5426\u9700\u8981\u4E3A\u8FD9\u4E2A\u9009\u62E9\u627F\u62C5\u540E\u679C**\uFF08\u82B1\u94B1\u3001\u6CC4\u9732\u6570\u636E\u3001\u52A8\u7EBF\u4E0A\u3001\u4E0D\u53EF\u56DE\u6EDA\uFF1B\u6216\u8BE5\u9009\u62E9\u7EAF\u5C5E\u4E2A\u4EBA\u53E3\u5473\u3001\u65E0\u4ECE\u63A8\u65AD\uFF09\uFF0C\u800C\u4E0D\u662F"\u8FD9\u4E2A\u9009\u62E9\u4F1A\u4E0D\u4F1A\u5F71\u54CD\u540E\u7EED\u8D70\u5411"\u3002\u4EC5\u4E09\u79CD\u60C5\u51B5\u8C03\u7528\uFF1A1\uFF09\u9700\u6C42\u5BBD\u6CDB\u6216\u6A21\u7CCA\uFF0C\u7ED9\u51FA 2\uFF5E5 \u4E2A\u4E92\u65A5\u4E14\u90FD\u5408\u7406\u7684\u65B9\u5411\u8BA9\u7528\u6237\u5148\u9009\uFF1B2\uFF09\u5206\u53C9\u7684\u540E\u679C\u7531\u7528\u6237\u627F\u62C5\u4E14\u65E0\u6CD5\u4ECE\u4E0A\u4E0B\u6587\u63A8\u65AD\u5176\u504F\u597D\uFF1B3\uFF09\u65B0\u4F1A\u8BDD\u5F00\u5934\u9700\u8981\u6309\u7528\u6237\u753B\u50CF\u505A\u529F\u80FD\u5BFC\u822A\u6216\u5F15\u5BFC\u3002
160
160
 
161
- \u4E0D\u8981\u95EE\u7684\uFF08\u5C5E\u4E8E\u4F60\u7684\u804C\u8D23\uFF0C\u95EE\u51FA\u6765\u662F\u628A\u672C\u8BE5\u4F60\u505A\u7684\u5224\u65AD\u63A8\u7ED9\u7528\u6237\uFF09\uFF1A\u5148\u505A\u54EA\u4E2A\u4EFB\u52A1\u3001\u6309\u4EC0\u4E48\u987A\u5E8F\u63A8\u8FDB\u3001\u8981\u4E0D\u8981\u987A\u624B\u4FEE\u67D0\u5904\u3001\u65E5\u5E38\u5B9E\u73B0\u7EC6\u8282\u7528\u54EA\u79CD\u5199\u6CD5\u3001\u8981\u4E0D\u8981\u518D\u68C0\u67E5\u4E00\u904D\u3002\u8FD9\u4E9B\u81EA\u5DF1\u5B9A\uFF0C\u505A\u5B8C\u5728\u56DE\u590D\u91CC\u8BF4\u660E\u7406\u7531\u5373\u53EF\u3002\u6CE8\u610F\u533A\u5206\uFF1A\u67B6\u6784\u9009\u578B\u3001\u6280\u672F\u6808\u3001\u6570\u636E\u5B58\u50A8\u65B9\u6848\u7B49\u957F\u671F\u4E14\u96BE\u56DE\u6EDA\u7684\u6280\u672F\u51B3\u7B56\u4E0D\u5728\u6B64\u5217\u2014\u2014\u5B83\u4EEC\u7684\u540E\u679C\u7531\u7528\u6237\u627F\u62C5\uFF0C\u6309\u4E0A\u8FF0\u7B2C 2 \u6761\u8BE5\u95EE\u5C31\u95EE\u3002\u7528\u6237\u76EE\u6807\u5DF2\u5177\u4F53\u6E05\u6670\u65F6\uFF0C\u5373\u4FBF\u5F62\u5F0F\u4E0A\u6EE1\u8DB3\u524D\u8FF0\u4E09\u79CD\u60C5\u51B5\u4E5F\u4F18\u5148\u76F4\u63A5\u56DE\u7B54\uFF0C\u4E0D\u5F3A\u884C\u5F39\u83DC\u5355\uFF1B\u5C31\u540C\u4E00\u4EF6\u4E8B\u7B2C\u4E8C\u6B21\u5F39\u83DC\u5355\u524D\uFF0C\u5148\u81EA\u68C0\u5224\u636E\u662F\u4E0D\u662F\u7528\u9519\u4E86\u3002
161
+ \u89C4\u6A21\u5316\u5F00\u5DE5\u5148\u786E\u8BA4\uFF1A\u4EFB\u52A1\u89C4\u6A21\u8D85\u51FA\u65E5\u5E38\u5C0F\u4E8B\uFF08\u9884\u8BA1\u4FEE\u6539 \u22653 \u4E2A\u6587\u4EF6\u3001\u65B0\u589E\u5B8C\u6574\u529F\u80FD/\u5DE5\u4F5C\u6D41\u3001\u957F\u65F6\u8FD0\u884C\u4EFB\u52A1\u3001\u4EA7\u51FA\u6B63\u5F0F\u4EA4\u4ED8\u7269\uFF09\u4E14\u7528\u6237\u53EA\u7528\u4E00\u4E24\u53E5\u8BDD\u5E26\u8FC7\u9700\u6C42\u65F6\uFF0C\u5148\u7ED9\u4E00\u6BB5\u7B80\u77ED\u8BA1\u5212\uFF08\u505A\u4EC0\u4E48 / \u4E0D\u505A\u4EC0\u4E48 / \u4EA4\u4ED8\u4EC0\u4E48\uFF09\u7B49\u7528\u6237\u786E\u8BA4\uFF0C\u6216\u7528 ask_user \u7ED9\u51FA\u65B9\u6848\u9009\u9879\u3002\u5B81\u53EF\u5F00\u5DE5\u524D\u591A\u82B1\u4E00\u8F6E\u786E\u8BA4\uFF0C\u4E0D\u8981\u4EA4\u4ED8\u540E\u8FD4\u5DE5\u3002
162
+
163
+ \u4E0D\u8981\u95EE\u7684\uFF08\u5C5E\u4E8E\u4F60\u7684\u804C\u8D23\uFF0C\u95EE\u51FA\u6765\u662F\u628A\u672C\u8BE5\u4F60\u505A\u7684\u5224\u65AD\u63A8\u7ED9\u7528\u6237\uFF09\uFF1A\u5148\u505A\u54EA\u4E2A\u4EFB\u52A1\u3001\u6309\u4EC0\u4E48\u987A\u5E8F\u63A8\u8FDB\u3001\u8981\u4E0D\u8981\u987A\u624B\u4FEE\u67D0\u5904\u3001\u65E5\u5E38\u5B9E\u73B0\u7EC6\u8282\u7528\u54EA\u79CD\u5199\u6CD5\u3001\u8981\u4E0D\u8981\u518D\u68C0\u67E5\u4E00\u904D\u3002\u8FD9\u4E9B\u81EA\u5DF1\u5B9A\uFF0C\u505A\u5B8C\u5728\u56DE\u590D\u91CC\u8BF4\u660E\u7406\u7531\u5373\u53EF\u3002\u8FB9\u754C\uFF1A\u4E0A\u9762\u8FD9\u4E9B\uFF08\u5148\u505A\u54EA\u4E2A\u4EFB\u52A1\u3001\u6309\u4EC0\u4E48\u987A\u5E8F\u63A8\u8FDB\u7B49\uFF09\u5C5E\u4E8E\u987A\u5E8F\u4E0E\u8DEF\u5F84\u9009\u62E9\uFF0C\u81EA\u5B9A\u5373\u53EF\uFF1B**\u4EA4\u4ED8\u8303\u56F4\uFF08\u505A\u4EC0\u4E48\u3001\u505A\u5230\u4EC0\u4E48\u7A0B\u5EA6\u3001\u4EA4\u4ED8\u4EC0\u4E48\u4EA7\u7269\uFF09\u4E0D\u5C5E\u6B64\u7C7B**\u2014\u2014\u8303\u56F4\u6A21\u7CCA\u65F6\u8BE5\u95EE\u5C31\u95EE\u3002\u6CE8\u610F\u533A\u5206\uFF1A\u67B6\u6784\u9009\u578B\u3001\u6280\u672F\u6808\u3001\u6570\u636E\u5B58\u50A8\u65B9\u6848\u7B49\u957F\u671F\u4E14\u96BE\u56DE\u6EDA\u7684\u6280\u672F\u51B3\u7B56\u4E0D\u5728\u6B64\u5217\u2014\u2014\u5B83\u4EEC\u7684\u540E\u679C\u7531\u7528\u6237\u627F\u62C5\uFF0C\u6309\u4E0A\u8FF0\u7B2C 2 \u6761\u8BE5\u95EE\u5C31\u95EE\u3002\u7528\u6237\u76EE\u6807\u5DF2\u5177\u4F53\u6E05\u6670\u65F6\uFF0C\u5373\u4FBF\u5F62\u5F0F\u4E0A\u6EE1\u8DB3\u524D\u8FF0\u4E09\u79CD\u60C5\u51B5\u4E5F\u4F18\u5148\u76F4\u63A5\u56DE\u7B54\uFF0C\u4E0D\u5F3A\u884C\u5F39\u83DC\u5355\uFF1B\u5C31\u540C\u4E00\u4EF6\u4E8B\u7B2C\u4E8C\u6B21\u5F39\u83DC\u5355\u524D\uFF0C\u5148\u81EA\u68C0\u5224\u636E\u662F\u4E0D\u662F\u7528\u9519\u4E86\u3002
162
164
 
163
165
  ## \u8C03\u7528\u89C4\u8303
164
166
  - \u5148\u5728\u666E\u901A\u56DE\u590D\u6587\u672C\u91CC\u5199\u6E05\u80CC\u666F\u3001\u7406\u7531\u4E0E\u6743\u8861\u518D\u8C03\u7528\u5DE5\u5177\uFF1B\u65E0\u660E\u786E\u63A8\u8350\u9879\u65F6\uFF0C\u5FC5\u987B\u9010\u4E2A\u7B80\u8FF0\u9009\u9879\u4F18\u7F3A\u70B9\u5E2E\u52A9\u6743\u8861\uFF1B
@@ -203,8 +205,9 @@ ${AGENT_SELECTION_PRIORITY_INSTRUCTIONS}
203
205
 
204
206
  **\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
205
207
 
208
+ --- \u786E\u8BA4\u8FB9\u754C ---
206
209
  **\u5371\u9669 / \u4E0D\u53EF\u9006\u64CD\u4F5C**\uFF1A
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
210
+ - \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**\u6216\u9AD8\u6210\u672C\u52A8\u4F5C**\uFF08\u5927\u89C4\u6A21\u91CD\u6784/\u6279\u91CF\u6539\u52A8\u3001\u957F\u65F6\u8FD0\u884C\u3001\u5927\u91CF token \u6D88\u8017\uFF09\u65F6\uFF0C\u4F18\u5148\u9884\u89C8\u6216\u5411\u7528\u6237\u786E\u8BA4\u3002
208
211
  - \u5DE5\u5177\u8FD4\u56DE"\u9884\u89C8"\u6216"\u5F85\u786E\u8BA4"\u72B6\u6001\u65F6\uFF0C\u6682\u505C\u8FDB\u4E00\u6B65\u81EA\u52A8\u4FEE\u6539\uFF0C\u7B49\u7528\u6237\u660E\u786E\u786E\u8BA4\u540E\u518D\u7EE7\u7EED\u3002\u4E0D\u8981\u5728\u7528\u6237\u672A\u786E\u8BA4\u524D\u8FDE\u7EED\u53D1\u51FA\u591A\u6B21\u7834\u574F\u6027\u4FEE\u6539\u3002
209
212
 
210
213
  \u81EA\u68C0\uFF1A\u5148\u5B8C\u6210\u4EFB\u52A1\u7406\u89E3\u4E0E\u5206\u6863\uFF1F\u53EA\u4FDD\u7559\u5F53\u524D\u52A8\u4F5C\u9700\u8981\u7684\u5DE5\u5177/\u5386\u53F2/\u6587\u4EF6\u5185\u5BB9\uFF1F\u6D3E\u53D1\u7684\u8BDD\u5B50\u4EFB\u52A1\u8FB9\u754C\u548C\u9A8C\u6536\u8BC1\u636E\u5199\u6E05\u4E86\u5417\uFF1F\u82E5\u6536\u5230\u300C\u5B50\u5BF9\u8BDD\u7981\u6B62\u518D\u521B\u5EFA\u5B59\u5BF9\u8BDD\u300D\u9519\u8BEF\uFF0C\u8BF4\u660E\u4F60\u5DF2\u662F\u5B50\u5BF9\u8BDD\uFF0C\u7981\u6B62\u518D\u6D3E\u53D1\uFF0C\u628A\u5DF2\u5B8C\u6210\u7684\u7ED3\u679C\u8FD4\u56DE\u7ED9\u7236\u5BF9\u8BDD\u5373\u53EF\u3002`;
@@ -10,7 +10,7 @@ import {
10
10
  platformHostedModels,
11
11
  toCnyCredits,
12
12
  zaiModels
13
- } from "./chunk-VFN256RI.js";
13
+ } from "./chunk-WL3UOGYO.js";
14
14
 
15
15
  // packages/integrations/anthropic/anthropicModels.ts
16
16
  var anthropicModels = [
@@ -4,7 +4,7 @@ import {
4
4
  refreshAntigravityOAuthToken,
5
5
  refreshOpenAiCodexToken,
6
6
  xaiRefresh
7
- } from "./chunk-3YVCM5PE.js";
7
+ } from "./chunk-U5Z7LFZF.js";
8
8
  import {
9
9
  defaultLoopbackRequest
10
10
  } from "./chunk-EADNWBAZ.js";
@@ -56,7 +56,7 @@ import {
56
56
  import {
57
57
  inlineImageUrlsForCustomProvider,
58
58
  prepareTools
59
- } from "./chunk-RPO6WAZV.js";
59
+ } from "./chunk-HCMFFI2G.js";
60
60
  import {
61
61
  getServerProviderSecret
62
62
  } from "./chunk-HS7MLR74.js";
@@ -65,7 +65,7 @@ import {
65
65
  isAntigravityOAuthAgent,
66
66
  readAntigravityProjectId,
67
67
  resolveAntigravityCloudCodeBaseUrl
68
- } from "./chunk-4ZL2KBI7.js";
68
+ } from "./chunk-757BGY6Y.js";
69
69
  import {
70
70
  deleteMemoryFunctionSchema,
71
71
  readXPostFunc,
@@ -75,7 +75,7 @@ import {
75
75
  rememberMemoryFunctionSchema,
76
76
  resolveAgentRequiredPackIds,
77
77
  setTodoListFunc
78
- } from "./chunk-72COHDZR.js";
78
+ } from "./chunk-WKOEOQCI.js";
79
79
  import {
80
80
  fetchWithTransientRetry,
81
81
  isTransientFetchError
@@ -98,13 +98,13 @@ import {
98
98
  prepareTokenUsageData,
99
99
  resolveBuiltinPlatformAgentConfig,
100
100
  runKeyed
101
- } from "./chunk-MCX2LX27.js";
101
+ } from "./chunk-EURF2SV6.js";
102
102
  import {
103
103
  BUILTIN_TITLE_LLM_CONFIG
104
104
  } from "./chunk-EVBFYPDC.js";
105
105
  import {
106
106
  fetchServerSyncedCredential
107
- } from "./chunk-5JXRVJAC.js";
107
+ } from "./chunk-WX5E6HZS.js";
108
108
  import {
109
109
  require_date_fns
110
110
  } from "./chunk-M76ECQRD.js";
@@ -131,6 +131,7 @@ import {
131
131
  codexStreamFailureStatus,
132
132
  createHybridRecordStore,
133
133
  createLocalWorkspaceToolExecutors,
134
+ evaluateFileWritePolicy,
134
135
  executeLocalToolWithPolicy,
135
136
  executeOpenAiCompatibleChatCompletion,
136
137
  filterRetainedLedgerRecords,
@@ -143,7 +144,7 @@ import {
143
144
  parseSyncServersEnv,
144
145
  resolveOpenAiCompatibleProviderConfig,
145
146
  summarizeToolArguments
146
- } from "./chunk-S3HB4CQY.js";
147
+ } from "./chunk-IKSFDJXB.js";
147
148
  import {
148
149
  buildPlatformChatCompletionRequest,
149
150
  canUsePlatformChatProvider,
@@ -155,18 +156,18 @@ import {
155
156
  resolvePlatformChatProviderConfig,
156
157
  shouldUsePlatformChatProvider,
157
158
  streamSseDataValues
158
- } from "./chunk-XB7ACJFH.js";
159
+ } from "./chunk-GDGIEGHV.js";
159
160
  import {
160
161
  resolveAgentRuntimeConfigFromRecord,
161
162
  resolveHistoricalToolContentCap
162
- } from "./chunk-VKSBVRGP.js";
163
+ } from "./chunk-CVT7L2WZ.js";
163
164
  import {
164
165
  convertMessagesToResponsesInput,
165
166
  toResponsesTools
166
167
  } from "./chunk-6BYAXNH5.js";
167
168
  import {
168
169
  resolvePlatformAuthToken
169
- } from "./chunk-JBL24PK6.js";
170
+ } from "./chunk-SP3DPVBH.js";
170
171
  import {
171
172
  buildNoloWorkspaceOpenAiTools,
172
173
  parseNoloWorkspaceToolArguments,
@@ -198,7 +199,7 @@ import {
198
199
  } from "./chunk-FD36SCCD.js";
199
200
  import {
200
201
  isAdaptiveThinkingModelId
201
- } from "./chunk-BO3YFOZR.js";
202
+ } from "./chunk-QDHZCAH3.js";
202
203
  import {
203
204
  compactWhitespace
204
205
  } from "./chunk-DWLEOOGR.js";
@@ -472,8 +473,12 @@ var STRINGS = {
472
473
  zh: "[nolo] \u5F53\u524D agent \u4F3C\u4E4E\u989D\u5EA6/\u901F\u7387\u53D7\u9650\uFF08429\uFF09\u3002\n\u53EF\u4EE5\u7528 /agent \u5207\u6362\u5230\u5176\u4ED6 agent \u540E\u7EE7\u7EED\uFF0C\u540C\u4E00\u5BF9\u8BDD\u4F1A\u4FDD\u7559\u4E0A\u4E0B\u6587\u3002"
473
474
  },
474
475
  balanceExhaustedHint: {
475
- en: '[nolo] Insufficient balance. Your message is saved in this dialog \u2014 top up, then send again or say "continue".',
476
- zh: "[nolo] \u4F59\u989D\u4E0D\u8DB3\u3002\u4F60\u521A\u53D1\u7684\u8BDD\u5DF2\u4FDD\u5B58\u5728\u5F53\u524D\u5BF9\u8BDD\u91CC\u2014\u2014\u5145\u503C\u540E\u76F4\u63A5\u518D\u8BF4\u4E00\u53E5\u6216\u8BF4\u300C\u7EE7\u7EED\u300D\u5373\u53EF\uFF0C\u4E0D\u4F1A\u4E22\u4E0A\u4E0B\u6587\u3002"
476
+ en: '[nolo] Your message is saved in this dialog \u2014 top up, then send again or say "continue" to pick up where you left off.',
477
+ zh: "[nolo] \u4F60\u521A\u53D1\u7684\u8BDD\u5DF2\u4FDD\u5B58\u5728\u5F53\u524D\u5BF9\u8BDD\u91CC\u2014\u2014\u5145\u503C\u540E\u76F4\u63A5\u518D\u8BF4\u4E00\u53E5\u6216\u8BF4\u300C\u7EE7\u7EED\u300D\u5373\u53EF\u63A5\u7740\u804A\uFF0C\u4E0D\u4F1A\u4E22\u4E0A\u4E0B\u6587\u3002"
478
+ },
479
+ balanceInsufficientReason: {
480
+ en: "Insufficient balance: requires > {required}, current balance {current}.",
481
+ zh: "\u4F59\u989D\u4E0D\u8DB3\uFF1A\u9700\u8981\u4F59\u989D > {required}\uFF0C\u5F53\u524D {current}\u3002"
477
482
  },
478
483
  dialogPreservedHint: {
479
484
  en: '[nolo] This turn failed, but the dialog is kept. Send another message (or say "continue") to keep going in the same conversation.',
@@ -635,6 +640,12 @@ var STRINGS = {
635
640
  en: "Log tail:",
636
641
  zh: "\u65E5\u5FD7\u5C3E\u90E8\uFF1A"
637
642
  },
643
+ // Normal-mode safe projection: the raw errorMessage/logLines of a failed run
644
+ // stay in pro/verbose; normal mode names the failure and points at pro.
645
+ runDiagnosticsHidden: {
646
+ en: "run failed \u2014 full diagnostics in pro mode",
647
+ zh: "\u8FD0\u884C\u5931\u8D25\u2014\u2014\u5B8C\u6574\u8BCA\u65AD\u89C1 pro \u6A21\u5F0F"
648
+ },
638
649
  runsListLabel: {
639
650
  en: "Runs ({0})",
640
651
  zh: "\u8FD0\u884C ({0})"
@@ -912,10 +923,10 @@ var STRINGS = {
912
923
  runtimeUsage: { en: "Usage: /runtime <auto|local|server>", zh: "\u7528\u6CD5\uFF1A/runtime <auto|local|server>" },
913
924
  runtimeSet: { en: "Runtime: {0}", zh: "\u8FD0\u884C\u6A21\u5F0F\uFF1A{0}" },
914
925
  toolsCurrent: {
915
- en: "Tool display: {0} (hide | compact | verbose)",
916
- zh: "\u5DE5\u5177\u663E\u793A\uFF1A{0}\uFF08hide | compact | verbose\uFF09"
926
+ en: "Tool display: {0} (normal | pro | hide | verbose)",
927
+ zh: "\u5DE5\u5177\u663E\u793A\uFF1A{0}\uFF08\u666E\u901A normal | \u4E13\u4E1A pro | hide | verbose\uFF09"
917
928
  },
918
- toolsUsage: { en: "Usage: /tools <hide|compact|verbose>", zh: "\u7528\u6CD5\uFF1A/tools <hide|compact|verbose>" },
929
+ toolsUsage: { en: "Usage: /tools <normal|pro|hide|verbose>", zh: "\u7528\u6CD5\uFF1A/tools <normal|pro|hide|verbose>" },
919
930
  toolsSet: { en: "Tool display: {0}", zh: "\u5DE5\u5177\u663E\u793A\uFF1A{0}" },
920
931
  thinkingCurrent: {
921
932
  en: "Thinking display: {0} (show | hide)",
@@ -1065,6 +1076,7 @@ Use /switch, /switch list, /switch minimax-m3, or a full agent key.`,
1065
1076
  en: "Press Enter to run it now. Follow any prompts below, or Ctrl+C to cancel.",
1066
1077
  zh: "\u6309 Enter \u7ACB\u5373\u6267\u884C\uFF0C\u6309\u4E0B\u65B9\u63D0\u793A\u64CD\u4F5C\uFF0C\u6216\u6309 Ctrl+C \u53D6\u6D88\u3002"
1067
1078
  },
1079
+ actionGateConfirmHint: { en: "Enter=approve, n=cancel (or type y/yes).", zh: "Enter=\u6279\u51C6\uFF0Cn=\u53D6\u6D88\uFF08\u4E5F\u53EF\u8F93\u5165 y/yes\uFF09\u3002" },
1068
1080
  actionGateInteractiveTitle: {
1069
1081
  en: "This command requires an interactive terminal.",
1070
1082
  zh: "\u8BE5\u547D\u4EE4\u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF"
@@ -1090,8 +1102,9 @@ Use /switch, /switch list, /switch minimax-m3, or a full agent key.`,
1090
1102
  function t(key, ...params) {
1091
1103
  const text = STRINGS[key][currentLocale];
1092
1104
  if (params.length === 0) return text;
1093
- return text.replace(/\{(\d+)\}/g, (match, index) => {
1094
- const replacement = params[Number(index)];
1105
+ return text.replace(/\{(\d+|required|current)\}/g, (match, name) => {
1106
+ const index = name === "required" ? 0 : name === "current" ? 1 : Number(name);
1107
+ const replacement = params[index];
1095
1108
  return replacement === void 0 ? match : replacement;
1096
1109
  });
1097
1110
  }
@@ -7775,6 +7788,7 @@ async function streamCursorChat(messages, options) {
7775
7788
  const execCtx = {
7776
7789
  tools: buildMcpToolDefinitions(options.tools),
7777
7790
  executeTool: options.executeTool,
7791
+ ...options.onActionGate ? { onActionGate: options.onActionGate } : {},
7778
7792
  ...options.searchWorkspace ? { searchWorkspace: options.searchWorkspace } : {},
7779
7793
  ...options.listWorkspaceEntries ? { listWorkspaceEntries: options.listWorkspaceEntries } : {},
7780
7794
  toolCalls,
@@ -8318,6 +8332,23 @@ function decodeMcpArgValue(value) {
8318
8332
  }
8319
8333
  }
8320
8334
  }
8335
+ async function executeCursorTool(ctx, call) {
8336
+ if ((call.name === "writeFile" || call.name === "editFile") && ctx.onActionGate) {
8337
+ let path = "the requested file";
8338
+ try {
8339
+ const parsed = JSON.parse(call.arguments);
8340
+ if (typeof parsed.path === "string" && parsed.path.trim()) path = parsed.path.trim();
8341
+ } catch {
8342
+ }
8343
+ const policy = evaluateFileWritePolicy({ tool: call.name, path, sessionApproved: false });
8344
+ if (policy.permissionDecision !== "ask") return ctx.executeTool ? ctx.executeTool(call) : { content: "tool execution unavailable" };
8345
+ const gate = { ...policy.permissionRequest, kind: "confirm", toolName: call.name, toolCallId: call.id };
8346
+ const result = await ctx.onActionGate(gate);
8347
+ if (result?.metadata?.actionGateResult?.status !== "completed") return result ?? { content: `${call.name} cancelled: file write confirmation was not approved.`, metadata: { cancelled: true, actionGateResult: { gateId: gate.id, status: "cancelled" } } };
8348
+ ctx.onActionGate = void 0;
8349
+ }
8350
+ return ctx.executeTool ? ctx.executeTool(call) : { content: "tool execution unavailable" };
8351
+ }
8321
8352
  async function handleExecServerMessage(execMsg, h2Request, ctx) {
8322
8353
  const execCase = execMsg.message?.case;
8323
8354
  if (execCase === "requestContextArgs") {
@@ -8358,7 +8389,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8358
8389
  });
8359
8390
  const startedAt = Date.now();
8360
8391
  try {
8361
- const toolResult = await ctx.executeTool({
8392
+ const toolResult = await executeCursorTool(ctx, {
8362
8393
  id: args.toolCallId,
8363
8394
  name: "readFile",
8364
8395
  arguments: toolCallArgs
@@ -8428,7 +8459,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8428
8459
  });
8429
8460
  const startedAt = Date.now();
8430
8461
  try {
8431
- const toolResult = await ctx.executeTool({
8462
+ const toolResult = await executeCursorTool(ctx, {
8432
8463
  id: args.toolCallId,
8433
8464
  name: "execShell",
8434
8465
  arguments: toolCallArgs
@@ -8586,7 +8617,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8586
8617
  });
8587
8618
  const startedAt = Date.now();
8588
8619
  try {
8589
- const toolResult = await ctx.executeTool({
8620
+ const toolResult = await executeCursorTool(ctx, {
8590
8621
  id: args.toolCallId,
8591
8622
  name: "writeFile",
8592
8623
  arguments: toolCallArgs
@@ -8648,7 +8679,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8648
8679
  });
8649
8680
  const startedAt = Date.now();
8650
8681
  try {
8651
- const toolResult = await ctx.executeTool({
8682
+ const toolResult = await executeCursorTool(ctx, {
8652
8683
  id: args.toolCallId,
8653
8684
  name: "deleteFile",
8654
8685
  arguments: toolCallArgs
@@ -8767,7 +8798,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8767
8798
  });
8768
8799
  const startedAt = Date.now();
8769
8800
  try {
8770
- const toolResult = await ctx.executeTool({
8801
+ const toolResult = await executeCursorTool(ctx, {
8771
8802
  id: args.toolCallId,
8772
8803
  name: toolName,
8773
8804
  arguments: toolCallArgs
@@ -8876,6 +8907,7 @@ function createCursorProvider(config) {
8876
8907
  ...options?.onTextDelta ? { onTextDelta: options.onTextDelta } : {},
8877
8908
  ...options?.onReasoningDelta ? { onReasoningDelta: options.onReasoningDelta } : {},
8878
8909
  ...options?.onToolEvent ? { onToolEvent: options.onToolEvent } : {},
8910
+ ...options?.onActionGate ? { onActionGate: options.onActionGate } : {},
8879
8911
  ...typeof options?.toolEventRound === "number" ? { toolEventRound: options.toolEventRound } : {}
8880
8912
  });
8881
8913
  }
@@ -11385,9 +11417,10 @@ async function generateLocalDialogTitle(input) {
11385
11417
  const content = m.content.length > 500 ? `${m.content.slice(0, 500)}...` : m.content;
11386
11418
  return { role: m.role, content };
11387
11419
  });
11388
- while (visibleMessages.length > 1 && JSON.stringify(visibleMessages).length > 4e3) {
11420
+ while (visibleMessages.length > 1 && transcriptLength(visibleMessages) > 4e3) {
11389
11421
  visibleMessages.shift();
11390
11422
  }
11423
+ const compactTranscript = buildTitleTranscript(visibleMessages);
11391
11424
  if (visibleMessages.length === 0) {
11392
11425
  return { title: fallbackTitle, source: "fallback" };
11393
11426
  }
@@ -11403,11 +11436,11 @@ async function generateLocalDialogTitle(input) {
11403
11436
  messages: [
11404
11437
  {
11405
11438
  role: "system",
11406
- content: BUILTIN_TITLE_LLM_CONFIG.prompt
11439
+ content: buildTitleSystemPrompt(input.existingTitle)
11407
11440
  },
11408
11441
  {
11409
11442
  role: "user",
11410
- content: JSON.stringify(visibleMessages)
11443
+ content: compactTranscript
11411
11444
  }
11412
11445
  ],
11413
11446
  stream: false
@@ -11420,7 +11453,9 @@ async function generateLocalDialogTitle(input) {
11420
11453
  }
11421
11454
  const patchedBody = {
11422
11455
  ...parsedBody,
11423
- reasoning_effort: "low",
11456
+ // response_format 与 reasoning_effort 同发会被 RunInfra 400 拒绝,
11457
+ // 标题路径统一走 json mode(跳过 thinking,实测 completion 个位数 tokens)。
11458
+ response_format: { type: "json_object" },
11424
11459
  max_tokens: 512
11425
11460
  };
11426
11461
  const res = await input.fetchImpl(request.url, {
@@ -11433,7 +11468,9 @@ async function generateLocalDialogTitle(input) {
11433
11468
  const data = safeParseJson(raw);
11434
11469
  if (data) {
11435
11470
  const parsed = input.parseResponse({ providerConfig, data });
11436
- const generated = normalizeDialogTitle(parsed.content);
11471
+ const generated = normalizeDialogTitle(
11472
+ extractTitleFromLlmContent(parsed.content)
11473
+ );
11437
11474
  if (generated) {
11438
11475
  return { title: generated, source: "llm" };
11439
11476
  }
@@ -11479,11 +11516,12 @@ async function generateLocalDialogTitle(input) {
11479
11516
  body: JSON.stringify({
11480
11517
  model: directConfig.model || input.agentConfig?.model || BUILTIN_TITLE_LLM_CONFIG.model,
11481
11518
  messages: [
11482
- { role: "system", content: BUILTIN_TITLE_LLM_CONFIG.prompt },
11483
- { role: "user", content: JSON.stringify(visibleMessages) }
11519
+ { role: "system", content: buildTitleSystemPrompt(input.existingTitle) },
11520
+ { role: "user", content: compactTranscript }
11484
11521
  ],
11485
- // reasoning_effort/max_tokens 优化标题延迟与消耗;注意部分严格 OpenAI 兼容服务端(如某些 vLLM 部署)若拒绝未知参数会降级到 fallback。
11486
- reasoning_effort: "low",
11522
+ // 标题路径统一 json mode(跳过 thinking);response_format
11523
+ // reasoning_effort 同发会被 RunInfra 400 拒绝,故不发 reasoning_effort。
11524
+ response_format: { type: "json_object" },
11487
11525
  max_tokens: 512,
11488
11526
  stream: false
11489
11527
  }),
@@ -11493,7 +11531,9 @@ async function generateLocalDialogTitle(input) {
11493
11531
  const raw = await res.text().catch(() => "");
11494
11532
  const data = safeParseJson(raw);
11495
11533
  const rawContent = data?.choices?.[0]?.message?.content ?? "";
11496
- const generated = normalizeDialogTitle(rawContent);
11534
+ const generated = normalizeDialogTitle(
11535
+ extractTitleFromLlmContent(rawContent)
11536
+ );
11497
11537
  if (generated) {
11498
11538
  return { title: generated, source: "llm" };
11499
11539
  }
@@ -11504,6 +11544,33 @@ async function generateLocalDialogTitle(input) {
11504
11544
  }
11505
11545
  return { title: fallbackTitle, source: "fallback" };
11506
11546
  }
11547
+ function buildTitleTranscript(messages) {
11548
+ return messages.map((message) => `${message.role === "user" ? "User" : "Assistant"}: ${message.content}`).join("\n");
11549
+ }
11550
+ function transcriptLength(messages) {
11551
+ return buildTitleTranscript(messages).length;
11552
+ }
11553
+ function buildTitleSystemPrompt(existingTitle) {
11554
+ const title = existingTitle?.trim();
11555
+ const base = `${BUILTIN_TITLE_LLM_CONFIG.prompt}
11556
+ \u8F93\u51FA\u683C\u5F0F\uFF1A\u8FD4\u56DE JSON \u5BF9\u8C61 {"title": "<\u6807\u9898>"}\uFF0C\u9664\u6B64\u4E4B\u5916\u4E0D\u8981\u6709\u4EFB\u4F55\u5B57\u7B26\u3002`;
11557
+ return title ? `${base}
11558
+ \u5F53\u524D\u6807\u9898\uFF1A${title}\u3002\u5982\u679C\u5BF9\u8BDD\u4ECD\u5728\u8BA8\u8BBA\u540C\u4E00\u4E3B\u9898\uFF0C\u5FC5\u987B\u539F\u6837\u8F93\u51FA\u5F53\u524D\u6807\u9898\uFF0C\u4E0D\u8981\u6539\u5199\uFF1B\u53EA\u6709\u5F53\u5BF9\u8BDD\u660E\u786E\u8F6C\u5411\u4E86\u4E0D\u540C\u4E3B\u9898\u65F6\u624D\u751F\u6210\u65B0\u6807\u9898\u3002` : base;
11559
+ }
11560
+ function extractTitleFromLlmContent(raw) {
11561
+ if (raw.trim().startsWith("{")) {
11562
+ try {
11563
+ const parsed = JSON.parse(raw);
11564
+ if (typeof parsed?.title === "string" && parsed.title.trim()) {
11565
+ return parsed.title;
11566
+ }
11567
+ return "";
11568
+ } catch {
11569
+ return raw;
11570
+ }
11571
+ }
11572
+ return raw;
11573
+ }
11507
11574
  function extractText(content) {
11508
11575
  if (typeof content === "string") return content;
11509
11576
  if (Array.isArray(content)) {
@@ -11575,6 +11642,7 @@ function createLocalDialogTitleGenerator(deps, ctx) {
11575
11642
  return async (input) => {
11576
11643
  const result = await generateLocalDialogTitle({
11577
11644
  messages: input.messages,
11645
+ existingTitle: input.existingTitle,
11578
11646
  env: deps.env,
11579
11647
  fetchImpl: async (url, init) => fetchWithTransientRetry(
11580
11648
  deps.fetchImpl ?? fetch,
@@ -11725,7 +11793,11 @@ async function writeDialog(args) {
11725
11793
  if (needsTitleUpdate && args.titleGenerator) {
11726
11794
  const rawLastUserText = extractLastUserText(args.input.messages);
11727
11795
  const fallbackTitle = buildDialogFallbackTitleFromUserInput(rawLastUserText) || "Local agent run";
11728
- titlePromise = args.titleGenerator({ messages: args.input.messages, fallbackTitle }).catch(() => null);
11796
+ titlePromise = args.titleGenerator({
11797
+ messages: args.input.messages,
11798
+ fallbackTitle,
11799
+ existingTitle: existingTitle || void 0
11800
+ }).catch(() => null);
11729
11801
  }
11730
11802
  const plan = buildLocalDialogWritePlan({
11731
11803
  input: args.input,
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-TNPCQNGQ.js";
7
7
  import {
8
8
  getModelAbility
9
- } from "./chunk-Y7TGWSUN.js";
9
+ } from "./chunk-56W233KG.js";
10
10
  import {
11
11
  isOwnedAgentKey,
12
12
  ownedAgentKey,
@@ -3,12 +3,12 @@ import {
3
3
  resolvePlatformChatCompletionsEndpoint,
4
4
  resolvePlatformHostedCredentialProvider,
5
5
  resolvePlatformResponsesEndpoint
6
- } from "./chunk-AV4Z57LV.js";
6
+ } from "./chunk-VRJUIUIY.js";
7
7
  import {
8
8
  CLIENT_VERSION_TOO_OLD_CODE,
9
9
  buildClientVersionGateErrorDetail,
10
10
  evaluatePlatformHostedClientVersionGate
11
- } from "./chunk-VFN256RI.js";
11
+ } from "./chunk-WL3UOGYO.js";
12
12
  import {
13
13
  asTrimmedLowercaseString
14
14
  } from "./chunk-QSJ3HFEF.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  MODEL_LOOKUP_MAP
3
- } from "./chunk-BO3YFOZR.js";
3
+ } from "./chunk-QDHZCAH3.js";
4
4
  import {
5
5
  ALL_MODELS
6
- } from "./chunk-Y7TGWSUN.js";
6
+ } from "./chunk-56W233KG.js";
7
7
  import {
8
8
  PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY
9
9
  } from "./chunk-2JYSSXLY.js";
@@ -11,7 +11,7 @@ import {
11
11
  getAntigravityUserAgent,
12
12
  normalizeAntigravityTokenPayload,
13
13
  refreshAntigravityToken
14
- } from "./chunk-4ZL2KBI7.js";
14
+ } from "./chunk-757BGY6Y.js";
15
15
  import {
16
16
  writeOAuthCredential
17
17
  } from "./chunk-FD36SCCD.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  fetchReferenceContents,
3
3
  resolveReferenceAssets
4
- } from "./chunk-4YAMAMNA.js";
4
+ } from "./chunk-HPZL4IBN.js";
5
5
 
6
6
  // packages/ai/agent/fetchAgentContexts.ts
7
7
  async function fetchAgentContexts(references, dispatch) {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getModelConfig
3
- } from "./chunk-BO3YFOZR.js";
3
+ } from "./chunk-QDHZCAH3.js";
4
4
  import {
5
5
  isPlatformHostedDeepseekModel,
6
6
  isPlatformHostedOpenAIImageModel,
7
7
  resolvePlatformHostedRouting
8
- } from "./chunk-VFN256RI.js";
8
+ } from "./chunk-WL3UOGYO.js";
9
9
  import {
10
10
  asTrimmedLowercaseString
11
11
  } from "./chunk-QSJ3HFEF.js";
@@ -17,7 +17,7 @@ import {
17
17
  toCompactAgentSummary,
18
18
  toSafeAgentSummary,
19
19
  toUnavailableAgentSummary
20
- } from "./chunk-Z7A54NFZ.js";
20
+ } from "./chunk-RU5D3B22.js";
21
21
  import {
22
22
  getUserDataItemTimestamp,
23
23
  mergeAndDedupUserData
@@ -43,7 +43,7 @@ import {
43
43
  } from "./chunk-INZZJSQF.js";
44
44
  import {
45
45
  createDocState
46
- } from "./chunk-QDNFRWAX.js";
46
+ } from "./chunk-GFD7TIZU.js";
47
47
  import {
48
48
  ToolApiError,
49
49
  buildToolRequestHeaders,
@@ -70,7 +70,7 @@ import {
70
70
  buildBuiltinObjectSkillDbKey,
71
71
  buildBuiltinObjectSkillPageContent,
72
72
  createDialogAction
73
- } from "./chunk-IERBSHMR.js";
73
+ } from "./chunk-AVKUDHJO.js";
74
74
  import {
75
75
  addCategory,
76
76
  addContentToSpace,
@@ -90,7 +90,7 @@ import {
90
90
  loadTableRows,
91
91
  updateContentCategory,
92
92
  updateContentTitle
93
- } from "./chunk-7M72YPM2.js";
93
+ } from "./chunk-6SMMK7MD.js";
94
94
  import {
95
95
  normalizeAppRouteId,
96
96
  resolveDialogRuntimeAgentKey,
@@ -100,13 +100,13 @@ import {
100
100
  selectMsgById,
101
101
  uiAskChoiceFunc,
102
102
  uiAskChoiceFunctionSchema
103
- } from "./chunk-MCX2LX27.js";
103
+ } from "./chunk-EURF2SV6.js";
104
104
  import {
105
105
  createAgent,
106
106
  runLlm,
107
107
  streamAgentChatTurn,
108
108
  updateAgent
109
- } from "./chunk-5JXRVJAC.js";
109
+ } from "./chunk-WX5E6HZS.js";
110
110
  import {
111
111
  getActiveDialogKey,
112
112
  require_react,
@@ -154,7 +154,7 @@ import {
154
154
  } from "./chunk-HR5XDXYM.js";
155
155
  import {
156
156
  DEFAULT_MODEL
157
- } from "./chunk-BO3YFOZR.js";
157
+ } from "./chunk-QDHZCAH3.js";
158
158
  import {
159
159
  compactWhitespace
160
160
  } from "./chunk-DWLEOOGR.js";
@@ -11830,7 +11830,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11830
11830
  workspace: { mode: "lease" }
11831
11831
  };
11832
11832
  var findModelConfig = async (modelName, provider) => {
11833
- const { ALL_MODELS } = await import("./models-N4NXQ44D.js");
11833
+ const { ALL_MODELS } = await import("./models-4QF4BJVY.js");
11834
11834
  const name = toTrimmedString(modelName);
11835
11835
  const prov = toTrimmedString(provider ?? "");
11836
11836
  if (!name) return null;
@@ -12071,7 +12071,7 @@ var buildFormDataFromArgs = async (args) => {
12071
12071
  const trimmedModel = toTrimmedString(model);
12072
12072
  const trimmedProvider = toTrimmedString(provider);
12073
12073
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
12074
- const { getModelPricing } = await import("./getPricing-JNOCWYDH.js");
12074
+ const { getModelPricing } = await import("./getPricing-HAU62AFM.js");
12075
12075
  const normalizedTools = tools ?? [];
12076
12076
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
12077
12077
  const formData = {
@@ -15385,7 +15385,7 @@ async function deleteDialogsFunc(args, thunkApi) {
15385
15385
  const deletedDialogIds = [];
15386
15386
  const deletedDialogKeys = [];
15387
15387
  const failures = [];
15388
- const { deleteDialog } = await import("./dialogSlice-NX26W623.js");
15388
+ const { deleteDialog } = await import("./dialogSlice-NRAN5X7F.js");
15389
15389
  for (const target of targets) {
15390
15390
  try {
15391
15391
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -24957,7 +24957,7 @@ var executeToolRun = createAsyncThunk(
24957
24957
  if (!executionInput) {
24958
24958
  throw new Error(`ToolRun ${id} has no input to execute with.`);
24959
24959
  }
24960
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-ROUITGAR.js");
24960
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-QCDR3UMD.js");
24961
24961
  const { executor } = findToolExecutor2(run.toolName);
24962
24962
  toolRunStarted({
24963
24963
  id: run.id,
@@ -24981,7 +24981,7 @@ var executeToolRun = createAsyncThunk(
24981
24981
  const latestState = thunkApi.getState();
24982
24982
  const userId = latestState.auth?.currentUser?.userId;
24983
24983
  if (userId) {
24984
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-JVVDCGA3.js");
24984
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-F7JCOZEF.js");
24985
24985
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
24986
24986
  }
24987
24987
  }
@@ -27464,7 +27464,7 @@ async function updateDocFunc(args, thunkApi) {
27464
27464
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
27465
27465
  };
27466
27466
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
27467
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-YAE7GYHZ.js");
27467
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-LUS7SWC3.js");
27468
27468
  if (getDocState().pageKey === id) {
27469
27469
  applyExternalDocUpdate({
27470
27470
  slateData: finalSlateData,