chainlesschain 0.166.58 → 0.166.62
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/package.json +3 -2
- package/src/assets/web-panel/assets/{AIOps-DoyI29Aw.js → AIOps-BqoRiuXE.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-eZKcEoxc.js → ActionButton-BwBhyFIm.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-B2C2e9A7.js → Analytics-DTW03Emb.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DkZJiu4X.js → AppLayout-CI-wxMLQ.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-8PD3BXVa.js → Artifacts-DVqbM3iE.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Cv6sRlFu.js → Audit-DulhOs16.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-D-V84Qpm.js → BackgroundAgents-DnRs67e8.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DYJQcxj1.js → Backup-BFEZo0vX.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-KL2IeywH.js → BaseInput-D185sBnp.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Bt9wy_Yn.js → Chat-DUvP-2SK.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-ChB6fH-W.js → ChatBubbleRenderer-u9WKQbZb.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-Dm-nfdnd.js → Checkbox-D8Zh_18b.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CYi3yDzv.js → Codegen-WdiWRdfC.js} +1 -1
- package/src/assets/web-panel/assets/{Col-C7sQywfG.js → Col-CnSoVpw6.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DjxuqAM4.js → Community-BJDHgBkw.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CD_4lbxr.js → Compact-uNRdmBaq.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BtDpNJrS.js → Compliance-_6jRTJa3.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-l19ANH6Q.js → Cowork-D5lnbXR6.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-Br-rBoEK.js → Cron-D6tuGBVg.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-60UVvKET.js → Crosschain-Ce5e9Lbm.js} +1 -1
- package/src/assets/web-panel/assets/{DID-B9dqar51.js → DID-1VVKZ_c1.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-B39hhdHb.js → Dashboard-DuHcZ13w.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Bm5rCfvF.js → Dropdown-BC3EK0wN.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BI9HANDl.js → EmailListRenderer-DzLpGs5E.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-Cfqn_yCq.js → EvolutionSettings-x2XZHG0Z.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-9Y4_zyhT.js → FamilyGuardDashboard-nAavV50Y.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-vnbbmMdF.js → Federation-CCHWVS5J.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BEKNtNF9.js → FormItemContext-CGod_3Ni.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BmWr16IL.js → GenericCardRenderer-DIFYQa2f.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CUUwAXdn.js → Git-DikM1Nc5.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Bw8XZmH9.js → Governance-SzzBXCDX.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CNrml6dn.js → Inference-wVsu9QzM.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BhxOwpW_.js → KnowledgeGraph-DDpVxfO-.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BV8WViUG.js → Logs-BnIjS-2Z.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-3AsRzie6.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-ztcu4mg4.js → Marketplace-Cj3PLhXV.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-D-wzRO7z.js → McpTools-DMKO55Kz.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-ChdjWC1R.js → Memory-wWJl5yJL.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-B1QHzIjE.js → MobileBridge-CJ_VIPgJ.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DmaRtaMw.js → MobileProjects-CiJT5cF8.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-DRQMr4WP.js → Mtc-BXmndm9a.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-Cwo0on-u.js → MtcAudit-C3hWIAnz.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-QplgySFt.js → Multisig-DU4OUQ7u.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BWkMyuAy.js → NLProgramming-CyAwOeU5.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BI_pSEM0.js → Notes--YvcAg13.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DiuFo6Xe.js → NotificationSettings-Dyu6dC0D.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DZzQhujZ.js → OrderTableRenderer-Df-0iTO2.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DqEdqWB0.js → Organization-a9Em4Sgu.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CO7_2YLN.js → Overflow-CCQtvcsw.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BN5RiNst.js → P2P--CaB5e38.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CapfG4bl.js → PdhVaultBrowser-CmfHjoJG.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-B24c5fWW.js → Permissions-BCDjNsXi.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-D7Mb3_vh.js → PersonalDataHub-ByprqCJd.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-BsfxlbOQ.js → Pipeline-CZRZq-P0.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Bq7c7IYy.js → Privacy-CeDay_dV.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Clse2DPl.js → ProjectInit-CgpIfRAZ.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CHAEdjri.js → ProjectSettings-CU8iakEs.js} +2 -2
- package/src/assets/web-panel/assets/Projects-pPM0KRfQ.js +1 -0
- package/src/assets/web-panel/assets/{Providers-DQyH3PXU.js → Providers-BfpxsZh1.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-t2Z-N49o.js → QrScannerModal-Dmv3rax1.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BacR7PlI.js → QuickAsk-DBOtB5wd.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-D-NAy0CQ.js → Recommend-C_KnHRvS.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-CjI3GeVQ.js → RemoteSession-OIO9kT7D.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-HoQ3i2oW.js → Reputation-BCfNIBt3.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CY2jczWa.js → Row-pnhw7dyj.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Bd3o20IY.js → RssFeed-CLJ1A3FF.js} +3 -3
- package/src/assets/web-panel/assets/{Search-C88KjgTv.js → Search-CSQzJ3gj.js} +1 -1
- package/src/assets/web-panel/assets/{Security-yfmfvujK.js → Security-CS_mvkaE.js} +4 -4
- package/src/assets/web-panel/assets/{Services-DLPBWoxT.js → Services-DBqA2Csq.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DzDjvVQi.js → Skeleton-BjR3_iWH.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DqfrJIyP.js → Skills-DwGIXRJS.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BXhsGzkm.js → Sla-DwiHHJtJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-jxSl2JDo.js → SpeechSettings-QYN_t0CS.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BX2xKtI3.js → SyncSettings-DcXA1Jp3.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-DwWqvoyB.js +1 -0
- package/src/assets/web-panel/assets/{Templates-CTpj9f62.js → Templates-C6MTuLXU.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-nnQuhdPg.js → Tenant-DmbdMB2D.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-cJ0vbuTe.js → Terminal-DYeXnE4A.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DN08D0SD.js → TimelineRenderer-BrwLhsSE.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-C8BWWBUD.js → Tokens-C5kKpRWj.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DhD-LUoe.js → Trigger-C4Zyg1jj.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-D0nFyc_Z.js → Trust-D0mrY3kY.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B59G57LP.js → UkeySign-Bq5NMLLb.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BpYACxVC.js → VideoEditing-OObS6euz.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DlZ3rKGD.js → Wallet-Die77ZAO.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-De4dNyig.js → WebAuthn-DFpqn0WO.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-C2Tewnhp.js → WorkflowEditor-BgKZiece.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CDBn4JLE.js → chat-CbWtbRmr.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BNawl0d_.js → colors-Zu_TgmpG.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-n65WDhze.js → compact-item-BqABAwA_.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DAKgOdIy.js → createContext-DR6r1ykz.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CmMzSuk5.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DhxFG46W.js → hasIn-BNnYbjOt.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeTlqus4.js → index--1t0mcMh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV6iHrUO.js → index--vigBXnN.js} +1 -1
- package/src/assets/web-panel/assets/{index-ByDs4cW4.js → index-55eCb40A.js} +3 -3
- package/src/assets/web-panel/assets/{index-KT94nMha.js → index-B9qA3lcI.js} +1 -1
- package/src/assets/web-panel/assets/{index-PlOBwfR1.js → index-BCyrVLzm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBFjMjmp.js → index-BQ1WFS4G.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDTrf8WH.js → index-BQHn6m4S.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFkamspD.js → index-BbHnxChr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DkW0HGr-.js → index-BtQDpNFU.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cv7LqHwv.js → index-BvQB-LK5.js} +1 -1
- package/src/assets/web-panel/assets/{index-By-zGgUp.js → index-C912Wlyi.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLFRz0_7.js → index-CO9hQ7ri.js} +1 -1
- package/src/assets/web-panel/assets/{index-DleKcclQ.js → index-CR4uB9Mt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAogaHa9.js → index-CSNMSJAt.js} +1 -1
- package/src/assets/web-panel/assets/{index-pzEYIGNA.js → index-CVgcq0cJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ds290C06.js → index-CYgH1j85.js} +1 -1
- package/src/assets/web-panel/assets/{index-CW_OUdP8.js → index-CbJgVaoQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzONk4rW.js → index-CkBDWART.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRyzRluv.js → index-CmGll9ri.js} +1 -1
- package/src/assets/web-panel/assets/{index-D34AXxN9.js → index-CpmSx_mp.js} +1 -1
- package/src/assets/web-panel/assets/{index-0Y-ncsVy.js → index-Ct4xnx2r.js} +1 -1
- package/src/assets/web-panel/assets/{index-CE6OcLof.js → index-CuYLjMxX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZI8xwwt.js → index-D08ytPR_.js} +1 -1
- package/src/assets/web-panel/assets/{index-5oJjovnA.js → index-DEdqCQKQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQFAuU1c.js → index-DaKziwj_.js} +1 -1
- package/src/assets/web-panel/assets/{index-L1QnA0gW.js → index-DiaPl_6F.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_-6qQf0.js → index-DuCixW1o.js} +1 -1
- package/src/assets/web-panel/assets/index-Dw-oPGSM.js +1 -0
- package/src/assets/web-panel/assets/{index-CSOgoyqx.js → index-DxloCIDQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BudfMkBy.js → index-GrGT2dft.js} +1 -1
- package/src/assets/web-panel/assets/index-OXemaG8f.js +1 -0
- package/src/assets/web-panel/assets/{index-BfXdTvku.js → index-P-0rrwu0.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZJrAg98.js → index-fvl4dSWm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCujBaFg.js → index-hWckjvz-.js} +1 -1
- package/src/assets/web-panel/assets/{index-KZkt4e9N.js → index-hZ41pakD.js} +1 -1
- package/src/assets/web-panel/assets/{index-hA9VUXGr.js → index-n62j7dTt.js} +1 -1
- package/src/assets/web-panel/assets/{index-gG1WJBpa.js → index-rS1lj7A9.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6sWUgN6.js → index-uwS83tsv.js} +1 -1
- package/src/assets/web-panel/assets/{index--76HBS1k.js → index-ys7--3Ab.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-B3bCivrt.js → initDefaultProps-BEtGYjIT.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CF5pGsxz.js → motion-Cvnft4fL.js} +1 -1
- package/src/assets/web-panel/assets/{move-CaOFtFLU.js → move-CdxE_5Yl.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Z4-50Y1c.js → mtc-parser-CS0l6IJn.js} +1 -1
- package/src/assets/web-panel/assets/{omit-AK4WqVTT.js → omit-Bnji87sb.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Dbye0px4.js → pickAttrs-BYdnEgN3.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DCmr-Dks.js → placementArrow-DYYd524z.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CJ3Zm_-H.js → responsiveObserve-BbIJIkXp.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BuSk5-ue.js → slide-BSvuvfUS.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-8u_lKSFJ.js → statusUtils-DeLSt3js.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-sy6_m42F.js → styleChecker-DpJTPfyI.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Di5EfYGo.js → useFlexGapSupport-S7WdFQMU.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BTfX_Ri1.js → useFs-CkfCBy52.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-kqurO26X.js → usePersonalDataHub-CA48p8Gt.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DRkH4mPV.js → vnode-C9D1tq_L.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-ON_-UuD_.js → zoom-B0TG7YQI.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +65 -0
- package/src/generated/cc-agent-protocol.schema.json +65 -1
- package/src/lib/background-agent-supervisor.js +10 -1
- package/src/lib/context-memory-kernel/jsonl-session-context-port.js +33 -0
- package/src/lib/context-memory-kernel/task-worklog-port.js +388 -0
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +119 -12
- package/src/lib/evolution/evolution-artifact-ports.js +3 -0
- package/src/lib/evolution/evolution-deployment-loader.js +23 -0
- package/src/lib/evolution/evolution-eval-gate.js +5 -0
- package/src/lib/evolution/evolution-ledger-ports.js +41 -17
- package/src/lib/evolution/pm-exploration-benchmark.js +253 -0
- package/src/lib/evolution/pm-exploration-ledger-adapter.js +672 -0
- package/src/lib/evolution/pm-exploration-rounds.js +832 -0
- package/src/lib/evolution/pm-result-grader.cjs +287 -0
- package/src/lib/public-ide-capability-manifest.js +1 -0
- package/src/lib/read-file-loop-guard.js +36 -5
- package/src/lib/secure-fs.js +51 -4
- package/src/lib/task-progress-tracker.js +29 -7
- package/src/lib/text-file-search.js +1 -0
- package/src/runtime/agent-core.js +48 -4
- package/src/runtime/headless-stream.js +121 -4
- package/src/assets/web-panel/assets/MarkdownRenderer-CO1qbiOY.js +0 -1
- package/src/assets/web-panel/assets/Projects-C1UHvBEK.js +0 -1
- package/src/assets/web-panel/assets/Tasks-P9MmRYt4.js +0 -1
- package/src/assets/web-panel/assets/devWarning-sBSSW127.js +0 -1
- package/src/assets/web-panel/assets/index-BIJTDSLY.js +0 -1
- package/src/assets/web-panel/assets/index-CrBauOkp.js +0 -1
|
@@ -57,6 +57,7 @@ import {
|
|
|
57
57
|
export const EVOLUTION_LEDGER_PORTS_INVALID_CODE =
|
|
58
58
|
"CC_EVOLUTION_LEDGER_PORTS_INVALID";
|
|
59
59
|
const RELEASE_OPERATION_READERS = new WeakMap();
|
|
60
|
+
const DURABLE_ARTIFACT_RESOLVER_BINDINGS = new WeakMap();
|
|
60
61
|
|
|
61
62
|
// This read-only recovery surface is minted only alongside real Ledger ports.
|
|
62
63
|
// Matching JSON, inherited methods or a caller-supplied query function cannot
|
|
@@ -216,7 +217,6 @@ const LEDGER_ARTIFACT_REQUEST_KEYS = new Set([
|
|
|
216
217
|
"ref",
|
|
217
218
|
"tenantId",
|
|
218
219
|
]);
|
|
219
|
-
const DURABLE_ARTIFACT_TYPE_SET = new Set(Object.values(ARTIFACT_TYPES));
|
|
220
220
|
const QUERY_RESULT_KEYS = new Set([
|
|
221
221
|
"anchor",
|
|
222
222
|
"authenticated",
|
|
@@ -3859,24 +3859,24 @@ export function createEvolutionLedgerDurableArtifactResolver(options = {}) {
|
|
|
3859
3859
|
DURABLE_RESOLVER_OPTION_KEYS,
|
|
3860
3860
|
"durable ledger artifact resolver options",
|
|
3861
3861
|
);
|
|
3862
|
+
const artifactPortsInput = ownData(
|
|
3863
|
+
options,
|
|
3864
|
+
"artifactPorts",
|
|
3865
|
+
"durable ledger artifact resolver options",
|
|
3866
|
+
EVOLUTION_LEDGER_PORTS_INVALID_CODE,
|
|
3867
|
+
);
|
|
3862
3868
|
const artifactPorts = requireStableInstance(
|
|
3863
|
-
|
|
3864
|
-
options,
|
|
3865
|
-
"artifactPorts",
|
|
3866
|
-
"durable ledger artifact resolver options",
|
|
3867
|
-
EVOLUTION_LEDGER_PORTS_INVALID_CODE,
|
|
3868
|
-
),
|
|
3869
|
+
artifactPortsInput,
|
|
3869
3870
|
EvolutionArtifactPorts.prototype,
|
|
3870
3871
|
"EvolutionArtifactPorts",
|
|
3871
3872
|
);
|
|
3872
|
-
const
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
EVOLUTION_LEDGER_PORTS_INVALID_CODE,
|
|
3878
|
-
),
|
|
3873
|
+
const durabilityAuthorityInput = ownData(
|
|
3874
|
+
options,
|
|
3875
|
+
"artifactDurabilityAuthority",
|
|
3876
|
+
"durable ledger artifact resolver options",
|
|
3877
|
+
EVOLUTION_LEDGER_PORTS_INVALID_CODE,
|
|
3879
3878
|
);
|
|
3879
|
+
const authority = captureDurabilityAuthority(durabilityAuthorityInput);
|
|
3880
3880
|
const artifactTenantId = identifier(
|
|
3881
3881
|
ownData(
|
|
3882
3882
|
options,
|
|
@@ -4005,8 +4005,7 @@ export function createEvolutionLedgerDurableArtifactResolver(options = {}) {
|
|
|
4005
4005
|
record.schema === EVOLUTION_DURABLE_ARTIFACT_RECORD_SCHEMA &&
|
|
4006
4006
|
record.tenantId === artifactTenantId &&
|
|
4007
4007
|
record.purpose === purpose &&
|
|
4008
|
-
record.retention === "ledger"
|
|
4009
|
-
DURABLE_ARTIFACT_TYPE_SET.has(record.type);
|
|
4008
|
+
record.retention === "ledger";
|
|
4010
4009
|
if (
|
|
4011
4010
|
canonicalJson(record) !== json ||
|
|
4012
4011
|
(durable !== null && durable.result.type !== record.type) ||
|
|
@@ -4044,7 +4043,32 @@ export function createEvolutionLedgerDurableArtifactResolver(options = {}) {
|
|
|
4044
4043
|
schema: EVOLUTION_ARTIFACT_RESOLUTION_SCHEMA,
|
|
4045
4044
|
});
|
|
4046
4045
|
};
|
|
4047
|
-
|
|
4046
|
+
const resolver = Object.freeze(resolve);
|
|
4047
|
+
DURABLE_ARTIFACT_RESOLVER_BINDINGS.set(
|
|
4048
|
+
resolver,
|
|
4049
|
+
Object.freeze({
|
|
4050
|
+
artifactTenantId,
|
|
4051
|
+
authorityId: authority.id,
|
|
4052
|
+
purpose,
|
|
4053
|
+
matchesArtifactPorts: Object.freeze(
|
|
4054
|
+
(value) => value === artifactPortsInput,
|
|
4055
|
+
),
|
|
4056
|
+
matchesDurabilityAuthority: Object.freeze(
|
|
4057
|
+
(value) => value === durabilityAuthorityInput,
|
|
4058
|
+
),
|
|
4059
|
+
}),
|
|
4060
|
+
);
|
|
4061
|
+
return resolver;
|
|
4062
|
+
}
|
|
4063
|
+
|
|
4064
|
+
/** Read-only identity for a resolver constructed with the durability authority. */
|
|
4065
|
+
export function captureEvolutionLedgerDurableArtifactResolver(value) {
|
|
4066
|
+
const binding = DURABLE_ARTIFACT_RESOLVER_BINDINGS.get(value);
|
|
4067
|
+
if (!binding)
|
|
4068
|
+
throw new TypeError(
|
|
4069
|
+
"a branded durable EvolutionLedger artifact resolver is required",
|
|
4070
|
+
);
|
|
4071
|
+
return binding;
|
|
4048
4072
|
}
|
|
4049
4073
|
|
|
4050
4074
|
export function createEvolutionLedgerPorts(options = {}) {
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/** PM dataset tooling and launch preflight. No runtime or promotion authority. */
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { isProxy } from "node:util/types";
|
|
4
|
+
import {
|
|
5
|
+
buildEvolutionEvalSuite,
|
|
6
|
+
computeEvolutionEvalTrainingPartitionDigest,
|
|
7
|
+
verifyEvolutionEvalSuite,
|
|
8
|
+
} from "./evolution-eval-gate.js";
|
|
9
|
+
import { createPmExplorationPlan } from "./pm-exploration-rounds.js";
|
|
10
|
+
import grader from "./pm-result-grader.cjs";
|
|
11
|
+
|
|
12
|
+
const GROUPS = ["template", "project", "principal", "timeWindow"];
|
|
13
|
+
const PREFIXES = ["template", "project", "principal", "time-window"];
|
|
14
|
+
const GROUP_DIGEST = /^[a-f0-9]{64}$/u;
|
|
15
|
+
const REQUIRED_ENV = Object.freeze({
|
|
16
|
+
NODE_ENV: "production",
|
|
17
|
+
MOCK_LLM: "false",
|
|
18
|
+
MOCK_HARDWARE: "false",
|
|
19
|
+
SKIP_SLOW_INIT: "false",
|
|
20
|
+
CHAINLESSCHAIN_DISABLE_NATIVE_DB: "0",
|
|
21
|
+
CHAINLESSCHAIN_DISABLE_DB_PERSISTENCE: "0",
|
|
22
|
+
CC_IPC_ACTOR_GUARD: "enforce",
|
|
23
|
+
CC_IPC_RBAC_GUARD: "enforce",
|
|
24
|
+
});
|
|
25
|
+
const PM_GRADER = "pm-objective-outcome-v1";
|
|
26
|
+
|
|
27
|
+
function exact(value, keys, label) {
|
|
28
|
+
if (
|
|
29
|
+
!value ||
|
|
30
|
+
typeof value !== "object" ||
|
|
31
|
+
isProxy(value) ||
|
|
32
|
+
Object.getPrototypeOf(value) !== Object.prototype
|
|
33
|
+
)
|
|
34
|
+
throw new TypeError(`${label} must be plain data`);
|
|
35
|
+
const actual = Reflect.ownKeys(value);
|
|
36
|
+
if (
|
|
37
|
+
actual.length !== keys.length ||
|
|
38
|
+
actual.some((key) => {
|
|
39
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
40
|
+
return (
|
|
41
|
+
!keys.includes(key) ||
|
|
42
|
+
!descriptor.enumerable ||
|
|
43
|
+
!("value" in descriptor)
|
|
44
|
+
);
|
|
45
|
+
})
|
|
46
|
+
)
|
|
47
|
+
throw new TypeError(`${label} has unexpected or missing fields`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function groupKey(kind, value) {
|
|
51
|
+
if (
|
|
52
|
+
typeof value !== "string" ||
|
|
53
|
+
value.trim() !== value ||
|
|
54
|
+
!value ||
|
|
55
|
+
value.length > 256
|
|
56
|
+
)
|
|
57
|
+
throw new TypeError(`invalid ${kind} group`);
|
|
58
|
+
return `${kind}-${createHash("sha256").update(value).digest("hex")}`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Trusted dataset-author input; store the result outside the Actor workspace. */
|
|
62
|
+
export function buildPmExplorationSuite(input) {
|
|
63
|
+
exact(input, ["suiteId", "datasetVersion", "tasks"], "PM suite input");
|
|
64
|
+
if (
|
|
65
|
+
!Array.isArray(input.tasks) ||
|
|
66
|
+
input.tasks.length < 3 ||
|
|
67
|
+
input.tasks.length > 10_000
|
|
68
|
+
)
|
|
69
|
+
throw new TypeError(
|
|
70
|
+
"PM suite requires bounded training, validation and test tasks",
|
|
71
|
+
);
|
|
72
|
+
const tasks = input.tasks.map((task) => {
|
|
73
|
+
exact(task, ["id", "split", "groups", "prompt", "expected"], "PM task");
|
|
74
|
+
exact(task.groups, GROUPS, "PM task groups");
|
|
75
|
+
if (
|
|
76
|
+
typeof task.prompt !== "string" ||
|
|
77
|
+
!task.prompt.trim() ||
|
|
78
|
+
task.prompt.length > 16_384
|
|
79
|
+
)
|
|
80
|
+
throw new TypeError("PM task prompt is required and bounded");
|
|
81
|
+
const expected = grader.normalizePmExpectation(task.expected);
|
|
82
|
+
return {
|
|
83
|
+
id: task.id,
|
|
84
|
+
split: task.split,
|
|
85
|
+
groupKeys: GROUPS.map((key, i) =>
|
|
86
|
+
groupKey(PREFIXES[i], task.groups[key]),
|
|
87
|
+
),
|
|
88
|
+
taskType: expected.kind === "file-export" ? "file" : "retrieval",
|
|
89
|
+
publicInput: { prompt: task.prompt },
|
|
90
|
+
graderId: PM_GRADER,
|
|
91
|
+
privateExpected: expected,
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
return verifyPmSuite(
|
|
95
|
+
buildEvolutionEvalSuite({
|
|
96
|
+
suiteId: input.suiteId,
|
|
97
|
+
datasetVersion: input.datasetVersion,
|
|
98
|
+
tasks,
|
|
99
|
+
}),
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function verifyPmSuite(value) {
|
|
104
|
+
const suite = verifyEvolutionEvalSuite(value);
|
|
105
|
+
if (
|
|
106
|
+
!["training", "validation", "test"].every((split) =>
|
|
107
|
+
suite.tasks.some((task) => task.split === split),
|
|
108
|
+
)
|
|
109
|
+
)
|
|
110
|
+
throw new TypeError("PM suite must include all three partitions");
|
|
111
|
+
for (const task of suite.tasks) {
|
|
112
|
+
exact(task.publicInput, ["prompt"], "PM public input");
|
|
113
|
+
if (
|
|
114
|
+
typeof task.publicInput.prompt !== "string" ||
|
|
115
|
+
!task.publicInput.prompt.trim() ||
|
|
116
|
+
task.publicInput.prompt.length > 16_384
|
|
117
|
+
)
|
|
118
|
+
throw new TypeError("invalid PM public prompt");
|
|
119
|
+
const expected = grader.normalizePmExpectation(task.privateExpected);
|
|
120
|
+
if (
|
|
121
|
+
task.graderId !== PM_GRADER ||
|
|
122
|
+
task.taskType !==
|
|
123
|
+
(expected.kind === "file-export" ? "file" : "retrieval") ||
|
|
124
|
+
!task.groupKeys.every(
|
|
125
|
+
(key, index) =>
|
|
126
|
+
key.startsWith(`${PREFIXES[index]}-`) &&
|
|
127
|
+
GROUP_DIGEST.test(key.slice(PREFIXES[index].length + 1)),
|
|
128
|
+
)
|
|
129
|
+
)
|
|
130
|
+
throw new TypeError("suite is not a PM exploration dataset");
|
|
131
|
+
}
|
|
132
|
+
return suite;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Explicit projection: no validation/test tasks, expected answers or grader IDs. */
|
|
136
|
+
export function projectPmExplorationTrainingView(value) {
|
|
137
|
+
const suite = verifyPmSuite(value);
|
|
138
|
+
return Object.freeze({
|
|
139
|
+
suiteDigest: suite.suiteDigest,
|
|
140
|
+
trainingPartitionDigest: computeEvolutionEvalTrainingPartitionDigest(suite),
|
|
141
|
+
tasks: Object.freeze(
|
|
142
|
+
suite.tasks
|
|
143
|
+
.filter((task) => task.split === "training")
|
|
144
|
+
.map((task) =>
|
|
145
|
+
Object.freeze({ id: task.id, publicInput: task.publicInput }),
|
|
146
|
+
),
|
|
147
|
+
),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Structural check only; signed provenance is still verified by EvolutionEvalGate. */
|
|
152
|
+
export function assertPmExplorationTrainingSources(value, input) {
|
|
153
|
+
exact(
|
|
154
|
+
input,
|
|
155
|
+
["trainingPartitionDigest", "sourceTaskIds"],
|
|
156
|
+
"PM memory sources",
|
|
157
|
+
);
|
|
158
|
+
const view = projectPmExplorationTrainingView(value);
|
|
159
|
+
if (input.trainingPartitionDigest !== view.trainingPartitionDigest)
|
|
160
|
+
throw new Error("PM training partition binding mismatch");
|
|
161
|
+
const ids = input.sourceTaskIds;
|
|
162
|
+
if (
|
|
163
|
+
!Array.isArray(ids) ||
|
|
164
|
+
ids.length === 0 ||
|
|
165
|
+
ids.length > view.tasks.length ||
|
|
166
|
+
new Set(ids).size !== ids.length
|
|
167
|
+
)
|
|
168
|
+
throw new TypeError("PM source task IDs must be nonempty and unique");
|
|
169
|
+
const allowed = new Set(view.tasks.map((task) => task.id));
|
|
170
|
+
if (ids.some((id) => !allowed.has(id)))
|
|
171
|
+
throw new Error("PM memory source is outside the training partition");
|
|
172
|
+
return Object.freeze({
|
|
173
|
+
trainingPartitionDigest: view.trainingPartitionDigest,
|
|
174
|
+
sourceTaskIds: Object.freeze([...ids]),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** Builds the round protocol from the verified training-only projection. */
|
|
179
|
+
export function buildPmExplorationRoundPlan(value, input) {
|
|
180
|
+
exact(
|
|
181
|
+
input,
|
|
182
|
+
[
|
|
183
|
+
"planId",
|
|
184
|
+
"environmentDigest",
|
|
185
|
+
"initialMemoryDigest",
|
|
186
|
+
"broadBranchIds",
|
|
187
|
+
"maxRounds",
|
|
188
|
+
"maxTokens",
|
|
189
|
+
"maxToolCalls",
|
|
190
|
+
"maxWallClockMs",
|
|
191
|
+
"maxConsecutiveNoGain",
|
|
192
|
+
],
|
|
193
|
+
"PM round plan input",
|
|
194
|
+
);
|
|
195
|
+
const training = projectPmExplorationTrainingView(value);
|
|
196
|
+
return createPmExplorationPlan({
|
|
197
|
+
...input,
|
|
198
|
+
suiteDigest: training.suiteDigest,
|
|
199
|
+
trainingPartitionDigest: training.trainingPartitionDigest,
|
|
200
|
+
trainingTaskIds: training.tasks.map((task) => task.id),
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export function buildPmExplorationLaunchProfile(budget) {
|
|
205
|
+
exact(budget, ["maxTokens", "maxToolCalls", "maxWallClockMs"], "PM budget");
|
|
206
|
+
for (const key of Object.keys(budget)) {
|
|
207
|
+
if (!Number.isSafeInteger(budget[key]) || budget[key] <= 0)
|
|
208
|
+
throw new TypeError(`${key} must be a positive safe integer`);
|
|
209
|
+
}
|
|
210
|
+
return Object.freeze({
|
|
211
|
+
schema: "chainlesschain.pm-exploration-launch-profile/v1",
|
|
212
|
+
environment: REQUIRED_ENV,
|
|
213
|
+
budget: Object.freeze({ ...budget }),
|
|
214
|
+
budgetEnforced: false,
|
|
215
|
+
runtimeVerified: false,
|
|
216
|
+
productionQualified: false,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/** No secrets or raw environment values are copied to diagnostics. */
|
|
221
|
+
export function inspectPmExplorationEnvironment(environment = process.env) {
|
|
222
|
+
if (!environment || typeof environment !== "object" || isProxy(environment))
|
|
223
|
+
throw new TypeError("environment must be a data object");
|
|
224
|
+
const issues = Object.entries(REQUIRED_ENV).flatMap(([key, required]) => {
|
|
225
|
+
const prop = Object.getOwnPropertyDescriptor(environment, key);
|
|
226
|
+
return prop && "value" in prop && prop.value === required
|
|
227
|
+
? []
|
|
228
|
+
: [
|
|
229
|
+
Object.freeze({
|
|
230
|
+
code: "PM_RUNTIME_CONFIGURATION_MISMATCH",
|
|
231
|
+
variable: key,
|
|
232
|
+
required,
|
|
233
|
+
}),
|
|
234
|
+
];
|
|
235
|
+
});
|
|
236
|
+
return Object.freeze({
|
|
237
|
+
schema: "chainlesschain.pm-exploration-preflight/v1",
|
|
238
|
+
status: issues.length ? "blocked" : "requires-host-verification",
|
|
239
|
+
configurationCompatible: issues.length === 0,
|
|
240
|
+
issues: Object.freeze(issues),
|
|
241
|
+
missingEvidence: Object.freeze([
|
|
242
|
+
"authenticated-model-ingress",
|
|
243
|
+
"unlocked-real-identity",
|
|
244
|
+
"enforced-tool-and-workspace-isolation",
|
|
245
|
+
"host-enforced-budget",
|
|
246
|
+
"independent-read-only-grader",
|
|
247
|
+
"reset-and-restart-persistence",
|
|
248
|
+
]),
|
|
249
|
+
launchAllowed: false,
|
|
250
|
+
runtimeVerified: false,
|
|
251
|
+
productionQualified: false,
|
|
252
|
+
});
|
|
253
|
+
}
|