nolo-cli 0.10.0 → 0.12.0-alpha.1

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 (125) hide show
  1. package/{_executeModel-YAXYAUOK.js → _executeModel-MWAY74HA.js} +47 -44
  2. package/{action-TLI3V62L.js → action-RAXNQQKC.js} +9 -10
  3. package/{addContentAction-PLWJSCOZ.js → addContentAction-ZHI7TVV3.js} +8 -10
  4. package/{addDialogAgentAction-BJ6SB76X.js → addDialogAgentAction-JWXPKXNC.js} +7 -8
  5. package/{agentDeleteCommand-2VYX73U5.js → agentDeleteCommand-LXR5A5FV.js} +36 -26
  6. package/{agentEmailCommands-3GDZIX64.js → agentEmailCommands-DXRAP7BB.js} +63 -58
  7. package/{agentListCommands-UWVBT3LH.js → agentListCommands-ZFMS5ZLY.js} +132 -35
  8. package/{agentMachineCommands-WOKMUG2Y.js → agentMachineCommands-ZJLYVV52.js} +40 -29
  9. package/{agentPullCommand-O2MTUAFR.js → agentPullCommand-KRBRIFIY.js} +6 -6
  10. package/{agentRecordCommands-MVNZRH3U.js → agentRecordCommands-DFS626TB.js} +55 -50
  11. package/{agentRunCommand-K7THIJLA.js → agentRunCommand-GWBIE2TS.js} +60 -56
  12. package/{agentRunControl-K4VKNEHF.js → agentRunControl-IX4F5W2C.js} +3 -3
  13. package/{agentRuntimeLocal-WJIGU24U.js → agentRuntimeLocal-YNZSHMZC.js} +29 -14
  14. package/{agentSlice-LL5TKZEO.js → agentSlice-T2PXOEPQ.js} +9 -10
  15. package/{authCommand-TC2SW2CQ.js → authCommand-DMW336GT.js} +13 -13
  16. package/{authCommands-XPEHTKSM.js → authCommands-GH5T6RYV.js} +6 -6
  17. package/{chunk-5JGGZCZL.js → chunk-3HHTVM6G.js} +64 -5
  18. package/chunk-3QKO4EHV.js +112 -0
  19. package/{chunk-AUQ747NZ.js → chunk-43UD5ZP7.js} +76 -15
  20. package/{chunk-6SLCD4RB.js → chunk-4BTHUYMY.js} +596 -67
  21. package/{chunk-T7R3NGUU.js → chunk-4EH7AR52.js} +13 -13
  22. package/{chunk-C3RUNRHT.js → chunk-4GBNEA5B.js} +1 -1
  23. package/{chunk-4IJYA27C.js → chunk-4LG74DRG.js} +1 -1
  24. package/{chunk-2FTTDCD4.js → chunk-4ON5AV72.js} +2 -1
  25. package/{chunk-IWX4UW2E.js → chunk-524BDL33.js} +89 -8
  26. package/{chunk-EXXFGKF7.js → chunk-5ITRDSHY.js} +1400 -119
  27. package/{chunk-ISNCLGUZ.js → chunk-5NBHQD4D.js} +4 -3
  28. package/{chunk-7KNKFIRO.js → chunk-6LMFFG3K.js} +3 -3
  29. package/{chunk-PAKN26FP.js → chunk-6OVCRC72.js} +1 -1
  30. package/{chunk-CKOJQDKR.js → chunk-7JJCGV7N.js} +146 -3
  31. package/{chunk-KBKYAONQ.js → chunk-7MYHLZ3F.js} +2 -2
  32. package/{chunk-PIVFPOW6.js → chunk-AM53Q2SD.js} +175 -2541
  33. package/chunk-BYXBJQAS.js +0 -0
  34. package/{chunk-CL3IOKGK.js → chunk-DE5BA4O6.js} +20 -2
  35. package/{chunk-6KUOUWMP.js → chunk-DRMGJFGQ.js} +300 -89
  36. package/{chunk-QAALPJS7.js → chunk-EBH7G34M.js} +20 -7
  37. package/{chunk-HJGEVL7C.js → chunk-G3B356GF.js} +15 -17
  38. package/{chunk-OZMMKDBI.js → chunk-GDBCUWQ3.js} +26 -20
  39. package/{chunk-I5URP43I.js → chunk-GPZM7QH6.js} +9 -9
  40. package/chunk-IKXL2HZ3.js +70 -0
  41. package/{chunk-AS4PVWA4.js → chunk-IVAOVLM7.js} +1 -1
  42. package/{chunk-TNPIMII7.js → chunk-JUN3HFMN.js} +221 -81
  43. package/{chunk-HFASY3WO.js → chunk-JZDIW766.js} +1 -1
  44. package/{chunk-6JJWFVZ6.js → chunk-LHSJMY5V.js} +17 -17
  45. package/chunk-LTRXGFMS.js +83 -0
  46. package/{chunk-YIHFXH5Q.js → chunk-MEVCDATU.js} +3 -3
  47. package/{chunk-TILFE6LV.js → chunk-NCGFB7NN.js} +5 -3
  48. package/{chunk-BE2OOJ5P.js → chunk-NITP2JDG.js} +42 -11
  49. package/{chunk-YPRZSPF3.js → chunk-OCDEWRE2.js} +1 -1
  50. package/{chunk-VVX233PH.js → chunk-OHEKYYJF.js} +9 -9
  51. package/chunk-OOIN7HSO.js +146 -0
  52. package/{chunk-WPE4F4Z6.js → chunk-OPKKB25T.js} +1 -1
  53. package/{chunk-OR2XR25C.js → chunk-QCA3EPYK.js} +8 -8
  54. package/{chunk-SL35K7AH.js → chunk-QLUFR47U.js} +13 -83
  55. package/{chunk-CDTLMEB3.js → chunk-RNQ5BLR2.js} +1 -1
  56. package/{chunk-AVMKZHBC.js → chunk-RSEUHW6T.js} +3 -2
  57. package/{chunk-TYSCFY6S.js → chunk-RZ735TLX.js} +762 -167
  58. package/chunk-S3UTETIC.js +4885 -0
  59. package/chunk-S73OEOHH.js +2286 -0
  60. package/{chunk-JRKKFRAV.js → chunk-TSKWE74T.js} +58 -8
  61. package/{chunk-A67QFHAA.js → chunk-UG3WOFU6.js} +1 -1
  62. package/{chunk-4ZDM73SD.js → chunk-V2J635L5.js} +1 -1
  63. package/chunk-VC6OZXO5.js +298 -0
  64. package/{chunk-7U44LYTR.js → chunk-WPHL6ALY.js} +1 -1
  65. package/{chunk-4SIMLBEU.js → chunk-WTYKCU4W.js} +9 -9
  66. package/{chunk-NPVBXJY2.js → chunk-WWU275LU.js} +9 -9
  67. package/{chunk-ZQ2UM4KG.js → chunk-WZSRQNQG.js} +1 -292
  68. package/{chunk-DSZUWUYB.js → chunk-XHQWJUW4.js} +2 -2
  69. package/{chunk-GAKEBQD6.js → chunk-YDCZVUFP.js} +4 -0
  70. package/{chunk-2O4IZNTG.js → chunk-YTQLJYLB.js} +2 -2
  71. package/{chunk-3Y3HW5PX.js → chunk-ZPFRLGIZ.js} +1512 -935
  72. package/{chunk-5KLGBAAR.js → chunk-ZR4VHQ5D.js} +14 -13
  73. package/cliEnvHelpers-VYC2OPTB.js +30 -0
  74. package/{cliExecutor-DNE7TCC4.js → cliExecutor-K3F7DMRO.js} +2 -2
  75. package/{createAgentAutomationAction-CCE7CWGQ.js → createAgentAutomationAction-G32GKDGV.js} +22 -23
  76. package/{createDialogAction-QTRR4AT7.js → createDialogAction-TISANRZK.js} +25 -25
  77. package/{createPageAction-Y4KQOAJE.js → createPageAction-O7KOYNV4.js} +27 -27
  78. package/{dbSlice-WWNV2SGX.js → dbSlice-WDP2ZZHK.js} +7 -8
  79. package/{deleteFile-OW53A6BX.js → deleteFile-M7UNIUOO.js} +5 -5
  80. package/{dialogCommands-SMKIAC3Y.js → dialogCommands-6JPB3YQY.js} +33 -23
  81. package/{dialogSlice-PT7YBWNE.js → dialogSlice-PRHHYSP5.js} +21 -22
  82. package/{docCreateCommands-RFNA4HNM.js → docCreateCommands-75E6TZNN.js} +36 -25
  83. package/{docDeleteCommands-4YZ325M6.js → docDeleteCommands-EJHLN7LW.js} +37 -27
  84. package/{docReadCommands-RT6VAFFG.js → docReadCommands-RJYBC4FS.js} +36 -25
  85. package/{docStore-QUQZAFZF.js → docStore-H5VWKT5D.js} +22 -23
  86. package/{docUpdateCommands-EKKKNYPW.js → docUpdateCommands-MG4CNISV.js} +36 -25
  87. package/fetchMessages-KTNM7QAR.js +1 -1
  88. package/{getPricing-3E6UNPKL.js → getPricing-6TOZXPAU.js} +7 -3
  89. package/{handleSendMessageAction-5NSYAS53.js → handleSendMessageAction-QTUGICSZ.js} +22 -23
  90. package/index.js +77 -76
  91. package/{machineCommands-DOOSIUKG.js → machineCommands-MAV7M3TK.js} +67 -60
  92. package/{machineWsRunDispatch-PIOIQRBW.js → machineWsRunDispatch-ZOEGTKHC.js} +54 -49
  93. package/{memoryCommands-O4MIPIWQ.js → memoryCommands-AFMES3LN.js} +5 -5
  94. package/{models-4OPOOLFS.js → models-LSCRJJ6P.js} +2 -2
  95. package/package.json +1 -1
  96. package/{read-GW7ZEI23.js → read-2MIMRBZ2.js} +5 -5
  97. package/{readDocTool-HUFU6OCT.js → readDocTool-QHVGQHUJ.js} +1 -1
  98. package/{readlineWorkspace-QEAOH5EP.js → readlineWorkspace-SWQKC7ZS.js} +1126 -678
  99. package/{removeDialogAgentAction-OHMCNSSD.js → removeDialogAgentAction-GTX5AN54.js} +11 -11
  100. package/{runAgentClientLoop-AIGLXC3R.js → runAgentClientLoop-P25HACXX.js} +42 -40
  101. package/{runtimeDoctorCommands-LRHLPDRC.js → runtimeDoctorCommands-QNF3J3UV.js} +6 -6
  102. package/{setDialogExtraReferencesAction-YJUM5BWQ.js → setDialogExtraReferencesAction-WFQ63KYO.js} +7 -8
  103. package/{setPrimaryDialogAgentAction-EBAREZDM.js → setPrimaryDialogAgentAction-P57FXTSU.js} +11 -11
  104. package/{settingSlice-UW4IUI5L.js → settingSlice-CK5YZGNI.js} +8 -9
  105. package/skillDiscovery-ZYHSX7VD.js +16 -0
  106. package/{spaceCommands-BKHSPR73.js → spaceCommands-6O5EFEM5.js} +41 -33
  107. package/{spaceSlice-TYNWE3OC.js → spaceSlice-4EXTYXS4.js} +25 -24
  108. package/{streamAgentChatTurn-HRMFFA7E.js → streamAgentChatTurn-Q3FJAHG2.js} +205 -107
  109. package/{tableCommands-O7O2LBEG.js → tableCommands-E4SQWDOX.js} +10 -10
  110. package/{tools-3JNDS3WH.js → tools-AHNQE4GP.js} +33 -31
  111. package/{tuiSummaryLlmCaller-RV3THLZF.js → tuiSummaryLlmCaller-TXLF4MEI.js} +8 -6
  112. package/{updateCommands-VOSPKXFF.js → updateCommands-XZDOOYFH.js} +13 -5
  113. package/{updateDialogTitleAction-OCETSKCP.js → updateDialogTitleAction-XZDVLKVX.js} +25 -25
  114. package/chunk-5MMAK75Q.js +0 -15
  115. package/chunk-AZPCASRE.js +0 -36
  116. package/chunk-BBYVOSU2.js +0 -792
  117. package/chunk-DCOA4QSN.js +0 -105
  118. package/chunk-UAD2WT54.js +0 -64
  119. package/{chunk-DZ3XJVET.js → chunk-3QAF2LTL.js} +3 -3
  120. package/{chunk-X7W4TNB4.js → chunk-CMKUBIGW.js} +3 -3
  121. package/{chunk-4CQLVGRV.js → chunk-ID4G2MAR.js} +3 -3
  122. package/{chunk-5CS33IBL.js → chunk-PDL2AV3E.js} +3 -3
  123. package/{chunk-EHLHSX7R.js → chunk-TOILAPLH.js} +3 -3
  124. package/{chunk-UTLZINAP.js → chunk-TSUJOM6N.js} +10 -10
  125. package/{offlineMarxistsAgentCommand-BCPJITJL.js → offlineMarxistsAgentCommand-5OOWZLJI.js} +3 -3
@@ -1,8 +1,13 @@
1
1
  import {
2
+ CORE_DRAIN_REASON,
2
3
  isGatewayHttpStatus,
3
4
  normalizeNonNegativeMs,
4
5
  parseRetryAfterHeaderMs
5
- } from "./chunk-GAKEBQD6.js";
6
+ } from "./chunk-YDCZVUFP.js";
7
+ import {
8
+ sortSafeAgentSummaries,
9
+ toSafeAgentSummary
10
+ } from "./chunk-OOIN7HSO.js";
6
11
  import {
7
12
  getUserDataItemTimestamp,
8
13
  mergeAndDedupUserData
@@ -13,7 +18,7 @@ import {
13
18
  readPageFunc,
14
19
  readPageFunctionSchema,
15
20
  slateToSimplifiedMarkdown
16
- } from "./chunk-AS4PVWA4.js";
21
+ } from "./chunk-IVAOVLM7.js";
17
22
  import {
18
23
  markdownToSlate
19
24
  } from "./chunk-3LY4F7SV.js";
