nolo-cli 0.54.0-alpha.1 → 0.54.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 (111) hide show
  1. package/{_executeModel-IVEOJ7L6.js → _executeModel-ANY4SIAS.js} +35 -36
  2. package/{action-IU6ON7ZB.js → action-Q4W5JPI5.js} +7 -7
  3. package/{addContentAction-5V5CCI3I.js → addContentAction-O25HFR37.js} +6 -6
  4. package/{addDialogAgentAction-KF3KZZNZ.js → addDialogAgentAction-GH7AUPPB.js} +5 -5
  5. package/{agentDeleteCommand-D7AFLKQN.js → agentDeleteCommand-JWIKNWWI.js} +17 -17
  6. package/{agentEmailCommands-MXFZGF54.js → agentEmailCommands-PL22BEU5.js} +40 -41
  7. package/{agentListCommands-MP732Q23.js → agentListCommands-6NR7AQEK.js} +19 -19
  8. package/{agentMachineCommands-352JFJX4.js → agentMachineCommands-TASPU6OA.js} +18 -18
  9. package/{agentRecordCommands-G6EFHU3G.js → agentRecordCommands-Z64TA63M.js} +39 -40
  10. package/{agentRunCommand-UUWJMH7J.js → agentRunCommand-4QJQLPRW.js} +40 -41
  11. package/{agentRuntimeLocal-KWBPJ53H.js → agentRuntimeLocal-PCJJ56J2.js} +17 -17
  12. package/{agentSlice-V742SNKC.js → agentSlice-KYLDUSNN.js} +6 -6
  13. package/{appDeleteCommands-GV4TF52A.js → appDeleteCommands-WLHMJAVT.js} +19 -19
  14. package/{appDeployCommands-EZMUPNSW.js → appDeployCommands-CKON7N2E.js} +19 -19
  15. package/{appDeployStatusCommands-AAGELKAN.js → appDeployStatusCommands-PXRLDASH.js} +19 -19
  16. package/{appGetCommands-W37KDAON.js → appGetCommands-RAB5RM4M.js} +19 -19
  17. package/{appListCommands-IFDWBBNV.js → appListCommands-GU57FB62.js} +19 -19
  18. package/{authCommand-5HM57KPL.js → authCommand-QOPOEYEK.js} +7 -7
  19. package/{chatQueueReduxAdapter-ZXXP6E4O.js → chatQueueReduxAdapter-5O2WLITN.js} +17 -17
  20. package/chunk-2BWU4ORW.js +2574 -0
  21. package/{chunk-SG65C33A.js → chunk-32I5RVMY.js} +4 -4
  22. package/{chunk-X7S7OFUX.js → chunk-3QJTD6DO.js} +4 -4
  23. package/{chunk-ALMVQQPG.js → chunk-3Z3DXZBD.js} +12 -12
  24. package/{chunk-RO2IUWZE.js → chunk-4NN3EK7H.js} +1 -1
  25. package/{chunk-WJV3G7BM.js → chunk-56W233KG.js} +1 -1
  26. package/{chunk-GBXR3CSM.js → chunk-5WADL4O7.js} +1 -1
  27. package/{chunk-J4Z6UI4C.js → chunk-6BGAQ3KR.js} +20 -15
  28. package/{chunk-R63FNYSI.js → chunk-6FQ2552G.js} +66 -28
  29. package/{chunk-6XIE5ZGI.js → chunk-6HIGYUBQ.js} +1 -1
  30. package/{chunk-MC66ASS6.js → chunk-6SZ52ORL.js} +8 -8
  31. package/{chunk-CULR4XB4.js → chunk-757BGY6Y.js} +1 -1
  32. package/{chunk-SQTVMYMU.js → chunk-7APQB6R6.js} +3 -3
  33. package/{chunk-RBJD33HM.js → chunk-7K5VMB4Q.js} +3 -3
  34. package/{chunk-V2IPBG5U.js → chunk-AA564GBL.js} +2 -2
  35. package/{chunk-76UA7376.js → chunk-AV6KQCM5.js} +6 -6
  36. package/{chunk-BKPUPZ6W.js → chunk-BJLYCOZK.js} +25 -25
  37. package/{chunk-2T6XO4PK.js → chunk-CVT7L2WZ.js} +1 -1
  38. package/{chunk-XXZULHJ7.js → chunk-D3JQPONH.js} +1 -1
  39. package/{chunk-M2CGG6VJ.js → chunk-EVBFYPDC.js} +1 -1
  40. package/{chunk-KHCLMKZZ.js → chunk-EY7V7REW.js} +280 -6
  41. package/{chunk-4RXXP6WD.js → chunk-FGEYVPPR.js} +2 -2
  42. package/{chunk-ZMV5PCRS.js → chunk-GBADO3SM.js} +1 -1
  43. package/chunk-GLGD2JGY.js +1766 -0
  44. package/{chunk-W6N3GLUU.js → chunk-GV35EHNA.js} +81 -69
  45. package/{chunk-HR5XDXYM.js → chunk-H4RYESI6.js} +3 -3
  46. package/{chunk-FZMM2KZC.js → chunk-IKTHA3JH.js} +2 -2
  47. package/{chunk-WUMYQ2FE.js → chunk-INXBNYCG.js} +3 -3
  48. package/{chunk-PTHLNXGY.js → chunk-KUUTWU4I.js} +3 -3
  49. package/{chunk-RVHPY5PC.js → chunk-LA4IDAK7.js} +12 -12
  50. package/{chunk-OU7NGN5Y.js → chunk-LN3OQJGG.js} +1 -1
  51. package/{chunk-YZ2WE6CW.js → chunk-MFI4FGHX.js} +2 -2
  52. package/{chunk-LGUQHYAL.js → chunk-O5FLGN2L.js} +3 -2
  53. package/{chunk-HCBQVVFZ.js → chunk-PAHILFNT.js} +1 -1
  54. package/{chunk-HHBXCRJS.js → chunk-PYKV6FSC.js} +1 -1
  55. package/{chunk-7UFH6THF.js → chunk-QDHZCAH3.js} +1 -1
  56. package/{chunk-L3JWI7WX.js → chunk-QOKAKDPE.js} +15 -11
  57. package/{chunk-B54WOZ77.js → chunk-RTLJUGQH.js} +1 -1
  58. package/{chunk-YFHUQLJF.js → chunk-RU5D3B22.js} +1 -1
  59. package/{chunk-5Y5G76BJ.js → chunk-SP3DPVBH.js} +2 -2
  60. package/{chunk-5SXS7T5Q.js → chunk-TI5BCZCH.js} +18 -18
  61. package/{chunk-K7CNV7GI.js → chunk-U2A47SVI.js} +5 -5
  62. package/{chunk-45E65JER.js → chunk-U5Z7LFZF.js} +1 -1
  63. package/{chunk-DIQCV4FR.js → chunk-UITMHBVK.js} +1 -1
  64. package/{chunk-VM7K5EJL.js → chunk-UW4INMD2.js} +2 -2
  65. package/{chunk-SUFDWBLV.js → chunk-V4KZGLOI.js} +30 -30
  66. package/{chunk-ET7BXWAW.js → chunk-VRJUIUIY.js} +2 -2
  67. package/{chunk-5XCW6RQG.js → chunk-VRZIH5JO.js} +1 -1
  68. package/{chunk-2JYSSXLY.js → chunk-VULELK4T.js} +2 -2
  69. package/{chunk-J7KVJAUQ.js → chunk-WL3UOGYO.js} +0 -1
  70. package/{chunk-PEMGYJNS.js → chunk-Y7LNKP32.js} +3 -3
  71. package/{chunk-DMCFF4KE.js → chunk-YBV6QJKM.js} +14 -8
  72. package/{codingSkills-BYQI6EPT.js → codingSkills-BCQXRZOI.js} +3 -4
  73. package/{createAgentAutomationAction-LE3ZYDT6.js → createAgentAutomationAction-UJLNFFFC.js} +18 -18
  74. package/{createDialogAction-2C6SR62D.js → createDialogAction-TJCX6GUE.js} +21 -22
  75. package/{createPageAction-X4C7K3OD.js → createPageAction-N3IYABHV.js} +19 -20
  76. package/{dbSlice-FWF5F4L7.js → dbSlice-D5CNGWPD.js} +5 -5
  77. package/{deleteFile-NPZ64DFN.js → deleteFile-44TUM34Y.js} +3 -3
  78. package/{dialogCommands-CP2U44A7.js → dialogCommands-35M6RBAC.js} +18 -18
  79. package/{dialogSlice-2SH5636X.js → dialogSlice-KO7ADD7H.js} +17 -17
  80. package/{docCreateCommands-A2KIJSF7.js → docCreateCommands-VXHZWQ3P.js} +20 -21
  81. package/{docDeleteCommands-NZ7XO4Z4.js → docDeleteCommands-4WFAJR6A.js} +20 -21
  82. package/{docReadCommands-VWVK4ZAR.js → docReadCommands-OYREEFAR.js} +20 -21
  83. package/{docStore-J6GQYKHS.js → docStore-5BU76DFK.js} +19 -19
  84. package/{docUpdateCommands-YTUEC6PN.js → docUpdateCommands-A7QERSME.js} +20 -21
  85. package/{getPricing-I53UFOPH.js → getPricing-HAU62AFM.js} +3 -3
  86. package/{handleSendMessageAction-MD325XZS.js → handleSendMessageAction-OSGQJQ45.js} +17 -17
  87. package/index.js +58 -58
  88. package/{machineCommands-TCNZV2DC.js → machineCommands-J43U3TX5.js} +39 -40
  89. package/{machineWsRunDispatch-QSX5IWPH.js → machineWsRunDispatch-Z2Z6STXZ.js} +39 -40
  90. package/{models-E2CYP4IB.js → models-4QF4BJVY.js} +2 -2
  91. package/package.json +2 -3
  92. package/{read-J7RVVCHH.js → read-RGNPI5H2.js} +3 -3
  93. package/{readDocTool-G2WBM4IH.js → readDocTool-6ESWKTXD.js} +1 -1
  94. package/{readlineWorkspace-N3RGX7EK.js → readlineWorkspace-YRPV6JPN.js} +462 -235
  95. package/{removeDialogAgentAction-RMPISD42.js → removeDialogAgentAction-JYT73FU2.js} +7 -7
  96. package/{runAgentClientLoop-R3NTOERA.js → runAgentClientLoop-5YM5WMAY.js} +33 -34
  97. package/{setDialogExtraReferencesAction-7BUTHDAL.js → setDialogExtraReferencesAction-D564LMYQ.js} +6 -6
  98. package/{setPrimaryDialogAgentAction-WCYIBGZ4.js → setPrimaryDialogAgentAction-ACY3BLYA.js} +7 -7
  99. package/{settingSlice-7NN2MI6Y.js → settingSlice-MKI3MNZJ.js} +6 -6
  100. package/{skillDiscovery-COX56OBO.js → skillDiscovery-GPUDHDTZ.js} +1 -2
  101. package/{spaceCommands-RC7XMYQ7.js → spaceCommands-MY26V52L.js} +17 -17
  102. package/{spaceSlice-KBVKKO3M.js → spaceSlice-JUIXC365.js} +18 -18
  103. package/{streamAgentChatTurn-WLWEBWSF.js → streamAgentChatTurn-XV5X5TNQ.js} +37 -38
  104. package/{switchDialogAgentAction-WGMMQHDI.js → switchDialogAgentAction-CJ5H6SAR.js} +5 -5
  105. package/{tableCommands-P2TXJ3CF.js → tableCommands-R6WFRDYF.js} +1 -1
  106. package/{tools-LSLDSUWU.js → tools-MIMELA2Y.js} +28 -29
  107. package/{tuiSummaryLlmCaller-TPBL4BV2.js → tuiSummaryLlmCaller-XJ5BKNNS.js} +13 -13
  108. package/{updateDialogTitleAction-4HJEARM7.js → updateDialogTitleAction-EIZUSWHR.js} +18 -18
  109. package/chunk-AETZ7AD6.js +0 -274
  110. package/chunk-EUG45QJR.js +0 -6104
  111. package/chunk-OFZPJ3NT.js +0 -114
