nolo-cli 0.19.0 → 0.24.0-alpha.7

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 (133) hide show
  1. package/{_executeModel-X5PCIZN6.js → _executeModel-ARCMGGMY.js} +46 -44
  2. package/{action-LT7BRFLK.js → action-5MNAXR5B.js} +7 -6
  3. package/{addContentAction-PL3KKBDH.js → addContentAction-UNSYTVTB.js} +5 -5
  4. package/{addDialogAgentAction-FCMSKYAF.js → addDialogAgentAction-LJGNP2AO.js} +5 -5
  5. package/{agentDeleteCommand-2BZDQV36.js → agentDeleteCommand-C5PIEBMZ.js} +27 -26
  6. package/{agentEmailCommands-2QJDGRMB.js → agentEmailCommands-QTGQ3ZAD.js} +57 -55
  7. package/{agentListCommands-6VEPTKBI.js → agentListCommands-LRHBS3A5.js} +30 -26
  8. package/{agentMachineCommands-NVVHNWYI.js → agentMachineCommands-4PXIT4BP.js} +25 -24
  9. package/{agentRecordCommands-4GGRDMD4.js → agentRecordCommands-ZZPTYTYR.js} +52 -50
  10. package/{agentRunCommand-XOLQNKBZ.js → agentRunCommand-7ZTPZNUX.js} +55 -54
  11. package/{agentRunControl-Y5AFH5PQ.js → agentRunControl-SNUKXN6J.js} +6 -2
  12. package/{agentRuntimeLocal-7WYWCGL4.js → agentRuntimeLocal-QOYY5UV2.js} +19 -18
  13. package/{agentSlice-EAXPGEYV.js → agentSlice-J3W3RX2I.js} +5 -5
  14. package/{appDeleteCommands-77KR2RJ4.js → appDeleteCommands-7NS46XDH.js} +23 -22
  15. package/{appDeployCommands-K7CAHGBI.js → appDeployCommands-RSRNQ67U.js} +23 -22
  16. package/{appDeployStatusCommands-4OEKLTBT.js → appDeployStatusCommands-EF4RSGC6.js} +23 -22
  17. package/{appGetCommands-VM2WDLAZ.js → appGetCommands-YA7JWYUX.js} +23 -22
  18. package/{appListCommands-GX6BBA6U.js → appListCommands-WM2ON6JW.js} +23 -22
  19. package/{authCommand-DY6UUL6O.js → authCommand-HJP7FURK.js} +12 -13
  20. package/{authCommands-XTBV7OFZ.js → authCommands-NYZM2B2I.js} +4 -5
  21. package/{chunk-MKA6QE5E.js → chunk-2IPEVBUO.js} +126 -68
  22. package/{chunk-OWOHNGCN.js → chunk-2MBTWINN.js} +42 -3
  23. package/{chunk-K6EUAOW3.js → chunk-35RYGII3.js} +1 -1
  24. package/{chunk-TRT4I4UD.js → chunk-4POUK2BV.js} +2 -2
  25. package/{chunk-LLWKHDG4.js → chunk-4ULSC37S.js} +1 -3
  26. package/{chunk-EDV7EBOI.js → chunk-4ZH6GUJF.js} +2151 -1500
  27. package/{chunk-MVQ4TBSD.js → chunk-54VHTARN.js} +1 -1
  28. package/{chunk-L4F3I4SR.js → chunk-5HQQ4LUU.js} +4 -6
  29. package/{chunk-Z4NR32XR.js → chunk-5RGU3J7P.js} +13 -0
  30. package/{chunk-7BUYEZ6U.js → chunk-7H3UTGPM.js} +12 -72
  31. package/{chunk-RQN4SEKL.js → chunk-7W6GFNJL.js} +1 -1
  32. package/{chunk-HEGV7BH3.js → chunk-AQZCWJOG.js} +1 -1
  33. package/{chunk-3ND52WIL.js → chunk-ATWUOTJP.js} +180 -24
  34. package/chunk-CF7S2RYZ.js +376 -0
  35. package/{chunk-I2ZJKTG5.js → chunk-CGVRC2TB.js} +7 -7
  36. package/{chunk-UAIVG4J6.js → chunk-CHSCAUZN.js} +1 -8
  37. package/{chunk-KFEVY3ST.js → chunk-D34RI6NI.js} +18 -8
  38. package/{chunk-ROWQEJRP.js → chunk-DXJS7VSG.js} +3 -2
  39. package/{chunk-MHSGJW4Z.js → chunk-EHOYZRTI.js} +44 -14
  40. package/{chunk-XRZJGPFI.js → chunk-FON47ACC.js} +4 -4
  41. package/{chunk-SCTYAHYK.js → chunk-H2NAWOLH.js} +217 -141
  42. package/{chunk-MPVYDS7I.js → chunk-H6ODMJR3.js} +3 -3
  43. package/{chunk-R35XMF6F.js → chunk-H73ZV2GL.js} +352 -30
  44. package/{chunk-4T5F7YZQ.js → chunk-I6RJGORZ.js} +1 -1
  45. package/{chunk-OK6YSWLH.js → chunk-IICW77GI.js} +1 -1
  46. package/{chunk-VDXCXCXH.js → chunk-IUDMBCXC.js} +1 -1
  47. package/{chunk-AHCY2S2I.js → chunk-JADNODCQ.js} +1 -1
  48. package/{chunk-DFCFMCY6.js → chunk-JBLY6HQP.js} +2 -2
  49. package/{chunk-UGUW3FHG.js → chunk-JMSCXQUG.js} +2 -2
  50. package/{chunk-N54HIJVJ.js → chunk-KFUCLS7Z.js} +101 -9
  51. package/{chunk-FQZZLA3C.js → chunk-KXKQO4Q6.js} +17 -0
  52. package/{chunk-3Q7WHGCB.js → chunk-L65QKSVJ.js} +1 -1
  53. package/{chunk-3ZX7PERL.js → chunk-LALVWNE4.js} +20 -7
  54. package/{chunk-PJSV3IZ5.js → chunk-M3TMVJKG.js} +1 -1
  55. package/{chunk-REA4JLBH.js → chunk-M5OZCOBV.js} +7 -6
  56. package/{chunk-JLA4FXYC.js → chunk-MALVZUYL.js} +1 -1
  57. package/{chunk-GFUIQ4RY.js → chunk-MXFQHRSS.js} +1 -1
  58. package/{chunk-LSFAWXKC.js → chunk-N7J63Q6C.js} +1 -0
  59. package/{chunk-6Y7A3OQQ.js → chunk-NRY4GCKJ.js} +2 -0
  60. package/{chunk-G5U6LDLG.js → chunk-NVHPMDSZ.js} +6 -6
  61. package/{chunk-23FZYPLC.js → chunk-OJFYT3ZQ.js} +842 -1060
  62. package/{chunk-ELT65PZW.js → chunk-OXLLFZNF.js} +1 -1
  63. package/{chunk-CZ6NYQTV.js → chunk-P4QWLZGU.js} +2 -2
  64. package/{chunk-5MIDPSSK.js → chunk-PB7G5MAM.js} +3 -3
  65. package/{chunk-HWW2M4SN.js → chunk-QLVWFXZQ.js} +5 -4
  66. package/{chunk-VYHDJEQD.js → chunk-QNLLGS37.js} +136 -78
  67. package/{chunk-XHG22OEX.js → chunk-ROJI6DRT.js} +2 -2
  68. package/{chunk-BV4VEE3W.js → chunk-ROYOKSX4.js} +243 -354
  69. package/{chunk-VNAEBGDK.js → chunk-RZNYL4LW.js} +123 -26
  70. package/{chunk-RVOUXDFU.js → chunk-S6KVFOUG.js} +6 -34
  71. package/{chunk-V3ED5AWK.js → chunk-S77SCVBU.js} +27 -16
  72. package/{chunk-UBHAWFQ6.js → chunk-S7RWIPDI.js} +42 -19
  73. package/{chunk-B5TOXZAK.js → chunk-SIZQB7BD.js} +1 -1
  74. package/{chunk-DFFIZ25G.js → chunk-SLOGKB7M.js} +4 -1
  75. package/{chunk-FXUSIQC2.js → chunk-SROR5TSM.js} +1 -1
  76. package/{chunk-PIZYJVHQ.js → chunk-TN4YHAI3.js} +4 -4
  77. package/{chunk-IYEXFJPC.js → chunk-TW35GDNW.js} +64 -57
  78. package/chunk-UZ6XXCVR.js +50 -0
  79. package/{chunk-DKZFOK24.js → chunk-UZH44DWK.js} +7 -288
  80. package/{chunk-YGW4G5W5.js → chunk-X546QUDT.js} +61 -12
  81. package/chunk-YYLHWIW6.js +48 -0
  82. package/{chunk-SWDPIPOY.js → chunk-ZGVW7MSZ.js} +1 -1
  83. package/{chunk-34WPV75U.js → chunk-ZUXIXYJI.js} +1 -1
  84. package/{chunk-VC6OZXO5.js → chunk-ZWJOGMKH.js} +2 -26
  85. package/{cliExecutor-DNE7TCC4.js → cliExecutor-K3F7DMRO.js} +2 -2
  86. package/{codingSkills-36KN5NQT.js → codingSkills-EN6Z6G6U.js} +4 -4
  87. package/{createAgentAutomationAction-GNFF524X.js → createAgentAutomationAction-MKQWN4VQ.js} +19 -18
  88. package/{createDialogAction-RB55KCLO.js → createDialogAction-YWIZPLFS.js} +22 -20
  89. package/{createPageAction-Y7343GLU.js → createPageAction-74TTEIPC.js} +20 -19
  90. package/{db-W3O47YGF.js → db-W5UHK4P3.js} +150 -0
  91. package/{dbSlice-CGSRFJN3.js → dbSlice-5BKDURDL.js} +4 -4
  92. package/{dialogCommands-IAZK6YHQ.js → dialogCommands-MJIP32FL.js} +24 -23
  93. package/{dialogSlice-UQAXF23P.js → dialogSlice-KLLVH4WI.js} +24 -18
  94. package/{docCreateCommands-I2EWZGCI.js → docCreateCommands-5DN472U6.js} +24 -27
  95. package/{docDeleteCommands-IZ45UZKG.js → docDeleteCommands-HE76LBN4.js} +25 -24
  96. package/{docReadCommands-R6Z4QJYU.js → docReadCommands-XVGZSCBS.js} +24 -23
  97. package/{docStore-5HOJ4D7D.js → docStore-SPH3D6BT.js} +20 -19
  98. package/{docUpdateCommands-2LRBKQPY.js → docUpdateCommands-P7IAWUAD.js} +24 -27
  99. package/{fetchMessages-BMGVZVSE.js → fetchMessages-W4IKHPCS.js} +2 -3
  100. package/{getPricing-G7DLAST6.js → getPricing-WENPBVWH.js} +3 -3
  101. package/{handleSendMessageAction-Q4HY35WX.js → handleSendMessageAction-ZU6WJVL7.js} +23 -20
  102. package/index.js +74 -74
  103. package/{localDialogRead-4H3QJFLW.js → localDialogRead-JXTAHW2E.js} +2 -2
  104. package/{machineCommands-PKBPQKTY.js → machineCommands-NI76PVHK.js} +59 -57
  105. package/{machineWsRunDispatch-UZAW4OXJ.js → machineWsRunDispatch-W3G6NJVQ.js} +51 -49
  106. package/{models-DJFSJ7SW.js → models-DB27UAE3.js} +2 -2
  107. package/package.json +1 -1
  108. package/{read-3FMPZPER.js → read-F3L3T2WJ.js} +2 -1
  109. package/{readDocTool-VSYHKK3V.js → readDocTool-FOHWVA4R.js} +1 -1
  110. package/{readlineWorkspace-Y2RDOFZG.js → readlineWorkspace-BDH4G477.js} +880 -425
  111. package/{removeDialogAgentAction-OAGA2G3U.js → removeDialogAgentAction-QCFGIUIH.js} +8 -7
  112. package/{runAgentClientLoop-NBPIKJ6J.js → runAgentClientLoop-ZPKMXCM5.js} +45 -38
  113. package/{setDialogExtraReferencesAction-JZEXA5SL.js → setDialogExtraReferencesAction-DK4CKERU.js} +5 -5
  114. package/{setPrimaryDialogAgentAction-4ZUQQKDG.js → setPrimaryDialogAgentAction-SJSO6N27.js} +8 -7
  115. package/{settingSlice-7MNKHZ6R.js → settingSlice-XNM5AFPU.js} +6 -5
  116. package/{spaceCommands-DHCZ7J5I.js → spaceCommands-3GGBJRQR.js} +25 -24
  117. package/{spaceSlice-ZXLLG3CR.js → spaceSlice-47Z6XLFQ.js} +21 -18
  118. package/{streamAgentChatTurn-L3YW6LSB.js → streamAgentChatTurn-VT5K5JSD.js} +140 -98
  119. package/switchDialogAgentAction-4OAC6QRN.js +61 -0
  120. package/{tableCommands-BEQAGE4I.js → tableCommands-HEQYT2KP.js} +1 -1
  121. package/{toolApiClient-QI3YBNWB.js → toolApiClient-ISM4ZQX4.js} +2 -2
  122. package/{tools-ECGXR5QF.js → tools-L7RCHAPT.js} +36 -33
  123. package/{tuiSummaryLlmCaller-OMSCNHXA.js → tuiSummaryLlmCaller-3DYOLTVN.js} +6 -6
  124. package/{updateCommands-XTW55TOT.js → updateCommands-HTCOBXCA.js} +2 -2
  125. package/{updateDialogTitleAction-HQ2EUDFT.js → updateDialogTitleAction-KMPVPQ4A.js} +28 -27
  126. package/chunk-DL6EPNIK.js +0 -50
  127. package/chunk-V5R4NZP2.js +0 -78
  128. package/chunk-X4Q4UZEY.js +0 -26
  129. package/queryRunOverlay-O4LOMMPO.js +0 -161
  130. package/runOverlayPresentation-ZO4VCWEU.js +0 -11
  131. package/types-ZSTJ7MPR.js +0 -7
  132. package/{chunk-X7W4TNB4.js → chunk-CMKUBIGW.js} +3 -3
  133. package/{runtimeDoctorCommands-E2OUORHK.js → runtimeDoctorCommands-HSU632DY.js} +3 -3
