chainlesschain 0.166.15 → 0.166.16
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 +1 -1
- package/src/assets/web-panel/assets/{AIOps-To-6rimH.js → AIOps-CTxa2Wbq.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CpdCnTv3.js → ActionButton-DHrQyYhy.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DK7VNES_.js → Analytics-DQiUqcNl.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-NZ5FvhCx.js → AppLayout-_Iz4r6wt.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-NXceQPmN.js → Artifacts-BNs63YHo.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-B2d64DH2.js → Audit-BgHIqRLn.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-ByYgvEVY.js → BackgroundAgents-DUQ5axBB.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BXvQLDvN.js → Backup-CJ51E9Vw.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-C4GZk-As.js → BaseInput-o-5toA_R.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CvPuohL8.js → Chat-Cu7a-x1L.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DTftcclX.js → ChatBubbleRenderer-BUyYkAXr.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-C8dQGIqD.js → Checkbox-DwdmZ71L.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DRM6S1W4.js → Codegen-BrH2eYiP.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BDM8l-r5.js → Col-BVJQEP2j.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Bvmfi1fX.js → Community-FGO3vZPq.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DGQTCima.js → Compact-DYGAFVnT.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-D_0C-2P6.js → Compliance-CRvc8Bdt.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-3C_q99ok.js → Cowork-D6Ah2m7A.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-CIiMQ1Hl.js → Cron-AXbU2ifR.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-peebGnES.js → Crosschain-C5DXgEFd.js} +1 -1
- package/src/assets/web-panel/assets/{DID-OkX4KB9T.js → DID-Bxh9QV9v.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-D9lm0Wxa.js → Dashboard-B-ZHEta-.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CitActXx.js → Dropdown-66Ik1jqa.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DSmFkNKV.js → EmailListRenderer-CCWk1BIM.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CBWAi8XL.js → FamilyGuardDashboard--9faIULK.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-afj8jDcp.js → Federation-CejW9CgX.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Dabt59KY.js → FormItemContext-acHgcXki.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BQpXA9kj.js → GenericCardRenderer-D2ghd_K4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-D2p2Moo1.js → Git-BOe1YJrV.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DkFfPykv.js → Governance-BjgzJsof.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-C1DKpeN2.js → Inference-CXCD5rnP.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CjfVg4oQ.js → KnowledgeGraph-CHA8QgJT.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-D-zMvdSf.js → Logs-DORPMcL6.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-jzEpGkbc.js → MarkdownRenderer-CPPHz01z.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DfAjJLyS.js → Marketplace-BCFlo1Yx.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BGDHQES1.js → McpTools-Dl_uZAKh.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BYqrGAPS.js → Memory-DupHamwz.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CQ6FEtty.js → MobileBridge-BRSMPJxW.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BpMvh5JW.js → MobileProjects-BHpuzsDl.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CWH25SrU.js → Mtc-Ch0jOQfZ.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-D6DiLmei.js → MtcAudit-qzwQrDi7.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BSxRN4jD.js → Multisig-B5wHzUcm.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-C0FDPKT4.js → NLProgramming-Hy9uAiA0.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-VKR78bH-.js → Notes-DkuchMC7.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DLSklSZB.js → NotificationSettings-CYZhD7Pi.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Dpj7D6tC.js → OrderTableRenderer-DKOoqajt.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BB3pB27e.js → Organization-D9AXn6j8.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Cr7bzwcs.js → Overflow-Bg15J6hX.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-D1fkMMzI.js → P2P--B54HoQn.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BiDEbLNA.js → PdhVaultBrowser-Cz9Kk2Nb.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-c3Ijv0v4.js → Permissions-DHx38eS1.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BJwbh3P2.js → PersonalDataHub-Dw8i2hAs.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-C4fhXafB.js → Pipeline-B2o6Ur2G.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzSx3CD-.js → Privacy-8g-h2fnu.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-D9fL5fED.js → ProjectInit-DuVTcINx.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CB5FVrOR.js → ProjectSettings-C8njvdZX.js} +2 -2
- package/src/assets/web-panel/assets/Projects-Ca9BAfu7.js +1 -0
- package/src/assets/web-panel/assets/{Providers-B9ZH4faS.js → Providers-wFqgod_W.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BLKDHT8_.js → QrScannerModal-9NCXrpmA.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D1oYUcSY.js → QuickAsk-WUTNvFkY.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CC2nmrOD.js → Recommend-xT4nYmju.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-qW9QF4-r.js → RemoteSession-fak1PBGC.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BDWqfzcr.js → Reputation-D1AkQvD-.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BBV2iCjT.js → Row-DVfm6xGt.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CcwrNwZB.js → RssFeed-BDunoLSE.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Dr6fZ0D_.js → Search-OPycRoU3.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BPzaoCU6.js → Security-C8-Fm3Dt.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BoKUU1I_.js → Services-qM_sMpMl.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-C8lT8GUg.js → Skeleton-D3HBJjVF.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DPpWeicz.js → Skills-jr67X-tP.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-UiijzpMU.js → Sla-CS3ggyCg.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DoofrLwS.js → SpeechSettings-CTOCYxOi.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DXnyfTDw.js → SyncSettings-D3s3cLT5.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-g_WHjKeg.js → Tasks-CdfoJ25m.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DRuCh9g2.js → Templates-Drb4AI8X.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-QHIq1pH1.js → Tenant-DzwR3Qkz.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-G0fuI216.js → Terminal-D-ESq7xp.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-4MT7SpGk.js → TimelineRenderer-BK-AUuws.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-B5xT5umA.js → Tokens-xGTouuNp.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-D7HPbNgc.js → Trigger-BvZj-v2H.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CxH69dU5.js → Trust-BLC9CGmc.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CPPosveH.js → UkeySign-BSuCXpmE.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Du5lGwAt.js → VideoEditing-DT3A-_Ql.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BBIGNESK.js → Wallet-c1OXao85.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-Cc3HSGmv.js → WebAuthn-CuA-F7KJ.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-DBoVPNCh.js → WorkflowEditor-MANZrf82.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DHcjgiem.js → chat-D4Y4Ey0O.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DrRrvJIV.js → colors-DDH06hKO.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BuY_sAoN.js → compact-item-Cym756Xj.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CepH1Fha.js → createContext-By4Nb1k-.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-KO3pAGeO.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Dh80Ot6o.js → hasIn-Ch7OY258.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW9Pycxh.js → index-6-2eYBXr.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7lstbTh.js → index-6CpOV3Pn.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUnd5hyp.js → index-ArMrnx0v.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0rvJjId.js → index-B51otVoZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6tOVlq-.js → index-BBBUn5v7.js} +1 -1
- package/src/assets/web-panel/assets/{index-NS9dW1F1.js → index-BFydNU6a.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiUx-tkV.js → index-BIrRX-ra.js} +1 -1
- package/src/assets/web-panel/assets/{index-By0qqC3S.js → index-BZB9q-Lp.js} +1 -1
- package/src/assets/web-panel/assets/index-Bh4Rgkg2.js +1 -0
- package/src/assets/web-panel/assets/{index-CNQK9DIr.js → index-Bo20BfdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-C10033eO.js → index-CF3Lhyns.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRy3_beb.js → index-CGsvEbbq.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWANFMlq.js → index-CJPks33Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-CnRK8_Dd.js → index-CT-3FYwd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BPDEOOlA.js → index-CUSUzaB8.js} +1 -1
- package/src/assets/web-panel/assets/{index-DYN49m7k.js → index-CV1UC4zo.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5vhNRqS.js → index-CV8qXTvb.js} +1 -1
- package/src/assets/web-panel/assets/{index-9crgJ3Id.js → index-CZn6dmZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DkZP_QaB.js → index-CjNUTBwe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoRy2yup.js → index-CpudmDhf.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ca5d64IH.js → index-CykROEJA.js} +1 -1
- package/src/assets/web-panel/assets/{index-A5lVwYVq.js → index-D5sADPGY.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnVIvc15.js → index-D9le0-dc.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cx21_p3m.js → index-DAkk1M7x.js} +1 -1
- package/src/assets/web-panel/assets/{index-0TYLnd11.js → index-DNEJzc0r.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9Gh-SOn.js → index-DNlxihs8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtqigRzf.js → index-DiewptTL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CW_23-gU.js → index-DjwgJ5Jd.js} +1 -1
- package/src/assets/web-panel/assets/index-Dox_coTY.js +1 -0
- package/src/assets/web-panel/assets/{index-LBkSOwky.js → index-DtGValNi.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5_K3GKu.js → index-DvnywwUj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiZQooWK.js → index-OU8DZ9BL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CYydOga6.js → index-XGeQMvWK.js} +1 -1
- package/src/assets/web-panel/assets/{index-hYaigdGm.js → index-ZY2Qs_Sn.js} +1 -1
- package/src/assets/web-panel/assets/{index-zGH9zH3w.js → index-jx7kr6mB.js} +3 -3
- package/src/assets/web-panel/assets/{index-DuRYBWrj.js → index-mL3nOcH6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuSUCH7h.js → index-oBsfUbyH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEfVkKIY.js → index-q-s04OKn.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUNyTmkS.js → index-tZ5BUdad.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-nI_X3wKl.js → initDefaultProps-DGcX9iPP.js} +1 -1
- package/src/assets/web-panel/assets/{motion-LUHbQu_R.js → motion-2SeL1D8A.js} +1 -1
- package/src/assets/web-panel/assets/{move-DHI_KvJt.js → move-3cYbQCpS.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-AYdL_7Mo.js → mtc-parser-IDdxfw0z.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CtV3HRKa.js → omit-BNswdKO6.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CcJLTOu4.js → pickAttrs-BwCnem2I.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DHbiLUps.js → placementArrow-B9PtZ5rq.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BC2DGkWP.js → responsiveObserve-CPB6iSzV.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B4ga4pPY.js → slide-DZgyblZa.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-hzphgKfH.js → statusUtils-D82IBdsx.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-IfN9Bxoi.js → styleChecker-qSHtosM-.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-pcGKJ4pT.js → useFlexGapSupport-CmWO7h0I.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-COXhQpTG.js → useFs-yLrs_ub4.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-xp9F9szv.js → usePersonalDataHub-CJ1VW6rh.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BdSQy1Ve.js → vnode-CzY_moQ4.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CHCt5P55.js → zoom-DAa7rEY5.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/learning.js +71 -1
- package/src/commands/team.js +5 -0
- package/src/data/changelog.json +15 -2
- package/src/lib/agent-team/task-lease.js +12 -1
- package/src/lib/capability-manifest.js +212 -1
- package/src/lib/evolution/evolution-artifact-ports.js +3277 -0
- package/src/lib/evolution/evolution-eval-gate.js +6442 -0
- package/src/lib/evolution/evolution-evidence-projector.js +3786 -0
- package/src/lib/evolution/evolution-ledger-ports.js +2689 -0
- package/src/lib/evolution/evolution-ledger.js +4280 -0
- package/src/lib/evolution/skill-candidate-registry.js +2258 -0
- package/src/lib/evolution/skill-execution-manifest.js +942 -0
- package/src/lib/evolution/skill-mutation-authority.js +1677 -0
- package/src/lib/evolution/skill-promotion-controller.js +506 -0
- package/src/lib/evolution/skill-release-registry.js +3277 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +3233 -0
- package/src/lib/evolution/skill-writer-inventory-manifest.js +998 -0
- package/src/lib/evolution/skill-writer-inventory-validator.js +816 -0
- package/src/lib/formal-quality-eval-runtime.js +100 -0
- package/src/lib/graph-kernel/cutover-contract.js +7 -0
- package/src/lib/graph-kernel/cutover-ledger.js +8 -7
- package/src/lib/graph-kernel/evidence-digest.js +47 -0
- package/src/lib/graph-kernel/graph-runtime-surfaces.json +8 -1
- package/src/lib/graph-kernel/production-cutover-evidence.js +342 -15
- package/src/lib/graph-kernel/production-source-evidence.js +1599 -0
- package/src/lib/graph-kernel/retirement-evidence.js +15 -5
- package/src/lib/graph-kernel/runtime-surface-manifest.js +67 -2
- package/src/lib/headless-manifest.js +3 -1
- package/src/lib/learning/skill-improver.js +311 -43
- package/src/lib/learning/skill-synthesizer.js +236 -16
- package/src/lib/secure-fs.js +20 -0
- package/src/assets/web-panel/assets/Projects-DWhwdgfY.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DIb8j04q.js +0 -1
- package/src/assets/web-panel/assets/index-BJc3t4PC.js +0 -1
- package/src/assets/web-panel/assets/index-CkksSUnI.js +0 -1
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
1
3
|
import os from "node:os";
|
|
2
4
|
import path from "node:path";
|
|
3
5
|
|
|
4
6
|
export const FORMAL_QUALITY_HERMETIC_ENV = "CC_FORMAL_QUALITY_EVAL_HERMETIC";
|
|
5
7
|
export const FORMAL_QUALITY_PROVIDER_ENV = "CC_FORMAL_QUALITY_EVAL_PROVIDER";
|
|
8
|
+
export const FORMAL_QUALITY_ISOLATION_ROOT_ENV =
|
|
9
|
+
"CC_FORMAL_QUALITY_EVAL_ISOLATION_ROOT";
|
|
6
10
|
export const FORMAL_QUALITY_ALLOWED_FILES_ENV =
|
|
7
11
|
"CC_FORMAL_QUALITY_EVAL_ALLOWED_FILES";
|
|
8
12
|
export const FORMAL_QUALITY_FILE_TOOLS = Object.freeze([
|
|
@@ -34,6 +38,102 @@ export function isFormalQualityHermeticRuntime(environment = process.env) {
|
|
|
34
38
|
);
|
|
35
39
|
}
|
|
36
40
|
|
|
41
|
+
function formalQualityIsolationRoot(environment) {
|
|
42
|
+
if (!isFormalQualityHermeticRuntime(environment)) return null;
|
|
43
|
+
const configuredRoot = String(
|
|
44
|
+
environment?.[FORMAL_QUALITY_ISOLATION_ROOT_ENV] || "",
|
|
45
|
+
).trim();
|
|
46
|
+
if (!configuredRoot) {
|
|
47
|
+
throw new Error("formal quality isolation root is missing");
|
|
48
|
+
}
|
|
49
|
+
const temporaryRoot = path.resolve(os.tmpdir());
|
|
50
|
+
const resolvedRoot = path.resolve(configuredRoot);
|
|
51
|
+
const relation = path.relative(temporaryRoot, resolvedRoot);
|
|
52
|
+
const configuredHome = path.resolve(String(environment.CHAINLESSCHAIN_HOME));
|
|
53
|
+
const homeRelation = path.relative(resolvedRoot, configuredHome);
|
|
54
|
+
if (
|
|
55
|
+
!relation ||
|
|
56
|
+
relation === ".." ||
|
|
57
|
+
relation.startsWith(`..${path.sep}`) ||
|
|
58
|
+
path.isAbsolute(relation) ||
|
|
59
|
+
!homeRelation ||
|
|
60
|
+
homeRelation === ".." ||
|
|
61
|
+
homeRelation.startsWith(`..${path.sep}`) ||
|
|
62
|
+
path.isAbsolute(homeRelation)
|
|
63
|
+
) {
|
|
64
|
+
throw new Error("formal quality isolation root is invalid");
|
|
65
|
+
}
|
|
66
|
+
return resolvedRoot;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Give concurrent formal teammates separate ephemeral config/cache trees.
|
|
71
|
+
* Sharing one Windows config root makes independent processes contend on DACL
|
|
72
|
+
* repair and lets platform first-use caches leak into the benchmark cwd.
|
|
73
|
+
*/
|
|
74
|
+
export function formalQualityChildEnvironment(
|
|
75
|
+
identity,
|
|
76
|
+
environment = process.env,
|
|
77
|
+
) {
|
|
78
|
+
const isolationRoot = formalQualityIsolationRoot(environment);
|
|
79
|
+
if (!isolationRoot) return null;
|
|
80
|
+
const normalizedIdentity = String(identity || "").trim();
|
|
81
|
+
if (
|
|
82
|
+
!normalizedIdentity ||
|
|
83
|
+
normalizedIdentity.length > 256 ||
|
|
84
|
+
normalizedIdentity.includes("\0")
|
|
85
|
+
) {
|
|
86
|
+
throw new Error("formal quality child identity is invalid");
|
|
87
|
+
}
|
|
88
|
+
const identityDigest = createHash("sha256")
|
|
89
|
+
.update(normalizedIdentity, "utf8")
|
|
90
|
+
.digest("hex")
|
|
91
|
+
.slice(0, 24);
|
|
92
|
+
const childRoot = path.join(isolationRoot, "agent-homes", identityDigest);
|
|
93
|
+
const userHome = path.join(childRoot, "user-home");
|
|
94
|
+
const configHome = path.join(childRoot, "chainlesschain-home");
|
|
95
|
+
const appData = path.join(userHome, "app-data");
|
|
96
|
+
const localAppData = path.join(userHome, "local-app-data");
|
|
97
|
+
const xdgConfigHome = path.join(userHome, "xdg-config");
|
|
98
|
+
const xdgCacheHome = path.join(userHome, "xdg-cache");
|
|
99
|
+
const xdgDataHome = path.join(userHome, "xdg-data");
|
|
100
|
+
const dotnetHome = path.join(userHome, "dotnet-home");
|
|
101
|
+
const nugetPackages = path.join(userHome, "nuget-packages");
|
|
102
|
+
for (const directory of [
|
|
103
|
+
childRoot,
|
|
104
|
+
userHome,
|
|
105
|
+
configHome,
|
|
106
|
+
appData,
|
|
107
|
+
localAppData,
|
|
108
|
+
xdgConfigHome,
|
|
109
|
+
xdgCacheHome,
|
|
110
|
+
xdgDataHome,
|
|
111
|
+
dotnetHome,
|
|
112
|
+
nugetPackages,
|
|
113
|
+
]) {
|
|
114
|
+
fs.mkdirSync(directory, { recursive: true });
|
|
115
|
+
}
|
|
116
|
+
const childEnvironment = {
|
|
117
|
+
HOME: userHome,
|
|
118
|
+
USERPROFILE: userHome,
|
|
119
|
+
APPDATA: appData,
|
|
120
|
+
LOCALAPPDATA: localAppData,
|
|
121
|
+
XDG_CONFIG_HOME: xdgConfigHome,
|
|
122
|
+
XDG_CACHE_HOME: xdgCacheHome,
|
|
123
|
+
XDG_DATA_HOME: xdgDataHome,
|
|
124
|
+
CHAINLESSCHAIN_HOME: configHome,
|
|
125
|
+
DOTNET_CLI_HOME: dotnetHome,
|
|
126
|
+
NUGET_PACKAGES: nugetPackages,
|
|
127
|
+
POWERSHELL_TELEMETRY_OPTOUT: "1",
|
|
128
|
+
POWERSHELL_UPDATECHECK: "Off",
|
|
129
|
+
};
|
|
130
|
+
if (/^[A-Za-z]:[\\/]/u.test(userHome)) {
|
|
131
|
+
childEnvironment.HOMEDRIVE = userHome.slice(0, 2);
|
|
132
|
+
childEnvironment.HOMEPATH = userHome.slice(2);
|
|
133
|
+
}
|
|
134
|
+
return Object.freeze(childEnvironment);
|
|
135
|
+
}
|
|
136
|
+
|
|
37
137
|
/** Resolve the provider that the formal harness bound before any model call. */
|
|
38
138
|
export function formalQualityProvider(environment = process.env) {
|
|
39
139
|
if (!isFormalQualityHermeticRuntime(environment)) return null;
|
|
@@ -8,14 +8,15 @@ import {
|
|
|
8
8
|
normalizeGraphRetirementEvidence,
|
|
9
9
|
} from "./retirement-evidence.js";
|
|
10
10
|
import { graphStoreEvidenceDigest } from "./store-cutover-evidence.js";
|
|
11
|
+
import {
|
|
12
|
+
GRAPH_CUTOVER_LEDGER_SCHEMA,
|
|
13
|
+
GRAPH_CUTOVER_REQUIRED_PLATFORMS,
|
|
14
|
+
} from "./cutover-contract.js";
|
|
11
15
|
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"windows",
|
|
17
|
-
"macos",
|
|
18
|
-
]);
|
|
16
|
+
export {
|
|
17
|
+
GRAPH_CUTOVER_LEDGER_SCHEMA,
|
|
18
|
+
GRAPH_CUTOVER_REQUIRED_PLATFORMS,
|
|
19
|
+
} from "./cutover-contract.js";
|
|
19
20
|
|
|
20
21
|
const IDENTIFIER = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,159}$/u;
|
|
21
22
|
const DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
function stableValue(value, state = { seen: new WeakSet(), nodes: 0 }) {
|
|
4
|
+
state.nodes += 1;
|
|
5
|
+
if (state.nodes > 250_000) {
|
|
6
|
+
throw new TypeError("Graph evidence exceeds canonicalization limits");
|
|
7
|
+
}
|
|
8
|
+
if (Array.isArray(value))
|
|
9
|
+
return value.map((item) => stableValue(item, state));
|
|
10
|
+
if (!value || typeof value !== "object") {
|
|
11
|
+
if (typeof value === "number" && !Number.isFinite(value)) {
|
|
12
|
+
throw new TypeError("Graph evidence contains a non-finite number");
|
|
13
|
+
}
|
|
14
|
+
if (["bigint", "function", "symbol", "undefined"].includes(typeof value)) {
|
|
15
|
+
throw new TypeError("Graph evidence contains a non-JSON value");
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
if (state.seen.has(value)) {
|
|
20
|
+
throw new TypeError("Graph evidence contains a cycle or repeated object");
|
|
21
|
+
}
|
|
22
|
+
state.seen.add(value);
|
|
23
|
+
if (
|
|
24
|
+
Object.getPrototypeOf(value) !== Object.prototype &&
|
|
25
|
+
Object.getPrototypeOf(value) !== null
|
|
26
|
+
) {
|
|
27
|
+
throw new TypeError("Graph evidence must contain plain JSON objects");
|
|
28
|
+
}
|
|
29
|
+
return Object.fromEntries(
|
|
30
|
+
Object.keys(value)
|
|
31
|
+
.filter((key) => value[key] !== undefined)
|
|
32
|
+
.sort()
|
|
33
|
+
.map((key) => [key, stableValue(value[key], state)]),
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function canonicalGraphEvidenceJson(value) {
|
|
38
|
+
return JSON.stringify(stableValue(value));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function graphEvidenceDigest(value, domain) {
|
|
42
|
+
return `sha256:${createHash("sha256")
|
|
43
|
+
.update(domain)
|
|
44
|
+
.update("\0")
|
|
45
|
+
.update(canonicalGraphEvidenceJson(value))
|
|
46
|
+
.digest("hex")}`;
|
|
47
|
+
}
|
|
@@ -6,7 +6,14 @@
|
|
|
6
6
|
"ledgerSchema": "chainlesschain.graph-cutover-ledger/v1",
|
|
7
7
|
"scope": "entry",
|
|
8
8
|
"requiredPlatforms": ["linux", "windows", "macos"],
|
|
9
|
-
"existingCanonicalRunRollback": "retain_authority"
|
|
9
|
+
"existingCanonicalRunRollback": "retain_authority",
|
|
10
|
+
"legacyMutationErrorCodes": {
|
|
11
|
+
"browser": "CC_CLI_LEGACY_RUNTIME_READ_ONLY",
|
|
12
|
+
"cli_team": "CC_CLI_LEGACY_RUNTIME_READ_ONLY",
|
|
13
|
+
"cowork": "CC_CLI_LEGACY_RUNTIME_READ_ONLY",
|
|
14
|
+
"desktop": "CC_DESKTOP_LEGACY_RUNTIME_READ_ONLY",
|
|
15
|
+
"scheduler": "CC_CLI_LEGACY_RUNTIME_READ_ONLY"
|
|
16
|
+
}
|
|
10
17
|
},
|
|
11
18
|
"surfaces": [
|
|
12
19
|
{
|