@@ -4,7 +4,7 @@ import {
4
4
  refreshAntigravityOAuthToken,
5
5
  refreshOpenAiCodexToken,
6
6
  xaiRefresh
7
- } from "./chunk-45E65JER.js";
7
+ } from "./chunk-U5Z7LFZF.js";
8
8
  import {
9
9
  defaultLoopbackRequest
10
10
  } from "./chunk-EADNWBAZ.js";
@@ -49,14 +49,14 @@ import {
49
49
  } from "./chunk-WHVQA7PJ.js";
50
50
  import {
51
51
  inferCaptureIntent
52
- } from "./chunk-RO2IUWZE.js";
52
+ } from "./chunk-4NN3EK7H.js";
53
53
  import {
54
54
  buildCliPrompt
55
55
  } from "./chunk-ATNTHIZI.js";
56
56
  import {
57
57
  inlineImageUrlsForCustomProvider,
58
58
  prepareTools
59
- } from "./chunk-VM7K5EJL.js";
59
+ } from "./chunk-UW4INMD2.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-CULR4XB4.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-SUFDWBLV.js";
78
+ } from "./chunk-V4KZGLOI.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-BKPUPZ6W.js";
101
+ } from "./chunk-BJLYCOZK.js";
102
102
  import {
103
103
  BUILTIN_TITLE_LLM_CONFIG
104
- } from "./chunk-M2CGG6VJ.js";
104
+ } from "./chunk-EVBFYPDC.js";
105
105
  import {
106
106
  fetchServerSyncedCredential
107
- } from "./chunk-K7CNV7GI.js";
107
+ } from "./chunk-U2A47SVI.js";
108
108
  import {
109
109
  require_date_fns
110
110
  } from "./chunk-M76ECQRD.js";