@@ -3,25 +3,28 @@ import {
3
3
  prepareAndPersistMessage,
4
4
  uiAskChoiceFunc,
5
5
  uiAskChoiceFunctionSchema
6
- } from "./chunk-SCTYAHYK.js";
6
+ } from "./chunk-H2NAWOLH.js";
7
7
  import {
8
8
  require_date_fns
9
9
  } from "./chunk-M76ECQRD.js";
10
10
  import {
11
- extractCustomId
12
- } from "./chunk-DFFIZ25G.js";
11
+ TOOL_PACKS
12
+ } from "./chunk-CF7S2RYZ.js";
13
+ import {
14
+ buildSkillDocMarkdown
15
+ } from "./chunk-ZWJOGMKH.js";
13
16
  import {
14
- PLATFORM_HOSTED_GLM_52_MODEL,
15
- PLATFORM_HOSTED_GLM_PRICE,
17
+ PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
18
+ PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE,
16
19
  PLATFORM_HOSTED_KIMI_PROVIDER
17
- } from "./chunk-MKA6QE5E.js";
20
+ } from "./chunk-2IPEVBUO.js";
18
21
  import {
19
22
  read,
20
23
  readAndWait,
21
24
  removeCachedEntity,
22
25
  upsertSSREntity,
23
26
  write
24
- } from "./chunk-XRZJGPFI.js";
27
+ } from "./chunk-FON47ACC.js";
25
28
  import {
26
29
  createAgentKey,
27
30
  createDialogKey,
@@ -30,7 +33,7 @@ import {
30
33
  dialogMessageRange,
31
34
  memoryOwnerRange,
32
35
  memorySubjectKindRange
33
- } from "./chunk-6Y7A3OQQ.js";
36
+ } from "./chunk-NRY4GCKJ.js";
34
37
  import {
35
38
  selectIdentityUserId
36
39
  } from "./chunk-XMLRJUU5.js";
