nolo-cli 0.18.0 → 0.24.0-alpha.6
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.
- package/{_executeModel-X5PCIZN6.js → _executeModel-ARCMGGMY.js} +46 -44
- package/{action-LT7BRFLK.js → action-5MNAXR5B.js} +7 -6
- package/{addContentAction-PL3KKBDH.js → addContentAction-UNSYTVTB.js} +5 -5
- package/{addDialogAgentAction-FCMSKYAF.js → addDialogAgentAction-LJGNP2AO.js} +5 -5
- package/{agentDeleteCommand-2BZDQV36.js → agentDeleteCommand-C5PIEBMZ.js} +27 -26
- package/{agentEmailCommands-2QJDGRMB.js → agentEmailCommands-QTGQ3ZAD.js} +57 -55
- package/{agentListCommands-6VEPTKBI.js → agentListCommands-LRHBS3A5.js} +30 -26
- package/{agentMachineCommands-NVVHNWYI.js → agentMachineCommands-4PXIT4BP.js} +25 -24
- package/{agentRecordCommands-4GGRDMD4.js → agentRecordCommands-ZZPTYTYR.js} +52 -50
- package/{agentRunCommand-XOLQNKBZ.js → agentRunCommand-7ZTPZNUX.js} +55 -54
- package/{agentRunControl-Y5AFH5PQ.js → agentRunControl-SNUKXN6J.js} +6 -2
- package/{agentRuntimeLocal-7WYWCGL4.js → agentRuntimeLocal-QOYY5UV2.js} +19 -18
- package/{agentSlice-EAXPGEYV.js → agentSlice-J3W3RX2I.js} +5 -5
- package/{appDeleteCommands-77KR2RJ4.js → appDeleteCommands-7NS46XDH.js} +23 -22
- package/{appDeployCommands-K7CAHGBI.js → appDeployCommands-RSRNQ67U.js} +23 -22
- package/{appDeployStatusCommands-4OEKLTBT.js → appDeployStatusCommands-EF4RSGC6.js} +23 -22
- package/{appGetCommands-VM2WDLAZ.js → appGetCommands-YA7JWYUX.js} +23 -22
- package/{appListCommands-GX6BBA6U.js → appListCommands-WM2ON6JW.js} +23 -22
- package/{authCommand-DY6UUL6O.js → authCommand-HJP7FURK.js} +12 -13
- package/{authCommands-XTBV7OFZ.js → authCommands-NYZM2B2I.js} +4 -5
- package/{chunk-MKA6QE5E.js → chunk-2IPEVBUO.js} +126 -68
- package/{chunk-OWOHNGCN.js → chunk-2MBTWINN.js} +42 -3
- package/{chunk-K6EUAOW3.js → chunk-35RYGII3.js} +1 -1
- package/{chunk-TRT4I4UD.js → chunk-4POUK2BV.js} +2 -2
- package/{chunk-LLWKHDG4.js → chunk-4ULSC37S.js} +1 -3
- package/{chunk-EDV7EBOI.js → chunk-4ZH6GUJF.js} +2151 -1500
- package/{chunk-MVQ4TBSD.js → chunk-54VHTARN.js} +1 -1
- package/{chunk-L4F3I4SR.js → chunk-5HQQ4LUU.js} +4 -6
- package/{chunk-Z4NR32XR.js → chunk-5RGU3J7P.js} +13 -0
- package/{chunk-7BUYEZ6U.js → chunk-7H3UTGPM.js} +12 -72
- package/{chunk-RQN4SEKL.js → chunk-7W6GFNJL.js} +1 -1
- package/{chunk-HEGV7BH3.js → chunk-AQZCWJOG.js} +1 -1
- package/{chunk-3ND52WIL.js → chunk-ATWUOTJP.js} +180 -24
- package/chunk-CF7S2RYZ.js +376 -0
- package/{chunk-I2ZJKTG5.js → chunk-CGVRC2TB.js} +7 -7
- package/{chunk-UAIVG4J6.js → chunk-CHSCAUZN.js} +1 -8
- package/{chunk-KFEVY3ST.js → chunk-D34RI6NI.js} +18 -8
- package/{chunk-ROWQEJRP.js → chunk-DXJS7VSG.js} +3 -2
- package/{chunk-MHSGJW4Z.js → chunk-EHOYZRTI.js} +44 -14
- package/{chunk-XRZJGPFI.js → chunk-FON47ACC.js} +4 -4
- package/{chunk-SCTYAHYK.js → chunk-H2NAWOLH.js} +217 -141
- package/{chunk-MPVYDS7I.js → chunk-H6ODMJR3.js} +3 -3
- package/{chunk-R35XMF6F.js → chunk-H73ZV2GL.js} +352 -30
- package/{chunk-4T5F7YZQ.js → chunk-I6RJGORZ.js} +1 -1
- package/{chunk-OK6YSWLH.js → chunk-IICW77GI.js} +1 -1
- package/{chunk-VDXCXCXH.js → chunk-IUDMBCXC.js} +1 -1
- package/{chunk-AHCY2S2I.js → chunk-JADNODCQ.js} +1 -1
- package/{chunk-DFCFMCY6.js → chunk-JBLY6HQP.js} +2 -2
- package/{chunk-UGUW3FHG.js → chunk-JMSCXQUG.js} +2 -2
- package/{chunk-N54HIJVJ.js → chunk-KFUCLS7Z.js} +101 -9
- package/{chunk-FQZZLA3C.js → chunk-KXKQO4Q6.js} +17 -0
- package/{chunk-3Q7WHGCB.js → chunk-L65QKSVJ.js} +1 -1
- package/{chunk-3ZX7PERL.js → chunk-LALVWNE4.js} +20 -7
- package/{chunk-PJSV3IZ5.js → chunk-M3TMVJKG.js} +1 -1
- package/{chunk-REA4JLBH.js → chunk-M5OZCOBV.js} +7 -6
- package/{chunk-JLA4FXYC.js → chunk-MALVZUYL.js} +1 -1
- package/{chunk-GFUIQ4RY.js → chunk-MXFQHRSS.js} +1 -1
- package/{chunk-LSFAWXKC.js → chunk-N7J63Q6C.js} +1 -0
- package/{chunk-6Y7A3OQQ.js → chunk-NRY4GCKJ.js} +2 -0
- package/{chunk-G5U6LDLG.js → chunk-NVHPMDSZ.js} +6 -6
- package/{chunk-23FZYPLC.js → chunk-OJFYT3ZQ.js} +842 -1060
- package/{chunk-ELT65PZW.js → chunk-OXLLFZNF.js} +1 -1
- package/{chunk-CZ6NYQTV.js → chunk-P4QWLZGU.js} +2 -2
- package/{chunk-5MIDPSSK.js → chunk-PB7G5MAM.js} +3 -3
- package/{chunk-HWW2M4SN.js → chunk-QLVWFXZQ.js} +5 -4
- package/{chunk-VYHDJEQD.js → chunk-QNLLGS37.js} +136 -78
- package/{chunk-XHG22OEX.js → chunk-ROJI6DRT.js} +2 -2
- package/{chunk-BV4VEE3W.js → chunk-ROYOKSX4.js} +243 -354
- package/{chunk-VNAEBGDK.js → chunk-RZNYL4LW.js} +123 -26
- package/{chunk-RVOUXDFU.js → chunk-S6KVFOUG.js} +6 -34
- package/{chunk-V3ED5AWK.js → chunk-S77SCVBU.js} +27 -16
- package/{chunk-UBHAWFQ6.js → chunk-S7RWIPDI.js} +42 -19
- package/{chunk-B5TOXZAK.js → chunk-SIZQB7BD.js} +1 -1
- package/{chunk-DFFIZ25G.js → chunk-SLOGKB7M.js} +4 -1
- package/{chunk-FXUSIQC2.js → chunk-SROR5TSM.js} +1 -1
- package/{chunk-PIZYJVHQ.js → chunk-TN4YHAI3.js} +4 -4
- package/{chunk-IYEXFJPC.js → chunk-TW35GDNW.js} +64 -57
- package/chunk-UZ6XXCVR.js +50 -0
- package/{chunk-DKZFOK24.js → chunk-UZH44DWK.js} +7 -288
- package/{chunk-YGW4G5W5.js → chunk-X546QUDT.js} +61 -12
- package/chunk-YYLHWIW6.js +48 -0
- package/{chunk-SWDPIPOY.js → chunk-ZGVW7MSZ.js} +1 -1
- package/{chunk-34WPV75U.js → chunk-ZUXIXYJI.js} +1 -1
- package/{chunk-VC6OZXO5.js → chunk-ZWJOGMKH.js} +2 -26
- package/{cliExecutor-DNE7TCC4.js → cliExecutor-K3F7DMRO.js} +2 -2
- package/{codingSkills-36KN5NQT.js → codingSkills-EN6Z6G6U.js} +4 -4
- package/{createAgentAutomationAction-GNFF524X.js → createAgentAutomationAction-MKQWN4VQ.js} +19 -18
- package/{createDialogAction-RB55KCLO.js → createDialogAction-YWIZPLFS.js} +22 -20
- package/{createPageAction-Y7343GLU.js → createPageAction-74TTEIPC.js} +20 -19
- package/{db-W3O47YGF.js → db-W5UHK4P3.js} +150 -0
- package/{dbSlice-CGSRFJN3.js → dbSlice-5BKDURDL.js} +4 -4
- package/{dialogCommands-IAZK6YHQ.js → dialogCommands-MJIP32FL.js} +24 -23
- package/{dialogSlice-UQAXF23P.js → dialogSlice-KLLVH4WI.js} +24 -18
- package/{docCreateCommands-I2EWZGCI.js → docCreateCommands-5DN472U6.js} +24 -27
- package/{docDeleteCommands-IZ45UZKG.js → docDeleteCommands-HE76LBN4.js} +25 -24
- package/{docReadCommands-R6Z4QJYU.js → docReadCommands-XVGZSCBS.js} +24 -23
- package/{docStore-5HOJ4D7D.js → docStore-SPH3D6BT.js} +20 -19
- package/{docUpdateCommands-2LRBKQPY.js → docUpdateCommands-P7IAWUAD.js} +24 -27
- package/{fetchMessages-BMGVZVSE.js → fetchMessages-W4IKHPCS.js} +2 -3
- package/{getPricing-G7DLAST6.js → getPricing-WENPBVWH.js} +3 -3
- package/{handleSendMessageAction-Q4HY35WX.js → handleSendMessageAction-ZU6WJVL7.js} +23 -20
- package/index.js +74 -74
- package/{localDialogRead-4H3QJFLW.js → localDialogRead-JXTAHW2E.js} +2 -2
- package/{machineCommands-PKBPQKTY.js → machineCommands-NI76PVHK.js} +59 -57
- package/{machineWsRunDispatch-UZAW4OXJ.js → machineWsRunDispatch-W3G6NJVQ.js} +51 -49
- package/{models-DJFSJ7SW.js → models-DB27UAE3.js} +2 -2
- package/package.json +1 -1
- package/{read-3FMPZPER.js → read-F3L3T2WJ.js} +2 -1
- package/{readDocTool-VSYHKK3V.js → readDocTool-FOHWVA4R.js} +1 -1
- package/{readlineWorkspace-Y2RDOFZG.js → readlineWorkspace-BDH4G477.js} +880 -425
- package/{removeDialogAgentAction-OAGA2G3U.js → removeDialogAgentAction-QCFGIUIH.js} +8 -7
- package/{runAgentClientLoop-NBPIKJ6J.js → runAgentClientLoop-ZPKMXCM5.js} +45 -38
- package/{setDialogExtraReferencesAction-JZEXA5SL.js → setDialogExtraReferencesAction-DK4CKERU.js} +5 -5
- package/{setPrimaryDialogAgentAction-4ZUQQKDG.js → setPrimaryDialogAgentAction-SJSO6N27.js} +8 -7
- package/{settingSlice-7MNKHZ6R.js → settingSlice-XNM5AFPU.js} +6 -5
- package/{spaceCommands-DHCZ7J5I.js → spaceCommands-3GGBJRQR.js} +25 -24
- package/{spaceSlice-ZXLLG3CR.js → spaceSlice-47Z6XLFQ.js} +21 -18
- package/{streamAgentChatTurn-L3YW6LSB.js → streamAgentChatTurn-VT5K5JSD.js} +140 -98
- package/switchDialogAgentAction-4OAC6QRN.js +61 -0
- package/{tableCommands-BEQAGE4I.js → tableCommands-HEQYT2KP.js} +1 -1
- package/{toolApiClient-QI3YBNWB.js → toolApiClient-ISM4ZQX4.js} +2 -2
- package/{tools-ECGXR5QF.js → tools-L7RCHAPT.js} +36 -33
- package/{tuiSummaryLlmCaller-OMSCNHXA.js → tuiSummaryLlmCaller-3DYOLTVN.js} +6 -6
- package/{updateCommands-XTW55TOT.js → updateCommands-HTCOBXCA.js} +2 -2
- package/{updateDialogTitleAction-HQ2EUDFT.js → updateDialogTitleAction-KMPVPQ4A.js} +28 -27
- package/chunk-DL6EPNIK.js +0 -50
- package/chunk-V5R4NZP2.js +0 -78
- package/chunk-X4Q4UZEY.js +0 -26
- package/queryRunOverlay-O4LOMMPO.js +0 -161
- package/runOverlayPresentation-ZO4VCWEU.js +0 -11
- package/types-ZSTJ7MPR.js +0 -7
- package/{chunk-X7W4TNB4.js → chunk-CMKUBIGW.js} +3 -3
- 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-
|
|
6
|
+
} from "./chunk-H2NAWOLH.js";
|
|
7
7
|
import {
|
|
8
8
|
require_date_fns
|
|
9
9
|
} from "./chunk-M76ECQRD.js";
|
|
10
10
|
import {
|
|
11
|
-
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
TOOL_PACKS
|
|
12
|
+
} from "./chunk-CF7S2RYZ.js";
|
|
13
|
+
import {
|
|
14
|
+
buildSkillDocMarkdown
|
|
15
|
+
} from "./chunk-ZWJOGMKH.js";
|
|
13
16
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
|
|
18
|
+
PLATFORM_HOSTED_DEEPSEEK_FLASH_PRICE,
|
|
16
19
|
PLATFORM_HOSTED_KIMI_PROVIDER
|
|
17
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
|
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:
|
|
253
|
+
model: PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
|
|
251
254
|
apiSource: "platform",
|
|
252
255
|
useServerProxy: true,
|
|
253
|
-
inputPrice:
|
|
254
|
-
outputPrice:
|
|
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",
|
|
351
|
-
|
|
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
|
-
|
|
891
|
-
buildLoadSkillExecutor
|
|
610
|
+
buildNoloWorkspaceCommandArgs
|
|
892
611
|
};
|