@@ -120,7 +120,7 @@ import {
120
120
  applySystemBuiltinSkillFilter,
121
121
  expandEnabledPacks,
122
122
  resolveEffectiveEnabledPacks
123
- } from "./chunk-LGUQHYAL.js";
123
+ } from "./chunk-O5FLGN2L.js";
124
124
  import {
125
125
  aggregateResponsesStream,
126
126
  buildLoadSkillExecutor,
@@ -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-J4Z6UI4C.js";
147
+ } from "./chunk-6BGAQ3KR.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-WUMYQ2FE.js";
159
+ } from "./chunk-INXBNYCG.js";
159
160
  import {
160
161
  resolveAgentRuntimeConfigFromRecord,
161
162
  resolveHistoricalToolContentCap
162
- } from "./chunk-2T6XO4PK.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-5Y5G76BJ.js";
170
+ } from "./chunk-SP3DPVBH.js";
170
171
  import {
171
172
  buildNoloWorkspaceOpenAiTools,
172
173
  parseNoloWorkspaceToolArguments,
@@ -183,7 +184,7 @@ import {
183
184
  } from "./chunk-2MBTWINN.js";
184
185
  import {
185
186
  clipCompactText
186
- } from "./chunk-HR5XDXYM.js";
187
+ } from "./chunk-H4RYESI6.js";
187
188
  import {
188
189
  createFileCredentialBroker,
189
190
  resolveCurrentRunRuntimeToolPolicy,
@@ -198,7 +199,7 @@ import {
198
199
  } from "./chunk-FD36SCCD.js";
199
200
  import {
200
201
  isAdaptiveThinkingModelId
201
- } from "./chunk-7UFH6THF.js";
202
+ } from "./chunk-QDHZCAH3.js";
202
203
  import {
203
204
  compactWhitespace
204
205
  } from "./chunk-DWLEOOGR.js";