@@ -43,6 +46,9 @@ import {
43
46
  import {
44
47
  asOptionalPositiveFiniteNumber
45
48
  } from "./chunk-U6VC4MU4.js";
49
+ import {
50
+ extractCustomId
51
+ } from "./chunk-SLOGKB7M.js";
46
52
  import {
47
53
  isRecord
48
54
  } from "./chunk-KUG52IAP.js";
@@ -60,7 +66,10 @@ var import_date_fns = __toESM(require_date_fns());
60
66
  var BUILTIN_OBJECT_SKILL_IDS = {
61
67
  table: "builtin-table-skill-v1",
62
68
  doc: "builtin-doc-skill-v1",
63
- code: "builtin-code-skill-v1",
69
+ // key 改名为 code-style(它本来就叫「编码风格技能」,"code" 这个名字是它抢的,
70
+ // 与「代码执行」能力包撞车)。**id 值保持不变**——skillId 与页面 key 都从它派生,
71
+ // 改了会让存量 agent.references 失配。
72
+ "code-style": "builtin-code-skill-v1",
64
73
  image: "builtin-image-skill-v1",
65
74
  file: "builtin-file-skill-v1",
66
75
  pagebuilder: "builtin-pagebuilder-skill-v1"
@@ -69,40 +78,33 @@ var SKILL_DEFS = {
69
78
  doc: {
70
79
  id: BUILTIN_OBJECT_SKILL_IDS.doc,
71
80
  name: "\u6587\u6863\u7F16\u8F91\u6280\u80FD",
72
- description: "\u63D0\u4F9B\u6587\u6863\u8BFB\u53D6\u4E0E\u66F4\u65B0\u80FD\u529B\uFF0C\u4F9B\u6587\u6863\u52A9\u624B\u4F7F\u7528\u3002",
81
+ description: "\u63D0\u4F9B\u6587\u6863\u8BFB\u53D6\u4E0E\u66F4\u65B0\u80FD\u529B\uFF0C\u4F9B\u6587\u6863\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u6587\u6863\u3001\u6DA6\u8272\u3001\u6539\u5199\u3001\u7EED\u5199\u3001\u6392\u7248\u3001\u6587\u7AE0\u3001document\u3001polish\u3002",
73
82
  toolNames: ["readDoc", "updateDoc"],
74
83
  promptPatch: [
75
84
  "\u6587\u6863\u7F16\u8F91\u6307\u5357\uFF1A",
76
85
  "1. \u4FEE\u6539\u524D\u5148 readDoc \u8BFB\u53D6\u5F53\u524D\u6587\u6863\u771F\u503C\uFF0C\u518D\u57FA\u4E8E\u73B0\u6709\u5185\u5BB9\u7528 updateDoc \u505A\u5B9A\u70B9\u589E\u91CF\u7F16\u8F91\u3002",
77
86
  "2. \u4E0D\u8981\u8131\u79BB\u73B0\u6709\u5185\u5BB9\u7A7A\u60F3\u91CD\u5199\uFF1B\u6DA6\u8272/\u6539\u5199/\u7EED\u5199\u90FD\u5E94\u4FDD\u7559\u7528\u6237\u539F\u6709\u7684\u7ED3\u6784\u4E0E\u4E8B\u5B9E\u3002"
78
- ].join("\n"),
79
- keywords: ["\u6587\u6863", "\u6DA6\u8272", "\u6539\u5199", "\u7EED\u5199", "\u6392\u7248", "\u6587\u7AE0", "document", "polish"]
87
+ ].join("\n")
80
88
  },
81
89
  table: {
82
90
  id: BUILTIN_OBJECT_SKILL_IDS.table,
83
91
  name: "\u8868\u683C\u7F16\u8F91\u6280\u80FD",
84
- description: "\u63D0\u4F9B\u8868\u683C\u521B\u5EFA\u3001\u67E5\u8BE2\u3001\u65B0\u589E\u3001\u66F4\u65B0\u4E0E\u5220\u9664\u80FD\u529B\uFF0C\u4F9B\u8868\u683C\u52A9\u624B\u4F7F\u7528\u3002",
85
- toolNames: [
86
- "createTable",
87
- "addTableRow",
88
- "addTableRows",
89
- "queryTableRows",
90
- "updateTableRow",
91
- "deleteTableRow"
92
- ],
92
+ description: "\u63D0\u4F9B\u8868\u683C\u521B\u5EFA\u3001\u67E5\u8BE2\u3001\u65B0\u589E\u3001\u66F4\u65B0\u4E0E\u5220\u9664\u80FD\u529B\uFF0C\u4F9B\u8868\u683C\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u8868\u683C\u3001\u5EFA\u8868\u3001\u65B0\u589E\u4E00\u884C\u3001\u8BB0\u5F55\u3001\u5B57\u6BB5\u3001table\u3001spreadsheet\u3001csv\u3002",
93
+ // 与 app-builder 能力包共用同一份清单(TOOL_PACKS.TABLE)。
94
+ // 以前两边各抄一份,改一个忘另一个就会静默不同步。
95
+ toolNames: [...TOOL_PACKS.TABLE],
93
96
  promptPatch: [
94
97
  "\u8868\u683C\u64CD\u4F5C\u6307\u5357\uFF1A",
95
98
  "1. \u7528\u6237\u8981\u65B0\u5EFA\u8868\u683C\u65F6\uFF0C\u8C03\u7528 createTable\uFF0C\u5E76\u4ECE\u9700\u6C42\u63A8\u65AD\u5408\u7406\u7684\u5B57\u6BB5\u8BBE\u8BA1\uFF08\u5B57\u6BB5\u540D\u3001\u7C7B\u578B\u3001\u5FC5\u586B\u3001\u53EF\u9009\u503C\uFF09\u3002",
96
99
  "2. \u65B0\u589E\u8BB0\u5F55\u5FC5\u987B\u8C03\u7528 addTableRow / addTableRows\uFF0C\u4E0D\u8981\u53EA\u5728\u56DE\u7B54\u91CC\u53E3\u5934\u63CF\u8FF0\u3002",
97
100
  "3. addTableRow \u7684 values \u662F\u5BF9\u8C61\uFF0Ckey \u5FC5\u987B\u7528\u5B57\u6BB5\u540D\uFF08name\uFF0C\u4E0D\u662F\u663E\u793A\u540D label\uFF09\uFF1B\u5C3D\u91CF\u4ECE\u7528\u6237\u81EA\u7136\u8BED\u8A00\u63A8\u65AD\u5E76\u586B\u6EE1\u76F8\u5173\u5B57\u6BB5\uFF0C\u5FC5\u586B\u5B57\u6BB5\u5C24\u5176\u6CE8\u610F\uFF1B\u7528\u6237\u6CA1\u63D0\u5230\u7684\u5B57\u6BB5\u53EF\u7528\u7A7A\u5B57\u7B26\u4E32\u6216 null \u5360\u4F4D\uFF1B\u7EDD\u4E0D\u8981\u4F20\u7A7A\u5BF9\u8C61 {}\u3002",
98
101
  "4. \u66F4\u65B0\u6216\u5220\u9664\u524D\uFF0C\u5148\u7528 queryTableRows \u786E\u8BA4\u76EE\u6807\u884C\uFF0C\u5FC5\u8981\u65F6\u5411\u7528\u6237\u786E\u8BA4\u76EE\u6807\u884C/\u5B57\u6BB5\u3002"
99
- ].join("\n"),
100
- keywords: ["\u8868\u683C", "\u5EFA\u8868", "\u65B0\u589E\u4E00\u884C", "\u8BB0\u5F55", "\u5B57\u6BB5", "table", "spreadsheet", "csv"]
102
+ ].join("\n")
101
103
  },
102
- code: {
103
- id: BUILTIN_OBJECT_SKILL_IDS.code,
104
+ "code-style": {
105
+ id: BUILTIN_OBJECT_SKILL_IDS["code-style"],
104
106
  name: "\u7F16\u7801\u98CE\u683C\u6280\u80FD",
105
- description: "\u63D0\u4F9B\u7F16\u7801\u89C4\u8303\u4E0E\u98CE\u683C\u7EA6\u675F\uFF0C\u4F9B\u4EE3\u7801\u4EFB\u52A1\u4F7F\u7528\u3002",
107
+ description: "\u63D0\u4F9B\u7F16\u7801\u89C4\u8303\u4E0E\u98CE\u683C\u7EA6\u675F\uFF0C\u4F9B\u4EE3\u7801\u4EFB\u52A1\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u4EE3\u7801\u3001\u7F16\u7801\u3001\u91CD\u6784\u3001\u4FEEbug\u3001code\u3001refactor\u3001bugfix\u3001coding-style\u3002",
106
108
  toolNames: [],
107
109
  promptPatch: [
108
110
  "\u7F16\u7801\u98CE\u683C\u4E0E\u89C4\u8303\u6307\u5357\uFF1A",
@@ -111,37 +113,34 @@ var SKILL_DEFS = {
111
113
  "3. \u4E0D\u53EF\u53D8\u6027\uFF08immutability\uFF09\uFF1A\u4FDD\u6301\u6570\u636E\u4E0D\u53EF\u53D8\uFF0C\u4E0D\u8981\u539F\u5730 mutate \u73B0\u6709\u5BF9\u8C61\u6216\u6570\u7EC4\uFF0C\u5FC5\u987B\u8FD4\u56DE\u65B0\u5BF9\u8C61/\u6570\u7EC4\u3002",
112
114
  "4. \u9519\u8BEF\u5904\u7406\u4E0E\u6821\u9A8C\uFF1A\u663E\u5F0F\u5904\u7406\u6240\u6709\u9519\u8BEF\uFF08explicit error handling\uFF09\uFF0C\u5728\u7CFB\u7EDF\u8FB9\u754C\u5B8C\u6210\u6821\u9A8C\uFF08validate at boundaries\uFF09\uFF0C\u4E0D\u9690\u5F0F\u541E\u9519\u3002",
113
115
  "5. \u5B8C\u6210\u524D Checklist\uFF1A\u5B8C\u6210\u524D\u81EA\u67E5\u51FD\u6570/\u6587\u4EF6\u5C3A\u5BF8\u3001\u5D4C\u5957\u6DF1\u5EA6\u3001\u4E0D\u53EF\u53D8\u6027\u4E0E\u8FB9\u754C\u9519\u8BEF\u5904\u7406\u3002"
114
- ].join("\n"),
115
- keywords: ["\u4EE3\u7801", "\u7F16\u7801", "\u91CD\u6784", "\u4FEEbug", "code", "refactor", "bugfix", "coding-style"]
116
+ ].join("\n")
116
117
  },
117
118
  image: {
118
119
  id: BUILTIN_OBJECT_SKILL_IDS.image,
119
120
  name: "\u56FE\u7247\u5206\u6790\u6280\u80FD",
120
- description: "\u63D0\u4F9B\u56FE\u7247\u7406\u89E3\u3001\u63CF\u8FF0\u4E0E\u6574\u7406\u5EFA\u8BAE\u80FD\u529B\uFF0C\u4F9B\u56FE\u7247\u52A9\u624B\u4F7F\u7528\u3002",
121
+ description: "\u63D0\u4F9B\u56FE\u7247\u7406\u89E3\u3001\u63CF\u8FF0\u4E0E\u6574\u7406\u5EFA\u8BAE\u80FD\u529B\uFF0C\u4F9B\u56FE\u7247\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u56FE\u7247\u3001\u56FE\u50CF\u3001\u5206\u6790\u3001\u63CF\u8FF0\u3001\u547D\u540D\u3001\u6574\u7406\u3001image\u3001photo\u3001picture\u3002",
121
122
  toolNames: [],
122
123
  promptPatch: [
123
124
  "\u56FE\u7247\u5206\u6790\u6307\u5357\uFF1A",
124
125
  "1. \u5F53\u524D\u9636\u6BB5\u91CD\u70B9\u56F4\u7ED5\u5F53\u524D\u56FE\u7247\u505A\u7406\u89E3\u3001\u63CF\u8FF0\u3001\u63D0\u70BC\u91CD\u70B9\u3001\u7ED9\u51FA\u547D\u540D/\u6574\u7406\u5EFA\u8BAE\u548C\u540E\u7EED\u5904\u7406\u5EFA\u8BAE\u3002",
125
126
  "2. \u4E0D\u8981\u5047\u88C5\u5DF2\u7ECF\u5177\u5907\u590D\u6742\u56FE\u7247\u7F16\u8F91\u80FD\u529B\uFF1B\u5982\u679C\u7528\u6237\u8981\u66F4\u5F3A\u64CD\u4F5C\uFF0C\u660E\u786E\u8BF4\u660E\u5F53\u524D\u53EF\u505A\u7684\u662F\u5206\u6790\u4E0E\u7EC4\u7EC7\u3002"
126
- ].join("\n"),
127
- keywords: ["\u56FE\u7247", "\u56FE\u50CF", "\u5206\u6790", "\u63CF\u8FF0", "\u547D\u540D", "\u6574\u7406", "image", "photo", "picture"]
127
+ ].join("\n")
128
128
  },
129
129
  file: {
130
130
  id: BUILTIN_OBJECT_SKILL_IDS.file,
131
131
  name: "\u6587\u4EF6\u5904\u7406\u6280\u80FD",
132
- description: "\u63D0\u4F9B\u6587\u4EF6\u7406\u89E3\u3001\u6574\u7406\u4E0E\u5904\u7406\u5EFA\u8BAE\u80FD\u529B\uFF0C\u4F9B\u6587\u4EF6\u52A9\u624B\u4F7F\u7528\u3002",
132
+ description: "\u63D0\u4F9B\u6587\u4EF6\u7406\u89E3\u3001\u6574\u7406\u4E0E\u5904\u7406\u5EFA\u8BAE\u80FD\u529B\uFF0C\u4F9B\u6587\u4EF6\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u6587\u4EF6\u3001\u89E3\u6790\u3001\u63D0\u53D6\u3001\u6574\u7406\u3001\u5904\u7406\u3001file\u3001document\u3001pdf\u3002",
133
133
  toolNames: [],
134
134
  promptPatch: [
135
135
  "\u6587\u4EF6\u5904\u7406\u6307\u5357\uFF1A",
136
136
  "1. \u5F53\u524D\u9636\u6BB5\u91CD\u70B9\u56F4\u7ED5\u5F53\u524D\u6587\u4EF6\u63D0\u4F9B\u7406\u89E3\u3001\u6574\u7406\u3001\u63D0\u53D6\u4E0E\u540E\u7EED\u5904\u7406\u5EFA\u8BAE\u3002",
137
137
  "2. \u4E0D\u8981\u5047\u88C5\u5DF2\u7ECF\u5B8C\u6210\u6587\u4EF6\u5185\u5BB9\u89E3\u6790\uFF1B\u5FC5\u8981\u65F6\u660E\u786E\u544A\u8BC9\u7528\u6237\u5F53\u524D\u66F4\u591A\u662F\u5360\u4F4D\u578B\u5DE5\u4F5C\u6D41\u5165\u53E3\uFF0C\u7B49\u5F85\u540E\u7EED\u63A5\u5165\u66F4\u5B8C\u6574\u7684\u6587\u4EF6\u5904\u7406\u80FD\u529B\u3002"
138
- ].join("\n"),
139
- keywords: ["\u6587\u4EF6", "\u89E3\u6790", "\u63D0\u53D6", "\u6574\u7406", "\u5904\u7406", "file", "document", "pdf"]
138
+ ].join("\n")
140
139
  },
