chainlesschain 0.162.125 → 0.162.126
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-DcqNhZhA.js → AIOps-BrTOcqIJ.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BigtmPoq.js → ActionButton-na9cocmf.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-1J_X_HF4.js → Analytics-BtDygkpt.js} +2 -2
- package/src/assets/web-panel/assets/{AppLayout-DlcDG_a_.js → AppLayout-D_t5CS18.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-Do-y8_3w.js → Audit-BYMZccCy.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-S2Df-50Y.js → Backup-D2qDfAdL.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-D5kgWJfk.js → BaseInput-kj456Ju9.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-aUcp3kN1.js → Chat-BY0A0ZLE.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-D1VvrOPQ.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DTg1U7Xs.js → Checkbox-DiBhtXsh.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-YO9ZZ4Ky.js → Codegen-B1ER0L0j.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BHonE9fU.js → Col-CjLmza7D.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DA2AlEFh.js → Community-BNId05U7.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DULxLRNg.js → Compact-BuuMj7K1.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BZqfuuZL.js → Compliance-DUuDycaJ.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CJe3vyMS.js → Cowork-BKHiF6uL.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-CeV8AtRu.js → Cron-C7p-lHnC.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CAg66zS5.js → Crosschain-BvSOx8a6.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Dtup5JZm.js → DID-D1k9jgHv.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DAR_8PNy.js → Dashboard-B9mCCnqY.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-K5bTaCYN.js → Dropdown-ge9UHSXF.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C890uErx.js → EmailListRenderer-TZO7ppXi.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-B-Tj_8yM.js → FamilyGuardDashboard-DkhLJmzx.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-C6WZ98ni.js → Federation-JLuA_8zp.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-D-LTfGWd.js → FormItemContext-C4w-rzNg.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-C80DK4W7.js → GenericCardRenderer-Btns4sV9.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Cjvvv3zW.js → Git-BheXMjzC.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-C0BND77H.js → Governance-D9rLlatH.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BL9kTtSu.js → Inference-DiklIMcd.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CnVTBmJf.js → KnowledgeGraph-C70EWL03.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CbCbg7K6.js → Logs-Zt_MLI10.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-CG5On-fH.js → Marketplace-suQxES99.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-AYYDZZK7.js → McpTools-CclpCDpY.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-tMWbMDQq.js → Memory-B2lHOUwF.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BAOsf4wB.js → MobileBridge-BMXKoDAD.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BT-2komQ.js → MobileProjects-a6mWVdBV.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BFwfC63n.js → Mtc-BFpM4Fkj.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DYG3CWdH.js → MtcAudit-DDQkxkbS.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-KJwd0yWT.js → Multisig-Crkd_zKQ.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BmL5dNWm.js → NLProgramming-Dpk5An7B.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DmkaVaMc.js → Notes-BrFnOMNz.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-tmVQszDZ.js → NotificationSettings-CM0iApFM.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BtrR7anf.js → OrderTableRenderer-XXjeqkdz.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-pppktQyW.js → Organization-CHFW_38T.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-D3lBoQDA.js → Overflow-C-vl3EjV.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BgE2qGlZ.js → P2P-BT7Slavq.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DRUaULap.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-BR8no2Xe.js → Permissions-DkhOAvMz.js} +3 -3
- package/src/assets/web-panel/assets/{PersonalDataHub-DabbyQEF.js → PersonalDataHub-Dl7dSOvV.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-n4sNpEz8.js → Pipeline-B3nVI4p6.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CGNp4n8M.js → Privacy-Dv1SXx1Q.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CAVA5VsX.js → ProjectInit-DrAhVi5p.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-GCgkfM7A.js → ProjectSettings-h-ggCYN_.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BYK17p52.js → Projects-CM91hYdr.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DpUT5W-d.js → Providers-rfkZel3N.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-ZJxTb7vi.js → QuickAsk-XepZB7h_.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CIzFRDk1.js → Recommend-DzQWsh1a.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-lQ_WDNZn.js → Reputation-CDeaal0j.js} +1 -1
- package/src/assets/web-panel/assets/{Row-1MEtrgtF.js → Row-BN4aKhFH.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-SSgcPPl4.js → RssFeed-INP6VYAA.js} +2 -2
- package/src/assets/web-panel/assets/{Search-CcTMOGNY.js → Search-ChPbwatu.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BA1KMaDx.js → Security-C97ZCY8N.js} +3 -3
- package/src/assets/web-panel/assets/{Services-_aj7czZn.js → Services-Cbtl2Ajs.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BWgg_0Zr.js → Skeleton-B13sFxBQ.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-C2ZIziYM.js → Skills-vI9zSIKX.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CYxp4axY.js → Sla-Cr3oBH39.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-C7Csp1jV.js → SpeechSettings-BwemqPPV.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-svGeswiw.js → SyncSettings-CLA78P-Z.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-ClISj6oK.js → Tasks-DBjQ_DOM.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CmO-Fp7r.js → Templates-BkSLDkBs.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-a3Ac3lxz.js → Tenant-Dn0nSlib.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DyJIRh81.js → Terminal-C8f4boru.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-acXS5N5h.js → TimelineRenderer-DW_rMtJR.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DJW0KqV4.js → Tokens-BdffrKYV.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-0HeTi4r6.js → Trigger-CX4CUg-Q.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-aFym34eo.js → Trust-Cq9Bl7Od.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CYhszHJv.js → UkeySign-BQy18_VY.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BbJxPF9X.js → VideoEditing-h5hzK7Vw.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DDthEwiu.js → Wallet-BLotT3gw.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-DQ6McYPg.js → WebAuthn-8cCANYLE.js} +2 -2
- package/src/assets/web-panel/assets/{WorkflowEditor-CnF8zRsi.js → WorkflowEditor-Db6NwtAv.js} +1 -1
- package/src/assets/web-panel/assets/{chat-Dzkx2gTP.js → chat-BPk1LbpL.js} +1 -1
- package/src/assets/web-panel/assets/{colors-35T51Oo5.js → colors-BnNal71p.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-TtzNrlu1.js → compact-item-W2VC0tcy.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Y1LkWrYb.js → createContext-DceVsgnZ.js} +1 -1
- package/src/assets/web-panel/assets/devWarning--rwFDBhx.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BOYw1BgS.js → hasIn-BEq6EDcp.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtlJWaSP.js → index-5gIBUFBn.js} +1 -1
- package/src/assets/web-panel/assets/{index-CLqC2sRT.js → index-APCHxOkM.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7Wt5feN.js → index-B2dMhwZi.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqhwG1ox.js → index-B8cPjrEH.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxWUEFKy.js → index-BDC5HsxZ.js} +1 -1
- package/src/assets/web-panel/assets/index-BPFuPGKi.js +1 -0
- package/src/assets/web-panel/assets/{index-NM9Oke2k.js → index-BUkDcIwJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWgNn9As.js → index-BWcCyH6-.js} +3 -3
- package/src/assets/web-panel/assets/{index-CVrUs6rf.js → index-BgZikQoh.js} +1 -1
- package/src/assets/web-panel/assets/index-Bwjus13Y.js +1 -0
- package/src/assets/web-panel/assets/{index-D6tG4B25.js → index-BzSzRWsw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjeUZxE5.js → index-C1K9CsGr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmkG479D.js → index-CBZVISK6.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bw1iOGhM.js → index-CEJN-R2L.js} +1 -1
- package/src/assets/web-panel/assets/{index-G4ClSmJc.js → index-CG5dGC9E.js} +1 -1
- package/src/assets/web-panel/assets/{index-D47robkX.js → index-CMGLpstm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BKRlWHUp.js → index-CWrGCndd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DhMSOd_2.js → index-CbcvfpCV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dx0hIfC-.js → index-Ceqv4lI2.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdyFg4FI.js → index-CsT6frT8.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7aKAZzS.js → index-D8PQKsDT.js} +1 -1
- package/src/assets/web-panel/assets/{index-8jffdb6b.js → index-DGncdA-j.js} +1 -1
- package/src/assets/web-panel/assets/{index-XIuZV9by.js → index-DHanQHO0.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dhfw-BXs.js → index-DaUBk28E.js} +1 -1
- package/src/assets/web-panel/assets/{index-hyqEKkBT.js → index-Di2J4b4V.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAizH273.js → index-DtuLvWZN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPGNc2tF.js → index-DvS1J8xc.js} +1 -1
- package/src/assets/web-panel/assets/{index-KgXrlfNF.js → index-DxePJdwP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFhlelzN.js → index-Et4XvL49.js} +1 -1
- package/src/assets/web-panel/assets/{index-zF77jnI2.js → index-GlFxgcj4.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cs82BHAj.js → index-HV119Oui.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dof7lWA_.js → index-InGW87pj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bs69SI96.js → index-P1-s8JR7.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4BgCBa3.js → index-SdABCNoi.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSpFe6j5.js → index-WTAZbN-c.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7dCBw_M.js → index-_2I-KzOj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGPEaeB1.js → index-m1sVaWVU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZ16GlOs.js → index-s37wwyeN.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2od7Bgx.js → index-tyWABqp9.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DD5y5msp.js → initDefaultProps-DzrCDb3j.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BuoutMia.js → motion-BQERVnE3.js} +1 -1
- package/src/assets/web-panel/assets/{move-DkpjqOXg.js → move-I9ACA5XJ.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BmGJD-v-.js → mtc-parser-Dd2Pw-tr.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DftUE0Sz.js → omit-DwzYRzWV.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DDRb9FIu.js → pickAttrs-BSGULyIL.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DPgtxOOD.js → placementArrow-tSYYjAts.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BQFRzFeZ.js → responsiveObserve-Dy2lqikT.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DQ4lmUSz.js → slide-RaB4Uq0c.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-C1TR4ZiQ.js → statusUtils-CBpC_wZg.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B-Suj978.js → styleChecker-BEKwPWt5.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Q7bDZ3EI.js → useFlexGapSupport-C4CnYJH1.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DHjRLyQH.js → useFs-n24jutw5.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-lQOvCvCr.js → usePersonalDataHub-DMgS8F6G.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Ie0g4-p3.js → vnode-BSp2KYcj.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CHP0YEoH.js → zoom-7UfQtTPh.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +41 -2
- package/src/commands/compliance.js +3 -1
- package/src/commands/review.js +47 -17
- package/src/commands/session.js +11 -2
- package/src/gateways/ws/message-dispatcher.js +145 -165
- package/src/gateways/ws/ws-session-gateway.js +39 -5
- package/src/harness/jsonl-session-store.js +39 -12
- package/src/harness/worktree-isolator.js +5 -0
- package/src/lib/agent-core.js +1 -0
- package/src/lib/audit-logger.js +3 -1
- package/src/lib/chat-core.js +5 -2
- package/src/lib/chat-intent-service.js +68 -21
- package/src/lib/config-manager.js +25 -1
- package/src/lib/credential-guard.js +43 -1
- package/src/lib/git-integration.js +5 -0
- package/src/lib/interaction-adapter.js +32 -11
- package/src/lib/jsonl-session-store.js +1 -0
- package/src/lib/llm-config-defaults.js +37 -0
- package/src/lib/mcp-oauth.js +76 -10
- package/src/lib/permission-engine.js +4 -1
- package/src/lib/pipeline-orchestrator.js +20 -2
- package/src/lib/project-instructions.js +13 -0
- package/src/lib/repl-denials.js +137 -0
- package/src/lib/safe-json.js +22 -0
- package/src/lib/sandbox-v2.js +7 -6
- package/src/lib/search-command.js +65 -0
- package/src/lib/settings-hooks.cjs +133 -0
- package/src/lib/settings-loader.cjs +16 -7
- package/src/lib/social-graph.js +3 -1
- package/src/lib/stream-retry.js +27 -0
- package/src/lib/turn-context.js +15 -5
- package/src/repl/agent-repl.js +81 -8
- package/src/runtime/__tests__/message-roles.test.js +36 -3
- package/src/runtime/agent-core.js +175 -50
- package/src/runtime/coding-agent-contract-shared.cjs +9 -2
- package/src/runtime/coding-agent-shell-policy.cjs +23 -2
- package/src/runtime/file-ref-expander.js +51 -7
- package/src/runtime/headless-runner.js +83 -2
- package/src/runtime/headless-stream.js +69 -3
- package/src/runtime/mcp-config.js +42 -1
- package/src/runtime/message-roles.js +14 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Pg7dIsiE.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-D26Bz5gS.js +0 -7
- package/src/assets/web-panel/assets/devWarning-D_lwLZ6O.js +0 -1
- package/src/assets/web-panel/assets/index-CEwuCM44.js +0 -1
- package/src/assets/web-panel/assets/index-DzzgU4IU.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as f}from"./index-
|
|
1
|
+
import{u as f}from"./index-BWcCyH6-.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{O as i,h as a,w as l}from"./index-
|
|
1
|
+
import{O as i,h as a,w as l}from"./index-BWcCyH6-.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-BWcCyH6-.js";import{i as f}from"./motion-BQERVnE3.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-BWcCyH6-.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/agent.js
CHANGED
|
@@ -533,11 +533,50 @@ export function registerAgentCommand(program) {
|
|
|
533
533
|
// flags there, and BEFORE every dispatch (headless/stream/REPL) since
|
|
534
534
|
// they all read options.provider/model/baseUrl/apiKey.
|
|
535
535
|
{
|
|
536
|
-
const { applyConfigLlmDefaults } =
|
|
536
|
+
const { applyConfigLlmDefaults, reconcileConfigLlmProvider } =
|
|
537
537
|
await import("../lib/llm-config-defaults.js");
|
|
538
|
-
|
|
538
|
+
|
|
539
|
+
// Self-repair a MISLABELED config (provider disagrees with the provider
|
|
540
|
+
// its baseUrl actually belongs to — the recurring "anthropic + volces
|
|
541
|
+
// baseUrl + haiku" corruption whose writer was never found). The baseUrl
|
|
542
|
+
// is authoritative, so correct provider/model to match it AND persist:
|
|
543
|
+
// without this the on-disk config stays wrong and runnable-provider
|
|
544
|
+
// relabels on EVERY run, re-emitting "provider 配置与 baseUrl 不一致".
|
|
545
|
+
// Persisting also fixes what `cc config` and the editor plugin read next.
|
|
546
|
+
const fullConfig = loadConfig();
|
|
547
|
+
const { llm: repairedLlm, changed: cfgRepaired } =
|
|
548
|
+
await reconcileConfigLlmProvider(fullConfig.llm || {});
|
|
549
|
+
if (cfgRepaired) {
|
|
550
|
+
try {
|
|
551
|
+
const { saveConfig } = await import("../lib/config-manager.js");
|
|
552
|
+
saveConfig({ ...fullConfig, llm: repairedLlm });
|
|
553
|
+
if (!process.env.VITEST && !process.env.VITEST_WORKER_ID) {
|
|
554
|
+
process.stderr.write(
|
|
555
|
+
`\x1b[33m[config] 已修正 llm.provider → "${repairedLlm.provider}"` +
|
|
556
|
+
`(原配置 provider 与 baseUrl 不一致;baseUrl 为准)。\x1b[0m\n`,
|
|
557
|
+
);
|
|
558
|
+
}
|
|
559
|
+
} catch {
|
|
560
|
+
/* best-effort: a config repair must never fail the run */
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
applyConfigLlmDefaults(options, repairedLlm, {
|
|
539
565
|
explicitModel: explicitCliModel, // settings-file model must not ride
|
|
540
566
|
});
|
|
567
|
+
|
|
568
|
+
// Also reconcile the RESOLVED options: the editor panel may have already
|
|
569
|
+
// spawned us with an explicit `--provider anthropic` (read from the
|
|
570
|
+
// pre-repair config), which applyConfigLlmDefaults leaves intact. Correct
|
|
571
|
+
// it here so it agrees with the baseUrl before the call runs — this is
|
|
572
|
+
// exactly what runnable-provider would do, just earlier and without the
|
|
573
|
+
// every-turn "已按 baseUrl 切换" notice (we already surfaced the repair).
|
|
574
|
+
const { llm: fixedOpts, changed: optsFixed } =
|
|
575
|
+
await reconcileConfigLlmProvider(options);
|
|
576
|
+
if (optsFixed) {
|
|
577
|
+
options.provider = fixedOpts.provider;
|
|
578
|
+
if (fixedOpts.model) options.model = fixedOpts.model;
|
|
579
|
+
}
|
|
541
580
|
}
|
|
542
581
|
|
|
543
582
|
// Claude-Code 2.1.183 parity: warn up front if the now-resolved model is
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import fs from "fs";
|
|
7
|
+
import { safeJsonParse } from "../lib/safe-json.js";
|
|
7
8
|
import chalk from "chalk";
|
|
8
9
|
import { logger } from "../lib/logger.js";
|
|
9
10
|
import { numericOption } from "../lib/cli-numeric.js";
|
|
@@ -168,7 +169,8 @@ function _loadPoliciesFromDb(db, framework) {
|
|
|
168
169
|
name: r.name,
|
|
169
170
|
type: r.type,
|
|
170
171
|
framework: r.framework,
|
|
171
|
-
|
|
172
|
+
// One corrupt rules cell must not crash the whole policy list.
|
|
173
|
+
rules: safeJsonParse(r.rules, {}),
|
|
172
174
|
enabled: !!r.enabled,
|
|
173
175
|
severity: r.severity,
|
|
174
176
|
createdAt: r.created_at,
|
package/src/commands/review.js
CHANGED
|
@@ -33,6 +33,7 @@ import fs from "node:fs";
|
|
|
33
33
|
import path from "node:path";
|
|
34
34
|
import chalk from "chalk";
|
|
35
35
|
import { logger } from "../lib/logger.js";
|
|
36
|
+
import { firstBalancedJson } from "../lib/json-schema-output.js";
|
|
36
37
|
|
|
37
38
|
/** Diffs larger than this are truncated before going to the model. */
|
|
38
39
|
const MAX_DIFF_CHARS = 200_000;
|
|
@@ -367,8 +368,9 @@ function resolvePr(cwd, gh) {
|
|
|
367
368
|
}
|
|
368
369
|
let repo = null;
|
|
369
370
|
try {
|
|
370
|
-
repo = JSON.parse(
|
|
371
|
-
|
|
371
|
+
repo = JSON.parse(
|
|
372
|
+
gh(["repo", "view", "--json", "nameWithOwner"], { cwd }),
|
|
373
|
+
).nameWithOwner;
|
|
372
374
|
} catch {
|
|
373
375
|
repo = null;
|
|
374
376
|
}
|
|
@@ -386,16 +388,29 @@ export function parseFindings(text) {
|
|
|
386
388
|
let s = String(text).trim();
|
|
387
389
|
const fence = s.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
388
390
|
if (fence) s = fence[1].trim();
|
|
391
|
+
// Try a BALANCED array first (stops at the first complete [...]); fall back to
|
|
392
|
+
// the greedy first-[..last-] slice. The greedy slice ALONE over-captures when
|
|
393
|
+
// the reply has trailing prose or a stray `]` (e.g. "findings: [ … ]. See [1]")
|
|
394
|
+
// — JSON.parse then fails and EVERY finding is silently dropped.
|
|
395
|
+
const candidates = [];
|
|
396
|
+
const balanced = firstBalancedJson(s, "[");
|
|
397
|
+
if (balanced) candidates.push(balanced);
|
|
389
398
|
const start = s.indexOf("[");
|
|
390
399
|
const end = s.lastIndexOf("]");
|
|
391
|
-
if (start
|
|
392
|
-
let arr;
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
400
|
+
if (start !== -1 && end > start) candidates.push(s.slice(start, end + 1));
|
|
401
|
+
let arr = null;
|
|
402
|
+
for (const c of candidates) {
|
|
403
|
+
try {
|
|
404
|
+
const parsed = JSON.parse(c);
|
|
405
|
+
if (Array.isArray(parsed)) {
|
|
406
|
+
arr = parsed;
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
} catch {
|
|
410
|
+
/* try the next candidate */
|
|
411
|
+
}
|
|
397
412
|
}
|
|
398
|
-
if (!
|
|
413
|
+
if (!arr) return [];
|
|
399
414
|
return arr
|
|
400
415
|
.filter(
|
|
401
416
|
(f) =>
|
|
@@ -442,7 +457,11 @@ export function buildReviewPayload(findings, { commitId } = {}) {
|
|
|
442
457
|
* Post the findings to the PR as a single review with inline comments
|
|
443
458
|
* (outward-facing — callers gate this behind --dry-run / confirmation).
|
|
444
459
|
*/
|
|
445
|
-
export function postReviewComments(
|
|
460
|
+
export function postReviewComments(
|
|
461
|
+
pr,
|
|
462
|
+
findings,
|
|
463
|
+
{ gh = ghCli, cwd, commitId } = {},
|
|
464
|
+
) {
|
|
446
465
|
if (!pr || !pr.repo || !pr.number) {
|
|
447
466
|
throw new Error("cannot post: PR repo/number not resolved.");
|
|
448
467
|
}
|
|
@@ -487,7 +506,10 @@ export async function runReviewComment(options = {}, deps = {}) {
|
|
|
487
506
|
// Default the scope to the PR's base branch (review the PR's changes) unless
|
|
488
507
|
// the user gave an explicit scope.
|
|
489
508
|
const explicitScope =
|
|
490
|
-
options.staged ||
|
|
509
|
+
options.staged ||
|
|
510
|
+
options.base ||
|
|
511
|
+
options.range ||
|
|
512
|
+
(options.paths || []).length;
|
|
491
513
|
const scopeOpts = {
|
|
492
514
|
staged: options.staged === true,
|
|
493
515
|
base: options.base || (explicitScope ? null : pr.baseRefName),
|
|
@@ -586,12 +608,20 @@ export async function runReview(options = {}, deps = {}) {
|
|
|
586
608
|
paths: options.paths || [],
|
|
587
609
|
};
|
|
588
610
|
|
|
589
|
-
const {
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
611
|
+
const {
|
|
612
|
+
diff,
|
|
613
|
+
summary,
|
|
614
|
+
scope,
|
|
615
|
+
label,
|
|
616
|
+
untracked,
|
|
617
|
+
hasDiff,
|
|
618
|
+
hasUntracked,
|
|
619
|
+
truncated,
|
|
620
|
+
} = collectReviewDiff(scopeOpts, {
|
|
621
|
+
cwd,
|
|
622
|
+
git,
|
|
623
|
+
includeUntracked: options.untracked !== false,
|
|
624
|
+
});
|
|
595
625
|
if (!hasDiff && !hasUntracked) {
|
|
596
626
|
return { exitCode: 0, isError: false, scope, empty: true };
|
|
597
627
|
}
|
package/src/commands/session.js
CHANGED
|
@@ -188,7 +188,13 @@ export function registerSessionCommand(program) {
|
|
|
188
188
|
|
|
189
189
|
let messages = sess.messages;
|
|
190
190
|
if (options.limit) {
|
|
191
|
-
messages = messages.slice(
|
|
191
|
+
messages = messages.slice(
|
|
192
|
+
-numericOption(options.limit, {
|
|
193
|
+
name: "--limit",
|
|
194
|
+
integer: true,
|
|
195
|
+
min: 1,
|
|
196
|
+
}),
|
|
197
|
+
);
|
|
192
198
|
}
|
|
193
199
|
|
|
194
200
|
for (const msg of messages) {
|
|
@@ -383,7 +389,10 @@ export function registerSessionCommand(program) {
|
|
|
383
389
|
session: s.id,
|
|
384
390
|
title: s.title,
|
|
385
391
|
role: ev.type === "user_message" ? "user" : "assistant",
|
|
386
|
-
|
|
392
|
+
// toIsoSafe (not a bare truthy guard): an invalid-but-truthy
|
|
393
|
+
// timestamp on a corrupt event would otherwise throw RangeError
|
|
394
|
+
// and crash the whole search.
|
|
395
|
+
when: store.toIsoSafe(ev.timestamp),
|
|
387
396
|
preview: text
|
|
388
397
|
.slice(from, idx + q.length + 50)
|
|
389
398
|
.replace(/\s+/g, " ")
|
|
@@ -106,199 +106,179 @@ export function createWsMessageDispatcher(server) {
|
|
|
106
106
|
"llm.chat": () => server._handleLlmChat(id, ws, message),
|
|
107
107
|
};
|
|
108
108
|
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
109
|
+
// Static core routes take precedence and are dispatched directly. The
|
|
110
|
+
// feature handler maps below are consulted ONLY when no static route
|
|
111
|
+
// matches — so a feature topic can never shadow a core protocol route
|
|
112
|
+
// (auth/cancel/ping/execute), and we no longer allocate a closure for all
|
|
113
|
+
// ~79 feature keys on every message (the old per-message Object.keys loops
|
|
114
|
+
// built the entire route table each dispatch). Only the matched handler
|
|
115
|
+
// runs.
|
|
116
|
+
const staticHandler = routes[type];
|
|
117
|
+
if (staticHandler) {
|
|
118
|
+
return staticHandler();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Phase I — Hosted Session API streaming routes (stream.run). Each
|
|
122
|
+
// intermediate event goes out as { id, type:"stream.event", event } and
|
|
123
|
+
// the final response is sent by the normal ok/err wrapper.
|
|
124
|
+
if (SESSION_CORE_STREAMING_HANDLERS[type]) {
|
|
125
|
+
const controller = new AbortController();
|
|
126
|
+
const client = server.clients.get(clientId);
|
|
127
|
+
if (client) {
|
|
128
|
+
client._streamAborts = client._streamAborts || new Map();
|
|
129
|
+
client._streamAborts.set(id, controller);
|
|
130
|
+
}
|
|
131
|
+
const sender = (payload) => server._send(ws, { id, ...payload });
|
|
132
|
+
const context = { server, ws, clientId };
|
|
133
|
+
try {
|
|
134
|
+
const result = await SESSION_CORE_STREAMING_HANDLERS[type](
|
|
135
|
+
message,
|
|
136
|
+
sender,
|
|
137
|
+
controller.signal,
|
|
138
|
+
context,
|
|
139
|
+
);
|
|
140
|
+
server._send(ws, { id, type: `${type}.end`, ...result });
|
|
141
|
+
} catch (err) {
|
|
142
|
+
server._send(ws, {
|
|
143
|
+
id,
|
|
144
|
+
type: "error",
|
|
145
|
+
code: "STREAM_RUN_ERROR",
|
|
146
|
+
message: err?.message || String(err),
|
|
147
|
+
});
|
|
148
|
+
} finally {
|
|
149
|
+
if (client?._streamAborts) client._streamAborts.delete(id);
|
|
150
|
+
}
|
|
151
|
+
return;
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
// Video Editing streaming routes
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
});
|
|
177
|
-
} finally {
|
|
178
|
-
if (client?._streamAborts) client._streamAborts.delete(id);
|
|
179
|
-
}
|
|
180
|
-
};
|
|
155
|
+
if (VIDEO_STREAMING_HANDLERS[type]) {
|
|
156
|
+
const controller = new AbortController();
|
|
157
|
+
const client = server.clients.get(clientId);
|
|
158
|
+
if (client) {
|
|
159
|
+
client._streamAborts = client._streamAborts || new Map();
|
|
160
|
+
client._streamAborts.set(id, controller);
|
|
161
|
+
}
|
|
162
|
+
const sender = (payload) => server._send(ws, { id, ...payload });
|
|
163
|
+
try {
|
|
164
|
+
const result = await VIDEO_STREAMING_HANDLERS[type](
|
|
165
|
+
message,
|
|
166
|
+
sender,
|
|
167
|
+
controller.signal,
|
|
168
|
+
);
|
|
169
|
+
server._send(ws, { id, type: `${type}.end`, ...result });
|
|
170
|
+
} catch (err) {
|
|
171
|
+
server._send(ws, {
|
|
172
|
+
id,
|
|
173
|
+
type: "error",
|
|
174
|
+
code: "VIDEO_STREAM_ERROR",
|
|
175
|
+
message: err?.message || String(err),
|
|
176
|
+
});
|
|
177
|
+
} finally {
|
|
178
|
+
if (client?._streamAborts) client._streamAborts.delete(id);
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
// Video Editing request/response routes
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
code: "VIDEO_ERROR",
|
|
198
|
-
message: err?.message || String(err),
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
};
|
|
184
|
+
if (VIDEO_HANDLERS[type]) {
|
|
185
|
+
try {
|
|
186
|
+
const result = await VIDEO_HANDLERS[type](message);
|
|
187
|
+
server._send(ws, { id, type: `${type}.response`, ...result });
|
|
188
|
+
} catch (err) {
|
|
189
|
+
server._send(ws, {
|
|
190
|
+
id,
|
|
191
|
+
type: "error",
|
|
192
|
+
code: "VIDEO_ERROR",
|
|
193
|
+
message: err?.message || String(err),
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
return;
|
|
202
197
|
}
|
|
203
198
|
|
|
204
199
|
// Personal Data Hub topics — same 10 surfaces as the Electron IPC
|
|
205
200
|
// (see desktop-app-vue/src/main/ipc/personal-data-hub-ipc.js). Each
|
|
206
201
|
// handler returns { result } or { error }; we wrap with the standard
|
|
207
202
|
// response envelope so renderer code is shell-agnostic.
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (out && out.error) {
|
|
213
|
-
server._send(ws, {
|
|
214
|
-
id,
|
|
215
|
-
type: "error",
|
|
216
|
-
code: "PERSONAL_DATA_HUB_ERROR",
|
|
217
|
-
message: out.error,
|
|
218
|
-
});
|
|
219
|
-
} else {
|
|
220
|
-
server._send(ws, {
|
|
221
|
-
id,
|
|
222
|
-
type: `${hubType}.response`,
|
|
223
|
-
result: out && out.result !== undefined ? out.result : out,
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
} catch (err) {
|
|
203
|
+
if (PERSONAL_DATA_HUB_HANDLERS[type]) {
|
|
204
|
+
try {
|
|
205
|
+
const out = await PERSONAL_DATA_HUB_HANDLERS[type](message);
|
|
206
|
+
if (out && out.error) {
|
|
227
207
|
server._send(ws, {
|
|
228
208
|
id,
|
|
229
209
|
type: "error",
|
|
230
210
|
code: "PERSONAL_DATA_HUB_ERROR",
|
|
231
|
-
message:
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// Phase 5.7 — streaming sync routes. Adapter progress events are
|
|
238
|
-
// pushed as `<topic>.event` messages tagged with the request id;
|
|
239
|
-
// the final report comes as `<topic>.end`.
|
|
240
|
-
for (const streamType of Object.keys(
|
|
241
|
-
PERSONAL_DATA_HUB_STREAMING_HANDLERS,
|
|
242
|
-
)) {
|
|
243
|
-
routes[streamType] = async () => {
|
|
244
|
-
const sender = (payload) => server._send(ws, { id, ...payload });
|
|
245
|
-
try {
|
|
246
|
-
const out = await PERSONAL_DATA_HUB_STREAMING_HANDLERS[streamType](
|
|
247
|
-
message,
|
|
248
|
-
sender,
|
|
249
|
-
);
|
|
250
|
-
server._send(ws, {
|
|
251
|
-
id,
|
|
252
|
-
type: `${streamType}.end`,
|
|
253
|
-
...(out && out.result !== undefined
|
|
254
|
-
? { result: out.result }
|
|
255
|
-
: out || {}),
|
|
211
|
+
message: out.error,
|
|
256
212
|
});
|
|
257
|
-
}
|
|
213
|
+
} else {
|
|
258
214
|
server._send(ws, {
|
|
259
215
|
id,
|
|
260
|
-
type:
|
|
261
|
-
|
|
262
|
-
message: err?.message || String(err),
|
|
216
|
+
type: `${type}.response`,
|
|
217
|
+
result: out && out.result !== undefined ? out.result : out,
|
|
263
218
|
});
|
|
264
219
|
}
|
|
265
|
-
}
|
|
220
|
+
} catch (err) {
|
|
221
|
+
server._send(ws, {
|
|
222
|
+
id,
|
|
223
|
+
type: "error",
|
|
224
|
+
code: "PERSONAL_DATA_HUB_ERROR",
|
|
225
|
+
message: err?.message || String(err),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
return;
|
|
266
229
|
}
|
|
267
230
|
|
|
268
|
-
// Phase
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
231
|
+
// Phase 5.7 — streaming sync routes. Adapter progress events are pushed
|
|
232
|
+
// as `<topic>.event` messages tagged with the request id; the final
|
|
233
|
+
// report comes as `<topic>.end`.
|
|
234
|
+
if (PERSONAL_DATA_HUB_STREAMING_HANDLERS[type]) {
|
|
235
|
+
const sender = (payload) => server._send(ws, { id, ...payload });
|
|
236
|
+
try {
|
|
237
|
+
const out = await PERSONAL_DATA_HUB_STREAMING_HANDLERS[type](
|
|
238
|
+
message,
|
|
239
|
+
sender,
|
|
240
|
+
);
|
|
241
|
+
server._send(ws, {
|
|
242
|
+
id,
|
|
243
|
+
type: `${type}.end`,
|
|
244
|
+
...(out && out.result !== undefined
|
|
245
|
+
? { result: out.result }
|
|
246
|
+
: out || {}),
|
|
247
|
+
});
|
|
248
|
+
} catch (err) {
|
|
249
|
+
server._send(ws, {
|
|
250
|
+
id,
|
|
251
|
+
type: "error",
|
|
252
|
+
code: "PERSONAL_DATA_HUB_STREAM_ERROR",
|
|
253
|
+
message: err?.message || String(err),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
return;
|
|
288
257
|
}
|
|
289
258
|
|
|
290
|
-
|
|
291
|
-
if (
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
type:
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
259
|
+
// Phase I — Hosted Session API (session-core, memory, beta, usage)
|
|
260
|
+
if (SESSION_CORE_HANDLERS[type]) {
|
|
261
|
+
try {
|
|
262
|
+
const result = await SESSION_CORE_HANDLERS[type](message);
|
|
263
|
+
server._send(ws, { id, type: `${type}.response`, ...result });
|
|
264
|
+
} catch (err) {
|
|
265
|
+
server._send(ws, {
|
|
266
|
+
id,
|
|
267
|
+
type: "error",
|
|
268
|
+
code: "SESSION_CORE_ERROR",
|
|
269
|
+
message: err?.message || String(err),
|
|
270
|
+
});
|
|
271
|
+
}
|
|
298
272
|
return;
|
|
299
273
|
}
|
|
300
274
|
|
|
301
|
-
|
|
275
|
+
server._send(ws, {
|
|
276
|
+
id,
|
|
277
|
+
type: "error",
|
|
278
|
+
code: "UNKNOWN_TYPE",
|
|
279
|
+
message: `Unknown message type: ${type}`,
|
|
280
|
+
});
|
|
281
|
+
return;
|
|
302
282
|
},
|
|
303
283
|
};
|
|
304
284
|
}
|