@@ -215,9 +216,6 @@ import {
215
216
  import {
216
217
  DEFAULT_NOLO_SERVER_URL
217
218
  } from "./chunk-OLZBQWZU.js";
218
- import {
219
- PLATFORM_HOSTED_NEMOTRON_35_LIGHTNING_MODEL
220
- } from "./chunk-J7KVJAUQ.js";
221
219
  import {
222
220
  createTokenKey,
223
221
  createTokenStatsKey,
@@ -232,7 +230,7 @@ import {
232
230
  } from "./chunk-QSJ3HFEF.js";
233
231
  import {
234
232
  isSystemBuiltinTrustedAgentKey
235
- } from "./chunk-2JYSSXLY.js";
233
+ } from "./chunk-VULELK4T.js";
236
234
  import {
237
235
  isRecord
238
236
  } from "./chunk-KUG52IAP.js";
@@ -534,6 +532,11 @@ var STRINGS = {
534
532
  en: "Draft cleared.",
535
533
  zh: "\u8F93\u5165\u8349\u7A3F\u5DF2\u6E05\u7A7A\u3002"
536
534
  },
535
+ // 空草稿按 Backspace 逐个撤销附件(composer 附件条)。
536
+ attachmentRemovedHint: {
537
+ en: "Removed attachment {0}, {1} remaining",
538
+ zh: "\u5DF2\u79FB\u9664\u9644\u4EF6 {0}\uFF0C\u5269\u4F59 {1} \u5F20"
539
+ },
537
540
  historyNoToken: {
538
541
  en: "History requires an auth token. Run `nolo login` or set AUTH_TOKEN.",
539
542
  zh: "\u67E5\u770B\u5386\u53F2\u5BF9\u8BDD\u9700\u8981\u767B\u5F55\u51ED\u8BC1\u3002\u8BF7\u8FD0\u884C `nolo login` \u6216\u8BBE\u7F6E AUTH_TOKEN\u3002"
@@ -601,6 +604,10 @@ var STRINGS = {
601
604
  // --- Tool trace copy ------------------------------------------------------
602
605
  // The compact trace shows only status, never timing or output size: a line
603
606
  // count told the user nothing actionable and the ms figure read as noise.
607
+ thinkingTraceLine: {
608
+ en: "\u273B Thought for {0}",
609
+ zh: "\u273B \u601D\u8003 {0}"
610
+ },
604
611
  toolNeedsAction: {
605
612
  en: "needs action",
606
613
  zh: "\u5F85\u786E\u8BA4"
@@ -842,9 +849,8 @@ var STRINGS = {
842
849
  " /new Clear screen and start a fresh dialog",
843
850
  " /compact Compact current dialog and fork a new one",
844
851
  " /context Show workspace context and next actions",
852
+ " /cd <path> Change the working directory (takes effect on the next turn)",
845
853
  " /runtime <mode> Use auto, local, or server runtime",
846
- " /tools <mode> Control tool trace: hide, compact, verbose",
847
- " /thinking <mode> Show or hide live model reasoning",
848
854
  " /switch Pick an agent interactively (\u2191\u2193, Enter)",
849
855
  " /switch list List agents as text",
850
856
  " /switch <name> Switch directly by name, alias, or key (alias: /agent)",
@@ -854,7 +860,7 @@ var STRINGS = {
854
860
  " /lang <zh|en> Switch interface language",
855
861
  ' /copy [all] Copy the last reply (or the full conversation with "all") to the clipboard',
856
862
  " /mouse <on|off> Toggle mouse mode (off = drag to select text)",
857
- " /auto <on|off> Toggle permission auto-approve (skip destructive-shell & external-file confirms)",
863
+ " /auto <on|off> Toggle permission auto-approve (skip destructive-shell, external-file & file-write confirms)",
858
864
  " /math <on|off> Toggle math formula rendering (Unicode transcription)",
859
865
  " /altscreen <on|off> Toggle the terminal alternate screen (default on; off shares shell scrollback)",
860
866
  " Shift+drag Select text natively even while mouse mode is on (terminal bypass)",
@@ -881,9 +887,8 @@ var STRINGS = {
881
887
  " /new \u6E05\u5C4F\u5E76\u5F00\u59CB\u65B0\u5BF9\u8BDD",
882
888
  " /compact \u538B\u7F29\u5F53\u524D\u5BF9\u8BDD\u5E76\u5206\u53C9\u51FA\u65B0\u5BF9\u8BDD",
883
889
  " /context \u67E5\u770B\u5DE5\u4F5C\u533A\u4E0A\u4E0B\u6587\u4E0E\u540E\u7EED\u64CD\u4F5C",
890
+ " /cd <path> \u5207\u6362\u5DE5\u4F5C\u76EE\u5F55\uFF08\u4E0B\u4E2A turn \u751F\u6548\uFF09",
884
891
  " /runtime <mode> \u5207\u6362 runtime\uFF1Aauto\u3001local\u3001server",
885
- " /tools <mode> \u5DE5\u5177\u8F68\u8FF9\u663E\u793A\uFF1Ahide\u3001compact\u3001verbose",
886
- " /thinking <mode> \u663E\u793A\u6216\u9690\u85CF\u6A21\u578B\u7684\u5B9E\u65F6\u601D\u8003\u8FC7\u7A0B",
887
892
  " /switch \u4EA4\u4E92\u5F0F\u9009\u62E9 agent\uFF08\u2191\u2193 \u79FB\u52A8\uFF0CEnter \u786E\u8BA4\uFF09",
888
893
  " /switch list \u4EE5\u6587\u672C\u5217\u51FA\u5168\u90E8 agent",
889
894
  " /switch <name> \u6309\u540D\u79F0\u3001\u522B\u540D\u6216 key \u76F4\u63A5\u5207\u6362\uFF08\u522B\u540D\uFF1A/agent\uFF09",
@@ -893,7 +898,7 @@ var STRINGS = {
893
898
  " /lang <zh|en> \u5207\u6362\u754C\u9762\u8BED\u8A00",
894
899
  " /copy [all] \u590D\u5236\u6700\u540E\u4E00\u6761\u56DE\u590D\u5230\u526A\u8D34\u677F\uFF08\u52A0 all \u590D\u5236\u5B8C\u6574\u5BF9\u8BDD\uFF09",
895
900
  " /mouse <on|off> \u5207\u6362\u9F20\u6807\u6A21\u5F0F\uFF08off \u540E\u53EF\u76F4\u63A5\u62D6\u9009\u6587\u672C\uFF09",
896
- " /auto <on|off> \u5207\u6362\u6743\u9650\u81EA\u52A8\u5316\uFF08\u81EA\u52A8\u653E\u884C\u7834\u574F\u6027 shell \u4E0E\u5916\u90E8\u6587\u4EF6\u786E\u8BA4\uFF09",
901
+ " /auto <on|off> \u5207\u6362\u6743\u9650\u81EA\u52A8\u5316\uFF08\u81EA\u52A8\u653E\u884C\u7834\u574F\u6027 shell\u3001\u5916\u90E8\u6587\u4EF6\u4E0E\u5199\u6587\u4EF6\u786E\u8BA4\uFF09",
897
902
  " /math <on|off> \u5207\u6362\u6570\u5B66\u516C\u5F0F\u6E32\u67D3\uFF08Unicode \u8F6C\u5199\uFF09",
898
903
  " /altscreen <on|off> \u5207\u6362\u7EC8\u7AEF\u5907\u7528\u5C4F\uFF08\u9ED8\u8BA4 on\uFF1Boff \u6539\u4E3A\u4E0E shell \u5171\u7528\u56DE\u6EDA\uFF09",
899
904
  " Shift+\u62D6\u62FD \u9F20\u6807\u6A21\u5F0F\u5F00\u542F\u65F6\u4E5F\u53EF\u539F\u751F\u9009\u4E2D\u6587\u672C\uFF08\u7EC8\u7AEF\u7ED5\u8FC7\u4FEE\u9970\u952E\uFF09",
@@ -924,21 +929,10 @@ var STRINGS = {
924
929
  },
925
930
  runtimeUsage: { en: "Usage: /runtime <auto|local|server>", zh: "\u7528\u6CD5\uFF1A/runtime <auto|local|server>" },
926
931
  runtimeSet: { en: "Runtime: {0}", zh: "\u8FD0\u884C\u6A21\u5F0F\uFF1A{0}" },
927
- toolsCurrent: {
928
- en: "Tool display: {0} (normal | pro | hide | verbose)",
929
- zh: "\u5DE5\u5177\u663E\u793A\uFF1A{0}\uFF08\u666E\u901A normal | \u4E13\u4E1A pro | hide | verbose\uFF09"
932
+ displayFixedHint: {
933
+ en: "The TUI now ships a single built-in display default, no switching needed. Power users can fall back to environment variables (applied on restart): NOLO_CLI_TOOLS=normal|pro|verbose|hide controls the tool trace, NOLO_CLI_THINKING=show|hide controls reasoning visibility.",
934
+ zh: "TUI \u73B0\u5728\u53EA\u6709\u4E00\u5957\u5185\u7F6E\u9ED8\u8BA4\u663E\u793A\uFF0C\u65E0\u9700\u5207\u6362\u3002\u4E13\u4E1A\u7EC6\u8282\u53EF\u7528\u73AF\u5883\u53D8\u91CF\u515C\u5E95\uFF08\u91CD\u542F\u751F\u6548\uFF09\uFF1ANOLO_CLI_TOOLS=normal|pro|verbose|hide \u63A7\u5236\u5DE5\u5177\u8F68\u8FF9\uFF0CNOLO_CLI_THINKING=show|hide \u63A7\u5236\u601D\u8003\u8FC7\u7A0B\u3002"
930
935
  },
931
- toolsUsage: { en: "Usage: /tools <normal|pro|hide|verbose>", zh: "\u7528\u6CD5\uFF1A/tools <normal|pro|hide|verbose>" },
932
- toolsSet: { en: "Tool display: {0}", zh: "\u5DE5\u5177\u663E\u793A\uFF1A{0}" },
933
- thinkingCurrent: {
934
- en: "Thinking display: {0} (show | hide)",
935
- zh: "\u601D\u8003\u663E\u793A\uFF1A{0}\uFF08show | hide\uFF09"
936
- },
937
- thinkingUsage: {
938
- en: "Usage: /thinking <show|hide>",
939
- zh: "\u7528\u6CD5\uFF1A/thinking <show|hide>"
940
- },
941
- thinkingSet: { en: "Thinking display: {0}", zh: "\u601D\u8003\u663E\u793A\uFF1A{0}" },
942
936
  tasksRunning: { en: "Running processes ({0}):", zh: "\u8FD0\u884C\u4E2D\u7684\u8FDB\u7A0B\uFF08{0}\uFF09\uFF1A" },
943
937
  tasksStopped: { en: "Stopped/exited ({0}):", zh: "\u5DF2\u505C\u6B62/\u5DF2\u9000\u51FA\uFF08{0}\uFF09\uFF1A" },
944
938
  tasksNone: { en: "No processes.", zh: "\u6CA1\u6709\u8FD0\u884C\u4E2D\u7684\u8FDB\u7A0B\u3002" },
@@ -1011,14 +1005,18 @@ Use /switch, /switch list, /switch minimax-m3, or a full agent key.`,
1011
1005
  },
1012
1006
  themeSwitched: { en: "Switched to theme: {0}", zh: "\u5DF2\u5207\u6362\u5230\u4E3B\u9898\uFF1A{0}" },
1013
1007
  themeUnknown: { en: "Unknown theme: {0}. Available themes: {1}", zh: "\u672A\u77E5\u4E3B\u9898\uFF1A{0}\u3002\u53EF\u7528\u4E3B\u9898\uFF1A{1}" },
1014
- densityCurrent: {
1015
- en: "Current density: {0}\nUsage: /density <cozy|spacious>",
1016
- zh: "\u5F53\u524D\u5BC6\u5EA6\uFF1A{0}\n\u7528\u6CD5\uFF1A/density <cozy|spacious>"
1017
- },
1018
- densitySwitched: { en: "Switched to layout density: {0}", zh: "\u5DF2\u5207\u6362\u5230\u5E03\u5C40\u5BC6\u5EA6\uFF1A{0}" },
1019
- densityUnknown: {
1020
- en: "Unknown density: {0}. Use 'cozy' or 'spacious'.",
1021
- zh: "\u672A\u77E5\u5BC6\u5EA6\uFF1A{0}\u3002\u8BF7\u4F7F\u7528 cozy \u6216 spacious\u3002"
1008
+ cdUsage: {
1009
+ en: "Usage: /cd <path> (relative, absolute, ~, or -; takes effect on the next turn)",
1010
+ zh: "\u7528\u6CD5\uFF1A/cd <path>\uFF08\u76F8\u5BF9\u3001\u7EDD\u5BF9\u3001~ \u6216 - \u8DEF\u5F84\uFF1B\u4E0B\u4E2A turn \u751F\u6548\uFF09"
1011
+ },
1012
+ cdCurrent: { en: "Current directory: {0}", zh: "\u5F53\u524D\u76EE\u5F55\uFF1A{0}" },
1013
+ cdSwitched: { en: "Working directory: {0}", zh: "\u5DE5\u4F5C\u76EE\u5F55\uFF1A{0}" },
1014
+ cdNotFound: { en: "Directory not found: {0}", zh: "\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A{0}" },
1015
+ cdNotDir: { en: "Not a directory: {0}", zh: "\u4E0D\u662F\u76EE\u5F55\uFF1A{0}" },
1016
+ cdNoPrevious: { en: "No previous directory.", zh: "\u6CA1\u6709\u4E0A\u4E00\u4E2A\u76EE\u5F55\u3002" },
1017
+ cdSwitchedMessage: {
1018
+ en: "Working directory changed: {0} \u2192 {1}. Subsequent tool execution and file operations use the new directory.",
1019
+ zh: "\u5DE5\u4F5C\u76EE\u5F55\u5DF2\u5207\u6362\uFF1A{0} \u2192 {1}\u3002\u540E\u7EED\u5DE5\u5177\u6267\u884C\u4E0E\u6587\u4EF6\u64CD\u4F5C\u4EE5\u65B0\u76EE\u5F55\u4E3A\u51C6\u3002"
1022
1020
  },
1023
1021
  docAttachUsage: { en: "Usage: /doc attach <doc>", zh: "\u7528\u6CD5\uFF1A/doc attach <doc>" },
1024
1022
  docList: { en: "Attached docs: {0}", zh: "\u5DF2\u6302\u8F7D\u6587\u6863\uFF1A{0}" },
@@ -1078,6 +1076,7 @@ Use /switch, /switch list, /switch minimax-m3, or a full agent key.`,
1078
1076
  en: "Press Enter to run it now. Follow any prompts below, or Ctrl+C to cancel.",
1079
1077
  zh: "\u6309 Enter \u7ACB\u5373\u6267\u884C\uFF0C\u6309\u4E0B\u65B9\u63D0\u793A\u64CD\u4F5C\uFF0C\u6216\u6309 Ctrl+C \u53D6\u6D88\u3002"
1080
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" },
1081
1080
  actionGateInteractiveTitle: {
1082
1081
  en: "This command requires an interactive terminal.",
1083
1082
  zh: "\u8BE5\u547D\u4EE4\u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF"
@@ -7789,6 +7788,7 @@ async function streamCursorChat(messages, options) {
7789
7788
  const execCtx = {
7790
7789
  tools: buildMcpToolDefinitions(options.tools),
7791
7790
  executeTool: options.executeTool,
7791
+ ...options.onActionGate ? { onActionGate: options.onActionGate } : {},
7792
7792
  ...options.searchWorkspace ? { searchWorkspace: options.searchWorkspace } : {},
7793
7793
  ...options.listWorkspaceEntries ? { listWorkspaceEntries: options.listWorkspaceEntries } : {},
7794
7794
  toolCalls,
@@ -8332,6 +8332,23 @@ function decodeMcpArgValue(value) {
8332
8332
  }
8333
8333
  }
8334
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
+ }
8335
8352
  async function handleExecServerMessage(execMsg, h2Request, ctx) {
8336
8353
  const execCase = execMsg.message?.case;
8337
8354
  if (execCase === "requestContextArgs") {
@@ -8372,7 +8389,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8372
8389
  });
8373
8390
  const startedAt = Date.now();
8374
8391
  try {
8375
- const toolResult = await ctx.executeTool({
8392
+ const toolResult = await executeCursorTool(ctx, {
8376
8393
  id: args.toolCallId,
8377
8394
  name: "readFile",
8378
8395
  arguments: toolCallArgs
@@ -8442,7 +8459,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8442
8459
  });
8443
8460
  const startedAt = Date.now();
8444
8461
  try {
8445
- const toolResult = await ctx.executeTool({
8462
+ const toolResult = await executeCursorTool(ctx, {
8446
8463
  id: args.toolCallId,
8447
8464
  name: "execShell",
8448
8465
  arguments: toolCallArgs
@@ -8600,7 +8617,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8600
8617
  });
8601
8618
  const startedAt = Date.now();
8602
8619
  try {
8603
- const toolResult = await ctx.executeTool({
8620
+ const toolResult = await executeCursorTool(ctx, {
8604
8621
  id: args.toolCallId,
8605
8622
  name: "writeFile",
8606
8623
  arguments: toolCallArgs
@@ -8662,7 +8679,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8662
8679
  });
8663
8680
  const startedAt = Date.now();
8664
8681
  try {
8665
- const toolResult = await ctx.executeTool({
8682
+ const toolResult = await executeCursorTool(ctx, {
8666
8683
  id: args.toolCallId,
8667
8684
  name: "deleteFile",
8668
8685
  arguments: toolCallArgs
@@ -8781,7 +8798,7 @@ async function handleExecServerMessage(execMsg, h2Request, ctx) {
8781
8798
  });
8782
8799
  const startedAt = Date.now();
8783
8800
  try {
8784
- const toolResult = await ctx.executeTool({
8801
+ const toolResult = await executeCursorTool(ctx, {
8785
8802
  id: args.toolCallId,
8786
8803
  name: toolName,
8787
8804
  arguments: toolCallArgs
@@ -8890,6 +8907,7 @@ function createCursorProvider(config) {
8890
8907
  ...options?.onTextDelta ? { onTextDelta: options.onTextDelta } : {},
8891
8908
  ...options?.onReasoningDelta ? { onReasoningDelta: options.onReasoningDelta } : {},
8892
8909
  ...options?.onToolEvent ? { onToolEvent: options.onToolEvent } : {},
8910
+ ...options?.onActionGate ? { onActionGate: options.onActionGate } : {},
8893
8911
  ...typeof options?.toolEventRound === "number" ? { toolEventRound: options.toolEventRound } : {}
8894
8912
  });
8895
8913
  }
@@ -11433,18 +11451,12 @@ async function generateLocalDialogTitle(input) {
11433
11451
  } else if (typeof request.init?.body === "object" && request.init?.body !== null) {
11434
11452
  parsedBody = request.init.body;
11435
11453
  }
11436
- const patchedBody = isNemotronTitleModel() ? {
11454
+ const patchedBody = {
11437
11455
  ...parsedBody,
11438
- // response_format 与 reasoning_effort 同发会被 RunInfra 400 拒绝;
11439
- // json mode 下模型跳过 thinking(实测 completion 16-18 tokens)。
11440
- // 防御:显式置空,防未来 BUILTIN 配置或 requestOptions 残留该字段。
11456
+ // response_format 与 reasoning_effort 同发会被 RunInfra 400 拒绝,
11457
+ // 标题路径统一走 json mode(跳过 thinking,实测 completion 个位数 tokens)。
11441
11458
  response_format: { type: "json_object" },
11442
- max_tokens: 512,
11443
- reasoning_effort: void 0
11444
- } : {
11445
- ...parsedBody,
11446
- reasoning_effort: "low",
11447
- max_tokens: 3072
11459
+ max_tokens: 512
11448
11460
  };
11449
11461
  const res = await input.fetchImpl(request.url, {
11450
11462
  ...request.init,
@@ -11507,9 +11519,10 @@ async function generateLocalDialogTitle(input) {
11507
11519
  { role: "system", content: buildTitleSystemPrompt(input.existingTitle) },
11508
11520
  { role: "user", content: compactTranscript }
11509
11521
  ],
11510
- // Nemotron json mode(跳过 thinking)与其余路径的 reasoning_effort 优化互斥;
11511
- // 严格 OpenAI 兼容服务端若拒绝未知参数会降级到 fallback。
11512
- ...isNemotronTitleModel() ? { response_format: { type: "json_object" }, max_tokens: 512 } : { reasoning_effort: "low", max_tokens: 3072 },
11522
+ // 标题路径统一 json mode(跳过 thinking);response_format 与
11523
+ // reasoning_effort 同发会被 RunInfra 400 拒绝,故不发 reasoning_effort。
11524
+ response_format: { type: "json_object" },
11525
+ max_tokens: 512,
11513
11526
  stream: false
11514
11527
  }),
11515
11528
  signal: AbortSignal.timeout(timeoutMs)
@@ -11539,14 +11552,13 @@ function transcriptLength(messages) {
11539
11552
  }
11540
11553
  function buildTitleSystemPrompt(existingTitle) {
11541
11554
  const title = existingTitle?.trim();
11542
- const jsonFormatInstruction = isNemotronTitleModel() ? '\n\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' : "";
11543
- const base = `${BUILTIN_TITLE_LLM_CONFIG.prompt}${jsonFormatInstruction}`;
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`;
11544
11557
  return title ? `${base}
11545
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;
11546
11559
  }
11547
- var isNemotronTitleModel = () => BUILTIN_TITLE_LLM_CONFIG.model === PLATFORM_HOSTED_NEMOTRON_35_LIGHTNING_MODEL;
11548
11560
  function extractTitleFromLlmContent(raw) {
11549
- if (isNemotronTitleModel() && raw.trim().startsWith("{")) {
11561
+ if (raw.trim().startsWith("{")) {
11550
11562
  try {
11551
11563
  const parsed = JSON.parse(raw);
11552
11564
  if (typeof parsed?.title === "string" && parsed.title.trim()) {
@@ -3,13 +3,13 @@ import {
3
3
  } from "./chunk-DWLEOOGR.js";
4
4
  import {
5
5
  addContentAction
6
- } from "./chunk-4RXXP6WD.js";
6
+ } from "./chunk-FGEYVPPR.js";
7
7
  import {
8
8
  upload
9
- } from "./chunk-76UA7376.js";
9
+ } from "./chunk-AV6KQCM5.js";
10
10
  import {
11
11
  getRuntimeServerContext
12
- } from "./chunk-HHBXCRJS.js";
12
+ } from "./chunk-PYKV6FSC.js";
13
13
  import {
14
14
  API_ENDPOINTS
15
15
  } from "./chunk-LCBAMY2M.js";
@@ -6,10 +6,10 @@ import {
6
6
  } from "./chunk-AGGIDPCZ.js";
7
7
  import {
8
8
  getModelConfig
9
- } from "./chunk-7UFH6THF.js";
9
+ } from "./chunk-QDHZCAH3.js";
10
10
  import {
11
11
  isPlatformHostedImageModel
12
- } from "./chunk-J7KVJAUQ.js";
12
+ } from "./chunk-WL3UOGYO.js";
13
13
  import {
14
14
  asOptionalFiniteNumber
15
15
  } from "./chunk-WWC7I6TA.js";
@@ -33,13 +33,13 @@ import {
33
33
  resolvePlatformAuthToken,
34
34
  resolvePlatformServerUrl,
35
35
  resolveProviderTransportDecision
36
- } from "./chunk-5Y5G76BJ.js";
36
+ } from "./chunk-SP3DPVBH.js";
37
37
  import {
38
38
  clipCompactText
39
- } from "./chunk-HR5XDXYM.js";
39
+ } from "./chunk-H4RYESI6.js";
40
40
  import {
41
41
  NOLO_CLIENT_VERSION_HEADER
42
- } from "./chunk-J7KVJAUQ.js";
42
+ } from "./chunk-WL3UOGYO.js";
43
43
  import {
44
44
  isRecord
45
45
  } from "./chunk-KUG52IAP.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  MODEL_LOOKUP_MAP
3
- } from "./chunk-7UFH6THF.js";
3
+ } from "./chunk-QDHZCAH3.js";
4
4
  import {
5
5
  ALL_MODELS
6
- } from "./chunk-WJV3G7BM.js";
6
+ } from "./chunk-56W233KG.js";
7
7
  import {
8
8
  PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY
9
- } from "./chunk-2JYSSXLY.js";
9
+ } from "./chunk-VULELK4T.js";
10
10
 
11
11
  // packages/ai/llm/getModelContextWindow.ts
12
12
  var DEFAULT_CONTEXT_WINDOW = 256e3;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  deleteDialog,
3
3
  toast
4
- } from "./chunk-BKPUPZ6W.js";
4
+ } from "./chunk-BJLYCOZK.js";
5
5
  import {
6
6
  deleteServerSyncedCredential
7
- } from "./chunk-K7CNV7GI.js";
7
+ } from "./chunk-U2A47SVI.js";
8
8
  import {
9
9
  require_date_fns
10
10
  } from "./chunk-M76ECQRD.js";
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-HNMXYYJR.js";
20
20
  import {
21
21
  isSystemAdmin
22
- } from "./chunk-X7S7OFUX.js";
22
+ } from "./chunk-3QJTD6DO.js";
23
23
  import {
24
24
  asRecordOrEmpty
25
25
  } from "./chunk-KX6YBIHG.js";
@@ -30,7 +30,7 @@ import {
30
30
  createSpaceKey,
31
31
  localSpaceAuthorityPatchStamp,
32
32
  normalizeSpaceId
33
- } from "./chunk-4RXXP6WD.js";
33
+ } from "./chunk-FGEYVPPR.js";
34
34
  import {
35
35
  patch,
36
36
  read,
@@ -43,7 +43,7 @@ import {
43
43
  uploadFileAction,
44
44
  upsertSSREntity,
45
45
  write
46
- } from "./chunk-76UA7376.js";
46
+ } from "./chunk-AV6KQCM5.js";
47
47
  import {
48
48
  DB_PREFIX,
49
49
  SEPARATOR,
@@ -72,7 +72,7 @@ import {
72
72
  } from "./chunk-I42VC5KR.js";
73
73
  import {
74
74
  readAction
75
- } from "./chunk-2JYSSXLY.js";
75
+ } from "./chunk-VULELK4T.js";
76
76
  import {
77
77
  extractUserId
78
78
  } from "./chunk-BJIRLHJR.js";
@@ -91,13 +91,13 @@ import {
91
91
  scheduleWriteReplication,
92
92
  selectIdentityUserId,
93
93
  selectRuntimeSnapshot
94
- } from "./chunk-HHBXCRJS.js";
94
+ } from "./chunk-PYKV6FSC.js";
95
95
  import {
96
96
  createClientLogger,
97
97
  fetchFromServer,
98
98
  getAllServers,
99
99
  logger
100
- } from "./chunk-L3JWI7WX.js";
100
+ } from "./chunk-QOKAKDPE.js";
101
101
  import {
102
102
  buildTombstoneRecord,
103
103
  isTombstoneRecord
@@ -4659,11 +4659,11 @@ var ENTITY_DELETE_STRATEGIES = {
4659
4659
  await dispatch(deleteTable({ dbKey: key })).unwrap();
4660
4660
  },
4661
4661
  file: async (key, { thunkAPI }) => {
4662
- const { deleteFileAction } = await import("./deleteFile-NPZ64DFN.js");
4662
+ const { deleteFileAction } = await import("./deleteFile-44TUM34Y.js");
4663
4663
  await deleteFileAction(key, thunkAPI);
4664
4664
  },
4665
4665
  image: async (key, { thunkAPI }) => {
4666
- const { deleteFileAction } = await import("./deleteFile-NPZ64DFN.js");
4666
+ const { deleteFileAction } = await import("./deleteFile-44TUM34Y.js");
4667
4667
  await deleteFileAction(key, thunkAPI);
4668
4668
  },
4669
4669
  agent: async (key, { dispatch, userId, sourceServerOrigin }) => {
@@ -7053,7 +7053,7 @@ var fetchSpaceAction = async (input, thunkAPI) => {
7053
7053
  const spaceKey = createSpaceKey.space(spaceId);
7054
7054
  const readSpace = async (dbKey) => {
7055
7055
  try {
7056
- const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-FWF5F4L7.js");
7056
+ const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-D5CNGWPD.js");
7057
7057
  if (fresh) {
7058
7058
  return await dispatch(readAndWait2(dbKey)).unwrap();
7059
7059
  }
@@ -7467,7 +7467,7 @@ var spaceSlice = createSliceWithThunks2({
7467
7467
  markDialogRead: create.asyncThunk(
7468
7468
  async (payload, thunkAPI) => {
7469
7469
  if (payload.dialogKey) {
7470
- const { patch: patch2 } = await import("./dbSlice-FWF5F4L7.js");
7470
+ const { patch: patch2 } = await import("./dbSlice-D5CNGWPD.js");
7471
7471
  try {
7472
7472
  await thunkAPI.dispatch(
7473
7473
  patch2({ dbKey: payload.dialogKey, changes: { unreadAt: null } })
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  clearCliLocalRuntimePreparedAgentCache
3
- } from "./chunk-W6N3GLUU.js";
3
+ } from "./chunk-GV35EHNA.js";
4
4
  import {
5
5
  getReadableCliDb
6
6
  } from "./chunk-43CXXVJD.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getRuntimeServerContext,
3
3
  scheduleDeleteReplication
4
- } from "./chunk-HHBXCRJS.js";
4
+ } from "./chunk-PYKV6FSC.js";
5
5
  import {
6
6
  fetchFromClientDb
7
- } from "./chunk-L3JWI7WX.js";
7
+ } from "./chunk-QOKAKDPE.js";
8
8
  import {
9
9
  buildTombstoneRecord
10
10
  } from "./chunk-GBRG75BQ.js";
@@ -22,13 +22,14 @@ var CODE_WORK_DISCIPLINE_BODY = `## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\u
22
22
  - **\u5EFA\u8BAE\u6C47\u62A5**\uFF1A\u4EA4\u4ED8\u65F6\u628A\u8FC7\u7A0B\u4E2D\u53D1\u73B0\u7684**\u4EFB\u4F55\u503C\u5F97\u7528\u6237\u77E5\u9053\u7684\u4E8B**\u90FD\u5217\u51FA\u6765\uFF08\u9884\u5B58\u65E0\u5173\u6539\u52A8\u3001\u65E2\u6709\u6D4B\u8BD5\u9694\u79BB\u95EE\u9898\u3001\u6F5C\u5728\u98CE\u9669\u3001\u540E\u7EED\u53EF\u4F18\u5316\u70B9\u3001\u9700\u7528\u6237\u51B3\u7B56\u7684\u4E8B\u9879\uFF09\uFF0C\u4E0D\u8981\u53EA\u62A5\u300C\u505A\u5B8C\u4E86\u300D\u3002
23
23
 
24
24
  ## Review \u7EAA\u5F8B\uFF08commit \u524D\u786C\u95E8\uFF09
25
- - \u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\uFF08\u9519\u522B\u5B57/\u683C\u5F0F/CSS \u5FAE\u8C03\uFF09\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 \u5DE5\u4F5C\u533A diff\uFF08\`git diff\`\uFF0C\u672A\u63D0\u4EA4\u7684\u6539\u52A8\uFF09\u3002reviewer \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\uFF0C\u8DE8\u5BB6\u65CF\u4F18\u5148\u975E\u5F3A\u5236\uFF09\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002
25
+ - **\u9636\u6BB5\u5212\u5206**\uFF1A\u4E25\u683C\u533A\u5206\u300C\u5B9E\u73B0/\u6784\u5EFA/\u5B89\u88C5/\u7528\u6237\u6D4B\u8BD5/\u6839\u636E\u53CD\u9988\u8FED\u4EE3\u300D\u4E0E\u300C\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u300D\u9636\u6BB5\u3002UI/\u524D\u7AEF\u53CA\u5176\u4ED6\u9700\u7528\u6237\u9A8C\u6536\u7684\u4EFB\u52A1\uFF0C\u5728\u5B9E\u73B0\u9636\u6BB5\u4E0D\u5F97\u89E6\u53D1\u6216\u7B49\u5F85\u6700\u7EC8\u72EC\u7ACB review\uFF0C\u5E94\u5148\u4EA4\u4ED8\u53EF\u6D4B\u8BD5\u4EA7\u7269\u7B49\u5F85\u7528\u6237\u53CD\u9988\u3002
26
+ - \u6700\u7EC8 review \u4EC5\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4/\u5408\u5E76\u65F6\u8FDB\u884C\u3002\u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\uFF08\u9519\u522B\u5B57/\u683C\u5F0F/CSS \u5FAE\u8C03\uFF09\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 \u5DE5\u4F5C\u533A diff\uFF08\`git diff\`\uFF0C\u672A\u63D0\u4EA4\u7684\u6539\u52A8\uFF09\u3002reviewer \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\uFF0C\u8DE8\u5BB6\u65CF\u4F18\u5148\u975E\u5F3A\u5236\uFF09\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002
26
27
  - \u6D3E\u53D1\u8D70 \`startAgentRun(agentKey, task, { ephemeral: true })\`\uFF08web/\u684C\u9762\u7AEF\u6CA1\u6709 nolo CLI\uFF0C\u6240\u6709 host \u90FD\u6709\u8FD9\u4E2A\u5DE5\u5177\uFF09\u3002ephemeral \u8BA9 review \u5B8C\u6210\u540E\u4E0D\u7559 dialog \u8BB0\u5F55\u3002
27
28
  - task \u91CC\u5FC5\u987B\u5199\u660E\u5BA1\u67E5\u5BF9\u8C61\uFF08\`git diff\` \u770B\u5DE5\u4F5C\u533A\u6539\u52A8\uFF0C\u6216 \`git diff alpha...HEAD\` \u770B\u5DF2\u63D0\u4EA4\u6539\u52A8\uFF09\uFF0C\u5426\u5219 reviewer \u4E0D\u77E5\u9053\u5BA1\u4EC0\u4E48\u3002
28
29
  - \u6309\u89D2\u8272\u52A0\u8F7D\u5BF9\u5E94 skill\uFF1Areviewer \u5148 \`loadSkill("coding-review")\` \u62FF\u901A\u7528\u6D41\u7A0B\uFF0C\u518D\u6309\u89D2\u8272 \`loadSkill("coding-review-<role>")\` \u62FF\u68C0\u67E5\u9879\u3002\u89D2\u8272\u6E05\u5355\uFF1Acode-quality\uFF08**\u5FC5\u8DD1**\uFF09/ architecture\uFF08**\u5355\u72EC\u6D3E\u53D1**\uFF0C\u4E2D\u7EA7\u4EE5\u4E0A\u95EE\u9898\uFF09/ security\uFF08\u6309\u9700 + \u5B89\u5168\u654F\u611F\u89E6\u53D1\u5FC5\u8DD1\uFF09/ frontend-ux\uFF08\u6D89\u53CA UI \u65F6\uFF09/ backend-data\uFF08\u6D89\u53CA server \u65F6\uFF09\u3002\u89D2\u8272\u5207\u5272\u7684\u76EE\u7684\u662F\u6CE8\u610F\u529B\u9694\u79BB\u2014\u2014\u6BCF\u4E2A\u89D2\u8272\u53EA\u76EF\u81EA\u5DF1\u7684\u68C0\u67E5\u9762\uFF0C\u6309\u9700\u542F\u7528\uFF0C\u907F\u514D\u4E00\u4E2A reviewer \u80CC\u6240\u6709\u89D2\u8272\u5BFC\u81F4\u6CE8\u610F\u529B\u7A00\u91CA\u3002
29
30
  - Verdict \u6807\u51C6\uFF1AAPPROVE\uFF08\u65E0 CRITICAL \u6216 HIGH\uFF09\u2192 \u53EF commit\uFF1BWARNING\uFF08\u4EC5 HIGH\uFF09\u2192 \u62A5\u544A owner \u51B3\u5B9A\uFF1BBLOCK\uFF08\u6709 CRITICAL\uFF09\u2192 \u5FC5\u987B\u5148\u4FEE\u3002
30
31
  - review \u53EF\u80FD\u591A\u8F6E\u6536\u655B\uFF08\u6709 finding\u2192\u4FEE\u2192\u518D\u5BA1\u2192\u76F4\u5230 APPROVE\uFF09\u3002\u6BCF\u8F6E review \u662F\u65E0\u4E0A\u4E0B\u6587\u7684\u2014\u2014reviewer \u53EA\u770B\u5F53\u524D\u5DE5\u4F5C\u533A diff\uFF0C\u4E0D\u5E26\u4E0A\u4E00\u8F6E finding \u8BB0\u5FC6\u3002
31
- - **\u81EA\u52A8 review \u5FAA\u73AF**\uFF1A\u4EFB\u52A1\u5B8C\u6210\u540E**\u81EA\u52A8\u8FDB\u5165 review \u5FAA\u73AF**\uFF0C\u4E0D\u8981\u505C\u5728\u300C\u6539\u5B8C\u4EA4\u4ED8\u300D\u5C31\u7B49\u8C03\u7528\u65B9\u3002\u6D41\u7A0B\uFF1A\u6539\u5B8C \u2192 \u6D3E reviewer \u5BA1\u5DE5\u4F5C\u533A diff \u2192 \u82E5\u51FA finding \u5C31\u4FEE\u590D \u2192 \u590D\u5BA1 \u2192 \u76F4\u5230 APPROVE \u624D\u63D0\u4EA4\u3002\u9664\u975E\u8C03\u7528\u65B9\u660E\u786E\u8BF4\u300C\u53EA\u6539\u4E0D\u5BA1\u300D\uFF0C\u5426\u5219\u9ED8\u8BA4\u8D70\u5B8C\u6574\u5FAA\u73AF\u3002
32
+ - **\u63D0\u4EA4\u524D review \u5FAA\u73AF**\uFF1A\u7528\u6237\u660E\u786E\u786E\u8BA4\u51C6\u5907\u63D0\u4EA4\u540E\u8FDB\u5165 review \u5FAA\u73AF\uFF0C\u6D41\u7A0B\uFF1A\u6D3E reviewer \u5BA1\u5DE5\u4F5C\u533A diff \u2192 \u82E5\u51FA finding \u5C31\u4FEE\u590D \u2192 \u590D\u5BA1 \u2192 \u76F4\u5230 APPROVE \u624D\u63D0\u4EA4\u3002\u5B89\u5168\u5BA1\u8BA1\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u7684\u53EA\u8BFB review \u53EF\u63D0\u524D\u505A\uFF0C\u4F46\u4E0D\u5F97\u963B\u585E\u7528\u6237\u6D4B\u8BD5\u3002\u9664\u975E\u8C03\u7528\u65B9\u660E\u786E\u8BF4\u300C\u53EA\u6539\u4E0D\u5BA1\u300D\u6216\u7528\u6237\u660E\u786E\u8DF3\u8FC7\uFF0C\u5426\u5219\u63D0\u4EA4\u524D\u5FC5\u987B\u8D70\u5B8C\u6574\u5FAA\u73AF\u3002
32
33
  - \u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u3001\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit message \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\uFF0C\u4F46\u9ED8\u8BA4\u5FC5\u987B\u6D3E review\u3002`;
33
34
  var buildCodeWorkDiscipline = (heading) => `# ${heading}
34
35
 
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  patch,
9
9
  selectById
10
- } from "./chunk-76UA7376.js";
10
+ } from "./chunk-AV6KQCM5.js";
11
11
  import {
12
12
  __toESM
13
13
  } from "./chunk-4VNS5WPM.js";
@@ -2,7 +2,7 @@ import {
2
2
  getAllServers,
3
3
  getIsDesktopApp,
4
4
  isAbortError
5
- } from "./chunk-L3JWI7WX.js";
5
+ } from "./chunk-QOKAKDPE.js";
6
6
  import {
7
7
  isRecord
8
8
  } from "./chunk-KUG52IAP.js";
@@ -10,7 +10,7 @@ import {
10
10
  platformHostedModels,
11
11
  toCnyCredits,
12
12
  zaiModels
13
- } from "./chunk-J7KVJAUQ.js";
13
+ } from "./chunk-WL3UOGYO.js";
14
14
 
15
15
  // packages/integrations/anthropic/anthropicModels.ts
16
16
  var anthropicModels = [