chainlesschain 0.166.112 → 0.166.114
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/README.md +12 -6
- package/package.json +1 -1
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-sOceeExN.js → AIOps-CVac3rIN.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BQs-vRUr.js → ActionButton-ChM9GxMl.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-sfAHHMhA.js → Analytics-CV5399Js.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-0gAvE0c8.js → AppLayout-CuonVXhg.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-Dh9s2Qmd.js → Artifacts-D9qKfgb6.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CITm26SU.js → Audit-DUvLysQc.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BiMbBOh0.js → BackgroundAgents-DfKohQeT.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CNpnhI3h.js → Backup-CohoEI8R.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BI_lltkp.js → BaseInput-BwdoA3xv.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BgfB88xY.js → Chat-DRkuz1d2.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-v3pzeHNC.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-4xy9rS3j.js → Checkbox-B-GNGpKv.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-D93h9ihS.js → Codegen-Bs2lAsoZ.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BRf3STY-.js → Col-Bk1mJKDZ.js} +1 -1
- package/src/assets/web-panel/assets/{Community-f187ziSL.js → Community-B_FDSCOo.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-D4hXWuo1.js → Compact-No1qSLLH.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-C6cYKI6H.js → Compliance-CcrG43-d.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-C1i1f8LD.js → Cowork-DLkj2ywK.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-BacCE4LA.js → Cron-sQHELVEz.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DXztxOoH.js → Crosschain-CRTZ3GZg.js} +1 -1
- package/src/assets/web-panel/assets/{DID-rpf4HN8x.js → DID-Ds2bjvxE.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-h4bgtH7L.js → Dashboard-DOONG2NX.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CyQnoHmu.js → Dropdown-Br3PNA2L.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-FCtp4AcB.js → EmailListRenderer-DT6UUqjZ.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-JbISHTWR.js → EvolutionSettings-BSLuEjlT.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DCIQLyfK.js → FamilyGuardDashboard-2aEM9avE.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DDbFpwja.js → Federation-D3B0tlQU.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CXF0jtXb.js → FormItemContext-DTVkVVQP.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CUaNfAM0.js → GenericCardRenderer-BgFEgP4y.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Bhoz2gDf.js → Git-3t71m6Xd.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-FiiXHe8e.js → Governance-DS7WvlaX.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-brpTW2Q3.js → Inference-CeT-xWrI.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BCWP-f6k.js → KnowledgeGraph-BQzMncp5.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CxYcduoK.js → Logs-CC5DOKhV.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-5jYM4kYG.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-DANdmW7l.js → Marketplace-CpYDyy3o.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Bi_EKkb5.js → McpTools-DRdAZPMr.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-DecoMbYw.js → Memory-CBLRr-l8.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DrOhFKp0.js → MobileBridge-Bnj9veNN.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-lYFPD24p.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-SLPII1iw.js → Mtc-BMU_C9vD.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-DWoVORYy.js → MtcAudit-DQV-zumU.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-Dxpnmq-m.js → Multisig-LpqpqV1d.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-kNTpNqCP.js → NLProgramming-C4OMklSO.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-D1uXCfVd.js → Notes-Cg0QCinP.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-D3Qt8Gkl.js → NotificationSettings-amoZoMna.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-qvaah2-m.js → OrderTableRenderer-CxNvhf5n.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-EhRl4JoJ.js → Organization-BetJmyX5.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BTt5C_5W.js → Overflow-DbeoPtVD.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CeR2jyb0.js → P2P-B5sitQWT.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BzD3OHWq.js → PdhVaultBrowser-AP9SG2ic.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BOPyeRlz.js → Permissions-Bc7fgNKx.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DcmNNsfO.js → PersonalDataHub-BwdGMcWZ.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-DuL3kwWC.js → Pipeline-DVuJA9BA.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CkQRdlSU.js → Privacy-BGzwOYRG.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-moE_vQ1P.js → ProjectInit-BpHcC5br.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-PnTWi4NQ.js → ProjectSettings-BI5G5gsc.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DZvbT3D7.js → Projects-Ce92-l1V.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CkcrHYy9.js → Providers-CRHCcLFS.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-nYNFGf_H.js → QrScannerModal-qSeg5xag.js} +1 -1
- package/src/assets/web-panel/assets/QuickAsk-CA8oSceR.js +1 -0
- package/src/assets/web-panel/assets/{Recommend-CmYN_NaS.js → Recommend-DMvPodNo.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BuOdNEjA.js → RemoteSession-BWsapEyN.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BgkheZou.js → Reputation-BZJETVmC.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DvA3klj1.js → Row-CUE1OSMp.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CgkIL3PG.js → RssFeed-DvMazcUD.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Cv2twJdL.js → Search-e1c-NXWv.js} +1 -1
- package/src/assets/web-panel/assets/{Security-XrD2UNU6.js → Security-Dc9GZsx2.js} +3 -3
- package/src/assets/web-panel/assets/{Services-LujCntCK.js → Services-AFz6ke-4.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-ZZCOsxPX.js → Skeleton-gow6MYcY.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BEXGkOrU.js → Skills-h6AxYjUP.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CIqmCgdD.js → Sla-Cr4CkJ0O.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DkVbwJox.js → SpeechSettings-Bd5yuBtH.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BVGgUs0p.js → SyncSettings-1t4QZMLW.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-C1lh68l5.js → Tasks-u-DrjLRM.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BG4zNAFx.js → Templates-C0yLUC9b.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-t2o6i5fY.js → Tenant-ds1YT5iS.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CH8UDdVO.js → Terminal-BoIskW2m.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-B5sYY1IO.js → TimelineRenderer-BkdVK24X.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-D0y7QkG5.js → Tokens-djyDgmfk.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BA2nKko0.js → Trigger-CYefDS3H.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CrFKCQIs.js → Trust-CE_dbep_.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B3x_-Zun.js → UkeySign-DwVs_fey.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-TEwxbLH6.js → VideoEditing-BTUqMHAV.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Larp5rrt.js → Wallet-Bu_E7Rrc.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DfWbEIZe.js → WebAuthn-DTbre5AB.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-8LKiKExY.js → WorkflowEditor-BsBzd3gt.js} +1 -1
- package/src/assets/web-panel/assets/{chat-ByxYOvYW.js → chat-tdifQQvu.js} +1 -1
- package/src/assets/web-panel/assets/{colors-Dh4yAClh.js → colors-D3SNW2Vx.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-f5n2j1WZ.js → compact-item-UBlCjrAW.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DIprYuXL.js → createContext-DKsnEnFt.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BBnVfJHh.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CvYeap2I.js → hasIn-BkeySXWe.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGyTzElU.js → index-6Nvzgytx.js} +1 -1
- package/src/assets/web-panel/assets/index-B2w_3mtS.js +1 -0
- package/src/assets/web-panel/assets/{index-DshB3-Up.js → index-BEiHKah0.js} +25 -25
- package/src/assets/web-panel/assets/{index-DI8jC7gQ.js → index-BIeFLaMV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlImvgb7.js → index-BV2zQteq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoayvJ48.js → index-BVvz3ntc.js} +1 -1
- package/src/assets/web-panel/assets/index-BoHurydC.js +1 -0
- package/src/assets/web-panel/assets/{index-CIZQtz8G.js → index-Bw0k3VgD.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzabQZ7I.js → index-C-KTHSUE.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJjc8ObW.js → index-C9ImNw5O.js} +1 -1
- package/src/assets/web-panel/assets/{index-uDiVjYrS.js → index-CG_b1xyX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BS_dpgzu.js → index-CUjyL0ZS.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUj-sL9U.js → index-CXkn77ZN.js} +1 -1
- package/src/assets/web-panel/assets/{index-7eG1J-GT.js → index-CZ6JUooI.js} +1 -1
- package/src/assets/web-panel/assets/{index-3ROY-lYB.js → index-Cuz2QCFT.js} +1 -1
- package/src/assets/web-panel/assets/{index-bt-0zMmH.js → index-D5Umd_Z-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsU46c7D.js → index-D6es7MSG.js} +1 -1
- package/src/assets/web-panel/assets/{index-xU0eHLIH.js → index-D93iSDUw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlJCDpeN.js → index-D9m1HQzl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaXSBxy-.js → index-D9um0YVl.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmcAL4hd.js → index-DD6dD3LV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bk8oWRk6.js → index-DFMrIEIt.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0AXUhiJ.js → index-DSCiZJXb.js} +1 -1
- package/src/assets/web-panel/assets/{index-c_CxUQl3.js → index-DSe_7MSy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CTqJNul4.js → index-DYFjOyTH.js} +1 -1
- package/src/assets/web-panel/assets/{index-Du435yzt.js → index-DdyTv6yc.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaZVtafQ.js → index-DfrW-iVs.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvyFQF8I.js → index-Dg8-Duze.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlTwZIeX.js → index-DiDgwRty.js} +1 -1
- package/src/assets/web-panel/assets/{index-6VEWxOyC.js → index-DlEIp1gJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2RGykST.js → index-DlO6HdD9.js} +1 -1
- package/src/assets/web-panel/assets/{index-fpWv4u3Z.js → index-DtxUSZSS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpR0zD38.js → index-DugZRCiI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CD0s5ESV.js → index-P-ailFQY.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcvA1nae.js → index-PWScrdlX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjvON8oh.js → index-SpQ26gD6.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5aH2Pj2.js → index-TLBpgN30.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlULGx8u.js → index-bOIcWW8F.js} +1 -1
- package/src/assets/web-panel/assets/{index-hwbaD3Nk.js → index-pgGKNvmm.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DRuE92W6.js → initDefaultProps-CVCXG2Hv.js} +1 -1
- package/src/assets/web-panel/assets/{motion-6Sgma5Vd.js → motion-Dv00jw87.js} +1 -1
- package/src/assets/web-panel/assets/{move-BbQsH8sb.js → move-BFz51iHf.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BdC4INal.js → mtc-parser-BK2woIDE.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DeC5m_bi.js → omit-D2X_Gwoo.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DuehpBws.js → pickAttrs-CLmFyJ1q.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CJEhv2ij.js → placementArrow-CCzPddQm.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Dyw3lDGr.js → responsiveObserve-hcm_Zlxd.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BMaLXTbS.js → slide-BxfZEFVp.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-c1K_SdJH.js → statusUtils-kzB9pT-t.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CefBry8k.js → styleChecker-CDFd7YCI.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Dj2IsZpo.js → useFlexGapSupport-Czl7NNhS.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-RLfB3yqb.js → useFs-y0SAzirG.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DbRVH_NA.js → usePersonalDataHub-BvdPznrA.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DTn_QVJz.js → vnode-D8mNbyZ7.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DuFR0E7i.js → zoom-_hun6w9W.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +29 -3
- package/src/gateways/ws/llm-chat-protocol.js +124 -41
- package/src/gateways/ws/message-dispatcher.js +2 -0
- package/src/lib/evolution/evolution-deployment-config.js +15 -6
- package/src/lib/evolution/evolution-deployment-loader.js +63 -5
- package/src/lib/evolution/local-ui-evolution-deployment.js +139 -53
- package/src/lib/evolution/local-ui-evolution-host.mjs +26 -8
- package/src/lib/evolution/local-ui-evolution-runtime.js +42 -19
- package/src/assets/web-panel/assets/ChatBubbleRenderer-BDP3fGoz.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-12vD1nC1.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-rRwP16dN.js +0 -1
- package/src/assets/web-panel/assets/QuickAsk-53WNo7xT.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DRIge35Z.js +0 -1
- package/src/assets/web-panel/assets/index-Bq24rTYx.js +0 -1
- package/src/assets/web-panel/assets/index-D2f18WsK.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as v}from"./index-
|
|
1
|
+
import{u as v}from"./index-BEiHKah0.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-BEiHKah0.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-BEiHKah0.js";import{i as f}from"./motion-Dv00jw87.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-BEiHKah0.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/data/changelog.json
CHANGED
|
@@ -1,16 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.166.114",
|
|
7
|
+
"cliVersions": ["0.166.114"],
|
|
8
|
+
"date": "2026-10-22",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Fixed - cc CLI 0.166.114: Quick Ask streaming and local Evolution setup (candidate, 2026-10-22)",
|
|
13
|
+
"body": "- Surface provider waiting status, credential errors, and terminal streaming failures in Quick Ask; bound governed chat initialization and completion to 60 seconds and support cancellation of active requests.\n- Migrate a supported signed UI-only local Evolution host to admit `agent`, `ask`, `chat`, and `ui`, retaining its signing identity and detecting concurrent profile changes.\n- Prepare VS Code 0.37.156 and JetBrains 0.4.173 to recommend CLI 0.166.114. These versions are unreleased candidates; publication still requires the exact release commit's GitHub Actions gates, OIDC npm publication and public readback before IDE publication."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.166.113",
|
|
20
|
+
"cliVersions": ["0.166.113"],
|
|
21
|
+
"date": "2026-10-22",
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "cc CLI 0.166.113 release attempt (unpublished, 2026-10-22)",
|
|
26
|
+
"body": "- The immutable candidate did not pass its macOS release gate because a test asserted a temporary-path alias; no npm or IDE publication is claimed."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"productVersion": null,
|
|
6
32
|
"cliVersion": "0.166.112",
|
|
7
33
|
"cliVersions": ["0.166.112"],
|
|
8
|
-
"date": "2026-10-
|
|
34
|
+
"date": "2026-10-22",
|
|
9
35
|
"title": "",
|
|
10
36
|
"sections": [
|
|
11
37
|
{
|
|
12
|
-
"heading": "Fixed - cc CLI 0.166.112: retain generated Evolution test signing keys (
|
|
13
|
-
"body": "- Preserve the supplied private signing-key path when saving an explicit Evolution test deployment, so generated test deployments remain usable after configuration.\n- Align Windows ACL fixtures with Session Core's extended-path PowerShell protocol while keeping CLI-facing paths unchanged.\n-
|
|
38
|
+
"heading": "Fixed - cc CLI 0.166.112: retain generated Evolution test signing keys (published, 2026-10-22)",
|
|
39
|
+
"body": "- Preserve the supplied private signing-key path when saving an explicit Evolution test deployment, so generated test deployments remain usable after configuration.\n- Align Windows ACL fixtures with Session Core's extended-path PowerShell protocol while keeping CLI-facing paths unchanged.\n- Public pairing: CLI 0.166.112, Open VSX 0.37.155 and JetBrains 0.4.172. Session Core 0.3.21 preceded the CLI; exact-source CLI CI and Strict Sandbox passed before OIDC npm publication, and both IDE channels followed verified npm readback. [Publication evidence](https://github.com/chainlesschain/chainlesschain/blob/main/docs/research/cli/evidence/release112-public/publication.json)."
|
|
14
40
|
}
|
|
15
41
|
]
|
|
16
42
|
},
|
|
@@ -38,12 +38,35 @@ import {
|
|
|
38
38
|
streamOpenAI,
|
|
39
39
|
streamAnthropic,
|
|
40
40
|
streamGemini,
|
|
41
|
+
STREAM_STALL_MS,
|
|
41
42
|
} from "../../lib/chat-core.js";
|
|
42
43
|
import { BUILT_IN_PROVIDERS } from "../../lib/llm-providers.js";
|
|
43
44
|
import { resolveLlmCreds } from "./llm-creds.js";
|
|
44
45
|
import { prepareGovernedModelTurn } from "../../lib/evolution/governed-model-turn.js";
|
|
45
46
|
import { normalizeOllamaBaseUrl } from "../../lib/ollama-base-url.js";
|
|
46
47
|
import { normalizeProviderBaseUrl } from "../../lib/provider-protocol.js";
|
|
48
|
+
import { raceWithAbort } from "../../lib/abort-utils.js";
|
|
49
|
+
|
|
50
|
+
const activeChats = new WeakMap();
|
|
51
|
+
const CHAT_SETUP_TIMEOUT_MS = 60_000;
|
|
52
|
+
|
|
53
|
+
/** A request id is scoped to its originating socket, never another client. */
|
|
54
|
+
export function cancelLlmChat(ws, id) {
|
|
55
|
+
activeChats.get(ws)?.get(id)?.abort(new Error("Chat cancelled"));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function waitForChatPhase(operation, controller, phase) {
|
|
59
|
+
const timer = setTimeout(
|
|
60
|
+
() => controller.abort(new Error(`Chat ${phase} timed out after 60s`)),
|
|
61
|
+
CHAT_SETUP_TIMEOUT_MS,
|
|
62
|
+
);
|
|
63
|
+
timer.unref?.();
|
|
64
|
+
try {
|
|
65
|
+
return await raceWithAbort(operation, controller.signal);
|
|
66
|
+
} finally {
|
|
67
|
+
clearTimeout(timer);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
47
70
|
|
|
48
71
|
function validateMessages(messages) {
|
|
49
72
|
if (!Array.isArray(messages) || messages.length === 0)
|
|
@@ -77,7 +100,17 @@ export async function handleLlmChat(server, id, ws, message) {
|
|
|
77
100
|
return;
|
|
78
101
|
}
|
|
79
102
|
|
|
80
|
-
|
|
103
|
+
let creds;
|
|
104
|
+
try {
|
|
105
|
+
creds = resolveLlmCreds(server, message);
|
|
106
|
+
} catch (error) {
|
|
107
|
+
send({
|
|
108
|
+
type: `${topic}.result`,
|
|
109
|
+
ok: false,
|
|
110
|
+
error: error?.message || String(error),
|
|
111
|
+
});
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
81
114
|
if (!creds || !creds.provider) {
|
|
82
115
|
send({
|
|
83
116
|
type: `${topic}.result`,
|
|
@@ -100,6 +133,7 @@ export async function handleLlmChat(server, id, ws, message) {
|
|
|
100
133
|
|
|
101
134
|
let accumulator = "";
|
|
102
135
|
const onToken = (token) => {
|
|
136
|
+
controller.signal.throwIfAborted();
|
|
103
137
|
if (typeof token !== "string" || token.length === 0) return;
|
|
104
138
|
accumulator += token;
|
|
105
139
|
send({
|
|
@@ -114,59 +148,99 @@ export async function handleLlmChat(server, id, ws, message) {
|
|
|
114
148
|
};
|
|
115
149
|
|
|
116
150
|
const controller = new AbortController();
|
|
151
|
+
let requests = null;
|
|
152
|
+
if (ws && (typeof ws === "object" || typeof ws === "function")) {
|
|
153
|
+
requests = activeChats.get(ws);
|
|
154
|
+
if (!requests) activeChats.set(ws, (requests = new Map()));
|
|
155
|
+
if (requests.has(id)) {
|
|
156
|
+
send({
|
|
157
|
+
type: `${topic}.result`,
|
|
158
|
+
ok: false,
|
|
159
|
+
error: "Chat request is already active",
|
|
160
|
+
});
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
requests.set(id, controller);
|
|
164
|
+
}
|
|
117
165
|
const disconnect = () =>
|
|
118
166
|
controller.abort(new Error("Chat connection closed"));
|
|
167
|
+
const onStall = (elapsedMs, timeoutMs) => {
|
|
168
|
+
if (controller.signal.aborted) return;
|
|
169
|
+
send({
|
|
170
|
+
type: `${topic}.status`,
|
|
171
|
+
status: {
|
|
172
|
+
stage: "waiting",
|
|
173
|
+
provider: creds.provider,
|
|
174
|
+
model: creds.model,
|
|
175
|
+
elapsedMs,
|
|
176
|
+
timeoutMs,
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
};
|
|
119
180
|
ws?.once?.("close", disconnect);
|
|
120
181
|
try {
|
|
121
|
-
const turn = await
|
|
122
|
-
server.evolutionCompositionFactory ?? null,
|
|
123
|
-
{
|
|
182
|
+
const turn = await waitForChatPhase(
|
|
183
|
+
prepareGovernedModelTurn(server.evolutionCompositionFactory ?? null, {
|
|
124
184
|
mode: "ws-llm-chat",
|
|
125
185
|
messages: message.messages,
|
|
126
186
|
signal: controller.signal,
|
|
127
|
-
},
|
|
187
|
+
}),
|
|
188
|
+
controller,
|
|
189
|
+
"initialization",
|
|
128
190
|
);
|
|
129
191
|
const streamOptions = {
|
|
130
192
|
requireCompletion: turn.governed,
|
|
131
193
|
signal: controller.signal,
|
|
132
194
|
};
|
|
195
|
+
// Tell the browser the configured deadline even when waiting hints are
|
|
196
|
+
// disabled, so a slow local model gets its full loading budget.
|
|
197
|
+
onStall(0, STREAM_STALL_MS);
|
|
133
198
|
const baseUrl =
|
|
134
199
|
creds.provider === "ollama"
|
|
135
200
|
? normalizeOllamaBaseUrl(creds.baseUrl)
|
|
136
201
|
: normalizeProviderBaseUrl(creds.baseUrl);
|
|
137
202
|
if (creds.provider === "ollama") {
|
|
138
|
-
await
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
203
|
+
await raceWithAbort(
|
|
204
|
+
streamOllama(
|
|
205
|
+
turn.messages,
|
|
206
|
+
creds.model,
|
|
207
|
+
baseUrl,
|
|
208
|
+
onToken,
|
|
209
|
+
onUsage,
|
|
210
|
+
onStall,
|
|
211
|
+
streamOptions,
|
|
212
|
+
),
|
|
213
|
+
controller.signal,
|
|
146
214
|
);
|
|
147
215
|
} else if (creds.provider === "anthropic") {
|
|
148
216
|
const url = baseUrl;
|
|
149
|
-
await
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
217
|
+
await raceWithAbort(
|
|
218
|
+
streamAnthropic(
|
|
219
|
+
turn.messages,
|
|
220
|
+
creds.model,
|
|
221
|
+
url,
|
|
222
|
+
creds.apiKey,
|
|
223
|
+
onToken,
|
|
224
|
+
onUsage,
|
|
225
|
+
onStall,
|
|
226
|
+
streamOptions,
|
|
227
|
+
),
|
|
228
|
+
controller.signal,
|
|
158
229
|
);
|
|
159
230
|
} else if (creds.provider === "gemini") {
|
|
160
231
|
const url = baseUrl;
|
|
161
|
-
await
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
232
|
+
await raceWithAbort(
|
|
233
|
+
streamGemini(
|
|
234
|
+
turn.messages,
|
|
235
|
+
creds.model,
|
|
236
|
+
url,
|
|
237
|
+
creds.apiKey,
|
|
238
|
+
onToken,
|
|
239
|
+
onUsage,
|
|
240
|
+
onStall,
|
|
241
|
+
streamOptions,
|
|
242
|
+
),
|
|
243
|
+
controller.signal,
|
|
170
244
|
);
|
|
171
245
|
} else {
|
|
172
246
|
// OpenAI-compatible — covers openai / volcengine / deepseek / dashscope /
|
|
@@ -174,19 +248,26 @@ export async function handleLlmChat(server, id, ws, message) {
|
|
|
174
248
|
// BUILT_IN_PROVIDERS already applied above.
|
|
175
249
|
const def = BUILT_IN_PROVIDERS[creds.provider];
|
|
176
250
|
const url = baseUrl || def?.baseUrl;
|
|
177
|
-
await
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
251
|
+
await raceWithAbort(
|
|
252
|
+
streamOpenAI(
|
|
253
|
+
turn.messages,
|
|
254
|
+
creds.model,
|
|
255
|
+
url,
|
|
256
|
+
creds.apiKey,
|
|
257
|
+
onToken,
|
|
258
|
+
onUsage,
|
|
259
|
+
onStall,
|
|
260
|
+
streamOptions,
|
|
261
|
+
),
|
|
262
|
+
controller.signal,
|
|
186
263
|
);
|
|
187
264
|
}
|
|
188
265
|
|
|
189
|
-
await
|
|
266
|
+
await waitForChatPhase(
|
|
267
|
+
turn.complete(accumulator),
|
|
268
|
+
controller,
|
|
269
|
+
"completion",
|
|
270
|
+
);
|
|
190
271
|
send({
|
|
191
272
|
type: `${topic}.result`,
|
|
192
273
|
ok: true,
|
|
@@ -205,6 +286,8 @@ export async function handleLlmChat(server, id, ws, message) {
|
|
|
205
286
|
error: err?.message || String(err),
|
|
206
287
|
});
|
|
207
288
|
} finally {
|
|
289
|
+
requests?.delete(id);
|
|
290
|
+
if (requests?.size === 0) activeChats.delete(ws);
|
|
208
291
|
ws?.removeListener?.("close", disconnect);
|
|
209
292
|
}
|
|
210
293
|
}
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
handleRemoteSessionTerminal,
|
|
31
31
|
} from "./remote-session-protocol.js";
|
|
32
32
|
import { RemoteCommandLedger } from "../../harness/remote-command-ledger.js";
|
|
33
|
+
import { cancelLlmChat } from "./llm-chat-protocol.js";
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
36
|
* Reconnect-safe command execution. When a message carries a stable
|
|
@@ -293,6 +294,7 @@ export function createWsMessageDispatcher(server) {
|
|
|
293
294
|
"chat.intent.classify-followup": () =>
|
|
294
295
|
server._handleChatIntentClassifyFollowup(id, ws, message),
|
|
295
296
|
"llm.chat": () => server._handleLlmChat(id, ws, message),
|
|
297
|
+
"llm.chat.cancel": () => cancelLlmChat(ws, id),
|
|
296
298
|
};
|
|
297
299
|
|
|
298
300
|
// Static core routes take precedence and are dispatched directly. The
|
|
@@ -200,6 +200,16 @@ export async function configureEvolutionDeployment(
|
|
|
200
200
|
options,
|
|
201
201
|
);
|
|
202
202
|
updateEvolutionDeploymentProfile((current) => {
|
|
203
|
+
if (
|
|
204
|
+
options.expectedProfile &&
|
|
205
|
+
JSON.stringify(current) !== JSON.stringify(options.expectedProfile)
|
|
206
|
+
) {
|
|
207
|
+
const error = new Error(
|
|
208
|
+
"Evolution deployment profile changed during local migration",
|
|
209
|
+
);
|
|
210
|
+
error.code = "EVOLUTION_DEPLOYMENT_PROFILE_CHANGED";
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
203
213
|
if (options.expectedProfileAbsent === true && current) {
|
|
204
214
|
const error = new Error(
|
|
205
215
|
"Evolution deployment profile was configured during local initialization",
|
|
@@ -272,12 +282,11 @@ export async function configureEvolutionDeployment(
|
|
|
272
282
|
revisionFloors,
|
|
273
283
|
activeTrustRootDigest: verified.descriptor.trustRootDigest,
|
|
274
284
|
revokedDescriptorRevisions,
|
|
275
|
-
deploymentMode:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
: deploymentMode || "managed",
|
|
285
|
+
deploymentMode: preserveLocalMode
|
|
286
|
+
? "local"
|
|
287
|
+
: preserveTestMode
|
|
288
|
+
? "test"
|
|
289
|
+
: deploymentMode || "managed",
|
|
281
290
|
testPrivateKeyPath:
|
|
282
291
|
deploymentMode === "test"
|
|
283
292
|
? testPrivateKeyPath || null
|
|
@@ -622,7 +622,9 @@ async function loadBuiltInFactories(commandName) {
|
|
|
622
622
|
import("./evolution-eval-process-supervisor.js"),
|
|
623
623
|
import("./governed-skill-synthesis-attestor-trust-approval-client.js"),
|
|
624
624
|
import("./governed-skill-synthesis-attestor-trust-operations-client.js"),
|
|
625
|
-
import(
|
|
625
|
+
import(
|
|
626
|
+
"./governed-skill-synthesis-attestor-trust-operations-cli-host.js"
|
|
627
|
+
),
|
|
626
628
|
]);
|
|
627
629
|
factories.createEvolutionWorkbenchCliHost = createEvolutionWorkbenchCliHost;
|
|
628
630
|
factories.createEvolutionWorkbenchReviewRuntime =
|
|
@@ -1027,9 +1029,39 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
1027
1029
|
importModule = (url) => import(url),
|
|
1028
1030
|
additionalFactories = {},
|
|
1029
1031
|
initializeDefaultLocalUi = false,
|
|
1032
|
+
initializeDefaultLocalModels = true,
|
|
1030
1033
|
} = {},
|
|
1031
1034
|
) {
|
|
1032
1035
|
if (!SUPPORTED_COMMANDS.has(commandName)) return null;
|
|
1036
|
+
const localModelDependencies = () =>
|
|
1037
|
+
dependencies(
|
|
1038
|
+
{
|
|
1039
|
+
evolutionCompositionFactory: async (context) => {
|
|
1040
|
+
const { initializeDefaultLocalUiEvolutionDeployment } = await import(
|
|
1041
|
+
"./local-ui-evolution-deployment.js"
|
|
1042
|
+
);
|
|
1043
|
+
await initializeDefaultLocalUiEvolutionDeployment({ env, cwd });
|
|
1044
|
+
const admitted = await loadEvolutionDeploymentCommandDependencies(
|
|
1045
|
+
commandName,
|
|
1046
|
+
{
|
|
1047
|
+
env,
|
|
1048
|
+
cwd,
|
|
1049
|
+
read,
|
|
1050
|
+
resolveRealPath,
|
|
1051
|
+
importModule,
|
|
1052
|
+
additionalFactories,
|
|
1053
|
+
initializeDefaultLocalModels: false,
|
|
1054
|
+
},
|
|
1055
|
+
);
|
|
1056
|
+
if (typeof admitted?.evolutionCompositionFactory !== "function")
|
|
1057
|
+
throw new Error(
|
|
1058
|
+
"Local model command requires an authenticated Evolution deployment",
|
|
1059
|
+
);
|
|
1060
|
+
return admitted.evolutionCompositionFactory(context);
|
|
1061
|
+
},
|
|
1062
|
+
},
|
|
1063
|
+
commandName,
|
|
1064
|
+
);
|
|
1033
1065
|
let descriptorPath = env.CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_DESCRIPTOR;
|
|
1034
1066
|
let trustRootPath = env.CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_TRUST_ROOT;
|
|
1035
1067
|
if (
|
|
@@ -1061,6 +1093,15 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
1061
1093
|
"Saved evolution deployment profile is disabled",
|
|
1062
1094
|
);
|
|
1063
1095
|
}
|
|
1096
|
+
if (
|
|
1097
|
+
initializeDefaultLocalModels &&
|
|
1098
|
+
["agent", "ask", "chat"].includes(commandName) &&
|
|
1099
|
+
!saved.profile
|
|
1100
|
+
) {
|
|
1101
|
+
// Registration/help is read-only. Bootstrap only when a real command
|
|
1102
|
+
// requests its authenticated composition, then re-read current policy.
|
|
1103
|
+
return localModelDependencies();
|
|
1104
|
+
}
|
|
1064
1105
|
if (!saved.error && saved.profile?.enabled) {
|
|
1065
1106
|
descriptorPath = saved.profile.descriptorPath;
|
|
1066
1107
|
trustRootPath = saved.profile.trustRootPath;
|
|
@@ -1111,19 +1152,35 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
1111
1152
|
const localProfile =
|
|
1112
1153
|
fromSavedProfile && saved.profile.deploymentMode === "local";
|
|
1113
1154
|
if (localProfile) {
|
|
1155
|
+
const generation = saved.profile.descriptorPath.endsWith(
|
|
1156
|
+
"deployment-v2.json",
|
|
1157
|
+
)
|
|
1158
|
+
? 2
|
|
1159
|
+
: 1;
|
|
1114
1160
|
const localHostPath = join(
|
|
1115
1161
|
dirname(saved.filePath),
|
|
1116
1162
|
"local-ui-host",
|
|
1117
|
-
"ui-host.mjs",
|
|
1163
|
+
generation === 2 ? "ui-host-v2.mjs" : "ui-host.mjs",
|
|
1118
1164
|
);
|
|
1119
1165
|
const canonicalLocalHostPath = await realpath(localHostPath);
|
|
1120
1166
|
if (
|
|
1121
|
-
|
|
1122
|
-
|
|
1167
|
+
!(
|
|
1168
|
+
["ui"].join(",") === descriptor.commands.join(",") ||
|
|
1169
|
+
"agent,ask,chat,ui" === descriptor.commands.join(",")
|
|
1170
|
+
) ||
|
|
1123
1171
|
verified.modulePath !== canonicalLocalHostPath
|
|
1124
1172
|
) {
|
|
1125
|
-
throw new Error(
|
|
1173
|
+
throw new Error(
|
|
1174
|
+
"Local Evolution deployment is not the protected UI host",
|
|
1175
|
+
);
|
|
1126
1176
|
}
|
|
1177
|
+
if (
|
|
1178
|
+
initializeDefaultLocalModels &&
|
|
1179
|
+
["agent", "ask", "chat", "ui"].includes(commandName) &&
|
|
1180
|
+
descriptor.commands.length === 1 &&
|
|
1181
|
+
descriptor.commands[0] === "ui"
|
|
1182
|
+
)
|
|
1183
|
+
return localModelDependencies();
|
|
1127
1184
|
}
|
|
1128
1185
|
if (!descriptor.commands.includes(commandName)) {
|
|
1129
1186
|
return deniedAgentDependencies(
|
|
@@ -1154,6 +1211,7 @@ export async function loadEvolutionDeploymentCommandDependencies(
|
|
|
1154
1211
|
createLocalUiEvolutionComposition: (options = {}) =>
|
|
1155
1212
|
createLocalUiEvolutionComposition({
|
|
1156
1213
|
...options,
|
|
1214
|
+
commandName,
|
|
1157
1215
|
localDirectory: join(dirname(saved.filePath), "local-ui-host"),
|
|
1158
1216
|
env,
|
|
1159
1217
|
cwd,
|