nolo-cli 0.12.0-alpha.1 → 0.12.0-alpha.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 (82) hide show
  1. package/{_executeModel-MWAY74HA.js → _executeModel-4F7VZR5U.js} +24 -23
  2. package/{action-RAXNQQKC.js → action-OTOWUMPW.js} +3 -3
  3. package/{addContentAction-ZHI7TVV3.js → addContentAction-JGBUVR7K.js} +2 -2
  4. package/{addDialogAgentAction-JWXPKXNC.js → addDialogAgentAction-V6CL2UCF.js} +1 -1
  5. package/{agentDeleteCommand-LXR5A5FV.js → agentDeleteCommand-MMRSG6AB.js} +15 -14
  6. package/{agentEmailCommands-DXRAP7BB.js → agentEmailCommands-VW5FKADD.js} +28 -27
  7. package/{agentListCommands-ZFMS5ZLY.js → agentListCommands-2PZHIQ3I.js} +16 -15
  8. package/{agentMachineCommands-ZJLYVV52.js → agentMachineCommands-T2R7HVRV.js} +17 -16
  9. package/{agentRecordCommands-DFS626TB.js → agentRecordCommands-5DLPK3IV.js} +28 -27
  10. package/{agentRunCommand-GWBIE2TS.js → agentRunCommand-P6EH5DN7.js} +29 -28
  11. package/{agentRuntimeLocal-YNZSHMZC.js → agentRuntimeLocal-QDJCBXM2.js} +12 -11
  12. package/{agentSlice-T2PXOEPQ.js → agentSlice-6JAJOU3X.js} +2 -2
  13. package/{chunk-G3B356GF.js → chunk-2BVGERJ2.js} +67 -3
  14. package/{chunk-WWU275LU.js → chunk-3MI5LDDU.js} +2 -2
  15. package/{chunk-OPZYGHUC.js → chunk-3WGLLTK4.js} +59 -1
  16. package/chunk-5MMAK75Q.js +15 -0
  17. package/{chunk-ZR4VHQ5D.js → chunk-5S4SWV5G.js} +38 -26
  18. package/{chunk-JUN3HFMN.js → chunk-5V524MHX.js} +25 -15
  19. package/{chunk-5ITRDSHY.js → chunk-7HVCFCZK.js} +65 -18
  20. package/{chunk-JZDIW766.js → chunk-ARSC56DC.js} +1 -1
  21. package/{chunk-3QKO4EHV.js → chunk-AS3ZQ3O2.js} +16 -25
  22. package/{chunk-43UD5ZP7.js → chunk-B4KT7RN2.js} +4 -4
  23. package/{chunk-YTQLJYLB.js → chunk-C3BFP57W.js} +95 -2
  24. package/{chunk-QCA3EPYK.js → chunk-CGDQDXKZ.js} +1 -1
  25. package/{chunk-7MYHLZ3F.js → chunk-DPFWKRHG.js} +1 -1
  26. package/{chunk-LHSJMY5V.js → chunk-E2BT7DBP.js} +3 -3
  27. package/{chunk-AM53Q2SD.js → chunk-FSUZIGIG.js} +28 -39
  28. package/{chunk-4GBNEA5B.js → chunk-H5Y2H2N6.js} +1 -1
  29. package/{chunk-S73OEOHH.js → chunk-JFANOO7I.js} +3 -15
  30. package/{chunk-ZPFRLGIZ.js → chunk-JHYLX2QV.js} +70 -37
  31. package/{chunk-OCDEWRE2.js → chunk-JKWWVF2I.js} +1 -1
  32. package/{chunk-WTYKCU4W.js → chunk-JU7J7EAV.js} +37 -37
  33. package/{chunk-EBH7G34M.js → chunk-LIO7AK5S.js} +2 -2
  34. package/{chunk-6OVCRC72.js → chunk-LUKQQJFL.js} +39 -2
  35. package/{chunk-DRMGJFGQ.js → chunk-MG6BVV3T.js} +31 -17
  36. package/{chunk-RSEUHW6T.js → chunk-MQRZ5QUH.js} +1 -1
  37. package/{chunk-RZ735TLX.js → chunk-MZHSAPZP.js} +167 -20
  38. package/{chunk-OPKKB25T.js → chunk-O4FOPRCP.js} +1 -1
  39. package/{chunk-S3UTETIC.js → chunk-OGGHETUE.js} +19 -4
  40. package/{chunk-4EH7AR52.js → chunk-OPM2DE2J.js} +1 -1
  41. package/{chunk-UG3WOFU6.js → chunk-QJSTNKJY.js} +1 -1
  42. package/{chunk-DE5BA4O6.js → chunk-QUHUVG6Y.js} +2 -2
  43. package/{chunk-YDCZVUFP.js → chunk-RQSOAMPJ.js} +16 -0
  44. package/{chunk-6LMFFG3K.js → chunk-RWO5DGXI.js} +2 -2
  45. package/{chunk-4BTHUYMY.js → chunk-TA7VKOHU.js} +23 -9
  46. package/{chunk-MEVCDATU.js → chunk-TQYYGE6G.js} +3 -3
  47. package/{chunk-TSKWE74T.js → chunk-TYPHUVK5.js} +13 -1
  48. package/{chunk-RNQ5BLR2.js → chunk-VBSWHE5W.js} +1 -1
  49. package/{chunk-NITP2JDG.js → chunk-VKG4HXYV.js} +1 -1
  50. package/{chunk-3HHTVM6G.js → chunk-WVTBAALN.js} +1 -1
  51. package/{chunk-GPZM7QH6.js → chunk-Y5P3ZRGC.js} +4 -4
  52. package/{chunk-GDBCUWQ3.js → chunk-YUMYYXPI.js} +31 -167
  53. package/{createAgentAutomationAction-G32GKDGV.js → createAgentAutomationAction-4NY4JLOK.js} +9 -8
  54. package/{createDialogAction-TISANRZK.js → createDialogAction-I5WUWFJ6.js} +10 -9
  55. package/{createPageAction-O7KOYNV4.js → createPageAction-HFTIQ7TW.js} +9 -8
  56. package/{dbSlice-WDP2ZZHK.js → dbSlice-J4PUZ6Y5.js} +1 -1
  57. package/{dialogCommands-6JPB3YQY.js → dialogCommands-SVXRJFZS.js} +16 -15
  58. package/{dialogSlice-PRHHYSP5.js → dialogSlice-35LA3ZRG.js} +9 -8
  59. package/{docCreateCommands-75E6TZNN.js → docCreateCommands-Z7RIAYKQ.js} +15 -14
  60. package/{docDeleteCommands-EJHLN7LW.js → docDeleteCommands-NEYHUVZF.js} +16 -15
  61. package/{docReadCommands-RJYBC4FS.js → docReadCommands-I4US2SDE.js} +15 -14
  62. package/{docStore-H5VWKT5D.js → docStore-3CP2IO6M.js} +10 -9
  63. package/{docUpdateCommands-MG4CNISV.js → docUpdateCommands-UU5HQBRP.js} +15 -14
  64. package/{getPricing-6TOZXPAU.js → getPricing-UGDJHI7M.js} +2 -2
  65. package/{handleSendMessageAction-QTUGICSZ.js → handleSendMessageAction-FWTLQGOZ.js} +9 -8
  66. package/index.js +36 -36
  67. package/{machineCommands-MAV7M3TK.js → machineCommands-J5JWJQ6I.js} +28 -27
  68. package/{machineWsRunDispatch-ZOEGTKHC.js → machineWsRunDispatch-U476S4G2.js} +27 -26
  69. package/package.json +1 -1
  70. package/{readlineWorkspace-SWQKC7ZS.js → readlineWorkspace-AQCPSGS7.js} +260 -87
  71. package/{removeDialogAgentAction-GTX5AN54.js → removeDialogAgentAction-XUZYQBV4.js} +3 -3
  72. package/{runAgentClientLoop-P25HACXX.js → runAgentClientLoop-FP2K33ZO.js} +20 -19
  73. package/{setDialogExtraReferencesAction-WFQ63KYO.js → setDialogExtraReferencesAction-PTAIFKGM.js} +1 -1
  74. package/{setPrimaryDialogAgentAction-P57FXTSU.js → setPrimaryDialogAgentAction-HRFTDB44.js} +3 -3
  75. package/{settingSlice-CK5YZGNI.js → settingSlice-VGRJUSE5.js} +2 -2
  76. package/{skillDiscovery-ZYHSX7VD.js → skillDiscovery-6M2BZUFN.js} +1 -1
  77. package/{spaceCommands-6O5EFEM5.js → spaceCommands-GN73BCOB.js} +15 -14
  78. package/{spaceSlice-4EXTYXS4.js → spaceSlice-WTFNKOVA.js} +11 -8
  79. package/{streamAgentChatTurn-Q3FJAHG2.js → streamAgentChatTurn-HBAQQVNK.js} +244 -26
  80. package/{tools-AHNQE4GP.js → tools-TPQYTLQZ.js} +15 -14
  81. package/{tuiSummaryLlmCaller-TXLF4MEI.js → tuiSummaryLlmCaller-XDC7WG4K.js} +6 -4
  82. package/{updateDialogTitleAction-XZDVLKVX.js → updateDialogTitleAction-AWXNPUQJ.js} +9 -8
