nolo-cli 0.19.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
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SYSTEM_AGENT_CAPABILITIES,
|
|
3
|
+
SYSTEM_AGENT_CAPABILITY_IDS
|
|
4
|
+
} from "./chunk-UZ6XXCVR.js";
|
|
5
|
+
|
|
6
|
+
// packages/ai/tools/codeWorkDiscipline.ts
|
|
7
|
+
var CODE_WORK_DISCIPLINE_BODY = `## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\uFF09
|
|
8
|
+
- \u4E0D\u590D\u8FF0\u9700\u6C42\uFF0C\u4E0D\u89E3\u91CA\u300C\u6253\u7B97\u600E\u4E48\u505A\u300D\uFF0C\u76F4\u63A5\u52A8\u624B\u3002\u6539\u5B8C\u53EA\u7528\u4E00\u4E24\u53E5\u8BDD\u8BF4\u6E05\u300C\u6539\u4E86\u4EC0\u4E48\u3001\u53BB\u54EA\u770B\u300D\u3002
|
|
9
|
+
- \u601D\u8003\u7B80\u77ED\uFF1A\u5B9A\u4F4D\u95EE\u9898\u5373\u53EF\uFF0C\u4E0D\u505A\u957F\u7BC7\u63A8\u6F14\u3002
|
|
10
|
+
- \u5C0F\u6539\u52A8\u8D70\u6700\u77ED\u8DEF\u5F84\uFF1AsearchFiles/globFiles \u5B9A\u4F4D \u2192 readFile \u786E\u8BA4 \u2192 editFile \u7CBE\u786E\u66FF\u6362\u3002\u80FD\u4E00\u6B21\u547D\u4E2D\u5C31\u4E0D\u8981\u53CD\u590D\u8BFB\u6587\u4EF6\u3002
|
|
11
|
+
- \u5DF2\u7ECF\u77E5\u9053\u6587\u4EF6\u548C\u4F4D\u7F6E\u65F6\uFF0C\u8DF3\u8FC7\u591A\u4F59\u7684 search/read\uFF0C\u76F4\u63A5 edit\u3002
|
|
12
|
+
- \u7981\u6B62\u4E3A\u4E00\u4E2A\u5C0F\u6539\u52A8\u6574\u9875\u91CD\u5199\u6216\u8FDE\u5E26\u6539\u52A8\u672A\u547D\u4E2D\u7684\u90E8\u5206\u3002
|
|
13
|
+
|
|
14
|
+
## \u4EE3\u7801\u4FEE\u6539\u7EAA\u5F8B
|
|
15
|
+
- \u7F16\u8F91\u524D\u5148 readFile \u786E\u8BA4\u5F53\u524D\u5185\u5BB9\uFF0C\u907F\u514D stale hash \u9519\u8BEF\u3002
|
|
16
|
+
- \u53EA\u78B0\u4EFB\u52A1\u4E66\u5217\u51FA\u7684\u6587\u4EF6\uFF1B\u6539\u5B8C\u7528 \`git status --short\` \u81EA\u67E5\uFF0C\u82E5\u6539\u5230\u6E05\u5355\u5916\u6587\u4EF6\uFF0C\u5982\u5B9E\u62A5\u544A\u3002
|
|
17
|
+
- \u4E0D\u8981 \`git add\` / \`git commit\` / \`git push\` / \`git stash\` / \`git reset\` / \`git checkout\` / \`git clean\`\u2014\u2014\u6539\u52A8\u7559\u5728\u5DE5\u4F5C\u533A\uFF0C\u63D0\u4EA4\u7531\u8C03\u7528\u65B9\u9A8C\u6536\u540E\u5904\u7406\u3002\u4ED3\u5E93\u5E38\u6709\u591A\u4E2A\u4F1A\u8BDD\u5171\u7528\u4E00\u4E2A checkout\uFF0C\u4F60\u4E00\u63D0\u4EA4\u5C31\u4F1A\u628A\u522B\u4EBA\u7684\u5728\u9014\u6587\u4EF6\u5377\u8FDB\u6765\u3002
|
|
18
|
+
- \u53EA\u8DD1\u4EFB\u52A1\u91CC\u5217\u51FA\u7684\u6D4B\u8BD5\u6587\u4EF6\uFF0C\u4E0D\u8981\u8DD1 broader \u6D4B\u8BD5\uFF08broaden \u6D4B\u8BD5\u7684\u5931\u8D25\u662F\u9884\u5B58\u7684\uFF0C\u548C\u4F60\u7684\u6539\u52A8\u65E0\u5173\uFF09\u3002
|
|
19
|
+
- **\u5EFA\u8BAE\u6C47\u62A5**\uFF1A\u4EA4\u4ED8\u65F6\u628A\u8FC7\u7A0B\u4E2D\u53D1\u73B0\u7684**\u4EFB\u4F55\u503C\u5F97\u7528\u6237\u77E5\u9053\u7684\u4E8B**\u90FD\u5217\u51FA\u6765\uFF08\u9884\u5B58\u65E0\u5173\u6539\u52A8\u3001\u65E2\u6709\u6D4B\u8BD5\u9694\u79BB\u95EE\u9898\u3001\u6F5C\u5728\u98CE\u9669\u3001\u540E\u7EED\u53EF\u4F18\u5316\u70B9\u3001\u9700\u7528\u6237\u51B3\u7B56\u7684\u4E8B\u9879\uFF09\uFF0C\u4E0D\u8981\u53EA\u62A5\u300C\u505A\u5B8C\u4E86\u300D\u3002
|
|
20
|
+
|
|
21
|
+
## Review \u7EAA\u5F8B\uFF08commit \u524D\u786C\u95E8\uFF09
|
|
22
|
+
- \u9664 \u22642 \u6B65\u96F6\u903B\u8F91\u98CE\u9669\u7684\u673A\u68B0\u6539\u52A8\uFF08\u9519\u522B\u5B57/\u683C\u5F0F/CSS \u5FAE\u8C03\uFF09\u5916\uFF0C\u6240\u6709\u4EE3\u7801\u53D8\u66F4 commit \u524D\u5FC5\u987B\u5148\u6D3E**\u5176\u4ED6 agent**\uFF08\u4E0D\u540C\u6A21\u578B\u5BB6\u65CF\u4F18\u5148\uFF09review \u5DE5\u4F5C\u533A diff\uFF08\`git diff\`\uFF0C\u672A\u63D0\u4EA4\u7684\u6539\u52A8\uFF09\u3002reviewer \u4E0D\u53EF\u662F\u81EA\u5DF1\u3002\u65E0 review \u4E0D commit\u2014\u2014\u8FD9\u662F\u786C\u95E8\uFF0C\u4E0D\u662F\u5EFA\u8BAE\u3002
|
|
23
|
+
- \u6D3E\u53D1\u8D70 \`startAgentRun(agentKey, task, { ephemeral: true })\`\uFF08web/\u684C\u9762\u7AEF\u6CA1\u6709 nolo CLI\uFF0C\u6240\u6709 host \u90FD\u6709\u8FD9\u4E2A\u5DE5\u5177\uFF09\u3002ephemeral \u8BA9 review \u5B8C\u6210\u540E\u4E0D\u7559 dialog \u8BB0\u5F55\u3002
|
|
24
|
+
- task \u91CC\u5FC5\u987B\u5199\u660E\u5BA1\u67E5\u5BF9\u8C61\uFF08\`git diff\` \u770B\u5DE5\u4F5C\u533A\u6539\u52A8\uFF0C\u6216 \`git diff alpha...HEAD\` \u770B\u5DF2\u63D0\u4EA4\u6539\u52A8\uFF09\uFF0C\u5426\u5219 reviewer \u4E0D\u77E5\u9053\u5BA1\u4EC0\u4E48\u3002
|
|
25
|
+
- \u6309\u89D2\u8272\u52A0\u8F7D\u5BF9\u5E94 skill\uFF1Areviewer \u5148 \`loadSkill("coding-review")\` \u62FF\u901A\u7528\u6D41\u7A0B\uFF0C\u518D\u6309\u89D2\u8272 \`loadSkill("coding-review-<role>")\` \u62FF\u68C0\u67E5\u9879\u3002\u89D2\u8272\u6E05\u5355\uFF1Acode-quality\uFF08**\u5FC5\u8DD1**\uFF09/ architecture\uFF08**\u5355\u72EC\u6D3E\u53D1**\uFF0C\u4E2D\u7EA7\u4EE5\u4E0A\u95EE\u9898\uFF09/ security\uFF08\u6309\u9700 + \u5B89\u5168\u654F\u611F\u89E6\u53D1\u5FC5\u8DD1\uFF09/ frontend-ux\uFF08\u6D89\u53CA UI \u65F6\uFF09/ backend-data\uFF08\u6D89\u53CA server \u65F6\uFF09\u3002\u89D2\u8272\u5207\u5272\u7684\u76EE\u7684\u662F\u6CE8\u610F\u529B\u9694\u79BB\u2014\u2014\u6BCF\u4E2A\u89D2\u8272\u53EA\u76EF\u81EA\u5DF1\u7684\u68C0\u67E5\u9762\uFF0C\u6309\u9700\u542F\u7528\uFF0C\u907F\u514D\u4E00\u4E2A reviewer \u80CC\u6240\u6709\u89D2\u8272\u5BFC\u81F4\u6CE8\u610F\u529B\u7A00\u91CA\u3002
|
|
26
|
+
- Verdict \u6807\u51C6\uFF1AAPPROVE\uFF08\u65E0 CRITICAL \u6216 HIGH\uFF09\u2192 \u53EF commit\uFF1BWARNING\uFF08\u4EC5 HIGH\uFF09\u2192 \u62A5\u544A owner \u51B3\u5B9A\uFF1BBLOCK\uFF08\u6709 CRITICAL\uFF09\u2192 \u5FC5\u987B\u5148\u4FEE\u3002
|
|
27
|
+
- review \u53EF\u80FD\u591A\u8F6E\u6536\u655B\uFF08\u6709 finding\u2192\u4FEE\u2192\u518D\u5BA1\u2192\u76F4\u5230 APPROVE\uFF09\u3002\u6BCF\u8F6E review \u662F\u65E0\u4E0A\u4E0B\u6587\u7684\u2014\u2014reviewer \u53EA\u770B\u5F53\u524D\u5DE5\u4F5C\u533A diff\uFF0C\u4E0D\u5E26\u4E0A\u4E00\u8F6E finding \u8BB0\u5FC6\u3002
|
|
28
|
+
- **\u81EA\u52A8 review \u5FAA\u73AF**\uFF1A\u4EFB\u52A1\u5B8C\u6210\u540E**\u81EA\u52A8\u8FDB\u5165 review \u5FAA\u73AF**\uFF0C\u4E0D\u8981\u505C\u5728\u300C\u6539\u5B8C\u4EA4\u4ED8\u300D\u5C31\u7B49\u8C03\u7528\u65B9\u3002\u6D41\u7A0B\uFF1A\u6539\u5B8C \u2192 \u6D3E reviewer \u5BA1\u5DE5\u4F5C\u533A diff \u2192 \u82E5\u51FA finding \u5C31\u4FEE\u590D \u2192 \u590D\u5BA1 \u2192 \u76F4\u5230 APPROVE \u624D\u63D0\u4EA4\u3002\u9664\u975E\u8C03\u7528\u65B9\u660E\u786E\u8BF4\u300C\u53EA\u6539\u4E0D\u5BA1\u300D\uFF0C\u5426\u5219\u9ED8\u8BA4\u8D70\u5B8C\u6574\u5FAA\u73AF\u3002
|
|
29
|
+
- \u82E5\u5904\u4E8E\u5355 Agent \u72EC\u5360\u73AF\u5883\u3001\u5176\u4ED6 agent \u4E0D\u53EF\u8FBE\u3001\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u76F4\u63A5\u63D0\u4EA4\uFF0C\u5141\u8BB8\u5E26\u539F\u56E0\u8DF3\u8FC7\uFF08commit message \u6CE8\u660E [no-review: \u539F\u56E0]\uFF09\uFF0C\u4F46\u9ED8\u8BA4\u5FC5\u987B\u6D3E review\u3002`;
|
|
30
|
+
var buildCodeWorkDiscipline = (heading) => `# ${heading}
|
|
31
|
+
|
|
32
|
+
${CODE_WORK_DISCIPLINE_BODY}`;
|
|
33
|
+
|
|
34
|
+
// packages/ai/tools/toolPacks.ts
|
|
35
|
+
var TOOL_PACKS = {
|
|
36
|
+
// L1 - 核心:交互 + 自我更新,所有 Agent 必有。
|
|
37
|
+
// rememberMemory 已移至「长期记忆」能力包(defaultEnabled:true),用户可单关。
|
|
38
|
+
// searchDialogMessages 已改为内置 skill(search-dialog-messages),按需
|
|
39
|
+
// loadSkill 加载,不再随 CORE 常驻。
|
|
40
|
+
// search_all_spaces 已改为内置 skill(search-all-spaces),按需 loadSkill
|
|
41
|
+
// 加载,不再随 CORE 常驻;全部视图(All View)运行时只给 recommended hint,
|
|
42
|
+
// 不自动注入工具。search_workspace 保持常驻(分类视图的「当前空间」检索)。
|
|
43
|
+
CORE: [
|
|
44
|
+
"ask_user",
|
|
45
|
+
"read",
|
|
46
|
+
"createDoc",
|
|
47
|
+
"updateDoc",
|
|
48
|
+
"search_workspace",
|
|
49
|
+
"updateSelf",
|
|
50
|
+
"queryModelUsage",
|
|
51
|
+
"queryUserGrowthReport",
|
|
52
|
+
"createAgentAutomation",
|
|
53
|
+
"notifyUser",
|
|
54
|
+
"setTodoList"
|
|
55
|
+
],
|
|
56
|
+
// L2 - 联网搜索:与 CAPABILITY_PACKS「web-search」对齐。
|
|
57
|
+
// 社交读工具属于「social-reader」包,不得因 exa_search 被旁路注入。
|
|
58
|
+
LIGHT_WEB: ["exa_search", "fetchWebpage"],
|
|
59
|
+
// 本地工作区代码读写与执行。唯一真相源——「代码执行」能力包与 coding skill
|
|
60
|
+
// 都从这里取。以前两边各抄一份(coding 还多抄了 agent-orchestration 那 3 个),
|
|
61
|
+
// 改一个忘另一个就会静默不同步。
|
|
62
|
+
CODE: [
|
|
63
|
+
"readFile",
|
|
64
|
+
"writeFile",
|
|
65
|
+
"editFile",
|
|
66
|
+
"applyEdit",
|
|
67
|
+
"applyLineEdits",
|
|
68
|
+
"codeSearch",
|
|
69
|
+
"globFiles",
|
|
70
|
+
"searchFiles",
|
|
71
|
+
"listFiles",
|
|
72
|
+
"execShell",
|
|
73
|
+
"launchProcess",
|
|
74
|
+
"listProcesses"
|
|
75
|
+
],
|
|
76
|
+
// 表格读写。唯一真相源——app-builder 能力包与 table object skill 都从这里取,
|
|
77
|
+
// 以前两边各抄一份,改一个忘另一个就会静默不同步。
|
|
78
|
+
TABLE: [
|
|
79
|
+
"createTable",
|
|
80
|
+
"addTableRow",
|
|
81
|
+
"addTableRows",
|
|
82
|
+
"queryTableRows",
|
|
83
|
+
"updateTableRow",
|
|
84
|
+
"deleteTableRow"
|
|
85
|
+
],
|
|
86
|
+
// L3 - 深度浏览器:全套复杂网页交互(与「full-browser」包对齐)
|
|
87
|
+
FULL_BROWSER: [
|
|
88
|
+
"browser_openSession",
|
|
89
|
+
"browser_closeSession",
|
|
90
|
+
"browser_click",
|
|
91
|
+
"browser_typeText",
|
|
92
|
+
"browser_readContent",
|
|
93
|
+
"browser_selectOption",
|
|
94
|
+
"fetchWebpage"
|
|
95
|
+
]
|
|
96
|
+
};
|
|
97
|
+
var SYSTEM_AGENT_CAPABILITY_PACKS = SYSTEM_AGENT_CAPABILITIES.map((capability) => ({ ...capability }));
|
|
98
|
+
var CAPABILITY_PACKS = [
|
|
99
|
+
...SYSTEM_AGENT_CAPABILITY_PACKS,
|
|
100
|
+
{
|
|
101
|
+
id: "long-term-memory",
|
|
102
|
+
label: "\u957F\u671F\u8BB0\u5FC6",
|
|
103
|
+
description: "\u5BF9\u8BDD\u524D\u81EA\u52A8\u8F7D\u5165\u9AD8\u76F8\u5173\u8BB0\u5FC6\uFF0C\u5E76\u5141\u8BB8 agent \u6309\u9700\u67E5\u8BE2\u6216\u5199\u5165\u957F\u671F\u8BB0\u5FC6\u3002",
|
|
104
|
+
tools: ["queryMemory", "rememberMemory"],
|
|
105
|
+
defaultEnabled: true,
|
|
106
|
+
icon: "\u{1F9E0}"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: "full-browser",
|
|
110
|
+
label: "\u6DF1\u5EA6\u6D4F\u89C8\u5668",
|
|
111
|
+
description: "\u5B8C\u6574\u6D4F\u89C8\u5668\u81EA\u52A8\u5316\uFF1A\u6253\u5F00\u9875\u9762\u3001\u70B9\u51FB\u3001\u8F93\u5165\u3001\u8BFB\u53D6\u52A8\u6001\u6E32\u67D3\u5185\u5BB9\u3002",
|
|
112
|
+
tools: TOOL_PACKS.FULL_BROWSER,
|
|
113
|
+
defaultEnabled: false,
|
|
114
|
+
icon: "\u{1F5A5}"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: "social-reader",
|
|
118
|
+
label: "\u793E\u4EA4\u5185\u5BB9\u8BFB\u53D6",
|
|
119
|
+
description: "\u8BFB\u53D6 X/Twitter \u5E16\u5B50\u3001\u5C0F\u7EA2\u4E66\u7528\u6237\u753B\u50CF\u7B49\u793E\u4EA4\u5E73\u53F0\u5185\u5BB9\u3002",
|
|
120
|
+
tools: ["read_x_post", "read_xhs_profile"],
|
|
121
|
+
defaultEnabled: false,
|
|
122
|
+
icon: "\u{1F4E1}"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: "code",
|
|
126
|
+
label: "\u4EE3\u7801\u6267\u884C",
|
|
127
|
+
description: "\u8BFB\u5199\u4EE3\u7801\u6587\u4EF6\u3001\u641C\u7D22\u4EE3\u7801\u5E93\u3001\u6267\u884C shell \u547D\u4EE4\u2014\u2014\u8BA9 agent \u80FD\u6539\u4EE3\u7801\u3001\u8DD1\u6D4B\u8BD5\u3002",
|
|
128
|
+
tools: [...TOOL_PACKS.CODE],
|
|
129
|
+
defaultEnabled: false,
|
|
130
|
+
icon: "\u{1F4BB}",
|
|
131
|
+
promptPatch: buildCodeWorkDiscipline("\u4EE3\u7801\u6267\u884C\u80FD\u529B\u5305 \u2014 \u64CD\u4F5C\u7EAA\u5F8B")
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: "skills",
|
|
135
|
+
label: "\u6280\u80FD\u52A0\u8F7D",
|
|
136
|
+
description: "\u6309\u540D\u52A0\u8F7D\u5DE5\u4F5C\u533A\u6280\u80FD\uFF08SKILL.md\uFF09\u5E76\u8BFB\u53D6\u6280\u80FD\u6587\u6863\u2014\u2014\u8BA9 agent \u5728\u9700\u8981\u65F6\u628A\u5BF9\u5E94\u6280\u80FD\u7684\u65B9\u6CD5\u8BBA\u3001\u547D\u4EE4\u548C\u6D41\u7A0B\u62C9\u8FDB\u4E0A\u4E0B\u6587\u518D\u6267\u884C\u3002",
|
|
137
|
+
tools: ["loadSkill", "readSkillDoc"],
|
|
138
|
+
defaultEnabled: true,
|
|
139
|
+
icon: "\u{1F4DA}"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
id: "app-builder",
|
|
143
|
+
label: "\u5E94\u7528\u6784\u5EFA",
|
|
144
|
+
description: "\u6784\u5EFA/\u4FEE\u6539/\u53D1\u5E03 Web \u5E94\u7528\uFF1A\u8BFB\u53D6\u5E94\u7528\u6E90\u7801\u3001\u5B9A\u70B9\u4FEE\u6539\u3001\u9884\u68C0\u3001\u90E8\u7F72\uFF0C\u65E0\u9700\u7F16\u7A0B\u7ECF\u9A8C\u3002",
|
|
145
|
+
tools: [
|
|
146
|
+
"appRead",
|
|
147
|
+
"appFileList",
|
|
148
|
+
"appFileSearch",
|
|
149
|
+
"appFileRead",
|
|
150
|
+
"appFileReplace",
|
|
151
|
+
"appFileWrite",
|
|
152
|
+
"appList",
|
|
153
|
+
...TOOL_PACKS.TABLE,
|
|
154
|
+
"openAIGptImage"
|
|
155
|
+
],
|
|
156
|
+
defaultEnabled: false,
|
|
157
|
+
icon: "\u{1F5A5}",
|
|
158
|
+
// 部署那三件(预检 / 部署 / 删除)拆去 app-deploy,这里组合回来:
|
|
159
|
+
// 对外行为不变,但用户可以单独关掉发布权限而保留改代码的能力。
|
|
160
|
+
includes: ["app-deploy"],
|
|
161
|
+
promptPatch: `# \u5E94\u7528\u6784\u5EFA\u80FD\u529B\u5305 \u2014 \u64CD\u4F5C\u7EAA\u5F8B
|
|
162
|
+
|
|
163
|
+
## \u6548\u7387\u4F18\u5148\uFF08\u7701 token\uFF09
|
|
164
|
+
- \u4E0D\u590D\u8FF0\u7528\u6237\u9700\u6C42\uFF0C\u4E0D\u89E3\u91CA\u4F60\u300C\u6253\u7B97\u600E\u4E48\u505A\u300D\uFF0C\u76F4\u63A5\u52A8\u624B\u3002\u6539\u5B8C\u53EA\u7528\u4E00\u4E24\u53E5\u8BDD\u8BF4\u6E05\u300C\u6539\u4E86\u4EC0\u4E48\u3001\u53BB\u54EA\u770B\u300D\u3002
|
|
165
|
+
- \u601D\u8003\u7B80\u77ED\uFF1A\u5B9A\u4F4D\u95EE\u9898\u5373\u53EF\uFF0C\u4E0D\u505A\u957F\u7BC7\u63A8\u6F14\u3002
|
|
166
|
+
- \u5C0F\u6539\u52A8\uFF08\u6539\u6587\u5B57\u3001\u989C\u8272\u3001\u95F4\u8DDD\u3001\u5706\u89D2\u3001\u5355\u4E2A\u7EC4\u4EF6\uFF09\u8D70\u6700\u77ED\u8DEF\u5F84\uFF1A\`appFileSearch\` \u6216 \`appFileRead\` \u5B9A\u4F4D \u2192 \`appFileReplace\` \u7CBE\u786E\u66FF\u6362 \u2192 \`appPreflight\` \u2192 \`appDeploy\`\u3002\u80FD\u4E00\u6B21\u547D\u4E2D\u5C31\u4E0D\u8981\u53CD\u590D\u8BFB\u6587\u4EF6\u3002
|
|
167
|
+
- \u5DF2\u7ECF\u77E5\u9053\u6587\u4EF6\u548C\u4F4D\u7F6E\u65F6\uFF0C\u8DF3\u8FC7\u591A\u4F59\u7684 search/read\uFF0C\u76F4\u63A5 replace\u3002
|
|
168
|
+
- \u7981\u6B62\u4E3A\u4E00\u4E2A\u5C0F\u6539\u52A8\u6574\u9875\u91CD\u5199\u6216\u8FDE\u5E26\u6539\u52A8\u672A\u547D\u4E2D\u7684\u90E8\u5206\u3002
|
|
169
|
+
|
|
170
|
+
## \u5B9A\u70B9\u4FEE\u6539
|
|
171
|
+
- \u5982\u679C\u4E0A\u4E0B\u6587\u91CC\u5E26\u6709\u7528\u6237\u300C\u9009\u4E2D\u7684\u5143\u7D20\u300D\uFF08cssPath / HTML \u7247\u6BB5 / \u6E90\u7801\u4F4D\u7F6E\uFF09\uFF0C\u76F4\u63A5\u636E\u6B64\u5B9A\u4F4D\uFF0C\u4E0D\u8981\u518D\u5168\u5C40\u641C\u7D22\u3002
|
|
172
|
+
- \u4FEE\u6539\u6536\u655B\u5728\u547D\u4E2D\u7684\u5143\u7D20\u53CA\u5176\u6837\u5F0F\u6765\u6E90\uFF08\u7EC4\u4EF6 / \u7C7B / design token\uFF09\u3002
|
|
173
|
+
|
|
174
|
+
## \u6301\u7EED\u8FED\u4EE3\u6D41\u7A0B
|
|
175
|
+
- \u7528\u6237\u8981\u6539\u529F\u80FD\u6216\u6837\u5F0F\u65F6\uFF0C\u5148\u7528 appList \u627E\u5230\u76EE\u6807\u5E94\u7528\uFF0C\u518D\u7528 appRead \u5224\u65AD\u5F53\u524D\u662F\u6E90\u7801\u5DE5\u4F5C\u533A\u8FD8\u662F\u90E8\u7F72\u4EA7\u7269\uFF1B\u4E00\u65E6\u62FF\u5230 appId\uFF0C\u540E\u7EED\u90FD\u5FC5\u987B\u590D\u7528\u540C\u4E00\u4E2A appId\u3002
|
|
176
|
+
- \u6539\u5B8C\u8D70\u300C\u5E94\u7528\u53D1\u5E03\u300D\u80FD\u529B\u5305\u7684\u9884\u68C0\u90E8\u7F72\u6D41\u7A0B\uFF08appPreflight \u2192 appDeploy\uFF09\u3002\u82E5\u8BE5\u80FD\u529B\u5305\u672A\u542F\u7528\uFF0C\u8BF4\u660E\u672C agent \u53EA\u6709\u6539\u4EE3\u7801\u6743\u9650\u6CA1\u6709\u53D1\u5E03\u6743\u9650\uFF0C\u5982\u5B9E\u544A\u77E5\u7528\u6237\u3002
|
|
177
|
+
|
|
178
|
+
## Nolo React SSR \u7EF4\u62A4\u7EAA\u5F8B\uFF08\u5F53\u524D\u9ED8\u8BA4\u8DEF\u5F84\uFF09
|
|
179
|
+
- \u65B0\u5EFA\u548C\u7EF4\u62A4\u7684\u5E94\u7528\u4F18\u5148\u8D70 Nolo React SSR\uFF08framework: "nolo-react", renderMode: "ssr"\uFF09\u3002
|
|
180
|
+
- \u5F53 appRead \u8FD4\u56DE workspaceRef / sourceFiles / sourceOmitted \u65F6\uFF0C\u4E0D\u8981\u6574\u7AD9\u91CD\u5199\uFF1B\u4F7F\u7528\u53D7\u9650 workspace \u6587\u4EF6\u5DE5\u5177\uFF1AappFileList / appFileSearch / appFileRead / appFileReplace / appFileWrite\u3002
|
|
181
|
+
- \u5C0F\u6539\u52A8\u5FC5\u987B\u4F18\u5148 appFileReplace\uFF1B\u53EA\u6709\u65B0\u5EFA\u6587\u4EF6\u6216\u786E\u5B9E\u9700\u8981\u6574\u6587\u4EF6\u91CD\u5199\u65F6\u624D appFileWrite\u3002
|
|
182
|
+
- \u4E0D\u8981\u9759\u9ED8\u628A nolo-react \u5E94\u7528\u9000\u56DE react-spa \u6216\u5355\u6587\u4EF6 Worker\u3002
|
|
183
|
+
- \u89C6\u89C9\u5FAE\u8C03\u4F18\u5148\u6539 theme / tokens / design system\uFF1B\u65E7\u5199\u6CD5\u5E94\u7528\u53EF\u5148\u505A\u6700\u5C0F token \u8FC1\u79FB\uFF0C\u518D\u6539\u89C6\u89C9\u53C2\u6570\u3002
|
|
184
|
+
|
|
185
|
+
## \u8868\u5355 / \u6570\u636E\u6536\u96C6
|
|
186
|
+
- \u7559\u8A00\u3001\u8054\u7CFB\u8868\u5355\u3001\u9884\u7EA6\u3001\u8BA2\u9605\u3001\u53CD\u9988\u6536\u96C6\u4F18\u5148\u7528\u8868\u5DE5\u5177\uFF0C\u4E0D\u8981\u81EA\u5DF1\u53D1\u660E JSON \u6587\u4EF6\u5B58\u50A8\u3002
|
|
187
|
+
- \u516C\u5F00\u7F51\u9875\u8868\u5355\u5148 createTable\uFF0C\u5E76\u914D\u7F6E publicIntake\uFF08enabled\u3001slug\u3001allowedFields\u3001requiredFields\u3001\u53EF\u9009 honeypotField\uFF09\u3002
|
|
188
|
+
- \u516C\u5F00\u8BBF\u5BA2\u63D0\u4EA4\u53EA\u80FD\u8C03\u7528 /api/table/public-submit\uFF1B\u4E0D\u8981\u628A tenantId\u3001tableId\u3001token \u5199\u8FDB\u516C\u5F00\u5E94\u7528\u4EE3\u7801\u3002
|
|
189
|
+
|
|
190
|
+
## \u9879\u76EE\u7D20\u6750
|
|
191
|
+
- \u9996\u9875\u63D2\u753B\u3001\u5C01\u9762\u3001\u6A2A\u5E45\u3001\u6309\u94AE\u56FE\u6807\u7B49\u89C6\u89C9\u7D20\u6750\uFF0C\u4F18\u5148 openAIGptImage\uFF0C\u518D\u63A5\u5165\u5E94\u7528\u3002
|
|
192
|
+
|
|
193
|
+
## \u901A\u9053\u5F02\u5E38\u6B62\u635F
|
|
194
|
+
- \u5982\u679C\u5DE5\u5177\u8FD4\u56DE HTML / \u975E JSON / transport failure / retryable=false\uFF0C\u505C\u6B62\u81EA\u52A8\u91CD\u8BD5\uFF0C\u8BF4\u660E\u662F\u5E73\u53F0\u901A\u9053\u5F02\u5E38\u3002
|
|
195
|
+
|
|
196
|
+
## \u7F3A\u5C11\u6E90\u7801\u8981\u8BF4\u660E\u98CE\u9669
|
|
197
|
+
- \u5982\u679C appRead \u8BFB\u51FA\u6765\u7684\u662F HTML \u58F3\u3001importmap\u3001\u538B\u7F29 bundle\uFF0C\u5FC5\u987B\u5148\u544A\u77E5\u7528\u6237\u5F53\u524D\u66F4\u50CF\u90E8\u7F72\u4EA7\u7269\u800C\u4E0D\u662F\u53EF\u7EF4\u62A4\u6E90\u7801\uFF0C\u5F97\u5230\u786E\u8BA4\u540E\u518D\u7EE7\u7EED\u5927\u6539\u3002
|
|
198
|
+
`
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
id: "app-deploy",
|
|
202
|
+
label: "\u5E94\u7528\u53D1\u5E03",
|
|
203
|
+
description: "\u9884\u68C0\u5E76\u53D1\u5E03\u5E94\u7528\u5230\u7EBF\u4E0A\uFF0C\u4EE5\u53CA\u5220\u9664\u5DF2\u53D1\u5E03\u7684\u5E94\u7528\u3002\u4E0E\u300C\u5E94\u7528\u6784\u5EFA\u300D\u5206\u5F00\uFF0C\u53EF\u4EE5\u53EA\u7ED9\u6539\u4EE3\u7801\u7684\u80FD\u529B\u800C\u4E0D\u7ED9\u53D1\u5E03\u6743\u9650\u3002",
|
|
204
|
+
tools: ["appPreflight", "appDeploy", "appDelete"],
|
|
205
|
+
defaultEnabled: false,
|
|
206
|
+
icon: "\u{1F680}",
|
|
207
|
+
promptPatch: `# \u5E94\u7528\u53D1\u5E03\u80FD\u529B\u5305 \u2014 \u64CD\u4F5C\u7EAA\u5F8B
|
|
208
|
+
|
|
209
|
+
## \u9884\u68C0\u4E0E\u90E8\u7F72
|
|
210
|
+
- \u6BCF\u6B21\u4FEE\u6539\u540E\uFF1AappPreflight \u2192 appDeploy\uFF1BappDeploy \u5FC5\u987B\u7EE7\u7EED\u4F20\u540C\u4E00\u4E2A appId\u3002
|
|
211
|
+
- \u6536\u5230 repairPlan \u5C31\u76F4\u63A5\u4FEE\uFF1A\u6309\u8FD4\u56DE issues \u5B9A\u70B9\u4FEE\u590D\u5E76\u91CD\u65B0\u9884\u68C0\uFF0C\u4E0D\u8981\u6574\u7AD9\u91CD\u5199\uFF0C\u4E5F\u4E0D\u8981\u5148\u95EE\u7528\u6237\u8981\u4E0D\u8981\u4FEE\u3002
|
|
212
|
+
- \u672A\u7ECF\u7528\u6237\u786E\u8BA4\u4E0D\u8981 appDelete\u3002
|
|
213
|
+
|
|
214
|
+
## \u90E8\u7F72\u5E94\u7B54\u6A21\u677F
|
|
215
|
+
\u90E8\u7F72\u6210\u529F\u540E\uFF1A
|
|
216
|
+
"\u2705 \u4F60\u7684\u5E94\u7528\u5DF2\u7ECF\u597D\u4E86\uFF01
|
|
217
|
+
|
|
218
|
+
\u{1F517} \u8BBF\u95EE\u94FE\u63A5\uFF1A[URL]
|
|
219
|
+
|
|
220
|
+
\u8FD9\u4E2A\u5E94\u7528\u53EF\u4EE5\u5E2E\u4F60 [\u4E00\u53E5\u8BDD\u529F\u80FD\u63CF\u8FF0]\u3002\u60F3\u8981\u4FEE\u6539\u6216\u6DFB\u52A0\u529F\u80FD\uFF0C\u76F4\u63A5\u544A\u8BC9\u6211\u5C31\u884C\uFF01"`
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
id: "video-transcription",
|
|
224
|
+
label: "\u89C6\u9891\u8F6C\u5199",
|
|
225
|
+
description: "\u8D34\u89C6\u9891\u94FE\u63A5\u5373\u53EF\u8F6C\u5199\u4E3A\u5E26\u6807\u70B9\u6587\u672C\u4E0E SRT\u3002\u652F\u6301 B \u7AD9\u5206 P\uFF08\u9ED8\u8BA4\u5168\u90E8\u5904\u7406\uFF09\u3001YouTube \u7B49\uFF1B\u6296\u97F3\u8BF7\u5728\u684C\u9762\u7AEF\u6D4F\u89C8\u5668\u4F7F\u7528\u3002",
|
|
226
|
+
tools: ["transcribeVideo"],
|
|
227
|
+
defaultEnabled: false,
|
|
228
|
+
icon: "\u{1F3AC}",
|
|
229
|
+
promptPatch: `# \u89C6\u9891\u8F6C\u5199\u80FD\u529B\u5305
|
|
230
|
+
|
|
231
|
+
## \u7528\u6CD5
|
|
232
|
+
- \u7528\u6237\u8D34\u4E0A\u89C6\u9891\u94FE\u63A5\u65F6\uFF0C\u76F4\u63A5\u8C03\u7528 \`transcribeVideo({ url })\`\uFF0C\u4E0D\u8981\u5148\u95EE\u8981\u4E0D\u8981\u8F6C\u5199\u3002
|
|
233
|
+
- B \u7AD9\u5206 P / \u5408\u96C6\uFF1A\u7F3A\u7701\u5904\u7406\u5168\u90E8\uFF1B\u82E5\u7528\u6237\u6307\u5B9A\u300C\u53EA\u8981\u7B2C 3\u30014 \u96C6\u300D\u5219\u4F20 \`p: [3, 4]\`\u3002
|
|
234
|
+
- \u8FD4\u56DE\u91CC\u7684 \`processedParts\` / \`availableParts\` \u5FC5\u987B\u5411\u7528\u6237\u8BF4\u6E05\u695A\uFF0C\u907F\u514D\u9759\u9ED8\u4E22\u5206 P\u3002
|
|
235
|
+
- \u6296\u97F3\u82E5\u62A5\u300C\u8BE5\u5E73\u53F0\u9700\u8981\u767B\u5F55\u6001\uFF0C\u8BF7\u5728\u684C\u9762\u7AEF\u6D4F\u89C8\u5668\u4E2D\u4F7F\u7528\u300D\uFF0C\u63D0\u793A\u7528\u6237\u6539\u8D70\u684C\u9762\u7AEF\u6D4F\u89C8\u80FD\u529B\uFF0C\u4E0D\u8981\u5C1D\u8BD5\u4F20 cookie\u3002
|
|
236
|
+
`
|
|
237
|
+
}
|
|
238
|
+
];
|
|
239
|
+
var CAPABILITY_PACK_BY_ID = CAPABILITY_PACKS.reduce(
|
|
240
|
+
(acc, pack) => {
|
|
241
|
+
acc[pack.id] = pack;
|
|
242
|
+
return acc;
|
|
243
|
+
},
|
|
244
|
+
{}
|
|
245
|
+
);
|
|
246
|
+
var PACK_MANAGED_TOOLS = new Set(
|
|
247
|
+
CAPABILITY_PACKS.flatMap((pack) => pack.tools)
|
|
248
|
+
);
|
|
249
|
+
var DEFAULT_ENABLED_PACKS = CAPABILITY_PACKS.filter(
|
|
250
|
+
(pack) => pack.defaultEnabled
|
|
251
|
+
).map((pack) => pack.id);
|
|
252
|
+
var ALWAYS_ON_PACK_IDS = [
|
|
253
|
+
"long-term-memory",
|
|
254
|
+
"skills"
|
|
255
|
+
];
|
|
256
|
+
function resolveEffectiveEnabledPacks(args) {
|
|
257
|
+
const base = args.enabledPacks ?? [];
|
|
258
|
+
if (args.declaredOnly === true) return [...base];
|
|
259
|
+
return [
|
|
260
|
+
.../* @__PURE__ */ new Set([
|
|
261
|
+
...base,
|
|
262
|
+
...base.length === 0 ? args.emptyFallbackPacks ?? [] : [],
|
|
263
|
+
...args.hostPacks ?? [],
|
|
264
|
+
...ALWAYS_ON_PACK_IDS
|
|
265
|
+
])
|
|
266
|
+
];
|
|
267
|
+
}
|
|
268
|
+
var SYSTEM_BUILTIN_SKILL_PACK_IDS = SYSTEM_AGENT_CAPABILITY_IDS;
|
|
269
|
+
var DEFAULT_MOUNT_SYSTEM_CAPABILITY_IDS = ["agent-orchestration"];
|
|
270
|
+
function getDefaultSystemCapabilityTools() {
|
|
271
|
+
const ids = DEFAULT_MOUNT_SYSTEM_CAPABILITY_IDS;
|
|
272
|
+
return SYSTEM_AGENT_CAPABILITY_PACKS.filter((pack) => ids.includes(pack.id)).flatMap((pack) => [...pack.tools]);
|
|
273
|
+
}
|
|
274
|
+
function addDefaultSystemCapabilityTools(toolNames) {
|
|
275
|
+
return [.../* @__PURE__ */ new Set([...toolNames, ...getDefaultSystemCapabilityTools()])];
|
|
276
|
+
}
|
|
277
|
+
function applySystemBuiltinSkillFilter(toolNames, systemBuiltinSkills) {
|
|
278
|
+
if (!systemBuiltinSkills) return toolNames;
|
|
279
|
+
const disabledToolSet = /* @__PURE__ */ new Set();
|
|
280
|
+
for (const packId of SYSTEM_BUILTIN_SKILL_PACK_IDS) {
|
|
281
|
+
const enabled = systemBuiltinSkills[packId];
|
|
282
|
+
if (enabled === false) {
|
|
283
|
+
const pack = CAPABILITY_PACK_BY_ID[packId];
|
|
284
|
+
if (pack) pack.tools.forEach((t) => disabledToolSet.add(t));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (disabledToolSet.size === 0) return toolNames;
|
|
288
|
+
return toolNames.filter((t) => !disabledToolSet.has(t));
|
|
289
|
+
}
|
|
290
|
+
function collectPackIdsWithIncludes(enabledPacks) {
|
|
291
|
+
const out = [];
|
|
292
|
+
const seen = /* @__PURE__ */ new Set();
|
|
293
|
+
const visit = (id) => {
|
|
294
|
+
if (seen.has(id)) return;
|
|
295
|
+
seen.add(id);
|
|
296
|
+
out.push(id);
|
|
297
|
+
for (const child of CAPABILITY_PACK_BY_ID[id]?.includes ?? []) visit(child);
|
|
298
|
+
};
|
|
299
|
+
for (const id of enabledPacks ?? []) visit(id);
|
|
300
|
+
return out;
|
|
301
|
+
}
|
|
302
|
+
function expandEnabledPacks(enabledPacks, explicitTools = []) {
|
|
303
|
+
const packTools = collectPackIdsWithIncludes(enabledPacks).map((id) => CAPABILITY_PACK_BY_ID[id]?.tools ?? []).flat();
|
|
304
|
+
return [.../* @__PURE__ */ new Set([...packTools, ...explicitTools ?? []])];
|
|
305
|
+
}
|
|
306
|
+
function expandEnabledPackPromptPatches(enabledPacks) {
|
|
307
|
+
return collectPackIdsWithIncludes(enabledPacks).map((id) => CAPABILITY_PACK_BY_ID[id]?.promptPatch).filter((patch) => typeof patch === "string" && patch.length > 0);
|
|
308
|
+
}
|
|
309
|
+
function appendEnabledPackPromptPatches(prompt, enabledPacks) {
|
|
310
|
+
const patches = expandEnabledPackPromptPatches(enabledPacks);
|
|
311
|
+
if (patches.length === 0) return prompt ?? void 0;
|
|
312
|
+
const base = typeof prompt === "string" ? prompt.trim() : "";
|
|
313
|
+
const addition = patches.join("\n\n");
|
|
314
|
+
if (!base) return addition;
|
|
315
|
+
if (base.includes(addition)) return base;
|
|
316
|
+
return `${base}
|
|
317
|
+
|
|
318
|
+
${addition}`;
|
|
319
|
+
}
|
|
320
|
+
var FORCED_TOOLS = ["ask_user"];
|
|
321
|
+
function applyDisabledTools(toolNames, disabledTools) {
|
|
322
|
+
if (!Array.isArray(disabledTools) || disabledTools.length === 0) {
|
|
323
|
+
return toolNames;
|
|
324
|
+
}
|
|
325
|
+
const disabled = new Set(disabledTools);
|
|
326
|
+
const forced = new Set(FORCED_TOOLS);
|
|
327
|
+
return toolNames.filter((name) => !disabled.has(name) || forced.has(name));
|
|
328
|
+
}
|
|
329
|
+
var WEB_SEARCH_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
330
|
+
"fetchWebpage",
|
|
331
|
+
"exa_search",
|
|
332
|
+
"firecrawl_scrape",
|
|
333
|
+
"firecrawl_search"
|
|
334
|
+
]);
|
|
335
|
+
function isWebSearchTool(name) {
|
|
336
|
+
return WEB_SEARCH_TOOL_NAMES.has(name);
|
|
337
|
+
}
|
|
338
|
+
function isBrowserTool(name) {
|
|
339
|
+
return name.startsWith("browser_");
|
|
340
|
+
}
|
|
341
|
+
function addDefaultLightWebToolsForConfiguredAgents(toolNames, agentConfig) {
|
|
342
|
+
const explicitToolNames = Array.isArray(
|
|
343
|
+
agentConfig?.toolSurface?.explicitToolNames
|
|
344
|
+
) ? agentConfig.toolSurface.explicitToolNames : agentConfig?.toolNames;
|
|
345
|
+
if (!Array.isArray(explicitToolNames) || explicitToolNames.length === 0)
|
|
346
|
+
return toolNames;
|
|
347
|
+
const webSearch = explicitToolNames.some(isWebSearchTool);
|
|
348
|
+
if (!webSearch) return toolNames;
|
|
349
|
+
return [.../* @__PURE__ */ new Set([...toolNames, ...TOOL_PACKS.LIGHT_WEB])];
|
|
350
|
+
}
|
|
351
|
+
function applyDefaultWebToolPacks(args) {
|
|
352
|
+
const enhanced = new Set(args.toolNames);
|
|
353
|
+
if (!args.skipWeb && args.toolNames.some(isWebSearchTool)) {
|
|
354
|
+
TOOL_PACKS.LIGHT_WEB.forEach((t) => enhanced.add(t));
|
|
355
|
+
}
|
|
356
|
+
if (args.toolNames.some(isBrowserTool)) {
|
|
357
|
+
TOOL_PACKS.FULL_BROWSER.forEach((t) => enhanced.add(t));
|
|
358
|
+
}
|
|
359
|
+
return [...enhanced];
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
export {
|
|
363
|
+
buildCodeWorkDiscipline,
|
|
364
|
+
TOOL_PACKS,
|
|
365
|
+
CAPABILITY_PACKS,
|
|
366
|
+
resolveEffectiveEnabledPacks,
|
|
367
|
+
addDefaultSystemCapabilityTools,
|
|
368
|
+
applySystemBuiltinSkillFilter,
|
|
369
|
+
expandEnabledPacks,
|
|
370
|
+
expandEnabledPackPromptPatches,
|
|
371
|
+
appendEnabledPackPromptPatches,
|
|
372
|
+
FORCED_TOOLS,
|
|
373
|
+
applyDisabledTools,
|
|
374
|
+
addDefaultLightWebToolsForConfiguredAgents,
|
|
375
|
+
applyDefaultWebToolPacks
|
|
376
|
+
};
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MODEL_LOOKUP_MAP
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import {
|
|
5
|
-
addContentAction
|
|
6
|
-
} from "./chunk-ELT65PZW.js";
|
|
3
|
+
} from "./chunk-CHSCAUZN.js";
|
|
7
4
|
import {
|
|
8
5
|
ALL_MODELS
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4ULSC37S.js";
|
|
7
|
+
import {
|
|
8
|
+
addContentAction
|
|
9
|
+
} from "./chunk-OXLLFZNF.js";
|
|
10
10
|
import {
|
|
11
11
|
upload
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-FON47ACC.js";
|
|
13
13
|
import {
|
|
14
14
|
PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY,
|
|
15
15
|
PUBLIC_KIMI_K26_IMAGE_AGENT_KEY
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-ATWUOTJP.js";
|
|
17
17
|
import {
|
|
18
18
|
getRuntimeServerContext
|
|
19
19
|
} from "./chunk-XMLRJUU5.js";
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
PLATFORM_HOSTED_KIMI_K26_MODEL,
|
|
5
5
|
PLATFORM_HOSTED_KIMI_PROVIDER,
|
|
6
6
|
cloudflareModels,
|
|
7
|
-
deepSeekModels,
|
|
8
7
|
deepinfraModels,
|
|
9
8
|
fireworksModels,
|
|
10
9
|
getCloudflareWorkersAiChatCompletionsUrl,
|
|
@@ -15,7 +14,7 @@ import {
|
|
|
15
14
|
platformHostedModels,
|
|
16
15
|
xaiModels,
|
|
17
16
|
zaiModels
|
|
18
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-2IPEVBUO.js";
|
|
19
18
|
import {
|
|
20
19
|
__export
|
|
21
20
|
} from "./chunk-4VNS5WPM.js";
|
|
@@ -4708,7 +4707,6 @@ var moonshotAllModels = [...moonshotModels, ...kimiCodeModels];
|
|
|
4708
4707
|
var qwenAllModels = [...qwenModels, ...qwenTokenPlanModels];
|
|
4709
4708
|
var MODEL_MAP = {
|
|
4710
4709
|
// anthropic: anthropicModels,
|
|
4711
|
-
deepseek: deepSeekModels,
|
|
4712
4710
|
google: googleModels,
|
|
4713
4711
|
openai: openAIModels,
|
|
4714
4712
|
deepinfra: deepinfraModels,
|
|
@@ -4815,11 +4813,6 @@ var API_ENDPOINTS = {
|
|
|
4815
4813
|
xai: {
|
|
4816
4814
|
default: "https://api.x.ai/v1/chat/completions"
|
|
4817
4815
|
},
|
|
4818
|
-
deepseek: {
|
|
4819
|
-
// No `responses` entry: the official DeepSeek provider was retired and no
|
|
4820
|
-
// deepseek model declares endpointKey "responses", so it was unreachable.
|
|
4821
|
-
default: "https://api.deepseek.com/chat/completions"
|
|
4822
|
-
},
|
|
4823
4816
|
deepinfra: {
|
|
4824
4817
|
default: "https://api.deepinfra.com/v1/openai/chat/completions"
|
|
4825
4818
|
},
|
|
@@ -34,7 +34,9 @@ function shouldStripReasoningContentForOutbound(provider, model) {
|
|
|
34
34
|
const p = provider?.trim().toLowerCase();
|
|
35
35
|
const m = model?.trim().toLowerCase();
|
|
36
36
|
if (!p || !m) return false;
|
|
37
|
-
if (p === "deepseek" || p === "nolo")
|
|
37
|
+
if (p === "deepseek" || p === "nolo") {
|
|
38
|
+
return m === "deepseek-v4-flash" || m === "deepseek-v4-pro";
|
|
39
|
+
}
|
|
38
40
|
return false;
|
|
39
41
|
}
|
|
40
42
|
|
|
@@ -94,17 +96,20 @@ var normalizeToolOutput = (content) => {
|
|
|
94
96
|
};
|
|
95
97
|
var toResponsesTools = (tools) => {
|
|
96
98
|
if (!Array.isArray(tools) || tools.length === 0) return void 0;
|
|
97
|
-
|
|
99
|
+
const normalized = tools.map((tool) => {
|
|
98
100
|
const fn = tool?.function;
|
|
99
|
-
|
|
101
|
+
const name = fn?.name ?? tool?.name;
|
|
102
|
+
if (!name) return null;
|
|
103
|
+
const parameters = fn?.parameters ?? tool?.parameters;
|
|
100
104
|
return {
|
|
101
105
|
type: "function",
|
|
102
|
-
name
|
|
103
|
-
description: fn
|
|
104
|
-
parameters: sanitizeResponsesParameters(
|
|
105
|
-
strict: fn
|
|
106
|
+
name,
|
|
107
|
+
...typeof (fn?.description ?? tool?.description) === "string" ? { description: fn?.description ?? tool?.description } : {},
|
|
108
|
+
parameters: sanitizeResponsesParameters(parameters),
|
|
109
|
+
...fn?.strict !== void 0 || tool?.strict !== void 0 ? { strict: fn?.strict ?? tool?.strict } : {}
|
|
106
110
|
};
|
|
107
111
|
}).filter(Boolean);
|
|
112
|
+
return normalized.length > 0 ? normalized : void 0;
|
|
108
113
|
};
|
|
109
114
|
var convertMessagesToResponsesInput = (messages, options) => {
|
|
110
115
|
const input = [];
|
|
@@ -121,7 +126,12 @@ var convertMessagesToResponsesInput = (messages, options) => {
|
|
|
121
126
|
}
|
|
122
127
|
const role = message.role;
|
|
123
128
|
if (role === "assistant" && !options?.stripReasoningContent && typeof message.reasoning_content === "string" && message.reasoning_content) {
|
|
124
|
-
input.push({
|
|
129
|
+
input.push({
|
|
130
|
+
type: "reasoning",
|
|
131
|
+
content: [
|
|
132
|
+
{ type: "reasoning_text", text: message.reasoning_content }
|
|
133
|
+
]
|
|
134
|
+
});
|
|
125
135
|
}
|
|
126
136
|
const contentParts = normalizeMessageParts(message.content, role);
|
|
127
137
|
if (contentParts.length > 0) {
|
|
@@ -28,7 +28,8 @@ function canonicalizeNoloServerUrl(value) {
|
|
|
28
28
|
// packages/cli/client/profileConfig.ts
|
|
29
29
|
var normalizeProfileServerUrl = canonicalizeNoloServerUrl;
|
|
30
30
|
function getDefaultProfileConfigPath() {
|
|
31
|
-
|
|
31
|
+
const noloHome = process.env.NOLO_HOME?.trim();
|
|
32
|
+
return noloHome ? join(noloHome, "config.json") : join(homedir(), ".nolo", "config.json");
|
|
32
33
|
}
|
|
33
34
|
function loadProfileConfig(path = getDefaultProfileConfigPath()) {
|
|
34
35
|
if (!existsSync(path)) return null;
|
|
@@ -89,8 +90,8 @@ function buildCliRuntimeEnv(processEnv, config) {
|
|
|
89
90
|
const explicitAuthToken = processEnv.AUTH_TOKEN || processEnv.AUTH;
|
|
90
91
|
const explicitServerUrl = processEnv.NOLO_SERVER || processEnv.NOLO_SERVER_URL || processEnv.BASE_URL;
|
|
91
92
|
return {
|
|
92
|
-
...processEnv,
|
|
93
93
|
...profileEnv,
|
|
94
|
+
...processEnv,
|
|
94
95
|
...explicitAuthToken ? { AUTH_TOKEN: explicitAuthToken } : {},
|
|
95
96
|
...explicitServerUrl ? {
|
|
96
97
|
NOLO_SERVER: explicitServerUrl,
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getModelConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CHSCAUZN.js";
|
|
4
|
+
import {
|
|
5
|
+
isPlatformHostedClaudeModel,
|
|
6
|
+
isPlatformHostedGrokModel
|
|
7
|
+
} from "./chunk-2IPEVBUO.js";
|
|
4
8
|
import {
|
|
5
9
|
asTrimmedLowercaseString
|
|
6
10
|
} from "./chunk-QSJ3HFEF.js";
|
|
@@ -28,11 +32,10 @@ function pickAgentRuntimeInferenceOptions(agentConfig) {
|
|
|
28
32
|
|
|
29
33
|
// packages/agent-runtime/platformProviderEndpoints.ts
|
|
30
34
|
var OPENAI_RESPONSES_ENDPOINT = "https://api.openai.com/v1/responses";
|
|
35
|
+
var DEEPSEEK_RESPONSES_ENDPOINT = "https://api.deepseek.com/responses";
|
|
36
|
+
var XAI_CHAT_COMPLETIONS_ENDPOINT = "https://api.x.ai/v1/chat/completions";
|
|
31
37
|
var PLATFORM_CHAT_COMPLETIONS_ENDPOINTS = {
|
|
32
38
|
deepinfra: "https://api.deepinfra.com/v1/openai/chat/completions",
|
|
33
|
-
// DeepSeek official API endpoint removed — all DeepSeek models now route
|
|
34
|
-
// through the nolo provider (Ollama Cloud). See providerRegistry.ts.
|
|
35
|
-
// deepseek: "https://api.deepseek.com/chat/completions",
|
|
36
39
|
fireworks: "https://api.fireworks.ai/inference/v1/chat/completions",
|
|
37
40
|
google: "https://generativelanguage.googleapis.com/v1beta/openai/chat/completions",
|
|
38
41
|
openai: "https://api.openai.com/v1/chat/completions",
|
|
@@ -41,12 +44,16 @@ var PLATFORM_CHAT_COMPLETIONS_ENDPOINTS = {
|
|
|
41
44
|
qwen: "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
|
|
42
45
|
// Moonshot AI(月之暗面)开放平台 OpenAI 兼容模式(按量计费)
|
|
43
46
|
moonshot: "https://api.moonshot.cn/v1/chat/completions",
|
|
44
|
-
//
|
|
45
|
-
//
|
|
47
|
+
// Non-DeepSeek hosted models use Ollama Cloud. DeepSeek Flash is routed
|
|
48
|
+
// separately to the official DeepSeek Responses endpoint.
|
|
46
49
|
nolo: "https://ollama.com/v1/chat/completions"
|
|
47
50
|
};
|
|
48
51
|
function isOpenAiResponsesModel(args) {
|
|
49
52
|
const provider = asTrimmedLowercaseString(args.provider);
|
|
53
|
+
if (provider === "nolo" || provider === "deepseek") {
|
|
54
|
+
const model = args.model?.trim().toLowerCase();
|
|
55
|
+
return model === "deepseek-v4-flash" || model === "deepseek-v4-pro";
|
|
56
|
+
}
|
|
50
57
|
if (provider !== "openai") return false;
|
|
51
58
|
if (args.endpointKey === "responses") return true;
|
|
52
59
|
if (!args.model) return false;
|
|
@@ -57,16 +64,27 @@ function isOpenAiResponsesModel(args) {
|
|
|
57
64
|
}
|
|
58
65
|
}
|
|
59
66
|
function resolvePlatformResponsesEndpoint(provider) {
|
|
60
|
-
|
|
67
|
+
const normalized = asTrimmedLowercaseString(provider);
|
|
68
|
+
if (normalized === "openai") return OPENAI_RESPONSES_ENDPOINT;
|
|
69
|
+
if (normalized === "nolo" || normalized === "deepseek") {
|
|
70
|
+
return DEEPSEEK_RESPONSES_ENDPOINT;
|
|
71
|
+
}
|
|
72
|
+
return void 0;
|
|
61
73
|
}
|
|
62
74
|
var PLATFORM_PROVIDER_ENDPOINT_ALIASES = {
|
|
63
75
|
"ollama-cloud": "nolo",
|
|
64
76
|
deepseek: "nolo"
|
|
65
77
|
};
|
|
66
|
-
function resolvePlatformChatCompletionsEndpoint(provider) {
|
|
78
|
+
function resolvePlatformChatCompletionsEndpoint(provider, model) {
|
|
67
79
|
const key = asTrimmedLowercaseString(provider);
|
|
68
80
|
if (!key) return void 0;
|
|
69
81
|
const aliased = PLATFORM_PROVIDER_ENDPOINT_ALIASES[key] ?? key;
|
|
82
|
+
if (aliased === "nolo" && isPlatformHostedClaudeModel(model)) {
|
|
83
|
+
return PLATFORM_CHAT_COMPLETIONS_ENDPOINTS.deepinfra;
|
|
84
|
+
}
|
|
85
|
+
if (aliased === "nolo" && isPlatformHostedGrokModel(model)) {
|
|
86
|
+
return XAI_CHAT_COMPLETIONS_ENDPOINT;
|
|
87
|
+
}
|
|
70
88
|
return PLATFORM_CHAT_COMPLETIONS_ENDPOINTS[aliased];
|
|
71
89
|
}
|
|
72
90
|
|
|
@@ -87,7 +105,10 @@ function resolvePlatformProviderEndpoint(agentConfig) {
|
|
|
87
105
|
})) {
|
|
88
106
|
return resolvePlatformResponsesEndpoint(provider) ?? "";
|
|
89
107
|
}
|
|
90
|
-
const endpoint = resolvePlatformChatCompletionsEndpoint(
|
|
108
|
+
const endpoint = resolvePlatformChatCompletionsEndpoint(
|
|
109
|
+
provider,
|
|
110
|
+
agentConfig.model
|
|
111
|
+
);
|
|
91
112
|
if (!endpoint) {
|
|
92
113
|
throw new Error(`Platform chat provider does not support provider "${provider}".`);
|
|
93
114
|
}
|
|
@@ -228,7 +249,11 @@ async function buildProviderExecutionPlan(args) {
|
|
|
228
249
|
}
|
|
229
250
|
}
|
|
230
251
|
if (!apiKey2 && agentConfig.credentialSynced && args.syncFetcher && credentialRef2) {
|
|
231
|
-
|
|
252
|
+
let synced = null;
|
|
253
|
+
try {
|
|
254
|
+
synced = await args.syncFetcher(credentialRef2);
|
|
255
|
+
} catch {
|
|
256
|
+
}
|
|
232
257
|
const trimmed = asTrimmedString(synced);
|
|
233
258
|
if (trimmed) {
|
|
234
259
|
try {
|
|
@@ -295,9 +320,10 @@ async function buildProviderExecutionPlan(args) {
|
|
|
295
320
|
serverUrl: resolvePlatformServerUrl(env),
|
|
296
321
|
authToken: resolvePlatformAuthToken(env),
|
|
297
322
|
agentKey: agentConfig.key,
|
|
298
|
-
...agentConfig.apiSource ? { apiSource: agentConfig.apiSource } : {}
|
|
299
|
-
|
|
300
|
-
|
|
323
|
+
...agentConfig.apiSource ? { apiSource: agentConfig.apiSource } : {}
|
|
324
|
+
// Platform agents use the server-managed provider credential. Never
|
|
325
|
+
// forward a raw credential from a stale/local agent record through the
|
|
326
|
+
// platform proxy; credentials are resolved by the platform server.
|
|
301
327
|
};
|
|
302
328
|
}
|
|
303
329
|
let apiKey = "";
|
|
@@ -309,7 +335,11 @@ async function buildProviderExecutionPlan(args) {
|
|
|
309
335
|
}
|
|
310
336
|
}
|
|
311
337
|
if (!apiKey && agentConfig.credentialSynced && args.syncFetcher && credentialRef) {
|
|
312
|
-
|
|
338
|
+
let synced = null;
|
|
339
|
+
try {
|
|
340
|
+
synced = await args.syncFetcher(credentialRef);
|
|
341
|
+
} catch {
|
|
342
|
+
}
|
|
313
343
|
const trimmed = asTrimmedString(synced);
|
|
314
344
|
if (trimmed) {
|
|
315
345
|
try {
|