chainlesschain 0.166.108 → 0.166.112
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 +14 -7
- package/package.json +3 -2
- 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/assets/{AIOps-B5HWUFaS.js → AIOps-sOceeExN.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DCIKpxoQ.js → ActionButton-BQs-vRUr.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-dsgvjCEQ.js → Analytics-sfAHHMhA.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DWDH5Qbm.js → AppLayout-0gAvE0c8.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-BD8S8kzU.js → Artifacts-Dh9s2Qmd.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CDXv4Aoj.js → Audit-CITm26SU.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BLAQ5Uy0.js → BackgroundAgents-BiMbBOh0.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-moPac6tF.js → Backup-CNpnhI3h.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-C_6nzsLU.js → BaseInput-BI_lltkp.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-cYuslkFG.js → Chat-BgfB88xY.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-BDP3fGoz.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-Qjb-XOX_.js → Checkbox-4xy9rS3j.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-IYRWXlMA.js → Codegen-D93h9ihS.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CsQ9jv8M.js → Col-BRf3STY-.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BbNmfTwe.js → Community-f187ziSL.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-SShDx-nr.js → Compact-D4hXWuo1.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CLWhKIJp.js → Compliance-C6cYKI6H.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-D4tK9_s3.js → Cowork-C1i1f8LD.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-D7GnfQ1z.js → Cron-BacCE4LA.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-TG86SH3X.js → Crosschain-DXztxOoH.js} +1 -1
- package/src/assets/web-panel/assets/{DID-6pue0NCO.js → DID-rpf4HN8x.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BwkJ29du.js → Dashboard-h4bgtH7L.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DEvpYDof.js → Dropdown-CyQnoHmu.js} +1 -1
- package/src/assets/web-panel/assets/EmailListRenderer-FCtp4AcB.js +1 -0
- package/src/assets/web-panel/assets/{EvolutionSettings-tpvPMM9W.js → EvolutionSettings-JbISHTWR.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CWYFW75O.js → FamilyGuardDashboard-DCIQLyfK.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-gRIi96rM.js → Federation-DDbFpwja.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-B7Nr3YkV.js → FormItemContext-CXF0jtXb.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-b1BgGgLT.js → GenericCardRenderer-CUaNfAM0.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Dis1jjO7.js → Git-Bhoz2gDf.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-C4Yg99Am.js → Governance-FiiXHe8e.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-D4UQRbGu.js → Inference-brpTW2Q3.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Co_kLMAq.js → KnowledgeGraph-BCWP-f6k.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-D4BRp7bg.js → Logs-CxYcduoK.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-12vD1nC1.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-ys0j1vr9.js → Marketplace-DANdmW7l.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-B3ZvRZe_.js → McpTools-Bi_EKkb5.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-BOa0jbr-.js → Memory-DecoMbYw.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CWJRmUbj.js → MobileBridge-DrOhFKp0.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-rRwP16dN.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-CCcOk5m5.js → Mtc-SLPII1iw.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-vlrrScbQ.js → MtcAudit-DWoVORYy.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-C8K59S_8.js → Multisig-Dxpnmq-m.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-oTpFYVme.js → NLProgramming-kNTpNqCP.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BhqAJWiz.js → Notes-D1uXCfVd.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DCnV1CJM.js → NotificationSettings-D3Qt8Gkl.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-CZGnsrVW.js → OrderTableRenderer-qvaah2-m.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DX1LuQlJ.js → Organization-EhRl4JoJ.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CbfKrFdT.js → Overflow-BTt5C_5W.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BEwYZuHL.js → P2P-CeR2jyb0.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-YNmWbwd7.js → PdhVaultBrowser-BzD3OHWq.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DyZ18LiA.js → Permissions-BOPyeRlz.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-B2J3aw2g.js → PersonalDataHub-DcmNNsfO.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-CXl2ZlhQ.js → Pipeline-DuL3kwWC.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-I5SDmgAp.js → Privacy-CkQRdlSU.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Crl9tXw3.js → ProjectInit-moE_vQ1P.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DCFtFlSK.js → ProjectSettings-PnTWi4NQ.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Do5BQq1i.js → Projects-DZvbT3D7.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Cb7OWa3y.js → Providers-CkcrHYy9.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CJmhAU-s.js → QrScannerModal-nYNFGf_H.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Cu6lEWou.js → QuickAsk-53WNo7xT.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Crip3jLB.js → Recommend-CmYN_NaS.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-KxYY-2CB.js → RemoteSession-BuOdNEjA.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-D0vN-htI.js → Reputation-BgkheZou.js} +1 -1
- package/src/assets/web-panel/assets/{Row-wqzd_xCD.js → Row-DvA3klj1.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-8lsPfb0a.js → RssFeed-CgkIL3PG.js} +3 -3
- package/src/assets/web-panel/assets/{Search-C-e8qAeU.js → Search-Cv2twJdL.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CMM9WgFy.js → Security-XrD2UNU6.js} +3 -3
- package/src/assets/web-panel/assets/{Services-CZdxjN2B.js → Services-LujCntCK.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BI3XNk35.js → Skeleton-ZZCOsxPX.js} +1 -1
- package/src/assets/web-panel/assets/Skills-BEXGkOrU.js +1 -0
- package/src/assets/web-panel/assets/{Sla-HQruznKY.js → Sla-CIqmCgdD.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Dl-MFq3w.js → SpeechSettings-DkVbwJox.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BU224vDm.js → SyncSettings-BVGgUs0p.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-C1lh68l5.js +1 -0
- package/src/assets/web-panel/assets/{Templates-Jb3TPz4Q.js → Templates-BG4zNAFx.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CQ-GTrfa.js → Tenant-t2o6i5fY.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BbMl3Rue.js → Terminal-CH8UDdVO.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CS_vstKF.js → TimelineRenderer-B5sYY1IO.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BaopVl1f.js → Tokens-D0y7QkG5.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DtnD4WUN.js → Trigger-BA2nKko0.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CsvG4Tmf.js → Trust-CrFKCQIs.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-C1-A-cOV.js → UkeySign-B3x_-Zun.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CNgJPdSL.js → VideoEditing-TEwxbLH6.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CdF41501.js → Wallet-Larp5rrt.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-D-JmxD5g.js → WebAuthn-DfWbEIZe.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-C0XunR13.js → WorkflowEditor-8LKiKExY.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BBAZpD_G.js → chat-ByxYOvYW.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BxSxO5BX.js → colors-Dh4yAClh.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BoxL8pg5.js → compact-item-f5n2j1WZ.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-W5JAyZmY.js → createContext-DIprYuXL.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DRIge35Z.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-HpiKDPVC.js → hasIn-CvYeap2I.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9VxE1C-.js → index-3ROY-lYB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdEcQ1rp.js → index-6VEWxOyC.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4uI7WCB.js → index-7eG1J-GT.js} +1 -1
- package/src/assets/web-panel/assets/{index-_38IJqoP.js → index-B0AXUhiJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7GIUWWF.js → index-BS_dpgzu.js} +1 -1
- package/src/assets/web-panel/assets/{index-ooP1pQCt.js → index-BaXSBxy-.js} +1 -1
- package/src/assets/web-panel/assets/{index-gvfIRZxJ.js → index-Bk8oWRk6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSJ0cAle.js → index-BlImvgb7.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5kqii-G.js → index-BoayvJ48.js} +1 -1
- package/src/assets/web-panel/assets/index-Bq24rTYx.js +1 -0
- package/src/assets/web-panel/assets/{index-B05_YRHZ.js → index-BsU46c7D.js} +1 -1
- package/src/assets/web-panel/assets/{index-_p4e3KfB.js → index-BvyFQF8I.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bwn6k_qw.js → index-C2RGykST.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtFAEG08.js → index-C5aH2Pj2.js} +1 -1
- package/src/assets/web-panel/assets/{index-CehxfRUR.js → index-CD0s5ESV.js} +1 -1
- package/src/assets/web-panel/assets/{index-JrMBRi62.js → index-CIZQtz8G.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRg3aOoj.js → index-CJjc8ObW.js} +1 -1
- package/src/assets/web-panel/assets/{index-V6VIJe2N.js → index-CTqJNul4.js} +1 -1
- package/src/assets/web-panel/assets/{index-p6rNtYud.js → index-CcvA1nae.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6m6B4Wy.js → index-CpR0zD38.js} +1 -1
- package/src/assets/web-panel/assets/{index-IO2I7nzu.js → index-CzabQZ7I.js} +1 -1
- package/src/assets/web-panel/assets/index-D2f18WsK.js +1 -0
- package/src/assets/web-panel/assets/{index-9caMEwQ-.js → index-DGyTzElU.js} +1 -1
- package/src/assets/web-panel/assets/{index-DinY7IQa.js → index-DI8jC7gQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuM9I1If.js → index-DUj-sL9U.js} +1 -1
- package/src/assets/web-panel/assets/{index-DkSnlgK_.js → index-DaZVtafQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CM_gdohF.js → index-DjvON8oh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcmAiq_Y.js → index-DlJCDpeN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaJk9U9V.js → index-DlTwZIeX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgMViZIY.js → index-DlULGx8u.js} +1 -1
- package/src/assets/web-panel/assets/{index-BA3WWQAT.js → index-DmcAL4hd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DSyfxxQS.js → index-DshB3-Up.js} +3 -3
- package/src/assets/web-panel/assets/{index-BZAbaY64.js → index-Du435yzt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW4PP5GN.js → index-bt-0zMmH.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlPvZgv8.js → index-c_CxUQl3.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ba4usRFM.js → index-fpWv4u3Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-DwidpDEE.js → index-hwbaD3Nk.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcyzZloJ.js → index-uDiVjYrS.js} +1 -1
- package/src/assets/web-panel/assets/{index-QzlEbtRL.js → index-xU0eHLIH.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Dfn6M05J.js → initDefaultProps-DRuE92W6.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BRRwFqGO.js → motion-6Sgma5Vd.js} +1 -1
- package/src/assets/web-panel/assets/{move-DpDPN6zR.js → move-BbQsH8sb.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BHlSE87F.js → mtc-parser-BdC4INal.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CEOri_L5.js → omit-DeC5m_bi.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DqICh-ad.js → pickAttrs-DuehpBws.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DQizFFiV.js → placementArrow-CJEhv2ij.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DmFHPdvC.js → responsiveObserve-Dyw3lDGr.js} +1 -1
- package/src/assets/web-panel/assets/{slide-s2s1XS3T.js → slide-BMaLXTbS.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-IwEIbBan.js → statusUtils-c1K_SdJH.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CIFLlbXH.js → styleChecker-CefBry8k.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CFkN2Cgh.js → useFlexGapSupport-Dj2IsZpo.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BSY6O48s.js → useFs-RLfB3yqb.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-iJl3VnU0.js → usePersonalDataHub-DbRVH_NA.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-vu8ReMs7.js → vnode-DTn_QVJz.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CeSrYAHp.js → zoom-DuFR0E7i.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/agent.js +12 -5
- package/src/commands/ask.js +96 -21
- package/src/commands/complete.js +14 -10
- package/src/commands/llm.js +23 -41
- package/src/commands/session.js +2 -2
- package/src/commands/stream.js +9 -5
- package/src/commands/ui.js +30 -2
- package/src/data/changelog.json +52 -0
- package/src/gateways/ws/llm-chat-protocol.js +23 -5
- package/src/gateways/ws/llm-creds.js +38 -60
- package/src/gateways/ws/ws-agent-handler.js +1 -1
- package/src/gateways/ws/ws-server.js +47 -0
- package/src/gateways/ws/ws-session-gateway.js +26 -12
- package/src/lib/__tests__/provider-stream.test.js +70 -4
- package/src/lib/chat-core.js +186 -24
- package/src/lib/cowork-adapter.js +29 -15
- package/src/lib/evolution/agent-evolution-runtime-composition.js +10 -7
- package/src/lib/evolution/evolution-deployment-config.js +27 -4
- package/src/lib/evolution/evolution-deployment-loader.js +58 -3
- package/src/lib/evolution/evolution-deployment-profile.js +2 -2
- package/src/lib/evolution/evolution-evidence-projector.js +18 -3
- package/src/lib/evolution/evolution-file-witness.js +10 -0
- package/src/lib/evolution/evolution-ledger.js +237 -28
- package/src/lib/evolution/evolution-windows-directory-durability.js +322 -0
- package/src/lib/evolution/governed-hub-llm.js +2 -1
- package/src/lib/evolution/governed-model-turn.js +4 -1
- package/src/lib/evolution/local-ui-evolution-deployment.js +682 -0
- package/src/lib/evolution/local-ui-evolution-host.mjs +26 -0
- package/src/lib/evolution/local-ui-evolution-runtime.js +601 -0
- package/src/lib/evolution/opaque-hex-id.js +28 -0
- package/src/lib/hub-llm-client.js +22 -14
- package/src/lib/image-input.js +19 -3
- package/src/lib/llm-config-defaults.js +19 -30
- package/src/lib/llm-connection-config.js +4 -0
- package/src/lib/llm-connection-probe.js +5 -1
- package/src/lib/llm-connection-resolution.js +94 -0
- package/src/lib/llm-providers.js +33 -11
- package/src/lib/ollama-base-url.js +14 -0
- package/src/lib/provider-protocol.js +104 -0
- package/src/lib/provider-stream.js +163 -4
- package/src/lib/runnable-provider.js +1 -0
- package/src/repl/chat-repl.js +58 -11
- package/src/runtime/agent-core.js +26 -43
- package/src/runtime/headless-runner.js +11 -4
- package/src/runtime/headless-stream.js +10 -4
- package/src/runtime/policies/agent-policy.js +17 -11
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Ceh3MG6M.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-CQj7UlKJ.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-Dgy8arQI.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-7ty8vTpj.js +0 -1
- package/src/assets/web-panel/assets/Skills-DMlsh9It.js +0 -1
- package/src/assets/web-panel/assets/Tasks-DESg3yCs.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BI5TZ7EX.js +0 -1
- package/src/assets/web-panel/assets/index-9-JLDK5n.js +0 -1
- package/src/assets/web-panel/assets/index-B7m8ioaQ.js +0 -1
package/src/repl/chat-repl.js
CHANGED
|
@@ -41,11 +41,14 @@ import readline from "readline";
|
|
|
41
41
|
import chalk from "chalk";
|
|
42
42
|
import { logger } from "../lib/logger.js";
|
|
43
43
|
import { BUILT_IN_PROVIDERS } from "../lib/llm-providers.js";
|
|
44
|
+
import { loadConfig } from "../lib/config-manager.js";
|
|
45
|
+
import { resolveLlmConnection } from "../lib/llm-connection-resolution.js";
|
|
44
46
|
import { expandFileRefsAsync } from "../runtime/file-ref-expander.js";
|
|
45
47
|
import {
|
|
46
48
|
streamOllama,
|
|
47
49
|
streamOpenAI,
|
|
48
50
|
streamAnthropic,
|
|
51
|
+
streamGemini,
|
|
49
52
|
} from "../lib/chat-core.js";
|
|
50
53
|
import {
|
|
51
54
|
startSession,
|
|
@@ -111,10 +114,19 @@ export async function startChatRepl(options = {}) {
|
|
|
111
114
|
? assertChatSessionUsageAdmission(options.sessionId)
|
|
112
115
|
: null;
|
|
113
116
|
const evolutionSession = createAgentEvolutionSessionLifecycle(evolutionIngress);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
117
|
+
const llmConfig = loadConfig().llm || {};
|
|
118
|
+
const connection = resolveLlmConnection(options, [llmConfig], {
|
|
119
|
+
defaultModel:
|
|
120
|
+
(options.provider || llmConfig.provider || "ollama") === "anthropic"
|
|
121
|
+
? "claude-sonnet-4-6"
|
|
122
|
+
: (options.provider || llmConfig.provider || "ollama") === "ollama"
|
|
123
|
+
? "qwen2:7b"
|
|
124
|
+
: null,
|
|
125
|
+
});
|
|
126
|
+
let provider = connection.provider;
|
|
127
|
+
let model = connection.model || (provider === "ollama" ? "qwen2:7b" : "");
|
|
128
|
+
let baseUrl = connection.baseUrl;
|
|
129
|
+
let apiKey = connection.apiKey;
|
|
118
130
|
|
|
119
131
|
const messages = [];
|
|
120
132
|
const stdout = options.stdout || process.stdout;
|
|
@@ -219,6 +231,23 @@ export async function startChatRepl(options = {}) {
|
|
|
219
231
|
|
|
220
232
|
case "/provider":
|
|
221
233
|
if (arg) {
|
|
234
|
+
if (arg !== provider) {
|
|
235
|
+
const nextConnection = resolveLlmConnection(
|
|
236
|
+
{ provider: arg },
|
|
237
|
+
[llmConfig],
|
|
238
|
+
{
|
|
239
|
+
defaultModel:
|
|
240
|
+
arg === "anthropic"
|
|
241
|
+
? "claude-sonnet-4-6"
|
|
242
|
+
: arg === "ollama"
|
|
243
|
+
? "qwen2:7b"
|
|
244
|
+
: null,
|
|
245
|
+
},
|
|
246
|
+
);
|
|
247
|
+
model = nextConnection.model || "";
|
|
248
|
+
baseUrl = nextConnection.baseUrl;
|
|
249
|
+
apiKey = nextConnection.apiKey;
|
|
250
|
+
}
|
|
222
251
|
provider = arg;
|
|
223
252
|
logger.info(`Provider changed to: ${chalk.cyan(provider)}`);
|
|
224
253
|
} else {
|
|
@@ -347,9 +376,7 @@ export async function startChatRepl(options = {}) {
|
|
|
347
376
|
} else if (provider === "anthropic") {
|
|
348
377
|
const providerDef = BUILT_IN_PROVIDERS.anthropic;
|
|
349
378
|
const url =
|
|
350
|
-
baseUrl
|
|
351
|
-
? baseUrl
|
|
352
|
-
: providerDef?.baseUrl || "https://api.anthropic.com/v1";
|
|
379
|
+
baseUrl || providerDef?.baseUrl || "https://api.anthropic.com/v1";
|
|
353
380
|
const key =
|
|
354
381
|
apiKey ||
|
|
355
382
|
(providerDef?.apiKeyEnv ? process.env[providerDef.apiKeyEnv] : null);
|
|
@@ -366,13 +393,33 @@ export async function startChatRepl(options = {}) {
|
|
|
366
393
|
onUsage,
|
|
367
394
|
onStall,
|
|
368
395
|
);
|
|
396
|
+
} else if (provider === "gemini") {
|
|
397
|
+
const providerDef = BUILT_IN_PROVIDERS.gemini;
|
|
398
|
+
const url =
|
|
399
|
+
baseUrl ||
|
|
400
|
+
providerDef?.baseUrl ||
|
|
401
|
+
"https://generativelanguage.googleapis.com/v1beta";
|
|
402
|
+
const key =
|
|
403
|
+
apiKey ||
|
|
404
|
+
(providerDef?.apiKeyEnv ? process.env[providerDef.apiKeyEnv] : null);
|
|
405
|
+
if (!key)
|
|
406
|
+
throw new Error(
|
|
407
|
+
`API key required for gemini (set ${providerDef?.apiKeyEnv || "GEMINI_API_KEY"})`,
|
|
408
|
+
);
|
|
409
|
+
response = await streamGemini(
|
|
410
|
+
providerMessages,
|
|
411
|
+
model,
|
|
412
|
+
url,
|
|
413
|
+
key,
|
|
414
|
+
onToken,
|
|
415
|
+
onUsage,
|
|
416
|
+
onStall,
|
|
417
|
+
);
|
|
369
418
|
} else {
|
|
370
|
-
// OpenAI-compatible providers (openai, volcengine, deepseek, dashscope, mistral,
|
|
419
|
+
// OpenAI-compatible providers (openai, volcengine, deepseek, dashscope, mistral, anthropic-proxy)
|
|
371
420
|
const providerDef = BUILT_IN_PROVIDERS[provider];
|
|
372
421
|
const url =
|
|
373
|
-
baseUrl
|
|
374
|
-
? baseUrl
|
|
375
|
-
: providerDef?.baseUrl || "https://api.openai.com/v1";
|
|
422
|
+
baseUrl || providerDef?.baseUrl || "https://api.openai.com/v1";
|
|
376
423
|
const key =
|
|
377
424
|
apiKey ||
|
|
378
425
|
(providerDef?.apiKeyEnv ? process.env[providerDef.apiKeyEnv] : null);
|
|
@@ -3,6 +3,13 @@ import {
|
|
|
3
3
|
requireUnscopedToolExecution,
|
|
4
4
|
} from "../lib/formal-budget-provider-scope.js";
|
|
5
5
|
import { isFormalBudgetError } from "../lib/formal-budget-errors.js";
|
|
6
|
+
import { normalizeOllamaBaseUrl } from "../lib/ollama-base-url.js";
|
|
7
|
+
import {
|
|
8
|
+
normalizeProviderBaseUrl,
|
|
9
|
+
openAICompatibleBaseUrl,
|
|
10
|
+
} from "../lib/provider-protocol.js";
|
|
11
|
+
import { BUILT_IN_PROVIDERS } from "../lib/llm-providers.js";
|
|
12
|
+
import { resolveLlmConnection } from "../lib/llm-connection-resolution.js";
|
|
6
13
|
/**
|
|
7
14
|
* Agent Core — transport-independent agentic logic
|
|
8
15
|
*
|
|
@@ -12073,6 +12080,14 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
12073
12080
|
options.evolutionIngress == null
|
|
12074
12081
|
? null
|
|
12075
12082
|
: captureAgentEvolutionIngress(options.evolutionIngress);
|
|
12083
|
+
const providerHint = options.provider || "ollama";
|
|
12084
|
+
const legacyDefaultModels = {
|
|
12085
|
+
anthropic: "claude-sonnet-4-6",
|
|
12086
|
+
};
|
|
12087
|
+
const connection = resolveLlmConnection(options, [], {
|
|
12088
|
+
defaultProvider: providerHint,
|
|
12089
|
+
defaultModel: legacyDefaultModels[providerHint],
|
|
12090
|
+
});
|
|
12076
12091
|
const {
|
|
12077
12092
|
provider,
|
|
12078
12093
|
model,
|
|
@@ -12080,7 +12095,7 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
12080
12095
|
apiKey,
|
|
12081
12096
|
contextEngine: ce,
|
|
12082
12097
|
signal,
|
|
12083
|
-
} = options;
|
|
12098
|
+
} = { ...options, ...connection };
|
|
12084
12099
|
|
|
12085
12100
|
const providerRequestId = _normalizeProviderRequestId(
|
|
12086
12101
|
options.providerRequestId,
|
|
@@ -12143,7 +12158,7 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
12143
12158
|
await options.onProviderCallStart?.();
|
|
12144
12159
|
|
|
12145
12160
|
if (provider === "ollama") {
|
|
12146
|
-
const apiUrl = `${baseUrl}/api/chat`;
|
|
12161
|
+
const apiUrl = `${normalizeOllamaBaseUrl(baseUrl)}/api/chat`;
|
|
12147
12162
|
// Multimodal (`cc agent --image`): ollama wants `{content, images:[base64]}`
|
|
12148
12163
|
// not OpenAI-style `image_url` blocks. Convert only when an image part is
|
|
12149
12164
|
// present so text-only runs keep the identical request shape.
|
|
@@ -12224,7 +12239,7 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
12224
12239
|
}
|
|
12225
12240
|
|
|
12226
12241
|
if (provider === "anthropic") {
|
|
12227
|
-
const key = apiKey
|
|
12242
|
+
const key = apiKey;
|
|
12228
12243
|
if (!key) throw new Error("ANTHROPIC_API_KEY required");
|
|
12229
12244
|
|
|
12230
12245
|
const systemMsgs = messages.filter((m) => m.role === "system");
|
|
@@ -12307,10 +12322,7 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
12307
12322
|
: systemText;
|
|
12308
12323
|
}
|
|
12309
12324
|
|
|
12310
|
-
const url =
|
|
12311
|
-
baseUrl && baseUrl !== "http://localhost:11434"
|
|
12312
|
-
? baseUrl
|
|
12313
|
-
: "https://api.anthropic.com/v1";
|
|
12325
|
+
const url = normalizeProviderBaseUrl(baseUrl);
|
|
12314
12326
|
|
|
12315
12327
|
// Real token streaming (--include-partial-messages): stream the SSE response
|
|
12316
12328
|
// and forward text deltas live, assembling tool_use blocks back into the
|
|
@@ -12401,32 +12413,12 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
12401
12413
|
}
|
|
12402
12414
|
|
|
12403
12415
|
// OpenAI-compatible providers
|
|
12404
|
-
const
|
|
12405
|
-
|
|
12406
|
-
deepseek: "https://api.deepseek.com/v1",
|
|
12407
|
-
dashscope: "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|
12408
|
-
mistral: "https://api.mistral.ai/v1",
|
|
12409
|
-
gemini: "https://generativelanguage.googleapis.com/v1beta/openai",
|
|
12410
|
-
volcengine: "https://ark.cn-beijing.volces.com/api/v3",
|
|
12411
|
-
};
|
|
12416
|
+
const providerDefinition = BUILT_IN_PROVIDERS[provider];
|
|
12417
|
+
const url = openAICompatibleBaseUrl(provider, baseUrl);
|
|
12412
12418
|
|
|
12413
|
-
|
|
12414
|
-
openai: "OPENAI_API_KEY",
|
|
12415
|
-
deepseek: "DEEPSEEK_API_KEY",
|
|
12416
|
-
dashscope: "DASHSCOPE_API_KEY",
|
|
12417
|
-
mistral: "MISTRAL_API_KEY",
|
|
12418
|
-
gemini: "GEMINI_API_KEY",
|
|
12419
|
-
volcengine: "VOLCENGINE_API_KEY",
|
|
12420
|
-
};
|
|
12421
|
-
|
|
12422
|
-
const url =
|
|
12423
|
-
baseUrl && baseUrl !== "http://localhost:11434"
|
|
12424
|
-
? baseUrl
|
|
12425
|
-
: providerUrls[provider];
|
|
12426
|
-
|
|
12427
|
-
if (!url) {
|
|
12419
|
+
if (!providerDefinition || !url) {
|
|
12428
12420
|
throw new Error(
|
|
12429
|
-
`Unsupported provider: ${provider}. Supported:
|
|
12421
|
+
`Unsupported provider: ${provider}. Supported: ${Object.keys(BUILT_IN_PROVIDERS).join(", ")}`,
|
|
12430
12422
|
);
|
|
12431
12423
|
}
|
|
12432
12424
|
const supportsOpenAIRequestIdentity = _isOfficialOpenAIEndpoint(
|
|
@@ -12434,19 +12426,10 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
12434
12426
|
url,
|
|
12435
12427
|
);
|
|
12436
12428
|
|
|
12437
|
-
const envKey =
|
|
12438
|
-
const key = apiKey
|
|
12429
|
+
const envKey = providerDefinition.apiKeyEnv;
|
|
12430
|
+
const key = apiKey;
|
|
12439
12431
|
if (!key) throw new Error(`${envKey} required for provider ${provider}`);
|
|
12440
|
-
|
|
12441
|
-
const defaultModels = {
|
|
12442
|
-
openai: "gpt-4o",
|
|
12443
|
-
deepseek: "deepseek-chat",
|
|
12444
|
-
dashscope: "qwen-turbo",
|
|
12445
|
-
mistral: "mistral-large-latest",
|
|
12446
|
-
gemini: "gemini-2.0-flash",
|
|
12447
|
-
volcengine: "deepseek-v4-1-flash-260910",
|
|
12448
|
-
};
|
|
12449
|
-
const effectiveModel = model || defaultModels[provider] || "gpt-4o-mini";
|
|
12432
|
+
const effectiveModel = model || providerDefinition.models?.[0];
|
|
12450
12433
|
const modelProfile = resolveModelCapabilityProfile({
|
|
12451
12434
|
provider,
|
|
12452
12435
|
model: effectiveModel,
|
|
@@ -26,6 +26,7 @@ import { randomUUID } from "node:crypto";
|
|
|
26
26
|
import { isProxy } from "node:util/types";
|
|
27
27
|
import { transportErrorDetails } from "../lib/transport-error-details.js";
|
|
28
28
|
import { captureAgentExecutionPolicy } from "../lib/agent-execution-policy.js";
|
|
29
|
+
import { resolveLlmConnection } from "../lib/llm-connection-resolution.js";
|
|
29
30
|
import { HERMETIC_CODING_SYSTEM_PROMPT } from "../lib/coding-task-guidance.js";
|
|
30
31
|
import { bootstrap } from "./bootstrap.js";
|
|
31
32
|
import {
|
|
@@ -1159,10 +1160,16 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1159
1160
|
// `let` (not const): a custom-command macro's `model:` frontmatter may
|
|
1160
1161
|
// override it below (when the user passed no explicit --model), mirroring
|
|
1161
1162
|
// `cc command run`.
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1163
|
+
const connection = resolveLlmConnection(options, [], {
|
|
1164
|
+
defaultModel:
|
|
1165
|
+
(options.provider || "ollama") === "anthropic"
|
|
1166
|
+
? "claude-sonnet-4-6"
|
|
1167
|
+
: (options.provider || "ollama") === "ollama"
|
|
1168
|
+
? "qwen2.5:7b"
|
|
1169
|
+
: null,
|
|
1170
|
+
});
|
|
1171
|
+
let model = connection.model;
|
|
1172
|
+
const { provider, baseUrl, apiKey } = connection;
|
|
1166
1173
|
const cwd = options.cwd || process.cwd();
|
|
1167
1174
|
const formalQualityHermetic = isFormalQualityHermeticRuntime(process.env);
|
|
1168
1175
|
const hermeticExecution =
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import { randomUUID } from "node:crypto";
|
|
20
20
|
import { transportErrorDetails } from "../lib/transport-error-details.js";
|
|
21
21
|
import { captureAgentExecutionPolicy } from "../lib/agent-execution-policy.js";
|
|
22
|
+
import { resolveLlmConnection } from "../lib/llm-connection-resolution.js";
|
|
22
23
|
import { TaskWorklog } from "../lib/context-memory-kernel/task-worklog-port.js";
|
|
23
24
|
import { isProxy } from "node:util/types";
|
|
24
25
|
import {
|
|
@@ -1777,10 +1778,15 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
1777
1778
|
) {
|
|
1778
1779
|
throw new TypeError("Agent retrieval authorities must share one tenant");
|
|
1779
1780
|
}
|
|
1780
|
-
const
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1781
|
+
const connection = resolveLlmConnection(options, [], {
|
|
1782
|
+
defaultModel:
|
|
1783
|
+
(options.provider || "ollama") === "anthropic"
|
|
1784
|
+
? "claude-sonnet-4-6"
|
|
1785
|
+
: (options.provider || "ollama") === "ollama"
|
|
1786
|
+
? "qwen2.5:7b"
|
|
1787
|
+
: null,
|
|
1788
|
+
});
|
|
1789
|
+
const { model, provider, baseUrl, apiKey } = connection;
|
|
1784
1790
|
const writeOut = deps.writeOut;
|
|
1785
1791
|
const writeErr = deps.writeErr;
|
|
1786
1792
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { captureAgentExecutionPolicy } from "../../lib/agent-execution-policy.js";
|
|
2
|
+
import { resolveLlmConnection } from "../../lib/llm-connection-resolution.js";
|
|
2
3
|
|
|
3
4
|
export function resolveAgentPolicy({
|
|
4
5
|
config = null,
|
|
@@ -7,20 +8,25 @@ export function resolveAgentPolicy({
|
|
|
7
8
|
} = {}) {
|
|
8
9
|
const llm = config?.llm || {};
|
|
9
10
|
const executionPolicy = captureAgentExecutionPolicy(overrides);
|
|
11
|
+
const provider =
|
|
12
|
+
overrides.provider || llm.provider || defaults.provider || "ollama";
|
|
13
|
+
const connection = resolveLlmConnection(overrides, [llm, defaults], {
|
|
14
|
+
defaultProvider: provider,
|
|
15
|
+
defaultModel:
|
|
16
|
+
defaults.model ||
|
|
17
|
+
(provider === "anthropic"
|
|
18
|
+
? "claude-sonnet-4-6"
|
|
19
|
+
: provider === "ollama"
|
|
20
|
+
? "qwen2:7b"
|
|
21
|
+
: null),
|
|
22
|
+
});
|
|
10
23
|
|
|
11
24
|
return {
|
|
12
|
-
model:
|
|
25
|
+
model: connection.model || defaults.model || "qwen2:7b",
|
|
13
26
|
visionModel: overrides.visionModel,
|
|
14
|
-
provider:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
overrides.baseUrl !== undefined
|
|
18
|
-
? overrides.baseUrl
|
|
19
|
-
: llm.baseUrl || defaults.baseUrl,
|
|
20
|
-
apiKey:
|
|
21
|
-
overrides.apiKey !== undefined
|
|
22
|
-
? overrides.apiKey
|
|
23
|
-
: llm.apiKey || defaults.apiKey || null,
|
|
27
|
+
provider: connection.provider,
|
|
28
|
+
baseUrl: connection.baseUrl,
|
|
29
|
+
apiKey: connection.apiKey || null,
|
|
24
30
|
sessionId: overrides.sessionId || null,
|
|
25
31
|
agentId: overrides.agentId || null,
|
|
26
32
|
recallMemory:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as h,P as u,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-DSyfxxQS.js";import"./icons-DG5UD-6K.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),v=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${v}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},T={class:"bubble"},M={class:"meta"},R={class:"actor"},V={class:"time"},q={class:"body"};function D(c,d,t,r,i,l){const o=h("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",T,[n("div",M,[n("span",R,a(r.actorLabel),1),n("span",V,a(r.formattedTime),1)]),n("div",q,a(r.messageText),1),t.event.source.adapter?(u(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const j=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-JseEsv/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as C,P as c,J as f,U as r,c as h,_ as k,R as s,V as l,K as d,Q as u,S as g,b as t}from"./vendor-Bn1JzzAn.js";import{_ as j}from"./index-DSyfxxQS.js";import{aH as w}from"./icons-DG5UD-6K.js";const E={__name:"EmailListRenderer",props:{event:{type:Object,required:!0}},setup(_,{expose:m}){m();const a=_,e=t(()=>a.event.content||{}),i=t(()=>a.event.extra||{}),p=t(()=>e.value.from||e.value.sender||e.value.fromName||a.event.actor||"(未知发件人)"),n=t(()=>e.value.subject||e.value.title||"(无主题)"),y=t(()=>e.value.snippet||e.value.preview||e.value.body?.slice(0,100)||null),b=t(()=>Array.isArray(e.value.attachments)?e.value.attachments.length:typeof e.value.attachmentCount=="number"?e.value.attachmentCount:0),x=t(()=>i.value.category||e.value.category),S=t(()=>e.value.unread===!0),T=t(()=>{if(!a.event.occurredAt)return"";const o=new Date(a.event.occurredAt);return`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")} ${String(o.getHours()).padStart(2,"0")}:${String(o.getMinutes()).padStart(2,"0")}`}),v={props:a,c:e,e:i,fromText:p,subjectText:n,snippetText:y,attachmentCount:b,category:x,isUnread:S,formattedTime:T,computed:t,get MailOutlined(){return w}};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}},M={class:"email-row"},N={class:"left"},O={class:"body"},V={class:"head"},A={class:"from"},B={class:"time"},R={class:"subject"},D={key:0,class:"snippet"},L={class:"meta"};function U(_,m,a,e,i,p){const n=C("a-tag");return c(),f("div",M,[r("div",N,[h(e.MailOutlined,{class:k(["icon",{unread:e.isUnread}])},null,8,["class"])]),r("div",O,[r("div",V,[r("span",A,s(e.fromText),1),r("span",B,s(e.formattedTime),1)]),r("div",R,s(e.subjectText),1),e.snippetText?(c(),f("div",D,s(e.snippetText),1)):l("v-if",!0),r("div",L,[h(n,{color:"blue",class:"src"},{default:d(()=>[u(s(a.event.source.adapter),1)]),_:1}),e.attachmentCount>0?(c(),g(n,{key:0,color:"orange"},{default:d(()=>[u(" 📎 "+s(e.attachmentCount),1)]),_:1})):l("v-if",!0),e.category?(c(),g(n,{key:1},{default:d(()=>[u(s(e.category),1)]),_:1})):l("v-if",!0)])])])}const P=j(E,[["render",U],["__scopeId","data-v-e4ddf632"],["__file","/tmp/cc-web-panel-JseEsv/repo/packages/web-panel/src/components/pdh/renderers/EmailListRenderer.vue"]]);export{P as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as c,J as p,b as s}from"./vendor-Bn1JzzAn.js";import{r as a}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-DSyfxxQS.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=s(()=>a(e.content||"")),n={props:e,rendered:r,computed:s,get renderMarkdown(){return a}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return c(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-JseEsv/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-Bn1JzzAn.js";import{_ as v,b as m}from"./index-DSyfxxQS.js";import{a8 as y,M}from"./icons-DG5UD-6K.js";const B={__name:"MobileProjects",setup(p,{expose:i}){i();const s=u(),{t:e}=m();function a(){s.push("/projects")}function _(){s.push("/mobile-bridge")}const c={router:s,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return M},get FolderOutlined(){return y}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}},x={class:"mobile-projects-placeholder"},O={class:"title"},k={class:"subtitle"},w={class:"explainer"};function T(p,i,s,e,a,_){const c=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",k,t(e.t("mobileProjects.subtitle")),1),l(c,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",w,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(B,[["render",T],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-JseEsv/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E,b as w,r as b,I as m,J as y,U as a,R as g,c as i,K as u,V as h,F as C,Z as L,N as O,o as M,P as p,Q as v,S as R}from"./vendor-Bn1JzzAn.js";import{u as I,_ as q}from"./index-DSyfxxQS.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{p as P}from"./parsers-YNLm7sQ0.js";import{u as z}from"./chat-BBAZpD_G.js";import{aa as V,aq as j,R as B}from"./icons-DG5UD-6K.js";const A=E("skills",()=>{const _=b(!1),t=b([]),n=b(""),e=b("all"),k=w(()=>{const o=new Set(["all"]);return t.value.forEach(l=>{l.category&&o.add(l.category),l.executionMode&&o.add(l.executionMode)}),[...o]}),S=w(()=>{let o=t.value;if(e.value!=="all"&&(o=o.filter(l=>l.category===e.value||l.executionMode===e.value)),n.value){const l=n.value.toLowerCase();o=o.filter(d=>d.name?.toLowerCase().includes(l)||d.description?.toLowerCase().includes(l)||d.title?.toLowerCase().includes(l))}return o});async function f(){const o=I();_.value=!0;try{if(N().isEmbedded){const c=await o.sendRaw({type:"skill.list"},2e4);c?.ok&&Array.isArray(c.result?.skills)?t.value=c.result.skills:(console.error("skill.list custom topic failed:",c?.error),t.value=[]);return}const{output:l}=await o.execute("skill list",2e4),d=P(l);t.value=d}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:t,searchQuery:n,selectedCategory:e,categories:k,filteredSkills:S,loadSkills:f}}),F={__name:"Skills",setup(_,{expose:t}){t();const n=A(),e=z(),k=O(),S=w(()=>n.categories.filter(r=>r!=="all").slice(0,6));function f(r){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[r]||r}function o(r){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[r]||r||"未知"}function l(r){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[r]||"default"}async function d(r){await e.createSession("agent"),k.push("/chat"),setTimeout(()=>{e.currentSessionId&&e.sendMessage(e.currentSessionId,`/skill run ${r}`)},300)}M(()=>{n.allSkills.length||n.loadSkills()});const c={skillsStore:n,chatStore:e,router:k,displayCategories:S,catLabel:f,modeLabel:o,modeColor:l,runSkill:d,computed:w,onMounted:M,get useRouter(){return O},get ReloadOutlined(){return B},get PlayCircleOutlined(){return j},get AppstoreOutlined(){return V},get useSkillsStore(){return A},get useChatStore(){return z}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}},Q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},U={class:"page-sub"},J={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},T={key:0,style:{"text-align":"center",padding:"60px"}},D={class:"skills-grid"},G={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},K={style:{flex:"1","min-width":"0"}},W={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Z={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},H={style:{"margin-left":"12px","flex-shrink":"0"}},X={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},Y={style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}};function $(_,t,n,e,k,S){const f=m("a-button"),o=m("a-input-search"),l=m("a-radio-button"),d=m("a-radio-group"),c=m("a-spin"),r=m("a-tag"),x=m("a-card");return p(),y("div",null,[a("div",Q,[a("div",null,[t[3]||(t[3]=a("h2",{class:"page-title"},"技能管理",-1)),a("p",U,g(e.skillsStore.allSkills.length)+" 个可用技能",1)]),i(f,{type:"primary",ghost:"",loading:e.skillsStore.loading,onClick:t[0]||(t[0]=s=>e.skillsStore.loadSkills())},{icon:u(()=>[i(e.ReloadOutlined)]),default:u(()=>[t[4]||(t[4]=v(" 刷新 ",-1))]),_:1},8,["loading"])]),h(" Search & Filter "),a("div",J,[i(o,{value:e.skillsStore.searchQuery,"onUpdate:value":t[1]||(t[1]=s=>e.skillsStore.searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),i(d,{value:e.skillsStore.selectedCategory,"onUpdate:value":t[2]||(t[2]=s=>e.skillsStore.selectedCategory=s),"button-style":"solid"},{default:u(()=>[i(l,{value:"all"},{default:u(()=>[...t[5]||(t[5]=[v("全部",-1)])]),_:1}),(p(!0),y(C,null,L(e.displayCategories,s=>(p(),R(l,{key:s,value:s},{default:u(()=>[v(g(e.catLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),h(" Loading State "),e.skillsStore.loading?(p(),y("div",T,[i(c,{size:"large"}),t[6]||(t[6]=a("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):e.skillsStore.filteredSkills.length?(p(),y(C,{key:1},[h(" Skills Grid "),a("div",D,[(p(!0),y(C,null,L(e.skillsStore.filteredSkills,s=>(p(),R(x,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:u(()=>[a("div",G,[a("div",K,[a("div",W,g(s.name),1),a("div",Z,g(s.description||"暂无描述"),1)]),a("div",H,[i(r,{color:e.modeColor(s.executionMode),style:{"font-size":"10px"}},{default:u(()=>[v(g(e.modeLabel(s.executionMode)),1)]),_:2},1032,["color"])])]),a("div",X,[i(f,{size:"small",type:"primary",ghost:"",onClick:ee=>e.runSkill(s.name)},{icon:u(()=>[i(e.PlayCircleOutlined)]),default:u(()=>[t[7]||(t[7]=v(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])],2112)):(p(),y(C,{key:2},[h(" Empty State "),a("div",Y,[i(e.AppstoreOutlined,{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),a("div",null,g(e.skillsStore.allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)])],2112))])}const ie=q(F,[["render",$],["__scopeId","data-v-d64d43f5"],["__file","/tmp/cc-web-panel-JseEsv/repo/packages/web-panel/src/views/Skills.vue"]]);export{ie as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E,b as D,r as R,I as p,J as c,U as _,c as n,K as a,S as C,V as x,o as I,x as V,P as i,Q as k,R as r,F as T,Z as F}from"./vendor-Bn1JzzAn.js";import{u as P,_ as O}from"./index-DSyfxxQS.js";import{R as U}from"./icons-DG5UD-6K.js";const B=E("tasks",()=>{const y=R([]),l=R(!1);let u=null,t=null,d=null;const b=D(()=>y.value.filter(e=>e.status==="running")),v=D(()=>y.value.filter(e=>e.status==="pending")),w=D(()=>y.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function s(){const e=P();l.value=!0;try{const g=await e.sendRaw({type:"tasks-list"});g&&Array.isArray(g.tasks)&&(y.value=g.tasks)}catch{}finally{l.value=!1}}async function m(e){const g=P();try{await g.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await s()}}const f=R(null);function h(e=5e3){N(),s(),u=setInterval(s,e),S()}function N(){u&&(clearInterval(u),u=null),t&&(t(),t=null),d&&(clearTimeout(d),d=null)}function S(){const e=P();if(t)return;const g=z=>{z.type==="task:notification"&&z.payload?.task&&(f.value=z.payload.task,s(),d&&clearTimeout(d),d=setTimeout(()=>{f.value=null,d=null},8e3))};t=e.onRuntimeEvent(g)}function A(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function o(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:y,loading:l,running:b,pending:v,completed:w,lastNotification:f,fetchTasks:s,stopTask:m,startPolling:h,stopPolling:N,formatDuration:A,getStatusColor:o}}),J={__name:"Tasks",setup(y,{expose:l}){l();const u=B(),t=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function d(s){return s.status==="running"&&s.startedAt?u.formatDuration(Date.now()-s.startedAt):s.completedAt&&s.startedAt?u.formatDuration(s.completedAt-s.startedAt):"-"}function b(s){return s?new Date(s).toLocaleString():"-"}function v(s,m){return s?s.length>m?`${s.slice(0,m)}...`:s:""}I(()=>u.startPolling(5e3)),V(()=>u.stopPolling());const w={store:u,columns:t,getDuration:d,formatTime:b,truncate:v,onMounted:I,onUnmounted:V,get ReloadOutlined(){return U},get useTasksStore(){return B}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},L={class:"page-header"},j={key:0,class:"error-text"},K={key:1},M={class:"task-header"},Q={class:"task-desc"},W={class:"task-id"},Z={class:"task-meta"},q=["title"],G={key:0,class:"error-text"},H={key:1,class:"success-text"},X={key:2,class:"muted-text"};function Y(y,l,u,t,d,b){const v=p("a-button"),w=p("a-space"),s=p("a-alert"),m=p("a-statistic"),f=p("a-card"),h=p("a-col"),N=p("a-row"),S=p("a-tag"),A=p("a-table");return i(),c("div",null,[_("div",L,[l[3]||(l[3]=_("div",null,[_("h2",{class:"page-title"},"后台任务"),_("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),n(w,null,{default:a(()=>[n(v,{ghost:"",loading:t.store.loading,onClick:l[0]||(l[0]=o=>t.store.fetchTasks())},{icon:a(()=>[n(t.ReloadOutlined)]),default:a(()=>[l[2]||(l[2]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t.store.lastNotification?(i(),C(s,{key:0,type:t.store.lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:l[1]||(l[1]=o=>t.store.lastNotification=null)},{message:a(()=>[k(" 任务"+r(t.store.lastNotification.status==="completed"?"完成":"结束")+": "+r(t.store.lastNotification.description||t.store.lastNotification.id.slice(0,16)),1)]),description:a(()=>[t.store.lastNotification.error?(i(),c("span",j,r(t.store.lastNotification.error),1)):t.store.lastNotification.result?(i(),c("span",K,r(t.truncate(String(t.store.lastNotification.result),120)),1)):x("v-if",!0)]),_:1},8,["type"])):x("v-if",!0),n(N,{gutter:[16,16],class:"stats-row"},{default:a(()=>[n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"全部任务",value:t.store.tasks.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"运行中",value:t.store.running.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"等待中",value:t.store.pending.length},null,8,["value"])]),_:1})]),_:1}),n(h,{xs:12,sm:6},{default:a(()=>[n(f,{class:"stat-card",size:"small"},{default:a(()=>[n(m,{title:"已完成",value:t.store.completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),t.store.running.length>0?(i(),C(f,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:a(()=>[(i(!0),c(T,null,F(t.store.running,o=>(i(),c("div",{key:o.id,class:"task-item running"},[_("div",M,[n(S,{color:t.store.getStatusColor(o.status)},{default:a(()=>[k(r(o.status.toUpperCase()),1)]),_:2},1032,["color"]),_("span",Q,r(o.description),1),_("span",W,r(o.id.slice(0,16)),1)]),_("div",Z,[_("span",null,"类型: "+r(o.type||"-"),1),_("span",null,"已运行: "+r(t.store.formatDuration(Date.now()-o.startedAt)),1),n(v,{size:"small",danger:"",onClick:e=>t.store.stopTask(o.id)},{default:a(()=>[...l[4]||(l[4]=[k("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):x("v-if",!0),n(f,{class:"panel-card"},{default:a(()=>[n(A,{columns:t.columns,"data-source":t.store.tasks,pagination:{pageSize:15,size:"small"},loading:t.store.loading,"row-key":"id",size:"small"},{bodyCell:a(({column:o,record:e})=>[o.key==="status"?(i(),C(S,{key:0,color:t.store.getStatusColor(e.status)},{default:a(()=>[k(r(e.status),1)]),_:2},1032,["color"])):o.key==="description"?(i(),c("span",{key:1,title:e.command},r(e.description),9,q)):o.key==="duration"?(i(),c(T,{key:2},[k(r(t.getDuration(e)),1)],64)):o.key==="createdAt"?(i(),c(T,{key:3},[k(r(t.formatTime(e.createdAt)),1)],64)):o.key==="result"?(i(),c(T,{key:4},[e.error?(i(),c("span",G,r(t.truncate(e.error,60)),1)):e.result?(i(),c("span",H,r(t.truncate(String(e.result),60)),1)):(i(),c("span",X,"-"))],64)):o.key==="action"?(i(),c(T,{key:5},[e.status==="running"?(i(),C(v,{key:0,size:"small",danger:"",onClick:g=>t.store.stopTask(e.id)},{default:a(()=>[...l[5]||(l[5]=[k(" 停止 ",-1)])]),_:1},8,["onClick"])):x("v-if",!0)],64)):x("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1})])}const st=O(J,[["render",Y],["__scopeId","data-v-da5ff6a2"],["__file","/tmp/cc-web-panel-JseEsv/repo/packages/web-panel/src/views/Tasks.vue"]]);export{st as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-DSyfxxQS.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-CsQ9jv8M.js";import{a0 as t}from"./index-DSyfxxQS.js";import"./vendor-Bn1JzzAn.js";import"./index-9caMEwQ-.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-wqzd_xCD.js";import{a0 as t}from"./index-DSyfxxQS.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-DmFHPdvC.js";import"./useFlexGapSupport-CFkN2Cgh.js";import"./styleChecker-CIFLlbXH.js";import"./index-9caMEwQ-.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|