chainlesschain 0.166.106 → 0.166.107
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 +179 -4
- package/package.json +2 -2
- 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-CKwEku2e.js → AIOps-DCx6L_HW.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BSUOuTpW.js → ActionButton-DYm1CN3Z.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CGxvL_FI.js → Analytics-D5ItUS_y.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-bCPwz-5w.js → AppLayout-Cb7XeRdH.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-2_BOWo6e.js → Artifacts-DDDeqCDQ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CBOruzgW.js → Audit-BRt3x13w.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-lg0IU5HN.js → BackgroundAgents-C_oNALMd.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-OspCi452.js → Backup-PSU2p6CR.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BMkliqlz.js → BaseInput-G3oL4hcX.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BfoiUZwp.js → Chat-C2cLI10b.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BjnfMwep.js → ChatBubbleRenderer-KX1OITf8.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-jTMlkNQZ.js → Checkbox-CHLnEgFD.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CycyJcnU.js → Codegen-DZm9g_Bc.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BVWlReQj.js → Col-D5Z4zSay.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CKRHl4xK.js → Community-DHw69NSk.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BtpfMdhT.js → Compact-B-vjYNWz.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DtHB1Ct1.js → Compliance-DaIYVZQY.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-D_8X7-RK.js → Cowork-CoA9U-gF.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DMCOyvEa.js → Cron-DXqmxlRC.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CeHdsu7m.js → Crosschain-Cdkc3ue1.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CL6mR6zX.js → DID-oKfYyNSR.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-oz9n6DC7.js → Dashboard-n_ycvgWu.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CbWm8mWu.js → Dropdown-D38rZ8WY.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DXlmbC45.js → EmailListRenderer-BjreeBQ1.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-DPwqgRYm.js → EvolutionSettings-CTxA_SIq.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DkV4YMFj.js → FamilyGuardDashboard-DmECNwV5.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CpUKHIOH.js → Federation-B2IaaDmQ.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-C6KXRgjR.js → FormItemContext-DgcgqUIk.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-C5Y4L5E3.js → GenericCardRenderer-B1-du6Qm.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CBwKdF8s.js → Git-XceM21Il.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Dt-OR7Aa.js → Governance-CV97iz3z.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-Czkl-Lhl.js → Inference-CI7fj305.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-C7NE4949.js → KnowledgeGraph-B5mekWRy.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CoAuZiMG.js → Logs-BlxFA0xY.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DTkjTwGI.js → MarkdownRenderer-rDE-XyMY.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-IzrV-7zH.js → Marketplace-DL1BVCiX.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DYEea7aS.js → McpTools-BPtwrO3c.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-Uqe7ZrV6.js → Memory-DuSNw4E-.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D092EGyM.js → MobileBridge-DTgY9ywI.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CwA1VoVJ.js → MobileProjects-CTpVHJMa.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-gg4jzfB-.js → Mtc-h4fCLjXw.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-BibGfs71.js → MtcAudit-fqMDY3-w.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BmB5yRXP.js → Multisig-Do3FehBL.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BBSlPDyY.js → NLProgramming-CQVY0kQF.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Bui3-KiC.js → Notes-4c3oNvWh.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-ovXtbHe5.js → NotificationSettings-BKr2JD4k.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Bq-qD7eG.js → OrderTableRenderer-Bq4jgzRt.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DacIY9oJ.js → Organization-Dy3XidyA.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CX8osheZ.js → Overflow-DFF0qN5K.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-1lnikqVp.js → P2P-DAgYYykd.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DCrU-V6A.js → PdhVaultBrowser-DgNHa8b1.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-Dfcb6kM2.js → Permissions-Cev6uSBc.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-dvgai4hf.js → PersonalDataHub-DJzbN06K.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-nymAEtnK.js → Pipeline-CoJWvbQ5.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-D0Vd91oM.js → Privacy-DZxV6etm.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BpUBcu7o.js → ProjectInit-BFW87JnM.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DIzwTT-M.js → ProjectSettings-LBrRT27p.js} +2 -2
- package/src/assets/web-panel/assets/Projects-O3uz76R1.js +1 -0
- package/src/assets/web-panel/assets/{Providers-Cq8p-M0d.js → Providers-CnRbjOYk.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DSmqOfYk.js → QrScannerModal-BVFnIS3r.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BDHCeSnA.js → QuickAsk-DrcHx5f1.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B_9M8oF4.js → Recommend-CbRgrSJm.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-5ot4leHy.js → RemoteSession-B2Uz_ElB.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-B3F013PY.js → Reputation-DS0ljTxL.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BMyBJnZw.js → Row-ClLobFht.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-WmV0l52g.js → RssFeed-DxxcTD0x.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Wl80yXnR.js → Search-BbHN0Fik.js} +1 -1
- package/src/assets/web-panel/assets/{Security-gbDMKb5m.js → Security-BAVU_EcY.js} +4 -4
- package/src/assets/web-panel/assets/{Services-Bx2Bjhah.js → Services-CtqRSVq_.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BvJNybjV.js → Skeleton-IJ8ZKdSZ.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Tz4rQcDp.js → Skills-DXxcznnO.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BM9gyZwc.js → Sla-fRkhnA3i.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Bu9FL9Tz.js → SpeechSettings-Bi8sYJ-I.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-D8ICJsMt.js → SyncSettings-CjeplUtS.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-B6MowBDo.js → Tasks-D4KB2Hbx.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BJzpTD0W.js → Templates-BwVugi8n.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BN8eX4R2.js → Tenant-CsPuu5xK.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CjtP9bpq.js → Terminal-DuaeOPjY.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CpNRa4XW.js → TimelineRenderer-D-PMrFxO.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-2lNNvNAH.js → Tokens-BXZuiQPZ.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DxtxXyPg.js → Trigger-DgpTaHL3.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CakzGeF9.js → Trust-Bn7lEGRY.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CvJeRXwV.js → UkeySign-zz-8JAAQ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-D80pMzcO.js → VideoEditing-DCzfQGTc.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BF-VOBmZ.js → Wallet-BiRHM_zB.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DXyoAzE_.js → WebAuthn-QmPo2JwU.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-X6CDxzrF.js → WorkflowEditor-gL7SsPnY.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BcUhqjeA.js → chat-BysvK4hk.js} +1 -1
- package/src/assets/web-panel/assets/{colors-Dw4bKaCm.js → colors-CQq20vqN.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BWhu5Eri.js → compact-item-CAHlOf1X.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BLJ9JKoN.js → createContext-BeF3ESj_.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-D-Iugqxv.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DIkCiJbt.js → hasIn-CiqnRf-U.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgsVg5Up.js → index-4a0Lmz_y.js} +1 -1
- package/src/assets/web-panel/assets/index-B0Oz2_rQ.js +1 -0
- package/src/assets/web-panel/assets/{index-CFGOV-YT.js → index-B2AOvjgR.js} +1 -1
- package/src/assets/web-panel/assets/{index-BipG-tDs.js → index-B2xbtl_c.js} +1 -1
- package/src/assets/web-panel/assets/{index-0mHbawfQ.js → index-B5941vyo.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaStonJm.js → index-BHpHGGmB.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cmc7qH2C.js → index-BOiyW31p.js} +1 -1
- package/src/assets/web-panel/assets/{index-BotMuGS2.js → index-BcVmt6u_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcTch6Fp.js → index-BfJabF_8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXJ8t1hK.js → index-Br5tGVbC.js} +1 -1
- package/src/assets/web-panel/assets/{index-u0tqS0iq.js → index-BsnLkZjz.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1r2R4a-.js → index-BtWchYfW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DOjQi7oU.js → index-Bvkbj3x-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAwcMKaD.js → index-CCX0daFQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-Erv8A9.js → index-CImCEo8S.js} +1 -1
- package/src/assets/web-panel/assets/{index-CTPoBbIR.js → index-CTp89vmg.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqGqoID5.js → index-CcccefJc.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQbWGvE4.js → index-CeIL3-nY.js} +1 -1
- package/src/assets/web-panel/assets/{index-uMtx6e3D.js → index-CgkUkmEJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-5vzPcr1g.js → index-CowbNBJs.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDfB6hWf.js → index-Cp3IRTDK.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1fufz1A.js → index-D7q5VH2n.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV4FSjmI.js → index-DBmGQHEz.js} +3 -3
- package/src/assets/web-panel/assets/{index-04SKBH8l.js → index-DHGtFwwR.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxLDNxEQ.js → index-DKYbru3i.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKzG3kBM.js → index-DTPUVm71.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHLW27Je.js → index-DXT7MKkD.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGFqk1-E.js → index-DXsXhR7p.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUC4TZWg.js → index-Dqkls2_6.js} +1 -1
- package/src/assets/web-panel/assets/index-DwoycEQa.js +1 -0
- package/src/assets/web-panel/assets/{index-BxfimJOH.js → index-QALafVsT.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cr05twNa.js → index-TdVEaJfk.js} +1 -1
- package/src/assets/web-panel/assets/{index-LOsZYbic.js → index-ZBuJ6O6g.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5qms36i.js → index-i9aJV9qk.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3wp_jgy.js → index-jJhemX1R.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjEP26Te.js → index-qjaCk1Mj.js} +1 -1
- package/src/assets/web-panel/assets/{index-PRYboDFm.js → index-xwtRrgVY.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5vFJmmX.js → index-yFQWSRoW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGMzh2oj.js → index-zNkw0IY7.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Bx6Hj_FG.js → initDefaultProps-BQR2HnKb.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BSWivB70.js → motion-gAz6l-nZ.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dv1Pg9R7.js → move-Cy5TN856.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Bqtl8fsk.js → mtc-parser-BeT7VrGi.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DpOBjOSQ.js → omit-BLN3mlgK.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D-M-dz48.js → pickAttrs-DtwZ8u2d.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DsTLAifk.js → placementArrow-ViMwQSa-.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BVTetMpc.js → responsiveObserve-dEL3u4E7.js} +1 -1
- package/src/assets/web-panel/assets/{slide-abEcz-Cv.js → slide-l05us-Gz.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CBhrdU2G.js → statusUtils-Bk-Qn2Og.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CFq8ZCKa.js → styleChecker-Bn186qeY.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-o4eE7fDV.js → useFlexGapSupport-WP-ugR3H.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Hs9W8ihi.js → useFs-1SvoeSCL.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Bnet5Jho.js → usePersonalDataHub-CfNU8N3z.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DJfN4kWs.js → vnode-Bd2Ya101.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BzV-2e7X.js → zoom-Def_MeZv.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +2 -2
- package/src/commands/agent.js +20 -20
- package/src/commands/goal.js +299 -1
- package/src/commands/plugin.js +129 -68
- package/src/constants.js +2 -2
- package/src/data/changelog.json +13 -0
- package/src/lib/cli-goal-catalog.js +129 -0
- package/src/lib/cli-goal-source.js +119 -0
- package/src/lib/config-schema.js +1 -1
- package/src/lib/eval/stream-terminal.js +27 -2
- package/src/lib/evolution/evolution-artifact-ports.js +22 -11
- package/src/lib/evolution/evolution-file-witness.js +86 -63
- package/src/lib/evolution/evolution-ledger-file-backend.js +22 -0
- package/src/lib/evolution/evolution-ledger-file-manifest-catalog.js +34 -35
- package/src/lib/evolution/evolution-ledger-file-manifest-head-store.js +32 -39
- package/src/lib/evolution/evolution-ledger.js +367 -169
- package/src/lib/evolution/evolution-manifest-state-reader.js +58 -0
- package/src/lib/evolution/evolution-physical-state-reader.js +308 -0
- package/src/lib/evolution/evolution-witness-segments.js +12 -13
- package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +82 -56
- package/src/lib/evolution/rrsi-observed-text-index.js +17 -1
- package/src/lib/evolution/rrsi-tenant-index-anchor-history.js +5 -0
- package/src/lib/execution-location-failure-site.js +20 -3
- package/src/lib/goal-store.js +8 -1
- package/src/lib/image-input.js +43 -14
- package/src/lib/llm-providers.js +1 -0
- package/src/lib/plugin-runtime/capabilities.js +10 -0
- package/src/lib/plugin-runtime/cli-goal-draft-request.js +138 -0
- package/src/lib/plugin-runtime/cli-goal-drafts.js +413 -0
- package/src/lib/plugin-runtime/cli-goal-extension-host.js +234 -0
- package/src/lib/plugin-runtime/examples/goal-description-drafter/plugin.json +17 -0
- package/src/lib/plugin-runtime/examples/goal-evidence-viewer/plugin.json +25 -0
- package/src/lib/plugin-runtime/examples/goal-progress-viewer/plugin.json +21 -0
- package/src/lib/plugin-runtime/examples/project-delivery-assistant/plugin.json +38 -0
- package/src/lib/plugin-runtime/goal-extension-contract.js +190 -0
- package/src/lib/plugin-runtime/goal-extensions.js +277 -0
- package/src/lib/plugin-runtime/install.js +40 -40
- package/src/lib/plugin-runtime/manifest.js +12 -0
- package/src/lib/plugin-runtime/policy.js +1 -0
- package/src/lib/project-goal-connection.js +225 -0
- package/src/lib/project-goal-draft-connection.js +217 -0
- package/src/lib/task-model-selector.js +1 -1
- package/src/repl/agent-repl.js +14 -7
- package/src/repl/config-summary.js +1 -1
- package/src/runtime/agent-core.js +1 -1
- package/src/runtime/headless-stream.js +4 -6
- package/src/runtime/policies/agent-policy.js +1 -0
- package/src/assets/web-panel/assets/Projects-Den4RUw6.js +0 -1
- package/src/assets/web-panel/assets/devWarning-D_MJgDGJ.js +0 -1
- package/src/assets/web-panel/assets/index-BP8log78.js +0 -1
- package/src/assets/web-panel/assets/index-PexF9zYf.js +0 -1
package/src/commands/plugin.js
CHANGED
|
@@ -169,10 +169,12 @@ async function fetchRegistryRemoteArtifacts(
|
|
|
169
169
|
: null;
|
|
170
170
|
if (!signature && !sbom) return null;
|
|
171
171
|
const config = await loadOptionalPluginConfig();
|
|
172
|
-
const { resolveRegistryToken } =
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
const { resolveRegistryToken } = await import(
|
|
173
|
+
"../lib/plugin-runtime/remote-source.js"
|
|
174
|
+
);
|
|
175
|
+
const { fetchPluginMarketplaceRemoteArtifacts } = await import(
|
|
176
|
+
"../lib/plugin-runtime/marketplace-remote-artifacts.js"
|
|
177
|
+
);
|
|
176
178
|
return fetchPluginMarketplaceRemoteArtifacts({
|
|
177
179
|
registryUrl,
|
|
178
180
|
token: resolveRegistryToken(registryUrl, { token, config }),
|
|
@@ -432,8 +434,9 @@ async function materializeRegistrySelection(
|
|
|
432
434
|
|
|
433
435
|
async function buildRegistryInstallPreflight(url, resolved, cwd) {
|
|
434
436
|
const { VERSION } = await import("../constants.js");
|
|
435
|
-
const { buildPluginMarketplaceInstallPreflight } =
|
|
436
|
-
|
|
437
|
+
const { buildPluginMarketplaceInstallPreflight } = await import(
|
|
438
|
+
"../lib/plugin-runtime/marketplace-catalog.js"
|
|
439
|
+
);
|
|
437
440
|
const installed = await discoverInstalledPluginVersions(cwd);
|
|
438
441
|
return buildPluginMarketplaceInstallPreflight({
|
|
439
442
|
registryUrl: url,
|
|
@@ -582,8 +585,9 @@ async function installedCatalogAuthorityMatches(
|
|
|
582
585
|
}
|
|
583
586
|
|
|
584
587
|
async function buildInstalledMarketplaceSnapshot(name, scope, cwd) {
|
|
585
|
-
const { listInstalled, readSourceMetadataStrict } =
|
|
586
|
-
|
|
588
|
+
const { listInstalled, readSourceMetadataStrict } = await import(
|
|
589
|
+
"../lib/plugin-runtime/install.js"
|
|
590
|
+
);
|
|
587
591
|
const { discoverPlugins } = await import("../lib/plugin-runtime/scopes.js");
|
|
588
592
|
const row = listInstalled({ cwd, scopes: [scope] }).find(
|
|
589
593
|
(candidate) => candidate.name === name && candidate.scope === scope,
|
|
@@ -708,10 +712,12 @@ async function buildInstalledMarketplaceSnapshot(name, scope, cwd) {
|
|
|
708
712
|
}
|
|
709
713
|
|
|
710
714
|
async function buildRegistryUpdateImpact(preflight, name, scope, cwd) {
|
|
711
|
-
const { buildPluginMarketplaceUpdateImpact } =
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
+
const { buildPluginMarketplaceUpdateImpact } = await import(
|
|
716
|
+
"../lib/plugin-runtime/marketplace-impact.js"
|
|
717
|
+
);
|
|
718
|
+
const { listInstalledAllScopes } = await import(
|
|
719
|
+
"../lib/plugin-runtime/install.js"
|
|
720
|
+
);
|
|
715
721
|
const inventory = listInstalledAllScopes({ cwd }).filter(
|
|
716
722
|
(entry) => entry.name === name,
|
|
717
723
|
);
|
|
@@ -752,8 +758,9 @@ async function resolvePluginCapabilityNotice(
|
|
|
752
758
|
) {
|
|
753
759
|
try {
|
|
754
760
|
const { discoverPlugins } = await import("../lib/plugin-runtime/scopes.js");
|
|
755
|
-
const { describeCapabilities } =
|
|
756
|
-
|
|
761
|
+
const { describeCapabilities } = await import(
|
|
762
|
+
"../lib/plugin-runtime/capabilities.js"
|
|
763
|
+
);
|
|
757
764
|
const consent = await import("../lib/plugin-runtime/capability-consent.js");
|
|
758
765
|
const installed = discoverPlugins({
|
|
759
766
|
cwd,
|
|
@@ -1140,8 +1147,9 @@ export function registerPluginCommand(program) {
|
|
|
1140
1147
|
.action(async (name, options) => {
|
|
1141
1148
|
try {
|
|
1142
1149
|
if (options.scope) {
|
|
1143
|
-
const { setPluginEnabled } =
|
|
1144
|
-
|
|
1150
|
+
const { setPluginEnabled } = await import(
|
|
1151
|
+
"../lib/plugin-runtime/install.js"
|
|
1152
|
+
);
|
|
1145
1153
|
const result = setPluginEnabled(name, true, {
|
|
1146
1154
|
scope: options.scope,
|
|
1147
1155
|
cwd: process.cwd(),
|
|
@@ -1197,8 +1205,9 @@ export function registerPluginCommand(program) {
|
|
|
1197
1205
|
.action(async (name, options) => {
|
|
1198
1206
|
try {
|
|
1199
1207
|
if (options.scope) {
|
|
1200
|
-
const { setPluginEnabled } =
|
|
1201
|
-
|
|
1208
|
+
const { setPluginEnabled } = await import(
|
|
1209
|
+
"../lib/plugin-runtime/install.js"
|
|
1210
|
+
);
|
|
1202
1211
|
const result = setPluginEnabled(name, false, {
|
|
1203
1212
|
scope: options.scope,
|
|
1204
1213
|
cwd: process.cwd(),
|
|
@@ -1603,9 +1612,14 @@ export function registerPluginCommand(program) {
|
|
|
1603
1612
|
.option("--public-key <path>", "Public key for signature verification")
|
|
1604
1613
|
.option("--json", "Output as JSON")
|
|
1605
1614
|
.action(async (dir, options) => {
|
|
1606
|
-
const { parsePluginManifest, summarizeComponents } =
|
|
1607
|
-
|
|
1615
|
+
const { parsePluginManifest, summarizeComponents } = await import(
|
|
1616
|
+
"../lib/plugin-runtime/manifest.js"
|
|
1617
|
+
);
|
|
1608
1618
|
const manifest = parsePluginManifest(dir);
|
|
1619
|
+
const { summarizeGoalExtension } = await import(
|
|
1620
|
+
"../lib/plugin-runtime/goal-extension-contract.js"
|
|
1621
|
+
);
|
|
1622
|
+
const goalExtensionSummary = summarizeGoalExtension(manifest);
|
|
1609
1623
|
|
|
1610
1624
|
// Optional integrity/signature check on the manifest file itself.
|
|
1611
1625
|
// verifyPluginManifest THROWS on any mismatch/failure and returns a
|
|
@@ -1651,8 +1665,9 @@ export function registerPluginCommand(program) {
|
|
|
1651
1665
|
if (rawManifest && rawManifest.dependencies) {
|
|
1652
1666
|
const { checkPluginDependencies, formatDependencyIssues } =
|
|
1653
1667
|
await import("../lib/plugin-runtime/governance.js");
|
|
1654
|
-
const { discoverPlugins } =
|
|
1655
|
-
|
|
1668
|
+
const { discoverPlugins } = await import(
|
|
1669
|
+
"../lib/plugin-runtime/scopes.js"
|
|
1670
|
+
);
|
|
1656
1671
|
const { VERSION } = await import("../constants.js");
|
|
1657
1672
|
const installed = {};
|
|
1658
1673
|
try {
|
|
@@ -1685,6 +1700,7 @@ export function registerPluginCommand(program) {
|
|
|
1685
1700
|
{
|
|
1686
1701
|
...manifest,
|
|
1687
1702
|
componentCounts: counts,
|
|
1703
|
+
goalExtensionSummary,
|
|
1688
1704
|
verification,
|
|
1689
1705
|
dependencyCheck,
|
|
1690
1706
|
},
|
|
@@ -1731,13 +1747,29 @@ export function registerPluginCommand(program) {
|
|
|
1731
1747
|
// so a user can compare against the components it ships (the audit findings
|
|
1732
1748
|
// for an under-declared manifest already surface in manifest.warnings).
|
|
1733
1749
|
if (manifest.capabilitiesDeclared) {
|
|
1734
|
-
const { describeCapabilities } =
|
|
1735
|
-
|
|
1750
|
+
const { describeCapabilities } = await import(
|
|
1751
|
+
"../lib/plugin-runtime/capabilities.js"
|
|
1752
|
+
);
|
|
1736
1753
|
const capLines = describeCapabilities(manifest.capabilities);
|
|
1737
1754
|
logger.log(chalk.bold("\nCapabilities (declared):"));
|
|
1738
1755
|
if (capLines.length === 0) logger.log(chalk.gray(" (none)"));
|
|
1739
1756
|
for (const l of capLines) logger.log(` ${chalk.magenta(l)}`);
|
|
1740
1757
|
}
|
|
1758
|
+
if (manifest.goalExtensionDeclared) {
|
|
1759
|
+
logger.log(chalk.bold("\nGoal extension (declaration only):"));
|
|
1760
|
+
logger.log(
|
|
1761
|
+
` API: ${goalExtensionSummary.apiVersion || "invalid"}; runtime: unavailable`,
|
|
1762
|
+
);
|
|
1763
|
+
if (goalExtensionSummary.hosts) {
|
|
1764
|
+
for (const [host, range] of Object.entries(
|
|
1765
|
+
goalExtensionSummary.hosts,
|
|
1766
|
+
)) {
|
|
1767
|
+
logger.log(` ${host}: ${range}`);
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
if (goalExtensionSummary.apiCompatible === false)
|
|
1771
|
+
logger.log(chalk.yellow(" unsupported goal extension API version"));
|
|
1772
|
+
}
|
|
1741
1773
|
for (const w of manifest.warnings) logger.log(chalk.yellow(` ⚠ ${w}`));
|
|
1742
1774
|
for (const e of manifest.errors) logger.log(chalk.red(` ✖ ${e}`));
|
|
1743
1775
|
if (manifest.ok) {
|
|
@@ -1839,8 +1871,9 @@ export function registerPluginCommand(program) {
|
|
|
1839
1871
|
let commandSourceAuthority = null;
|
|
1840
1872
|
let registryResolutionAuthority = null;
|
|
1841
1873
|
const registryUrls = normalizeRegistryUrls(options.registry);
|
|
1842
|
-
const { isRemoteSource, resolveRemoteSource } =
|
|
1843
|
-
|
|
1874
|
+
const { isRemoteSource, resolveRemoteSource } = await import(
|
|
1875
|
+
"../lib/plugin-runtime/remote-source.js"
|
|
1876
|
+
);
|
|
1844
1877
|
if (
|
|
1845
1878
|
options.offline === true &&
|
|
1846
1879
|
registryUrls.length === 0 &&
|
|
@@ -2407,8 +2440,9 @@ export function registerPluginCommand(program) {
|
|
|
2407
2440
|
return;
|
|
2408
2441
|
}
|
|
2409
2442
|
|
|
2410
|
-
const { fetchRegistry, resolveRegistryToken } =
|
|
2411
|
-
|
|
2443
|
+
const { fetchRegistry, resolveRegistryToken } = await import(
|
|
2444
|
+
"../lib/plugin-runtime/remote-source.js"
|
|
2445
|
+
);
|
|
2412
2446
|
const { buildPluginMarketplaceCatalog, MAX_MARKETPLACE_CATALOG_SOURCES } =
|
|
2413
2447
|
await import("../lib/plugin-runtime/marketplace-catalog.js");
|
|
2414
2448
|
if (registryUrls.length > MAX_MARKETPLACE_CATALOG_SOURCES) {
|
|
@@ -2429,8 +2463,9 @@ export function registerPluginCommand(program) {
|
|
|
2429
2463
|
process.exitCode = 1;
|
|
2430
2464
|
return;
|
|
2431
2465
|
}
|
|
2432
|
-
const { discoverPlugins } =
|
|
2433
|
-
|
|
2466
|
+
const { discoverPlugins } = await import(
|
|
2467
|
+
"../lib/plugin-runtime/scopes.js"
|
|
2468
|
+
);
|
|
2434
2469
|
const { VERSION } = await import("../constants.js");
|
|
2435
2470
|
let config = null;
|
|
2436
2471
|
try {
|
|
@@ -2795,8 +2830,9 @@ export function registerPluginCommand(program) {
|
|
|
2795
2830
|
)
|
|
2796
2831
|
.option("--json", "Output as JSON")
|
|
2797
2832
|
.action(async (options) => {
|
|
2798
|
-
const { listInstalled, listInstalledAllScopes } =
|
|
2799
|
-
|
|
2833
|
+
const { listInstalled, listInstalledAllScopes } = await import(
|
|
2834
|
+
"../lib/plugin-runtime/install.js"
|
|
2835
|
+
);
|
|
2800
2836
|
const rows = options.allScopes
|
|
2801
2837
|
? listInstalledAllScopes({ cwd: process.cwd() })
|
|
2802
2838
|
: listInstalled({ cwd: process.cwd() });
|
|
@@ -2808,8 +2844,9 @@ export function registerPluginCommand(program) {
|
|
|
2808
2844
|
logger.info("No plugins installed. Add one with: cc plugin add <dir>");
|
|
2809
2845
|
return;
|
|
2810
2846
|
}
|
|
2811
|
-
const { isPluginTrusted } =
|
|
2812
|
-
|
|
2847
|
+
const { isPluginTrusted } = await import(
|
|
2848
|
+
"../lib/plugin-runtime/trust.js"
|
|
2849
|
+
);
|
|
2813
2850
|
logger.log(chalk.bold(`Installed plugins (${rows.length}):`));
|
|
2814
2851
|
for (const r of rows) {
|
|
2815
2852
|
if (r.runtimeBlocked === true) {
|
|
@@ -2843,6 +2880,13 @@ export function registerPluginCommand(program) {
|
|
|
2843
2880
|
logger.log(
|
|
2844
2881
|
` ${ok} ${chalk.cyan(r.name)} v${r.version} ${chalk.gray(`[${r.scope}]`)} ${state} ${trust} ${signed}${policy ? ` ${policy}` : ""}`,
|
|
2845
2882
|
);
|
|
2883
|
+
if (r.goalExtension?.status === "declaration-only") {
|
|
2884
|
+
logger.log(
|
|
2885
|
+
chalk.gray(
|
|
2886
|
+
` goal SDK ${r.goalExtension.apiVersion}: declaration only; runtime unavailable`,
|
|
2887
|
+
),
|
|
2888
|
+
);
|
|
2889
|
+
}
|
|
2846
2890
|
}
|
|
2847
2891
|
});
|
|
2848
2892
|
|
|
@@ -2855,8 +2899,9 @@ export function registerPluginCommand(program) {
|
|
|
2855
2899
|
.option("--json", "Output the redacted transaction authority as JSON")
|
|
2856
2900
|
.action(async (name, options) => {
|
|
2857
2901
|
try {
|
|
2858
|
-
const { inspectPluginTransaction } =
|
|
2859
|
-
|
|
2902
|
+
const { inspectPluginTransaction } = await import(
|
|
2903
|
+
"../lib/plugin-runtime/install.js"
|
|
2904
|
+
);
|
|
2860
2905
|
const transaction = inspectPluginTransaction(name, {
|
|
2861
2906
|
scope: options.scope,
|
|
2862
2907
|
cwd: process.cwd(),
|
|
@@ -2899,8 +2944,9 @@ export function registerPluginCommand(program) {
|
|
|
2899
2944
|
.option("--json", "Output the recovery result as JSON")
|
|
2900
2945
|
.action(async (name, options) => {
|
|
2901
2946
|
try {
|
|
2902
|
-
const { recoverPluginTransaction } =
|
|
2903
|
-
|
|
2947
|
+
const { recoverPluginTransaction } = await import(
|
|
2948
|
+
"../lib/plugin-runtime/install.js"
|
|
2949
|
+
);
|
|
2904
2950
|
const recovery = recoverPluginTransaction(name, {
|
|
2905
2951
|
scope: options.scope,
|
|
2906
2952
|
cwd: process.cwd(),
|
|
@@ -2940,8 +2986,9 @@ export function registerPluginCommand(program) {
|
|
|
2940
2986
|
)
|
|
2941
2987
|
.action(async (name, options) => {
|
|
2942
2988
|
try {
|
|
2943
|
-
const { planPluginProvenanceMigration } =
|
|
2944
|
-
|
|
2989
|
+
const { planPluginProvenanceMigration } = await import(
|
|
2990
|
+
"../lib/plugin-runtime/install.js"
|
|
2991
|
+
);
|
|
2945
2992
|
const plan = planPluginProvenanceMigration(name, {
|
|
2946
2993
|
scope: options.scope,
|
|
2947
2994
|
cwd: process.cwd(),
|
|
@@ -2983,8 +3030,9 @@ export function registerPluginCommand(program) {
|
|
|
2983
3030
|
"refusing provenance mutation without --yes after reviewing the signed plan",
|
|
2984
3031
|
);
|
|
2985
3032
|
}
|
|
2986
|
-
const { migratePluginProvenance } =
|
|
2987
|
-
|
|
3033
|
+
const { migratePluginProvenance } = await import(
|
|
3034
|
+
"../lib/plugin-runtime/install.js"
|
|
3035
|
+
);
|
|
2988
3036
|
const result = migratePluginProvenance(name, {
|
|
2989
3037
|
scope: options.scope,
|
|
2990
3038
|
cwd: process.cwd(),
|
|
@@ -3028,8 +3076,9 @@ export function registerPluginCommand(program) {
|
|
|
3028
3076
|
.option("--json", "Output the versioned artifact readback as JSON")
|
|
3029
3077
|
.action(async (name, options) => {
|
|
3030
3078
|
try {
|
|
3031
|
-
const { listInstalled, readSourceMetadataStrict } =
|
|
3032
|
-
|
|
3079
|
+
const { listInstalled, readSourceMetadataStrict } = await import(
|
|
3080
|
+
"../lib/plugin-runtime/install.js"
|
|
3081
|
+
);
|
|
3033
3082
|
const installed = listInstalled({
|
|
3034
3083
|
cwd: process.cwd(),
|
|
3035
3084
|
scopes: [options.scope],
|
|
@@ -3049,8 +3098,9 @@ export function registerPluginCommand(program) {
|
|
|
3049
3098
|
required: true,
|
|
3050
3099
|
requireRegistryAuthority: true,
|
|
3051
3100
|
});
|
|
3052
|
-
const { buildPluginMarketplaceArtifactReadback } =
|
|
3053
|
-
|
|
3101
|
+
const { buildPluginMarketplaceArtifactReadback } = await import(
|
|
3102
|
+
"../lib/plugin-runtime/marketplace-artifact-readback.js"
|
|
3103
|
+
);
|
|
3054
3104
|
const evidence = buildPluginMarketplaceArtifactReadback({
|
|
3055
3105
|
root: installed.dir,
|
|
3056
3106
|
scope: installed.scope,
|
|
@@ -3123,10 +3173,12 @@ export function registerPluginCommand(program) {
|
|
|
3123
3173
|
.option("--scope <scope>", "Scope of the plugin", "project")
|
|
3124
3174
|
.option("--list", "List all trusted plugins instead")
|
|
3125
3175
|
.action(async (name, options) => {
|
|
3126
|
-
const { trustPlugin, listTrust } =
|
|
3127
|
-
|
|
3128
|
-
|
|
3129
|
-
|
|
3176
|
+
const { trustPlugin, listTrust } = await import(
|
|
3177
|
+
"../lib/plugin-runtime/trust.js"
|
|
3178
|
+
);
|
|
3179
|
+
const { getActiveVersion } = await import(
|
|
3180
|
+
"../lib/plugin-runtime/install.js"
|
|
3181
|
+
);
|
|
3130
3182
|
if (options.list) {
|
|
3131
3183
|
for (const t of listTrust()) {
|
|
3132
3184
|
logger.log(` ${chalk.cyan(t.name)} v${t.version} [${t.scope}]`);
|
|
@@ -3181,10 +3233,12 @@ export function registerPluginCommand(program) {
|
|
|
3181
3233
|
.option("--list", "List all capability consent entries")
|
|
3182
3234
|
.option("--json", "Output as JSON")
|
|
3183
3235
|
.action(async (name, options) => {
|
|
3184
|
-
const consent =
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3236
|
+
const consent = await import(
|
|
3237
|
+
"../lib/plugin-runtime/capability-consent.js"
|
|
3238
|
+
);
|
|
3239
|
+
const { describeCapabilities } = await import(
|
|
3240
|
+
"../lib/plugin-runtime/capabilities.js"
|
|
3241
|
+
);
|
|
3188
3242
|
|
|
3189
3243
|
if (!name || options.list) {
|
|
3190
3244
|
const rows = consent.listCapabilityConsent();
|
|
@@ -3221,8 +3275,9 @@ export function registerPluginCommand(program) {
|
|
|
3221
3275
|
}
|
|
3222
3276
|
|
|
3223
3277
|
// Resolve the installed plugin + its declared capabilities.
|
|
3224
|
-
const { discoverPlugins } =
|
|
3225
|
-
|
|
3278
|
+
const { discoverPlugins } = await import(
|
|
3279
|
+
"../lib/plugin-runtime/scopes.js"
|
|
3280
|
+
);
|
|
3226
3281
|
let installed = null;
|
|
3227
3282
|
try {
|
|
3228
3283
|
installed = discoverPlugins({
|
|
@@ -3339,8 +3394,9 @@ export function registerPluginCommand(program) {
|
|
|
3339
3394
|
)
|
|
3340
3395
|
.option("--json", "Output as JSON")
|
|
3341
3396
|
.action(async (name, options) => {
|
|
3342
|
-
const { discoverPlugins } =
|
|
3343
|
-
|
|
3397
|
+
const { discoverPlugins } = await import(
|
|
3398
|
+
"../lib/plugin-runtime/scopes.js"
|
|
3399
|
+
);
|
|
3344
3400
|
const optsMod = await import("../lib/plugin-runtime/plugin-options.js");
|
|
3345
3401
|
|
|
3346
3402
|
let installed = null;
|
|
@@ -3442,8 +3498,9 @@ export function registerPluginCommand(program) {
|
|
|
3442
3498
|
.option("--run", "Actually run the monitors for a few seconds, then reap")
|
|
3443
3499
|
.option("--seconds <n>", "With --run: how long to run", "3")
|
|
3444
3500
|
.action(async (options) => {
|
|
3445
|
-
const { collectPluginMonitors } =
|
|
3446
|
-
|
|
3501
|
+
const { collectPluginMonitors } = await import(
|
|
3502
|
+
"../lib/plugin-runtime/monitors.js"
|
|
3503
|
+
);
|
|
3447
3504
|
const monitors = collectPluginMonitors({ cwd: process.cwd() });
|
|
3448
3505
|
if (options.json && !options.run) {
|
|
3449
3506
|
console.log(JSON.stringify(monitors, null, 2));
|
|
@@ -3467,8 +3524,9 @@ export function registerPluginCommand(program) {
|
|
|
3467
3524
|
}
|
|
3468
3525
|
if (!options.run) return;
|
|
3469
3526
|
|
|
3470
|
-
const { PluginMonitorSupervisor } =
|
|
3471
|
-
|
|
3527
|
+
const { PluginMonitorSupervisor } = await import(
|
|
3528
|
+
"../lib/plugin-monitor-supervisor.js"
|
|
3529
|
+
);
|
|
3472
3530
|
const secs = Math.max(1, parseInt(options.seconds, 10) || 3);
|
|
3473
3531
|
const sup = new PluginMonitorSupervisor();
|
|
3474
3532
|
const started = sup.start(monitors);
|
|
@@ -3498,8 +3556,9 @@ export function registerPluginCommand(program) {
|
|
|
3498
3556
|
"Approve a different-source fallback when removing the active version",
|
|
3499
3557
|
)
|
|
3500
3558
|
.action(async (name, options) => {
|
|
3501
|
-
const { listInstalled, uninstall } =
|
|
3502
|
-
|
|
3559
|
+
const { listInstalled, uninstall } = await import(
|
|
3560
|
+
"../lib/plugin-runtime/install.js"
|
|
3561
|
+
);
|
|
3503
3562
|
try {
|
|
3504
3563
|
const blockedRow = listInstalled({
|
|
3505
3564
|
cwd: process.cwd(),
|
|
@@ -3607,8 +3666,9 @@ export function registerPluginCommand(program) {
|
|
|
3607
3666
|
let commandSourceAuthority = null;
|
|
3608
3667
|
let registryResolutionAuthority = null;
|
|
3609
3668
|
const registryUrls = normalizeRegistryUrls(options.registry);
|
|
3610
|
-
const { isRemoteSource, resolveRemoteSource } =
|
|
3611
|
-
|
|
3669
|
+
const { isRemoteSource, resolveRemoteSource } = await import(
|
|
3670
|
+
"../lib/plugin-runtime/remote-source.js"
|
|
3671
|
+
);
|
|
3612
3672
|
if (
|
|
3613
3673
|
options.offline === true &&
|
|
3614
3674
|
registryUrls.length === 0 &&
|
|
@@ -4090,8 +4150,9 @@ export function registerPluginCommand(program) {
|
|
|
4090
4150
|
"Approve activating an installed version from a different source",
|
|
4091
4151
|
)
|
|
4092
4152
|
.action(async (name, version, options) => {
|
|
4093
|
-
const { setActiveVersion } =
|
|
4094
|
-
|
|
4153
|
+
const { setActiveVersion } = await import(
|
|
4154
|
+
"../lib/plugin-runtime/install.js"
|
|
4155
|
+
);
|
|
4095
4156
|
try {
|
|
4096
4157
|
setActiveVersion(name, version, {
|
|
4097
4158
|
scope: options.scope,
|
package/src/constants.js
CHANGED
|
@@ -30,7 +30,7 @@ export const LLM_PROVIDERS = {
|
|
|
30
30
|
volcengine: {
|
|
31
31
|
name: "Volcengine (火山引擎/豆包)",
|
|
32
32
|
defaultBaseUrl: "https://ark.cn-beijing.volces.com/api/v3",
|
|
33
|
-
defaultModel: "deepseek-v4-flash-
|
|
33
|
+
defaultModel: "deepseek-v4-1-flash-260910",
|
|
34
34
|
requiresApiKey: true,
|
|
35
35
|
},
|
|
36
36
|
openai: {
|
|
@@ -144,7 +144,7 @@ export const DEFAULT_CONFIG = {
|
|
|
144
144
|
provider: "volcengine",
|
|
145
145
|
apiKey: null,
|
|
146
146
|
baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
|
|
147
|
-
model: "deepseek-v4-flash-
|
|
147
|
+
model: "deepseek-v4-1-flash-260910",
|
|
148
148
|
// When true, `cc ask` (provider=ollama only) overrides baseUrl to point at
|
|
149
149
|
// the Android LocalLlmServer (127.0.0.1:18484). User opt-in toggle:
|
|
150
150
|
// cc config set llm.preferAndroidLocal true
|
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.166.107",
|
|
7
|
+
"cliVersions": ["0.166.107"],
|
|
8
|
+
"date": "2026-10-20",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Added, improved and fixed - cc CLI 0.166.107: governed goals, ledger recovery and safe diagnostics (candidate, 2026-10-20)",
|
|
13
|
+
"body": "- Add bounded `goal catalog` and `goal panels` commands to browse goals and read text snapshots from trusted, consented plugins, including explicitly connected desktop project goals.\n- Add `goal draft-request`, `goal draft-access`, `goal draft-sources`, `goal draft-send`, and `goal draft-receipt` for native-reviewed description requests and separately authorized pending drafts. Submission records support receipt reconciliation without automatic duplicate sends; task changes still require native desktop preview and confirmation.\n- Use `deepseek-v4-1-flash-260910` as the default Volcengine model for new CLI, agent, and task-model configurations.\n- Reuse an authenticated parent-directory boundary while validating cached immutable ledger files, preserving per-file bounded reads, identity, fingerprints, digests, and boundary checks. Resolve Wiki pruning journal artifacts in batches of four; six cross-process recovery scenarios complete in 49–55 seconds on Windows.\n- Reject formal-budget-scoped calls to the native campaign and public VS Code diagnostic before reading options or credentials, touching files, downloading packages, launching hosts, or sending provider requests."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
4
17
|
{
|
|
5
18
|
"productVersion": null,
|
|
6
19
|
"cliVersion": "0.166.106",
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/** Bounded, explicit metadata discovery for native IDE goal pickers. */
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { resolveConfigDataRoot } from "./paths.js";
|
|
5
|
+
import { goalFileStoreId } from "./goal-store.js";
|
|
6
|
+
import { createCliGoalSnapshotReader } from "./cli-goal-source.js";
|
|
7
|
+
|
|
8
|
+
export const CLI_GOAL_CATALOG_SCHEMA = "chainlesschain.goal-catalog.v1";
|
|
9
|
+
const MAX_DIRECTORY_ENTRIES = 2048;
|
|
10
|
+
const safeId = (id) =>
|
|
11
|
+
typeof id === "string" &&
|
|
12
|
+
/^[A-Za-z0-9][A-Za-z0-9._-]{0,255}$/u.test(id) &&
|
|
13
|
+
!id.includes("..");
|
|
14
|
+
function fail(code) {
|
|
15
|
+
throw new Error(code);
|
|
16
|
+
}
|
|
17
|
+
function cursor(storeId, afterId) {
|
|
18
|
+
return Buffer.from(JSON.stringify({ v: 1, storeId, afterId })).toString(
|
|
19
|
+
"base64url",
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
function decodeCursor(value, storeId) {
|
|
23
|
+
if (value === undefined) return "";
|
|
24
|
+
try {
|
|
25
|
+
if (
|
|
26
|
+
typeof value !== "string" ||
|
|
27
|
+
value.length > 1024 ||
|
|
28
|
+
!/^[A-Za-z0-9_-]+$/u.test(value)
|
|
29
|
+
)
|
|
30
|
+
throw 0;
|
|
31
|
+
const raw = JSON.parse(Buffer.from(value, "base64url").toString("utf8"));
|
|
32
|
+
if (
|
|
33
|
+
Object.keys(raw).sort().join(",") !== "afterId,storeId,v" ||
|
|
34
|
+
raw.v !== 1 ||
|
|
35
|
+
raw.storeId !== storeId ||
|
|
36
|
+
!safeId(raw.afterId) ||
|
|
37
|
+
cursor(storeId, raw.afterId) !== value
|
|
38
|
+
)
|
|
39
|
+
throw 0;
|
|
40
|
+
return raw.afterId;
|
|
41
|
+
} catch {
|
|
42
|
+
fail("CLI_GOAL_CATALOG_INVALID_CURSOR");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Each page visits at most limit candidates, including invalid sources.
|
|
47
|
+
* Pages are fresh reads; this does not promise a frozen cross-page snapshot. */
|
|
48
|
+
export function readCliGoalCatalog(options = {}) {
|
|
49
|
+
const cwd = path.resolve(options.cwd || process.cwd());
|
|
50
|
+
const env = Object.freeze({ ...(options.env || process.env) });
|
|
51
|
+
const root = path.resolve(
|
|
52
|
+
options.root ||
|
|
53
|
+
path.join(resolveConfigDataRoot({ cwd, env }).path, "goals"),
|
|
54
|
+
);
|
|
55
|
+
const storeId = goalFileStoreId(root);
|
|
56
|
+
const limit = options.limit ?? 20;
|
|
57
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 20)
|
|
58
|
+
fail("CLI_GOAL_CATALOG_INVALID_LIMIT");
|
|
59
|
+
const afterId = decodeCursor(options.after, storeId);
|
|
60
|
+
const result = {
|
|
61
|
+
schema: CLI_GOAL_CATALOG_SCHEMA,
|
|
62
|
+
storeId,
|
|
63
|
+
snapshot: true,
|
|
64
|
+
observedAt: new Date().toISOString(),
|
|
65
|
+
entries: [],
|
|
66
|
+
scannedCount: 0,
|
|
67
|
+
skippedCount: 0,
|
|
68
|
+
invalidNameCount: 0,
|
|
69
|
+
nextCursor: null,
|
|
70
|
+
};
|
|
71
|
+
try {
|
|
72
|
+
fs.lstatSync(root);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
if (error.code === "ENOENT") return result;
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
const source = createCliGoalSnapshotReader(root);
|
|
78
|
+
const directory = fs.opendirSync(root);
|
|
79
|
+
const ids = [];
|
|
80
|
+
try {
|
|
81
|
+
let count = 0;
|
|
82
|
+
for (let entry; (entry = directory.readSync()); ) {
|
|
83
|
+
if (++count > MAX_DIRECTORY_ENTRIES)
|
|
84
|
+
fail("CLI_GOAL_CATALOG_DIRECTORY_LIMIT");
|
|
85
|
+
if (!entry.name.endsWith(".json")) continue;
|
|
86
|
+
const id = entry.name.slice(0, -5);
|
|
87
|
+
if (!safeId(id)) {
|
|
88
|
+
result.invalidNameCount++;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (safeId(id) && id > afterId) ids.push(id);
|
|
92
|
+
}
|
|
93
|
+
} finally {
|
|
94
|
+
directory.closeSync();
|
|
95
|
+
}
|
|
96
|
+
source.checkRoot();
|
|
97
|
+
ids.sort();
|
|
98
|
+
const snapshots = [];
|
|
99
|
+
const page = ids.slice(0, limit);
|
|
100
|
+
result.scannedCount = page.length;
|
|
101
|
+
for (const id of page) {
|
|
102
|
+
try {
|
|
103
|
+
const snapshot = source.read(id);
|
|
104
|
+
const goal = snapshot.goal;
|
|
105
|
+
const title = (goal.title || goal.objective)
|
|
106
|
+
.replace(
|
|
107
|
+
/[\u0000-\u001f\u007f-\u009f\u200e\u200f\u202a-\u202e\u2066-\u2069]/gu,
|
|
108
|
+
" ",
|
|
109
|
+
)
|
|
110
|
+
.slice(0, 160);
|
|
111
|
+
result.entries.push({
|
|
112
|
+
id: goal.id,
|
|
113
|
+
title,
|
|
114
|
+
status: goal.status,
|
|
115
|
+
revision: goal.revision,
|
|
116
|
+
controlGeneration: goal.controlGeneration,
|
|
117
|
+
});
|
|
118
|
+
snapshots.push(snapshot);
|
|
119
|
+
} catch {
|
|
120
|
+
result.skippedCount++;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// A changed valid source aborts the page instead of returning stale metadata.
|
|
124
|
+
for (const snapshot of snapshots) source.revalidate(snapshot);
|
|
125
|
+
source.checkRoot();
|
|
126
|
+
if (ids.length > page.length)
|
|
127
|
+
result.nextCursor = cursor(storeId, page.at(-1));
|
|
128
|
+
return result;
|
|
129
|
+
}
|