chainlesschain 0.162.2 → 0.162.7
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 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-D69_XwQf.js → AIOps-BXQ92dvI.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-COVVHNnK.js → ActionButton-DjmolmAS.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-m0Cuoraq.js → Analytics-LUUOS78B.js} +2 -2
- package/src/assets/web-panel/assets/{AppLayout-BEZq_CS0.css → AppLayout-BLCe1k8m.css} +1 -1
- package/src/assets/web-panel/assets/AppLayout-DeAq-Waa.js +3 -0
- package/src/assets/web-panel/assets/{Audit-DB5RNs9K.js → Audit-De_86BpN.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DD9SgVtq.js → Backup-CAqIbrb5.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CS2Y4V0O.js → BaseInput-CwTVDavS.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Cvw48zqw.js → Chat-BnihAKiI.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DElRJpAL.js → Checkbox-BDrCuC9m.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CHdMYssy.js → Codegen-DWqN0jpL.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BDk4BXjN.js → Col-B7rIr4g3.js} +1 -1
- package/src/assets/web-panel/assets/{Community-ByDrN94M.js → Community-YYEO8SY3.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-D4E0roed.js → Compact-DZHWn-_j.js} +1 -1
- package/src/assets/web-panel/assets/Compliance-CCYzk_rt.js +1 -0
- package/src/assets/web-panel/assets/{Cowork-CMn6mzHv.js → Cowork-D9G6khOx.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-CARdrrMM.js → Cron-IbwddEeZ.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-2pnRIGVn.js → Crosschain-Bct133LN.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BRo55XlY.js → DID-32J0mXoS.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DfNjjw7V.js → Dashboard-TaPAK2WV.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BDTTlG70.js → Dropdown-Df4hUeIm.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CKkeJ169.js → Federation-C0xfKoZr.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-C6DJ0oHT.js → FormItemContext-CoacTa1H.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DDQd8pDl.js → Git-DZZF1lrY.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DZTuAASB.js → Governance-Bo-P_BP3.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CIbj0XmL.js → Inference-agx6qPl9.js} +1 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-Dc8YZGiO.js +1 -0
- package/src/assets/web-panel/assets/{Logs-BrLBwq1m.js → Logs-njAOFc0W.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-q9X5VK92.js → Marketplace-Yu-RUTN2.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DfxuLN57.js → McpTools-BuzdmOwR.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-DND9vjBx.js → Memory-DJyWxXM0.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Ba2jSFl0.js → MobileBridge-CIKfLcfn.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CdclN769.js → MobileProjects-B1OZ0_b1.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BNKpFjlY.js → Mtc-CJHI9qG0.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-BlZJm1Tf.js → MtcAudit-cSrqcG3H.js} +1 -1
- package/src/assets/web-panel/assets/{Multisig-DcX0uBmT.js → Multisig-DTVo9GFR.js} +2 -2
- package/src/assets/web-panel/assets/{NLProgramming-dDIA3V_a.js → NLProgramming-NqfB2jLI.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BDsTuZ5O.js → Notes-MuMFfs67.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DzGuAAKt.js → NotificationSettings-B5ECNQNW.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DFfncYaU.js → Organization-Dn98sbrZ.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-O5JDtvyx.js → Overflow-Sl5FJV2c.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BTLl5rnf.js → P2P-58-TvQSE.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-M-jmJa1X.js → Permissions-BFtHCNck.js} +4 -4
- package/src/assets/web-panel/assets/PersonalDataHub-CVH9NAfL.css +1 -0
- package/src/assets/web-panel/assets/PersonalDataHub-Cu--XeWZ.js +1 -0
- package/src/assets/web-panel/assets/{Pipeline-DyXoKp_J.js → Pipeline-DWt_M98L.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Cvv_9eBQ.js → Privacy-BUX3yRZc.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BS2s_sxy.js → ProjectInit-wYWMWfxy.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CGfEpOL1.js → ProjectSettings-CIRbqu0F.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-BkuTxL3o.js → Projects-CDFkiEL3.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CkhZ5eii.js → Providers-CnPu1q45.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CvGT4zj2.js → QuickAsk-mwOI7Tc-.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-C-gDvXw6.js → Recommend-Ct6SM2HV.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-5zAdCzHT.js → Reputation-D7D6rp3d.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BsuDvMpO.js → Row-CX03nw4D.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-2QQb8p5X.js → RssFeed-BRyNIOp0.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CFT_6Ljj.js → Search-Dh-jwNaq.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BrK_KNJK.js → Security-C53OqK_S.js} +3 -3
- package/src/assets/web-panel/assets/Services-nXK7991F.js +2 -0
- package/src/assets/web-panel/assets/{Skeleton--WjfL2Ay.js → Skeleton-mVGGUSnx.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-1GWFYMGg.js → Skills-AVICQyr7.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-508cBkmT.js → Sla-BO-jiswJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DIeNRX6V.js → SpeechSettings-CQ73BtGw.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BQDW6gsX.js → SyncSettings-ozTu_ihm.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-D39SBKyi.js → Tasks-CwTiFnau.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-tsObCBe6.js → Templates-PJ-SYUEg.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-Ccpw-S6R.js → Tenant-DeckYbHe.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-CIn4gdxj.js +3 -0
- package/src/assets/web-panel/assets/Tokens-Bc40cdFh.js +1 -0
- package/src/assets/web-panel/assets/{Trigger-D4yonKuU.js → Trigger-BERtmWcc.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DHDcLjma.js → Trust-_ktoDZt-.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DBpW0j1p.js → UkeySign-DecT3_Zy.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BPr_46Py.js → VideoEditing-AqPQa7a7.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-4lfplIJV.js → Wallet-CL303fn9.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DI13wkez.js → WebAuthn-Bwy0YO-u.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CYbHpkQy.js → WorkflowEditor-Bbewn3S4.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BOH4vNJ7.js → chat-CDIxA8Km.js} +1 -1
- package/src/assets/web-panel/assets/{colors-qxXJ45GU.js → colors-rQIxLS12.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Cjb446yk.js → compact-item-1jZiKenx.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CulBut34.js → createContext-B3FjOuaT.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-DCnwRrNq.js → hasIn-dZ195iTN.js} +1 -1
- package/src/assets/web-panel/assets/{icons-DY9VpXfa.js → icons-BFHq5fEF.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7reeGYU.js → index--NxZmEUk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAy0ks7N.js → index-19d37fVJ.js} +4 -4
- package/src/assets/web-panel/assets/{index-CRsnuDGC.js → index-AHCOz9NC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CV_vlbaU.js → index-BByVZ5fI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CjJUQvIU.js → index-BC6wcYy3.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bp4_7Kow.js → index-BDZd1181.js} +1 -1
- package/src/assets/web-panel/assets/{index-DG1F9RZd.js → index-BOiuM69x.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpzjQM4w.js → index-Bq8fsYQ6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DC38ymaH.js → index-Br6-EXdw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BA8bUOYK.js → index-BsUXzEb2.js} +1 -1
- package/src/assets/web-panel/assets/{index-CW7a8O5w.js → index-BwIwGE8Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-D80IlXq1.js → index-Bx15E0JQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOFep_rA.js → index-BxnEM3za.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_029Hie.js → index-C0YzTiiB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BKNbteyC.js → index-C3SVypM3.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3bXm2aZ.js → index-C3rYUvdl.js} +1 -1
- package/src/assets/web-panel/assets/{index-PP5MLidC.js → index-C4jmdcCs.js} +1 -1
- package/src/assets/web-panel/assets/index-C5Ifo5EH.js +1 -0
- package/src/assets/web-panel/assets/{index-Bb1KdW4J.js → index-C8IGQbfQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBWR20mC.js → index-CDL_WWYl.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQXojJvN.js → index-CDkCJPtr.js} +1 -1
- package/src/assets/web-panel/assets/{index-hca2ku7U.js → index-D0DtKH7N.js} +1 -1
- package/src/assets/web-panel/assets/{index-DkYY9W4x.js → index-D3QDmYBa.js} +1 -1
- package/src/assets/web-panel/assets/{index-oGqObYfs.js → index-DP5rV4eS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCr0xH2Q.js → index-DQXt91YA.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cv2hQG7c.js → index-DRIQpe4j.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3ImsNgP.js → index-DWJ5GzxU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO-vFfxc.js → index-Dvg5ymRK.js} +1 -1
- package/src/assets/web-panel/assets/{index-SHmkRPZ_.js → index-DxwYB7eB.js} +1 -1
- package/src/assets/web-panel/assets/{index-Clxp_Rc0.js → index-U5Y4YNZC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DNooejFX.js → index-XDvSQBl5.js} +1 -1
- package/src/assets/web-panel/assets/{index-cP5FNe0q.js → index-aaHXeryL.js} +1 -1
- package/src/assets/web-panel/assets/index-efjrWv6y.js +1 -0
- package/src/assets/web-panel/assets/{index-DK5iJriy.js → index-hNSGbn-4.js} +1 -1
- package/src/assets/web-panel/assets/{index-6xtj6SRQ.js → index-kg4NgBuP.js} +1 -1
- package/src/assets/web-panel/assets/{index-Civlun-X.js → index-lSnZsO_d.js} +1 -1
- package/src/assets/web-panel/assets/{index-XMsNvoaz.js → index-sygYO1j4.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6-3yvOU.js → index-uL0KmFyf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFw2RtQ_.js → index-xKOyC0Cx.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Dp93Vlbv.js → initDefaultProps-GbvcoqYL.js} +1 -1
- package/src/assets/web-panel/assets/{motion-yBy7l6Td.js → motion-VM5YQ6Mf.js} +1 -1
- package/src/assets/web-panel/assets/{move-P6GgC8ZU.js → move-CJvGLYlg.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BMF4_2X_.js → omit-3oHJWwWB.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-C1bUV-iL.js → pickAttrs-BWBtl13u.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CpNGMWxW.js → placementArrow-CVESPqrs.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Bt3UzGUn.js → responsiveObserve-BOvUPufq.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B5t0Lgse.js → slide-W_P685Dw.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-nHmUS8yg.js → statusUtils-BnIQmxwT.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DgazP1mu.js → styleChecker-BMXx5Ie5.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BQ4jJS_s.js → useFlexGapSupport-DSJ4Pl17.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-C8aeIQfU.js → useFs-BPbHm7Yn.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DMH0ymoP.js → vnode-HDTJKu2B.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DRmMxFNC.js → zoom-BqKDJys9.js} +1 -1
- package/src/assets/web-panel/index.html +2 -2
- package/src/commands/ui.js +21 -3
- package/src/gateways/ws/message-dispatcher.js +68 -0
- package/src/gateways/ws/personal-data-hub-protocol.js +264 -0
- package/src/lib/personal-data-hub-wiring.js +425 -0
- package/src/runtime/agent-runtime.js +85 -11
- package/src/assets/web-panel/assets/AppLayout-BzzvYjpq.js +0 -3
- package/src/assets/web-panel/assets/Compliance-DCkF4hfd.js +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-nTHxy0Fw.js +0 -1
- package/src/assets/web-panel/assets/Services-DAmjLm-1.js +0 -2
- package/src/assets/web-panel/assets/Terminal-CgFg09NA.js +0 -3
- package/src/assets/web-panel/assets/Tokens-BBWOiqLq.js +0 -1
- package/src/assets/web-panel/assets/index-B0YFQoW_.js +0 -1
- package/src/assets/web-panel/assets/index-BX7snsTz.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./index-
|
|
1
|
+
import{i as e}from"./index-19d37fVJ.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{A as d}from"./index-
|
|
1
|
+
import{A as d}from"./index-19d37fVJ.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-BQ4jJS_s.js → useFlexGapSupport-DSJ4Pl17.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as o}from"./styleChecker-
|
|
1
|
+
import{d as o}from"./styleChecker-BMXx5Ie5.js";import{o as t,s}from"./vendor-M5lGV-wr.js";const r=(()=>{const e=s(!1);return t(()=>{e.value=o()}),e});export{r as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as d}from"./index-
|
|
1
|
+
import{u as d}from"./index-19d37fVJ.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{M as i,h as a,w as l}from"./index-
|
|
1
|
+
import{M as i,h as a,w as l}from"./index-19d37fVJ.js";import{a5 as o,k as d,C as g,F as f,A as p}from"./vendor-M5lGV-wr.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"),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 N(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>d(r)?!(r.type===g||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,N as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as o}from"./index-
|
|
1
|
+
import{K as o}from"./index-19d37fVJ.js";import{i as f}from"./motion-VM5YQ6Mf.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,9 +8,9 @@
|
|
|
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-19d37fVJ.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="./assets/vendor-M5lGV-wr.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="./assets/icons-
|
|
13
|
+
<link rel="modulepreload" crossorigin href="./assets/icons-BFHq5fEF.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-CfX1DEtk.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
package/src/commands/ui.js
CHANGED
|
@@ -24,12 +24,30 @@ export function registerUiCommand(program) {
|
|
|
24
24
|
)
|
|
25
25
|
.action(async (opts) => {
|
|
26
26
|
try {
|
|
27
|
+
// Allow env vars to override CLI defaults — host/token/port/uiMode.
|
|
28
|
+
// Use case: Android local terminal app pre-injects CC_UI_HOST=0.0.0.0
|
|
29
|
+
// + a per-install CC_UI_TOKEN so `cc ui` is reachable from other
|
|
30
|
+
// devices on the LAN without the user typing flags every time.
|
|
31
|
+
// Explicit CLI flags still win (commander stamps defaults if missing,
|
|
32
|
+
// so we treat the literal default-string as "unset" and pick env up).
|
|
33
|
+
const hostEnv = process.env.CC_UI_HOST;
|
|
34
|
+
const tokenEnv = process.env.CC_UI_TOKEN;
|
|
35
|
+
const portEnv = process.env.CC_UI_PORT;
|
|
36
|
+
const host =
|
|
37
|
+
opts.host && opts.host !== "127.0.0.1"
|
|
38
|
+
? opts.host
|
|
39
|
+
: hostEnv || opts.host;
|
|
40
|
+
const token = opts.token || tokenEnv || null;
|
|
41
|
+
const port = parseInt(
|
|
42
|
+
opts.port && opts.port !== "18810" ? opts.port : portEnv || opts.port,
|
|
43
|
+
10,
|
|
44
|
+
);
|
|
27
45
|
const runtime = createAgentRuntimeFactory().createUiRuntime({
|
|
28
|
-
port
|
|
46
|
+
port,
|
|
29
47
|
wsPort: parseInt(opts.wsPort, 10),
|
|
30
|
-
host
|
|
48
|
+
host,
|
|
31
49
|
open: opts.open,
|
|
32
|
-
token
|
|
50
|
+
token,
|
|
33
51
|
webPanelDir: opts.webPanelDir || null,
|
|
34
52
|
uiMode: opts.uiMode || "auto",
|
|
35
53
|
});
|
|
@@ -3,6 +3,10 @@ import {
|
|
|
3
3
|
SESSION_CORE_STREAMING_HANDLERS,
|
|
4
4
|
} from "./session-core-protocol.js";
|
|
5
5
|
import { VIDEO_HANDLERS, VIDEO_STREAMING_HANDLERS } from "./video-protocol.js";
|
|
6
|
+
import {
|
|
7
|
+
PERSONAL_DATA_HUB_HANDLERS,
|
|
8
|
+
PERSONAL_DATA_HUB_STREAMING_HANDLERS,
|
|
9
|
+
} from "./personal-data-hub-protocol.js";
|
|
6
10
|
|
|
7
11
|
export function createWsMessageDispatcher(server) {
|
|
8
12
|
return {
|
|
@@ -194,6 +198,70 @@ export function createWsMessageDispatcher(server) {
|
|
|
194
198
|
};
|
|
195
199
|
}
|
|
196
200
|
|
|
201
|
+
// Personal Data Hub topics — same 10 surfaces as the Electron IPC
|
|
202
|
+
// (see desktop-app-vue/src/main/ipc/personal-data-hub-ipc.js). Each
|
|
203
|
+
// handler returns { result } or { error }; we wrap with the standard
|
|
204
|
+
// response envelope so renderer code is shell-agnostic.
|
|
205
|
+
for (const hubType of Object.keys(PERSONAL_DATA_HUB_HANDLERS)) {
|
|
206
|
+
routes[hubType] = async () => {
|
|
207
|
+
try {
|
|
208
|
+
const out = await PERSONAL_DATA_HUB_HANDLERS[hubType](message);
|
|
209
|
+
if (out && out.error) {
|
|
210
|
+
server._send(ws, {
|
|
211
|
+
id,
|
|
212
|
+
type: "error",
|
|
213
|
+
code: "PERSONAL_DATA_HUB_ERROR",
|
|
214
|
+
message: out.error,
|
|
215
|
+
});
|
|
216
|
+
} else {
|
|
217
|
+
server._send(ws, {
|
|
218
|
+
id,
|
|
219
|
+
type: `${hubType}.response`,
|
|
220
|
+
result: out && out.result !== undefined ? out.result : out,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
} catch (err) {
|
|
224
|
+
server._send(ws, {
|
|
225
|
+
id,
|
|
226
|
+
type: "error",
|
|
227
|
+
code: "PERSONAL_DATA_HUB_ERROR",
|
|
228
|
+
message: err?.message || String(err),
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Phase 5.7 — streaming sync routes. Adapter progress events are
|
|
235
|
+
// pushed as `<topic>.event` messages tagged with the request id;
|
|
236
|
+
// the final report comes as `<topic>.end`.
|
|
237
|
+
for (const streamType of Object.keys(
|
|
238
|
+
PERSONAL_DATA_HUB_STREAMING_HANDLERS,
|
|
239
|
+
)) {
|
|
240
|
+
routes[streamType] = async () => {
|
|
241
|
+
const sender = (payload) => server._send(ws, { id, ...payload });
|
|
242
|
+
try {
|
|
243
|
+
const out = await PERSONAL_DATA_HUB_STREAMING_HANDLERS[streamType](
|
|
244
|
+
message,
|
|
245
|
+
sender,
|
|
246
|
+
);
|
|
247
|
+
server._send(ws, {
|
|
248
|
+
id,
|
|
249
|
+
type: `${streamType}.end`,
|
|
250
|
+
...(out && out.result !== undefined
|
|
251
|
+
? { result: out.result }
|
|
252
|
+
: out || {}),
|
|
253
|
+
});
|
|
254
|
+
} catch (err) {
|
|
255
|
+
server._send(ws, {
|
|
256
|
+
id,
|
|
257
|
+
type: "error",
|
|
258
|
+
code: "PERSONAL_DATA_HUB_STREAM_ERROR",
|
|
259
|
+
message: err?.message || String(err),
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
197
265
|
// Phase I — Hosted Session API (session-core, memory, beta, usage)
|
|
198
266
|
for (const sessionCoreType of Object.keys(SESSION_CORE_HANDLERS)) {
|
|
199
267
|
routes[sessionCoreType] = async () => {
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Personal Data Hub — WS protocol handlers.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the 10 IPC channels in
|
|
5
|
+
* desktop-app-vue/src/main/ipc/personal-data-hub-ipc.js so cc ui / web-shell
|
|
6
|
+
* users get the same surface. Per memory feedback_cross_shell_feature_pattern,
|
|
7
|
+
* any hub-facing renderer code can target EITHER:
|
|
8
|
+
*
|
|
9
|
+
* electron: window.electron.invoke("personal-data-hub:ask", {...})
|
|
10
|
+
* cc ui: ws.executeJson({ type: "personal-data-hub.ask", ... })
|
|
11
|
+
*
|
|
12
|
+
* Topic names use dot-case here (cc WS convention) vs the colon-style IPC.
|
|
13
|
+
* The renderer shell-helpers layer reconciles the two so SPA code can be
|
|
14
|
+
* shell-agnostic.
|
|
15
|
+
*
|
|
16
|
+
* Each handler returns { result } or { error }. The dispatcher wraps that
|
|
17
|
+
* with the standard envelope (id + type) before sending.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { getHub } from "../../lib/personal-data-hub-wiring.js";
|
|
21
|
+
|
|
22
|
+
async function withHub(fn) {
|
|
23
|
+
try {
|
|
24
|
+
const hub = await getHub();
|
|
25
|
+
const result = await fn(hub);
|
|
26
|
+
return { result };
|
|
27
|
+
} catch (err) {
|
|
28
|
+
return { error: err && err.message ? err.message : String(err) };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const PERSONAL_DATA_HUB_HANDLERS = {
|
|
33
|
+
"personal-data-hub.ask": async (msg) =>
|
|
34
|
+
withHub(async (hub) => {
|
|
35
|
+
if (!hub.engine) throw new Error("Analysis engine unavailable");
|
|
36
|
+
return await hub.engine.ask(msg.question, msg.options || {});
|
|
37
|
+
}),
|
|
38
|
+
|
|
39
|
+
"personal-data-hub.stats": async () =>
|
|
40
|
+
withHub((hub) => ({
|
|
41
|
+
vault: hub.vault.stats(),
|
|
42
|
+
adapters: hub.registry.list(),
|
|
43
|
+
hubDir: hub.hubDir,
|
|
44
|
+
llm: hub.llm ? { name: hub.llm.name, isLocal: hub.llm.isLocal } : null,
|
|
45
|
+
})),
|
|
46
|
+
|
|
47
|
+
"personal-data-hub.health": async () =>
|
|
48
|
+
withHub((hub) => ({
|
|
49
|
+
vault: { ok: !!hub.vault.db, schemaVersion: hub.vault.schemaVersion() },
|
|
50
|
+
llm: hub.llm
|
|
51
|
+
? { ok: true, isLocal: hub.llm.isLocal, name: hub.llm.name }
|
|
52
|
+
: { ok: false, reason: "LLM unavailable" },
|
|
53
|
+
kgSink: { ok: !!hub.kgSink },
|
|
54
|
+
ragSink: { ok: !!hub.ragSink },
|
|
55
|
+
})),
|
|
56
|
+
|
|
57
|
+
"personal-data-hub.list-adapters": async () =>
|
|
58
|
+
withHub((hub) => hub.registry.list()),
|
|
59
|
+
|
|
60
|
+
"personal-data-hub.sync-adapter": async (msg) =>
|
|
61
|
+
withHub(
|
|
62
|
+
async (hub) =>
|
|
63
|
+
await hub.registry.syncAdapter(msg.name, msg.options || {}),
|
|
64
|
+
),
|
|
65
|
+
|
|
66
|
+
"personal-data-hub.sync-all": async (msg) =>
|
|
67
|
+
withHub(async (hub) => await hub.registry.syncAll(msg.options || {})),
|
|
68
|
+
|
|
69
|
+
"personal-data-hub.register-mock": async (msg) =>
|
|
70
|
+
withHub((hub) => {
|
|
71
|
+
const a = hub.registerMockAdapter({
|
|
72
|
+
name: msg.name || "mock",
|
|
73
|
+
count: typeof msg.count === "number" ? msg.count : 20,
|
|
74
|
+
seed: typeof msg.seed === "number" ? msg.seed : 1,
|
|
75
|
+
});
|
|
76
|
+
return { name: a.name, version: a.version };
|
|
77
|
+
}),
|
|
78
|
+
|
|
79
|
+
"personal-data-hub.unregister": async (msg) =>
|
|
80
|
+
withHub((hub) => ({ ok: hub.registry.unregister(msg.name) })),
|
|
81
|
+
|
|
82
|
+
"personal-data-hub.query-events": async (msg) =>
|
|
83
|
+
withHub((hub) =>
|
|
84
|
+
hub.vault.queryEvents({
|
|
85
|
+
subtype: msg.subtype,
|
|
86
|
+
since: msg.since,
|
|
87
|
+
until: msg.until,
|
|
88
|
+
actor: msg.actor,
|
|
89
|
+
adapter: msg.adapter,
|
|
90
|
+
limit: msg.limit,
|
|
91
|
+
}),
|
|
92
|
+
),
|
|
93
|
+
|
|
94
|
+
"personal-data-hub.recent-audit": async (msg) =>
|
|
95
|
+
withHub((hub) =>
|
|
96
|
+
hub.vault.queryAudit({
|
|
97
|
+
since: msg.since,
|
|
98
|
+
action: msg.action,
|
|
99
|
+
limit: msg.limit,
|
|
100
|
+
}),
|
|
101
|
+
),
|
|
102
|
+
|
|
103
|
+
// ─── Phase 5.6 — email config + event detail ─────────────────────────
|
|
104
|
+
|
|
105
|
+
"personal-data-hub.test-email-auth": async (msg) =>
|
|
106
|
+
withHub(async (hub) => await hub.testEmailAuth({ account: msg.account })),
|
|
107
|
+
|
|
108
|
+
"personal-data-hub.register-email": async (msg) =>
|
|
109
|
+
withHub(
|
|
110
|
+
async (hub) =>
|
|
111
|
+
await hub.registerEmailAdapter({
|
|
112
|
+
account: msg.account,
|
|
113
|
+
opts: msg.opts || {},
|
|
114
|
+
}),
|
|
115
|
+
),
|
|
116
|
+
|
|
117
|
+
"personal-data-hub.unregister-email": async (msg) =>
|
|
118
|
+
withHub(async (hub) => await hub.unregisterEmailAdapter(msg.email)),
|
|
119
|
+
|
|
120
|
+
"personal-data-hub.list-email-accounts": async () =>
|
|
121
|
+
withHub((hub) => hub.listEmailAccounts()),
|
|
122
|
+
|
|
123
|
+
"personal-data-hub.event-detail": async (msg) =>
|
|
124
|
+
withHub((hub) => hub.eventDetail(msg.eventId)),
|
|
125
|
+
|
|
126
|
+
// ─── Phase 6 — Alipay bill import ─────────────────────────────────────
|
|
127
|
+
|
|
128
|
+
"personal-data-hub.register-alipay": async (msg) =>
|
|
129
|
+
withHub(
|
|
130
|
+
async (hub) =>
|
|
131
|
+
await hub.registerAlipayAdapter({
|
|
132
|
+
account: msg.account,
|
|
133
|
+
opts: msg.opts || {},
|
|
134
|
+
}),
|
|
135
|
+
),
|
|
136
|
+
|
|
137
|
+
"personal-data-hub.unregister-alipay": async (msg) =>
|
|
138
|
+
withHub(async (hub) => await hub.unregisterAlipayAdapter(msg.email)),
|
|
139
|
+
|
|
140
|
+
"personal-data-hub.list-alipay-accounts": async () =>
|
|
141
|
+
withHub((hub) => hub.listAlipayAccounts()),
|
|
142
|
+
|
|
143
|
+
"personal-data-hub.import-alipay-bill": async (msg) =>
|
|
144
|
+
withHub(
|
|
145
|
+
async (hub) =>
|
|
146
|
+
await hub.importAlipayBill({
|
|
147
|
+
zipPath: msg.zipPath,
|
|
148
|
+
csvPath: msg.csvPath,
|
|
149
|
+
zipPassword: msg.zipPassword,
|
|
150
|
+
}),
|
|
151
|
+
),
|
|
152
|
+
|
|
153
|
+
// ─── Phase 8 — EntityResolver review / merge / unmerge ───────────────
|
|
154
|
+
|
|
155
|
+
"personal-data-hub.review-queue-list": async (msg) =>
|
|
156
|
+
withHub((hub) => hub.vault.listReviewQueue({ limit: msg.limit || 50 })),
|
|
157
|
+
|
|
158
|
+
"personal-data-hub.review-decision": async (msg) =>
|
|
159
|
+
withHub((hub) => {
|
|
160
|
+
if (!hub.entityResolver) throw new Error("EntityResolver not wired");
|
|
161
|
+
return hub.entityResolver.applyUserDecision({
|
|
162
|
+
reviewId: msg.reviewId,
|
|
163
|
+
decision: msg.decision,
|
|
164
|
+
});
|
|
165
|
+
}),
|
|
166
|
+
|
|
167
|
+
"personal-data-hub.manual-merge": async (msg) =>
|
|
168
|
+
withHub((hub) => {
|
|
169
|
+
if (!hub.entityResolver) throw new Error("EntityResolver not wired");
|
|
170
|
+
return hub.entityResolver.manualMerge({ aId: msg.aId, bId: msg.bId });
|
|
171
|
+
}),
|
|
172
|
+
|
|
173
|
+
"personal-data-hub.manual-unmerge": async (msg) =>
|
|
174
|
+
withHub((hub) => {
|
|
175
|
+
if (!hub.entityResolver) throw new Error("EntityResolver not wired");
|
|
176
|
+
return hub.entityResolver.manualUnmerge(msg.personId);
|
|
177
|
+
}),
|
|
178
|
+
|
|
179
|
+
"personal-data-hub.resolver-drain": async (msg) =>
|
|
180
|
+
withHub(async (hub) => {
|
|
181
|
+
if (!hub.entityResolver) throw new Error("EntityResolver not wired");
|
|
182
|
+
return await hub.entityResolver.drain({ limit: msg.limit || 50 });
|
|
183
|
+
}),
|
|
184
|
+
|
|
185
|
+
"personal-data-hub.resolver-stats": async () =>
|
|
186
|
+
withHub((hub) => ({
|
|
187
|
+
queue: hub.vault.resolveQueueStats(),
|
|
188
|
+
mergeGroups: hub.vault.stats().mergeGroups,
|
|
189
|
+
reviewQueue:
|
|
190
|
+
hub.vault.listReviewQueue({ limit: 1 }).length > 0
|
|
191
|
+
? hub.vault.listReviewQueue({ limit: 1000 }).length
|
|
192
|
+
: 0,
|
|
193
|
+
})),
|
|
194
|
+
|
|
195
|
+
"personal-data-hub.merge-group-members": async (msg) =>
|
|
196
|
+
withHub((hub) => hub.vault.getMergeGroupMembers(msg.personId)),
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Phase 5.7 — streaming handlers. Same call pattern as session-core
|
|
201
|
+
* streaming: handler receives `sender(payload)` to push intermediate
|
|
202
|
+
* `{ type: "personal-data-hub.<topic>.event", ... }` messages while
|
|
203
|
+
* sync is in flight, then the dispatcher wraps the final return with
|
|
204
|
+
* `.end`. Adapter progress phases (connecting / fetching / done / error)
|
|
205
|
+
* surface here; UI subscribes via the composable.
|
|
206
|
+
*/
|
|
207
|
+
export const PERSONAL_DATA_HUB_STREAMING_HANDLERS = {
|
|
208
|
+
"personal-data-hub.sync-adapter-stream": async (msg, sender) => {
|
|
209
|
+
const hub = await getHub();
|
|
210
|
+
const original = hub.registry.onSyncEvent;
|
|
211
|
+
hub.registry.onSyncEvent = (evt) => {
|
|
212
|
+
try {
|
|
213
|
+
sender({
|
|
214
|
+
type: "personal-data-hub.sync-adapter-stream.event",
|
|
215
|
+
event: evt,
|
|
216
|
+
});
|
|
217
|
+
} catch (_e) {}
|
|
218
|
+
if (typeof original === "function") {
|
|
219
|
+
try {
|
|
220
|
+
original(evt);
|
|
221
|
+
} catch (_e) {}
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
try {
|
|
225
|
+
const report = await hub.registry.syncAdapter(
|
|
226
|
+
msg.name,
|
|
227
|
+
msg.options || {},
|
|
228
|
+
);
|
|
229
|
+
return { result: report };
|
|
230
|
+
} finally {
|
|
231
|
+
hub.registry.onSyncEvent = original;
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
"personal-data-hub.sync-all-stream": async (msg, sender) => {
|
|
236
|
+
const hub = await getHub();
|
|
237
|
+
const original = hub.registry.onSyncEvent;
|
|
238
|
+
hub.registry.onSyncEvent = (evt) => {
|
|
239
|
+
try {
|
|
240
|
+
sender({ type: "personal-data-hub.sync-all-stream.event", event: evt });
|
|
241
|
+
} catch (_e) {}
|
|
242
|
+
if (typeof original === "function") {
|
|
243
|
+
try {
|
|
244
|
+
original(evt);
|
|
245
|
+
} catch (_e) {}
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
try {
|
|
249
|
+
const reports = await hub.registry.syncAll(msg.options || {});
|
|
250
|
+
return { result: reports };
|
|
251
|
+
} finally {
|
|
252
|
+
hub.registry.onSyncEvent = original;
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Topic names this protocol owns — exported so the dispatcher can list /
|
|
259
|
+
* advertise them to clients via a capabilities probe.
|
|
260
|
+
*/
|
|
261
|
+
export const PERSONAL_DATA_HUB_TOPICS = Object.freeze([
|
|
262
|
+
...Object.keys(PERSONAL_DATA_HUB_HANDLERS),
|
|
263
|
+
...Object.keys(PERSONAL_DATA_HUB_STREAMING_HANDLERS),
|
|
264
|
+
]);
|