141
140
  pagebuilder: {
142
141
  id: BUILTIN_OBJECT_SKILL_IDS.pagebuilder,
143
142
  name: "\u52A8\u6001\u4EA4\u4E92\u7EC4\u4EF6\u751F\u6210\u6280\u80FD",
144
- description: "\u628A\u4E00\u53E5\u8BDD\u9700\u6C42\u53D8\u6210\u53EF\u770B\u7684\u4EA4\u4E92\u9875\u9762\u3001\u62A5\u544A\u3001\u770B\u677F\u3001\u4E3B\u9875\u3001\u6559\u7A0B\u3001\u5BF9\u6BD4\u9875\u6216\u8BA1\u5212\u9875\u3002\u4EFB\u4F55 agent \u5728\u9700\u8981\u8F93\u51FA\u53EF\u4EA4\u4E92\u53EF\u89C6\u5316\u6D88\u606F\u65F6\u6309\u9700\u52A0\u8F7D\u3002",
143
+ description: "\u628A\u4E00\u53E5\u8BDD\u9700\u6C42\u53D8\u6210\u53EF\u770B\u7684\u4EA4\u4E92\u9875\u9762\u3001\u62A5\u544A\u3001\u770B\u677F\u3001\u4E3B\u9875\u3001\u6559\u7A0B\u3001\u5BF9\u6BD4\u9875\u6216\u8BA1\u5212\u9875\u3002\u4EFB\u4F55 agent \u5728\u9700\u8981\u8F93\u51FA\u53EF\u4EA4\u4E92\u53EF\u89C6\u5316\u6D88\u606F\u65F6\u6309\u9700\u52A0\u8F7D\u3002\u89E6\u53D1\u8BCD\uFF1A\u9875\u9762\u3001\u62A5\u8868\u3001\u770B\u677F\u3001\u65E5\u62A5\u3001\u5468\u62A5\u3001\u4E3B\u9875\u3001\u6559\u7A0B\u3001\u5BF9\u6BD4\u9875\u3001\u8BA1\u5212\u9875\u3001\u53EF\u89C6\u5316\u3001\u4EA4\u4E92\u9875\u9762\u3001\u4EEA\u8868\u76D8\u3001dashboard\u3001report\u3001page\u3001landing\u3002",
145
144
  toolNames: [],
146
145
  promptPatch: [
147
146
  "\u52A8\u6001\u4EA4\u4E92\u7EC4\u4EF6\u751F\u6210\u89C4\u5219\uFF1A",
@@ -181,27 +180,22 @@ var SKILL_DEFS = {
181
180
  " return <main><section data-artifact-section>...</section></main>;",
182
181
  "}",
183
182
  "```"
184
- ].join("\n"),
185
- keywords: [
186
- "\u9875\u9762",
187
- "\u62A5\u8868",
188
- "\u770B\u677F",
189
- "\u65E5\u62A5",
190
- "\u5468\u62A5",
191
- "\u4E3B\u9875",
192
- "\u6559\u7A0B",
193
- "\u5BF9\u6BD4\u9875",
194
- "\u8BA1\u5212\u9875",
195
- "\u53EF\u89C6\u5316",
196
- "\u4EA4\u4E92\u9875\u9762",
197
- "\u4EEA\u8868\u76D8",
198
- "dashboard",
199
- "report",
200
- "page",
201
- "landing"
202
- ]
183
+ ].join("\n")
203
184
  }