@@ -12,7 +12,7 @@ import {
12
12
  buildLocalAgentLookupKeys,
13
13
  normalizeAgentHandle,
14
14
  shouldReadAgentKeyRemotely
15
- } from "./chunk-RNQ5BLR2.js";
15
+ } from "./chunk-VBSWHE5W.js";
16
16
  import {
17
17
  LOCAL_CODEX_AGENT_ID,
18
18
  LOCAL_CODEX_AGENT_KEY,
@@ -21,19 +21,20 @@ import {
21
21
  } from "./chunk-VHBWHNVT.js";
22
22
  import {
23
23
  inferCaptureIntent
24
- } from "./chunk-UG3WOFU6.js";
24
+ } from "./chunk-QJSTNKJY.js";
25
25
  import {
26
26
  buildCliPrompt
27
27
  } from "./chunk-ATNTHIZI.js";
28
28
  import {
29
+ inlineImageUrlsForCustomProvider,
29
30
  prepareTools
30
- } from "./chunk-YTQLJYLB.js";
31
+ } from "./chunk-C3BFP57W.js";
31
32
  import {
32
33
  getAntigravityUserAgent,
33
34
  isAntigravityOAuthAgent,
34
35
  readAntigravityProjectId,
35
36
  resolveAntigravityCloudCodeBaseUrl
36
- } from "./chunk-4GBNEA5B.js";
37
+ } from "./chunk-H5Y2H2N6.js";
37
38
  import {
38
39
  FORCED_TOOLS,
39
40
  addDefaultLightWebToolsForConfiguredAgents,
@@ -49,24 +50,25 @@ import {
49
50
  readXPostFunctionSchema,
50
51
  readXhsProfileFunc,
51
52
  readXhsProfileFunctionSchema
52
- } from "./chunk-RZ735TLX.js";
53
+ } from "./chunk-MZHSAPZP.js";
53
54
  import {
54
- CORE_DRAIN_REASON,
55
+ createDrainExhaustedResponse,
56
+ isCoreDrainingBody,
55
57
  normalizeNonNegativeMs,
56
58
  parseRetryAfterHeaderMs
57
- } from "./chunk-YDCZVUFP.js";
59
+ } from "./chunk-RQSOAMPJ.js";
58
60
  import {
59
61
  normalizeDialogTitle
60
62
  } from "./chunk-OWOHNGCN.js";
61
63
  import {
62
64
  prepareTokenUsageData
63
- } from "./chunk-AM53Q2SD.js";
65
+ } from "./chunk-FSUZIGIG.js";
64
66
  import {
65
67
  BUILTIN_TITLE_LLM_CONFIG
66
68
  } from "./chunk-V2J635L5.js";
67
69
  import {
68
70
  fetchServerSyncedCredential
69
- } from "./chunk-GPZM7QH6.js";
71
+ } from "./chunk-Y5P3ZRGC.js";
70
72
  import {
71
73
  buildAgentRuntimeDialogWritePlan,
72
74
  buildLocalWorkspaceOpenAiTools,
@@ -79,7 +81,7 @@ import {
79
81
  parseSseDataLineJson,
80
82
  readOpenAiCompatibleSseCompletion,
81
83
  resolveOpenAiCompatibleProviderConfig
82
- } from "./chunk-DRMGJFGQ.js";
84
+ } from "./chunk-MG6BVV3T.js";
83
85
  import {
84
86
  buildPlatformChatCompletionRequest,
85
87
  canUsePlatformChatProvider,
@@ -89,14 +91,14 @@ import {
89
91
  resolveLegacyDeepSeekProxyChatFallback,
90
92
  resolvePlatformChatProviderConfig,
91
93
  shouldUsePlatformChatProvider
92
- } from "./chunk-ZR4VHQ5D.js";
94
+ } from "./chunk-5S4SWV5G.js";
93
95
  import {
94
96
  resolveAgentRuntimeConfigFromRecord
95
97
  } from "./chunk-NCGFB7NN.js";