@@ -23,12 +28,15 @@ import {
23
28
  import {
24
29
  slateToRenderMarkdown
25
30
  } from "./chunk-63W5N6P3.js";
31
+ import {
32
+ isSkillSummaryMarker
33
+ } from "./chunk-VF4K2QE6.js";
26
34
  import {
27
35
  createDocState
28
- } from "./chunk-YIHFXH5Q.js";
36
+ } from "./chunk-MEVCDATU.js";
29
37
  import {
30
38
  createDialogAction
31
- } from "./chunk-HJGEVL7C.js";
39
+ } from "./chunk-G3B356GF.js";
32
40
  import {
33
41
  buildSkillDocMarkdown,
34
42
  normalizeSkillBudgetTier,
@@ -37,12 +45,11 @@ import {
37
45
  parseExternalSkillMarkdown,
38
46
  parseSkillDocProtocol,
39
47
  resolvePageSkillMetadata
40
- } from "./chunk-ZQ2UM4KG.js";
48
+ } from "./chunk-VC6OZXO5.js";
41
49
  import {
42
50
  addCategory,
43
51
  addContentToSpace,
44
52
  addRow,
45
- buildDatabaseFileContentUrl,
46
53
  createTable,
47
54
  deleteDbKey,
48
55
  deleteSpace,
@@ -68,20 +75,13 @@ import {
68
75
  updateContentCategory,
69
76
  updateContentTitle,
70
77
  updateStep
71
- } from "./chunk-PIVFPOW6.js";
78
+ } from "./chunk-AM53Q2SD.js";
72
79
  import {
73
80
  createAgent,
74
81
  runLlm,
75
82
  streamAgentChatTurn,
76
83
  updateAgent
77
- } from "./chunk-I5URP43I.js";
78
- import {
79
- addContentAction
80
- } from "./chunk-5JGGZCZL.js";
81
- import {
82
- createSpaceKey,
83
- normalizeSpaceId
84
- } from "./chunk-UAD2WT54.js";
84
+ } from "./chunk-GPZM7QH6.js";
85
85
  import {
86
86
  NOLO_WORKSPACE_TOOL_NAMES,
87
87
  buildNoloSubjectRefQueryTarget,
@@ -97,10 +97,13 @@ import {
97
97
  redactAgentRecordForWorkspaceTool,
98
98
  resolveNoloDialogInput,
99
99
  verifyNoloDialogSubjectRefQuery
100
- } from "./chunk-AUQ747NZ.js";
100
+ } from "./chunk-43UD5ZP7.js";
101
+ import {
102
+ buildDatabaseFileContentUrl
103
+ } from "./chunk-S73OEOHH.js";
101
104
  import {
102
105
  DEFAULT_MODEL
103
- } from "./chunk-BBYVOSU2.js";
106
+ } from "./chunk-S3UTETIC.js";
104
107
  import {
105
108
  ToolApiError,
106
109
  buildToolRequestHeaders,
@@ -118,22 +121,30 @@ import {
118
121
  selectCurrentDialogKey,
119
122
  selectPendingRawDataByPageKey
120
123
  } from "./chunk-3ASDTTEI.js";
121
- import {
122
- compactWhitespace
123
- } from "./chunk-DWLEOOGR.js";
124
124
  import {
125
125
  toErrorMessage
126
126
  } from "./chunk-HNMXYYJR.js";
127
+ import {
128
+ compactWhitespace
129
+ } from "./chunk-DWLEOOGR.js";
127
130
  import {
128
131
  shareResourceAction
129
- } from "./chunk-KBKYAONQ.js";
132
+ } from "./chunk-7MYHLZ3F.js";
130
133
  import {
131
134
  AGENT_UPDATE_FIELD_NAMES,
132
135
  normalizeAgentUpdateFieldList,
133
136
  selectAutoApproveSelfUpdateFields,
134
137
  selectCurrentServer,
135
138
  selectSyncServers
136
- } from "./chunk-4SIMLBEU.js";
139
+ } from "./chunk-WTYKCU4W.js";
140
+ import {
141
+ asRecordOrEmpty
142
+ } from "./chunk-KX6YBIHG.js";
143
+ import {
144
+ addContentAction,
145
+ createSpaceKey,
146
+ normalizeSpaceId
147
+ } from "./chunk-3HHTVM6G.js";
137
148
  import {
138
149
  patch,
139
150
  read,
@@ -141,10 +152,7 @@ import {
141
152
  readAndWaitAction,
142
153
  toTimestampMs,
143
154
  write
144
- } from "./chunk-BE2OOJ5P.js";
145
- import {
146
- asRecordOrEmpty
147
- } from "./chunk-KX6YBIHG.js";
155
+ } from "./chunk-NITP2JDG.js";
148
156
  import {
149
157
  SEPARATOR,
150
158
  createAgentKey,
@@ -169,7 +177,7 @@ import {
169
177
  } from "./chunk-QSJ3HFEF.js";
170
178
  import {
171
179
  readAction
172
- } from "./chunk-DSZUWUYB.js";
180
+ } from "./chunk-XHQWJUW4.js";
173
181
  import {
174
182
  createAsyncThunk,
175
183
  getRuntimeServerContext,
@@ -177,28 +185,28 @@ import {
177
185
  selectIdentityToken,
178
186
  selectIdentityUserId,
179
187
  selectRuntimeSnapshot
180
- } from "./chunk-UTLZINAP.js";
188
+ } from "./chunk-TSUJOM6N.js";
181
189
  import {
182
190
  isAbortError
183
191
  } from "./chunk-OOSFSFMA.js";
184
192
  import {
185
- DEFAULT_LOCAL_API_ORIGIN
186
- } from "./chunk-4SN6J65J.js";
193
+ isRecord
194
+ } from "./chunk-KUG52IAP.js";
195
+ import {
196
+ asTrimmedString
197
+ } from "./chunk-3EUW3WEO.js";
187
198
  import {
188
199
  API_ENDPOINTS
189
200
  } from "./chunk-LCBAMY2M.js";
190
201
  import {
191
- asTrimmedString
192
- } from "./chunk-3EUW3WEO.js";
202
+ DEFAULT_LOCAL_API_ORIGIN
203
+ } from "./chunk-4SN6J65J.js";
193
204
  import {
194
205
  normalizeServerOrigin
195
206
  } from "./chunk-CF7PE763.js";
196
207
  import {
197
208
  asOptionalTrimmedString
198
209
  } from "./chunk-G3SUCT4W.js";
199
- import {
200
- isRecord
201
- } from "./chunk-KUG52IAP.js";
202
210
  import {
203
211
  __toESM
204
212
  } from "./chunk-4VNS5WPM.js";
@@ -743,7 +751,19 @@ var ai_locale_default = {
743
751
  chat: "Start Chat",
744
752
  public: "Public",
745
753
  byConversation: "Create AI by Conversation",
746
- manualConfiguration: "Manual Configuration"
754
+ manualConfiguration: "Manual Configuration",
755
+ quickCreate: {
756
+ reasoningEffort: "Reasoning Effort",
757
+ reasoningEffortOptions: {
758
+ none: "None",
759
+ minimal: "Minimal",
760
+ low: "Low",
761
+ medium: "Medium",
762
+ high: "High",
763
+ xhigh: "X-High",
764
+ max: "Max"
765
+ }
766
+ }
747
767
  },
