nolo-cli 0.1.10 → 0.1.11

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 (240) hide show
  1. package/README.md +0 -32
  2. package/agentRuntimeCommands.ts +3 -3
  3. package/commandRegistry.ts +2 -2
  4. package/machineCommands.ts +31 -6
  5. package/package.json +6 -22
  6. package/ai/agent/_executeModel.ts +0 -118
  7. package/ai/agent/agentSlice.ts +0 -525
  8. package/ai/agent/appWorkingMemory.ts +0 -126
  9. package/ai/agent/avatarUtils.ts +0 -24
  10. package/ai/agent/buildEditingContext.ts +0 -373
  11. package/ai/agent/buildSystemPrompt.ts +0 -532
  12. package/ai/agent/cleanAgentMessages.ts +0 -140
  13. package/ai/agent/cliChatClient.ts +0 -119
  14. package/ai/agent/cliExecutor.ts +0 -733
  15. package/ai/agent/cliPrompt.ts +0 -10
  16. package/ai/agent/contextCompiler.ts +0 -107
  17. package/ai/agent/contextLayerContract.ts +0 -44
  18. package/ai/agent/createAgentSchema.ts +0 -234
  19. package/ai/agent/executeToolCall.ts +0 -58
  20. package/ai/agent/fetchAgentContexts.ts +0 -42
  21. package/ai/agent/generatePrompt.ts +0 -3
  22. package/ai/agent/getFullChatContextKeys.ts +0 -168
  23. package/ai/agent/hooks/fetchPublicAgents.ts +0 -133
  24. package/ai/agent/hooks/useAgentConfig.ts +0 -61
  25. package/ai/agent/hooks/useAgentDialog.ts +0 -35
  26. package/ai/agent/hooks/useAgentFormValidation.ts +0 -202
  27. package/ai/agent/hooks/usePublicAgents.ts +0 -473
  28. package/ai/agent/machineRunPermissions.ts +0 -95
  29. package/ai/agent/persistMessageWithFixedId.ts +0 -37
  30. package/ai/agent/planSlice.ts +0 -259
  31. package/ai/agent/referenceUtils.ts +0 -229
  32. package/ai/agent/runAgentBackground.ts +0 -238
  33. package/ai/agent/runAgentClientLoop.ts +0 -138
  34. package/ai/agent/runtimeGuidance.ts +0 -97
  35. package/ai/agent/runtimeServerBase.ts +0 -37
  36. package/ai/agent/server/fetchPublicAgents.ts +0 -128
  37. package/ai/agent/startParallelAgentStreams.ts +0 -424
  38. package/ai/agent/startupProtocol.ts +0 -53
  39. package/ai/agent/streamAgentChatTurn.ts +0 -1278
  40. package/ai/agent/streamAgentChatTurnUtils.ts +0 -738
  41. package/ai/agent/types.ts +0 -71
  42. package/ai/agent/utils/imageOutput.ts +0 -33
  43. package/ai/agent/utils/sortUtils.ts +0 -250
  44. package/ai/agent/web/referencePickerUtils.ts +0 -146
  45. package/ai/ai.locale.ts +0 -1079
  46. package/ai/chat/accumulateToolCallChunks.ts +0 -95
  47. package/ai/chat/fetchUtils.native.ts +0 -276
  48. package/ai/chat/fetchUtils.ts +0 -153
  49. package/ai/chat/parseApiError.ts +0 -64
  50. package/ai/chat/parseMultilineSSE.ts +0 -95
  51. package/ai/chat/sendOpenAICompletionsRequest.native.ts +0 -682
  52. package/ai/chat/sendOpenAICompletionsRequest.ts +0 -703
  53. package/ai/chat/sendOpenAIResponseRequest.ts +0 -491
  54. package/ai/chat/shouldUseServerProxy.ts +0 -18
  55. package/ai/chat/sseClient.native.ts +0 -91
  56. package/ai/chat/sseClient.ts +0 -67
  57. package/ai/chat/streamReader.native.ts +0 -31
  58. package/ai/chat/streamReader.ts +0 -62
  59. package/ai/chat/updateTotalUsage.ts +0 -72
  60. package/ai/context/buildReferenceContext.ts +0 -437
  61. package/ai/context/calculateContextUsage.ts +0 -133
  62. package/ai/context/retention.ts +0 -165
  63. package/ai/context/tokenUtils.ts +0 -78
  64. package/ai/index.ts +0 -1
  65. package/ai/llm/calculateGeminiImageTokens.ts +0 -57
  66. package/ai/llm/deepinfra.ts +0 -28
  67. package/ai/llm/fireworks.ts +0 -50
  68. package/ai/llm/generateRequestBody.ts +0 -165
  69. package/ai/llm/getModelContextWindow.ts +0 -84
  70. package/ai/llm/getNoloKey.ts +0 -31
  71. package/ai/llm/getPricing.ts +0 -199
  72. package/ai/llm/hooks/useModelPricing.ts +0 -75
  73. package/ai/llm/imagePricing.ts +0 -40
  74. package/ai/llm/isResponseAPIModel.ts +0 -13
  75. package/ai/llm/mimo.ts +0 -71
  76. package/ai/llm/mistral.ts +0 -22
  77. package/ai/llm/modelAvatar.ts +0 -427
  78. package/ai/llm/models.ts +0 -45
  79. package/ai/llm/openrouterModels.ts +0 -269
  80. package/ai/llm/providers.ts +0 -306
  81. package/ai/llm/reasoningModels.ts +0 -28
  82. package/ai/llm/types.ts +0 -59
  83. package/ai/llm/usageRequestOptions.ts +0 -59
  84. package/ai/memory/capture.ts +0 -148
  85. package/ai/memory/consolidate.ts +0 -104
  86. package/ai/memory/delete.ts +0 -147
  87. package/ai/memory/overlay.ts +0 -84
  88. package/ai/memory/query.ts +0 -38
  89. package/ai/memory/queryShared.ts +0 -160
  90. package/ai/memory/rank.ts +0 -105
  91. package/ai/memory/recentRelationshipRecap.ts +0 -249
  92. package/ai/memory/remember.ts +0 -167
  93. package/ai/memory/runtime.ts +0 -76
  94. package/ai/memory/store.ts +0 -20
  95. package/ai/memory/storeShared.ts +0 -76
  96. package/ai/memory/types.ts +0 -46
  97. package/ai/memory/understanding.ts +0 -349
  98. package/ai/memory/understandingGreeting.ts +0 -264
  99. package/ai/messages/type.ts +0 -20
  100. package/ai/policy/personalizationDialog.ts +0 -333
  101. package/ai/policy/runtimePolicy.ts +0 -440
  102. package/ai/policy/selfUpdateFields.ts +0 -48
  103. package/ai/policy/types.ts +0 -64
  104. package/ai/skills/referenceRuntime.ts +0 -274
  105. package/ai/skills/skillDiagnostics.ts +0 -251
  106. package/ai/skills/skillDocBuilder.ts +0 -139
  107. package/ai/skills/skillDocProtocol.ts +0 -434
  108. package/ai/skills/skillReferenceSummary.ts +0 -63
  109. package/ai/skills/skillSummaryMarker.ts +0 -26
  110. package/ai/token/calculatePrice.ts +0 -544
  111. package/ai/token/db.ts +0 -98
  112. package/ai/token/externalToolCost.ts +0 -330
  113. package/ai/token/hooks/useRecords.ts +0 -65
  114. package/ai/token/missingUsageEstimate.ts +0 -42
  115. package/ai/token/modelUsageQuery.ts +0 -252
  116. package/ai/token/normalizeUsage.ts +0 -84
  117. package/ai/token/openaiImageGenerationUsage.ts +0 -56
  118. package/ai/token/prepareTokenUsageData.ts +0 -88
  119. package/ai/token/query.ts +0 -88
  120. package/ai/token/queryUserTokens.ts +0 -59
  121. package/ai/token/resolveBillingTarget.ts +0 -52
  122. package/ai/token/saveTokenRecord.ts +0 -53
  123. package/ai/token/serverDialogProjection.ts +0 -78
  124. package/ai/token/serverTokenWriter.ts +0 -143
  125. package/ai/token/stats.ts +0 -21
  126. package/ai/token/tokenThunks.ts +0 -24
  127. package/ai/token/types.ts +0 -93
  128. package/ai/tools/agent/agentTools.ts +0 -176
  129. package/ai/tools/agent/agentUpdateShared.ts +0 -311
  130. package/ai/tools/agent/callAgentTool.ts +0 -139
  131. package/ai/tools/agent/createAgentTool.ts +0 -512
  132. package/ai/tools/agent/createDialogTool.ts +0 -69
  133. package/ai/tools/agent/createSkillAgentTool.ts +0 -62
  134. package/ai/tools/agent/parallelBudget.ts +0 -221
  135. package/ai/tools/agent/presets/appBuilderPreset.ts +0 -145
  136. package/ai/tools/agent/runLlmTool.ts +0 -96
  137. package/ai/tools/agent/runStreamingAgentTool.ts +0 -73
  138. package/ai/tools/agent/skillAgentArgs.ts +0 -106
  139. package/ai/tools/agent/skillAgentPreset.ts +0 -89
  140. package/ai/tools/agent/streamParallelAgentsTool.ts +0 -122
  141. package/ai/tools/agent/updateAgentTool.ts +0 -96
  142. package/ai/tools/agent/updateSelfTool.ts +0 -113
  143. package/ai/tools/amazonProductScraperTool.ts +0 -86
  144. package/ai/tools/apifyActorClient.ts +0 -45
  145. package/ai/tools/appEditGuard.ts +0 -372
  146. package/ai/tools/appReadSnapshot.ts +0 -153
  147. package/ai/tools/appTools.ts +0 -1549
  148. package/ai/tools/applyEditTool.ts +0 -256
  149. package/ai/tools/applyLineEditsTool.ts +0 -312
  150. package/ai/tools/browserTools/click.ts +0 -33
  151. package/ai/tools/browserTools/closeSession.ts +0 -29
  152. package/ai/tools/browserTools/common.ts +0 -27
  153. package/ai/tools/browserTools/openSession.ts +0 -48
  154. package/ai/tools/browserTools/readContent.ts +0 -38
  155. package/ai/tools/browserTools/selectOption.ts +0 -46
  156. package/ai/tools/browserTools/typeText.ts +0 -42
  157. package/ai/tools/category/createCategoryTool.ts +0 -66
  158. package/ai/tools/category/queryContentsByCategoryTool.ts +0 -69
  159. package/ai/tools/category/updateContentCategoryTool.ts +0 -75
  160. package/ai/tools/cfBrowserTools.ts +0 -319
  161. package/ai/tools/cfSpeechToTextTool.ts +0 -49
  162. package/ai/tools/checkEnvTool.ts +0 -65
  163. package/ai/tools/cloudflareCrawlTool.ts +0 -289
  164. package/ai/tools/codeSearchTool.ts +0 -111
  165. package/ai/tools/codeTools.ts +0 -101
  166. package/ai/tools/createDocTool.ts +0 -132
  167. package/ai/tools/createPlanTool.ts +0 -999
  168. package/ai/tools/createSkillDocTool.ts +0 -155
  169. package/ai/tools/createWorkflowTool.ts +0 -154
  170. package/ai/tools/deepseekOcrTool.ts +0 -34
  171. package/ai/tools/delayTool.ts +0 -31
  172. package/ai/tools/deleteSpacesTool.ts +0 -325
  173. package/ai/tools/deleteSpacesToolModel.ts +0 -159
  174. package/ai/tools/devReloadUtils.ts +0 -29
  175. package/ai/tools/dialogMessageSearch.ts +0 -137
  176. package/ai/tools/doctorSkillTool.ts +0 -72
  177. package/ai/tools/ecommerceScraperTool.ts +0 -86
  178. package/ai/tools/emailTools.ts +0 -549
  179. package/ai/tools/evalSkillTool.ts +0 -92
  180. package/ai/tools/exaSearchTool.ts +0 -64
  181. package/ai/tools/execBashTool.ts +0 -379
  182. package/ai/tools/executeSqlTool.ts +0 -192
  183. package/ai/tools/fetchWebpageSupport.ts +0 -309
  184. package/ai/tools/fetchWebpageTool.ts +0 -84
  185. package/ai/tools/geminiImagePreviewTool.ts +0 -361
  186. package/ai/tools/generateDocxTool.ts +0 -215
  187. package/ai/tools/googleSearchScraperTool.ts +0 -106
  188. package/ai/tools/importDataTool.ts +0 -133
  189. package/ai/tools/importSkillTool.ts +0 -162
  190. package/ai/tools/index.ts +0 -1858
  191. package/ai/tools/listFilesTool.ts +0 -82
  192. package/ai/tools/listUserSpacesTool.ts +0 -113
  193. package/ai/tools/modelUsageTools.ts +0 -142
  194. package/ai/tools/olmOcrTool.ts +0 -34
  195. package/ai/tools/openaiImageTool.ts +0 -218
  196. package/ai/tools/paddleOcrTool.ts +0 -34
  197. package/ai/tools/prepareTools.ts +0 -23
  198. package/ai/tools/readDocTool.ts +0 -84
  199. package/ai/tools/readFileTool.ts +0 -211
  200. package/ai/tools/readTool.ts +0 -163
  201. package/ai/tools/readXPostTool.ts +0 -233
  202. package/ai/tools/rememberMemoryTool.ts +0 -84
  203. package/ai/tools/remotionVideoTool.ts +0 -151
  204. package/ai/tools/searchDialogMessagesTool.ts +0 -222
  205. package/ai/tools/searchRepoTool.ts +0 -115
  206. package/ai/tools/searchWorkspaceTool.ts +0 -259
  207. package/ai/tools/skillFollowup.ts +0 -86
  208. package/ai/tools/surfWeatherTool.ts +0 -169
  209. package/ai/tools/table/addTableRowTool.ts +0 -217
  210. package/ai/tools/table/createTableTool.ts +0 -315
  211. package/ai/tools/table/rowTools.ts +0 -366
  212. package/ai/tools/table/schemaTools.ts +0 -244
  213. package/ai/tools/table/shareTableTool.ts +0 -148
  214. package/ai/tools/table/toolShared.ts +0 -129
  215. package/ai/tools/toolApiClient.ts +0 -198
  216. package/ai/tools/toolNameAliases.ts +0 -57
  217. package/ai/tools/toolResultError.ts +0 -42
  218. package/ai/tools/toolRunSlice.ts +0 -303
  219. package/ai/tools/toolSchemaCompatibility.ts +0 -53
  220. package/ai/tools/toolVisibility.ts +0 -4
  221. package/ai/tools/types.ts +0 -20
  222. package/ai/tools/uiAskChoiceTool.ts +0 -104
  223. package/ai/tools/updateContentTitleTool.ts +0 -84
  224. package/ai/tools/updateDocTool.ts +0 -105
  225. package/ai/tools/updateUserPreferenceProfileTool.ts +0 -145
  226. package/ai/tools/whisperTool.ts +0 -77
  227. package/ai/tools/writeFileTool.ts +0 -210
  228. package/ai/tools/youtubeScraperTool.ts +0 -116
  229. package/ai/tools/ziweiChartTool.ts +0 -678
  230. package/ai/types.ts +0 -55
  231. package/ai/workflow/workflowExecutor.ts +0 -323
  232. package/ai/workflow/workflowSlice.ts +0 -73
  233. package/ai/workflow/workflowTypes.ts +0 -106
  234. package/client/compactDialog.ts +0 -222
  235. package/connector-experimental/capabilities.ts +0 -73
  236. package/connector-experimental/codexBinary.ts +0 -41
  237. package/connector-experimental/heartbeatLoop.ts +0 -22
  238. package/connector-experimental/index.ts +0 -5
  239. package/connector-experimental/machineInfo.ts +0 -46
  240. package/connector-experimental/protocol.ts +0 -54