96
98
  import {
97
99
  parseToolArgumentsJson,
98
100
  summarizeToolArguments
99
- } from "./chunk-4BTHUYMY.js";
101
+ } from "./chunk-TA7VKOHU.js";
100
102
  import {
101
103
  buildLoadSkillExecutor,
102
104
  buildNoloWorkspaceCliToolExecutors,
@@ -104,10 +106,10 @@ import {
104
106
  canonicalizeToolNames,
105
107
  parseNoloWorkspaceToolArguments,
106
108
  resolveRuntimeToolSurfaceForAgent
107
- } from "./chunk-43UD5ZP7.js";
109
+ } from "./chunk-B4KT7RN2.js";
108
110
  import {
109
111
  clipCompactText
110
- } from "./chunk-S73OEOHH.js";
112
+ } from "./chunk-5MMAK75Q.js";
111
113
  import {
112
114
  createFileCredentialBroker,
113
115
  resolveCurrentRunRuntimeToolPolicy,
@@ -285,6 +287,14 @@ var STRINGS = {
285
287
  en: "queued",
286
288
  zh: "\u6392\u961F"
287
289
  },
290
+ flushQueuedIdleHint: {
291
+ en: "Flushed {0} queued messages as one.",
292
+ zh: "\u5DF2\u628A {0} \u6761\u6392\u961F\u6D88\u606F\u5408\u5E76\u53D1\u9001\u3002"
293
+ },
294
+ flushQueuedBusyHint: {
295
+ en: "Stopped this reply and flushed {0} queued messages as one.",
296
+ zh: "\u5DF2\u505C\u6B62\u5F53\u524D\u56DE\u590D\uFF0C\u5E76\u628A {0} \u6761\u6392\u961F\u6D88\u606F\u5408\u5E76\u53D1\u9001\u3002"
297
+ },
288
298
  turnStopped: {
289
299
  en: "Stopped this reply.",
290
300
  zh: "\u5DF2\u505C\u6B62\u672C\u6B21\u56DE\u590D\u3002"
@@ -718,6 +728,14 @@ var STRINGS = {
718
728
  en: "Current dialog: new (nothing to compact yet)",
719
729
  zh: "\u5F53\u524D\u5BF9\u8BDD\u8FD8\u662F\u65B0\u7684\uFF08\u8FD8\u6CA1\u6709\u53EF\u538B\u7F29\u7684\u5185\u5BB9\uFF09"
720
730
  },
731
+ compactDone: {
732
+ en: "Compacted dialog {0} \u2192 {1}.",
733
+ zh: "\u5DF2\u538B\u7F29\u5BF9\u8BDD {0} \u2192 {1}\u3002"
734
+ },
735
+ compactDoneNoSummary: {
736
+ en: "Forked dialog {0} \u2192 {1} (no summary needed).",
737
+ zh: "\u5DF2\u5206\u53C9\u5BF9\u8BDD {0} \u2192 {1}\uFF08\u65E0\u9700\u538B\u7F29\uFF09\u3002"
738
+ },
721
739
  agentCurrent: { en: "Current agent: {0} ({1})", zh: "\u5F53\u524D agent\uFF1A{0}\uFF08{1}\uFF09" },
722
740
  agentUnknown: {
723
741
  en: `I don't know agent "{0}" yet.
@@ -761,8 +779,8 @@ Use /switch, /switch list, /switch minimax-m3, or a full agent key.`,
761
779
  zh: "\u5DF2\u6302\u8F7D\u6280\u80FD\uFF1A{0}\n\u7528\u6CD5\uFF1A/skill attach <ref> | /skill detach <ref> | /skill clear"
762
780
  },
763
781
  skillNoneHint: {
764
- en: "No skills attached. Use /skill attach <skill-ref> to attach a skill.\nSkill refs can be a dbKey (page-xxx), a skill name (searched in .agents/skills/ then docs/skills/), or a direct path.",
765
- zh: "\u8FD8\u6CA1\u6709\u6302\u8F7D\u6280\u80FD\u3002\u7528 /skill attach <skill-ref> \u6302\u8F7D\u6280\u80FD\u3002\n\u6280\u80FD\u5F15\u7528\u53EF\u4EE5\u662F dbKey\uFF08page-xxx\uFF09\u3001\u6280\u80FD\u540D\uFF08\u4F1A\u5728 .agents/skills/ \u4E0E docs/skills/ \u4E2D\u67E5\u627E\uFF09\u6216\u76F4\u63A5\u8DEF\u5F84\u3002"
782
+ en: "No skills attached. Use /skill attach <skill-ref> to attach a skill.\nSkill refs can be a dbKey (page-xxx), a skill name (searched in .agents/skills/), or a direct path.",
783
+ zh: "\u8FD8\u6CA1\u6709\u6302\u8F7D\u6280\u80FD\u3002\u7528 /skill attach <skill-ref> \u6302\u8F7D\u6280\u80FD\u3002\n\u6280\u80FD\u5F15\u7528\u53EF\u4EE5\u662F dbKey\uFF08page-xxx\uFF09\u3001\u6280\u80FD\u540D\uFF08\u4F1A\u5728 .agents/skills/ \u4E2D\u67E5\u627E\uFF09\u6216\u76F4\u63A5\u8DEF\u5F84\u3002"
766
784
  },
767
785
  customizeHint: {
768
786
  en: "Tell nolo what to change, for example: /customize make my default agent more concise.",
@@ -1015,7 +1033,7 @@ async function isCoreDrainingResponse(response) {
1015
1033
  if (response.status !== 503) return false;
1016
1034
  try {
1017
1035
  const body = await response.clone().json();
1018
- return body?.reason === CORE_DRAIN_REASON;
1036
+ return isCoreDrainingBody(body);
1019
1037
  } catch {
1020
1038
  return false;
1021
1039
  }
@@ -1042,6 +1060,9 @@ async function fetchWithTransientRetry(fetchImpl, input, init, options = {}) {
1042
1060
  await (options.sleep ?? defaultSleep)(delayMs);
1043
1061
  continue;
1044
1062
  }
1063
+ if (coreDraining) {
1064
+ return createDrainExhaustedResponse(response);
1065
+ }
1045
1066
  }
1046
1067
  return response;
1047
1068
  } catch (error) {
@@ -10275,6 +10296,32 @@ function createCliLocalRuntimeAdapter(deps) {
10275
10296
  model: providerConfig.model,
10276
10297
  complete: async (messages, options) => {
10277
10298
  const stream = Boolean(options?.onTextDelta);
10299
+ const inlinedMessages = (await inlineImageUrlsForCustomProvider(
10300
+ { messages },
10301
+ {
10302
+ shouldInline: true,
10303
+ isAllowedImageUrl: (url) => {
10304
+ try {
10305
+ return new URL(url).origin === new URL(serverUrl).origin;
10306
+ } catch {
10307
+ return false;
10308
+ }
10309
+ },
10310
+ fetchImage: async (url) => {
10311
+ const response = await fetchImpl(url, {
10312
+ headers: authToken ? { Authorization: `Bearer ${authToken}` } : void 0
10313
+ });
10314
+ if (!response.ok) {
10315
+ return { ok: false, error: `HTTP ${response.status}` };
10316
+ }
10317
+ return {
10318
+ ok: true,
10319
+ mimeType: response.headers.get("content-type") ?? "application/octet-stream",
10320
+ bytes: new Uint8Array(await response.arrayBuffer())
10321
+ };
10322
+ }
10323
+ }
10324
+ )).messages;
10278
10325
  logLocalRuntimeDiagnostic("provider.request.start", {
10279
10326
  agentKey: agentConfig.key,
10280
10327
  transport: "direct-openai-compatible",
@@ -10288,7 +10335,7 @@ function createCliLocalRuntimeAdapter(deps) {
10288
10335
  });
10289
10336
  const result = await executeOpenAiCompatibleChatCompletion({
10290
10337
  providerConfig,
10291
- messages,
10338
+ messages: inlinedMessages,
10292
10339
  tools,
10293
10340
  fetchImpl: (url, init) => fetchWithTransientRetry(fetchImpl, url, init, {
10294
10341
  sleep: deps.sleep,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  fetchReferenceContents,
3
3
  resolveReferenceAssets
4
- } from "./chunk-JUN3HFMN.js";
4
+ } from "./chunk-5V524MHX.js";
5
5
 
6
6
  // packages/ai/agent/fetchAgentContexts.ts
7
7
  async function fetchAgentContexts(references, dispatch) {
@@ -8,8 +8,10 @@ import {
8
8
  // packages/agent-runtime/skillDiscovery.ts
9
9
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
10
10
  import { join } from "node:path";
11
- var SKILL_SCAN_DIRS = [".agents/skills", "docs/skills"];
11
+ var SKILL_SCAN_DIRS = [".agents/skills"];
12
12
  var MAX_DISCOVERED_SKILLS = 50;
13
+ var MAX_DISCOVERY_DESC_BUDGET = 4e3;
14
+ var MIN_DESC_LENGTH = 80;
13
15
  function parseSkillFrontmatter(filePath) {
14
16
  try {
15
17
  const content = readFileSync(filePath, "utf8").slice(0, 2048);
@@ -20,8 +22,9 @@ function parseSkillFrontmatter(filePath) {
20
22
  const name = typeof fm.name === "string" ? fm.name : void 0;
21
23
  const rawDesc = fm.description;
22
24
  const description = typeof rawDesc === "string" ? rawDesc : rawDesc == null ? void 0 : String(rawDesc);
23
- const sanitize = (s) => s?.trim().replace(/^["']|["']$/g, "").replace(/[\n\r]+/g, " ").slice(0, 200);
24
- return { name: sanitize(name), description: sanitize(description) };
25
+ const sanitizeName = (s) => s?.trim().replace(/^["']|["']$/g, "").replace(/[\n\r]+/g, " ").slice(0, 200);
26
+ const sanitizeDesc = (s) => s?.trim().replace(/^["']|["']$/g, "").replace(/[\n\r]+/g, " ").slice(0, 200);
27
+ return { name: sanitizeName(name), description: sanitizeDesc(description) };
25
28
  } catch {
26
29
  return {};
27
30
  }
@@ -41,15 +44,20 @@ function discoverSkills(cwd) {
41
44
  skills.push({ name: name ?? entry, description: description ?? "", relativePath: join(dir, entry, "SKILL.md") });
42
45
  continue;
43
46
  }
44
- if (dir === "docs/skills" && entry.endsWith(".md")) {
45
- const flatPath = join(absDir, entry);
46
- const { name, description } = parseSkillFrontmatter(flatPath);
47
- skills.push({ name: name ?? entry.replace(/\.md$/, ""), description: description ?? "", relativePath: join(dir, entry) });
48
- }
49
47
  }
50
48
  } catch {
51
49
  }
52
50
  }
51
+ const totalDescLen = skills.reduce((sum, s) => sum + s.description.length, 0);
52
+ if (totalDescLen > MAX_DISCOVERY_DESC_BUDGET && skills.length > 0) {
53
+ const scale = MAX_DISCOVERY_DESC_BUDGET / totalDescLen;
54
+ for (const s of skills) {
55
+ const targetLen = Math.max(MIN_DESC_LENGTH, Math.floor(s.description.length * scale));
56
+ if (s.description.length > targetLen) {
57
+ s.description = s.description.slice(0, targetLen).trimEnd();
58
+ }
59
+ }
60
+ }
53
61
  return skills;
54
62
  }
55
63
  function resolveSkillByName(cwd, name) {
@@ -75,23 +83,6 @@ function resolveSkillByName(cwd, name) {
75
83
  } catch {
76
84
  }
77
85
  }
78
- const docsFlat = join(cwd, "docs", "skills", `${trimmed}.md`);
79
- if (existsSync(docsFlat)) return docsFlat;
80
- const docsDir = join(cwd, "docs", "skills");
81
- if (existsSync(docsDir) && statSync(docsDir).isDirectory()) {
82
- try {
83
- for (const entry of readdirSync(docsDir)) {
84
- if (!entry.endsWith(".md")) continue;
85
- const candidate = join(docsDir, entry);
86
- try {
87
- const { name: fmName } = parseSkillFrontmatter(candidate);
88
- if (fmName && fmName === trimmed) return candidate;
89
- } catch {
90
- }
91
- }
92
- } catch {
93
- }
94
- }
95
86
  return null;
96
87
  }
97
88
  function buildSkillDiscoveryContextBlock(cwd) {
@@ -477,7 +477,7 @@ function buildNoloWorkspaceOpenAiTools(args) {
477
477
  add("readSkillDoc", "Read one skill doc in the Nolo workspace.", {
478
478
  doc: stringToolParam("Skill doc/page key.")
479
479
  }, ["doc"]);
480
- add("loadSkill", "Load a Skill by name from the workspace skill directories (.agents/skills/<name>/SKILL.md, then docs/skills/<name>.md) and return its full SKILL.md content inline so you can follow its instructions. Use this instead of readFile when you want to activate a skill. On an unknown name the tool returns a plain text list of available skill names rather than failing.", {
480
+ add("loadSkill", "Load a Skill by name from the workspace skill directory (.agents/skills/<name>/SKILL.md) and return its full SKILL.md content inline so you can follow its instructions. Use this instead of readFile when you want to activate a skill. On an unknown name the tool returns a plain text list of available skill names rather than failing.", {
481
481
  name: stringToolParam("Skill name (the name advertised in the skill-discovery layer).")
482
482
  }, ["name"]);
483
483
  add("listTables", "List tables in the current user scope or an optional space scope.", {
@@ -892,7 +892,7 @@ function buildLoadSkillExecutor(args) {
892
892
  metadata: { loadSkill: true, resolved: false }
893
893
  };
894
894
  }
895
- const { resolveSkillByName } = await import("./skillDiscovery-ZYHSX7VD.js");
895
+ const { resolveSkillByName } = await import("./skillDiscovery-6M2BZUFN.js");
896
896
  const resolved = resolveSkillByName(args.cwd, name);
897
897
  if (!resolved) {
898
898
  return {
@@ -919,13 +919,13 @@ ${body}`,
919
919
  };
920
920
  }
921
921
  async function formatUnknownSkillMessage(cwd, requestedName) {
922
- const { discoverSkills } = await import("./skillDiscovery-ZYHSX7VD.js");
922
+ const { discoverSkills } = await import("./skillDiscovery-6M2BZUFN.js");
923
923
  let available = [];
924
924
  try {
925
925
  available = discoverSkills(cwd).map((s) => s.name);
926
926
  } catch {
927
927
  }
928
- const header = `Skill "${requestedName}" not found in this workspace's skill directories (.agents/skills/<name>/SKILL.md, docs/skills/<name>.md).`;
928
+ const header = `Skill "${requestedName}" not found in this workspace's skill directory (.agents/skills/<name>/SKILL.md).`;
929
929
  if (available.length === 0) return `${header}
930
930
 
931
931
  No skills were discovered in this workspace.`;
@@ -1,10 +1,13 @@
1
1
  import {
2
2
  i18n_default,
3
3
  toolRegistry
4
- } from "./chunk-RZ735TLX.js";
4
+ } from "./chunk-MZHSAPZP.js";
5
5
  import {
6
6
  canonicalizeToolNames
7
- } from "./chunk-43UD5ZP7.js";
7
+ } from "./chunk-B4KT7RN2.js";
8
+ import {
9
+ isNoloHostedProvider
10
+ } from "./chunk-524BDL33.js";
8
11
  import {
9
12
  asTrimmedLowercaseString
10
13
  } from "./chunk-QSJ3HFEF.js";
@@ -12,6 +15,94 @@ import {
12
15
  isRecord
13
16
  } from "./chunk-KUG52IAP.js";
14
17
 
18
+ // packages/ai/chat/inlineImageUrlsForCustomProvider.ts
19
+ var FILE_CONTENT_PATH = "/api/v1/db/file/content/";
20
+ var shouldInlineImageUrlsForAgent = (agentConfig) => {
21
+ const apiSource = agentConfig?.apiSource?.toLowerCase();
22
+ const provider = agentConfig?.provider?.toLowerCase();
23
+ const model = agentConfig?.model?.toLowerCase();
24
+ if (apiSource === "custom" || provider === "custom") return true;
25
+ if (isNoloHostedProvider(provider)) return true;
26
+ return provider === "openrouter" && model === "minimax/minimax-m3";
27
+ };
28
+ var isInlineCandidate = (url) => /^https?:\/\//i.test(url) && url.includes(FILE_CONTENT_PATH);
29
+ var bytesToBase64 = (bytes) => {
30
+ let binary = "";
31
+ for (const byte of bytes) {
32
+ binary += String.fromCharCode(byte);
33
+ }
34
+ return btoa(binary);
35
+ };
36
+ var defaultFetchImage = async (url) => {
37
+ const response = await fetch(url);
38
+ if (!response.ok) {
39
+ return {
40
+ ok: false,
41
+ error: `HTTP ${response.status}`
42
+ };
43
+ }
44
+ const bytes = new Uint8Array(await response.arrayBuffer());
45
+ return {
46
+ ok: true,
47
+ mimeType: response.headers.get("content-type") ?? "application/octet-stream",
48
+ bytes
49
+ };
50
+ };
51
+ var cloneImagePartWithDataUrl = async (part, fetchImage, isAllowedImageUrl) => {
52
+ const url = part?.image_url?.url;
53
+ if (typeof url !== "string" || !isInlineCandidate(url) || isAllowedImageUrl && !isAllowedImageUrl(url)) {
54
+ return part;
55
+ }
56
+ const result = await fetchImage(url);
57
+ if (!result.ok || !result.bytes) return part;
58
+ const mimeType = result.mimeType || "application/octet-stream";
59
+ return {
60
+ ...part,
61
+ image_url: {
62
+ ...part.image_url,
63
+ url: `data:${mimeType};base64,${bytesToBase64(result.bytes)}`
64
+ }
65
+ };
66
+ };
67
+ var inlineImageUrlsForCustomProvider = async (bodyData, options) => {
68
+ if (!options.shouldInline) return bodyData;
69
+ const body = bodyData;
70
+ if (!Array.isArray(body?.messages)) return bodyData;
71
+ const fetchImage = options.fetchImage ?? defaultFetchImage;
72
+ let changed = false;
73
+ const messages = [];
74
+ for (const message of body.messages) {
75
+ if (!Array.isArray(message?.content)) {
76
+ messages.push(message);
77
+ continue;
78
+ }
79
+ const content = await Promise.all(
80
+ message.content.map(async (part) => {
81
+ if (part?.type !== "image_url") return part;
82
+ return cloneImagePartWithDataUrl(
83
+ part,
84
+ fetchImage,
85
+ options.isAllowedImageUrl
86
+ );
87
+ })
88
+ );
89
+ let messageChanged = false;
90
+ for (let i = 0; i < content.length; i++) {
91
+ if (content[i] !== message.content[i]) {
92
+ changed = true;
93
+ messageChanged = true;
94
+ break;
95
+ }
96
+ }
97
+ messages.push(messageChanged ? { ...message, content } : message);
98
+ }
99
+ if (!changed) return bodyData;
100
+ return {
101
+ ...body,
102
+ messages
103
+ };
104
+ };
105
+
15
106
  // packages/ai/tools/toolSchemaCompatibility.ts
16
107
  var COMPOSITION_KEYS = ["anyOf", "oneOf", "allOf"];
17
108
  var LIMITED_JSON_SCHEMA_PROVIDERS = /* @__PURE__ */ new Set([
@@ -167,5 +258,7 @@ var prepareTools = (toolNames, options) => {
167
258
  };
168
259
 
169
260
  export {
261
+ shouldInlineImageUrlsForAgent,
262
+ inlineImageUrlsForCustomProvider,
170
263
  prepareTools
171
264
  };
@@ -2,7 +2,7 @@ import {
2
2
  buildLocalAgentLookupKeys,
3
3
  normalizeAgentHandle,
4
4
  shouldReadAgentKeyRemotely
5
- } from "./chunk-RNQ5BLR2.js";
5
+ } from "./chunk-VBSWHE5W.js";
6
6
  import {
7
7
  resolveCliAgentKeyInput
8
8
  } from "./chunk-VHBWHNVT.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  selectCurrentServer,
3
3
  selectRemoteServers
4
- } from "./chunk-WTYKCU4W.js";
4
+ } from "./chunk-JU7J7EAV.js";
5
5
  import {
6
6
  createUserKey,
7
7
  extractAgentInfo,
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createCliLocalRuntimeAdapter,
3
3
  summarizeEndpoint
4
- } from "./chunk-5ITRDSHY.js";
4
+ } from "./chunk-7HVCFCZK.js";
5
5
  import {
6
6
  clipMultilineText
7
- } from "./chunk-RZ735TLX.js";
7
+ } from "./chunk-MZHSAPZP.js";
8
8
  import {
9
9
  runLocalAgentTurn
10
- } from "./chunk-4BTHUYMY.js";
10
+ } from "./chunk-TA7VKOHU.js";
11
11
  import {
12
12
  resolveLocalRuntimeEnvFromPolicy
13
13
  } from "./chunk-PDL2AV3E.js";
@@ -15,10 +15,10 @@ import {
15
15
  import {
16
16
  deleteServerSyncedCredential,
17
17
  runLlm
18
- } from "./chunk-GPZM7QH6.js";
18
+ } from "./chunk-Y5P3ZRGC.js";
19
19
  import {
20
20
  cleanupCliSessionForDialog
21
- } from "./chunk-6LMFFG3K.js";
21
+ } from "./chunk-RWO5DGXI.js";
22
22
  import {
23
23
  getDialogAgentIds,
24
24
  getPrimaryDialogAgentId
@@ -33,11 +33,11 @@ import {
33
33
  normalizeAssistantContentBuffer,
34
34
  planCompression,
35
35
  serializeMessageContent
36
- } from "./chunk-S73OEOHH.js";
36
+ } from "./chunk-JFANOO7I.js";
37
37
  import {
38
38
  findModelConfig,
39
39
  getModelConfig
40
- } from "./chunk-S3UTETIC.js";
40
+ } from "./chunk-OGGHETUE.js";
41
41
  import {
42
42
  createFileCredentialBroker
43
43
  } from "./chunk-PDL2AV3E.js";
@@ -74,7 +74,7 @@ import {
74
74
  selectRemoteServer,
75
75
  selectRemoteServers,
76
76
  selectRemoteSyncServers
77
- } from "./chunk-WTYKCU4W.js";
77
+ } from "./chunk-JU7J7EAV.js";
78
78
  import {
79
79
  asRecordOrEmpty
80
80
  } from "./chunk-KX6YBIHG.js";
@@ -85,7 +85,7 @@ import {
85
85
  createSpaceKey,
86
86
  localSpaceAuthorityPatchStamp,
87
87
  normalizeSpaceId
88
- } from "./chunk-3HHTVM6G.js";
88
+ } from "./chunk-WVTBAALN.js";
89
89
  import {
90
90
  patch,
91
91
  read,
@@ -98,7 +98,7 @@ import {
98
98
  uploadFileAction,
99
99
  upsertSSREntity,
100
100
  write
101
- } from "./chunk-NITP2JDG.js";
101
+ } from "./chunk-VKG4HXYV.js";
102
102
  import {
103
103
  DB_PREFIX,
104
104
  SEPARATOR,
@@ -8597,31 +8597,15 @@ var normalizeAppRouteId = (contentKey) => isAppContentKey(contentKey) ? contentK
8597
8597
  var uiAskChoiceFunctionSchema = {
8598
8598
  name: "ui_ask_choice",
8599
8599
  description: [
8600
- "\u5F53\u4F60\u9700\u8981\u8BA9\u7528\u6237\u5728\u51E0\u4E2A\u4E92\u65A5\u7684\u9009\u9879\u4E4B\u95F4\u505A\u9009\u62E9\u65F6\uFF0C\u4F7F\u7528\u672C\u5DE5\u5177\u3002",
8601
- "",
8602
- "\u8FD9\u662F\u4E00\u4E2A\u901A\u7528\u7684\u201C\u51FA\u9009\u9879\u201D\u5DE5\u5177\uFF0C\u9002\u7528\u4E8E\u591A\u79CD\u573A\u666F\uFF0C\u4F8B\u5982\uFF1A",
8603
- "1\uFF09\u7528\u6237\u7684\u9700\u6C42\u6BD4\u8F83\u5BBD\u6CDB\u6216\u6A21\u7CCA\uFF0C\u4F60\u53EF\u4EE5\u7ED9\u51FA 2\uFF5E5 \u4E2A\u4E0D\u540C\u65B9\u5411\u7684\u5019\u9009\u65B9\u6848\uFF0C\u8BA9 TA \u5148\u9009\u4E00\u4E2A\u65B9\u5411\uFF1B",
8604
- "2\uFF09\u4E00\u4E2A\u8BA1\u5212 / \u6D41\u7A0B\u5230\u4E86\u5206\u652F\u8282\u70B9\uFF0C\u9700\u8981\u7528\u6237\u51B3\u5B9A\u4E0B\u4E00\u6B65\u505A\u4EC0\u4E48\uFF1B",
8605
- "3\uFF09\u4F60\u60F3\u4E3A\u7528\u6237\u8BBE\u8BA1\u4E00\u7EC4\u7EC3\u4E60\u9898\u3001\u6D4B\u8BD5\u9898\u6216\u95EE\u5377\u9898\uFF08\u5982\u51FA\u9898\u7EC3\u4E60\u3001\u4EBA\u683C\u6D4B\u8BD5\u7B49\u5355\u9009\u9898\uFF09\uFF1B",
8606
- "4\uFF09\u5728\u65B0\u9636\u6BB5/\u65B0\u4F1A\u8BDD\u4E2D\uFF0C\u6839\u636E\u7CFB\u7EDF\u63D0\u793A\u6216\u7528\u6237\u753B\u50CF\uFF0C\u7ED9\u51FA\u82E5\u5E72\u201C\u63A5\u4E0B\u6765\u53EF\u4EE5\u5C1D\u8BD5\u7684\u4E8B\u60C5\u201D\uFF08\u4F8B\u5982\u529F\u80FD\u5BFC\u822A\u6216\u4F7F\u7528\u6280\u5DE7\uFF09\u3002",
8607
- "",
8608
- "\u4F7F\u7528\u5EFA\u8BAE\uFF1A",
8609
- "- \u5F53\u4F60\u5224\u65AD\u201C\u5148\u7ED9\u51FA 2\uFF5E5 \u4E2A\u660E\u786E\u9009\u9879\u80FD\u663E\u8457\u5E2E\u7528\u6237\u7406\u6E05\u4E0B\u4E00\u6B65\u8981\u505A\u4EC0\u4E48\u201D\u65F6\uFF0C\u53EF\u4EE5\u4E3B\u52A8\u8C03\u7528\u672C\u5DE5\u5177\uFF1B",
8610
- "- \u5982\u679C\u7528\u6237\u7684\u76EE\u6807\u5DF2\u7ECF\u975E\u5E38\u5177\u4F53\u3001\u6E05\u6670\uFF0C\u5E76\u4E14\u4F60\u53EF\u4EE5\u76F4\u63A5\u7ED9\u51FA\u9AD8\u8D28\u91CF\u7B54\u6848\uFF0C\u4F18\u5148\u76F4\u63A5\u56DE\u7B54\uFF0C\u800C\u4E0D\u662F\u518D\u5F39\u51FA\u9009\u62E9\u83DC\u5355\uFF1B",
8611
- "- \u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u4E0D\u8981\u5728\u5B8C\u5168\u6CA1\u6709\u6709\u6548\u4E0A\u4E0B\u6587\u7684\u573A\u666F\uFF08\u4F8B\u5982\u7528\u6237\u53EA\u8BF4\u201C\u4F60\u597D\u201D\uFF09\u7ACB\u523B\u8C03\u7528\u672C\u5DE5\u5177\uFF0C\u9664\u975E\u7CFB\u7EDF\u63D0\u793A\u4E2D\u5DF2\u7ECF\u660E\u786E\u8981\u6C42\u4F60\u5728\u65B0\u4F1A\u8BDD\u5F00\u5934\u7528\u5B83\u6765\u751F\u6210\u6B22\u8FCE\u83DC\u5355\u6216\u529F\u80FD\u5BFC\u822A\uFF1B",
8612
- "- \u8BF7\u628A\u7ED9\u7528\u6237\u770B\u7684\u95EE\u9898\u5199\u5728 question \u5B57\u6BB5\u4E2D\uFF0C\u4E0D\u8981\u5728\u540C\u4E00\u8F6E assistant \u666E\u901A\u6587\u672C\u91CC\u91CD\u590D\u8FD9\u53E5\u8BDD\uFF1B",
8613
- "- \u6BCF\u4E2A\u9009\u9879\u7684 userMessage \u5EFA\u8BAE\u5199\u6210\u5B8C\u6574\u7684\u4E00\u53E5\u8BDD\uFF0C\u65B9\u4FBF\u540E\u7EED\u7406\u89E3\u4E0A\u4E0B\u6587\uFF1B\u5982\u679C\u7559\u7A7A\uFF0C\u5C06\u81EA\u52A8\u4F7F\u7528 label \u4F5C\u4E3A userMessage\u3002",
8614
- "",
8615
- "\u5728\u4EE3\u7801\u534F\u4F5C\u573A\u666F\u4E0B\u7684\u63A8\u8350\u7528\u6CD5\uFF1A",
8616
- "- \u5982\u679C\u4F60\u5DF2\u7ECF\u5728\u672C\u8F6E assistant \u7684 content \u4E2D\u7ED9\u51FA\u4E86\u5206\u6790\u3001\u8BF4\u660E\u6216\u591A\u4E2A\u5907\u9009\u65B9\u6848\uFF0C\u53EF\u4EE5\u5728\u540C\u4E00\u8F6E\u6D88\u606F\u7684\u7ED3\u5C3E\u8C03\u7528\u672C\u5DE5\u5177\uFF0C\u8BF7\u7528\u6237\u9009\u62E9\u201C\u662F\u5426\u6839\u636E\u4E0A\u8FF0\u65B9\u6848\u5F00\u59CB\u5B9E\u9645\u4FEE\u6539\u4EE3\u7801\u201D\u6216\u201C\u4F18\u5148\u6267\u884C\u54EA\u4E00\u4E2A\u65B9\u6848/\u6B65\u9AA4\u201D\u3002",
8617
- "- \u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\uFF0Cquestion \u5B57\u6BB5\u901A\u5E38\u662F\u4E00\u4E2A\u7B80\u77ED\u7684\u95EE\u9898\uFF08\u4F8B\u5982\uFF1A\u201C\u63A5\u4E0B\u6765\u4F60\u5E0C\u671B\u6211\u6309\u54EA\u4E2A\u65B9\u6848\u6765\u5177\u4F53\u4FEE\u6539\u4EE3\u7801\uFF1F\u201D\uFF09\uFF0C\u800C\u8BE6\u7EC6\u7684\u89E3\u91CA\u548C\u65B9\u6848\u63CF\u8FF0\u653E\u5728 content \u4E2D\u3002",
8618
- "- \u5982\u679C\u5F53\u524D\u5BF9\u8BDD\u53EA\u9700\u8981\u4E00\u4E2A\u7B80\u5355\u7684\u9009\u62E9\uFF0C\u800C\u4E0D\u9700\u8981\u989D\u5916\u89E3\u91CA\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u4E0D\u8F93\u51FA\u989D\u5916\u7684 content\uFF0C\u800C\u53EA\u8C03\u7528\u672C\u5DE5\u5177\uFF0C\u7531 question \u5B57\u6BB5\u76F4\u63A5\u5411\u7528\u6237\u63D0\u95EE\u3002",
8600
+ "\u8BA9\u7528\u6237\u5728 2\uFF5E5 \u4E2A\u4E92\u65A5\u9009\u9879\u4E4B\u95F4\u505A\u9009\u62E9\u7684\u901A\u7528\u201C\u51FA\u9009\u9879\u201D\u5DE5\u5177\u3002\u9002\u7528\u573A\u666F\uFF1A\u9700\u6C42\u6A21\u7CCA\u65F6\u7ED9\u65B9\u5411\u5019\u9009\u3001\u8BA1\u5212\u5206\u652F\u8282\u70B9\u51B3\u7B56\u3001\u51FA\u9898/\u95EE\u5377\u3001\u65B0\u4F1A\u8BDD\u529F\u80FD\u5BFC\u822A\u3002",
8619
8601
  "",
8620
8602
  "\u591A\u95EE\u9898 & \u591A\u9009\u652F\u6301\uFF1A",
8621
8603
  "- \u5F53\u4F60\u9700\u8981\u4E00\u6B21\u95EE\u591A\u4E2A\u95EE\u9898\u65F6\uFF0C\u4F7F\u7528 questions \u6570\u7EC4\u4EE3\u66FF question+choices\u3002",
8622
8604
  "- \u6BCF\u4E2A question \u53EF\u4EE5\u8BBE\u7F6E multiSelect: true \u5141\u8BB8\u591A\u9009\u3002",
8623
8605
  "- \u6BCF\u4E2A question \u53EF\u4EE5\u8BBE\u7F6E allowOther: false \u9690\u85CF\u201C\u5176\u4ED6\u201D\u8F93\u5165\u6846\u3002",
8624
- "- \u6BCF\u4E2A choice \u53EF\u4EE5\u52A0 detail \u5B57\u6BB5\u63D0\u4F9B\u66F4\u957F\u7684\u63CF\u8FF0\u3002"
8606
+ "- \u6BCF\u4E2A choice \u53EF\u4EE5\u52A0 detail \u5B57\u6BB5\u63D0\u4F9B\u66F4\u957F\u7684\u63CF\u8FF0\u3002",
8607
+ "",
8608
+ "\u4F55\u65F6\u8C03\u7528 / \u8C03\u7528\u89C4\u8303\u7684\u5B8C\u6574\u884C\u4E3A\u89C4\u5219\u7531\u7CFB\u7EDF\u63D0\u793A\u7684\u300C\u4EA4\u4E92\u8BF4\u660E\u300D\u5757\u6CE8\u5165\uFF0C\u4E0D\u5728\u6B64\u91CD\u590D\u3002"
8625
8609
  ].join("\n"),
8626
8610
  parameters: {
8627
8611
  type: "object",
@@ -10500,7 +10484,7 @@ var messageSlice = createSliceWithThunks({
10500
10484
  runtimeOptions: args.runtimeOptions
10501
10485
  });
10502
10486
  if (agentKeyToUse) {
10503
- const { streamAgentChatTurn } = await import("./agentSlice-T2PXOEPQ.js");
10487
+ const { streamAgentChatTurn } = await import("./agentSlice-6JAJOU3X.js");
10504
10488
  await dispatch(
10505
10489
  streamAgentChatTurn({
10506
10490
  agentKey: agentKeyToUse,
@@ -13211,7 +13195,7 @@ var deleteDialogThunk = async (payload, thunkApi) => {
13211
13195
  }
13212
13196
  if (isCurrentDialog) {
13213
13197
  await thunkApi.dispatch(resetMsgs());
13214
- const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-PRHHYSP5.js");
13198
+ const { clearPendingAttachments: clearPendingAttachments2 } = await import("./dialogSlice-35LA3ZRG.js");
13215
13199
  dispatch(clearPendingAttachments2());
13216
13200
  clearWorkflow();
13217
13201
  }
@@ -13220,35 +13204,35 @@ var deleteDialogThunk = async (payload, thunkApi) => {
13220
13204
 
13221
13205
  // packages/chat/dialog/dialogSlice.ts
13222
13206
  var runCreateDialogAction = async (args, thunkApi) => {
13223
- const { createDialogAction } = await import("./createDialogAction-TISANRZK.js");
13207
+ const { createDialogAction } = await import("./createDialogAction-I5WUWFJ6.js");
13224
13208
  return createDialogAction(args, thunkApi);
13225
13209
  };
13226
13210
  var runCreateAgentAutomationAction = async (args, thunkApi) => {
13227
- const { createAgentAutomationAction } = await import("./createAgentAutomationAction-G32GKDGV.js");
13211
+ const { createAgentAutomationAction } = await import("./createAgentAutomationAction-4NY4JLOK.js");
13228
13212
  return createAgentAutomationAction(args, thunkApi);
13229
13213
  };
13230
13214
  var runUpdateDialogTitleAction = async (args, thunkApi) => {
13231
- const { updateDialogTitleAction } = await import("./updateDialogTitleAction-XZDVLKVX.js");
13215
+ const { updateDialogTitleAction } = await import("./updateDialogTitleAction-AWXNPUQJ.js");
13232
13216
  return updateDialogTitleAction(args, thunkApi);
13233
13217
  };
13234
13218
  var runAddDialogAgentAction = async (args, thunkApi) => {
13235
- const { addDialogAgentAction } = await import("./addDialogAgentAction-JWXPKXNC.js");
13219
+ const { addDialogAgentAction } = await import("./addDialogAgentAction-V6CL2UCF.js");
13236
13220
  return addDialogAgentAction(args, thunkApi);
13237
13221
  };
13238
13222
  var runRemoveDialogAgentAction = async (args, thunkApi) => {
13239
- const { removeDialogAgentAction } = await import("./removeDialogAgentAction-GTX5AN54.js");
13223
+ const { removeDialogAgentAction } = await import("./removeDialogAgentAction-XUZYQBV4.js");
13240
13224
  return removeDialogAgentAction(args, thunkApi);
13241
13225
  };
13242
13226
  var runSetPrimaryDialogAgentAction = async (args, thunkApi) => {
13243
- const { setPrimaryDialogAgentAction } = await import("./setPrimaryDialogAgentAction-P57FXTSU.js");
13227
+ const { setPrimaryDialogAgentAction } = await import("./setPrimaryDialogAgentAction-HRFTDB44.js");
13244
13228
  return setPrimaryDialogAgentAction(args, thunkApi);
13245
13229
  };
13246
13230
  var runSetDialogExtraReferencesAction = async (args, thunkApi) => {
13247
- const { setDialogExtraReferencesAction } = await import("./setDialogExtraReferencesAction-WFQ63KYO.js");
13231
+ const { setDialogExtraReferencesAction } = await import("./setDialogExtraReferencesAction-PTAIFKGM.js");
13248
13232
  return setDialogExtraReferencesAction(args, thunkApi);
13249
13233
  };
13250
13234
  var runHandleSendMessageAction = async (args, thunkApi) => {
13251
- const { handleSendMessageAction } = await import("./handleSendMessageAction-QTUGICSZ.js");
13235
+ const { handleSendMessageAction } = await import("./handleSendMessageAction-FWTLQGOZ.js");
13252
13236
  return handleSendMessageAction(args, thunkApi);
13253
13237
  };
13254
13238
  function clearDialogState() {
@@ -13261,7 +13245,7 @@ var createPageAndAddReference = createAsyncThunk(
13261
13245
  async (payload, { dispatch, getState, rejectWithValue }) => {
13262
13246
  const { slateData, jsonData, title, type, fileId, groupId, dialogKey } = payload;
13263
13247
  try {
13264
- const { createDocState } = await import("./docStore-H5VWKT5D.js");
13248
+ const { createDocState } = await import("./docStore-3CP2IO6M.js");
13265
13249
  const pageKey = await createDocState(
13266
13250
  { slateData, title },
13267
13251
  { dispatch, getState }
@@ -19390,7 +19374,7 @@ var fetchSpaceAction = async (input, thunkAPI) => {
19390
19374
  const spaceKey = createSpaceKey.space(spaceId);
19391
19375
  const readSpace = async (dbKey) => {
19392
19376
  try {
19393
- const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-WDP2ZZHK.js");
19377
+ const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-J4PUZ6Y5.js");
19394
19378
  if (fresh) {
19395
19379
  return await dispatch(readAndWait2(dbKey)).unwrap();
19396
19380
  }
@@ -19987,6 +19971,10 @@ var selectSpaceLoading = createSelector(
19987
19971
  selectSpaceState,
19988
19972
  (space) => space.loading
19989
19973
  );
19974
+ var selectMemberSpacesLoaded = createSelector(
19975
+ selectSpaceState,
19976
+ (space) => space.memberSpaces !== null
19977
+ );
19990
19978
  var selectMembershipStatus = createSelector(
19991
19979
  selectSpaceState,
19992
19980
  (space) => space.membershipStatus ?? "idle"
@@ -20119,6 +20107,7 @@ export {
20119
20107
  selectAllMemberSpaces,
20120
20108
  selectOwnedMemberSpaces,
20121
20109
  selectSpaceLoading,
20110
+ selectMemberSpacesLoaded,
20122
20111
  selectMembershipStatus,
20123
20112
  selectSpaceInitialized,
20124
20113
  selectCollapsedCategories,