nolo-cli 0.15.0 → 0.16.0-alpha.10

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 (97) hide show
  1. package/{_executeModel-QAUS6B7J.js → _executeModel-6BR65FSI.js} +29 -28
  2. package/{action-GUOZYYGN.js → action-F5JACQBG.js} +4 -4
  3. package/{addContentAction-QDGHGUBH.js → addContentAction-AQXEYRBE.js} +3 -3
  4. package/{addDialogAgentAction-Z4YCYZIV.js → addDialogAgentAction-EJHHJZWW.js} +2 -2
  5. package/{agentDeleteCommand-QDO62EZA.js → agentDeleteCommand-PBIUC4FT.js} +18 -17
  6. package/{agentEmailCommands-UZ5BKX3P.js → agentEmailCommands-KNZY4HXV.js} +35 -34
  7. package/{agentListCommands-ZC33UDWT.js → agentListCommands-N64PHBXM.js} +20 -19
  8. package/{agentMachineCommands-RZGZEZRL.js → agentMachineCommands-2AIPJKFM.js} +18 -17
  9. package/{agentRecordCommands-DGDXE2VH.js → agentRecordCommands-TB4N7YSB.js} +34 -33
  10. package/{agentRunCommand-SRZWFOPH.js → agentRunCommand-UVW2ZLKT.js} +34 -33
  11. package/{agentRuntimeLocal-4YCF6IRF.js → agentRuntimeLocal-T6YECTNF.js} +15 -16
  12. package/{agentSlice-IVE735EV.js → agentSlice-533PEM4O.js} +3 -3
  13. package/{appDeleteCommands-7I26L64I.js → appDeleteCommands-D6B6Z4ZQ.js} +19 -18
  14. package/{appDeployCommands-TZLZNTJN.js → appDeployCommands-YMO5FK4T.js} +19 -18
  15. package/{appDeployStatusCommands-OPPTLHRW.js → appDeployStatusCommands-EO5DWWPQ.js} +19 -18
  16. package/{appGetCommands-N2S4HYKY.js → appGetCommands-6SMZ3URQ.js} +19 -18
  17. package/{appListCommands-OBTPPKUM.js → appListCommands-RZXSWR2G.js} +19 -18
  18. package/{authCommand-YFTR3347.js → authCommand-MSSBXCQ6.js} +8 -2
  19. package/{chunk-OQMPU2ML.js → chunk-2OUI4TLC.js} +4 -4
  20. package/{chunk-SFXYKGK2.js → chunk-3S2VOMIF.js} +3 -3
  21. package/{chunk-JBKVPAYK.js → chunk-6KBBMW4D.js} +2 -2
  22. package/{chunk-U7LEGLEB.js → chunk-6N4KODMN.js} +1 -1
  23. package/{chunk-IZ2QRVEU.js → chunk-A7O4KKLZ.js} +3 -3
  24. package/{chunk-WA6KZL5V.js → chunk-AAODAAUQ.js} +23 -20
  25. package/{chunk-K53477EY.js → chunk-C4MMO7W4.js} +1 -1
  26. package/{chunk-YNHQIXX5.js → chunk-CXM4IIUF.js} +21 -21
  27. package/{chunk-JKWWVF2I.js → chunk-D3HVJJIA.js} +1 -1
  28. package/{chunk-XGQZFBO5.js → chunk-DBLHEQH7.js} +148 -175
  29. package/{chunk-TTGAVETO.js → chunk-EABWT43X.js} +2 -2
  30. package/{chunk-OKSYPTDZ.js → chunk-F3UOACU4.js} +1 -1
  31. package/{chunk-VE6XMVKG.js → chunk-G2IQGDQZ.js} +163 -53
  32. package/{chunk-RKM3K52F.js → chunk-GPELDE6I.js} +2 -2
  33. package/{chunk-OGGHETUE.js → chunk-HQPG2PIV.js} +62 -19
  34. package/{chunk-XVP3C2KY.js → chunk-IWLUTMYX.js} +1 -1
  35. package/{chunk-B4KT7RN2.js → chunk-JTMNCCWF.js} +2 -2
  36. package/chunk-KFEVY3ST.js +255 -0
  37. package/{chunk-WNLPAOIT.js → chunk-KFHN5NGJ.js} +1 -1
  38. package/{chunk-P4MJQWWF.js → chunk-KPD4CEQD.js} +2 -2
  39. package/{chunk-G2MKOQCB.js → chunk-KPJWHHG4.js} +1 -1
  40. package/{chunk-ISYE6GZB.js → chunk-L6NVTGI7.js} +1 -1
  41. package/{chunk-O53CP2QR.js → chunk-LCMAJFAD.js} +3 -3
  42. package/{chunk-UXKQQ2MR.js → chunk-LO6JNGCT.js} +3 -3
  43. package/{chunk-472E5RMQ.js → chunk-MSA4JAOZ.js} +1 -1
  44. package/{chunk-HRQCKQA5.js → chunk-MUCU6ATG.js} +8 -257
  45. package/{chunk-524BDL33.js → chunk-O6W2O2DA.js} +1 -15
  46. package/{chunk-4QQFLN5C.js → chunk-OVBVEXZ7.js} +4 -4
  47. package/{chunk-IOQ7IBPU.js → chunk-PU4LXVAC.js} +1 -1
  48. package/{chunk-Z24FGIU2.js → chunk-R4L524UB.js} +3 -3
  49. package/{chunk-4IJYA27C.js → chunk-RG2U2MTJ.js} +1 -1
  50. package/{chunk-6MHDWKOT.js → chunk-RIF3XLXK.js} +9 -5
  51. package/{chunk-IKXL2HZ3.js → chunk-RK5NYQEL.js} +1 -1
  52. package/{chunk-JS33TCQ3.js → chunk-RPDGJO4D.js} +2 -2
  53. package/{chunk-BFRVXJJJ.js → chunk-SI73WO7P.js} +10 -10
  54. package/{chunk-WRN5EQT7.js → chunk-T26DWCH5.js} +3 -3
  55. package/{chunk-EHLHSX7R.js → chunk-UB4RYYNQ.js} +9 -2
  56. package/{chunk-5VMYGIIL.js → chunk-VHXXRWNL.js} +23 -9
  57. package/{chunk-OOIN7HSO.js → chunk-XJITGCTM.js} +10 -1
  58. package/{chunk-AWDOJBHW.js → chunk-XJYXSTBK.js} +883 -174
  59. package/{chunk-V2J635L5.js → chunk-XOIF2TNF.js} +2 -2
  60. package/{chunk-VPTJB4HM.js → chunk-XPC5C7BK.js} +0 -3
  61. package/{chunk-NTC6I2FN.js → chunk-XRSPI6CP.js} +1 -1
  62. package/{chunk-N5424GSW.js → chunk-YJKXGHJ6.js} +1 -1
  63. package/chunk-ZHXJ6M7T.js +27 -0
  64. package/{chunk-6565R2TI.js → chunk-ZOQNJXMS.js} +23 -18
  65. package/{createAgentAutomationAction-TS6NNZ4X.js → createAgentAutomationAction-OARFMDWU.js} +13 -13
  66. package/{createDialogAction-5HVQ33EX.js → createDialogAction-4E6ALCDK.js} +14 -14
  67. package/{createPageAction-4F3ZGQJD.js → createPageAction-RS65DDRX.js} +13 -13
  68. package/{dbSlice-OP6UPXKA.js → dbSlice-7KQH6GOU.js} +2 -2
  69. package/{dialogCommands-3GEPXHFB.js → dialogCommands-DFY5HJ6M.js} +19 -18
  70. package/{dialogSlice-FAWUQDJW.js → dialogSlice-MS7OYWHW.js} +13 -13
  71. package/{docCreateCommands-ZE3S6BCP.js → docCreateCommands-5L76YTI2.js} +18 -17
  72. package/{docDeleteCommands-TW6PGTRT.js → docDeleteCommands-3GASP3VR.js} +19 -18
  73. package/{docReadCommands-LDXL3B6J.js → docReadCommands-ALA77AZM.js} +18 -17
  74. package/{docStore-2UHVWLTV.js → docStore-KYTKNGMU.js} +14 -14
  75. package/{docUpdateCommands-GYD6XI5O.js → docUpdateCommands-6AZGXE5M.js} +18 -17
  76. package/{getPricing-UGDJHI7M.js → getPricing-RYY6OBA4.js} +4 -4
  77. package/{handleSendMessageAction-LJPUYNOH.js → handleSendMessageAction-LHTGYRMN.js} +201 -15
  78. package/index.js +47 -47
  79. package/{machineCommands-OKNDYS3M.js → machineCommands-RDQQBA72.js} +33 -32
  80. package/{machineWsRunDispatch-ZX5AJ6FJ.js → machineWsRunDispatch-27RCTQQF.js} +33 -32
  81. package/{models-LSCRJJ6P.js → models-5K5G2CZI.js} +2 -2
  82. package/package.json +1 -1
  83. package/{read-HXHAZBKH.js → read-CN3TNXIP.js} +1 -1
  84. package/{readDocTool-VPBDTO4G.js → readDocTool-WF3675ED.js} +1 -1
  85. package/{readlineWorkspace-MB3ANKHM.js → readlineWorkspace-BTONC7NW.js} +177 -76
  86. package/{removeDialogAgentAction-HUFVN35S.js → removeDialogAgentAction-YDHBFEGI.js} +5 -5
  87. package/{runAgentClientLoop-A75BUU6D.js → runAgentClientLoop-Q4CL22BP.js} +26 -25
  88. package/{setDialogExtraReferencesAction-2VLGWQKG.js → setDialogExtraReferencesAction-LR6MSIXO.js} +2 -2
  89. package/{setPrimaryDialogAgentAction-VB4UV2CC.js → setPrimaryDialogAgentAction-IIVDCY5C.js} +5 -5
  90. package/{settingSlice-7JYPQNAC.js → settingSlice-O23YDK2O.js} +3 -3
  91. package/{spaceCommands-O3KJNCON.js → spaceCommands-AB2D7A2R.js} +18 -17
  92. package/{spaceSlice-444MFUP6.js → spaceSlice-XLJ4DRG6.js} +13 -13
  93. package/{streamAgentChatTurn-DJAE7USZ.js → streamAgentChatTurn-YYAAGLZL.js} +30 -32
  94. package/{tools-YB6LXSVN.js → tools-5UKY65R3.js} +20 -20
  95. package/{tuiSummaryLlmCaller-QQL3JA5I.js → tuiSummaryLlmCaller-VUNVBRX3.js} +7 -6
  96. package/{updateDialogTitleAction-6HGFBM64.js → updateDialogTitleAction-VNSUVPUZ.js} +13 -13
  97. package/chunk-BYXBJQAS.js +0 -0
