chainlesschain 0.166.9 → 0.166.13
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 +33 -0
- package/bin/chainlesschain.js +5 -0
- package/package.json +5 -2
- package/src/assets/web-panel/assets/{AIOps-DJvpifGx.js → AIOps-BN25cNOD.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-D2UhuF_A.js → ActionButton-Da9IP-m5.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C9ho9obu.js → Analytics-D7hkEvQm.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BvRCpFK3.js → AppLayout-CCV4Xnbc.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-jxrySvpk.js → Artifacts-CVSnVJeA.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-ovEw0ZYl.js → Audit-CuYdw5Ag.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-D7H5z6zS.js → BackgroundAgents-DZCnK-Tf.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BuXob8za.js → Backup-cV9FdpTy.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CtnszuQ2.js → BaseInput-BRnv6YSp.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-B_mYE8fJ.js → Chat-Bw5w87P4.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-C0GjtUAw.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-ierdtcJD.js → Checkbox-DaoTqcdt.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-3VKPJD_B.js → Codegen-B4dYcEIi.js} +1 -1
- package/src/assets/web-panel/assets/{Col-1EdMyf5P.js → Col-mAhuOeuD.js} +1 -1
- package/src/assets/web-panel/assets/{Community-D6H7UA8K.js → Community-BK6KEdBk.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BBAZvYIm.js → Compact-CCglmNu5.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CgsTrAoj.js → Compliance-Cm8S4of7.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-tnZgLoTE.js → Cowork-Dhs1QLMe.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-CPpZw2Nh.js → Cron-CLlhmXWk.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BymBcp5z.js → Crosschain-BnHVbaNs.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DKPxS_K1.js → DID-UzQP9-0O.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DvJhEmH9.js → Dashboard-CBdlPClz.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-b8iQyQIZ.js → Dropdown-axIRPdq1.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer--0-A-zKb.js → EmailListRenderer-DUalW5rx.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-C12iDN06.js → FamilyGuardDashboard-Bl4W9luY.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BRhaE2Z8.js → Federation-C1yP-uEu.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-C4dnq7yf.js → FormItemContext-Xh6Ig5q8.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CGAdbR5n.js → GenericCardRenderer-C2cz3bt2.js} +1 -1
- package/src/assets/web-panel/assets/{Git-4eA2fYzL.js → Git-C_z63ixg.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BJuY9Y-9.js → Governance-BYqB33_3.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DZ5Dy4up.js → Inference-CEULuArm.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BMTjRs4A.js → KnowledgeGraph-fgMsu-0H.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BKEeQEfJ.js → Logs-DO9Hdcec.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-BkrK04xW.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Dhho4fEg.js → Marketplace-B8zyLiFe.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BW6xxSlU.js → McpTools-BLAN2mWW.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-mPqlpSkq.js → Memory-CrQcFM7u.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Cb9N_DQI.js → MobileBridge-DVnyiiU-.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BNs8tah_.js → MobileProjects-qjCME5OD.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CaxBt8tn.js → Mtc-4JE3C3It.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-DRPQbp3t.js → MtcAudit-CjBuak9I.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CRm-d8bK.js → Multisig-BtPcYQcC.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BCCk3LPs.js → NLProgramming-Cx653_Ba.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Cv8SN8gN.js → Notes-CkuD3YzS.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-CggIvTh5.js → NotificationSettings-BgNgU7HH.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BW3_bV12.js → OrderTableRenderer-BTC8W0a-.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BuRE-VCO.js → Organization-Dmd4Hjxz.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DBrm1gju.js → Overflow-C_5DA-G0.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CWVnDYgS.js → P2P-uwslV4XC.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-8RKUIpte.js → PdhVaultBrowser-CuNgwVnX.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-tDUAxogW.js → Permissions-CJayVX9H.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Dv2-CFis.js → PersonalDataHub-Cb05H5go.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-DM6kvFni.js → Pipeline-BZlGKapZ.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DzK-yL0d.js → Privacy-BIzZWYzd.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-B5UrNpkj.js → ProjectInit-vEYYyQXQ.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CxJD43oW.js → ProjectSettings-MZqTy5CC.js} +2 -2
- package/src/assets/web-panel/assets/Projects-CRARUOl8.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CYl4jRYK.js → Providers-80VAK8PX.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DeH2T0fH.js → QrScannerModal-CzRSoIwK.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Bw9k_kTk.js → QuickAsk-BpwQ2n4C.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Bl_jGwoi.js → Recommend-BC03TZ79.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-d6u01Kq0.js → RemoteSession-DE59-jaa.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Ds_Dfr-k.js → Reputation-DOHmeWyA.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BpQUQTNj.js → Row-hc5RZl1D.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BatpZBGt.js → RssFeed-Cv5uMP7E.js} +3 -3
- package/src/assets/web-panel/assets/{Search-D7hOObzi.js → Search-qohu7Ug0.js} +1 -1
- package/src/assets/web-panel/assets/{Security-dXQ4FKNt.js → Security-drCPFWV5.js} +4 -4
- package/src/assets/web-panel/assets/{Services-D8wInGPa.js → Services-BAEgUeRy.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DXQCoYpM.js → Skeleton-CkJkKBlo.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-D3oLRIVn.js → Skills-bMuKEpez.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BmP4-LnJ.js → Sla-DxWQVHRC.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DLj-xzro.js → SpeechSettings-BpS8idmV.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-8KKaaRMr.js → SyncSettings-BPBLlW5v.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-GyK42I7C.js → Tasks-C4SLEeUh.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-n1y_8UBG.js → Templates-r-wfU39U.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-B39nBph8.js → Tenant-C7vjRmLN.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DCQoOKXe.js → Terminal-DdzeFCV2.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-BkhbDfXk.js → TimelineRenderer-CYyWN2KD.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BeHIIU8D.js → Tokens-D8A9osUg.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BHvWXVOb.js → Trigger-DBvrNlyS.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-y2WaOSto.js → Trust-DBVAGc7o.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DBFeJBzt.js → UkeySign-C1vQUCRJ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BEOWitC-.js → VideoEditing-BKs4dah4.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BITedTe6.js → Wallet-ByIuj3lD.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DMwlJVin.js → WebAuthn-DYlAFCm9.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-CKfGFEu1.js → WorkflowEditor-Dwyadd0c.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DR6gnBGF.js → chat-Bm2f3s08.js} +1 -1
- package/src/assets/web-panel/assets/{colors-C_Hw5NCn.js → colors-C8ORSh7V.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B8IPwsEu.js → compact-item-1iVlnsM-.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D-u4JVnJ.js → createContext-CmqNyUSL.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B69RCDDH.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CZubdS4D.js → hasIn-rUMaX3Ul.js} +1 -1
- package/src/assets/web-panel/assets/index-9biMQ-tw.js +1 -0
- package/src/assets/web-panel/assets/{index-C25rOz7O.js → index-B53c3diB.js} +1 -1
- package/src/assets/web-panel/assets/{index-CfniPP5p.js → index-B59OWAs7.js} +1 -1
- package/src/assets/web-panel/assets/{index-11ASqx-A.js → index-B8BrB0Ls.js} +1 -1
- package/src/assets/web-panel/assets/{index-auyNYjLo.js → index-BC32_0xT.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ctje8Vl3.js → index-BC8Wb6cy.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cg2bCeol.js → index-BCOhTILd.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1w96gg9.js → index-BFniLMn9.js} +1 -1
- package/src/assets/web-panel/assets/{index-k1Xa5iw1.js → index-BIvM-uAX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuOU5apg.js → index-BK-RY0-7.js} +1 -1
- package/src/assets/web-panel/assets/{index-D47jt8ET.js → index-BQL9r73Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2VmtNaQ.js → index-BVtnizyC.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bizm87cX.js → index-Bf1PlIHp.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dt-w3xQ7.js → index-Bgw4Y2rU.js} +1 -1
- package/src/assets/web-panel/assets/{index-ffe7bvqP.js → index-BgwLNxmr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cl5RpreD.js → index-C-J5-pGH.js} +1 -1
- package/src/assets/web-panel/assets/{index-idZKyADQ.js → index-C-ZIHi42.js} +1 -1
- package/src/assets/web-panel/assets/{index-LvjAKDSl.js → index-C3B1S-mW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmRcgiYT.js → index-C5RfRciU.js} +1 -1
- package/src/assets/web-panel/assets/{index-rYBHSDcJ.js → index-CCEyz58d.js} +1 -1
- package/src/assets/web-panel/assets/index-COie87kl.js +1 -0
- package/src/assets/web-panel/assets/{index-DcFjRT-K.js → index-CTfEmKK0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjRrqooR.js → index-CfiHyVyl.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpjHpRoq.js → index-CkFvuAex.js} +3 -3
- package/src/assets/web-panel/assets/{index-BzoFanEQ.js → index-D98FXb0w.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cbm8F0M2.js → index-DDHk911Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXS6wYJZ.js → index-DJxtPFOh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DY6MHo9D.js → index-DVJ1uKf4.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiXkhOkY.js → index-Dcck8QfW.js} +1 -1
- package/src/assets/web-panel/assets/{index-mYZJxGH6.js → index-DgUE51Pz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqmLw8cs.js → index-Dsve5Gkv.js} +1 -1
- package/src/assets/web-panel/assets/{index-xoNssgz_.js → index-DvedhJeM.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfnzrUxU.js → index-DwMdWKiF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bi21Etg4.js → index-OcbzdRpT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJ6pG79m.js → index-fPK6GFEg.js} +1 -1
- package/src/assets/web-panel/assets/{index-_nL79NT8.js → index-geQinnns.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTosx2Wu.js → index-pHWA7bmM.js} +1 -1
- package/src/assets/web-panel/assets/{index-cVqbas5C.js → index-reUHhuz8.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bv2132PO.js → index-tqTx5wXo.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-lcU_dT2r.js → initDefaultProps-CuA-cpkL.js} +1 -1
- package/src/assets/web-panel/assets/{motion-Dc7UNXZ1.js → motion-CimmE_9b.js} +1 -1
- package/src/assets/web-panel/assets/{move-Cll8ZXaL.js → move-DlGlrltz.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CAb_yLIM.js → mtc-parser-CK6BJQ07.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DurYMyTe.js → omit-BKjBfZfB.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BITQyOlw.js → pickAttrs-B2chVYw9.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Dg1rH91i.js → placementArrow-BW8aLJJ3.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D_EWIeac.js → responsiveObserve-dXlPl66S.js} +1 -1
- package/src/assets/web-panel/assets/{slide-lK4d3zsh.js → slide-hSa89S4G.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Bflq-Git.js → statusUtils-DM6KLt-s.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Ccp0I-wt.js → styleChecker-C9MQAK15.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CYZbByYA.js → useFlexGapSupport-BpQDpP0z.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B_x0nxFD.js → useFs-C7rtRViA.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DW55rL85.js → usePersonalDataHub-Dm15xafq.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Ca6MH3W8.js → vnode-mEiEytw4.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-NdHelOog.js → zoom-DzPxflhY.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +5 -5
- package/src/commands/agent.js +51 -20
- package/src/commands/compact.js +349 -3
- package/src/commands/context.js +72 -1
- package/src/commands/graph.js +26 -15
- package/src/commands/hmemory.js +21 -0
- package/src/commands/hook.js +256 -28
- package/src/commands/memory.js +209 -42
- package/src/commands/promcomp.js +17 -0
- package/src/commands/serve.js +94 -10
- package/src/commands/session.js +2 -3
- package/src/commands/team.js +7 -1
- package/src/data/changelog.json +41 -2
- package/src/gateways/ws/session-core-protocol.js +62 -3
- package/src/gateways/ws/session-protocol.js +123 -15
- package/src/gateways/ws/ws-agent-handler.js +157 -9
- package/src/gateways/ws/ws-session-gateway.js +204 -30
- package/src/generated/cc-agent-protocol.schema.json +2094 -4
- package/src/harness/prompt-compressor.js +5 -55
- package/src/lib/agent-sandbox.js +14 -4
- package/src/lib/agent-team/team-distributed-graph-bridge.js +3 -3
- package/src/lib/app-server/context-memory-notifications.js +54 -0
- package/src/lib/app-server/rollout-store-factory.js +115 -0
- package/src/lib/app-server/rollout-store.js +310 -23
- package/src/lib/app-server/server.js +184 -7
- package/src/lib/app-server/sqlite-rollout-store.js +59 -16
- package/src/lib/auto-mode-config.js +26 -0
- package/src/lib/causal-observability.js +13 -1
- package/src/lib/context-memory-kernel/authority.js +95 -0
- package/src/lib/context-memory-kernel/durable-memory-port.js +296 -0
- package/src/lib/context-memory-kernel/index.js +8 -0
- package/src/lib/context-memory-kernel/jsonl-session-context-port.js +232 -0
- package/src/lib/context-memory-kernel/live-compaction.js +375 -0
- package/src/lib/context-memory-kernel/memory-service.js +667 -0
- package/src/lib/context-memory-kernel/message-adapter.js +451 -0
- package/src/lib/context-memory-kernel/privacy-purge-port.js +244 -0
- package/src/lib/context-memory-kernel/provider-context.js +192 -0
- package/src/lib/context-memory-kernel/runtime.js +61 -0
- package/src/lib/direct-model-usage.js +22 -18
- package/src/lib/graph-kernel/cutover-authority-resolver.js +4 -5
- package/src/lib/graph-kernel/cutover-ledger.js +2 -2
- package/src/lib/graph-kernel/event-store.js +3 -5
- package/src/lib/graph-kernel/index.js +2 -0
- package/src/lib/graph-kernel/migration-saga.js +2 -2
- package/src/lib/graph-kernel/production-cutover-evidence.js +976 -0
- package/src/lib/graph-kernel/retirement-evidence.js +12 -4
- package/src/lib/hierarchical-memory.js +22 -0
- package/src/lib/hook-audit-store.js +170 -0
- package/src/lib/hook-event-bus.cjs +0 -0
- package/src/lib/hook-manager.js +25 -83
- package/src/lib/hook-runtime-adapters.js +233 -0
- package/src/lib/hook-runtime-contract.cjs +291 -0
- package/src/lib/hook-runtime-contract.js +21 -0
- package/src/lib/hook-trust.js +210 -0
- package/src/lib/hooks-v2-producers.js +52 -6
- package/src/lib/hooks-v2-runtime.js +443 -178
- package/src/lib/llm-pricing.js +10 -0
- package/src/lib/memory-manager.js +29 -4
- package/src/lib/model-context-window.js +52 -0
- package/src/lib/permanent-memory.js +17 -0
- package/src/lib/plan-mode.js +8 -4
- package/src/lib/process-execution-broker/index.js +208 -16
- package/src/lib/runtime-usage-ledger.js +20 -0
- package/src/lib/session-consolidator.js +59 -0
- package/src/lib/session-core-singletons.js +17 -4
- package/src/lib/session-hooks.js +29 -2
- package/src/lib/session-transcript-migration.js +188 -0
- package/src/lib/settings-hook-events.cjs +37 -401
- package/src/lib/settings-hook-events.js +210 -8
- package/src/lib/settings-hooks.cjs +42 -83
- package/src/lib/ws-session-manager.js +4 -1
- package/src/repl/agent-repl.js +186 -53
- package/src/runtime/agent-core.js +376 -350
- package/src/runtime/headless-runner.js +40 -33
- package/src/runtime/headless-stream.js +131 -30
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DaiA6CsX.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-B05DgASC.js +0 -1
- package/src/assets/web-panel/assets/Projects-Z2Orm8Ma.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Cq6lSd_q.js +0 -1
- package/src/assets/web-panel/assets/index-BQ3213fz.js +0 -1
- package/src/assets/web-panel/assets/index-vJagfET2.js +0 -1
|
@@ -901,8 +901,8 @@ async function runAgentHeadlessInWorkspace(
|
|
|
901
901
|
effectiveHooks._authorityErrors.length > 0
|
|
902
902
|
? effectiveHooks
|
|
903
903
|
: null;
|
|
904
|
-
//
|
|
905
|
-
//
|
|
904
|
+
// Explain the explicit content-bound trust gate. Displaying this notice
|
|
905
|
+
// never authorizes execution.
|
|
906
906
|
try {
|
|
907
907
|
const notice = projectHookTrustNotice({
|
|
908
908
|
cwd,
|
|
@@ -910,7 +910,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
910
910
|
});
|
|
911
911
|
if (notice) writeErr(notice + "\n");
|
|
912
912
|
} catch {
|
|
913
|
-
/*
|
|
913
|
+
/* notice output is best-effort; the runtime gate is fail-closed */
|
|
914
914
|
}
|
|
915
915
|
} catch (error) {
|
|
916
916
|
settingsHooks = {};
|
|
@@ -1605,7 +1605,8 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1605
1605
|
if (approvalGate) {
|
|
1606
1606
|
approvalGate.setAuthorizationConsumer?.(null);
|
|
1607
1607
|
if (typeof approvalGate.setSessionPolicy === "function") {
|
|
1608
|
-
approvalGate.setSessionPolicy(sessionId, perm.sessionPolicy);
|
|
1608
|
+
await approvalGate.setSessionPolicy(sessionId, perm.sessionPolicy);
|
|
1609
|
+
await approvalGate.awaitPersistence?.();
|
|
1609
1610
|
}
|
|
1610
1611
|
if (typeof approvalGate.setConfirmer === "function") {
|
|
1611
1612
|
approvalGate.setConfirmer(perm.confirmer);
|
|
@@ -1708,7 +1709,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1708
1709
|
try {
|
|
1709
1710
|
const { runUserPromptSubmitHooks } =
|
|
1710
1711
|
await import("../lib/settings-hook-events.js");
|
|
1711
|
-
const ups = runUserPromptSubmitHooks(settingsHooks, {
|
|
1712
|
+
const ups = await runUserPromptSubmitHooks(settingsHooks, {
|
|
1712
1713
|
prompt: userContent,
|
|
1713
1714
|
cwd,
|
|
1714
1715
|
sessionId,
|
|
@@ -1739,11 +1740,13 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1739
1740
|
try {
|
|
1740
1741
|
const { runInstructionsLoadedHooks } =
|
|
1741
1742
|
await import("../lib/settings-hook-events.js");
|
|
1742
|
-
instructionsLoadedContext =
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1743
|
+
instructionsLoadedContext = (
|
|
1744
|
+
await runInstructionsLoadedHooks(settingsHooks, {
|
|
1745
|
+
files: _loadedInstructions.files,
|
|
1746
|
+
cwd,
|
|
1747
|
+
sessionId,
|
|
1748
|
+
})
|
|
1749
|
+
).additionalContext;
|
|
1747
1750
|
} catch (_err) {
|
|
1748
1751
|
instructionsLoadedContext = null;
|
|
1749
1752
|
}
|
|
@@ -1755,11 +1758,13 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1755
1758
|
try {
|
|
1756
1759
|
const { runSessionStartHooks } =
|
|
1757
1760
|
await import("../lib/settings-hook-events.js");
|
|
1758
|
-
sessionStartContext =
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1761
|
+
sessionStartContext = (
|
|
1762
|
+
await runSessionStartHooks(settingsHooks, {
|
|
1763
|
+
source: resumeId ? "resume" : "startup",
|
|
1764
|
+
cwd,
|
|
1765
|
+
sessionId,
|
|
1766
|
+
})
|
|
1767
|
+
).additionalContext;
|
|
1763
1768
|
} catch (_err) {
|
|
1764
1769
|
sessionStartContext = null;
|
|
1765
1770
|
}
|
|
@@ -1774,7 +1779,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1774
1779
|
try {
|
|
1775
1780
|
const { runObserveHooks } =
|
|
1776
1781
|
await import("../lib/settings-hook-events.js");
|
|
1777
|
-
runObserveHooks(
|
|
1782
|
+
await runObserveHooks(
|
|
1778
1783
|
settingsHooks,
|
|
1779
1784
|
"SessionResume",
|
|
1780
1785
|
{
|
|
@@ -2631,12 +2636,14 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2631
2636
|
// --max-budget-usd: a hard USD spend cap (Claude-Code parity). Accumulates
|
|
2632
2637
|
// per-call cost from token-usage events and stops the loop before the next
|
|
2633
2638
|
// paid call once the cap is reached. null → no cap (unchanged behavior).
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
:
|
|
2639
|
+
// Track priced usage even when no hard cap is configured so every machine
|
|
2640
|
+
// readable terminal result can carry authoritative cost evidence. A null
|
|
2641
|
+
// limit never warns or stops the run; it only accumulates the same estimates
|
|
2642
|
+
// that an enabled --max-budget-usd guard would use.
|
|
2643
|
+
const costBudget = new CostBudget({
|
|
2644
|
+
limitUsd: options.maxCostUsd,
|
|
2645
|
+
table: options.priceTable,
|
|
2646
|
+
});
|
|
2640
2647
|
|
|
2641
2648
|
const startedAt = deps.now ? deps.now() : Date.now();
|
|
2642
2649
|
const toolCalls = [];
|
|
@@ -2770,9 +2777,8 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2770
2777
|
let _asyncStopHandled = false;
|
|
2771
2778
|
const _settleAsyncStop = async () => {
|
|
2772
2779
|
if (!settingsHooks || !_hookSupervisor) return { rewakes: [], results: [] };
|
|
2773
|
-
const {
|
|
2774
|
-
|
|
2775
|
-
dispatchAsyncHooks(
|
|
2780
|
+
const { runObserveHooks } = await import("../lib/settings-hook-events.js");
|
|
2781
|
+
await runObserveHooks(
|
|
2776
2782
|
settingsHooks,
|
|
2777
2783
|
"Stop",
|
|
2778
2784
|
{ reason: endReason, cwd, session_id: sessionId },
|
|
@@ -3613,21 +3619,22 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3613
3619
|
await cleanupDeadline.run("settings-hooks", async () => {
|
|
3614
3620
|
if (settingsHooks) {
|
|
3615
3621
|
try {
|
|
3616
|
-
const { runObserveHooks
|
|
3622
|
+
const { runObserveHooks } =
|
|
3617
3623
|
await import("../lib/settings-hook-events.js");
|
|
3618
3624
|
const stopPayload = {
|
|
3619
3625
|
reason: pipeState.closed ? "pipe_closed" : endReason,
|
|
3620
3626
|
cwd,
|
|
3621
3627
|
session_id: sessionId,
|
|
3622
3628
|
};
|
|
3623
|
-
const stopOutcome = runObserveHooks(
|
|
3629
|
+
const stopOutcome = await runObserveHooks(
|
|
3624
3630
|
settingsHooks,
|
|
3625
3631
|
"Stop",
|
|
3626
3632
|
stopPayload,
|
|
3627
|
-
{ cwd },
|
|
3633
|
+
{ cwd, supervisor: _hookSupervisor },
|
|
3628
3634
|
);
|
|
3629
3635
|
const stopFailures = (stopOutcome?.results || []).filter(
|
|
3630
3636
|
(result) =>
|
|
3637
|
+
result?.status === "error" ||
|
|
3631
3638
|
result?.nonBlockingError === true ||
|
|
3632
3639
|
result?.malformedDecision === true ||
|
|
3633
3640
|
result?.breakerOpen === true,
|
|
@@ -3647,10 +3654,6 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3647
3654
|
// Skip the async Stop dispatch/settle here if the auto-rewake re-drive
|
|
3648
3655
|
// loop already fired + drained it this run (avoids double-execution).
|
|
3649
3656
|
if (_hookSupervisor && !_asyncStopHandled) {
|
|
3650
|
-
dispatchAsyncHooks(settingsHooks, "Stop", stopPayload, {
|
|
3651
|
-
cwd,
|
|
3652
|
-
supervisor: _hookSupervisor,
|
|
3653
|
-
});
|
|
3654
3657
|
// Bounded settle: wait for in-flight async hooks (Stop + any
|
|
3655
3658
|
// PostToolUse dispatched during the loop) to finish, capped so a
|
|
3656
3659
|
// slow/hung check can never stall the run. Default 5s; tunable.
|
|
@@ -3694,7 +3697,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3694
3697
|
// Always reap the supervisor (kills any straggler child + detaches the
|
|
3695
3698
|
// exit reaper), whether the async Stop was handled here or in re-drive.
|
|
3696
3699
|
if (_hookSupervisor) _hookSupervisor.stopAll();
|
|
3697
|
-
runObserveHooks(
|
|
3700
|
+
await runObserveHooks(
|
|
3698
3701
|
settingsHooks,
|
|
3699
3702
|
"SessionEnd",
|
|
3700
3703
|
{
|
|
@@ -3901,6 +3904,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3901
3904
|
num_turns: budget.consumed,
|
|
3902
3905
|
duration_ms: durationMs,
|
|
3903
3906
|
usage,
|
|
3907
|
+
total_cost_usd: costBudget.spentUsd,
|
|
3904
3908
|
...(compactionDegradations.length
|
|
3905
3909
|
? { compaction_degradations: compactionDegradations }
|
|
3906
3910
|
: {}),
|
|
@@ -3916,6 +3920,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3916
3920
|
sessionId,
|
|
3917
3921
|
toolCalls,
|
|
3918
3922
|
usage,
|
|
3923
|
+
totalCostUsd: costBudget.spentUsd,
|
|
3919
3924
|
numTurns: budget.consumed,
|
|
3920
3925
|
durationMs,
|
|
3921
3926
|
denials,
|
|
@@ -3976,6 +3981,7 @@ function buildResultEnvelope({
|
|
|
3976
3981
|
sessionId,
|
|
3977
3982
|
toolCalls,
|
|
3978
3983
|
usage,
|
|
3984
|
+
totalCostUsd,
|
|
3979
3985
|
numTurns,
|
|
3980
3986
|
durationMs,
|
|
3981
3987
|
denials,
|
|
@@ -3992,6 +3998,7 @@ function buildResultEnvelope({
|
|
|
3992
3998
|
duration_ms: durationMs,
|
|
3993
3999
|
tool_calls: toolCalls,
|
|
3994
4000
|
usage,
|
|
4001
|
+
total_cost_usd: totalCostUsd,
|
|
3995
4002
|
};
|
|
3996
4003
|
// Only present when something was blocked — keeps the no-denial envelope
|
|
3997
4004
|
// byte-identical to before (Claude-Code 2.1.193 denial reasons, json mode).
|
|
@@ -51,7 +51,10 @@ import {
|
|
|
51
51
|
} from "./agent-core.js";
|
|
52
52
|
import { composeSystemPrompt } from "./system-prompt.js";
|
|
53
53
|
import { collapseConsecutiveMessagesInPlace } from "./message-roles.js";
|
|
54
|
-
import {
|
|
54
|
+
import {
|
|
55
|
+
estimateMessagesTokens,
|
|
56
|
+
sanitizeToolPairs,
|
|
57
|
+
} from "../harness/prompt-compressor.js";
|
|
55
58
|
import { compactConversationWithProvider } from "../harness/provider-backed-compaction.js";
|
|
56
59
|
import { HostResourceBudget } from "../lib/host-resource-budget.js";
|
|
57
60
|
import { projectCanonicalResumeMessages } from "../lib/session-message-provenance.js";
|
|
@@ -1549,7 +1552,10 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
1549
1552
|
seq: true,
|
|
1550
1553
|
trace_id: true,
|
|
1551
1554
|
tool_use_id: true,
|
|
1552
|
-
|
|
1555
|
+
// Hook lifecycle events can occur before the optional first-line hello.
|
|
1556
|
+
// Buffer their additive policy projection until negotiation either accepts
|
|
1557
|
+
// or disables this feature.
|
|
1558
|
+
permission_decision: null,
|
|
1553
1559
|
};
|
|
1554
1560
|
const streamCoalescer =
|
|
1555
1561
|
deps.streamCoalescer ||
|
|
@@ -1560,13 +1566,24 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
1560
1566
|
fieldGate,
|
|
1561
1567
|
});
|
|
1562
1568
|
const emit = streamCoalescer.emit;
|
|
1569
|
+
const pendingHookPolicyEvents = [];
|
|
1570
|
+
const settlePermissionDecisionGate = (enabled) => {
|
|
1571
|
+
fieldGate.permission_decision = enabled === true;
|
|
1572
|
+
if (fieldGate.permission_decision) {
|
|
1573
|
+
for (const event of pendingHookPolicyEvents.splice(0)) emit(event);
|
|
1574
|
+
} else {
|
|
1575
|
+
pendingHookPolicyEvents.length = 0;
|
|
1576
|
+
}
|
|
1577
|
+
};
|
|
1563
1578
|
const removeHookObserver =
|
|
1564
1579
|
options.includeHookEvents === true
|
|
1565
1580
|
? addHooksV2EventObserver(sessionId, (event) => {
|
|
1566
1581
|
emit(event);
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1582
|
+
const policyEvent = projectHookPolicyDecision(event);
|
|
1583
|
+
if (!policyEvent) return;
|
|
1584
|
+
if (fieldGate.permission_decision === true) emit(policyEvent);
|
|
1585
|
+
else if (fieldGate.permission_decision == null) {
|
|
1586
|
+
pendingHookPolicyEvents.push(policyEvent);
|
|
1570
1587
|
}
|
|
1571
1588
|
})
|
|
1572
1589
|
: null;
|
|
@@ -1792,8 +1809,8 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
1792
1809
|
effectiveHooks._authorityErrors.length > 0
|
|
1793
1810
|
? effectiveHooks
|
|
1794
1811
|
: null;
|
|
1795
|
-
//
|
|
1796
|
-
//
|
|
1812
|
+
// Explain the explicit content-bound trust gate. stderr keeps NDJSON
|
|
1813
|
+
// stdout clean; the notice itself never grants Hook authority.
|
|
1797
1814
|
try {
|
|
1798
1815
|
const notice = projectHookTrustNotice({
|
|
1799
1816
|
cwd,
|
|
@@ -1801,7 +1818,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
1801
1818
|
});
|
|
1802
1819
|
if (notice) writeErr(notice + "\n");
|
|
1803
1820
|
} catch {
|
|
1804
|
-
/*
|
|
1821
|
+
/* notice output is best-effort; the runtime gate is fail-closed */
|
|
1805
1822
|
}
|
|
1806
1823
|
} catch (error) {
|
|
1807
1824
|
settingsHooks = {};
|
|
@@ -1847,7 +1864,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
1847
1864
|
const runObserveHooks =
|
|
1848
1865
|
deps.runObserveHooks ||
|
|
1849
1866
|
(await import("../lib/settings-hook-events.js")).runObserveHooks;
|
|
1850
|
-
runObserveHooks(
|
|
1867
|
+
await runObserveHooks(
|
|
1851
1868
|
settingsHooks,
|
|
1852
1869
|
"SessionEnd",
|
|
1853
1870
|
{ reason, cwd, session_id: sessionId },
|
|
@@ -2358,7 +2375,8 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2358
2375
|
}
|
|
2359
2376
|
if (approvalGate) {
|
|
2360
2377
|
approvalGate.setAuthorizationConsumer?.(null);
|
|
2361
|
-
approvalGate.setSessionPolicy?.(sessionId, perm.sessionPolicy);
|
|
2378
|
+
await approvalGate.setSessionPolicy?.(sessionId, perm.sessionPolicy);
|
|
2379
|
+
await approvalGate.awaitPersistence?.();
|
|
2362
2380
|
approvalGate.setConfirmer?.(
|
|
2363
2381
|
interactive && perm.allowInteractiveApprovals
|
|
2364
2382
|
? interactiveConfirm
|
|
@@ -2562,11 +2580,13 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2562
2580
|
try {
|
|
2563
2581
|
const { runInstructionsLoadedHooks } =
|
|
2564
2582
|
await import("../lib/settings-hook-events.js");
|
|
2565
|
-
const ctx =
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2583
|
+
const ctx = (
|
|
2584
|
+
await runInstructionsLoadedHooks(settingsHooks, {
|
|
2585
|
+
files: _loadedInstructions.files,
|
|
2586
|
+
cwd,
|
|
2587
|
+
sessionId,
|
|
2588
|
+
})
|
|
2589
|
+
).additionalContext;
|
|
2570
2590
|
if (ctx) messages.push({ role: "system", content: ctx });
|
|
2571
2591
|
} catch (_err) {
|
|
2572
2592
|
// best-effort
|
|
@@ -2603,11 +2623,13 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
2603
2623
|
try {
|
|
2604
2624
|
const { runSessionStartHooks } =
|
|
2605
2625
|
await import("../lib/settings-hook-events.js");
|
|
2606
|
-
const ctx =
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2626
|
+
const ctx = (
|
|
2627
|
+
await runSessionStartHooks(settingsHooks, {
|
|
2628
|
+
source: "startup",
|
|
2629
|
+
cwd,
|
|
2630
|
+
sessionId,
|
|
2631
|
+
})
|
|
2632
|
+
).additionalContext;
|
|
2611
2633
|
if (ctx) messages.push({ role: "system", content: ctx });
|
|
2612
2634
|
} catch (_err) {
|
|
2613
2635
|
// best-effort
|
|
@@ -3453,6 +3475,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3453
3475
|
parsed.hello,
|
|
3454
3476
|
);
|
|
3455
3477
|
applyNegotiationToGate(negotiated, fieldGate);
|
|
3478
|
+
settlePermissionDecisionGate(fieldGate.permission_decision !== false);
|
|
3456
3479
|
emit({
|
|
3457
3480
|
type: "system",
|
|
3458
3481
|
subtype: "negotiated",
|
|
@@ -3466,6 +3489,9 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3466
3489
|
});
|
|
3467
3490
|
continue;
|
|
3468
3491
|
}
|
|
3492
|
+
if (fieldGate.permission_decision == null) {
|
|
3493
|
+
settlePermissionDecisionGate(true);
|
|
3494
|
+
}
|
|
3469
3495
|
if (parsed.interrupt) {
|
|
3470
3496
|
currentAbort?.abort();
|
|
3471
3497
|
continue;
|
|
@@ -3706,13 +3732,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3706
3732
|
const compactionCallId = `compact-${++slashRequestSeq}`;
|
|
3707
3733
|
let compactionProviderStarted = false;
|
|
3708
3734
|
try {
|
|
3709
|
-
|
|
3710
|
-
messages: compacted,
|
|
3711
|
-
stats,
|
|
3712
|
-
degradedEvent,
|
|
3713
|
-
usageEvent,
|
|
3714
|
-
usageUnknownEvent,
|
|
3715
|
-
} = await compactConversationWithProvider(messages, {
|
|
3735
|
+
const providerCompactionOptions = {
|
|
3716
3736
|
provider,
|
|
3717
3737
|
model,
|
|
3718
3738
|
baseUrl,
|
|
@@ -3746,7 +3766,84 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3746
3766
|
compactionProviderStarted = true;
|
|
3747
3767
|
return compactionCallId;
|
|
3748
3768
|
},
|
|
3749
|
-
}
|
|
3769
|
+
};
|
|
3770
|
+
const { resolveCliContextMemoryCutover } =
|
|
3771
|
+
await import("../lib/context-memory-kernel/authority.js");
|
|
3772
|
+
const cutover = resolveCliContextMemoryCutover({
|
|
3773
|
+
env: options.contextMemoryEnv || process.env,
|
|
3774
|
+
scopeKey: `cli:session:${sessionId}`,
|
|
3775
|
+
});
|
|
3776
|
+
if (cutover.canonical) {
|
|
3777
|
+
const { compactLiveMessagesCanonical } =
|
|
3778
|
+
await import("../lib/context-memory-kernel/live-compaction.js");
|
|
3779
|
+
let compatibilityResult = null;
|
|
3780
|
+
const canonical = await compactLiveMessagesCanonical(messages, {
|
|
3781
|
+
compressor: {
|
|
3782
|
+
maxTokens: Math.max(
|
|
3783
|
+
256,
|
|
3784
|
+
Math.floor(estimateMessagesTokens(messages) * 0.6),
|
|
3785
|
+
),
|
|
3786
|
+
compress: async (dropped) => {
|
|
3787
|
+
compatibilityResult = await compactConversationWithProvider(
|
|
3788
|
+
dropped,
|
|
3789
|
+
providerCompactionOptions,
|
|
3790
|
+
);
|
|
3791
|
+
return compatibilityResult;
|
|
3792
|
+
},
|
|
3793
|
+
},
|
|
3794
|
+
sessionId,
|
|
3795
|
+
operationId: `manual-${randomUUID()}`,
|
|
3796
|
+
provider,
|
|
3797
|
+
model,
|
|
3798
|
+
env: options.contextMemoryEnv || process.env,
|
|
3799
|
+
persist,
|
|
3800
|
+
trigger: "manual",
|
|
3801
|
+
...(persist
|
|
3802
|
+
? {
|
|
3803
|
+
commit: (canonicalStats, output, settlement = {}) => {
|
|
3804
|
+
sessionHostLease?.assert?.();
|
|
3805
|
+
return requireSynchronousRecoveryResult(
|
|
3806
|
+
store.appendCompactEventIfMessagesMatch(
|
|
3807
|
+
sessionId,
|
|
3808
|
+
{
|
|
3809
|
+
...canonicalStats,
|
|
3810
|
+
trigger: "manual",
|
|
3811
|
+
messages: projectCanonicalResumeMessages(output, {
|
|
3812
|
+
strict: true,
|
|
3813
|
+
}),
|
|
3814
|
+
},
|
|
3815
|
+
settlement.expectedMessages,
|
|
3816
|
+
),
|
|
3817
|
+
"appendCompactEventIfMessagesMatch",
|
|
3818
|
+
);
|
|
3819
|
+
},
|
|
3820
|
+
}
|
|
3821
|
+
: {}),
|
|
3822
|
+
});
|
|
3823
|
+
compacted = canonical.messages;
|
|
3824
|
+
stats = canonical.stats;
|
|
3825
|
+
degradedEvent = compatibilityResult?.degradedEvent || null;
|
|
3826
|
+
usageEvent = compatibilityResult?.usageEvent || null;
|
|
3827
|
+
usageUnknownEvent = compatibilityResult?.usageUnknownEvent || null;
|
|
3828
|
+
if (canonical.receipt.status === "stale") {
|
|
3829
|
+
const error = new Error(
|
|
3830
|
+
"session messages changed during canonical compaction",
|
|
3831
|
+
);
|
|
3832
|
+
error.code = "SESSION_REVISION_STALE";
|
|
3833
|
+
throw error;
|
|
3834
|
+
}
|
|
3835
|
+
} else {
|
|
3836
|
+
({
|
|
3837
|
+
messages: compacted,
|
|
3838
|
+
stats,
|
|
3839
|
+
degradedEvent,
|
|
3840
|
+
usageEvent,
|
|
3841
|
+
usageUnknownEvent,
|
|
3842
|
+
} = await compactConversationWithProvider(
|
|
3843
|
+
messages,
|
|
3844
|
+
providerCompactionOptions,
|
|
3845
|
+
));
|
|
3846
|
+
}
|
|
3750
3847
|
} catch (error) {
|
|
3751
3848
|
if (isAbortError(error) || options.signal?.aborted) throw error;
|
|
3752
3849
|
if (error?.runtimeLedgerPersistence === true) throw error;
|
|
@@ -3840,7 +3937,11 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
3840
3937
|
const shouldPersistCompact = stats?.strategy !== "none";
|
|
3841
3938
|
let settlementError = null;
|
|
3842
3939
|
let persistenceFailure = null;
|
|
3843
|
-
if (
|
|
3940
|
+
if (
|
|
3941
|
+
persist &&
|
|
3942
|
+
shouldPersistCompact &&
|
|
3943
|
+
stats?.canonicalAlreadySettled !== true
|
|
3944
|
+
) {
|
|
3844
3945
|
try {
|
|
3845
3946
|
sessionHostLease?.assert?.();
|
|
3846
3947
|
requireSynchronousRecoveryResult(
|
|
@@ -4218,7 +4319,7 @@ async function runAgentHeadlessStreamInWorkspace(
|
|
|
4218
4319
|
try {
|
|
4219
4320
|
const { runUserPromptSubmitHooks } =
|
|
4220
4321
|
await import("../lib/settings-hook-events.js");
|
|
4221
|
-
const ups = runUserPromptSubmitHooks(settingsHooks, {
|
|
4322
|
+
const ups = await runUserPromptSubmitHooks(settingsHooks, {
|
|
4222
4323
|
prompt: userContent,
|
|
4223
4324
|
cwd,
|
|
4224
4325
|
sessionId,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as u,J as S,U as a,R as n,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-DpjHpRoq.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"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${h}`}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=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[a("div",T,[a("div",M,[a("span",R,n(r.actorLabel),1),a("span",V,n(r.formattedTime),1)]),a("div",q,n(r.messageText),1),t.event.source.adapter?(u(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(n(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const P=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-a6JtPh/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{P as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as c,J as p,b as a}from"./vendor-Bn1JzzAn.js";import{r as s}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-DpjHpRoq.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=a(()=>s(e.content||"")),n={props:e,rendered:r,computed:a,get renderMarkdown(){return s}};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-a6JtPh/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as i,J as A,U as I,R as s,Q as r,c as t,K as a,V as _,S as x,o as oe,b as ee,r as u,P as p,F as ne,a2 as ge}from"./vendor-Bn1JzzAn.js";import{_ as we,b as re,u as ie,d}from"./index-DpjHpRoq.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aN as ke,aO as Fe,aP as be,f as je,a5 as Ce,a8 as xe,at as Oe,R as Se}from"./icons-DG5UD-6K.js";const Pe={__name:"Projects",setup(se,{expose:l}){l();const{t:te}=re(),e=ie(),{isEmbedded:J}=de();async function w(o,f,ye,ae=8e3){if(J){const Z=await e.sendRaw({...f,type:o},ae);if(!Z?.ok){const $=Z?.error;throw new Error(typeof $=="string"?$:$?.message||`${o} failed`)}return Z.result}return e.executeJson(ye,ae)}const B=u(!1),y=u([]),O=u(""),S=u(""),P=u(!1),v=u(null),U=u([]),k=u(!1),E=u(!1),L=u(!1),F=u({name:"",description:"",type:"document",rootPath:""}),z=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],V=ee(()=>{const o={active:0,draft:0,completed:0,archived:0};for(const f of y.value)o[f.status]!==void 0&&(o[f.status]+=1);return o}),W=ee(()=>y.value.filter(o=>!(O.value&&o.status!==O.value||S.value&&!o.name.toLowerCase().includes(S.value.toLowerCase()))));function g(o){switch(o){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function K(o){switch(o){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function Q(o){return!o&&o!==0?"-":new Date(typeof o=="number"?o:parseInt(o,10)).toLocaleString("zh-CN",{hour12:!1})}async function C(){B.value=!0;try{const o=await w("project.list",{limit:500},"project list --limit 500 --json",1e4);y.value=Array.isArray(o?.projects)?o.projects:Array.isArray(o)?o:[]}catch(o){d.error("加载失败: "+(o.message||o)),y.value=[]}finally{B.value=!1}}function G(o){return{onClick:()=>M(o)}}async function M(o){v.value=o,P.value=!0,k.value=!0,U.value=[];try{const f=await w("project.listFiles",{projectId:o.id,limit:200},`project list-files ${o.id} --json`,8e3);U.value=Array.isArray(f?.files)?f.files:[]}catch{U.value=[]}finally{k.value=!1}}async function H(o){try{(await w("project.delete",{id:o.id},`project delete ${o.id} --json`,8e3))?.ok?(d.success(`已删除项目 '${o.name}'`),P.value=!1,await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}function X(){F.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function T(){if(!F.value.name.trim()){d.warning("请输入项目名称");return}L.value=!0;try{const o=await w("project.init",{name:F.value.name.trim(),description:F.value.description||null,projectType:F.value.type,rootPath:F.value.rootPath||null},`project init "${F.value.name.trim()}" --type ${F.value.type} --json`,8e3);o?.id?(d.success(`已创建项目 '${o.name}'`),E.value=!1,await C()):d.error("创建失败")}catch(o){d.error(o.message||String(o))}finally{L.value=!1}}const b=u(!1),D=u(!1),j=u({path:"",content:""}),h=u(!1),m=u(!1),R=u({path:""}),n=u(!1),c=u(null),q=u(""),Y=u(!1);function ue(){j.value={path:"",content:""},b.value=!0}function ce(){R.value={path:""},h.value=!0}async function N(){if(v.value){k.value=!0;try{const o=await w("project.listFiles",{projectId:v.value.id,limit:200},`project list-files ${v.value.id} --json`,8e3);U.value=Array.isArray(o?.files)?o.files:[]}catch(o){d.error("刷新文件失败: "+(o.message||o))}finally{k.value=!1}}}async function fe(){if(!j.value.path.trim()){d.warning("请输入文件路径");return}if(v.value){D.value=!0;try{const o=await w("project.createFile",{projectId:v.value.id,filePath:j.value.path.trim(),content:j.value.content||""},`project create-file ${v.value.id} "${j.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件 '${o.file_name}'`),b.value=!1,await N(),await C()):d.error("创建文件失败")}catch(o){d.error(o.message||String(o))}finally{D.value=!1}}}async function pe(){if(!R.value.path.trim()){d.warning("请输入文件夹路径");return}if(v.value){m.value=!0;try{const o=await w("project.createFolder",{projectId:v.value.id,folderPath:R.value.path.trim()},`project create-folder ${v.value.id} "${R.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件夹 '${o.file_name}'`),h.value=!1,await N(),await C()):d.error("创建文件夹失败")}catch(o){d.error(o.message||String(o))}finally{m.value=!1}}}async function ve(o){try{(await w("project.deleteFile",{fileId:o.id},`project delete-file ${o.id} --json`,8e3))?.deleted?(d.success(`已删除 '${o.file_name}'`),await N(),await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}async function me(o){if(o.is_folder){d.info("文件夹无内容可编辑");return}try{const f=await w("project.getFile",{fileId:o.id},`project get-file ${o.id} --json`,8e3);c.value=o,q.value=f?.content||"",n.value=!0}catch(f){d.error("读取文件失败: "+(f.message||f))}}async function _e(){if(c.value){Y.value=!0;try{(await w("project.writeFile",{fileId:c.value.id,content:q.value},`project write-file ${c.value.id} --json`,8e3))?.id?(d.success("已保存"),n.value=!1,await N()):d.error("保存失败")}catch(o){d.error(o.message||String(o))}finally{Y.value=!1}}}oe(()=>{C()});const le={t:te,ws:e,isEmbedded:J,callProjectTopic:w,loading:B,projects:y,statusFilter:O,nameFilter:S,detailOpen:P,detail:v,files:U,filesLoading:k,createOpen:E,creating:L,newProject:F,columns:z,countByStatus:V,filteredProjects:W,statusColor:g,syncColor:K,formatTime:Q,loadAll:C,onRowClick:G,openDetail:M,onDelete:H,onShowCreate:X,onCreate:T,createFileOpen:b,creatingFile:D,newFile:j,createFolderOpen:h,creatingFolder:m,newFolder:R,editFileOpen:n,editingFile:c,editFileContent:q,savingFile:Y,openCreateFile:ue,openCreateFolder:ce,refreshFiles:N,onCreateFile:fe,onCreateFolder:pe,onDeleteFile:ve,openEditFile:me,onSaveFile:_e,ref:u,computed:ee,onMounted:oe,get ReloadOutlined(){return Se},get PlusOutlined(){return Oe},get FolderOutlined(){return xe},get FileTextOutlined(){return Ce},get CheckCircleOutlined(){return je},get CheckSquareOutlined(){return be},get FileAddOutlined(){return Fe},get FolderAddOutlined(){return ke},get message(){return d},get useI18n(){return re},get useWsStore(){return ie},get useShellMode(){return de}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},he={class:"page-title"},Ae={class:"page-sub"},Ie={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},Ue={key:0,style:{"font-size":"12px",color:"#888"}},De={key:0,style:{color:"#888","font-size":"12px"}},Re={key:0},Te={key:1,style:{color:"#888"}},Be=["onClick"],Ee={key:0,style:{color:"#888","font-size":"12px"}};function Le(se,l,te,e,J,w){const B=i("router-link"),y=i("a-button"),O=i("a-space"),S=i("a-statistic"),P=i("a-card"),v=i("a-col"),U=i("a-row"),k=i("a-radio-button"),E=i("a-radio-group"),L=i("a-input-search"),F=i("a-alert"),z=i("a-tag"),V=i("a-popconfirm"),W=i("a-table"),g=i("a-descriptions-item"),K=i("a-descriptions"),Q=i("a-divider"),C=i("a-empty"),G=i("a-list-item"),M=i("a-list"),H=i("a-spin"),X=i("a-drawer"),T=i("a-input"),b=i("a-form-item"),D=i("a-textarea"),j=i("a-form"),h=i("a-modal"),m=i("a-select-option"),R=i("a-select");return p(),A("div",null,[I("div",ze,[I("div",null,[I("h2",he,s(e.t("projects.title")),1),I("p",Ae,[l[17]||(l[17]=r("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(B,{to:"/project-init"},{default:a(()=>[...l[16]||(l[16]=[r("项目初始化 / 环境设置",-1)])]),_:1}),l[18]||(l[18]=r(")",-1))])]),t(O,null,{default:a(()=>[t(y,{loading:e.loading,onClick:e.loadAll},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[l[19]||(l[19]=r(" 刷新 ",-1))]),_:1},8,["loading"]),t(y,{type:"primary",onClick:e.onShowCreate},{icon:a(()=>[t(e.PlusOutlined)]),default:a(()=>[l[20]||(l[20]=r(" 新建项目 ",-1))]),_:1})]),_:1})]),_(" Stats "),t(U,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"总项目",value:e.projects.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.FolderOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"活跃",value:e.countByStatus.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"草稿",value:e.countByStatus.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"已完成",value:e.countByStatus.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),_(" Filter "),I("div",Ie,[t(E,{value:e.statusFilter,"onUpdate:value":l[0]||(l[0]=n=>e.statusFilter=n),size:"small","button-style":"solid"},{default:a(()=>[t(k,{value:""},{default:a(()=>[...l[21]||(l[21]=[r("全部",-1)])]),_:1}),t(k,{value:"active"},{default:a(()=>[...l[22]||(l[22]=[r("活跃",-1)])]),_:1}),t(k,{value:"draft"},{default:a(()=>[...l[23]||(l[23]=[r("草稿",-1)])]),_:1}),t(k,{value:"completed"},{default:a(()=>[...l[24]||(l[24]=[r("已完成",-1)])]),_:1}),t(k,{value:"archived"},{default:a(()=>[...l[25]||(l[25]=[r("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(L,{value:e.nameFilter,"onUpdate:value":l[1]||(l[1]=n=>e.nameFilter=n),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!e.projects.length&&!e.loading?(p(),x(F,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):_("v-if",!0),e.projects.length||e.loading?(p(),x(W,{key:1,columns:e.columns,"data-source":e.filteredProjects,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":e.onRowClick},{bodyCell:a(({column:n,record:c})=>[n.key==="id"?(p(),A("code",Ue,s(c.id.slice(0,8))+"…",1)):n.key==="name"?(p(),A(ne,{key:1},[I("strong",null,s(c.name),1),c.description?(p(),A("div",De,s(c.description),1)):_("v-if",!0)],64)):n.key==="project_type"?(p(),x(z,{key:2},{default:a(()=>[r(s(c.project_type),1)]),_:2},1024)):n.key==="status"?(p(),x(z,{key:3,color:e.statusColor(c.status)},{default:a(()=>[r(s(c.status),1)]),_:2},1032,["color"])):n.key==="sync_status"?(p(),x(z,{key:4,color:e.syncColor(c.sync_status)},{default:a(()=>[r(s(c.sync_status||"unknown"),1)]),_:2},1032,["color"])):n.key==="updated_at"?(p(),A(ne,{key:5},[r(s(e.formatTime(c.updated_at)),1)],64)):n.key==="actions"?(p(),x(O,{key:6,onClick:l[2]||(l[2]=ge(()=>{},["stop"]))},{default:a(()=>[t(y,{size:"small",onClick:q=>e.openDetail(c)},{default:a(()=>[...l[26]||(l[26]=[r("详情",-1)])]),_:1},8,["onClick"]),t(V,{title:`删除项目 '${c.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:q=>e.onDelete(c)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[27]||(l[27]=[r("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):_("v-if",!0)]),_:1},8,["data-source","loading"])):_("v-if",!0),_(" Detail drawer "),t(X,{open:e.detailOpen,"onUpdate:open":l[3]||(l[3]=n=>e.detailOpen=n),title:e.detail?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[e.detail?(p(),x(K,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(g,{label:"ID"},{default:a(()=>[I("code",null,s(e.detail.id),1)]),_:1}),t(g,{label:"名称"},{default:a(()=>[r(s(e.detail.name),1)]),_:1}),t(g,{label:"描述"},{default:a(()=>[r(s(e.detail.description||"-"),1)]),_:1}),t(g,{label:"类型"},{default:a(()=>[t(z,null,{default:a(()=>[r(s(e.detail.project_type),1)]),_:1})]),_:1}),t(g,{label:"状态"},{default:a(()=>[t(z,{color:e.statusColor(e.detail.status)},{default:a(()=>[r(s(e.detail.status),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"同步状态"},{default:a(()=>[t(z,{color:e.syncColor(e.detail.sync_status)},{default:a(()=>[r(s(e.detail.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"用户"},{default:a(()=>[r(s(e.detail.user_id),1)]),_:1}),t(g,{label:"根路径"},{default:a(()=>[e.detail.root_path?(p(),A("code",Re,s(e.detail.root_path),1)):(p(),A("span",Te,"(无)"))]),_:1}),t(g,{label:"文件数"},{default:a(()=>[r(s(e.detail.file_count||0),1)]),_:1}),t(g,{label:"创建"},{default:a(()=>[r(s(e.formatTime(e.detail.created_at)),1)]),_:1}),t(g,{label:"更新"},{default:a(()=>[r(s(e.formatTime(e.detail.updated_at)),1)]),_:1})]),_:1})):_("v-if",!0),t(Q,null,{default:a(()=>[...l[28]||(l[28]=[r("文件",-1)])]),_:1}),_(" Sub-phase 7.3 (2026-05-17): 文件 CRUD toolbar "),t(O,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(y,{size:"small",type:"primary",disabled:!e.detail,onClick:e.openCreateFile},{default:a(()=>[t(e.FileAddOutlined),l[29]||(l[29]=r(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(y,{size:"small",disabled:!e.detail,onClick:e.openCreateFolder},{default:a(()=>[t(e.FolderAddOutlined),l[30]||(l[30]=r(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(H,{spinning:e.filesLoading},{default:a(()=>[!e.files.length&&!e.filesLoading?(p(),x(C,{key:0,description:"无文件 (点上方按钮新建)"})):(p(),x(M,{key:1,size:"small","data-source":e.files},{renderItem:a(({item:n})=>[t(G,null,{extra:a(()=>[t(O,null,{default:a(()=>[n.file_size?(p(),A("span",Ee,s(n.file_size)+" B",1)):_("v-if",!0),t(V,{title:`删除 ${n.is_folder?"文件夹":"文件"} '${n.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:c=>e.onDeleteFile(n)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[31]||(l[31]=[r("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[I("span",{style:{cursor:"pointer"},onClick:c=>e.openEditFile(n)},s(n.is_folder?"📁":"📄")+" "+s(n.file_path),9,Be)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),_(" Sub-phase 7.3: Create file modal "),t(h,{open:e.createFileOpen,"onUpdate:open":l[6]||(l[6]=n=>e.createFileOpen=n),title:"新建文件","confirm-loading":e.creatingFile,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFile},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFile.path,"onUpdate:value":l[4]||(l[4]=n=>e.newFile.path=n),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(b,{label:"初始内容(可选)"},{default:a(()=>[t(D,{value:e.newFile.content,"onUpdate:value":l[5]||(l[5]=n=>e.newFile.content=n),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Create folder modal "),t(h,{open:e.createFolderOpen,"onUpdate:open":l[8]||(l[8]=n=>e.createFolderOpen=n),title:"新建文件夹","confirm-loading":e.creatingFolder,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFolder},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFolder.path,"onUpdate:value":l[7]||(l[7]=n=>e.newFolder.path=n),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Edit file content modal "),t(h,{open:e.editFileOpen,"onUpdate:open":l[10]||(l[10]=n=>e.editFileOpen=n),title:`编辑 ${e.editingFile?.file_name||""}`,"confirm-loading":e.savingFile,"ok-text":"保存","cancel-text":"取消",onOk:e.onSaveFile,width:"720"},{default:a(()=>[t(D,{value:e.editFileContent,"onUpdate:value":l[9]||(l[9]=n=>e.editFileContent=n),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),_(" Create modal "),t(h,{open:e.createOpen,"onUpdate:open":l[15]||(l[15]=n=>e.createOpen=n),title:"新建项目","confirm-loading":e.creating,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreate},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"项目名称",required:""},{default:a(()=>[t(T,{value:e.newProject.name,"onUpdate:value":l[11]||(l[11]=n=>e.newProject.name=n),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(b,{label:"描述"},{default:a(()=>[t(D,{value:e.newProject.description,"onUpdate:value":l[12]||(l[12]=n=>e.newProject.description=n),rows:2},null,8,["value"])]),_:1}),t(b,{label:"类型"},{default:a(()=>[t(R,{value:e.newProject.type,"onUpdate:value":l[13]||(l[13]=n=>e.newProject.type=n)},{default:a(()=>[t(m,{value:"document"},{default:a(()=>[...l[32]||(l[32]=[r("文档 (document)",-1)])]),_:1}),t(m,{value:"data"},{default:a(()=>[...l[33]||(l[33]=[r("数据 (data)",-1)])]),_:1}),t(m,{value:"web"},{default:a(()=>[...l[34]||(l[34]=[r("Web",-1)])]),_:1}),t(m,{value:"app"},{default:a(()=>[...l[35]||(l[35]=[r("应用 (app)",-1)])]),_:1}),t(m,{value:"presentation"},{default:a(()=>[...l[36]||(l[36]=[r("演示文稿",-1)])]),_:1}),t(m,{value:"spreadsheet"},{default:a(()=>[...l[37]||(l[37]=[r("表格",-1)])]),_:1}),t(m,{value:"design"},{default:a(()=>[...l[38]||(l[38]=[r("设计",-1)])]),_:1}),t(m,{value:"code"},{default:a(()=>[...l[39]||(l[39]=[r("代码",-1)])]),_:1}),t(m,{value:"workflow"},{default:a(()=>[...l[40]||(l[40]=[r("工作流",-1)])]),_:1}),t(m,{value:"knowledge"},{default:a(()=>[...l[41]||(l[41]=[r("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(b,{label:"根路径 (可选)"},{default:a(()=>[t(T,{value:e.newProject.rootPath,"onUpdate:value":l[14]||(l[14]=n=>e.newProject.rootPath=n),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const Je=we(Pe,[["render",Le],["__scopeId","data-v-019ac5aa"],["__file","/tmp/cc-web-panel-a6JtPh/repo/packages/web-panel/src/views/Projects.vue"]]);export{Je as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-DpjHpRoq.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-1EdMyf5P.js";import{a0 as t}from"./index-DpjHpRoq.js";import"./vendor-Bn1JzzAn.js";import"./index-Cg2bCeol.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-BpQUQTNj.js";import{a0 as t}from"./index-DpjHpRoq.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-D_EWIeac.js";import"./useFlexGapSupport-CYZbByYA.js";import"./styleChecker-Ccp0I-wt.js";import"./index-Cg2bCeol.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|