chainlesschain 0.166.47 → 0.166.48
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 +2 -2
- package/src/assets/web-panel/assets/{AIOps-CDpT0WXV.js → AIOps-BLGEffkh.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BNfUljWx.js → ActionButton-Cz1z2VGD.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C9323DEx.js → Analytics-C3j9cf6q.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CRrjb2db.js → AppLayout-BR9ERuCA.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-Db-DGqJS.js → Artifacts-CozJCm4y.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CJdHRJ0W.js → Audit-DC5g9Ra2.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-_RSCnTYs.js → BackgroundAgents-B1zrQ0dW.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-8GFQi-dM.js → Backup-ChVnfjpm.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-C87NtgUZ.js → BaseInput-8_vLQsLf.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DcTMWS8G.js → Chat-Dct9bm6L.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-5ZDPTW_H.js → ChatBubbleRenderer-BvoSsCKh.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DM9EmYee.js → Checkbox-DZQIsCIC.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-M2YqDRNN.js → Codegen-CdzHxmnq.js} +1 -1
- package/src/assets/web-panel/assets/{Col-oB1LLxyf.js → Col-DdAN8LeW.js} +1 -1
- package/src/assets/web-panel/assets/{Community-TcVZK5tF.js → Community-CNgjT9MA.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-XKmq-3K_.js → Compact-BtQiX6G-.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-C6CBiDRy.js → Compliance-OGX5ma3j.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Dz9CGqXH.js → Cowork-CgugQnGM.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-CxJDgDVL.js → Cron-Bpg7cPFD.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DMP0JsaQ.js → Crosschain-D1hsuswf.js} +1 -1
- package/src/assets/web-panel/assets/{DID-I5IQeogb.js → DID-miDRsMBw.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BfLW2MXj.js → Dashboard-CGcl8htP.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BK8EjAlh.js → Dropdown-BFaxTdVE.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C3iqSv5I.js → EmailListRenderer-BQdGLZIO.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-bMvgBk6r.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-T19rnqm-.js → FamilyGuardDashboard-c1WVC_--.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CozrbPMy.js → Federation-DyAcFrQY.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-k1dCLNNJ.js → FormItemContext-CfwpfD2B.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DbaW_Jvt.js → GenericCardRenderer-DkJcbBpS.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CQHRyEIt.js → Git-DgYIrPJh.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BMJYZgMy.js → Governance-BF1tYPJ6.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-B7mpNU7V.js → Inference-BFkwRIrU.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Br0Blg6B.js → KnowledgeGraph-DpCoqhBa.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-HIdk0S6M.js → Logs-DU2qAJmD.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-HxeocBHy.js → MarkdownRenderer-QWv7UJLq.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-Bkfq69UP.js → Marketplace-Dz9NUrfo.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-dtmx0bHO.js → McpTools-B67I3d5v.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CrRlOuEf.js → Memory-crkElJSy.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D4ZIZiAH.js → MobileBridge-BO20VbdX.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-C90Rw7GE.js → MobileProjects-Ba-3gZZd.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CC6k_uh4.js → Mtc-BAHZM084.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-T_CUIYUy.js → MtcAudit-CL3DzajL.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-N_e0RRWk.js → Multisig-BSWWzvWH.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Iq3VzEv0.js → NLProgramming-fnxqXM_3.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-B5sKJUJt.js → Notes-qUZPIQXT.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-K8UVp8qQ.js → NotificationSettings-x9Xrixqu.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BWNyM-6m.js → OrderTableRenderer-BtMtQUt7.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DMO1NJxI.js → Organization-C946Hzna.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BBY6b31Z.js → Overflow-BYf8KIts.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DmsL0y0v.js → P2P-Cbqf5dnv.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-rmxp0cuF.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-CWcpRtWa.js → Permissions-CZBw45EW.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub--ZNDIdsn.js → PersonalDataHub-BKwUAt43.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-DCdj5NGb.js → Pipeline-DmFD2QW4.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BRKu7Q3E.js → Privacy-KpuwWvt5.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BJ7ozIAb.js → ProjectInit-Bt8UheX6.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-B2cVLiXW.js → ProjectSettings-2ZeAn9CP.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Ce9r_W-p.js → Projects-zBuet8Zs.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BDespvGZ.js → Providers-DcEAnw6L.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BUNO4fDU.js → QrScannerModal-qF7liYG9.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-D2TUqeBV.js → QuickAsk-qiESlVBJ.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BNNQPHBH.js → Recommend-Bk-cQyi9.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-D2t1V_Cm.js → RemoteSession-CwrekErS.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-DVK5hEqI.js → Reputation-Bmw_UQtW.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BB9RTwmE.js → Row-CPdqZIUX.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DmEO7liZ.js → RssFeed-D_W-xxvS.js} +2 -2
- package/src/assets/web-panel/assets/{Search-UwEYjnDB.js → Search-Hu0oDFj_.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DebqSsMp.js → Security-DeRxUwmq.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CuuPts3C.js → Services-CsNmHFkf.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DbWpmbgf.js → Skeleton-gv_Vz0tN.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BaK7SxzT.js → Skills-Dgg-_rCB.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BFHv51Jb.js → Sla-Bpu-bsEJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-B9b1R6uK.js → SpeechSettings-CrhleHuF.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BnO0CN02.js → SyncSettings-JHjUN6I9.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-Dy01Vq49.js → Tasks-DKRWKkl9.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BCy2AMHc.js → Templates-leiWntLq.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-4Tx9y_Y1.js → Tenant--1bYulvn.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CPOoUH8J.js → Terminal-C0y6FvSS.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-C85GlJzu.js → TimelineRenderer-CQK4PVv4.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-_xneFBGF.js → Tokens-DbIvF-DV.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BizG4rTr.js → Trigger-CkXJ2vuq.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-Dh8EIn3n.js → Trust-B02WXJPw.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-C5NWoHWQ.js → UkeySign-VPMkfzmw.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-0YfrySL6.js → VideoEditing-C5ezUnah.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BZVH8Ags.js → Wallet-CYfvYRrY.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-kNofa6vm.js → WebAuthn-DtKl-kpr.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-BNO34_j0.js → WorkflowEditor-DACITF-u.js} +1 -1
- package/src/assets/web-panel/assets/{chat-ifQ2FlwD.js → chat-qnygfnLi.js} +1 -1
- package/src/assets/web-panel/assets/{colors-1TL8H6EH.js → colors-D4mISLBD.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DBfRjs_T.js → compact-item-BBPfxYGL.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Bs6V4iBf.js → createContext-Byx4ndHp.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DBy6gsuI.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Bz6LMY_0.js → hasIn-CGjLkkn3.js} +1 -1
- package/src/assets/web-panel/assets/{index--WvT2Il3.js → index-B8UpadHC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMVktlxG.js → index-B9jH-h4X.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiZ7Nz5-.js → index-BN7_TSgU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtB45Hok.js → index-BNe2lCk6.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNKHoXWI.js → index-B_fHPZ8E.js} +1 -1
- package/src/assets/web-panel/assets/index-BfEDXk_E.js +1 -0
- package/src/assets/web-panel/assets/{index-B5SJCUZ7.js → index-BklGH3YI.js} +1 -1
- package/src/assets/web-panel/assets/{index-pOUFfRdN.js → index-BmKYaaGP.js} +1 -1
- package/src/assets/web-panel/assets/{index-BB1Af7Fv.js → index-BxQF1wCU.js} +1 -1
- package/src/assets/web-panel/assets/{index-EK3XtMxA.js → index-ByA1NyFP.js} +1 -1
- package/src/assets/web-panel/assets/{index-cNwsev6n.js → index-BzeBBAl5.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cykt9BbN.js → index-C3abGsSW.js} +1 -1
- package/src/assets/web-panel/assets/{index-f_7L9GvP.js → index-C9tcHs46.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxqC3LiO.js → index-CD5Btq6p.js} +1 -1
- package/src/assets/web-panel/assets/{index-DOww5Qny.js → index-CFMWjuav.js} +1 -1
- package/src/assets/web-panel/assets/{index-rGhS02f8.js → index-CMj8qmpX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQL_tldd.js → index-CVUJjQAT.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7d6QlfR.js → index-CWhI8G14.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXtiLagi.js → index-CZjNamSU.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6c0j-Ki.js → index-CmHE-lY_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWPp-d07.js → index-CoA8WsVr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DEPPzM8I.js → index-Cpg3AWRy.js} +1 -1
- package/src/assets/web-panel/assets/index-CrxUwNM8.js +1 -0
- package/src/assets/web-panel/assets/{index-DDhy4eCS.js → index-CsVuQsY1.js} +1 -1
- package/src/assets/web-panel/assets/{index-vb1XIxEB.js → index-CydHMjwc.js} +1 -1
- package/src/assets/web-panel/assets/{index-CBh48_Mh.js → index-DH6iC5b2.js} +1 -1
- package/src/assets/web-panel/assets/{index-84mi5rsv.js → index-DZXhKAk9.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoCTDcn6.js → index-D_g9mA1N.js} +1 -1
- package/src/assets/web-panel/assets/{index-B6RClMZl.js → index-DboTeuPF.js} +1 -1
- package/src/assets/web-panel/assets/{index-XJIV7HEw.js → index-DfgpKd64.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9QYxq61.js → index-Dmfe0L2Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-lUL3bD2z.js → index-Dzni_5Qw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXJXMaZe.js → index-J5JkStvY.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXVBQ82k.js → index-Ne8UGllV.js} +3 -3
- package/src/assets/web-panel/assets/{index-BhPDhmvN.js → index-O09jXbir.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvM2xBUA.js → index-Y7el_3WS.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cu_V6ZJH.js → index-c_tBkIlU.js} +1 -1
- package/src/assets/web-panel/assets/{index-vHtnQsnV.js → index-lKJWAmd4.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cn7EIWmI.js → index-xzRKTy0R.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DpRIjwTt.js → initDefaultProps-XuhfEIhB.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CG4_9o-Z.js → motion-Cbxh6AxO.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dku1fXtf.js → move-C7IEnFly.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BvAVeX-3.js → mtc-parser-lLADx4LL.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DFu0x78D.js → omit-mIbic_k-.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CmI-FNcK.js → pickAttrs-_xIYEqu3.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CGERYewB.js → placementArrow-ClB-E0ny.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D7G8bF5J.js → responsiveObserve-D36Bg2ut.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B2sXwWXy.js → slide-CUuO08Bl.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DI5yh0n3.js → statusUtils-BKahwLbv.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-deGJ5dp_.js → styleChecker-2pT-T8vy.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-OqHBXEmi.js → useFlexGapSupport-DyH5g7Rg.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Dqgx0Qv_.js → useFs-CTOauB3X.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Be-lveh2.js → usePersonalDataHub-B02JYIMe.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CFxB876W.js → vnode-Do22wQrc.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BFOYrl4e.js → zoom-BfnL7rit.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/plugin.js +36 -5
- package/src/data/changelog.json +13 -0
- package/src/generated/cc-agent-protocol.schema.json +44 -1
- package/src/lib/background-agent-list-index.js +222 -0
- package/src/lib/background-agent-supervisor.js +38 -0
- package/src/lib/codex-app-server-adapter.js +1 -0
- package/src/lib/context-memory-kernel/provider-context.js +69 -4
- package/src/lib/deferred-question-context.js +160 -4
- package/src/lib/eval/plugin-suite.js +286 -22
- package/src/lib/session-host-snapshot.js +16 -0
- package/src/runtime/headless-stream.js +162 -13
- package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-C65AX_RY.js +0 -7
- package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +0 -1
- package/src/assets/web-panel/assets/index-CsRz9-ZH.js +0 -1
- package/src/assets/web-panel/assets/index-DnjMFf3m.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as v}from"./index-
|
|
1
|
+
import{u as v}from"./index-Ne8UGllV.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-Ne8UGllV.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-Ne8UGllV.js";import{i as f}from"./motion-Cbxh6AxO.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-Ne8UGllV.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/plugin.js
CHANGED
|
@@ -1445,12 +1445,24 @@ export function registerPluginCommand(program) {
|
|
|
1445
1445
|
"--suite <file>",
|
|
1446
1446
|
"Suite JSON inside the plugin root (default: evals/suite.json)",
|
|
1447
1447
|
)
|
|
1448
|
+
.option(
|
|
1449
|
+
"--holdout <file>",
|
|
1450
|
+
"Reviewer-owned holdout suite outside the plugin payload",
|
|
1451
|
+
)
|
|
1448
1452
|
.option("--provider <provider>", "Fixed provider for both eval arms")
|
|
1449
1453
|
.option("--model <model>", "Fixed model for both eval arms")
|
|
1450
1454
|
.option(
|
|
1451
1455
|
"--min-pass-rate-delta <pct>",
|
|
1452
1456
|
"Override the suite's minimum candidate gain in percentage points",
|
|
1453
1457
|
)
|
|
1458
|
+
.option(
|
|
1459
|
+
"--samples <n>",
|
|
1460
|
+
"Run each control/candidate task 1-20 times (default: suite or 1)",
|
|
1461
|
+
)
|
|
1462
|
+
.option(
|
|
1463
|
+
"--arm-order <order>",
|
|
1464
|
+
"balanced, control-first, or candidate-first (default: balanced)",
|
|
1465
|
+
)
|
|
1454
1466
|
.option("--json", "Output the bound report as JSON")
|
|
1455
1467
|
.option("--html <file>", "Write a local HTML report")
|
|
1456
1468
|
.option("--keep", "Keep per-task temporary workspaces")
|
|
@@ -1479,15 +1491,30 @@ export function registerPluginCommand(program) {
|
|
|
1479
1491
|
}
|
|
1480
1492
|
minPassRateDelta = percentage / 100;
|
|
1481
1493
|
}
|
|
1494
|
+
let sampleRuns;
|
|
1495
|
+
if (options.samples !== undefined) {
|
|
1496
|
+
sampleRuns = Number(options.samples);
|
|
1497
|
+
if (
|
|
1498
|
+
!Number.isSafeInteger(sampleRuns) ||
|
|
1499
|
+
sampleRuns < 1 ||
|
|
1500
|
+
sampleRuns > 20
|
|
1501
|
+
) {
|
|
1502
|
+
throw new Error("--samples must be an integer between 1 and 20");
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1482
1505
|
const {
|
|
1506
|
+
attachPluginEvalHoldout,
|
|
1483
1507
|
loadPluginEvalDefinition,
|
|
1484
1508
|
renderPluginEvalHtml,
|
|
1485
1509
|
runPluginEval,
|
|
1486
1510
|
} = await import("../lib/eval/plugin-suite.js");
|
|
1487
1511
|
const { makeHeadlessRunAgent } = await import("./eval.js");
|
|
1488
|
-
const definition =
|
|
1489
|
-
|
|
1490
|
-
|
|
1512
|
+
const definition = attachPluginEvalHoldout(
|
|
1513
|
+
loadPluginEvalDefinition(dir, {
|
|
1514
|
+
suiteFile: options.suite,
|
|
1515
|
+
}),
|
|
1516
|
+
options.holdout,
|
|
1517
|
+
);
|
|
1491
1518
|
const dryRunAgent = async () => ({
|
|
1492
1519
|
ok: true,
|
|
1493
1520
|
output: `${JSON.stringify({
|
|
@@ -1526,11 +1553,15 @@ export function registerPluginCommand(program) {
|
|
|
1526
1553
|
dryRun: options.dryRun === true,
|
|
1527
1554
|
keepWorkspaces: options.keep === true,
|
|
1528
1555
|
...(minPassRateDelta === undefined ? {} : { minPassRateDelta }),
|
|
1556
|
+
...(sampleRuns === undefined ? {} : { sampleRuns }),
|
|
1557
|
+
...(options.armOrder === undefined
|
|
1558
|
+
? {}
|
|
1559
|
+
: { armOrder: options.armOrder }),
|
|
1529
1560
|
onResult: options.json
|
|
1530
1561
|
? undefined
|
|
1531
|
-
: ({ arm, result }) =>
|
|
1562
|
+
: ({ arm, sample, result }) =>
|
|
1532
1563
|
logger.info(
|
|
1533
|
-
` ${arm.padEnd(9)} ${result.pass ? "✔" : "✗"} ${result.id} (${result.ms}ms)`,
|
|
1564
|
+
` ${arm.padEnd(9)} #${sample} ${result.pass ? "✔" : "✗"} ${result.id} (${result.ms}ms)`,
|
|
1534
1565
|
),
|
|
1535
1566
|
});
|
|
1536
1567
|
if (options.html) {
|
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.166.48",
|
|
7
|
+
"cliVersions": ["0.166.48"],
|
|
8
|
+
"date": null,
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Added - cc CLI 0.166.48: make evaluation, recovery, and governed recall durable",
|
|
13
|
+
"body": "- Add repeated balanced sampling, confidence intervals, and reviewer-owned\n holdout suites to `cc plugin eval` through `--samples`, `--arm-order`, and\n `--holdout`.\n- Persist standalone Headless deferred questions across process restarts, with\n binding checks and one-time answer consumption.\n- Add a file-identity-bound read-only index for paged background Agent status\n queries, with authoritative full-scan fallback on cache misses or races.\n- Add host-supplied, revision/digest-bound semantic recall candidates while\n preserving canonical lifecycle, scope, expiry, and sink enforcement.\n- Publish Context Memory Kernel `0.1.3` before the CLI so public installs\n resolve the new governed semantic-recall contract."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
4
17
|
{
|
|
5
18
|
"productVersion": null,
|
|
6
19
|
"cliVersion": "0.166.47",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"contextMemory": {
|
|
25
25
|
"schemaId": "https://chainlesschain.com/schemas/context-memory-kernel/v1",
|
|
26
26
|
"schemaVersion": 1,
|
|
27
|
-
"sourceDigest": "sha256:
|
|
27
|
+
"sourceDigest": "sha256:6599168b8fa9ace2d1697c44c2ac10141aa20bd7e9be29e9ea814ff032f87d68",
|
|
28
28
|
"methods": {
|
|
29
29
|
"context/plan": {
|
|
30
30
|
"request": "ContextPlanRequest",
|
|
@@ -4808,6 +4808,13 @@
|
|
|
4808
4808
|
"$ref": "#/$defs/ContextScopeAdmission"
|
|
4809
4809
|
}
|
|
4810
4810
|
},
|
|
4811
|
+
"semanticCandidates": {
|
|
4812
|
+
"type": "array",
|
|
4813
|
+
"maxItems": 1000,
|
|
4814
|
+
"items": {
|
|
4815
|
+
"$ref": "#/$defs/MemorySemanticCandidate"
|
|
4816
|
+
}
|
|
4817
|
+
},
|
|
4811
4818
|
"limit": {
|
|
4812
4819
|
"type": "integer",
|
|
4813
4820
|
"minimum": 1,
|
|
@@ -4854,6 +4861,15 @@
|
|
|
4854
4861
|
"type": "integer",
|
|
4855
4862
|
"minimum": 0
|
|
4856
4863
|
},
|
|
4864
|
+
"retrievalMode": {
|
|
4865
|
+
"enum": [
|
|
4866
|
+
"governed_hybrid"
|
|
4867
|
+
]
|
|
4868
|
+
},
|
|
4869
|
+
"semanticEvidenceCount": {
|
|
4870
|
+
"type": "integer",
|
|
4871
|
+
"minimum": 0
|
|
4872
|
+
},
|
|
4857
4873
|
"results": {
|
|
4858
4874
|
"type": "array",
|
|
4859
4875
|
"maxItems": 1000,
|
|
@@ -5768,6 +5784,33 @@
|
|
|
5768
5784
|
"$ref": "#/$defs/MemoryRecallResult"
|
|
5769
5785
|
}
|
|
5770
5786
|
}
|
|
5787
|
+
},
|
|
5788
|
+
"MemorySemanticCandidate": {
|
|
5789
|
+
"type": "object",
|
|
5790
|
+
"additionalProperties": false,
|
|
5791
|
+
"required": [
|
|
5792
|
+
"memoryId",
|
|
5793
|
+
"revision",
|
|
5794
|
+
"recordDigest",
|
|
5795
|
+
"score"
|
|
5796
|
+
],
|
|
5797
|
+
"properties": {
|
|
5798
|
+
"memoryId": {
|
|
5799
|
+
"$ref": "#/$defs/ContextMemoryIdentifier"
|
|
5800
|
+
},
|
|
5801
|
+
"revision": {
|
|
5802
|
+
"type": "integer",
|
|
5803
|
+
"minimum": 1
|
|
5804
|
+
},
|
|
5805
|
+
"recordDigest": {
|
|
5806
|
+
"$ref": "#/$defs/ContextMemoryDigest"
|
|
5807
|
+
},
|
|
5808
|
+
"score": {
|
|
5809
|
+
"type": "number",
|
|
5810
|
+
"minimum": 0,
|
|
5811
|
+
"maximum": 1
|
|
5812
|
+
}
|
|
5813
|
+
}
|
|
5771
5814
|
}
|
|
5772
5815
|
}
|
|
5773
5816
|
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import {
|
|
2
|
+
chmodSync,
|
|
3
|
+
lstatSync,
|
|
4
|
+
openSync,
|
|
5
|
+
closeSync,
|
|
6
|
+
readFileSync,
|
|
7
|
+
readdirSync,
|
|
8
|
+
renameSync,
|
|
9
|
+
rmSync,
|
|
10
|
+
statSync,
|
|
11
|
+
writeFileSync,
|
|
12
|
+
} from "node:fs";
|
|
13
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
|
|
16
|
+
export const BACKGROUND_AGENT_LIST_INDEX_SCHEMA =
|
|
17
|
+
"chainlesschain.background-agent-list-index/v1";
|
|
18
|
+
export const BACKGROUND_AGENT_LIST_INDEX_FILE =
|
|
19
|
+
".background-agent-list-index-v1";
|
|
20
|
+
|
|
21
|
+
const STATE_FILE = /^(bg-[A-Za-z0-9-]+)\.json$/u;
|
|
22
|
+
const MAX_INDEX_BYTES = 64 * 1024 * 1024;
|
|
23
|
+
const MAX_INDEX_ENTRIES = 1_000_000;
|
|
24
|
+
|
|
25
|
+
function sha256(value, domain) {
|
|
26
|
+
return `sha256:${createHash("sha256")
|
|
27
|
+
.update(domain)
|
|
28
|
+
.update("\0")
|
|
29
|
+
.update(value)
|
|
30
|
+
.digest("hex")}`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function stateFileSignature(directory, name, id) {
|
|
34
|
+
const target = join(directory, name);
|
|
35
|
+
const link = lstatSync(target);
|
|
36
|
+
if (!link.isFile() || link.isSymbolicLink()) {
|
|
37
|
+
throw new TypeError(`background agent state is not a regular file: ${id}`);
|
|
38
|
+
}
|
|
39
|
+
const stat = statSync(target, { bigint: true });
|
|
40
|
+
return {
|
|
41
|
+
id,
|
|
42
|
+
name,
|
|
43
|
+
size: String(stat.size),
|
|
44
|
+
mtimeNs: String(stat.mtimeNs),
|
|
45
|
+
ctimeNs: String(stat.ctimeNs),
|
|
46
|
+
dev: String(stat.dev),
|
|
47
|
+
ino: String(stat.ino),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function collectInventory(directory) {
|
|
52
|
+
const files = readdirSync(directory, { withFileTypes: true })
|
|
53
|
+
.map((entry) => {
|
|
54
|
+
const match = STATE_FILE.exec(entry.name);
|
|
55
|
+
if (!match || entry.name.includes(".job.")) return null;
|
|
56
|
+
if (!entry.isFile()) {
|
|
57
|
+
throw new TypeError(
|
|
58
|
+
`background agent state is not a regular file: ${match[1]}`,
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
return stateFileSignature(directory, entry.name, match[1]);
|
|
62
|
+
})
|
|
63
|
+
.filter(Boolean)
|
|
64
|
+
.sort((left, right) => left.name.localeCompare(right.name, "en"));
|
|
65
|
+
if (files.length > MAX_INDEX_ENTRIES) {
|
|
66
|
+
throw new RangeError(
|
|
67
|
+
`background agent list index exceeds ${MAX_INDEX_ENTRIES} entries`,
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
const encoded = JSON.stringify(files);
|
|
71
|
+
return {
|
|
72
|
+
files,
|
|
73
|
+
digest: sha256(encoded, "cc.background-agent-list-inventory/v1"),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function normalizeEntry(value, inventoryIds) {
|
|
78
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
79
|
+
if (!inventoryIds.has(value.id)) return null;
|
|
80
|
+
const startedAt = Number(value.startedAt);
|
|
81
|
+
if (!Number.isFinite(startedAt) || startedAt < 0) return null;
|
|
82
|
+
if (
|
|
83
|
+
typeof value.status !== "string" ||
|
|
84
|
+
value.status.length === 0 ||
|
|
85
|
+
value.status.length > 64
|
|
86
|
+
) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return { id: value.id, startedAt, status: value.status };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function readCachedIndex(directory, inventory) {
|
|
93
|
+
const target = join(directory, BACKGROUND_AGENT_LIST_INDEX_FILE);
|
|
94
|
+
try {
|
|
95
|
+
const stat = lstatSync(target);
|
|
96
|
+
if (
|
|
97
|
+
!stat.isFile() ||
|
|
98
|
+
stat.isSymbolicLink() ||
|
|
99
|
+
stat.size <= 0 ||
|
|
100
|
+
stat.size > MAX_INDEX_BYTES
|
|
101
|
+
) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const parsed = JSON.parse(readFileSync(target, "utf8"));
|
|
105
|
+
if (
|
|
106
|
+
!parsed ||
|
|
107
|
+
typeof parsed !== "object" ||
|
|
108
|
+
Array.isArray(parsed) ||
|
|
109
|
+
parsed.schema !== BACKGROUND_AGENT_LIST_INDEX_SCHEMA ||
|
|
110
|
+
parsed.inventoryDigest !== inventory.digest ||
|
|
111
|
+
parsed.fileCount !== inventory.files.length ||
|
|
112
|
+
!Array.isArray(parsed.entries) ||
|
|
113
|
+
parsed.entries.length > inventory.files.length
|
|
114
|
+
) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
const inventoryIds = new Set(inventory.files.map((file) => file.id));
|
|
118
|
+
const entries = parsed.entries.map((entry) =>
|
|
119
|
+
normalizeEntry(entry, inventoryIds),
|
|
120
|
+
);
|
|
121
|
+
if (entries.some((entry) => entry === null)) return null;
|
|
122
|
+
if (new Set(entries.map((entry) => entry.id)).size !== entries.length) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const contentDigest = sha256(
|
|
126
|
+
JSON.stringify({
|
|
127
|
+
schema: parsed.schema,
|
|
128
|
+
inventoryDigest: parsed.inventoryDigest,
|
|
129
|
+
fileCount: parsed.fileCount,
|
|
130
|
+
entries,
|
|
131
|
+
}),
|
|
132
|
+
"cc.background-agent-list-index/v1",
|
|
133
|
+
);
|
|
134
|
+
if (parsed.digest !== contentDigest) return null;
|
|
135
|
+
return entries;
|
|
136
|
+
} catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function writeCachedIndex(directory, inventory, entries) {
|
|
142
|
+
const target = join(directory, BACKGROUND_AGENT_LIST_INDEX_FILE);
|
|
143
|
+
const value = {
|
|
144
|
+
schema: BACKGROUND_AGENT_LIST_INDEX_SCHEMA,
|
|
145
|
+
inventoryDigest: inventory.digest,
|
|
146
|
+
fileCount: inventory.files.length,
|
|
147
|
+
entries,
|
|
148
|
+
};
|
|
149
|
+
value.digest = sha256(
|
|
150
|
+
JSON.stringify(value),
|
|
151
|
+
"cc.background-agent-list-index/v1",
|
|
152
|
+
);
|
|
153
|
+
const temporary = `${target}.${process.pid}.${randomBytes(4).toString("hex")}.tmp`;
|
|
154
|
+
try {
|
|
155
|
+
const descriptor = openSync(temporary, "wx", 0o600);
|
|
156
|
+
try {
|
|
157
|
+
writeFileSync(descriptor, `${JSON.stringify(value)}\n`, "utf8");
|
|
158
|
+
} finally {
|
|
159
|
+
closeSync(descriptor);
|
|
160
|
+
}
|
|
161
|
+
if (process.platform !== "win32") chmodSync(temporary, 0o600);
|
|
162
|
+
renameSync(temporary, target);
|
|
163
|
+
} catch {
|
|
164
|
+
rmSync(temporary, { force: true });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function projectState(state, id) {
|
|
169
|
+
if (!state || typeof state !== "object" || String(state.id) !== id) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const startedAt = Number(state.startedAt || 0);
|
|
173
|
+
if (!Number.isFinite(startedAt) || startedAt < 0) return null;
|
|
174
|
+
if (
|
|
175
|
+
typeof state.status !== "string" ||
|
|
176
|
+
state.status.length === 0 ||
|
|
177
|
+
state.status.length > 64
|
|
178
|
+
) {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
return { id, startedAt, status: state.status };
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Load a content-free projection when it exactly matches every authority-file
|
|
186
|
+
* identity. A miss rebuilds from authority and retries the inventory fence;
|
|
187
|
+
* callers must fall back to their authoritative scan if a concurrent writer
|
|
188
|
+
* prevents a stable rebuild.
|
|
189
|
+
*/
|
|
190
|
+
export function loadBackgroundAgentListIndex({ directory, readState }) {
|
|
191
|
+
if (typeof directory !== "string" || !directory) {
|
|
192
|
+
throw new TypeError("background agent list index directory is required");
|
|
193
|
+
}
|
|
194
|
+
if (typeof readState !== "function") {
|
|
195
|
+
throw new TypeError("background agent list index readState is required");
|
|
196
|
+
}
|
|
197
|
+
const inventory = collectInventory(directory);
|
|
198
|
+
const cached = readCachedIndex(directory, inventory);
|
|
199
|
+
if (cached) {
|
|
200
|
+
return Object.freeze({
|
|
201
|
+
source: "index",
|
|
202
|
+
entries: Object.freeze(cached.map((entry) => Object.freeze(entry))),
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const entries = inventory.files
|
|
207
|
+
.map((file) => projectState(readState(file.id), file.id))
|
|
208
|
+
.filter(Boolean);
|
|
209
|
+
const verifiedInventory = collectInventory(directory);
|
|
210
|
+
if (verifiedInventory.digest !== inventory.digest) {
|
|
211
|
+
const error = new Error(
|
|
212
|
+
"background agent authority changed while rebuilding the list index",
|
|
213
|
+
);
|
|
214
|
+
error.code = "BACKGROUND_AGENT_LIST_INDEX_RACE";
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
writeCachedIndex(directory, inventory, entries);
|
|
218
|
+
return Object.freeze({
|
|
219
|
+
source: "rebuilt",
|
|
220
|
+
entries: Object.freeze(entries.map((entry) => Object.freeze(entry))),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
@@ -60,6 +60,7 @@ import {
|
|
|
60
60
|
cleanupBackgroundAgentKeeperPipeDirectory,
|
|
61
61
|
prepareBackgroundAgentKeeperPipePath,
|
|
62
62
|
} from "./background-agent-keeper-protocol.js";
|
|
63
|
+
import { loadBackgroundAgentListIndex } from "./background-agent-list-index.js";
|
|
63
64
|
|
|
64
65
|
export const DEFAULT_HEARTBEAT_INTERVAL_MS = 5000;
|
|
65
66
|
export const DEFAULT_HEARTBEAT_STALE_MS = 120000;
|
|
@@ -2181,6 +2182,43 @@ export function listBackgroundAgentsPage(options = {}) {
|
|
|
2181
2182
|
"background agent page cursor does not match the requested filter",
|
|
2182
2183
|
);
|
|
2183
2184
|
}
|
|
2185
|
+
let indexed = null;
|
|
2186
|
+
try {
|
|
2187
|
+
indexed = loadBackgroundAgentListIndex({
|
|
2188
|
+
directory: backgroundAgentsDir(),
|
|
2189
|
+
readState: readBackgroundAgentState,
|
|
2190
|
+
});
|
|
2191
|
+
} catch {
|
|
2192
|
+
// The index is a disposable, content-free projection. Authority races,
|
|
2193
|
+
// corruption, or an unwritable cache must retain the full-scan behavior.
|
|
2194
|
+
}
|
|
2195
|
+
if (indexed) {
|
|
2196
|
+
const projected = [];
|
|
2197
|
+
const summaries = [...indexed.entries]
|
|
2198
|
+
.filter((state) => options.all || state.status === "running")
|
|
2199
|
+
.sort(compareBackgroundAgentListEntries);
|
|
2200
|
+
for (const summary of summaries) {
|
|
2201
|
+
if (cursor && !isBackgroundAgentAfterCursor(summary, cursor)) continue;
|
|
2202
|
+
const state = readBackgroundAgentState(summary.id);
|
|
2203
|
+
if (!state) continue;
|
|
2204
|
+
const effective = effectiveBackgroundAgentState(state, options);
|
|
2205
|
+
if (!effective || (!options.all && effective.status !== "running")) {
|
|
2206
|
+
continue;
|
|
2207
|
+
}
|
|
2208
|
+
if (cursor && !isBackgroundAgentAfterCursor(effective, cursor)) continue;
|
|
2209
|
+
projected.push(withLifecycleState(effective));
|
|
2210
|
+
if (projected.length > limit) break;
|
|
2211
|
+
}
|
|
2212
|
+
const sessions = projected.slice(0, limit);
|
|
2213
|
+
const nextCursor =
|
|
2214
|
+
projected.length > sessions.length
|
|
2215
|
+
? encodeBackgroundAgentPageCursor(sessions.at(-1), options.all)
|
|
2216
|
+
: null;
|
|
2217
|
+
return Object.freeze({
|
|
2218
|
+
sessions: Object.freeze(sessions),
|
|
2219
|
+
nextCursor,
|
|
2220
|
+
});
|
|
2221
|
+
}
|
|
2184
2222
|
const eligible = cursor
|
|
2185
2223
|
? listBackgroundAgentEntries(options, { stableTieBreak: true }).filter(
|
|
2186
2224
|
(state) => isBackgroundAgentAfterCursor(state, cursor),
|
|
@@ -6,6 +6,7 @@ export const CODEX_APP_SERVER_COMPATIBILITY_MATRIX = Object.freeze([
|
|
|
6
6
|
Object.freeze({ version: "0.149.0" }),
|
|
7
7
|
Object.freeze({ version: "0.150.0" }),
|
|
8
8
|
Object.freeze({ version: "0.150.1" }),
|
|
9
|
+
Object.freeze({ version: "0.154.0" }),
|
|
9
10
|
]);
|
|
10
11
|
|
|
11
12
|
function adapterError(code, message, details = {}) {
|
|
@@ -12,6 +12,9 @@ import {
|
|
|
12
12
|
messagesToContextItems,
|
|
13
13
|
} from "./message-adapter.js";
|
|
14
14
|
|
|
15
|
+
export const SEMANTIC_CANDIDATE_REQUEST_SCHEMA =
|
|
16
|
+
"chainlesschain.context-memory-semantic-candidate-request/v1";
|
|
17
|
+
|
|
15
18
|
function defaultAdmissions(sessionId, options) {
|
|
16
19
|
const candidates = [
|
|
17
20
|
{ scope: "session", scopeId: sessionId },
|
|
@@ -32,6 +35,57 @@ function defaultAdmissions(sessionId, options) {
|
|
|
32
35
|
});
|
|
33
36
|
}
|
|
34
37
|
|
|
38
|
+
function semanticCandidateProvider(options) {
|
|
39
|
+
const provider = options.contextMemorySemanticCandidateProvider;
|
|
40
|
+
if (provider == null) return null;
|
|
41
|
+
if (typeof provider !== "function") {
|
|
42
|
+
throw new TypeError(
|
|
43
|
+
"contextMemorySemanticCandidateProvider must be a function",
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
return provider;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Ask a host-owned semantic index for opaque record identifiers. The host sees
|
|
51
|
+
* the query and admission boundary but never receives canonical record content;
|
|
52
|
+
* the kernel later validates every returned revision/digest and applies its
|
|
53
|
+
* lifecycle, scope, expiry, and sink filters before ranking.
|
|
54
|
+
*/
|
|
55
|
+
async function resolveSemanticCandidates({
|
|
56
|
+
provider,
|
|
57
|
+
sessionId,
|
|
58
|
+
query,
|
|
59
|
+
sink,
|
|
60
|
+
scopeAdmissions,
|
|
61
|
+
limit,
|
|
62
|
+
}) {
|
|
63
|
+
if (!provider) return undefined;
|
|
64
|
+
const candidates = await provider(
|
|
65
|
+
Object.freeze({
|
|
66
|
+
schema: SEMANTIC_CANDIDATE_REQUEST_SCHEMA,
|
|
67
|
+
sessionId,
|
|
68
|
+
query,
|
|
69
|
+
sink,
|
|
70
|
+
scopeAdmissions: Object.freeze(
|
|
71
|
+
scopeAdmissions.map((entry) => Object.freeze({ ...entry })),
|
|
72
|
+
),
|
|
73
|
+
limit,
|
|
74
|
+
maxCandidates: 1000,
|
|
75
|
+
}),
|
|
76
|
+
);
|
|
77
|
+
if (!Array.isArray(candidates)) {
|
|
78
|
+
throw new TypeError(
|
|
79
|
+
"contextMemorySemanticCandidateProvider must resolve to an array",
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
return candidates.map((candidate) =>
|
|
83
|
+
candidate && typeof candidate === "object" && !Array.isArray(candidate)
|
|
84
|
+
? Object.freeze({ ...candidate })
|
|
85
|
+
: candidate,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
35
89
|
function toolDefinitionsToContextItems(definitionsInput, { sessionId, sink }) {
|
|
36
90
|
const definitions = Array.isArray(definitionsInput) ? definitionsInput : [];
|
|
37
91
|
return definitions.map((definition, index) => {
|
|
@@ -130,6 +184,7 @@ export async function prepareCanonicalProviderContext(
|
|
|
130
184
|
};
|
|
131
185
|
}
|
|
132
186
|
|
|
187
|
+
const candidateProvider = semanticCandidateProvider(options);
|
|
133
188
|
const sink = String(options.contextMemorySink || `provider.${provider}`);
|
|
134
189
|
const scopeAdmissions = defaultAdmissions(sessionId, options);
|
|
135
190
|
const lastUser = [...messages]
|
|
@@ -139,18 +194,28 @@ export async function prepareCanonicalProviderContext(
|
|
|
139
194
|
typeof lastUser?.content === "string" && lastUser.content.trim()
|
|
140
195
|
? lastUser.content.trim().slice(0, 32 * 1024)
|
|
141
196
|
: "*";
|
|
197
|
+
const recallLimit = Math.max(
|
|
198
|
+
1,
|
|
199
|
+
Math.min(32, Number(options.contextMemoryRecallLimit) || 12),
|
|
200
|
+
);
|
|
201
|
+
const semanticCandidates = await resolveSemanticCandidates({
|
|
202
|
+
provider: candidateProvider,
|
|
203
|
+
sessionId,
|
|
204
|
+
query,
|
|
205
|
+
sink,
|
|
206
|
+
scopeAdmissions,
|
|
207
|
+
limit: recallLimit,
|
|
208
|
+
});
|
|
142
209
|
const recall = await runtime.kernel.recallMemory({
|
|
143
210
|
query,
|
|
144
211
|
sink,
|
|
145
212
|
scopeAdmissions,
|
|
146
|
-
limit:
|
|
147
|
-
1,
|
|
148
|
-
Math.min(32, Number(options.contextMemoryRecallLimit) || 12),
|
|
149
|
-
),
|
|
213
|
+
limit: recallLimit,
|
|
150
214
|
tokenBudget: Math.max(
|
|
151
215
|
1,
|
|
152
216
|
Math.min(32_768, Number(options.contextMemoryRecallTokens) || 4096),
|
|
153
217
|
),
|
|
218
|
+
...(semanticCandidates === undefined ? {} : { semanticCandidates }),
|
|
154
219
|
});
|
|
155
220
|
const messageItems = messagesToContextItems(messages, {
|
|
156
221
|
sessionId,
|