@@ -8,21 +8,21 @@ import {
8
8
  import {
9
9
  sortSafeAgentSummaries,
10
10
  toSafeAgentSummary
11
- } from "./chunk-OOIN7HSO.js";
11
+ } from "./chunk-XJITGCTM.js";
12
12
  import {
13
13
  getUserDataItemTimestamp,
14
14
  mergeAndDedupUserData
15
15
  } from "./chunk-KQHGZWSV.js";
16
16
  import {
17
17
  createDocState
18
- } from "./chunk-O53CP2QR.js";
18
+ } from "./chunk-LCMAJFAD.js";
19
19
  import {
20
20
  readDocFunc,
21
21
  readDocFunctionSchema,
22
22
  readPageFunc,
23
23
  readPageFunctionSchema,
24
24
  slateToSimplifiedMarkdown
25
- } from "./chunk-U7LEGLEB.js";
25
+ } from "./chunk-6N4KODMN.js";
26
26
  import {
27
27
  markdownToSlate
28
28
  } from "./chunk-3LY4F7SV.js";
@@ -37,7 +37,7 @@ import {
37
37
  } from "./chunk-VF4K2QE6.js";
38
38
  import {
39
39
  createDialogAction
40
- } from "./chunk-Z24FGIU2.js";
40
+ } from "./chunk-R4L524UB.js";
41
41
  import {
42
42
  buildSkillDocMarkdown,
43
43
  normalizeSkillBudgetTier,
@@ -76,13 +76,13 @@ import {
76
76
  updateContentCategory,
77
77
  updateContentTitle,
78
78
  updateStep
79
- } from "./chunk-YNHQIXX5.js";
79
+ } from "./chunk-CXM4IIUF.js";
80
80
  import {
81
81
  createAgent,
82
82
  runLlm,
83
83
  streamAgentChatTurn,
84
84
  updateAgent
85
- } from "./chunk-OQMPU2ML.js";
85
+ } from "./chunk-2OUI4TLC.js";
86
86
  import {
87
87
  NOLO_WORKSPACE_TOOL_NAMES,
88
88
  buildNoloSubjectRefQueryTarget,
@@ -98,13 +98,13 @@ import {
98
98
  redactAgentRecordForWorkspaceTool,
99
99
  resolveNoloDialogInput,
100
100
  verifyNoloDialogSubjectRefQuery
101
- } from "./chunk-B4KT7RN2.js";
101
+ } from "./chunk-JTMNCCWF.js";
102
102
  import {
103
103
  buildDatabaseFileContentUrl
104
- } from "./chunk-4QQFLN5C.js";
104
+ } from "./chunk-OVBVEXZ7.js";
105
105
  import {
106
106
  DEFAULT_MODEL
107
- } from "./chunk-OGGHETUE.js";
107
+ } from "./chunk-HQPG2PIV.js";
108
108
  import {
109
109
  ToolApiError,
110
110
  buildToolRequestHeaders,
@@ -130,7 +130,7 @@ import {
130
130
  } from "./chunk-HNMXYYJR.js";
131
131
  import {
132
132
  shareResourceAction
133
- } from "./chunk-N5424GSW.js";
133
+ } from "./chunk-YJKXGHJ6.js";
134
134
  import {
135
135
  AGENT_UPDATE_FIELD_NAMES,
136
136
  SYSTEM_AGENT_CAPABILITIES,
@@ -139,7 +139,7 @@ import {
139
139
  selectAutoApproveSelfUpdateFields,
140
140
  selectCurrentServer,
141
141
  selectSyncServers
142
- } from "./chunk-TTGAVETO.js";
142
+ } from "./chunk-EABWT43X.js";
143
143
  import {
144
144
  asRecordOrEmpty
145
145
  } from "./chunk-KX6YBIHG.js";
