chainlesschain 0.166.65 → 0.166.69
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 +20 -12
- package/package.json +4 -4
- package/src/assets/web-panel/assets/{AIOps-Byz17CTN.js → AIOps-FhevRfL6.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-C5LiW2-J.js → ActionButton-rOeOykx5.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D1INcvZF.js → Analytics-BK_wYlfz.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DZzHO1VV.js → AppLayout-_2cCtZKV.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-WfYQL6Ia.js → Artifacts-D5MSvVzk.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DohBoGWO.js → Audit-yd-Ah-A3.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Chtk-Hde.js → BackgroundAgents-yCaw_Gu_.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-B813PuMz.js → Backup-G3ADD4N-.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DaDdWWgK.js → BaseInput-ByDhkLbF.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-D4pJ6oZ7.js → Chat-BMrc7qjz.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-nA7n0I6S.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-Clo9TvO6.js → Checkbox-BHYgyZWA.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-uejLg8Ih.js → Codegen-DJfcy0jC.js} +1 -1
- package/src/assets/web-panel/assets/{Col-B7nbx-iJ.js → Col-C27zROxc.js} +1 -1
- package/src/assets/web-panel/assets/{Community-FEyjPK1j.js → Community-CuS5tq_1.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B6Fk0Kn6.js → Compact-BrYJNe7Q.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BQG8goUl.js → Compliance-8hfahYHT.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CbBeEfHp.js → Cowork-DdE0n2lp.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DPzlFcEZ.js → Cron-CUq3aSiX.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-B8pWJrbg.js → Crosschain-BM4XSPWG.js} +1 -1
- package/src/assets/web-panel/assets/{DID-gGQHUlFN.js → DID-CdaBY57N.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C2TMFHrn.js → Dashboard-Cwtd52So.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BVPxGbll.js → Dropdown-BvlObh6U.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CNPxs0hd.js → EmailListRenderer-e3fLhjnX.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-_XTiB7q1.js → EvolutionSettings-CTtk1Zo8.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-UyE3VWtI.js → FamilyGuardDashboard-BpPJUnCU.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CLt6FHK-.js → Federation-vzjZ6_nQ.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CdNQPRPw.js → FormItemContext-DEDNLhkE.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BJ0AMhrh.js → GenericCardRenderer-DEl2Te5f.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CQnvMfOM.js → Git-BzsYQnCq.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-deYsHC-o.js → Governance-zxJs6Y8s.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-qaSck43z.js → Inference-5JUsrmF1.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-De0aJ3Ls.js → KnowledgeGraph-Br8b5Htz.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-ZtS98jCm.js → Logs-D-tubDMJ.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-In4itZX2.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Byz3xCBN.js → Marketplace-s8MmWkS9.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DOZUUW6z.js → McpTools-Wu-WRg4M.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-C33wC2hA.js → Memory-B_i-eX9w.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-zZe-T_6M.js → MobileBridge-Ca64kjVx.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CRnUIume.js → MobileProjects-Cq9AFiO4.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-C1xlRVAN.js → Mtc-DKvGmG3y.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-D0U07bIi.js → MtcAudit-BVvWx8pF.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DF8uvV3h.js → Multisig-wqeJ2O9x.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-bBPGAFlt.js → NLProgramming-DX87ysYu.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BHAaOsgg.js → Notes-ChenGdu0.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-Cl0fG_rA.js → NotificationSettings-BZRa68-x.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BEPAs8Zv.js → OrderTableRenderer-DZ6xG1M6.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BAxSwgk5.js → Organization-BWJp4VPX.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-D68KubAu.js → Overflow-BoM4bYt5.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-bhdT17zk.js → P2P-Cvi8YV09.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DqaO6wgH.js → PdhVaultBrowser-CNVC1NIj.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-Bq8fvkak.js → Permissions-DNd1MRjW.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BYd2JEic.js → PersonalDataHub-DGSBYZ5-.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-Csg_ja69.js → Pipeline-DkcoGMBo.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-lwxwLj4M.js → Privacy-DltwvMAW.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BdBZkH8z.js → ProjectInit-ChYbpHg8.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-ClWgFy-K.js → ProjectSettings-B8FWiHTJ.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Bu-qj8N1.js → Projects-DuyhtSm4.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DEjxrxw3.js → Providers-Bo18Tx_6.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-eccy-8Vi.js → QrScannerModal-6W85KlsG.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Vx3uDvFg.js → QuickAsk-DznRUedP.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CfUivNps.js → Recommend-CQDN3_p-.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BU4gk7GI.js → RemoteSession-CiJgokEj.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-CbPzdZ0C.js → Reputation-DexzGH7E.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CYLrgfKA.js → Row-BgZOIvSi.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DbY1oyuv.js → RssFeed-BWIZJ_Jr.js} +3 -3
- package/src/assets/web-panel/assets/{Search-QeW41K5r.js → Search-B376EwWJ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CJxf1kLZ.js → Security-92mUR5OD.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CFO9ySZc.js → Services-ClSEAOHk.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CQFjeQN0.js → Skeleton-DVhLbv99.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CLLB4INW.js → Skills-JTcXs_xI.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DxeLIJk0.js → Sla-DnKY9zy9.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-D4FA9KYI.js → SpeechSettings-GO1JefAH.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-C6NOkcQK.js → SyncSettings-jX5tB2St.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-LmVPWDfQ.js → Tasks-BxRBzhUc.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BdEfUoVB.js → Templates-CAVkbTG1.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-IUlESacN.js → Tenant-5Y7sHBkz.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B9pDe7sn.js → Terminal-CbbLShYb.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-ZCwB-Pki.js → TimelineRenderer-2HptWihL.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-4qk16LX1.js → Tokens-B-jGxzHl.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-jXNyargn.js → Trigger-9DGa90DT.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D13PydtT.js → Trust-BSJEkEOO.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-yPgws6mS.js → UkeySign-C807So5R.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B329WjpG.js → VideoEditing-ByiieAv-.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-T8VM-Ttm.js → Wallet-BixbIOUv.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-XuRibrpP.js → WebAuthn-z7akhor4.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-D1Gwz3YR.js → WorkflowEditor-KvijuUuR.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DjydtnT-.js → chat-BYKoh0YG.js} +1 -1
- package/src/assets/web-panel/assets/{colors-gFtBvPrr.js → colors-CLT8IYBt.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CndxhGfx.js → compact-item-DlBIyYHF.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DnfGpd0L.js → createContext-5XmAnNLr.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BmcCIHwY.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CmT5hRVW.js → hasIn-rPdRhm7K.js} +1 -1
- package/src/assets/web-panel/assets/{index-DoBKSzqu.js → index-8un-eUDI.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGbKeg8G.js → index-B-0nAxf5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DreYqebI.js → index-B1VfBUPB.js} +1 -1
- package/src/assets/web-panel/assets/{index-zQf599Uq.js → index-BBt2CSAx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlTcxT_L.js → index-BDtlwjSr.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqpR0Des.js → index-BIRl2Ii5.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3HvYeA3.js → index-BgevTkUv.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0WFjxWs.js → index-Bve7Wsgf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNHdO6Jr.js → index-Bzd0sFkp.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV2PR3Fa.js → index-C2sFDVb_.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2d7358Y.js → index-CErvHCDe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaEPE2DC.js → index-CM_a9spK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKyuE_Y2.js → index-CY6TMc2m.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVM_w30N.js → index-ChlzaTV3.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZLDbPTa.js → index-CsnbOKdI.js} +1 -1
- package/src/assets/web-panel/assets/{index-HHP1zzo7.js → index-D3-NL-x-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFif4Cev.js → index-D3f9Jzx2.js} +1 -1
- package/src/assets/web-panel/assets/{index-C14jryXi.js → index-DCDSycWo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CB27echm.js → index-DIVrVGvf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGlmPbl_.js → index-DI_tYFBe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsRKmb6k.js → index-DPS4mWnI.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXNUTiW8.js → index-DTslLzPJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbpk75MO.js → index-DW8vozBS.js} +1 -1
- package/src/assets/web-panel/assets/index-DY8rmd6x.js +1 -0
- package/src/assets/web-panel/assets/{index-DjY-3sMA.js → index-DZiSMYoD.js} +3 -3
- package/src/assets/web-panel/assets/{index-DV6NrfJx.js → index-DZjGcIGU.js} +1 -1
- package/src/assets/web-panel/assets/{index-ktN-K1Tf.js → index-Dea32nOK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjcR-CwS.js → index-Djd7uqwM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuOx4Pbe.js → index-Dntid6oj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW3nWiu0.js → index-DqZU4_7J.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4Mqhmas.js → index-DuvweiCz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRqz8TtI.js → index-DzExCCLS.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5na0B7G.js → index-LKT-Ol0A.js} +1 -1
- package/src/assets/web-panel/assets/{index-_-wGLtAg.js → index-akwXS-FF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgMKElUh.js → index-b-rQCMkx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUlubR4l.js → index-eHbr3f5I.js} +1 -1
- package/src/assets/web-panel/assets/{index-D88-8bsB.js → index-kx6zDWew.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuAvYTmY.js → index-rRuCGdKW.js} +1 -1
- package/src/assets/web-panel/assets/index-sbwcUeRS.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-KV3V-PNH.js → initDefaultProps-a8411LiK.js} +1 -1
- package/src/assets/web-panel/assets/{motion-PFGQg7_X.js → motion-oVcQdpCm.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dnl79wq4.js → move-B-eyzzzL.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Bwl5JH9V.js → mtc-parser-BCYIxuG7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DCcTtM1l.js → omit-DuFtWiYh.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Cl6BjjDf.js → pickAttrs-CVAoJhGu.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-fdqhyo42.js → placementArrow-Y2iub2bO.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DYQpmcDW.js → responsiveObserve-BHenWIVD.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C4l-VfO4.js → slide-CKrMaL29.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DYDw_dyZ.js → statusUtils-w8eb_1da.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BEsubSMu.js → styleChecker-CCVi_Ww3.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Cj82ggQ_.js → useFlexGapSupport-BsmR_q0r.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B7L1eJ0V.js → useFs-a8GMBjnc.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DVlJVD4d.js → usePersonalDataHub-BMUYSPn-.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BBAbRN_Y.js → vnode-DL2pI31V.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BYn48q-I.js → zoom-Cbi8fISi.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +33 -7
- package/src/lib/dependency-install-policy.js +1 -1
- package/src/lib/evolution/browser-download-action-authority.js +747 -0
- package/src/lib/evolution/browser-download-artifact-disposal-authority.js +436 -0
- package/src/lib/evolution/browser-filesystem-quarantine-custody.js +2453 -0
- package/src/lib/evolution/browser-filesystem-quarantine-disposal.js +36 -0
- package/src/lib/evolution/browser-keyboard-action-authority.js +560 -0
- package/src/lib/evolution/browser-navigation-action-authority.js +546 -0
- package/src/lib/evolution/browser-quarantine-lock-maintenance-authority.js +573 -0
- package/src/lib/evolution/browser-quarantine-operator-revocation-authority.js +442 -0
- package/src/lib/evolution/browser-quarantine-retention-authority.js +503 -0
- package/src/lib/evolution/browser-quarantine-retention-scheduler.js +207 -0
- package/src/lib/evolution/browser-quarantined-download-executor.js +525 -0
- package/src/lib/evolution/browser-tab-open-action-authority.js +491 -0
- package/src/lib/evolution/browser-vision-action-authority.js +444 -0
- package/src/lib/evolution/browser-vision-observation-authority.js +304 -0
- package/src/lib/evolution/evolution-deployment-loader.js +241 -1
- package/src/lib/evolution/evolution-eval-child-evidence-ledger-adapter.js +5 -0
- package/src/lib/evolution/evolution-eval-gate.js +2 -1
- package/src/lib/evolution/evolution-eval-process-supervisor-worker.mjs +71 -9
- package/src/lib/evolution/evolution-eval-process-supervisor.js +276 -9
- package/src/lib/evolution/evolution-workbench-metrics.js +81 -21
- package/src/lib/evolution/pm-exploration-benchmark.js +747 -0
- package/src/lib/evolution/pm-exploration-budget-executor.js +106 -9
- package/src/lib/evolution/pm-exploration-egress-authority.js +382 -0
- package/src/lib/evolution/pm-exploration-evidence-bundle.js +149 -44
- package/src/lib/evolution/pm-exploration-execution-host.js +1254 -8
- package/src/lib/evolution/pm-exploration-process-grader.js +458 -0
- package/src/lib/evolution/pm-exploration-process-reviewer.js +456 -0
- package/src/lib/evolution/pm-exploration-process-runner.js +500 -0
- package/src/lib/evolution/pm-exploration-receipts.js +211 -11
- package/src/lib/evolution/pm-exploration-recovery-snapshot-store.js +465 -46
- package/src/lib/evolution/pm-exploration-transition-committer.js +185 -34
- package/src/lib/evolution/skill-outcome-index-authority.js +7 -3
- package/src/lib/evolution/skill-writer-inventory-manifest.js +0 -39
- package/src/lib/evolution/volcengine-function-execution-authority.js +2949 -0
- package/src/lib/evolution/volcengine-function-process-executor.js +615 -0
- package/src/lib/evolution/volcengine-function-replay-store.js +836 -0
- package/src/lib/evolution/volcengine-function-revocation-status-floor-store.js +480 -0
- package/src/lib/governance-coverage.js +1 -1
- package/src/lib/headless-manifest.js +1 -1
- package/src/lib/protocol-replay.js +1 -1
- package/src/lib/skill-outcome-transcript-authority.js +45 -5
- package/src/runtime/agent-core.js +17 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Cf3LLgDc.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-CTsYo9NN.js +0 -1
- package/src/assets/web-panel/assets/devWarning-D60SbiD-.js +0 -1
- package/src/assets/web-panel/assets/index-C0yR4_7h.js +0 -1
- package/src/assets/web-panel/assets/index-D4xuvo03.js +0 -1
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { types } from "node:util";
|
|
4
|
+
|
|
5
|
+
import { createEvolutionLedgerFileManifestHeadBackend } from "./evolution-ledger-file-manifest-head-store.js";
|
|
6
|
+
|
|
7
|
+
export const VOLCENGINE_FUNCTION_REVOCATION_STATUS_FLOOR_STORE_SCHEMA =
|
|
8
|
+
"chainlesschain.volcengine-function-revocation-status-floor-store/v1";
|
|
9
|
+
export const VOLCENGINE_FUNCTION_REVOCATION_STATUS_FLOOR_MODE =
|
|
10
|
+
"cross-process-exclusive-file-fsync";
|
|
11
|
+
export const VOLCENGINE_FUNCTION_REVOCATION_STATUS_SNAPSHOT_SCHEMA =
|
|
12
|
+
"chainlesschain.volcengine-function-revocation-status-snapshot/v1";
|
|
13
|
+
export const VOLCENGINE_FUNCTION_REVOCATION_STATUS_ACK_SCHEMA =
|
|
14
|
+
"chainlesschain.volcengine-function-revocation-status-ack/v1";
|
|
15
|
+
|
|
16
|
+
const STATE_SCHEMA =
|
|
17
|
+
"chainlesschain.volcengine-function-revocation-status-floor-state/v1";
|
|
18
|
+
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
19
|
+
const ID = /^[^\p{Cc}]{1,512}$/u;
|
|
20
|
+
const stores = new WeakMap();
|
|
21
|
+
|
|
22
|
+
function canonical(value) {
|
|
23
|
+
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
24
|
+
if (Array.isArray(value)) return `[${value.map(canonical).join(",")}]`;
|
|
25
|
+
return `{${Object.keys(value)
|
|
26
|
+
.sort()
|
|
27
|
+
.map((key) => `${JSON.stringify(key)}:${canonical(value[key])}`)
|
|
28
|
+
.join(",")}}`;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function digest(domain, value) {
|
|
32
|
+
return `sha256:${createHash("sha256")
|
|
33
|
+
.update(`${domain}\0`)
|
|
34
|
+
.update(canonical(value))
|
|
35
|
+
.digest("hex")}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function exactData(value, keys, label) {
|
|
39
|
+
if (
|
|
40
|
+
!value ||
|
|
41
|
+
typeof value !== "object" ||
|
|
42
|
+
Array.isArray(value) ||
|
|
43
|
+
types.isProxy(value) ||
|
|
44
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(value)) ||
|
|
45
|
+
Reflect.ownKeys(value).length !== keys.length ||
|
|
46
|
+
keys.some((key) => {
|
|
47
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
48
|
+
return !descriptor?.enumerable || !Object.hasOwn(descriptor, "value");
|
|
49
|
+
})
|
|
50
|
+
) {
|
|
51
|
+
throw new TypeError(`${label} has unexpected or accessor fields`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function ownData(owner, name, label) {
|
|
56
|
+
const descriptor = Object.getOwnPropertyDescriptor(owner, name);
|
|
57
|
+
if (!descriptor || !Object.hasOwn(descriptor, "value")) {
|
|
58
|
+
throw new TypeError(`${label} must be plain data`);
|
|
59
|
+
}
|
|
60
|
+
return descriptor.value;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function normalizeDirectory(value) {
|
|
64
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
65
|
+
throw new TypeError(
|
|
66
|
+
"Volcengine function revocation status floor directory is invalid",
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
return path.resolve(value);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function digestVolcengineFunctionRevocationStatusFloorRoot(value) {
|
|
73
|
+
return digest(
|
|
74
|
+
"chainlesschain.volcengine-function-revocation-status-floor-root/v1",
|
|
75
|
+
normalizeDirectory(value),
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function normalizeDescriptor(value) {
|
|
80
|
+
exactData(
|
|
81
|
+
value,
|
|
82
|
+
[
|
|
83
|
+
"schema",
|
|
84
|
+
"storeId",
|
|
85
|
+
"tenantId",
|
|
86
|
+
"handlerArtifactDigest",
|
|
87
|
+
"revocationAuthorityId",
|
|
88
|
+
"trustRootDigest",
|
|
89
|
+
"stateRootDigest",
|
|
90
|
+
"mode",
|
|
91
|
+
],
|
|
92
|
+
"Volcengine function revocation status floor store descriptor",
|
|
93
|
+
);
|
|
94
|
+
const descriptor = Object.freeze({
|
|
95
|
+
schema: ownData(
|
|
96
|
+
value,
|
|
97
|
+
"schema",
|
|
98
|
+
"Volcengine function revocation status floor store schema",
|
|
99
|
+
),
|
|
100
|
+
storeId: ownData(
|
|
101
|
+
value,
|
|
102
|
+
"storeId",
|
|
103
|
+
"Volcengine function revocation status floor store identifier",
|
|
104
|
+
),
|
|
105
|
+
tenantId: ownData(
|
|
106
|
+
value,
|
|
107
|
+
"tenantId",
|
|
108
|
+
"Volcengine function revocation status floor store tenant",
|
|
109
|
+
),
|
|
110
|
+
handlerArtifactDigest: ownData(
|
|
111
|
+
value,
|
|
112
|
+
"handlerArtifactDigest",
|
|
113
|
+
"Volcengine function revocation status floor store artifact digest",
|
|
114
|
+
),
|
|
115
|
+
revocationAuthorityId: ownData(
|
|
116
|
+
value,
|
|
117
|
+
"revocationAuthorityId",
|
|
118
|
+
"Volcengine function revocation status floor store authority",
|
|
119
|
+
),
|
|
120
|
+
trustRootDigest: ownData(
|
|
121
|
+
value,
|
|
122
|
+
"trustRootDigest",
|
|
123
|
+
"Volcengine function revocation status floor store trust root",
|
|
124
|
+
),
|
|
125
|
+
stateRootDigest: ownData(
|
|
126
|
+
value,
|
|
127
|
+
"stateRootDigest",
|
|
128
|
+
"Volcengine function revocation status floor state root",
|
|
129
|
+
),
|
|
130
|
+
mode: ownData(
|
|
131
|
+
value,
|
|
132
|
+
"mode",
|
|
133
|
+
"Volcengine function revocation status floor store mode",
|
|
134
|
+
),
|
|
135
|
+
});
|
|
136
|
+
if (
|
|
137
|
+
descriptor.schema !==
|
|
138
|
+
VOLCENGINE_FUNCTION_REVOCATION_STATUS_FLOOR_STORE_SCHEMA ||
|
|
139
|
+
!ID.test(descriptor.storeId) ||
|
|
140
|
+
!ID.test(descriptor.tenantId) ||
|
|
141
|
+
!DIGEST.test(descriptor.handlerArtifactDigest) ||
|
|
142
|
+
!ID.test(descriptor.revocationAuthorityId) ||
|
|
143
|
+
!DIGEST.test(descriptor.trustRootDigest) ||
|
|
144
|
+
!DIGEST.test(descriptor.stateRootDigest) ||
|
|
145
|
+
descriptor.mode !== VOLCENGINE_FUNCTION_REVOCATION_STATUS_FLOOR_MODE
|
|
146
|
+
) {
|
|
147
|
+
throw new TypeError(
|
|
148
|
+
"Volcengine function revocation status floor store descriptor is invalid",
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
return descriptor;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function digestVolcengineFunctionRevocationStatusFloorStoreDescriptor(
|
|
155
|
+
value,
|
|
156
|
+
) {
|
|
157
|
+
return digest(
|
|
158
|
+
VOLCENGINE_FUNCTION_REVOCATION_STATUS_FLOOR_STORE_SCHEMA,
|
|
159
|
+
normalizeDescriptor(value),
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function normalizeSnapshot(value, descriptor) {
|
|
164
|
+
exactData(
|
|
165
|
+
value,
|
|
166
|
+
[
|
|
167
|
+
"schema",
|
|
168
|
+
"storeId",
|
|
169
|
+
"tenantId",
|
|
170
|
+
"handlerArtifactDigest",
|
|
171
|
+
"revocationAuthorityId",
|
|
172
|
+
"trustRootDigest",
|
|
173
|
+
"revision",
|
|
174
|
+
"snapshotDigest",
|
|
175
|
+
"issuedAt",
|
|
176
|
+
"nextUpdate",
|
|
177
|
+
],
|
|
178
|
+
"Volcengine function revocation status snapshot",
|
|
179
|
+
);
|
|
180
|
+
const snapshot = Object.freeze({
|
|
181
|
+
schema: ownData(
|
|
182
|
+
value,
|
|
183
|
+
"schema",
|
|
184
|
+
"Volcengine function revocation status snapshot schema",
|
|
185
|
+
),
|
|
186
|
+
storeId: ownData(
|
|
187
|
+
value,
|
|
188
|
+
"storeId",
|
|
189
|
+
"Volcengine function revocation status snapshot store",
|
|
190
|
+
),
|
|
191
|
+
tenantId: ownData(
|
|
192
|
+
value,
|
|
193
|
+
"tenantId",
|
|
194
|
+
"Volcengine function revocation status snapshot tenant",
|
|
195
|
+
),
|
|
196
|
+
handlerArtifactDigest: ownData(
|
|
197
|
+
value,
|
|
198
|
+
"handlerArtifactDigest",
|
|
199
|
+
"Volcengine function revocation status snapshot artifact digest",
|
|
200
|
+
),
|
|
201
|
+
revocationAuthorityId: ownData(
|
|
202
|
+
value,
|
|
203
|
+
"revocationAuthorityId",
|
|
204
|
+
"Volcengine function revocation status snapshot authority",
|
|
205
|
+
),
|
|
206
|
+
trustRootDigest: ownData(
|
|
207
|
+
value,
|
|
208
|
+
"trustRootDigest",
|
|
209
|
+
"Volcengine function revocation status snapshot trust root",
|
|
210
|
+
),
|
|
211
|
+
revision: ownData(
|
|
212
|
+
value,
|
|
213
|
+
"revision",
|
|
214
|
+
"Volcengine function revocation status snapshot revision",
|
|
215
|
+
),
|
|
216
|
+
snapshotDigest: ownData(
|
|
217
|
+
value,
|
|
218
|
+
"snapshotDigest",
|
|
219
|
+
"Volcengine function revocation status snapshot digest",
|
|
220
|
+
),
|
|
221
|
+
issuedAt: ownData(
|
|
222
|
+
value,
|
|
223
|
+
"issuedAt",
|
|
224
|
+
"Volcengine function revocation status snapshot issue time",
|
|
225
|
+
),
|
|
226
|
+
nextUpdate: ownData(
|
|
227
|
+
value,
|
|
228
|
+
"nextUpdate",
|
|
229
|
+
"Volcengine function revocation status snapshot next update",
|
|
230
|
+
),
|
|
231
|
+
});
|
|
232
|
+
const issuedAtMs = Date.parse(snapshot.issuedAt);
|
|
233
|
+
const nextUpdateMs = Date.parse(snapshot.nextUpdate);
|
|
234
|
+
if (
|
|
235
|
+
snapshot.schema !== VOLCENGINE_FUNCTION_REVOCATION_STATUS_SNAPSHOT_SCHEMA ||
|
|
236
|
+
snapshot.storeId !== descriptor.storeId ||
|
|
237
|
+
snapshot.tenantId !== descriptor.tenantId ||
|
|
238
|
+
snapshot.handlerArtifactDigest !== descriptor.handlerArtifactDigest ||
|
|
239
|
+
snapshot.revocationAuthorityId !== descriptor.revocationAuthorityId ||
|
|
240
|
+
snapshot.trustRootDigest !== descriptor.trustRootDigest ||
|
|
241
|
+
!Number.isSafeInteger(snapshot.revision) ||
|
|
242
|
+
snapshot.revision < 1 ||
|
|
243
|
+
!DIGEST.test(snapshot.snapshotDigest) ||
|
|
244
|
+
!Number.isFinite(issuedAtMs) ||
|
|
245
|
+
new Date(issuedAtMs).toISOString() !== snapshot.issuedAt ||
|
|
246
|
+
!Number.isFinite(nextUpdateMs) ||
|
|
247
|
+
new Date(nextUpdateMs).toISOString() !== snapshot.nextUpdate ||
|
|
248
|
+
nextUpdateMs <= issuedAtMs
|
|
249
|
+
) {
|
|
250
|
+
throw new TypeError(
|
|
251
|
+
"Volcengine function revocation status snapshot is invalid",
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
return snapshot;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function normalizeState(value, descriptorDigest) {
|
|
258
|
+
if (value === null) return null;
|
|
259
|
+
exactData(
|
|
260
|
+
value,
|
|
261
|
+
[
|
|
262
|
+
"schema",
|
|
263
|
+
"descriptorDigest",
|
|
264
|
+
"revision",
|
|
265
|
+
"snapshotDigest",
|
|
266
|
+
"issuedAt",
|
|
267
|
+
"nextUpdate",
|
|
268
|
+
"headDigest",
|
|
269
|
+
],
|
|
270
|
+
"Volcengine function revocation status floor state",
|
|
271
|
+
);
|
|
272
|
+
const core = Object.freeze({
|
|
273
|
+
schema: ownData(
|
|
274
|
+
value,
|
|
275
|
+
"schema",
|
|
276
|
+
"Volcengine function revocation status floor state schema",
|
|
277
|
+
),
|
|
278
|
+
descriptorDigest: ownData(
|
|
279
|
+
value,
|
|
280
|
+
"descriptorDigest",
|
|
281
|
+
"Volcengine function revocation status floor descriptor digest",
|
|
282
|
+
),
|
|
283
|
+
revision: ownData(
|
|
284
|
+
value,
|
|
285
|
+
"revision",
|
|
286
|
+
"Volcengine function revocation status floor revision",
|
|
287
|
+
),
|
|
288
|
+
snapshotDigest: ownData(
|
|
289
|
+
value,
|
|
290
|
+
"snapshotDigest",
|
|
291
|
+
"Volcengine function revocation status floor snapshot digest",
|
|
292
|
+
),
|
|
293
|
+
issuedAt: ownData(
|
|
294
|
+
value,
|
|
295
|
+
"issuedAt",
|
|
296
|
+
"Volcengine function revocation status floor issue time",
|
|
297
|
+
),
|
|
298
|
+
nextUpdate: ownData(
|
|
299
|
+
value,
|
|
300
|
+
"nextUpdate",
|
|
301
|
+
"Volcengine function revocation status floor next update",
|
|
302
|
+
),
|
|
303
|
+
});
|
|
304
|
+
const headDigest = ownData(
|
|
305
|
+
value,
|
|
306
|
+
"headDigest",
|
|
307
|
+
"Volcengine function revocation status floor head digest",
|
|
308
|
+
);
|
|
309
|
+
const issuedAtMs = Date.parse(core.issuedAt);
|
|
310
|
+
const nextUpdateMs = Date.parse(core.nextUpdate);
|
|
311
|
+
if (
|
|
312
|
+
core.schema !== STATE_SCHEMA ||
|
|
313
|
+
core.descriptorDigest !== descriptorDigest ||
|
|
314
|
+
!Number.isSafeInteger(core.revision) ||
|
|
315
|
+
core.revision < 1 ||
|
|
316
|
+
!DIGEST.test(core.snapshotDigest) ||
|
|
317
|
+
!Number.isFinite(issuedAtMs) ||
|
|
318
|
+
new Date(issuedAtMs).toISOString() !== core.issuedAt ||
|
|
319
|
+
!Number.isFinite(nextUpdateMs) ||
|
|
320
|
+
new Date(nextUpdateMs).toISOString() !== core.nextUpdate ||
|
|
321
|
+
nextUpdateMs <= issuedAtMs ||
|
|
322
|
+
headDigest !== digest(STATE_SCHEMA, core)
|
|
323
|
+
) {
|
|
324
|
+
throw new Error(
|
|
325
|
+
"Volcengine function revocation status floor state is invalid",
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
return Object.freeze({ ...core, headDigest });
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
function rollbackError(received, floor) {
|
|
332
|
+
const error = new Error(
|
|
333
|
+
`Volcengine function revocation signer status rollback rejected: received ${received}, floor ${floor}`,
|
|
334
|
+
);
|
|
335
|
+
error.code = "CC_VOLCENGINE_FUNCTION_REVOCATION_STATUS_ROLLBACK";
|
|
336
|
+
return error;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
export function createVolcengineFunctionRevocationStatusFloorStore(options) {
|
|
340
|
+
exactData(
|
|
341
|
+
options,
|
|
342
|
+
["descriptor", "directoryPath"],
|
|
343
|
+
"Volcengine function revocation status floor store",
|
|
344
|
+
);
|
|
345
|
+
const descriptor = normalizeDescriptor(
|
|
346
|
+
ownData(
|
|
347
|
+
options,
|
|
348
|
+
"descriptor",
|
|
349
|
+
"Volcengine function revocation status floor store descriptor",
|
|
350
|
+
),
|
|
351
|
+
);
|
|
352
|
+
const directoryPath = normalizeDirectory(
|
|
353
|
+
ownData(
|
|
354
|
+
options,
|
|
355
|
+
"directoryPath",
|
|
356
|
+
"Volcengine function revocation status floor directory",
|
|
357
|
+
),
|
|
358
|
+
);
|
|
359
|
+
if (
|
|
360
|
+
descriptor.stateRootDigest !==
|
|
361
|
+
digestVolcengineFunctionRevocationStatusFloorRoot(directoryPath)
|
|
362
|
+
) {
|
|
363
|
+
throw new TypeError(
|
|
364
|
+
"Volcengine function revocation status floor state root does not match descriptor",
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
const descriptorDigest = digest(
|
|
368
|
+
VOLCENGINE_FUNCTION_REVOCATION_STATUS_FLOOR_STORE_SCHEMA,
|
|
369
|
+
descriptor,
|
|
370
|
+
);
|
|
371
|
+
const backend = createEvolutionLedgerFileManifestHeadBackend({
|
|
372
|
+
directoryPath,
|
|
373
|
+
});
|
|
374
|
+
const store = Object.freeze({});
|
|
375
|
+
stores.set(store, { backend, descriptor, descriptorDigest });
|
|
376
|
+
return store;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
export function inspectVolcengineFunctionRevocationStatusFloorStore(value) {
|
|
380
|
+
const captured = stores.get(value);
|
|
381
|
+
if (!captured) {
|
|
382
|
+
throw new TypeError(
|
|
383
|
+
"A branded Volcengine function revocation status floor store is required",
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
return Object.freeze({
|
|
387
|
+
descriptor: captured.descriptor,
|
|
388
|
+
descriptorDigest: captured.descriptorDigest,
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
export function captureVolcengineFunctionRevocationStatusFloorStore(value) {
|
|
393
|
+
const captured = stores.get(value);
|
|
394
|
+
if (!captured) {
|
|
395
|
+
throw new TypeError(
|
|
396
|
+
"A branded Volcengine function revocation status floor store is required",
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
const read = () =>
|
|
400
|
+
normalizeState(captured.backend.load(), captured.descriptorDigest);
|
|
401
|
+
return Object.freeze({
|
|
402
|
+
descriptor: captured.descriptor,
|
|
403
|
+
descriptorDigest: captured.descriptorDigest,
|
|
404
|
+
readFloor: read,
|
|
405
|
+
acceptSnapshot(input) {
|
|
406
|
+
const snapshot = normalizeSnapshot(input, captured.descriptor);
|
|
407
|
+
for (let attempt = 0; attempt < 16; attempt += 1) {
|
|
408
|
+
const current = read();
|
|
409
|
+
if (current && snapshot.revision < current.revision) {
|
|
410
|
+
throw rollbackError(snapshot.revision, current.revision);
|
|
411
|
+
}
|
|
412
|
+
if (current && snapshot.revision === current.revision) {
|
|
413
|
+
if (snapshot.snapshotDigest !== current.snapshotDigest) {
|
|
414
|
+
throw new Error(
|
|
415
|
+
"Volcengine function revocation signer status conflicts at the current revision",
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
return Object.freeze({
|
|
419
|
+
schema: VOLCENGINE_FUNCTION_REVOCATION_STATUS_ACK_SCHEMA,
|
|
420
|
+
storeId: captured.descriptor.storeId,
|
|
421
|
+
revision: current.revision,
|
|
422
|
+
snapshotDigest: current.snapshotDigest,
|
|
423
|
+
headDigest: current.headDigest,
|
|
424
|
+
durable: true,
|
|
425
|
+
readbackVerified: true,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
if (
|
|
429
|
+
current &&
|
|
430
|
+
Date.parse(snapshot.issuedAt) <= Date.parse(current.issuedAt)
|
|
431
|
+
) {
|
|
432
|
+
throw new Error(
|
|
433
|
+
"Volcengine function revocation signer status issue time did not advance",
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
const core = Object.freeze({
|
|
437
|
+
schema: STATE_SCHEMA,
|
|
438
|
+
descriptorDigest: captured.descriptorDigest,
|
|
439
|
+
revision: snapshot.revision,
|
|
440
|
+
snapshotDigest: snapshot.snapshotDigest,
|
|
441
|
+
issuedAt: snapshot.issuedAt,
|
|
442
|
+
nextUpdate: snapshot.nextUpdate,
|
|
443
|
+
});
|
|
444
|
+
const next = Object.freeze({
|
|
445
|
+
...core,
|
|
446
|
+
headDigest: digest(STATE_SCHEMA, core),
|
|
447
|
+
});
|
|
448
|
+
const result = captured.backend.compareAndSet({
|
|
449
|
+
expectedHeadDigest: current?.headDigest ?? null,
|
|
450
|
+
nextHead: next,
|
|
451
|
+
});
|
|
452
|
+
if (!result.committed) continue;
|
|
453
|
+
const confirmed = normalizeState(
|
|
454
|
+
result.head,
|
|
455
|
+
captured.descriptorDigest,
|
|
456
|
+
);
|
|
457
|
+
if (
|
|
458
|
+
confirmed.revision !== snapshot.revision ||
|
|
459
|
+
confirmed.snapshotDigest !== snapshot.snapshotDigest
|
|
460
|
+
) {
|
|
461
|
+
throw new Error(
|
|
462
|
+
"Volcengine function revocation status floor durable readback differs",
|
|
463
|
+
);
|
|
464
|
+
}
|
|
465
|
+
return Object.freeze({
|
|
466
|
+
schema: VOLCENGINE_FUNCTION_REVOCATION_STATUS_ACK_SCHEMA,
|
|
467
|
+
storeId: captured.descriptor.storeId,
|
|
468
|
+
revision: confirmed.revision,
|
|
469
|
+
snapshotDigest: confirmed.snapshotDigest,
|
|
470
|
+
headDigest: confirmed.headDigest,
|
|
471
|
+
durable: true,
|
|
472
|
+
readbackVerified: true,
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
throw new Error(
|
|
476
|
+
"Volcengine function revocation status floor contention did not settle",
|
|
477
|
+
);
|
|
478
|
+
},
|
|
479
|
+
});
|
|
480
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Governance coverage metrics — the last open item of P1-9 ("覆盖率指标") in
|
|
3
|
-
* docs/CLAUDE_CODE_IDE_INCREMENTAL_GAP_ANALYSIS_2026-07-13.md, and the
|
|
3
|
+
* docs/research/ide/CLAUDE_CODE_IDE_INCREMENTAL_GAP_ANALYSIS_2026-07-13.md, and the
|
|
4
4
|
* computation behind two §11.3 acceptance targets:
|
|
5
5
|
*
|
|
6
6
|
* - "高风险 Tool Call Ledger/Trace 覆盖率:100%"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Deterministic-headless manifest helpers (gap-analysis 2026-07-11,
|
|
3
|
-
* docs/CLAUDE_CODE_CLI_GAP_ANALYSIS.md P0 "确定性 Headless").
|
|
3
|
+
* docs/research/cli/CLAUDE_CODE_CLI_GAP_ANALYSIS.md P0 "确定性 Headless").
|
|
4
4
|
*
|
|
5
5
|
* The stream-json init event carries a protocol version, whether this run
|
|
6
6
|
* persists its session, which ambient customization sources are live, and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Offline protocol replay — the last open pure item of P1-9 ("离线协议回放") in
|
|
3
|
-
* docs/CLAUDE_CODE_IDE_INCREMENTAL_GAP_ANALYSIS_2026-07-13.md.
|
|
3
|
+
* docs/research/ide/CLAUDE_CODE_IDE_INCREMENTAL_GAP_ANALYSIS_2026-07-13.md.
|
|
4
4
|
*
|
|
5
5
|
* [[event-seq-replay.js]] replays for TRANSPORT reliability (re-send a gap over a
|
|
6
6
|
* lossy socket). This module replays for PROTOCOL COMPAT: take a recorded
|
|
@@ -7,10 +7,15 @@ import {
|
|
|
7
7
|
} from "../harness/jsonl-session-store.js";
|
|
8
8
|
import { canonicalJson } from "./scheduler-kernel/contract.js";
|
|
9
9
|
|
|
10
|
-
const {
|
|
10
|
+
const {
|
|
11
|
+
inspectSkillInvocationReceiptCompatibility,
|
|
12
|
+
verifySkillInvocationReceipt,
|
|
13
|
+
} = skillInvocationReceipt;
|
|
11
14
|
|
|
12
|
-
export const
|
|
15
|
+
export const LEGACY_SKILL_OUTCOME_AUTHORITY_SCHEMA =
|
|
13
16
|
"chainlesschain.skill-outcome-transcript-authority/v1";
|
|
17
|
+
export const SKILL_OUTCOME_AUTHORITY_SCHEMA =
|
|
18
|
+
"chainlesschain.skill-outcome-transcript-authority/v2";
|
|
14
19
|
export const MAX_OUTCOME_AUTHORITY_SESSIONS = 128;
|
|
15
20
|
export const MAX_OUTCOME_AUTHORITY_RECEIPTS = 10_000;
|
|
16
21
|
|
|
@@ -103,13 +108,16 @@ export function buildSkillOutcomeTranscriptAuthority(
|
|
|
103
108
|
options.maxReceipts === undefined
|
|
104
109
|
? MAX_OUTCOME_AUTHORITY_RECEIPTS
|
|
105
110
|
: Number(options.maxReceipts);
|
|
111
|
+
const expectedEnvironmentDigest = options.expectedEnvironmentDigest ?? null;
|
|
106
112
|
if (
|
|
107
113
|
!Number.isSafeInteger(maxSessions) ||
|
|
108
114
|
maxSessions < 1 ||
|
|
109
115
|
maxSessions > MAX_OUTCOME_AUTHORITY_SESSIONS ||
|
|
110
116
|
!Number.isSafeInteger(maxReceipts) ||
|
|
111
117
|
maxReceipts < 1 ||
|
|
112
|
-
maxReceipts > MAX_OUTCOME_AUTHORITY_RECEIPTS
|
|
118
|
+
maxReceipts > MAX_OUTCOME_AUTHORITY_RECEIPTS ||
|
|
119
|
+
(expectedEnvironmentDigest !== null &&
|
|
120
|
+
!DIGEST.test(expectedEnvironmentDigest))
|
|
113
121
|
) {
|
|
114
122
|
throw new TypeError("Skill outcome authority bounds are invalid");
|
|
115
123
|
}
|
|
@@ -170,8 +178,30 @@ export function buildSkillOutcomeTranscriptAuthority(
|
|
|
170
178
|
const totals = new Map();
|
|
171
179
|
let attributionEligibleReceiptCount = 0;
|
|
172
180
|
let outcomeEligibleReceiptCount = 0;
|
|
181
|
+
let legacyEnvironmentUnboundReceiptCount = 0;
|
|
182
|
+
let staleEnvironmentReceiptCount = 0;
|
|
183
|
+
let incompleteAttributionReceiptCount = 0;
|
|
173
184
|
for (const receipt of uniqueReceipts.values()) {
|
|
174
|
-
|
|
185
|
+
const compatibility = inspectSkillInvocationReceiptCompatibility(receipt, {
|
|
186
|
+
expectedEnvironmentDigest,
|
|
187
|
+
});
|
|
188
|
+
if (compatibility.legacyEnvironmentUnbound) {
|
|
189
|
+
legacyEnvironmentUnboundReceiptCount += 1;
|
|
190
|
+
} else if (!compatibility.environmentBoundAttributionEligible) {
|
|
191
|
+
incompleteAttributionReceiptCount += 1;
|
|
192
|
+
} else if (
|
|
193
|
+
expectedEnvironmentDigest !== null &&
|
|
194
|
+
!compatibility.currentEnvironmentEligible
|
|
195
|
+
) {
|
|
196
|
+
staleEnvironmentReceiptCount += 1;
|
|
197
|
+
}
|
|
198
|
+
if (
|
|
199
|
+
!compatibility.environmentBoundAttributionEligible ||
|
|
200
|
+
(expectedEnvironmentDigest !== null &&
|
|
201
|
+
!compatibility.currentEnvironmentEligible)
|
|
202
|
+
) {
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
175
205
|
attributionEligibleReceiptCount += 1;
|
|
176
206
|
const hasOutcomeEvidence =
|
|
177
207
|
receipt.graderReceipts.length > 0 || receipt.userCorrectionRef !== null;
|
|
@@ -213,7 +243,12 @@ export function buildSkillOutcomeTranscriptAuthority(
|
|
|
213
243
|
}))
|
|
214
244
|
.sort((left, right) => left.sessionId.localeCompare(right.sessionId));
|
|
215
245
|
const sourceDigest = `sha256:${createHash("sha256")
|
|
216
|
-
.update(
|
|
246
|
+
.update(
|
|
247
|
+
`${SKILL_OUTCOME_AUTHORITY_SCHEMA}\0${canonicalJson({
|
|
248
|
+
source,
|
|
249
|
+
expectedEnvironmentDigest,
|
|
250
|
+
})}`,
|
|
251
|
+
)
|
|
217
252
|
.digest("hex")}`;
|
|
218
253
|
return Object.freeze({
|
|
219
254
|
schema: SKILL_OUTCOME_AUTHORITY_SCHEMA,
|
|
@@ -228,6 +263,11 @@ export function buildSkillOutcomeTranscriptAuthority(
|
|
|
228
263
|
uniqueReceiptCount: uniqueReceipts.size,
|
|
229
264
|
attributionEligibleReceiptCount,
|
|
230
265
|
outcomeEligibleReceiptCount,
|
|
266
|
+
legacyEnvironmentUnboundReceiptCount,
|
|
267
|
+
staleEnvironmentReceiptCount,
|
|
268
|
+
incompleteAttributionReceiptCount,
|
|
269
|
+
environmentPolicy:
|
|
270
|
+
expectedEnvironmentDigest === null ? "bound" : "current",
|
|
231
271
|
duplicateReceiptCount,
|
|
232
272
|
maxSessions,
|
|
233
273
|
maxReceipts,
|
|
@@ -8259,6 +8259,22 @@ async function executeToolInner(
|
|
|
8259
8259
|
}),
|
|
8260
8260
|
)
|
|
8261
8261
|
.digest("hex")}`;
|
|
8262
|
+
const invocationEnvironmentDigest =
|
|
8263
|
+
runtimeEligibility?.binding?.environmentDigest ||
|
|
8264
|
+
`sha256:${createHash("sha256")
|
|
8265
|
+
.update("chainlesschain.cli-skill-invocation-environment/v1\0")
|
|
8266
|
+
.update(
|
|
8267
|
+
JSON.stringify({
|
|
8268
|
+
node: process.versions.node,
|
|
8269
|
+
platform: process.platform,
|
|
8270
|
+
arch: process.arch,
|
|
8271
|
+
provider: llmOptions?.provider ?? null,
|
|
8272
|
+
model: llmOptions?.model ?? null,
|
|
8273
|
+
toolSetDigest,
|
|
8274
|
+
policyDigest,
|
|
8275
|
+
}),
|
|
8276
|
+
)
|
|
8277
|
+
.digest("hex")}`;
|
|
8262
8278
|
const invocationStartedAt = Date.now();
|
|
8263
8279
|
const invocationStart = startSkillInvocation({
|
|
8264
8280
|
attributionRequired: ["automatic-candidate", "canary"].includes(
|
|
@@ -8282,6 +8298,7 @@ async function executeToolInner(
|
|
|
8282
8298
|
toolSetDigest,
|
|
8283
8299
|
osSandboxPermissionPolicyDigest: policyDigest,
|
|
8284
8300
|
taskCohort: "cli:run_skill",
|
|
8301
|
+
environmentDigest: invocationEnvironmentDigest,
|
|
8285
8302
|
});
|
|
8286
8303
|
const settleInvocation = (executionStatus, result = {}) =>
|
|
8287
8304
|
settleSkillInvocation(invocationStart, {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as u,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-DjY-3sMA.js";import"./icons-DG5UD-6K.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},T={class:"bubble"},L={class:"meta"},M={class:"actor"},R={class:"time"},V={class:"body"};function q(c,d,t,r,i,l){const o=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",T,[n("div",L,[n("span",M,a(r.actorLabel),1),n("span",R,a(r.formattedTime),1)]),n("div",V,a(r.messageText),1),t.event.source.adapter?(u(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const A=k(N,[["render",q],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-3f6YcL/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{A as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as a,J as p,b as c}from"./vendor-Bn1JzzAn.js";import{r as s}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-DjY-3sMA.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=c(()=>s(e.content||"")),n={props:e,rendered:r,computed:c,get renderMarkdown(){return s}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return a(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-3f6YcL/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-DjY-3sMA.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-CYLrgfKA.js";import{a0 as t}from"./index-DjY-3sMA.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-DYQpmcDW.js";import"./useFlexGapSupport-Cj82ggQ_.js";import"./styleChecker-BEsubSMu.js";import"./index-C4Mqhmas.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-B7nbx-iJ.js";import{a0 as t}from"./index-DjY-3sMA.js";import"./vendor-Bn1JzzAn.js";import"./index-C4Mqhmas.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|