204
185
  };
186
+ function buildBuiltinObjectSkillConfig(kind) {
187
+ const def = SKILL_DEFS[kind];
188
+ return {
189
+ version: "0.1",
190
+ kind: "skill",
191
+ id: def.id,
192
+ name: def.name,
193
+ description: def.description,
194
+ triggerMode: "explicit",
195
+ toolNames: def.toolNames,
196
+ promptPatch: def.promptPatch
197
+ };
198
+ }
205
199
  function buildBuiltinObjectSkillDbKey(kind, userId) {
206
200
  return createKey("page" /* DOC */, userId, BUILTIN_OBJECT_SKILL_IDS[kind]);
207
201
  }
@@ -212,6 +206,15 @@ function buildBuiltinObjectSkillReference(kind, userId) {
212
206
  type: "instruction"
213
207
  };
214
208
  }
209
+ function buildBuiltinObjectSkillPageContent(kind) {
210
+ const def = SKILL_DEFS[kind];
211
+ return buildSkillDocMarkdown({
212
+ body: `# ${def.name}
213
+
214
+ ${def.description}`,
215
+ skillConfig: buildBuiltinObjectSkillConfig(kind)
216
+ });
217
+ }
215
218
 
216
219
  // packages/chat/dialog/objectAssistantRegistry.ts