@@ -147,7 +147,7 @@ import {
147
147
  addContentAction,
148
148
  createSpaceKey,
149
149
  normalizeSpaceId
150
- } from "./chunk-XVP3C2KY.js";
150
+ } from "./chunk-IWLUTMYX.js";
151
151
  import {
152
152
  patch,
153
153
  read,
@@ -155,7 +155,7 @@ import {
155
155
  readAndWaitAction,
156
156
  toTimestampMs,
157
157
  write
158
- } from "./chunk-SFXYKGK2.js";
158
+ } from "./chunk-3S2VOMIF.js";
159
159
  import {
160
160
  SEPARATOR,
161
161
  createAgentKey,
@@ -180,7 +180,7 @@ import {
180
180
  } from "./chunk-QSJ3HFEF.js";
181
181
  import {
182
182
  readAction
183
- } from "./chunk-VPTJB4HM.js";
183
+ } from "./chunk-XPC5C7BK.js";
184
184
  import {
185
185
  createAsyncThunk,
186
186
  getRuntimeServerContext,
@@ -992,7 +992,7 @@ var ai_locale_default = {
992
992
  params: {
993
993
  name: "The name of the Agent, e.g., 'Meeting Minutes Assistant'.",
994
994
  model: "The model name to use. Logic: Default 'nolo/glm-5.2'. Complex tasks: 'openai/gpt-5.2'. Cost-saving: 'openai/gpt-5.1'. Aesthetic/Creative: 'gemini-3.6-flash'. Reliable low-cost summary/reasoning: 'deepseek-v4-pro'. Image Generation: 'gemini-3-pro-image-preview' (Best/Expensive), 'gemini-3.1-flash-image-preview' (Ordinary), or 'gemini-3.1-flash-lite-image' (Fastest/Cheapest).",
995
- provider: "The model provider identifier, must match the selected model, e.g., 'openrouter', 'deepseek', 'fireworks', 'mistral', etc.",
995
+ provider: "The model provider identifier, must match the selected model, e.g., 'openrouter', 'nolo', 'fireworks', 'mistral', etc.",
996
996
  prompt: "System prompt/instruction describing the Agent's role, tone, and usage.",
997
997
  introduction: "Introduction displayed in the app market or list, explanatory text for end users.",
998
998
  greeting: {
@@ -1381,7 +1381,7 @@ var ai_locale_default = {
1381
1381
  params: {
1382
1382
  name: "Agent \u7684\u540D\u79F0\uFF0C\u4F8B\u5982\uFF1A'\u4F1A\u8BAE\u7EAA\u8981\u52A9\u624B'\u3002",
1383
1383
  model: "\u9ED8\u8BA4\u4F7F\u7528 'nolo/glm-5.2'\u3002\u590D\u6742\u4EFB\u52A1: 'openai/gpt-5.2'\u3002\u7701\u6210\u672C\u4F46\u590D\u6742: 'openai/gpt-5.1'\u3002\u8FFD\u6C42\u7F8E\u89C2/\u521B\u610F: 'gemini-3.6-flash'\u3002\u4F4E\u6210\u672C\u6458\u8981/\u63A8\u7406: 'deepseek-v4-pro'\u3002\u751F\u6210\u56FE\u7247: \u8D35/\u9AD8\u8D28\u91CF\u9009 'gemini-3-pro-image-preview'\uFF0C\u666E\u901A\u9009 'gemini-3.1-flash-image-preview'\uFF0C\u6700\u5FEB\u6700\u4FBF\u5B9C\u9009 'gemini-3.1-flash-lite-image'\u3002",
1384
- provider: "\u6A21\u578B\u63D0\u4F9B\u65B9\u6807\u8BC6\uFF0C\u5FC5\u987B\u4E0E\u6240\u9009\u6A21\u578B\u76F8\u5339\u914D\uFF0C\u4F8B\u5982 'openrouter'\u3001'deepseek'\u3001'fireworks'\u3001'mistral' \u7B49\u3002",
1384
+ provider: "\u6A21\u578B\u63D0\u4F9B\u65B9\u6807\u8BC6\uFF0C\u5FC5\u987B\u4E0E\u6240\u9009\u6A21\u578B\u76F8\u5339\u914D\uFF0C\u4F8B\u5982 'openrouter'\u3001'nolo'\u3001'fireworks'\u3001'mistral' \u7B49\u3002",
1385
1385
  prompt: "\u7CFB\u7EDF\u63D0\u793A\u8BCD / \u6307\u4EE4\uFF0C\u63CF\u8FF0\u8FD9\u4E2A Agent \u7684\u89D2\u8272\u3001\u8BED\u6C14\u548C\u4F7F\u7528\u65B9\u5F0F\u3002",
1386
1386
  introduction: "\u5728\u5E94\u7528\u5E02\u573A\u6216\u5217\u8868\u4E2D\u5C55\u793A\u7684\u7B80\u4ECB\uFF0C\u9762\u5411\u7EC8\u7AEF\u7528\u6237\u7684\u8BF4\u660E\u6587\u6848\u3002",
1387
1387
  greeting: {
@@ -11483,7 +11483,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11483
11483
  workspace: { mode: "lease" }
11484
11484
  };
11485
11485
  var findModelConfig = async (modelName, provider) => {
11486
- const { ALL_MODELS } = await import("./models-LSCRJJ6P.js");
11486
+ const { ALL_MODELS } = await import("./models-5K5G2CZI.js");
11487
11487
  const name = toTrimmedString(modelName);
11488
11488
  const prov = toTrimmedString(provider ?? "");
11489
11489
  if (!name) return null;
@@ -11724,7 +11724,7 @@ var buildFormDataFromArgs = async (args) => {
11724
11724
  const trimmedModel = toTrimmedString(model);
11725
11725
  const trimmedProvider = toTrimmedString(provider);
11726
11726
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
11727
- const { getModelPricing } = await import("./getPricing-UGDJHI7M.js");
11727
+ const { getModelPricing } = await import("./getPricing-RYY6OBA4.js");
11728
11728
  const normalizedTools = tools ?? [];
11729
11729
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
11730
11730
  const formData = {
@@ -14154,7 +14154,7 @@ async function deleteDialogsFunc(args, thunkApi) {
14154
14154
  const deletedDialogIds = [];
14155
14155
  const deletedDialogKeys = [];
14156
14156
  const failures = [];
14157
- const { deleteDialog } = await import("./dialogSlice-FAWUQDJW.js");
14157
+ const { deleteDialog } = await import("./dialogSlice-MS7OYWHW.js");
14158
14158
  for (const target of targets) {
14159
14159
  try {
14160
14160
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -14220,10 +14220,11 @@ function formatAgentListCard(agents, maxDisplay = 20) {
14220
14220
  const visible = agents.slice(0, maxDisplay);
14221
14221
  for (const agent of visible) {
14222
14222
  const star = agent.isFavorite ? "\u2605" : " ";
14223
+ const own = agent.isOwned ? "\u25CE" : " ";
14223
14224
  const name = agent.name || "(unnamed)";
14224
14225
  const model = agent.model || "\u2014";
14225
14226
  const source = agent.apiSource || agent.provider || agent.cliProvider || "\u2014";
14226
- lines.push(`${star} ${name} ${model} ${source}`);
14227
+ lines.push(`${star}${own} ${name} ${model} ${source}`);
14227
14228
  }
14228
14229
  if (total > maxDisplay) {
14229
14230
  lines.push(`\u2026 +${total - maxDisplay} more`);
@@ -14281,11 +14282,14 @@ async function listAgentsFunc(args, thunkApi) {
14281
14282
  }
14282
14283
  var readAgentFunctionSchema = {
14283
14284
  name: "readAgent",
14284
- description: "Read one Nolo agent config.",
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.",
14285
14286
  parameters: {
14286
14287
  type: "object",
14287
14288
  properties: {
14288
- agent: { type: "string", description: "Agent key, id, alias, or URL." }
14289
+ agent: {
14290
+ type: "string",
14291
+ description: "Agent dbKey (e.g. agent-xxx), agent id, alias, or agent URL."
14292
+ }
14289
14293
  },
14290
14294
  required: ["agent"]
14291
14295
  }
@@ -14418,7 +14422,7 @@ var readSkillDocFunctionSchema = {
14418
14422
  }
14419
14423
  };
14420
14424
  async function readSkillDocFunc(args, thunkApi) {
14421
- const { buildReadDocResult } = await import("./readDocTool-VPBDTO4G.js");
14425
+ const { buildReadDocResult } = await import("./readDocTool-WF3675ED.js");
14422
14426
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
14423
14427
  if (typeof id !== "string" || !id.trim()) {
14424
14428
  throw new Error("readSkillDoc requires id or doc.");
@@ -19868,7 +19872,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
19868
19872
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
19869
19873
  async function addImageContentToSpace(input) {
19870
19874
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
19871
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-QDGHGUBH.js")).addContentAction;
19875
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-AQXEYRBE.js")).addContentAction;
19872
19876
  await addContentAction2(
19873
19877
  {
19874
19878
  spaceId: input.spaceId,
@@ -21935,6 +21939,7 @@ var DEFAULT_LABELS = {
21935
21939
  runStatus: "Run status",
21936
21940
  runStarted: "Run started",
21937
21941
  runStopped: "Run stopped",
21942
+ runFinished: "Run finished",
21938
21943
  logTail: "Log tail:",
21939
21944
  runs: (count) => `Runs (${count})`
21940
21945
  };
@@ -21943,48 +21948,136 @@ function resolveLabels(labels) {
21943
21948
  runStatus: labels?.runStatus ?? DEFAULT_LABELS.runStatus,
21944
21949
  runStarted: labels?.runStarted ?? DEFAULT_LABELS.runStarted,
21945
21950
  runStopped: labels?.runStopped ?? DEFAULT_LABELS.runStopped,
21951
+ runFinished: labels?.runFinished ?? DEFAULT_LABELS.runFinished,
21946
21952
  logTail: labels?.logTail ?? DEFAULT_LABELS.logTail,
21947
21953
  runs: labels?.runs ?? DEFAULT_LABELS.runs
21948
21954
  };
21949
21955
  }
21956
+ function shortRunId(runId) {
21957
+ const trimmed = typeof runId === "string" ? runId.trim() : "";
21958
+ if (!trimmed) return "";
21959
+ const segments = trimmed.split("-").filter(Boolean);
21960
+ let pick = segments[segments.length - 1] ?? trimmed;
21961
+ if (pick.length < 4 && segments.length >= 2) pick = segments.slice(-2).join("-");
21962
+ if (!pick) pick = trimmed;
21963
+ return pick.length > 8 ? pick.slice(-8) : pick;
21964
+ }
21965
+ function clipText(text, max) {
21966
+ const collapsed = text.replace(/\s+/g, " ").trim();
21967
+ return collapsed.length > max ? `${collapsed.slice(0, max - 1)}\u2026` : collapsed;
21968
+ }
21969
+ function formatDuration(ms) {
21970
+ const totalSec = Math.max(0, Math.floor(ms / 1e3));
21971
+ if (totalSec < 60) return `${totalSec}s`;
21972
+ const totalMin = Math.floor(totalSec / 60);
21973
+ if (totalMin < 60) return `${totalMin}m${String(totalSec % 60).padStart(2, "0")}s`;
21974
+ return `${Math.floor(totalMin / 60)}h${String(totalMin % 60).padStart(2, "0")}m`;
21975
+ }
21976
+ function formatRunAge(timing, now = Date.now()) {
21977
+ const startedAt = timing?.startedAt;
21978
+ if (typeof startedAt !== "number" || !Number.isFinite(startedAt) || startedAt <= 0) {
21979
+ return "";
21980
+ }
21981
+ const end = typeof timing?.finishedAt === "number" && Number.isFinite(timing.finishedAt) && timing.finishedAt > 0 ? timing.finishedAt : now;
21982
+ return formatDuration(end - startedAt);
21983
+ }
21984
+ function formatIdentityRow(agentName, runId) {
21985
+ const parts = [];
21986
+ if (!isAgentNameFallback(agentName)) parts.push(agentName);
21987
+ const short = shortRunId(runId);
21988
+ if (short) parts.push(`#${short}`);
21989
+ return parts.join(" ");
21990
+ }
21950
21991
  function isAgentNameFallback(agentName) {
21951
21992
  const trimmed = typeof agentName === "string" ? agentName.trim() : "";
21952
21993
  return !trimmed || trimmed === "agent";
21953
21994
  }
21954
- function formatStartRunCard(agentName, status = "running", labels) {
21955
- const L = resolveLabels(labels);
21995
+ function resolveRunLabel(run) {
21996
+ for (const candidate of [run.agentName, run.name, run.agentKey, run.runId]) {
21997
+ if (typeof candidate === "string" && !isAgentNameFallback(candidate)) {
21998
+ return candidate.trim();
21999
+ }
22000
+ }
22001
+ return "agent";
22002
+ }
22003
+ function formatStartRunCard(agentName, status = "running", opts) {
22004
+ const L = resolveLabels(opts?.labels);
21956
22005
  const icon = getAgentRunStatusIcon(status);
21957
22006
  const lines = [L.runStarted];
21958
- if (!isAgentNameFallback(agentName)) {
21959
- lines.push(` agent ${agentName}`);
22007
+ const identity = formatIdentityRow(agentName, opts?.runId);
22008
+ if (identity) {
22009
+ lines.push(` agent ${identity}`);
21960
22010
  }
21961
22011
  lines.push(` status ${icon} ${status}`);
22012
+ const task = opts?.task?.trim();
22013
+ if (task) {
22014
+ lines.push(` task ${clipText(task, TASK_PREVIEW_MAX)}`);
22015
+ }
21962
22016
  return lines.join("\n");
21963
22017
  }
22018
+ var TASK_PREVIEW_MAX = 72;
22019
+ var NOTE_PREVIEW_MAX = 72;
22020
+ function formatProgressRow(toolCallCount, lastToolNames) {
22021
+ const parts = [];
22022
+ if (typeof toolCallCount === "number" && Number.isFinite(toolCallCount)) {
22023
+ parts.push(`${toolCallCount} tools`);
22024
+ }
22025
+ if (lastToolNames && lastToolNames.length > 0) {
22026
+ parts.push(lastToolNames.join(", "));
22027
+ }
22028
+ return parts.join(" \xB7 ");
22029
+ }
21964
22030
  function formatStatusRunCard(agentName, status = "running", opts) {
21965
22031
  const L = resolveLabels(opts?.labels);
21966
22032
  const icon = getAgentRunStatusIcon(status);
21967
- const lines = [L.runStatus, ` ${icon} ${status}`];
21968
- if (!isAgentNameFallback(agentName)) {
21969
- lines.push(` agent ${agentName}`);
22033
+ const age = formatRunAge(opts?.timing, opts?.now);
22034
+ const lines = [L.runStatus, ` ${icon} ${status}${age ? ` ${age}` : ""}`];
22035
+ const identity = formatIdentityRow(agentName, opts?.runId);
22036
+ if (identity) {
22037
+ lines.push(` agent ${identity}`);
21970
22038
  }
21971
- if (opts?.pollCount !== void 0 && opts.pollCount > 0) {
21972
- lines.push(` polls ${opts.pollCount}`);
22039
+ const progress = formatProgressRow(opts?.toolCallCount, opts?.lastToolNames);
22040
+ if (progress) {
22041
+ lines.push(` tools ${progress}`);
21973
22042
  }
21974
- if (typeof opts?.elapsedMs === "number" && Number.isFinite(opts.elapsedMs)) {
21975
- lines.push(` last ${Math.round(opts.elapsedMs)}ms`);
22043
+ const note = opts?.lastAssistantText?.trim();
22044
+ if (note) {
22045
+ lines.push(` note ${clipText(note, NOTE_PREVIEW_MAX)}`);
21976
22046
  }
21977
- if (opts?.lastToolNames && opts.lastToolNames.length > 0) {
21978
- lines.push(` lastTools ${opts.lastToolNames.join(", ")}`);
22047
+ if (opts?.errorMessage?.trim()) {
22048
+ lines.push(` error ${opts.errorMessage.trim()}`);
21979
22049
  }
21980
- if (opts?.toolCallCount !== void 0) {
21981
- lines.push(` toolCalls ${opts.toolCallCount}`);
22050
+ if (shouldShowLogTail(status, opts?.includeLogTail, opts?.logLines)) {
22051
+ lines.push("", L.logTail, ...opts.logLines.map((l) => ` ${l}`));
22052
+ }
22053
+ return lines.join("\n");
22054
+ }
22055
+ function runShowsLogTail(status) {
22056
+ return status === "failed" || status === "timeout";
22057
+ }
22058
+ function shouldShowLogTail(status, includeLogTail, logLines) {
22059
+ if (includeLogTail === false) return false;
22060
+ if (!logLines || logLines.length === 0) return false;
22061
+ return runShowsLogTail(status);
22062
+ }
22063
+ function formatFinishedRunCard(agentName, status, opts) {
22064
+ const L = resolveLabels(opts?.labels);
22065
+ const icon = getAgentRunStatusIcon(status);
22066
+ const age = formatRunAge(opts?.timing, opts?.now);
22067
+ const summary = [status, age, formatProgressRow(opts?.toolCallCount, opts?.lastToolNames)].filter(Boolean).join(" \xB7 ");
22068
+ const lines = [L.runFinished, ` ${icon} ${summary}`];
22069
+ const identity = formatIdentityRow(agentName, opts?.runId);
22070
+ if (identity) {
22071
+ lines.push(` agent ${identity}`);
22072
+ }
22073
+ const note = opts?.lastAssistantText?.trim();
22074
+ if (note) {
22075
+ lines.push(` note ${clipText(note, NOTE_PREVIEW_MAX)}`);
21982
22076
  }
21983
22077
  if (opts?.errorMessage?.trim()) {
21984
22078
  lines.push(` error ${opts.errorMessage.trim()}`);
21985
22079
  }
21986
- const includeLog = opts?.includeLogTail !== false;
21987
- if (includeLog && opts?.logLines && opts.logLines.length > 0) {
22080
+ if (shouldShowLogTail(status, opts?.includeLogTail, opts?.logLines)) {
21988
22081
  lines.push("", L.logTail, ...opts.logLines.map((l) => ` ${l}`));
21989
22082
  }
21990
22083
  return lines.join("\n");
@@ -22001,8 +22094,7 @@ function formatListRunsCard(runs, labels) {
22001
22094
  for (const run of runs) {
22002
22095
  const status = run.status ?? "\u2014";
22003
22096
  const icon = getAgentRunStatusIcon(status);
22004
- const name = run.agentName || run.name || "agent";
22005
- lines.push(` ${icon} ${name}`);
22097
+ lines.push(` ${icon} ${resolveRunLabel(run)}`);
22006
22098
  }
22007
22099
  return lines.join("\n");
22008
22100
  }
@@ -22031,7 +22123,7 @@ var startAgentRunFunctionSchema = {
22031
22123
  properties: {
22032
22124
  agentKey: {
22033
22125
  type: "string",
22034
- description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF08\u4F18\u5148\u4F7F\u7528 readAgent \u8FD4\u56DE\u7684 agentKey\uFF0C\u683C\u5F0F\u5982 agent-xxx\uFF09\u3002\u5982\u679C\u5DF2\u901A\u8FC7 listAgents/readAgent \u83B7\u53D6\u540D\u79F0\uFF0C\u8BF7\u540C\u65F6\u4F20 agentName\u3002"
22126
+ 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"
22035
22127
  },
22036
22128
  task: {
22037
22129
  type: "string",
@@ -22076,14 +22168,21 @@ async function startAgentRunFunc(args, thunkApi, _context) {
22076
22168
  ).unwrap();
22077
22169
  const runId = bgResult.dialogId;
22078
22170
  const status = bgResult.status ?? "pending";
22079
- const displayName = agentName?.trim() || bgResult.agentName || bgResult.name || "agent";
22171
+ const resolvedName = agentName?.trim() || bgResult.agentName || bgResult.name;
22172
+ const identity = { agentName: resolvedName, agentKey, runId };
22173
+ const taskPreview = task.replace(/\s+/g, " ").trim().slice(0, TASK_PREVIEW_MAX);
22080
22174
  return {
22081
22175
  rawData: {
22082
22176
  runId,
22083
22177
  status,
22084
- ...displayName !== "agent" ? { agentName: displayName } : {}
22178
+ agentKey,
22179
+ ...resolvedName ? { agentName: resolvedName } : {},
22180
+ ...taskPreview ? { taskPreview } : {}
22085
22181
  },
22086
- displayData: formatStartRunCard(displayName, status)
22182
+ displayData: formatStartRunCard(resolveRunLabel(identity), status, {
22183
+ task: taskPreview,
22184
+ runId
22185
+ })
22087
22186
  };
22088
22187
  } catch (e) {
22089
22188
  throw new Error(`startAgentRun \u542F\u52A8 Agent [${agentKey}] \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -22179,13 +22278,16 @@ async function handleStatus(thunkApi, opts) {
22179
22278
  }
22180
22279
  const run = resData.run;
22181
22280
  const logLines = resData.logLines;
22182
- const name = run.agentName || run.name || "agent";
22281
+ const name = resolveRunLabel(run);
22183
22282
  return {
22184
22283
  rawData: { found: true, ...run, ...logLines ? { logLines } : {} },
22185
22284
  displayData: formatStatusRunCard(name, run.status, {
22285
+ runId: opts.runId,
22186
22286
  lastToolNames: run.lastToolNames,
22187
22287
  toolCallCount: run.toolCallCount,
22288
+ lastAssistantText: run.lastAssistantText,
22188
22289
  errorMessage: run.errorMessage,
22290
+ timing: { startedAt: run.startedAt, finishedAt: run.finishedAt },
22189
22291
  logLines
22190
22292
  })
22191
22293
  };
@@ -23404,7 +23506,7 @@ var executeToolRun = createAsyncThunk(
23404
23506
  if (!executionInput) {
23405
23507
  throw new Error(`ToolRun ${id} has no input to execute with.`);
23406
23508
  }
23407
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-YB6LXSVN.js");
23509
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-5UKY65R3.js");
23408
23510
  const { executor } = findToolExecutor2(run.toolName);
23409
23511
  toolRunStarted({
23410
23512
  id: run.id,
@@ -23428,7 +23530,7 @@ var executeToolRun = createAsyncThunk(
23428
23530
  const latestState = thunkApi.getState();
23429
23531
  const userId = latestState.auth?.currentUser?.userId;
23430
23532
  if (userId) {
23431
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-444MFUP6.js");
23533
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-XLJ4DRG6.js");
23432
23534
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
23433
23535
  }
23434
23536
  }
@@ -25911,7 +26013,7 @@ async function updateDocFunc(args, thunkApi) {
25911
26013
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
25912
26014
  };
25913
26015
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
25914
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-2UHVWLTV.js");
26016
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-KYTKNGMU.js");
25915
26017
  if (getDocState().pageKey === id) {
25916
26018
  applyExternalDocUpdate({
25917
26019
  slateData: finalSlateData,
@@ -25936,7 +26038,7 @@ async function updateDocFunc(args, thunkApi) {
25936
26038
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
25937
26039
  async function dispatchSetSettings(thunkApi, changes) {
25938
26040
  const injectedSetSettings = thunkApi?.extra?.setSettings;
25939
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-7JYPQNAC.js")).setSettings;
26041
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-O23YDK2O.js")).setSettings;
25940
26042
  await thunkApi.dispatch(setSettings(changes)).unwrap();
25941
26043
  }
25942
26044
  var updateUserPreferenceProfileFunctionSchema = {
@@ -27353,7 +27455,7 @@ var baseToolDefinitions = [
27353
27455
  executor: readAgentFunc,
27354
27456
  description: {
27355
27457
  name: "readAgent",
27356
- description: "Read a Nolo agent config.",
27458
+ description: "Read a Nolo agent's full config and resolve its runnable agentKey.",
27357
27459
  category: "Nolo workspace"
27358
27460
  },
27359
27461
  behavior: "data",
@@ -28177,8 +28279,16 @@ export {
28177
28279
  readXPostFunc,
28178
28280
  readXhsProfileFunctionSchema,
28179
28281
  readXhsProfileFunc,
28282
+ getAgentRunStatusIcon,
28283
+ shortRunId,
28284
+ formatRunAge,
28285
+ isAgentNameFallback,
28286
+ resolveRunLabel,
28180
28287
  formatStartRunCard,
28288
+ TASK_PREVIEW_MAX,
28181
28289
  formatStatusRunCard,
28290
+ runShowsLogTail,
28291
+ formatFinishedRunCard,
28182
28292
  formatStopRunCard,
28183
28293
  formatListRunsCard,
28184
28294
  formatNotFoundRunCard,
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  isImageUrlPart
3
- } from "./chunk-HRQCKQA5.js";
3
+ } from "./chunk-KFEVY3ST.js";
4
4
  import {
5
5
  canonicalizeToolNames
6
- } from "./chunk-B4KT7RN2.js";
6
+ } from "./chunk-JTMNCCWF.js";
7
7
  import {
8
8
  asTrimmedLowercaseString
9
9
  } from "./chunk-QSJ3HFEF.js";
@@ -15,7 +15,7 @@ import {
15
15
  platformHostedModels,
16
16
  xaiModels,
17
17
  zaiModels
18
- } from "./chunk-524BDL33.js";
18
+ } from "./chunk-O6W2O2DA.js";
19
19
  import {
20
20
  __export
21
21
  } from "./chunk-4VNS5WPM.js";
@@ -78,6 +78,45 @@ var anthropicModels = [
78
78
  }
79
79
  ];
80
80
 
81
+ // packages/integrations/anthropic/anthropicOAuthModels.ts
82
+ var oauthModel = ({ name, displayName, contextWindow, thinkingMode, maxOutputTokens }) => ({
83
+ name,
84
+ displayName,
85
+ hasVision: true,
86
+ description: `OAuth \u8BA2\u9605\u6A21\u578B\uFF08${displayName}\uFF0C${thinkingMode === "adaptive" ? "Adaptive thinking" : "Extended thinking"}\uFF09`,
87
+ contextWindow,
88
+ ...maxOutputTokens ? { maxOutputTokens } : {},
89
+ supportsReasoningEffort: true,
90
+ price: { input: 0, output: 0 }
91
+ });
92
+ var anthropicOAuthModels = [
93
+ // 5 代(1M + Adaptive thinking always-on;官方 max output 128k)
94
+ oauthModel({ name: "claude-fable-5", displayName: "Claude Fable 5", contextWindow: 1e6, thinkingMode: "adaptive", maxOutputTokens: 128e3 }),
95
+ oauthModel({ name: "claude-opus-5", displayName: "Claude Opus 5", contextWindow: 1e6, thinkingMode: "adaptive", maxOutputTokens: 128e3 }),
96
+ oauthModel({ name: "claude-sonnet-5", displayName: "Claude Sonnet 5", contextWindow: 1e6, thinkingMode: "adaptive", maxOutputTokens: 128e3 }),
97
+ // 4.6/4.7/4.8 系(Adaptive thinking;context 官方未单列,参照 fuzzy claude-4.6→1M)
98
+ oauthModel({ name: "claude-opus-4-8", displayName: "Claude Opus 4.8", contextWindow: 1e6, thinkingMode: "adaptive" }),
99
+ oauthModel({ name: "claude-opus-4-7", displayName: "Claude Opus 4.7", contextWindow: 1e6, thinkingMode: "adaptive" }),
100
+ oauthModel({ name: "claude-sonnet-4-6", displayName: "Claude Sonnet 4.6", contextWindow: 1e6, thinkingMode: "adaptive" }),
101
+ oauthModel({ name: "claude-opus-4-6", displayName: "Claude Opus 4.6", contextWindow: 1e6, thinkingMode: "adaptive" }),
102
+ // 4.5 系(Extended thinking;官方发布规格 1M)
103
+ oauthModel({ name: "claude-opus-4-5-20251101", displayName: "Claude Opus 4.5", contextWindow: 1e6, thinkingMode: "extended" }),
104
+ oauthModel({ name: "claude-sonnet-4-5-20250929", displayName: "Claude Sonnet 4.5", contextWindow: 1e6, thinkingMode: "extended" }),
105
+ // haiku-4-5(官方明确 context=200k + Extended thinking)
106
+ oauthModel({ name: "claude-haiku-4-5-20251001", displayName: "Claude Haiku 4.5", contextWindow: 2e5, thinkingMode: "extended" })
107
+ ];
108
+ var OAUTH_MODEL_THINKING_MODE = new Map(
109
+ anthropicOAuthModels.map((m) => [m.name, m.thinkingMode])
110
+ );
111
+ function isAdaptiveThinkingModelId(model) {
112
+ if (!model) return false;
113
+ const tableMode = OAUTH_MODEL_THINKING_MODE.get(model);
114
+ if (tableMode === "adaptive") return true;
115
+ if (tableMode === "extended") return false;
116
+ const n = model.toLowerCase();
117
+ return n.includes("fable-5") || n.includes("opus-5") || n.includes("sonnet-5") || n.includes("opus-4-8") || n.includes("opus-4-7") || n.includes("sonnet-4-6") || n.includes("opus-4-6");
118
+ }
119
+
81
120
  // packages/integrations/qwen/models.ts
82
121
  var qwenModels = [
83
122
  // ── Qwen3 旗舰 ──
@@ -402,21 +441,6 @@ var moonshotModels = [
402
441
  price: { input: 0.6 * 7, output: 2.4 * 7 },
403
442
  provider: "moonshot",
404
443
  description: "Moonshot \u9AD8\u6027\u80FD\u901A\u7528\u6A21\u578B\u3002"
405
- },
406
- // ── 编程 ──
407
- {
408
- name: "kimi-k2.7-code",
409
- displayName: "Kimi K2.7 Code",
410
- hasVision: false,
411
- contextWindow: 262144,
412
- maxOutputTokens: 262144,
413
- jsonOutput: true,
414
- fnCall: true,
415
- supportsTool: true,
416
- supportsReasoningEffort: true,
417
- price: { input: 1.2 * 7, output: 4.8 * 7 },
418
- provider: "moonshot",
419
- description: "Moonshot \u7F16\u7A0B\u4F18\u5316\u6A21\u578B\uFF0C\u9002\u5408\u4EE3\u7801\u751F\u6210\u4E0E Agent \u7F16\u7A0B\u3002"
420
444
  }
421
445
  ];
422
446
  var kimiCodeModels = [
@@ -4545,6 +4569,9 @@ var NEVER = INVALID;
4545
4569
  var PROVIDER_REASONING_EFFORT_VALUES = {
4546
4570
  openai: ["none", "minimal", "low", "medium", "high", "xhigh", "max"],
4547
4571
  deepseek: ["low", "high", "max"],
4572
+ // nolo (Ollama Cloud) 支持 DeepSeek/Kimi/GLM 等 thinking 模型,
4573
+ // reasoning_effort 通过 OpenAI 兼容端点透传到 Ollama Cloud。
4574
+ nolo: ["low", "high", "max"],
4548
4575
  xai: ["low", "medium", "high"],
4549
4576
  grok: ["low", "medium", "high"],
4550
4577
  // none:关闭思考;必须保留,否则上游 clamp 会把 none 抬成 low,
@@ -4695,7 +4722,7 @@ var MODEL_MAP = {
4695
4722
  moonshot: moonshotAllModels
4696
4723
  };
4697
4724
  var MODEL_LOOKUP_MAP = {
4698
- anthropic: anthropicModels,
4725
+ anthropic: [...anthropicModels, ...anthropicOAuthModels],
4699
4726
  xai: xaiModels,
4700
4727
  ...MODEL_MAP
4701
4728
  };
@@ -4789,8 +4816,9 @@ var API_ENDPOINTS = {
4789
4816
  default: "https://api.x.ai/v1/chat/completions"
4790
4817
  },
4791
4818
  deepseek: {
4792
- default: "https://api.deepseek.com/chat/completions",
4793
- responses: "https://api.deepseek.com/v1/responses"
4819
+ // No `responses` entry: the official DeepSeek provider was retired and no
4820
+ // deepseek model declares endpointKey "responses", so it was unreachable.
4821
+ default: "https://api.deepseek.com/chat/completions"
4794
4822
  },
4795
4823
  deepinfra: {
4796
4824
  default: "https://api.deepinfra.com/v1/openai/chat/completions"
@@ -4861,10 +4889,24 @@ function getApiEndpoint(agent) {
4861
4889
  }
4862
4890
  return url;
4863
4891
  }
4892
+ const OAUTH_API_KEY_REFS = /* @__PURE__ */ new Set([
4893
+ "chatgpt",
4894
+ "xai",
4895
+ "antigravity",
4896
+ "claude",
4897
+ "cursor"
4898
+ ]);
4864
4899
  if (!effectiveProvider || effectiveProvider.toLowerCase() === "custom" || agent.apiSource === "custom") {
4865
4900
  if (agent.useServerProxy) {
4866
4901
  return "";
4867
4902
  }
4903
+ const apiKeyRef = agent.apiKeyRef;
4904
+ if (apiKeyRef && OAUTH_API_KEY_REFS.has(apiKeyRef)) {
4905
+ return "";
4906
+ }
4907
+ if (effectiveProvider && API_ENDPOINTS[effectiveProvider]) {
4908
+ return "";
4909
+ }
4868
4910
  throw new Error(
4869
4911
  "Custom provider URL is required when apiSource is 'custom'."
4870
4912
  );
@@ -4889,6 +4931,7 @@ function getApiEndpoint(agent) {
4889
4931
  }
4890
4932
 
4891
4933
  export {
4934
+ isAdaptiveThinkingModelId,
4892
4935
  isModelSupportReasoningEffort,
4893
4936
  clampReasoningEffort,
4894
4937
  MODEL_LOOKUP_MAP,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  patch,
3
3
  read
4
- } from "./chunk-SFXYKGK2.js";
4
+ } from "./chunk-3S2VOMIF.js";
5
5
  import {
6
6
  DEVICE_LOCAL_OWNER_ID,
7
7
  isDeviceLocalSpaceBody,
@@ -462,8 +462,8 @@ function buildNoloWorkspaceOpenAiTools(args) {
462
462
  // listAgentsFunc 另有 limit(默认 100,最大 500)。如后续对齐需在
463
463
  // parseAgentListArgs / agentListCommands 增加 --limit 透传。
464
464
  });
465
- add("readAgent", "Read one agent config in the Nolo workspace.", {
466
- agent: stringToolParam("Agent key, id, alias, or URL.")
465
+ add("readAgent", "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.", {
466
+ agent: stringToolParam("Agent dbKey (e.g. agent-xxx), agent id, alias, or agent URL.")
467
467
  }, ["agent"]);
468
468
  add("listSpaces", "List joined spaces in the Nolo workspace.", {});
469
469
  add("readSpace", "Read one space in the Nolo workspace.", {