nolo-cli 0.16.0-alpha.19 → 0.16.0-alpha.20

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 (63) hide show
  1. package/{_executeModel-YY6LVJXJ.js → _executeModel-GRCQXT5R.js} +13 -13
  2. package/{agentDeleteCommand-TJ2EAYDA.js → agentDeleteCommand-WNL3CNQX.js} +6 -6
  3. package/{agentEmailCommands-UKEGNW25.js → agentEmailCommands-MPEUMRAS.js} +16 -16
  4. package/{agentListCommands-WD5XYVGK.js → agentListCommands-YO4AOQMS.js} +8 -8
  5. package/{agentMachineCommands-OHZ3HKOV.js → agentMachineCommands-WYM6YRYJ.js} +6 -6
  6. package/{agentRecordCommands-N2JQMKS4.js → agentRecordCommands-BVWSHMIY.js} +16 -16
  7. package/{agentRunCommand-P2ECE6UJ.js → agentRunCommand-E3ZI6RSF.js} +16 -16
  8. package/{agentRunControl-P75VPTGS.js → agentRunControl-Y5AFH5PQ.js} +2 -2
  9. package/{agentRuntimeLocal-K2J7IS6O.js → agentRuntimeLocal-P4VGX6H6.js} +3 -3
  10. package/{agentSlice-OOLSXBHE.js → agentSlice-D33GU3JL.js} +1 -1
  11. package/{appDeleteCommands-X7YGULGZ.js → appDeleteCommands-VA4R2SWX.js} +7 -7
  12. package/{appDeployCommands-IMNPBUN7.js → appDeployCommands-JWMWQNG6.js} +7 -7
  13. package/{appDeployStatusCommands-2KFZUEET.js → appDeployStatusCommands-KYXGLZSQ.js} +7 -7
  14. package/{appGetCommands-AYG44S7G.js → appGetCommands-ELOO3JG6.js} +7 -7
  15. package/{appListCommands-Z7CLYPLH.js → appListCommands-SJUW4RLW.js} +7 -7
  16. package/{chunk-IOOMJJ4Z.js → chunk-34WPV75U.js} +21 -0
  17. package/{chunk-RYFZ55YC.js → chunk-5PGGCJGV.js} +3 -3
  18. package/{chunk-5ICZUVFN.js → chunk-AKVLLMOU.js} +3 -3
  19. package/{chunk-B26VDWID.js → chunk-BE2GNT5E.js} +1 -1
  20. package/{chunk-IRQJSVET.js → chunk-E5KQTMMJ.js} +39 -12
  21. package/{chunk-X3AHTP6B.js → chunk-ENP2ELIL.js} +2 -2
  22. package/{chunk-SQNQOXQ6.js → chunk-EXAEHRLI.js} +24 -33
  23. package/{chunk-FKXFCYVO.js → chunk-FQZZLA3C.js} +2 -0
  24. package/{chunk-JIDA7LBE.js → chunk-GMZZ5EKJ.js} +3 -3
  25. package/{chunk-BLQ3U7UK.js → chunk-HQNPCMWL.js} +1 -1
  26. package/{chunk-A7QNCVO5.js → chunk-IQZ6TGVW.js} +1 -1
  27. package/{chunk-2M54XJFV.js → chunk-J67FKTTY.js} +22 -20
  28. package/{chunk-CGSHUOC7.js → chunk-JFE7XW4D.js} +1 -1
  29. package/{chunk-XJITGCTM.js → chunk-JP7REMYP.js} +9 -0
  30. package/{chunk-KO4PXGVN.js → chunk-KKWJ5VPZ.js} +1 -1
  31. package/{chunk-OZPVJZBX.js → chunk-L2RRMXNJ.js} +11 -2
  32. package/{chunk-QSLNKTUG.js → chunk-MUIT5AAM.js} +84 -15
  33. package/{chunk-3PGT7DEK.js → chunk-N2HYIBLH.js} +2 -2
  34. package/{chunk-YEFSRF54.js → chunk-PUSK7HXJ.js} +25 -9
  35. package/{chunk-XYXJ4JRT.js → chunk-RIDWN7AP.js} +1 -1
  36. package/{chunk-JBWVSKBS.js → chunk-RUTSBLDM.js} +38 -9
  37. package/{chunk-BDSHV5HO.js → chunk-UIOYWBU7.js} +9 -13
  38. package/{chunk-TSIYZBTH.js → chunk-VNAEBGDK.js} +1 -1
  39. package/{chunk-XU6XCPWB.js → chunk-VST53WEL.js} +1 -1
  40. package/{chunk-QCJITMYO.js → chunk-VVKQFITN.js} +5 -2
  41. package/{chunk-OOKISU7J.js → chunk-XFYDGBXL.js} +1 -1
  42. package/{createAgentAutomationAction-EL5ORU35.js → createAgentAutomationAction-ONKZ46XE.js} +2 -2
  43. package/{createDialogAction-DKED4DHE.js → createDialogAction-7QWJEBKU.js} +3 -3
  44. package/{createPageAction-BYW4YP54.js → createPageAction-PB3KXZIA.js} +2 -2
  45. package/{dialogCommands-J7C6MB3Q.js → dialogCommands-YZFU4Q26.js} +7 -7
  46. package/{dialogSlice-RJCHTUIG.js → dialogSlice-53B5ISGQ.js} +2 -2
  47. package/{docCreateCommands-Y7OSXNB6.js → docCreateCommands-LOUC5PFB.js} +6 -6
  48. package/{docDeleteCommands-ALZGQRCE.js → docDeleteCommands-HHPGT4BR.js} +7 -7
  49. package/{docReadCommands-4BDDESGT.js → docReadCommands-YPSN4HEF.js} +6 -6
  50. package/{docStore-QWYVY7SV.js → docStore-LJXXRB5W.js} +3 -3
  51. package/{docUpdateCommands-LU2ZM2VE.js → docUpdateCommands-CJCZO54M.js} +6 -6
  52. package/{handleSendMessageAction-CUZL72WD.js → handleSendMessageAction-ICGX4QCM.js} +2 -2
  53. package/index.js +45 -45
  54. package/{machineCommands-QMODXRTA.js → machineCommands-YLDZXK4D.js} +15 -15
  55. package/{machineWsRunDispatch-UPWS4PZD.js → machineWsRunDispatch-LTQL3DRE.js} +15 -15
  56. package/package.json +1 -1
  57. package/{readlineWorkspace-ZDN3CREA.js → readlineWorkspace-OSPVWNAT.js} +493 -88
  58. package/{runAgentClientLoop-XKFPXIZC.js → runAgentClientLoop-76SUKKPX.js} +10 -10
  59. package/{spaceCommands-UG4QHSHD.js → spaceCommands-GIF7MKVD.js} +6 -6
  60. package/{spaceSlice-LR2XC33A.js → spaceSlice-M4PVN5PO.js} +2 -2
  61. package/{streamAgentChatTurn-5UOO7W6S.js → streamAgentChatTurn-GCKTFSHQ.js} +12 -12
  62. package/{tools-VHE5VME5.js → tools-RJVFXOLR.js} +7 -7
  63. package/{updateDialogTitleAction-OZZQ7SB2.js → updateDialogTitleAction-PSR67DLV.js} +2 -2
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  sortSafeAgentSummaries,
10
10
  toSafeAgentSummary
