chainlesschain 0.166.46 → 0.166.47
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 +6 -4
- package/package.json +3 -1
- package/src/assets/web-panel/assets/{AIOps-Cp8KiMmv.js → AIOps-CDpT0WXV.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-B4d9BGsm.js → ActionButton-BNfUljWx.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Cf9yXTkv.js → Analytics-C9323DEx.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-40UkmxtP.js → AppLayout-CRrjb2db.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-Ckkb4oOA.js → Artifacts-Db-DGqJS.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Dnf569k5.js → Audit-CJdHRJ0W.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CA6bLem4.js → BackgroundAgents-_RSCnTYs.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-ChQU0I_Q.js → Backup-8GFQi-dM.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BHeZXnNN.js → BaseInput-C87NtgUZ.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DcFVYB2E.js → Chat-DcTMWS8G.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-5ZDPTW_H.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-2PDbejv2.js → Checkbox-DM9EmYee.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DJBn1RAu.js → Codegen-M2YqDRNN.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CPRq7n6y.js → Col-oB1LLxyf.js} +1 -1
- package/src/assets/web-panel/assets/{Community-axvINFMi.js → Community-TcVZK5tF.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-_OX4Qbe0.js → Compact-XKmq-3K_.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DWAkvzRL.js → Compliance-C6CBiDRy.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CUIJ25oj.js → Cowork-Dz9CGqXH.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-nR0m7H3_.js → Cron-CxJDgDVL.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CgTLXzh_.js → Crosschain-DMP0JsaQ.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BllzRB6Q.js → DID-I5IQeogb.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-C9f0IIBN.js → Dashboard-BfLW2MXj.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BkahetiO.js → Dropdown-BK8EjAlh.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-rartVC-k.js → EmailListRenderer-C3iqSv5I.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BJmBzpW6.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgUdFvw1.js → FamilyGuardDashboard-T19rnqm-.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-oFpIQU6g.js → Federation-CozrbPMy.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BUH5xlyP.js → FormItemContext-k1dCLNNJ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-ilRa-ueg.js → GenericCardRenderer-DbaW_Jvt.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DlHHSF8j.js → Git-CQHRyEIt.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-yQiiXIWe.js → Governance-BMJYZgMy.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BUDRVGOP.js → Inference-B7mpNU7V.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BaGyIoN1.js → KnowledgeGraph-Br0Blg6B.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C1cO6zE0.js → Logs-HIdk0S6M.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-_z_Iaoes.js → MarkdownRenderer-HxeocBHy.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-CM8cGL0K.js → Marketplace-Bkfq69UP.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CDqAMU0U.js → McpTools-dtmx0bHO.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CfB0-Ofv.js → Memory-CrRlOuEf.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BL18ytvB.js → MobileBridge-D4ZIZiAH.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-PIyyxbuJ.js → MobileProjects-C90Rw7GE.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BTTrFCol.js → Mtc-CC6k_uh4.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-JHZn037c.js → MtcAudit-T_CUIYUy.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-CMf9NEdB.js → Multisig-N_e0RRWk.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Dhk3qaus.js → NLProgramming-Iq3VzEv0.js} +1 -1
- package/src/assets/web-panel/assets/Notes-B5sKJUJt.js +7 -0
- package/src/assets/web-panel/assets/{NotificationSettings-gxdaVEit.js → NotificationSettings-K8UVp8qQ.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-BWNyM-6m.js +1 -0
- package/src/assets/web-panel/assets/{Organization-CzvHcDNO.js → Organization-DMO1NJxI.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Dclx30Vv.js → Overflow-BBY6b31Z.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CM0Wm9vZ.js → P2P-DmsL0y0v.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-fYmQzmTA.js → PdhVaultBrowser-C65AX_RY.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-B_oATenG.js → Permissions-CWcpRtWa.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CptiVBh5.js → PersonalDataHub--ZNDIdsn.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DkHzgyyI.js → Pipeline-DCdj5NGb.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzZvwcKh.js → Privacy-BRKu7Q3E.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CzkCs-5G.js → ProjectInit-BJ7ozIAb.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BB8dcxRD.js → ProjectSettings-B2cVLiXW.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-B7PW9CFY.js → Projects-Ce9r_W-p.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Tfx-ti1V.js → Providers-BDespvGZ.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-EvWlNhfX.js → QrScannerModal-BUNO4fDU.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CUspgbNC.js → QuickAsk-D2TUqeBV.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-COY2g77J.js → Recommend-BNNQPHBH.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BzMBU6E6.js → RemoteSession-D2t1V_Cm.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-RtYRF4YP.js → Reputation-DVK5hEqI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Bva3l9Lc.js → Row-BB9RTwmE.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BhjzLvW3.js → RssFeed-DmEO7liZ.js} +2 -2
- package/src/assets/web-panel/assets/{Search-BYzT2PTR.js → Search-UwEYjnDB.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Bcl4-KTv.js → Security-DebqSsMp.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BRRa4A0f.js → Services-CuuPts3C.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DYQ016qy.js → Skeleton-DbWpmbgf.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CAUKL9JA.js → Skills-BaK7SxzT.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BTyUqfuD.js → Sla-BFHv51Jb.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CUjMihrs.js → SpeechSettings-B9b1R6uK.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CvfOSupr.js → SyncSettings-BnO0CN02.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-EvjNXrWH.js → Tasks-Dy01Vq49.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-wPAp0EoM.js → Templates-BCy2AMHc.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CP0D-q9Q.js → Tenant-4Tx9y_Y1.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CQ0f2iFg.js → Terminal-CPOoUH8J.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D3JrGSPb.js → TimelineRenderer-C85GlJzu.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-yXf2PPp9.js → Tokens-_xneFBGF.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DfmMOoZ2.js → Trigger-BizG4rTr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BTCyMgf1.js → Trust-Dh8EIn3n.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DKCwIBHi.js → UkeySign-C5NWoHWQ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CQpDSzLO.js → VideoEditing-0YfrySL6.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CyFrzC3K.js → Wallet-BZVH8Ags.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-D6Nr_1kd.js → WebAuthn-kNofa6vm.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-CgR9tNrB.js → WorkflowEditor-BNO34_j0.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CRG_IeyP.js → chat-ifQ2FlwD.js} +1 -1
- package/src/assets/web-panel/assets/{colors-MdE3TStI.js → colors-1TL8H6EH.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B0LRuiNV.js → compact-item-DBfRjs_T.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B_V5fjcX.js → createContext-Bs6V4iBf.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BHnbnuYL.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DSL-c_hr.js → hasIn-Bz6LMY_0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE7bSYmW.js → index--WvT2Il3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBwBZwio.js → index-84mi5rsv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsAEd-Do.js → index-B5SJCUZ7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdHMc9LQ.js → index-B6RClMZl.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3iW-mhn.js → index-BB1Af7Fv.js} +1 -1
- package/src/assets/web-panel/assets/{index-C67dPW0L.js → index-BQL_tldd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpwGsAA-.js → index-BXJXMaZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-CZICtYJ0.js → index-BhPDhmvN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbZZ7P_c.js → index-BiZ7Nz5-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Didyuq2Z.js → index-BoCTDcn6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BNhWoD6d.js → index-BxqC3LiO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRRY44XP.js → index-C6c0j-Ki.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3pJBTvo.js → index-C7d6QlfR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdplnAS9.js → index-C9QYxq61.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPYshcic.js → index-CBh48_Mh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkN53KiJ.js → index-CNKHoXWI.js} +1 -1
- package/src/assets/web-panel/assets/{index-OBhlHSMN.js → index-CXVBQ82k.js} +3 -3
- package/src/assets/web-panel/assets/{index-DtOTppk8.js → index-CXtiLagi.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNytQuFq.js → index-Cn7EIWmI.js} +1 -1
- package/src/assets/web-panel/assets/index-CsRz9-ZH.js +1 -0
- package/src/assets/web-panel/assets/{index-BIDCNwy6.js → index-CtB45Hok.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQAsL19t.js → index-Cu_V6ZJH.js} +1 -1
- package/src/assets/web-panel/assets/{index-c8OqO3rq.js → index-Cykt9BbN.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bq8-2Ibv.js → index-DDhy4eCS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXMeisJK.js → index-DEPPzM8I.js} +1 -1
- package/src/assets/web-panel/assets/{index-BD0w-888.js → index-DMVktlxG.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVDi4rS9.js → index-DOww5Qny.js} +1 -1
- package/src/assets/web-panel/assets/{index-Tg3yl8wc.js → index-DWPp-d07.js} +1 -1
- package/src/assets/web-panel/assets/index-DnjMFf3m.js +1 -0
- package/src/assets/web-panel/assets/{index-DVgTf7CZ.js → index-DvM2xBUA.js} +1 -1
- package/src/assets/web-panel/assets/{index-SmQfEHjp.js → index-EK3XtMxA.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5dqieYX.js → index-XJIV7HEw.js} +1 -1
- package/src/assets/web-panel/assets/{index-0200QxC4.js → index-cNwsev6n.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-aKWR2v.js → index-f_7L9GvP.js} +1 -1
- package/src/assets/web-panel/assets/{index-KaSejHjf.js → index-lUL3bD2z.js} +1 -1
- package/src/assets/web-panel/assets/{index-CS3bOhV7.js → index-pOUFfRdN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEOAZm5j.js → index-rGhS02f8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMm8tO2X.js → index-vHtnQsnV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHp1nSur.js → index-vb1XIxEB.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-P8SBN6Di.js → initDefaultProps-DpRIjwTt.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BubbjUT_.js → motion-CG4_9o-Z.js} +1 -1
- package/src/assets/web-panel/assets/{move-Chcykv0I.js → move-Dku1fXtf.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DyiYuGDu.js → mtc-parser-BvAVeX-3.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Rdwb_Neb.js → omit-DFu0x78D.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CCr0MYHl.js → pickAttrs-CmI-FNcK.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-B1ZXz3bb.js → placementArrow-CGERYewB.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BGEdwej6.js → responsiveObserve-D7G8bF5J.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CpnsUMaT.js → slide-B2sXwWXy.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-C7x-TVp_.js → statusUtils-DI5yh0n3.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CC5k_791.js → styleChecker-deGJ5dp_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BpZFKsJW.js → useFlexGapSupport-OqHBXEmi.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CVq5HySy.js → useFs-Dqgx0Qv_.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BGkdLryu.js → usePersonalDataHub-Be-lveh2.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-uLtOUEK-.js → vnode-CFxB876W.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BfVC9iUs.js → zoom-BFOYrl4e.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +8 -0
- package/src/commands/background-session.js +31 -3
- package/src/commands/chat.js +5 -1
- package/src/commands/eval.js +86 -28
- package/src/commands/llm.js +104 -1
- package/src/commands/plugin.js +130 -1
- package/src/commands/sandbox.js +121 -2
- package/src/commands/serve.js +11 -2
- package/src/commands/skill.js +29 -0
- package/src/data/changelog.json +13 -0
- package/src/gateways/ws/session-protocol.js +13 -0
- package/src/gateways/ws/ws-agent-handler.js +17 -0
- package/src/gateways/ws/ws-server.js +3 -0
- package/src/gateways/ws/ws-session-state.js +131 -0
- package/src/generated/cc-agent-protocol.schema.json +4 -0
- package/src/lazy-dispatch.js +8 -1
- package/src/lib/agent-sandbox.js +337 -53
- package/src/lib/app-server/cli-agent-kernel-adapter.js +28 -0
- package/src/lib/app-server/server.js +93 -0
- package/src/lib/background-agent-keeper-client.js +2 -0
- package/src/lib/background-agent-keeper-protocol.js +7 -0
- package/src/lib/background-agent-supervisor.js +194 -47
- package/src/lib/codex-app-server-adapter.js +81 -27
- package/src/lib/context-memory-kernel/durable-memory-port.js +31 -8
- package/src/lib/context-memory-kernel/provider-context.js +53 -19
- package/src/lib/deferred-question-context.js +122 -0
- package/src/lib/eval/evidence.js +202 -64
- package/src/lib/eval/plugin-suite.js +917 -0
- package/src/lib/eval/runner.js +10 -3
- package/src/lib/evolution/agent-evolution-runtime-composition.js +236 -1
- package/src/lib/evolution/agent-model-projection.js +97 -1
- package/src/lib/evolution/evidence-backed-wiki-maintainer.js +154 -1
- package/src/lib/evolution/evolution-artifact-ports.js +6 -0
- package/src/lib/evolution/evolution-deployment-loader.js +87 -3
- package/src/lib/evolution/evolution-eval-gate.js +8 -0
- package/src/lib/evolution/evolution-eval-runtime-composition.js +255 -0
- package/src/lib/evolution/evolution-evidence-artifact-adapter.js +58 -2
- package/src/lib/evolution/evolution-ledger-file-backend.js +23 -2
- package/src/lib/evolution/evolution-ledger-manifest-chain.js +223 -7
- package/src/lib/evolution/evolution-ledger-v2-journal.js +525 -0
- package/src/lib/evolution/evolution-ledger-v2-manifest-backend.js +46 -2
- package/src/lib/evolution/evolution-ledger.js +57 -1
- package/src/lib/evolution/evolution-run-ledger-adapter.js +93 -0
- package/src/lib/evolution/evolution-run-wiki-evidence-resolver.js +259 -0
- package/src/lib/evolution/governed-hub-llm.js +238 -5
- package/src/lib/evolution/governed-hub-resolver.js +82 -4
- package/src/lib/evolution/governed-hub-skill.js +11 -5
- package/src/lib/evolution/governed-skill-synthesis-provider-chat.js +10 -1
- package/src/lib/evolution/skill-runtime-revalidation-ledger-adapter.js +254 -0
- package/src/lib/evolution/skill-runtime-revalidation.js +530 -0
- package/src/lib/evolution/skill-target-matrix-eval.js +4 -4
- package/src/lib/evolution/wiki-evidence-commit-guard.js +366 -0
- package/src/lib/evolution/wiki-informed-skill-proposer.js +13 -1
- package/src/lib/goal-context.js +14 -5
- package/src/lib/interaction-adapter.js +166 -1
- package/src/lib/model-capabilities.js +271 -0
- package/src/lib/model-context-catalog.js +105 -0
- package/src/lib/model-context-window.js +4 -49
- package/src/lib/openai-responses.js +428 -0
- package/src/lib/plugin-runtime/scopes.js +7 -1
- package/src/lib/remote-read-loop-guard.js +2 -2
- package/src/lib/runtime-usage-ledger.js +16 -0
- package/src/lib/skill-loader.js +12 -0
- package/src/lib/with-file-lock.js +3 -1
- package/src/repl/agent-repl.js +5 -1
- package/src/runtime/agent-core.js +348 -23
- package/src/runtime/agent-runtime.js +7 -0
- package/src/runtime/coding-agent-contract-shared.cjs +13 -1
- package/src/runtime/headless-runner.js +4 -1
- package/src/runtime/headless-stream.js +133 -44
- package/src/runtime/runtime-factory.js +26 -2
- package/src/workers/background-agent-keeper.js +23 -13
- package/src/workers/background-agent-worker.js +27 -13
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Bi2SY9E_.js +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BqpG3XHV.js +0 -1
- package/src/assets/web-panel/assets/Notes-6F8EarNN.js +0 -7
- package/src/assets/web-panel/assets/OrderTableRenderer-gVgXQWdc.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BtFLt3qI.js +0 -1
- package/src/assets/web-panel/assets/index-BhuWQHeG.js +0 -1
- package/src/assets/web-panel/assets/index-D-4tFek3.js +0 -1
|
@@ -32,6 +32,8 @@ import {
|
|
|
32
32
|
normalizeInteractionBinding,
|
|
33
33
|
sameInteractionBinding,
|
|
34
34
|
} from "../lib/interaction-binding.js";
|
|
35
|
+
import { DeferredQuestionContext } from "../lib/deferred-question-context.js";
|
|
36
|
+
import { composePrepareCall } from "../lib/goal-context.js";
|
|
35
37
|
import {
|
|
36
38
|
addHooksV2EventObserver,
|
|
37
39
|
emitHooksV2Event,
|
|
@@ -82,6 +84,7 @@ import {
|
|
|
82
84
|
} from "../lib/evolution/agent-evolution-ingress.js";
|
|
83
85
|
import { captureAgentSkillOutcomeIndex } from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
|
|
84
86
|
import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
|
|
87
|
+
import { captureSkillRuntimeDependencies } from "../lib/evolution/skill-runtime-revalidation.js";
|
|
85
88
|
import { captureSkillRetrievalRevocationReader } from "../lib/evolution/skill-retrieval-revocation-authority.js";
|
|
86
89
|
import {
|
|
87
90
|
resolveAgentMcp,
|
|
@@ -2468,6 +2471,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2468
2471
|
options.interactiveQuestions === true ||
|
|
2469
2472
|
process.env.CC_INTERACTIVE_QUESTIONS === "1";
|
|
2470
2473
|
const pendingQuestions = new Map();
|
|
2474
|
+
const deferredQuestionContext = new DeferredQuestionContext({ sessionId });
|
|
2471
2475
|
let questionSeq = 0;
|
|
2472
2476
|
const questionTimeoutMs =
|
|
2473
2477
|
Number(process.env.CC_QUESTION_TIMEOUT_MS) > 0
|
|
@@ -2478,7 +2482,25 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2478
2482
|
if (!p) return;
|
|
2479
2483
|
pendingQuestions.delete(id);
|
|
2480
2484
|
clearTimeout(p.timer);
|
|
2481
|
-
emit({
|
|
2485
|
+
emit({
|
|
2486
|
+
type: "question_resolved",
|
|
2487
|
+
id,
|
|
2488
|
+
via,
|
|
2489
|
+
mode: p.mode,
|
|
2490
|
+
blocking: p.mode === "blocking",
|
|
2491
|
+
session_id: sessionId,
|
|
2492
|
+
});
|
|
2493
|
+
if (p.mode === "deferred") {
|
|
2494
|
+
deferredQuestionContext.record({
|
|
2495
|
+
questionId: id,
|
|
2496
|
+
question: p.question,
|
|
2497
|
+
answer,
|
|
2498
|
+
binding: p.binding,
|
|
2499
|
+
requestedRevision: p.contextRevision,
|
|
2500
|
+
resolvedRevision: turns,
|
|
2501
|
+
});
|
|
2502
|
+
return;
|
|
2503
|
+
}
|
|
2482
2504
|
p.resolve(answer);
|
|
2483
2505
|
};
|
|
2484
2506
|
const failQuestion = (id, via) => {
|
|
@@ -2486,7 +2508,15 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2486
2508
|
if (!p) return;
|
|
2487
2509
|
pendingQuestions.delete(id);
|
|
2488
2510
|
clearTimeout(p.timer);
|
|
2489
|
-
emit({
|
|
2511
|
+
emit({
|
|
2512
|
+
type: "question_resolved",
|
|
2513
|
+
id,
|
|
2514
|
+
via,
|
|
2515
|
+
mode: p.mode,
|
|
2516
|
+
blocking: p.mode === "blocking",
|
|
2517
|
+
session_id: sessionId,
|
|
2518
|
+
});
|
|
2519
|
+
if (p.mode === "deferred") return;
|
|
2490
2520
|
const e = new Error(`ask_user_question ${via}`);
|
|
2491
2521
|
e.code = "USER_TIMEOUT"; // handler → user_timeout (model proceeds, not a failure)
|
|
2492
2522
|
p.reject(e);
|
|
@@ -2517,50 +2547,100 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2517
2547
|
pendingQuestions.delete(id);
|
|
2518
2548
|
clearTimeout(pending.timer);
|
|
2519
2549
|
try {
|
|
2520
|
-
emit({
|
|
2550
|
+
emit({
|
|
2551
|
+
type: "question_resolved",
|
|
2552
|
+
id,
|
|
2553
|
+
via,
|
|
2554
|
+
mode: pending.mode,
|
|
2555
|
+
blocking: pending.mode === "blocking",
|
|
2556
|
+
session_id: sessionId,
|
|
2557
|
+
});
|
|
2521
2558
|
} catch {
|
|
2522
2559
|
// Best-effort cleanup notification.
|
|
2523
2560
|
}
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2561
|
+
if (pending.mode === "blocking") {
|
|
2562
|
+
const error = new Error(`ask_user_question ${via}`);
|
|
2563
|
+
error.code = "USER_TIMEOUT";
|
|
2564
|
+
pending.reject(error);
|
|
2565
|
+
}
|
|
2527
2566
|
}
|
|
2567
|
+
deferredQuestionContext.clear();
|
|
2528
2568
|
});
|
|
2529
|
-
const
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
question: typeof question === "string" ? question : "",
|
|
2559
|
-
options: Array.isArray(qOptions) ? qOptions : null,
|
|
2560
|
-
multiSelect: multiSelect === true,
|
|
2561
|
-
...(metadata && typeof metadata === "object" ? { metadata } : {}),
|
|
2562
|
-
});
|
|
2569
|
+
const registerInteractiveQuestion = (
|
|
2570
|
+
{
|
|
2571
|
+
question,
|
|
2572
|
+
options: qOptions,
|
|
2573
|
+
multiSelect,
|
|
2574
|
+
timeoutMs,
|
|
2575
|
+
metadata,
|
|
2576
|
+
purpose = "decision",
|
|
2577
|
+
sessionId: requestedSessionId,
|
|
2578
|
+
turnId,
|
|
2579
|
+
toolUseId,
|
|
2580
|
+
} = {},
|
|
2581
|
+
mode = "blocking",
|
|
2582
|
+
) => {
|
|
2583
|
+
let resolve = null;
|
|
2584
|
+
let reject = null;
|
|
2585
|
+
const promise =
|
|
2586
|
+
mode === "blocking"
|
|
2587
|
+
? new Promise((resolvePromise, rejectPromise) => {
|
|
2588
|
+
resolve = resolvePromise;
|
|
2589
|
+
reject = rejectPromise;
|
|
2590
|
+
})
|
|
2591
|
+
: null;
|
|
2592
|
+
const id = `q-${++questionSeq}`;
|
|
2593
|
+
const binding = normalizeInteractionBinding({
|
|
2594
|
+
sessionId: requestedSessionId ?? sessionId,
|
|
2595
|
+
turnId,
|
|
2596
|
+
toolUseId,
|
|
2597
|
+
sequence: questionSeq,
|
|
2563
2598
|
});
|
|
2599
|
+
const ms = Number(timeoutMs) > 0 ? Number(timeoutMs) : questionTimeoutMs;
|
|
2600
|
+
const timer = setTimeout(() => failQuestion(id, "timeout"), ms);
|
|
2601
|
+
timer.unref?.();
|
|
2602
|
+
pendingQuestions.set(id, {
|
|
2603
|
+
resolve,
|
|
2604
|
+
reject,
|
|
2605
|
+
timer,
|
|
2606
|
+
binding,
|
|
2607
|
+
mode,
|
|
2608
|
+
purpose,
|
|
2609
|
+
question: typeof question === "string" ? question : "",
|
|
2610
|
+
contextRevision: turns,
|
|
2611
|
+
});
|
|
2612
|
+
emit({
|
|
2613
|
+
type: "question_request",
|
|
2614
|
+
id,
|
|
2615
|
+
session_id: sessionId,
|
|
2616
|
+
binding,
|
|
2617
|
+
...(binding.turnId ? { turn_id: binding.turnId } : {}),
|
|
2618
|
+
...(binding.toolUseId ? { tool_use_id: binding.toolUseId } : {}),
|
|
2619
|
+
mode,
|
|
2620
|
+
blocking: mode === "blocking",
|
|
2621
|
+
purpose,
|
|
2622
|
+
context_revision: turns,
|
|
2623
|
+
question: typeof question === "string" ? question : "",
|
|
2624
|
+
options: Array.isArray(qOptions) ? qOptions : null,
|
|
2625
|
+
multiSelect: multiSelect === true,
|
|
2626
|
+
...(metadata && typeof metadata === "object" ? { metadata } : {}),
|
|
2627
|
+
});
|
|
2628
|
+
return mode === "blocking"
|
|
2629
|
+
? promise
|
|
2630
|
+
: Object.freeze({
|
|
2631
|
+
questionId: id,
|
|
2632
|
+
status: "pending",
|
|
2633
|
+
mode: "deferred",
|
|
2634
|
+
purpose,
|
|
2635
|
+
authorization: false,
|
|
2636
|
+
binding,
|
|
2637
|
+
contextRevision: turns,
|
|
2638
|
+
});
|
|
2639
|
+
};
|
|
2640
|
+
const interactionAskUser = (request = {}) =>
|
|
2641
|
+
registerInteractiveQuestion(request, "blocking");
|
|
2642
|
+
const interactionDeferUserQuestion = (request = {}) =>
|
|
2643
|
+
registerInteractiveQuestion(request, "deferred");
|
|
2564
2644
|
|
|
2565
2645
|
// --output-style (or settings.json `outputStyle`) persona, appended.
|
|
2566
2646
|
let outputStyleBody = null;
|
|
@@ -3173,7 +3253,10 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3173
3253
|
}
|
|
3174
3254
|
|
|
3175
3255
|
const streamInteraction = {};
|
|
3176
|
-
if (interactiveQuestions)
|
|
3256
|
+
if (interactiveQuestions) {
|
|
3257
|
+
streamInteraction.askUser = interactionAskUser;
|
|
3258
|
+
streamInteraction.deferUserQuestion = interactionDeferUserQuestion;
|
|
3259
|
+
}
|
|
3177
3260
|
if (options.includeHookEvents === true) {
|
|
3178
3261
|
streamInteraction.emit = (kind, payload = {}) => {
|
|
3179
3262
|
const subAgentId =
|
|
@@ -3257,6 +3340,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3257
3340
|
cwd,
|
|
3258
3341
|
additionalDirectories,
|
|
3259
3342
|
...(skillOutcomeIndex === null ? {} : { skillOutcomeIndex }),
|
|
3343
|
+
...captureSkillRuntimeDependencies(options, evolutionIngress?.tenantId),
|
|
3260
3344
|
...(skillVectorAuthority === null ? {} : { skillVectorAuthority }),
|
|
3261
3345
|
...(skillRetrievalRevocationReader === null
|
|
3262
3346
|
? {}
|
|
@@ -3294,7 +3378,10 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3294
3378
|
// Absent → agent-core returns user_not_reachable (graceful proceed).
|
|
3295
3379
|
interaction:
|
|
3296
3380
|
Object.keys(streamInteraction).length > 0 ? streamInteraction : undefined,
|
|
3297
|
-
prepareCall:
|
|
3381
|
+
prepareCall: composePrepareCall([
|
|
3382
|
+
goalPrepareCallFn,
|
|
3383
|
+
() => deferredQuestionContext.prepareCall({ currentRevision: turns }),
|
|
3384
|
+
]),
|
|
3298
3385
|
// --mcp-config wiring (tool defs + dispatch map + live client).
|
|
3299
3386
|
mcpClient: mcp?.mcpClient || null,
|
|
3300
3387
|
mcpHostClient: mcpRecoveryRuntime.client || mcp?.mcpClient || null,
|
|
@@ -3587,8 +3674,10 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3587
3674
|
continue;
|
|
3588
3675
|
}
|
|
3589
3676
|
if (parsed.answer) {
|
|
3590
|
-
// Answers settle
|
|
3591
|
-
// value (user cancelled the
|
|
3677
|
+
// Answers settle their bound ask_user_question out of band and are
|
|
3678
|
+
// never queued as a new turn. A null value (user cancelled the UI)
|
|
3679
|
+
// resolves as user_timeout for blocking questions and as no context
|
|
3680
|
+
// for deferred questions.
|
|
3592
3681
|
const pending = pendingQuestions.get(parsed.answer.id);
|
|
3593
3682
|
if (
|
|
3594
3683
|
!pending ||
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
captureAgentSkillOutcomeIndex,
|
|
6
6
|
} from "../lib/evolution/agent-evolution-runtime-composition-brand.js";
|
|
7
7
|
import { captureSkillVectorAuthority } from "../lib/skill-vector-authority.js";
|
|
8
|
+
import { captureSkillRuntimeDependencies } from "../lib/evolution/skill-runtime-revalidation.js";
|
|
8
9
|
import { captureSkillRetrievalRevocationReader } from "../lib/evolution/skill-retrieval-revocation-authority.js";
|
|
9
10
|
import {
|
|
10
11
|
resolveAgentPolicy,
|
|
@@ -18,6 +19,8 @@ export function createAgentRuntimeFactory({
|
|
|
18
19
|
evolutionComposition = null,
|
|
19
20
|
skillOutcomeIndex = null,
|
|
20
21
|
skillVectorAuthority = null,
|
|
22
|
+
skillRuntimeAdmission = null,
|
|
23
|
+
skillRuntimeAdmissionRequired = false,
|
|
21
24
|
skillRetrievalRevocationReader = null,
|
|
22
25
|
} = {}) {
|
|
23
26
|
const composition =
|
|
@@ -57,6 +60,23 @@ export function createAgentRuntimeFactory({
|
|
|
57
60
|
}
|
|
58
61
|
const retrievalTenant =
|
|
59
62
|
composition?.tenantId ?? outcomeIndex?.tenantId ?? null;
|
|
63
|
+
if (
|
|
64
|
+
skillRuntimeAdmission &&
|
|
65
|
+
deps.skillRuntimeAdmission &&
|
|
66
|
+
skillRuntimeAdmission !== deps.skillRuntimeAdmission
|
|
67
|
+
)
|
|
68
|
+
throw new TypeError(
|
|
69
|
+
"Skill runtime admission cannot be overridden through deps",
|
|
70
|
+
);
|
|
71
|
+
const runtimeAdmissionDependencies = captureSkillRuntimeDependencies(
|
|
72
|
+
{
|
|
73
|
+
skillRuntimeAdmission:
|
|
74
|
+
skillRuntimeAdmission ?? deps.skillRuntimeAdmission,
|
|
75
|
+
skillRuntimeAdmissionRequired:
|
|
76
|
+
skillRuntimeAdmissionRequired || deps.skillRuntimeAdmissionRequired,
|
|
77
|
+
},
|
|
78
|
+
retrievalTenant,
|
|
79
|
+
);
|
|
60
80
|
if (
|
|
61
81
|
retrievalTenant !== null &&
|
|
62
82
|
vectorAuthority !== null &&
|
|
@@ -95,10 +115,12 @@ export function createAgentRuntimeFactory({
|
|
|
95
115
|
composition === null &&
|
|
96
116
|
outcomeIndex === null &&
|
|
97
117
|
vectorAuthority === null &&
|
|
98
|
-
revocationReader === null
|
|
118
|
+
revocationReader === null &&
|
|
119
|
+
Object.keys(runtimeAdmissionDependencies).length === 0
|
|
99
120
|
? deps
|
|
100
121
|
: Object.freeze({
|
|
101
122
|
...deps,
|
|
123
|
+
...runtimeAdmissionDependencies,
|
|
102
124
|
...(composition === null
|
|
103
125
|
? {}
|
|
104
126
|
: { evolutionIngress: composition.evolutionIngress }),
|
|
@@ -113,10 +135,12 @@ export function createAgentRuntimeFactory({
|
|
|
113
135
|
const serverDeps =
|
|
114
136
|
outcomeIndex === null &&
|
|
115
137
|
vectorAuthority === null &&
|
|
116
|
-
revocationReader === null
|
|
138
|
+
revocationReader === null &&
|
|
139
|
+
Object.keys(runtimeAdmissionDependencies).length === 0
|
|
117
140
|
? deps
|
|
118
141
|
: Object.freeze({
|
|
119
142
|
...deps,
|
|
143
|
+
...runtimeAdmissionDependencies,
|
|
120
144
|
...(outcomeIndex === null ? {} : { skillOutcomeIndex: outcomeIndex }),
|
|
121
145
|
...(vectorAuthority === null
|
|
122
146
|
? {}
|
|
@@ -183,7 +183,13 @@ export function runBackgroundAgentKeeperHeartbeat({
|
|
|
183
183
|
return false;
|
|
184
184
|
}
|
|
185
185
|
try {
|
|
186
|
-
|
|
186
|
+
// A heartbeat is advisory liveness telemetry. Keep ownership strict but
|
|
187
|
+
// never wait behind another state writer or invoke the synchronous Windows
|
|
188
|
+
// owner probe; the next one-second heartbeat retries if the lock is busy.
|
|
189
|
+
persistKeeper(
|
|
190
|
+
{ keeperHeartbeatAt: currentTime },
|
|
191
|
+
{ timeoutMs: 0, probeLockOwner: false },
|
|
192
|
+
);
|
|
187
193
|
return true;
|
|
188
194
|
} catch (error) {
|
|
189
195
|
try {
|
|
@@ -455,18 +461,22 @@ export async function runBackgroundAgentKeeper(jobFile, options = {}) {
|
|
|
455
461
|
finishResolve = resolvePromise;
|
|
456
462
|
});
|
|
457
463
|
|
|
458
|
-
const persistKeeper = (patch) =>
|
|
459
|
-
mutateBackgroundAgentState(
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
464
|
+
const persistKeeper = (patch, options = {}) =>
|
|
465
|
+
mutateBackgroundAgentState(
|
|
466
|
+
job.id,
|
|
467
|
+
(current) => {
|
|
468
|
+
if (
|
|
469
|
+
!current ||
|
|
470
|
+
current.workerGeneration !== job.workerGeneration ||
|
|
471
|
+
current.keeperGeneration !== job.keeperGeneration ||
|
|
472
|
+
Number(current.keeperPid) !== process.pid
|
|
473
|
+
) {
|
|
474
|
+
return null;
|
|
475
|
+
}
|
|
476
|
+
return { ...current, ...patch };
|
|
477
|
+
},
|
|
478
|
+
options,
|
|
479
|
+
);
|
|
470
480
|
|
|
471
481
|
const finishForWorkerDisconnect = () => {
|
|
472
482
|
if (finishing) return false;
|
|
@@ -75,6 +75,11 @@ const TURN_BOOTSTRAP_MODULE_URL = new URL(
|
|
|
75
75
|
import.meta.url,
|
|
76
76
|
).href;
|
|
77
77
|
const TURN_BOOTSTRAP_IMPORT_ARGUMENT = `--import=${TURN_BOOTSTRAP_MODULE_URL}`;
|
|
78
|
+
// A periodic heartbeat is telemetry, not a turn-ownership transition. On a
|
|
79
|
+
// busy Windows runner it must never block the worker's IPC loop long enough to
|
|
80
|
+
// starve a keeper ARM/RETIRE reply; startup and terminal claims keep the
|
|
81
|
+
// supervisor's full strict-lock deadline.
|
|
82
|
+
const PERIODIC_HEARTBEAT_STATE_LOCK_TIMEOUT_MS = 0;
|
|
78
83
|
|
|
79
84
|
const jobFile = process.argv[2];
|
|
80
85
|
let job;
|
|
@@ -534,18 +539,22 @@ function mergeState(patch) {
|
|
|
534
539
|
})).state;
|
|
535
540
|
}
|
|
536
541
|
|
|
537
|
-
function writeHeartbeat() {
|
|
538
|
-
const mutation = claimBackgroundAgentHeartbeat(
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
542
|
+
function writeHeartbeat(options = {}) {
|
|
543
|
+
const mutation = claimBackgroundAgentHeartbeat(
|
|
544
|
+
job.id,
|
|
545
|
+
{
|
|
546
|
+
workerGeneration: job.workerGeneration,
|
|
547
|
+
pid: process.pid,
|
|
548
|
+
workerPid: process.pid,
|
|
549
|
+
...(child?.pid ? { agentPid: child.pid } : {}),
|
|
550
|
+
...(turnLaunchUncertainty || {}),
|
|
551
|
+
heartbeatAt: Date.now(),
|
|
552
|
+
// Re-assert the transport endpoint so a launcher write racing the
|
|
553
|
+
// worker's initial merge self-heals within one heartbeat.
|
|
554
|
+
...(transportState ? { transport: transportState } : {}),
|
|
555
|
+
},
|
|
556
|
+
options,
|
|
557
|
+
);
|
|
549
558
|
const applied =
|
|
550
559
|
mutation.applied &&
|
|
551
560
|
mutation.state?.status === "running" &&
|
|
@@ -1798,7 +1807,12 @@ async function main() {
|
|
|
1798
1807
|
}
|
|
1799
1808
|
heartbeat = setInterval(() => {
|
|
1800
1809
|
try {
|
|
1801
|
-
if (
|
|
1810
|
+
if (
|
|
1811
|
+
!writeHeartbeat({
|
|
1812
|
+
timeoutMs: PERIODIC_HEARTBEAT_STATE_LOCK_TIMEOUT_MS,
|
|
1813
|
+
probeLockOwner: false,
|
|
1814
|
+
})
|
|
1815
|
+
) {
|
|
1802
1816
|
if (turnLaunchSettlement) {
|
|
1803
1817
|
// The owned tree is already in explicit settlement. Keep the worker
|
|
1804
1818
|
// alive until confirmed termination evidence is durably recorded;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as m,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-OBhlHSMN.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"}),u=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),b=String(e.getMonth()+1).padStart(2,"0"),f=String(e.getDate()).padStart(2,"0"),g=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${b}-${f} ${g}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:u,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=v("a-tag");return m(),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?(m(),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 z=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-m2bzbN/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{z as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as l,J as C,U as i,c as a,K as o,o as D,r as k,a as L,b as O,P as S,Q as _,R as u,F as B,Z as q,V as I,S as H}from"./vendor-Bn1JzzAn.js";import{_ as U,u as N,d as y}from"./index-OBhlHSMN.js";import{R as W}from"./icons-DG5UD-6K.js";function V(p){return["ask","agent"].map(t=>{const s=p?.readiness?.[t],e=s?.state==="admitted",d=s?.scope==="deployment-admission"&&s.runtimeVerification==="not_checked"&&Array.isArray(s.requiredCommands)&&s.requiredCommands.includes(t)&&(e?s.ready===!0&&s.taskReady===null:["not_configured","disabled","invalid","command_not_allowed"].includes(s.state)&&s.ready===!1&&s.taskReady===!1);return{command:t,state:d?s.state:"unknown",summary:d?e?"部署准入通过":"部署准入被阻断":"未提供准入诊断",detail:d&&typeof s.detail=="string"?s.detail:"当前 CLI 未提供可识别的部署准入诊断,请更新 CLI。",remediation:d&&typeof s.remediation=="string"?s.remediation:""}})}function j(p,t){for(const s of Object.keys(p))delete p[s];Object.assign(p,{source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[],readiness:null},t||{})}const z={__name:"EvolutionSettings",setup(p,{expose:t}){t();const s=N(),e=k(!1),d=k(!1),w=k(!1),m=k(""),g=k(""),c=L({source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[]}),h=O(()=>e.value||d.value||w.value),x=O(()=>V(c));function b(r){j(c,r),m.value=c.descriptorPath||"",g.value=c.trustRootPath||""}async function v(r,n=3e4){return await s.waitConnected(8e3),(await s.sendRaw(r,n)).result}async function R(){e.value=!0;try{b(await v({type:"evolution.deployment.status"}))}catch(r){y.error("读取配置失败:"+r.message)}finally{e.value=!1}}async function E(){if(!m.value.trim()||!g.value.trim()){y.warning("请填写描述符和信任根公钥的绝对路径");return}d.value=!0;try{b(await v({type:"evolution.deployment.configure",descriptorPath:m.value.trim(),trustRootPath:g.value.trim()},6e4)),y.success("签名校验通过,配置已保存并启用;自动发布仍为 HOLD")}catch(r){y.error("配置失败:"+r.message)}finally{d.value=!1}}async function f(){w.value=!0;try{b(await v({type:"evolution.deployment.set-enabled",enabled:!c.profileEnabled})),y.success(c.profileEnabled?"已启用":"已停用")}catch(r){y.error("更新失败:"+r.message)}finally{w.value=!1}}D(R);const P={ws:s,loading:e,saving:d,toggling:w,descriptorPath:m,trustRootPath:g,status:c,busy:h,readinessRows:x,apply:b,request:v,loadStatus:R,save:E,toggle:f,computed:O,onMounted:D,reactive:L,ref:k,get ReloadOutlined(){return W},get message(){return y},get useWsStore(){return N},get deploymentReadinessRows(){return V},get replaceDeploymentStatus(){return j}};return Object.defineProperty(P,"__isScriptSetup",{enumerable:!1,value:!0}),P}},A={class:"page-head"},F={class:"mono"},J={class:"mono"},K={class:"admission-status","aria-live":"polite"},M=["data-admission-command"],Q={class:"mono"},T={key:0,class:"mono"};function Z(p,t,s,e,d,w){const m=l("a-button"),g=l("a-alert"),c=l("a-input"),h=l("a-form-item"),x=l("a-space"),b=l("a-form"),v=l("a-card"),R=l("a-col"),E=l("a-tag"),f=l("a-descriptions-item"),P=l("a-descriptions"),r=l("a-row");return S(),C("div",null,[i("div",A,[t[3]||(t[3]=i("div",null,[i("h2",{class:"page-title"},"Skill 自进化配置"),i("p",{class:"page-sub"},"统一配置受治理部署;CLI、IDE 插件与 cc ui 共享。")],-1)),a(m,{loading:e.loading,onClick:e.loadStatus},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[t[2]||(t[2]=_("刷新 ",-1))]),_:1},8,["loading"])]),a(g,{message:"不会开启自动发布",description:"此开关只启用经过签名的 Skill 自进化运行时。候选项进入 active 前仍需人工审核,自动发布始终保持 HOLD。",type:"warning","show-icon":"",class:"notice"}),a(r,{gutter:16},{default:o(()=>[a(R,{xs:24,xl:15},{default:o(()=>[a(v,{title:"签名部署",class:"panel-card"},{default:o(()=>[a(b,{layout:"vertical"},{default:o(()=>[a(h,{label:"签名部署描述符"},{extra:o(()=>[...t[4]||(t[4]=[_("Web 页面不能读取本机文件选择器,请填写运行 cc ui 的机器上的绝对路径。",-1)])]),default:o(()=>[a(c,{value:e.descriptorPath,"onUpdate:value":t[0]||(t[0]=n=>e.descriptorPath=n),disabled:e.busy,placeholder:"deployment descriptor JSON 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(h,{label:"Ed25519 信任根公钥"},{default:o(()=>[a(c,{value:e.trustRootPath,"onUpdate:value":t[1]||(t[1]=n=>e.trustRootPath=n),disabled:e.busy,placeholder:"信任根 public key 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(x,null,{default:o(()=>[a(m,{type:"primary",loading:e.saving,onClick:e.save},{default:o(()=>[...t[5]||(t[5]=[_("校验、保存并启用",-1)])]),_:1},8,["loading"]),a(m,{danger:e.status.profileEnabled,disabled:!e.status.descriptorPath,loading:e.toggling,onClick:e.toggle},{default:o(()=>[_(u(e.status.profileEnabled?"停用":"启用"),1)]),_:1},8,["danger","disabled","loading"])]),_:1})]),_:1})]),_:1})]),_:1}),a(R,{xs:24,xl:9},{default:o(()=>[a(v,{title:"治理状态",class:"panel-card status-card"},{default:o(()=>[a(P,{column:1,size:"small"},{default:o(()=>[a(f,{label:"生效状态"},{default:o(()=>[a(E,{color:e.status.effectiveEnabled?"green":"default"},{default:o(()=>[_(u(e.status.effectiveEnabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),a(f,{label:"生效来源"},{default:o(()=>[_(u(e.status.source||"none"),1)]),_:1}),a(f,{label:"签名校验"},{default:o(()=>[a(E,{color:e.status.verified?"green":"red"},{default:o(()=>[_(u(e.status.verified?"已通过":"未通过"),1)]),_:1},8,["color"])]),_:1}),a(f,{label:"自动发布"},{default:o(()=>[a(E,{color:"orange"},{default:o(()=>[...t[6]||(t[6]=[_("HOLD",-1)])]),_:1})]),_:1}),a(f,{label:"配置文件"},{default:o(()=>[i("span",F,u(e.status.profilePath||"—"),1)]),_:1}),a(f,{label:"允许命令"},{default:o(()=>[i("span",J,u((e.status.commands||[]).join(", ")||"—"),1)]),_:1})]),_:1}),i("section",K,[t[7]||(t[7]=i("h3",null,"模型命令部署准入",-1)),t[8]||(t[8]=i("p",null,"这里只检查部署准入,实际任务运行尚未验证。",-1)),(S(!0),C(B,null,q(e.readinessRows,n=>(S(),C("div",{key:n.command,"data-admission-command":n.command},[i("strong",null,u(n.command)+":"+u(n.summary),1),i("p",Q,u(n.detail),1),n.remediation?(S(),C("p",T,u(n.remediation),1)):I("v-if",!0)],8,M))),128))]),e.status.error?(S(),H(g,{key:0,message:e.status.error,type:"error","show-icon":"",class:"error"},null,8,["message"])):I("v-if",!0)]),_:1})]),_:1})]),_:1})])}const ee=U(z,[["render",Z],["__scopeId","data-v-5a42105e"],["__file","/tmp/cc-web-panel-m2bzbN/repo/packages/web-panel/src/views/EvolutionSettings.vue"]]);export{ee as default};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{I as f,P as w,S as L,K as a,J as V,c as n,V as x,w as F,b as P,a as J,r as u,U as z,Q as k,R as D,F as te,M as le,o as re,Z as se}from"./vendor-Bn1JzzAn.js";import{u as Z,_ as ae,d as C}from"./index-OBhlHSMN.js";import{u as ie}from"./useFs-CVq5HySy.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{ax as me,ay as ue,az as pe,aA as ge,a5 as ve,R as we,at as _e}from"./icons-DG5UD-6K.js";function ye(m){if(m&&m.ok===!1)throw new Error(m.error||"knowledge handler failed");return m?.result??m}function ne(m){return String(m).replace(/(["\\])/g,"\\$1")}function G(){const m=Z();async function t({title:b,content:e,tags:h=[],type:g="note"}={}){if(typeof b!="string"||!b.trim())throw new Error("title is required");if(typeof e!="string")throw new Error("content is required");const r=Array.isArray(h)?h.filter(Boolean):[];if(de().isEmbedded){const i=await m.sendRaw({type:"knowledge.add-item",item:{title:b.trim(),content:e,tags:r,type:g}},2e4),_=ye(i);if(_?.success===!1)throw new Error(_.error||"knowledge.add-item failed");return _?.item??null}let s=`note add "${ne(b.trim())}" -c "${ne(e)}"`;r.length&&(s+=` -t "${ne(r.join(","))}"`);const{output:d}=await m.execute(s,15e3);if(d&&/^[\s\S]*✖|error/i.test(d))throw new Error(d.slice(0,200));return{title:b.trim(),content:e,tags:r,type:g}}return{addItem:t}}const he={__name:"ClipboardImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=G(),r=P({get:()=>e.modelValue,set:p=>h("update:modelValue",p)}),s=u(!1),d=u(""),i=J({title:"",content:"",tagsRaw:""}),_=()=>`剪贴板导入 - ${new Date().toLocaleString()}`;function S(){i.title=_(),i.content="",i.tagsRaw="",d.value=""}async function v(){if(d.value="",!navigator.clipboard?.readText){d.value="当前环境不支持剪贴板读取 API";return}try{const p=await navigator.clipboard.readText();i.content=p||"",p||(d.value="剪贴板为空")}catch(p){d.value="读取剪贴板失败:"+(p?.message||String(p))}}F(()=>e.modelValue,async p=>{p&&(S(),await v())},{immediate:!0});async function O(){if(!i.content.trim()){C.warning("内容为空,无法保存");return}s.value=!0;try{const p=i.tagsRaw.split(/[,,]/).map(c=>c.trim()).filter(Boolean),o=await g.addItem({title:i.title.trim()||_(),content:i.content,tags:p,type:"note"});C.success("已保存到知识库"),h("saved",o),r.value=!1}catch(p){C.error("保存失败:"+(p?.message||String(p)))}finally{s.value=!1}}function U(){r.value=!1}const E={props:e,emit:h,knowledge:g,open:r,loading:s,readError:d,formState:i,defaultTitle:_,resetForm:S,readClipboard:v,handleSave:O,handleCancel:U,ref:u,reactive:J,computed:P,watch:F,get message(){return C},get useKnowledge(){return G}};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}},be={key:0,style:{"margin-bottom":"16px"}};function Se(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-input"),d=f("a-form-item"),i=f("a-textarea"),_=f("a-form"),S=f("a-modal");return w(),L(S,{open:e.open,"onUpdate:open":t[3]||(t[3]=v=>e.open=v),title:"剪贴板导入",width:640,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.formState.content.trim()},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.readError?(w(),V("div",be,[n(r,{type:"warning","show-icon":"",message:e.readError,description:"请确认浏览器/系统已授予剪贴板读取权限,或手动粘贴到下方输入框。"},null,8,["message"])])):x("v-if",!0),n(_,{layout:"vertical",model:e.formState},{default:a(()=>[n(d,{label:"标题"},{default:a(()=>[n(s,{value:e.formState.title,"onUpdate:value":t[0]||(t[0]=v=>e.formState.title=v),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),n(d,{label:"内容"},{default:a(()=>[n(i,{value:e.formState.content,"onUpdate:value":t[1]||(t[1]=v=>e.formState.content=v),placeholder:"粘贴或编辑要保存的内容…","auto-size":{minRows:10,maxRows:20},"show-count":""},null,8,["value"])]),_:1}),n(d,{label:"标签(逗号分隔,可选)"},{default:a(()=>[n(s,{value:e.formState.tagsRaw,"onUpdate:value":t[2]||(t[2]=v=>e.formState.tagsRaw=v),placeholder:"例如:素材, 链接","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["open","ok-text","ok-button-props"])}const xe=ae(he,[["render",Se],["__file","/tmp/cc-web-panel-m2bzbN/repo/packages/web-panel/src/components/ClipboardImportDialog.vue"]]);function oe(m){if(m&&m.ok===!1)throw new Error(m.error||"screenshot handler failed");return m?.result??m}function ce(){const m=Z();if(!de().isEmbedded)return{unsupported:!0,capture:async()=>{throw new Error("截图需要桌面壳;浏览器模式不支持")},ocr:async()=>{throw new Error("OCR 仅在桌面壳可用")},cleanup:async()=>{}};async function b({screenIndex:g}={}){const r=await m.sendRaw({type:"screenshot.capture",screenIndex:g},3e4),s=oe(r);if(s?.success===!1)throw new Error(s.error||"screenshot.capture failed");return s}async function e(g,r,s){if(!g)throw new Error("path is required");const d=await m.sendRaw({type:"screenshot.ocr",path:g,lang:r,engine:s},9e4),i=oe(d);if(i?.success===!1)throw new Error(i.error||"screenshot.ocr failed");return i}async function h(g){if(g)try{const r=await m.sendRaw({type:"screenshot.cleanup",path:g},1e4),s=oe(r);s?.success===!1&&console.warn("[useScreenshot] cleanup failed:",s.error)}catch(r){console.warn("[useScreenshot] cleanup error:",r?.message||r)}}return{unsupported:!1,capture:b,ocr:e,cleanup:h}}const ke={__name:"ScreenshotImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=ce(),r=G(),s=P({get:()=>e.modelValue,set:y=>h("update:modelValue",y)}),d=u(!1),i=u(!1),_=u(!1),S=u(""),v=u(null),O=u("auto"),U=u(null),E=u(""),p=u(""),o=u(null),c=J({title:"",content:"",tagsRaw:""}),R=P(()=>!!o.value&&(c.content.trim()||"").length>0),B=()=>`截图识别 - ${new Date().toLocaleString()}`;function q(){c.title=B(),c.content="",c.tagsRaw="",S.value="",v.value=null,U.value=null,E.value="",p.value="",o.value=null}async function M(){o.value?.path&&await g.cleanup(o.value.path)}async function j(){if(g.unsupported)return S.value="浏览器模式不支持截图,请用桌面壳",null;i.value=!0;try{return await g.capture({})}catch(y){return S.value=y?.message||String(y),null}finally{i.value=!1}}async function T(y){if(y){_.value=!0;try{const l=await g.ocr(y,void 0,O.value);c.content=l.text||"",v.value=typeof l.confidence=="number"?l.confidence:null,U.value=l.engine||null,E.value=l.model||"",p.value=l.fallbackReason||"",l.text||C.info("OCR 未识别到文本,可手动输入")}catch(l){C.warning("OCR 失败: "+(l?.message||String(l)))}finally{_.value=!1}}}async function Q(){p.value=""}async function H(){await M(),q();const y=await j();y&&(o.value=y,await T(y.path))}async function W(){o.value?.path&&await T(o.value.path)}F(()=>e.modelValue,async y=>{if(y){q();const l=await j();l&&(o.value=l,await T(l.path))}else await M(),o.value=null},{immediate:!0});async function X(){if(!R.value){C.warning("识别文本为空,无法保存");return}d.value=!0;try{const y=c.tagsRaw.split(/[,,]/).map(I=>I.trim()).filter(Boolean),l=await r.addItem({title:c.title.trim()||B(),content:c.content,tags:y,type:"note"});C.success("已保存到知识库"),h("saved",l),await M(),s.value=!1}catch(y){C.error("保存失败: "+(y?.message||String(y)))}finally{d.value=!1}}async function Y(){await M(),s.value=!1}const K={props:e,emit:h,screenshot:g,knowledge:r,open:s,loading:d,capturing:i,ocrLoading:_,captureError:S,ocrConfidence:v,ocrEngine:O,engineUsed:U,ocrModel:E,ocrFallbackReason:p,shot:o,formState:c,canSave:R,defaultTitle:B,resetState:q,cleanupShot:M,runCapture:j,runOcr:T,handleEngineChange:Q,handleRecapture:H,handleRerunOcr:W,handleSave:X,handleCancel:Y,ref:u,reactive:J,computed:P,watch:F,get message(){return C},get CameraOutlined(){return ue},get ScanOutlined(){return me},get useScreenshot(){return ce},get useKnowledge(){return G}};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}},Ce={key:0,style:{"margin-bottom":"16px"}},Oe={key:1,class:"ss-error"},Ne={key:2},Re={class:"ss-actions"},Ee={key:0,class:"ss-preview"},Ie=["src"];function Ve(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-button"),d=f("a-select-option"),i=f("a-select"),_=f("a-tag"),S=f("a-tooltip"),v=f("a-input"),O=f("a-form-item"),U=f("a-spin"),E=f("a-textarea"),p=f("a-form"),o=f("a-modal");return w(),L(o,{open:e.open,"onUpdate:open":t[4]||(t[4]=c=>e.open=c),title:"截图识别",width:780,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.canSave},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.screenshot.unsupported?(w(),V("div",Ce,[n(r,{type:"warning","show-icon":"",message:"浏览器模式不支持截图",description:"screenshot-desktop 需要 OS 原生 API,请用桌面壳 (cc desktop) 打开本面板。"})])):e.captureError?(w(),V("div",Oe,[n(r,{type:"error","show-icon":"",message:e.captureError},null,8,["message"])])):(w(),V("div",Ne,[z("div",Re,[n(s,{size:"small",loading:e.capturing,onClick:e.handleRecapture},{icon:a(()=>[n(e.CameraOutlined)]),default:a(()=>[t[5]||(t[5]=k(" 重新截图 ",-1))]),_:1},8,["loading"]),n(s,{size:"small",loading:e.ocrLoading,disabled:!e.shot||e.ocrLoading,onClick:e.handleRerunOcr},{icon:a(()=>[n(e.ScanOutlined)]),default:a(()=>[t[6]||(t[6]=k(" 重跑 OCR ",-1))]),_:1},8,["loading","disabled"]),n(i,{value:e.ocrEngine,"onUpdate:value":t[0]||(t[0]=c=>e.ocrEngine=c),size:"small",style:{width:"140px"},disabled:e.ocrLoading,onChange:e.handleEngineChange},{default:a(()=>[n(d,{value:"auto"},{default:a(()=>[...t[7]||(t[7]=[k("自动 (推荐)",-1)])]),_:1}),n(d,{value:"llm"},{default:a(()=>[...t[8]||(t[8]=[k("视觉 LLM",-1)])]),_:1}),n(d,{value:"tesseract"},{default:a(()=>[...t[9]||(t[9]=[k("本地 Tesseract",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.engineUsed==="llm"?(w(),L(_,{key:0,color:"blue"},{default:a(()=>[k(D(e.ocrModel||"豆包视觉"),1)]),_:1})):e.engineUsed==="tesseract"&&e.ocrConfidence!==null?(w(),L(_,{key:1},{default:a(()=>[k(" Tesseract · "+D(e.ocrConfidence)+"% ",1)]),_:1})):x("v-if",!0),e.ocrFallbackReason?(w(),L(S,{key:2,title:`LLM 识别失败已回落 Tesseract: ${e.ocrFallbackReason}`},{default:a(()=>[n(_,{color:"orange"},{default:a(()=>[...t[10]||(t[10]=[k("回落 Tesseract",-1)])]),_:1})]),_:1},8,["title"])):x("v-if",!0)]),e.shot?.dataUrl?(w(),V("div",Ee,[z("img",{src:e.shot.dataUrl,alt:"screenshot"},null,8,Ie)])):x("v-if",!0),n(p,{layout:"vertical",model:e.formState},{default:a(()=>[n(O,{label:"标题"},{default:a(()=>[n(v,{value:e.formState.title,"onUpdate:value":t[1]||(t[1]=c=>e.formState.title=c),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),n(O,null,{label:a(()=>[t[11]||(t[11]=z("span",null,"识别文本",-1)),e.ocrLoading?(w(),L(U,{key:0,size:"small",style:{"margin-left":"8px"}})):x("v-if",!0)]),default:a(()=>[n(E,{value:e.formState.content,"onUpdate:value":t[2]||(t[2]=c=>e.formState.content=c),placeholder:e.ocrLoading?"正在识别…":"识别结果,可手动编辑","auto-size":{minRows:8,maxRows:16},"show-count":""},null,8,["value","placeholder"])]),_:1}),n(O,{label:"标签 (逗号分隔, 可选)"},{default:a(()=>[n(v,{value:e.formState.tagsRaw,"onUpdate:value":t[3]||(t[3]=c=>e.formState.tagsRaw=c),placeholder:"例如: 截图, 参考","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]))]),_:1},8,["open","ok-text","ok-button-props"])}const Ue=ae(ke,[["render",Ve],["__scopeId","data-v-1d6234fd"],["__file","/tmp/cc-web-panel-m2bzbN/repo/packages/web-panel/src/components/ScreenshotImportDialog.vue"]]),ze={__name:"Notes",setup(m,{expose:t}){t();const b=Z(),e=ie(),h=le(),g=u(!1),r=u(!1),s=u(!1),d=u(!1),i=u(""),_=u([]),S=u([]),v=u(!1),O=u(""),U=u(!1),E=u(!1),p=u(!1),o=u(!1),c=u(null),R=u({title:"",content:"",tags:""});async function B(){C.success("剪贴板内容已保存到知识库"),await T()}async function q(){C.success("截图内容已保存到知识库"),await T()}const M=P(()=>v.value?S.value:_.value),j=[{title:"标题",dataIndex:"title",key:"title",width:"30%"},{title:"预览",key:"content",ellipsis:!0},{title:"标签",key:"tags",width:"20%"},{title:"操作",key:"actions",width:"80px"}];async function T(){r.value=!0,i.value="";try{const{output:l}=await b.execute("note list",2e4);_.value=Q(l)}catch(l){i.value=`加载失败: ${l.message}`}finally{r.value=!1}}function Q(l){const I=[],$=l.split(`
|
|
2
|
-
`);for(const ee of $){const N=ee.trim();if(!N||N.startsWith("─")||N.startsWith("Note")||N.match(/^\d+ note/i))continue;const A=N.match(/^(\d+)\.\s+(.+?)(?:\s+\[([^\]]+)\])?\s*(?:-\s*(.*))?$/);A?I.push({key:A[1],id:A[1],title:A[2].trim(),tags:A[3]?A[3].split(",").map(fe=>fe.trim()):[],preview:(A[4]||"").trim().slice(0,100),content:""}):N.length>2&&!N.startsWith("✖")&&!N.startsWith("[")&&I.push({key:I.length,id:String(I.length),title:N,tags:[],preview:"",content:""})}return I}async function H(){if(!O.value.trim()){W();return}s.value=!0,v.value=!0;try{const{output:l}=await b.execute(`note search "${O.value}"`,15e3);S.value=Q(l)}catch{S.value=[]}finally{s.value=!1}}function W(){O.value="",v.value=!1,S.value=[]}async function X(){if(!R.value.title.trim()){C.warning("请输入标题");return}d.value=!0;try{let l=`note add "${R.value.title}"`;R.value.content&&(l+=` -c "${R.value.content.replace(/"/g,'\\"')}"`),R.value.tags&&(l+=` -t "${R.value.tags}"`);const{output:I}=await b.execute(l,15e3);I.includes("✖")||I.toLowerCase().includes("error")?C.error("添加失败: "+I.slice(0,100)):(C.success("笔记已添加"),U.value=!1,R.value={title:"",content:"",tags:""},await T())}catch(l){C.error("添加失败: "+l.message)}finally{d.value=!1}}function Y(l){c.value=l,E.value=!0}async function K(){if(!c.value)return;const l=c.value,I=l.tags?.length?`tags: [${l.tags.join(", ")}]
|
|
3
|
-
|
|
4
|
-
`:"",$=`# ${l.title}
|
|
5
|
-
|
|
6
|
-
${I}${l.content||l.preview||""}
|
|
7
|
-
`,ee=(l.title||"note").replace(/[\\/:*?"<>|\x00-\x1f]+/g,"_").slice(0,80)||"note";g.value=!0;try{const N=await e.saveText($,{defaultPath:`${ee}.md`,filters:[{name:"Markdown",extensions:["md"]}]});if(N.canceled)return;C.success(N.path?`已导出到 ${N.path}`:"已导出")}catch(N){C.error(`导出失败: ${N.message||N}`)}finally{g.value=!1}}re(()=>{T(),h.query.clipboardImport&&(p.value=!0),h.query.screenshotOcr&&(o.value=!0)}),F(()=>h.query.clipboardImport,l=>{l&&(p.value=!0)}),F(()=>h.query.screenshotOcr,l=>{l&&(o.value=!0)});const y={ws:b,fs:e,route:h,exporting:g,loading:r,searching:s,adding:d,error:i,notes:_,searchResults:S,isSearchMode:v,searchQuery:O,showAdd:U,showView:E,showClipboardImport:p,showScreenshotImport:o,viewingNote:c,newNote:R,onClipboardSaved:B,onScreenshotSaved:q,displayNotes:M,columns:j,loadNotes:T,parseNoteList:Q,doSearch:H,clearSearch:W,addNote:X,viewNote:Y,exportNote:K,ref:u,computed:P,onMounted:re,watch:F,get useRoute(){return le},get PlusOutlined(){return _e},get ReloadOutlined(){return we},get FileTextOutlined(){return ve},get DownloadOutlined(){return ge},get SnippetsOutlined(){return pe},get CameraOutlined(){return ue},get message(){return C},get useWsStore(){return Z},get useFs(){return ie},ClipboardImportDialog:xe,ScreenshotImportDialog:Ue};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}},Le={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Te={class:"page-sub"},De={style:{"margin-bottom":"16px",display:"flex",gap:"10px"}},Me={key:0,style:{"text-align":"center",padding:"60px"}},Ae={key:0,style:{color:"#e0e0e0","font-weight":"500"}},Fe={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Be={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},qe={style:{"margin-bottom":"10px"}},je={style:{"white-space":"pre-wrap",color:"#ccc","font-family":"inherit","line-height":"1.7",background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}};function Qe(m,t,b,e,h,g){const r=f("a-button"),s=f("a-space"),d=f("a-input-search"),i=f("a-tag"),_=f("a-spin"),S=f("a-table"),v=f("a-input"),O=f("a-form-item"),U=f("a-textarea"),E=f("a-form"),p=f("a-modal");return w(),V("div",null,[z("div",Le,[z("div",null,[t[12]||(t[12]=z("h2",{class:"page-title"},"笔记管理",-1)),z("p",Te,"个人知识库 · "+D(e.notes.length)+" 条笔记",1)]),n(s,null,{default:a(()=>[n(r,{onClick:t[0]||(t[0]=o=>e.showAdd=!0),type:"primary"},{icon:a(()=>[n(e.PlusOutlined)]),default:a(()=>[t[13]||(t[13]=k(" 新建笔记 ",-1))]),_:1}),n(r,{onClick:t[1]||(t[1]=o=>e.showClipboardImport=!0)},{icon:a(()=>[n(e.SnippetsOutlined)]),default:a(()=>[t[14]||(t[14]=k(" 剪贴板导入 ",-1))]),_:1}),n(r,{onClick:t[2]||(t[2]=o=>e.showScreenshotImport=!0)},{icon:a(()=>[n(e.CameraOutlined)]),default:a(()=>[t[15]||(t[15]=k(" 截图识别 ",-1))]),_:1}),n(r,{ghost:"",loading:e.loading,onClick:e.loadNotes},{icon:a(()=>[n(e.ReloadOutlined)]),default:a(()=>[t[16]||(t[16]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),x(" Search "),z("div",De,[n(d,{value:e.searchQuery,"onUpdate:value":t[3]||(t[3]=o=>e.searchQuery=o),placeholder:"搜索笔记...","allow-clear":"",style:{"max-width":"400px"},loading:e.searching,onSearch:e.doSearch,onClear:e.clearSearch},null,8,["value","loading"]),e.isSearchMode?(w(),L(i,{key:0,color:"blue",closable:"",onClose:e.clearSearch},{default:a(()=>[k(" 搜索: "+D(e.searchQuery),1)]),_:1})):x("v-if",!0)]),x(" Loading "),e.loading?(w(),V("div",Me,[n(_,{size:"large"})])):(w(),V(te,{key:1},[x(" Notes Table "),n(S,{columns:e.columns,"data-source":e.displayNotes,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"note-row"},{bodyCell:a(({column:o,record:c})=>[o.key==="title"?(w(),V("span",Ae,D(c.title),1)):x("v-if",!0),o.key==="tags"?(w(!0),V(te,{key:1},se(c.tags,R=>(w(),L(i,{key:R,color:"blue",style:{"font-size":"10px",margin:"1px"}},{default:a(()=>[k(D(R),1)]),_:2},1024))),128)):x("v-if",!0),o.key==="content"?(w(),V("span",Fe,D(c.preview),1)):x("v-if",!0),o.key==="actions"?(w(),L(r,{key:3,size:"small",type:"link",onClick:R=>e.viewNote(c)},{default:a(()=>[...t[17]||(t[17]=[k("查看",-1)])]),_:1},8,["onClick"])):x("v-if",!0)]),emptyText:a(()=>[z("div",Pe,[n(e.FileTextOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),k(" "+D(e.error||'暂无笔记,点击"新建笔记"添加'),1)])]),_:1},8,["data-source","pagination"])],2112)),x(" Add Note Modal "),n(p,{open:e.showAdd,"onUpdate:open":t[7]||(t[7]=o=>e.showAdd=o),title:"新建笔记","confirm-loading":e.adding,onOk:e.addNote},{default:a(()=>[n(E,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[n(O,{label:"标题",required:""},{default:a(()=>[n(v,{value:e.newNote.title,"onUpdate:value":t[4]||(t[4]=o=>e.newNote.title=o),placeholder:"笔记标题"},null,8,["value"])]),_:1}),n(O,{label:"内容"},{default:a(()=>[n(U,{value:e.newNote.content,"onUpdate:value":t[5]||(t[5]=o=>e.newNote.content=o),rows:5,placeholder:"笔记内容..."},null,8,["value"])]),_:1}),n(O,{label:"标签"},{default:a(()=>[n(v,{value:e.newNote.tags,"onUpdate:value":t[6]||(t[6]=o=>e.newNote.tags=o),placeholder:"用逗号分隔,如: work,ideas"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),x(" Clipboard import modal "),n(e.ClipboardImportDialog,{modelValue:e.showClipboardImport,"onUpdate:modelValue":t[8]||(t[8]=o=>e.showClipboardImport=o),onSaved:e.onClipboardSaved},null,8,["modelValue"]),x(" Screenshot OCR modal "),n(e.ScreenshotImportDialog,{modelValue:e.showScreenshotImport,"onUpdate:modelValue":t[9]||(t[9]=o=>e.showScreenshotImport=o),onSaved:e.onScreenshotSaved},null,8,["modelValue"]),x(" View Note Modal "),n(p,{open:e.showView,"onUpdate:open":t[11]||(t[11]=o=>e.showView=o),title:e.viewingNote?.title,width:"700px"},{footer:a(()=>[n(r,{onClick:t[10]||(t[10]=o=>e.showView=!1)},{default:a(()=>[...t[18]||(t[18]=[k("关闭",-1)])]),_:1}),e.viewingNote?(w(),L(r,{key:0,type:"primary",loading:e.exporting,onClick:e.exportNote},{icon:a(()=>[n(e.DownloadOutlined)]),default:a(()=>[t[19]||(t[19]=k(" 导出 .md ",-1))]),_:1},8,["loading"])):x("v-if",!0)]),default:a(()=>[e.viewingNote?(w(),V("div",Be,[z("div",qe,[(w(!0),V(te,null,se(e.viewingNote.tags,o=>(w(),L(i,{key:o,color:"blue"},{default:a(()=>[k(D(o),1)]),_:2},1024))),128))]),z("pre",je,D(e.viewingNote.content||e.viewingNote.preview),1)])):x("v-if",!0)]),_:1},8,["open","title"])])}const He=ae(ze,[["render",Qe],["__scopeId","data-v-7992c921"],["__file","/tmp/cc-web-panel-m2bzbN/repo/packages/web-panel/src/views/Notes.vue"]]);export{He as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as a}from"./vendor-Bn1JzzAn.js";import{_ as N}from"./index-OBhlHSMN.js";import"./icons-DG5UD-6K.js";const S={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const o=p,e=a(()=>o.event.content||{}),d=a(()=>o.event.extra||{}),m=a(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=a(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=a(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=a(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=a(()=>e.value.status||e.value.state),b=a(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=a(()=>{if(!o.event.occurredAt)return"";const t=new Date(o.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:o,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},k={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={class:"val"},B={class:"row"},D={class:"val"},I={class:"row amount-row"},j={class:"val amount"},A={key:0,class:"row"},F={class:"val mono"},M={key:1,class:"row"};function P(p,r,o,e,d,m){const c=w("a-tag");return l(),u("div",k,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(o.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(o.event.subtype),1)]),_:1})]),s("div",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,n(e.merchantText),1)]),s("div",B,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",D,n(e.itemText),1)]),s("div",I,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",j,n(e.amountText),1)]),e.orderNo?(l(),u("div",A,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",F,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",M,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const J=N(S,[["render",P],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-m2bzbN/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{J as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-OBhlHSMN.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-Bva3l9Lc.js";import{a0 as t}from"./index-OBhlHSMN.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-BGEdwej6.js";import"./useFlexGapSupport-BpZFKsJW.js";import"./styleChecker-CC5k_791.js";import"./index-BIDCNwy6.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-CPRq7n6y.js";import{a0 as t}from"./index-OBhlHSMN.js";import"./vendor-Bn1JzzAn.js";import"./index-BIDCNwy6.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|