chainlesschain 0.165.2 → 0.165.4
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 +151 -29
- package/package.json +2 -2
- package/src/assets/web-panel/assets/{AIOps-lS1R0Cza.js → AIOps-C__nnraW.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BmlgBPsj.js → ActionButton-CsKWHEZ-.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CNKczv1S.js → Analytics-BhIjfjWO.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BuZGJARQ.js → AppLayout-BjuXFzWZ.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-Dm73Sl-O.js → Artifacts-k6whDkZJ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-BGMW7A5e.js → Audit-C4FBMYRh.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BQ6M54JR.js → BackgroundAgents-C_vRrSXk.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DBzGP0bR.js → Backup-CngFZeVp.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-D1mLCoOV.js → BaseInput-B_H9EBRm.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BUfcN7p8.js → Chat-DLEC5kt7.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-xijcWkJe.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-Du0Yg5Pi.js → Checkbox-m3ClR4xh.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B2RXziHW.js → Codegen-CmLSFrgp.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DWhekOrR.js → Col-DFGQteHN.js} +1 -1
- package/src/assets/web-panel/assets/{Community-HQhrkon4.js → Community-EUUVORHE.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-izHNb4uz.js → Compact-2PSg0Yr7.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BDwLy41-.js → Compliance-CcKur7gB.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DFJhLa7K.js → Cowork-DK_Fezfa.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DYY9RG7-.js → Cron-Dbw89xl7.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-rr7tJTtv.js → Crosschain-CH66h_Ec.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D2sfHRLi.js → DID-D1igRb17.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-q_eGdhha.js → Dashboard-DVAsrobk.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Cufrh2Bz.js → Dropdown-Dl7W8AQs.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-B-kdv10f.js → EmailListRenderer-D5tpaEQC.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-D21XjgfG.js → FamilyGuardDashboard-O_VQf8gq.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CAwRTLZH.js → Federation-BTVcgS9n.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-vx3daNDF.js → FormItemContext-BRnkJAIz.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CRWY2wU4.js → GenericCardRenderer-8OWSCkDj.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Q6SwauyD.js → Git-WXLYTQj2.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BJ1q4IQZ.js → Governance-BezaUhtc.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CSWjROgD.js → Inference-CuRay3Gu.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-fzuQsWuY.js → KnowledgeGraph-DfWLDW1m.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DVF8Mnns.js → Logs-C55y2pPY.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-hDpWdiBc.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-BQP7LOA4.js → Marketplace-Dk08Uycg.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BNlJCmNc.js → McpTools-C11fSB5V.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-DLLg5WQ4.js → Memory-mr0eZc97.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CR2skNAF.js → MobileBridge-C0iCSRbb.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BxVavObl.js → MobileProjects-CY-xMG8Z.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B17pgqMI.js → Mtc-Bplqc_Wc.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-4UmV5cIL.js → MtcAudit-BlzwsoSM.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DoMEXEcU.js → Multisig-BBLmTty6.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-h9DMXFX4.js → NLProgramming-DtT1uf1W.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Cihn-xX8.js → Notes-DcqQAxTK.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BE6ZGa3R.js → NotificationSettings-cb0kWoZe.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-CnwojoSI.js → OrderTableRenderer-kw9HZQNN.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-B2vpwmjb.js → Organization-DlTlbkUN.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-C4z28R0-.js → Overflow-pp1qs-oY.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BVlFkwhW.js → P2P-BESLnyYz.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BXbEdL5B.js → PdhVaultBrowser-B-J1mGuf.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-C28xs4lp.js → Permissions-B36PeT1_.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Dgl_rBjM.js → PersonalDataHub-CTK2ad-3.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-3QUIhrKI.js → Pipeline-zJNGXsac.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-8Gh33OZ5.js → Privacy-b9fz0Qf0.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BNmg4tZi.js → ProjectInit-DjZbZgiB.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-vgMfeCf9.js → ProjectSettings-C-hHJXlD.js} +2 -2
- package/src/assets/web-panel/assets/Projects-BC9KSDM6.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CXoOa8eX.js → Providers-Dz-CAYYU.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BhfTF0oS.js → QrScannerModal-A0yoQ3-3.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-C746HEAj.js → QuickAsk-DrFgFJNC.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BSej8Eo0.js → Recommend-KC8hF1g4.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-f3gmnlG3.js → RemoteSession-DGTPIk6u.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-CyvybpkN.js → Reputation-QmbwM7Yk.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DwV2PeYn.js → Row-BxjJylia.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-11GrzjZy.js → RssFeed-B7Wda1J6.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BjKXkrAY.js → Search-_plQ_YSA.js} +1 -1
- package/src/assets/web-panel/assets/{Security-eWiFb9Yk.js → Security-CD2YJZfx.js} +2 -2
- package/src/assets/web-panel/assets/{Services-CdCsMAtt.js → Services-qQE7NmwE.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-4Q2UTKQ5.js → Skeleton-DgQqkFf7.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-v4rtYrRj.js → Skills-C4C0oFFt.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CRhsFvd_.js → Sla-Px2N2B5c.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-DN6C3lQd.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-D16zonl7.js → SyncSettings-jm5aH_m7.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-Xxozz0i_.js → Tasks-DlkJcv67.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CXJpPtCT.js → Templates-DyrTHUBs.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-XRV0L1ZF.js → Tenant-mC434PtL.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CYuO1i_w.js → Terminal-o0_s3NgK.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-BXqitWsu.js → TimelineRenderer-DAGlAXOw.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BvPrDHIy.js → Tokens-BnulS_bs.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DhCrSTf5.js → Trigger-suQbVXYM.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DmsuZD6K.js → Trust-DbIJAPo5.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D_yrts5C.js → UkeySign-CQNpbIHi.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B01ihPrm.js → VideoEditing-D8aWCERk.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DpUjKa-N.js → Wallet-CuLpYfZc.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-CL07yON6.js → WebAuthn-CsfG8ZMc.js} +2 -2
- package/src/assets/web-panel/assets/{WorkflowEditor-CLMflnRr.js → WorkflowEditor-BYsEAZbd.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DtUqe8h_.js → chat-FT4Um3-I.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DPKrgVfy.js → colors-CKbS_Wlt.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BTt2GtOm.js → compact-item-CFJtzuJM.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D_VeUc1J.js → createContext-B9kSRW6K.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DJZ0gAMu.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-1kndiylj.js → hasIn-DR-x0Xpi.js} +1 -1
- package/src/assets/web-panel/assets/{index-dVc-CXY4.js → index-7jHr_A_k.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFIZ_1Sf.js → index-B3ZX81mK.js} +1 -1
- package/src/assets/web-panel/assets/{index-fk2Rjacw.js → index-B7osrXqy.js} +3 -3
- package/src/assets/web-panel/assets/{index-CHG-KcS4.js → index-BGbPnC5x.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dbbymxpj.js → index-BI5hP_qy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaZAbw9A.js → index-BK3TiKVq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzjkKUmR.js → index-BVPU43b1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAXfRKfG.js → index-BW-t9n-q.js} +1 -1
- package/src/assets/web-panel/assets/{index-8nz_fmlj.js → index-BfFCQHL3.js} +1 -1
- package/src/assets/web-panel/assets/index-Bizb4hkw.js +1 -0
- package/src/assets/web-panel/assets/{index-DdkplL9R.js → index-Bt4fS2eL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DG2MZQ3f.js → index-BwR7yc2h.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfKBRdSS.js → index-Bzz0C1BZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-GsoUQ2M7.js → index-C2JvmYRc.js} +1 -1
- package/src/assets/web-panel/assets/{index-l1BETrDb.js → index-CGaXUsIs.js} +1 -1
- package/src/assets/web-panel/assets/{index-4bna2_SR.js → index-CJmIQ9XR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfGl8CqG.js → index-C_enk9I_.js} +1 -1
- package/src/assets/web-panel/assets/{index-D95OFht7.js → index-Cr2FLUsD.js} +1 -1
- package/src/assets/web-panel/assets/{index-DsJCDUJG.js → index-CvrCCqJt.js} +1 -1
- package/src/assets/web-panel/assets/{index-sDoMHTNA.js → index-D4LfPvWA.js} +1 -1
- package/src/assets/web-panel/assets/{index-By5n8up9.js → index-DMGmg497.js} +1 -1
- package/src/assets/web-panel/assets/{index-ocf06EVQ.js → index-DShSkww-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bhudc_Ez.js → index-DTxNy0ZU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CX81qSM4.js → index-DW4BWjTk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlDNVgBt.js → index-DWdqx7zI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcO04eDn.js → index-Dap9c3eD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dwqmtk65.js → index-DcfxhKXR.js} +1 -1
- package/src/assets/web-panel/assets/{index-2eyAXE3d.js → index-DdkIhfi-.js} +1 -1
- package/src/assets/web-panel/assets/{index-brCInrzq.js → index-DeSgw-WV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJ8vXGOa.js → index-DiNUEpSQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHpBMWCh.js → index-DjEP7WkH.js} +1 -1
- package/src/assets/web-panel/assets/{index-m31Ka8hZ.js → index-DtkFqPVA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtF7EN49.js → index-KqDaCApw.js} +1 -1
- package/src/assets/web-panel/assets/index-OHSl-xCh.js +1 -0
- package/src/assets/web-panel/assets/{index-B9KvcS7R.js → index-OSzjTzGM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CauoBQkH.js → index-QBSeNVO3.js} +1 -1
- package/src/assets/web-panel/assets/{index-FzdwcSy2.js → index-WE08gMJP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxdTdBix.js → index-r2VI1Ikk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BepLZwgB.js → index-tqSEHPRT.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CvyYJd7z.js → initDefaultProps-Dd7n7VgI.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DYZkhUdz.js → motion-BwxouRw1.js} +1 -1
- package/src/assets/web-panel/assets/{move-slnJRVT1.js → move-DObN0PG9.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DVc0CKmy.js → mtc-parser-B3nOUQc7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BCXAtHCq.js → omit-o9WU2Nbl.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DBsemz_K.js → pickAttrs-CL_vvfQ_.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BRtkJ-nv.js → placementArrow-CYrM2tyK.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Cebq7EZn.js → responsiveObserve-k_06cQ96.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DT7qvId2.js → slide-CPKG0pxS.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-pQiITLkG.js → statusUtils-BDDEeLTw.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-c-19BVKQ.js → styleChecker-Cmb7RTh7.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DsS5-0bE.js → useFlexGapSupport-e2IedC4N.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CxGiMe5n.js → useFs-CE_gxVnm.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-D9btVID5.js → usePersonalDataHub-BkMIIKMz.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CUYFsFEN.js → vnode-DW886XV1.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CXmn_35j.js → zoom-Dwo_adaf.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +105 -35
- package/src/commands/artifacts.js +363 -33
- package/src/commands/cowork.js +202 -36
- package/src/commands/session-budget.js +155 -0
- package/src/commands/session-location.js +948 -0
- package/src/commands/session.js +72 -46
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/artifact-protocol.js +77 -13
- package/src/gateways/ws/session-protocol.js +391 -24
- package/src/gateways/ws/ws-agent-handler.js +191 -14
- package/src/gateways/ws/ws-server.js +14 -3
- package/src/gateways/ws/ws-session-gateway.js +101 -5
- package/src/harness/jsonl-session-store.js +1210 -0
- package/src/lib/agent-team/team-runner.js +43 -13
- package/src/lib/artifact-access-ledger.js +461 -0
- package/src/lib/artifact-cleanup-ledger.js +861 -0
- package/src/lib/artifact-deletion-ledger.js +677 -0
- package/src/lib/artifact-store.js +256 -51
- package/src/lib/background-agent-keeper-protocol.js +75 -4
- package/src/lib/background-agent-launch-barrier.js +74 -0
- package/src/lib/background-agent-supervisor.js +149 -5
- package/src/lib/background-turn-bootstrap-protocol.js +4 -0
- package/src/lib/command-lifecycle-report.js +8 -4
- package/src/lib/cowork-adapter.js +9 -5
- package/src/lib/cowork-task-runner.js +20 -0
- package/src/lib/cowork-workflow.js +178 -20
- package/src/lib/direct-model-usage.js +62 -22
- package/src/lib/dynamic-workflow-runtime.js +3184 -111
- package/src/lib/execution-location-result-apply.js +339 -0
- package/src/lib/execution-location-result-artifact.js +271 -0
- package/src/lib/execution-location-result-review.js +253 -0
- package/src/lib/execution-location-result-store.js +331 -0
- package/src/lib/execution-location-result.js +617 -0
- package/src/lib/execution-location-target.js +236 -1
- package/src/lib/managed-tool-checkpoint.js +47 -4
- package/src/lib/process-execution-broker/workspace-transaction.js +3 -0
- package/src/lib/session-budget-production-root.js +376 -0
- package/src/lib/session-budget-runtime.js +109 -18
- package/src/lib/session-budget-usage.js +63 -0
- package/src/lib/session-host-snapshot.js +19 -2
- package/src/lib/session-resource-budget.js +766 -105
- package/src/lib/sub-agent-context.js +69 -22
- package/src/lib/web-ui-server.js +12 -1
- package/src/lib/with-file-lock.js +175 -26
- package/src/repl/agent-repl.js +237 -16
- package/src/runtime/agent-core.js +123 -0
- package/src/runtime/headless-runner.js +135 -46
- package/src/runtime/headless-stream.js +133 -25
- package/src/runtime/policies/agent-policy.js +10 -0
- package/src/workers/background-agent-keeper.js +112 -19
- package/src/workers/background-agent-worker.js +383 -134
- package/src/workers/background-turn-bootstrap.js +13 -8
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CY5m8ZHg.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-BLif4QSg.js +0 -1
- package/src/assets/web-panel/assets/Projects-BhtAVilc.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-DLjKsDVu.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Bj5nUW2v.js +0 -1
- package/src/assets/web-panel/assets/index-CPcM-eqo.js +0 -1
- package/src/assets/web-panel/assets/index-xeSyVoRe.js +0 -1
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* `~/.chainlesschain/artifacts/`; this command is the user-facing surface:
|
|
6
6
|
*
|
|
7
7
|
* cc artifacts list [--session <id>] [--kind <k>] [--json]
|
|
8
|
-
* cc artifacts show <id> [--json] metadata +
|
|
9
|
-
* cc artifacts open <id> print
|
|
10
|
-
* cc artifacts remove <id>
|
|
11
|
-
* cc artifacts clean [--
|
|
8
|
+
* cc artifacts show <id> [--json] public metadata + integrity
|
|
9
|
+
* cc artifacts open <id> audit access, then print local path
|
|
10
|
+
* cc artifacts remove <id> settle managed-copy removal
|
|
11
|
+
* cc artifacts clean [--cleanup-id <id>] settle expired-artifact batch
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import chalk from "chalk";
|
|
@@ -18,6 +18,21 @@ import {
|
|
|
18
18
|
ArtifactStore,
|
|
19
19
|
publicArtifactMetadata,
|
|
20
20
|
} from "../lib/artifact-store.js";
|
|
21
|
+
import {
|
|
22
|
+
ARTIFACT_ACCESS_ACTIONS,
|
|
23
|
+
ARTIFACT_ACCESS_CLIENTS,
|
|
24
|
+
authorizeArtifactContentAccess,
|
|
25
|
+
readArtifactAccessLedger,
|
|
26
|
+
} from "../lib/artifact-access-ledger.js";
|
|
27
|
+
import {
|
|
28
|
+
ARTIFACT_DELETION_CLIENTS,
|
|
29
|
+
readArtifactDeletionLedger,
|
|
30
|
+
settleArtifactDeletion,
|
|
31
|
+
} from "../lib/artifact-deletion-ledger.js";
|
|
32
|
+
import {
|
|
33
|
+
readArtifactCleanupLedger,
|
|
34
|
+
settleArtifactCleanup,
|
|
35
|
+
} from "../lib/artifact-cleanup-ledger.js";
|
|
21
36
|
import {
|
|
22
37
|
assessDeliveryEvidence,
|
|
23
38
|
createDeliveryEvidenceRecord,
|
|
@@ -58,7 +73,7 @@ export function registerArtifactsCommand(program) {
|
|
|
58
73
|
|
|
59
74
|
cmd
|
|
60
75
|
.command("show <id>")
|
|
61
|
-
.description("Show one artifact's metadata
|
|
76
|
+
.description("Show one artifact's public metadata and integrity")
|
|
62
77
|
.option("--json", "Machine-readable JSON output")
|
|
63
78
|
.action((id, options) => {
|
|
64
79
|
process.exitCode = runArtifactsShow(id, options);
|
|
@@ -66,28 +81,92 @@ export function registerArtifactsCommand(program) {
|
|
|
66
81
|
|
|
67
82
|
cmd
|
|
68
83
|
.command("open <id>")
|
|
69
|
-
.description("
|
|
84
|
+
.description("Authorize local content access and print the stored path")
|
|
70
85
|
.action((id) => {
|
|
71
86
|
process.exitCode = runArtifactsOpen(id);
|
|
72
87
|
});
|
|
73
88
|
|
|
89
|
+
cmd
|
|
90
|
+
.command("access <id>")
|
|
91
|
+
.description(
|
|
92
|
+
"Authorize one official client action and record content-free access lineage",
|
|
93
|
+
)
|
|
94
|
+
.requiredOption(
|
|
95
|
+
"--client <client>",
|
|
96
|
+
`Declared client (${ARTIFACT_ACCESS_CLIENTS.join("|")})`,
|
|
97
|
+
)
|
|
98
|
+
.requiredOption(
|
|
99
|
+
"--action <action>",
|
|
100
|
+
`Requested action (${ARTIFACT_ACCESS_ACTIONS.join("|")})`,
|
|
101
|
+
)
|
|
102
|
+
.option("--access-id <id>", "Stable id for response-loss retry")
|
|
103
|
+
.option("--json", "Machine-readable authorization and local path")
|
|
104
|
+
.action((id, options) => {
|
|
105
|
+
process.exitCode = runArtifactsAccess(id, options);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
cmd
|
|
109
|
+
.command("access-log")
|
|
110
|
+
.description("Verify and display the content-free artifact access ledger")
|
|
111
|
+
.option("--artifact <id>", "Only events for one artifact id")
|
|
112
|
+
.option("--json", "Machine-readable verified ledger projection")
|
|
113
|
+
.action((options) => {
|
|
114
|
+
process.exitCode = runArtifactsAccessLog(options);
|
|
115
|
+
});
|
|
116
|
+
|
|
74
117
|
cmd
|
|
75
118
|
.command("remove <id>")
|
|
76
119
|
.alias("rm")
|
|
77
|
-
.description("
|
|
120
|
+
.description("Settle and audit removal of one managed artifact copy")
|
|
121
|
+
.option(
|
|
122
|
+
"--client <client>",
|
|
123
|
+
`Declared client (${ARTIFACT_DELETION_CLIENTS.join("|")})`,
|
|
124
|
+
"cli",
|
|
125
|
+
)
|
|
126
|
+
.option("--deletion-id <id>", "Stable id for response-loss recovery")
|
|
78
127
|
.option("--json", "Machine-readable JSON output")
|
|
79
128
|
.action((id, options) => {
|
|
80
129
|
process.exitCode = runArtifactsRemove(id, options);
|
|
81
130
|
});
|
|
82
131
|
|
|
132
|
+
cmd
|
|
133
|
+
.command("deletion-log")
|
|
134
|
+
.description(
|
|
135
|
+
"Verify and display the content-free deletion settlement ledger",
|
|
136
|
+
)
|
|
137
|
+
.option("--artifact <id>", "Only events for one artifact id")
|
|
138
|
+
.option("--deletion <id>", "Only events for one deletion id")
|
|
139
|
+
.option("--json", "Machine-readable verified ledger projection")
|
|
140
|
+
.action((options) => {
|
|
141
|
+
process.exitCode = runArtifactsDeletionLog(options);
|
|
142
|
+
});
|
|
143
|
+
|
|
83
144
|
cmd
|
|
84
145
|
.command("clean")
|
|
85
|
-
.description("
|
|
146
|
+
.description("Settle and audit one frozen batch of expired artifacts")
|
|
147
|
+
.option(
|
|
148
|
+
"--client <client>",
|
|
149
|
+
`Declared client (${ARTIFACT_DELETION_CLIENTS.join("|")})`,
|
|
150
|
+
"cli",
|
|
151
|
+
)
|
|
152
|
+
.option("--cleanup-id <id>", "Stable batch id for response-loss recovery")
|
|
86
153
|
.option("--json", "Machine-readable JSON output")
|
|
87
154
|
.action((options) => {
|
|
88
155
|
process.exitCode = runArtifactsClean(options);
|
|
89
156
|
});
|
|
90
157
|
|
|
158
|
+
cmd
|
|
159
|
+
.command("cleanup-log")
|
|
160
|
+
.description(
|
|
161
|
+
"Verify and display the content-free cleanup settlement ledger",
|
|
162
|
+
)
|
|
163
|
+
.option("--cleanup <id>", "Only events for one cleanup id")
|
|
164
|
+
.option("--artifact <id>", "Only batches containing one artifact id")
|
|
165
|
+
.option("--json", "Machine-readable verified ledger projection")
|
|
166
|
+
.action((options) => {
|
|
167
|
+
process.exitCode = runArtifactsCleanupLog(options);
|
|
168
|
+
});
|
|
169
|
+
|
|
91
170
|
cmd
|
|
92
171
|
.command("select-gates <input>")
|
|
93
172
|
.description(
|
|
@@ -193,7 +272,13 @@ export function runArtifactsList(options = {}, deps = {}) {
|
|
|
193
272
|
entries = entries.filter((e) => e.kind === String(options.kind));
|
|
194
273
|
}
|
|
195
274
|
if (options.json) {
|
|
196
|
-
console.log(
|
|
275
|
+
console.log(
|
|
276
|
+
JSON.stringify(
|
|
277
|
+
{ artifacts: entries.map(publicArtifactMetadata) },
|
|
278
|
+
null,
|
|
279
|
+
2,
|
|
280
|
+
),
|
|
281
|
+
);
|
|
197
282
|
return 0;
|
|
198
283
|
}
|
|
199
284
|
if (entries.length === 0) {
|
|
@@ -227,8 +312,7 @@ export function runArtifactsShow(id, options = {}, deps = {}) {
|
|
|
227
312
|
return 1;
|
|
228
313
|
}
|
|
229
314
|
const payload = {
|
|
230
|
-
...entry,
|
|
231
|
-
storedPath: store.storedPath(entry),
|
|
315
|
+
...publicArtifactMetadata(entry),
|
|
232
316
|
integrity: store.verifyIntegrity(entry),
|
|
233
317
|
};
|
|
234
318
|
if (options.json) {
|
|
@@ -242,44 +326,290 @@ export function runArtifactsShow(id, options = {}, deps = {}) {
|
|
|
242
326
|
}
|
|
243
327
|
|
|
244
328
|
export function runArtifactsOpen(id, deps = {}) {
|
|
329
|
+
return runArtifactsAccess(id, { client: "cli", action: "open" }, deps);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
export function runArtifactsAccess(id, options = {}, deps = {}) {
|
|
245
333
|
const store = deps.store || new ArtifactStore();
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
334
|
+
try {
|
|
335
|
+
const authorization = (
|
|
336
|
+
deps.authorizeArtifactContentAccess || authorizeArtifactContentAccess
|
|
337
|
+
)(
|
|
338
|
+
store,
|
|
339
|
+
{
|
|
340
|
+
artifactId: id,
|
|
341
|
+
client: options.client,
|
|
342
|
+
action: options.action,
|
|
343
|
+
accessId: options.accessId,
|
|
344
|
+
},
|
|
345
|
+
deps.accessOptions || {},
|
|
346
|
+
);
|
|
347
|
+
const payload = {
|
|
348
|
+
schema: "cc-artifact-content-access-authorization/v1",
|
|
349
|
+
access: authorization.access,
|
|
350
|
+
recorded: authorization.recorded,
|
|
351
|
+
storedPath: authorization.storedPath,
|
|
352
|
+
integrity: authorization.integrity,
|
|
353
|
+
};
|
|
354
|
+
if (options.json) {
|
|
355
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
356
|
+
} else {
|
|
357
|
+
console.log(authorization.storedPath);
|
|
358
|
+
}
|
|
359
|
+
return 0;
|
|
360
|
+
} catch (error) {
|
|
361
|
+
if (options.json) {
|
|
362
|
+
console.error(
|
|
363
|
+
JSON.stringify({
|
|
364
|
+
schema: "cc-artifact-content-access-authorization-error/v1",
|
|
365
|
+
authorized: false,
|
|
366
|
+
error: error.message,
|
|
367
|
+
}),
|
|
368
|
+
);
|
|
369
|
+
} else {
|
|
370
|
+
console.error(chalk.red(`Artifact access failed: ${error.message}`));
|
|
371
|
+
}
|
|
372
|
+
return 1;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export function runArtifactsAccessLog(options = {}, deps = {}) {
|
|
377
|
+
const store = deps.store || new ArtifactStore();
|
|
378
|
+
try {
|
|
379
|
+
const ledger = (deps.readArtifactAccessLedger || readArtifactAccessLedger)(
|
|
380
|
+
store,
|
|
381
|
+
deps.accessOptions || {},
|
|
382
|
+
);
|
|
383
|
+
const events = options.artifact
|
|
384
|
+
? ledger.events.filter(
|
|
385
|
+
(event) => event.artifactId === String(options.artifact),
|
|
386
|
+
)
|
|
387
|
+
: ledger.events;
|
|
388
|
+
const projection = {
|
|
389
|
+
...ledger,
|
|
390
|
+
filtered: Boolean(options.artifact),
|
|
391
|
+
matchedEventCount: events.length,
|
|
392
|
+
events,
|
|
393
|
+
};
|
|
394
|
+
if (options.json) {
|
|
395
|
+
console.log(JSON.stringify(projection, null, 2));
|
|
396
|
+
} else if (events.length === 0) {
|
|
397
|
+
console.log(chalk.dim("No artifact content access events."));
|
|
398
|
+
} else {
|
|
399
|
+
for (const event of events) {
|
|
400
|
+
console.log(
|
|
401
|
+
`${chalk.cyan(event.sequence)} ${event.artifactId} ${event.client}/${event.action} ${event.authorizedAt} ${event.eventDigest}`,
|
|
402
|
+
);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return 0;
|
|
406
|
+
} catch (error) {
|
|
407
|
+
if (options.json) {
|
|
408
|
+
console.error(
|
|
409
|
+
JSON.stringify({
|
|
410
|
+
schema: "cc-artifact-content-access-ledger-error/v1",
|
|
411
|
+
verified: false,
|
|
412
|
+
error: error.message,
|
|
413
|
+
}),
|
|
414
|
+
);
|
|
415
|
+
} else {
|
|
416
|
+
console.error(chalk.red(`Artifact access log failed: ${error.message}`));
|
|
417
|
+
}
|
|
249
418
|
return 1;
|
|
250
419
|
}
|
|
251
|
-
console.log(store.storedPath(entry));
|
|
252
|
-
return 0;
|
|
253
420
|
}
|
|
254
421
|
|
|
255
422
|
export function runArtifactsRemove(id, options = {}, deps = {}) {
|
|
256
423
|
const store = deps.store || new ArtifactStore();
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
424
|
+
const deletionId = String(
|
|
425
|
+
options.deletionId || `delete_${randomUUID().replaceAll("-", "")}`,
|
|
426
|
+
);
|
|
427
|
+
try {
|
|
428
|
+
const result = (deps.settleArtifactDeletion || settleArtifactDeletion)(
|
|
429
|
+
store,
|
|
430
|
+
{
|
|
431
|
+
deletionId,
|
|
432
|
+
artifactId: id,
|
|
433
|
+
reason: "explicit",
|
|
434
|
+
client: options.client || "cli",
|
|
435
|
+
},
|
|
436
|
+
deps.deletionOptions || {},
|
|
437
|
+
);
|
|
438
|
+
if (options.json) {
|
|
439
|
+
console.log(JSON.stringify(result, null, 2));
|
|
440
|
+
return result.found ? 0 : 1;
|
|
441
|
+
}
|
|
442
|
+
if (!result.found) {
|
|
443
|
+
console.error(chalk.red(`No artifact with id "${id}".`));
|
|
444
|
+
return 1;
|
|
445
|
+
}
|
|
446
|
+
console.log(
|
|
447
|
+
chalk.green(`Removed managed copy ${id} (deletion ${deletionId}).`),
|
|
448
|
+
);
|
|
449
|
+
return 0;
|
|
450
|
+
} catch (error) {
|
|
451
|
+
if (options.json) {
|
|
452
|
+
console.error(
|
|
453
|
+
JSON.stringify({
|
|
454
|
+
schema: "cc-artifact-deletion-error/v1",
|
|
455
|
+
deletionId: error.deletionId || deletionId,
|
|
456
|
+
artifactId: String(id),
|
|
457
|
+
settled: false,
|
|
458
|
+
error: error.message,
|
|
459
|
+
}),
|
|
460
|
+
);
|
|
461
|
+
} else {
|
|
462
|
+
console.error(
|
|
463
|
+
chalk.red(
|
|
464
|
+
`Artifact removal ${error.deletionId || deletionId} is not settled: ${error.message}`,
|
|
465
|
+
),
|
|
466
|
+
);
|
|
467
|
+
}
|
|
468
|
+
return 1;
|
|
261
469
|
}
|
|
262
|
-
|
|
263
|
-
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
export function runArtifactsDeletionLog(options = {}, deps = {}) {
|
|
473
|
+
const store = deps.store || new ArtifactStore();
|
|
474
|
+
try {
|
|
475
|
+
const ledger = (
|
|
476
|
+
deps.readArtifactDeletionLedger || readArtifactDeletionLedger
|
|
477
|
+
)(store, deps.deletionOptions || {});
|
|
478
|
+
const events = ledger.events.filter(
|
|
479
|
+
(event) =>
|
|
480
|
+
(!options.artifact || event.artifactId === String(options.artifact)) &&
|
|
481
|
+
(!options.deletion || event.deletionId === String(options.deletion)),
|
|
482
|
+
);
|
|
483
|
+
const projection = {
|
|
484
|
+
...ledger,
|
|
485
|
+
filtered: Boolean(options.artifact || options.deletion),
|
|
486
|
+
matchedEventCount: events.length,
|
|
487
|
+
events,
|
|
488
|
+
};
|
|
489
|
+
if (options.json) {
|
|
490
|
+
console.log(JSON.stringify(projection, null, 2));
|
|
491
|
+
} else if (events.length === 0) {
|
|
492
|
+
console.log(chalk.dim("No artifact deletion settlement events."));
|
|
493
|
+
} else {
|
|
494
|
+
for (const event of events) {
|
|
495
|
+
console.log(
|
|
496
|
+
`${event.sequence}\t${event.phase}\t${event.artifactId}\t${event.deletionId}\t${event.eventDigest}`,
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return 0;
|
|
501
|
+
} catch (error) {
|
|
502
|
+
if (options.json) {
|
|
503
|
+
console.error(
|
|
504
|
+
JSON.stringify({
|
|
505
|
+
schema: "cc-artifact-deletion-ledger-error/v1",
|
|
506
|
+
verified: false,
|
|
507
|
+
error: error.message,
|
|
508
|
+
}),
|
|
509
|
+
);
|
|
510
|
+
} else {
|
|
511
|
+
console.error(
|
|
512
|
+
chalk.red(`Artifact deletion log failed: ${error.message}`),
|
|
513
|
+
);
|
|
514
|
+
}
|
|
264
515
|
return 1;
|
|
265
516
|
}
|
|
266
|
-
console.log(chalk.green(`Removed ${id}.`));
|
|
267
|
-
return 0;
|
|
268
517
|
}
|
|
269
518
|
|
|
270
519
|
export function runArtifactsClean(options = {}, deps = {}) {
|
|
271
520
|
const store = deps.store || new ArtifactStore();
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
521
|
+
const cleanupId = String(
|
|
522
|
+
options.cleanupId || `cleanup_${randomUUID().replaceAll("-", "")}`,
|
|
523
|
+
);
|
|
524
|
+
try {
|
|
525
|
+
const result = (deps.settleArtifactCleanup || settleArtifactCleanup)(
|
|
526
|
+
store,
|
|
527
|
+
{
|
|
528
|
+
cleanupId,
|
|
529
|
+
client: options.client || "cli",
|
|
530
|
+
},
|
|
531
|
+
deps.cleanupOptions || {},
|
|
532
|
+
);
|
|
533
|
+
if (options.json) {
|
|
534
|
+
console.log(JSON.stringify(result, null, 2));
|
|
535
|
+
return 0;
|
|
536
|
+
}
|
|
537
|
+
console.log(
|
|
538
|
+
result.removed > 0
|
|
539
|
+
? chalk.green(
|
|
540
|
+
`Settled cleanup ${cleanupId}: removed ${result.removed} expired artifact(s).`,
|
|
541
|
+
)
|
|
542
|
+
: chalk.dim(`Settled cleanup ${cleanupId}: nothing expired.`),
|
|
543
|
+
);
|
|
275
544
|
return 0;
|
|
545
|
+
} catch (error) {
|
|
546
|
+
if (options.json) {
|
|
547
|
+
console.error(
|
|
548
|
+
JSON.stringify({
|
|
549
|
+
schema: "cc-artifact-cleanup-error/v1",
|
|
550
|
+
cleanupId: error.cleanupId || cleanupId,
|
|
551
|
+
settled: false,
|
|
552
|
+
...(error.cleanup ? { cleanup: error.cleanup } : {}),
|
|
553
|
+
error: error.message,
|
|
554
|
+
}),
|
|
555
|
+
);
|
|
556
|
+
} else {
|
|
557
|
+
console.error(
|
|
558
|
+
chalk.red(
|
|
559
|
+
`Artifact cleanup ${error.cleanupId || cleanupId} is not settled: ${error.message}`,
|
|
560
|
+
),
|
|
561
|
+
);
|
|
562
|
+
}
|
|
563
|
+
return 1;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
export function runArtifactsCleanupLog(options = {}, deps = {}) {
|
|
568
|
+
const store = deps.store || new ArtifactStore();
|
|
569
|
+
try {
|
|
570
|
+
const ledger = (
|
|
571
|
+
deps.readArtifactCleanupLedger || readArtifactCleanupLedger
|
|
572
|
+
)(store, deps.cleanupOptions || {});
|
|
573
|
+
const events = ledger.events.filter(
|
|
574
|
+
(event) =>
|
|
575
|
+
(!options.cleanup || event.cleanupId === String(options.cleanup)) &&
|
|
576
|
+
(!options.artifact ||
|
|
577
|
+
event.items.some(
|
|
578
|
+
(item) => item.artifactId === String(options.artifact),
|
|
579
|
+
)),
|
|
580
|
+
);
|
|
581
|
+
const projection = {
|
|
582
|
+
...ledger,
|
|
583
|
+
filtered: Boolean(options.cleanup || options.artifact),
|
|
584
|
+
matchedEventCount: events.length,
|
|
585
|
+
events,
|
|
586
|
+
};
|
|
587
|
+
if (options.json) {
|
|
588
|
+
console.log(JSON.stringify(projection, null, 2));
|
|
589
|
+
} else if (events.length === 0) {
|
|
590
|
+
console.log(chalk.dim("No artifact cleanup settlement events."));
|
|
591
|
+
} else {
|
|
592
|
+
for (const event of events) {
|
|
593
|
+
console.log(
|
|
594
|
+
`${event.sequence}\t${event.phase}\t${event.itemCount}\t${event.cleanupId}\t${event.eventDigest}`,
|
|
595
|
+
);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
return 0;
|
|
599
|
+
} catch (error) {
|
|
600
|
+
if (options.json) {
|
|
601
|
+
console.error(
|
|
602
|
+
JSON.stringify({
|
|
603
|
+
schema: "cc-artifact-cleanup-ledger-error/v1",
|
|
604
|
+
verified: false,
|
|
605
|
+
error: error.message,
|
|
606
|
+
}),
|
|
607
|
+
);
|
|
608
|
+
} else {
|
|
609
|
+
console.error(chalk.red(`Artifact cleanup log failed: ${error.message}`));
|
|
610
|
+
}
|
|
611
|
+
return 1;
|
|
276
612
|
}
|
|
277
|
-
console.log(
|
|
278
|
-
removed > 0
|
|
279
|
-
? chalk.green(`Removed ${removed} expired artifact(s).`)
|
|
280
|
-
: chalk.dim("Nothing expired."),
|
|
281
|
-
);
|
|
282
|
-
return 0;
|
|
283
613
|
}
|
|
284
614
|
|
|
285
615
|
function readJsonFile(inputPath, deps = {}) {
|