nolo-cli 0.83.0-alpha.1 → 0.83.0
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/README.md +2 -2
- package/{_executeModel-TRYFRXDJ.js → _executeModel-LUNEV235.js} +48 -48
- package/{action-D22U6CTH.js → action-YVYQEAAV.js} +11 -11
- package/{addContentAction-XAPUTGL4.js → addContentAction-O7R66HEX.js} +9 -9
- package/{addDialogAgentAction-M7VLLBZM.js → addDialogAgentAction-74OA7KYP.js} +8 -8
- package/{agentDeleteCommand-EKSPHWHV.js → agentDeleteCommand-2YAHAZFJ.js} +31 -30
- package/{agentEmailCommands-QD2K4YG6.js → agentEmailCommands-G6A7IRPQ.js} +67 -64
- package/{agentGrantCommands-R3VQEZJR.js → agentGrantCommands-M3XFO6EN.js} +2 -2
- package/{agentListCommands-WFBYAQKO.js → agentListCommands-KMS675GZ.js} +40 -33
- package/{agentMachineCommands-F5DKXCQP.js → agentMachineCommands-W2SMNSQ3.js} +31 -30
- package/{agentProviderCommands-65ZC2WB4.js → agentProviderCommands-GNPTL5XR.js} +87 -0
- package/{agentPullCommand-N7L2CT7L.js → agentPullCommand-O5MPVJ5E.js} +3 -3
- package/agentRecordCommands-D7BRMFNI.js +128 -0
- package/{agentRunCommand-4VMDFEQF.js → agentRunCommand-VL6MMEUB.js} +65 -62
- package/{agentRunControl-T44MESII.js → agentRunControl-AVJR4JW4.js} +2 -2
- package/{agentRuntimeLocal-FMOEMRUU.js → agentRuntimeLocal-VXZSDIGT.js} +27 -26
- package/{agentSlice-Q5XOM2PN.js → agentSlice-5YJHUO47.js} +10 -10
- package/{appDeleteCommands-AXB7XZE7.js → appDeleteCommands-32MHLR4L.js} +31 -30
- package/{appDeployCommands-ZLWI4QUC.js → appDeployCommands-WCQOUSOB.js} +31 -30
- package/{appDeployStatusCommands-2RAEYJQF.js → appDeployStatusCommands-6QKB7DYN.js} +31 -30
- package/{appGetCommands-QYUXS4W4.js → appGetCommands-SFAPP5PB.js} +31 -30
- package/{appListCommands-GQLN4J5X.js → appListCommands-EKUBDRUO.js} +31 -30
- package/{authCommand-7N2G6MXP.js → authCommand-F4EFRRX6.js} +89 -24
- package/{authCommands-ILTBI6JV.js → authCommands-RGOGCPP6.js} +4 -5
- package/builtinSkillRegistry-FUAVTRVZ.js +33 -0
- package/{chatQueueReduxAdapter-WICMMQZT.js → chatQueueReduxAdapter-PQMRR2PK.js} +24 -24
- package/{chromeCommands-VOIRNJBL.js → chromeCommands-FZYAU75D.js} +1 -1
- package/{chromeOpsCommands-M7DPCX2T.js → chromeOpsCommands-62P2Q2YB.js} +31 -1
- package/{chunk-C3FZR5EC.js → chunk-2F7RJC6L.js} +1 -1
- package/{chunk-HQUORJTM.js → chunk-3BMYXEUW.js} +1 -1
- package/{chunk-3QPYFHAH.js → chunk-3DII57IT.js} +1 -1
- package/{chunk-NTW5GWDM.js → chunk-3VNWWVKB.js} +2 -0
- package/{chunk-DWUCB2A3.js → chunk-42V6BK2E.js} +1 -1
- package/{chunk-XRMBP7IW.js → chunk-45C5ER5U.js} +10 -10
- package/{chunk-DSRXPQWA.js → chunk-4OEFYTWL.js} +43 -43
- package/{chunk-6RUOYAPM.js → chunk-4S5QUMJP.js} +7 -7
- package/{chunk-GBPZKFYK.js → chunk-53HEEOTT.js} +4 -4
- package/{chunk-5Q5LYRJH.js → chunk-5FBTLSFG.js} +155 -795
- package/{chunk-KIS76A2P.js → chunk-5H7KJX7J.js} +38 -4
- package/{chunk-5XTOKQLW.js → chunk-5UTFL4QJ.js} +6 -2
- package/chunk-5ZUL4CUO.js +10 -0
- package/{chunk-E6RGHPDR.js → chunk-6D6VBVEW.js} +4 -6
- package/{chunk-KVDUCO4Q.js → chunk-6IG4XSS6.js} +16 -12
- package/{chunk-CMH2SYHX.js → chunk-6OZ36FXI.js} +2 -2
- package/{chunk-5BVAAVIF.js → chunk-6Q33GUCC.js} +1 -1
- package/{chunk-EWRS6HJ3.js → chunk-6VFARHZW.js} +625 -303
- package/{chunk-BYEJ7K2Z.js → chunk-7S4YWN7P.js} +1 -1
- package/{chunk-SREASRV5.js → chunk-ABQYVJBJ.js} +1 -1
- package/chunk-ACTMNVHM.js +93 -0
- package/{chunk-NRALD3CC.js → chunk-AEOE4Z6Q.js} +54 -10
- package/{chunk-XWNRAIUL.js → chunk-AFUORTY4.js} +6 -16
- package/chunk-BNGW5ASC.js +344 -0
- package/{chunk-SZLVDREM.js → chunk-BP4XNZRM.js} +3 -3
- package/{chunk-JZYXSXMZ.js → chunk-BTI7PJDX.js} +15 -15
- package/{chunk-2KDR4CWE.js → chunk-BYMV6QZG.js} +24 -1
- package/{chunk-GCJ3IS5M.js → chunk-DHDMC6FO.js} +175 -6
- package/{chunk-E36HZARC.js → chunk-DNCEALKX.js} +93 -17
- package/{chunk-N5KGQ5AD.js → chunk-DRGSDQBL.js} +3 -3
- package/{chunk-D6XYLSOS.js → chunk-ETI2NYVF.js} +1 -1
- package/{chunk-EXMHJN7C.js → chunk-EYAQT56M.js} +4 -3
- package/{chunk-CJCJF5XB.js → chunk-FDTR4QJ6.js} +4 -2
- package/{chunk-JPVNC5B2.js → chunk-G2O6V3HJ.js} +3 -3
- package/{chunk-WL2RKIBF.js → chunk-GEPUP7OO.js} +1 -1
- package/{chunk-PYXL2CJL.js → chunk-GPCZ7UXG.js} +1 -1
- package/{chunk-K7AG465Q.js → chunk-GQBOR3G6.js} +4 -2
- package/{chunk-YFADVSZE.js → chunk-H62HCIUP.js} +6 -6
- package/{chunk-PZM3EENV.js → chunk-HJUYAD4A.js} +1 -1
- package/{chunk-3JQ2NRYU.js → chunk-HVURBGF3.js} +4 -4
- package/{chunk-HH65VA5U.js → chunk-I3TQJXQ7.js} +109 -6
- package/{chunk-ZVN6I33J.js → chunk-IIVGDG4I.js} +6 -5
- package/{chunk-UDQWGU7F.js → chunk-J4MOO56S.js} +1 -1
- package/{chunk-KC5FAHVS.js → chunk-JEDZAO7L.js} +1 -1
- package/{chunk-6XIE5ZGI.js → chunk-JPGCXHNM.js} +1 -1
- package/chunk-JRQFUXY7.js +1625 -0
- package/chunk-KQ4ONNQD.js +677 -0
- package/{chunk-CPSZJBLK.js → chunk-L5UXH3B2.js} +105 -26
- package/{chunk-RXX4GDIH.js → chunk-LS2ZANRJ.js} +1 -1
- package/{chunk-BJIRLHJR.js → chunk-M2EJHDJP.js} +4 -0
- package/{chunk-EVBFYPDC.js → chunk-MC4XLIJ7.js} +6 -2
- package/{chunk-DUJWWUGV.js → chunk-NA35QHCF.js} +1 -1
- package/{chunk-FNGAF7C4.js → chunk-OEVAY4J6.js} +137 -12
- package/{chunk-UJ63UXGE.js → chunk-OIVSQH2O.js} +1006 -801
- package/{chunk-LZIMZZYT.js → chunk-ORYWEJO4.js} +13 -15
- package/{chunk-LKSDMMY2.js → chunk-Q2XN3EOZ.js} +40 -30
- package/{chunk-AETZ7AD6.js → chunk-Q554LLSI.js} +1 -1
- package/{chunk-FMODTASJ.js → chunk-Q5FJJ6XI.js} +1 -7
- package/{chunk-AJHEFRGJ.js → chunk-Q67DOFOO.js} +214 -5
- package/{chunk-UZ6XXCVR.js → chunk-QDSINZM3.js} +15 -2
- package/{chunk-BHXK3KPV.js → chunk-QVKRR2SS.js} +2314 -66
- package/{chunk-BNQK6UPC.js → chunk-RFCKMYDK.js} +11 -173
- package/{chunk-YWG6EMH3.js → chunk-RG6JBBX5.js} +10 -6
- package/{chunk-QCZX4FTW.js → chunk-SH43IESU.js} +173 -15
- package/{chunk-YIR5OYHU.js → chunk-SSDAAEC2.js} +1235 -59
- package/{chunk-SPAQ4PVV.js → chunk-SV5IJK6K.js} +1 -1
- package/{chunk-BJCWNHVU.js → chunk-TOP2VXOR.js} +2 -2
- package/{chunk-4EJ5QYB5.js → chunk-UKZDAFYT.js} +1 -1
- package/{chunk-PGSKWZCB.js → chunk-UZGQNTVW.js} +1 -1
- package/{chunk-ZZCJUXUI.js → chunk-V4MJDUSR.js} +2 -2
- package/{chunk-JYYZCK2Z.js → chunk-V7E4PXQD.js} +1 -1
- package/{chunk-OZX2IPKM.js → chunk-VLTIYV3X.js} +1 -1
- package/{chunk-NHRQCXIQ.js → chunk-VMFTFOWF.js} +13 -3
- package/{chunk-5J7W2VWW.js → chunk-WV42OMV7.js} +6 -265
- package/{chunk-PFDKB7IZ.js → chunk-X6DN5HBD.js} +6 -6
- package/{chunk-Q7TA25PG.js → chunk-YFE4A4O7.js} +731 -90
- package/{chunk-BOYUESO7.js → chunk-Z77CRGTW.js} +1 -1
- package/{chunk-QC5LGHYP.js → chunk-ZCYXJSTU.js} +10 -5
- package/{contentThunks-A2ZG3SW6.js → contentThunks-GJV22WVZ.js} +25 -25
- package/{cooldownCommands-BSCH2W7P.js → cooldownCommands-REAWYVTY.js} +2 -2
- package/{createAgentAutomationAction-QFQQPG35.js → createAgentAutomationAction-6V25TZEO.js} +25 -25
- package/{createDialogAction-WI73R5EQ.js → createDialogAction-SX36BGSX.js} +28 -28
- package/{createPageAction-XN237WPJ.js → createPageAction-IR4BGJSI.js} +26 -26
- package/{dbSlice-GKGGFNOB.js → dbSlice-XVWBAGYN.js} +8 -8
- package/{deleteFile-LWSR674W.js → deleteFile-YG6QMJLU.js} +3 -3
- package/{dialogCommands-SFRDEMB3.js → dialogCommands-5J56DFWN.js} +35 -32
- package/{dialogSlice-56G4Q4RU.js → dialogSlice-UNX2FAPZ.js} +24 -24
- package/{docCreateCommands-OMQLZ3OW.js → docCreateCommands-KYI2DC2U.js} +32 -31
- package/{docDeleteCommands-7RCC6P23.js → docDeleteCommands-67REUSRY.js} +33 -32
- package/{docReadCommands-5FABO4UV.js → docReadCommands-HOSVSBDJ.js} +32 -31
- package/{docStore-PZSZWXX3.js → docStore-JWVG5NDO.js} +9 -9
- package/{docUpdateCommands-P5AQI6HB.js → docUpdateCommands-EMGCSMXY.js} +32 -31
- package/{fetchMessages-DRABNDPZ.js → fetchMessages-EIU7UFFK.js} +3 -4
- package/{getPricing-HRMSOF3E.js → getPricing-LUSEABA6.js} +4 -4
- package/{handleSendMessageAction-MHKC4R3Q.js → handleSendMessageAction-B75UOJKF.js} +24 -24
- package/index.js +99 -86
- package/{localDialogRead-PUQKFI73.js → localDialogRead-BTFJ4V2I.js} +2 -2
- package/{localRuntimeDb-P37ZTX55.js → localRuntimeDb-SYQGUF4U.js} +1 -1
- package/{machineCommands-VJABZGD2.js → machineCommands-GFPTOY6L.js} +64 -61
- package/{machineWsRunDispatch-5SPILS2O.js → machineWsRunDispatch-46PSZ3DJ.js} +62 -59
- package/{memberThunks-KATHH3F4.js → memberThunks-QGFLFVCI.js} +9 -9
- package/{models-GS72DVJS.js → models-T3SG6MJ5.js} +2 -2
- package/{offlineMarxistsAgentCommand-GEH6SNNA.js → offlineMarxistsAgentCommand-HGXZV4XJ.js} +1 -1
- package/package.json +1 -1
- package/providerPresetApply-FG6NZ57W.js +214 -0
- package/providerRegistry-757OWH3O.js +31 -0
- package/{read-LC6HVYBN.js → read-COE3ZYR6.js} +5 -4
- package/{readDocTool-N3ERJHHF.js → readDocTool-5USN4A6V.js} +1 -1
- package/{readlineWorkspace-GMYIPMRU.js → readlineWorkspace-UFSWHFKD.js} +144 -109
- package/{removeDialogAgentAction-F5GPTALR.js → removeDialogAgentAction-IX3MN2ZO.js} +11 -11
- package/{runAgentClientLoop-U3GEPCQI.js → runAgentClientLoop-25LJ4XGV.js} +47 -47
- package/{runtimeDoctorCommands-CROTMULY.js → runtimeDoctorCommands-X6WDBEQX.js} +2 -2
- package/{setDialogExtraReferencesAction-AY4ZCF3A.js → setDialogExtraReferencesAction-X4HCPNZL.js} +9 -9
- package/{setPrimaryDialogAgentAction-HPMG7V3R.js → setPrimaryDialogAgentAction-4GMIQLOD.js} +11 -11
- package/{settingSlice-OEJA4NQO.js → settingSlice-ZQZVUPKK.js} +10 -10
- package/{spaceCommands-FNXBNF5X.js → spaceCommands-NKJVJCQQ.js} +30 -29
- package/{streamAgentChatTurn-DAGDJH3L.js → streamAgentChatTurn-A46QFV4O.js} +59 -58
- package/{switchDialogAgentAction-HMDZTZ4I.js → switchDialogAgentAction-N52LRPA3.js} +8 -8
- package/{tableCommands-SUNTHAYX.js → tableCommands-O6NWHFKV.js} +1 -1
- package/{toolApiClient-VGYUB4P5.js → toolApiClient-QVJ6HDNN.js} +2 -2
- package/{tools-73VPBNX3.js → tools-TTDGRNY6.js} +43 -43
- package/tuiSummaryLlmCaller-WFRWERGK.js +127 -0
- package/{updateCommands-Y363MC3L.js → updateCommands-2M74UL7P.js} +2 -2
- package/{updateDialogTitleAction-RFQONESQ.js → updateDialogTitleAction-QJPZGF52.js} +45 -28
- package/agentRecordCommands-DAZ2FDZP.js +0 -125
- package/chunk-I42VC5KR.js +0 -15
- package/chunk-NB5SIWC4.js +0 -611
- package/chunk-NG4UT4K4.js +0 -79
- package/codingSkills-7S6523WH.js +0 -48
- package/tuiSummaryLlmCaller-3Z24VUWM.js +0 -116
- package/{chunk-3RAG2NAD.js → chunk-UKWGR5SS.js} +3 -3
- package/{db-VQSAOWAO.js → db-WK5MDZVN.js} +1 -1
- package/{localRuntimeAuthority-R5UBODT3.js → localRuntimeAuthority-6IR6BBXE.js} +3 -3
|
@@ -1,58 +1,54 @@
|
|
|
1
1
|
import {
|
|
2
2
|
addContentToSpace
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ORYWEJO4.js";
|
|
4
4
|
import {
|
|
5
5
|
prepareAndPersistMessage,
|
|
6
6
|
uiAskChoiceFunc,
|
|
7
7
|
uiAskChoiceFunctionSchema
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-QVKRR2SS.js";
|
|
9
9
|
import {
|
|
10
10
|
require_date_fns
|
|
11
11
|
} from "./chunk-M76ECQRD.js";
|
|
12
12
|
import {
|
|
13
|
-
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import {
|
|
16
|
-
buildSkillDocMarkdown
|
|
17
|
-
} from "./chunk-AETZ7AD6.js";
|
|
13
|
+
buildBuiltinObjectSkillReference
|
|
14
|
+
} from "./chunk-DHDMC6FO.js";
|
|
18
15
|
import {
|
|
19
16
|
PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
|
|
20
17
|
PLATFORM_HOSTED_KIMI_PROVIDER
|
|
21
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-Q67DOFOO.js";
|
|
22
19
|
import {
|
|
23
20
|
read,
|
|
24
21
|
readAndWait,
|
|
25
22
|
removeCachedEntity,
|
|
26
23
|
upsertSSREntity,
|
|
27
24
|
write
|
|
28
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-H62HCIUP.js";
|
|
29
26
|
import {
|
|
30
27
|
createAgentKey,
|
|
31
28
|
createDialogKey,
|
|
32
|
-
createKey,
|
|
33
29
|
createMemoryKey,
|
|
34
30
|
dialogMessageRange,
|
|
35
31
|
memoryOwnerRange,
|
|
36
32
|
memorySubjectKindRange
|
|
37
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-VMFTFOWF.js";
|
|
38
34
|
import {
|
|
39
35
|
extractCustomId
|
|
40
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-M2EJHDJP.js";
|
|
41
37
|
import {
|
|
42
38
|
isDevelopment
|
|
43
39
|
} from "./chunk-QOKAKDPE.js";
|
|
44
40
|
import {
|
|
45
41
|
selectIdentityUserId
|
|
46
42
|
} from "./chunk-SEJ5OS6F.js";
|
|
43
|
+
import {
|
|
44
|
+
isRecord
|
|
45
|
+
} from "./chunk-KUG52IAP.js";
|
|
47
46
|
import {
|
|
48
47
|
asTrimmedString
|
|
49
48
|
} from "./chunk-3EUW3WEO.js";
|
|
50
49
|
import {
|
|
51
50
|
asOptionalPositiveFiniteNumber
|
|
52
51
|
} from "./chunk-U6VC4MU4.js";
|
|
53
|
-
import {
|
|
54
|
-
isRecord
|
|
55
|
-
} from "./chunk-KUG52IAP.js";
|
|
56
52
|
import {
|
|
57
53
|
asOptionalTrimmedString
|
|
58
54
|
} from "./chunk-G3SUCT4W.js";
|
|
@@ -63,160 +59,6 @@ import {
|
|
|
63
59
|
// packages/chat/dialog/actions/createDialogAction.ts
|
|
64
60
|
var import_date_fns = __toESM(require_date_fns());
|
|
65
61
|
|
|
66
|
-
// packages/ai/skills/builtinObjectSkills.ts
|
|
67
|
-
var BUILTIN_OBJECT_SKILL_IDS = {
|
|
68
|
-
table: "builtin-table-skill-v1",
|
|
69
|
-
doc: "builtin-doc-skill-v1",
|
|
70
|
-
// key 改名为 code-style(它本来就叫「编码风格技能」,"code" 这个名字是它抢的,
|
|
71
|
-
// 与「代码执行」能力包撞车)。**id 值保持不变**——skillId 与页面 key 都从它派生,
|
|
72
|
-
// 改了会让存量 agent.references 失配。
|
|
73
|
-
"code-style": "builtin-code-skill-v1",
|
|
74
|
-
image: "builtin-image-skill-v1",
|
|
75
|
-
file: "builtin-file-skill-v1",
|
|
76
|
-
pagebuilder: "builtin-pagebuilder-skill-v1"
|
|
77
|
-
};
|
|
78
|
-
var SKILL_DEFS = {
|
|
79
|
-
doc: {
|
|
80
|
-
id: BUILTIN_OBJECT_SKILL_IDS.doc,
|
|
81
|
-
name: "\u6587\u6863\u7F16\u8F91\u6280\u80FD",
|
|
82
|
-
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",
|
|
83
|
-
toolNames: ["readDoc", "updateDoc"],
|
|
84
|
-
promptPatch: [
|
|
85
|
-
"\u6587\u6863\u7F16\u8F91\u6307\u5357\uFF1A",
|
|
86
|
-
"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",
|
|
87
|
-
"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"
|
|
88
|
-
].join("\n")
|
|
89
|
-
},
|
|
90
|
-
table: {
|
|
91
|
-
id: BUILTIN_OBJECT_SKILL_IDS.table,
|
|
92
|
-
name: "\u8868\u683C\u7F16\u8F91\u6280\u80FD",
|
|
93
|
-
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",
|
|
94
|
-
// 与 app-builder 能力包共用同一份清单(TOOL_PACKS.TABLE)。
|
|
95
|
-
// 以前两边各抄一份,改一个忘另一个就会静默不同步。
|
|
96
|
-
toolNames: [...TOOL_PACKS.TABLE],
|
|
97
|
-
promptPatch: [
|
|
98
|
-
"\u8868\u683C\u64CD\u4F5C\u6307\u5357\uFF1A",
|
|
99
|
-
"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",
|
|
100
|
-
"2. \u65B0\u589E\u8BB0\u5F55\u5FC5\u987B\u8C03\u7528 addTableRow / addTableRows\uFF0C\u4E0D\u8981\u53EA\u5728\u56DE\u7B54\u91CC\u53E3\u5934\u63CF\u8FF0\u3002",
|
|
101
|
-
"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",
|
|
102
|
-
"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"
|
|
103
|
-
].join("\n")
|
|
104
|
-
},
|
|
105
|
-
"code-style": {
|
|
106
|
-
id: BUILTIN_OBJECT_SKILL_IDS["code-style"],
|
|
107
|
-
name: "\u7F16\u7801\u98CE\u683C\u6280\u80FD",
|
|
108
|
-
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",
|
|
109
|
-
toolNames: [],
|
|
110
|
-
promptPatch: [
|
|
111
|
-
"\u7F16\u7801\u98CE\u683C\u4E0E\u89C4\u8303\u6307\u5357\uFF1A",
|
|
112
|
-
"1. \u6587\u4EF6\u62C6\u5206\uFF1A\u4F18\u5148\u62C6\u5206\u4E3A\u591A\u6587\u4EF6\uFF08MANY SMALL FILES\uFF09\uFF0C\u5178\u578B\u957F\u5EA6 200-400 \u884C\uFF0C\u5355\u6587\u4EF6\u6700\u591A 800 \u884C\uFF08800 max\uFF09\u3002",
|
|
113
|
-
"2. \u51FD\u6570\u4E0E\u5D4C\u5957\uFF1A\u51FD\u6570\u4FDD\u6301\u77ED\u5C0F\uFF08<50 lines\uFF09\uFF0C\u4F18\u5148\u4F7F\u7528 early returns \u63D0\u524D\u8FD4\u56DE\uFF0C\u5D4C\u5957\u5C42\u7EA7\u4E0D\u8D85\u8FC7 4 \u5C42\uFF08nesting \u22644\uFF09\u3002",
|
|
114
|
-
"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",
|
|
115
|
-
"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",
|
|
116
|
-
"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"
|
|
117
|
-
].join("\n")
|
|
118
|
-
},
|
|
119
|
-
image: {
|
|
120
|
-
id: BUILTIN_OBJECT_SKILL_IDS.image,
|
|
121
|
-
name: "\u56FE\u7247\u5206\u6790\u6280\u80FD",
|
|
122
|
-
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",
|
|
123
|
-
toolNames: [],
|
|
124
|
-
promptPatch: [
|
|
125
|
-
"\u56FE\u7247\u5206\u6790\u6307\u5357\uFF1A",
|
|
126
|
-
"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",
|
|
127
|
-
"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"
|
|
128
|
-
].join("\n")
|
|
129
|
-
},
|
|
130
|
-
file: {
|
|
131
|
-
id: BUILTIN_OBJECT_SKILL_IDS.file,
|
|
132
|
-
name: "\u6587\u4EF6\u5904\u7406\u6280\u80FD",
|
|
133
|
-
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",
|
|
134
|
-
toolNames: [],
|
|
135
|
-
promptPatch: [
|
|
136
|
-
"\u6587\u4EF6\u5904\u7406\u6307\u5357\uFF1A",
|
|
137
|
-
"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",
|
|
138
|
-
"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"
|
|
139
|
-
].join("\n")
|
|
140
|
-
},
|
|
141
|
-
pagebuilder: {
|
|
142
|
-
id: BUILTIN_OBJECT_SKILL_IDS.pagebuilder,
|
|
143
|
-
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\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
|
-
toolNames: [],
|
|
146
|
-
promptPatch: [
|
|
147
|
-
"\u52A8\u6001\u4EA4\u4E92\u7EC4\u4EF6\u751F\u6210\u89C4\u5219\uFF1A",
|
|
148
|
-
"\u4F60\u73B0\u5728\u7684\u4EFB\u52A1\u662F\u628A\u7528\u6237\u9700\u6C42\u53D8\u6210\u4E00\u4E2A\u53EF\u770B\u7684\u4EA4\u4E92\u9875\u9762/\u62A5\u544A/\u770B\u677F/\u4E3B\u9875/\u6559\u7A0B/\u5BF9\u6BD4\u9875/\u8BA1\u5212\u9875\u3002\u7528\u6237\u770B\u4E0D\u5230\u6E90\u7801\uFF0C\u53EA\u4F1A\u770B\u5230\u9875\u9762\u7ED3\u679C\u3002",
|
|
149
|
-
"",
|
|
150
|
-
"\u7EDD\u5BF9\u89C4\u5219\uFF1A",
|
|
151
|
-
"1. \u53EA\u8F93\u51FA\u4E00\u4E2A Markdown \u4EE3\u7801\u5757\uFF0C\u4EE3\u7801\u5757\u8BED\u8A00\u5FC5\u987B\u662F tsx preview\u3002",
|
|
152
|
-
"2. \u4EE3\u7801\u5757\u5916\u4E0D\u8981\u8F93\u51FA\u89E3\u91CA\u3001\u524D\u8A00\u3001\u7ED3\u5C3E\u3001\u6E05\u5355\u6216\u601D\u8003\u8FC7\u7A0B\u3002",
|
|
153
|
-
"3. \u4EE3\u7801\u5FC5\u987B\u5B9A\u4E49\u9876\u5C42 function Example()\uFF0C\u4E0D\u8981\u8C03\u7528 render()\uFF0C\u4E0D\u8981 export default\u3002",
|
|
154
|
-
"4. \u4E0D\u8981\u5199 import\u3002\u8FD0\u884C\u73AF\u5883\u5DF2\u7ECF\u63D0\u4F9B React\u3001useState\u3001useEffect\u3001useMemo\u3001useCallback\u3001useRef\u3001ReactECharts\u3001react-icons/lu \u7684\u56FE\u6807\u7EC4\u4EF6\u3002",
|
|
155
|
-
"5. \u6240\u6709\u4EA4\u4E92\u5FC5\u987B\u5728 Example \u5185\u7528 React state \u5B9E\u73B0\uFF0C\u6309\u94AE\u3001Tab\u3001FAQ\u3001\u6B65\u9AA4\u5207\u6362\u3001\u7B5B\u9009\u90FD\u8981\u771F\u7684\u53EF\u70B9\u51FB\u3002",
|
|
156
|
-
"6. \u4E3A\u4E3B\u8981\u533A\u5757\u52A0 data-artifact-section \u5C5E\u6027\u3002",
|
|
157
|
-
"7. \u751F\u6210\u7ED3\u679C\u4F18\u5148\u662F\u4E00\u9875\u5B8C\u6574\u53EF\u7528\u7684\u9875\u9762\uFF0C\u4E0D\u8981\u53EA\u505A\u5B64\u7ACB\u5361\u7247\u6216\u4E00\u4E2A\u56FE\u3002",
|
|
158
|
-
"8. \u5982\u679C\u7528\u6237\u6CA1\u6709\u7ED9\u5177\u4F53\u6570\u636E\uFF0C\u53EF\u4EE5\u751F\u6210\u5408\u7406\u7684\u793A\u4F8B\u6570\u636E\uFF0C\u4F46\u8981\u4FDD\u6301\u4E1A\u52A1\u53EF\u4FE1\u3002",
|
|
159
|
-
"",
|
|
160
|
-
"\u5404\u7C7B\u9875\u9762\u9ED8\u8BA4\u7ED3\u6784\uFF1A",
|
|
161
|
-
"- \u4FE1\u606F\u5C55\u793A\u7C7B\uFF08\u4E3B\u9875\u3001\u4EA7\u54C1\u4ECB\u7ECD\u3001\u670D\u52A1\u9875\u3001\u4F5C\u54C1\u96C6\u3001\u6D3B\u52A8\u9875\uFF09\uFF1A\u9996\u5C4F\u5B9A\u4F4D\u3001\u670D\u52A1/\u80FD\u529B\u5361\u7247\u3001\u4EE3\u8868\u6210\u679C\u5361\u7247\u3001\u53EF\u4FE1\u80CC\u4E66\u3001\u8054\u7CFB\u6216\u884C\u52A8\u6309\u94AE\u3002",
|
|
162
|
-
"- \u6570\u636E\u5206\u6790\u7C7B\uFF08\u65E5\u62A5\u3001\u5468\u62A5\u3001\u770B\u677F\u3001\u8D28\u68C0\u3001\u9500\u552E\u6F0F\u6597\u3001\u53CD\u9988\u5206\u6790\uFF09\uFF1A\u9876\u90E8\u6458\u8981\u3001\u6838\u5FC3\u6307\u6807\u3001\u8D8B\u52BF\u56FE\u3001\u660E\u7EC6\u8868\u683C\u6216\u5F02\u5E38\u5217\u8868\u3001\u4E0B\u4E00\u6B65\u5EFA\u8BAE\u3002",
|
|
163
|
-
"- \u6D41\u7A0B\u8BF4\u660E\u7C7B\uFF08\u6559\u7A0B\u3001SOP\u3001onboarding\u3001\u64CD\u4F5C\u6307\u5357\u3001\u8BFE\u7A0B\u6B65\u9AA4\uFF09\uFF1A\u5B66\u4E60\u76EE\u6807\u3001\u6B65\u9AA4\u5361\u7247\u3001\u793A\u4F8B/\u7EC3\u4E60\u3001\u68C0\u67E5\u6E05\u5355\u6216\u4E0B\u4E00\u6B65\u6309\u94AE\u3002",
|
|
164
|
-
"- \u51B3\u7B56\u6BD4\u8F83\u7C7B\uFF08\u65B9\u6848\u5BF9\u6BD4\u3001\u4EA7\u54C1\u9009\u578B\u3001\u7ADE\u54C1\u5206\u6790\u3001\u91C7\u8D2D\u5EFA\u8BAE\uFF09\uFF1A\u5BF9\u6BD4\u7EF4\u5EA6\u8868\u683C\u3001\u4F18\u7F3A\u70B9\u5361\u7247\u3001\u8BC4\u5206\u6216\u9002\u914D\u5EA6\u3001\u63A8\u8350\u7ED3\u8BBA\u3002",
|
|
165
|
-
"- \u8BA1\u5212\u6392\u5E03\u7C7B\uFF08\u9879\u76EE\u8BA1\u5212\u3001\u5B66\u4E60\u8BA1\u5212\u3001\u5185\u5BB9\u65E5\u5386\u3001\u53D1\u5E03\u8282\u594F\uFF09\uFF1A\u9636\u6BB5\u76EE\u6807\u3001\u4EFB\u52A1\u5217\u8868\u3001\u4F18\u5148\u7EA7\u3001\u91CC\u7A0B\u7891\u5361\u7247\u3001\u98CE\u9669\u63D0\u9192\u3002",
|
|
166
|
-
"- \u6DF7\u5408\u6C47\u62A5\u7C7B\uFF08\u878D\u8D44\u9875\u3001\u9879\u76EE\u6982\u89C8\u3001\u590D\u6742\u6C47\u62A5\uFF09\uFF1A\u81F3\u5C11\u5305\u542B MetricCard\u3001Chart\u3001Table \u548C Section\uFF0C\u4E0D\u8981\u53EA\u505A\u5355\u4E00\u5217\u8868\u3002",
|
|
167
|
-
"- \u6559\u7A0B/\u6B65\u9AA4/FAQ/Tab/\u7B5B\u9009/\u9875\u9762\u5185\u8DF3\u8F6C\u5FC5\u987B\u505A\u6210\u771F\u5B9E\u53EF\u70B9\u51FB\u4EA4\u4E92\u3002",
|
|
168
|
-
"",
|
|
169
|
-
"\u4EE3\u7801\u98CE\u683C\uFF1A",
|
|
170
|
-
"1. \u4F7F\u7528\u5185\u8054 style \u6216\u7EC4\u4EF6\u5185 <style>\uFF0C\u4E0D\u8981\u4F9D\u8D56 Tailwind \u6216\u5916\u90E8 CSS\u3002",
|
|
171
|
-
"2. \u9875\u9762\u5BBD\u5EA6\u3001\u95F4\u8DDD\u3001\u5B57\u53F7\u8981\u9002\u5408\u6D88\u606F\u5185\u9884\u89C8\uFF1B\u4E0D\u8981\u7528\u8FC7\u5927\u7684\u843D\u5730\u9875 hero\u3002",
|
|
172
|
-
"3. \u989C\u8272\u8981\u514B\u5236\uFF0C\u6709\u5C42\u6B21\uFF1B\u907F\u514D\u6574\u9875\u5355\u4E00\u84DD\u7D2B\u6E10\u53D8\u3002",
|
|
173
|
-
"4. \u8868\u683C\u3001\u56FE\u8868\u3001\u5361\u7247\u3001\u6309\u94AE\u90FD\u8981\u6709 hover/active/focus \u7684\u7EC6\u8282\u3002",
|
|
174
|
-
"5. \u5FC5\u8981\u65F6\u4F7F\u7528 ReactECharts \u753B\u56FE\uFF1B\u7B80\u5355\u67F1\u72B6\u56FE\u4E5F\u53EF\u4EE5\u7528 div \u5B9E\u73B0\uFF0C\u4FDD\u8BC1\u7A33\u5B9A\u3002",
|
|
175
|
-
"6. \u4EE3\u7801\u5C3D\u91CF\u77ED\u800C\u5B8C\u6574\uFF0C\u9ED8\u8BA4 150-260 \u884C\u4EE5\u5185\u3002",
|
|
176
|
-
"",
|
|
177
|
-
"\u8F93\u51FA\u683C\u5F0F\u793A\u4F8B\uFF1A",
|
|
178
|
-
"```tsx preview",
|
|
179
|
-
"function Example() {",
|
|
180
|
-
" const [tab, setTab] = useState('overview');",
|
|
181
|
-
" return <main><section data-artifact-section>...</section></main>;",
|
|
182
|
-
"}",
|
|
183
|
-
"```"
|
|
184
|
-
].join("\n")
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
function buildBuiltinObjectSkillConfig(kind) {
|
|
188
|
-
const def = SKILL_DEFS[kind];
|
|
189
|
-
return {
|
|
190
|
-
version: "0.1",
|
|
191
|
-
kind: "skill",
|
|
192
|
-
id: def.id,
|
|
193
|
-
name: def.name,
|
|
194
|
-
description: def.description,
|
|
195
|
-
triggerMode: "explicit",
|
|
196
|
-
toolNames: def.toolNames,
|
|
197
|
-
promptPatch: def.promptPatch
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
function buildBuiltinObjectSkillDbKey(kind, userId) {
|
|
201
|
-
return createKey("page" /* DOC */, userId, BUILTIN_OBJECT_SKILL_IDS[kind]);
|
|
202
|
-
}
|
|
203
|
-
function buildBuiltinObjectSkillReference(kind, userId) {
|
|
204
|
-
return {
|
|
205
|
-
dbKey: buildBuiltinObjectSkillDbKey(kind, userId),
|
|
206
|
-
title: SKILL_DEFS[kind].name,
|
|
207
|
-
type: "instruction"
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
function buildBuiltinObjectSkillPageContent(kind) {
|
|
211
|
-
const def = SKILL_DEFS[kind];
|
|
212
|
-
return buildSkillDocMarkdown({
|
|
213
|
-
body: `# ${def.name}
|
|
214
|
-
|
|
215
|
-
${def.description}`,
|
|
216
|
-
skillConfig: buildBuiltinObjectSkillConfig(kind)
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
|
|
220
62
|
// packages/chat/dialog/objectAssistantRegistry.ts
|
|
221
63
|
var OBJECT_ASSISTANT_TO_SKILL = {
|
|
222
64
|
page: "doc",
|
|
@@ -1141,10 +983,6 @@ var createDialogAction = async (args, thunkApi) => {
|
|
|
1141
983
|
};
|
|
1142
984
|
|
|
1143
985
|
export {
|
|
1144
|
-
BUILTIN_OBJECT_SKILL_IDS,
|
|
1145
|
-
buildBuiltinObjectSkillConfig,
|
|
1146
|
-
buildBuiltinObjectSkillDbKey,
|
|
1147
|
-
buildBuiltinObjectSkillPageContent,
|
|
1148
986
|
resolveAgentMemoryPolicy,
|
|
1149
987
|
buildMemorySubjectsForAgent,
|
|
1150
988
|
chooseMemoryOwners,
|
|
@@ -3,21 +3,21 @@ import {
|
|
|
3
3
|
} from "./chunk-YYLHWIW6.js";
|
|
4
4
|
import {
|
|
5
5
|
compareAgentSelection
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IIVGDG4I.js";
|
|
7
7
|
import {
|
|
8
8
|
isAntigravityOAuthAgent
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UZGQNTVW.js";
|
|
10
10
|
import {
|
|
11
11
|
getModelAbility
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ACTMNVHM.js";
|
|
13
13
|
import {
|
|
14
14
|
isOwnedAgentKey,
|
|
15
15
|
ownedAgentKey,
|
|
16
16
|
publicAgentKey
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-M2EJHDJP.js";
|
|
18
18
|
import {
|
|
19
19
|
fnv1a32Hex
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-UKWGR5SS.js";
|
|
21
21
|
|
|
22
22
|
// packages/ai/agent/agentBilling.ts
|
|
23
23
|
function resolveBillingSource(candidate) {
|
|
@@ -420,6 +420,9 @@ function toSafeAgentSummary(record, options) {
|
|
|
420
420
|
...nextAvailableAt !== void 0 ? { nextAvailableAt } : {},
|
|
421
421
|
...credentialGroup !== void 0 ? { credentialGroup } : {},
|
|
422
422
|
...credentialKind !== void 0 ? { credentialKind } : {},
|
|
423
|
+
// 「未知 ≠ 独立」:无 credentialGroup 时显式 credentialed:false,调用方
|
|
424
|
+
// 不得把缺失解读成独立凭证(并发扇出守卫依赖这个区分)。
|
|
425
|
+
credentialed: credentialGroup !== void 0,
|
|
423
426
|
updatedAt
|
|
424
427
|
};
|
|
425
428
|
}
|
|
@@ -446,7 +449,8 @@ var COMPACT_AGENT_SUMMARY_FIELDS = [
|
|
|
446
449
|
// 所以通常根本不占字节。
|
|
447
450
|
"nextAvailableAt",
|
|
448
451
|
"credentialGroup",
|
|
449
|
-
"credentialKind"
|
|
452
|
+
"credentialKind",
|
|
453
|
+
"credentialed"
|
|
450
454
|
];
|
|
451
455
|
function omitNullishAgentSummaryFields(summary) {
|
|
452
456
|
const result = {};
|
|
@@ -6,19 +6,146 @@ import {
|
|
|
6
6
|
} from "./chunk-KUG52IAP.js";
|
|
7
7
|
|
|
8
8
|
// packages/desktop-chrome-connector/chromeConnector.ts
|
|
9
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
10
|
-
import { resolve } from "node:path";
|
|
9
|
+
import { existsSync as existsSync2, readFileSync } from "node:fs";
|
|
10
|
+
import { resolve as resolve2 } from "node:path";
|
|
11
|
+
|
|
12
|
+
// packages/desktop-chrome-connector/uploadSecurity.mjs
|
|
13
|
+
import { existsSync, realpathSync, statSync } from "node:fs";
|
|
14
|
+
import { isAbsolute, relative, resolve } from "node:path";
|
|
15
|
+
var DEFAULT_MAX_FILE_BYTES = 25 * 1024 * 1024;
|
|
16
|
+
var DEFAULT_MAX_FILES = 10;
|
|
17
|
+
var UploadSecurityError = class extends Error {
|
|
18
|
+
constructor(code, message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = "UploadSecurityError";
|
|
21
|
+
this.code = code;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
function createUploadSecurityError(code, message) {
|
|
25
|
+
return new UploadSecurityError(code, message);
|
|
26
|
+
}
|
|
27
|
+
function isSubpath(parent, child) {
|
|
28
|
+
const rel = relative(parent, child);
|
|
29
|
+
return !rel.startsWith("..") && !isAbsolute(rel);
|
|
30
|
+
}
|
|
31
|
+
function parseAllowedRoots(env = process.env) {
|
|
32
|
+
const raw = env?.NOLO_CHROME_UPLOAD_ROOTS;
|
|
33
|
+
if (!raw || typeof raw !== "string") {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
return raw.split(",").map((entry) => entry.trim()).filter(Boolean).filter((entry) => isAbsolute(entry)).map((entry) => {
|
|
37
|
+
const resolved = resolve(entry);
|
|
38
|
+
if (existsSync(resolved)) {
|
|
39
|
+
try {
|
|
40
|
+
return realpathSync(resolved);
|
|
41
|
+
} catch {
|
|
42
|
+
return resolved;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return resolved;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function validateUploadFiles(options = {}) {
|
|
49
|
+
const {
|
|
50
|
+
files,
|
|
51
|
+
env = process.env,
|
|
52
|
+
maxFiles = DEFAULT_MAX_FILES,
|
|
53
|
+
maxFileBytes = DEFAULT_MAX_FILE_BYTES
|
|
54
|
+
} = options;
|
|
55
|
+
if (!Array.isArray(files) || files.length === 0) {
|
|
56
|
+
throw createUploadSecurityError("no_files", "Provide at least one file to upload.");
|
|
57
|
+
}
|
|
58
|
+
if (files.length > maxFiles) {
|
|
59
|
+
throw createUploadSecurityError(
|
|
60
|
+
"too_many_files",
|
|
61
|
+
`Too many files: ${files.length} provided, maximum allowed is ${maxFiles}.`
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
const allowedRoots = parseAllowedRoots(env);
|
|
65
|
+
if (allowedRoots.length === 0) {
|
|
66
|
+
throw createUploadSecurityError(
|
|
67
|
+
"path_not_allowed",
|
|
68
|
+
"Upload roots not configured in NOLO_CHROME_UPLOAD_ROOTS; all uploads are refused."
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
const fileStats = [];
|
|
72
|
+
const canonicalFiles = [];
|
|
73
|
+
let totalBytes = 0;
|
|
74
|
+
for (const rawFile of files) {
|
|
75
|
+
if (typeof rawFile !== "string" || !rawFile.trim()) {
|
|
76
|
+
throw createUploadSecurityError("path_not_allowed", "File path must be a non-empty string.");
|
|
77
|
+
}
|
|
78
|
+
const trimmed = rawFile.trim();
|
|
79
|
+
const resolvedCandidate = resolve(trimmed);
|
|
80
|
+
if (!existsSync(resolvedCandidate)) {
|
|
81
|
+
throw createUploadSecurityError("path_not_allowed", `File not found or inaccessible: ${rawFile}`);
|
|
82
|
+
}
|
|
83
|
+
let real;
|
|
84
|
+
try {
|
|
85
|
+
real = realpathSync(resolvedCandidate);
|
|
86
|
+
} catch {
|
|
87
|
+
throw createUploadSecurityError("path_not_allowed", `Could not resolve canonical path for: ${rawFile}`);
|
|
88
|
+
}
|
|
89
|
+
let st;
|
|
90
|
+
try {
|
|
91
|
+
st = statSync(real);
|
|
92
|
+
} catch {
|
|
93
|
+
throw createUploadSecurityError("path_not_allowed", `Could not stat file: ${rawFile}`);
|
|
94
|
+
}
|
|
95
|
+
if (!st.isFile()) {
|
|
96
|
+
throw createUploadSecurityError("path_not_allowed", `Target path is not a regular file: ${rawFile}`);
|
|
97
|
+
}
|
|
98
|
+
if (st.size > maxFileBytes) {
|
|
99
|
+
throw createUploadSecurityError(
|
|
100
|
+
"too_large",
|
|
101
|
+
`File size ${st.size} bytes exceeds maximum allowed limit of ${maxFileBytes} bytes: ${rawFile}`
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
const realInside = allowedRoots.some((root) => isSubpath(root, real));
|
|
105
|
+
if (!realInside) {
|
|
106
|
+
throw createUploadSecurityError(
|
|
107
|
+
"path_not_allowed",
|
|
108
|
+
`Path '${rawFile}' (resolved: '${real}') is not within allowed upload roots.`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
canonicalFiles.push(real);
|
|
112
|
+
fileStats.push({ path: real, bytes: st.size });
|
|
113
|
+
totalBytes += st.size;
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
ok: true,
|
|
117
|
+
files: canonicalFiles,
|
|
118
|
+
fileStats,
|
|
119
|
+
totalBytes
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function formatUploadAuditLog(entry = {}) {
|
|
123
|
+
const ts = entry.timestamp || (/* @__PURE__ */ new Date()).toISOString();
|
|
124
|
+
const safeTabId = String(entry.tabId ?? "").replace(/[\x00-\x1f\x7f-\x9f]+/g, " ");
|
|
125
|
+
const safeTarget = String(entry.target ?? "").replace(/[\x00-\x1f\x7f-\x9f]+/g, " ");
|
|
126
|
+
const files = Array.isArray(entry.files) ? entry.files : [];
|
|
127
|
+
const totalBytes = files.reduce((sum, f) => sum + (Number(f.bytes) || 0), 0);
|
|
128
|
+
const fileDetails = files.map((f) => `${String(f.path || "").replace(/[\x00-\x1f\x7f-\x9f]+/g, " ")}(${f.bytes || 0}B)`).join(", ");
|
|
129
|
+
return `[chrome-upload] ${ts} tabId=${safeTabId} target=${safeTarget} files=[${fileDetails}] totalBytes=${totalBytes}`;
|
|
130
|
+
}
|
|
131
|
+
function logUploadAudit(entry, logFn = console.warn) {
|
|
132
|
+
const line = formatUploadAuditLog(entry);
|
|
133
|
+
logFn(line);
|
|
134
|
+
return line;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// packages/desktop-chrome-connector/chromeConnector.ts
|
|
11
138
|
var NOLO_CHROME_CONNECTOR_EXTENSION_ID = "ahpdoopadkamnglhlacfjdfnonpjdplg";
|
|
12
139
|
var NOLO_CHROME_CONNECTOR_PROTOCOL_VERSION = "2";
|
|
13
140
|
function defaultTokenPath() {
|
|
14
|
-
return
|
|
141
|
+
return resolve2(
|
|
15
142
|
process.env.HOME || "",
|
|
16
143
|
"Library/Application Support/Nolo/ChromeConnector/token"
|
|
17
144
|
);
|
|
18
145
|
}
|
|
19
146
|
function readConnectorToken(tokenPath = defaultTokenPath()) {
|
|
20
147
|
if (process.env.NOLO_CHROME_CONNECTOR_TOKEN) return process.env.NOLO_CHROME_CONNECTOR_TOKEN;
|
|
21
|
-
if (!
|
|
148
|
+
if (!existsSync2(tokenPath)) return "";
|
|
22
149
|
return readFileSync(tokenPath, "utf8").trim();
|
|
23
150
|
}
|
|
24
151
|
var CHROME_TOOL_ACTIONS = {
|
|
@@ -32,7 +159,10 @@ var CHROME_TOOL_ACTIONS = {
|
|
|
32
159
|
chrome_scroll: "scroll",
|
|
33
160
|
chrome_screenshot: "screenshot",
|
|
34
161
|
chrome_read_console: "read_console",
|
|
35
|
-
chrome_read_network: "read_network"
|
|
162
|
+
chrome_read_network: "read_network",
|
|
163
|
+
chrome_set_files: "set_files",
|
|
164
|
+
chrome_upload_file: "set_files",
|
|
165
|
+
chrome_upload: "set_files"
|
|
36
166
|
};
|
|
37
167
|
function createConnectorError(code, message, details) {
|
|
38
168
|
const error = new Error(message);
|
|
@@ -59,8 +189,8 @@ function errorPayload(error) {
|
|
|
59
189
|
...error?.details !== void 0 ? { details: error.details } : {}
|
|
60
190
|
};
|
|
61
191
|
}
|
|
62
|
-
var TARGET_REQUIRED_ACTIONS = /* @__PURE__ */ new Set(["click", "type"]);
|
|
63
|
-
var TAB_ID_REQUIRED_ACTIONS = /* @__PURE__ */ new Set(["close_tab", "detach"]);
|
|
192
|
+
var TARGET_REQUIRED_ACTIONS = /* @__PURE__ */ new Set(["click", "type", "set_files"]);
|
|
193
|
+
var TAB_ID_REQUIRED_ACTIONS = /* @__PURE__ */ new Set(["close_tab", "detach", "set_files"]);
|
|
64
194
|
function validateChromeConnectorPayload(action, payload) {
|
|
65
195
|
if (TAB_ID_REQUIRED_ACTIONS.has(action)) {
|
|
66
196
|
const raw = payload.tabId;
|
|
@@ -71,16 +201,42 @@ function validateChromeConnectorPayload(action, payload) {
|
|
|
71
201
|
`Provide the tabId from chrome_list_tabs before calling ${action}.`
|
|
72
202
|
);
|
|
73
203
|
}
|
|
74
|
-
return;
|
|
204
|
+
if (!TARGET_REQUIRED_ACTIONS.has(action)) return;
|
|
75
205
|
}
|
|
76
206
|
if (!TARGET_REQUIRED_ACTIONS.has(action)) return;
|
|
77
|
-
const
|
|
207
|
+
const rawRef = typeof payload.elementRef === "string" ? payload.elementRef : typeof payload.ref === "string" ? payload.ref : "";
|
|
208
|
+
const elementRef = rawRef.trim();
|
|
78
209
|
const selector = typeof payload.selector === "string" ? payload.selector.trim() : "";
|
|
79
|
-
if (elementRef
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
210
|
+
if (!elementRef && !selector) {
|
|
211
|
+
throw createConnectorError(
|
|
212
|
+
"ELEMENT_TARGET_REQUIRED",
|
|
213
|
+
"Provide elementRef from chrome_read_page or a CSS selector."
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
if (action === "set_files") {
|
|
217
|
+
if (!Array.isArray(payload.files) || payload.files.length === 0) {
|
|
218
|
+
throw createConnectorError(
|
|
219
|
+
"no_files",
|
|
220
|
+
"Provide at least one file path in files array."
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
const validated = validateUploadFiles({
|
|
225
|
+
files: payload.files,
|
|
226
|
+
env: process.env
|
|
227
|
+
});
|
|
228
|
+
payload.files = validated.files;
|
|
229
|
+
const targetStr = elementRef ? `ref:${elementRef}` : `selector:${selector}`;
|
|
230
|
+
logUploadAudit({
|
|
231
|
+
tabId: String(payload.tabId),
|
|
232
|
+
target: targetStr,
|
|
233
|
+
files: validated.fileStats
|
|
234
|
+
});
|
|
235
|
+
} catch (err) {
|
|
236
|
+
const code = err?.code ?? "path_not_allowed";
|
|
237
|
+
throw createConnectorError(code, toErrorMessage(err));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
84
240
|
}
|
|
85
241
|
function createChromeConnectorClient(args) {
|
|
86
242
|
if (args?.request) return { request: args.request };
|
|
@@ -90,6 +246,7 @@ function createChromeConnectorClient(args) {
|
|
|
90
246
|
const token = args?.token ?? readConnectorToken(args?.tokenPath);
|
|
91
247
|
return {
|
|
92
248
|
async request(action, payload) {
|
|
249
|
+
validateChromeConnectorPayload(action, payload);
|
|
93
250
|
let response;
|
|
94
251
|
try {
|
|
95
252
|
response = await fetchImpl(endpoint, {
|
|
@@ -131,7 +288,8 @@ var REQUIRED_CHROME_CONNECTOR_FEATURES = {
|
|
|
131
288
|
screenshot: ["browser_debug"],
|
|
132
289
|
read_console: ["browser_debug"],
|
|
133
290
|
read_network: ["browser_debug"],
|
|
134
|
-
detach: ["browser_debug"]
|
|
291
|
+
detach: ["browser_debug"],
|
|
292
|
+
set_files: ["compact_observation_v2", "file_upload"]
|
|
135
293
|
};
|
|
136
294
|
function requiredFeaturesForConnectorAction(action) {
|
|
137
295
|
return [...REQUIRED_CHROME_CONNECTOR_FEATURES[action] ?? []];
|