nolo-cli 0.14.0-alpha.1 → 0.14.0-alpha.3

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 (70) hide show
  1. package/README.md +5 -2
  2. package/{_executeModel-SQVV6CXR.js → _executeModel-ERQQ5SO5.js} +16 -16
  3. package/{action-Q5CBVUV5.js → action-N3KXFO5V.js} +3 -3
  4. package/{addContentAction-ZCJJ3XOL.js → addContentAction-4Z762DMR.js} +2 -2
  5. package/{addDialogAgentAction-ROUQPBVI.js → addDialogAgentAction-FALLEKPR.js} +1 -1
  6. package/{agentDeleteCommand-TSY5OSG7.js → agentDeleteCommand-AZDVM4HQ.js} +9 -9
  7. package/{agentEmailCommands-YX57M3P7.js → agentEmailCommands-SBGSPBSS.js} +20 -20
  8. package/agentGrantCommands-B4MB23VQ.js +239 -0
  9. package/{agentListCommands-S65H4AVT.js → agentListCommands-OJLOXSKL.js} +10 -10
  10. package/{agentMachineCommands-ELNLSTE4.js → agentMachineCommands-Y7RXBTEY.js} +9 -9
  11. package/{agentRecordCommands-HVCGO2XK.js → agentRecordCommands-LFQ3RK24.js} +20 -20
  12. package/{agentRunCommand-EOFDKKFI.js → agentRunCommand-WARBRXRP.js} +20 -20
  13. package/{agentRuntimeLocal-F4FWS5Z4.js → agentRuntimeLocal-DSUBT77I.js} +6 -6
  14. package/{agentSlice-R3WAV3VG.js → agentSlice-F23RHRVB.js} +2 -2
  15. package/{authCommand-O7SL3WW5.js → authCommand-66ME4KZX.js} +8 -4
  16. package/{chunk-BRODTPXY.js → chunk-33K5FKRL.js} +1 -1
  17. package/{chunk-SJQVOEIV.js → chunk-3B2LFO6R.js} +5 -2
  18. package/{chunk-2MW6QFIQ.js → chunk-3FCSMQAC.js} +1 -1
  19. package/{chunk-IVOFAQ5R.js → chunk-4GTGSUMH.js} +3 -3
  20. package/{chunk-BHKOPLWJ.js → chunk-4QUXYE7J.js} +4 -4
  21. package/{chunk-YX4H7EP4.js → chunk-4UUJFFMK.js} +1 -1
  22. package/{chunk-TSJBYH7X.js → chunk-5R73BS7Y.js} +1 -1
  23. package/{chunk-K4S6CYKK.js → chunk-7EVWUQJZ.js} +65 -13
  24. package/{chunk-V6PGKRZC.js → chunk-A5V7UEZJ.js} +1 -1
  25. package/{chunk-CFX7LP6W.js → chunk-BHK5ZAW7.js} +1 -1
  26. package/{chunk-ACPNKI3V.js → chunk-CBLNDNYI.js} +3 -3
  27. package/{chunk-3DKS6UER.js → chunk-KPUM5RIE.js} +105 -47
  28. package/{chunk-HXPBV44X.js → chunk-LAVVL3GH.js} +142 -23
  29. package/{chunk-ZEYSZ5WG.js → chunk-NARL6TJS.js} +18 -18
  30. package/{chunk-XZY4TCZO.js → chunk-NFRS3JW4.js} +1 -1
  31. package/{chunk-AEMXZOAK.js → chunk-NVV3ABII.js} +9 -8
  32. package/{chunk-7ULBTAQK.js → chunk-PBP4KPF7.js} +9 -9
  33. package/{chunk-CANREHJB.js → chunk-RLOKCZNX.js} +1 -1
  34. package/{chunk-QRBZS6G4.js → chunk-RZALKBP4.js} +2 -2
  35. package/{chunk-EC2EU2F4.js → chunk-S5UACFUP.js} +54 -2
  36. package/{chunk-DSCG2DY5.js → chunk-T3X232L6.js} +1 -1
  37. package/{chunk-AGUNTRZV.js → chunk-TLNEQI2R.js} +1 -1
  38. package/{chunk-FLY6L3KA.js → chunk-TQCONXQ3.js} +1 -1
  39. package/{chunk-QV25QXE2.js → chunk-V6VXDXGY.js} +2 -2
  40. package/{chunk-O2S35KSZ.js → chunk-VIPFEPO4.js} +2 -2
  41. package/{chunk-7H3O7ZA2.js → chunk-VQFY3VXW.js} +1 -1
  42. package/{chunk-2KNEWIDU.js → chunk-X7NITNY4.js} +2 -2
  43. package/{chunk-4GXQ74DF.js → chunk-XIDYAII4.js} +2 -2
  44. package/{createAgentAutomationAction-LL2UAZL3.js → createAgentAutomationAction-YCBXLFWW.js} +7 -7
  45. package/{createDialogAction-MSMUS4NO.js → createDialogAction-LOE4IBWI.js} +8 -8
  46. package/{createPageAction-MGN4CQWL.js → createPageAction-MQPKRYSZ.js} +7 -7
  47. package/{dbSlice-35VY6LYX.js → dbSlice-7Q23HSWH.js} +1 -1
  48. package/{dialogCommands-7EKKHEGO.js → dialogCommands-BQDGLVMO.js} +10 -10
  49. package/{dialogSlice-ZRYCGVVH.js → dialogSlice-MLJL22KB.js} +7 -7
  50. package/{docCreateCommands-YCU2BINI.js → docCreateCommands-K2MPMXYF.js} +9 -9
  51. package/{docDeleteCommands-CEB54GNO.js → docDeleteCommands-NBAARB77.js} +10 -10
  52. package/{docReadCommands-Z2OZTAIA.js → docReadCommands-S3MO5RPS.js} +9 -9
  53. package/{docStore-AYLR7HES.js → docStore-CRULGCHQ.js} +8 -8
  54. package/{docUpdateCommands-VU2TNBPM.js → docUpdateCommands-EHEI7FCE.js} +9 -9
  55. package/{handleSendMessageAction-D4UALBU5.js → handleSendMessageAction-JSJC7RWU.js} +34 -8
  56. package/index.js +53 -41
  57. package/{machineCommands-65QZPPET.js → machineCommands-7WHQPMXF.js} +19 -19
  58. package/{machineWsRunDispatch-35QVFHKA.js → machineWsRunDispatch-EZ2IOYWT.js} +19 -19
  59. package/package.json +1 -1
  60. package/{readlineWorkspace-U4PN6GH2.js → readlineWorkspace-2KIRBLOS.js} +154 -40
  61. package/{removeDialogAgentAction-DPSDJL5F.js → removeDialogAgentAction-WKHZT6VJ.js} +3 -3
  62. package/{runAgentClientLoop-HND2XKNI.js → runAgentClientLoop-GFC2XHEC.js} +13 -13
  63. package/{setDialogExtraReferencesAction-6UPTOPJA.js → setDialogExtraReferencesAction-GCI5QU6E.js} +1 -1
  64. package/{setPrimaryDialogAgentAction-PFDHN53I.js → setPrimaryDialogAgentAction-NRO57AS6.js} +3 -3
  65. package/{settingSlice-6M2BKFW5.js → settingSlice-FTWZ5ZHT.js} +4 -2
  66. package/{spaceCommands-NP75DOJW.js → spaceCommands-4R63UST3.js} +9 -9
  67. package/{spaceSlice-J44RNCGS.js → spaceSlice-IYTGSETI.js} +7 -7
  68. package/{streamAgentChatTurn-MNBTNJDU.js → streamAgentChatTurn-42SBHJ6F.js} +28 -22
  69. package/{tools-R2M77NZJ.js → tools-BBNP7OHL.js} +11 -11
  70. package/{updateDialogTitleAction-ERVV47T7.js → updateDialogTitleAction-UOULZ7J2.js} +7 -7