11
- } from "./chunk-XJITGCTM.js";
11
+ } from "./chunk-JP7REMYP.js";
12
12
  import {
13
13
  getUserDataItemTimestamp,
14
14
  mergeAndDedupUserData
@@ -28,7 +28,7 @@ import {
28
28
  } from "./chunk-VF4K2QE6.js";
29
29
  import {
30
30
  createDocState
31
- } from "./chunk-3PGT7DEK.js";
31
+ } from "./chunk-N2HYIBLH.js";
32
32
  import {
33
33
  setDialogExtraReferencesAction
34
34
  } from "./chunk-JLA4FXYC.js";
@@ -40,7 +40,7 @@ import {
40
40
  } from "./chunk-63W5N6P3.js";
41
41
  import {
42
42
  createDialogAction
43
- } from "./chunk-XYXJ4JRT.js";
43
+ } from "./chunk-RIDWN7AP.js";
44
44
  import {
45
45
  addCategory,
46
46
  addContentToSpace,
@@ -71,13 +71,13 @@ import {
71
71
  updateContentCategory,
72
72
  updateContentTitle,
73
73
  updateStep
74
- } from "./chunk-BDSHV5HO.js";
74
+ } from "./chunk-UIOYWBU7.js";
75
75
  import {
76
76
  createAgent,
77
77
  runLlm,
78
78
  streamAgentChatTurn,
79
79
  updateAgent
80
- } from "./chunk-RYFZ55YC.js";
80
+ } from "./chunk-5PGGCJGV.js";
81
81
  import {
82
82
  buildCodingSkillContentBySlug,
83
83
  buildCodingSkillPageKey,
@@ -151,7 +151,7 @@ import {
151
151
  formatStatusRunCard,
152
152
  formatStopRunCard,
153
153
  resolveRunLabel
154
- } from "./chunk-FKXFCYVO.js";
154
+ } from "./chunk-FQZZLA3C.js";
155
155
  import {
156
156
  shareResourceAction
157
157
  } from "./chunk-UGUW3FHG.js";
