chainlesschain 0.165.4 → 0.165.5
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/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-C__nnraW.js → AIOps-CEeYTeDB.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CsKWHEZ-.js → ActionButton-BeRUQ3V2.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BhIjfjWO.js → Analytics-DrV718XF.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BjuXFzWZ.js → AppLayout-Cd2Frt7Q.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-k6whDkZJ.js → Artifacts-CUJMlORU.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-C4FBMYRh.js → Audit-CXJcfT6p.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-C_vRrSXk.js → BackgroundAgents-DOv6Z7H9.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CngFZeVp.js → Backup-BwdDyBI0.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-B_H9EBRm.js → BaseInput-BmLn4kYH.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DLEC5kt7.js → Chat-COg8pAW2.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-4gGkdGgA.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-m3ClR4xh.js → Checkbox-BCP4uoU8.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CmLSFrgp.js → Codegen-pRt6Y9JI.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DFGQteHN.js → Col-DLaprKhS.js} +1 -1
- package/src/assets/web-panel/assets/{Community-EUUVORHE.js → Community-DyATsz5f.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-2PSg0Yr7.js → Compact-BXAaupZK.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CcKur7gB.js → Compliance-DpcJBELr.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DK_Fezfa.js → Cowork-DG4EFWyd.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-Dbw89xl7.js → Cron-F6Oy5n2P.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CH66h_Ec.js → Crosschain-BOdgtalX.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D1igRb17.js → DID-DT1dSkjH.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DVAsrobk.js → Dashboard-NBUIqWzC.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Dl7W8AQs.js → Dropdown-CSpHeMYB.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-D5tpaEQC.js → EmailListRenderer-CEG0xISr.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-O_VQf8gq.js → FamilyGuardDashboard-BTZ0BZna.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BTVcgS9n.js → Federation-BuuCTn2V.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BRnkJAIz.js → FormItemContext-KAVceevk.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-8OWSCkDj.js → GenericCardRenderer-DnHpcQvW.js} +1 -1
- package/src/assets/web-panel/assets/{Git-WXLYTQj2.js → Git-C_B_0HwB.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BezaUhtc.js → Governance-DPSZuzuu.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CuRay3Gu.js → Inference-BV-06V7q.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DfWLDW1m.js → KnowledgeGraph-wpDuupn6.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C55y2pPY.js → Logs-Bseca1_I.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-B4RLp2zs.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Dk08Uycg.js → Marketplace-d3kM4DDL.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-C11fSB5V.js → McpTools-DQ_xZ23i.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-mr0eZc97.js → Memory-CRIeYO4L.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-C0iCSRbb.js → MobileBridge-BsllIa9l.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CY-xMG8Z.js → MobileProjects-BUuQy30X.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-Bplqc_Wc.js → Mtc-BOFDIzrC.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-BlzwsoSM.js → MtcAudit-BQg-vyvG.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-BBLmTty6.js → Multisig-Bo1jrPdN.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DtT1uf1W.js → NLProgramming-Bmod8alw.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DcqQAxTK.js → Notes-CGGFL8w-.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-cb0kWoZe.js → NotificationSettings-BsZvCJxC.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-kw9HZQNN.js → OrderTableRenderer-C1-Quo_h.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DlTlbkUN.js → Organization-BjOeDYOi.js} +2 -2
- package/src/assets/web-panel/assets/{Overflow-pp1qs-oY.js → Overflow-DwVV3l5A.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BESLnyYz.js → P2P-Cu3DQT9W.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-B-J1mGuf.js → PdhVaultBrowser-Cg0gR7dH.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-B36PeT1_.js → Permissions-CsAXxRN5.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CTK2ad-3.js → PersonalDataHub-C-nNmnYp.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-zJNGXsac.js → Pipeline-BOnW7nNc.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-b9fz0Qf0.js → Privacy-ClLSyGKt.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DjZbZgiB.js → ProjectInit-DuLvjjq7.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-C-hHJXlD.js → ProjectSettings-DQYYbDD9.js} +2 -2
- package/src/assets/web-panel/assets/Projects-Drw8MBGK.js +1 -0
- package/src/assets/web-panel/assets/Providers-ckqHQe6K.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-A0yoQ3-3.js → QrScannerModal-DW5BXk-G.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DrFgFJNC.js → QuickAsk-DDLnhNTp.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-KC8hF1g4.js → Recommend-PJQ2C91U.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DGTPIk6u.js → RemoteSession-s6wmda34.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-QmbwM7Yk.js → Reputation-DC2sb-I3.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BxjJylia.js → Row-hPGk1eGj.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-B7Wda1J6.js → RssFeed-RIvfZql0.js} +3 -3
- package/src/assets/web-panel/assets/{Search-_plQ_YSA.js → Search-DFg1G1eR.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CD2YJZfx.js → Security-D6H5p8Dp.js} +4 -4
- package/src/assets/web-panel/assets/{Services-qQE7NmwE.js → Services-nxYiFV_w.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DgQqkFf7.js → Skeleton-BmgFNAdB.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-C4C0oFFt.js → Skills-CsaaD2av.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Px2N2B5c.js → Sla-yM5y9yvK.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DN6C3lQd.js → SpeechSettings-DPy1XMYh.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-jm5aH_m7.js → SyncSettings-CFVhEyyr.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DlkJcv67.js → Tasks-DdO02Inn.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DyrTHUBs.js → Templates-Eo2d8Llu.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-mC434PtL.js → Tenant-ChESOXgy.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-o0_s3NgK.js → Terminal-BJ7oDxTI.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DAGlAXOw.js → TimelineRenderer-hWX0fUvz.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BnulS_bs.js → Tokens-DVBZQnd-.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-suQbVXYM.js → Trigger-D89cQfVq.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DbIJAPo5.js → Trust-BIVSb4-V.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CQNpbIHi.js → UkeySign-B58gWopl.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-D8aWCERk.js → VideoEditing-DhHI7bmG.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CuLpYfZc.js → Wallet-C4FheWS_.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-CsfG8ZMc.js → WebAuthn-DnPRq-Bx.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-BYsEAZbd.js → WorkflowEditor-BerRPjpJ.js} +1 -1
- package/src/assets/web-panel/assets/{chat-FT4Um3-I.js → chat-BzZ52iKr.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CKbS_Wlt.js → colors-BI_E4BAn.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CFJtzuJM.js → compact-item-d50mr3yk.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B9kSRW6K.js → createContext-C6FsQ1IH.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CagEcIex.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DR-x0Xpi.js → hasIn-DLZEMgLP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdkIhfi-.js → index-9H_M2jju.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfFCQHL3.js → index-A5CDWP7y.js} +1 -1
- package/src/assets/web-panel/assets/{index-7jHr_A_k.js → index-AHr7ryWf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVPU43b1.js → index-B81mo1Et.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3ZX81mK.js → index-BAE3hwev.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMGmg497.js → index-BB9SqVSt.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7osrXqy.js → index-BRGx3w6T.js} +3 -3
- package/src/assets/web-panel/assets/{index-Bt4fS2eL.js → index-BTpIOTfR.js} +1 -1
- package/src/assets/web-panel/assets/{index-WE08gMJP.js → index-BZjjdQ62.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwR7yc2h.js → index-BcSUl9fA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtkFqPVA.js → index-BeM4hfht.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGbPnC5x.js → index-Bmr_vxXD.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjEP7WkH.js → index-BoNZlzhQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-r2VI1Ikk.js → index-C3k8kevG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeSgw-WV.js → index-CLoTQr0W.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_enk9I_.js → index-CO8DAF7U.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJmIQ9XR.js → index-CRN5TRTQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dap9c3eD.js → index-CUaEHfQ0.js} +1 -1
- package/src/assets/web-panel/assets/{index-KqDaCApw.js → index-CVzuawCX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BK3TiKVq.js → index-CdKt9fOd.js} +1 -1
- package/src/assets/web-panel/assets/{index-OSzjTzGM.js → index-CgkoH3_g.js} +1 -1
- package/src/assets/web-panel/assets/{index-DW4BWjTk.js → index-CjuKZBqJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2JvmYRc.js → index-Co7s9LsB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiNUEpSQ.js → index-D-aBumtY.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW-t9n-q.js → index-DE0V6cp-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bzz0C1BZ.js → index-DY4j5zkF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cr2FLUsD.js → index-Dec0Kf_Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-DShSkww-.js → index-DoFtCVZ7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTxNy0ZU.js → index-DqkbHHg8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CvrCCqJt.js → index-DsscwxPE.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWdqx7zI.js → index-GXE0D8Nx.js} +1 -1
- package/src/assets/web-panel/assets/{index-tqSEHPRT.js → index-IPkwSAW_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcfxhKXR.js → index-KNGgO4Wm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGaXUsIs.js → index-Pvf30m8Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4LfPvWA.js → index-Q5Tn735s.js} +1 -1
- package/src/assets/web-panel/assets/{index-BI5hP_qy.js → index-TWG-_D1M.js} +1 -1
- package/src/assets/web-panel/assets/{index-QBSeNVO3.js → index-Y2-q7QLm.js} +1 -1
- package/src/assets/web-panel/assets/index-pzT9PpOU.js +1 -0
- package/src/assets/web-panel/assets/index-z1kFadaX.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-Dd7n7VgI.js → initDefaultProps-D-4Hzgej.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BwxouRw1.js → motion-D4Wl4xU7.js} +1 -1
- package/src/assets/web-panel/assets/{move-DObN0PG9.js → move-Cd5eQvL0.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-B3nOUQc7.js → mtc-parser-B4ilslCW.js} +1 -1
- package/src/assets/web-panel/assets/{omit-o9WU2Nbl.js → omit-Ckarx-tf.js} +1 -1
- package/src/assets/web-panel/assets/parsers-YNLm7sQ0.js +4 -0
- package/src/assets/web-panel/assets/{pickAttrs-CL_vvfQ_.js → pickAttrs-QJ0bpCmc.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CYrM2tyK.js → placementArrow-CKHm-tq8.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-k_06cQ96.js → responsiveObserve-CV6a_w_Y.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CPKG0pxS.js → slide-mHpeQFgk.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BDDEeLTw.js → statusUtils-DIaQNQWA.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cmb7RTh7.js → styleChecker-PJpzavV8.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-e2IedC4N.js → useFlexGapSupport-BH7zTw8S.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CE_gxVnm.js → useFs-BDNG3JDd.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BkMIIKMz.js → usePersonalDataHub-CY2VWdUg.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DW886XV1.js → vnode-D0kw9jhz.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Dwo_adaf.js → zoom-B5g7TN7r.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/artifacts.js +235 -0
- package/src/commands/cowork.js +86 -57
- package/src/commands/session-location.js +20 -1
- package/src/commands/session.js +64 -69
- package/src/data/changelog.json +16 -3
- package/src/gateways/ws/message-dispatcher.js +57 -0
- package/src/lib/artifact-access-ledger.js +1 -0
- package/src/lib/artifact-deletion-ledger.js +1 -0
- package/src/lib/artifact-recovery.js +970 -0
- package/src/lib/artifact-workbench-projection.js +171 -0
- package/src/lib/dynamic-workflow-runtime.js +408 -1
- package/src/lib/execution-location-target.js +4 -2
- package/src/lib/mcp-stdio-executable-identity.js +16 -0
- package/src/lib/mcp-stdio-native-code-policy.js +74 -0
- package/src/lib/mcp-stdio-package-materialization.js +12 -3
- package/src/lib/process-execution-broker/index.js +112 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +57 -3
- package/src/lib/process-execution-broker/workspace-transaction.js +26 -0
- package/src/lib/session-projection.js +126 -10
- package/src/runtime/agent-core.js +12 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-xijcWkJe.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-hDpWdiBc.js +0 -1
- package/src/assets/web-panel/assets/Projects-BC9KSDM6.js +0 -1
- package/src/assets/web-panel/assets/Providers-Dz-CAYYU.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DJZ0gAMu.js +0 -1
- package/src/assets/web-panel/assets/index-Bizb4hkw.js +0 -1
- package/src/assets/web-panel/assets/index-OHSl-xCh.js +0 -1
- package/src/assets/web-panel/assets/parsers-UEvh_ShA.js +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as v}from"./index-
|
|
1
|
+
import{u as v}from"./index-BRGx3w6T.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as i,h as a,w as l}from"./index-
|
|
1
|
+
import{N as i,h as a,w as l}from"./index-BRGx3w6T.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as o}from"./index-
|
|
1
|
+
import{K as o}from"./index-BRGx3w6T.js";import{i as f}from"./motion-D4Wl4xU7.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
|
|
2
2
|
${t}-enter,
|
|
3
3
|
${t}-appear
|
|
4
4
|
`]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// Injected by web-ui-server.js at serve time
|
|
9
9
|
window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
|
|
10
10
|
</script>
|
|
11
|
-
<script type="module" crossorigin src="./assets/index-
|
|
11
|
+
<script type="module" crossorigin src="./assets/index-BRGx3w6T.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="./assets/vendor-Bn1JzzAn.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="./assets/icons-DG5UD-6K.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"agent-network": "Usage: chainlesschain agent-network|anet [options] [command]\n\nDecentralized Agent Network (Phase 24) — DID / registry / credentials / task\nrouting\n\nOptions:\n -h, --help display help for command\n\nCommands:\n config [options] Show network constants & reputation weights\n dimensions [options] List reputation dimensions\n task-statuses [options] List task lifecycle statuses\n did-create [options] Create an Agent DID (Ed25519 + DID document)\n did-resolve [options] <did> Resolve DID → DID document\n dids [options] List Agent DIDs\n did-deactivate [options] <did> Deactivate a DID (also forces registry offline)\n sign [options] <did> <data> Sign data with agent's Ed25519 key\n verify [options] <did> <data> <signature> Verify a signature from an agent\n register [options] <did> <orgId> Register an Agent in the federated registry\n unregister [options] <did> Remove an Agent from the registry\n heartbeat [options] <did> Bump last_heartbeat (forces online)\n discover [options] Discover agents (capability / org / status)\n sweep [options] Mark stale online agents offline\n peer-add [options] <peerId> Add/update a Kademlia peer (k-bucket auto-computed)\n peer-remove [options] <peerId> Remove a peer\n peers [options] List peers (optionally by k-bucket)\n auth-start [options] <did> Issue an auth challenge for a DID\n auth-complete [options] <sessionId> <signature> Complete auth with signature over challenge\n auth-validate [options] <token> Validate a session token (returns agentDid or exits 1)\n auth-sessions [options] List auth sessions\n credential-issue [options] <issuerDid> <subjectDid> Issue a VC with HMAC/Ed25519 proof\n credential-verify [options] <id> Verify a VC (signature + expiry + revocation)\n credential-revoke [options] <id> Revoke a credential\n credential-show [options] <id> Show a credential\n credentials [options] List credentials (filter by subject/issuer/status/type)\n task-route [options] <sourceOrg> <taskType> Route task → pick best-rep agent matching capability\n task-show [options] <taskId> Show a task\n task-status [options] <taskId> <status> Update task status (terminal states set completedAt)\n task-cancel [options] <taskId> Cancel a task (sets CANCELLED + reason)\n tasks [options] List tasks\n rep-update [options] <did> <dimension> <score> Record a reputation observation\n rep-show [options] <did> Show reputation summary (weighted total + per-dim avg)\n rep-history [options] <did> Show reputation history (newest first)\n rep-top [options] Top agents by dimension (or total)\n stats [options] Network-level statistics\n agent-maturities-v2 List V2 agent maturity states\n task-lifecycles-v2 List V2 task lifecycle states\n stats-v2 V2 agent-network stats\n get-max-active-agents-v2 Get max active agents per network (V2)\n set-max-active-agents-v2 <n> Set max active agents per network (V2)\n get-max-pending-tasks-v2 Get max pending tasks per agent (V2)\n set-max-pending-tasks-v2 <n> Set max pending tasks per agent (V2)\n get-agent-idle-ms-v2 Get agent idle threshold (V2)\n set-agent-idle-ms-v2 <ms> Set agent idle threshold (V2)\n get-task-stuck-ms-v2 Get task stuck threshold (V2)\n set-task-stuck-ms-v2 <ms> Set task stuck threshold (V2)\n active-agent-count-v2 <networkId> Active agent count for network (V2)\n pending-task-count-v2 <agentId> Pending task count for agent (V2)\n register-agent-v2 [options] <id> Register a V2 agent\n get-agent-v2 <id> Get a V2 agent\n list-agents-v2 [options] List V2 agents\n set-agent-status-v2 <id> <next> Set V2 agent status\n activate-agent-v2 <id> Activate a V2 agent\n suspend-agent-v2 <id> Suspend a V2 agent\n revoke-agent-v2 <id> Revoke a V2 agent\n touch-agent-v2 <id> Touch a V2 agent\n create-task-v2 [options] <id> Create a V2 task\n get-task-v2 <id> Get a V2 task\n list-tasks-v2 [options] List V2 tasks\n set-task-status-v2 <id> <next> Set V2 task status\n start-task-v2 <id> Start a V2 task\n complete-task-v2 <id> Complete a V2 task\n fail-task-v2 <id> Fail a V2 task\n cancel-task-v2 <id> Cancel a V2 task\n auto-suspend-idle-agents-v2 Auto-suspend idle V2 agents\n auto-fail-stuck-tasks-v2 Auto-fail stuck V2 tasks\n help [command] display help for command\n",
|
|
10
10
|
"agents": "Usage: chainlesschain agents [options] [command]\n\nUser-defined subagents (.claude/agents/*.md)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n background|bg [options] List background agent sessions\n logs [options] <id> Print recent output from a background agent\n view [options] <id> Show a detailed background agent view\n stop [options] <id> Stop a running background agent\n rename [options] <id> <title...> Rename a background agent session\n list|ls [options] List discovered subagents (project +\n personal)\n show [options] <name> Show an agent's metadata + system prompt\n run [options] <name> [task...] Run a task headlessly as the named subagent\n new [options] <name> Scaffold a new agent file (project-native\n .chainlesschain/agents/)\n help [command] display help for command\n",
|
|
11
11
|
"android": "Usage: chainlesschain android [options] [command]\n\nAndroid-native bridge: ContentResolver / SAF / Accessibility / Shizuku / root\n(Plan A A7)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n caps [options] Probe what bridge capabilities are available on this\n device\n contacts ContentResolver: contacts\n sms ContentResolver: SMS\n calls ContentResolver: call log\n app PackageManager: app inventory + Intent\n fs SAF / sandbox filesystem\n a11y Accessibility Service\n shizuku Shizuku ADB-like privileges\n root Magisk root su\n perms [options] <name> Check (and request) a runtime permission\n help [command] display help for command\n",
|
|
12
|
-
"artifacts": "Usage: chainlesschain artifacts|artifact [options] [command]\n\nBrowse agent-published deliverables (reports/patches/screenshots; see the\npublish_artifact tool)\n\nOptions:\n -h, --help
|
|
12
|
+
"artifacts": "Usage: chainlesschain artifacts|artifact [options] [command]\n\nBrowse agent-published deliverables (reports/patches/screenshots; see the\npublish_artifact tool)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n list [options] List published artifacts\n show [options] <id> Show one artifact's public metadata and\n integrity\n open <id> Authorize local content access and\n print the stored path\n access [options] <id> Authorize one official client action\n and record content-free access lineage\n access-log [options] Verify and display the content-free\n artifact access ledger\n remove|rm [options] <id> Settle and audit removal of one managed\n artifact copy\n deletion-log [options] Verify and display the content-free\n deletion settlement ledger\n clean [options] Settle and audit one frozen batch of\n expired artifacts\n cleanup-log [options] Verify and display the content-free\n cleanup settlement ledger\n recovery-plan [options] Inventory pending settlements and\n orphaned managed copies without\n mutating them\n workbench [options] Project artifacts, returned-result\n lineage, history, and recovery risk for\n product clients\n recovery-adjudicate [options] <item> Apply one explicit, plan-bound\n administrator recovery decision\n orphan-gc-log [options] Verify and display the content-free\n orphan GC ledger\n select-gates [options] <input> Select impacted required gates from an\n analyzer JSON file (unknowns fall back\n to the full suite)\n delivery-evidence [options] <input> Validate and archive a versioned\n delivery-evidence JSON record (does not\n create or merge a PR)\n delivery-init [options] <input> Create a resumable delivery-flow\n snapshot from JSON (no external\n actions)\n delivery-step [options] <state> Request or settle one explicit delivery\n action without invoking an external\n adapter\n delivery-run [options] <state> Persist and execute one delivery action\n through the production GitHub provider\n delivery-project [options] <state> Validate and project a delivery\n snapshot for IDE consumption\n help [command] display help for command\n",
|
|
13
13
|
"ask": "Usage: chainlesschain ask [options] <question>\n\nAsk a question to the AI (single-shot)\n\nArguments:\n question The question to ask\n\nOptions:\n --model <model> Model name\n --provider <provider> LLM provider (ollama, openai, volcengine, deepseek,\n ...)\n --base-url <url> API base URL\n --api-key <key> API key\n --prefer-android-local Route ollama provider at the Android in-APK\n LocalLlmServer (127.0.0.1:18484). One-shot equivalent\n of `cc config set llm.preferAndroidLocal true`.\n --no-file-refs Do not expand @path file references in the question\n --json Output as JSON\n -h, --help display help for command\n",
|
|
14
14
|
"attach": "Usage: chainlesschain attach [options] <id>\n\nAttach to a background agent — interactive when its session transport is\navailable, log stream otherwise\n\nOptions:\n -n, --lines <n> Initial lines to print (default: \"100\")\n --no-follow Print the initial log tail and exit\n --no-input Log stream only; never send prompts\n -h, --help display help for command\n",
|
|
15
15
|
"audit": "Usage: chainlesschain audit [options] [command]\n\nAudit log — security event tracking and compliance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n log [options] Show recent audit events\n search [options] <query> Search audit logs\n stats [options] Show audit statistics\n export [options] Export audit logs to file\n purge [options] Delete old audit logs\n types List available event types and risk levels\n log-statuses-v2 List V2 log lifecycle states\n integrity-statuses-v2 List V2 integrity states\n alert-statuses-v2 List V2 alert lifecycle states\n event-types-v2 List V2 event types\n risk-levels-v2 List V2 risk levels\n default-max-alerts-per-actor Show default max alerts per actor\n max-alerts-per-actor Show current max alerts per actor\n set-max-alerts-per-actor <n> Update max alerts per actor\n default-archive-retention-ms Show default archive retention\n archive-retention-ms Show current archive retention\n set-archive-retention-ms <ms> Update archive retention (ms)\n default-purge-retention-ms Show default purge retention\n purge-retention-ms Show current purge retention\n set-purge-retention-ms <ms> Update purge retention (ms)\n open-alert-count [options] Count OPEN alerts (optionally scoped to actor)\n log-event-v2 [options] <log-id> V2: register a hash-chained log entry\n log-status-v2 <log-id> V2: show log status + integrity\n set-log-status-v2 [options] <log-id> <status> V2: transition log status (active|archived|purged)\n verify-chain-v2 V2: re-hash the chain and mark each entry verified/corrupted\n auto-archive-logs V2: bulk-flip stale ACTIVE logs → ARCHIVED\n auto-purge-logs V2: bulk-flip stale ARCHIVED logs → PURGED\n alert-status-v2 <alert-id> V2: show alert status\n set-alert-status-v2 [options] <alert-id> <status> V2: transition alert status (open|acknowledged|resolved|dismissed)\n acknowledge-alert [options] <alert-id> V2: shortcut → acknowledged\n resolve-alert [options] <alert-id> V2: shortcut → resolved\n dismiss-alert [options] <alert-id> V2: shortcut → dismissed\n stats-v2 V2: all-enum-key stats snapshot\n mtc Audit MTC double-track (Phase 2 scaffolding, default disabled)\n help [command] display help for command\n",
|
|
@@ -33,6 +33,13 @@ import {
|
|
|
33
33
|
readArtifactCleanupLedger,
|
|
34
34
|
settleArtifactCleanup,
|
|
35
35
|
} from "../lib/artifact-cleanup-ledger.js";
|
|
36
|
+
import {
|
|
37
|
+
ARTIFACT_RECOVERY_DECISIONS,
|
|
38
|
+
adjudicateArtifactRecovery,
|
|
39
|
+
buildArtifactRecoveryPlan,
|
|
40
|
+
readArtifactOrphanGcLedger,
|
|
41
|
+
} from "../lib/artifact-recovery.js";
|
|
42
|
+
import { buildArtifactWorkbenchProjection } from "../lib/artifact-workbench-projection.js";
|
|
36
43
|
import {
|
|
37
44
|
assessDeliveryEvidence,
|
|
38
45
|
createDeliveryEvidenceRecord,
|
|
@@ -167,6 +174,56 @@ export function registerArtifactsCommand(program) {
|
|
|
167
174
|
process.exitCode = runArtifactsCleanupLog(options);
|
|
168
175
|
});
|
|
169
176
|
|
|
177
|
+
cmd
|
|
178
|
+
.command("recovery-plan")
|
|
179
|
+
.description(
|
|
180
|
+
"Inventory pending settlements and orphaned managed copies without mutating them",
|
|
181
|
+
)
|
|
182
|
+
.option(
|
|
183
|
+
"--timeout-ms <ms>",
|
|
184
|
+
"Age after which a pending settlement is reported as timed out",
|
|
185
|
+
)
|
|
186
|
+
.option("--json", "Machine-readable content-free recovery plan")
|
|
187
|
+
.action((options) => {
|
|
188
|
+
process.exitCode = runArtifactsRecoveryPlan(options);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
cmd
|
|
192
|
+
.command("workbench")
|
|
193
|
+
.description(
|
|
194
|
+
"Project artifacts, returned-result lineage, history, and recovery risk for product clients",
|
|
195
|
+
)
|
|
196
|
+
.option("--json", "Machine-readable canonical workbench projection")
|
|
197
|
+
.action((options) => {
|
|
198
|
+
process.exitCode = runArtifactsWorkbench(options);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
cmd
|
|
202
|
+
.command("recovery-adjudicate <item>")
|
|
203
|
+
.description(
|
|
204
|
+
"Apply one explicit, plan-bound administrator recovery decision",
|
|
205
|
+
)
|
|
206
|
+
.requiredOption("--plan-digest <digest>", "Exact recovery plan digest")
|
|
207
|
+
.requiredOption(
|
|
208
|
+
"--decision <decision>",
|
|
209
|
+
`Decision (${ARTIFACT_RECOVERY_DECISIONS.join("|")})`,
|
|
210
|
+
)
|
|
211
|
+
.option("--adjudication-id <id>", "Stable id for response-loss recovery")
|
|
212
|
+
.option("--approve", "Confirm the reviewed recovery mutation")
|
|
213
|
+
.option("--json", "Machine-readable adjudication receipt")
|
|
214
|
+
.action((item, options) => {
|
|
215
|
+
process.exitCode = runArtifactsRecoveryAdjudicate(item, options);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
cmd
|
|
219
|
+
.command("orphan-gc-log")
|
|
220
|
+
.description("Verify and display the content-free orphan GC ledger")
|
|
221
|
+
.option("--adjudication <id>", "Only events for one adjudication id")
|
|
222
|
+
.option("--json", "Machine-readable verified ledger projection")
|
|
223
|
+
.action((options) => {
|
|
224
|
+
process.exitCode = runArtifactsOrphanGcLog(options);
|
|
225
|
+
});
|
|
226
|
+
|
|
170
227
|
cmd
|
|
171
228
|
.command("select-gates <input>")
|
|
172
229
|
.description(
|
|
@@ -612,6 +669,184 @@ export function runArtifactsCleanupLog(options = {}, deps = {}) {
|
|
|
612
669
|
}
|
|
613
670
|
}
|
|
614
671
|
|
|
672
|
+
export function runArtifactsRecoveryPlan(options = {}, deps = {}) {
|
|
673
|
+
const store = deps.store || new ArtifactStore();
|
|
674
|
+
try {
|
|
675
|
+
const parsedTimeout =
|
|
676
|
+
options.timeoutMs == null ? undefined : Number(options.timeoutMs);
|
|
677
|
+
const plan = (deps.buildArtifactRecoveryPlan || buildArtifactRecoveryPlan)(
|
|
678
|
+
store,
|
|
679
|
+
{
|
|
680
|
+
...(parsedTimeout == null ? {} : { timeoutMs: parsedTimeout }),
|
|
681
|
+
...(deps.recoveryOptions || {}),
|
|
682
|
+
},
|
|
683
|
+
);
|
|
684
|
+
if (options.json) {
|
|
685
|
+
console.log(JSON.stringify(plan, null, 2));
|
|
686
|
+
} else if (plan.items.length === 0) {
|
|
687
|
+
console.log(
|
|
688
|
+
chalk.dim(`Artifact recovery is clear (${plan.planDigest}).`),
|
|
689
|
+
);
|
|
690
|
+
} else {
|
|
691
|
+
console.log(
|
|
692
|
+
chalk.yellow(
|
|
693
|
+
`Artifact recovery requires review: ${plan.summary.itemCount} item(s), ${plan.summary.criticalCount} critical (${plan.planDigest}).`,
|
|
694
|
+
),
|
|
695
|
+
);
|
|
696
|
+
for (const item of plan.items) {
|
|
697
|
+
console.log(
|
|
698
|
+
`${item.severity}\t${item.kind}\t${item.recommendedDecision}\t${item.itemId}`,
|
|
699
|
+
);
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
return plan.summary.itemCount > 0 ? 2 : 0;
|
|
703
|
+
} catch (error) {
|
|
704
|
+
if (options.json) {
|
|
705
|
+
console.error(
|
|
706
|
+
JSON.stringify({
|
|
707
|
+
schema: "cc-artifact-recovery-plan-error/v1",
|
|
708
|
+
verified: false,
|
|
709
|
+
error: error.message,
|
|
710
|
+
}),
|
|
711
|
+
);
|
|
712
|
+
} else {
|
|
713
|
+
console.error(
|
|
714
|
+
chalk.red(`Artifact recovery inventory failed: ${error.message}`),
|
|
715
|
+
);
|
|
716
|
+
}
|
|
717
|
+
return 1;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
export function runArtifactsWorkbench(options = {}, deps = {}) {
|
|
722
|
+
const store = deps.store || new ArtifactStore();
|
|
723
|
+
try {
|
|
724
|
+
const projection = (
|
|
725
|
+
deps.buildArtifactWorkbenchProjection || buildArtifactWorkbenchProjection
|
|
726
|
+
)(store, deps.workbenchOptions || {});
|
|
727
|
+
if (options.json) {
|
|
728
|
+
console.log(JSON.stringify(projection, null, 2));
|
|
729
|
+
} else {
|
|
730
|
+
console.log(
|
|
731
|
+
`${projection.artifacts.length} artifact(s); ${projection.recovery.summary.itemCount} recovery item(s); ${projection.history.totalEventCount} history event(s).`,
|
|
732
|
+
);
|
|
733
|
+
console.log(chalk.dim(projection.recovery.planDigest));
|
|
734
|
+
}
|
|
735
|
+
return 0;
|
|
736
|
+
} catch (error) {
|
|
737
|
+
if (options.json) {
|
|
738
|
+
console.error(
|
|
739
|
+
JSON.stringify({
|
|
740
|
+
schema: "cc-artifact-workbench-error/v1",
|
|
741
|
+
verified: false,
|
|
742
|
+
error: error.message,
|
|
743
|
+
}),
|
|
744
|
+
);
|
|
745
|
+
} else {
|
|
746
|
+
console.error(
|
|
747
|
+
chalk.red(`Artifact workbench projection failed: ${error.message}`),
|
|
748
|
+
);
|
|
749
|
+
}
|
|
750
|
+
return 1;
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
export function runArtifactsRecoveryAdjudicate(item, options = {}, deps = {}) {
|
|
755
|
+
const store = deps.store || new ArtifactStore();
|
|
756
|
+
try {
|
|
757
|
+
if (options.decision !== "defer" && options.approve !== true) {
|
|
758
|
+
throw new Error("recovery mutation requires explicit --approve");
|
|
759
|
+
}
|
|
760
|
+
const result = (
|
|
761
|
+
deps.adjudicateArtifactRecovery || adjudicateArtifactRecovery
|
|
762
|
+
)(
|
|
763
|
+
store,
|
|
764
|
+
{
|
|
765
|
+
itemId: item,
|
|
766
|
+
planDigest: options.planDigest,
|
|
767
|
+
decision: options.decision,
|
|
768
|
+
adjudicationId: options.adjudicationId,
|
|
769
|
+
},
|
|
770
|
+
deps.recoveryOptions || {},
|
|
771
|
+
);
|
|
772
|
+
if (options.json) {
|
|
773
|
+
console.log(JSON.stringify(result, null, 2));
|
|
774
|
+
} else {
|
|
775
|
+
console.log(
|
|
776
|
+
result.settled
|
|
777
|
+
? chalk.green(
|
|
778
|
+
`Artifact recovery adjudication ${result.adjudicationId || options.adjudicationId || ""} settled.`,
|
|
779
|
+
)
|
|
780
|
+
: chalk.dim("Artifact recovery item was deferred without mutation."),
|
|
781
|
+
);
|
|
782
|
+
}
|
|
783
|
+
return result.settled || options.decision === "defer" ? 0 : 1;
|
|
784
|
+
} catch (error) {
|
|
785
|
+
if (options.json) {
|
|
786
|
+
console.error(
|
|
787
|
+
JSON.stringify({
|
|
788
|
+
schema: "cc-artifact-recovery-adjudication-error/v1",
|
|
789
|
+
itemId: String(item),
|
|
790
|
+
settled: false,
|
|
791
|
+
error: error.message,
|
|
792
|
+
}),
|
|
793
|
+
);
|
|
794
|
+
} else {
|
|
795
|
+
console.error(
|
|
796
|
+
chalk.red(`Artifact recovery adjudication failed: ${error.message}`),
|
|
797
|
+
);
|
|
798
|
+
}
|
|
799
|
+
return 1;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
export function runArtifactsOrphanGcLog(options = {}, deps = {}) {
|
|
804
|
+
const store = deps.store || new ArtifactStore();
|
|
805
|
+
try {
|
|
806
|
+
const ledger = (
|
|
807
|
+
deps.readArtifactOrphanGcLedger || readArtifactOrphanGcLedger
|
|
808
|
+
)(store, deps.recoveryOptions || {});
|
|
809
|
+
const events = ledger.events.filter(
|
|
810
|
+
(event) =>
|
|
811
|
+
!options.adjudication ||
|
|
812
|
+
event.adjudicationId === String(options.adjudication),
|
|
813
|
+
);
|
|
814
|
+
const projection = {
|
|
815
|
+
...ledger,
|
|
816
|
+
filtered: Boolean(options.adjudication),
|
|
817
|
+
matchedEventCount: events.length,
|
|
818
|
+
events,
|
|
819
|
+
};
|
|
820
|
+
if (options.json) {
|
|
821
|
+
console.log(JSON.stringify(projection, null, 2));
|
|
822
|
+
} else if (events.length === 0) {
|
|
823
|
+
console.log(chalk.dim("No artifact orphan GC settlement events."));
|
|
824
|
+
} else {
|
|
825
|
+
for (const event of events) {
|
|
826
|
+
console.log(
|
|
827
|
+
`${event.sequence}\t${event.phase}\t${event.outcome}\t${event.adjudicationId}\t${event.eventDigest}`,
|
|
828
|
+
);
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
return 0;
|
|
832
|
+
} catch (error) {
|
|
833
|
+
if (options.json) {
|
|
834
|
+
console.error(
|
|
835
|
+
JSON.stringify({
|
|
836
|
+
schema: "cc-artifact-orphan-gc-ledger-error/v1",
|
|
837
|
+
verified: false,
|
|
838
|
+
error: error.message,
|
|
839
|
+
}),
|
|
840
|
+
);
|
|
841
|
+
} else {
|
|
842
|
+
console.error(
|
|
843
|
+
chalk.red(`Artifact orphan GC log failed: ${error.message}`),
|
|
844
|
+
);
|
|
845
|
+
}
|
|
846
|
+
return 1;
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
|
|
615
850
|
function readJsonFile(inputPath, deps = {}) {
|
|
616
851
|
const readFileSync = deps.readFileSync || fs.readFileSync;
|
|
617
852
|
return JSON.parse(readFileSync(inputPath, "utf-8"));
|