@@ -12,7 +12,7 @@ import {
12
12
  buildLocalAgentLookupKeys,
13
13
  normalizeAgentHandle,
14
14
  shouldReadAgentKeyRemotely
15
- } from "./chunk-FLY6L3KA.js";
15
+ } from "./chunk-TQCONXQ3.js";
16
16
  import {
17
17
  LOCAL_CODEX_AGENT_ID,
18
18
  LOCAL_CODEX_AGENT_KEY,
@@ -21,14 +21,14 @@ import {
21
21
  } from "./chunk-VHBWHNVT.js";
22
22
  import {
23
23
  inferCaptureIntent
24
- } from "./chunk-DSCG2DY5.js";
24
+ } from "./chunk-T3X232L6.js";
25
25
  import {
26
26
  buildCliPrompt
27
27
  } from "./chunk-ATNTHIZI.js";
28
28
  import {
29
29
  inlineImageUrlsForCustomProvider,
30
30
  prepareTools
31
- } from "./chunk-CANREHJB.js";
31
+ } from "./chunk-RLOKCZNX.js";
32
32
  import {
33
33
  getAntigravityUserAgent,
34
34
  isAntigravityOAuthAgent,
@@ -40,6 +40,7 @@ import {
40
40
  addDefaultLightWebToolsForConfiguredAgents,
41
41
  appendEnabledPackPromptPatches,
42
42
  applyDisabledTools,
43
+ applySystemBuiltinSkillFilter,
43
44
  expandEnabledPacks,
44
45
  formatListRunsCard,
45
46
  formatNotFoundRunCard,
@@ -50,8 +51,9 @@ import {
50
51
  readXPostFunctionSchema,
51
52
  readXhsProfileFunc,
52
53
  readXhsProfileFunctionSchema,
53
- rememberMemoryFunctionSchema
54
- } from "./chunk-HXPBV44X.js";
54
+ rememberMemoryFunctionSchema,
55
+ resolveEffectiveEnabledPacks
56
+ } from "./chunk-LAVVL3GH.js";
55
57
  import {
56
58
  createDrainExhaustedResponse,
57
59
  isCoreDrainingBody,
@@ -63,13 +65,13 @@ import {
63
65
  } from "./chunk-OWOHNGCN.js";
64
66
  import {
65
67
  prepareTokenUsageData
66
- } from "./chunk-ZEYSZ5WG.js";
68
+ } from "./chunk-NARL6TJS.js";
67
69
  import {
68
70
  BUILTIN_TITLE_LLM_CONFIG
69
71
  } from "./chunk-V2J635L5.js";
70
72
  import {
71
73
  fetchServerSyncedCredential
72
- } from "./chunk-BHKOPLWJ.js";
74
+ } from "./chunk-4QUXYE7J.js";
73
75
  import {
74
76
  buildAgentRuntimeDialogWritePlan,
75
77
  buildLocalWorkspaceOpenAiTools,
@@ -82,7 +84,7 @@ import {
82
84
  parseSseDataLineJson,
83
85
  readOpenAiCompatibleSseCompletion,
84
86
  resolveOpenAiCompatibleProviderConfig
85
- } from "./chunk-BRODTPXY.js";
87
+ } from "./chunk-33K5FKRL.js";
86
88
  import {
87
89
  buildPlatformChatCompletionRequest,
88
90
  canUsePlatformChatProvider,
@@ -99,7 +101,7 @@ import {
99
101
  import {
100
102
  parseToolArgumentsJson,
101
103
  summarizeToolArguments
102
- } from "./chunk-7H3O7ZA2.js";
104
+ } from "./chunk-VQFY3VXW.js";
103
105
  import {
104
106
  buildLoadSkillExecutor,
105
107
  buildNoloWorkspaceCliToolExecutors,
@@ -144,6 +146,7 @@ import {
144
146
  } from "./chunk-KX6YBIHG.js";
145
147
  import {
146
148
  createTokenKey,
149
+ createUserKey,
147
150
  dialogMessageRange
148
151
  } from "./chunk-O4BU24WZ.js";
149
152
  import {
@@ -248,6 +251,26 @@ var STRINGS = {
248
251
  en: "Started a fresh dialog.",
249
252
  zh: "\u5DF2\u5F00\u59CB\u65B0\u5BF9\u8BDD\u3002"
250
253
  },
254
+ clearingDialog: {
255
+ en: "Clearing current dialog messages...",
256
+ zh: "\u6B63\u5728\u6E05\u9664\u5F53\u524D\u5BF9\u8BDD\u6D88\u606F\u2026"
257
+ },
258
+ clearedDialog: {
259
+ en: "Cleared current dialog messages.",
260
+ zh: "\u5DF2\u6E05\u9664\u5F53\u524D\u5BF9\u8BDD\u6D88\u606F\u3002"
261
+ },
262
+ clearNoDialog: {
263
+ en: "No current dialog messages to clear.",
264
+ zh: "\u5F53\u524D\u6CA1\u6709\u53EF\u6E05\u9664\u7684\u5BF9\u8BDD\u6D88\u606F\u3002"
265
+ },
266
+ clearUsage: {
267
+ en: "Usage: /clear",
268
+ zh: "\u7528\u6CD5\uFF1A/clear"
269
+ },
270
+ contextNextClear: {
271
+ en: "clear current dialog messages",
272
+ zh: "\u6E05\u9664\u5F53\u524D\u5BF9\u8BDD\u6D88\u606F"
273
+ },
251
274
  bye: {
252
275
  en: "Bye.",
253
276
  zh: "\u518D\u89C1\u3002"
@@ -353,12 +376,12 @@ var STRINGS = {
353
376
  zh: "\u7528\u6CD5\uFF1A/copy \u6216 /copy view"
354
377
  },
355
378
  copyViewTitle: {
356
- en: "Copy view \u2014 latest AI reply",
357
- zh: "\u590D\u5236\u89C6\u56FE \u2014 \u6700\u65B0 AI \u56DE\u590D"
379
+ en: "Copy view \u2014 conversation history",
380
+ zh: "\u590D\u5236\u89C6\u56FE \u2014 \u5BF9\u8BDD\u5386\u53F2"
358
381
  },
359
382
  copyViewHint: {
360
- en: "Drag to select; edge scrolling uses native terminal scrollback. Press Esc or Enter to return.",
361
- zh: "\u76F4\u63A5\u62D6\u9009\uFF0C\u62D6\u5230\u8FB9\u7F18\u53EF\u7528\u7EC8\u7AEF\u539F\u751F\u56DE\u6EDA\u8DE8\u5C4F\u9009\u62E9\u3002\u6309 Esc \u6216 Enter \u8FD4\u56DE\u3002"
383
+ en: "Drag to select. Use PageUp/PageDown, Home/End, or the mouse wheel to scroll. Press Esc or Enter to return.",
384
+ zh: "\u76F4\u63A5\u62D6\u9009\u3002\u53EF\u7528 PageUp/PageDown\u3001Home/End \u6216\u9F20\u6807\u6EDA\u8F6E\u6EDA\u52A8\u3002\u6309 Esc \u6216 Enter \u8FD4\u56DE\u3002"
362
385
  },
363
386
  historyNoToken: {
364
387
  en: "History requires an auth token. Run `nolo login` or set AUTH_TOKEN.",
@@ -889,7 +912,7 @@ var TOOL_LABELS = {
889
912
  // ("Fetch" / "抓取网页"), not a longer "Fetch page" phrase.
890
913
  fetchWebpage: { en: "Fetch", zh: "\u6293\u53D6\u7F51\u9875" },
891
914
  readPage: { en: "Read page", zh: "\u8BFB\u53D6\u7F51\u9875" },
892
- exaSearch: { en: "Web search", zh: "\u8054\u7F51\u641C\u7D22" },
915
+ exa_search: { en: "Web search", zh: "\u8054\u7F51\u641C\u7D22" },
893
916
  // Skill loading
894
917
  loadSkill: { en: "Used Skill", zh: "\u4F7F\u7528\u6280\u80FD" }
895
918
  };
@@ -2768,6 +2791,14 @@ import { randomUUID as randomUUID2 } from "node:crypto";
2768
2791
  var ANTHROPIC_MESSAGES_URL = "https://api.anthropic.com/v1/messages";
2769
2792
  var ANTHROPIC_API_VERSION = "2023-06-01";
2770
2793
  var ANTHROPIC_OAUTH_BETA = "oauth-2025-04-20";
2794
+ var CLAUDE_CODE_VERSION = "2.1.220";
2795
+ var CLAUDE_CODE_USER_AGENT = `claude-cli/${CLAUDE_CODE_VERSION} (external, local-agent, agent-sdk/0.1.0)`;
2796
+ var ANTHROPIC_OAUTH_BETA_HEADER = `claude-code-20250219,${ANTHROPIC_OAUTH_BETA}`;
2797
+ var CLAUDE_CODE_SYSTEM_INSTRUCTION = "You are a Claude agent, built on Anthropic's Claude Agent SDK.";
2798
+ var CLAUDE_CODE_IDENTITY_PATTERNS = [
2799
+ CLAUDE_CODE_SYSTEM_INSTRUCTION,
2800
+ "You are Claude Code"
2801
+ ];
2771
2802
  function stringValue(value) {
2772
2803
  return typeof value === "string" && value.length > 0 ? value : void 0;
2773
2804
  }
@@ -2802,6 +2833,15 @@ function pushMessage(messages, role, content) {
2802
2833
  }
2803
2834
  messages.push({ role, content });
2804
2835
  }
2836
+ function hasClaudeCodeIdentity(system) {
2837
+ return system.some((block) => {
2838
+ if (!block || typeof block !== "object") return false;
2839
+ const text = stringValue(block.text);
2840
+ return Boolean(
2841
+ text && CLAUDE_CODE_IDENTITY_PATTERNS.some((pattern) => text.includes(pattern))
2842
+ );
2843
+ });
2844
+ }
2805
2845
  function buildAnthropicMessagesBody(args) {
2806
2846
  const rawMessages = Array.isArray(args.openAiBody.messages) ? args.openAiBody.messages : [];
2807
2847
  const system = [];
@@ -2853,6 +2893,9 @@ function buildAnthropicMessagesBody(args) {
2853
2893
  }
2854
2894
  pushMessage(messages, role, blocks);
2855
2895
  }
2896
+ if (!hasClaudeCodeIdentity(system)) {
2897
+ system.unshift({ type: "text", text: CLAUDE_CODE_SYSTEM_INSTRUCTION });
2898
+ }
2856
2899
  const tools = Array.isArray(args.openAiBody.tools) ? args.openAiBody.tools.flatMap((raw) => {
2857
2900
  if (!raw || typeof raw !== "object") return [];
2858
2901
  const fn = raw.function;
@@ -2927,8 +2970,9 @@ async function fetchAnthropicMessagesCompletion(args) {
2927
2970
  "Content-Type": "application/json",
2928
2971
  Accept: "application/json",
2929
2972
  "anthropic-version": ANTHROPIC_API_VERSION,
2930
- "anthropic-beta": ANTHROPIC_OAUTH_BETA,
2931
- "User-Agent": "nolo-cli"
2973
+ "anthropic-beta": ANTHROPIC_OAUTH_BETA_HEADER,
2974
+ "User-Agent": CLAUDE_CODE_USER_AGENT,
2975
+ "x-app": "cli"
2932
2976
  },
2933
2977
  body: JSON.stringify(buildAnthropicMessagesBody(args)),
2934
2978
  signal: args.signal
@@ -9183,7 +9227,10 @@ function normalizeRuntimeCacheCwd(cwd) {
9183
9227
  return (cwd?.trim() || process.cwd()).replace(/\/+$/, "") || ".";
9184
9228
  }
9185
9229
  function buildPreparedAgentCacheKey(args) {
9186
- return `${args.userId}\0${args.agentRef}\0${args.cwd}`;
9230
+ const systemBuiltinSkillsKey = args.systemBuiltinSkills ? JSON.stringify(
9231
+ Object.keys(args.systemBuiltinSkills).sort().map((key) => [key, args.systemBuiltinSkills?.[key]])
9232
+ ) : "default";
9233
+ return `${args.userId}\0${args.agentRef}\0${args.cwd}\0${systemBuiltinSkillsKey}`;
9187
9234
  }
9188
9235
  function clearCliLocalRuntimePreparedAgentCache() {
9189
9236
  preparedAgentRuntimeCache.clear();
@@ -9280,15 +9327,11 @@ function addDefaultCliCoreTools(toolNames, env) {
9280
9327
  return [.../* @__PURE__ */ new Set([...toolNames, ...injected])];
9281
9328
  }
9282
9329
  function resolveCliEffectiveEnabledPacks(args) {
9283
- if (args.declaredOnly === true) {
9284
- return args.enabledPacks ?? [];
9285
- }
9286
- const base = args.enabledPacks ?? [];
9287
- if (base.length === 0) {
9288
- return ["code", "agent-orchestration", "skills"];
9289
- }
9290
- const withOrchestration = base.includes("agent-orchestration") ? base : [...base, "agent-orchestration"];
9291
- return withOrchestration.includes("skills") ? withOrchestration : [...withOrchestration, "skills"];
9330
+ return resolveEffectiveEnabledPacks({
9331
+ enabledPacks: args.enabledPacks,
9332
+ declaredOnly: args.declaredOnly,
9333
+ emptyFallbackPacks: ["code"]
9334
+ });
9292
9335
  }
9293
9336
  function withRuntimeEnabledPacksAndPrompt(config) {
9294
9337
  const rawRecord = config.rawRecord ?? {};
@@ -9306,28 +9349,30 @@ function withRuntimeEnabledPacksAndPrompt(config) {
9306
9349
  ...prompt ? { prompt } : {}
9307
9350
  };
9308
9351
  }
9309
- function resolveCliRequestedToolNames(agentConfig, env) {
9352
+ function resolveCliRequestedToolNames(agentConfig, env, systemBuiltinSkills) {
9310
9353
  const declaredOnly = shouldUseDeclaredOnlyLocalWorkspaceTools(env);
9311
- return applyDisabledTools(
9312
- addDefaultLightWebToolsForConfiguredAgents(
9313
- addDefaultCliCoreTools(
9314
- canonicalizeToolNames(
9315
- expandEnabledPacks(
9316
- // CLI 端默认开 code 能力包:enabledPacks 为空时补 ["code"],保持
9317
- // 「CLI agent 默认能改代码」的体感,但走显式能力包而非隐式兜底
9318
- // (DEFAULT_LOCAL_CODING_TOOL_NAMES 已删除)。
9319
- // declared-only 模式下不补——用户显式要 ablation。
9320
- resolveCliEffectiveEnabledPacks({
9321
- enabledPacks: agentConfig?.enabledPacks,
9322
- declaredOnly
9323
- }),
9324
- resolveRequestedRuntimeToolNames({ agentConfig })
9325
- )
9326
- ),
9327
- env
9354
+ const expanded = addDefaultLightWebToolsForConfiguredAgents(
9355
+ addDefaultCliCoreTools(
9356
+ canonicalizeToolNames(
9357
+ expandEnabledPacks(
9358
+ // CLI 端默认开 code 能力包:enabledPacks 为空时补 ["code"],保持
9359
+ // 「CLI agent 默认能改代码」的体感,但走显式能力包而非隐式兜底
9360
+ // (DEFAULT_LOCAL_CODING_TOOL_NAMES 已删除)。
9361
+ // declared-only 模式下不补——用户显式要 ablation。
9362
+ resolveCliEffectiveEnabledPacks({
9363
+ enabledPacks: agentConfig?.enabledPacks,
9364
+ declaredOnly
9365
+ }),
9366
+ resolveRequestedRuntimeToolNames({ agentConfig })
9367
+ )
9328
9368
  ),
9329
- agentConfig
9369
+ env
9330
9370
  ),
9371
+ agentConfig
9372
+ );
9373
+ const filtered = applySystemBuiltinSkillFilter(expanded, systemBuiltinSkills);
9374
+ return applyDisabledTools(
9375
+ filtered,
9331
9376
  agentConfig?.disabledTools
9332
9377
  );
9333
9378
  }
@@ -9802,10 +9847,23 @@ function createCliLocalRuntimeAdapter(deps) {
9802
9847
  "local-tools"
9803
9848
  ],
9804
9849
  loadAgentConfig: async (agentRef) => {
9850
+ let systemBuiltinSkills = null;
9851
+ const sharedStore = await getOrCreateSharedStore(deps);
9852
+ if (userId) {
9853
+ try {
9854
+ const settingsRecord = await sharedStore.read(
9855
+ createUserKey.settings(userId),
9856
+ { remote: false }
9857
+ );
9858
+ systemBuiltinSkills = settingsRecord && typeof settingsRecord === "object" ? settingsRecord.systemBuiltinSkills ?? null : null;
9859
+ } catch {
9860
+ }
9861
+ }
9805
9862
  const cacheKey = buildPreparedAgentCacheKey({
9806
9863
  userId,
9807
9864
  agentRef,
9808
- cwd: normalizeRuntimeCacheCwd(workspaceRoot)
9865
+ cwd: normalizeRuntimeCacheCwd(workspaceRoot),
9866
+ systemBuiltinSkills
9809
9867
  });
9810
9868
  const cached = deps.pastedTextStore ? void 0 : preparedAgentRuntimeCache.get(cacheKey);
9811
9869
  if (cached) {
@@ -9825,7 +9883,7 @@ function createCliLocalRuntimeAdapter(deps) {
9825
9883
  deps.env
9826
9884
  );
9827
9885
  const agentConfig = baseAgentConfig ? withRuntimeEnabledPacksAndPrompt(baseAgentConfig) : baseAgentConfig;
9828
- const requestedToolNames = agentConfig ? resolveCliRequestedToolNames(agentConfig, deps.env) : [];
9886
+ const requestedToolNames = agentConfig ? resolveCliRequestedToolNames(agentConfig, deps.env, systemBuiltinSkills) : [];
9829
9887
  activeAgentToolNames = buildLocalPolicyToolNames({
9830
9888
  agentKey: agentConfig?.key,
9831
9889
  toolNames: [...requestedToolNames, ...additionalToolNames],
@@ -34,10 +34,10 @@ import {
34
34
  } from "./chunk-VF4K2QE6.js";
35
35
  import {
36
36
  createDocState
37
- } from "./chunk-IVOFAQ5R.js";
37
+ } from "./chunk-4GTGSUMH.js";
38
38
  import {
39
39
  createDialogAction
40
- } from "./chunk-2KNEWIDU.js";
40
+ } from "./chunk-X7NITNY4.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-ZEYSZ5WG.js";
79
+ } from "./chunk-NARL6TJS.js";
80
80
  import {
81
81
  createAgent,
82
82
  runLlm,
83
83
  streamAgentChatTurn,
84
84
  updateAgent
85
- } from "./chunk-BHKOPLWJ.js";
85
+ } from "./chunk-4QUXYE7J.js";
86
86
  import {
87
87
  NOLO_WORKSPACE_TOOL_NAMES,
88
88
  buildNoloSubjectRefQueryTarget,
@@ -101,7 +101,7 @@ import {
101
101
  } from "./chunk-B4KT7RN2.js";
102
102
  import {
103
103
  buildDatabaseFileContentUrl
104
- } from "./chunk-SJQVOEIV.js";
104
+ } from "./chunk-3B2LFO6R.js";
105
105
  import {
106
106
  DEFAULT_MODEL
107
107
  } from "./chunk-OGGHETUE.js";
@@ -130,14 +130,16 @@ import {
130
130
  } from "./chunk-HNMXYYJR.js";
131
131
  import {
132
132
  shareResourceAction
133
- } from "./chunk-CFX7LP6W.js";
133
+ } from "./chunk-BHK5ZAW7.js";
134
134
  import {
135
135
  AGENT_UPDATE_FIELD_NAMES,
136
+ SYSTEM_AGENT_CAPABILITIES,
137
+ SYSTEM_AGENT_CAPABILITY_IDS,
136
138
  normalizeAgentUpdateFieldList,
137
139
  selectAutoApproveSelfUpdateFields,
138
140
  selectCurrentServer,
139
141
  selectSyncServers
140
- } from "./chunk-EC2EU2F4.js";
142
+ } from "./chunk-S5UACFUP.js";
141
143
  import {
142
144
  asRecordOrEmpty
143
145
  } from "./chunk-KX6YBIHG.js";
@@ -145,7 +147,7 @@ import {
145
147
  addContentAction,
146
148
  createSpaceKey,
147
149
  normalizeSpaceId
148
- } from "./chunk-2MW6QFIQ.js";
150
+ } from "./chunk-3FCSMQAC.js";
149
151
  import {
150
152
  patch,
151
153
  read,
@@ -153,7 +155,7 @@ import {
153
155
  readAndWaitAction,
154
156
  toTimestampMs,
155
157
  write
156
- } from "./chunk-V6PGKRZC.js";
158
+ } from "./chunk-A5V7UEZJ.js";
157
159
  import {
158
160
  SEPARATOR,
159
161
  createAgentKey,
@@ -11211,15 +11213,9 @@ var TOOL_PACKS = {
11211
11213
  "fetchWebpage"
11212
11214
  ]
11213
11215
  };
11216
+ var SYSTEM_AGENT_CAPABILITY_PACKS = SYSTEM_AGENT_CAPABILITIES.map((capability) => ({ ...capability }));
11214
11217
  var CAPABILITY_PACKS = [
11215
- {
11216
- id: "web-search",
11217
- label: "\u8054\u7F51\u641C\u7D22",
11218
- description: "\u8BA9 agent \u80FD\u641C\u7D22\u4E92\u8054\u7F51\u3001\u6293\u53D6\u7F51\u9875\u5185\u5BB9\uFF0C\u83B7\u53D6\u6700\u65B0\u4FE1\u606F\u3002",
11219
- tools: ["exa_search", "fetchWebpage"],
11220
- defaultEnabled: true,
11221
- icon: "\u{1F310}"
11222
- },
11218
+ ...SYSTEM_AGENT_CAPABILITY_PACKS,
11223
11219
  {
11224
11220
  id: "long-term-memory",
11225
11221
  label: "\u957F\u671F\u8BB0\u5FC6",
@@ -11352,6 +11348,22 @@ var CAPABILITY_PACKS = [
11352
11348
  \u{1F517} \u8BBF\u95EE\u94FE\u63A5\uFF1A[URL]
11353
11349
 
11354
11350
  \u8FD9\u4E2A\u5E94\u7528\u53EF\u4EE5\u5E2E\u4F60 [\u4E00\u53E5\u8BDD\u529F\u80FD\u63CF\u8FF0]\u3002\u60F3\u8981\u4FEE\u6539\u6216\u6DFB\u52A0\u529F\u80FD\uFF0C\u76F4\u63A5\u544A\u8BC9\u6211\u5C31\u884C\uFF01"`
11351
+ },
11352
+ {
11353
+ id: "video-transcription",
11354
+ label: "\u89C6\u9891\u8F6C\u5199",
11355
+ description: "\u8D34\u89C6\u9891\u94FE\u63A5\u5373\u53EF\u8F6C\u5199\u4E3A\u5E26\u6807\u70B9\u6587\u672C\u4E0E SRT\u3002\u652F\u6301 B \u7AD9\u5206 P\uFF08\u9ED8\u8BA4\u5168\u90E8\u5904\u7406\uFF09\u3001YouTube \u7B49\uFF1B\u6296\u97F3\u8BF7\u5728\u684C\u9762\u7AEF\u6D4F\u89C8\u5668\u4F7F\u7528\u3002",
11356
+ tools: ["transcribeVideo"],
11357
+ defaultEnabled: false,
11358
+ icon: "\u{1F3AC}",
11359
+ promptPatch: `# \u89C6\u9891\u8F6C\u5199\u80FD\u529B\u5305
11360
+
11361
+ ## \u7528\u6CD5
11362
+ - \u7528\u6237\u8D34\u4E0A\u89C6\u9891\u94FE\u63A5\u65F6\uFF0C\u76F4\u63A5\u8C03\u7528 \`transcribeVideo({ url })\`\uFF0C\u4E0D\u8981\u5148\u95EE\u8981\u4E0D\u8981\u8F6C\u5199\u3002
11363
+ - B \u7AD9\u5206 P / \u5408\u96C6\uFF1A\u7F3A\u7701\u5904\u7406\u5168\u90E8\uFF1B\u82E5\u7528\u6237\u6307\u5B9A\u300C\u53EA\u8981\u7B2C 3\u30014 \u96C6\u300D\u5219\u4F20 \`p: [3, 4]\`\u3002
11364
+ - \u8FD4\u56DE\u91CC\u7684 \`processedParts\` / \`availableParts\` \u5FC5\u987B\u5411\u7528\u6237\u8BF4\u6E05\u695A\uFF0C\u907F\u514D\u9759\u9ED8\u4E22\u5206 P\u3002
11365
+ - \u6296\u97F3\u82E5\u62A5\u300C\u8BE5\u5E73\u53F0\u9700\u8981\u767B\u5F55\u6001\uFF0C\u8BF7\u5728\u684C\u9762\u7AEF\u6D4F\u89C8\u5668\u4E2D\u4F7F\u7528\u300D\uFF0C\u63D0\u793A\u7528\u6237\u6539\u8D70\u684C\u9762\u7AEF\u6D4F\u89C8\u80FD\u529B\uFF0C\u4E0D\u8981\u5C1D\u8BD5\u4F20 cookie\u3002
11366
+ `
11355
11367
  }
11356
11368
  ];
11357
11369
  var CAPABILITY_PACK_BY_ID = CAPABILITY_PACKS.reduce(
@@ -11367,6 +11379,37 @@ var PACK_MANAGED_TOOLS = new Set(
11367
11379
  var DEFAULT_ENABLED_PACKS = CAPABILITY_PACKS.filter(
11368
11380
  (pack) => pack.defaultEnabled
11369
11381
  ).map((pack) => pack.id);
11382
+ var ALWAYS_ON_PACK_IDS = [
11383
+ "long-term-memory",
11384
+ "agent-orchestration",
11385
+ "skills"
11386
+ ];
11387
+ function resolveEffectiveEnabledPacks(args) {
11388
+ const base = args.enabledPacks ?? [];
11389
+ if (args.declaredOnly === true) return [...base];
11390
+ return [
11391
+ .../* @__PURE__ */ new Set([
11392
+ ...base,
11393
+ ...base.length === 0 ? args.emptyFallbackPacks ?? [] : [],
11394
+ ...args.hostPacks ?? [],
11395
+ ...ALWAYS_ON_PACK_IDS
11396
+ ])
11397
+ ];
11398
+ }
11399
+ var SYSTEM_BUILTIN_SKILL_PACK_IDS = SYSTEM_AGENT_CAPABILITY_IDS;
11400
+ function applySystemBuiltinSkillFilter(toolNames, systemBuiltinSkills) {
11401
+ if (!systemBuiltinSkills) return toolNames;
11402
+ const disabledToolSet = /* @__PURE__ */ new Set();
11403
+ for (const packId of SYSTEM_BUILTIN_SKILL_PACK_IDS) {
11404
+ const enabled = systemBuiltinSkills[packId];
11405
+ if (enabled === false) {
11406
+ const pack = CAPABILITY_PACK_BY_ID[packId];
11407
+ if (pack) pack.tools.forEach((t) => disabledToolSet.add(t));
11408
+ }
11409
+ }
11410
+ if (disabledToolSet.size === 0) return toolNames;
11411
+ return toolNames.filter((t) => !disabledToolSet.has(t));
11412
+ }
11370
11413
  function expandEnabledPacks(enabledPacks, explicitTools = []) {
11371
11414
  const packTools = (enabledPacks ?? []).map((id) => CAPABILITY_PACK_BY_ID[id]?.tools ?? []).flat();
11372
11415
  return [.../* @__PURE__ */ new Set([...packTools, ...explicitTools ?? []])];
@@ -14104,7 +14147,7 @@ async function deleteDialogsFunc(args, thunkApi) {
14104
14147
  const deletedDialogIds = [];
14105
14148
  const deletedDialogKeys = [];
14106
14149
  const failures = [];
14107
- const { deleteDialog } = await import("./dialogSlice-ZRYCGVVH.js");
14150
+ const { deleteDialog } = await import("./dialogSlice-MLJL22KB.js");
14108
14151
  for (const target of targets) {
14109
14152
  try {
14110
14153
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -18687,6 +18730,68 @@ var whisperV3Func = async (input, thunkApi) => {
18687
18730
  };
18688
18731
  };
18689
18732
 
18733
+ // packages/ai/tools/transcribeVideoTool.ts
18734
+ var transcribeVideoSchema = {
18735
+ name: "transcribeVideo",
18736
+ description: "\u5C06\u89C6\u9891\u94FE\u63A5\u8F6C\u5199\u4E3A\u5E26\u6807\u70B9\u7684\u6587\u672C\u4E0E SRT \u5B57\u5E55\u3002\u652F\u6301 B \u7AD9\u5206 P/\u5408\u96C6\uFF08\u9ED8\u8BA4\u5904\u7406\u5168\u90E8\uFF0C\u4E5F\u53EF\u6307\u5B9A p\uFF09\u3001YouTube \u7B49 yt-dlp \u5E73\u53F0\uFF1B\u6296\u97F3\u9700\u5728\u684C\u9762\u7AEF\u6D4F\u89C8\u5668\u4F7F\u7528\u3002\u4E0B\u8F7D\u540E\u4E0D\u8F6C\u7801\uFF0C\u4FDD\u7559\u539F\u59CB\u97F3\u8F68\u8D28\u91CF\u3002",
18737
+ parameters: {
18738
+ type: "object",
18739
+ properties: {
18740
+ url: {
18741
+ type: "string",
18742
+ description: "\u89C6\u9891\u94FE\u63A5\uFF08B \u7AD9 / YouTube \u7B49\uFF09\u3002\u5206 P \u5408\u96C6\u7F3A\u7701\u4F1A\u5904\u7406\u5168\u90E8\uFF0C\u7ED3\u679C\u91CC\u4F1A\u5217\u51FA processedParts\u3002"
18743
+ },
18744
+ p: {
18745
+ description: "\u53EF\u9009\uFF0C1-based \u5206 P \u9009\u62E9\u3002\u4F20\u5355\u4E2A\u6570\u5B57\u6216\u6570\u5B57\u6570\u7EC4\uFF1B\u7F3A\u7701=\u5168\u90E8\u5904\u7406\uFF08\u7EDD\u4E0D\u9759\u9ED8\u53EA\u6293\u7B2C\u4E00\u4E2A\uFF09\u3002",
18746
+ oneOf: [
18747
+ { type: "number" },
18748
+ { type: "array", items: { type: "number" } }
18749
+ ]
18750
+ },
18751
+ language: {
18752
+ type: "string",
18753
+ description: "\u53EF\u9009\u8BED\u8A00\u63D0\u793A\uFF0C\u9ED8\u8BA4 zh\u3002"
18754
+ }
18755
+ },
18756
+ required: ["url"]
18757
+ }
18758
+ };
18759
+ async function transcribeVideoFunc(input, thunkApi) {
18760
+ const url = typeof input?.url === "string" ? input.url.trim() : "";
18761
+ if (!url) {
18762
+ throw new Error("\u5FC5\u987B\u63D0\u4F9B\u6709\u6548\u7684 url");
18763
+ }
18764
+ const body = { url };
18765
+ if (input.p !== void 0) body.p = input.p;
18766
+ if (input.language !== void 0) body.language = input.language;
18767
+ const data = await callToolApi(thunkApi, "/api/transcribe-video", body, {
18768
+ withAuth: true
18769
+ });
18770
+ const processed = Array.isArray(data?.processedParts) && data.processedParts.length ? data.processedParts.join(",") : "?";
18771
+ const available = data?.availableParts ?? "?";
18772
+ const preview = String(data?.text || "").slice(0, 240);
18773
+ return {
18774
+ summary: `\u89C6\u9891\u8F6C\u5199\u5B8C\u6210\uFF08\u5904\u7406\u5206 P: ${processed} / \u5171 ${available}\uFF09`,
18775
+ title: data?.title,
18776
+ duration: data?.duration,
18777
+ text: data?.text || "",
18778
+ srt: data?.srt || "",
18779
+ degradedChunks: data?.degradedChunks ?? 0,
18780
+ processedParts: data?.processedParts,
18781
+ availableParts: data?.availableParts,
18782
+ parts: data?.parts,
18783
+ displayData: `\u{1F3AC} \u89C6\u9891\u8F6C\u5199\u5B8C\u6210
18784
+ - \u6807\u9898: ${data?.title ?? "?"}
18785
+ - \u5904\u7406\u5206 P: ${processed}\uFF08\u5171 ${available}\uFF09
18786
+ - \u964D\u7EA7\u5757: ${data?.degradedChunks ?? 0}
18787
+
18788
+ **\u6B63\u6587\u9884\u89C8\uFF1A**
18789
+
18790
+ ${preview}${String(data?.text || "").length > 240 ? "\u2026" : ""}`,
18791
+ rawData: data
18792
+ };
18793
+ }
18794
+
18690
18795
  // packages/ai/tools/apifyActorClient.ts
18691
18796
  async function callApifyActor(thunkApi, params) {
18692
18797
  const { actorId, input, resultType = "datasetItems", displayName } = params;
@@ -19756,7 +19861,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
19756
19861
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
19757
19862
  async function addImageContentToSpace(input) {
19758
19863
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
19759
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-ZCJJ3XOL.js")).addContentAction;
19864
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-4Z762DMR.js")).addContentAction;
19760
19865
  await addContentAction2(
19761
19866
  {
19762
19867
  spaceId: input.spaceId,
@@ -23244,7 +23349,7 @@ var executeToolRun = createAsyncThunk(
23244
23349
  if (!executionInput) {
23245
23350
  throw new Error(`ToolRun ${id} has no input to execute with.`);
23246
23351
  }
23247
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-R2M77NZJ.js");
23352
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-BBNP7OHL.js");
23248
23353
  const { executor } = findToolExecutor2(run.toolName);
23249
23354
  toolRunStarted({
23250
23355
  id: run.id,
@@ -23268,7 +23373,7 @@ var executeToolRun = createAsyncThunk(
23268
23373
  const latestState = thunkApi.getState();
23269
23374
  const userId = latestState.auth?.currentUser?.userId;
23270
23375
  if (userId) {
23271
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-J44RNCGS.js");
23376
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-IYTGSETI.js");
23272
23377
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
23273
23378
  }
23274
23379
  }
@@ -25671,7 +25776,7 @@ async function updateDocFunc(args, thunkApi) {
25671
25776
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
25672
25777
  };
25673
25778
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
25674
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-AYLR7HES.js");
25779
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-CRULGCHQ.js");
25675
25780
  if (getDocState().pageKey === id) {
25676
25781
  applyExternalDocUpdate({
25677
25782
  slateData: finalSlateData,
@@ -25696,7 +25801,7 @@ async function updateDocFunc(args, thunkApi) {
25696
25801
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
25697
25802
  async function dispatchSetSettings(thunkApi, changes) {
25698
25803
  const injectedSetSettings = thunkApi?.extra?.setSettings;
25699
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-6M2BKFW5.js")).setSettings;
25804
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-FTWZ5ZHT.js")).setSettings;
25700
25805
  await thunkApi.dispatch(setSettings(changes)).unwrap();
25701
25806
  }
25702
25807
  var updateUserPreferenceProfileFunctionSchema = {
@@ -27523,6 +27628,18 @@ var baseToolDefinitions = [
27523
27628
  },
27524
27629
  behavior: "data"
27525
27630
  },
27631
+ {
27632
+ id: "transcribeVideo",
27633
+ schema: transcribeVideoSchema,
27634
+ executor: transcribeVideoFunc,
27635
+ description: {
27636
+ name: "transcribeVideo",
27637
+ description: "\u5C06\u89C6\u9891\u94FE\u63A5\u8F6C\u5199\u4E3A\u5E26\u6807\u70B9\u6587\u672C\u4E0E SRT \u5B57\u5E55\u3002\u652F\u6301 B \u7AD9\u5206 P/\u5408\u96C6\uFF08\u7F3A\u7701\u5904\u7406\u5168\u90E8\uFF0C\u7EDD\u4E0D\u9759\u9ED8\u4E22\u5206 P\uFF09\u3001YouTube \u7B49\uFF1B\u6296\u97F3\u9700\u5728\u684C\u9762\u7AEF\u6D4F\u89C8\u5668\u4F7F\u7528\u3002",
27638
+ category: "\u5A92\u4F53\u5904\u7406"
27639
+ },
27640
+ behavior: "data",
27641
+ uiGroup: "general"
27642
+ },
27526
27643
  // --- Cloudflare Browser Rendering ---
27527
27644
  {
27528
27645
  id: "cfScreenshot",
@@ -27908,6 +28025,8 @@ export {
27908
28025
  formatNotFoundRunCard,
27909
28026
  isAgentRunTerminalStatus,
27910
28027
  TOOL_PACKS,
28028
+ resolveEffectiveEnabledPacks,
28029
+ applySystemBuiltinSkillFilter,
27911
28030
  expandEnabledPacks,
27912
28031
  expandEnabledPackPromptPatches,
27913
28032
  appendEnabledPackPromptPatches,