nolo-cli 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/{_executeModel-AVCA2NAV.js → _executeModel-WPNX5DH4.js} +49 -43
  2. package/{action-F5JACQBG.js → action-LT7BRFLK.js} +10 -9
  3. package/{addContentAction-AQXEYRBE.js → addContentAction-PL3KKBDH.js} +9 -8
  4. package/{addDialogAgentAction-EJHHJZWW.js → addDialogAgentAction-FCMSKYAF.js} +8 -7
  5. package/{agentDeleteCommand-QW5PUMDQ.js → agentDeleteCommand-L3357EFL.js} +31 -28
  6. package/{agentEmailCommands-4ORVLGVQ.js → agentEmailCommands-N65AVLEI.js} +61 -55
  7. package/{agentListCommands-YWBYRTYC.js → agentListCommands-CH27FTI2.js} +30 -27
  8. package/{agentMachineCommands-JSQW4FOA.js → agentMachineCommands-PPK5HJZB.js} +29 -26
  9. package/{agentPullCommand-6HWUT3SW.js → agentPullCommand-ZZGU5KOY.js} +4 -4
  10. package/{agentRecordCommands-AASIWOBT.js → agentRecordCommands-HTVXD4TT.js} +56 -50
  11. package/{agentRunCommand-TB5BHXUH.js → agentRunCommand-MGLVJUA5.js} +62 -53
  12. package/{agentRunControl-6ADXVYMR.js → agentRunControl-P75VPTGS.js} +24 -1
  13. package/{agentRuntimeLocal-QNPNJRVH.js → agentRuntimeLocal-QUTBSY3I.js} +24 -21
  14. package/{agentSlice-RUNXC62Y.js → agentSlice-DOGRCMWK.js} +9 -8
  15. package/appDeleteCommands-FEEVXUBG.js +127 -0
  16. package/appDeployCommands-C4HCGC4B.js +166 -0
  17. package/appDeployStatusCommands-IR5ZUZBQ.js +147 -0
  18. package/appGetCommands-6RJGZ66Z.js +122 -0
  19. package/appListCommands-VMTF5YZF.js +125 -0
  20. package/{authCommand-YFTR3347.js → authCommand-WJZPOLSS.js} +16 -9
  21. package/{authCommands-YXGOXNBZ.js → authCommands-XTBV7OFZ.js} +6 -5
  22. package/{chunk-XPC5C7BK.js → chunk-3ND52WIL.js} +2 -2
  23. package/{chunk-SOTZ6RDN.js → chunk-3Q7WHGCB.js} +1 -1
  24. package/{chunk-M43KDE25.js → chunk-45BY7RLP.js} +2 -8
  25. package/{chunk-KKY4B2Q2.js → chunk-4PWB7JRR.js} +4 -1
  26. package/{chunk-6N4KODMN.js → chunk-4T5F7YZQ.js} +1 -1
  27. package/chunk-7BUYEZ6U.js +671 -0
  28. package/{chunk-AS3ZQ3O2.js → chunk-7OBMZCRD.js} +1 -1
  29. package/{chunk-AVVZUXXC.js → chunk-AAODAAUQ.js} +34 -13
  30. package/{chunk-QLUFR47U.js → chunk-AL2V7U3E.js} +1 -1
  31. package/{chunk-MTU75CZ2.js → chunk-B5TOXZAK.js} +1 -1
  32. package/{chunk-AUURUT6L.js → chunk-BT6K76S7.js} +238 -424
  33. package/chunk-CEFXYF66.js +107 -0
  34. package/{chunk-RLCXU7A5.js → chunk-D3HVJJIA.js} +1 -1
  35. package/{chunk-JTMNCCWF.js → chunk-DKZFOK24.js} +16 -87
  36. package/chunk-DL6EPNIK.js +50 -0
  37. package/{chunk-4L2OJPCU.js → chunk-EGPCU42M.js} +58 -8
  38. package/{chunk-IWLUTMYX.js → chunk-ELT65PZW.js} +2 -2
  39. package/chunk-FKXFCYVO.js +221 -0
  40. package/{chunk-4FX6NVDW.js → chunk-FPKLD4KB.js} +3 -136
  41. package/{chunk-PCTUYVUM.js → chunk-FVIPEIVX.js} +10 -3
  42. package/chunk-GFUIQ4RY.js +136 -0
  43. package/{chunk-66X4VSRC.js → chunk-HQPG2PIV.js} +41 -1
  44. package/{chunk-IGXREZW2.js → chunk-HV2A3B4W.js} +1 -1
  45. package/{chunk-LPEUV5RE.js → chunk-IOOMJJ4Z.js} +2 -2
  46. package/{setDialogExtraReferencesAction-LR6MSIXO.js → chunk-JLA4FXYC.js} +2 -17
  47. package/{chunk-3OIRVWXA.js → chunk-JP7REMYP.js} +10 -1
  48. package/chunk-KFEVY3ST.js +255 -0
  49. package/{chunk-P3RIAYGG.js → chunk-L2MLZQXU.js} +3 -3
  50. package/{chunk-55NSNCFM.js → chunk-L6NVTGI7.js} +1 -1
  51. package/{chunk-3WGLLTK4.js → chunk-LSFAWXKC.js} +100 -3
  52. package/{chunk-S2LXHNHG.js → chunk-MD3V54DA.js} +6 -6
  53. package/{chunk-6EVITP2G.js → chunk-MUCU6ATG.js} +2 -251
  54. package/{chunk-KFHN5NGJ.js → chunk-MVQ4TBSD.js} +1 -1
  55. package/{chunk-ZQBL7LIC.js → chunk-NEKFSXOP.js} +310 -211
  56. package/{chunk-NSCHQQPU.js → chunk-NVB267BZ.js} +397 -324
  57. package/{chunk-Z5JQNBNY.js → chunk-NYUXSXLY.js} +33 -14
  58. package/{chunk-FRV6A633.js → chunk-PZCBZO4J.js} +2 -2
  59. package/{chunk-GSINCD4P.js → chunk-QCJITMYO.js} +21 -11
  60. package/{chunk-OOSFSFMA.js → chunk-R5V5G73M.js} +2 -0
  61. package/{chunk-4IJYA27C.js → chunk-RG2U2MTJ.js} +1 -1
  62. package/{chunk-BEBNFWDU.js → chunk-RRGVDPH3.js} +3 -3
  63. package/{chunk-EABWT43X.js → chunk-RVOUXDFU.js} +5 -5
  64. package/{chunk-JTINRTBT.js → chunk-SKDNBYZK.js} +2 -2
  65. package/{chunk-3663CXZN.js → chunk-SNZV4QCE.js} +65 -22
  66. package/{chunk-KMQPSTMJ.js → chunk-TRT4I4UD.js} +2 -2
  67. package/{chunk-MYMMNKYL.js → chunk-TSIYZBTH.js} +156 -6
  68. package/{chunk-EHLHSX7R.js → chunk-UB4RYYNQ.js} +9 -2
  69. package/{chunk-YJKXGHJ6.js → chunk-UGUW3FHG.js} +4 -4
  70. package/{chunk-DPAB4FQ7.js → chunk-UZY4BEBR.js} +1579 -212
  71. package/chunk-V5R4NZP2.js +78 -0
  72. package/{chunk-MR6ISAGB.js → chunk-VDNQF5VI.js} +6 -6
  73. package/{chunk-33BJUVK4.js → chunk-VGMJ6PDJ.js} +5 -5
  74. package/{chunk-W4NVOSFF.js → chunk-WFHXMLHZ.js} +1 -1
  75. package/{chunk-H33743XH.js → chunk-WJRJDX2W.js} +1 -1
  76. package/chunk-X4Q4UZEY.js +26 -0
  77. package/{chunk-RPDGJO4D.js → chunk-XHG22OEX.js} +4 -4
  78. package/{chunk-DVRHHFEA.js → chunk-XMLRJUU5.js} +1 -1
  79. package/{chunk-3S2VOMIF.js → chunk-XRZJGPFI.js} +7 -7
  80. package/{chunk-7UKFVQ5W.js → chunk-YLRTBX4Y.js} +105 -36
  81. package/{chunk-DGEYDWEZ.js → chunk-YXTRNO5W.js} +3 -3
  82. package/{chunk-FY233ZFU.js → chunk-ZJZCMKOR.js} +107 -177
  83. package/{chunk-NVEWUJVX.js → chunk-ZVOZH2HW.js} +1 -1
  84. package/chunk-ZZ2MH7LE.js +84 -0
  85. package/{cliExecutor-K3F7DMRO.js → cliExecutor-DNE7TCC4.js} +2 -2
  86. package/codingSkills-36KN5NQT.js +48 -0
  87. package/{createAgentAutomationAction-FNHPSKKO.js → createAgentAutomationAction-PMOLEPGJ.js} +19 -18
  88. package/{createDialogAction-TZCVQ3NU.js → createDialogAction-DPRTYNAK.js} +21 -20
  89. package/{createPageAction-EIGZ3BKT.js → createPageAction-JGZK3WAM.js} +25 -24
  90. package/{dbSlice-7KQH6GOU.js → dbSlice-CGSRFJN3.js} +8 -7
  91. package/{deleteFile-WPWVZE4B.js → deleteFile-WDZ3VM7B.js} +3 -3
  92. package/{dialogCommands-FO77J5DQ.js → dialogCommands-XED6DKLV.js} +29 -26
  93. package/{dialogSlice-MM5U4KE2.js → dialogSlice-KO4NRNKC.js} +19 -18
  94. package/{docCreateCommands-I3BS3AZI.js → docCreateCommands-P6DYWHH3.js} +32 -27
  95. package/{docDeleteCommands-Q2OPV52P.js → docDeleteCommands-KUWXAMSN.js} +31 -26
  96. package/{docReadCommands-YOOFACYZ.js → docReadCommands-ECW55TKB.js} +30 -25
  97. package/{docStore-NGYQ2JTR.js → docStore-6KMERNUY.js} +20 -19
  98. package/{docUpdateCommands-2B32ITHN.js → docUpdateCommands-5J4BTJQN.js} +31 -26
  99. package/{fetchMessages-KTNM7QAR.js → fetchMessages-BMGVZVSE.js} +4 -3
  100. package/{getPricing-P4XRJRZB.js → getPricing-RYY6OBA4.js} +2 -2
  101. package/{handleSendMessageAction-JRZWWBKP.js → handleSendMessageAction-R3ZHTVU4.js} +20 -19
  102. package/index.js +95 -64
  103. package/{localDialogRead-2VRI24F4.js → localDialogRead-HQZPVIE3.js} +1 -1
  104. package/{localRuntimeDb-LGDF6FQP.js → localRuntimeDb-THJZGAOJ.js} +1 -1
  105. package/{machineCommands-WRWF2ICZ.js → machineCommands-JF2YL34J.js} +62 -56
  106. package/{machineWsRunDispatch-ZX7Q3TWZ.js → machineWsRunDispatch-ON4AEOJL.js} +54 -48
  107. package/{models-WQ5N4OJM.js → models-5K5G2CZI.js} +1 -1
  108. package/package.json +1 -1
  109. package/queryRunOverlay-O4LOMMPO.js +161 -0
  110. package/{read-CN3TNXIP.js → read-3FMPZPER.js} +3 -3
  111. package/{readDocTool-WF3675ED.js → readDocTool-VSYHKK3V.js} +1 -1
  112. package/{readlineWorkspace-ZTGRGW46.js → readlineWorkspace-SUCINTL7.js} +354 -185
  113. package/{removeDialogAgentAction-YDHBFEGI.js → removeDialogAgentAction-OAGA2G3U.js} +10 -9
  114. package/{runAgentClientLoop-JZCOP7LG.js → runAgentClientLoop-OBD2AVEL.js} +43 -37
  115. package/runOverlayPresentation-ZO4VCWEU.js +11 -0
  116. package/{runtimeDoctorCommands-THIHX2SY.js → runtimeDoctorCommands-E2OUORHK.js} +6 -6
  117. package/setDialogExtraReferencesAction-JZEXA5SL.js +27 -0
  118. package/{setPrimaryDialogAgentAction-IIVDCY5C.js → setPrimaryDialogAgentAction-4ZUQQKDG.js} +26 -17
  119. package/{settingSlice-O23YDK2O.js → settingSlice-7MNKHZ6R.js} +9 -8
  120. package/{skillDiscovery-6M2BZUFN.js → skillDiscovery-KJWT7JBU.js} +3 -3
  121. package/{spaceCommands-VV4GTPQK.js → spaceCommands-32NTNLHS.js} +30 -27
  122. package/{spaceSlice-DRWWZJP7.js → spaceSlice-P7VOXLY6.js} +19 -18
  123. package/{streamAgentChatTurn-Y6WGATQR.js → streamAgentChatTurn-UHEMNI3X.js} +97 -56
  124. package/{tableCommands-3P7MJ3PF.js → tableCommands-BEQAGE4I.js} +1 -1
  125. package/{tools-PUNBY3AH.js → tools-BMXIXHMB.js} +32 -27
  126. package/{tuiSummaryLlmCaller-F64WLSAF.js → tuiSummaryLlmCaller-VUNVBRX3.js} +5 -4
  127. package/types-ZSTJ7MPR.js +7 -0
  128. package/{updateDialogTitleAction-YSR4TCMB.js → updateDialogTitleAction-LJBDYZLH.js} +22 -21
  129. package/{chunk-O4BU24WZ.js → chunk-6Y7A3OQQ.js} +3 -3
  130. package/{chunk-XBS2WYJ2.js → chunk-RK5NYQEL.js} +0 -0
  131. package/{chunk-CMKUBIGW.js → chunk-X7W4TNB4.js} +3 -3
  132. package/{localRuntimeAuthority-TEGCOWX4.js → localRuntimeAuthority-4IXJCHZ7.js} +3 -3
