chainlesschain 0.162.164 → 0.162.166
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -1
- package/src/assets/web-panel/assets/{AIOps-BqRkaHGb.js → AIOps-LbDx7jL6.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DWO7OZLC.js → ActionButton-DnurtK34.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C5oaVezM.js → Analytics-DXSsV1am.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CsUESDoZ.js → AppLayout-dqRpzNuD.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-Dragqu5k.js → Artifacts-BwdmYepK.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CQsaHctY.js → Audit-oSX0kOUG.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DdG1jNSM.js → BackgroundAgents-C2KxJahT.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DN6sjK4z.js → Backup-B4TkxWkC.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-Cxm_ZTCl.js → BaseInput-CX5-KxeU.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DVXGmA56.js → Chat-O_HzD-PL.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BdaCL_iE.js → ChatBubbleRenderer-Br8saHQA.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DEc4vD_A.js → Checkbox-ChepDpC1.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CKiTcv36.js → Codegen-D9z8kc7q.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Br9UUNN0.js → Col-B-H5eoNw.js} +1 -1
- package/src/assets/web-panel/assets/{Community-NeUH_70T.js → Community-Ccyp_Kk5.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BqR-z2Df.js → Compact-BNvBznp_.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DcWB_SgZ.js → Compliance-D1FjRd8n.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BfhgcudF.js → Cowork-CV9B9u-8.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-LaU29LgD.js → Cron-BowJ4VIx.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-B2ZB9uwW.js → Crosschain-BJc6jzRF.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BuHl38A2.js → DID-BEp8NV6D.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-m627yqvZ.js → Dashboard-Dls0B3YB.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-C7bxF8F5.js → Dropdown-DQ7zXVtD.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DPLPQzLp.js → EmailListRenderer-B9q79tOl.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-cOiH6ike.js → FamilyGuardDashboard-CD8Ie-88.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-Bvkzg88z.js → Federation-5o7XU5Vf.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BTsiA7h_.js → FormItemContext-DeKbMvOs.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BGnVE5qu.js → GenericCardRenderer-CZiQvz_z.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DS_j6r25.js → Git-CTvFxVV8.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CKRG3Rsl.js → Governance-DwzFIjHt.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DW8INoNQ.js → Inference-CJBk59c-.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BhEYeFhC.js → KnowledgeGraph-DfsaXN2z.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-wqi0uxuR.js → Logs-DVRYf18S.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-BL_WsWZM.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-CMlTuPLT.js → Marketplace-BuIwyE4t.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CSx4m5JJ.js → McpTools-D3U0o78E.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-vnQCUy-_.js → Memory-QYVmyb3b.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BV2NA742.js → MobileBridge-BFgrj6eZ.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-Bp5QB-46.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-CzK_FPB1.js → Mtc-BZQu8TcH.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-Cb7G9oL3.js → MtcAudit-BnFfEkLo.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-qJxlUyzr.js → Multisig-iUnNS9Cm.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DqaBJ7Te.js → NLProgramming-DNNz1y9Y.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CwhTJkRi.js → Notes-CZezNYRU.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-YDs4Fal4.js → NotificationSettings-DBvrplIR.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-CvEALpq7.js → OrderTableRenderer-CTDtee49.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CEmQm9n8.js → Organization-CCOUJX1R.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-zby_P_LA.js → Overflow-DcZghdk0.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DsmDNFNT.js → P2P-jmddWX9q.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-FWwFlZGF.js → PdhVaultBrowser-wfjMcczl.js} +4 -4
- package/src/assets/web-panel/assets/{Permissions-DuzQ6me5.js → Permissions-DU1GJjca.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DZbeN613.js → PersonalDataHub-BzTMzDF9.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-CoNSVAUS.js → Pipeline-DPmjlpVc.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-OYJEAaMC.js → Privacy-B6HRLpfK.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CWIapV--.js → ProjectInit-Cyy86AsN.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CX8xMxZn.js → ProjectSettings-Bl_WQxJ5.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BLCN8YyY.js → Projects-Co9yKThA.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BV_sxp75.js → Providers-DLa4NlIs.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BTnRrHRp.js → QrScannerModal-BvzM7q5f.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D1KZg018.js → QuickAsk-BN8yyyUj.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-COm5cuNg.js → Recommend-QsVN4w0i.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-0saWEkYI.js → RemoteSession-tkDXw-TY.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Dr7iKLS2.js → Reputation-DAifkGsy.js} +1 -1
- package/src/assets/web-panel/assets/{Row-C1vpPBcr.js → Row-D7dZEyak.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CxlWrtNj.js → RssFeed-DB5sImTA.js} +2 -2
- package/src/assets/web-panel/assets/{Search-BT2V8dPN.js → Search-3py3TO9V.js} +1 -1
- package/src/assets/web-panel/assets/{Security-bm9V3c5k.js → Security-DhNUfT_k.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CocH1yyX.js → Services-DjJAA_5D.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DHItlMdd.js → Skeleton-u95JjK3n.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-C59sLc4w.js → Skills-DPo3L0Tz.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Crj4BMc8.js → Sla-DWhkAZV1.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DX4KFceY.js → SpeechSettings-PUegMtqV.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BD_iwQLr.js → SyncSettings-BMNYrnrU.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BmCTzYsH.js → Tasks-CYm_oTJC.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BGUaxZYl.js → Templates-Dw9Er5DN.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BS0tJx2O.js → Tenant-7P3QIBSo.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal--tHSAsld.js → Terminal-ClPrfWW7.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D9-MFxS4.js → TimelineRenderer-DbCd1bDH.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CiCB485f.js → Tokens-EQofpA0t.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-SmCFuW_l.js → Trigger-ChNLLypd.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DkK3Rqe0.js → Trust-dlVGUKs5.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CDM4LGdB.js → UkeySign-BXyBUhNF.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-IDB7DJXt.js → VideoEditing-BE8-68ge.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Bikj5cmt.js → Wallet-7ZIJOwNg.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-C9abWlAw.js → WebAuthn-DgNd2Amr.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-DrbRKVky.js → WorkflowEditor-Z-Un-9l5.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CccCSDQf.js → chat-CtVDEkUc.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CXObXLhb.js → colors-PXtJ2f1B.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B5kfYAxC.js → compact-item-oN96nuBi.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DmiPBfip.js → createContext-okCJXQXa.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BzV6dk1B.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Q6lYteAc.js → hasIn-pcHm--4o.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2FXdboq.js → index-5aO2V0V4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJJ5DhKI.js → index-BDR2mi1p.js} +1 -1
- package/src/assets/web-panel/assets/{index-bzfw951k.js → index-BEtzqJw3.js} +1 -1
- package/src/assets/web-panel/assets/index-BFrAwXHp.js +1 -0
- package/src/assets/web-panel/assets/{index-fSUMbMvv.js → index-BHJIfdCV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLOzViJ6.js → index-BUTyx-Lk.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dw4eHfsG.js → index-BUUJ2WfG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAYCTc07.js → index-BZKk4Lnm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRrbUMoG.js → index-BeAWCGEK.js} +1 -1
- package/src/assets/web-panel/assets/{index-Caghi-yL.js → index-Bht9n8Sm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsO3GUAY.js → index-BjVIZfdA.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5XOlTHN.js → index-Bl6N7ZyX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUFpT17Q.js → index-BnhHxZul.js} +1 -1
- package/src/assets/web-panel/assets/{index-DgxVJ8pg.js → index-BuME9k4Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-tFHy5Wol.js → index-C0rfJBU3.js} +1 -1
- package/src/assets/web-panel/assets/{index-CMq7UeoT.js → index-C4ravjdv.js} +1 -1
- package/src/assets/web-panel/assets/{index-CLhBDS2w.js → index-CAQktO-6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlJvIqoR.js → index-CK0H3pQW.js} +1 -1
- package/src/assets/web-panel/assets/{index-4oXBDczR.js → index-CQ1ZzJjN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsfvW6my.js → index-CQYes2mk.js} +1 -1
- package/src/assets/web-panel/assets/{index-Rh-ytwow.js → index-CWUJlCvK.js} +3 -3
- package/src/assets/web-panel/assets/{index-CwZBa20Z.js → index-CXhezK4d.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8eBw7vW.js → index-Cc_MkksW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVMTWNKl.js → index-CopGaCI_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DgTLApS9.js → index-Cs1fGk1Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJCCa0s_.js → index-D0bfypsF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoK8-kWQ.js → index-D1efSh1X.js} +1 -1
- package/src/assets/web-panel/assets/{index-33U29UNV.js → index-DBcKBb1E.js} +1 -1
- package/src/assets/web-panel/assets/{index-StAEt2pq.js → index-DC0bqrqV.js} +1 -1
- package/src/assets/web-panel/assets/index-DJQFP47u.js +1 -0
- package/src/assets/web-panel/assets/{index-BGYXvMc5.js → index-DfL10EcN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BkRDiqGc.js → index-DtsyPnF5.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdB6FuSH.js → index-Rk0X8lVz.js} +1 -1
- package/src/assets/web-panel/assets/{index-DF6Q8l2h.js → index-T3QE8LuV.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-kASucw.js → index-_SaFHNsG.js} +1 -1
- package/src/assets/web-panel/assets/{index-By-kfPED.js → index-jAY55MSx.js} +1 -1
- package/src/assets/web-panel/assets/{index-25Wlqps4.js → index-mB1UV7wA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzFTcQsc.js → index-nMqLdwao.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9wgifk4.js → index-vW0lwj0Y.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BNq7X72N.js → initDefaultProps-CG1jyiI7.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DOf9viTc.js → motion-C8BYa98D.js} +1 -1
- package/src/assets/web-panel/assets/{move-CRHTcW4x.js → move-D1hqwitW.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Cyoozgm2.js → mtc-parser-C2lol8rp.js} +1 -1
- package/src/assets/web-panel/assets/{omit-6-TjFNru.js → omit-Ct6Zghfi.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DlUmO1zi.js → pickAttrs-CSYbYfdc.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CFOL8mIR.js → placementArrow-WCk8di0z.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BtaFK5zd.js → responsiveObserve-CEC8CZ-3.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BIbc2bur.js → slide-BsXyd7Lq.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BXX9d6-w.js → statusUtils-tDKldiUT.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BGv10Bpn.js → styleChecker-BIS2unhx.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-bKnKT8tw.js → useFlexGapSupport-yFTVMDUv.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-FY4IL4jn.js → useFs-CZYbJwkO.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Bwl9TEgu.js → usePersonalDataHub-sbEHRLAM.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BM3OHxAT.js → vnode-BVjeSEQK.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D1fbFiHB.js → zoom-BZKVvEZ6.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +14 -0
- package/src/data/changelog.json +12 -2
- package/src/lib/background-session-transport.js +24 -2
- package/src/lib/governance-coverage.js +179 -0
- package/src/lib/packer/smoke-runner.js +85 -15
- package/src/lib/project-instructions.js +9 -1
- package/src/lib/protocol-replay.js +153 -0
- package/src/repl/agent-repl.js +17 -2
- package/src/runtime/agent-core.js +64 -11
- package/src/runtime/headless-runner.js +9 -1
- package/src/runtime/headless-stream.js +10 -1
- package/src/runtime/policies/agent-policy.js +5 -0
- package/src/runtime/system-prompt.js +21 -8
- package/src/assets/web-panel/assets/MarkdownRenderer-DS8dE8ty.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-Bw0k8e1B.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CvKrADNa.js +0 -1
- package/src/assets/web-panel/assets/index-DTdFUWc_.js +0 -1
- package/src/assets/web-panel/assets/index-zQ0M_kz-.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as s}from"./index-
|
|
1
|
+
import{t as s}from"./index-CWUJlCvK.js";const i=Object.freeze({ok:!1,config:{enabled:!1,batch_interval_seconds:3600,namespace_prefix:"",issuer:""},staging:{count:0,malformed:0,oldest_queued_at:null},batches:{count:0,last_batch_id:null,last_closed_at:null,last_tree_size:null,last_tree_head_id:null}});function n(r,t=0){return typeof r=="number"&&Number.isFinite(r)?r:t}function a(r,t=""){return typeof r=="string"?r:t}function f(r){const t=JSON.parse(JSON.stringify(i)),e=r&&typeof r=="object"&&!Array.isArray(r)?r:s(r);return!e||typeof e!="object"||Array.isArray(e)||(t.ok=!0,e.config&&typeof e.config=="object"&&(t.config.enabled=e.config.enabled===!0,t.config.batch_interval_seconds=n(e.config.batch_interval_seconds,t.config.batch_interval_seconds),t.config.namespace_prefix=a(e.config.namespace_prefix),t.config.issuer=a(e.config.issuer)),e.staging&&typeof e.staging=="object"&&(t.staging.count=n(e.staging.count,0),t.staging.malformed=n(e.staging.malformed,0),t.staging.oldest_queued_at=e.staging.oldest_queued_at??null),e.batches&&typeof e.batches=="object"&&(t.batches.count=n(e.batches.count,0),t.batches.last_batch_id=e.batches.last_batch_id??null,t.batches.last_closed_at=e.batches.last_closed_at??null,t.batches.last_tree_size=e.batches.last_tree_size??null,t.batches.last_tree_head_id=e.batches.last_tree_head_id??null)),t}const o=Object.freeze({ok:!1,exists:!1,stateFile:"",lastSeq:0,lastFingerprint:null,lastPublishedAt:null,historyCount:0,history:[]});function l(r){if(!r||typeof r!="object")return null;const t=a(r.seq);return t?{key:t,seq:t,namespace:a(r.namespace),treeHeadId:a(r.tree_head_id),rootHash:a(r.root_hash),treeSize:n(r.tree_size,0),fingerprint:a(r.fingerprint),publishedAt:a(r.published_at),batchDir:a(r.batch_dir)}:null}function _(r){const t=JSON.parse(JSON.stringify(o)),e=s(r);return!e||typeof e!="object"||Array.isArray(e)||(t.ok=e.ok===!0,t.exists=e.exists===!0,t.stateFile=a(e.state_file),!t.exists)||(t.lastSeq=n(e.last_seq,0),t.lastFingerprint=e.last_fingerprint??null,t.lastPublishedAt=e.last_published_at??null,t.historyCount=n(e.history_count,0),Array.isArray(e.history)&&(t.history=e.history.map(l).filter(Boolean))),t}const u=Object.freeze({ok:!1,code:"",recoverable:!1,leaf:null,treeHead:null,raw:null});function d(r){const t=JSON.parse(JSON.stringify(u)),e=s(r);return!e||typeof e!="object"||Array.isArray(e)||(t.raw=e,t.ok=e.ok===!0,t.code=a(e.code,e.reason||""),t.recoverable=e.recoverable===!0,e.leaf&&typeof e.leaf=="object"&&(t.leaf=e.leaf),e.treeHead&&typeof e.treeHead=="object"&&(t.treeHead=e.treeHead)),t}function h(r){return typeof r!="number"||!Number.isFinite(r)||r<=0?"—":r<60?`${r}s`:r<3600?`${Math.round(r/60)}min`:`${Math.round(r/3600)}h`}function b(r){if(!r)return"—";const t=new Date(r);return isNaN(t.getTime())?r:t.toLocaleString("zh-CN",{hour12:!1})}function g(r){if(!r)return"—";const t=Date.parse(r);if(isNaN(t))return r;const e=Math.round((Date.now()-t)/1e3);return e<60?`${e}s 前`:e<3600?`${Math.round(e/60)}min 前`:e<86400?`${Math.round(e/3600)}h 前`:`${Math.round(e/86400)}d 前`}export{f as a,_ as b,b as c,h as d,g as f,d as p};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as s}from"./index-
|
|
1
|
+
import{h as s}from"./index-CWUJlCvK.js";function a(n,t){const e=s({},n);for(let o=0;o<t.length;o+=1){const r=t[o];delete e[r]}return e}export{a as o};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{h as i}from"./index-
|
|
1
|
+
import{h as i}from"./index-CWUJlCvK.js";const l=`accept acceptcharset accesskey action allowfullscreen allowtransparency
|
|
2
2
|
alt async autocomplete autofocus autoplay capture cellpadding cellspacing challenge
|
|
3
3
|
charset checked classid classname colspan cols content contenteditable contextmenu
|
|
4
4
|
controls coords crossorigin data datetime default defer dir disabled download draggable
|
package/src/assets/web-panel/assets/{placementArrow-CFOL8mIR.js → placementArrow-WCk8di0z.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as i}from"./index-
|
|
1
|
+
import{h as i}from"./index-CWUJlCvK.js";const L=(e,o,t,n,p)=>{const r=e/2,a=0,s=r,m=t*1/Math.sqrt(2),h=r-t*(1-1/Math.sqrt(2)),b=r-o*(1/Math.sqrt(2)),u=t*(Math.sqrt(2)-1)+o*(1/Math.sqrt(2)),g=2*r-b,w=u,d=2*r-m,c=h,A=2*r-a,x=s,v=r*Math.sqrt(2)+t*(Math.sqrt(2)-2),$=t*(Math.sqrt(2)-1);return{pointerEvents:"none",width:e,height:e,overflow:"hidden","&::after":{content:'""',position:"absolute",width:v,height:v,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:`0 0 ${o}px 0`},transform:"translateY(50%) rotate(-135deg)",boxShadow:p,zIndex:0,background:"transparent"},"&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:e,height:e/2,background:n,clipPath:{_multi_value_:!0,value:[`polygon(${$}px 100%, 50% ${$}px, ${2*r-$}px 100%, ${$}px 100%)`,`path('M ${a} ${s} A ${t} ${t} 0 0 0 ${m} ${h} L ${b} ${u} A ${o} ${o} 0 0 1 ${g} ${w} L ${d} ${c} A ${t} ${t} 0 0 0 ${A} ${x} Z')`]},content:'""'}}},f={adjustX:1,adjustY:1},l=[0,0],j={left:{points:["cr","cl"],overflow:f,offset:[-4,0],targetOffset:l},right:{points:["cl","cr"],overflow:f,offset:[4,0],targetOffset:l},top:{points:["bc","tc"],overflow:f,offset:[0,-4],targetOffset:l},bottom:{points:["tc","bc"],overflow:f,offset:[0,4],targetOffset:l},topLeft:{points:["bl","tl"],overflow:f,offset:[0,-4],targetOffset:l},leftTop:{points:["tr","tl"],overflow:f,offset:[-4,0],targetOffset:l},topRight:{points:["br","tr"],overflow:f,offset:[0,-4],targetOffset:l},rightTop:{points:["tl","tr"],overflow:f,offset:[4,0],targetOffset:l},bottomRight:{points:["tr","br"],overflow:f,offset:[0,4],targetOffset:l},rightBottom:{points:["bl","br"],overflow:f,offset:[4,0],targetOffset:l},bottomLeft:{points:["tl","bl"],overflow:f,offset:[0,4],targetOffset:l},leftBottom:{points:["br","bl"],overflow:f,offset:[-4,0],targetOffset:l}},M={adjustX:1,adjustY:1},O={adjustX:0,adjustY:0},T=[0,0];function k(e){return typeof e=="boolean"?e?M:O:i(i({},O),e)}function Y(e){const{arrowWidth:o=4,horizontalArrowShift:t=16,verticalArrowShift:n=8,autoAdjustOverflow:p,arrowPointAtCenter:r}=e,a={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(t+o),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(n+o)]},topRight:{points:["br","tc"],offset:[t+o,-4]},rightTop:{points:["tl","cr"],offset:[4,-(n+o)]},bottomRight:{points:["tr","bc"],offset:[t+o,4]},rightBottom:{points:["bl","cr"],offset:[4,n+o]},bottomLeft:{points:["tl","bc"],offset:[-(t+o),4]},leftBottom:{points:["br","cl"],offset:[-4,n+o]}};return Object.keys(a).forEach(s=>{a[s]=r?i(i({},a[s]),{overflow:k(p),targetOffset:T}):i(i({},j[s]),{overflow:k(p)}),a[s].ignoreShake=!0}),a}function _(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return e.map(t=>`${o}${t}`).join(",")}const X=8;function B(e){const o=X,{sizePopupArrow:t,contentRadius:n,borderRadiusOuter:p,limitVerticalRadius:r}=e,a=t/2-Math.ceil(p*(Math.sqrt(2)-1)),s=(n>12?n+2:12)-a,m=r?o-a:s;return{dropdownArrowOffset:s,dropdownArrowOffsetVertical:m}}function q(e,o){const{componentCls:t,sizePopupArrow:n,marginXXS:p,borderRadiusXS:r,borderRadiusOuter:a,boxShadowPopoverArrow:s}=e,{colorBg:m,showArrowCls:h,contentRadius:b=e.borderRadiusLG,limitVerticalRadius:u}=o,{dropdownArrowOffsetVertical:g,dropdownArrowOffset:w}=B({sizePopupArrow:n,contentRadius:b,borderRadiusOuter:a,limitVerticalRadius:u}),d=n/2+p;return{[t]:{[`${t}-arrow`]:[i(i({position:"absolute",zIndex:1,display:"block"},L(n,r,a,m,s)),{"&:before":{background:m}})],[[`&-placement-top ${t}-arrow`,`&-placement-topLeft ${t}-arrow`,`&-placement-topRight ${t}-arrow`].join(",")]:{bottom:0,transform:"translateY(100%) rotate(180deg)"},[`&-placement-top ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},[`&-placement-topLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-topRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-bottom ${t}-arrow`,`&-placement-bottomLeft ${t}-arrow`,`&-placement-bottomRight ${t}-arrow`].join(",")]:{top:0,transform:"translateY(-100%)"},[`&-placement-bottom ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},[`&-placement-bottomLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-bottomRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-left ${t}-arrow`,`&-placement-leftTop ${t}-arrow`,`&-placement-leftBottom ${t}-arrow`].join(",")]:{right:{_skip_check_:!0,value:0},transform:"translateX(100%) rotate(90deg)"},[`&-placement-left ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},[`&-placement-leftTop ${t}-arrow`]:{top:g},[`&-placement-leftBottom ${t}-arrow`]:{bottom:g},[[`&-placement-right ${t}-arrow`,`&-placement-rightTop ${t}-arrow`,`&-placement-rightBottom ${t}-arrow`].join(",")]:{left:{_skip_check_:!0,value:0},transform:"translateX(-100%) rotate(-90deg)"},[`&-placement-right ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},[`&-placement-rightTop ${t}-arrow`]:{top:g},[`&-placement-rightBottom ${t}-arrow`]:{bottom:g},[_(["&-placement-topLeft","&-placement-top","&-placement-topRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingBottom:d},[_(["&-placement-bottomLeft","&-placement-bottom","&-placement-bottomRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingTop:d},[_(["&-placement-leftTop","&-placement-left","&-placement-leftBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingRight:{_skip_check_:!0,value:d}},[_(["&-placement-rightTop","&-placement-right","&-placement-rightBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingLeft:{_skip_check_:!0,value:d}}}}}export{X as M,Y as a,B as b,q as g,j as p,L as r};
|
package/src/assets/web-panel/assets/{responsiveObserve-BtaFK5zd.js → responsiveObserve-CEC8CZ-3.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{J as o,h}from"./index-
|
|
1
|
+
import{J as o,h}from"./index-CWUJlCvK.js";import{b as x}from"./vendor-Bn1JzzAn.js";const v=["xxxl","xxl","xl","lg","md","sm","xs"],p=r=>({xs:`(max-width: ${r.screenXSMax}px)`,sm:`(min-width: ${r.screenSM}px)`,md:`(min-width: ${r.screenMD}px)`,lg:`(min-width: ${r.screenLG}px)`,xl:`(min-width: ${r.screenXL}px)`,xxl:`(min-width: ${r.screenXXL}px)`,xxxl:`{min-width: ${r.screenXXXL}px}`});function w(){const[,r]=o();return x(()=>{const n=p(r.value),i=new Map;let a=-1,c={};return{matchHandlers:{},dispatch(e){return c=e,i.forEach(t=>t(c)),i.size>=1},subscribe(e){return i.size||this.register(),a+=1,i.set(a,e),e(c),a},unsubscribe(e){i.delete(e),i.size||this.unregister()},unregister(){Object.keys(n).forEach(e=>{const t=n[e],s=this.matchHandlers[t];s?.mql.removeListener(s?.listener)}),i.clear()},register(){Object.keys(n).forEach(e=>{const t=n[e],s=l=>{let{matches:m}=l;this.dispatch(h(h({},c),{[e]:m}))},d=window.matchMedia(t);d.addListener(s),this.matchHandlers[t]={mql:d,listener:s},s(d)})},responsiveMap:n}})}export{v as r,w as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as n}from"./index-
|
|
1
|
+
import{K as n}from"./index-CWUJlCvK.js";import{i as e}from"./motion-C8BYa98D.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
|
|
2
2
|
${i}-enter,
|
|
3
3
|
${i}-appear
|
|
4
4
|
`]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:t.motionEaseOutQuint},[`${i}-leave`]:{animationTimingFunction:t.motionEaseInQuint}}]};export{f as a,c as b,m as c,K as i,l as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./index-
|
|
1
|
+
import{i as e}from"./index-CWUJlCvK.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as d}from"./index-
|
|
1
|
+
import{B as d}from"./index-CWUJlCvK.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
|
package/src/assets/web-panel/assets/{useFlexGapSupport-bKnKT8tw.js → useFlexGapSupport-yFTVMDUv.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-
|
|
1
|
+
import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-BIS2unhx.js";const r=(()=>{const e=t(!1);return o(()=>{e.value=s()}),e});export{r as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as d}from"./index-
|
|
1
|
+
import{u as d}from"./index-CWUJlCvK.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as f}from"./index-
|
|
1
|
+
import{u as f}from"./index-CWUJlCvK.js";function d(n){if(!n)return n;if(n.error)throw new Error(n.error);return n.result!==void 0?n.result:n}function p(n,t,a,e,r){return typeof n.onMessage!="function"||typeof n.sendRaw!="function"?n.sendRaw({type:t,...a},r).then(d):new Promise((u,s)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${t}.event`,g=`${t}.end`;let c=!1,y=()=>{};const o=(i,b)=>{if(!c){c=!0,clearTimeout(m);try{y()}catch{}i(b)}},m=setTimeout(()=>{o(s,new Error(`stream timeout (${r}ms): ${t}`))},r),h=n.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof e=="function")try{e(i.event||i)}catch{}return}if(i.type===g){o(u,d(i));return}i.type==="error"&&o(s,new Error(i.message||"stream error"))}});y=typeof h=="function"?h:()=>{},Promise.resolve(n.sendRaw({id:l,type:t,...a},r)).catch(()=>{})})}function D(){const n=f(),t=(a,e={},r=3e4)=>n.sendRaw({type:a,...e},r).then(d);return{async health(){return await t("personal-data-hub.health",{},8e3)},async stats(){return await t("personal-data-hub.stats",{},8e3)},async listAdapters(){return await t("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const e=await n.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),r=e&&e.result!==void 0?e.result:e;return r&&r.ok&&typeof r.filePath=="string"?r.filePath:null}catch{return null}},async adapterReadiness(a){return await t("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,e={}){return await t("personal-data-hub.sync-adapter",{name:a,options:e},12e4)},async syncAll(a={}){return await t("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:e=20,seed:r=1}={}){return await t("personal-data-hub.register-mock",{name:a,count:e,seed:r})},async unregister(a){return await t("personal-data-hub.unregister",{name:a})},async ask(a,e={}){return await t("personal-data-hub.ask",{question:a,options:e},18e4)},async queryEvents(a={}){return await t("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await t("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await t("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await t("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await t("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,e={}){return await t("personal-data-hub.register-email",{account:a,opts:e},15e3)},async unregisterEmail(a){return await t("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await t("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(a){return await t("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,e={},r){return await p(n,"personal-data-hub.sync-adapter-stream",{name:a,options:e},r,6e5)},async syncAllStream(a={},e){return await p(n,"personal-data-hub.sync-all-stream",{options:a},e,9e5)},async registerAlipay(a,e={}){return await t("personal-data-hub.register-alipay",{account:a,opts:e},15e3)},async unregisterAlipay(a){return await t("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await t("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:a,csvPath:e,zipPassword:r}={}){return await t("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:e,zipPassword:r},3e5)},async reviewQueueList(a=50){return await t("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,e){return await t("personal-data-hub.review-decision",{reviewId:a,decision:e},5e3)},async manualMerge(a,e){return await t("personal-data-hub.manual-merge",{aId:a,bId:e},5e3)},async manualUnmerge(a){return await t("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await t("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await t("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await t("personal-data-hub.skills-list",{},5e3)},async runSkill(a,e={}){return await t("personal-data-hub.run-skill",{name:a,options:e},12e4)},async openAichatLogin(a,e={}){return await t("personal-data-hub.aichat-open-login",{vendor:a,opts:e},1e4)},async probeAichatCookies(a,e){return await t("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:e},1e4)},async registerAichatVendor(a,e,r={}){return await t("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:e,opts:r},3e4)},async rotateAichatLogin(a){return await t("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await t("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await t("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await t("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await t("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s}={}){return await t("personal-data-hub.register-wechat",{account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s},45e3)},async listWechatAccounts(){return await t("personal-data-hub.list-wechat-accounts",{},5e3)},async unregisterWechat(a){return await t("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await t("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await t("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await t("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await t("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await t("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await t("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await t("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await t("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{D 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-CWUJlCvK.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-CWUJlCvK.js";import{i as f}from"./motion-C8BYa98D.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-CWUJlCvK.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">
|
package/src/commands/agent.js
CHANGED
|
@@ -285,6 +285,10 @@ export function registerAgentCommand(program) {
|
|
|
285
285
|
"--append-system-prompt <text>",
|
|
286
286
|
"Append extra guidance to the system prompt (literal text or @file)",
|
|
287
287
|
)
|
|
288
|
+
.option(
|
|
289
|
+
"--no-project-memory",
|
|
290
|
+
"Skip auto-loaded project memory (cc.md / CLAUDE.md / AGENTS.md hierarchy, .chainlesschain/rules.md, .claude/rules/*.md) — a lean system prompt for token-tight surfaces (e.g. IDE chat). The agent can still read those files with tools when it needs them.",
|
|
291
|
+
)
|
|
288
292
|
.option(
|
|
289
293
|
"--output-style <name>",
|
|
290
294
|
"Apply a named output-style persona (.claude/output-styles/<name>.md or a built-in: explanatory | learning)",
|
|
@@ -880,6 +884,9 @@ export function registerAgentCommand(program) {
|
|
|
880
884
|
appendSystemPrompt: resolvePromptText(options.appendSystemPrompt, {
|
|
881
885
|
cwd,
|
|
882
886
|
}),
|
|
887
|
+
// --no-project-memory → options.projectMemory === false. Undefined
|
|
888
|
+
// (flag absent) leaves the default-on path byte-identical.
|
|
889
|
+
projectMemory: options.projectMemory,
|
|
883
890
|
includePartialMessages: options.includePartialMessages === true,
|
|
884
891
|
goal: options.goal,
|
|
885
892
|
mcpConfig: options.mcpConfig || null,
|
|
@@ -1095,6 +1102,9 @@ export function registerAgentCommand(program) {
|
|
|
1095
1102
|
appendSystemPrompt: resolvePromptText(options.appendSystemPrompt, {
|
|
1096
1103
|
cwd: process.cwd(),
|
|
1097
1104
|
}),
|
|
1105
|
+
// --no-project-memory → options.projectMemory === false (default-on
|
|
1106
|
+
// path is untouched when the flag is absent, i.e. undefined).
|
|
1107
|
+
projectMemory: options.projectMemory,
|
|
1098
1108
|
// --include-partial-messages: live token deltas as stream_event lines
|
|
1099
1109
|
includePartialMessages: options.includePartialMessages === true,
|
|
1100
1110
|
// --goal [id]: bind a cc goal into the run (Phase 1)
|
|
@@ -1279,6 +1289,10 @@ export function registerAgentCommand(program) {
|
|
|
1279
1289
|
appendSystemPrompt: resolvePromptText(options.appendSystemPrompt, {
|
|
1280
1290
|
cwd: process.cwd(),
|
|
1281
1291
|
}),
|
|
1292
|
+
// --no-project-memory also applies interactively → options.projectMemory
|
|
1293
|
+
// === false suppresses the auto-loaded rules.md + cc.md/CLAUDE.md block
|
|
1294
|
+
// in the REPL's composed system prompt. Absent (undefined) = default-on.
|
|
1295
|
+
projectMemory: options.projectMemory,
|
|
1282
1296
|
// --fallback-model also applies interactively (wrapper built in the
|
|
1283
1297
|
// REPL). Pass the fully resolved chain (flag + config default).
|
|
1284
1298
|
fallbackModels: fallbackModels.length ? fallbackModels : null,
|
package/src/data/changelog.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"releases": [
|
|
4
4
|
{
|
|
5
5
|
"productVersion": "Unreleased",
|
|
6
|
-
"cliVersion": "0.162.
|
|
6
|
+
"cliVersion": "0.162.166",
|
|
7
7
|
"cliVersions": [
|
|
8
8
|
"0.4.46",
|
|
9
9
|
"0.4.51",
|
|
@@ -22,11 +22,21 @@
|
|
|
22
22
|
"0.162.161",
|
|
23
23
|
"0.162.162",
|
|
24
24
|
"0.162.163",
|
|
25
|
-
"0.162.164"
|
|
25
|
+
"0.162.164",
|
|
26
|
+
"0.162.165",
|
|
27
|
+
"0.162.166"
|
|
26
28
|
],
|
|
27
29
|
"date": null,
|
|
28
30
|
"title": "",
|
|
29
31
|
"sections": [
|
|
32
|
+
{
|
|
33
|
+
"heading": "Added — cc CLI 0.162.166:P1-9「Capability Manifest 与脱敏诊断包」收官——协议文档 CI byte-diff / 离线协议回放 / 治理覆盖率指标(CLI-only npm 发版)",
|
|
34
|
+
"body": "> `chainlesschain` 0.162.165 → **0.162.166** 发 npm `latest`(经 `npm-publish.yml`,`--provenance --access public`)。纯 `packages/cli/src` 增量(新增 3 个 `src/lib` 纯逻辑模块 + 3 个 `scripts/` 离线工具 + 测试);未触 `pdh/lib` → 无 Android cc bundle rollover / 无 USR_VERSION 改动。**只加 npm 脚本 + 离线工具,无新增顶层命令,命令数 175 不变**;默认路径字节不变。本版把 `docs/CLAUDE_CODE_IDE_INCREMENTAL_GAP_ANALYSIS_2026-07-13.md` 的 P1-9 三个剩项全部收口。\n\n- **协议能力文档 CI byte-diff 单源生成**:新增生成器 `scripts/gen-protocol-doc.mjs`(`--out`/`--check`)从唯一源 `capability-manifest.js` `renderProtocolDoc()` 投影出 `docs/cli/PROTOCOL_CAPABILITY_MANIFEST.generated.md`(协议版本 + 可协商 wire 特性表 + 权限模式);npm 脚本 `docs:protocol` / `docs:protocol:check`;`capability-manifest.test.js` 新增 byte-diff 断言(读签入副本 = `renderProtocolDoc()`),manifest 加 wire 字段但未重生成即测试红——drift 不可能 merge 绿。\n- **离线协议回放 + 兼容审计**:新增 `protocol-replay.js`——拿一段录制的 stream-json 会话 + 协商上下文(server×client offer),**无需活体对端**离线①回放到该协商下的线上形态(未通过协商的字段按 field-gate 剥离)②审计录制是否遵守协商(任何帧携带已 gate-OFF 的可协商 wire 字段 = 前向兼容违规,fail-closed)。可 gate 字段集从唯一源 `toFieldGate()` 投影不会漂移;`sessionDigest` 键序无关可 pin golden 录制。离线工具 `scripts/replay-protocol.mjs`(`--replay`/`--audit`,违规 exit 1)+ golden fixture。\n- **治理覆盖率指标(§11.3 验收)**:新增 `governance-coverage.js`——①高风险 Tool Call Ledger/Trace 覆盖率(每个不可逆副作用调用须既有 side-effect-ledger 记录又有 trace span,「高风险」复用唯一源 `classifyToolSideEffect`)②Plugin/MCP/Skill/Hook 溯源可追溯率(外部来源调用须带 source+version+scope+权限决策);`ok` 仅双 100% 才真(fail-closed),给逐条未覆盖项。离线工具 `scripts/coverage-report.mjs`(读 run-summary JSON,任一 gap exit 1,可对录制 run 工件 CI 强制 100%)。"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"heading": "Added — cc CLI 0.162.165:精简项目记忆——`--no-project-memory` 全关 + `CC_PROJECT_MEMORY=lean` 只留入口文件 + IDE 聊天「精简上下文」默认开(CLI-only npm 发版)",
|
|
38
|
+
"body": "> `chainlesschain` 0.162.164 → **0.162.165** 发 npm `latest`(经 `npm-publish.yml`,`--provenance --access public`)。纯 `packages/cli/src`(+ VS Code 插件设置);未触 `pdh/lib` → 无 Android cc bundle rollover / 无 USR_VERSION 改动。命令面只加 `cc agent --no-project-memory` **标志** + `CC_PROJECT_MEMORY` 环境变量识别,**顶层命令数 175 不变**;默认路径字节不变。动机:文档密集的仓库里 `cc agent` 每轮都把整套项目记忆重发进系统提示(本仓库实测约 12k token/轮),付费模型即真金白银。\n\n- **精简系统提示三态**:`cc agent` 每轮重发的项目记忆现分三档——`full`(默认,不变)/ `lean` / `off`。`--no-project-memory`(全关)跳过整个自动加载的项目记忆层级(`cc.md`/`CLAUDE.md`/`AGENTS.md` 入口 + `CLAUDE.local.md` + `.claude/rules/*` + `.chainlesschain/rules.md`),贯穿 headless `-p` / stream-json / 交互 REPL 全模式;`agent` 需要时仍可用工具自读那些文件。\n- **`CC_PROJECT_MEMORY=lean` 只留入口文件**:保留主入口指令文件(按 `cc.md` > `CLAUDE.md` > `AGENTS.md` 首个命中,优先 `cc.md`),丢掉沉重附属——`CLAUDE.local.md`(个人开发状态)、`.claude/rules/*.md`、`.chainlesschain/rules.md`。本仓库实测项目记忆 ~12k → ~5k token/轮,入口文件保留。遗留 `CC_PROJECT_MEMORY=0`(关指令块、`rules.md` 仍保留)契约完全不变。\n- **IDE 聊天「精简上下文」(随本版 CLI 运行时生效,设置随下次插件发版)**:VS Code 插件新增 `chainlesschain.chat.leanContext`(默认开)→ 面板子进程注入 `CC_PROJECT_MEMORY=lean`。经**环境变量而非 CLI 标志**下发——旧 `cc` 不认时自动回退 full(安全、不会因未知标志报错),终端 `cc` 不受影响。"
|
|
39
|
+
},
|
|
30
40
|
{
|
|
31
41
|
"heading": "Added — cc CLI 0.162.164:IDE 增量 gap-analysis (2026-07-13) 全批接线落地——凭据脱敏三导出面 / /rewind 从这里分支 / cc doctor 执行位置 / cc session pr-status / 复杂 Diff 行评论锚定 / 终端上下文策略 / worktree 清理安全闸 / 崩溃恢复台账 / 无人值守动作门 / 跨设备操作指纹(CLI-only npm 发版)",
|
|
32
42
|
"body": "> `chainlesschain` 0.162.163 → **0.162.164** 发 npm `latest`(经 `npm-publish.yml`,`--provenance --access public`)。纯 `packages/cli/src` 增量;未触 `pdh/lib` → 无 Android cc bundle rollover / 无 USR_VERSION 改动。命令面只加 **session 子命令 `cc session pr-status`** 与 REPL `/rewind <n> --branch`、`cc doctor` 新增「Execution context」诊断段 + 工具 flag,**顶层命令数 175 不变**。本版把 `docs/CLAUDE_CODE_IDE_INCREMENTAL_GAP_ANALYSIS_2026-07-13.md` 的可 Windows 落地项整批接线(纯核已建、本版补真实运行时/命令面接线,默认路径保持字节不变)。\n\n- **8.1 凭据脱敏三导出面全闸**:一份导出物离机必须朝「不泄漏」失败——`cc session export` 导出前对渲染 transcript 跑召回优先 secret-scan(命中替 `[REDACTED]`,脱敏计数写 stderr,`--no-redact` 保原值);OTLP `toOtlp()` 对 span/event 字符串属性(含 exception message)默认脱敏(`cc agent/team --otlp`、`cc eval`);诊断包 `cc doctor --export-bundle` 强制脱敏(P1-9)。三面共用同一 recall-first 扫描器。\n- **P0-2 崩溃恢复副作用台账**:两阶段记账 `prepare→start→commit|fail|unknown` 接进 headless 与 IDE/Bridge/Extension-Host resume——`--resume` reconcile 台账,started-未落定-非幂等 op 注入去标识「Recovery notice」而非盲目重跑;Diff-Apply 内容哈希幂等(old 已改+new 已在→幂等 no-op 不重写);外部操作 Idempotency Key + 0-重复副作用度量。\n- **P0-3「从这里分支」进 `/rewind`**:`/rewind <n> --branch [--write]`(`--fork` 别名)从选中 turn 派生独立会话,保留分支点之前历史并从此分叉,**父会话绝不被截断**;确定性分支 id + `session_branch` 血统事件 + 幂等重放 + traversal fail-closed。\n- **P1-1 复杂 Diff 行评论锚定**:review finding 锚到它所指的**代码**(file+baseHash+锚定行原文+上下文)而非裸坐标;agent 改文件后可 `reanchorComment` 重定位/标 outdated,绝不复用旧行号(接进 `review-pipeline` finding 输出 + `cc review` 尽力填 fileContents)。\n- **P1-2 终端上下文策略 + 后台任务脱敏**:`selectTerminalContextForModel` fail-closed(非显式 opt-in 绝不把终端 scrollback 塞进模型上下文)+ ANSI-strip→secret-redact→scrollback-cap;`check_shell {list}` / `/tasks` 后台任务快照对命令串脱敏并暴露 PID(stoppable 仅在握真 PID 时)。\n- **P1-4 PR/CI 监控 + 受控合并**:新子命令 `cc session pr-status [id] [--pr N] [--checks-file <json>] [--enable] [--json]`——从 PR-link ledger 取会话关联 PR,`gh pr view` 或 `--checks-file` 采信号,渲染状态条 + **默认关**的 auto-merge 合格性判定(穷举列未满足项:分支保护/Review/待审批/失败或 pending check/缺席必需 check)。\n- **P1-5 worktree 清理安全闸**:后台 agent worktree reaper 清理前过 fail-closed 安全闸——未提交/未追踪/未 push/关联 PR 任一命中即**保留**(旧「全清」逃生门 `force:true` 保留);`git` 读不出→保留(绝不销毁无法核实的工作)。\n- **P1-6 会话级 agent 工具准入 + 归因**:extension 层工具(run_skill/spawn_sub_agent/browser/schedule/publish_artifact/MCP)需 Capability+Policy+权限+预算+UI 五闸全过;每次调用记只带来源的安全归因(可落 transcript)。\n- **P1-7 执行位置一等属性**:`cc doctor` 新增「Execution context」诊断段——检测 ambient location(Codespaces/SSH/Container/WSL/Local),remote/unknown fail-closed 到只读地板并列 policy 违规;凭据只显示来源/作用域不显示值。\n- **P1-8 无人值守动作门**:`cc agenda` 定时/事件任务默认拦截 notify/publish_artifact 等高危外呼(`unattendedAllowlist` 显式放回);action-class 分级 fail-closed。\n- **P1-9 脱敏诊断包**:`cc doctor --export-bundle` 一键导出去标识诊断包(版本/平台/Capability/连接/脱敏事件/进程·端口·锁文件·worktree 摘要;默认不含源码/Key/Cookie/完整环境变量;导出前强制 secret-scan)。\n- **8.2 跨设备操作指纹**:远程审批 `remote-approval-bridge` 升级到全元组 `OperationApprovalRegistry`(工具名/规范化参数/目标环境/workspace/session/策略版本/有效期);`permission.request` 发完整指纹 + 短标识 + 无秘密摘要,`approval.resolve` 失败关闭(mismatch/superseded/duplicate/过窗)。\n- **Monorepo / P2 硬化**:worktree `sparsePaths` 稀疏检出 + `symlinkDirectories` 逃逸守卫接进 team runner;`cc doctor` 新增沙箱真能力/静默降级、重复 skill 影子、settings.json hook 配置静态校验、async-hook 可靠性健康检查;LSP 服务器可选指数退避重启;每 span 归一 OTel session/agent id + `permission.decision_id`。\n\n> `chainlesschain` 0.162.162 → **0.162.163** 发 npm `latest`(经 `npm-publish.yml`,`--provenance --access public`)。纯 `packages/cli/src` 增量;未触 `pdh/lib` → 无 Android cc bundle rollover / 无 USR_VERSION 改动。命令面只加子命令(`cc agenda prune`、`cc plugin consent`、`cc hook replay`/`events-log`、`cc context --sources`)与 REPL slash(`/goal`)+ 工具参数/flag,**顶层命令数 175 不变**。本版把 0.162.162 announce 的多数纯核落成真实**运行时接线**,并补齐 `docs/CLAUDE_CODE_CLI_INCREMENTAL_GAP_ANALYSIS_2026-07-12.md` 各节的 last-mile「仍欠」。全套本地三层全绿(unit+integration 25,008 + e2e 628,0 真失败)。\n\n- **Subagent 契约全轴强制(P1)**:`_executeSpawnSubAgent` 真正消费 `resolveSubagentContract`(spawnArgs > agent-file > 父级天花板),tighten-only 强制 skills/mcp/hooks/memory capability INTERSECT、permissionMode(plan→只读工具集)、budget/effort/context、worktree fail-closed、递归深度/宽度上限;非 plan confirmer 线程化 + headless 与交互 REPL 均以运行模式播种子级天花板;子级专属无 confirmer ApprovalGate 强制 run_shell/run_code/browser_act 会话策略。\n- **跨 Agent 授权边界接线(P0)**:本地 headless 审批链路携带并校验 `tool_call_id + normalized_arguments + policy_digest` 绑定(重放/参数替换/错投的批准判 `binding-mismatch` 拒绝);入站 channel 事件显式打 steer authority(其载荷里的 \"approved\" 只是文本,不能代表用户批准)。\n- **会话完成条件引擎接线(P1)**:`--goal-condition <spec>`(exit-zero/file-exists/contains/regex/model)驱动 headless 外层回合,跨进程 `--resume` 续跑(持久 `goal_snapshot`),REPL `/goal <condition>` 交互入口;`goal_started/evaluated/completed/exhausted` 事件。\n- **Turn↔Checkpoint 绑定持久化 + coverage-aware /rewind(P1)**:绑定作为链式会话事件持久化;`/rewind` 打印诚实的 coverage/警告(副作用 / 缺 checkpoint / 对话-文件漂移),永不过度承诺可恢复范围。\n- **副作用台账崩溃恢复(P0 纯核)**:`side-effect-ledger.js` 两阶段记账 `prepare→start→commit|fail|unknown` + `reconcileSideEffects` 分桶 redo/inspect/skip(file-write/git-push/package-install 中途强杀不重复副作用)。\n- **持久 Scheduler/Monitor 扩展(P1)**:`cc agenda prune`(回收终态条目)+ 过期退休(`expiresAt`/`retireExpired`)+ Monitor 文件/HTTP/mtime-change 源(替每 tick spawn shell)+ agent `schedule` 工具透传 `expires`/`jitter` + 每任务 permission-mode/worktree/turn 预算。\n- **Plugin 能力 consent 生命周期(P1)**:consent 存储 + load-path chokepoint enforcement(opt-in)+ `cc plugin consent` + `add`/`upgrade` 渲染能力清单+diff+re-consent 提示 + doctor 未同意/坏 manifest 告警。\n- **Monorepo 上下文(P1)**:`instructionExcludes` 从分层 settings 接进 `composeSystemPrompt`(排除 legacy/vendor/generated 子树,含 @import)+ `cc context --sources`(逐来源 token 归因)+ 懒加载子树指令纯核。\n- **Hooks 持久事件日志 + Replay(P2)**:哈希链 JSONL 事件日志(opt-in `CC_HOOK_EVENT_LOG`)+ `cc hook replay`(决策类事件必显式 `--sandbox`,绝不 re-gate 真流程)/`cc hook events-log`(列出/校验链)。\n- **JSON Schema(P2)**:`--json-schema` 接受 inline JSON + 与 `stream-json` 兼容(终局 `structured_result` NDJSON 行)+ format/if-then-else 断言 + 约束式重试改用富校验器(带 RFC 6901 JSON Pointer 提示)。\n- **多 Agent Review(P2)**:`cc review --multi`(correctness/security/performance/tests 分维 finder 扇出)+ `--verify`(skeptic 复现剔除 refuted)+ high effort 自动双开。\n- **OTel(P2)**:`--otlp-content` opt-in 输出 prompt/response/tool_arguments(默认脱敏 `[redacted]`)+ 每 span 归一化 session/agent id。"
|
|
@@ -270,12 +270,34 @@ export function connectBackgroundSession(opts) {
|
|
|
270
270
|
if (message.type === "hello") {
|
|
271
271
|
settled = true;
|
|
272
272
|
clearTimeout(timer);
|
|
273
|
+
// The transport client socket must never be the sole reason its
|
|
274
|
+
// owner's event loop stays alive — real callers are held open by
|
|
275
|
+
// their own handles (attach: stdin/readline; WS bridge: the
|
|
276
|
+
// WebSocket server), both of which already unref their poll timers.
|
|
277
|
+
// A still-open (or half-closed) socket lingering at teardown was
|
|
278
|
+
// pinning vitest's forks-pool worker past its terminate deadline
|
|
279
|
+
// → "Worker exited unexpectedly" flake on CI.
|
|
280
|
+
socket.unref?.();
|
|
273
281
|
resolve({
|
|
274
282
|
hello: message,
|
|
275
283
|
send: (msg) => writeMessage(socket, msg),
|
|
276
284
|
close: () => {
|
|
277
|
-
|
|
278
|
-
socket.end()
|
|
285
|
+
// Best-effort graceful detach, then HARD destroy so the client
|
|
286
|
+
// handle is released synchronously. `socket.end()` alone leaves
|
|
287
|
+
// a half-open, still-REFERENCED socket: a prior `send()` (i.e.
|
|
288
|
+
// socket.write) re-refs the handle, undoing the connect-time
|
|
289
|
+
// unref, so end()'s FIN-wait keeps the owner's event loop alive
|
|
290
|
+
// until the peer FINs back. Under CI's 2-fork parallel load that
|
|
291
|
+
// outlived vitest's worker-terminate deadline → "Worker exited
|
|
292
|
+
// unexpectedly" forks-pool flake. destroy() drops the handle now;
|
|
293
|
+
// the worker sees the socket close and finalizes the same as it
|
|
294
|
+
// would on an explicit detach.
|
|
295
|
+
try {
|
|
296
|
+
writeMessage(socket, { type: "detach" });
|
|
297
|
+
} catch {
|
|
298
|
+
/* peer already gone */
|
|
299
|
+
}
|
|
300
|
+
socket.destroy();
|
|
279
301
|
},
|
|
280
302
|
});
|
|
281
303
|
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Governance coverage metrics — the last open item of P1-9 ("覆盖率指标") in
|
|
3
|
+
* docs/CLAUDE_CODE_IDE_INCREMENTAL_GAP_ANALYSIS_2026-07-13.md, and the
|
|
4
|
+
* computation behind two §11.3 acceptance targets:
|
|
5
|
+
*
|
|
6
|
+
* - "高风险 Tool Call Ledger/Trace 覆盖率:100%"
|
|
7
|
+
* every high-risk (irreversible side-effecting) tool call MUST have a
|
|
8
|
+
* side-effect-ledger entry AND a trace span.
|
|
9
|
+
* - "Plugin/MCP/Skill/Hook 来源、版本、权限可追溯率:100%"
|
|
10
|
+
* every externally-sourced tool/skill call MUST carry full provenance
|
|
11
|
+
* (source + version + scope + a recorded permission decision).
|
|
12
|
+
*
|
|
13
|
+
* "High-risk" is NOT re-defined here — it is exactly what [[side-effect-ledger.js]]
|
|
14
|
+
* `classifyToolSideEffect` records (the ONE source), so this metric can't drift
|
|
15
|
+
* from what the ledger actually tracks. Provenance rows are the attribution
|
|
16
|
+
* records [[agent-tool-admission.js]] `buildToolAttribution` produces.
|
|
17
|
+
*
|
|
18
|
+
* PURE + deterministic: no fs / process / clock / RNG. The caller gathers a run's
|
|
19
|
+
* tool calls, the op-ids that got a ledger entry, the op-ids that got a trace
|
|
20
|
+
* span, and the attribution records; this reads back coverage ratios + the exact
|
|
21
|
+
* uncovered items so a gap is actionable, not just a number.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { classifyToolSideEffect } from "./side-effect-ledger.js";
|
|
25
|
+
|
|
26
|
+
/** Coverage ratio in [0,1]; an empty population is vacuously fully covered. */
|
|
27
|
+
function ratio(covered, total) {
|
|
28
|
+
return total === 0 ? 1 : covered / total;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Whether a tool call is high-risk (records an irreversible side effect). */
|
|
32
|
+
export function isHighRiskToolCall(call) {
|
|
33
|
+
return classifyToolSideEffect(call?.tool, call?.args || {}) != null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* High-risk tool-call ledger + trace coverage (§11.3 metric).
|
|
38
|
+
*
|
|
39
|
+
* @param {object} params
|
|
40
|
+
* @param {Array<{tool:string, args?:object, opId?:string}>} params.toolCalls
|
|
41
|
+
* every tool call the run issued (only high-risk ones enter the denominator)
|
|
42
|
+
* @param {Iterable<string>} [params.ledgerOpIds] op-ids that got a ledger entry
|
|
43
|
+
* @param {Iterable<string>} [params.tracedOpIds] op-ids that got a trace span
|
|
44
|
+
* @returns {{highRiskCount:number, ledgerCovered:number, traceCovered:number,
|
|
45
|
+
* ledgerCoverage:number, traceCoverage:number,
|
|
46
|
+
* uncoveredLedger:object[], uncoveredTrace:object[], ok:boolean}}
|
|
47
|
+
*/
|
|
48
|
+
export function computeSideEffectCoverage({
|
|
49
|
+
toolCalls = [],
|
|
50
|
+
ledgerOpIds = [],
|
|
51
|
+
tracedOpIds = [],
|
|
52
|
+
} = {}) {
|
|
53
|
+
const ledgerSet = new Set([...ledgerOpIds].map(String));
|
|
54
|
+
const traceSet = new Set([...tracedOpIds].map(String));
|
|
55
|
+
|
|
56
|
+
const highRisk = [];
|
|
57
|
+
(Array.isArray(toolCalls) ? toolCalls : []).forEach((call, index) => {
|
|
58
|
+
const cls = classifyToolSideEffect(call?.tool, call?.args || {});
|
|
59
|
+
if (!cls) return; // not high-risk — excluded from the denominator
|
|
60
|
+
const opId = call?.opId == null ? null : String(call.opId);
|
|
61
|
+
highRisk.push({
|
|
62
|
+
index,
|
|
63
|
+
tool: String(call?.tool || ""),
|
|
64
|
+
kind: cls.kind,
|
|
65
|
+
opId,
|
|
66
|
+
ledger: opId != null && ledgerSet.has(opId),
|
|
67
|
+
traced: opId != null && traceSet.has(opId),
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const total = highRisk.length;
|
|
72
|
+
const ledgerCovered = highRisk.filter((h) => h.ledger).length;
|
|
73
|
+
const traceCovered = highRisk.filter((h) => h.traced).length;
|
|
74
|
+
const pick = (h) => ({
|
|
75
|
+
index: h.index,
|
|
76
|
+
tool: h.tool,
|
|
77
|
+
kind: h.kind,
|
|
78
|
+
opId: h.opId,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
highRiskCount: total,
|
|
83
|
+
ledgerCovered,
|
|
84
|
+
traceCovered,
|
|
85
|
+
ledgerCoverage: ratio(ledgerCovered, total),
|
|
86
|
+
traceCoverage: ratio(traceCovered, total),
|
|
87
|
+
uncoveredLedger: highRisk.filter((h) => !h.ledger).map(pick),
|
|
88
|
+
uncoveredTrace: highRisk.filter((h) => !h.traced).map(pick),
|
|
89
|
+
ok: total === 0 ? true : ledgerCovered === total && traceCovered === total,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** An attribution is in the provenance denominator if it's externally sourced. */
|
|
94
|
+
function inProvenanceScope(attr) {
|
|
95
|
+
return Boolean(attr?.source) || String(attr?.tier || "") === "extension";
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Plugin/MCP/Skill/Hook provenance traceability coverage (§11.3 metric). Only
|
|
100
|
+
* externally-sourced (or extension-tier) calls enter the denominator; a built-in
|
|
101
|
+
* mvp tool with no source is not part of this metric. An in-scope row is
|
|
102
|
+
* traceable only when source + version + scope are all present AND a permission
|
|
103
|
+
* decision was recorded (`admitted` is not null).
|
|
104
|
+
*
|
|
105
|
+
* @param {Array<object>} attributions buildToolAttribution() records
|
|
106
|
+
* @returns {{total:number, traceable:number, coverage:number,
|
|
107
|
+
* untraceable:Array<{index:number, tool:(string|null), missing:string[]}>,
|
|
108
|
+
* ok:boolean}}
|
|
109
|
+
*/
|
|
110
|
+
export function computeProvenanceCoverage(attributions = []) {
|
|
111
|
+
const rows = [];
|
|
112
|
+
(Array.isArray(attributions) ? attributions : []).forEach((attr, index) => {
|
|
113
|
+
if (!inProvenanceScope(attr)) return;
|
|
114
|
+
const missing = [];
|
|
115
|
+
if (!attr?.source) missing.push("source");
|
|
116
|
+
if (!attr?.version) missing.push("version");
|
|
117
|
+
if (!attr?.scope) missing.push("scope");
|
|
118
|
+
if (attr?.admitted == null) missing.push("permission");
|
|
119
|
+
rows.push({
|
|
120
|
+
index,
|
|
121
|
+
tool: attr?.tool ?? null,
|
|
122
|
+
traceable: missing.length === 0,
|
|
123
|
+
missing,
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const total = rows.length;
|
|
128
|
+
const traceable = rows.filter((r) => r.traceable).length;
|
|
129
|
+
return {
|
|
130
|
+
total,
|
|
131
|
+
traceable,
|
|
132
|
+
coverage: ratio(traceable, total),
|
|
133
|
+
untraceable: rows.filter((r) => !r.traceable),
|
|
134
|
+
ok: total === 0 ? true : traceable === total,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Format a ratio in [0,1] as a whole-or-1-decimal percentage string. */
|
|
139
|
+
function pct(r) {
|
|
140
|
+
const v = r * 100;
|
|
141
|
+
return (Number.isInteger(v) ? v.toFixed(0) : v.toFixed(1)) + "%";
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Combine both metrics into one report + a fail-closed `ok` (both must be 100%).
|
|
146
|
+
*
|
|
147
|
+
* @param {object} params
|
|
148
|
+
* @param {Array} [params.toolCalls]
|
|
149
|
+
* @param {Iterable<string>} [params.ledgerOpIds]
|
|
150
|
+
* @param {Iterable<string>} [params.tracedOpIds]
|
|
151
|
+
* @param {Array} [params.attributions]
|
|
152
|
+
* @returns {{sideEffect:object, provenance:object, ok:boolean}}
|
|
153
|
+
*/
|
|
154
|
+
export function computeGovernanceCoverage({
|
|
155
|
+
toolCalls = [],
|
|
156
|
+
ledgerOpIds = [],
|
|
157
|
+
tracedOpIds = [],
|
|
158
|
+
attributions = [],
|
|
159
|
+
} = {}) {
|
|
160
|
+
const sideEffect = computeSideEffectCoverage({
|
|
161
|
+
toolCalls,
|
|
162
|
+
ledgerOpIds,
|
|
163
|
+
tracedOpIds,
|
|
164
|
+
});
|
|
165
|
+
const provenance = computeProvenanceCoverage(attributions);
|
|
166
|
+
return { sideEffect, provenance, ok: sideEffect.ok && provenance.ok };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** One-line, token-free summary of a governance coverage report. */
|
|
170
|
+
export function summarizeGovernanceCoverage(report) {
|
|
171
|
+
const se = report?.sideEffect || {};
|
|
172
|
+
const pr = report?.provenance || {};
|
|
173
|
+
return (
|
|
174
|
+
`high-risk ledger ${pct(se.ledgerCoverage ?? 1)} / trace ` +
|
|
175
|
+
`${pct(se.traceCoverage ?? 1)} (${se.highRiskCount ?? 0} calls) · ` +
|
|
176
|
+
`provenance ${pct(pr.coverage ?? 1)} (${pr.total ?? 0} sourced) · ` +
|
|
177
|
+
`${report?.ok ? "OK" : "GAPS"}`
|
|
178
|
+
);
|
|
179
|
+
}
|