@@ -1,424 +0,0 @@
1
- import type { RootState } from "app/store";
2
- import type { DialogConfig } from "app/types";
3
- import { patch, read, write } from "database/dbSlice";
4
- import { DataType } from "create/types";
5
- import { createDialogMessageKeyAndId } from "database/keys";
6
- import { streamAgentChatTurn } from "ai/agent/agentSlice";
7
- import { createDialog } from "chat/dialog/dialogSlice";
8
- import { serializeMessageContent } from "chat/messages/messageContent";
9
- import { addToolMessage, selectAllMsgs } from "chat/messages/messageSlice";
10
- import type { Message } from "chat/messages/types";
11
- import { extractCustomId } from "core/prefix";
12
- import {
13
- calculateParallelBranchPricing,
14
- summarizeParallelBudget,
15
- summarizeParallelCosts,
16
- type ParallelBudgetSummary,
17
- } from "ai/tools/agent/parallelBudget";
18
-
19
- type ParallelDisplayMode = "inline" | "folded";
20
-
21
- function getBranchFinalContent(
22
- messages: Message[],
23
- options: {
24
- agentKey: string;
25
- parallelSessionId?: string;
26
- parallelBranchId?: string;
27
- }
28
- ) {
29
- const { agentKey, parallelSessionId, parallelBranchId } = options;
30
- for (let index = messages.length - 1; index >= 0; index -= 1) {
31
- const message = messages[index];
32
- if (!message || message.role !== "assistant") continue;
33
- if (parallelSessionId && message.parallelSessionId !== parallelSessionId) continue;
34
- if (parallelBranchId && message.parallelBranchId !== parallelBranchId) continue;
35
- if (message.agentKey !== agentKey && message.cybotKey !== agentKey) continue;
36
-
37
- const content = serializeMessageContent(message.content);
38
- if (content) {
39
- return { content, messageId: message.id };
40
- }
41
- }
42
-
43
- return null;
44
- }
45
-
46
- async function persistInlineBranchMessage(options: {
47
- dispatch: any;
48
- parentDialogId: string;
49
- agentKey: string;
50
- agentName: string;
51
- content: string;
52
- parallelSessionId: string;
53
- parallelBranchId: string;
54
- parallelLabel: string;
55
- parallelIndex: number;
56
- }) {
57
- const {
58
- dispatch,
59
- parentDialogId,
60
- agentKey,
61
- agentName,
62
- content,
63
- parallelSessionId,
64
- parallelBranchId,
65
- parallelLabel,
66
- parallelIndex,
67
- } = options;
68
- const { key: dbKey, messageId } = createDialogMessageKeyAndId(parentDialogId);
69
- const mirroredMessage: Message & { dialogId?: string } = {
70
- id: messageId,
71
- dbKey,
72
- dialogId: parentDialogId,
73
- role: "assistant",
74
- content,
75
- agentKey,
76
- cybotKey: agentKey,
77
- agentName,
78
- isStreaming: false,
79
- parallelSessionId,
80
- parallelBranchId,
81
- parallelLabel,
82
- parallelIndex,
83
- };
84
-
85
- dispatch(addToolMessage(mirroredMessage));
86
- await dispatch(
87
- write({
88
- data: {
89
- ...mirroredMessage,
90
- type: DataType.MSG,
91
- },
92
- customKey: dbKey,
93
- })
94
- );
95
-
96
- return {
97
- parentMessageId: messageId,
98
- parentMessageKey: dbKey,
99
- };
100
- }
101
-
102
- export async function startParallelAgentStreams(options: {
103
- task: string;
104
- agents: Array<{ agentKey: string; label?: string; branchId?: string; serverBase?: string }>;
105
- dispatch: any;
106
- getState: () => RootState;
107
- dialogId?: string;
108
- dialogKey?: string;
109
- waitForCompletion?: boolean;
110
- displayMode?: ParallelDisplayMode;
111
- budgetCredits?: number;
112
- }) {
113
- const {
114
- task,
115
- agents,
116
- dispatch,
117
- getState,
118
- dialogId,
119
- dialogKey,
120
- waitForCompletion = false,
121
- budgetCredits,
122
- } = options;
123
- const parallelSessionId = `parallel-${Date.now()}-${Math.random()
124
- .toString(36)
125
- .slice(2, 10)}`;
126
- const parentDialogId = dialogKey ? extractCustomId(dialogKey) : null;
127
- const effectiveDisplayMode: ParallelDisplayMode = "inline";
128
-
129
- const branches = await Promise.all(
130
- agents.map(async (agent, index) => {
131
- const branchId = agent.branchId?.trim() || `branch-${index + 1}`;
132
- const config = await dispatch(read({ dbKey: agent.agentKey })).unwrap();
133
- const label =
134
- agent.label?.trim() ||
135
- (typeof config?.name === "string" && config.name.trim()) ||
136
- `Agent ${index + 1}`;
137
-
138
- return {
139
- agentKey: agent.agentKey,
140
- ...(typeof agent.serverBase === "string" && agent.serverBase.trim()
141
- ? { serverBase: agent.serverBase.trim() }
142
- : {}),
143
- parallelBranchId: branchId,
144
- parallelLabel: label,
145
- parallelIndex: index,
146
- agentRecordId: typeof config?.dbKey === "string" ? config.dbKey : agent.agentKey,
147
- model: typeof config?.model === "string" ? config.model : null,
148
- provider: typeof config?.provider === "string" ? config.provider : null,
149
- inputPrice:
150
- typeof config?.inputPrice === "number" && Number.isFinite(config.inputPrice)
151
- ? config.inputPrice
152
- : null,
153
- outputPrice:
154
- typeof config?.outputPrice === "number" && Number.isFinite(config.outputPrice)
155
- ? config.outputPrice
156
- : null,
157
- };
158
- })
159
- );
160
-
161
- const branchTaskPreview = task.replace(/\s+/g, " ").trim().slice(0, 36);
162
- const useChildDialogs = waitForCompletion && !!dialogKey;
163
-
164
- const branchesWithTargets = await Promise.all(
165
- branches.map(async (branch) => {
166
- if (!useChildDialogs) {
167
- return branch;
168
- }
169
-
170
- const childTitle =
171
- branchTaskPreview.length > 0
172
- ? `${branch.parallelLabel} · ${branchTaskPreview}`
173
- : branch.parallelLabel;
174
-
175
- const created = (await dispatch(
176
- createDialog({
177
- cybots: [branch.agentKey],
178
- title: childTitle,
179
- inheritFromDialogKey: dialogKey,
180
- skipGreeting: true,
181
- })
182
- ).unwrap()) as DialogConfig;
183
-
184
- if (created?.dbKey && parentDialogId) {
185
- await dispatch(
186
- patch({
187
- dbKey: created.dbKey,
188
- changes: {
189
- parentDialogId,
190
- },
191
- })
192
- )
193
- .unwrap()
194
- .catch(() => null);
195
- }
196
-
197
- return {
198
- ...branch,
199
- childDialogKey: created?.dbKey,
200
- childDialogId: created?.dbKey ? extractCustomId(created.dbKey) : undefined,
201
- childSpaceId: created?.spaceId,
202
- };
203
- })
204
- );
205
-
206
- if (!waitForCompletion) {
207
- for (const branch of branchesWithTargets) {
208
- void dispatch(
209
- streamAgentChatTurn({
210
- agentKey: branch.agentKey,
211
- userInput: task,
212
- ...(branch.serverBase ? { serverBase: branch.serverBase } : {}),
213
- ...(dialogKey ? { dialogKey } : {}),
214
- runtimeOptions: {
215
- parallelSessionId,
216
- parallelBranchId: branch.parallelBranchId,
217
- parallelLabel: branch.parallelLabel,
218
- parallelIndex: branch.parallelIndex,
219
- },
220
- })
221
- );
222
- }
223
-
224
- return {
225
- displayMode: effectiveDisplayMode,
226
- parallelSessionId,
227
- branches: branchesWithTargets,
228
- };
229
- }
230
-
231
- const results = await Promise.all(
232
- branchesWithTargets.map(async (branch) => {
233
- try {
234
- const targetDialogKey = branch.childDialogKey || dialogKey;
235
- const targetDialogId = branch.childDialogId || dialogId;
236
- const branchTurn = await dispatch(
237
- streamAgentChatTurn({
238
- agentKey: branch.agentKey,
239
- userInput: task,
240
- ...(branch.serverBase ? { serverBase: branch.serverBase } : {}),
241
- ...(targetDialogKey ? { dialogKey: targetDialogKey } : {}),
242
- ...(!branch.childDialogKey
243
- ? {
244
- runtimeOptions: {
245
- parallelSessionId,
246
- parallelBranchId: branch.parallelBranchId,
247
- parallelLabel: branch.parallelLabel,
248
- parallelIndex: branch.parallelIndex,
249
- },
250
- }
251
- : {}),
252
- })
253
- ).unwrap();
254
-
255
- if (!targetDialogId) {
256
- return {
257
- ok: false,
258
- label: branch.parallelLabel,
259
- branchId: branch.parallelBranchId,
260
- parallelSessionId,
261
- parallelIndex: branch.parallelIndex,
262
- agentKey: branch.agentKey,
263
- dialogKey: targetDialogKey ?? null,
264
- dialogId: targetDialogId ?? null,
265
- model: branch.model,
266
- error: "missing dialogId for parallel result collection",
267
- spentCredits: null,
268
- };
269
- }
270
-
271
- const finalMessage = getBranchFinalContent(
272
- selectAllMsgs(getState(), targetDialogId) as Message[],
273
- branch.childDialogKey
274
- ? {
275
- agentKey: branch.agentKey,
276
- }
277
- : {
278
- parallelSessionId,
279
- parallelBranchId: branch.parallelBranchId,
280
- agentKey: branch.agentKey,
281
- }
282
- );
283
-
284
- if (!finalMessage?.content) {
285
- return {
286
- ok: false,
287
- label: branch.parallelLabel,
288
- branchId: branch.parallelBranchId,
289
- parallelSessionId,
290
- parallelIndex: branch.parallelIndex,
291
- agentKey: branch.agentKey,
292
- dialogKey: targetDialogKey ?? null,
293
- dialogId: targetDialogId ?? null,
294
- spaceId: branch.childSpaceId ?? null,
295
- model: branch.model,
296
- error: "branch completed without assistant content",
297
- spentCredits: null,
298
- };
299
- }
300
-
301
- const inlineProjection =
302
- effectiveDisplayMode === "inline" && parentDialogId
303
- ? await persistInlineBranchMessage({
304
- dispatch,
305
- parentDialogId,
306
- agentKey: branch.agentKey,
307
- agentName: branch.parallelLabel,
308
- content: finalMessage.content,
309
- parallelSessionId,
310
- parallelBranchId: branch.parallelBranchId,
311
- parallelLabel: branch.parallelLabel,
312
- parallelIndex: branch.parallelIndex,
313
- })
314
- : null;
315
- const pricing = calculateParallelBranchPricing({
316
- usage: branchTurn?.usage,
317
- agentKey: branch.agentKey,
318
- dialogId: targetDialogId ?? null,
319
- agentConfig: {
320
- id: branch.agentRecordId,
321
- model: branch.model,
322
- provider: branch.provider,
323
- inputPrice: branch.inputPrice,
324
- outputPrice: branch.outputPrice,
325
- },
326
- });
327
-
328
- return {
329
- ok: true,
330
- label: branch.parallelLabel,
331
- branchId: branch.parallelBranchId,
332
- parallelSessionId,
333
- parallelIndex: branch.parallelIndex,
334
- agentKey: branch.agentKey,
335
- agentName: branch.parallelLabel,
336
- dialogKey: targetDialogKey ?? null,
337
- dialogId: targetDialogId ?? null,
338
- spaceId: branch.childSpaceId ?? null,
339
- model: branch.model,
340
- provider: branch.provider,
341
- content: finalMessage.content,
342
- messageId: finalMessage.messageId,
343
- inlineMessageId: inlineProjection?.parentMessageId ?? null,
344
- inlineMessageKey: inlineProjection?.parentMessageKey ?? null,
345
- usage: branchTurn?.usage ?? null,
346
- spentCredits: pricing.spentCredits,
347
- billedModel: pricing.billedModel,
348
- billedProvider: pricing.billedProvider,
349
- billingServiceTier: pricing.billingServiceTier,
350
- pricingError: pricing.pricingError,
351
- };
352
- } catch (error: any) {
353
- return {
354
- ok: false,
355
- label: branch.parallelLabel,
356
- branchId: branch.parallelBranchId,
357
- parallelSessionId,
358
- parallelIndex: branch.parallelIndex,
359
- agentKey: branch.agentKey,
360
- dialogKey: branch.childDialogKey ?? dialogKey ?? null,
361
- dialogId: branch.childDialogId ?? dialogId ?? null,
362
- spaceId: branch.childSpaceId ?? null,
363
- model: branch.model,
364
- provider: branch.provider,
365
- error: error?.message || String(error),
366
- spentCredits: null,
367
- };
368
- }
369
- })
370
- );
371
-
372
- const successful = results.filter((item) => item.ok);
373
- const failed = results.filter((item) => !item.ok);
374
- const stats = {
375
- total: results.length,
376
- succeeded: successful.length,
377
- failed: failed.length,
378
- };
379
- const costSummary = summarizeParallelCosts(results);
380
- const budget = summarizeParallelBudget({
381
- budgetCredits,
382
- results,
383
- }) as ParallelBudgetSummary | null;
384
- const mergedContent = successful
385
- .map((item) => `## ${item.label}\n\n${item.content || "(无内容)"}`)
386
- .join("\n\n");
387
- const failedSummary = failed
388
- .map((item) => `- ${item.label}: ${item.error || "unknown error"}`)
389
- .join("\n");
390
- const llmContext = [
391
- mergedContent ? `并行分支结果:\n${mergedContent}` : "",
392
- failedSummary ? `失败分支:\n${failedSummary}` : "",
393
- costSummary.pricedBranches > 0 || budget
394
- ? [
395
- `并行成本:本轮已花费 ${costSummary.spentCredits} 积分。`,
396
- budget
397
- ? `预算 ${budget.budgetCredits} 积分,剩余 ${budget.remainingCredits} 积分。`
398
- : "",
399
- costSummary.unpricedBranches > 0
400
- ? `${costSummary.unpricedBranches} 个成功分支缺少精确定价。`
401
- : "",
402
- budget?.exhausted
403
- ? "预算已耗尽,请不要再开启新的并行轮次,直接总结当前共识与分歧。"
404
- : "",
405
- ]
406
- .filter(Boolean)
407
- .join(" ")
408
- : "",
409
- ]
410
- .filter(Boolean)
411
- .join("\n\n");
412
-
413
- return {
414
- displayMode: effectiveDisplayMode,
415
- parallelSessionId,
416
- branches: branchesWithTargets,
417
- results,
418
- stats,
419
- costSummary,
420
- ...(budget ? { budget } : {}),
421
- content: mergedContent,
422
- llmContext,
423
- };
424
- }
@@ -1,53 +0,0 @@
1
- type StartupProtocolOptions = {
2
- hasCheckEnvTool?: boolean;
3
- hasExecShellTool?: boolean;
4
- };
5
-
6
- export const buildStartupProtocolBlock = (
7
- options: StartupProtocolOptions = {}
8
- ): string => {
9
- const lines = [
10
- "--- 启动协议 ---",
11
- "每次开始处理一个新请求时,先整理启动上下文,再决定是否调用工具。",
12
- "",
13
- "启动顺序:",
14
- "1. 先读取 policy / knowledge:你的核心 prompt、自动加载的 references、以及用户策略约束。",
15
- "2. 再提炼 current mission:优先从当前用户输入和当前输入上下文里确认本轮目标、交付物和停止条件。",
16
- "3. 再吸收 recent memory:结合 Memory Overlay、历史摘要、最近工作记忆和必要的历史引用,只保留对本轮真正有帮助的部分。",
17
- "",
18
- "在第一次工具调用前,先形成一份内部 working state,至少包含:",
19
- "- current_goal:这一轮真正要完成什么",
20
- "- constraints:当前约束、偏好、边界条件",
21
- "- missing_facts:还缺哪些事实才能安全行动",
22
- "- next_action:下一步最小且高价值的动作",
23
- "",
24
- "决策规则:",
25
- "- 如果 policy / knowledge 已经足够回答,就直接回答,不要为了显得忙而乱调用工具。",
26
- "- 如果 recent memory 与当前用户输入冲突,以当前用户输入为准。",
27
- "- 如果需要依赖环境、文件状态、运行时事实或外部真值,先验证,再行动。",
28
- "- 优先小步推进;每一轮先做最能降低不确定性的动作。",
29
- ];
30
-
31
- if (options.hasCheckEnvTool || options.hasExecShellTool) {
32
- lines.push(
33
- "- 只要任务涉及命令执行、shell 语法、路径约定、运行平台或服务状态,并且这些事实还不够明确,就先确认环境。"
34
- );
35
- }
36
-
37
- if (options.hasCheckEnvTool) {
38
- lines.push(
39
- "- 环境不明确时,优先调用 checkEnv({ check: 'context' }),再决定后续命令和工具路径。"
40
- );
41
- }
42
-
43
- if (options.hasExecShellTool) {
44
- lines.push(
45
- "- 需要执行命令时,先根据已确认的环境选择 shell;Windows 默认 PowerShell,Linux/macOS 默认 bash。"
46
- );
47
- lines.push(
48
- "- 如果只是收集多个只读环境事实,优先合并成一次 shell 调用或一条组合命令,避免拆成很多小探针。"
49
- );
50
- }
51
-
52
- return lines.join("\n");
53
- };