@@ -8,45 +8,39 @@ import {
8
8
  import {
9
9
  sortSafeAgentSummaries,
10
10
  toSafeAgentSummary
11
- } from "./chunk-3OIRVWXA.js";
11
+ } from "./chunk-JP7REMYP.js";
12
12
  import {
13
13
  getUserDataItemTimestamp,
14
14
  mergeAndDedupUserData
15
15
  } from "./chunk-KQHGZWSV.js";
16
- import {
17
- createDocState
18
- } from "./chunk-MR6ISAGB.js";
19
16
  import {
20
17
  readDocFunc,
21
18
  readDocFunctionSchema,
22
19
  readPageFunc,
23
20
  readPageFunctionSchema,
24
21
  slateToSimplifiedMarkdown
25
- } from "./chunk-6N4KODMN.js";
22
+ } from "./chunk-4T5F7YZQ.js";
26
23
  import {
27
24
  markdownToSlate
28
25
  } from "./chunk-3LY4F7SV.js";
26
+ import {
27
+ isSkillSummaryMarker
28
+ } from "./chunk-VF4K2QE6.js";
29
+ import {
30
+ createDocState
31
+ } from "./chunk-VDNQF5VI.js";
32
+ import {
33
+ setDialogExtraReferencesAction
34
+ } from "./chunk-JLA4FXYC.js";
29
35
  import {
30
36
  extractMentionsFromSlate
31
37
  } from "./chunk-VP4WJWKW.js";
32
38
  import {
33
39
  slateToRenderMarkdown
34
40
  } from "./chunk-63W5N6P3.js";
35
- import {
36
- isSkillSummaryMarker
37
- } from "./chunk-VF4K2QE6.js";
38
41
  import {
39
42
  createDialogAction
40
- } from "./chunk-Z5JQNBNY.js";
41
- import {
42
- buildSkillDocMarkdown,
43
- normalizeSkillBudgetTier,
44
- normalizeSkillModalities,
45
- normalizeStringArray,
46
- parseExternalSkillMarkdown,
47
- parseSkillDocProtocol,
48
- resolvePageSkillMetadata
49
- } from "./chunk-VC6OZXO5.js";
43
+ } from "./chunk-NYUXSXLY.js";
50
44
  import {
51
45
  addCategory,
52
46
  addContentToSpace,
@@ -63,6 +57,7 @@ import {
63
57
  instance,
64
58
  loadTableRows,
65
59
  normalizeAppRouteId,
60
+ resolveDialogRuntimeAgentKey,
66
61
  selectAllMemberSpaces,
67
62
  selectAllMsgs,
68
63
  selectCurrentDialogConfig,
@@ -76,19 +71,31 @@ import {
76
71
  updateContentCategory,
77
72
  updateContentTitle,
78
73
  updateStep
79
- } from "./chunk-NSCHQQPU.js";
74
+ } from "./chunk-NVB267BZ.js";
80
75
  import {
81
76
  createAgent,
82
77
  runLlm,
83
78
  streamAgentChatTurn,
84
79
  updateAgent
85
- } from "./chunk-S2LXHNHG.js";
80
+ } from "./chunk-MD3V54DA.js";
81
+ import {
82
+ buildCodingSkillContentBySlug,
83
+ buildCodingSkillPageKey,
84
+ resolveCodingBuiltinSlug
85
+ } from "./chunk-7BUYEZ6U.js";
86
+ import {
87
+ buildSkillDocMarkdown,
88
+ normalizeSkillBudgetTier,
89
+ normalizeSkillModalities,
90
+ normalizeStringArray,
91
+ parseExternalSkillMarkdown,
92
+ parseSkillDocProtocol,
93
+ resolvePageSkillMetadata
94
+ } from "./chunk-VC6OZXO5.js";
86
95
  import {
87
96
  NOLO_WORKSPACE_TOOL_NAMES,
88
97
  buildNoloSubjectRefQueryTarget,
89
98
  buildNoloTableQueryRequest,
90
- canonicalizeToolName,
91
- canonicalizeToolNames,
92
99
  clampNoloPositiveInteger,
93
100
  filterNoloDialogSubjectRefEvidence,
94
101
  getNoloComparableUpdatedAt,
@@ -98,13 +105,25 @@ import {
98
105
  redactAgentRecordForWorkspaceTool,
99
106
  resolveNoloDialogInput,
100
107
  verifyNoloDialogSubjectRefQuery
101
- } from "./chunk-JTMNCCWF.js";
108
+ } from "./chunk-DKZFOK24.js";
102
109
  import {
103
110
  buildDatabaseFileContentUrl
104
- } from "./chunk-4L2OJPCU.js";
111
+ } from "./chunk-EGPCU42M.js";
105
112
  import {
106
113
  DEFAULT_MODEL
107
- } from "./chunk-66X4VSRC.js";
114
+ } from "./chunk-HQPG2PIV.js";
115
+ import {
116
+ toErrorMessage
117
+ } from "./chunk-HNMXYYJR.js";
118
+ import {
119
+ addContentAction,
120
+ createSpaceKey,
121
+ normalizeSpaceId
122
+ } from "./chunk-ELT65PZW.js";
123
+ import {
124
+ canonicalizeToolName,
125
+ canonicalizeToolNames
126
+ } from "./chunk-ZZ2MH7LE.js";
108
127
  import {
109
128
  ToolApiError,
110
129
  buildToolRequestHeaders,
@@ -126,11 +145,16 @@ import {
126
145
  compactWhitespace
127
146
  } from "./chunk-DWLEOOGR.js";
128
147
  import {
129
- toErrorMessage
130
- } from "./chunk-HNMXYYJR.js";
148
+ TASK_PREVIEW_MAX,
149
+ formatListRunsCard,
150
+ formatStartRunCard,
151
+ formatStatusRunCard,
152
+ formatStopRunCard,
153
+ resolveRunLabel
154
+ } from "./chunk-FKXFCYVO.js";
131
155
  import {
132
156
  shareResourceAction
133
- } from "./chunk-YJKXGHJ6.js";
157
+ } from "./chunk-UGUW3FHG.js";
134
158
  import {
135
159
  AGENT_UPDATE_FIELD_NAMES,
136
160
  SYSTEM_AGENT_CAPABILITIES,
@@ -139,23 +163,19 @@ import {
139
163
  selectAutoApproveSelfUpdateFields,
140
164
  selectCurrentServer,
141
165
  selectSyncServers
142
- } from "./chunk-EABWT43X.js";
166
+ } from "./chunk-RVOUXDFU.js";
143
167
  import {
144
168
  asRecordOrEmpty
145
169
  } from "./chunk-KX6YBIHG.js";
146
- import {
147
- addContentAction,
148
- createSpaceKey,
149
- normalizeSpaceId
150
- } from "./chunk-IWLUTMYX.js";
151
170
  import {
152
171
  patch,
153
172
  read,
154
173
  readAndWait,
155
174
  readAndWaitAction,
175
+ selectById,
156
176
  toTimestampMs,
157
177
  write
158
- } from "./chunk-3S2VOMIF.js";
178
+ } from "./chunk-XRZJGPFI.js";
159
179
  import {
160
180
  SEPARATOR,
161
181
  createAgentKey,
@@ -167,20 +187,20 @@ import {
167
187
  rowKey,
168
188
  toTrimmedString,
169
189
  ulid
170
- } from "./chunk-O4BU24WZ.js";
190
+ } from "./chunk-6Y7A3OQQ.js";
191
+ import {
192
+ asOptionalFiniteNumber
193
+ } from "./chunk-WWC7I6TA.js";
171
194
  import {
172
195
  asNonEmptyStringArray,
173
196
  asTrimmedNonEmptyStringArray
174
197
  } from "./chunk-I42VC5KR.js";
175
- import {
176
- asOptionalFiniteNumber
177
- } from "./chunk-WWC7I6TA.js";
178
198
  import {
179
199
  asTrimmedLowercaseString
180
200
  } from "./chunk-QSJ3HFEF.js";
181
201
  import {
182
202
  readAction
183
- } from "./chunk-XPC5C7BK.js";
203
+ } from "./chunk-3ND52WIL.js";
184
204
  import {
185
205
  createAsyncThunk,
186
206
  getRuntimeServerContext,
@@ -188,10 +208,10 @@ import {
188
208
  selectIdentityToken,
189
209
  selectIdentityUserId,
190
210
  selectRuntimeSnapshot
191
- } from "./chunk-DVRHHFEA.js";
211
+ } from "./chunk-XMLRJUU5.js";
192
212
  import {
193
213
  isAbortError
194
- } from "./chunk-OOSFSFMA.js";
214
+ } from "./chunk-R5V5G73M.js";
195
215
  import {
196
216
  asTrimmedString
197
217
  } from "./chunk-3EUW3WEO.js";
