chainlesschain 0.165.1 → 0.165.3
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 +248 -2
- package/package.json +4 -1
- package/src/assets/web-panel/assets/{AIOps-CYxFDrcm.js → AIOps-BiHNUlbU.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CPBtdiU2.js → ActionButton-D-UFjDRQ.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Dayq7Dp7.js → Analytics-DazVsDgW.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-6U7bPb2s.js → AppLayout-DXh9UfNJ.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-D2Iqg_3D.js → Artifacts-CZ6tsceY.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CdoOB7WV.js → Audit-RyxnBr_h.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DrnAVB8w.js → BackgroundAgents-BWS51Q6X.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CesMi5cy.js → Backup-BRtPcUul.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DaX9ptax.js → BaseInput-CGd4vZYY.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-OrwOPxDS.js → Chat-h8ijVwCg.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CvPZFRxM.js → ChatBubbleRenderer-D7tcdDS9.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DiHbcysC.js → Checkbox-NyF6dPl8.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CbgCkaBJ.js → Codegen-Ci4OOxr5.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Du5hgrh4.js → Col-CwTkc9BM.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DsPOBW-p.js → Community-DW_tM82m.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BwHIFkNC.js → Compact-DEvHRV4S.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BvrDQSgd.js → Compliance-BbjBEEfD.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-gwAE6arx.js → Cowork-10IXBaBa.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DW-0l4uF.js → Cron-BZkbpd5I.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-j-NsLesB.js → Crosschain-CFQ8L_6v.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CibVEBOI.js → DID-BDF6AkXe.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-W4z9vSfe.js → Dashboard-CoOdWMi4.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DAcrkKxG.js → Dropdown-DEsGmu8Y.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-6GXah-89.js → EmailListRenderer-BS89SWlK.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-TKDCq8Ku.js → FamilyGuardDashboard-C1FpCHiI.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BXBLlcNm.js → Federation-BzvpVmLA.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BoJJBkG3.js → FormItemContext-BeC259PQ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-okjsl46v.js → GenericCardRenderer-azgG3bmV.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Rvs7i6nn.js → Git-BmSSowc5.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CHSUxXXS.js → Governance-CTBCSyQZ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-V3BlfxsB.js → Inference-DA5xyk4a.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-C_NlD4aR.js → KnowledgeGraph-D1gPHNig.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Nn4LNxhA.js → Logs-BPmLf1AR.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-SVAgNnkt.js → MarkdownRenderer-SVLOg49H.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DEmjFcg-.js → Marketplace-DtUFcR0E.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DlopXipI.js → McpTools-DS_kqBv-.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BG3ynX60.js → Memory-Fvh7XL7V.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DeRzWOfT.js → MobileBridge-C7itAP45.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-DGbP36-3.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-BoPbOv1C.js → Mtc-B57MiNLK.js} +6 -6
- package/src/assets/web-panel/assets/{MtcAudit-un-rTHp7.js → MtcAudit-BXfCUcM7.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-Ds0oveEB.js → Multisig-yaJ-ZcF6.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-D09JI-yY.js → NLProgramming-CoaUCKrO.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DTRhiKJn.js → Notes-BKLM_65R.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BAnnNCim.js → NotificationSettings-DoDtK9uZ.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Yr-1fSYi.js → OrderTableRenderer-BJ28TGr-.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-S9EAolpj.js → Organization-MuGsdoIb.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CqcLKqJ8.js → Overflow-BLUN9J4R.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Dw0F9EcU.js → P2P-DWuoBUPd.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BDRwUevN.js → PdhVaultBrowser-CUi37YPj.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-D3_c3nKB.js → Permissions-BYQg2pcr.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CxdMV98x.js → PersonalDataHub-CAxoV2xu.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-CgjNQFLI.js → Pipeline-B33wGvIO.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BHghIIht.js → Privacy-A8yXTORP.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-De6pqaKM.js → ProjectInit-D49I2I1O.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Bg4ZkNYQ.js → ProjectSettings-Ci73jJDw.js} +2 -2
- package/src/assets/web-panel/assets/Projects-CF-yD6Cn.js +1 -0
- package/src/assets/web-panel/assets/Providers-D-etEhg5.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-DA2f3Wts.js → QrScannerModal-Brza0ykJ.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-C1FeHDqp.js → QuickAsk-DFydhjxL.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B5guaUMN.js → Recommend-DLF8_NhA.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-PDADSds3.js → RemoteSession-dyuStW3x.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-eTlRhgvK.js → Reputation-5F3tA6yw.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D7AqSGY0.js → Row-Ca2A57S5.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-JiuLm4Ja.js → RssFeed-B0bxBkq_.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CwruahW3.js → Search-CFNvHalZ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CdhqaR0b.js → Security-DSoH3Hav.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CU0ZIlcT.js → Services-BHpfEmBQ.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CtduPfAb.js → Skeleton-Dsh-QNmn.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CROXm6AY.js → Skills-BhT1NkSU.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DiZiABFD.js → Sla-DY9snPeJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-B5pLcXUw.js → SpeechSettings-CWaX0_Cx.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DBX6J1Oe.js → SyncSettings-B690y_TC.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BLyRJd3-.js → Tasks-2N-w3zWd.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BKa5qzmk.js → Templates-BjwQOQYC.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DnD3a4M6.js → Tenant-CUqHErxY.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DEitQeTb.js → Terminal-C13rXvNy.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CjHggTDq.js → TimelineRenderer-CpbWcya_.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CsGT7sfl.js → Tokens-BXHLGXYC.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-yr4rFDrW.js → Trigger-1e5i65o3.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CLvu1Sjp.js → Trust-FLGqNHs5.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B0m7yUP8.js → UkeySign-BbaR_LJB.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C0VvP4lc.js → VideoEditing-NOp4RIov.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-kllBAG1M.js → Wallet-B7DW7bG4.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-C54UQNLx.js → WebAuthn-BptSUWix.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-B7y8qSvU.js → WorkflowEditor-CAJnDOXS.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DRzTh8CJ.js → chat-I8LgG1-Z.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BSMwSnCx.js → colors-CWe7SOVD.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BTg602H5.js → compact-item-Cx3u3CA3.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B6EGsdvp.js → createContext-CgD5ArwY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DLv_872g.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DDKqJ8RD.js → hasIn-BfQWiXN8.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5CsBShd.js → index-3iKP9OTJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dfv2lKu3.js → index-87gMxqhN.js} +1 -1
- package/src/assets/web-panel/assets/{index-C66NpWy5.js → index-B1cX4Rxu.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBT3YeQ9.js → index-B6yChzt1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVTAl5N2.js → index-BREnPKGo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CwPUZbMI.js → index-BUAR7RY-.js} +1 -1
- package/src/assets/web-panel/assets/{index-th2ihDc0.js → index-Bi24S7Dw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmAubjDi.js → index-BiI-xPRH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUEU48o1.js → index-BuEQSorC.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf23wVMs.js → index-Bx7BNIRH.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRqt4fO-.js → index-C-rIKccl.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_JzIXUq.js → index-C0nDKhWv.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiW0sDkz.js → index-C0ztiqtB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BICn3Qh1.js → index-C1UjHdgZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpTHIRfZ.js → index-CAUnl4Jv.js} +1 -1
- package/src/assets/web-panel/assets/{index-Co7oM1qr.js → index-CMu16vPC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNxg61YP.js → index-CNYFQxAW.js} +1 -1
- package/src/assets/web-panel/assets/{index-XFe-1twF.js → index-CQDKYbnv.js} +1 -1
- package/src/assets/web-panel/assets/{index-p2HYn89m.js → index-CWZ3REg6.js} +3 -3
- package/src/assets/web-panel/assets/{index-Bx044qDj.js → index-CcX4FSPf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMuGd2--.js → index-Cd79NQAx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGNklbP6.js → index-CdRkCwm4.js} +1 -1
- package/src/assets/web-panel/assets/index-CdiGCibe.js +1 -0
- package/src/assets/web-panel/assets/{index-rjzk9z1Q.js → index-Cy_cCJlr.js} +1 -1
- package/src/assets/web-panel/assets/{index-323Hhxxt.js → index-DAVy98u7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDTvsX8t.js → index-DCJEY2T0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLdrHhML.js → index-DFb-XIKy.js} +1 -1
- package/src/assets/web-panel/assets/{index-pqfux8vZ.js → index-DGMYTN5W.js} +1 -1
- package/src/assets/web-panel/assets/index-D_0z-gyz.js +1 -0
- package/src/assets/web-panel/assets/{index-u2YVld9W.js → index-Dcdm_Z2c.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmAInUkX.js → index-DeizoQVZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHfLYwcW.js → index-DlIyt1qF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWGax2QW.js → index-DmgtY58H.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dc77VR3H.js → index-DmrdUwzU.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1naNj4U.js → index-Doc0Ftpd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsR7Y2NG.js → index-DsQcURkA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQlHFN_g.js → index-DslTuqro.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqFXGzzC.js → index-V-kIHzAV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1GFfuqN.js → index-e8BM1yY1.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-C3Djh9fa.js → initDefaultProps-DiBszVdG.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BzqFmbSe.js → motion-BGIFFozv.js} +1 -1
- package/src/assets/web-panel/assets/{move-DJo_FFaW.js → move-D5W7mp7B.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-_tlTiBvk.js → mtc-parser-JFIlxJ7F.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CB2ZyxUg.js → omit-CQ3o6LIU.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DZwIFD4u.js → pickAttrs-R8MIlXo3.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DxZY0dgk.js → placementArrow-sW7ylSky.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CzzGt7GL.js → responsiveObserve-Cnl39Vbz.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BaIK52yz.js → slide-sn8tFd14.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-3-FHu9_M.js → statusUtils-IKKY_QxZ.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BkRT68fK.js → styleChecker-BNpV4Nqs.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DHYwKS-s.js → useFlexGapSupport-BWyT_eoU.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DVVUhV8p.js → useFs-D09p6_U9.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CkrFKAzQ.js → usePersonalDataHub-CzW3TkJZ.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BuBLFz0c.js → vnode-3s3WoAKB.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-kpm6LtXU.js → zoom-Cjy_673s.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/cowork.js +280 -5
- package/src/commands/plugin.js +819 -64
- package/src/commands/session-location.js +318 -7
- package/src/constants.js +2 -2
- package/src/data/changelog.json +27 -1
- package/src/gateways/ws/action-protocol.js +1 -1
- package/src/harness/jsonl-session-store.js +638 -2
- package/src/harness/prompt-compressor.js +4 -0
- package/src/lib/background-agent-keeper-client.js +29 -0
- package/src/lib/background-agent-keeper-protocol.js +78 -3
- package/src/lib/background-agent-launch-barrier.js +74 -0
- package/src/lib/background-agent-supervisor.js +208 -34
- package/src/lib/background-turn-bootstrap-protocol.js +4 -0
- package/src/lib/cowork-task-runner.js +70 -0
- package/src/lib/cowork-workflow.js +42 -9
- package/src/lib/doctor-checkup.js +34 -10
- package/src/lib/dynamic-workflow-draft.js +535 -0
- package/src/lib/dynamic-workflow-facade.js +11 -11
- package/src/lib/dynamic-workflow-runtime.js +2974 -0
- package/src/lib/execution-location-contract.js +111 -7
- package/src/lib/execution-location-runtime.js +3 -1
- package/src/lib/execution-location-target.js +910 -0
- package/src/lib/llm-providers.js +1 -0
- package/src/lib/mcp-call-ledger-store.js +35 -0
- package/src/lib/mcp-call-ledger.js +30 -0
- package/src/lib/plugin-runtime/__tests__/remote-source.test.js +34 -16
- package/src/lib/plugin-runtime/install.js +4956 -657
- package/src/lib/plugin-runtime/manifest.js +3 -1
- package/src/lib/plugin-runtime/marketplace-artifact-readback.js +671 -31
- package/src/lib/plugin-runtime/marketplace-catalog.js +68 -2
- package/src/lib/plugin-runtime/marketplace-impact.js +208 -15
- package/src/lib/plugin-runtime/marketplace-network.js +317 -0
- package/src/lib/plugin-runtime/marketplace-pac-worker.js +15 -0
- package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +25 -2
- package/src/lib/plugin-runtime/marketplace-source-cache.js +359 -0
- package/src/lib/plugin-runtime/policy.js +21 -6
- package/src/lib/plugin-runtime/publisher-trust.js +332 -0
- package/src/lib/plugin-runtime/remote-source.js +323 -27
- package/src/lib/plugin-runtime/scopes.js +317 -41
- package/src/lib/plugin-runtime/transaction-journal.js +806 -0
- package/src/lib/public-ide-capability-manifest.js +1 -1
- package/src/lib/remote-membership-coordinator.js +8 -6
- package/src/lib/sub-agent-context.js +268 -2
- package/src/lib/task-model-selector.js +1 -1
- package/src/lib/with-file-lock.js +266 -27
- package/src/runtime/agent-core.js +595 -41
- package/src/workers/background-agent-keeper.js +147 -24
- package/src/workers/background-agent-worker.js +383 -134
- package/src/workers/background-turn-bootstrap.js +13 -8
- package/src/assets/web-panel/assets/MobileProjects-Tyd3o2A0.js +0 -1
- package/src/assets/web-panel/assets/Projects-CP8vPvzs.js +0 -1
- package/src/assets/web-panel/assets/Providers-CUnHbNf-.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Dol8jLEP.js +0 -1
- package/src/assets/web-panel/assets/index-C3QX5tOl.js +0 -1
- package/src/assets/web-panel/assets/index-xYybvEic.js +0 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import {
|
|
2
3
|
EXECUTION_LOCATION,
|
|
3
4
|
clampPermissionsForLocation,
|
|
4
5
|
normalizeExecutionLocation,
|
|
5
6
|
redactCredentialRefs,
|
|
6
7
|
} from "./execution-location.js";
|
|
8
|
+
import { canonicalJson } from "./scheduler-kernel/contract.js";
|
|
7
9
|
|
|
8
10
|
export const EXECUTION_LOCATION_BINDING_SCHEMA =
|
|
9
11
|
"cc-execution-location-binding/v1";
|
|
@@ -13,6 +15,8 @@ export const EXECUTION_LOCATION_HANDOFF_FACTS_SCHEMA =
|
|
|
13
15
|
"cc-execution-location-handoff-facts/v1";
|
|
14
16
|
export const EXECUTION_LOCATION_HANDOFF_SCHEMA =
|
|
15
17
|
"cc-execution-location-handoff/v1";
|
|
18
|
+
export const EXECUTION_LOCATION_TARGET_ATTESTATION_SCHEMA =
|
|
19
|
+
"cc-execution-location-target-attestation/v1";
|
|
16
20
|
|
|
17
21
|
const FORBIDDEN_SECRET_KEYS = new Set([
|
|
18
22
|
"apikey",
|
|
@@ -53,7 +57,14 @@ function stringValue(value, { max = 256, nullable = true } = {}) {
|
|
|
53
57
|
if (value == null && nullable) return null;
|
|
54
58
|
if (typeof value !== "string") throw new TypeError("expected a string");
|
|
55
59
|
const output = value.trim();
|
|
56
|
-
if (
|
|
60
|
+
if (
|
|
61
|
+
!output ||
|
|
62
|
+
output.length > max ||
|
|
63
|
+
[...output].some((character) => {
|
|
64
|
+
const code = character.codePointAt(0);
|
|
65
|
+
return code < 32 || code === 127;
|
|
66
|
+
})
|
|
67
|
+
) {
|
|
57
68
|
throw new TypeError(
|
|
58
69
|
"string is empty, too long, or contains control characters",
|
|
59
70
|
);
|
|
@@ -165,6 +176,7 @@ export function createExecutionLocationBinding(input = {}) {
|
|
|
165
176
|
platform: safeString(input.runtime?.platform, { max: 64 }),
|
|
166
177
|
arch: safeString(input.runtime?.arch, { max: 64 }),
|
|
167
178
|
nodeVersion: safeString(input.runtime?.nodeVersion, { max: 64 }),
|
|
179
|
+
cliVersion: safeString(input.runtime?.cliVersion, { max: 64 }),
|
|
168
180
|
tools: Object.freeze(normalizeNames(input.runtime?.tools)),
|
|
169
181
|
}),
|
|
170
182
|
model: Object.freeze({
|
|
@@ -204,6 +216,98 @@ export function normalizeExecutionLocationBinding(value) {
|
|
|
204
216
|
return createExecutionLocationBinding(value);
|
|
205
217
|
}
|
|
206
218
|
|
|
219
|
+
/** Stable target identity used across separate ambient observations. */
|
|
220
|
+
export function computeExecutionLocationTargetFactsDigest(value) {
|
|
221
|
+
const binding = normalizeExecutionLocationBinding(value);
|
|
222
|
+
const stable = { ...binding };
|
|
223
|
+
delete stable.observedAt;
|
|
224
|
+
return `sha256:${createHash("sha256")
|
|
225
|
+
.update("chainlesschain.execution-location.target-facts.v1\0", "utf8")
|
|
226
|
+
.update(canonicalJson(stable, "executionLocationTargetFacts"), "utf8")
|
|
227
|
+
.digest("hex")}`;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/** Canonical target attestation shared by the source launcher and target store. */
|
|
231
|
+
export function createExecutionLocationTargetAttestation(input = {}) {
|
|
232
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
233
|
+
throw new TypeError("execution location target attestation is invalid");
|
|
234
|
+
}
|
|
235
|
+
const profileDigest = stringValue(input.profileDigest, {
|
|
236
|
+
max: 80,
|
|
237
|
+
nullable: false,
|
|
238
|
+
}).toLowerCase();
|
|
239
|
+
const sourceSessionId = stringValue(input.sourceSessionId, {
|
|
240
|
+
max: 256,
|
|
241
|
+
nullable: false,
|
|
242
|
+
});
|
|
243
|
+
const sourceHeadHash = stringValue(input.sourceHeadHash, {
|
|
244
|
+
max: 64,
|
|
245
|
+
nullable: false,
|
|
246
|
+
}).toLowerCase();
|
|
247
|
+
const sourceEventCount = Number(input.sourceEventCount);
|
|
248
|
+
const targetEvidenceId = stringValue(input.targetEvidenceId, {
|
|
249
|
+
max: 256,
|
|
250
|
+
nullable: false,
|
|
251
|
+
});
|
|
252
|
+
const baseCommit = stringValue(input.baseCommit, {
|
|
253
|
+
max: 64,
|
|
254
|
+
nullable: false,
|
|
255
|
+
}).toLowerCase();
|
|
256
|
+
const binding = normalizeExecutionLocationBinding(input.binding);
|
|
257
|
+
if (
|
|
258
|
+
!/^sha256:[a-f0-9]{64}$/u.test(profileDigest) ||
|
|
259
|
+
!/^[a-f0-9]{64}$/u.test(sourceHeadHash) ||
|
|
260
|
+
!Number.isSafeInteger(sourceEventCount) ||
|
|
261
|
+
sourceEventCount < 1 ||
|
|
262
|
+
!/^[a-f0-9]{40,64}$/u.test(baseCommit) ||
|
|
263
|
+
binding.observed !== true ||
|
|
264
|
+
binding.source.git.commit !== baseCommit
|
|
265
|
+
) {
|
|
266
|
+
throw new TypeError("execution location target attestation is invalid");
|
|
267
|
+
}
|
|
268
|
+
const targetFactsDigest = computeExecutionLocationTargetFactsDigest(binding);
|
|
269
|
+
const material = {
|
|
270
|
+
schema: EXECUTION_LOCATION_TARGET_ATTESTATION_SCHEMA,
|
|
271
|
+
profileDigest,
|
|
272
|
+
handoff: {
|
|
273
|
+
sourceSessionId,
|
|
274
|
+
sourceHeadHash,
|
|
275
|
+
sourceEventCount,
|
|
276
|
+
targetEvidenceId,
|
|
277
|
+
baseCommit,
|
|
278
|
+
},
|
|
279
|
+
binding,
|
|
280
|
+
targetFactsDigest,
|
|
281
|
+
verified: {
|
|
282
|
+
ambientLocation: true,
|
|
283
|
+
cwd: true,
|
|
284
|
+
gitCommit: true,
|
|
285
|
+
platform: true,
|
|
286
|
+
arch: true,
|
|
287
|
+
cliVersion: true,
|
|
288
|
+
requiredTools: true,
|
|
289
|
+
networkPolicy: false,
|
|
290
|
+
sandboxStrength: false,
|
|
291
|
+
credentialAvailability: false,
|
|
292
|
+
},
|
|
293
|
+
gaps: [
|
|
294
|
+
"target-network-policy-not-remotely-attested",
|
|
295
|
+
"target-sandbox-strength-not-remotely-attested",
|
|
296
|
+
"target-credential-availability-not-remotely-attested",
|
|
297
|
+
],
|
|
298
|
+
};
|
|
299
|
+
return Object.freeze({
|
|
300
|
+
...material,
|
|
301
|
+
attestationDigest: `sha256:${createHash("sha256")
|
|
302
|
+
.update(
|
|
303
|
+
"chainlesschain.execution-location.target-attestation.v1\0",
|
|
304
|
+
"utf8",
|
|
305
|
+
)
|
|
306
|
+
.update(canonicalJson(material, "executionLocationTarget"), "utf8")
|
|
307
|
+
.digest("hex")}`,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
|
|
207
311
|
const LOCATION_PROFILES = Object.freeze({
|
|
208
312
|
[EXECUTION_LOCATION.LOCAL]: {
|
|
209
313
|
label: "Local",
|
|
@@ -217,17 +321,17 @@ const LOCATION_PROFILES = Object.freeze({
|
|
|
217
321
|
},
|
|
218
322
|
[EXECUTION_LOCATION.WSL]: {
|
|
219
323
|
label: "WSL",
|
|
220
|
-
executor: "
|
|
221
|
-
launch: "
|
|
222
|
-
resume: "
|
|
223
|
-
startup: "
|
|
324
|
+
executor: "wsl-fixed-cli-launcher",
|
|
325
|
+
launch: "requires-configuration",
|
|
326
|
+
resume: "requires-configuration",
|
|
327
|
+
startup: "distro-profile-and-session-replica-required",
|
|
224
328
|
continuity: "wsl-host-dependent",
|
|
225
329
|
cost: "local-resource",
|
|
226
330
|
connectors: ["wsl-files", "wsl-git"],
|
|
227
331
|
},
|
|
228
332
|
[EXECUTION_LOCATION.SSH]: {
|
|
229
333
|
label: "SSH",
|
|
230
|
-
executor: "ssh-
|
|
334
|
+
executor: "strict-ssh-fixed-cli-launcher",
|
|
231
335
|
launch: "requires-configuration",
|
|
232
336
|
resume: "requires-configuration",
|
|
233
337
|
startup: "target-and-auth-required",
|
|
@@ -237,7 +341,7 @@ const LOCATION_PROFILES = Object.freeze({
|
|
|
237
341
|
},
|
|
238
342
|
[EXECUTION_LOCATION.CONTAINER]: {
|
|
239
343
|
label: "Container",
|
|
240
|
-
executor: "docker-
|
|
344
|
+
executor: "docker-fixed-cli-launcher",
|
|
241
345
|
launch: "requires-configuration",
|
|
242
346
|
resume: "requires-configuration",
|
|
243
347
|
startup: "image-and-runtime-required",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { VERSION } from "../constants.js";
|
|
3
4
|
import { createExecutionLocationBinding } from "./execution-location-contract.js";
|
|
4
5
|
import { detectAmbientLocation } from "./execution-location.js";
|
|
5
6
|
|
|
@@ -58,7 +59,7 @@ function discoverGit(runtimeFs, cwd) {
|
|
|
58
59
|
head = "detached";
|
|
59
60
|
commit = rawHead.toLowerCase();
|
|
60
61
|
} else {
|
|
61
|
-
const match = /^ref:\s*(refs\/[A-Za-z0-9._
|
|
62
|
+
const match = /^ref:\s*(refs\/[A-Za-z0-9._/-]+)$/u.exec(rawHead || "");
|
|
62
63
|
if (match && !match[1].includes("..")) {
|
|
63
64
|
head = match[1];
|
|
64
65
|
const loose = readSmallUtf8(
|
|
@@ -106,6 +107,7 @@ export function captureAmbientExecutionLocation(options = {}, deps = {}) {
|
|
|
106
107
|
platform: deps.platform || process.platform,
|
|
107
108
|
arch: deps.arch || process.arch,
|
|
108
109
|
nodeVersion: deps.nodeVersion || process.version,
|
|
110
|
+
cliVersion: deps.cliVersion || VERSION,
|
|
109
111
|
tools: ["chainlesschain-cli", "node"],
|
|
110
112
|
},
|
|
111
113
|
model: {
|