chainlesschain 0.166.36 → 0.166.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/assets/web-panel/assets/{AIOps-Zs-zPwVG.js → AIOps-B_Nt1Qe4.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-HZlxM6H0.js → ActionButton-CHQbie4X.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CXyThRDb.js → Analytics-Bm9364Lw.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DeyYh_EF.js → AppLayout-DTwlIh2v.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-BQDtMwkx.js → Artifacts-OibP0qB4.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DNH4UOux.js → Audit-B8Fwavkg.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BkKdIxE6.js → BackgroundAgents-p1Vb2K2B.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DYy4aJom.js → Backup-BI3QT-wI.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DjoyGVYm.js → BaseInput-BW_VRWWu.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-D86ZYgOD.js → Chat-CUEhDQfq.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-RxI_YYth.js → ChatBubbleRenderer-C5UVXdVE.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-C7p8UY99.js → Checkbox-URYsaaxv.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DnapqgV5.js → Codegen-DJAwC80a.js} +1 -1
- package/src/assets/web-panel/assets/{Col-C29J2DBT.js → Col-DfRKFzc9.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Bf3KeLCr.js → Community-GOkGHuly.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DA83wB48.js → Compact-CIMs13NC.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CXXVgRFG.js → Compliance-BE-TQIxV.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-B28Ftuqv.js → Cowork-CYmbJiWw.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-CO-BcnDf.js → Cron-Be3OIWyM.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BmgPMFCs.js → Crosschain-2xB2HS2D.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CYW9WslA.js → DID-B_lJO2yF.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CWWhVWds.js → Dashboard-DnVWqUER.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CjTuc1-n.js → Dropdown-C7ZJvHVa.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BrROAu4d.js → EmailListRenderer-DLevT-0F.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Ci8Lmk8W.js → FamilyGuardDashboard-BwhQ5BRU.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CKzKVLE_.js → Federation-BkGI-Xkq.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CC2CK5PQ.js → FormItemContext-BgIIbMd7.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BYa3ElyT.js → GenericCardRenderer-qL-qN8Nb.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Bmn3ucA4.js → Git-BTzgrC4U.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DqEOXitg.js → Governance-p28vdCN4.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BjfeExba.js → Inference-Cqephrur.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CBTyIFlJ.js → KnowledgeGraph-C3v5Q4Zp.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-KZfA_M9Q.js → Logs-T6f0w32w.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BG7vi3V4.js → MarkdownRenderer-Dj5XPm3S.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-BFeK4he0.js → Marketplace-ClDsvHDH.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Brg7uUoK.js → McpTools-C4P-_snx.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-Ce4AmyX3.js → Memory-BZZfG6y6.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Dx1VBL_E.js → MobileBridge-DpIv_BLs.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DPyRr2Xl.js → MobileProjects-Buz3NIQg.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BzRmtDQU.js → Mtc-HS2PJB79.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-DvZ5kLvJ.js → MtcAudit-UmBrcU27.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-D8uGUjX1.js → Multisig-C00sXiZf.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-igc-TQE5.js → NLProgramming-Dj1ng_ph.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CTqDYlek.js → Notes-C4LEVKlk.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-CkcLa2rb.js → NotificationSettings-BWXwnekv.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BfScYvnH.js → OrderTableRenderer-CZHfK8Nn.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BjKK9SdB.js → Organization-CFEtFPrV.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BkcghTPE.js → Overflow-DSz4MJK1.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-l9f34Xu8.js → P2P-DyTEytwG.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-yVXWmwWe.js → PdhVaultBrowser-B5QNGLVx.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DeSYs0VV.js → Permissions-wEC_X7x4.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CmKmhy0q.js → PersonalDataHub-If5GZlGZ.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DBxS4R_r.js → Pipeline-LB4gqqmX.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CKngdGw3.js → Privacy-QVLhoxcN.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-0Pso0jXN.js → ProjectInit-FaAbTYTo.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BHrqWQ6r.js → ProjectSettings-DhMeNA21.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-B8wIh9PK.js → Projects-5L4lkWAZ.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CXFTOHRV.js → Providers-DhZFp8fO.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DfN0c_BN.js → QrScannerModal-BZuJ7_xi.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-v1Z5hty_.js → QuickAsk-TXddPYYb.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DOaVmZUi.js → Recommend-DDuXIKYt.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession--EWcPBY1.js → RemoteSession-CDrTXImv.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-DUWFSNvV.js → Reputation-B2xKaKzt.js} +1 -1
- package/src/assets/web-panel/assets/{Row-0-bFnXWF.js → Row-DzAjWAOX.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-B_uTfubW.js → RssFeed-CKH38BLF.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CqxiTLfB.js → Search-CuPqJYoQ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CGoHOz5B.js → Security-DmAd2hxz.js} +4 -4
- package/src/assets/web-panel/assets/{Services-COhAbS45.js → Services-Bt3nljnY.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-B97crp6v.js → Skeleton-CP7RH093.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-er_XdavV.js → Skills-DKNeMBTx.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-RpkWkzOL.js → Sla-CbpM8Nrd.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-DTk-vTzF.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-Bbiw6ohw.js → SyncSettings-DKiplwmc.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-CRghr7lo.js → Tasks-z-lOm8fx.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BUQkfydG.js → Templates-Rb-Q0DGX.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CfUFOsZu.js → Tenant-C2sqDUnR.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BGY7gi4M.js → Terminal-DcyzskEE.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-B3Len0l7.js → TimelineRenderer-lg0Eam7N.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BjeHn2zI.js → Tokens-D9USIMIA.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-ctcZ2mcv.js → Trigger-BQpaQJ5k.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-oncF3TpO.js → Trust-C-Mik04s.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BwKbVYCd.js → UkeySign-DrnZ_o56.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-D1dgL-3U.js → VideoEditing-BDOsoZi0.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-4hXAfjBL.js → Wallet-Ct_bleI7.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-C8p3cotb.js → WebAuthn-B6b6FDao.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-BnrjG77E.js → WorkflowEditor-ZUJMaIHr.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B-YNK7EI.js → chat-BII20OJy.js} +1 -1
- package/src/assets/web-panel/assets/{colors-B9HYvK-e.js → colors-DEsJRV3n.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BJr0quBA.js → compact-item-DoDYAzN9.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CXfbQEWD.js → createContext-o_nofnVW.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-0tgDCszN.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-B7Q02hdZ.js → hasIn-CAsABTHC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DsV1HA0Z.js → index-B0ApxOMw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Gjegl5Ig.js → index-B4SfcwZA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoNVnnAq.js → index-B9Z75LfA.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7IZWdoB.js → index-B9hYHPhs.js} +1 -1
- package/src/assets/web-panel/assets/{index-DPUg6cVc.js → index-BDRh3v44.js} +1 -1
- package/src/assets/web-panel/assets/{index-DutYFyC0.js → index-BcYbQoY7.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1GP2MQz.js → index-Bmwo5wQG.js} +1 -1
- package/src/assets/web-panel/assets/{index-kAggAkrB.js → index-Bn2ZPUXO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMoUa3dF.js → index-BnbnmRqg.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmvpVSmM.js → index-Bqyg3PME.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmCD1_HC.js → index-BrIIJ2s-.js} +1 -1
- package/src/assets/web-panel/assets/{index-G7Z_On_n.js → index-BxT8yTwS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BClzZrmx.js → index-Bycj011d.js} +1 -1
- package/src/assets/web-panel/assets/{index-4gZEpDAG.js → index-BzMA6Ra3.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEujQqdl.js → index-C1YDdyQ1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvRqE3Un.js → index-CE2J04dA.js} +1 -1
- package/src/assets/web-panel/assets/index-CFF8XEFE.js +1 -0
- package/src/assets/web-panel/assets/{index-D5g5_oua.js → index-CQE-WMEU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQ7qYZS4.js → index-CVQSl1uY.js} +1 -1
- package/src/assets/web-panel/assets/{index-BleXwr2w.js → index-CeJSTcXw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BU_adeUp.js → index-CeWJqXNX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNL9lmWL.js → index-Cf3sFEoE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtunVZuS.js → index-D5Fd4tdL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXgHZ_HG.js → index-DDQzBK3l.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3M8M9_U.js → index-DQmX_-hk.js} +1 -1
- package/src/assets/web-panel/assets/{index-B6h86qjh.js → index-DRAA2McB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BB4KIBso.js → index-DU2Rpx1m.js} +1 -1
- package/src/assets/web-panel/assets/index-DVUEISry.js +1 -0
- package/src/assets/web-panel/assets/{index-cq5Q-RHa.js → index-DWZNYecl.js} +3 -3
- package/src/assets/web-panel/assets/{index-COdAugDt.js → index-D_CMB_wC.js} +1 -1
- package/src/assets/web-panel/assets/{index-iCKFl_jt.js → index-Dbb34cAr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bf0OxvOh.js → index-DciLb_Ww.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0zuXz4s.js → index-Dgt1mKby.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcyxVqzn.js → index-Dhnau6uw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CU7cBzr9.js → index-DrsAF-Ar.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_UneDq3.js → index-DsoFTdA2.js} +1 -1
- package/src/assets/web-panel/assets/{index-6wWd08X-.js → index-TSwbtCYG.js} +1 -1
- package/src/assets/web-panel/assets/{index-HzCaU25O.js → index-kIyLNyoF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bd3nX6aj.js → index-tCeNfxv4.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DrzGM6fO.js → initDefaultProps-CNjeeoKE.js} +1 -1
- package/src/assets/web-panel/assets/{motion-SE_xFnGL.js → motion-CBT8IZDm.js} +1 -1
- package/src/assets/web-panel/assets/{move-CrPjKNiG.js → move-h1MOxjqv.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CpcyFPK6.js → mtc-parser-C_3pqNmn.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BV0g7vf4.js → omit-CMUnPFDk.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-lWpsc-k6.js → pickAttrs-p8_c1xq0.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CiewvU4X.js → placementArrow-D6O67r23.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DbF8pamO.js → responsiveObserve-DquhepAK.js} +1 -1
- package/src/assets/web-panel/assets/{slide-Bn82Ip9-.js → slide-CZ-m6gmS.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-J76gk_-G.js → statusUtils-k9ejZFtd.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BL95J74a.js → styleChecker-NX6_137R.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BUzhdQsv.js → useFlexGapSupport-bCqR70lP.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B2Fppepb.js → useFs-2l0vSqyY.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DjTASfYE.js → usePersonalDataHub-1yccm4O7.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BwrOgBqP.js → vnode-CxQzajDo.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-B6MeT_Gw.js → zoom-CrTKwFyb.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/hub.js +21 -6
- package/src/commands/stream.js +28 -7
- package/src/commands/ui.js +10 -2
- package/src/data/changelog.json +13 -0
- package/src/gateways/ws/chat-intent-protocol.js +4 -1
- package/src/gateways/ws/llm-chat-protocol.js +29 -3
- package/src/gateways/ws/message-dispatcher.js +3 -1
- package/src/gateways/ws/personal-data-hub-protocol.js +24 -10
- package/src/gateways/ws/session-core-protocol.js +23 -6
- package/src/gateways/ws/session-protocol.js +1 -0
- package/src/lib/__tests__/provider-stream.test.js +6 -8
- package/src/lib/chat-core.js +67 -9
- package/src/lib/chat-intent-service.js +138 -39
- package/src/lib/evolution/evolution-deployment-loader.js +7 -1
- package/src/lib/evolution/governed-hub-llm.js +56 -0
- package/src/lib/evolution/governed-hub-resolver.js +65 -0
- package/src/lib/evolution/governed-hub-skill.js +36 -0
- package/src/lib/evolution/governed-model-turn.js +88 -0
- package/src/lib/personal-data-hub-wiring.js +49 -0
- package/src/lib/provider-stream.js +94 -45
- package/src/lib/ws-chat-handler.js +19 -2
- package/src/assets/web-panel/assets/SpeechSettings-DDVXmT5y.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DNpXMZaQ.js +0 -1
- package/src/assets/web-panel/assets/index-2hcdmWpb.js +0 -1
- package/src/assets/web-panel/assets/index-DbQCUG4D.js +0 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { types } from "node:util";
|
|
3
|
+
import { captureAgentEvolutionRuntimeComposition } from "./agent-evolution-runtime-composition-brand.js";
|
|
4
|
+
import { captureAgentEvolutionIngress } from "./agent-evolution-ingress.js";
|
|
5
|
+
|
|
6
|
+
export function readEvolutionCompositionFactory(dependencies = {}) {
|
|
7
|
+
if (
|
|
8
|
+
!dependencies ||
|
|
9
|
+
typeof dependencies !== "object" ||
|
|
10
|
+
Array.isArray(dependencies) ||
|
|
11
|
+
types.isProxy(dependencies)
|
|
12
|
+
) {
|
|
13
|
+
throw new TypeError("Model turn dependencies must be a plain object");
|
|
14
|
+
}
|
|
15
|
+
const property = Object.getOwnPropertyDescriptor(
|
|
16
|
+
dependencies,
|
|
17
|
+
"evolutionCompositionFactory",
|
|
18
|
+
);
|
|
19
|
+
if (
|
|
20
|
+
property &&
|
|
21
|
+
(!Object.hasOwn(property, "value") || typeof property.value !== "function")
|
|
22
|
+
) {
|
|
23
|
+
throw new TypeError(
|
|
24
|
+
"evolutionCompositionFactory must be a function data property",
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
return property?.value ?? null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Only a host-owned factory can supply authority. Client messages supply input,
|
|
31
|
+
// never a run identifier or composition to borrow from another request.
|
|
32
|
+
export async function prepareGovernedModelTurn(
|
|
33
|
+
factory,
|
|
34
|
+
{ mode, messages, signal },
|
|
35
|
+
) {
|
|
36
|
+
signal?.throwIfAborted();
|
|
37
|
+
if (factory === null)
|
|
38
|
+
return {
|
|
39
|
+
governed: false,
|
|
40
|
+
messages,
|
|
41
|
+
complete: async () => {
|
|
42
|
+
signal?.throwIfAborted();
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
if (typeof factory !== "function")
|
|
46
|
+
throw new TypeError("Invalid evolution composition factory");
|
|
47
|
+
const runId = `${mode}-${randomUUID()}`;
|
|
48
|
+
const composition = captureAgentEvolutionRuntimeComposition(
|
|
49
|
+
await factory(
|
|
50
|
+
Object.freeze({ mode, runId, taskId: runId, cwd: process.cwd() }),
|
|
51
|
+
),
|
|
52
|
+
);
|
|
53
|
+
const ingress = captureAgentEvolutionIngress(composition.evolutionIngress);
|
|
54
|
+
if (
|
|
55
|
+
composition.runId !== runId ||
|
|
56
|
+
ingress.runId !== runId ||
|
|
57
|
+
composition.tenantId !== ingress.tenantId
|
|
58
|
+
) {
|
|
59
|
+
throw new Error(
|
|
60
|
+
"Model evolution composition is not bound to the requested Run",
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
signal?.throwIfAborted();
|
|
64
|
+
await ingress.start();
|
|
65
|
+
await ingress.ingestUserPrompt({ messages, source: mode });
|
|
66
|
+
const prepared = await ingress.prepareModelRequest({ messages, tools: [] });
|
|
67
|
+
signal?.throwIfAborted();
|
|
68
|
+
return Object.freeze({
|
|
69
|
+
governed: true,
|
|
70
|
+
messages: prepared.messages,
|
|
71
|
+
async complete(content) {
|
|
72
|
+
signal?.throwIfAborted();
|
|
73
|
+
await ingress.ingestAgentEvent({ type: "response-complete", content });
|
|
74
|
+
signal?.throwIfAborted();
|
|
75
|
+
await ingress.complete();
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export async function* governModelTokenSource(source, turn, signal) {
|
|
81
|
+
let content = "";
|
|
82
|
+
for await (const delta of source) {
|
|
83
|
+
signal?.throwIfAborted();
|
|
84
|
+
content += delta;
|
|
85
|
+
yield delta;
|
|
86
|
+
}
|
|
87
|
+
await turn.complete(content);
|
|
88
|
+
}
|
|
@@ -467,6 +467,7 @@ async function initHub() {
|
|
|
467
467
|
|
|
468
468
|
// Phase 8 — EntityResolver pipeline
|
|
469
469
|
const entityResolver = new EntityResolver({ vault });
|
|
470
|
+
let resolverEmbeddingStage = null;
|
|
470
471
|
// Plan A v0.1 — in-APK Android cc has no Ollama on localhost:11434.
|
|
471
472
|
// Every embedding call would TCP-timeout (measured: ~60s extra per sync
|
|
472
473
|
// on Xiaomi 24115RA8EC 2026-05-21). Detect Termux $PREFIX for our APK
|
|
@@ -504,6 +505,7 @@ async function initHub() {
|
|
|
504
505
|
vault,
|
|
505
506
|
});
|
|
506
507
|
entityResolver._embeddingStage = embeddingStage.asStageFn();
|
|
508
|
+
resolverEmbeddingStage = embeddingStage;
|
|
507
509
|
}
|
|
508
510
|
} catch (_err) {
|
|
509
511
|
// Fall back to rule-only — registry still works
|
|
@@ -1071,6 +1073,23 @@ async function initHub() {
|
|
|
1071
1073
|
alipayAccountsPath,
|
|
1072
1074
|
entityResolver,
|
|
1073
1075
|
aichatAccountsStore,
|
|
1076
|
+
async drainResolver(options = {}, factory = null) {
|
|
1077
|
+
if (factory === null) return entityResolver.drain(options);
|
|
1078
|
+
const { createGovernedHubResolver } =
|
|
1079
|
+
await import("./evolution/governed-hub-resolver.js");
|
|
1080
|
+
const scoped = createGovernedHubResolver(
|
|
1081
|
+
{
|
|
1082
|
+
resolver: entityResolver,
|
|
1083
|
+
llm,
|
|
1084
|
+
embeddingStage: resolverEmbeddingStage,
|
|
1085
|
+
EntityResolver,
|
|
1086
|
+
EmbeddingStage: EntityResolverEmbeddingStage,
|
|
1087
|
+
LLMStage: EntityResolverLLMStage,
|
|
1088
|
+
},
|
|
1089
|
+
factory,
|
|
1090
|
+
);
|
|
1091
|
+
return scoped.drain(options);
|
|
1092
|
+
},
|
|
1074
1093
|
aiChatAdapter,
|
|
1075
1094
|
aichatWizard,
|
|
1076
1095
|
aichatHealthChecker,
|
|
@@ -2091,6 +2110,36 @@ export async function getHub() {
|
|
|
2091
2110
|
return _initPromise;
|
|
2092
2111
|
}
|
|
2093
2112
|
|
|
2113
|
+
export async function getGovernedAnalysisHub(evolutionCompositionFactory) {
|
|
2114
|
+
const hub = await getHub();
|
|
2115
|
+
const { createGovernedHubLlm } =
|
|
2116
|
+
await import("./evolution/governed-hub-llm.js");
|
|
2117
|
+
const llm = createGovernedHubLlm(hub.engine.llm, evolutionCompositionFactory);
|
|
2118
|
+
const engine = new AnalysisEngine({
|
|
2119
|
+
vault: hub.engine.vault,
|
|
2120
|
+
llm,
|
|
2121
|
+
ragRetriever: hub.engine.ragRetriever,
|
|
2122
|
+
maxFacts: hub.engine.maxFacts,
|
|
2123
|
+
maxQueryLimit: hub.engine.maxQueryLimit,
|
|
2124
|
+
systemPrompt: hub.engine.systemPrompt,
|
|
2125
|
+
});
|
|
2126
|
+
const { runGovernedHubSkill } =
|
|
2127
|
+
await import("./evolution/governed-hub-skill.js");
|
|
2128
|
+
return Object.freeze({
|
|
2129
|
+
...hub,
|
|
2130
|
+
llm,
|
|
2131
|
+
engine,
|
|
2132
|
+
runSkill: (name, options = {}) =>
|
|
2133
|
+
runGovernedHubSkill(
|
|
2134
|
+
hub,
|
|
2135
|
+
evolutionCompositionFactory,
|
|
2136
|
+
runAnalysisSkill,
|
|
2137
|
+
name,
|
|
2138
|
+
options,
|
|
2139
|
+
),
|
|
2140
|
+
});
|
|
2141
|
+
}
|
|
2142
|
+
|
|
2094
2143
|
// ─── Minimal hub bootstrap for read-only / LLM-free commands ────────────
|
|
2095
2144
|
//
|
|
2096
2145
|
// 2026-05-27 — `cc hub retrieve-context` cold-start was 90s+ on Android
|
|
@@ -6,37 +6,77 @@
|
|
|
6
6
|
|
|
7
7
|
import { BUILT_IN_PROVIDERS } from "./llm-providers.js";
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
const
|
|
9
|
+
async function* responseLines(body) {
|
|
10
|
+
const reader = body.getReader();
|
|
11
|
+
const decoder = new TextDecoder();
|
|
12
|
+
let buffer = "";
|
|
13
|
+
let ended = false;
|
|
14
|
+
try {
|
|
15
|
+
while (true) {
|
|
16
|
+
const { value, done } = await reader.read();
|
|
17
|
+
if (done) {
|
|
18
|
+
ended = true;
|
|
19
|
+
buffer += decoder.decode();
|
|
20
|
+
if (buffer) yield buffer;
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
buffer += decoder.decode(value, { stream: true });
|
|
24
|
+
let newline;
|
|
25
|
+
while ((newline = buffer.indexOf("\n")) >= 0) {
|
|
26
|
+
const line = buffer.slice(0, newline);
|
|
27
|
+
buffer = buffer.slice(newline + 1);
|
|
28
|
+
yield line;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} finally {
|
|
32
|
+
try {
|
|
33
|
+
if (!ended) await reader.cancel();
|
|
34
|
+
} catch {
|
|
35
|
+
// Preserve the original parser/transport failure during cleanup.
|
|
36
|
+
} finally {
|
|
37
|
+
reader.releaseLock();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export async function* ollamaTokenStream({
|
|
43
|
+
baseUrl,
|
|
44
|
+
model,
|
|
45
|
+
prompt,
|
|
46
|
+
messages,
|
|
47
|
+
signal,
|
|
48
|
+
requireCompletion = false,
|
|
49
|
+
}) {
|
|
50
|
+
const res = await fetch(`${baseUrl}/api/${messages ? "chat" : "generate"}`, {
|
|
11
51
|
method: "POST",
|
|
12
52
|
headers: { "Content-Type": "application/json" },
|
|
13
|
-
body: JSON.stringify(
|
|
53
|
+
body: JSON.stringify(
|
|
54
|
+
messages
|
|
55
|
+
? { model, messages, stream: true }
|
|
56
|
+
: { model, prompt, stream: true },
|
|
57
|
+
),
|
|
14
58
|
signal,
|
|
15
59
|
});
|
|
16
60
|
if (!res.ok || !res.body) {
|
|
17
61
|
throw new Error(`Ollama ${res.status} ${res.statusText}`);
|
|
18
62
|
}
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
const obj = JSON.parse(line);
|
|
33
|
-
if (obj.response) yield obj.response;
|
|
34
|
-
if (obj.done) return;
|
|
35
|
-
} catch {
|
|
36
|
-
/* skip malformed */
|
|
37
|
-
}
|
|
63
|
+
for await (const raw of responseLines(res.body)) {
|
|
64
|
+
const line = raw.trim();
|
|
65
|
+
if (!line) continue;
|
|
66
|
+
try {
|
|
67
|
+
const obj = JSON.parse(line);
|
|
68
|
+
if (requireCompletion && obj.error)
|
|
69
|
+
throw new Error("Ollama stream returned an error");
|
|
70
|
+
const delta = messages ? obj.message?.content : obj.response;
|
|
71
|
+
if (delta) yield delta;
|
|
72
|
+
if (obj.done) return;
|
|
73
|
+
} catch (error) {
|
|
74
|
+
if (requireCompletion) throw error;
|
|
75
|
+
/* skip malformed */
|
|
38
76
|
}
|
|
39
77
|
}
|
|
78
|
+
if (requireCompletion)
|
|
79
|
+
throw new Error("Ollama stream ended before its completion marker");
|
|
40
80
|
}
|
|
41
81
|
|
|
42
82
|
export async function* openAIStream({
|
|
@@ -44,7 +84,9 @@ export async function* openAIStream({
|
|
|
44
84
|
apiKey,
|
|
45
85
|
model,
|
|
46
86
|
prompt,
|
|
87
|
+
messages,
|
|
47
88
|
signal,
|
|
89
|
+
requireCompletion = false,
|
|
48
90
|
}) {
|
|
49
91
|
const res = await fetch(`${baseUrl}/chat/completions`, {
|
|
50
92
|
method: "POST",
|
|
@@ -54,7 +96,7 @@ export async function* openAIStream({
|
|
|
54
96
|
},
|
|
55
97
|
body: JSON.stringify({
|
|
56
98
|
model,
|
|
57
|
-
messages: [{ role: "user", content: prompt }],
|
|
99
|
+
messages: messages ?? [{ role: "user", content: prompt }],
|
|
58
100
|
stream: true,
|
|
59
101
|
}),
|
|
60
102
|
signal,
|
|
@@ -62,29 +104,24 @@ export async function* openAIStream({
|
|
|
62
104
|
if (!res.ok || !res.body) {
|
|
63
105
|
throw new Error(`${res.status} ${res.statusText}`);
|
|
64
106
|
}
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
try {
|
|
80
|
-
const obj = JSON.parse(payload);
|
|
81
|
-
const delta = obj?.choices?.[0]?.delta?.content;
|
|
82
|
-
if (delta) yield delta;
|
|
83
|
-
} catch {
|
|
84
|
-
/* skip */
|
|
85
|
-
}
|
|
107
|
+
for await (const raw of responseLines(res.body)) {
|
|
108
|
+
const line = raw.trim();
|
|
109
|
+
if (!line || !line.startsWith("data:")) continue;
|
|
110
|
+
const payload = line.slice(5).trim();
|
|
111
|
+
if (payload === "[DONE]") return;
|
|
112
|
+
try {
|
|
113
|
+
const obj = JSON.parse(payload);
|
|
114
|
+
if (requireCompletion && obj.error)
|
|
115
|
+
throw new Error("OpenAI stream returned an error");
|
|
116
|
+
const delta = obj?.choices?.[0]?.delta?.content;
|
|
117
|
+
if (delta) yield delta;
|
|
118
|
+
} catch (error) {
|
|
119
|
+
if (requireCompletion) throw error;
|
|
120
|
+
/* skip */
|
|
86
121
|
}
|
|
87
122
|
}
|
|
123
|
+
if (requireCompletion)
|
|
124
|
+
throw new Error("OpenAI stream ended before its completion marker");
|
|
88
125
|
}
|
|
89
126
|
|
|
90
127
|
/**
|
|
@@ -92,13 +129,23 @@ export async function* openAIStream({
|
|
|
92
129
|
* Throws on unsupported provider / missing API key.
|
|
93
130
|
*/
|
|
94
131
|
export function buildProviderSource(provider, opts = {}) {
|
|
95
|
-
const {
|
|
132
|
+
const {
|
|
133
|
+
model,
|
|
134
|
+
baseUrl,
|
|
135
|
+
apiKey,
|
|
136
|
+
prompt,
|
|
137
|
+
messages,
|
|
138
|
+
signal,
|
|
139
|
+
requireCompletion,
|
|
140
|
+
} = opts;
|
|
96
141
|
if (provider === "ollama") {
|
|
97
142
|
return ollamaTokenStream({
|
|
98
143
|
baseUrl: baseUrl || "http://localhost:11434",
|
|
99
144
|
model: model || "qwen2:7b",
|
|
100
145
|
prompt,
|
|
146
|
+
messages,
|
|
101
147
|
signal,
|
|
148
|
+
requireCompletion,
|
|
102
149
|
});
|
|
103
150
|
}
|
|
104
151
|
const def = BUILT_IN_PROVIDERS[provider];
|
|
@@ -115,7 +162,9 @@ export function buildProviderSource(provider, opts = {}) {
|
|
|
115
162
|
apiKey: finalKey,
|
|
116
163
|
model: model || def.models[0],
|
|
117
164
|
prompt,
|
|
165
|
+
messages,
|
|
118
166
|
signal,
|
|
167
|
+
requireCompletion,
|
|
119
168
|
});
|
|
120
169
|
}
|
|
121
170
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { chatWithStreaming } from "./chat-core.js";
|
|
9
|
+
import { prepareGovernedModelTurn } from "./evolution/governed-model-turn.js";
|
|
9
10
|
|
|
10
11
|
export class WSChatHandler {
|
|
11
12
|
/**
|
|
@@ -13,7 +14,14 @@ export class WSChatHandler {
|
|
|
13
14
|
* @param {import("./ws-session-manager.js").Session} options.session
|
|
14
15
|
* @param {import("./interaction-adapter.js").WebSocketInteractionAdapter} options.interaction
|
|
15
16
|
*/
|
|
16
|
-
constructor({ session, interaction }) {
|
|
17
|
+
constructor({ session, interaction, evolutionCompositionFactory = null }) {
|
|
18
|
+
if (
|
|
19
|
+
evolutionCompositionFactory !== null &&
|
|
20
|
+
typeof evolutionCompositionFactory !== "function"
|
|
21
|
+
) {
|
|
22
|
+
throw new TypeError("evolutionCompositionFactory must be a function");
|
|
23
|
+
}
|
|
24
|
+
this._evolutionCompositionFactory = evolutionCompositionFactory;
|
|
17
25
|
this.session = session;
|
|
18
26
|
this.interaction = interaction;
|
|
19
27
|
this._processing = false;
|
|
@@ -56,6 +64,13 @@ export class WSChatHandler {
|
|
|
56
64
|
});
|
|
57
65
|
runRecorded = true;
|
|
58
66
|
|
|
67
|
+
const turn = await prepareGovernedModelTurn(
|
|
68
|
+
this._evolutionCompositionFactory,
|
|
69
|
+
{
|
|
70
|
+
mode: "ws-chat-session",
|
|
71
|
+
messages: session.messages,
|
|
72
|
+
},
|
|
73
|
+
);
|
|
59
74
|
const options = {
|
|
60
75
|
provider: session.provider,
|
|
61
76
|
model: session.model,
|
|
@@ -64,10 +79,11 @@ export class WSChatHandler {
|
|
|
64
79
|
// Phase J — pipe WS session id so chat-core records token_usage
|
|
65
80
|
// into the JSONL session store; visible via `cc session usage`.
|
|
66
81
|
sessionId: session.sessionId || session.id,
|
|
82
|
+
requireCompletion: turn.governed,
|
|
67
83
|
};
|
|
68
84
|
|
|
69
85
|
const fullContent = await chatWithStreaming(
|
|
70
|
-
|
|
86
|
+
turn.messages,
|
|
71
87
|
options,
|
|
72
88
|
(event) => {
|
|
73
89
|
if (event.type === "response-token") {
|
|
@@ -79,6 +95,7 @@ export class WSChatHandler {
|
|
|
79
95
|
},
|
|
80
96
|
);
|
|
81
97
|
|
|
98
|
+
await turn.complete(fullContent);
|
|
82
99
|
session.messages.push({ role: "assistant", content: fullContent });
|
|
83
100
|
this.interaction.emit("response-complete", {
|
|
84
101
|
requestId,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u,J,U as b,R as c,c as a,K as i,a as R,r as k,o as F,b as E,P as O,Q as p,S as z,V as C}from"./vendor-Bn1JzzAn.js";import{t as M,_ as Q,b as K,u as T,d as S}from"./index-cq5Q-RHa.js";import{i as X,R as q}from"./icons-DG5UD-6K.js";const v=Object.freeze({defaultEngine:"webspeech",webSpeech:{lang:"zh-CN"},whisperAPI:{apiKey:"",baseURL:"https://api.openai.com/v1",model:"whisper-1",language:"zh",timeout:6e4},whisperLocal:{serverUrl:"http://localhost:8002",modelSize:"base",device:"auto",timeout:12e4}}),Y=["webspeech","whisper-api","whisper-local"];function B(g,t){if(typeof g=="number"&&Number.isFinite(g))return g;const s=parseFloat(g);return Number.isFinite(s)?s:t}function Z(g){return JSON.parse(JSON.stringify(g))}function D(g){const t=Z(v);if(!g)return t;const s=g.trim();if(!s||/key not found/i.test(s))return t;const e=M(s);if(!e||typeof e!="object"||Array.isArray(e))return t;if(typeof e.defaultEngine=="string"&&Y.includes(e.defaultEngine)&&(t.defaultEngine=e.defaultEngine),e.webSpeech&&typeof e.webSpeech=="object"&&typeof e.webSpeech.lang=="string"&&e.webSpeech.lang&&(t.webSpeech.lang=e.webSpeech.lang),e.whisperAPI&&typeof e.whisperAPI=="object"){const l=e.whisperAPI;typeof l.apiKey=="string"&&(t.whisperAPI.apiKey=l.apiKey),typeof l.baseURL=="string"&&l.baseURL&&(t.whisperAPI.baseURL=l.baseURL),typeof l.model=="string"&&l.model&&(t.whisperAPI.model=l.model),typeof l.language=="string"&&l.language&&(t.whisperAPI.language=l.language),l.timeout!==void 0&&(t.whisperAPI.timeout=B(l.timeout,v.whisperAPI.timeout))}if(e.whisperLocal&&typeof e.whisperLocal=="object"){const l=e.whisperLocal;typeof l.serverUrl=="string"&&l.serverUrl&&(t.whisperLocal.serverUrl=l.serverUrl),typeof l.modelSize=="string"&&l.modelSize&&(t.whisperLocal.modelSize=l.modelSize),typeof l.device=="string"&&l.device&&(t.whisperLocal.device=l.device),l.timeout!==void 0&&(t.whisperLocal.timeout=B(l.timeout,v.whisperLocal.timeout))}return t}function j(g,t){const s={};g.defaultEngine!==t.defaultEngine&&(s.defaultEngine=t.defaultEngine);for(const e of["webSpeech","whisperAPI","whisperLocal"]){const l=g[e]||{},w=t[e]||{};for(const o of Object.keys(v[e]))l[o]!==w[o]&&(s[`${e}.${o}`]=w[o])}return s}const $={__name:"SpeechSettings",setup(g,{expose:t}){t();const{t:s}=K(),e=T(),l=k(!1),w=k(!1),o=R(JSON.parse(JSON.stringify(v))),h=k(JSON.parse(JSON.stringify(v))),y=E(()=>[{value:"webspeech",label:s("speechSettings.engineOptions.webspeech")},{value:"whisper-api",label:s("speechSettings.engineOptions.whisper-api")},{value:"whisper-local",label:s("speechSettings.engineOptions.whisper-local")}]),f=E(()=>{const d=`speechSettings.engineHint.${o.defaultEngine}`,n=s(d);return n===d?"":n}),_=E(()=>Object.keys(j(h.value,o)).length>0);function m(d){o.defaultEngine=d.defaultEngine,Object.assign(o.webSpeech,d.webSpeech),Object.assign(o.whisperAPI,d.whisperAPI),Object.assign(o.whisperLocal,d.whisperLocal),h.value=JSON.parse(JSON.stringify(d))}async function r(){l.value=!0;try{const{output:d}=await e.execute("config get speech",1e4);m(D(d))}catch(d){/key not found/i.test(d.message)?m(JSON.parse(JSON.stringify(v))):S.error(s("speechSettings.messages.loadFailed",{err:d.message}))}finally{l.value=!1}}function N(){m(h.value)}async function x(){const d=j(h.value,o),n=Object.keys(d);if(n.length===0){S.info(s("speechSettings.messages.noChanges"));return}w.value=!0;let P=0,I=0;for(const A of n){const H=d[A],V=String(H).replace(/"/g,'\\"'),W=`config set speech.${A} "${V}"`;try{const{output:U,exitCode:G}=await e.execute(W,1e4);G!==0||/error|failed|失败/i.test(U)?(I++,S.error(s("speechSettings.messages.saveItemFailed",{key:A,err:U.slice(0,80)}))):P++}catch(U){I++,S.error(s("speechSettings.messages.saveItemFailed",{key:A,err:U.message}))}}w.value=!1,I===0?(S.success(s("speechSettings.messages.saveOk",{count:P})),h.value=JSON.parse(JSON.stringify(o))):P>0&&(S.warning(s("speechSettings.messages.savePartial",{ok:P,fail:I})),await r())}F(()=>{r()});const L={t:s,ws:e,loading:l,saving:w,form:o,baseline:h,engineOptions:y,engineHint:f,isDirty:_,applyConfig:m,loadConfig:r,resetForm:N,saveConfig:x,reactive:R,ref:k,computed:E,onMounted:F,get useI18n(){return K},get ReloadOutlined(){return q},get SoundOutlined(){return X},get message(){return S},get useWsStore(){return T},get parseSpeechConfig(){return D},get diffSpeechConfig(){return j},get SPEECH_DEFAULTS(){return v}};return Object.defineProperty(L,"__isScriptSetup",{enumerable:!1,value:!0}),L}},ee={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},te={class:"page-title"},ae={class:"page-sub"},ie={style:{color:"var(--text-primary)"}},le={style:{color:"var(--text-muted)","font-size":"11px"}},ne={style:{color:"var(--text-primary)"}},se={style:{color:"var(--text-primary)"}},oe={style:{color:"var(--text-primary)"}},re={style:{display:"flex",gap:"12px","align-items":"center"}},de={key:0,style:{color:"#faad14","font-size":"12px"}};function pe(g,t,s,e,l,w){const o=u("a-button"),h=u("a-alert"),y=u("a-select"),f=u("a-form-item"),_=u("a-form"),m=u("a-card"),r=u("a-select-option"),N=u("a-input-password"),x=u("a-input"),L=u("a-input-number"),d=u("a-spin");return O(),J("div",null,[b("div",ee,[b("div",null,[b("h2",te,c(e.t("speechSettings.title")),1),b("p",ae,c(e.t("speechSettings.subtitle")),1)]),a(o,{loading:e.loading,onClick:e.loadConfig},{icon:i(()=>[a(e.ReloadOutlined)]),default:i(()=>[p(" "+c(e.t("speechSettings.refresh")),1)]),_:1},8,["loading"])]),a(h,{message:e.t("speechSettings.alert.message"),description:e.t("speechSettings.alert.description"),type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),a(d,{spinning:e.loading},{default:i(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",ie,[a(e.SoundOutlined,{style:{"margin-right":"8px"}}),p(c(e.t("speechSettings.engineCardTitle")),1)])]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.engineLabel")},{extra:i(()=>[b("span",le,c(e.engineHint),1)]),default:i(()=>[a(y,{value:e.form.defaultEngine,"onUpdate:value":t[0]||(t[0]=n=>e.form.defaultEngine=n),style:{width:"320px"},disabled:e.saving,options:e.engineOptions},null,8,["value","disabled","options"])]),_:1},8,["label"])]),_:1})]),_:1}),e.form.defaultEngine==="webspeech"?(O(),z(m,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",ne,c(e.t("speechSettings.webSpeech.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.webSpeech.langLabel")},{default:i(()=>[a(y,{value:e.form.webSpeech.lang,"onUpdate:value":t[1]||(t[1]=n=>e.form.webSpeech.lang=n),style:{width:"240px"},disabled:e.saving},{default:i(()=>[a(r,{value:"zh-CN"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.zh-CN")),1)]),_:1}),a(r,{value:"zh-TW"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.zh-TW")),1)]),_:1}),a(r,{value:"en-US"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.en-US")),1)]),_:1}),a(r,{value:"en-GB"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.en-GB")),1)]),_:1}),a(r,{value:"ja-JP"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.ja-JP")),1)]),_:1}),a(r,{value:"ko-KR"},{default:i(()=>[p(c(e.t("speechSettings.webSpeech.langOptions.ko-KR")),1)]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),e.form.defaultEngine==="whisper-api"?(O(),z(m,{key:1,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",se,c(e.t("speechSettings.whisperAPI.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.whisperAPI.apiKeyLabel")},{default:i(()=>[a(N,{value:e.form.whisperAPI.apiKey,"onUpdate:value":t[2]||(t[2]=n=>e.form.whisperAPI.apiKey=n),placeholder:"sk-...",disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.baseUrlLabel")},{default:i(()=>[a(x,{value:e.form.whisperAPI.baseURL,"onUpdate:value":t[3]||(t[3]=n=>e.form.whisperAPI.baseURL=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.modelLabel")},{default:i(()=>[a(x,{value:e.form.whisperAPI.model,"onUpdate:value":t[4]||(t[4]=n=>e.form.whisperAPI.model=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.languageLabel")},{default:i(()=>[a(x,{value:e.form.whisperAPI.language,"onUpdate:value":t[5]||(t[5]=n=>e.form.whisperAPI.language=n),disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperAPI.timeoutLabel")},{default:i(()=>[a(L,{value:e.form.whisperAPI.timeout,"onUpdate:value":t[6]||(t[6]=n=>e.form.whisperAPI.timeout=n),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),e.form.defaultEngine==="whisper-local"?(O(),z(m,{key:2,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:i(()=>[b("span",oe,c(e.t("speechSettings.whisperLocal.cardTitle")),1)]),default:i(()=>[a(_,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:i(()=>[a(f,{label:e.t("speechSettings.whisperLocal.serverUrlLabel")},{default:i(()=>[a(x,{value:e.form.whisperLocal.serverUrl,"onUpdate:value":t[7]||(t[7]=n=>e.form.whisperLocal.serverUrl=n),placeholder:"http://localhost:8002",disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.modelSizeLabel")},{default:i(()=>[a(y,{value:e.form.whisperLocal.modelSize,"onUpdate:value":t[8]||(t[8]=n=>e.form.whisperLocal.modelSize=n),style:{width:"180px"},disabled:e.saving},{default:i(()=>[a(r,{value:"tiny"},{default:i(()=>[...t[11]||(t[11]=[p("tiny",-1)])]),_:1}),a(r,{value:"base"},{default:i(()=>[...t[12]||(t[12]=[p("base",-1)])]),_:1}),a(r,{value:"small"},{default:i(()=>[...t[13]||(t[13]=[p("small",-1)])]),_:1}),a(r,{value:"medium"},{default:i(()=>[...t[14]||(t[14]=[p("medium",-1)])]),_:1}),a(r,{value:"large"},{default:i(()=>[...t[15]||(t[15]=[p("large",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.deviceLabel")},{default:i(()=>[a(y,{value:e.form.whisperLocal.device,"onUpdate:value":t[9]||(t[9]=n=>e.form.whisperLocal.device=n),style:{width:"180px"},disabled:e.saving},{default:i(()=>[a(r,{value:"auto"},{default:i(()=>[...t[16]||(t[16]=[p("auto",-1)])]),_:1}),a(r,{value:"cpu"},{default:i(()=>[...t[17]||(t[17]=[p("cpu",-1)])]),_:1}),a(r,{value:"cuda"},{default:i(()=>[...t[18]||(t[18]=[p("cuda",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),a(f,{label:e.t("speechSettings.whisperLocal.timeoutLabel")},{default:i(()=>[a(L,{value:e.form.whisperLocal.timeout,"onUpdate:value":t[10]||(t[10]=n=>e.form.whisperLocal.timeout=n),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:e.saving},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):C("v-if",!0),b("div",re,[a(o,{onClick:e.resetForm,disabled:e.saving||e.loading},{default:i(()=>[p(c(e.t("speechSettings.buttons.reset")),1)]),_:1},8,["disabled"]),a(o,{type:"primary",loading:e.saving,disabled:!e.isDirty,onClick:e.saveConfig},{default:i(()=>[p(c(e.t("speechSettings.buttons.save")),1)]),_:1},8,["loading","disabled"]),e.isDirty?(O(),J("span",de,c(e.t("speechSettings.dirtyHint")),1)):C("v-if",!0)])]),_:1},8,["spinning"])])}const ue=Q($,[["render",pe],["__scopeId","data-v-2b18ccaa"],["__file","/tmp/cc-web-panel-xkj8eX/repo/packages/web-panel/src/views/SpeechSettings.vue"]]);export{ue as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-cq5Q-RHa.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-0-bFnXWF.js";import{a0 as t}from"./index-cq5Q-RHa.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-DbF8pamO.js";import"./useFlexGapSupport-BUzhdQsv.js";import"./styleChecker-BL95J74a.js";import"./index-G7Z_On_n.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-C29J2DBT.js";import{a0 as t}from"./index-cq5Q-RHa.js";import"./vendor-Bn1JzzAn.js";import"./index-G7Z_On_n.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|