@@ -2101,6 +2121,7 @@ var chat_locale_default = {
2101
2121
  copyContent: "Copy Content",
2102
2122
  copyDiagnostics: "Copy diagnostics",
2103
2123
  finishReasonLengthNotice: "Response was cut off at the model's output limit",
2124
+ retryProgress: "Auto-retrying {{attempt}}/{{maxAttempts}} \xB7 {{seconds}}s",
2104
2125
  copyFailed: "Copy failed",
2105
2126
  copySuccess: "Copied successfully",
2106
2127
  createDialog: "Create Dialog",
@@ -2462,6 +2483,7 @@ var chat_locale_default = {
2462
2483
  copyContent: "\u590D\u5236\u5185\u5BB9",
2463
2484
  copyDiagnostics: "\u590D\u5236\u8BCA\u65AD\u4FE1\u606F",
2464
2485
  finishReasonLengthNotice: "\u56DE\u7B54\u56E0\u8FBE\u5230\u6A21\u578B\u8F93\u51FA\u4E0A\u9650\u88AB\u622A\u65AD",
2486
+ retryProgress: "\u81EA\u52A8\u91CD\u8BD5 {{attempt}}/{{maxAttempts}} \xB7 {{seconds}}s",
2465
2487
  copyFailed: "\u590D\u5236\u5931\u8D25",
2466
2488
  copySuccess: "\u590D\u5236\u6210\u529F",
2467
2489
  createDialog: "\u521B\u5EFA\u5BF9\u8BDD",
@@ -2818,6 +2840,7 @@ var chat_locale_default = {
2818
2840
  copyContent: "\u8907\u88FD\u5167\u5BB9",
2819
2841
  copyDiagnostics: "\u8907\u88FD\u8A3A\u65B7\u8CC7\u8A0A",
2820
2842
  finishReasonLengthNotice: "\u56DE\u7B54\u56E0\u9054\u5230\u6A21\u578B\u8F38\u51FA\u4E0A\u9650\u88AB\u622A\u65B7",
2843
+ retryProgress: "\u81EA\u52D5\u91CD\u8A66 {{attempt}}/{{maxAttempts}} \xB7 {{seconds}}s",
2821
2844
  copyFailed: "\u8907\u88FD\u5931\u6557",
2822
2845
  copySuccess: "\u8907\u88FD\u6210\u529F",
2823
2846
  createDialog: "\u5275\u5EFA\u5C0D\u8A71",
@@ -3102,6 +3125,7 @@ var chat_locale_default = {
3102
3125
  copyContent: "\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30B3\u30D4\u30FC",
3103
3126
  copyDiagnostics: "\u8A3A\u65AD\u60C5\u5831\u3092\u30B3\u30D4\u30FC",
3104
3127
  finishReasonLengthNotice: "\u30E2\u30C7\u30EB\u306E\u51FA\u529B\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u3001\u56DE\u7B54\u304C\u9014\u4E2D\u3067\u7D42\u4E86\u3057\u307E\u3057\u305F",
3128
+ retryProgress: "\u81EA\u52D5\u30EA\u30C8\u30E9\u30A4 {{attempt}}/{{maxAttempts}} \xB7 {{seconds}}s",
3105
3129
  copyFailed: "\u30B3\u30D4\u30FC\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3106
3130
  copySuccess: "\u30B3\u30D4\u30FC\u306B\u6210\u529F\u3057\u307E\u3057\u305F",
3107
3131
  createDialog: "\u5BFE\u8A71\u3092\u4F5C\u6210",
@@ -11205,7 +11229,7 @@ var i18n_default = instance;
11205
11229
  var TOOL_PACKS = {
11206
11230
  // L1 - 核心:交互 + 自我更新,所有 Agent 必有。
11207
11231
  // rememberMemory 已移至「长期记忆」能力包(defaultEnabled:true),用户可单关。
11208
- CORE: ["ui_ask_choice", "read", "searchDialogMessages", "createDoc", "updateDoc", "search_workspace", "search_all_spaces", "updateSelf", "queryModelUsage", "queryUserGrowthReport", "createAgentAutomation", "notifyUser"],
11232
+ CORE: ["ask_user", "read", "searchDialogMessages", "createDoc", "updateDoc", "search_workspace", "search_all_spaces", "updateSelf", "queryModelUsage", "queryUserGrowthReport", "createAgentAutomation", "notifyUser"],
11209
11233
  // L2 - 联网搜索:与 CAPABILITY_PACKS「web-search」对齐。
11210
11234
  // 社交读工具属于「social-reader」包,不得因 exa_search 被旁路注入。
11211
11235
  LIGHT_WEB: ["exa_search", "fetchWebpage"],
@@ -11226,8 +11250,8 @@ var CAPABILITY_PACKS = [
11226
11250
  {
11227
11251
  id: "long-term-memory",
11228
11252
  label: "\u957F\u671F\u8BB0\u5FC6",
11229
- description: "\u8BA9 agent \u80FD\u628A\u503C\u5F97\u957F\u671F\u4FDD\u7559\u7684\u7528\u6237\u504F\u597D\u3001\u534F\u4F5C\u7EA6\u5B9A\u5199\u6210 episodic memory\uFF0C\u8DE8\u5BF9\u8BDD\u590D\u7528\u3002",
11230
- tools: ["rememberMemory"],
11253
+ description: "\u5BF9\u8BDD\u524D\u81EA\u52A8\u8F7D\u5165\u9AD8\u76F8\u5173\u8BB0\u5FC6\uFF0C\u5E76\u5141\u8BB8 agent \u6309\u9700\u67E5\u8BE2\u6216\u5199\u5165\u957F\u671F\u8BB0\u5FC6\u3002",
11254
+ tools: ["queryMemory", "rememberMemory"],
11231
11255
  defaultEnabled: true,
11232
11256
  icon: "\u{1F9E0}"
11233
11257
  },
@@ -11266,7 +11290,30 @@ var CAPABILITY_PACKS = [
11266
11290
  "listProcesses"
11267
11291
  ],
11268
11292
  defaultEnabled: false,
11269
- icon: "\u{1F4BB}"
11293
+ icon: "\u{1F4BB}",
11294
+ promptPatch: `# \u4EE3\u7801\u6267\u884C\u80FD\u529B\u5305 \u2014 \u64CD\u4F5C\u7EAA\u5F8B
11295
+
11296
+ ## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\uFF09
11297
+ - \u4E0D\u590D\u8FF0\u9700\u6C42\uFF0C\u4E0D\u89E3\u91CA\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
11298
+ - \u601D\u8003\u7B80\u77ED\uFF1A\u5B9A\u4F4D\u95EE\u9898\u5373\u53EF\uFF0C\u4E0D\u505A\u957F\u7BC7\u63A8\u6F14\u3002
11299
+ - \u5C0F\u6539\u52A8\u8D70\u6700\u77ED\u8DEF\u5F84\uFF1AsearchFiles/globFiles \u5B9A\u4F4D \u2192 readFile \u786E\u8BA4 \u2192 editFile \u7CBE\u786E\u66FF\u6362\u3002\u80FD\u4E00\u6B21\u547D\u4E2D\u5C31\u4E0D\u8981\u53CD\u590D\u8BFB\u6587\u4EF6\u3002
11300
+ - \u5DF2\u7ECF\u77E5\u9053\u6587\u4EF6\u548C\u4F4D\u7F6E\u65F6\uFF0C\u8DF3\u8FC7\u591A\u4F59\u7684 search/read\uFF0C\u76F4\u63A5 edit\u3002
11301
+ - \u7981\u6B62\u4E3A\u4E00\u4E2A\u5C0F\u6539\u52A8\u6574\u9875\u91CD\u5199\u6216\u8FDE\u5E26\u6539\u52A8\u672A\u547D\u4E2D\u7684\u90E8\u5206\u3002
11302
+
11303
+ ## \u4EE3\u7801\u4FEE\u6539\u7EAA\u5F8B
11304
+ - \u7F16\u8F91\u524D\u5148 readFile \u786E\u8BA4\u5F53\u524D\u5185\u5BB9\uFF0C\u907F\u514D stale hash \u9519\u8BEF\u3002
11305
+ - \u53EA\u78B0\u4EFB\u52A1\u4E66\u5217\u51FA\u7684\u6587\u4EF6\uFF1B\u6539\u5B8C\u7528 \`git status --short\` \u81EA\u67E5\uFF0C\u82E5\u6539\u5230\u6E05\u5355\u5916\u6587\u4EF6\uFF0C\u5982\u5B9E\u62A5\u544A\u3002
11306
+ - \u4E0D\u8981 \`git add\` / \`git commit\` / \`git push\` / \`git stash\` / \`git reset\` / \`git checkout\` / \`git clean\`\u2014\u2014\u6539\u52A8\u7559\u5728\u5DE5\u4F5C\u533A\uFF0C\u63D0\u4EA4\u7531\u8C03\u7528\u65B9\u9A8C\u6536\u540E\u5904\u7406\u3002\u4ED3\u5E93\u5E38\u6709\u591A\u4E2A\u4F1A\u8BDD\u5171\u7528\u4E00\u4E2A checkout\uFF0C\u4F60\u4E00\u63D0\u4EA4\u5C31\u4F1A\u628A\u522B\u4EBA\u7684\u5728\u9014\u6587\u4EF6\u5377\u8FDB\u6765\u3002
11307
+ - \u53EA\u8DD1\u4EFB\u52A1\u91CC\u5217\u51FA\u7684\u6D4B\u8BD5\u6587\u4EF6\uFF0C\u4E0D\u8981\u8DD1 broader \u6D4B\u8BD5\uFF08broaden \u6D4B\u8BD5\u7684\u5931\u8D25\u662F\u9884\u5B58\u7684\uFF0C\u548C\u4F60\u7684\u6539\u52A8\u65E0\u5173\uFF09\u3002
11308
+
11309
+ ## Review \u7EAA\u5F8B\uFF08commit \u524D\u786C\u95E8\uFF09
11310
+ - \u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\uFF08\u9519\u522B\u5B57/\u683C\u5F0F/CSS \u5FAE\u8C03\uFF09\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review \u5DE5\u4F5C\u533A diff\uFF08\`git diff\`\uFF0C\u672A\u63D0\u4EA4\u7684\u6539\u52A8\uFF09\u3002reviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002
11311
+ - \u6D3E\u53D1\u8D70 \`startAgentRun(agentKey, task, { ephemeral: true })\`\uFF08web/\u684C\u9762\u7AEF\u6CA1\u6709 nolo CLI\uFF0C\u6240\u6709 host \u90FD\u6709\u8FD9\u4E2A\u5DE5\u5177\uFF09\u3002ephemeral \u8BA9 review \u5B8C\u6210\u540E\u4E0D\u7559 dialog \u8BB0\u5F55\u3002
11312
+ - task \u91CC\u5FC5\u987B\u5199\u660E\u5BA1\u67E5\u5BF9\u8C61\uFF08\`git diff\` \u770B\u5DE5\u4F5C\u533A\u6539\u52A8\uFF0C\u6216 \`git diff alpha...HEAD\` \u770B\u5DF2\u63D0\u4EA4\u6539\u52A8\uFF09\uFF0C\u5426\u5219 reviewer \u4E0D\u77E5\u9053\u5BA1\u4EC0\u4E48\u3002
11313
+ - \u6309\u89D2\u8272\u52A0\u8F7D\u5BF9\u5E94 skill\uFF1Areviewer \u5148 \`loadSkill("coding-review")\` \u62FF\u901A\u7528\u6D41\u7A0B\uFF0C\u518D\u6309\u89D2\u8272 \`loadSkill("coding-review-<role>")\` \u62FF\u68C0\u67E5\u9879\u3002\u89D2\u8272\u6E05\u5355\uFF1Acode-quality\uFF08**\u5FC5\u8DD1**\uFF09/ architecture\uFF08**\u5355\u72EC\u6D3E\u53D1**\uFF0C\u4E2D\u7EA7\u4EE5\u4E0A\u95EE\u9898\uFF09/ security\uFF08\u6309\u9700 + \u5B89\u5168\u654F\u611F\u89E6\u53D1\u5FC5\u8DD1\uFF09/ frontend-ux\uFF08\u6D89\u53CA UI \u65F6\uFF09/ backend-data\uFF08\u6D89\u53CA server \u65F6\uFF09\u3002\u89D2\u8272\u5207\u5272\u7684\u76EE\u7684\u662F\u6CE8\u610F\u529B\u9694\u79BB\u2014\u2014\u6BCF\u4E2A\u89D2\u8272\u53EA\u76EF\u81EA\u5DF1\u7684\u68C0\u67E5\u9762\uFF0C\u6309\u9700\u542F\u7528\uFF0C\u907F\u514D\u4E00\u4E2A reviewer \u80CC\u6240\u6709\u89D2\u8272\u5BFC\u81F4\u6CE8\u610F\u529B\u7A00\u91CA\u3002
11314
+ - Verdict \u6807\u51C6\uFF1AAPPROVE\uFF08\u65E0 CRITICAL \u6216 HIGH\uFF09\u2192 \u53EF commit\uFF1BWARNING\uFF08\u4EC5 HIGH\uFF09\u2192 \u62A5\u544A owner \u51B3\u5B9A\uFF1BBLOCK\uFF08\u6709 CRITICAL\uFF09\u2192 \u5FC5\u987B\u5148\u4FEE\u3002
11315
+ - review \u53EF\u80FD\u591A\u8F6E\u6536\u655B\uFF08\u6709 finding\u2192\u4FEE\u2192\u518D\u5BA1\u2192\u76F4\u5230 APPROVE\uFF09\u3002\u6BCF\u8F6E review \u662F\u65E0\u4E0A\u4E0B\u6587\u7684\u2014\u2014reviewer \u53EA\u770B\u5F53\u524D\u5DE5\u4F5C\u533A diff\uFF0C\u4E0D\u5E26\u4E0A\u4E00\u8F6E finding \u8BB0\u5FC6\u3002
11316
+ - \u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u3001\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit message \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\uFF0C\u4F46\u9ED8\u8BA4\u5FC5\u987B\u6D3E review\u3002`
11270
11317
  },
11271
11318
  {
11272
11319
  id: "skills",
@@ -11434,7 +11481,7 @@ function appendEnabledPackPromptPatches(prompt, enabledPacks) {
11434
11481
 
11435
11482
  ${addition}`;
11436
11483
  }
11437
- var FORCED_TOOLS = ["ui_ask_choice"];
11484
+ var FORCED_TOOLS = ["ask_user"];
11438
11485
  function applyDisabledTools(toolNames, disabledTools) {
11439
11486
  if (!Array.isArray(disabledTools) || disabledTools.length === 0) {
11440
11487
  return toolNames;
@@ -11483,7 +11530,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11483
11530
  workspace: { mode: "lease" }
11484
11531
  };
11485
11532
  var findModelConfig = async (modelName, provider) => {
11486
- const { ALL_MODELS } = await import("./models-WQ5N4OJM.js");
11533
+ const { ALL_MODELS } = await import("./models-5K5G2CZI.js");
11487
11534
  const name = toTrimmedString(modelName);
11488
11535
  const prov = toTrimmedString(provider ?? "");
11489
11536
  if (!name) return null;
@@ -11724,7 +11771,7 @@ var buildFormDataFromArgs = async (args) => {
11724
11771
  const trimmedModel = toTrimmedString(model);
11725
11772
  const trimmedProvider = toTrimmedString(provider);
11726
11773
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
11727
- const { getModelPricing } = await import("./getPricing-P4XRJRZB.js");
11774
+ const { getModelPricing } = await import("./getPricing-RYY6OBA4.js");
11728
11775
  const normalizedTools = tools ?? [];
11729
11776
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
11730
11777
  const formData = {
@@ -12386,7 +12433,7 @@ var createSkillDocFunctionSchema = {
12386
12433
  description: [
12387
12434
  "\u521B\u5EFA\u4E00\u4E2A\u672C\u5730 skill \u6587\u6863\uFF0C\u5E76\u81EA\u52A8\u5199\u5165\u9690\u85CF\u7684 skill-config / eval-config \u534F\u8BAE\u5757\u3002",
12388
12435
  "\u9002\u5408\u628A\u67D0\u4E2A\u80FD\u529B\u6D41\u7A0B\u6C89\u6DC0\u6210\u53EF\u88AB agent \u5F15\u7528\u7684 skill\uFF0C\u800C\u4E0D\u662F\u624B\u5199\u534F\u8BAE\u6CE8\u91CA\u3002",
12389
- "\u521B\u5EFA\u6210\u529F\u540E\uFF0C\u5982\u679C\u7528\u6237\u8FD8\u6CA1\u8BF4\u660E\u4E0B\u4E00\u6B65\uFF0C\u4F18\u5148\u8C03\u7528 ui_ask_choice \u7EE7\u7EED\u8BE2\u95EE\uFF1A\u4EC5\u4FDD\u5B58\u3001\u6302\u5230\u73B0\u6709 Agent\uFF0C\u8FD8\u662F\u65B0\u5EFA\u4E00\u4E2A Agent \u6765\u4F7F\u7528\u5B83\u3002"
12436
+ "\u521B\u5EFA\u6210\u529F\u540E\uFF0C\u5982\u679C\u7528\u6237\u8FD8\u6CA1\u8BF4\u660E\u4E0B\u4E00\u6B65\uFF0C\u4F18\u5148\u8C03\u7528 ask_user \u7EE7\u7EED\u8BE2\u95EE\uFF1A\u4EC5\u4FDD\u5B58\u3001\u6302\u5230\u73B0\u6709 Agent\uFF0C\u8FD8\u662F\u65B0\u5EFA\u4E00\u4E2A Agent \u6765\u4F7F\u7528\u5B83\u3002"
12390
12437
  ].join("\n"),
12391
12438
  parameters: {
12392
12439
  type: "object",
@@ -12809,7 +12856,7 @@ var importSkillFunctionSchema = {
12809
12856
  description: [
12810
12857
  "\u4ECE\u5916\u90E8 SKILL.md\u3001GitHub \u5730\u5740\u6216\u539F\u59CB Markdown \u6587\u672C\u5BFC\u5165\u4E00\u4E2A skill\uFF0C\u5E76\u4FDD\u5B58\u4E3A\u5F53\u524D\u7A7A\u95F4\u4E2D\u7684\u666E\u901A\u6587\u6863\u3002",
12811
12858
  "\u5BFC\u5165\u540E\u4F1A\u81EA\u52A8\u9644\u52A0\u9690\u85CF\u7684 skill-config \u534F\u8BAE\u5757\uFF1B\u65E0\u6CD5\u6620\u5C04\u7684\u811A\u672C\u73AF\u5883\u4F1A\u964D\u7EA7\u4E3A\u8BF4\u660E\u578B skill\u3002",
12812
- "\u5BFC\u5165\u6210\u529F\u540E\uFF0C\u5982\u679C\u7528\u6237\u8FD8\u6CA1\u8BF4\u660E\u4E0B\u4E00\u6B65\uFF0C\u4F18\u5148\u8C03\u7528 ui_ask_choice \u7EE7\u7EED\u8BE2\u95EE\uFF1A\u4EC5\u4FDD\u5B58\u3001\u6302\u5230\u73B0\u6709 Agent\uFF0C\u8FD8\u662F\u65B0\u5EFA\u4E00\u4E2A Agent \u6765\u4F7F\u7528\u5B83\u3002"
12859
+ "\u5BFC\u5165\u6210\u529F\u540E\uFF0C\u5982\u679C\u7528\u6237\u8FD8\u6CA1\u8BF4\u660E\u4E0B\u4E00\u6B65\uFF0C\u4F18\u5148\u8C03\u7528 ask_user \u7EE7\u7EED\u8BE2\u95EE\uFF1A\u4EC5\u4FDD\u5B58\u3001\u6302\u5230\u73B0\u6709 Agent\uFF0C\u8FD8\u662F\u65B0\u5EFA\u4E00\u4E2A Agent \u6765\u4F7F\u7528\u5B83\u3002"
12813
12860
  ].join("\n"),
12814
12861
  parameters: {
12815
12862
  type: "object",
@@ -12911,7 +12958,8 @@ var loadSkillFunctionSchema = {
12911
12958
  description: [
12912
12959
  "\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",
12913
12960
  "name \u4F7F\u7528 skill \u4FDD\u5B58\u65F6\u5199\u5165 skill-config \u7684 name\uFF08\u4E5F\u63A5\u53D7 skillId\uFF09\u3002",
12914
- "\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"
12961
+ "\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",
12962
+ '\u7CFB\u7EDF\u5185\u7F6E\u5199\u4EE3\u7801\u6280\u80FD\uFF1A\u5BF9\u8BDD\u8F6C\u5411\u5199\u4EE3\u7801\u65F6\u7528 loadSkill("coding") \u8F7D\u5165\u5199\u4EE3\u7801\u80FD\u529B\u4E0E\u4EE3\u7801\u5BA1\u67E5\u7EAA\u5F8B\uFF08\u542B review \u89D2\u8272\u5207\u5272\uFF09\u3002'
12915
12963
  ].join("\n"),
12916
12964
  parameters: {
12917
12965
  type: "object",
@@ -13003,7 +13051,33 @@ async function loadSkillFunc(args, thunkApi) {
13003
13051
  const requestedName = asTrimmedString(args?.name);
13004
13052
  if (!requestedName) throw new Error("loadSkill \u9700\u8981\u63D0\u4F9B name\u3002");
13005
13053
  const candidates = await listSkillCandidates(thunkApi);
13006
- const matched = matchSkillCandidate(candidates, requestedName);
13054
+ let matched = matchSkillCandidate(candidates, requestedName);
13055
+ const builtinSlug = !matched ? resolveCodingBuiltinSlug(requestedName) : null;
13056
+ if (builtinSlug) {
13057
+ const runtime2 = getRuntime(thunkApi);
13058
+ const userId = runtime2?.currentUserId;
13059
+ const body2 = buildCodingSkillContentBySlug(builtinSlug);
13060
+ const dbKey = userId ? buildCodingSkillPageKey(userId, builtinSlug) : builtinSlug;
13061
+ if (userId) {
13062
+ try {
13063
+ const { ensureCodingSkills } = await import("./codingSkills-36KN5NQT.js");
13064
+ await ensureCodingSkills(userId)(thunkApi?.dispatch ?? (() => Promise.resolve()));
13065
+ } catch {
13066
+ }
13067
+ }
13068
+ await persistLoadedSkillReference(thunkApi, dbKey, requestedName);
13069
+ return {
13070
+ rawData: {
13071
+ success: true,
13072
+ name: requestedName,
13073
+ dbKey,
13074
+ body: body2
13075
+ },
13076
+ displayData: `Skill "${requestedName}" loaded inline. Follow its instructions.
13077
+
13078
+ ${body2}`
13079
+ };
13080
+ }
13007
13081
  if (!matched) {
13008
13082
  const availableNames = Array.from(
13009
13083
  new Set(candidates.map((candidate) => candidate.name))
@@ -13025,6 +13099,7 @@ async function loadSkillFunc(args, thunkApi) {
13025
13099
  dbKey: matched.dbKey
13026
13100
  });
13027
13101
  const body = extractSkillBody(page);
13102
+ await persistLoadedSkillReference(thunkApi, matched.dbKey, requestedName);
13028
13103
  return {
13029
13104
  rawData: {
13030
13105
  success: true,
@@ -13037,6 +13112,27 @@ async function loadSkillFunc(args, thunkApi) {
13037
13112
  ${body}`
13038
13113
  };
13039
13114
  }
13115
+ async function persistLoadedSkillReference(thunkApi, dbKey, name) {
13116
+ try {
13117
+ const state = thunkApi?.getState?.();
13118
+ const currentDialogKey = getActiveDialogKey();
13119
+ if (!state || !currentDialogKey) return;
13120
+ const dialogConfig = selectById(
13121
+ state,
13122
+ currentDialogKey
13123
+ );
13124
+ const existing = dialogConfig?.extraReferences ?? [];
13125
+ const alreadyMounted = existing.some((ref) => ref.dbKey === dbKey);
13126
+ if (alreadyMounted) return;
13127
+ const newRef = {
13128
+ dbKey,
13129
+ title: name,
13130
+ type: "instruction"
13131
+ };
13132
+ await setDialogExtraReferencesAction([...existing, newRef], thunkApi);
13133
+ } catch {
13134
+ }
13135
+ }
13040
13136
 
13041
13137
  // packages/ai/tools/category/createCategoryTool.ts
13042
13138
  var createCategoryFunctionSchema = {
@@ -14154,7 +14250,7 @@ async function deleteDialogsFunc(args, thunkApi) {
14154
14250
  const deletedDialogIds = [];
14155
14251
  const deletedDialogKeys = [];
14156
14252
  const failures = [];
14157
- const { deleteDialog } = await import("./dialogSlice-MM5U4KE2.js");
14253
+ const { deleteDialog } = await import("./dialogSlice-KO4NRNKC.js");
14158
14254
  for (const target of targets) {
14159
14255
  try {
14160
14256
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -14233,7 +14329,7 @@ function formatAgentListCard(agents, maxDisplay = 20) {
14233
14329
  }
14234
14330
  var listAgentsFunctionSchema = {
14235
14331
  name: "listAgents",
14236
- 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.",
14332
+ description: "List the current user's Nolo agents as safe summaries. The `agents` array in the JSON result carries each agent's runnable `agentKey` (agent-<userId>-<id> for owned, agent-pub-<id> for public) plus model, apiSource, tools, prices, isOwned, isFavorite. Copy `agentKey` verbatim into startAgentRun/callAgent. Prefer isOwned agents (use your own quota, no platform credits).",
14237
14333
  parameters: {
14238
14334
  type: "object",
14239
14335
  properties: {
@@ -14282,7 +14378,7 @@ async function listAgentsFunc(args, thunkApi) {
14282
14378
  }
14283
14379
  var readAgentFunctionSchema = {
14284
14380
  name: "readAgent",
14285
- description: "Read one agent's full config from the Nolo workspace. Accepts an agent dbKey (agent-xxx), plain id, alias, or agent URL; resolves it (including public agents via agent-pub-<id>; the server runtime also falls back to handle lookup) and returns the runnable agentKey plus a redacted record with fields such as model, provider, apiSource, tools, prompt, inputPrice, outputPrice, and isPublic. Use it before delegation to confirm an agent's identity and capabilities, or to resolve the agentKey that startAgentRun requires.",
14381
+ description: "Read one agent's full config from the Nolo workspace. Accepts an agent dbKey (agent-xxx), plain id, alias, or agent URL; resolves it (including public agents via agent-pub-<id>; the server runtime also falls back to handle lookup) and returns the runnable agentKey plus a redacted record with fields such as model, provider, apiSource, tools, prompt, inputPrice, outputPrice, and isPublic. Use it to inspect an agent's full capabilities/credential status before delegation. Note: startAgentRun/callAgent take the exact agentKey from listAgents/readAgent; readAgent is not required before every dispatch when listAgents already gave you the key.",
14286
14382
  parameters: {
14287
14383
  type: "object",
14288
14384
  properties: {
@@ -14422,7 +14518,7 @@ var readSkillDocFunctionSchema = {
14422
14518
  }
14423
14519
  };
14424
14520
  async function readSkillDocFunc(args, thunkApi) {
14425
- const { buildReadDocResult } = await import("./readDocTool-WF3675ED.js");
14521
+ const { buildReadDocResult } = await import("./readDocTool-VSYHKK3V.js");
14426
14522
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
14427
14523
  if (typeof id !== "string" || !id.trim()) {
14428
14524
  throw new Error("readSkillDoc requires id or doc.");
@@ -19872,7 +19968,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
19872
19968
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
19873
19969
  async function addImageContentToSpace(input) {
19874
19970
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
19875
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-AQXEYRBE.js")).addContentAction;
19971
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-PL3KKBDH.js")).addContentAction;
19876
19972
  await addContentAction2(
19877
19973
  {
19878
19974
  spaceId: input.spaceId,
@@ -20624,10 +20720,20 @@ var rememberMemoryFunctionSchema = {
20624
20720
  "\u53EA\u6709\u91CD\u590D\u51FA\u73B0\u7684\u53EF\u6267\u884C\u6D41\u7A0B/\u6392\u969C\u6B65\u9AA4\u624D\u4F20 kind=procedural\uFF1B\u4E00\u822C\u504F\u597D\u548C\u4E8B\u5B9E\u4FDD\u6301\u9ED8\u8BA4 episodic\u3002",
20625
20721
  "scope \u6309\u5185\u5BB9\u6027\u8D28\u9009\uFF0C\u4E0D\u56FA\u5B9A\u4F18\u5148\u67D0\u4E00\u5C42\uFF1A",
20626
20722
  " - Space \u534F\u4F5C\u7EA6\u5B9A/\u56E2\u961F\u89C4\u5219 \u2192 scope=space\uFF08\u5F53\u524D dialog \u7ED1\u5B9A space \u65F6\uFF09",
20627
- " - \u7528\u6237\u4E2A\u4EBA\u8EAB\u4EFD\u6216\u7EAF\u4E2A\u4EBA\u504F\u597D \u2192 scope=auto\uFF08\u9ED8\u8BA4\u8BB0\u5230\u7528\u6237\uFF09",
20628
- " - \u4E0E\u5F53\u524D Agent \u6302\u94A9\u7684\u6709\u6548\u505A\u6CD5 \u2192 scope=auto\uFF08runtime \u81EA\u52A8\u628A subject \u6807\u8BB0\u4E3A\u5F53\u524D Agent\uFF09",
20723
+ " - \u7528\u6237\u4E2A\u4EBA\u8EAB\u4EFD\u6216\u7EAF\u4E2A\u4EBA\u504F\u597D \u2192 scope=user\uFF08\u4E25\u683C\u4FDD\u5B58\u4E3A\u7528\u6237\u4E3B\u4F53\uFF09",
20724
+ " - \u4E0E\u5F53\u524D\u52A9\u624B\u5173\u7CFB\u6302\u94A9\u7684\u504F\u597D\u6216\u6709\u6548\u505A\u6CD5 \u2192 scope=auto\uFF08runtime \u4F7F\u7528\u5F53\u524D auto/fixed \u52A9\u624B\u4E3B\u4F53\uFF09",
20629
20725
  " - \u5F53\u524D\u4EFB\u52A1\u7684\u4E34\u65F6\u8FDB\u5EA6 \u2192 \u4E0D\u8981\u8C03\u7528\uFF0C\u8D70\u5BF9\u8BDD\u4E0A\u4E0B\u6587",
20630
- "\u5199\u6210\u4E00\u53E5\u7B80\u6D01\u3001\u672A\u6765\u4ECD\u53EF\u7406\u89E3\u7684\u8BDD\u3002\u9ED8\u8BA4\u9759\u9ED8\u6267\u884C\uFF0C\u4E0D\u7528\u5411\u7528\u6237\u6C47\u62A5\u5DF2\u8BB0\u4F4F\u3002"
20726
+ "\u5199\u6210\u4E00\u53E5\u7B80\u6D01\u3001\u672A\u6765\u4ECD\u53EF\u7406\u89E3\u7684\u8BDD\u3002\u9ED8\u8BA4\u9759\u9ED8\u6267\u884C\uFF0C\u4E0D\u7528\u5411\u7528\u6237\u6C47\u62A5\u5DF2\u8BB0\u4F4F\u3002",
20727
+ "",
20728
+ "\u3010\u5173\u952E\u89C4\u5219\u3011\u8BB0\u5FC6\u4E0D\u53EF\u7269\u7406\u5220\u9664\uFF0C\u53EA\u80FD\u964D\u7EA7/\u5F52\u6863/\u6807\u6CE8\u3002",
20729
+ "\u7269\u7406\u5220\u9664\u4F1A\u5207\u65AD\u89E3\u91CA\u94FE\u2014\u2014\u7CFB\u7EDF\u65E0\u6CD5\u56DE\u7B54'\u4E3A\u4EC0\u4E48\u53D8\u4E86'\u3001'\u66FE\u7ECF\u4FE1\u4EC0\u4E48'\u3002",
20730
+ "\u9519\u8BEF\u7684\u8BB0\u5FC6\u5E94\u901A\u8FC7 rememberMemory \u4FEE\u6B63\u5E76\u964D\u6743\uFF08\u964D\u4F4E\u7F6E\u4FE1\u5EA6\uFF09\uFF0C\u800C\u4E0D\u662F\u5220\u9664\u3002",
20731
+ "",
20732
+ "\u3010\u7F6E\u4FE1\u5EA6\u6765\u6E90\u3011\u6BCF\u6761\u8BB0\u5FC6\u5FC5\u987B\u6807\u6CE8\u6765\u6E90\uFF08\u4F9B\u53EC\u56DE\u65F6\u5224\u65AD\u53EF\u4FE1\u5EA6\uFF09\uFF1A",
20733
+ " - verified\uFF1A\u5DE5\u5177/\u547D\u4EE4\u5B9E\u6D4B\u9A8C\u8BC1\u8FC7\uFF08\u9AD8\u7F6E\u4FE1\u5EA6\uFF09",
20734
+ " - stated\uFF1A\u7528\u6237\u660E\u786E\u9648\u8FF0\uFF08\u4E2D\u9AD8\u7F6E\u4FE1\u5EA6\uFF09",
20735
+ " - inferred\uFF1A\u6A21\u578B\u63A8\u65AD/\u51ED\u5370\u8C61\uFF0C\u672A\u9A8C\u8BC1\uFF08\u4F4E\u7F6E\u4FE1\u5EA6\u2014\u2014\u5BB9\u6613\u7F16\u9020\uFF0C\u4F18\u5148\u6807\u8BB0\u5B58\u7591\uFF09",
20736
+ "\u8C03\u7528\u65F6\u5C3D\u91CF\u660E\u786E\u6765\u6E90\uFF0C\u65E0\u6CD5\u5224\u65AD\u7684\u4FDD\u5B88\u6807 inferred\u3002"
20631
20737
  ].join("\n"),
20632
20738
  parameters: {
20633
20739
  type: "object",
@@ -20639,7 +20745,7 @@ var rememberMemoryFunctionSchema = {
20639
20745
  scope: {
20640
20746
  type: "string",
20641
20747
  enum: ["auto", "user", "space"],
20642
- description: "\u8BB0\u5FC6\u8303\u56F4\u3002\u6309\u5185\u5BB9\u6027\u8D28\u9009\uFF1ASpace \u534F\u4F5C\u5171\u8BC6\u4F20 space\uFF1B\u7528\u6237\u4E2A\u4EBA\u8EAB\u4EFD/\u504F\u597D\u6216\u4E0E\u5F53\u524D Agent \u6302\u94A9\u7684\u505A\u6CD5\u4F20 auto\uFF08\u9ED8\u8BA4\uFF09\u3002auto \u65F6 runtime \u81EA\u52A8\u5224\u65AD owner\uFF0C\u5E76\u5C06 subject \u6807\u8BB0\u4E3A\u5F53\u524D Agent\uFF08\u5982\u679C\u53EF\u8BC6\u522B\uFF09\u3002"
20748
+ description: "\u8BB0\u5FC6\u8303\u56F4\u3002Space \u534F\u4F5C\u5171\u8BC6\u4F20 space\uFF1B\u7528\u6237\u4E2A\u4EBA\u8EAB\u4EFD/\u504F\u597D\u4F20 user\uFF1B\u4E0E\u5F53\u524D\u52A9\u624B\u5173\u7CFB\u6302\u94A9\u7684\u504F\u597D\u4F20 auto\u3002auto \u65F6 runtime \u4F7F\u7528\u5F53\u524D auto/fixed \u52A9\u624B\u4E3B\u4F53\u3002"
20643
20749
  },
20644
20750
  kind: {
20645
20751
  type: "string",
@@ -20679,6 +20785,52 @@ async function rememberMemoryFunc(args, thunkApi) {
20679
20785
  };
20680
20786
  }
20681
20787
 
20788
+ // packages/ai/tools/queryMemoryToolSchema.ts
20789
+ var queryMemoryFunctionSchema = {
20790
+ name: "queryMemory",
20791
+ description: [
20792
+ "\u6309\u9700\u67E5\u8BE2\u5F53\u524D\u7528\u6237\u3001Space \u548C\u5F53\u524D auto/fixed \u52A9\u624B\u4E3B\u4F53\u7684\u957F\u671F\u8BB0\u5FC6\u3002",
20793
+ "\u5BF9\u8BDD\u5F00\u59CB\u524D\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u8F7D\u5165\u5C11\u91CF\u9AD8\u76F8\u5173\u8BB0\u5FC6\uFF1B\u53EA\u6709\u9884\u8F7D\u4E0D\u8DB3\u3001\u7528\u6237\u63D0\u5230\u8FC7\u53BB\u7EA6\u5B9A/\u504F\u597D/\u7EA0\u6B63/\u672A\u5B8C\u6210\u4E8B\u9879\u65F6\u624D\u8C03\u7528\u3002",
20794
+ "\u4E0D\u8981\u4E3A\u4E86\u666E\u901A\u4E8B\u5B9E\u95EE\u9898\u67E5\u8BE2\uFF0C\u4E5F\u4E0D\u8981\u5728\u540C\u4E00\u8F6E\u7528\u8FD1\u4E49\u8BCD\u53CD\u590D\u67E5\u8BE2\u3002",
20795
+ "",
20796
+ "\u3010\u53EC\u56DE\u89C4\u5219\u3011\u53EC\u56DE\u7684\u8BB0\u5FC6\u5FC5\u987B\u5E26\u5B8C\u6574\u5386\u53F2\u4E0A\u4E0B\u6587\uFF08\u6765\u6E90\u3001\u7F6E\u4FE1\u5EA6\u3001\u53D8\u66F4\u8BB0\u5F55\uFF09\uFF0C\u7981\u6B62\u81EA\u884C\u63A8\u7406\u586B\u8865\u3002",
20797
+ "\u5982\u679C\u8BB0\u5FC6\u6765\u6E90\u662F inferred\uFF08\u63A8\u65AD\uFF09\uFF0C\u5FC5\u987B\u660E\u786E\u6807\u6CE8\u5B58\u7591\uFF0C\u4E0D\u80FD\u5F53\u6210\u9A8C\u8BC1\u8FC7\u7684\u4E8B\u5B9E\u4F7F\u7528\u3002",
20798
+ "\u9AD8\u7F6E\u4FE1\u5EA6\u8BB0\u5FC6\uFF08verified/stated\uFF09\u4F18\u5148\u4F7F\u7528\uFF1B\u4F4E\u7F6E\u4FE1\u5EA6\u8BB0\u5FC6\uFF08inferred\uFF09\u9700\u9A8C\u8BC1\u540E\u518D\u91C7\u7EB3\u3002"
20799
+ ].join("\n"),
20800
+ parameters: {
20801
+ type: "object",
20802
+ properties: {
20803
+ query: {
20804
+ type: "string",
20805
+ description: "\u8981\u4ECE\u957F\u671F\u8BB0\u5FC6\u4E2D\u68C0\u7D22\u7684\u81EA\u7136\u8BED\u8A00\u95EE\u9898\u6216\u5173\u952E\u8BCD\u3002"
20806
+ }
20807
+ },
20808
+ required: ["query"]
20809
+ }
20810
+ };
20811
+
20812
+ // packages/ai/tools/queryMemoryTool.ts
20813
+ async function queryMemoryFunc(args, thunkApi) {
20814
+ const query = String(args.query ?? "").trim();
20815
+ if (!query) throw new Error("queryMemory \u9700\u8981\u975E\u7A7A query\u3002");
20816
+ const state = thunkApi.getState();
20817
+ const dialogKey = getActiveDialogKey();
20818
+ const dialog = dialogKey ? selectById(state, dialogKey) : null;
20819
+ const result = await callToolApi(
20820
+ thunkApi,
20821
+ "/api/memory/query",
20822
+ {
20823
+ agentKey: resolveDialogRuntimeAgentKey(dialog),
20824
+ userInput: query,
20825
+ ...selectCurrentSpaceId(state) ? { spaceId: selectCurrentSpaceId(state) } : {}
20826
+ },
20827
+ { withAuth: true }
20828
+ );
20829
+ const selectedItems = Array.isArray(result?.selectedItems) ? result.selectedItems : [];
20830
+ const displayData = selectedItems.length ? selectedItems.map((item) => String(item?.content ?? "").trim()).filter(Boolean).join("\n") : "\u6CA1\u6709\u627E\u5230\u76F8\u5173\u957F\u671F\u8BB0\u5FC6\u3002";
20831
+ return { rawData: result, displayData };
20832
+ }
20833
+
20682
20834
  // packages/ai/tools/execShellTool.ts
20683
20835
  var execShellFunctionSchema = {
20684
20836
  name: "execShell",
@@ -21279,7 +21431,7 @@ var callAgentFunctionSchema = {
21279
21431
  properties: {
21280
21432
  agentKey: {
21281
21433
  type: "string",
21282
- description: "\u8981\u8C03\u7528\u7684 Agent \u7684\u552F\u4E00 ID \u6216 alias/handle\u3002\u652F\u6301\u4E09\u79CD\u5F62\u5F0F\uFF1A\u5B8C\u6574 agentKey\uFF08\u5982 agent-xxx-01ABC\uFF09\u3001alias\uFF08\u5982 reviewer\uFF0C\u4F1A\u81EA\u52A8\u89E3\u6790\u4E3A agent-{userId}-{alias} \u548C agent-pub-{alias}\uFF09\u3001\u6216 public agent id\uFF08\u5982 01ABC\uFF09\u3002"
21434
+ description: "\u8981\u8C03\u7528\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF0C\u5FC5\u987B\u662F listAgents \u8FD4\u56DE\u7684 agentKey \u5B57\u6BB5\uFF08owned: agent-<userId>-<id>\uFF1Bpublic: agent-pub-<id>\uFF09\u6216 readAgent \u8FD4\u56DE\u7684 agentKey\u3002\u53EA\u63A5\u53D7\u7CBE\u786E dbKey\uFF0C\u4E0D\u63A5\u53D7 name/handle/bare id\u3002"
21283
21435
  },
21284
21436
  task: {
21285
21437
  type: "string",
@@ -21915,124 +22067,6 @@ async function runLlmToolFunc(args, thunkApi, _context) {
21915
22067
  }
21916
22068
  }
21917
22069
 
21918
- // packages/ai/tools/agent/agentRunDisplayHelpers.ts
21919
- function getAgentRunStatusIcon(status) {
21920
- switch (status) {
21921
- case "running":
21922
- case "pending":
21923
- return "\u23F3";
21924
- case "done":
21925
- return "\u2713";
21926
- case "failed":
21927
- case "timeout":
21928
- return "\u2717";
21929
- case "killed":
21930
- case "cancelled":
21931
- case "cancelling":
21932
- return "\u{1F6D1}";
21933
- case "not_found":
21934
- default:
21935
- return "?";
21936
- }
21937
- }
21938
- var DEFAULT_LABELS = {
21939
- runStatus: "Run status",
21940
- runStarted: "Run started",
21941
- runStopped: "Run stopped",
21942
- logTail: "Log tail:",
21943
- runs: (count) => `Runs (${count})`
21944
- };
21945
- function resolveLabels(labels) {
21946
- return {
21947
- runStatus: labels?.runStatus ?? DEFAULT_LABELS.runStatus,
21948
- runStarted: labels?.runStarted ?? DEFAULT_LABELS.runStarted,
21949
- runStopped: labels?.runStopped ?? DEFAULT_LABELS.runStopped,
21950
- logTail: labels?.logTail ?? DEFAULT_LABELS.logTail,
21951
- runs: labels?.runs ?? DEFAULT_LABELS.runs
21952
- };
21953
- }
21954
- function isAgentNameFallback(agentName) {
21955
- const trimmed = typeof agentName === "string" ? agentName.trim() : "";
21956
- return !trimmed || trimmed === "agent";
21957
- }
21958
- function resolveRunLabel(run) {
21959
- for (const candidate of [run.agentName, run.name, run.agentKey, run.runId]) {
21960
- if (typeof candidate === "string" && !isAgentNameFallback(candidate)) {
21961
- return candidate.trim();
21962
- }
21963
- }
21964
- return "agent";
21965
- }
21966
- function formatStartRunCard(agentName, status = "running", labels) {
21967
- const L = resolveLabels(labels);
21968
- const icon = getAgentRunStatusIcon(status);
21969
- const lines = [L.runStarted];
21970
- if (!isAgentNameFallback(agentName)) {
21971
- lines.push(` agent ${agentName}`);
21972
- }
21973
- lines.push(` status ${icon} ${status}`);
21974
- return lines.join("\n");
21975
- }
21976
- function formatStatusRunCard(agentName, status = "running", opts) {
21977
- const L = resolveLabels(opts?.labels);
21978
- const icon = getAgentRunStatusIcon(status);
21979
- const lines = [L.runStatus, ` ${icon} ${status}`];
21980
- if (!isAgentNameFallback(agentName)) {
21981
- lines.push(` agent ${agentName}`);
21982
- }
21983
- if (opts?.pollCount !== void 0 && opts.pollCount > 0) {
21984
- lines.push(` polls ${opts.pollCount}`);
21985
- }
21986
- if (typeof opts?.elapsedMs === "number" && Number.isFinite(opts.elapsedMs)) {
21987
- lines.push(` last ${Math.round(opts.elapsedMs)}ms`);
21988
- }
21989
- if (opts?.lastToolNames && opts.lastToolNames.length > 0) {
21990
- lines.push(` lastTools ${opts.lastToolNames.join(", ")}`);
21991
- }
21992
- if (opts?.toolCallCount !== void 0) {
21993
- lines.push(` toolCalls ${opts.toolCallCount}`);
21994
- }
21995
- if (opts?.errorMessage?.trim()) {
21996
- lines.push(` error ${opts.errorMessage.trim()}`);
21997
- }
21998
- const includeLog = opts?.includeLogTail !== false;
21999
- if (includeLog && opts?.logLines && opts.logLines.length > 0) {
22000
- lines.push("", L.logTail, ...opts.logLines.map((l) => ` ${l}`));
22001
- }
22002
- return lines.join("\n");
22003
- }
22004
- function formatStopRunCard(status = "killed", labels) {
22005
- const L = resolveLabels(labels);
22006
- const icon = getAgentRunStatusIcon(status);
22007
- return `${L.runStopped}
22008
- ${icon} ${status}`;
22009
- }
22010
- function formatListRunsCard(runs, labels) {
22011
- const L = resolveLabels(labels);
22012
- const lines = [L.runs(runs.length)];
22013
- for (const run of runs) {
22014
- const status = run.status ?? "\u2014";
22015
- const icon = getAgentRunStatusIcon(status);
22016
- lines.push(` ${icon} ${resolveRunLabel(run)}`);
22017
- }
22018
- return lines.join("\n");
22019
- }
22020
- function formatNotFoundRunCard(labels) {
22021
- const L = resolveLabels(labels);
22022
- return `${L.runStatus}
22023
- ? not_found`;
22024
- }
22025
- var AGENT_RUN_TERMINAL_STATUSES = /* @__PURE__ */ new Set([
22026
- "done",
22027
- "failed",
22028
- "timeout",
22029
- "killed",
22030
- "cancelled"
22031
- ]);
22032
- function isAgentRunTerminalStatus(status) {
22033
- return typeof status === "string" && AGENT_RUN_TERMINAL_STATUSES.has(status);
22034
- }
22035
-
22036
22070
  // packages/ai/tools/agent/startAgentRunTool.ts
22037
22071
  var startAgentRunFunctionSchema = {
22038
22072
  name: "startAgentRun",
@@ -22042,7 +22076,7 @@ var startAgentRunFunctionSchema = {
22042
22076
  properties: {
22043
22077
  agentKey: {
22044
22078
  type: "string",
22045
- description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF08\u4F18\u5148\u7528 readAgent \u89E3\u6790\u51FA agentKey\uFF0C\u683C\u5F0F\u5982 agent-xxx\uFF1BreadAgent \u63A5\u53D7 dbKey/id/alias/URL\uFF0C\u4E0D\u8981\u81EA\u5DF1\u62FC key\uFF09\u3002\u5982\u679C\u5DF2\u901A\u8FC7 listAgents/readAgent \u83B7\u53D6\u540D\u79F0\uFF0C\u8BF7\u540C\u65F6\u4F20 agentName\u3002"
22079
+ description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF0C\u5FC5\u987B\u662F listAgents \u8FD4\u56DE\u7684 agentKey \u5B57\u6BB5\uFF08owned: agent-<userId>-<id>\uFF1Bpublic: agent-pub-<id>\uFF09\u6216 readAgent \u8FD4\u56DE\u7684 agentKey\u3002\u53EA\u63A5\u53D7\u7CBE\u786E dbKey\uFF0C\u4E0D\u63A5\u53D7 name/handle/bare id\u3002"
22046
22080
  },
22047
22081
  task: {
22048
22082
  type: "string",
@@ -22058,14 +22092,23 @@ var startAgentRunFunctionSchema = {
22058
22092
  ephemeral: {
22059
22093
  type: "boolean",
22060
22094
  description: "\u53EF\u9009\u3002\u4E3A true \u65F6\u672C\u6B21 run \u4E0D\u6301\u4E45\u5316 dialog\uFF08\u4E0D\u7559\u8BB0\u5F55\uFF09\u3002\u7528\u4E8E\u4E00\u6B21\u6027\u5BA1\u67E5\uFF08review\uFF09\u7B49\u4E0D\u9700\u7559\u75D5\u7684\u573A\u666F\u3002\u9ED8\u8BA4 false\u3002"
22095
+ },
22096
+ batchId: {
22097
+ type: "string",
22098
+ description: "\u53EF\u9009\u3002\u6279\u6B21 id\uFF0C\u7528\u4E8E\u628A\u591A\u4E2A\u5E76\u884C run \u5F52\u4E3A\u4E00\u7EC4\uFF0C\u4FBF\u4E8E\u540E\u7EED controlAgentRun(list, batchId=...) \u6309\u6279\u67E5\u8BE2\u3002\u672A\u4F20\u65F6\u81EA\u52A8\u751F\u6210\u4E00\u4E2A\u5E76\u5728\u8FD4\u56DE\u503C\u4E2D\u5E26\u56DE\uFF0C\u8C03\u7528\u65B9\u65E0\u9700\u5148\u521B\u5EFA\u3002"
22099
+ },
22100
+ trackTodo: {
22101
+ type: "boolean",
22102
+ description: '\u53EF\u9009\u3002\u4E3A true \u65F6\u672C\u6B21 run \u4F1A\u88AB\u8BB0\u5F55\u8FDB runtime todo\uFF08~/.nolo/todos.json\uFF09\u3002\u4F20\u4E86 batchId \u65F6\u9ED8\u8BA4\u5373\u8BB0\u5F55\uFF08\u6BCF\u6279\u5BF9\u5E94\u4E00\u9879 todo\uFF09\u3002todo \u72B6\u6001\u7531\u5173\u8054 run \u72B6\u6001 + review \u7ED3\u8BBA\u63A8\u5BFC\uFF0C\u7528 controlAgentRun(action:"todo") \u67E5\u8BE2\u3002'
22061
22103
  }
22062
22104
  },
22063
22105
  required: ["agentKey", "task"]
22064
22106
  }
22065
22107
  };
22066
22108
  async function startAgentRunFunc(args, thunkApi, _context) {
22067
- const { agentKey, task, input, agentName, ephemeral } = args;
22109
+ const { agentKey, task, input, agentName, ephemeral, batchId } = args;
22068
22110
  const { dispatch } = thunkApi;
22111
+ const effectiveBatchId = typeof batchId === "string" && batchId.trim() ? batchId.trim() : `batch-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}-${Math.random().toString(36).slice(2, 8)}`;
22069
22112
  if (!agentKey) {
22070
22113
  throw new Error("startAgentRun: \u7F3A\u5C11 agentKey \u53C2\u6570\u3002");
22071
22114
  }
@@ -22089,14 +22132,24 @@ async function startAgentRunFunc(args, thunkApi, _context) {
22089
22132
  const status = bgResult.status ?? "pending";
22090
22133
  const resolvedName = agentName?.trim() || bgResult.agentName || bgResult.name;
22091
22134
  const identity = { agentName: resolvedName, agentKey, runId };
22135
+ const taskPreview = task.replace(/\s+/g, " ").trim().slice(0, TASK_PREVIEW_MAX);
22092
22136
  return {
22093
22137
  rawData: {
22094
22138
  runId,
22095
22139
  status,
22096
22140
  agentKey,
22097
- ...resolvedName ? { agentName: resolvedName } : {}
22098
- },
22099
- displayData: formatStartRunCard(resolveRunLabel(identity), status)
22141
+ // batchId is always returned minted above when the caller didn't
22142
+ // supply one — so controlAgentRun(list, batchId=...) works on every
22143
+ // host. On the server path the id lives in the tool return; on the
22144
+ // CLI local path it is also persisted on the run record.
22145
+ batchId: effectiveBatchId,
22146
+ ...resolvedName ? { agentName: resolvedName } : {},
22147
+ ...taskPreview ? { taskPreview } : {}
22148
+ },
22149
+ displayData: formatStartRunCard(resolveRunLabel(identity), status, {
22150
+ task: taskPreview,
22151
+ runId
22152
+ })
22100
22153
  };
22101
22154
  } catch (e) {
22102
22155
  throw new Error(`startAgentRun \u542F\u52A8 Agent [${agentKey}] \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -22106,14 +22159,14 @@ async function startAgentRunFunc(args, thunkApi, _context) {
22106
22159
  // packages/ai/tools/agent/controlAgentRunTool.ts
22107
22160
  var controlAgentRunFunctionSchema = {
22108
22161
  name: "controlAgentRun",
22109
- description: "\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\u3002\u4E00\u4E2A\u5DE5\u5177\u4E09\u4E2A action\uFF1Alist\uFF08\u5217\u51FA\u6240\u6709 run\uFF09\u3001status\uFF08\u67E5\u5355\u6761 + \u53EF\u9009\u65E5\u5FD7\uFF09\u3001stop\uFF08\u53D6\u6D88 run\uFF09\u3002\u76F8\u5F53\u4E8E Unix \u7684 wait + signal + /proc\u3002\u7528 startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528\u672C\u5DE5\u5177\u8DDF\u8FDB\u5EA6\u6216\u53EB\u505C\u3002",
22162
+ description: "\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\u3002\u4E00\u4E2A\u5DE5\u5177\u4E09\u4E2A action\uFF1Alist\uFF08\u5217\u51FA run\uFF0C\u652F\u6301\u6309\u6279\u6B21/\u72B6\u6001\u8FC7\u6EE4\u4E0E\u5206\u9875\uFF09\u3001status\uFF08\u67E5\u5355\u6761 + \u53EF\u9009\u65E5\u5FD7\uFF09\u3001stop\uFF08\u53D6\u6D88 run\uFF09\u3002\u76F8\u5F53\u4E8E Unix \u7684 wait + signal + /proc\u3002\u7528 startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528\u672C\u5DE5\u5177\u8DDF\u8FDB\u5EA6\u6216\u53EB\u505C\u3002list \u9ED8\u8BA4\u53EA\u8FD4\u56DE\u6700\u8FD1 20 \u6761\uFF0C\u907F\u514D\u5168\u91CF\u51B2\u7206\u4E0A\u4E0B\u6587\uFF1B\u7528 status/batchId/limit/offset \u53D6\u6240\u9700\u5206\u9875\u3002",
22110
22163
  parameters: {
22111
22164
  type: "object",
22112
22165
  properties: {
22113
22166
  action: {
22114
22167
  type: "string",
22115
- enum: ["list", "status", "stop"],
22116
- description: "\u8981\u6267\u884C\u7684\u64CD\u4F5C\uFF1Alist=\u5217\u51FA\u6240\u6709 run\uFF08\u7701\u7565 runId\uFF09\uFF1Bstatus=\u67E5\u5355\u6761 run \u72B6\u6001 + \u53EF\u9009\u65E5\u5FD7\uFF1Bstop=\u53D6\u6D88 run\u3002"
22168
+ enum: ["list", "status", "stop", "todo"],
22169
+ description: "\u8981\u6267\u884C\u7684\u64CD\u4F5C\uFF1Alist=\u5217\u51FA run\uFF08\u7701\u7565 runId\uFF09\uFF1Bstatus=\u67E5\u5355\u6761 run \u72B6\u6001 + \u53EF\u9009\u65E5\u5FD7\uFF1Bstop=\u53D6\u6D88 run\uFF1Btodo=\u5217\u51FA runtime todo\uFF08\u7531 startAgentRun \u7684 batchId/trackTodo \u4EA7\u751F\uFF0C\u72B6\u6001\u7531\u5173\u8054 run \u63A8\u5BFC\uFF09\u3002"
22117
22170
  },
22118
22171
  runId: {
22119
22172
  type: "string",
@@ -22124,23 +22177,38 @@ var controlAgentRunFunctionSchema = {
22124
22177
  description: "\u53EF\u9009\u3002action=status \u65F6\uFF1A0=\u53EA\u8FD4\u56DE\u72B6\u6001\u6458\u8981\uFF0C>0=\u540C\u65F6\u8FD4\u56DE\u6700\u8FD1 N \u884C\u65E5\u5FD7\uFF08\u9ED8\u8BA4 0\uFF09\u3002",
22125
22178
  default: 0
22126
22179
  },
22180
+ batchId: {
22181
+ type: "string",
22182
+ description: "\u53EF\u9009\u3002action=list \u65F6\u53EA\u8FD4\u56DE\u8BE5\u6279\u6B21\u7684 run\uFF08startAgentRun \u8FD4\u56DE\u503C\u6216\u5165\u53C2\u4E2D\u7684 batchId\uFF09\u3002"
22183
+ },
22184
+ status: {
22185
+ type: "string",
22186
+ description: "\u53EF\u9009\u3002action=list \u65F6\u6309\u72B6\u6001\u8FC7\u6EE4\uFF0C\u652F\u6301\u5355\u503C\u6216\u9017\u53F7\u5206\u9694\u591A\u503C\uFF08\u5982 'running,orphaned'\uFF09\u3002\u4E0E statusFilter \u540C\u4E49\uFF0Cstatus \u4F18\u5148\uFF1B\u53D6\u503C\u5305\u542B orphaned\uFF08pid \u5DF2\u6B7B\u4F46\u8BB0\u5F55\u4ECD running \u7684\u5B64\u513F run\uFF09\u3002\u9ED8\u8BA4 all\uFF08\u4E0D\u8FC7\u6EE4\uFF09\u3002"
22187
+ },
22127
22188
  statusFilter: {
22128
22189
  type: "string",
22129
- enum: ["running", "done", "failed", "cancelled", "all"],
22130
- description: "\u53EF\u9009\u3002action=list \u65F6\u6309\u72B6\u6001\u8FC7\u6EE4\uFF0C\u9ED8\u8BA4 all\u3002"
22190
+ enum: ["running", "done", "failed", "cancelled", "orphaned", "all"],
22191
+ description: "\u53EF\u9009\u3002action=list \u65F6\u6309\u72B6\u6001\u8FC7\u6EE4\uFF0C\u9ED8\u8BA4 all\u3002\u4E0E status \u540C\u4E49\uFF08status \u4F18\u5148\uFF0C\u4E14 status \u652F\u6301\u591A\u503C\uFF09\u3002"
22131
22192
  },
22132
22193
  limit: {
22133
22194
  type: "number",
22134
- description: "\u53EF\u9009\u3002action=list \u65F6\u9650\u5236\u8FD4\u56DE\u6570\u91CF\uFF0C\u9ED8\u8BA4 20\u3002"
22195
+ description: "\u53EF\u9009\u3002action=list \u65F6\u9650\u5236\u8FD4\u56DE\u6570\u91CF\uFF0C\u9ED8\u8BA4 20\uFF0C\u4E0A\u9650 200\u3002\u4E0D\u5E26\u4EFB\u4F55\u53C2\u6570\u4E0D\u4F1A\u8FD4\u56DE\u5168\u91CF\u3002"
22196
+ },
22197
+ offset: {
22198
+ type: "number",
22199
+ description: "\u53EF\u9009\u3002action=list \u65F6\u8DF3\u8FC7\u524D N \u6761\uFF0C\u914D\u5408 limit \u7FFB\u9875\u3002\u9ED8\u8BA4 0\u3002"
22135
22200
  }
22136
22201
  },
22137
22202
  required: ["action"]
22138
22203
  }
22139
22204
  };
22140
22205
  async function controlAgentRunFunc(args, thunkApi, _context) {
22141
- const { action, runId, tailLines, statusFilter, limit } = args;
22206
+ const { action, runId, tailLines, batchId, status, statusFilter, limit, offset } = args;
22142
22207
  if (action === "list") {
22143
- return handleList(thunkApi, { statusFilter, limit });
22208
+ return handleList(thunkApi, { batchId, status, statusFilter, limit, offset });
22209
+ }
22210
+ if (action === "todo") {
22211
+ return handleTodo(thunkApi, { status });
22144
22212
  }
22145
22213
  if (action === "status") {
22146
22214
  if (!runId) throw new Error('controlAgentRun(action:"status"): \u7F3A\u5C11 runId\u3002');
@@ -22155,8 +22223,11 @@ async function controlAgentRunFunc(args, thunkApi, _context) {
22155
22223
  async function handleList(thunkApi, opts) {
22156
22224
  try {
22157
22225
  const body = { action: "list" };
22158
- if (opts.statusFilter) body.statusFilter = opts.statusFilter;
22226
+ const statusVal = opts.status ?? opts.statusFilter;
22227
+ if (statusVal) body.statusFilter = statusVal;
22228
+ if (opts.batchId) body.batchId = opts.batchId;
22159
22229
  if (opts.limit !== void 0) body.limit = opts.limit;
22230
+ if (opts.offset !== void 0) body.offset = opts.offset;
22160
22231
  const data = await callToolApi(
22161
22232
  thunkApi,
22162
22233
  "/api/agent/runs/control",
@@ -22165,9 +22236,10 @@ async function handleList(thunkApi, opts) {
22165
22236
  );
22166
22237
  const resData = data?.data ?? data;
22167
22238
  const runs = resData?.runs ?? [];
22168
- const count = resData?.count ?? runs.length;
22239
+ const total = typeof resData?.total === "number" ? resData.total : runs.length;
22240
+ const hasMore = typeof resData?.hasMore === "boolean" ? resData.hasMore : false;
22169
22241
  return {
22170
- rawData: { runs, count },
22242
+ rawData: { runs, count: runs.length, total, hasMore },
22171
22243
  displayData: formatListRunsCard(runs)
22172
22244
  };
22173
22245
  } catch (e) {
@@ -22196,9 +22268,12 @@ async function handleStatus(thunkApi, opts) {
22196
22268
  return {
22197
22269
  rawData: { found: true, ...run, ...logLines ? { logLines } : {} },
22198
22270
  displayData: formatStatusRunCard(name, run.status, {
22271
+ runId: opts.runId,
22199
22272
  lastToolNames: run.lastToolNames,
22200
22273
  toolCallCount: run.toolCallCount,
22274
+ lastAssistantText: run.lastAssistantText,
22201
22275
  errorMessage: run.errorMessage,
22276
+ timing: { startedAt: run.startedAt, finishedAt: run.finishedAt },
22202
22277
  logLines
22203
22278
  })
22204
22279
  };
@@ -22224,6 +22299,28 @@ async function handleStop(thunkApi, opts) {
22224
22299
  throw new Error(`controlAgentRun(stop) \u5931\u8D25: ${toErrorMessage(e)}`);
22225
22300
  }
22226
22301
  }
22302
+ async function handleTodo(thunkApi, opts) {
22303
+ try {
22304
+ const body = { action: "todo" };
22305
+ if (opts.status) body.status = opts.status;
22306
+ const data = await callToolApi(
22307
+ thunkApi,
22308
+ "/api/agent/runs/control",
22309
+ body,
22310
+ { withAuth: true }
22311
+ );
22312
+ const resData = data?.data ?? data;
22313
+ const todos = resData?.todos ?? [];
22314
+ return {
22315
+ rawData: { todos, count: todos.length },
22316
+ displayData: formatListRunsCard(
22317
+ todos.map((t) => ({ agentName: t?.title ?? t?.id, status: t?.status }))
22318
+ )
22319
+ };
22320
+ } catch (e) {
22321
+ throw new Error(`controlAgentRun(todo) \u5931\u8D25: ${toErrorMessage(e)}`);
22322
+ }
22323
+ }
22227
22324
 
22228
22325
  // packages/ai/tools/agent/agentTools.ts
22229
22326
  var agentToolDefinitions = [
@@ -23417,7 +23514,7 @@ var executeToolRun = createAsyncThunk(
23417
23514
  if (!executionInput) {
23418
23515
  throw new Error(`ToolRun ${id} has no input to execute with.`);
23419
23516
  }
23420
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-PUNBY3AH.js");
23517
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-BMXIXHMB.js");
23421
23518
  const { executor } = findToolExecutor2(run.toolName);
23422
23519
  toolRunStarted({
23423
23520
  id: run.id,
@@ -23441,7 +23538,7 @@ var executeToolRun = createAsyncThunk(
23441
23538
  const latestState = thunkApi.getState();
23442
23539
  const userId = latestState.auth?.currentUser?.userId;
23443
23540
  if (userId) {
23444
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-DRWWZJP7.js");
23541
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-P7VOXLY6.js");
23445
23542
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
23446
23543
  }
23447
23544
  }
@@ -25924,7 +26021,7 @@ async function updateDocFunc(args, thunkApi) {
25924
26021
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
25925
26022
  };
25926
26023
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
25927
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-NGYQ2JTR.js");
26024
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-6KMERNUY.js");
25928
26025
  if (getDocState().pageKey === id) {
25929
26026
  applyExternalDocUpdate({
25930
26027
  slateData: finalSlateData,
@@ -25949,7 +26046,7 @@ async function updateDocFunc(args, thunkApi) {
25949
26046
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
25950
26047
  async function dispatchSetSettings(thunkApi, changes) {
25951
26048
  const injectedSetSettings = thunkApi?.extra?.setSettings;
25952
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-O23YDK2O.js")).setSettings;
26049
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-7MNKHZ6R.js")).setSettings;
25953
26050
  await thunkApi.dispatch(setSettings(changes)).unwrap();
25954
26051
  }
25955
26052
  var updateUserPreferenceProfileFunctionSchema = {
@@ -26546,12 +26643,23 @@ var baseToolDefinitions = [
26546
26643
  schema: uiAskChoiceFunctionSchema,
26547
26644
  executor: uiAskChoiceFunc,
26548
26645
  description: {
26549
- name: "ui_ask_choice",
26646
+ name: "ask_user",
26550
26647
  description: "\u5411\u7528\u6237\u63D0\u51FA\u4E00\u4E2A\u5E26\u591A\u4E2A\u9009\u9879\u7684\u95EE\u9898\uFF0C\u8BA9\u754C\u9762\u5C55\u793A\u6309\u94AE\u4F9B\u7528\u6237\u9009\u62E9\u3002",
26551
26648
  category: "\u4EA4\u4E92 / UI"
26552
26649
  },
26553
26650
  behavior: "answer"
26554
26651
  },
26652
+ {
26653
+ id: "queryMemory",
26654
+ schema: queryMemoryFunctionSchema,
26655
+ executor: queryMemoryFunc,
26656
+ description: {
26657
+ name: "queryMemory",
26658
+ description: "\u6309\u9700\u67E5\u8BE2\u5F53\u524D\u7528\u6237\u3001Space \u548C\u52A9\u624B\u4E3B\u4F53\u7684\u957F\u671F\u8BB0\u5FC6\u3002",
26659
+ category: "\u8BB0\u5FC6 / \u957F\u671F\u4E0A\u4E0B\u6587"
26660
+ },
26661
+ behavior: "data"
26662
+ },
26555
26663
  {
26556
26664
  id: "rememberMemory",
26557
26665
  schema: rememberMemoryFunctionSchema,
@@ -28190,17 +28298,8 @@ export {
28190
28298
  readXPostFunc,
28191
28299
  readXhsProfileFunctionSchema,
28192
28300
  readXhsProfileFunc,
28193
- isAgentNameFallback,
28194
- resolveRunLabel,
28195
- formatStartRunCard,
28196
- formatStatusRunCard,
28197
- formatStopRunCard,
28198
- formatListRunsCard,
28199
- formatNotFoundRunCard,
28200
- isAgentRunTerminalStatus,
28201
28301
  TOOL_PACKS,
28202
28302
  resolveEffectiveEnabledPacks,
28203
- getDefaultSystemCapabilityTools,
28204
28303
  addDefaultSystemCapabilityTools,
28205
28304
  applySystemBuiltinSkillFilter,
28206
28305
  expandEnabledPacks,