748
768
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
749
769
  localCreate: {
@@ -848,7 +868,7 @@ var ai_locale_default = {
848
868
  frequencyPenalty: "Reduces word repetition, from -2 to 2. Higher discourages repetition.",
849
869
  presencePenalty: "Reduces topic repetition, from -2 to 2. Higher encourages new topics.",
850
870
  maxTokens: "Limits response length, minimum 1.",
851
- reasoningEffort: "How hard the model thinks before answering (low / medium / high). Only applies to models that support reasoning effort."
871
+ reasoningEffort: "How hard the model thinks before answering. Supported values: none / minimal / low / medium / high / xhigh / max (varies by model/provider). Only applies to models that support reasoning effort."
852
872
  },
853
873
  // Validation Messages
854
874
  validation: {
@@ -866,7 +886,7 @@ var ai_locale_default = {
866
886
  maxTokensMin: "Max Tokens must be at least 1",
867
887
  maxTokensMax: "Max Tokens must be at most 500,000",
868
888
  maxTokensRange: "Max Tokens must be between {{min}} and {{max}}",
869
- reasoningEffortInvalid: "Reasoning effort must be low, medium, or high",
889
+ reasoningEffortInvalid: "Reasoning effort must be none, minimal, low, medium, high, xhigh, or max",
870
890
  thinkingBudgetMin: "Thinking budget must be at least 1024 tokens",
871
891
  thinkingBudgetMax: "Thinking budget must be at most 100,000 tokens",
872
892
  apiKeyRequired: "API Key is required when not using Server Proxy, Ollama or Custom provider",
@@ -1120,7 +1140,19 @@ var ai_locale_default = {
1120
1140
  chat: "\u5F00\u59CB\u804A\u5929",
1121
1141
  public: "\u516C\u5F00",
1122
1142
  byConversation: "\u7528\u5BF9\u8BDD\u521B\u5EFA AI",
1123
- manualConfiguration: "\u624B\u52A8\u914D\u7F6E AI"
1143
+ manualConfiguration: "\u624B\u52A8\u914D\u7F6E AI",
1144
+ quickCreate: {
1145
+ reasoningEffort: "\u63A8\u7406\u5F3A\u5EA6",
1146
+ reasoningEffortOptions: {
1147
+ none: "\u5173\u95ED",
1148
+ minimal: "\u6781\u7B80",
1149
+ low: "\u4F4E",
1150
+ medium: "\u4E2D",
1151
+ high: "\u9AD8",
1152
+ xhigh: "\u8D85\u9AD8",
1153
+ max: "\u6700\u5927"
1154
+ }
1155
+ }
1124
1156
  },
1125
1157
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1126
1158
  localCreate: {
@@ -1224,7 +1256,7 @@ var ai_locale_default = {
1224
1256
  frequencyPenalty: "\u964D\u4F4E\u8BCD\u6C47\u91CD\u590D\u5EA6\uFF0C\u8303\u56F4-2\u52302\u3002\u8D8A\u9AD8\u8D8A\u80FD\u907F\u514D\u91CD\u590D\u7528\u8BCD\u3002",
1225
1257
  presencePenalty: "\u964D\u4F4E\u4E3B\u9898\u91CD\u590D\u5EA6\uFF0C\u8303\u56F4-2\u52302\u3002\u8D8A\u9AD8\u8D8A\u9F13\u52B1\u8C08\u8BBA\u65B0\u4E3B\u9898\u3002",
1226
1258
  maxTokens: "\u9650\u5236\u5355\u6B21\u56DE\u590D\u7684\u957F\u5EA6\uFF0C\u6700\u5C0F\u4E3A1\u3002",
1227
- reasoningEffort: "\u63A7\u5236\u6A21\u578B\u56DE\u7B54\u524D\u7684\u63A8\u7406\u5F3A\u5EA6\uFF08low / medium / high\uFF09\u3002\u4EC5\u5BF9\u652F\u6301\u63A8\u7406\u5F3A\u5EA6\u7684\u6A21\u578B\u751F\u6548\u3002"
1259
+ reasoningEffort: "\u63A7\u5236\u6A21\u578B\u56DE\u7B54\u524D\u7684\u63A8\u7406\u5F3A\u5EA6\u3002\u652F\u6301\u7684\u503C\uFF1Anone / minimal / low / medium / high / xhigh / max\uFF08\u56E0\u6A21\u578B/\u670D\u52A1\u5546\u800C\u5F02\uFF09\u3002\u4EC5\u5BF9\u652F\u6301\u63A8\u7406\u5F3A\u5EA6\u7684\u6A21\u578B\u751F\u6548\u3002"
1228
1260
  },
1229
1261
  // 验证信息
1230
1262
  validation: {
@@ -1242,7 +1274,7 @@ var ai_locale_default = {
1242
1274
  maxTokensMin: "\u6700\u5927Token\u6570\u5FC5\u987B\u81F3\u5C11\u4E3A1",
1243
1275
  maxTokensMax: "\u6700\u5927Token\u6570\u4E0D\u80FD\u8D85\u8FC7500,000",
1244
1276
  maxTokensRange: "\u6700\u5927Token\u6570\u5FC5\u987B\u5728 {{min}} \u548C {{max}} \u4E4B\u95F4",
1245
- reasoningEffortInvalid: "\u63A8\u7406\u5F3A\u5EA6\u5FC5\u987B\u662F low, medium, \u6216 high",
1277
+ reasoningEffortInvalid: "\u63A8\u7406\u5F3A\u5EA6\u5FC5\u987B\u662F none, minimal, low, medium, high, xhigh, \u6216 max",
1246
1278
  thinkingBudgetMin: "\u601D\u8003\u9884\u7B97\u81F3\u5C11\u9700\u8981 1024 \u4E2A Token",
1247
1279
  thinkingBudgetMax: "\u601D\u8003\u9884\u7B97\u4E0D\u80FD\u8D85\u8FC7 100,000 \u4E2A Token",
1248
1280
  apiKeyRequired: "\u672A\u4F7F\u7528\u4EE3\u7406\u6A21\u5F0F\u3001Ollama\u6216\u81EA\u5B9A\u4E49\u670D\u52A1\u5546\u65F6\uFF0CAPI\u5BC6\u94A5\u4E3A\u5FC5\u586B\u9879",
@@ -1497,7 +1529,19 @@ var ai_locale_default = {
1497
1529
  chat: "\u958B\u59CB\u804A\u5929",
1498
1530
  public: "\u516C\u958B",
1499
1531
  byConversation: "\u7528\u5C0D\u8A71\u5EFA\u7ACB AI",
1500
- manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A AI"
1532
+ manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A AI",
1533
+ quickCreate: {
1534
+ reasoningEffort: "\u63A8\u7406\u5F37\u5EA6",
1535
+ reasoningEffortOptions: {
1536
+ none: "\u95DC\u9589",
1537
+ minimal: "\u6975\u7C21",
1538
+ low: "\u4F4E",
1539
+ medium: "\u4E2D",
1540
+ high: "\u9AD8",
1541
+ xhigh: "\u8D85\u9AD8",
1542
+ max: "\u6700\u5927"
1543
+ }
1544
+ }
1501
1545
  },
1502
1546
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1503
1547
  localCreate: {
@@ -1601,7 +1645,7 @@ var ai_locale_default = {
1601
1645
  frequencyPenalty: "\u964D\u4F4E\u8A5E\u5F59\u91CD\u8907\u5EA6\uFF0C\u7BC4\u570D-2\u52302\u3002\u8D8A\u9AD8\u8D8A\u80FD\u907F\u514D\u91CD\u8907\u7528\u8A5E\u3002",
1602
1646
  presencePenalty: "\u964D\u4F4E\u4E3B\u984C\u91CD\u8907\u5EA6\uFF0C\u7BC4\u570D-2\u52302\u3002\u8D8A\u9AD8\u8D8A\u9F13\u52F5\u8AC7\u8AD6\u65B0\u4E3B\u984C\u3002",
1603
1647
  maxTokens: "\u9650\u5236\u55AE\u6B21\u56DE\u8986\u7684\u9577\u5EA6\uFF0C\u6700\u5C0F\u70BA1\u3002",
1604
- reasoningEffort: "\u63A7\u5236\u6A21\u578B\u56DE\u7B54\u524D\u7684\u63A8\u7406\u5F37\u5EA6\uFF08low / medium / high\uFF09\u3002\u50C5\u5C0D\u652F\u63F4\u63A8\u7406\u5F37\u5EA6\u7684\u6A21\u578B\u751F\u6548\u3002"
1648
+ reasoningEffort: "\u63A7\u5236\u6A21\u578B\u56DE\u7B54\u524D\u7684\u63A8\u7406\u5F37\u5EA6\u3002\u652F\u63F4\u7684\u503C\uFF1Anone / minimal / low / medium / high / xhigh / max\uFF08\u56E0\u6A21\u578B/\u670D\u52D9\u5546\u800C\u7570\uFF09\u3002\u50C5\u5C0D\u652F\u63F4\u63A8\u7406\u5F37\u5EA6\u7684\u6A21\u578B\u751F\u6548\u3002"
1605
1649
  },
1606
1650
  // 驗證資訊
1607
1651
  validation: {
@@ -1619,7 +1663,7 @@ var ai_locale_default = {
1619
1663
  maxTokensMin: "\u6700\u5927Token\u6578\u5FC5\u9808\u81F3\u5C11\u70BA1",
1620
1664
  maxTokensMax: "\u6700\u5927Token\u6578\u4E0D\u5F97\u8D85\u904E500,000",
1621
1665
  maxTokensRange: "\u6700\u5927Token\u6578\u5FC5\u9808\u5728 {{min}} \u548C {{max}} \u4E4B\u9593",
1622
- reasoningEffortInvalid: "\u63A8\u7406\u5F37\u5EA6\u5FC5\u9808\u662F low, medium, \u6216 high",
1666
+ reasoningEffortInvalid: "\u63A8\u7406\u5F37\u5EA6\u5FC5\u9808\u662F none, minimal, low, medium, high, xhigh, \u6216 max",
1623
1667
  thinkingBudgetMin: "\u601D\u8003\u9810\u7B97\u81F3\u5C11\u9700\u8981 1024 \u500B Token",
1624
1668
  thinkingBudgetMax: "\u601D\u8003\u9810\u7B97\u4E0D\u80FD\u8D85\u904E 100,000 \u500B Token",
1625
1669
  apiKeyRequired: "\u672A\u4F7F\u7528\u4EE3\u7406\u6A21\u5F0F\u3001Ollama\u6216\u81EA\u8A02\u670D\u52D9\u63D0\u4F9B\u8005\u6642\uFF0CAPI\u91D1\u9470\u70BA\u5FC5\u586B\u9805",
@@ -1796,7 +1840,19 @@ var ai_locale_default = {
1796
1840
  chat: "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u59CB",
1797
1841
  public: "\u516C\u958B",
1798
1842
  byConversation: "\u4F1A\u8A71\u3067 AI \u3092\u4F5C\u6210",
1799
- manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A\u3067 AI \u3092\u4F5C\u6210"
1843
+ manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A\u3067 AI \u3092\u4F5C\u6210",
1844
+ quickCreate: {
1845
+ reasoningEffort: "\u63A8\u8AD6\u5F37\u5EA6",
1846
+ reasoningEffortOptions: {
1847
+ none: "\u306A\u3057",
1848
+ minimal: "\u6700\u5C0F",
1849
+ low: "\u4F4E",
1850
+ medium: "\u4E2D",
1851
+ high: "\u9AD8",
1852
+ xhigh: "\u8D85\u9AD8",
1853
+ max: "\u6700\u5927"
1854
+ }
1855
+ }
1800
1856
  },
1801
1857
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1802
1858
  localCreate: {
@@ -1901,7 +1957,7 @@ var ai_locale_default = {
1901
1957
  frequencyPenalty: "\u5358\u8A9E\u306E\u7E70\u308A\u8FD4\u3057\u3092\u6E1B\u3089\u3057\u307E\u3059\uFF08\u7BC4\u56F2-2\u301C2\uFF09\u3002\u5024\u304C\u9AD8\u3044\u307B\u3069\u7E70\u308A\u8FD4\u3055\u308C\u306B\u304F\u304F\u306A\u308A\u307E\u3059\u3002",
1902
1958
  presencePenalty: "\u30C8\u30D4\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3092\u6E1B\u3089\u3057\u307E\u3059\uFF08\u7BC4\u56F2-2\u301C2\uFF09\u3002\u5024\u304C\u9AD8\u3044\u307B\u3069\u65B0\u3057\u3044\u30C8\u30D4\u30C3\u30AF\u304C\u4FC3\u3055\u308C\u307E\u3059\u3002",
1903
1959
  maxTokens: "1\u56DE\u306E\u5FDC\u7B54\u306E\u9577\u3055\u3092\u5236\u9650\u3057\u307E\u3059\uFF08\u6700\u5C0F1\uFF09\u3002",
1904
- reasoningEffort: "\u56DE\u7B54\u524D\u306E\u63A8\u8AD6\u306E\u5F37\u3055\uFF08low / medium / high\uFF09\u3002\u63A8\u8AD6\u5F37\u5EA6\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u30E2\u30C7\u30EB\u3067\u306E\u307F\u6709\u52B9\u3067\u3059\u3002"
1960
+ reasoningEffort: "\u56DE\u7B54\u524D\u306E\u63A8\u8AD6\u306E\u5F37\u3055\u3002\u30B5\u30DD\u30FC\u30C8\u5024\uFF1Anone / minimal / low / medium / high / xhigh / max\uFF08\u30E2\u30C7\u30EB/\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u306B\u3088\u308A\u7570\u306A\u308B\uFF09\u3002\u63A8\u8AD6\u5F37\u5EA6\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u30E2\u30C7\u30EB\u3067\u306E\u307F\u6709\u52B9\u3067\u3059\u3002"
1905
1961
  },
1906
1962
  // バリデーションメッセージ
1907
1963
  validation: {
@@ -1919,7 +1975,7 @@ var ai_locale_default = {
1919
1975
  maxTokensMin: "\u6700\u5927\u30C8\u30FC\u30AF\u30F3\u6570\u306F1\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1920
1976
  maxTokensMax: "\u6700\u5927\u30C8\u30FC\u30AF\u30F3\u6570\u306F500,000\u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1921
1977
  maxTokensRange: "\u6700\u5927\u30C8\u30FC\u30AF\u30F3\u6570\u306F {{min}} \u301C {{max}} \u306E\u7BC4\u56F2\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
1922
- reasoningEffortInvalid: "\u63A8\u8AD6\u5F37\u5EA6\u306F low, medium, high \u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1978
+ reasoningEffortInvalid: "\u63A8\u8AD6\u5F37\u5EA6\u306F none, minimal, low, medium, high, xhigh, max \u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1923
1979
  thinkingBudgetMin: "\u601D\u8003\u4E88\u7B97\u306F1024\u30C8\u30FC\u30AF\u30F3\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1924
1980
  thinkingBudgetMax: "\u601D\u8003\u4E88\u7B97\u306F100,000\u30C8\u30FC\u30AF\u30F3\u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1925
1981
  apiKeyRequired: "\u30D7\u30ED\u30AD\u30B7\u30E2\u30FC\u30C9\u3001Ollama\u3001\u307E\u305F\u306F\u30AB\u30B9\u30BF\u30E0\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u4F7F\u7528\u3057\u306A\u3044\u5834\u5408\u3001API\u30AD\u30FC\u306F\u5FC5\u9808\u3067\u3059",
@@ -2074,6 +2130,9 @@ var chat_locale_default = {
2074
2130
  messageInput: "Message input field",
2075
2131
  messageInputArea: "Message input area with file upload",
2076
2132
  messageOrFileHere: "Type a message or upload a file...",
2133
+ pastedTextChip: "Pasted text #{{id}} \xB7 {{lines}} lines \xB7 {{size}}",
2134
+ removePastedText: "Remove pasted text",
2135
+ expandPastedText: "Expand pasted text into the input",
2077
2136
  Mode: "Mode",
2078
2137
  ModeUpdateFailed: "Failed to update mode",
2079
2138
  ModeUpdatedSuccess: "Mode updated successfully",
@@ -2204,6 +2263,32 @@ var chat_locale_default = {
2204
2263
  preflightRepairing: "Preflight found {{count}} issue(s), auto-repairing\u2026",
2205
2264
  moreSteps: "{{count}} more steps\u2026"
2206
2265
  },
2266
+ toolConfirm: {
2267
+ executing: "Executing\u2026",
2268
+ patchApplied: "Patch applied",
2269
+ executed: "Executed {{name}}",
2270
+ retryApplyPatch: "Retry applying patch",
2271
+ retryExec: "Retry {{name}}",
2272
+ confirmDeleteSpaces: "Confirm deleting these Spaces",
2273
+ applyPatchDanger: "Apply this patch (dangerous)",
2274
+ confirmExec: "Run {{name}} (confirmation required)",
2275
+ successPatch: "\u2705 Successfully applied patch to {{path}}.",
2276
+ successExec: "\u2705 Successfully executed {{name}}.",
2277
+ failure: "\u274C Execution failed: {{error}}",
2278
+ unknownError: "Unknown error",
2279
+ confirmDelete: "Confirm deleting {{entity}}",
2280
+ confirmExecGate: "Confirm running {{name}}",
2281
+ fallbackDialogs: "Matching dialogs",
2282
+ fallbackSpaces: "Matching spaces",
2283
+ failureDialogs: "Failed to delete dialogs",
2284
+ failureSpaces: "Failed to delete spaces",
2285
+ executedDialogs: "deleteDialogs executed",
2286
+ executedSpaces: "deleteSpaces executed",
2287
+ entityDialog: "dialog",
2288
+ entitySpace: "space",
2289
+ deleteLabelMultiple: "{{title}} and {{count}} more {{entity}}",
2290
+ fallbackMatched: "Matches"
2291
+ },
2207
2292
  toolNames: {
2208
2293
  tool: "Tool",
2209
2294
  exa_search: "Search",
@@ -2228,6 +2313,7 @@ var chat_locale_default = {
2228
2313
  execShell: "Run command",
2229
2314
  listAgents: "List agents",
2230
2315
  readAgent: "Read agent",
2316
+ loadSkill: "Load skill",
2231
2317
  callAgent: "Call agent"
2232
2318
  },
2233
2319
  gemini: {
@@ -2404,6 +2490,9 @@ var chat_locale_default = {
2404
2490
  messageInput: "\u6D88\u606F\u8F93\u5165\u6846",
2405
2491
  messageInputArea: "\u6D88\u606F\u8F93\u5165\u533A\uFF0C\u652F\u6301\u6587\u4EF6\u4E0A\u4F20",
2406
2492
  messageOrFileHere: "\u8F93\u5165\u6D88\u606F\u6216\u4E0A\u4F20\u6587\u4EF6...",
2493
+ pastedTextChip: "\u5DF2\u7C98\u8D34\u6587\u672C #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
2494
+ removePastedText: "\u79FB\u9664\u7C98\u8D34\u6587\u672C",
2495
+ expandPastedText: "\u5C55\u5F00\u7C98\u8D34\u6587\u672C\u5230\u8F93\u5165\u6846",
2407
2496
  Mode: "\u6A21\u5F0F",
2408
2497
  ModeUpdateFailed: "\u6A21\u5F0F\u66F4\u65B0\u5931\u8D25",
2409
2498
  ModeUpdatedSuccess: "\u6A21\u5F0F\u66F4\u65B0\u6210\u529F",
@@ -2528,6 +2617,33 @@ var chat_locale_default = {
2528
2617
  preflightRepairing: "\u9884\u68C0\u53D1\u73B0 {{count}} \u4E2A\u95EE\u9898\uFF0C\u6B63\u5728\u81EA\u52A8\u4FEE\u590D\u2026",
2529
2618
  moreSteps: "\u8FD8\u6709 {{count}} \u6B65\u2026"
2530
2619
  },
2620
+ toolConfirm: {
2621
+ executing: "\u6B63\u5728\u6267\u884C\u2026",
2622
+ patchApplied: "\u8865\u4E01\u5DF2\u5E94\u7528",
2623
+ executed: "\u5DF2\u6267\u884C {{name}}",
2624
+ retryApplyPatch: "\u91CD\u8BD5\u5E94\u7528\u8865\u4E01",
2625
+ retryExec: "\u91CD\u8BD5\u6267\u884C {{name}}",
2626
+ confirmDeleteSpaces: "\u786E\u8BA4\u5220\u9664\u8FD9\u4E9B Space",
2627
+ applyPatchDanger: "\u5E94\u7528\u8FD9\u4E2A\u8865\u4E01\uFF08\u5371\u9669\u64CD\u4F5C\uFF09",
2628
+ confirmExec: "\u6267\u884C {{name}}\uFF08\u9700\u8981\u786E\u8BA4\uFF09",
2629
+ successPatch: "\u2705 \u5DF2\u6210\u529F\u5C06\u8865\u4E01\u5E94\u7528\u5230 {{path}}\u3002",
2630
+ successExec: "\u2705 \u5DF2\u6210\u529F\u6267\u884C {{name}}\u3002",
2631
+ failure: "\u274C \u6267\u884C\u5931\u8D25\uFF1A{{error}}",
2632
+ unknownError: "\u672A\u77E5\u9519\u8BEF",
2633
+ confirmDelete: "\u786E\u8BA4\u5220\u9664{{entity}}",
2634
+ confirmExecGate: "\u786E\u8BA4\u6267\u884C {{name}}",
2635
+ fallbackDialogs: "\u5339\u914D\u7684\u5BF9\u8BDD",
2636
+ fallbackSpaces: "\u5339\u914D\u7684\u7A7A\u95F4",
2637
+ failureDialogs: "\u5220\u9664\u5BF9\u8BDD\u6267\u884C\u5931\u8D25",
2638
+ failureSpaces: "\u5220\u9664\u7A7A\u95F4\u6267\u884C\u5931\u8D25",
2639
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符(zh/zh-Hant/ja 同)
2640
+ executedDialogs: "deleteDialogs executed",
2641
+ executedSpaces: "deleteSpaces executed",
2642
+ entityDialog: "\u5BF9\u8BDD",
2643
+ entitySpace: "\u7A7A\u95F4",
2644
+ deleteLabelMultiple: "{{title}} \u7B49 {{count}} \u4E2A{{entity}}",
2645
+ fallbackMatched: "\u5339\u914D\u9879"
2646
+ },
2531
2647
  toolNames: {
2532
2648
  tool: "\u5DE5\u5177",
2533
2649
  exa_search: "\u641C\u7D22",
@@ -2552,6 +2668,7 @@ var chat_locale_default = {
2552
2668
  execShell: "\u8FD0\u884C\u547D\u4EE4",
2553
2669
  listAgents: "\u5217\u51FA\u52A9\u624B",
2554
2670
  readAgent: "\u8BFB\u53D6\u52A9\u624B",
2671
+ loadSkill: "\u52A0\u8F7D\u6280\u80FD",
2555
2672
  callAgent: "\u8C03\u7528\u52A9\u624B"
2556
2673
  },
2557
2674
  gemini: {
@@ -2728,6 +2845,9 @@ var chat_locale_default = {
2728
2845
  messageInput: "\u8A0A\u606F\u8F38\u5165\u6846",
2729
2846
  messageInputArea: "\u8A0A\u606F\u8F38\u5165\u5340\uFF0C\u652F\u6301\u6A94\u6848\u4E0A\u50B3",
2730
2847
  messageOrFileHere: "\u8F38\u5165\u8A0A\u606F\u6216\u4E0A\u50B3\u6A94\u6848...",
2848
+ pastedTextChip: "\u5DF2\u8CBC\u4E0A\u6587\u5B57 #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
2849
+ removePastedText: "\u79FB\u9664\u8CBC\u4E0A\u6587\u5B57",
2850
+ expandPastedText: "\u5C55\u958B\u8CBC\u4E0A\u6587\u5B57\u5230\u8F38\u5165\u6846",
2731
2851
  Mode: "\u6A21\u5F0F",
2732
2852
  ModeUpdateFailed: "\u6A21\u5F0F\u66F4\u65B0\u5931\u6557",
2733
2853
  ModeUpdatedSuccess: "\u6A21\u5F0F\u66F4\u65B0\u6210\u529F",
@@ -2842,6 +2962,33 @@ var chat_locale_default = {
2842
2962
  preflightRepairing: "\u9810\u6AA2\u767C\u73FE {{count}} \u500B\u554F\u984C\uFF0C\u6B63\u5728\u81EA\u52D5\u4FEE\u5FA9\u2026",
2843
2963
  moreSteps: "\u9084\u6709 {{count}} \u6B65\u2026"
2844
2964
  },
2965
+ toolConfirm: {
2966
+ executing: "\u6B63\u5728\u57F7\u884C\u2026",
2967
+ patchApplied: "\u4FEE\u88DC\u5DF2\u5957\u7528",
2968
+ executed: "\u5DF2\u57F7\u884C {{name}}",
2969
+ retryApplyPatch: "\u91CD\u8A66\u5957\u7528\u4FEE\u88DC",
2970
+ retryExec: "\u91CD\u8A66\u57F7\u884C {{name}}",
2971
+ confirmDeleteSpaces: "\u78BA\u8A8D\u522A\u9664\u9019\u4E9B Space",
2972
+ applyPatchDanger: "\u5957\u7528\u9019\u500B\u4FEE\u88DC\uFF08\u5371\u96AA\u64CD\u4F5C\uFF09",
2973
+ confirmExec: "\u57F7\u884C {{name}}\uFF08\u9700\u8981\u78BA\u8A8D\uFF09",
2974
+ successPatch: "\u2705 \u5DF2\u6210\u529F\u5C07\u4FEE\u88DC\u5957\u7528\u5230 {{path}}\u3002",
2975
+ successExec: "\u2705 \u5DF2\u6210\u529F\u57F7\u884C {{name}}\u3002",
2976
+ failure: "\u274C \u57F7\u884C\u5931\u6557\uFF1A{{error}}",
2977
+ unknownError: "\u672A\u77E5\u932F\u8AA4",
2978
+ confirmDelete: "\u78BA\u8A8D\u522A\u9664{{entity}}",
2979
+ confirmExecGate: "\u78BA\u8A8D\u57F7\u884C {{name}}",
2980
+ fallbackDialogs: "\u7B26\u5408\u7684\u5C0D\u8A71",
2981
+ fallbackSpaces: "\u7B26\u5408\u7684\u7A7A\u9593",
2982
+ failureDialogs: "\u522A\u9664\u5C0D\u8A71\u57F7\u884C\u5931\u6557",
2983
+ failureSpaces: "\u522A\u9664\u7A7A\u9593\u57F7\u884C\u5931\u6557",
2984
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符
2985
+ executedDialogs: "deleteDialogs executed",
2986
+ executedSpaces: "deleteSpaces executed",
2987
+ entityDialog: "\u5C0D\u8A71",
2988
+ entitySpace: "\u7A7A\u9593",
2989
+ deleteLabelMultiple: "{{title}} \u7B49 {{count}} \u500B{{entity}}",
2990
+ fallbackMatched: "\u7B26\u5408\u9805"
2991
+ },
2845
2992
  toolNames: {
2846
2993
  tool: "\u5DE5\u5177",
2847
2994
  exa_search: "\u641C\u5C0B",
@@ -2866,6 +3013,7 @@ var chat_locale_default = {
2866
3013
  execShell: "\u57F7\u884C\u547D\u4EE4",
2867
3014
  listAgents: "\u5217\u51FA\u52A9\u624B",
2868
3015
  readAgent: "\u8B80\u53D6\u52A9\u624B",
3016
+ loadSkill: "\u8F09\u5165\u6280\u80FD",
2869
3017
  callAgent: "\u547C\u53EB\u52A9\u624B"
2870
3018
  },
2871
3019
  gemini: {
@@ -2980,6 +3128,9 @@ var chat_locale_default = {
2980
3128
  messageInput: "\u30E1\u30C3\u30BB\u30FC\u30B8\u5165\u529B\u6B04",
2981
3129
  messageInputArea: "\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u5BFE\u5FDC\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u5165\u529B\u30A8\u30EA\u30A2",
2982
3130
  messageOrFileHere: "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u307E\u305F\u306F\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9...",
3131
+ pastedTextChip: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8 #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
3132
+ removePastedText: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8\u3092\u524A\u9664",
3133
+ expandPastedText: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8\u3092\u5165\u529B\u6B04\u306B\u5C55\u958B",
2983
3134
  Mode: "\u30E2\u30FC\u30C9",
2984
3135
  ModeUpdateFailed: "\u30E2\u30FC\u30C9\u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
2985
3136
  ModeUpdatedSuccess: "\u30E2\u30FC\u30C9\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",
@@ -3100,6 +3251,33 @@ var chat_locale_default = {
3100
3251
  preflightRepairing: "\u30D7\u30EA\u30D5\u30E9\u30A4\u30C8\u3067 {{count}} \u4EF6\u306E\u554F\u984C\u3092\u691C\u51FA\u3001\u81EA\u52D5\u4FEE\u5FA9\u4E2D\u2026",
3101
3252
  moreSteps: "\u4ED6 {{count}} \u30B9\u30C6\u30C3\u30D7\u2026"
3102
3253
  },
3254
+ toolConfirm: {
3255
+ executing: "\u5B9F\u884C\u4E2D\u2026",
3256
+ patchApplied: "\u30D1\u30C3\u30C1\u3092\u9069\u7528\u3057\u307E\u3057\u305F",
3257
+ executed: "{{name}} \u3092\u5B9F\u884C\u3057\u307E\u3057\u305F",
3258
+ retryApplyPatch: "\u30D1\u30C3\u30C1\u9069\u7528\u3092\u518D\u8A66\u884C",
3259
+ retryExec: "{{name}} \u306E\u5B9F\u884C\u3092\u518D\u8A66\u884C",
3260
+ confirmDeleteSpaces: "\u3053\u308C\u3089\u306E Space \u3092\u524A\u9664\u3057\u307E\u3059\u304B",
3261
+ applyPatchDanger: "\u3053\u306E\u30D1\u30C3\u30C1\u3092\u9069\u7528\uFF08\u5371\u967A\u306A\u64CD\u4F5C\uFF09",
3262
+ confirmExec: "{{name}} \u3092\u5B9F\u884C\uFF08\u78BA\u8A8D\u304C\u5FC5\u8981\uFF09",
3263
+ successPatch: "\u2705 \u30D1\u30C3\u30C1\u3092 {{path}} \u306B\u9069\u7528\u3057\u307E\u3057\u305F\u3002",
3264
+ successExec: "\u2705 {{name}} \u3092\u5B9F\u884C\u3057\u307E\u3057\u305F\u3002",
3265
+ failure: "\u274C \u5B9F\u884C\u5931\u6557\uFF1A{{error}}",
3266
+ unknownError: "\u4E0D\u660E\u306A\u30A8\u30E9\u30FC",
3267
+ confirmDelete: "{{entity}}\u306E\u524A\u9664\u3092\u78BA\u8A8D",
3268
+ confirmExecGate: "{{name}} \u306E\u5B9F\u884C\u3092\u78BA\u8A8D",
3269
+ fallbackDialogs: "\u4E00\u81F4\u3059\u308B\u5BFE\u8A71",
3270
+ fallbackSpaces: "\u4E00\u81F4\u3059\u308B\u30B9\u30DA\u30FC\u30B9",
3271
+ failureDialogs: "\u5BFE\u8A71\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3272
+ failureSpaces: "\u30B9\u30DA\u30FC\u30B9\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3273
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符
3274
+ executedDialogs: "deleteDialogs executed",
3275
+ executedSpaces: "deleteSpaces executed",
3276
+ entityDialog: "\u5BFE\u8A71",
3277
+ entitySpace: "\u30B9\u30DA\u30FC\u30B9",
3278
+ deleteLabelMultiple: "{{title}} \u306A\u3069 {{count}} \u4EF6\u306E{{entity}}",
3279
+ fallbackMatched: "\u4E00\u81F4\u9805\u76EE"
3280
+ },
3103
3281
  toolNames: {
3104
3282
  tool: "\u30C4\u30FC\u30EB",
3105
3283
  exa_search: "\u691C\u7D22",
@@ -3124,6 +3302,7 @@ var chat_locale_default = {
3124
3302
  execShell: "\u30B3\u30DE\u30F3\u30C9\u5B9F\u884C",
3125
3303
  listAgents: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u4E00\u89A7",
3126
3304
  readAgent: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u8AAD\u307F\u53D6\u308A",
3305
+ loadSkill: "\u30B9\u30AD\u30EB\u3092\u8AAD\u307F\u8FBC\u307F",
3127
3306
  callAgent: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u547C\u3073\u51FA\u3057"
3128
3307
  },
3129
3308
  gemini: {
@@ -3247,12 +3426,6 @@ var space_locale_default = {
3247
3426
  discard_changes: "Discard Changes",
3248
3427
  load_error_title: "Failed to Load Space Information",
3249
3428
  no_space_data: "Space data not found",
3250
- try_repair: "Try to Repair",
3251
- repair_success: "Repair operation completed successfully",
3252
- repair_space: "Repair Space",
3253
- repair_count_warn: "This space has {{count}} content items. Repair will re-deduplicate and remove orphaned references. Continue?",
3254
- repair: "Repair",
3255
- repair_error: "Repair operation failed",
3256
3429
  try_later: "Please try again later",
3257
3430
  // === 基本信息 ===
3258
3431
  basic_info: "Basic Information",
@@ -3562,12 +3735,6 @@ var space_locale_default = {
3562
3735
  discard_changes: "\u653E\u5F03\u66F4\u6539",
3563
3736
  load_error_title: "\u52A0\u8F7D\u7A7A\u95F4\u4FE1\u606F\u5931\u8D25",
3564
3737
  no_space_data: "\u672A\u627E\u5230\u7A7A\u95F4\u6570\u636E",
3565
- try_repair: "\u5C1D\u8BD5\u4FEE\u590D",
3566
- repair_success: "\u4FEE\u590D\u64CD\u4F5C\u6210\u529F\u5B8C\u6210",
3567
- repair_space: "\u4FEE\u590D\u7A7A\u95F4",
3568
- repair_count_warn: "\u6B64\u7A7A\u95F4\u6709 {{count}} \u9879\u5185\u5BB9\u3002\u4FEE\u590D\u5C06\u91CD\u65B0\u53BB\u91CD\u5E76\u6E05\u9664\u5B64\u7ACB\u7684\u5F15\u7528\u3002\u662F\u5426\u7EE7\u7EED\uFF1F",
3569
- repair: "\u4FEE\u590D",
3570
- repair_error: "\u4FEE\u590D\u64CD\u4F5C\u5931\u8D25",
3571
3738
  try_later: "\u8BF7\u7A0D\u540E\u91CD\u8BD5",
3572
3739
  // === 基本信息 ===
3573
3740
  basic_info: "\u57FA\u672C\u4FE1\u606F",
@@ -3876,12 +4043,6 @@ var space_locale_default = {
3876
4043
  discard_changes: "\u653E\u68C4\u8B8A\u66F4",
3877
4044
  load_error_title: "\u8F09\u5165\u7A7A\u9593\u8CC7\u8A0A\u5931\u6557",
3878
4045
  no_space_data: "\u672A\u627E\u5230\u7A7A\u9593\u8CC7\u6599",
3879
- try_repair: "\u5617\u8A66\u4FEE\u5FA9",
3880
- repair_success: "\u4FEE\u5FA9\u64CD\u4F5C\u6210\u529F\u5B8C\u6210",
3881
- repair_space: "\u4FEE\u5FA9\u7A7A\u9593",
3882
- repair_count_warn: "\u6B64\u7A7A\u9593\u6709 {{count}} \u9805\u5167\u5BB9\u3002\u4FEE\u5FA9\u5C07\u91CD\u65B0\u53BB\u91CD\u4E26\u6E05\u9664\u5B64\u7ACB\u7684\u5F15\u7528\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F",
3883
- repair: "\u4FEE\u5FA9",
3884
- repair_error: "\u4FEE\u5FA9\u64CD\u4F5C\u5931\u6557",
3885
4046
  try_later: "\u8ACB\u7A0D\u5F8C\u91CD\u8A66",
3886
4047
  // === 基本信息 ===
3887
4048
  basic_info: "\u57FA\u672C\u8CC7\u8A0A",
@@ -4183,12 +4344,6 @@ var space_locale_default = {
4183
4344
  discard_changes: "\u5909\u66F4\u3092\u7834\u68C4",
4184
4345
  load_error_title: "\u30B9\u30DA\u30FC\u30B9\u60C5\u5831\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
4185
4346
  no_space_data: "\u30B9\u30DA\u30FC\u30B9\u30C7\u30FC\u30BF\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
4186
- try_repair: "\u4FEE\u5FA9\u3092\u8A66\u884C",
4187
- repair_success: "\u4FEE\u5FA9\u64CD\u4F5C\u304C\u6B63\u5E38\u306B\u5B8C\u4E86\u3057\u307E\u3057\u305F",
4188
- repair_space: "\u30B9\u30DA\u30FC\u30B9\u3092\u4FEE\u5FA9",
4189
- repair_count_warn: "\u3053\u306E\u30B9\u30DA\u30FC\u30B9\u306B\u306F {{count}} \u4EF6\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u3042\u308A\u307E\u3059\u3002\u4FEE\u5FA9\u306F\u91CD\u8907\u3092\u6574\u7406\u3057\u3001\u5B64\u7ACB\u3057\u305F\u53C2\u7167\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u7D9A\u884C\u3057\u307E\u3059\u304B\uFF1F",
4190
- repair: "\u4FEE\u5FA9",
4191
- repair_error: "\u4FEE\u5FA9\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
4192
4347
  try_later: "\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
4193
4348
  // === 基本情報 ===
4194
4349
  basic_info: "\u57FA\u672C\u60C5\u5831",
@@ -10969,10 +11124,90 @@ var CAPABILITY_PACKS = [
10969
11124
  {
10970
11125
  id: "agent-orchestration",
10971
11126
  label: "\u591A agent \u7F16\u6392",
10972
- description: "\u540E\u53F0\u542F\u52A8\u5176\u4ED6 agent \u6267\u884C\u5B50\u4EFB\u52A1\uFF0C\u5E76\u89C2\u5BDF\u3001\u67E5\u8BE2\u3001\u505C\u6B62\u8FD0\u884C\u4E2D\u7684 agent run\u2014\u2014\u9002\u5408\u5E76\u884C\u6D3E\u53D1\u3001\u957F\u4EFB\u52A1\u8DDF\u8E2A\u3001\u4E2D\u9014\u53EB\u505C\u7B49\u7F16\u6392\u573A\u666F\u3002",
10973
- tools: ["startAgentRun", "controlAgentRun"],
10974
- defaultEnabled: false,
11127
+ description: "\u5148\u6309\u6536\u85CF\u3001\u7B80\u4ECB\u3001\u80FD\u529B\u548C\u6210\u672C\u5217\u51FA\u5B89\u5168 agent \u6458\u8981\uFF0C\u6309\u9700\u8BFB\u53D6\u5019\u9009\u914D\u7F6E\u89E3\u6790\u53EF\u8FD0\u884C key\uFF0C\u518D\u540E\u53F0\u542F\u52A8\u5176\u4ED6 agent \u6267\u884C\u5B50\u4EFB\u52A1\uFF0C\u5E76\u89C2\u5BDF\u3001\u67E5\u8BE2\u3001\u505C\u6B62\u8FD0\u884C\u4E2D\u7684 agent run\u2014\u2014\u9002\u5408\u5E76\u884C\u6D3E\u53D1\u3001\u957F\u4EFB\u52A1\u8DDF\u8E2A\u3001\u4E2D\u9014\u53EB\u505C\u7B49\u7F16\u6392\u573A\u666F\u3002",
11128
+ tools: ["startAgentRun", "controlAgentRun", "listAgents"],
11129
+ defaultEnabled: true,
10975
11130
  icon: "\u{1F9E9}"
11131
+ },
11132
+ {
11133
+ id: "skills",
11134
+ label: "\u6280\u80FD\u52A0\u8F7D",
11135
+ description: "\u6309\u540D\u52A0\u8F7D\u5DE5\u4F5C\u533A\u6280\u80FD\uFF08SKILL.md\uFF09\u5E76\u8BFB\u53D6\u6280\u80FD\u6587\u6863\u2014\u2014\u8BA9 agent \u5728\u9700\u8981\u65F6\u628A\u5BF9\u5E94\u6280\u80FD\u7684\u65B9\u6CD5\u8BBA\u3001\u547D\u4EE4\u548C\u6D41\u7A0B\u62C9\u8FDB\u4E0A\u4E0B\u6587\u518D\u6267\u884C\u3002",
11136
+ tools: ["loadSkill", "readSkillDoc"],
11137
+ defaultEnabled: true,
11138
+ icon: "\u{1F4DA}"
11139
+ },
11140
+ {
11141
+ id: "app-builder",
11142
+ label: "\u5E94\u7528\u6784\u5EFA",
11143
+ description: "\u6784\u5EFA/\u4FEE\u6539/\u53D1\u5E03 Web \u5E94\u7528\uFF1A\u8BFB\u53D6\u5E94\u7528\u6E90\u7801\u3001\u5B9A\u70B9\u4FEE\u6539\u3001\u9884\u68C0\u3001\u90E8\u7F72\uFF0C\u65E0\u9700\u7F16\u7A0B\u7ECF\u9A8C\u3002",
11144
+ tools: [
11145
+ "appRead",
11146
+ "appFileList",
11147
+ "appFileSearch",
11148
+ "appFileRead",
11149
+ "appFileReplace",
11150
+ "appFileWrite",
11151
+ "appPreflight",
11152
+ "appDeploy",
11153
+ "appList",
11154
+ "appDelete",
11155
+ "createTable",
11156
+ "addTableRow",
11157
+ "addTableRows",
11158
+ "queryTableRows",
11159
+ "updateTableRow",
11160
+ "deleteTableRow",
11161
+ "openAIGptImage"
11162
+ ],
11163
+ defaultEnabled: false,
11164
+ icon: "\u{1F5A5}",
11165
+ promptPatch: `# \u5E94\u7528\u6784\u5EFA\u80FD\u529B\u5305 \u2014 \u64CD\u4F5C\u7EAA\u5F8B
11166
+
11167
+ ## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\uFF09
11168
+ - \u4E0D\u590D\u8FF0\u7528\u6237\u9700\u6C42\uFF0C\u4E0D\u89E3\u91CA\u4F60\u300C\u6253\u7B97\u600E\u4E48\u505A\u300D\uFF0C\u76F4\u63A5\u52A8\u624B\u3002\u6539\u5B8C\u53EA\u7528\u4E00\u4E24\u53E5\u8BDD\u8BF4\u6E05\u300C\u6539\u4E86\u4EC0\u4E48\u3001\u53BB\u54EA\u770B\u300D\u3002
11169
+ - \u601D\u8003\u7B80\u77ED\uFF1A\u5B9A\u4F4D\u95EE\u9898\u5373\u53EF\uFF0C\u4E0D\u505A\u957F\u7BC7\u63A8\u6F14\u3002
11170
+ - \u5C0F\u6539\u52A8\uFF08\u6539\u6587\u5B57\u3001\u989C\u8272\u3001\u95F4\u8DDD\u3001\u5706\u89D2\u3001\u5355\u4E2A\u7EC4\u4EF6\uFF09\u8D70\u6700\u77ED\u8DEF\u5F84\uFF1A\`appFileSearch\` \u6216 \`appFileRead\` \u5B9A\u4F4D \u2192 \`appFileReplace\` \u7CBE\u786E\u66FF\u6362 \u2192 \`appPreflight\` \u2192 \`appDeploy\`\u3002\u80FD\u4E00\u6B21\u547D\u4E2D\u5C31\u4E0D\u8981\u53CD\u590D\u8BFB\u6587\u4EF6\u3002
11171
+ - \u5DF2\u7ECF\u77E5\u9053\u6587\u4EF6\u548C\u4F4D\u7F6E\u65F6\uFF0C\u8DF3\u8FC7\u591A\u4F59\u7684 search/read\uFF0C\u76F4\u63A5 replace\u3002
11172
+ - \u7981\u6B62\u4E3A\u4E00\u4E2A\u5C0F\u6539\u52A8\u6574\u9875\u91CD\u5199\u6216\u8FDE\u5E26\u6539\u52A8\u672A\u547D\u4E2D\u7684\u90E8\u5206\u3002
11173
+
11174
+ ## \u5B9A\u70B9\u4FEE\u6539
11175
+ - \u5982\u679C\u4E0A\u4E0B\u6587\u91CC\u5E26\u6709\u7528\u6237\u300C\u9009\u4E2D\u7684\u5143\u7D20\u300D\uFF08cssPath / HTML \u7247\u6BB5 / \u6E90\u7801\u4F4D\u7F6E\uFF09\uFF0C\u76F4\u63A5\u636E\u6B64\u5B9A\u4F4D\uFF0C\u4E0D\u8981\u518D\u5168\u5C40\u641C\u7D22\u3002
11176
+ - \u4FEE\u6539\u6536\u655B\u5728\u547D\u4E2D\u7684\u5143\u7D20\u53CA\u5176\u6837\u5F0F\u6765\u6E90\uFF08\u7EC4\u4EF6 / \u7C7B / design token\uFF09\u3002
11177
+
11178
+ ## \u6301\u7EED\u8FED\u4EE3\u6D41\u7A0B
11179
+ - \u7528\u6237\u8981\u6539\u529F\u80FD\u6216\u6837\u5F0F\u65F6\uFF0C\u5148\u7528 appList \u627E\u5230\u76EE\u6807\u5E94\u7528\uFF0C\u518D\u7528 appRead \u5224\u65AD\u5F53\u524D\u662F\u6E90\u7801\u5DE5\u4F5C\u533A\u8FD8\u662F\u90E8\u7F72\u4EA7\u7269\uFF1B\u4E00\u65E6\u62FF\u5230 appId\uFF0C\u540E\u7EED\u90FD\u5FC5\u987B\u590D\u7528\u540C\u4E00\u4E2A appId\u3002
11180
+ - \u6BCF\u6B21\u4FEE\u6539\u540E\uFF1AappPreflight \u2192 appDeploy\uFF1BappDeploy \u5FC5\u987B\u7EE7\u7EED\u4F20\u540C\u4E00\u4E2A appId\u3002
11181
+ - \u6536\u5230 repairPlan \u5C31\u76F4\u63A5\u4FEE\uFF1A\u6309\u8FD4\u56DE issues \u5B9A\u70B9\u4FEE\u590D\u5E76\u91CD\u65B0\u9884\u68C0\uFF0C\u4E0D\u8981\u6574\u7AD9\u91CD\u5199\uFF0C\u4E5F\u4E0D\u8981\u5148\u95EE\u7528\u6237\u8981\u4E0D\u8981\u4FEE\u3002
11182
+
11183
+ ## Nolo React SSR \u7EF4\u62A4\u7EAA\u5F8B\uFF08\u5F53\u524D\u9ED8\u8BA4\u8DEF\u5F84\uFF09
11184
+ - \u65B0\u5EFA\u548C\u7EF4\u62A4\u7684\u5E94\u7528\u4F18\u5148\u8D70 Nolo React SSR\uFF08framework: "nolo-react", renderMode: "ssr"\uFF09\u3002
11185
+ - \u5F53 appRead \u8FD4\u56DE workspaceRef / sourceFiles / sourceOmitted \u65F6\uFF0C\u4E0D\u8981\u6574\u7AD9\u91CD\u5199\uFF1B\u4F7F\u7528\u53D7\u9650 workspace \u6587\u4EF6\u5DE5\u5177\uFF1AappFileList / appFileSearch / appFileRead / appFileReplace / appFileWrite\u3002
11186
+ - \u5C0F\u6539\u52A8\u5FC5\u987B\u4F18\u5148 appFileReplace\uFF1B\u53EA\u6709\u65B0\u5EFA\u6587\u4EF6\u6216\u786E\u5B9E\u9700\u8981\u6574\u6587\u4EF6\u91CD\u5199\u65F6\u624D appFileWrite\u3002
11187
+ - \u4E0D\u8981\u9759\u9ED8\u628A nolo-react \u5E94\u7528\u9000\u56DE react-spa \u6216\u5355\u6587\u4EF6 Worker\u3002
11188
+ - \u89C6\u89C9\u5FAE\u8C03\u4F18\u5148\u6539 theme / tokens / design system\uFF1B\u65E7\u5199\u6CD5\u5E94\u7528\u53EF\u5148\u505A\u6700\u5C0F token \u8FC1\u79FB\uFF0C\u518D\u6539\u89C6\u89C9\u53C2\u6570\u3002
11189
+
11190
+ ## \u8868\u5355 / \u6570\u636E\u6536\u96C6
11191
+ - \u7559\u8A00\u3001\u8054\u7CFB\u8868\u5355\u3001\u9884\u7EA6\u3001\u8BA2\u9605\u3001\u53CD\u9988\u6536\u96C6\u4F18\u5148\u7528\u8868\u5DE5\u5177\uFF0C\u4E0D\u8981\u81EA\u5DF1\u53D1\u660E JSON \u6587\u4EF6\u5B58\u50A8\u3002
11192
+ - \u516C\u5F00\u7F51\u9875\u8868\u5355\u5148 createTable\uFF0C\u5E76\u914D\u7F6E publicIntake\uFF08enabled\u3001slug\u3001allowedFields\u3001requiredFields\u3001\u53EF\u9009 honeypotField\uFF09\u3002
11193
+ - \u516C\u5F00\u8BBF\u5BA2\u63D0\u4EA4\u53EA\u80FD\u8C03\u7528 /api/table/public-submit\uFF1B\u4E0D\u8981\u628A tenantId\u3001tableId\u3001token \u5199\u8FDB\u516C\u5F00\u5E94\u7528\u4EE3\u7801\u3002
11194
+
11195
+ ## \u9879\u76EE\u7D20\u6750
11196
+ - \u9996\u9875\u63D2\u753B\u3001\u5C01\u9762\u3001\u6A2A\u5E45\u3001\u6309\u94AE\u56FE\u6807\u7B49\u89C6\u89C9\u7D20\u6750\uFF0C\u4F18\u5148 openAIGptImage\uFF0C\u518D\u63A5\u5165\u5E94\u7528\u3002
11197
+
11198
+ ## \u901A\u9053\u5F02\u5E38\u6B62\u635F
11199
+ - \u5982\u679C\u5DE5\u5177\u8FD4\u56DE HTML / \u975E JSON / transport failure / retryable=false\uFF0C\u505C\u6B62\u81EA\u52A8\u91CD\u8BD5\uFF0C\u8BF4\u660E\u662F\u5E73\u53F0\u901A\u9053\u5F02\u5E38\u3002
11200
+
11201
+ ## \u7F3A\u5C11\u6E90\u7801\u8981\u8BF4\u660E\u98CE\u9669
11202
+ - \u5982\u679C appRead \u8BFB\u51FA\u6765\u7684\u662F HTML \u58F3\u3001importmap\u3001\u538B\u7F29 bundle\uFF0C\u5FC5\u987B\u5148\u544A\u77E5\u7528\u6237\u5F53\u524D\u66F4\u50CF\u90E8\u7F72\u4EA7\u7269\u800C\u4E0D\u662F\u53EF\u7EF4\u62A4\u6E90\u7801\uFF0C\u5F97\u5230\u786E\u8BA4\u540E\u518D\u7EE7\u7EED\u5927\u6539\u3002
11203
+
11204
+ ## \u90E8\u7F72\u5E94\u7B54\u6A21\u677F
11205
+ \u90E8\u7F72\u6210\u529F\u540E\uFF1A
11206
+ "\u2705 \u4F60\u7684\u5E94\u7528\u5DF2\u7ECF\u597D\u4E86\uFF01
11207
+
11208
+ \u{1F517} \u8BBF\u95EE\u94FE\u63A5\uFF1A[URL]
11209
+
11210
+ \u8FD9\u4E2A\u5E94\u7528\u53EF\u4EE5\u5E2E\u4F60 [\u4E00\u53E5\u8BDD\u529F\u80FD\u63CF\u8FF0]\u3002\u60F3\u8981\u4FEE\u6539\u6216\u6DFB\u52A0\u529F\u80FD\uFF0C\u76F4\u63A5\u544A\u8BC9\u6211\u5C31\u884C\uFF01"`
10976
11211
  }
10977
11212
  ];
10978
11213
  var CAPABILITY_PACK_BY_ID = CAPABILITY_PACKS.reduce(
@@ -10992,6 +11227,20 @@ function expandEnabledPacks(enabledPacks, explicitTools = []) {
10992
11227
  const packTools = (enabledPacks ?? []).map((id) => CAPABILITY_PACK_BY_ID[id]?.tools ?? []).flat();
10993
11228
  return [.../* @__PURE__ */ new Set([...packTools, ...explicitTools ?? []])];
10994
11229
  }
11230
+ function expandEnabledPackPromptPatches(enabledPacks) {
11231
+ return (enabledPacks ?? []).map((id) => CAPABILITY_PACK_BY_ID[id]?.promptPatch).filter((patch2) => typeof patch2 === "string" && patch2.length > 0);
11232
+ }
11233
+ function appendEnabledPackPromptPatches(prompt, enabledPacks) {
11234
+ const patches = expandEnabledPackPromptPatches(enabledPacks);
11235
+ if (patches.length === 0) return prompt ?? void 0;
11236
+ const base = typeof prompt === "string" ? prompt.trim() : "";
11237
+ const addition = patches.join("\n\n");
11238
+ if (!base) return addition;
11239
+ if (base.includes(addition)) return base;
11240
+ return `${base}
11241
+
11242
+ ${addition}`;
11243
+ }
10995
11244
  var FORCED_TOOLS = ["ui_ask_choice"];
10996
11245
  function applyDisabledTools(toolNames, disabledTools) {
10997
11246
  if (!Array.isArray(disabledTools) || disabledTools.length === 0) {
@@ -11040,7 +11289,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11040
11289
  workspace: { mode: "lease" }
11041
11290
  };
11042
11291
  var findModelConfig = async (modelName, provider) => {
11043
- const { ALL_MODELS } = await import("./models-4OPOOLFS.js");
11292
+ const { ALL_MODELS } = await import("./models-LSCRJJ6P.js");
11044
11293
  const name = toTrimmedString(modelName);
11045
11294
  const prov = toTrimmedString(provider ?? "");
11046
11295
  if (!name) return null;
@@ -11281,7 +11530,7 @@ var buildFormDataFromArgs = async (args) => {
11281
11530
  const trimmedModel = toTrimmedString(model);
11282
11531
  const trimmedProvider = toTrimmedString(provider);
11283
11532
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
11284
- const { getModelPricing } = await import("./getPricing-3E6UNPKL.js");
11533
+ const { getModelPricing } = await import("./getPricing-6TOZXPAU.js");
11285
11534
  const normalizedTools = tools ?? [];
11286
11535
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
11287
11536
  const formData = {
@@ -12462,6 +12711,139 @@ Imported from: ${url}` : ""
12462
12711
  });
12463
12712
  }
12464
12713
 
12714
+ // packages/ai/tools/loadSkillTool.ts
12715
+ var loadSkillFunctionSchema = {
12716
+ name: "loadSkill",
12717
+ description: [
12718
+ "\u6309\u540D\u79F0\u52A0\u8F7D\u4E00\u4E2A\u5DF2\u4FDD\u5B58\u7684 skill \u6587\u6863\uFF0C\u8FD4\u56DE\u5176\u5B8C\u6574\u6307\u4EE4\u6B63\u6587\u3002",
12719
+ "name \u4F7F\u7528 skill \u4FDD\u5B58\u65F6\u5199\u5165 skill-config \u7684 name\uFF08\u4E5F\u63A5\u53D7 skillId\uFF09\u3002",
12720
+ "\u627E\u4E0D\u5230\u5BF9\u5E94 skill \u65F6\u8FD4\u56DE\u5F53\u524D\u53EF\u7528\u7684 skill \u540D\u79F0\u5217\u8868\uFF08\u4E0D\u62A5\u9519\uFF09\u3002"
12721
+ ].join("\n"),
12722
+ parameters: {
12723
+ type: "object",
12724
+ properties: {
12725
+ name: {
12726
+ type: "string",
12727
+ description: "\u8981\u52A0\u8F7D\u7684 skill \u540D\u79F0\u3002"
12728
+ }
12729
+ },
12730
+ required: ["name"]
12731
+ }
12732
+ };
12733
+ var getRuntime = (thunkApi) => {
12734
+ const state = thunkApi?.getState?.();
12735
+ return state ? selectRuntimeSnapshot(state) : null;
12736
+ };
12737
+ var authHeaders = (token) => token ? { Authorization: `Bearer ${token}` } : {};
12738
+ async function readRemoteRecord(args) {
12739
+ const serverBase = normalizeServerOrigin(args.serverBase);
12740
+ if (!serverBase || !args.token) return null;
12741
+ const response = await fetch(
12742
+ `${serverBase}/api/v1/db/read/${encodeURIComponent(args.dbKey)}?includeDeleted=true`,
12743
+ { headers: authHeaders(args.token) }
12744
+ );
12745
+ if (!response.ok) return null;
12746
+ const payload = await response.json().catch(() => null);
12747
+ return payload?.data ?? payload;
12748
+ }
12749
+ function matchSkillCandidate(candidates, requestedName) {
12750
+ return candidates.find(
12751
+ (candidate) => candidate.name === requestedName || candidate.skillId === requestedName
12752
+ );
12753
+ }
12754
+ function collectSkillCandidatesFromSpace(space) {
12755
+ if (!space?.contents || typeof space.contents !== "object") return [];
12756
+ const candidates = [];
12757
+ for (const [entryKey, value] of Object.entries(space.contents)) {
12758
+ if (!isRecord(value)) continue;
12759
+ const skillSummary = value.skillSummary;
12760
+ if (!isSkillSummaryMarker(skillSummary)) continue;
12761
+ const name = asTrimmedString(skillSummary.name);
12762
+ if (!name) continue;
12763
+ candidates.push({
12764
+ dbKey: entryKey,
12765
+ name,
12766
+ skillId: asOptionalTrimmedString(skillSummary.skillId) ?? void 0
12767
+ });
12768
+ }
12769
+ return candidates;
12770
+ }
12771
+ function extractSkillBody(page) {
12772
+ return parseSkillDocProtocol(page?.content ?? "").content;
12773
+ }
12774
+ async function listSkillCandidates(thunkApi) {
12775
+ const runtime = getRuntime(thunkApi);
12776
+ const serverBase = runtime?.currentServer;
12777
+ const token = runtime?.currentToken;
12778
+ const userId = runtime?.currentUserId;
12779
+ if (!serverBase || !token || !userId) return [];
12780
+ const membershipsResponse = await fetch(
12781
+ `${normalizeServerOrigin(serverBase)}/rpc/getUserSpaceMemberships`,
12782
+ {
12783
+ method: "POST",
12784
+ headers: {
12785
+ "Content-Type": "application/json",
12786
+ ...authHeaders(token)
12787
+ },
12788
+ body: JSON.stringify({ userId })
12789
+ }
12790
+ ).catch(() => null);
12791
+ if (!membershipsResponse?.ok) return [];
12792
+ const memberships = await membershipsResponse.json().catch(() => []);
12793
+ if (!Array.isArray(memberships)) return [];
12794
+ const candidates = [];
12795
+ for (const membership of memberships) {
12796
+ const spaceId = asTrimmedString(membership?.spaceId);
12797
+ if (!spaceId) continue;
12798
+ const space = await readRemoteRecord({
12799
+ serverBase,
12800
+ token,
12801
+ dbKey: createSpaceKey.space(spaceId)
12802
+ });
12803
+ if (!space) continue;
12804
+ candidates.push(...collectSkillCandidatesFromSpace(space));
12805
+ }
12806
+ return candidates;
12807
+ }
12808
+ async function loadSkillFunc(args, thunkApi) {
12809
+ const requestedName = asTrimmedString(args?.name);
12810
+ if (!requestedName) throw new Error("loadSkill \u9700\u8981\u63D0\u4F9B name\u3002");
12811
+ const candidates = await listSkillCandidates(thunkApi);
12812
+ const matched = matchSkillCandidate(candidates, requestedName);
12813
+ if (!matched) {
12814
+ const availableNames = Array.from(
12815
+ new Set(candidates.map((candidate) => candidate.name))
12816
+ );
12817
+ const availableText = availableNames.length ? availableNames.join(", ") : "(none)";
12818
+ return {
12819
+ rawData: {
12820
+ success: false,
12821
+ name: requestedName,
12822
+ availableSkills: availableNames
12823
+ },
12824
+ displayData: `Skill "${requestedName}" not found. Available skills: ${availableText}`
12825
+ };
12826
+ }
12827
+ const runtime = getRuntime(thunkApi);
12828
+ const page = await readRemoteRecord({
12829
+ serverBase: runtime?.currentServer,
12830
+ token: runtime?.currentToken,
12831
+ dbKey: matched.dbKey
12832
+ });
12833
+ const body = extractSkillBody(page);
12834
+ return {
12835
+ rawData: {
12836
+ success: true,
12837
+ name: requestedName,
12838
+ dbKey: matched.dbKey,
12839
+ body
12840
+ },
12841
+ displayData: `Skill "${requestedName}" loaded inline. Follow its instructions.
12842
+
12843
+ ${body}`
12844
+ };
12845
+ }
12846
+
12465
12847
  // packages/ai/tools/category/createCategoryTool.ts
12466
12848
  var createCategoryFunctionSchema = {
12467
12849
  // 已从 'create_category' 更新为 'createCategory'
@@ -13269,18 +13651,18 @@ var jsonPreview = (value, maxLength = 1800) => {
13269
13651
  return text.length <= maxLength ? text : `${text.slice(0, maxLength)}
13270
13652
  ...(truncated)`;
13271
13653
  };
13272
- var getRuntime = (thunkApi) => {
13654
+ var getRuntime2 = (thunkApi) => {
13273
13655
  const state = thunkApi?.getState?.();
13274
13656
  return state ? selectRuntimeSnapshot(state) : null;
13275
13657
  };
13276
- var authHeaders = (token) => token ? { Authorization: `Bearer ${token}` } : {};
13277
- async function readRemoteRecord(args) {
13658
+ var authHeaders2 = (token) => token ? { Authorization: `Bearer ${token}` } : {};
13659
+ async function readRemoteRecord2(args) {
13278
13660
  const serverBase = normalizeServerOrigin(args.serverBase);
13279
13661
  if (!serverBase || !args.token) return null;
13280
13662
  const query = args.includeDeleted ? "?includeDeleted=true" : "";
13281
13663
  const response = await fetch(
13282
13664
  `${serverBase}/api/v1/db/read/${encodeURIComponent(args.dbKey)}${query}`,
13283
- { headers: authHeaders(args.token) }
13665
+ { headers: authHeaders2(args.token) }
13284
13666
  );
13285
13667
  if (!response.ok) return null;
13286
13668
  const payload = await response.json().catch(() => null);
@@ -13295,7 +13677,7 @@ async function queryRemoteUserRecords(args) {
13295
13677
  method: "POST",
13296
13678
  headers: {
13297
13679
  "Content-Type": "application/json",
13298
- ...authHeaders(args.token)
13680
+ ...authHeaders2(args.token)
13299
13681
  },
13300
13682
  body: JSON.stringify({
13301
13683
  type: args.type,
@@ -13308,7 +13690,7 @@ async function queryRemoteUserRecords(args) {
13308
13690
  return Array.isArray(payload?.data?.data) ? payload.data.data : Array.isArray(payload?.data) ? payload.data : [];
13309
13691
  }
13310
13692
  async function queryBestRecords(thunkApi, type, limit) {
13311
- const runtime = getRuntime(thunkApi);
13693
+ const runtime = getRuntime2(thunkApi);
13312
13694
  const remoteRecords = await queryRemoteUserRecords({
13313
13695
  serverBase: runtime?.currentServer,
13314
13696
  token: runtime?.currentToken,
@@ -13319,8 +13701,8 @@ async function queryBestRecords(thunkApi, type, limit) {
13319
13701
  return remoteRecords;
13320
13702
  }
13321
13703
  async function readBestRecord(thunkApi, dbKey, includeDeleted = false) {
13322
- const runtime = getRuntime(thunkApi);
13323
- return readRemoteRecord({
13704
+ const runtime = getRuntime2(thunkApi);
13705
+ return readRemoteRecord2({
13324
13706
  serverBase: runtime?.currentServer,
13325
13707
  token: runtime?.currentToken,
13326
13708
  dbKey,
@@ -13421,7 +13803,7 @@ var deleteDialogsFunctionSchema = {
13421
13803
  }
13422
13804
  };
13423
13805
  async function queryDialogsBySubjectRefFunc(args, thunkApi) {
13424
- const runtime = getRuntime(thunkApi);
13806
+ const runtime = getRuntime2(thunkApi);
13425
13807
  const target = buildNoloSubjectRefQueryTarget(args ?? {});
13426
13808
  if (!target) throw new Error("queryDialogsBySubjectRef requires rowDbKey or subjectKind plus subjectId.");
13427
13809
  const queryLimit = clampNoloPositiveInteger(args?.queryLimit, 500, 500);
@@ -13467,7 +13849,7 @@ async function queryDialogsBySubjectRefFunc(args, thunkApi) {
13467
13849
  };
13468
13850
  }
13469
13851
  async function readDialogFunc(args, thunkApi) {
13470
- const runtime = getRuntime(thunkApi);
13852
+ const runtime = getRuntime2(thunkApi);
13471
13853
  const userId = runtime?.currentUserId;
13472
13854
  if (!userId) throw new Error("readDialog requires a signed-in user.");
13473
13855
  const rawDialog = asTrimmedString(args?.dialog) || asTrimmedString(args?.dialogId) || asTrimmedString(args?.id);
@@ -13482,7 +13864,7 @@ async function readDialogFunc(args, thunkApi) {
13482
13864
  method: "POST",
13483
13865
  headers: {
13484
13866
  "Content-Type": "application/json",
13485
- ...authHeaders(runtime.currentToken)
13867
+ ...authHeaders2(runtime.currentToken)
13486
13868
  },
13487
13869
  body: JSON.stringify({ dialogId: resolved.dialogId, limit })
13488
13870
  }).catch(() => null);
@@ -13532,7 +13914,7 @@ var formatDeleteDialogsPreview = (preview) => {
13532
13914
  return lines.join("\n");
13533
13915
  };
13534
13916
  var loadDeleteDialogsPreview = async (args, thunkApi) => {
13535
- const runtime = getRuntime(thunkApi);
13917
+ const runtime = getRuntime2(thunkApi);
13536
13918
  const userId = runtime?.currentUserId;
13537
13919
  if (!userId) throw new Error("deleteDialogs requires a signed-in user.");
13538
13920
  const query = asTrimmedString(args?.query);
@@ -13578,7 +13960,7 @@ async function deleteDialogsFunc(args, thunkApi) {
13578
13960
  const deletedDialogIds = [];
13579
13961
  const deletedDialogKeys = [];
13580
13962
  const failures = [];
13581
- const { deleteDialog } = await import("./dialogSlice-PT7YBWNE.js");
13963
+ const { deleteDialog } = await import("./dialogSlice-PRHHYSP5.js");
13582
13964
  for (const target of targets) {
13583
13965
  try {
13584
13966
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -13603,9 +13985,60 @@ async function deleteDialogsFunc(args, thunkApi) {
13603
13985
  displayData: deletedDialogIds.length > 0 ? `\u5DF2\u5220\u9664 ${deletedDialogIds.length} \u4E2A\u5BF9\u8BDD\uFF1A${deletedDialogIds.join(", ")}\u3002` : "\u6CA1\u6709\u5220\u9664\u4EFB\u4F55\u5BF9\u8BDD\u3002"
13604
13986
  };
13605
13987
  }
13988
+ async function fetchUserFavoriteAgentMap(thunkApi) {
13989
+ const runtime = getRuntime2(thunkApi);
13990
+ if (!runtime?.currentServer || !runtime?.currentToken) return {};
13991
+ try {
13992
+ const serverBase = normalizeServerOrigin(runtime.currentServer);
13993
+ if (!serverBase) return {};
13994
+ const response = await fetch(`${serverBase}/rpc/listFavorites`, {
13995
+ method: "POST",
13996
+ headers: {
13997
+ "Content-Type": "application/json",
13998
+ ...authHeaders2(runtime.currentToken)
13999
+ },
14000
+ body: JSON.stringify({ targetType: "agent" })
14001
+ }).catch(() => null);
14002
+ if (!response || !response.ok) return {};
14003
+ const data = await response.json().catch(() => ({}));
14004
+ const favoritedAtByKey = {};
14005
+ const items = Array.isArray(data?.items) ? data.items : [];
14006
+ for (const item of items) {
14007
+ const id = typeof item?.id === "string" ? item.id : "";
14008
+ if (!id) continue;
14009
+ const at = Number(item?.favoritedAt) || 0;
14010
+ favoritedAtByKey[id] = Math.max(favoritedAtByKey[id] ?? 0, at || Date.now());
14011
+ }
14012
+ const ids = Array.isArray(data?.ids) ? data.ids : [];
14013
+ for (const id of ids) {
14014
+ if (typeof id === "string" && id && !(id in favoritedAtByKey)) {
14015
+ favoritedAtByKey[id] = 1;
14016
+ }
14017
+ }
14018
+ return favoritedAtByKey;
14019
+ } catch {
14020
+ return {};
14021
+ }
14022
+ }
14023
+ function formatAgentListCard(agents, maxDisplay = 20) {
14024
+ const total = agents.length;
14025
+ const lines = [`Agents (${total})`];
14026
+ const visible = agents.slice(0, maxDisplay);
14027
+ for (const agent of visible) {
14028
+ const star = agent.isFavorite ? "\u2605" : " ";
14029
+ const name = agent.name || "(unnamed)";
14030
+ const model = agent.model || "\u2014";
14031
+ const source = agent.apiSource || agent.provider || agent.cliProvider || "\u2014";
14032
+ lines.push(`${star} ${name} ${model} ${source}`);
14033
+ }
14034
+ if (total > maxDisplay) {
14035
+ lines.push(`\u2026 +${total - maxDisplay} more`);
14036
+ }
14037
+ return lines.join("\n");
14038
+ }
13606
14039
  var listAgentsFunctionSchema = {
13607
14040
  name: "listAgents",
13608
- description: "List the current user's Nolo agents.",
14041
+ description: "List the current user's Nolo agents as safe summaries. Use readAgent with the selected id/publicKey to resolve the runnable agentKey before delegation.",
13609
14042
  parameters: {
13610
14043
  type: "object",
13611
14044
  properties: {
@@ -13616,21 +14049,40 @@ var listAgentsFunctionSchema = {
13616
14049
  };
13617
14050
  async function listAgentsFunc(args, thunkApi) {
13618
14051
  const limit = clampNoloPositiveInteger(args?.limit, 100, 500);
13619
- const records = await queryBestRecords(thunkApi, "agent" /* AGENT */, limit);
13620
- const agents = records.sort((left, right) => getNoloComparableUpdatedAt(right) - getNoloComparableUpdatedAt(left)).map((record) => ({
13621
- id: record?.id ?? null,
13622
- privateKey: record?.dbKey ?? null,
13623
- publicKey: typeof record?.id === "string" ? `agent-pub-${record.id}` : null,
13624
- name: record?.name ?? "(unnamed)",
13625
- model: record?.model ?? null,
13626
- provider: record?.provider ?? record?.apiSource ?? null,
13627
- isPublic: record?.isPublic === true,
13628
- updatedAt: record?.updatedAt ?? record?.createdAt ?? null,
13629
- tools: Array.isArray(record?.tools) ? record.tools : []
13630
- })).filter((agent) => args?.publicOnly !== true || agent.isPublic);
14052
+ const userRecords = await queryBestRecords(thunkApi, "agent" /* AGENT */, limit);
14053
+ const favoritesMap = await fetchUserFavoriteAgentMap(thunkApi);
14054
+ const recordsMap = /* @__PURE__ */ new Map();
14055
+ for (const record of userRecords) {
14056
+ const key = record?.dbKey || record?.id || record?.publicKey;
14057
+ if (key) recordsMap.set(key, record);
14058
+ }
14059
+ for (const favKey of Object.keys(favoritesMap)) {
14060
+ const isAlreadyPresent = Array.from(recordsMap.values()).some(
14061
+ (record) => record?.dbKey === favKey || record?.id === favKey || record?.publicKey === favKey || `agent-pub-${record?.id}` === favKey
14062
+ );
14063
+ if (!isAlreadyPresent) {
14064
+ const favRecord = await readBestRecord(thunkApi, favKey).catch(() => null);
14065
+ if (favRecord) {
14066
+ const key = favRecord?.dbKey || favRecord?.id || favKey;
14067
+ recordsMap.set(key, favRecord);
14068
+ }
14069
+ }
14070
+ }
14071
+ const runtime = getRuntime2(thunkApi);
14072
+ const userId = runtime?.currentUserId ?? void 0;
14073
+ let agents = Array.from(recordsMap.values()).map(
14074
+ (record) => toSafeAgentSummary(record, {
14075
+ favoritesMap,
14076
+ userId
14077
+ })
14078
+ );
14079
+ if (args?.publicOnly === true) {
14080
+ agents = agents.filter((agent) => agent.isPublic);
14081
+ }
14082
+ agents = sortSafeAgentSummaries(agents);
13631
14083
  return {
13632
14084
  rawData: { success: true, total: agents.length, agents },
13633
- displayData: jsonPreview({ total: agents.length, agents })
14085
+ displayData: formatAgentListCard(agents)
13634
14086
  };
13635
14087
  }
13636
14088
  var readAgentFunctionSchema = {
@@ -13645,7 +14097,7 @@ var readAgentFunctionSchema = {
13645
14097
  }
13646
14098
  };
13647
14099
  async function readAgentFunc(args, thunkApi) {
13648
- const runtime = getRuntime(thunkApi);
14100
+ const runtime = getRuntime2(thunkApi);
13649
14101
  const userId = runtime?.currentUserId;
13650
14102
  if (!userId) throw new Error("readAgent requires a signed-in user.");
13651
14103
  const rawAgent = asTrimmedString(args?.agent) || asTrimmedString(args?.agentKey) || asTrimmedString(args?.id);
@@ -13679,14 +14131,14 @@ var listSpacesFunctionSchema = {
13679
14131
  }
13680
14132
  };
13681
14133
  async function listSpacesFunc(_args, thunkApi) {
13682
- const runtime = getRuntime(thunkApi);
14134
+ const runtime = getRuntime2(thunkApi);
13683
14135
  const serverBase = normalizeServerOrigin(runtime?.currentServer);
13684
14136
  if (serverBase && runtime?.currentToken && runtime?.currentUserId) {
13685
14137
  const response = await fetch(`${serverBase}/rpc/getUserSpaceMemberships`, {
13686
14138
  method: "POST",
13687
14139
  headers: {
13688
14140
  "Content-Type": "application/json",
13689
- ...authHeaders(runtime.currentToken)
14141
+ ...authHeaders2(runtime.currentToken)
13690
14142
  },
13691
14143
  body: JSON.stringify({ userId: runtime.currentUserId })
13692
14144
  }).catch(() => null);
@@ -13772,7 +14224,7 @@ var readSkillDocFunctionSchema = {
13772
14224
  }
13773
14225
  };
13774
14226
  async function readSkillDocFunc(args, thunkApi) {
13775
- const { buildReadDocResult } = await import("./readDocTool-HUFU6OCT.js");
14227
+ const { buildReadDocResult } = await import("./readDocTool-QHVGQHUJ.js");
13776
14228
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
13777
14229
  if (typeof id !== "string" || !id.trim()) {
13778
14230
  throw new Error("readSkillDoc requires id or doc.");
@@ -13788,7 +14240,7 @@ var cliWhoamiFunctionSchema = {
13788
14240
  parameters: { type: "object", properties: {} }
13789
14241
  };
13790
14242
  async function cliWhoamiFunc(_args, thunkApi) {
13791
- const runtime = getRuntime(thunkApi);
14243
+ const runtime = getRuntime2(thunkApi);
13792
14244
  const result = {
13793
14245
  success: true,
13794
14246
  runtime: "browser",
@@ -13804,7 +14256,7 @@ var cliDoctorFunctionSchema = {
13804
14256
  parameters: { type: "object", properties: {} }
13805
14257
  };
13806
14258
  async function cliDoctorFunc(_args, thunkApi) {
13807
- const runtime = getRuntime(thunkApi);
14259
+ const runtime = getRuntime2(thunkApi);
13808
14260
  const result = {
13809
14261
  success: true,
13810
14262
  runtime: "browser",
@@ -19160,7 +19612,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
19160
19612
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
19161
19613
  async function addImageContentToSpace(input) {
19162
19614
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
19163
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-PLWJSCOZ.js")).addContentAction;
19615
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-ZHI7TVV3.js")).addContentAction;
19164
19616
  await addContentAction2(
19165
19617
  {
19166
19618
  spaceId: input.spaceId,
@@ -20243,6 +20695,26 @@ var resolveRetryAfterMs = (headers, fallbackMs, bodyRetryAfterMs) => {
20243
20695
  return normalizeNonNegativeMs(bodyRetryAfterMs, fallbackMs);
20244
20696
  };
20245
20697
 
20698
+ // packages/core/abortableDelay.ts
20699
+ function waitForAbortableDelay(ms, signal) {
20700
+ const delayMs = Number.isFinite(ms) && ms >= 0 ? Math.round(ms) : 0;
20701
+ if (signal?.aborted) {
20702
+ return Promise.reject(new DOMException("Aborted", "AbortError"));
20703
+ }
20704
+ return new Promise((resolve, reject) => {
20705
+ const onAbort = () => {
20706
+ clearTimeout(timeoutId);
20707
+ signal?.removeEventListener("abort", onAbort);
20708
+ reject(new DOMException("Aborted", "AbortError"));
20709
+ };
20710
+ const timeoutId = setTimeout(() => {
20711
+ signal?.removeEventListener("abort", onAbort);
20712
+ resolve();
20713
+ }, delayMs);
20714
+ signal?.addEventListener("abort", onAbort, { once: true });
20715
+ });
20716
+ }
20717
+
20246
20718
  // packages/ai/chat/parseMultilineSSE.ts
20247
20719
  function createSSEParser() {
20248
20720
  let buffer = "";
@@ -20306,6 +20778,7 @@ var parseMultilineSSE = createSSEParser();
20306
20778
  var MAX_SSE_RETRIES = 3;
20307
20779
  var SSE_RETRY_DELAY_MS = 1500;
20308
20780
  var MAX_RUN_START_RETRIES = 1;
20781
+ var MAX_RUN_START_CORE_DRAINING_RETRIES = 30;
20309
20782
  function createRetryableError(message, retryAfterMs) {
20310
20783
  return Object.assign(new Error(message), {
20311
20784
  retryable: true,
@@ -20320,20 +20793,7 @@ function createSubscriptionError(status, hasBody, retryAfterMs) {
20320
20793
  return createRetryableError(message, retryAfterMs);
20321
20794
  }
20322
20795
  async function waitForRetryDelay(retryAfterMs, signal) {
20323
- if (signal.aborted) throw new DOMException("Aborted", "AbortError");
20324
- await new Promise((resolve, reject) => {
20325
- let timeoutId;
20326
- const onAbort = () => {
20327
- clearTimeout(timeoutId);
20328
- signal.removeEventListener("abort", onAbort);
20329
- reject(new DOMException("Aborted", "AbortError"));
20330
- };
20331
- timeoutId = setTimeout(() => {
20332
- signal.removeEventListener("abort", onAbort);
20333
- resolve();
20334
- }, retryAfterMs);
20335
- signal.addEventListener("abort", onAbort, { once: true });
20336
- });
20796
+ await waitForAbortableDelay(retryAfterMs, signal);
20337
20797
  }
20338
20798
  function parseRetryableJson(text) {
20339
20799
  try {
@@ -20419,7 +20879,7 @@ async function listenToDialogEvents(dialogId, currentServer, authHeader, signal,
20419
20879
  });
20420
20880
  }
20421
20881
  var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, { getState, signal: thunkSignal }) => {
20422
- const { agentKey, userInput, serverBase, spaceId, onStatusChange, onDone, onFailed } = args;
20882
+ const { agentKey, userInput, serverBase, spaceId, parentDialogId, onStatusChange, onDone, onFailed } = args;
20423
20883
  const state = getState();
20424
20884
  const currentServer = normalizeServerOrigin(serverBase) || selectCurrentServer(state);
20425
20885
  const token = selectIdentityToken(state);
@@ -20427,7 +20887,8 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
20427
20887
  const authHeader = token ? `Bearer ${token}` : "";
20428
20888
  const effectiveSignal = args.signal ?? thunkSignal;
20429
20889
  let runResponse = null;
20430
- for (let attempt = 0; attempt <= MAX_RUN_START_RETRIES; attempt++) {
20890
+ let maxRunStartRetries = MAX_RUN_START_RETRIES;
20891
+ for (let attempt = 0; attempt <= maxRunStartRetries; attempt++) {
20431
20892
  const runRes = await fetch(`${currentServer}/api/agent/run`, {
20432
20893
  method: "POST",
20433
20894
  headers: {
@@ -20439,12 +20900,14 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
20439
20900
  userInput,
20440
20901
  spaceId,
20441
20902
  background: true,
20903
+ ...parentDialogId ? { parentDialogId } : {},
20442
20904
  runtimeContext: {
20443
20905
  surface: "web",
20444
20906
  host: "browser",
20445
20907
  runtime: "react",
20446
20908
  entrypoint: "background-agent-run",
20447
- capabilities: ["background", "sse-events"]
20909
+ capabilities: ["background", "sse-events"],
20910
+ ...parentDialogId ? { parentThreadId: parentDialogId } : {}
20448
20911
  }
20449
20912
  }),
20450
20913
  signal: effectiveSignal
@@ -20460,8 +20923,12 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
20460
20923
  SSE_RETRY_DELAY_MS,
20461
20924
  payload?.retryAfterMs
20462
20925
  );
20463
- const retryable = payload?.retryable === true || payload?.reason === "core_draining" || isGatewayHttpStatus(runRes.status);
20464
- if (retryable && attempt < MAX_RUN_START_RETRIES) {
20926
+ const isCoreDraining = payload?.reason === CORE_DRAIN_REASON;
20927
+ const retryable = payload?.retryable === true || isCoreDraining || isGatewayHttpStatus(runRes.status);
20928
+ if (isCoreDraining) {
20929
+ maxRunStartRetries = MAX_RUN_START_CORE_DRAINING_RETRIES;
20930
+ }
20931
+ if (retryable && attempt < maxRunStartRetries) {
20465
20932
  await waitForRetryDelay(retryAfterMs, effectiveSignal);
20466
20933
  continue;
20467
20934
  }
@@ -20555,12 +21022,15 @@ async function callAgentFunc(args, thunkApi, context) {
20555
21022
  throw new Error("callAgent: \u7F3A\u5C11\u6709\u6548\u7684 task \u6587\u672C\u63CF\u8FF0\u3002");
20556
21023
  }
20557
21024
  const content = buildDelegatedTaskContent(task, input);
21025
+ const activeDialogKey = getActiveDialogKey();
21026
+ const parentDialogId = activeDialogKey ? extractCustomId(activeDialogKey) : void 0;
20558
21027
  try {
20559
21028
  const bgResult = await dispatch(
20560
21029
  runAgentBackground({
20561
21030
  agentKey,
20562
21031
  userInput: content,
20563
- ...background === true ? { waitForCompletion: false } : {}
21032
+ ...background === true ? { waitForCompletion: false } : {},
21033
+ ...parentDialogId ? { parentDialogId } : {}
20564
21034
  })
20565
21035
  ).unwrap();
20566
21036
  if (background === true) {
@@ -21140,6 +21610,117 @@ async function runLlmToolFunc(args, thunkApi, _context) {
21140
21610
  }
21141
21611
  }
21142
21612
 
21613
+ // packages/ai/tools/agent/agentRunDisplayHelpers.ts
21614
+ function getAgentRunStatusIcon(status) {
21615
+ switch (status) {
21616
+ case "running":
21617
+ case "pending":
21618
+ return "\u23F3";
21619
+ case "done":
21620
+ return "\u2713";
21621
+ case "failed":
21622
+ case "timeout":
21623
+ return "\u2717";
21624
+ case "killed":
21625
+ case "cancelled":
21626
+ case "cancelling":
21627
+ return "\u{1F6D1}";
21628
+ case "not_found":
21629
+ default:
21630
+ return "?";
21631
+ }
21632
+ }
21633
+ var DEFAULT_LABELS = {
21634
+ runStatus: "Run status",
21635
+ runStarted: "Run started",
21636
+ runStopped: "Run stopped",
21637
+ logTail: "Log tail:",
21638
+ runs: (count) => `Runs (${count})`
21639
+ };
21640
+ function resolveLabels(labels) {
21641
+ return {
21642
+ runStatus: labels?.runStatus ?? DEFAULT_LABELS.runStatus,
21643
+ runStarted: labels?.runStarted ?? DEFAULT_LABELS.runStarted,
21644
+ runStopped: labels?.runStopped ?? DEFAULT_LABELS.runStopped,
21645
+ logTail: labels?.logTail ?? DEFAULT_LABELS.logTail,
21646
+ runs: labels?.runs ?? DEFAULT_LABELS.runs
21647
+ };
21648
+ }
21649
+ function isAgentNameFallback(agentName) {
21650
+ const trimmed = typeof agentName === "string" ? agentName.trim() : "";
21651
+ return !trimmed || trimmed === "agent";
21652
+ }
21653
+ function formatStartRunCard(agentName, status = "running", labels) {
21654
+ const L = resolveLabels(labels);
21655
+ const icon = getAgentRunStatusIcon(status);
21656
+ const lines = [L.runStarted];
21657
+ if (!isAgentNameFallback(agentName)) {
21658
+ lines.push(` agent ${agentName}`);
21659
+ }
21660
+ lines.push(` status ${icon} ${status}`);
21661
+ return lines.join("\n");
21662
+ }
21663
+ function formatStatusRunCard(agentName, status = "running", opts) {
21664
+ const L = resolveLabels(opts?.labels);
21665
+ const icon = getAgentRunStatusIcon(status);
21666
+ const lines = [L.runStatus, ` ${icon} ${status}`];
21667
+ if (!isAgentNameFallback(agentName)) {
21668
+ lines.push(` agent ${agentName}`);
21669
+ }
21670
+ if (opts?.pollCount !== void 0 && opts.pollCount > 0) {
21671
+ lines.push(` polls ${opts.pollCount}`);
21672
+ }
21673
+ if (typeof opts?.elapsedMs === "number" && Number.isFinite(opts.elapsedMs)) {
21674
+ lines.push(` last ${Math.round(opts.elapsedMs)}ms`);
21675
+ }
21676
+ if (opts?.lastToolNames && opts.lastToolNames.length > 0) {
21677
+ lines.push(` lastTools ${opts.lastToolNames.join(", ")}`);
21678
+ }
21679
+ if (opts?.toolCallCount !== void 0) {
21680
+ lines.push(` toolCalls ${opts.toolCallCount}`);
21681
+ }
21682
+ if (opts?.errorMessage?.trim()) {
21683
+ lines.push(` error ${opts.errorMessage.trim()}`);
21684
+ }
21685
+ const includeLog = opts?.includeLogTail !== false;
21686
+ if (includeLog && opts?.logLines && opts.logLines.length > 0) {
21687
+ lines.push("", L.logTail, ...opts.logLines.map((l) => ` ${l}`));
21688
+ }
21689
+ return lines.join("\n");
21690
+ }
21691
+ function formatStopRunCard(status = "killed", labels) {
21692
+ const L = resolveLabels(labels);
21693
+ const icon = getAgentRunStatusIcon(status);
21694
+ return `${L.runStopped}
21695
+ ${icon} ${status}`;
21696
+ }
21697
+ function formatListRunsCard(runs, labels) {
21698
+ const L = resolveLabels(labels);
21699
+ const lines = [L.runs(runs.length)];
21700
+ for (const run of runs) {
21701
+ const status = run.status ?? "\u2014";
21702
+ const icon = getAgentRunStatusIcon(status);
21703
+ const name = run.agentName || run.name || "agent";
21704
+ lines.push(` ${icon} ${name}`);
21705
+ }
21706
+ return lines.join("\n");
21707
+ }
21708
+ function formatNotFoundRunCard(labels) {
21709
+ const L = resolveLabels(labels);
21710
+ return `${L.runStatus}
21711
+ ? not_found`;
21712
+ }
21713
+ var AGENT_RUN_TERMINAL_STATUSES = /* @__PURE__ */ new Set([
21714
+ "done",
21715
+ "failed",
21716
+ "timeout",
21717
+ "killed",
21718
+ "cancelled"
21719
+ ]);
21720
+ function isAgentRunTerminalStatus(status) {
21721
+ return typeof status === "string" && AGENT_RUN_TERMINAL_STATUSES.has(status);
21722
+ }
21723
+
21143
21724
  // packages/ai/tools/agent/startAgentRunTool.ts
21144
21725
  var startAgentRunFunctionSchema = {
21145
21726
  name: "startAgentRun",
@@ -21149,7 +21730,7 @@ var startAgentRunFunctionSchema = {
21149
21730
  properties: {
21150
21731
  agentKey: {
21151
21732
  type: "string",
21152
- description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u552F\u4E00 ID\uFF08dbKey\uFF0C\u683C\u5F0F\u5982 agent-xxx\uFF09\u3002"
21733
+ description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF08\u4F18\u5148\u4F7F\u7528 readAgent \u8FD4\u56DE\u7684 agentKey\uFF0C\u683C\u5F0F\u5982 agent-xxx\uFF09\u3002"
21153
21734
  },
21154
21735
  task: {
21155
21736
  type: "string",
@@ -21172,22 +21753,27 @@ async function startAgentRunFunc(args, thunkApi, _context) {
21172
21753
  throw new Error("startAgentRun: \u7F3A\u5C11\u6709\u6548\u7684 task \u6587\u672C\u63CF\u8FF0\u3002");
21173
21754
  }
21174
21755
  const content = buildDelegatedTaskContent(task, input);
21756
+ const activeDialogKey = getActiveDialogKey();
21757
+ const parentDialogId = activeDialogKey ? extractCustomId(activeDialogKey) : void 0;
21175
21758
  try {
21176
21759
  const bgResult = await dispatch(
21177
21760
  runAgentBackground({
21178
21761
  agentKey,
21179
21762
  userInput: content,
21180
- waitForCompletion: false
21763
+ waitForCompletion: false,
21764
+ ...parentDialogId ? { parentDialogId } : {}
21181
21765
  })
21182
21766
  ).unwrap();
21183
21767
  const runId = bgResult.dialogId;
21184
21768
  const status = bgResult.status ?? "pending";
21769
+ const name = bgResult.agentName || bgResult.name || "agent";
21185
21770
  return {
21186
21771
  rawData: {
21187
21772
  runId,
21188
- status
21773
+ status,
21774
+ ...bgResult.agentName ? { agentName: bgResult.agentName } : {}
21189
21775
  },
21190
- displayData: `\u23F3 \u540E\u53F0 run \u5DF2\u542F\u52A8\uFF0CrunId: ${runId}\u3002\u7528 controlAgentRun(action:"status", runId:"${runId}") \u67E5\u8FDB\u5EA6\u3002`
21776
+ displayData: formatStartRunCard(name, status)
21191
21777
  };
21192
21778
  } catch (e) {
21193
21779
  throw new Error(`startAgentRun \u542F\u52A8 Agent [${agentKey}] \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21257,11 +21843,9 @@ async function handleList(thunkApi, opts) {
21257
21843
  const resData = data?.data ?? data;
21258
21844
  const runs = resData?.runs ?? [];
21259
21845
  const count = resData?.count ?? runs.length;
21260
- const summary = runs.map((t) => `${t.runId} [${t.status}] ${t.agentKey ?? "unknown"}`).join("\n");
21261
21846
  return {
21262
21847
  rawData: { runs, count },
21263
- displayData: runs.length > 0 ? `\u{1F4CB} \u627E\u5230 ${runs.length} \u4E2A run\uFF1A
21264
- ${summary}` : "\u{1F4CB} \u6CA1\u6709\u627E\u5230 run\u3002"
21848
+ displayData: formatListRunsCard(runs)
21265
21849
  };
21266
21850
  } catch (e) {
21267
21851
  throw new Error(`controlAgentRun(list) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21279,24 +21863,21 @@ async function handleStatus(thunkApi, opts) {
21279
21863
  if (!resData || resData.found === false || !resData.run) {
21280
21864
  return {
21281
21865
  rawData: { runId: opts.runId, found: false },
21282
- displayData: `\u2753 run ${opts.runId} \u672A\u627E\u5230\u3002\u53EF\u80FD\u5DF2\u5B8C\u6210\u5E76\u88AB\u6E05\u7406\uFF0C\u6216 ID \u9519\u8BEF\u3002`
21866
+ displayData: `Run status
21867
+ ? not_found`
21283
21868
  };
21284
21869
  }
21285
21870
  const run = resData.run;
21286
21871
  const logLines = resData.logLines;
21287
- const displayParts = [
21288
- `\u{1F4CA} run ${run.runId}`,
21289
- ` \u72B6\u6001: ${run.status}`,
21290
- ` Agent: ${run.agentKey ?? "unknown"}`,
21291
- ...run.lastToolNames?.length ? [` \u6700\u8FD1\u5DE5\u5177: ${run.lastToolNames.join(", ")}`] : [],
21292
- ...run.toolCallCount !== void 0 ? [` \u5DE5\u5177\u8C03\u7528\u6570: ${run.toolCallCount}`] : [],
21293
- ...run.lastAssistantText ? [` \u6700\u8FD1\u8F93\u51FA: ${run.lastAssistantText.slice(0, 200)}`] : [],
21294
- ...run.errorMessage ? [` \u9519\u8BEF: ${run.errorMessage}`] : [],
21295
- ...logLines?.length ? [` \u65E5\u5FD7(\u6700\u8FD1 ${logLines.length} \u884C):`, ...logLines.map((l) => ` ${l}`)] : []
21296
- ];
21872
+ const name = run.agentName || run.name || "agent";
21297
21873
  return {
21298
21874
  rawData: { found: true, ...run, ...logLines ? { logLines } : {} },
21299
- displayData: displayParts.join("\n")
21875
+ displayData: formatStatusRunCard(name, run.status, {
21876
+ lastToolNames: run.lastToolNames,
21877
+ toolCallCount: run.toolCallCount,
21878
+ errorMessage: run.errorMessage,
21879
+ logLines
21880
+ })
21300
21881
  };
21301
21882
  } catch (e) {
21302
21883
  throw new Error(`controlAgentRun(status) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21311,21 +21892,10 @@ async function handleStop(thunkApi, opts) {
21311
21892
  { withAuth: true }
21312
21893
  );
21313
21894
  const result = data?.data ?? data;
21314
- const wasActive = result?.wasActive ?? false;
21315
21895
  const status = result?.status ?? "cancelled";
21316
- let statusText;
21317
- if (status === "cancelling") {
21318
- statusText = `\u{1F6D1} \u5DF2\u53D1\u51FA\u53D6\u6D88\u4FE1\u53F7\uFF0Crun ${opts.runId} \u6B63\u5728\u4E2D\u6B62\u3002`;
21319
- } else if (status === "cancelled" && !wasActive) {
21320
- statusText = `\u{1F6D1} run ${opts.runId} \u6CA1\u6709\u6D3B\u8DC3\u8FDB\u7A0B\uFF0C\u5DF2\u6807\u8BB0\u4E3A\u5DF2\u53D6\u6D88\u3002`;
21321
- } else if (status === "cancelled") {
21322
- statusText = `\u{1F6D1} run ${opts.runId} \u5DF2\u6210\u529F\u53D6\u6D88\u3002`;
21323
- } else {
21324
- statusText = `\u2139\uFE0F run ${opts.runId} \u5DF2\u5904\u4E8E\u72B6\u6001 "${status}"\u3002${wasActive ? "\u6267\u884C\u5DF2\u505C\u6B62\u3002" : "\u6CA1\u6709\u6D3B\u8DC3\u8FDB\u7A0B\u3002"}`;
21325
- }
21326
21896
  return {
21327
- rawData: { runId: opts.runId, status, wasActive },
21328
- displayData: statusText
21897
+ rawData: { runId: opts.runId, status, wasActive: result?.wasActive ?? false },
21898
+ displayData: formatStopRunCard(status)
21329
21899
  };
21330
21900
  } catch (e) {
21331
21901
  throw new Error(`controlAgentRun(stop) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -22524,7 +23094,7 @@ var executeToolRun = createAsyncThunk(
22524
23094
  if (!executionInput) {
22525
23095
  throw new Error(`ToolRun ${id} has no input to execute with.`);
22526
23096
  }
22527
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-3JNDS3WH.js");
23097
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-AHNQE4GP.js");
22528
23098
  const { executor } = findToolExecutor2(run.toolName);
22529
23099
  toolRunStarted({
22530
23100
  id: run.id,
@@ -22548,7 +23118,7 @@ var executeToolRun = createAsyncThunk(
22548
23118
  const latestState = thunkApi.getState();
22549
23119
  const userId = latestState.auth?.currentUser?.userId;
22550
23120
  if (userId) {
22551
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-TYNWE3OC.js");
23121
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-4EXTYXS4.js");
22552
23122
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
22553
23123
  }
22554
23124
  }
@@ -24951,7 +25521,7 @@ async function updateDocFunc(args, thunkApi) {
24951
25521
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
24952
25522
  };
24953
25523
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
24954
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-QUQZAFZF.js");
25524
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-H5VWKT5D.js");
24955
25525
  if (getDocState().pageKey === id) {
24956
25526
  applyExternalDocUpdate({
24957
25527
  slateData: finalSlateData,
@@ -24976,7 +25546,7 @@ async function updateDocFunc(args, thunkApi) {
24976
25546
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
24977
25547
  async function dispatchSetSettings(thunkApi, changes) {
24978
25548
  const injectedSetSettings = thunkApi?.extra?.setSettings;
24979
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-UW4IUI5L.js")).setSettings;
25549
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-CK5YZGNI.js")).setSettings;
24980
25550
  await thunkApi.dispatch(setSettings(changes)).unwrap();
24981
25551
  }
24982
25552
  var updateUserPreferenceProfileFunctionSchema = {
@@ -25783,6 +26353,21 @@ var baseToolDefinitions = [
25783
26353
  costLevel: "medium",
25784
26354
  defaultConsent: "ask"
25785
26355
  },
26356
+ {
26357
+ id: "loadSkill",
26358
+ schema: loadSkillFunctionSchema,
26359
+ executor: loadSkillFunc,
26360
+ description: {
26361
+ name: "loadSkill",
26362
+ description: "\u6309\u540D\u79F0\u52A0\u8F7D\u5DF2\u4FDD\u5B58\u7684 skill \u6587\u6863\uFF0C\u8FD4\u56DE\u5B8C\u6574\u6307\u4EE4\u6B63\u6587\u3002",
26363
+ category: "\u5185\u5BB9\u7BA1\u7406"
26364
+ },
26365
+ behavior: "data",
26366
+ uiGroup: "content",
26367
+ capability: "space_context",
26368
+ riskLevel: "low",
26369
+ costLevel: "low"
26370
+ },
25786
26371
  {
25787
26372
  id: "wereadGateway",
25788
26373
  schema: wereadGatewayFunctionSchema,
@@ -26363,7 +26948,7 @@ var baseToolDefinitions = [
26363
26948
  executor: listAgentsFunc,
26364
26949
  description: {
26365
26950
  name: "listAgents",
26366
- description: "List the current user's Nolo agents.",
26951
+ description: "List the current user's Nolo agents as safe summaries; use readAgent to resolve the runnable agentKey before delegation.",
26367
26952
  category: "Nolo workspace"
26368
26953
  },
26369
26954
  behavior: "data",
@@ -27166,8 +27751,16 @@ export {
27166
27751
  readXPostFunc,
27167
27752
  readXhsProfileFunctionSchema,
27168
27753
  readXhsProfileFunc,
27754
+ formatStartRunCard,
27755
+ formatStatusRunCard,
27756
+ formatStopRunCard,
27757
+ formatListRunsCard,
27758
+ formatNotFoundRunCard,
27759
+ isAgentRunTerminalStatus,
27169
27760
  TOOL_PACKS,
27170
27761
  expandEnabledPacks,
27762
+ expandEnabledPackPromptPatches,
27763
+ appendEnabledPackPromptPatches,
27171
27764
  FORCED_TOOLS,
27172
27765
  applyDisabledTools,
27173
27766
  addDefaultLightWebToolsForConfiguredAgents,
@@ -27183,7 +27776,9 @@ export {
27183
27776
  toolRunSucceeded,
27184
27777
  toolRunFailed,
27185
27778
  getAllToolRuns,
27779
+ waitForAbortableDelay,
27186
27780
  createSSEParser,
27781
+ formatAgentListCard,
27187
27782
  TOOL_GROUP_META,
27188
27783
  toolQueryFunctionSchema,
27189
27784
  toolQueryFunc,