chainlesschain 0.162.114 → 0.162.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-0-uMzHS0.js → AIOps-Co3Wa2si.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DIZPfP0j.js → ActionButton-CLu_iLWH.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-D0XaT-HY.js → Analytics-BZM53XMx.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BTRaqYvd.js → AppLayout-BvWMuVj5.js} +3 -3
- package/src/assets/web-panel/assets/{Audit-CNf5Kaoi.js → Audit-LnZR0-SB.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BAo4Hi0L.js → Backup-m1_KWvdD.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-Cvl0T59f.js → BaseInput-DCOyDzK5.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Cun14ni3.js → Chat-BxctrF91.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CVSvw44R.js → ChatBubbleRenderer-Cr-ifTsG.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DJdTjyls.js → Checkbox-CiI-q7XC.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Bz_l_yn_.js → Codegen-Bs5RpmWs.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Bht2QpqM.js → Col-By1dCa5E.js} +1 -1
- package/src/assets/web-panel/assets/{Community-7KcO0kT1.js → Community-WuZZQrIQ.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B7rBvHIs.js → Compact-Bgjv17zY.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BuxUJTnd.js → Compliance-CANmPNTe.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CJdjs2tJ.js → Cowork-B5vtDpAA.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-BZFJ7-YN.js → Cron-CD1EDrV4.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BKsLLmuh.js → Crosschain-C8VDvGgO.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BxRlZh9g.js → DID-DpZV0N2H.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-B6RppX5d.js → Dashboard-NhU8jHSF.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DKtl6tbR.js → Dropdown-D-r8yZE9.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BRyFvNHM.js → EmailListRenderer-DG89eV-l.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-C99TnWli.js → FamilyGuardDashboard-G-b864Cs.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-lC9Io-Wx.js → Federation-yBmOj1ob.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-kTzkIiAH.js → FormItemContext-Cb7_kwNJ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-ffjSPeHn.js → GenericCardRenderer-DH-hOAyY.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Ch-eo0ft.js → Git-DsxDUo_n.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CSlXyDt9.js → Governance-9tswXx9m.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-innJ4CHB.js → Inference-BBp_JKRI.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BoKWXlKH.js → KnowledgeGraph-Dh1Hy3KR.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Bvu1ZVlJ.js → Logs-B4dKW6iL.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-Bz5plU9l.js → Marketplace-BwG7IJMb.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Ce2O172z.js → McpTools-Bkem_Aad.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-CVTPzpDT.js → Memory--XBiW9hE.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DroRONe3.js → MobileBridge-Cw3bfWS4.js} +2 -2
- package/src/assets/web-panel/assets/MobileProjects-DxtImZQU.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-BLe-_MDX.js → Mtc-BGF20OtO.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-Cx6CIX_g.js → MtcAudit-D7z4gsQ5.js} +6 -6
- package/src/assets/web-panel/assets/{Multisig-OEeP6h30.js → Multisig-yXwos6j_.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-B79aNNrY.js → NLProgramming-CDHJQX6y.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BzKbClTh.js → Notes-D39k9gda.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-6BcdjMJk.js → NotificationSettings-DRPq8tRI.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BdA4JzRg.js → OrderTableRenderer-D2hEsaLV.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-B_g6tN2h.js → Organization--o8Lvsg2.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BPeDct0h.js → Overflow-D2ohI9Qx.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-AbEH8Ad6.js → P2P-2c8cEXWp.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DTYIEFuT.js → PdhVaultBrowser-D7NaNkzj.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-Mtl6DRWC.js → Permissions-ypORwVpA.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CrfCdPgN.js → PersonalDataHub-CwGL8rYc.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-Znd89-so.js → Pipeline-sOxtzc6E.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-1QK70XJJ.js → Privacy-DQn-uEJl.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Dbh6fHo4.js → ProjectInit-8C5fy5dR.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CtqWEUUX.js → ProjectSettings-CX_i2PB9.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-C1vdepHb.js → Projects-CHTItBCE.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-VRTSkt2N.js → Providers-hTVigloe.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CP2dz_95.js → QuickAsk-BqHj37NO.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Bc81SmNo.js → Recommend-W6Fz6lz7.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-cRunHZiV.js → Reputation-BgEa2pxb.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BwL7ApAT.js → Row-DyIFWI6T.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BVbyxvzm.js → RssFeed-CEYCVpMw.js} +3 -3
- package/src/assets/web-panel/assets/{Search-D5PgTvOP.js → Search-zVLBmQ7o.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Ddt1DCcC.js → Security-CqsG8Ps9.js} +3 -3
- package/src/assets/web-panel/assets/{Services-6UaJxmZU.js → Services-BfBS_Jgz.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DFRbEQwp.js → Skeleton-Soo_Vk86.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-5yq43K-X.js → Skills-PuZUk7l4.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-yMroQlH9.js → Sla-CyXFxluF.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-B2S3Iamq.js → SpeechSettings-Bix3Aslu.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BkKtXU71.js → SyncSettings-CIpNxBVI.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-CBtNUwgq.js → Tasks-S3P_gUGK.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-C2drh0s2.js → Templates-ApPjFp6V.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BLk2CVEv.js → Tenant-CA39QBQx.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-mElJ0fhK.js → Terminal-CZCQVy4D.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D4E9FDsp.js → TimelineRenderer-BH_bLWth.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Cgmf0-_P.js → Tokens-CnM7BBQo.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BRlJLDbx.js → Trigger-BaTkvjag.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-C6RUSQhG.js → Trust-BL5_D9F2.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Chi7u_hM.js → UkeySign-RL5tPg28.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-4-bo8EmV.js → VideoEditing-DpziQ6j6.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-B2hSD9eY.js → Wallet-C5TJX6y1.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-D8xa8fun.js → WebAuthn-BRmIn8F_.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-Db9dxskT.js → WorkflowEditor-Dcq3e-ik.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CXYLRZpi.js → chat-CIxM8WKc.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CaKoXOVA.js → colors-C4KulwfK.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Br5NvOwQ.js → compact-item-BuSPdvu3.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B-yHAw0V.js → createContext-DnkNir9Q.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CMQKGI8R.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CqrdCz3g.js → hasIn-Cf4nLc1Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-1jqJ37zO.js → index-2EWeBL-U.js} +1 -1
- package/src/assets/web-panel/assets/{index-D98MYD3m.js → index-B0Mg9TNh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaQkxUNc.js → index-BKxfssGi.js} +1 -1
- package/src/assets/web-panel/assets/{index-8ghdlyXM.js → index-BSSHH2wV.js} +1 -1
- package/src/assets/web-panel/assets/{index-nT_CmIwR.js → index-BhJdIewr.js} +1 -1
- package/src/assets/web-panel/assets/{index-BjAkyQXg.js → index-BiSVvB5h.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzpkjYz4.js → index-BixeTMRH.js} +1 -1
- package/src/assets/web-panel/assets/{index-D39l1vpr.js → index-BkuD99JZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVt4C93w.js → index-Bxrdsatm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DirWkR61.js → index-Bz60EXNV.js} +1 -1
- package/src/assets/web-panel/assets/{index-W_LrSwhD.js → index-C3K7gFx4.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuaLeS0m.js → index-CBAXN3jR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHwefCFJ.js → index-CIMAqOlD.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWxntLTd.js → index-CWDu1oDR.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6ngQeA0.js → index-CZrWQUeU.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ds4JSZQz.js → index-Ch5ijBA1.js} +1 -1
- package/src/assets/web-panel/assets/{index-CvJruKpV.js → index-ClY2B2K3.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQDhGgK-.js → index-Cq1Fi_sP.js} +1 -1
- package/src/assets/web-panel/assets/{index-hsgVTIGX.js → index-CrjJWis4.js} +1 -1
- package/src/assets/web-panel/assets/index-D1b1GHRk.js +1 -0
- package/src/assets/web-panel/assets/{index-BQcTQlrC.js → index-D6_QgZN5.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRlkm8k6.js → index-DGVc7PRP.js} +1 -1
- package/src/assets/web-panel/assets/index-DGZzQZUz.js +1 -0
- package/src/assets/web-panel/assets/{index-CIZKEANZ.js → index-DLj6Tgel.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbZxkCWu.js → index-DUZ5Kool.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1IlWIb6.js → index-DXmlFKkG.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeE50mEy.js → index-DdA5Ua1b.js} +1 -1
- package/src/assets/web-panel/assets/{index-CvFe9Qyg.js → index-DeMVCFm4.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZB70zTAh.js → index-DeV7mBjK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeQiNau_.js → index-DjRLVmY5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGtE2LX-.js → index-Djm5GtZl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BrruO38Y.js → index-DlHHHyRx.js} +3 -3
- package/src/assets/web-panel/assets/{index-DZ9ISv1n.js → index-DyWheeVw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CMecOYUY.js → index-E9E5_8nm.js} +1 -1
- package/src/assets/web-panel/assets/{index-KRKDnsR0.js → index-EdjA-3Bc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmV-MOO5.js → index-LeyWnzub.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbrcBvEd.js → index-N1ncDYAO.js} +1 -1
- package/src/assets/web-panel/assets/{index-Byv9CEgj.js → index-xUqyfQDD.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE2mB1ae.js → index-yzjY8Axn.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CikG-5bi.js → initDefaultProps--8dT0H6B.js} +1 -1
- package/src/assets/web-panel/assets/{motion--tkkEE3m.js → motion-D90Oz3kN.js} +1 -1
- package/src/assets/web-panel/assets/{move-D6xAZefU.js → move-CXTvl7NU.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CsD8Wwta.js → omit-0trPxlmr.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D4qa94u9.js → pickAttrs-CgAAFR7h.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-9fx4sI6E.js → placementArrow-CS-hpoJS.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DwYJKWhG.js → responsiveObserve-9S3fBAtz.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DFxU8IG1.js → slide-B-R8yXs_.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DPAkc9NC.js → statusUtils-DQiprWuZ.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-D-ByG8n4.js → styleChecker-02H_AFJW.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DwVLaYMd.js → useFlexGapSupport-9DGfLuf2.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CSyqOEiA.js → useFs-CrPyzwar.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-B7qEu3ar.js → usePersonalDataHub-BeLgaZq9.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-4YgwyfPJ.js → vnode-Cln6ZUUD.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CPUWjtMS.js → zoom-BauTGPPs.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/hub.js +46 -9
- package/src/lib/git-integration.js +8 -2
- package/src/lib/hub-llm-client.js +86 -29
- package/src/assets/web-panel/assets/MobileProjects-Bfp8_lJh.js +0 -1
- package/src/assets/web-panel/assets/devWarning-B9dp57_Q.js +0 -1
- package/src/assets/web-panel/assets/index-Bd3PIxeQ.js +0 -1
- package/src/assets/web-panel/assets/index-WpnbyTfq.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as n}from"./index-
|
|
1
|
+
import{K as n}from"./index-DlHHHyRx.js";import{i as e}from"./motion-D90Oz3kN.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-DlHHHyRx.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-DlHHHyRx.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-DwVLaYMd.js → useFlexGapSupport-9DGfLuf2.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o,s as t}from"./vendor-BvqAck49.js";import{d as s}from"./styleChecker-
|
|
1
|
+
import{o,s as t}from"./vendor-BvqAck49.js";import{d as s}from"./styleChecker-02H_AFJW.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-DlHHHyRx.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-DlHHHyRx.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{M as i,h as a,w as l}from"./index-
|
|
1
|
+
import{M as i,h as a,w as l}from"./index-DlHHHyRx.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-BvqAck49.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 N(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,N as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as o}from"./index-
|
|
1
|
+
import{K as o}from"./index-DlHHHyRx.js";import{i as f}from"./motion-D90Oz3kN.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-DlHHHyRx.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="./assets/vendor-BvqAck49.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="./assets/icons-DP3uiYxy.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
|
package/src/commands/hub.js
CHANGED
|
@@ -20,6 +20,8 @@ import chalk from "chalk";
|
|
|
20
20
|
import ora from "ora";
|
|
21
21
|
import { logger } from "../lib/logger.js";
|
|
22
22
|
import { getHub, getHubMinimal } from "../lib/personal-data-hub-wiring.js";
|
|
23
|
+
import { loadConfig } from "../lib/config-manager.js";
|
|
24
|
+
import { isCloudHubConfigured } from "../lib/hub-llm-client.js";
|
|
23
25
|
import { importPdh } from "../lib/pdh-load-error.js";
|
|
24
26
|
import { getAIChatWizard } from "../lib/personal-data-hub-aichat-wizard.js";
|
|
25
27
|
|
|
@@ -77,11 +79,19 @@ async function cmdAsk(question, options) {
|
|
|
77
79
|
if (!hub.engine) throw new Error("Analysis engine unavailable");
|
|
78
80
|
// 推文 §三道锁第二把 "默认不许问云端" — acceptNonLocal 默认 false (拒云)。
|
|
79
81
|
// 优先 --accept-non-local CLI 旗,其次 env CC_HUB_ALLOW_NON_LOCAL (Android UI
|
|
80
|
-
// 拒云 toggle 通过 LocalCcRunner.askQuestion 透传)
|
|
82
|
+
// 拒云 toggle 通过 LocalCcRunner.askQuestion 透传),再次为 PERSISTENT config
|
|
83
|
+
// `hub.llm` 选了云后端时的常驻同意 (一次性 `cc config set hub.llm …` 即informed
|
|
84
|
+
// opt-in,免去每次 --accept-non-local);否则维持 false。
|
|
81
85
|
const envAllow =
|
|
82
86
|
process.env.CC_HUB_ALLOW_NON_LOCAL === "1" ||
|
|
83
87
|
process.env.CC_HUB_ALLOW_NON_LOCAL === "true";
|
|
84
|
-
|
|
88
|
+
let cfgCloudHub = false;
|
|
89
|
+
try {
|
|
90
|
+
cfgCloudHub = isCloudHubConfigured(loadConfig());
|
|
91
|
+
} catch {
|
|
92
|
+
cfgCloudHub = false; // fail-closed: unreadable config → keep cloud denied
|
|
93
|
+
}
|
|
94
|
+
const acceptNonLocal = !!options.acceptNonLocal || envAllow || cfgCloudHub;
|
|
85
95
|
// Per-call budget overrides for small-model callers (Android Qwen2.5-1.5B
|
|
86
96
|
// passes --max-facts 20 --max-query-limit 50 to keep prompt ~1.5K tokens
|
|
87
97
|
// and stay under the model's effective instruction-following window).
|
|
@@ -1306,9 +1316,9 @@ async function cmdCollectWechat(options) {
|
|
|
1306
1316
|
`enmm-dec-${process.pid}.db`,
|
|
1307
1317
|
);
|
|
1308
1318
|
fs.writeFileSync(tmp, result.decrypted);
|
|
1309
|
-
let
|
|
1319
|
+
let parsed;
|
|
1310
1320
|
try {
|
|
1311
|
-
|
|
1321
|
+
parsed = wx.parseEvents(Database, tmp, options.self || "self");
|
|
1312
1322
|
} finally {
|
|
1313
1323
|
try {
|
|
1314
1324
|
fs.unlinkSync(tmp);
|
|
@@ -1316,7 +1326,27 @@ async function cmdCollectWechat(options) {
|
|
|
1316
1326
|
/* wipe plaintext */
|
|
1317
1327
|
}
|
|
1318
1328
|
}
|
|
1329
|
+
// parseEvents now returns { events, persons, topics } (bare-array shape
|
|
1330
|
+
// from older bundles tolerated for forward-compat).
|
|
1331
|
+
const events = Array.isArray(parsed) ? parsed : parsed.events || [];
|
|
1332
|
+
const persons = Array.isArray(parsed) ? [] : parsed.persons || [];
|
|
1333
|
+
const topics = Array.isArray(parsed) ? [] : parsed.topics || [];
|
|
1319
1334
|
|
|
1335
|
+
// Named contacts + group topics first so events resolve names / interests.
|
|
1336
|
+
for (const p of persons) {
|
|
1337
|
+
try {
|
|
1338
|
+
vault.putPerson(p);
|
|
1339
|
+
} catch {
|
|
1340
|
+
/* dup / optional */
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
for (const t of topics) {
|
|
1344
|
+
try {
|
|
1345
|
+
if (typeof vault.putTopic === "function") vault.putTopic(t);
|
|
1346
|
+
} catch {
|
|
1347
|
+
/* dup / optional */
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1320
1350
|
let ingested = 0;
|
|
1321
1351
|
for (const ev of events) {
|
|
1322
1352
|
try {
|
|
@@ -1330,6 +1360,8 @@ async function cmdCollectWechat(options) {
|
|
|
1330
1360
|
ok: true,
|
|
1331
1361
|
cfg: result.cfg,
|
|
1332
1362
|
messages: events.length,
|
|
1363
|
+
persons: persons.length,
|
|
1364
|
+
topics: topics.length,
|
|
1333
1365
|
ingested,
|
|
1334
1366
|
};
|
|
1335
1367
|
if (spinner)
|
|
@@ -2688,11 +2720,16 @@ export function registerHubCommand(program) {
|
|
|
2688
2720
|
.option("--json", "Output JSON")
|
|
2689
2721
|
.addHelpText(
|
|
2690
2722
|
"after",
|
|
2691
|
-
"\nLLM backend: defaults to local Ollama (privacy). To use a
|
|
2692
|
-
"
|
|
2693
|
-
"
|
|
2694
|
-
"
|
|
2695
|
-
"
|
|
2723
|
+
"\nLLM backend: defaults to local Ollama (privacy). To use a cloud provider:\n" +
|
|
2724
|
+
" • Persistent (recommended): cc config set hub.llm config\n" +
|
|
2725
|
+
" → uses cc config's llm.{provider,model,baseUrl,apiKey}; no flag/env needed,\n" +
|
|
2726
|
+
" and the standing config opt-in also authorizes off-device egress.\n" +
|
|
2727
|
+
" Separate key/account for the hub? set an object instead:\n" +
|
|
2728
|
+
" cc config set hub.llm.provider volcengine\n" +
|
|
2729
|
+
" cc config set hub.llm.model doubao-seed-2-1-pro-260628\n" +
|
|
2730
|
+
" cc config set hub.llm.apiKeyEnv MY_HUB_KEY (or hub.llm.apiKey <key>)\n" +
|
|
2731
|
+
" • Ephemeral: CC_HUB_LLM=config|<provider> cc hub ask … --accept-non-local\n" +
|
|
2732
|
+
" (a one-off override still needs an explicit egress flag).",
|
|
2696
2733
|
)
|
|
2697
2734
|
.action(cmdAsk);
|
|
2698
2735
|
|
|
@@ -153,15 +153,21 @@ export function gitLog(dir, limit = 10) {
|
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
try {
|
|
156
|
+
// Subject (%s) is free text that often contains "|"; keep it LAST so a
|
|
157
|
+
// pipe in the subject can't shift the date/author fields, then re-join the
|
|
158
|
+
// remainder. (Field order kept as %X|%X — Windows cmd.exe expands adjacent
|
|
159
|
+
// %VAR% pairs, so a control-char separator like %x1f is not portable here.)
|
|
156
160
|
const output = gitExec(
|
|
157
|
-
`log --oneline --no-decorate -${limit} --format="%H|%h|%
|
|
161
|
+
`log --oneline --no-decorate -${limit} --format="%H|%h|%ai|%an|%s"`,
|
|
158
162
|
dir,
|
|
159
163
|
);
|
|
160
164
|
return output
|
|
161
165
|
.split("\n")
|
|
162
166
|
.filter(Boolean)
|
|
163
167
|
.map((line) => {
|
|
164
|
-
const
|
|
168
|
+
const parts = line.split("|");
|
|
169
|
+
const [hash, shortHash, date, author] = parts;
|
|
170
|
+
const subject = parts.slice(4).join("|");
|
|
165
171
|
return { hash, shortHash, subject, date, author };
|
|
166
172
|
});
|
|
167
173
|
} catch {
|
|
@@ -10,24 +10,29 @@
|
|
|
10
10
|
* retrieval works but the final LLM call fails. This adapter gives the CLI the
|
|
11
11
|
* same "honor the user's active provider" behavior the desktop has.
|
|
12
12
|
*
|
|
13
|
-
* Privacy: OPT-IN ONLY
|
|
13
|
+
* Privacy: OPT-IN ONLY. The backend is selected by env `CC_HUB_LLM` (ephemeral,
|
|
14
|
+
* per-invocation) OR persistent config `hub.llm` (set once via
|
|
15
|
+
* `cc config set hub.llm config`). When BOTH are unset this returns null and
|
|
14
16
|
* the caller keeps the safe local-Ollama default (the §11.2 privacy promise:
|
|
15
17
|
* personal data stays on-device unless the user explicitly opts in). The
|
|
16
18
|
* client always reports `isLocal: false`, so the AnalysisEngine still refuses
|
|
17
|
-
* to USE it unless the `ask` command
|
|
18
|
-
*
|
|
19
|
-
*
|
|
19
|
+
* to USE it unless the `ask` command authorizes egress — via --accept-non-local,
|
|
20
|
+
* env `CC_HUB_ALLOW_NON_LOCAL`, or (for a PERSISTENT cloud backend) the standing
|
|
21
|
+
* consent implied by `hub.llm` being set in config (see `isCloudHubConfigured`).
|
|
22
|
+
* Two independent gates: this one chooses the backend, that one authorizes
|
|
23
|
+
* sending data off-device.
|
|
20
24
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* value unset / ollama / local / off / 0 -> null (local Ollama default)
|
|
26
|
+
* value = config | auto | on | 1 -> config.llm.{provider,model,baseUrl,apiKey}
|
|
27
|
+
* value = <provider> -> that provider; reuse config
|
|
28
|
+
* creds when config.llm.provider
|
|
29
|
+
* matches, else provider default
|
|
30
|
+
* baseUrl + key from env/config
|
|
31
|
+
* where `value` = env CC_HUB_LLM (wins) || config.hub.llm.
|
|
27
32
|
*
|
|
28
33
|
* Returns null (→ caller falls back to OllamaClient) when it can't build a
|
|
29
|
-
* usable cloud client:
|
|
30
|
-
* API key. Never throws at build time — a bad
|
|
34
|
+
* usable cloud client: backend resolves to ollama, or a cloud provider has no
|
|
35
|
+
* API key. Never throws at build time — a bad value just keeps the local
|
|
31
36
|
* default rather than bricking `cc hub`.
|
|
32
37
|
*
|
|
33
38
|
* Contract (mirrors pdh OllamaClient): `{ name, isLocal, chat(messages, opts)
|
|
@@ -50,33 +55,68 @@ const LOCAL_SENTINELS = new Set([
|
|
|
50
55
|
]);
|
|
51
56
|
const CONFIG_SENTINELS = new Set(["config", "auto", "on", "1", "true", "yes"]);
|
|
52
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Resolve the hub-LLM "spec" — what backend the user selected and how.
|
|
60
|
+
* env `CC_HUB_LLM` (ephemeral) wins over persistent config `hub.llm`.
|
|
61
|
+
* - `hub.llm` as a STRING → "config" | "<provider>" (creds reuse config.llm/env)
|
|
62
|
+
* - `hub.llm` as an OBJECT → { provider, model, baseUrl, apiKey, apiKeyEnv }
|
|
63
|
+
* (self-contained; lets the hub use a DIFFERENT key/account than cc-wide llm)
|
|
64
|
+
* @returns {{kind:"string"|"object", value:any, source:"env"|"config"}|null}
|
|
65
|
+
*/
|
|
66
|
+
export function resolveHubSpec(config = {}, env = process.env) {
|
|
67
|
+
const envVal = String((env && env.CC_HUB_LLM) || "").trim();
|
|
68
|
+
if (envVal)
|
|
69
|
+
return { kind: "string", value: envVal.toLowerCase(), source: "env" };
|
|
70
|
+
const h = config && config.hub && config.hub.llm;
|
|
71
|
+
if (h == null) return null;
|
|
72
|
+
if (typeof h === "object") {
|
|
73
|
+
return { kind: "object", value: h, source: "config" };
|
|
74
|
+
}
|
|
75
|
+
const s = String(h).trim();
|
|
76
|
+
if (!s) return null;
|
|
77
|
+
return { kind: "string", value: s.toLowerCase(), source: "config" };
|
|
78
|
+
}
|
|
79
|
+
|
|
53
80
|
/**
|
|
54
81
|
* @param {{config?: object, env?: object}} [args]
|
|
55
82
|
* @returns {{name:string,isLocal:boolean,chat:Function}|null}
|
|
56
83
|
*/
|
|
57
84
|
export function buildCliHubLLM({ config = {}, env = process.env } = {}) {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
.toLowerCase();
|
|
61
|
-
if (LOCAL_SENTINELS.has(raw)) return null;
|
|
85
|
+
const spec = resolveHubSpec(config, env);
|
|
86
|
+
if (!spec) return null;
|
|
62
87
|
|
|
63
88
|
const cfgLlm = (config && config.llm) || {};
|
|
89
|
+
const sameAs = (p) => String(cfgLlm.provider || "").toLowerCase() === p;
|
|
64
90
|
let provider, model, baseUrl, apiKey;
|
|
65
91
|
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
92
|
+
if (spec.kind === "object") {
|
|
93
|
+
// Self-contained hub creds — key can come from an explicit apiKey, a named
|
|
94
|
+
// env var (apiKeyEnv → switch where the key is read from), or fall back to
|
|
95
|
+
// the cc-wide config.llm creds when the provider matches.
|
|
96
|
+
const o = spec.value || {};
|
|
97
|
+
provider = String(o.provider || cfgLlm.provider || "").toLowerCase();
|
|
98
|
+
apiKey =
|
|
99
|
+
o.apiKey ||
|
|
100
|
+
(o.apiKeyEnv ? env[o.apiKeyEnv] : null) ||
|
|
101
|
+
(sameAs(provider) ? cfgLlm.apiKey : null);
|
|
102
|
+
model = o.model || (sameAs(provider) ? cfgLlm.model : null);
|
|
103
|
+
baseUrl = o.baseUrl || (sameAs(provider) ? cfgLlm.baseUrl : null);
|
|
71
104
|
} else {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
105
|
+
const raw = spec.value;
|
|
106
|
+
if (LOCAL_SENTINELS.has(raw)) return null;
|
|
107
|
+
if (CONFIG_SENTINELS.has(raw)) {
|
|
108
|
+
provider = String(cfgLlm.provider || "").toLowerCase();
|
|
109
|
+
model = cfgLlm.model;
|
|
110
|
+
baseUrl = cfgLlm.baseUrl;
|
|
111
|
+
apiKey = cfgLlm.apiKey;
|
|
112
|
+
} else {
|
|
113
|
+
provider = raw;
|
|
114
|
+
// Reuse the saved credentials only when they belong to the requested
|
|
115
|
+
// provider; otherwise fall back to provider defaults + env key.
|
|
116
|
+
model = sameAs(provider) ? cfgLlm.model : null;
|
|
117
|
+
baseUrl = sameAs(provider) ? cfgLlm.baseUrl : null;
|
|
118
|
+
apiKey = sameAs(provider) ? cfgLlm.apiKey : null;
|
|
119
|
+
}
|
|
80
120
|
}
|
|
81
121
|
|
|
82
122
|
if (!provider || provider === "ollama") return null;
|
|
@@ -115,6 +155,23 @@ export function buildCliHubLLM({ config = {}, env = process.env } = {}) {
|
|
|
115
155
|
};
|
|
116
156
|
}
|
|
117
157
|
|
|
158
|
+
/**
|
|
159
|
+
* True when a PERSISTENT config (`hub.llm`, NOT the ephemeral env var) selects
|
|
160
|
+
* a usable non-local cloud backend. The `ask` command uses this as standing
|
|
161
|
+
* consent to send data off-device — a deliberate `cc config set hub.llm …` is
|
|
162
|
+
* the informed opt-in, so the user need not also pass --accept-non-local on
|
|
163
|
+
* every call. The ephemeral env path (CC_HUB_LLM) is deliberately NOT covered:
|
|
164
|
+
* a one-off backend override still requires an explicit egress flag.
|
|
165
|
+
* @returns {boolean}
|
|
166
|
+
*/
|
|
167
|
+
export function isCloudHubConfigured(config = {}) {
|
|
168
|
+
const h = config && config.hub && config.hub.llm;
|
|
169
|
+
if (h == null) return false;
|
|
170
|
+
// Resolve config-only (env stripped) and confirm it builds a non-local client.
|
|
171
|
+
const llm = buildCliHubLLM({ config, env: {} });
|
|
172
|
+
return !!(llm && llm.isLocal === false);
|
|
173
|
+
}
|
|
174
|
+
|
|
118
175
|
function trimBase(base) {
|
|
119
176
|
return String(base).replace(/\/+$/, "");
|
|
120
177
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-BvqAck49.js";import{_ as v,b as m}from"./index-BrruO38Y.js";import{a7 as y,M}from"./icons-DP3uiYxy.js";const B={__name:"MobileProjects",setup(p,{expose:i}){i();const c=u(),{t:e}=m();function a(){c.push("/projects")}function _(){c.push("/mobile-bridge")}const s={router:c,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return M},get FolderOutlined(){return y}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},k={class:"subtitle"},w={class:"explainer"};function T(p,i,c,e,a,_){const s=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",k,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",w,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(B,[["render",T],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-8vQYzk/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{O as r}from"./index-BrruO38Y.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-Bht2QpqM.js";import{U as t}from"./index-BrruO38Y.js";import"./vendor-BvqAck49.js";import"./index-BRlkm8k6.js";import"./icons-DP3uiYxy.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-BwL7ApAT.js";import{U as t}from"./index-BrruO38Y.js";import"./vendor-BvqAck49.js";import"./responsiveObserve-DwYJKWhG.js";import"./useFlexGapSupport-DwVLaYMd.js";import"./styleChecker-D-ByG8n4.js";import"./index-BRlkm8k6.js";import"./icons-DP3uiYxy.js";const l=t(o);export{l as default};
|