chainlesschain 0.166.127 → 0.166.128
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 +11 -1
- package/package.json +1 -1
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-DkSOwKNn.js → AIOps-BmGA5zXX.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CaYSnkeR.js → ActionButton-B7WXwoF0.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D8kEgXLP.js → Analytics-IvJG43B5.js} +2 -2
- package/src/assets/web-panel/assets/{AppLayout-D43FaO4a.js → AppLayout-DWY017_e.js} +5 -5
- package/src/assets/web-panel/assets/Artifacts-BOyohM_-.js +1 -0
- package/src/assets/web-panel/assets/{Audit-0ogv1Zu5.js → Audit-CD9sTnBN.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BhLnn-Gw.js → BackgroundAgents-J6gg5z0U.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-D4591rlk.js → Backup-D7ik3lse.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-gK1PjPDZ.js → BaseInput-MrDd5zcz.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CCDmOYwg.js → Chat-DbxRqGiK.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DbeJAwMg.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DG4PRH9M.js → Checkbox-CditB77B.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DtJxGiSg.js → Codegen-Ds0UZWZG.js} +1 -1
- package/src/assets/web-panel/assets/{Col-4wGBC25p.js → Col-CZlj1XI2.js} +1 -1
- package/src/assets/web-panel/assets/{Community-dOCSc8t-.js → Community-j4B2SoT6.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Du4kXsyN.js → Compact-BuKQutaO.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BbI5XMcz.js → Compliance-DAgDyS-p.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CbQRpyiK.js → Cowork-DX2-I6V3.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-CtWy2bMC.js → Cron-dJpc-FxX.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CzdM5hF6.js → Crosschain-7m8euM3v.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CcBboBJN.js → DID-CLoYoCe1.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-I7m0oCeC.js → Dashboard-DR1rRMb7.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CKIy2Ikn.js → Dropdown-BsKhCfvH.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BNuxCq89.js → EmailListRenderer-BAGexzJu.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BqYYmC01.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-QThmET-n.js → FamilyGuardDashboard-BIpueefy.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-Bqf7YYlV.js → Federation-BluNep6d.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DZAM28ve.js → FormItemContext-CerdM3am.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DunXFYML.js → GenericCardRenderer-DXh4tOjU.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BgwOjaMf.js → Git-CEE0cGmf.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-B1za4wCP.js → Governance-Bc-XNDhM.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DMPqX1oN.js → Inference-CiBzXyZ-.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-ChDn3okr.js → KnowledgeGraph-CV2IiyuN.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BQoPB6-O.js → Logs-fbQYKuSz.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-B73ZyMRI.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-DZXEaPpe.js → Marketplace-C5utdpxZ.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CZbVOFaG.js → McpTools-CPE4SaF3.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-Cl3T8asu.js → Memory-DTFDszzk.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DK_ayU9I.js → MobileBridge-DxqPmTzP.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DEWAA2gT.js → MobileProjects-CwcK8l2y.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-z-XAWzMh.js → Mtc-DrjECLGO.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-CX7qJvQS.js → MtcAudit-4IURCa-3.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-DiQlKgxx.js → Multisig-CggLV1Cp.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Ciuxcu00.js → NLProgramming-DkOQJT73.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BAvqNw_6.js → Notes-Dodcva6s.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DkHDTslA.js → NotificationSettings-CQ3HeTs6.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer--WZdD2oV.js → OrderTableRenderer-pT2nzmIO.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Bv6bMLCe.js → Organization-B6HFsIfU.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Bwoz_oq1.js → Overflow-G9dju55N.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-De7T0ZeB.js → P2P-C1BCE155.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Dblr2x25.js → PdhVaultBrowser-BFAxXn5D.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-C-jAt-cg.js → Permissions-DWg7cw9Q.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-yXeXDMgf.js → PersonalDataHub-BQxuOQOO.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-C8CYoLOa.js → Pipeline-C3Gse9Ne.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B-gwnOGT.js → Privacy-Dcsjx6Oi.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CbNjHiBV.js → ProjectInit-DeYlnXJQ.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BMUY0GCP.js → ProjectSettings-D7kbZ_K7.js} +2 -2
- package/src/assets/web-panel/assets/Projects-C5m3NGzM.js +1 -0
- package/src/assets/web-panel/assets/{Providers-K_tlWkON.js → Providers-oT6jy83z.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-2RSZDzJI.js → QrScannerModal-NZ11GEBa.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-mhbcQRMI.js → QuickAsk-CtQU4Tx0.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BXm0uG0q.js → Recommend-3CoXYu3O.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-xhOpmNZG.js → RemoteSession-C2d4LzBM.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-CwbCWB-3.js → Reputation-WZQHrGwl.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BdAjmDBO.js → Row-ChiqY7Hg.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Cq4LZ9WU.js → RssFeed-Cjwl2Kum.js} +2 -2
- package/src/assets/web-panel/assets/{Search-C_I6B-4l.js → Search-DRDMZxTF.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CdH6mzL-.js → Security-D0y4LlQ4.js} +3 -3
- package/src/assets/web-panel/assets/{Services-CWu1wqtS.js → Services-ChpkqWm0.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-daw9DiVM.js → Skeleton-D3WGZ8yO.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CmurIxkM.js → Skills-Bv_7HaUW.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-cETA5aPO.js → Sla-crZMKyX0.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-B1llZgu3.js → SpeechSettings-ByWn5XDZ.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DufZ-B2q.js → SyncSettings--R55vxvj.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-PfRLKTFY.js → Tasks-BZA_Via_.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DGtz-vT8.js → Templates-9eJ9yY8Q.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-JeKYLN0b.js → Tenant-CfWX2jqj.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BiMsF2Y0.js → Terminal-CUXUF4kL.js} +2 -2
- package/src/assets/web-panel/assets/TimelineRenderer-77y9bkYN.js +1 -0
- package/src/assets/web-panel/assets/{Tokens-DpIg-0ju.js → Tokens-CvyrdLH6.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DreKHxyb.js → Trigger-MNRl_YNr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D7ByQvBQ.js → Trust-BHOXK-Mp.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-OudyQByy.js → UkeySign-Bz1oZNyQ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BhU6nzCF.js → VideoEditing-DlqmXyZv.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BCEpB6E0.js → Wallet-Dg1rnqEG.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DwjAM5Mr.js → WebAuthn-DJtGeaOk.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-ChQqlAmY.js → WorkflowEditor-DJPubjX5.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CzUKWqTy.js → chat-BWweDuIV.js} +1 -1
- package/src/assets/web-panel/assets/{colors-D3Y_Pvu4.js → colors-BX5ViADF.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-ByyPRfkA.js → compact-item-Df8MLbXp.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Dt5PF6VI.js → createContext-C0FDTwdV.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BgM5vq1s.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BuIaEKuC.js → hasIn-PpL6GdNk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWW5svXU.js → index-7VyVOEf7.js} +1 -1
- package/src/assets/web-panel/assets/{index-NFqKQquS.js → index-B3K1uZ7R.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHzVIQLX.js → index-B4UxFB2N.js} +1 -1
- package/src/assets/web-panel/assets/{index-BztqxXMP.js → index-B8-pSyP7.js} +1 -1
- package/src/assets/web-panel/assets/{index-B600riYP.js → index-B982oUKN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFXZ9lbO.js → index-BF0ERucU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmVY2f7I.js → index-BMIEWinN.js} +1 -1
- package/src/assets/web-panel/assets/{index-EtrWRKu2.js → index-BWSCphaT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DSXjiZAV.js → index-BeFhy4BX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgPKUSe4.js → index-Beh1kLwx.js} +1 -1
- package/src/assets/web-panel/assets/index-Bl-HTXWn.js +1 -0
- package/src/assets/web-panel/assets/{index-D51wU4q-.js → index-C0PqPK-8.js} +1 -1
- package/src/assets/web-panel/assets/{index-Di78LDr8.js → index-C2JU-gdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-_oJnnOnZ.js → index-C8wl7Ica.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZX4_hGp.js → index-C9FOwTgX.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dlec7Sr4.js → index-C9N1u8jV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcqZAAr5.js → index-Cf86RSQk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwlY7Yap.js → index-ChV82mzs.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmrfHS36.js → index-Cj00JSqq.js} +1 -1
- package/src/assets/web-panel/assets/{index-GyTOYTFg.js → index-Cm7vZvA3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DSgroT-P.js → index-CmMzB4C-.js} +3 -3
- package/src/assets/web-panel/assets/{index-BSWTyRhI.js → index-CxY_U5RT.js} +1 -1
- package/src/assets/web-panel/assets/index-Cxf0YfM5.js +1 -0
- package/src/assets/web-panel/assets/{index-COsjgjvP.js → index-D5Ei75Wt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BdvZNMNm.js → index-DBzaRg4E.js} +1 -1
- package/src/assets/web-panel/assets/{index-F-T8AHeo.js → index-DFtzEEYe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxVLI-Iu.js → index-DGLbojjx.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7QSTEjb.js → index-D_6XIMVV.js} +1 -1
- package/src/assets/web-panel/assets/{index-1YgdY0Vq.js → index-DddQd0_V.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cb7MzML-.js → index-DwZkBGXd.js} +1 -1
- package/src/assets/web-panel/assets/{index-gg5zO3aD.js → index-DxJqyIP8.js} +1 -1
- package/src/assets/web-panel/assets/{index-huWw0XBb.js → index-Dy8K2laU.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpAqy6Co.js → index-FAZH69my.js} +1 -1
- package/src/assets/web-panel/assets/{index-CByWkXdO.js → index-NdEUFm32.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO29sPX8.js → index-P1ERNJla.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCBm8_o4.js → index-R0LQ3fgq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAfX0VyL.js → index-UXM5vpt4.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDTS4qJm.js → index-iif2A1eL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFQGN97S.js → index-itNn6pW1.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Bny6G13G.js → initDefaultProps-DeMthvi4.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DRhRj_uM.js → motion-_7kbkzE0.js} +1 -1
- package/src/assets/web-panel/assets/{move-D0wKnhYr.js → move-gCI04pLw.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BXXSTJBk.js → mtc-parser-D5UWHv2U.js} +1 -1
- package/src/assets/web-panel/assets/{omit-d8t9Yze4.js → omit-CDCZcqeS.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-nyB6BMe6.js → pickAttrs-DGMDLi3S.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CSFyBNA2.js → placementArrow-C-3vC1Vh.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DYmiKhJa.js → responsiveObserve-vdoYucvi.js} +1 -1
- package/src/assets/web-panel/assets/{slide-D4KZSRmt.js → slide-B62FhgyZ.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BcrcPeFm.js → statusUtils-DCLlfnym.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BFgOb1vz.js → styleChecker-CGvQ4LRR.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DQ5qSQlN.js → useFlexGapSupport-BqkGoKwe.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Cafq069l.js → useFs-Bkr_nU3q.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DTma9Ary.js → usePersonalDataHub-CYxMIUEq.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-HvC2-bE9.js → vnode-sAbcY1FX.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-AZxADWXu.js → zoom-Dm2pLrXi.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/agent.js +29 -0
- package/src/commands/setup.js +35 -10
- package/src/constants.js +15 -89
- package/src/data/changelog.json +14 -1
- package/src/lib/bm25-search.js +6 -3
- package/src/lib/coding-task-guidance.js +6 -1
- package/src/lib/context-memory-kernel/memory-query-index.js +35 -17
- package/src/lib/goal-check-evidence.js +159 -0
- package/src/lib/goal-condition-engine.js +24 -2
- package/src/lib/llm-connection-probe.js +48 -4
- package/src/lib/llm-onboarding-catalog.json +131 -0
- package/src/lib/skill-retrieval-router.js +2 -1
- package/src/lib/skill-search-tokenizer.js +143 -0
- package/src/repl/agent-repl.js +8 -4
- package/src/runtime/agent-core.js +87 -7
- package/src/runtime/headless-runner.js +138 -66
- package/src/runtime/headless-stream.js +1 -0
- package/src/runtime/mcp-tool-search-ranking.js +142 -0
- package/src/runtime/mcp-tool-search.js +198 -60
- package/src/assets/web-panel/assets/Artifacts-DfxY2Gqs.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CnpWe3dp.js +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BeBovLZs.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-uS1yHX12.js +0 -1
- package/src/assets/web-panel/assets/Projects-DpCaWXv6.js +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-DhcBAGPg.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BgSxkkQ3.js +0 -1
- package/src/assets/web-panel/assets/index-D5v6roiB.js +0 -1
- package/src/assets/web-panel/assets/index-DgXZCvH5.js +0 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "chainlesschain.llm-onboarding-catalog/v1",
|
|
3
|
+
"capabilityCatalogVersion": "2026-10-15",
|
|
4
|
+
"scope": "new-connections",
|
|
5
|
+
"runtimeVerified": false,
|
|
6
|
+
"accountVerified": false,
|
|
7
|
+
"providers": [
|
|
8
|
+
{
|
|
9
|
+
"id": "volcengine",
|
|
10
|
+
"label": "Volcengine / Doubao (volcengine)",
|
|
11
|
+
"cliLabel": "Volcengine (火山引擎/豆包)",
|
|
12
|
+
"baseUrl": "https://ark.cn-beijing.volces.com/api/v3",
|
|
13
|
+
"defaultModel": "deepseek-v4-1-flash-260910",
|
|
14
|
+
"needsKey": true,
|
|
15
|
+
"visionModel": "doubao-seed-2-0-lite-260215"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "ollama",
|
|
19
|
+
"label": "Ollama (local, no key)",
|
|
20
|
+
"cliLabel": "Ollama (本地部署)",
|
|
21
|
+
"baseUrl": "http://localhost:11434",
|
|
22
|
+
"defaultModel": "qwen2.5:7b",
|
|
23
|
+
"needsKey": false,
|
|
24
|
+
"visionModel": ""
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "anthropic",
|
|
28
|
+
"label": "Anthropic Claude",
|
|
29
|
+
"cliLabel": "Anthropic (Claude)",
|
|
30
|
+
"baseUrl": "https://api.anthropic.com/v1",
|
|
31
|
+
"defaultModel": "claude-sonnet-5-5",
|
|
32
|
+
"needsKey": true,
|
|
33
|
+
"visionModel": ""
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "openai",
|
|
37
|
+
"label": "OpenAI",
|
|
38
|
+
"baseUrl": "https://api.openai.com/v1",
|
|
39
|
+
"defaultModel": "gpt-6.1-sol",
|
|
40
|
+
"needsKey": true,
|
|
41
|
+
"visionModel": ""
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "deepseek",
|
|
45
|
+
"label": "DeepSeek",
|
|
46
|
+
"baseUrl": "https://api.deepseek.com/v1",
|
|
47
|
+
"defaultModel": "deepseek-chat",
|
|
48
|
+
"needsKey": true,
|
|
49
|
+
"visionModel": ""
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "dashscope",
|
|
53
|
+
"label": "Aliyun Bailian / Tongyi (dashscope)",
|
|
54
|
+
"cliLabel": "DashScope (阿里通义)",
|
|
55
|
+
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|
56
|
+
"defaultModel": "qwen-max",
|
|
57
|
+
"needsKey": true,
|
|
58
|
+
"visionModel": ""
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "kimi",
|
|
62
|
+
"label": "Moonshot Kimi",
|
|
63
|
+
"cliLabel": "Kimi (月之暗面)",
|
|
64
|
+
"baseUrl": "https://api.moonshot.cn/v1",
|
|
65
|
+
"defaultModel": "moonshot-v1-auto",
|
|
66
|
+
"needsKey": true,
|
|
67
|
+
"visionModel": ""
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "gemini",
|
|
71
|
+
"label": "Google Gemini",
|
|
72
|
+
"baseUrl": "https://generativelanguage.googleapis.com/v1beta",
|
|
73
|
+
"defaultModel": "gemini-2.0-flash",
|
|
74
|
+
"needsKey": true,
|
|
75
|
+
"visionModel": ""
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "mistral",
|
|
79
|
+
"label": "Mistral",
|
|
80
|
+
"cliLabel": "Mistral AI",
|
|
81
|
+
"baseUrl": "https://api.mistral.ai/v1",
|
|
82
|
+
"defaultModel": "mistral-large-latest",
|
|
83
|
+
"needsKey": true,
|
|
84
|
+
"visionModel": ""
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "minimax",
|
|
88
|
+
"label": "MiniMax",
|
|
89
|
+
"cliLabel": "MiniMax (海螺AI)",
|
|
90
|
+
"baseUrl": "https://api.minimax.chat/v1",
|
|
91
|
+
"defaultModel": "MiniMax-Text-01",
|
|
92
|
+
"needsKey": true,
|
|
93
|
+
"visionModel": ""
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "openai-proxy",
|
|
97
|
+
"label": "OpenAI compatible gateway",
|
|
98
|
+
"cliLabel": "OpenAI 中转站 (API2D/CloseAI等)",
|
|
99
|
+
"baseUrl": "",
|
|
100
|
+
"defaultModel": "gpt-4o",
|
|
101
|
+
"needsKey": true,
|
|
102
|
+
"isProxy": true
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "anthropic-proxy",
|
|
106
|
+
"label": "Anthropic compatible gateway",
|
|
107
|
+
"cliLabel": "Anthropic 中转站 (Claude代理)",
|
|
108
|
+
"baseUrl": "",
|
|
109
|
+
"defaultModel": "claude-sonnet-4-6",
|
|
110
|
+
"needsKey": true,
|
|
111
|
+
"isProxy": true
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "gemini-proxy",
|
|
115
|
+
"label": "Gemini compatible gateway",
|
|
116
|
+
"cliLabel": "Gemini 中转站 (Google代理)",
|
|
117
|
+
"baseUrl": "",
|
|
118
|
+
"defaultModel": "gemini-2.0-flash",
|
|
119
|
+
"needsKey": true,
|
|
120
|
+
"isProxy": true
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "custom",
|
|
124
|
+
"label": "Custom provider (vLLM / TGI / compatible service)",
|
|
125
|
+
"cliLabel": "自定义 Provider (自建服务/vLLM/TGI等)",
|
|
126
|
+
"baseUrl": "",
|
|
127
|
+
"defaultModel": "",
|
|
128
|
+
"needsKey": true
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BM25Search } from "./bm25-search.js";
|
|
2
|
+
import { tokenizeSkillSearchText } from "./skill-search-tokenizer.js";
|
|
2
3
|
import { captureSkillRetrievalRevocationReader } from "./evolution/skill-retrieval-revocation-authority.js";
|
|
3
4
|
|
|
4
5
|
export const SKILL_RETRIEVAL_RESULT_SCHEMA =
|
|
@@ -150,7 +151,7 @@ export function routeSkillDescriptors({
|
|
|
150
151
|
admitted.push({ skill, digest });
|
|
151
152
|
}
|
|
152
153
|
|
|
153
|
-
const bm25 = new BM25Search({
|
|
154
|
+
const bm25 = new BM25Search({ tokenizer: tokenizeSkillSearchText });
|
|
154
155
|
bm25.indexDocuments(
|
|
155
156
|
admitted.map(({ skill, digest }) => ({
|
|
156
157
|
id: digest,
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// Descriptor retrieval only. Skill bodies and execution admission never enter
|
|
2
|
+
// this tokenizer. Keep the generic RAG tokenizer unchanged.
|
|
3
|
+
const segmenter = new Intl.Segmenter("zh", { granularity: "word" });
|
|
4
|
+
const stopWords = new Set([
|
|
5
|
+
"a",
|
|
6
|
+
"an",
|
|
7
|
+
"the",
|
|
8
|
+
"is",
|
|
9
|
+
"are",
|
|
10
|
+
"was",
|
|
11
|
+
"were",
|
|
12
|
+
"be",
|
|
13
|
+
"been",
|
|
14
|
+
"being",
|
|
15
|
+
"have",
|
|
16
|
+
"has",
|
|
17
|
+
"had",
|
|
18
|
+
"do",
|
|
19
|
+
"does",
|
|
20
|
+
"did",
|
|
21
|
+
"will",
|
|
22
|
+
"would",
|
|
23
|
+
"could",
|
|
24
|
+
"should",
|
|
25
|
+
"may",
|
|
26
|
+
"might",
|
|
27
|
+
"shall",
|
|
28
|
+
"can",
|
|
29
|
+
"to",
|
|
30
|
+
"of",
|
|
31
|
+
"in",
|
|
32
|
+
"for",
|
|
33
|
+
"on",
|
|
34
|
+
"with",
|
|
35
|
+
"at",
|
|
36
|
+
"by",
|
|
37
|
+
"from",
|
|
38
|
+
"as",
|
|
39
|
+
"into",
|
|
40
|
+
"through",
|
|
41
|
+
"during",
|
|
42
|
+
"before",
|
|
43
|
+
"after",
|
|
44
|
+
"above",
|
|
45
|
+
"below",
|
|
46
|
+
"between",
|
|
47
|
+
"but",
|
|
48
|
+
"and",
|
|
49
|
+
"or",
|
|
50
|
+
"not",
|
|
51
|
+
"no",
|
|
52
|
+
"nor",
|
|
53
|
+
"so",
|
|
54
|
+
"if",
|
|
55
|
+
"then",
|
|
56
|
+
"than",
|
|
57
|
+
"too",
|
|
58
|
+
"very",
|
|
59
|
+
"just",
|
|
60
|
+
"about",
|
|
61
|
+
"up",
|
|
62
|
+
"out",
|
|
63
|
+
"it",
|
|
64
|
+
"its",
|
|
65
|
+
"this",
|
|
66
|
+
"that",
|
|
67
|
+
"these",
|
|
68
|
+
"those",
|
|
69
|
+
"i",
|
|
70
|
+
"me",
|
|
71
|
+
"my",
|
|
72
|
+
"we",
|
|
73
|
+
"our",
|
|
74
|
+
"you",
|
|
75
|
+
"your",
|
|
76
|
+
"he",
|
|
77
|
+
"him",
|
|
78
|
+
"his",
|
|
79
|
+
"she",
|
|
80
|
+
"her",
|
|
81
|
+
"they",
|
|
82
|
+
"them",
|
|
83
|
+
"their",
|
|
84
|
+
"what",
|
|
85
|
+
"which",
|
|
86
|
+
"please",
|
|
87
|
+
"help",
|
|
88
|
+
"请",
|
|
89
|
+
"请问",
|
|
90
|
+
"帮",
|
|
91
|
+
"帮我",
|
|
92
|
+
"我",
|
|
93
|
+
"我要",
|
|
94
|
+
"需要",
|
|
95
|
+
"如何",
|
|
96
|
+
"怎么",
|
|
97
|
+
"一下",
|
|
98
|
+
"一个",
|
|
99
|
+
"的",
|
|
100
|
+
"在",
|
|
101
|
+
"中",
|
|
102
|
+
"和",
|
|
103
|
+
"并",
|
|
104
|
+
"给",
|
|
105
|
+
"为",
|
|
106
|
+
"从",
|
|
107
|
+
"将",
|
|
108
|
+
"把",
|
|
109
|
+
"进行",
|
|
110
|
+
"可以",
|
|
111
|
+
"使用",
|
|
112
|
+
]);
|
|
113
|
+
|
|
114
|
+
export function tokenizeSkillSearchText(text) {
|
|
115
|
+
if (typeof text !== "string" || !text) return [];
|
|
116
|
+
const unicodeNormalized = text.normalize("NFKC");
|
|
117
|
+
const identifiers = [];
|
|
118
|
+
for (const part of segmenter.segment(unicodeNormalized)) {
|
|
119
|
+
if (
|
|
120
|
+
part.isWordLike &&
|
|
121
|
+
/_|[\p{Ll}\p{N}]\p{Lu}|\p{Lu}\p{Lu}\p{Ll}/u.test(part.segment)
|
|
122
|
+
) {
|
|
123
|
+
identifiers.push(part.segment.toLowerCase());
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Split acronym and camel-case boundaries before lowercasing; punctuation
|
|
127
|
+
// already separates kebab/snake identifiers in the word segmenter.
|
|
128
|
+
const normalized = unicodeNormalized
|
|
129
|
+
.replace(/([\p{Lu}])([\p{Lu}][\p{Ll}])/gu, "$1 $2")
|
|
130
|
+
.replace(/([\p{Ll}\p{N}])([\p{Lu}])/gu, "$1 $2")
|
|
131
|
+
.toLowerCase();
|
|
132
|
+
const tokens = [];
|
|
133
|
+
for (const part of segmenter.segment(normalized)) {
|
|
134
|
+
if (!part.isWordLike) continue;
|
|
135
|
+
// Intl keeps snake_case as a single word, while user queries use spaces.
|
|
136
|
+
for (const word of part.segment.split("_")) {
|
|
137
|
+
if (word && !stopWords.has(word)) tokens.push(word);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Retain literal compound names too, so lowercase exact-name searches still
|
|
141
|
+
// work after adding their natural-language word boundaries.
|
|
142
|
+
return [...tokens, ...identifiers];
|
|
143
|
+
}
|
package/src/repl/agent-repl.js
CHANGED
|
@@ -4430,11 +4430,15 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
4430
4430
|
// for this session via the shared mcp-config engine. Holds {mcpClient,
|
|
4431
4431
|
// extraToolDefinitions, externalToolExecutors, externalToolDescriptors}.
|
|
4432
4432
|
let _adhocMcp = null;
|
|
4433
|
+
let _projectMcpToolDefinitions = (definitions) => definitions;
|
|
4433
4434
|
const _persistReplContextSources = () => {
|
|
4434
4435
|
if (!useJsonl || !sessionId) return false;
|
|
4435
4436
|
_replSkillCacheLedger =
|
|
4436
4437
|
_replSkillLoader.getCacheLedger?.() || _replSkillCacheLedger;
|
|
4437
|
-
const mcpDefinitions =
|
|
4438
|
+
const mcpDefinitions = _projectMcpToolDefinitions(
|
|
4439
|
+
_adhocMcp?.extraToolDefinitions || [],
|
|
4440
|
+
_adhocMcp?.externalToolExecutors,
|
|
4441
|
+
);
|
|
4438
4442
|
if (
|
|
4439
4443
|
mcpDefinitions.length === 0 &&
|
|
4440
4444
|
_loadedReplPersonaSkills.length === 0 &&
|
|
@@ -4656,9 +4660,9 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
4656
4660
|
// MCP tool search (context scaling): defer big tool schemas behind the
|
|
4657
4661
|
// internal tool_search tool. Below-threshold / disabled → no-op.
|
|
4658
4662
|
try {
|
|
4659
|
-
const { maybeApplyToolSearch } =
|
|
4660
|
-
"../runtime/mcp-tool-search.js"
|
|
4661
|
-
|
|
4663
|
+
const { maybeApplyToolSearch, projectMcpToolDefinitions } =
|
|
4664
|
+
await import("../runtime/mcp-tool-search.js");
|
|
4665
|
+
_projectMcpToolDefinitions = projectMcpToolDefinitions;
|
|
4662
4666
|
const ts = maybeApplyToolSearch(_adhocMcp, {
|
|
4663
4667
|
model,
|
|
4664
4668
|
provider,
|
|
@@ -65,7 +65,10 @@ import {
|
|
|
65
65
|
copyHostToolOutputIdentity,
|
|
66
66
|
} from "../lib/tool-result-preview.js";
|
|
67
67
|
import { DIAGNOSTIC_WORKFLOW_GUIDANCE } from "../lib/diagnostic-workflow.js";
|
|
68
|
-
import {
|
|
68
|
+
import {
|
|
69
|
+
CODING_TASK_QUALITY_GUIDANCE,
|
|
70
|
+
CODING_CHANGE_REVIEW_PROMPT,
|
|
71
|
+
} from "../lib/coding-task-guidance.js";
|
|
69
72
|
import { RemoteReadLoopGuard } from "../lib/remote-read-loop-guard.js";
|
|
70
73
|
import {
|
|
71
74
|
isPrActionRequest,
|
|
@@ -198,7 +201,11 @@ import {
|
|
|
198
201
|
toOllamaMessages,
|
|
199
202
|
imageUrlBlockToAnthropic,
|
|
200
203
|
} from "../lib/image-input.js";
|
|
201
|
-
import {
|
|
204
|
+
import {
|
|
205
|
+
executeToolSearch,
|
|
206
|
+
gateDeferredMcpCall,
|
|
207
|
+
projectMcpToolDefinitions,
|
|
208
|
+
} from "./mcp-tool-search.js";
|
|
202
209
|
import {
|
|
203
210
|
emitHooksV2Event,
|
|
204
211
|
executeHooksV2Event,
|
|
@@ -9669,7 +9676,9 @@ async function executeToolInner(
|
|
|
9669
9676
|
// local — same risk class as list_skills, so no approval gate.
|
|
9670
9677
|
if (localToolExecutor?.kind === "tool-search") {
|
|
9671
9678
|
return attachDescriptor(
|
|
9672
|
-
executeToolSearch(localToolExecutor.registry, args || {}
|
|
9679
|
+
executeToolSearch(localToolExecutor.registry, args || {}, {
|
|
9680
|
+
allowedToolNames: effectiveAllowedToolNames,
|
|
9681
|
+
}),
|
|
9673
9682
|
);
|
|
9674
9683
|
}
|
|
9675
9684
|
|
|
@@ -12010,6 +12019,13 @@ function getEffectiveToolDefinitions(options = {}) {
|
|
|
12010
12019
|
});
|
|
12011
12020
|
}
|
|
12012
12021
|
|
|
12022
|
+
function getProviderToolDefinitions(options = {}) {
|
|
12023
|
+
return projectMcpToolDefinitions(
|
|
12024
|
+
getEffectiveToolDefinitions(options),
|
|
12025
|
+
options.externalToolExecutors,
|
|
12026
|
+
);
|
|
12027
|
+
}
|
|
12028
|
+
|
|
12013
12029
|
const PROVIDER_REQUEST_ID_RE = /^[\x21-\x7e]{1,512}$/;
|
|
12014
12030
|
|
|
12015
12031
|
function _normalizeProviderRequestId(value) {
|
|
@@ -12109,7 +12125,7 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
12109
12125
|
options.providerRequestId,
|
|
12110
12126
|
);
|
|
12111
12127
|
|
|
12112
|
-
let tools =
|
|
12128
|
+
let tools = getProviderToolDefinitions(options);
|
|
12113
12129
|
if (Array.isArray(options.contextMemorySelectedToolNames)) {
|
|
12114
12130
|
const selected = new Set(options.contextMemorySelectedToolNames);
|
|
12115
12131
|
tools = tools.filter((tool) => selected.has(tool?.function?.name));
|
|
@@ -14704,6 +14720,9 @@ export async function* agentLoop(messages, options) {
|
|
|
14704
14720
|
// obligation outside transcript compaction and never replay it automatically.
|
|
14705
14721
|
const pendingSubtreeMutations = new Map();
|
|
14706
14722
|
let subtreeMutationReprompted = false;
|
|
14723
|
+
let hasFileContentChanges = false;
|
|
14724
|
+
// Headless outer turns share this object; a new user turn gets a fresh one.
|
|
14725
|
+
const changeReviewState = options._changeReviewState || { requested: false };
|
|
14707
14726
|
const recordSubtreeMutation = (tool, args, result) => {
|
|
14708
14727
|
if (!GUARDED_FILE_MUTATION_TOOLS.has(tool)) return;
|
|
14709
14728
|
if (!args || typeof args !== "object" || Array.isArray(args)) return;
|
|
@@ -14747,6 +14766,7 @@ export async function* agentLoop(messages, options) {
|
|
|
14747
14766
|
result.mutationPerformed !== false
|
|
14748
14767
|
) {
|
|
14749
14768
|
pendingSubtreeMutations.delete(key);
|
|
14769
|
+
if (effect === "file-content") hasFileContentChanges = true;
|
|
14750
14770
|
}
|
|
14751
14771
|
};
|
|
14752
14772
|
const signal = options.signal || null;
|
|
@@ -16209,7 +16229,7 @@ export async function* agentLoop(messages, options) {
|
|
|
16209
16229
|
{
|
|
16210
16230
|
...options,
|
|
16211
16231
|
contextMemoryToolDefinitions:
|
|
16212
|
-
|
|
16232
|
+
getProviderToolDefinitions(iterationToolOptions),
|
|
16213
16233
|
contextMemoryTrustedSystemIndexes,
|
|
16214
16234
|
},
|
|
16215
16235
|
);
|
|
@@ -16237,15 +16257,29 @@ export async function* agentLoop(messages, options) {
|
|
|
16237
16257
|
"model",
|
|
16238
16258
|
budget.consumed,
|
|
16239
16259
|
);
|
|
16260
|
+
// A review may replace the first completion. Keep streaming transport but
|
|
16261
|
+
// discard live text/thinking in this opt-in mode; only the accepted final
|
|
16262
|
+
// response is published. This avoids concatenating drafts in IDE clients
|
|
16263
|
+
// without buffering unbounded provider output or changing the protocol.
|
|
16264
|
+
const outputOptions =
|
|
16265
|
+
options.reviewChanges === true
|
|
16266
|
+
? {
|
|
16267
|
+
...iterationToolOptions,
|
|
16268
|
+
onToken:
|
|
16269
|
+
typeof options.onToken === "function" ? () => {} : undefined,
|
|
16270
|
+
onThinking:
|
|
16271
|
+
typeof options.onThinking === "function" ? () => {} : undefined,
|
|
16272
|
+
}
|
|
16273
|
+
: iterationToolOptions;
|
|
16240
16274
|
const plannedProviderOptions = canonicalProviderContext?.plan
|
|
16241
16275
|
? {
|
|
16242
|
-
...
|
|
16276
|
+
...outputOptions,
|
|
16243
16277
|
contextEngine: null,
|
|
16244
16278
|
contextMemoryPreplanned: true,
|
|
16245
16279
|
contextMemorySelectedToolNames:
|
|
16246
16280
|
canonicalProviderContext.selectedToolNames,
|
|
16247
16281
|
}
|
|
16248
|
-
:
|
|
16282
|
+
: outputOptions;
|
|
16249
16283
|
const requestOptions = providerRequestId
|
|
16250
16284
|
? { ...plannedProviderOptions, providerRequestId }
|
|
16251
16285
|
: plannedProviderOptions;
|
|
@@ -16258,6 +16292,23 @@ export async function* agentLoop(messages, options) {
|
|
|
16258
16292
|
? { ...requestOptions, evolutionIngress }
|
|
16259
16293
|
: requestOptions),
|
|
16260
16294
|
};
|
|
16295
|
+
const originalExtraTools = requestOptions.extraToolDefinitions;
|
|
16296
|
+
if (Array.isArray(originalExtraTools)) {
|
|
16297
|
+
const projectedExtraTools = projectMcpToolDefinitions(
|
|
16298
|
+
originalExtraTools,
|
|
16299
|
+
requestOptions.externalToolExecutors,
|
|
16300
|
+
);
|
|
16301
|
+
if (projectedExtraTools !== originalExtraTools) {
|
|
16302
|
+
const admittedNames = new Set(
|
|
16303
|
+
getEffectiveToolDefinitions(requestOptions).map(
|
|
16304
|
+
(tool) => tool.function.name,
|
|
16305
|
+
),
|
|
16306
|
+
);
|
|
16307
|
+
providerCallOptions.extraToolDefinitions = projectedExtraTools.filter(
|
|
16308
|
+
(tool) => admittedNames.has(tool.function.name),
|
|
16309
|
+
);
|
|
16310
|
+
}
|
|
16311
|
+
}
|
|
16261
16312
|
const modelUsageCall = {
|
|
16262
16313
|
type: "model-usage-started",
|
|
16263
16314
|
callId: _newModelUsageCallId("model"),
|
|
@@ -16414,6 +16465,7 @@ export async function* agentLoop(messages, options) {
|
|
|
16414
16465
|
contextWindow: requestContextWindow,
|
|
16415
16466
|
};
|
|
16416
16467
|
} else {
|
|
16468
|
+
changeReviewState.usageKnown = false;
|
|
16417
16469
|
yield {
|
|
16418
16470
|
type: "model-usage-unknown",
|
|
16419
16471
|
callId: modelUsageCall.callId,
|
|
@@ -16602,6 +16654,34 @@ export async function* agentLoop(messages, options) {
|
|
|
16602
16654
|
};
|
|
16603
16655
|
return;
|
|
16604
16656
|
}
|
|
16657
|
+
// Opt-in review uses the same loop, tools, usage settlement and budget.
|
|
16658
|
+
// Never emit a provisional completion or turn this self-check into an
|
|
16659
|
+
// acceptance verdict. Failed/deferred writes do not arm the review.
|
|
16660
|
+
if (
|
|
16661
|
+
options.reviewChanges === true &&
|
|
16662
|
+
hasFileContentChanges &&
|
|
16663
|
+
!changeReviewState.requested &&
|
|
16664
|
+
changeReviewState.usageKnown !== false &&
|
|
16665
|
+
budget.hasRemaining()
|
|
16666
|
+
) {
|
|
16667
|
+
throwIfAborted(signal);
|
|
16668
|
+
changeReviewState.requested = true;
|
|
16669
|
+
messages.push(
|
|
16670
|
+
markRuntimeOnlySessionMessage({
|
|
16671
|
+
role: "assistant",
|
|
16672
|
+
content: msg.content || "",
|
|
16673
|
+
}),
|
|
16674
|
+
markRuntimeOnlySessionMessage({
|
|
16675
|
+
role: "user",
|
|
16676
|
+
content: CODING_CHANGE_REVIEW_PROMPT,
|
|
16677
|
+
}),
|
|
16678
|
+
);
|
|
16679
|
+
yield {
|
|
16680
|
+
type: "iteration-warning",
|
|
16681
|
+
message: "Reviewing changed files against the task before finishing.",
|
|
16682
|
+
};
|
|
16683
|
+
continue;
|
|
16684
|
+
}
|
|
16605
16685
|
// Surface the final answer's extended-thinking reasoning (Anthropic, when
|
|
16606
16686
|
// --think is on) so non-streaming consumers (the REPL) can show it. The
|
|
16607
16687
|
// streaming path forwards reasoning live via onThinking instead.
|