217
220
  var OBJECT_ASSISTANT_TO_SKILL = {
@@ -247,11 +250,11 @@ var buildBuiltinObjectAssistantAgent = (kind, userId) => {
247
250
  userId,
248
251
  isPublic: false,
249
252
  provider: PLATFORM_HOSTED_KIMI_PROVIDER,
250
- model: PLATFORM_HOSTED_GLM_52_MODEL,
253
+ model: PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
251
254
  apiSource: "platform",
252
255
  useServerProxy: true,
253
- inputPrice: PLATFORM_HOSTED_GLM_PRICE.input,
254
- outputPrice: PLATFORM_HOSTED_GLM_PRICE.output,
256
+ inputPrice: PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE.input,
257
+ outputPrice: PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE.output,
255
258
  createdAt: now,
256
259
  updatedAt: String(now),
257
260
  dialogCount: 0,
@@ -1106,6 +1109,10 @@ var createDialogAction = async (args, thunkApi) => {
1106
1109
  };
1107
1110
 
1108
1111
  export {
1112
+ BUILTIN_OBJECT_SKILL_IDS,
1113
+ buildBuiltinObjectSkillConfig,
1114
+ buildBuiltinObjectSkillDbKey,
1115
+ buildBuiltinObjectSkillPageContent,
1109
1116
  resolveAgentMemoryPolicy,
1110
1117
  buildMemorySubjectsForAgent,
1111
1118
  chooseMemoryOwners,
@@ -0,0 +1,50 @@
1
+ // packages/ai/tools/agentCapabilities.ts
2
+ var SYSTEM_AGENT_CAPABILITIES = [
3
+ {
4
+ id: "web-search",
5
+ label: "\u8054\u7F51\u641C\u7D22",
6
+ description: "\u8BA9 agent \u80FD\u641C\u7D22\u4E92\u8054\u7F51\u3001\u6293\u53D6\u7F51\u9875\u5185\u5BB9\uFF0C\u83B7\u53D6\u6700\u65B0\u4FE1\u606F\u3002",
7
+ tools: ["exa_search", "fetchWebpage"],
8
+ defaultEnabled: true,
9
+ icon: "\u{1F310}"
10
+ },
11
+ {
12
+ id: "web-scrape",
13
+ label: "\u6DF1\u5EA6\u7F51\u9875\u6293\u53D6",
14
+ description: "\u5728\u666E\u901A\u8054\u7F51\u641C\u7D22\u4E4B\u5916\uFF0C\u7528 Firecrawl \u505A\u7ED3\u6784\u5316\u641C\u7D22\u4E0E\u6574\u9875\u6293\u53D6\uFF0C\u9002\u5408\u9700\u8981\u5B8C\u6574\u6B63\u6587\u3001\u6587\u6863\u7AD9\u70B9\u6216\u7AD9\u5185\u68C0\u7D22\u7684\u573A\u666F\u3002",
15
+ tools: ["firecrawl_search", "firecrawl_scrape"],
16
+ defaultEnabled: true,
17
+ icon: "\u{1F578}\uFE0F"
18
+ },
19
+ {
20
+ id: "conversation-todo",
21
+ label: "\u5BF9\u8BDD Todo",
22
+ description: "\u5728\u591A\u6B65\u9AA4\u5BF9\u8BDD\u4E2D\u663E\u793A\u548C\u66F4\u65B0\u4EFB\u52A1\u8FDB\u5EA6\u3002\u5173\u95ED\u540E\uFF0CAgent \u4E0D\u4F1A\u4F7F\u7528\u5BF9\u8BDD\u5185 Todo \u5DE5\u5177\u3002",
23
+ tools: ["setTodoList"],
24
+ defaultEnabled: true,
25
+ icon: "\u2611\uFE0F"
26
+ },
27
+ {
28
+ id: "agent-orchestration",
29
+ label: "\u591A agent \u7F16\u6392",
30
+ description: "\u5148\u6309\u6536\u85CF\u3001\u7B80\u4ECB\u3001\u80FD\u529B\u548C\u6210\u672C\u5217\u51FA\u5B89\u5168 agent \u6458\u8981\uFF0C\u6309\u9700\u8BFB\u53D6\u5019\u9009\u914D\u7F6E\u89E3\u6790\u53EF\u8FD0\u884C key\uFF0C\u518D\u540E\u53F0\u542F\u52A8\u5176\u4ED6 agent \u6267\u884C\u5B50\u4EFB\u52A1\uFF0C\u5E76\u89C2\u5BDF\u3001\u67E5\u8BE2\u3001\u505C\u6B62\u8FD0\u884C\u4E2D\u7684 agent run\u2014\u2014\u9002\u5408\u5E76\u884C\u6D3E\u53D1\u3001\u957F\u4EFB\u52A1\u8DDF\u8E2A\u3001\u4E2D\u9014\u53EB\u505C\u7B49\u7F16\u6392\u573A\u666F\u3002",
31
+ tools: ["startAgentRun", "controlAgentRun", "listAgents"],
32
+ defaultEnabled: true,
33
+ icon: "\u{1F9E9}"
34
+ }
35
+ ];
36
+ var SYSTEM_AGENT_CAPABILITY_IDS = SYSTEM_AGENT_CAPABILITIES.map(
37
+ ({ id }) => id
38
+ );
39
+ var DEFAULT_SYSTEM_AGENT_CAPABILITIES = Object.fromEntries(
40
+ SYSTEM_AGENT_CAPABILITIES.map(({ id, defaultEnabled }) => [
41
+ id,
42
+ defaultEnabled
43
+ ])
44
+ );
45
+
46
+ export {
47
+ SYSTEM_AGENT_CAPABILITIES,
48
+ SYSTEM_AGENT_CAPABILITY_IDS,
49
+ DEFAULT_SYSTEM_AGENT_CAPABILITIES
50
+ };
@@ -127,180 +127,6 @@ function redactAgentRecordForWorkspaceTool(record) {
127
127
  return redacted;
128
128
  }
129
129
 
130
- // packages/agent-runtime/runtimeCompat.ts
131
- import { existsSync, readdirSync, statSync } from "node:fs";
132
- import { join } from "node:path";
133
- import { spawn } from "node:child_process";
134
- var IS_WINDOWS = process.platform === "win32";
135
- function isExecutableFile(candidate) {
136
- if (!existsSync(candidate)) return false;
137
- try {
138
- return statSync(candidate).isFile();
139
- } catch {
140
- return false;
141
- }
142
- }
143
- function resolveExecutableOnPath(name) {
144
- if (IS_WINDOWS && !/\.[a-z]+$/i.test(name)) {
145
- const exts = (process.env.PATHEXT || ".EXE;.CMD;.BAT").split(";").filter(Boolean);
146
- for (const ext of exts) {
147
- const found = resolveExecutableOnPath(name + ext);
148
- if (found) return found;
149
- }
150
- return null;
151
- }
152
- const pathEnv = process.env.PATH ?? "";
153
- const sep = pathEnv.includes(";") && IS_WINDOWS ? ";" : ":";
154
- const pathDirs = pathEnv.split(sep).filter(Boolean);
155
- const fallbackDirs = IS_WINDOWS ? [] : [
156
- "/opt/homebrew/bin",
157
- "/usr/local/bin",
158
- "/usr/bin",
159
- "/bin",
160
- `${process.env.HOME ?? ""}/.local/bin`
161
- ].filter(Boolean);
162
- for (const dir of [...pathDirs, ...fallbackDirs]) {
163
- const candidate = join(dir, name);
164
- if (isExecutableFile(candidate)) return candidate;
165
- }
166
- return null;
167
- }
168
- function createGlob(pattern) {
169
- const regex = globToRegExp(pattern);
170
- return {
171
- match(path) {
172
- return regex.test(path);
173
- },
174
- scanSync(opts) {
175
- const dot = opts.dot ?? false;
176
- const results = [];
177
- walkDir(opts.cwd, "", dot, results);
178
- return results.filter((rel) => regex.test(rel));
179
- }
180
- };
181
- }
182
- function walkDir(dir, prefix, dot, out) {
183
- let entries;
184
- try {
185
- entries = readdirSync(dir, { withFileTypes: true, encoding: "utf8" });
186
- } catch {
187
- return;
188
- }
189
- for (const entry of entries) {
190
- const name = String(entry.name);
191
- if (!dot && name.startsWith(".")) continue;
192
- const rel = prefix ? `${prefix}/${name}` : name;
193
- const full = join(dir, name);
194
- if (entry.isDirectory()) {
195
- walkDir(full, rel, dot, out);
196
- } else if (entry.isFile()) {
197
- out.push(rel);
198
- }
199
- }
200
- }
201
- function globToRegExp(pattern) {
202
- const trailingDir = pattern.endsWith("/");
203
- const src = trailingDir ? pattern.slice(0, -1) : pattern;
204
- const anchored = src.startsWith("/");
205
- const body = anchored ? src.slice(1) : src;
206
- let regex = "^";
207
- if (!anchored) regex += "(?:.*/)?";
208
- regex += convertBody(body);
209
- if (trailingDir) {
210
- regex += "(?:/.*)?";
211
- }
212
- regex += "$";
213
- return new RegExp(regex);
214
- }
215
- function convertBody(p) {
216
- let out = "";
217
- let i = 0;
218
- while (i < p.length) {
219
- const c = p[i];
220
- if (c === "*") {
221
- if (p[i + 1] === "*") {
222
- i += 2;
223
- if (p[i] === "/") {
224
- out += "(?:.*/)?";
225
- i += 1;
226
- } else {
227
- out += ".*";
228
- }
229
- } else {
230
- out += "[^/]*";
231
- i += 1;
232
- }
233
- } else if (c === "?") {
234
- out += "[^/]";
235
- i += 1;
236
- } else if (c === "[") {
237
- out += "[";
238
- i += 1;
239
- if (p[i] === "!") {
240
- out += "^";
241
- i += 1;
242
- }
243
- while (i < p.length && p[i] !== "]") {
244
- out += p[i] === "\\" ? "\\\\" : p[i];
245
- i += 1;
246
- }
247
- if (p[i] === "]") {
248
- out += "]";
249
- i += 1;
250
- }
251
- } else if (c === "{") {
252
- let depth = 1;
253
- let j = i + 1;
254
- let bodyStr = "";
255
- while (j < p.length && depth > 0) {
256
- if (p[j] === "{") depth += 1;
257
- else if (p[j] === "}") depth -= 1;
258
- if (depth > 0) bodyStr += p[j];
259
- j += 1;
260
- }
261
- const alts = bodyStr.split(",").map((alt) => convertBody(alt));
262
- out += `(?:${alts.join("|")})`;
263
- i = j;
264
- } else {
265
- out += escapeRegexChar(c);
266
- i += 1;
267
- }
268
- }
269
- return out;
270
- }
271
- function escapeRegexChar(c) {
272
- if ("\\^$.|+()".includes(c)) {
273
- return `\\${c}`;
274
- }
275
- return c;
276
- }
277
- function spawnToWebStreams(options) {
278
- const [command, ...args] = options.cmd;
279
- const child = spawn(command, args, {
280
- env: options.env,
281
- stdio: ["ignore", "pipe", "pipe"]
282
- });
283
- const exited = new Promise((resolve) => {
284
- child.on("exit", (code) => resolve(code ?? 1));
285
- child.on("error", () => resolve(127));
286
- });
287
- const toWeb = (stream) => {
288
- if (!stream) return null;
289
- return stream.toWeb?.() ?? new ReadableStream({
290
- start(controller) {
291
- stream.on("data", (chunk) => controller.enqueue(new Uint8Array(chunk)));
292
- stream.on("end", () => controller.close());
293
- stream.on("error", (e) => controller.error(e));
294
- }
295
- });
296
- };
297
- return {
298
- stdout: toWeb(child.stdout),
299
- stderr: toWeb(child.stderr),
300
- exited
301
- };
302
- }
303
-
304
130
  // packages/agent-runtime/noloWorkspaceTools.ts
305
131
  var NOLO_WORKSPACE_TOOL_NAMES = [
306
132
  "listDialogs",
@@ -347,8 +173,11 @@ function buildNoloWorkspaceOpenAiTools(args) {
347
173
  limit: { type: "integer", description: "Maximum dialogs to return." },
348
174
  space: stringToolParam("Optional space id or URL.")
349
175
  });
350
- add("readDialog", "Read one persisted dialog in the Nolo workspace.", {
351
- dialog: stringToolParam("Dialog id, dialog db key, or dialog URL."),
176
+ add("readDialog", [
177
+ "Read one persisted dialog in the Nolo workspace.",
178
+ "Prefer the full dialog dbKey (dialog-<userId>-<id>) or a dialog URL; a bare id only resolves for the currently logged-in user and cannot reliably read other users' or cross-server dialogs. Use listDialogs first when the target dialog is unclear."
179
+ ].join("\n"), {
180
+ dialog: stringToolParam("Dialog dbKey (dialog-<userId>-<id>), dialog URL, or bare id (current user only)."),
352
181
  limit: { type: "integer", description: "Optional message limit." }
353
182
  }, ["dialog"]);
354
183
  add("queryDialogsBySubjectRef", "Query persisted dialog evidence by a generic dialog.subjectRefs target.", {
@@ -760,122 +589,13 @@ function buildNoloWorkspaceCommandArgs(call) {
760
589
  throw new Error(`Unsupported Nolo workspace tool: ${call.name}`);
761
590
  }
762
591
  }
763
- async function readNoloProcessStream(readable) {
764
- if (!readable) return "";
765
- return new Response(readable).text();
766
- }
767
- async function runNoloWorkspaceCliTool(call, args) {
768
- const cliArgs = buildNoloWorkspaceCommandArgs(call);
769
- const bunSpawn = globalThis.Bun?.spawn;
770
- const spawn2 = args.spawn ?? (typeof bunSpawn === "function" ? bunSpawn : nodeSpawnFallback);
771
- const execPath = args.processExecPath ?? process.execPath;
772
- const entrypoint = args.cliEntrypoint;
773
- const cmd = entrypoint && entrypoint !== execPath ? [execPath, entrypoint, ...cliArgs] : [execPath, ...cliArgs];
774
- const proc = spawn2({
775
- cmd,
776
- stdout: "pipe",
777
- stderr: "pipe",
778
- env: args.env
779
- });
780
- const [stdout, stderr, exitCode] = await Promise.all([
781
- readNoloProcessStream(proc.stdout),
782
- readNoloProcessStream(proc.stderr),
783
- proc.exited
784
- ]);
785
- const content = `${stdout}${stderr}`;
786
- if (exitCode !== 0) {
787
- throw new Error(content.trim() || `nolo ${cliArgs.join(" ")} exited ${exitCode}`);
788
- }
789
- return {
790
- content,
791
- metadata: {
792
- [args.metadataKind ?? "noloWorkspaceTool"]: true,
793
- command: ["nolo", ...cliArgs].join(" "),
794
- exitCode
795
- }
796
- };
797
- }
798
- function buildNoloWorkspaceCliToolExecutors(args) {
799
- const executors = {};
800
- for (const toolName of NOLO_WORKSPACE_TOOL_NAMES) {
801
- if (toolName === "loadSkill") continue;
802
- executors[toolName] = (call) => runNoloWorkspaceCliTool(call, args);
803
- }
804
- return executors;
805
- }
806
- function buildLoadSkillExecutor(args) {
807
- return async (call) => {
808
- const parsed = parseNoloWorkspaceToolArguments(call.arguments);
809
- const name = noloStringArg(parsed.name ?? parsed.skillName ?? parsed.skill);
810
- if (!name) {
811
- return {
812
- content: await formatUnknownSkillMessage(args.cwd, "(no name provided)"),
813
- metadata: { loadSkill: true, resolved: false }
814
- };
815
- }
816
- const { resolveSkillByName } = await import("./skillDiscovery-KJWT7JBU.js");
817
- const resolved = resolveSkillByName(args.cwd, name);
818
- if (!resolved) {
819
- const { resolveCodingBuiltinSlug, buildCodingSkillContentBySlug } = await import("./codingSkills-36KN5NQT.js");
820
- const builtinSlug = resolveCodingBuiltinSlug(name);
821
- if (builtinSlug) {
822
- const body = buildCodingSkillContentBySlug(builtinSlug);
823
- return {
824
- content: `Skill "${name}" loaded inline. Follow its instructions.
825
-
826
- ${body}`,
827
- metadata: { loadSkill: true, resolved: true, name, requestedName: name, builtin: true }
828
- };
829
- }
830
- return {
831
- content: await formatUnknownSkillMessage(args.cwd, name),
832
- metadata: { loadSkill: true, resolved: false, name, requestedName: name }
833
- };
834
- }
835
- try {
836
- const { readFileSync } = await import("node:fs");
837
- const body = readFileSync(resolved, "utf8");
838
- return {
839
- content: `Skill "${name}" loaded inline. Follow its instructions.
840
-
841
- ${body}`,
842
- metadata: { loadSkill: true, resolved: true, name, requestedName: name, path: resolved }
843
- };
844
- } catch (err) {
845
- const message = err instanceof Error ? err.message : String(err);
846
- return {
847
- content: `Skill "${name}" could not be read: ${message}`,
848
- metadata: { loadSkill: true, resolved: true, name, requestedName: name, path: resolved, readError: message }
849
- };
850
- }
851
- };
852
- }
853
- async function formatUnknownSkillMessage(cwd, requestedName) {
854
- const { discoverSkills } = await import("./skillDiscovery-KJWT7JBU.js");
855
- let available = [];
856
- try {
857
- available = discoverSkills(cwd).map((s) => s.name);
858
- } catch {
859
- }
860
- const header = `Skill "${requestedName}" not found in this workspace's skill directory (.agents/skills/<name>/SKILL.md).`;
861
- if (available.length === 0) return `${header}
862
-
863
- No skills were discovered in this workspace.`;
864
- return `${header}
865
-
866
- Available skills: ${available.join(", ")}`;
867
- }
868
- var nodeSpawnFallback = (options) => {
869
- return spawnToWebStreams({ cmd: options.cmd, env: options.env });
870
- };
871
592
 
872
593
  export {
873
594
  resolveRuntimeToolSurfaceForAgent,
874
595
  redactAgentRecordForWorkspaceTool,
875
- resolveExecutableOnPath,
876
- createGlob,
877
596
  NOLO_WORKSPACE_TOOL_NAMES,
878
597
  buildNoloWorkspaceOpenAiTools,
598
+ noloStringArg,
879
599
  parseNoloWorkspaceToolArguments,
880
600
  clampNoloPositiveInteger,
881
601
  getNoloDialogIdFromKey,
@@ -887,6 +607,5 @@ export {
887
607
  filterNoloDialogSubjectRefEvidence,
888
608
  verifyNoloDialogSubjectRefQuery,
889
609
  buildNoloTableQueryRequest,
890
- buildNoloWorkspaceCliToolExecutors,
891
- buildLoadSkillExecutor
610
+ buildNoloWorkspaceCommandArgs
892
611
  };