@@ -5601,6 +5601,9 @@ var interface_locale_default = {
5601
5601
  windowsDesc: "One-click installer for Windows.",
5602
5602
  linuxTitle: "Linux",
5603
5603
  linuxDesc: "Native package for your environment.",
5604
+ linuxTarInstallHint: "Extract and run bin/launcher \u2014 no install needed.",
5605
+ linuxDebInstallHint: "sudo apt install ./nolo-desktop_amd64.deb",
5606
+ linuxRpmInstallHint: "sudo dnf install ./nolo-desktop_x86_64.rpm",
5604
5607
  macosTitle: "macOS",
5605
5608
  macosDesc: "Optimized for Apple Silicon.",
5606
5609
  macosDmgInstaller: {
@@ -5637,7 +5640,6 @@ var interface_locale_default = {
5637
5640
  pricingTitle: "Pricing Details",
5638
5641
  pricingDesc: "View pricing rules",
5639
5642
  guideTitle: "User Guide",
5640
- guideDesc: "Quick start tips",
5641
5643
  downloadClientTitle: "Download Client",
5642
5644
  downloadClientDesc: "Install Nolo on desktop and mobile devices",
5643
5645
  feedbackTitle: "Give Feedback",
@@ -6828,6 +6830,9 @@ var interface_locale_default = {
6828
6830
  windowsDesc: "Windows \u4E00\u952E\u5B89\u88C5\u5305\u3002",
6829
6831
  linuxTitle: "Linux",
6830
6832
  linuxDesc: "\u9002\u914D\u4F60\u672C\u5730\u73AF\u5883\u7684\u539F\u751F\u5305\u3002",
6833
+ linuxTarInstallHint: "\u89E3\u538B\u540E\u8FD0\u884C bin/launcher\uFF0C\u65E0\u9700\u5B89\u88C5\u3002",
6834
+ linuxDebInstallHint: "sudo apt install ./nolo-desktop_amd64.deb",
6835
+ linuxRpmInstallHint: "sudo dnf install ./nolo-desktop_x86_64.rpm",
6831
6836
  macosTitle: "macOS",
6832
6837
  macosDesc: "\u4E3A Apple Silicon \u4F18\u5316\u3002",
6833
6838
  macosDmgInstaller: {
@@ -6864,7 +6869,6 @@ var interface_locale_default = {
6864
6869
  pricingTitle: "\u8BA1\u8D39\u8BE6\u60C5",
6865
6870
  pricingDesc: "\u67E5\u770B\u4EF7\u683C\u89C4\u5219",
6866
6871
  guideTitle: "\u4F7F\u7528\u6307\u5357",
6867
- guideDesc: "\u5FEB\u901F\u4E0A\u624B\u6280\u5DE7",
6868
6872
  downloadClientTitle: "\u4E0B\u8F7D\u5BA2\u6237\u7AEF",
6869
6873
  downloadClientDesc: "\u5B89\u88C5\u684C\u9762\u7AEF\u548C\u79FB\u52A8\u7AEF\uFF0C\u6362\u8BBE\u5907\u4E5F\u80FD\u7EE7\u7EED\u7528",
6870
6874
  feedbackTitle: "\u610F\u89C1\u53CD\u9988",
@@ -8091,7 +8095,6 @@ var interface_locale_default = {
8091
8095
  pricingTitle: "\u8A08\u8CBB\u8A73\u60C5",
8092
8096
  pricingDesc: "\u67E5\u770B\u50F9\u683C\u898F\u5247",
8093
8097
  guideTitle: "\u4F7F\u7528\u6307\u5357",
8094
- guideDesc: "\u5FEB\u901F\u4E0A\u624B\u6280\u5DE7",
8095
8098
  downloadClientTitle: "\u4E0B\u8F09\u5BA2\u6236\u7AEF",
8096
8099
  downloadClientDesc: "\u5B89\u88DD\u684C\u9762\u7AEF\u548C\u884C\u52D5\u7AEF\uFF0C\u63DB\u88DD\u7F6E\u4E5F\u80FD\u7E7C\u7E8C\u7528",
8097
8100
  feedbackTitle: "\u610F\u898B\u56DE\u994B",
@@ -9240,7 +9243,6 @@ var interface_locale_default = {
9240
9243
  pricingTitle: "\u6599\u91D1\u8A73\u7D30",
9241
9244
  pricingDesc: "\u6599\u91D1\u30EB\u30FC\u30EB\u3092\u78BA\u8A8D",
9242
9245
  guideTitle: "\u4F7F\u3044\u65B9\u30AC\u30A4\u30C9",
9243
- guideDesc: "\u30AF\u30A4\u30C3\u30AF\u30B9\u30BF\u30FC\u30C8\u306E\u30B3\u30C4",
9244
9246
  downloadClientTitle: "\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",
9245
9247
  downloadClientDesc: "\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u3068\u30E2\u30D0\u30A4\u30EB\u306B Nolo \u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB",
9246
9248
  feedbackTitle: "\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF",
@@ -14250,7 +14252,7 @@ async function deleteDialogsFunc(args, thunkApi) {
14250
14252
  const deletedDialogIds = [];
14251
14253
  const deletedDialogKeys = [];
14252
14254
  const failures = [];
14253
- const { deleteDialog } = await import("./dialogSlice-RJCHTUIG.js");
14255
+ const { deleteDialog } = await import("./dialogSlice-53B5ISGQ.js");
14254
14256
  for (const target of targets) {
14255
14257
  try {
14256
14258
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -14329,7 +14331,7 @@ function formatAgentListCard(agents, maxDisplay = 20) {
14329
14331
  }
14330
14332
  var listAgentsFunctionSchema = {
14331
14333
  name: "listAgents",
14332
- description: "List the current user's Nolo agents as safe summaries. Use readAgent with the selected id/publicKey to resolve the runnable agentKey before delegation.",
14334
+ description: "List the current user's Nolo agents as safe summaries. The `agents` array in the JSON result carries each agent's runnable `agentKey` (agent-<userId>-<id> for owned, agent-pub-<id> for public) plus model, apiSource, tools, prices, isOwned, isFavorite. Copy `agentKey` verbatim into startAgentRun/callAgent. Prefer isOwned agents (use your own quota, no platform credits).",
14333
14335
  parameters: {
14334
14336
  type: "object",
14335
14337
  properties: {
@@ -14378,7 +14380,7 @@ async function listAgentsFunc(args, thunkApi) {
14378
14380
  }
14379
14381
  var readAgentFunctionSchema = {
14380
14382
  name: "readAgent",
14381
- description: "Read one agent's full config from the Nolo workspace. Accepts an agent dbKey (agent-xxx), plain id, alias, or agent URL; resolves it (including public agents via agent-pub-<id>; the server runtime also falls back to handle lookup) and returns the runnable agentKey plus a redacted record with fields such as model, provider, apiSource, tools, prompt, inputPrice, outputPrice, and isPublic. Use it before delegation to confirm an agent's identity and capabilities, or to resolve the agentKey that startAgentRun requires.",
14383
+ description: "Read one agent's full config from the Nolo workspace. Accepts an agent dbKey (agent-xxx), plain id, alias, or agent URL; resolves it (including public agents via agent-pub-<id>; the server runtime also falls back to handle lookup) and returns the runnable agentKey plus a redacted record with fields such as model, provider, apiSource, tools, prompt, inputPrice, outputPrice, and isPublic. Use it to inspect an agent's full capabilities/credential status before delegation. Note: startAgentRun/callAgent take the exact agentKey from listAgents/readAgent; readAgent is not required before every dispatch when listAgents already gave you the key.",
14382
14384
  parameters: {
14383
14385
  type: "object",
14384
14386
  properties: {
@@ -21431,7 +21433,7 @@ var callAgentFunctionSchema = {
21431
21433
  properties: {
21432
21434
  agentKey: {
21433
21435
  type: "string",
21434
- description: "\u8981\u8C03\u7528\u7684 Agent \u7684\u552F\u4E00 ID \u6216 alias/handle\u3002\u652F\u6301\u4E09\u79CD\u5F62\u5F0F\uFF1A\u5B8C\u6574 agentKey\uFF08\u5982 agent-xxx-01ABC\uFF09\u3001alias\uFF08\u5982 reviewer\uFF0C\u4F1A\u81EA\u52A8\u89E3\u6790\u4E3A agent-{userId}-{alias} \u548C agent-pub-{alias}\uFF09\u3001\u6216 public agent id\uFF08\u5982 01ABC\uFF09\u3002"
21436
+ description: "\u8981\u8C03\u7528\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF0C\u5FC5\u987B\u662F listAgents \u8FD4\u56DE\u7684 agentKey \u5B57\u6BB5\uFF08owned: agent-<userId>-<id>\uFF1Bpublic: agent-pub-<id>\uFF09\u6216 readAgent \u8FD4\u56DE\u7684 agentKey\u3002\u53EA\u63A5\u53D7\u7CBE\u786E dbKey\uFF0C\u4E0D\u63A5\u53D7 name/handle/bare id\u3002"
21435
21437
  },
21436
21438
  task: {
21437
21439
  type: "string",
@@ -22076,7 +22078,7 @@ var startAgentRunFunctionSchema = {
22076
22078
  properties: {
22077
22079
  agentKey: {
22078
22080
  type: "string",
22079
- 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"
22081
+ description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF0C\u5FC5\u987B\u662F listAgents \u8FD4\u56DE\u7684 agentKey \u5B57\u6BB5\uFF08owned: agent-<userId>-<id>\uFF1Bpublic: agent-pub-<id>\uFF09\u6216 readAgent \u8FD4\u56DE\u7684 agentKey\u3002\u53EA\u63A5\u53D7\u7CBE\u786E dbKey\uFF0C\u4E0D\u63A5\u53D7 name/handle/bare id\u3002"
22080
22082
  },
22081
22083
  task: {
22082
22084
  type: "string",
@@ -22159,7 +22161,7 @@ async function startAgentRunFunc(args, thunkApi, _context) {
22159
22161
  // packages/ai/tools/agent/controlAgentRunTool.ts
22160
22162
  var controlAgentRunFunctionSchema = {
22161
22163
  name: "controlAgentRun",
22162
- description: "\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\u3002\u4E00\u4E2A\u5DE5\u5177\u4E09\u4E2A action\uFF1Alist\uFF08\u5217\u51FA run\uFF0C\u652F\u6301\u6309\u6279\u6B21/\u72B6\u6001\u8FC7\u6EE4\u4E0E\u5206\u9875\uFF09\u3001status\uFF08\u67E5\u5355\u6761 + \u53EF\u9009\u65E5\u5FD7\uFF09\u3001stop\uFF08\u53D6\u6D88 run\uFF09\u3002\u76F8\u5F53\u4E8E Unix \u7684 wait + signal + /proc\u3002\u7528 startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528\u672C\u5DE5\u5177\u8DDF\u8FDB\u5EA6\u6216\u53EB\u505C\u3002list \u9ED8\u8BA4\u53EA\u8FD4\u56DE\u6700\u8FD1 20 \u6761\uFF0C\u907F\u514D\u5168\u91CF\u51B2\u7206\u4E0A\u4E0B\u6587\uFF1B\u7528 status/batchId/limit/offset \u53D6\u6240\u9700\u5206\u9875\u3002",
22164
+ description: "\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\u3002\u4E00\u4E2A\u5DE5\u5177\u4E09\u4E2A action\uFF1Alist\uFF08\u5217\u51FA run\uFF0C\u652F\u6301\u6309\u6279\u6B21/\u72B6\u6001\u8FC7\u6EE4\u4E0E\u5206\u9875\uFF09\u3001status\uFF08\u67E5\u5355\u6761 + \u53EF\u9009\u65E5\u5FD7\uFF09\u3001stop\uFF08\u53D6\u6D88 run\uFF09\u3002\u76F8\u5F53\u4E8E Unix \u7684 wait + signal + /proc\u3002\u7528 startAgentRun \u62FF\u5230 runId \u540E\uFF0C\u7528\u672C\u5DE5\u5177\u8DDF\u8FDB\u5EA6\u6216\u53EB\u505C\u3002list \u9ED8\u8BA4\u53EA\u8FD4\u56DE\u6700\u8FD1 20 \u6761\uFF0C\u907F\u514D\u5168\u91CF\u51B2\u7206\u4E0A\u4E0B\u6587\uFF1B\u7528 status/batchId/limit/offset \u53D6\u6240\u9700\u5206\u9875\u3002\u6CE8\u610F\uFF1A\u7528\u6237\u754C\u9762\u5DF2\u7ECF\u5728\u72EC\u7ACB\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF0C\u672C\u5DE5\u5177\u662F\u7ED9\u4F60\u81EA\u5DF1\u505A\u51B3\u7B56\u7528\u7684\uFF0C\u4E0D\u662F\u7528\u6765\u7ED9\u7528\u6237\u6C47\u62A5\u8FDB\u5EA6\u7684\u2014\u2014\u4E0D\u5FC5\u4E3A\u4E86\u300C\u8BA9\u7528\u6237\u770B\u5230\u72B6\u6001\u300D\u800C\u8F6E\u8BE2\uFF0C\u4E5F\u4E0D\u8981\u628A\u8FD4\u56DE\u503C\u590D\u8FF0\u7ED9\u7528\u6237\u3002",
22163
22165
  parameters: {
22164
22166
  type: "object",
22165
22167
  properties: {
@@ -22174,7 +22176,7 @@ var controlAgentRunFunctionSchema = {
22174
22176
  },
22175
22177
  tailLines: {
22176
22178
  type: "number",
22177
- description: "\u53EF\u9009\u3002action=status \u65F6\uFF1A0=\u53EA\u8FD4\u56DE\u72B6\u6001\u6458\u8981\uFF0C>0=\u540C\u65F6\u8FD4\u56DE\u6700\u8FD1 N \u884C\u65E5\u5FD7\uFF08\u9ED8\u8BA4 0\uFF09\u3002",
22179
+ description: "\u53EF\u9009\u3002action=status \u65F6\uFF1A0=\u53EA\u8FD4\u56DE\u72B6\u6001\u6458\u8981\uFF0C>0=\u540C\u65F6\u8FD4\u56DE\u6700\u8FD1 N \u884C\u65E5\u5FD7\uFF08\u9ED8\u8BA4 0\uFF09\u3002\u672C\u5730 run \u7684\u72B6\u6001\u6458\u8981\u91CC\u5E26 progress\uFF08toolCalls/llmCalls/fileEdits\u3001inFlight=\u6B64\u523B\u5728\u6267\u884C\u4EC0\u4E48\u3001idleMs=\u8DDD\u4E0A\u6B21\u4E8B\u4EF6\u591A\u4E45\uFF09\uFF0C\u8DB3\u4EE5\u5224\u65AD\u300C\u5728\u5E72\u6D3B\u300D\u8FD8\u662F\u300C\u5361\u4F4F\u4E86\u300D\u2014\u2014\u5148\u770B\u5B83\uFF0C\u53EA\u6709\u786E\u5B9E\u53EF\u7591\u6216\u5DF2\u5931\u8D25\u65F6\u624D tailLines>0 \u62C9\u65E5\u5FD7\u3002",
22178
22180
  default: 0
22179
22181
  },
22180
22182
  batchId: {
@@ -23514,7 +23516,7 @@ var executeToolRun = createAsyncThunk(
23514
23516
  if (!executionInput) {
23515
23517
  throw new Error(`ToolRun ${id} has no input to execute with.`);
23516
23518
  }
23517
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-VHE5VME5.js");
23519
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-RJVFXOLR.js");
23518
23520
  const { executor } = findToolExecutor2(run.toolName);
23519
23521
  toolRunStarted({
23520
23522
  id: run.id,
@@ -23538,7 +23540,7 @@ var executeToolRun = createAsyncThunk(
23538
23540
  const latestState = thunkApi.getState();
23539
23541
  const userId = latestState.auth?.currentUser?.userId;
23540
23542
  if (userId) {
23541
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-LR2XC33A.js");
23543
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-M4PVN5PO.js");
23542
23544
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
23543
23545
  }
23544
23546
  }
@@ -26021,7 +26023,7 @@ async function updateDocFunc(args, thunkApi) {
26021
26023
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
26022
26024
  };
26023
26025
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
26024
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-QWYVY7SV.js");
26026
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-LJXXRB5W.js");
26025
26027
  if (getDocState().pageKey === id) {
26026
26028
  applyExternalDocUpdate({
26027
26029
  slateData: finalSlateData,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  fetchReferenceContents,
3
3
  resolveReferenceAssets
4
- } from "./chunk-SQNQOXQ6.js";
4
+ } from "./chunk-EXAEHRLI.js";
5
5
 
6
6
  // packages/ai/agent/fetchAgentContexts.ts
7
7
  async function fetchAgentContexts(references, dispatch) {
@@ -107,8 +107,17 @@ function toSafeAgentSummary(record, options) {
107
107
  const isOwnedByRecord = Boolean(currentUserId) && (typeof record?.userId === "string" && record.userId === currentUserId || typeof record?.ownerId === "string" && record.ownerId === currentUserId);
108
108
  const isOwnedByDbKey = Boolean(currentUserId) && typeof record?.dbKey === "string" && record.dbKey.startsWith(`agent-${currentUserId}-`);
109
109
  const isOwned = isOwnedByRecord || isOwnedByDbKey;
110
+ let agentKey;
111
+ if (Boolean(currentUserId) && id) {
112
+ if (isOwned) {
113
+ agentKey = `agent-${currentUserId}-${id}`;
114
+ } else if (publicKey) {
115
+ agentKey = publicKey;
116
+ }
117
+ }
110
118
  return {
111
119
  id,
120
+ ...agentKey !== void 0 ? { agentKey } : {},
112
121
  ...publicKey !== void 0 ? { publicKey } : {},
113
122
  name,
114
123
  handle,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  requireTokenUser
3
- } from "./chunk-OOKISU7J.js";
3
+ } from "./chunk-XFYDGBXL.js";
4
4
  import {
5
5
  resolveServerUrl
6
6
  } from "./chunk-A7GB5UGH.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  i18n_default,
3
3
  toolRegistry
4
- } from "./chunk-2M54XJFV.js";
4
+ } from "./chunk-J67FKTTY.js";
5
5
  import {
6
6
  canonicalizeToolNames
7
7
  } from "./chunk-ZZ2MH7LE.js";
@@ -146,6 +146,7 @@ var sanitizeToolForProvider = (tool, provider) => {
146
146
  var translatedFunctionCache = /* @__PURE__ */ new Map();
147
147
  var prepareToolsResultCache = /* @__PURE__ */ new Map();
148
148
  var PREPARE_TOOLS_CACHE_LIMIT = 128;
149
+ var warnedUnknownToolNames = /* @__PURE__ */ new Set();
149
150
  function getTranslation(keys, defaultVal) {
150
151
  for (const key of keys) {
151
152
  if (i18n_default.exists(key)) {
@@ -247,7 +248,15 @@ var prepareTools = (toolNames, options) => {
247
248
  }
248
249
  const prepared = canonicalNames.map((toolName) => {
249
250
  const regTool = toolRegistry[toolName];
250
- if (!regTool) return regTool;
251
+ if (!regTool) {
252
+ if (!warnedUnknownToolNames.has(toolName)) {
253
+ warnedUnknownToolNames.add(toolName);
254
+ console.warn(
255
+ `[prepareTools] unknown tool name "${toolName}" ignored (not in toolRegistry); likely stale agent config from a renamed/deprecated tool.`
256
+ );
257
+ }
258
+ return regTool;
259
+ }
251
260
  return {
252
261
  ...regTool,
253
262
  function: translateSchemaCached(regTool.function)
@@ -5,10 +5,10 @@ import {
5
5
  inlineImageUrlsForCustomProvider,
6
6
  prepareTools,
7
7
  shouldInlineImageUrlsForAgent
8
- } from "./chunk-OZPVJZBX.js";
8
+ } from "./chunk-L2RRMXNJ.js";
9
9
  import {
10
10
  performFetchRequest
11
- } from "./chunk-SQNQOXQ6.js";
11
+ } from "./chunk-EXAEHRLI.js";
12
12
  import {
13
13
  createSSEParser,
14
14
  createToolRunId,
@@ -19,7 +19,7 @@ import {
19
19
  toolRunSetPending,
20
20
  toolRunStarted,
21
21
  toolRunSucceeded
22
- } from "./chunk-2M54XJFV.js";
22
+ } from "./chunk-J67FKTTY.js";
23
23
  import {
24
24
  getPublicImageAgentMode
25
25
  } from "./chunk-VIDPVFP3.js";
@@ -29,13 +29,13 @@ import {
29
29
  messageStreaming,
30
30
  selectCurrentSpaceId,
31
31
  updateToolMessage
32
- } from "./chunk-BDSHV5HO.js";
32
+ } from "./chunk-UIOYWBU7.js";
33
33
  import {
34
34
  streamAgentChatTurn
35
- } from "./chunk-RYFZ55YC.js";
35
+ } from "./chunk-5PGGCJGV.js";
36
36
  import {
37
37
  EMPTY_ASSISTANT_REPAIR_PROMPT
38
- } from "./chunk-QCJITMYO.js";
38
+ } from "./chunk-VVKQFITN.js";
39
39
  import {
40
40
  accumulateToolCallDelta,
41
41
  createThinkParserState,
@@ -1223,6 +1223,7 @@ function applyDelta(state, delta) {
1223
1223
  const reasoningChunk = delta.reasoning_content ?? delta.reasoning ?? "";
1224
1224
  if (reasoningChunk) {
1225
1225
  next.reasoningBuffer = (next.reasoningBuffer || "") + reasoningChunk;
1226
+ hasNewVisibleContent = true;
1226
1227
  }
1227
1228
  if (Array.isArray(delta.tool_calls) && delta.tool_calls.length > 0) {
1228
1229
  const accumulated = accumulateToolCallChunks(
@@ -1268,6 +1269,7 @@ function applyDelta(state, delta) {
1268
1269
  next.thinkState = parsed.state;
1269
1270
  if (parsed.reasoning) {
1270
1271
  next.reasoningBuffer = (next.reasoningBuffer || "") + parsed.reasoning;
1272
+ hasNewVisibleContent = true;
1271
1273
  }
1272
1274
  if (parsed.content) {
1273
1275
  next = {
@@ -1296,6 +1298,58 @@ function emitStreamingUpdate(hasNewVisibleContent, state, ctx) {
1296
1298
  })
1297
1299
  );
1298
1300
  }
1301
+ function createStreamThrottler(emitUpdate, options) {
1302
+ let pendingState = null;
1303
+ let timerId = null;
1304
+ const defaultSchedule = (cb) => {
1305
+ if (typeof window !== "undefined" && typeof window.requestAnimationFrame === "function") {
1306
+ return window.requestAnimationFrame(cb);
1307
+ }
1308
+ return setTimeout(cb, 16);
1309
+ };
1310
+ const defaultCancel = (id) => {
1311
+ if (typeof window !== "undefined" && typeof window.cancelAnimationFrame === "function") {
1312
+ window.cancelAnimationFrame(id);
1313
+ return;
1314
+ }
1315
+ clearTimeout(id);
1316
+ };
1317
+ const scheduleFn = options?.schedule ?? defaultSchedule;
1318
+ const cancelFn = options?.cancel ?? defaultCancel;
1319
+ return {
1320
+ push(state) {
1321
+ pendingState = state;
1322
+ if (timerId === null) {
1323
+ timerId = scheduleFn(() => {
1324
+ timerId = null;
1325
+ if (pendingState !== null) {
1326
+ const stateToEmit = pendingState;
1327
+ pendingState = null;
1328
+ emitUpdate(stateToEmit);
1329
+ }
1330
+ });
1331
+ }
1332
+ },
1333
+ flush() {
1334
+ if (timerId !== null) {
1335
+ cancelFn(timerId);
1336
+ timerId = null;
1337
+ }
1338
+ if (pendingState !== null) {
1339
+ const stateToEmit = pendingState;
1340
+ pendingState = null;
1341
+ emitUpdate(stateToEmit);
1342
+ }
1343
+ },
1344
+ cancel() {
1345
+ if (timerId !== null) {
1346
+ cancelFn(timerId);
1347
+ timerId = null;
1348
+ }
1349
+ pendingState = null;
1350
+ }
1351
+ };
1352
+ }
1299
1353
  function validateAndPartitionToolCalls(state) {
1300
1354
  const validCalls = [];
1301
1355
  const invalidCalls = [];
@@ -1510,7 +1564,8 @@ var sendOpenAICompletionsRequest = async ({
1510
1564
  parentMessageId,
1511
1565
  messageMetadata,
1512
1566
  disableToolsForThisRequest = false,
1513
- quickChatPerfStartedAt
1567
+ quickChatPerfStartedAt,
1568
+ streamThrottlerOptions
1514
1569
  }) => {
1515
1570
  const { dispatch, getState, signal: thunkSignal } = thunkApi;
1516
1571
  const dialogId = extractCustomId(dialogKey);
@@ -1557,6 +1612,16 @@ var sendOpenAICompletionsRequest = async ({
1557
1612
  let lastFinishReason = null;
1558
1613
  let activeMessageMetadata = messageMetadata;
1559
1614
  let emptyCompletionRetryUsed = false;
1615
+ const throttler = createStreamThrottler((latestState) => {
1616
+ emitStreamingUpdate(true, latestState, {
1617
+ dispatch,
1618
+ agentConfig,
1619
+ messageId,
1620
+ msgKey,
1621
+ dialogId,
1622
+ messageMetadata: activeMessageMetadata
1623
+ });
1624
+ }, streamThrottlerOptions);
1560
1625
  const buildMeta = () => ({
1561
1626
  hasToolCalls: Array.isArray(streamState.assistantToolCalls) && streamState.assistantToolCalls.length > 0,
1562
1627
  hasPendingInteraction: hasPendingInteractionOverall,
@@ -1664,6 +1729,7 @@ var sendOpenAICompletionsRequest = async ({
1664
1729
  while (true) {
1665
1730
  const { done, value } = await readStreamChunkWithTimeout(reader, signal);
1666
1731
  if (done) {
1732
+ throttler.flush();
1667
1733
  const producedNothing = streamState.contentBuffer.length === 0 && !streamState.reasoningBuffer.trim() && (streamState.assistantToolCalls?.length ?? 0) === 0;
1668
1734
  if (producedNothing && !emptyCompletionRetryUsed && !streamState.hasHandedOff && !streamState.alreadyFinalized && !signal.aborted) {
1669
1735
  emptyCompletionRetryUsed = true;
@@ -1683,6 +1749,7 @@ var sendOpenAICompletionsRequest = async ({
1683
1749
  dialogId
1684
1750
  });
1685
1751
  if (retryResponse.ok && retryResponse.body) {
1752
+ throttler.cancel();
1686
1753
  streamState = createInitialStreamState();
1687
1754
  parseSSE = createSSEParser();
1688
1755
  decoder = new TextDecoder();
@@ -1732,6 +1799,7 @@ var sendOpenAICompletionsRequest = async ({
1732
1799
  continue;
1733
1800
  }
1734
1801
  if (data.error) {
1802
+ throttler.flush();
1735
1803
  const errorMsg = `Error: ${formatStreamErrorMessage(data)}`;
1736
1804
  streamState = {
1737
1805
  ...streamState,
@@ -1760,19 +1828,18 @@ var sendOpenAICompletionsRequest = async ({
1760
1828
  { dialogKey }
1761
1829
  );
1762
1830
  }
1763
- emitStreamingUpdate(hasNewVisibleContent, streamState, {
1764
- dispatch,
1765
- agentConfig,
1766
- messageId,
1767
- msgKey,
1768
- dialogId,
1769
- messageMetadata: activeMessageMetadata
1770
- });
1831
+ if (hasNewVisibleContent) {
1832
+ throttler.push(streamState);
1833
+ }
1834
+ if (Array.isArray(delta.tool_calls) && delta.tool_calls.length > 0) {
1835
+ throttler.flush();
1836
+ }
1771
1837
  const finishReason = choice.finish_reason;
1772
1838
  if (finishReason) {
1773
1839
  lastFinishReason = finishReason;
1774
1840
  streamState.finishReason = finishReason;
1775
1841
  if (finishReason === "tool_calls") {
1842
+ throttler.flush();
1776
1843
  if (streamState.totalUsage) {
1777
1844
  dispatch(tokenUsageLiveUpdate({
1778
1845
  input_tokens: streamState.totalUsage.prompt_tokens ?? streamState.totalUsage.input_tokens,
@@ -1813,6 +1880,7 @@ var sendOpenAICompletionsRequest = async ({
1813
1880
  }
1814
1881
  }
1815
1882
  } catch (error) {
1883
+ throttler.flush();
1816
1884
  let errorText;
1817
1885
  const isAbort = isAbortError(error);
1818
1886
  if (isAbort) {
@@ -1834,6 +1902,7 @@ var sendOpenAICompletionsRequest = async ({
1834
1902
  }
1835
1903
  streamState = await finalizeStream(streamState, finalizeCtx);
1836
1904
  } finally {
1905
+ throttler.cancel();
1837
1906
  logQuickChatPerfStage(quickChatPerfStartedAt, "openai-completions-stream-finished", {
1838
1907
  dialogKey
1839
1908
  });
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  updateContentTitle
3
- } from "./chunk-BDSHV5HO.js";
3
+ } from "./chunk-UIOYWBU7.js";
4
4
  import {
5
5
  require_date_fns
6
6
  } from "./chunk-M76ECQRD.js";
@@ -367,7 +367,7 @@ async function saveDocState(arg, { dispatch, getState }) {
367
367
  }
368
368
  }
369
369
  async function createDocState(args, thunkApi) {
370
- const { createPageAction } = await import("./createPageAction-BYW4YP54.js");
370
+ const { createPageAction } = await import("./createPageAction-PB3KXZIA.js");
371
371
  return createPageAction(args, thunkApi);
372
372
  }
373
373
  function subscribe(listener) {
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-AAODAAUQ.js";
8
8
  import {
9
9
  parseToolArgumentsJson
10
- } from "./chunk-QCJITMYO.js";
10
+ } from "./chunk-VVKQFITN.js";
11
11
  import {
12
12
  createThinkParserState,
13
13
  createToolCallAccumulator,
@@ -18,7 +18,7 @@ import {
18
18
  import {
19
19
  requiresBareImageUrl,
20
20
  toBareImageUrlMessages
21
- } from "./chunk-IOOMJJ4Z.js";
21
+ } from "./chunk-34WPV75U.js";
22
22
  import {
23
23
  shouldStripReasoningContentForOutbound,
24
24
  toOpenAiCompatibleMessages
@@ -1139,7 +1139,8 @@ var ProcessRegistry = class {
1139
1139
  command: proc.command,
1140
1140
  label: proc.label,
1141
1141
  startedAt: Date.now(),
1142
- status: "running"
1142
+ status: "running",
1143
+ persist: proc.persist ?? false
1143
1144
  });
1144
1145
  }
1145
1146
  list() {
@@ -1162,9 +1163,9 @@ var ProcessRegistry = class {
1162
1163
  }
1163
1164
  return false;
1164
1165
  }
1165
- stopAll(signal = "SIGTERM") {
1166
+ stopAll(signal = "SIGTERM", opts) {
1166
1167
  for (const item of this.processes.values()) {
1167
- if (item.status === "running") {
1168
+ if (item.status === "running" && (opts?.includePersist || !item.persist)) {
1168
1169
  try {
1169
1170
  process.kill(-item.pgid, signal);
1170
1171
  } catch {
@@ -1629,6 +1630,10 @@ function buildLaunchProcessTool() {
1629
1630
  label: {
1630
1631
  type: "string",
1631
1632
  description: "Optional friendly label for the process."
1633
+ },
1634
+ persist: {
1635
+ type: "boolean",
1636
+ description: "Mark the process as persistent so it survives the current TUI/session exit (kept running in the background when the conversation closes). Defaults to false. Use for long-lived services (e.g. a desktop dev server) you want to keep alive after the session ends."
1632
1637
  }
1633
1638
  },
1634
1639
  required: ["command"]
@@ -1641,7 +1646,7 @@ function buildListProcessesTool() {
1641
1646
  type: "function",
1642
1647
  function: {
1643
1648
  name: "listProcesses",
1644
- description: "List currently registered background processes launched via launchProcess. Returns array of {pid, label, command, status, startedAt}.",
1649
+ description: "List currently registered background processes launched via launchProcess. Returns array of {pid, label, command, status, startedAt, persist}.",
1645
1650
  parameters: {
1646
1651
  type: "object",
1647
1652
  properties: {}
@@ -1785,6 +1790,16 @@ var SEARCH_OUTPUT_CHAR_LIMIT = 2e4;
1785
1790
  function readTrimmedString(value) {
1786
1791
  return asOptionalTrimmedString(value);
1787
1792
  }
1793
+ function readBoolean(parsed, key) {
1794
+ const val = parsed[key];
1795
+ if (typeof val === "boolean") return val;
1796
+ if (typeof val === "string") {
1797
+ const lower = val.trim().toLowerCase();
1798
+ if (lower === "true") return true;
1799
+ if (lower === "false") return false;
1800
+ }
1801
+ return void 0;
1802
+ }
1788
1803
  function resolveExecShellTimeoutMs(override) {
1789
1804
  const fromOverride = asOptionalPositiveFiniteNumber(override);
1790
1805
  if (fromOverride !== void 0) return fromOverride;
@@ -2990,7 +3005,7 @@ async function searchFilesTool(args) {
2990
3005
  const literal = parsed.literal === true;
2991
3006
  const caseSensitive = parsed.caseSensitive === false ? false : true;
2992
3007
  const requestedPath = pickFirstAlias(parsed, PATH_FIELD_ALIASES) ?? ".";
2993
- const includeIgnored = parsed.includeIgnored === true;
3008
+ const includeIgnored = parsed.includeIgnored === true || args.workspaceRoot.includes(".worktrees");
2994
3009
  const searchPath = await resolveLocalWorkspaceToolPath({
2995
3010
  workspaceRoot: args.workspaceRoot,
2996
3011
  requestedPath,
@@ -3266,7 +3281,7 @@ async function globFilesTool(args) {
3266
3281
  const exclude = readWorkspaceExcludeGlobs(parsed);
3267
3282
  const maxResults = readWorkspaceMaxResults(parsed, warnings);
3268
3283
  const requestedPath = pickFirstAlias(parsed, PATH_FIELD_ALIASES) ?? ".";
3269
- const includeIgnored = parsed.includeIgnored === true;
3284
+ const includeIgnored = parsed.includeIgnored === true || args.workspaceRoot.includes(".worktrees");
3270
3285
  const searchPath = await resolveLocalWorkspaceToolPath({
3271
3286
  workspaceRoot: args.workspaceRoot,
3272
3287
  requestedPath,
@@ -3502,6 +3517,7 @@ async function launchProcessTool(args) {
3502
3517
  }
3503
3518
  const labelArg = readTrimmedString(parsed.label);
3504
3519
  const label = labelArg || deriveLabel(command);
3520
+ const persist = readBoolean(parsed, "persist");
3505
3521
  const fullCommand = buildWorkspaceShellCommand({
3506
3522
  toolName: args.call.name,
3507
3523
  command,
@@ -3526,7 +3542,7 @@ async function launchProcessTool(args) {
3526
3542
  }
3527
3543
  const pgid = detached ? pid : pid;
3528
3544
  const registry2 = getProcessRegistry();
3529
- registry2.add({ pid, pgid, command, label });
3545
+ registry2.add({ pid, pgid, command, label, persist });
3530
3546
  const cleanupChildOnHostSignal = (signal) => {
3531
3547
  try {
3532
3548
  if (detached) {
@@ -3,7 +3,7 @@ import {
3
3
  prepareAndPersistMessage,
4
4
  uiAskChoiceFunc,
5
5
  uiAskChoiceFunctionSchema
6
- } from "./chunk-BDSHV5HO.js";
6
+ } from "./chunk-UIOYWBU7.js";
7
7
  import {
8
8
  require_date_fns
9
9
  } from "./chunk-M76ECQRD.js";