chainlesschain 0.166.102 → 0.166.104

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.
Files changed (213) hide show
  1. package/package.json +1 -1
  2. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  3. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-CyHIMEd8.js → AIOps-Bah3HREy.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-vuNxDpHm.js → ActionButton-DY2aeZMc.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-D0quEM0q.js → Analytics-BFly8Xaa.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-xRSVpbCs.js → AppLayout-dp0Zz-JM.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-ktfVAZBC.js → Artifacts-DcIg09ai.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-UJW6maH4.js → Audit-DkN-lsjZ.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-BYrfdCoT.js → BackgroundAgents-BjzgusLx.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-IBgsJ7BK.js → Backup-CU8S6qu9.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-BmP8_zxy.js → BaseInput-B1pC2gjL.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-urkw8_BF.js → Chat-B6xFp6gD.js} +6 -6
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-Cw44zZbh.js → ChatBubbleRenderer-DxNCLZ_X.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-CYboo-__.js → Checkbox-QHw7Vc4U.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-DaqR_Ay8.js → Codegen-gdecsfjg.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-04BSIj_z.js → Col-B0_JmAmc.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-DxFk7Trv.js → Community-DRCcP5xR.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-mjgWlMCB.js → Compact-DZtoGzhX.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-CC5ee7QV.js → Compliance-BfNTvEnT.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-BK4BhHZd.js → Cowork-CDXTLm84.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-CP6jAxq0.js → Cron-Big35CbN.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-DJPaViZS.js → Crosschain-C8ArrAVr.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-BTLxkuOj.js → DID-D_77BI2O.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-Djkiqh3d.js → Dashboard-D2SxTzEp.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-t_eUhqom.js → Dropdown-mR1-b9ud.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-7w6USx_J.js → EmailListRenderer-DPl7TE1c.js} +1 -1
  28. package/src/assets/web-panel/assets/{EvolutionSettings-mU5IHEk5.js → EvolutionSettings-BxRYLRSH.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BCh-VBBC.js → FamilyGuardDashboard-rnGtXJ5Z.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-Be_VpjI2.js → Federation-BpxenYK8.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-D_lzQ7PI.js → FormItemContext-Cz1kDf6l.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-LYu3KapV.js → GenericCardRenderer-CGV3KN6U.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-BBeF-PP4.js → Git-CIRP4UTx.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-CoF8Kzg7.js → Governance-DX4r8Vmt.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-C4DLMnXS.js → Inference-DQKk02Hl.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-B2mlNewk.js → KnowledgeGraph-DdD6J-By.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-DMZ_44Ya.js → Logs-DA2w-1_m.js} +2 -2
  38. package/src/assets/web-panel/assets/{MarkdownRenderer-Ck7Iv_9e.js → MarkdownRenderer-C9aSGETh.js} +1 -1
  39. package/src/assets/web-panel/assets/{Marketplace-BqDzTew_.js → Marketplace-BsJ6_6KW.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-BbwSbDN9.js → McpTools-_6k30z6u.js} +2 -2
  41. package/src/assets/web-panel/assets/{Memory-DAaTWgrm.js → Memory-C0_dYY0A.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-BjbTGxoR.js → MobileBridge-CCTnVqiC.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-DMODOBr-.js → MobileProjects-RZdxDSwC.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-DT9N2rCs.js → Mtc-D4Ys8lvX.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-DagMfUVv.js → MtcAudit-BKTC--a2.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-C1BKP6nM.js → Multisig-CGR1qOe1.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-B5LFh72i.js → NLProgramming-hKKD4qWb.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-Q77V3ltW.js → Notes-pCn7Ec40.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-HxdpNIBs.js → NotificationSettings-B9eEJXEs.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-Dc0DpvBH.js → OrderTableRenderer-CmJuhaT2.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-QL3NZ7uW.js → Organization-CcQbrnwW.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-B_gqOKho.js → Overflow-HmD4Mn72.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-BBJubU8Z.js → P2P-B7LIgx5H.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-CFnGd-2E.js → PdhVaultBrowser-CXiHnBfX.js} +3 -3
  55. package/src/assets/web-panel/assets/{Permissions-BKkznIUM.js → Permissions-CQRI3y_l.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-DYK7ZAcd.js → PersonalDataHub-1EeHmsy5.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-CoeKpjoN.js → Pipeline-BFyoIdn8.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-Diw4G-92.js → Privacy-BxWthXMF.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-CHBOFkma.js → ProjectInit-DfigBilu.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-BJIsgdOf.js → ProjectSettings-CFmIcVc-.js} +2 -2
  61. package/src/assets/web-panel/assets/Projects-CR7H59v3.js +1 -0
  62. package/src/assets/web-panel/assets/{Providers-o8QCimor.js → Providers-2ulom-76.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-z2W-zvhW.js → QrScannerModal-BwhO07b_.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-_yubhsna.js → QuickAsk-_Wg34OwF.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-CucgJwih.js → Recommend-D_jq6Svg.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-EzfIIRg1.js → RemoteSession-BlzvEfsa.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-_shttE67.js → Reputation-9CTXHfL4.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-DQA_S8-9.js → Row-DlCYCN-t.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-BOqWawXT.js → RssFeed-BvlInFCH.js} +3 -3
  70. package/src/assets/web-panel/assets/{Search-Dx1v2xOq.js → Search-CfaUzKuL.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-Bt4HHsT4.js → Security-bAWgLyve.js} +4 -4
  72. package/src/assets/web-panel/assets/{Services-sruHiQ-r.js → Services-C4LOGACW.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-CiBxvmOJ.js → Skeleton-Dd0Uwh3_.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-De9qKODU.js → Skills-ZYF1kYCU.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-B_6yn8Wp.js → Sla-DpsmIaEo.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-C2CafExS.js → SpeechSettings-BBXoJ4yc.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-Dhh3Qmb0.js → SyncSettings-SOnROi2Y.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-Mvo5mTWm.js → Tasks-HFA_ZlDk.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-D7WVTQQy.js → Templates-fsK-RCEc.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-7ur9Yfxd.js → Tenant-CuqYxamb.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-BgzrOA6k.js → Terminal-GKlI2R5F.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-Dco20pT1.js → TimelineRenderer-DMDMHLeY.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-hN6qBPag.js → Tokens-BoV60rh3.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-C4f_twAM.js → Trigger-CE344-Ws.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-Wf1SMypp.js → Trust-DENwgkVc.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-DUXSyg3N.js → UkeySign-FrcM7yfm.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-BvqsJaL0.js → VideoEditing-DAY9WaC2.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-CgAbcjKl.js → Wallet-BuUR5i82.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-DaLT0W3s.js → WebAuthn-nfSQuq85.js} +2 -2
  90. package/src/assets/web-panel/assets/{WorkflowEditor-CQqAXoaS.js → WorkflowEditor-DHhPOp9l.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-BhlohFTB.js → chat-C4nsLzYy.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-D7HqXIL8.js → colors-BwXH0Wjn.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-Bqk4FCLY.js → compact-item-uApFG30S.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-CEmWrWf0.js → createContext-BpyYs4fe.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-Bk6HGn3N.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-CDY0pFi2.js → hasIn-MXCLi00p.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-e9oCy7_4.js → index-1LxX2IwJ.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DEzL7s7P.js → index-61CBBrHE.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-D0nfNmbq.js → index-B0P1Z_oa.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BiLu-ImR.js → index-B7jojVc7.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CqK0J4Sj.js → index-BEGMfaOo.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-aBHlgMrq.js → index-BOhjapd5.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DPBoWNwq.js → index-BaBwXpAp.js} +1 -1
  104. package/src/assets/web-panel/assets/index-Bb1LPYdi.js +1 -0
  105. package/src/assets/web-panel/assets/{index-BxXFRLTZ.js → index-Btv--Nnt.js} +1 -1
  106. package/src/assets/web-panel/assets/index-C-FsTuFG.js +1 -0
  107. package/src/assets/web-panel/assets/{index-BxYO6nde.js → index-CF0bUOP4.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DGKRAO61.js → index-CNjUPfJP.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CkjgSHVz.js → index-CRmNdEk_.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CrsM-oiD.js → index-C_oOpXhP.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BNrvBWDS.js → index-ChUTKrOq.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CYcjOnDX.js → index-CiIpIYhs.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-C02yDu4f.js → index-CwVvk2i7.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DmKdCWq1.js → index-D3_tj06B.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CkqBoCiu.js → index-DE4W4vLO.js} +3 -3
  116. package/src/assets/web-panel/assets/{index-B8L3_-sG.js → index-DLxKx5_J.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Dwob5XoD.js → index-DTXi_gQh.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DuMt3ewl.js → index-Daco83me.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DpI1LqJX.js → index-DffWVpZv.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-lBAbMOzg.js → index-Dkncxel3.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DRcDWMwP.js → index-Dn12gJJU.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CVrwozwH.js → index-Dt-nq2eF.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-C3opQg47.js → index-Du01X9N9.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-o_lc3eww.js → index-DucLR6YX.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-Cur88hoN.js → index-Gz2rGWef.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-XErJQ1yF.js → index-IvgszJ3C.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BuKGuH_y.js → index-S80LLjdx.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Chxt0t-A.js → index-WKbnwbKa.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-1HBam9t1.js → index-XHBXtvqp.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BXRooi-O.js → index-nn22NSDK.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BHGOdvOQ.js → index-pCIAE2yS.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-Cf1ha8l0.js → index-pRpMLhMt.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-6f6n0KFR.js → index-pgHGBAoF.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BPmRkxeX.js → index-ugIUt5TL.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-C9mvnSii.js → index-xLGf7f9K.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-CIeEUxIN.js → initDefaultProps-C58CkKEo.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-IPIj1ZtP.js → motion-BLWPO2NV.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-BfSeXZ-f.js → move-BgrFMwYp.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-DX03-Xp4.js → mtc-parser-Cq2AuGzl.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-z9EannfX.js → omit-Bb-9L7if.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-DXKmRkqZ.js → pickAttrs-vLmOxYr1.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-k2HV7cIU.js → placementArrow-BNySU_dJ.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-bX7CsyWy.js → responsiveObserve-xnbwagnm.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-NskjQLbJ.js → slide-BccbY5Cn.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-B3IoG-Er.js → statusUtils-DOp9d2-w.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-DHv_UilX.js → styleChecker-Bu1w6ho9.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DEqGB5Ng.js → useFlexGapSupport-ZsUOrVdL.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-Bl9CbrqZ.js → useFs-C0zpzKtO.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-O-Ukv93M.js → usePersonalDataHub-DO1OdgXK.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-hGCHTaZt.js → vnode-jTIRyhR5.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-BWhIVeKQ.js → zoom-DKvS7-Qs.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/commands/agent.js +56 -20
  154. package/src/commands/ask.js +6 -4
  155. package/src/commands/batch.js +17 -12
  156. package/src/commands/eval.js +24 -8
  157. package/src/commands/team.js +28 -19
  158. package/src/data/changelog.json +26 -0
  159. package/src/harness/mcp-client.js +187 -26
  160. package/src/harness/prompt-compressor.js +2 -0
  161. package/src/lib/advisor-runtime.js +4 -2
  162. package/src/lib/agent-ipc-bus.js +2 -0
  163. package/src/lib/background-agent-keeper-client.js +3 -0
  164. package/src/lib/background-session-transport.js +21 -5
  165. package/src/lib/browser-automation.js +4 -0
  166. package/src/lib/cc-android-bridge.js +4 -0
  167. package/src/lib/chat-core.js +11 -9
  168. package/src/lib/cloud/cloud-client.js +10 -1
  169. package/src/lib/cowork-adapter.js +4 -3
  170. package/src/lib/decision-layer/providers.js +16 -11
  171. package/src/lib/decision-layer/runtime.js +180 -10
  172. package/src/lib/direct-model-usage.js +34 -0
  173. package/src/lib/evolution/agent-evolution-ingress.js +63 -7
  174. package/src/lib/evolution/evolution-evidence-artifact-adapter.js +10 -0
  175. package/src/lib/evolution/evolution-evidence-projector.js +46 -7
  176. package/src/lib/evolution/governed-hub-llm.js +31 -16
  177. package/src/lib/evolution/governed-hub-resolver.js +4 -0
  178. package/src/lib/evolution/governed-skill-synthesis-process-grader.js +4 -0
  179. package/src/lib/evolution/skill-decision-projection.js +211 -0
  180. package/src/lib/evolution/skill-retrieval-revocation-authority.js +17 -2
  181. package/src/lib/evomap-client.js +14 -2
  182. package/src/lib/formal-budget-authority.js +191 -59
  183. package/src/lib/formal-budget-contract.js +7 -13
  184. package/src/lib/formal-budget-errors.js +31 -0
  185. package/src/lib/formal-budget-lineage-registry.js +612 -0
  186. package/src/lib/formal-budget-provider-scope.js +143 -0
  187. package/src/lib/formal-budget-transport.js +235 -100
  188. package/src/lib/gateway-client-resilience.js +5 -0
  189. package/src/lib/hub-llm-client.js +25 -16
  190. package/src/lib/llm-connection-probe.js +17 -10
  191. package/src/lib/llm-providers.js +4 -1
  192. package/src/lib/model-failure-policy.js +2 -0
  193. package/src/lib/plugin-runtime/marketplace-network.js +9 -5
  194. package/src/lib/process-execution-broker/credential-agent.js +7 -2
  195. package/src/lib/process-execution-broker/credential-transport.js +4 -0
  196. package/src/lib/process-execution-broker/index.js +8 -0
  197. package/src/lib/provider-stream.js +28 -13
  198. package/src/lib/sandbox-egress-worker.js +3 -0
  199. package/src/lib/skill-loader.js +16 -0
  200. package/src/lib/stream-retry.js +2 -0
  201. package/src/lib/sub-agent-context.js +6 -3
  202. package/src/lib/web-fetch.js +2 -0
  203. package/src/lib/web-search.js +5 -0
  204. package/src/repl/agent-repl.js +86 -7
  205. package/src/runtime/agent-core.js +141 -22
  206. package/src/runtime/headless-runner.js +212 -22
  207. package/src/runtime/headless-stream.js +189 -25
  208. package/src/runtime/mcp-config.js +26 -17
  209. package/src/runtime/mcp-tool-search.js +44 -14
  210. package/src/assets/web-panel/assets/Projects-GJjItXIk.js +0 -1
  211. package/src/assets/web-panel/assets/devWarning-YPX_TU7w.js +0 -1
  212. package/src/assets/web-panel/assets/index-D53szVZQ.js +0 -1
  213. package/src/assets/web-panel/assets/index-Ub2nJbV2.js +0 -1
@@ -151,7 +151,9 @@ import {
151
151
  } from "../lib/session-host-snapshot.js";
152
152
  import { acquireSessionHostLease } from "../lib/session-host-lease.js";
153
153
  import {
154
+ normalizeSessionBudgetRootConfig,
154
155
  openProductionSessionBudgetRoot,
156
+ readProductionSessionBudget,
155
157
  sessionBudgetAdmissionError,
156
158
  } from "../lib/session-budget-production-root.js";
157
159
  import {
@@ -1441,6 +1443,7 @@ async function withStreamSessionHostLease(options, deps, streamCleanup, task) {
1441
1443
  let lease = null;
1442
1444
  let budgetRoot = null;
1443
1445
  let onLeaseAbort = null;
1446
+ let taskStarted = false;
1444
1447
  try {
1445
1448
  if (persist && typeof acquireHostLease === "function") {
1446
1449
  lease = acquireHostLease(sessionId, { hostKind: "headless-stream" });
@@ -1461,13 +1464,109 @@ async function withStreamSessionHostLease(options, deps, streamCleanup, task) {
1461
1464
  : lease.signal,
1462
1465
  }
1463
1466
  : options;
1467
+ const canReadCanonical =
1468
+ !hasInjectedSessionStore ||
1469
+ typeof deps.readVerifiedEvents === "function" ||
1470
+ typeof deps.readVerifiedProjection === "function";
1471
+ const budgetStore = deps.sessionBudgetStore;
1472
+ const sidecar =
1473
+ persist && (process.platform === "linux" || budgetStore)
1474
+ ? readProductionSessionBudget(sessionId, { store: budgetStore })
1475
+ : null;
1476
+ const needsBudgetAdmission =
1477
+ persist &&
1478
+ (!hasInjectedSessionStore ||
1479
+ options.sessionBudgetRoot?.enabled === true ||
1480
+ Boolean(budgetStore) ||
1481
+ Boolean(deps.openSessionBudget) ||
1482
+ Boolean(sidecar));
1483
+ let effectiveBudgetConfig = options.sessionBudgetRoot;
1484
+ if (needsBudgetAdmission) {
1485
+ const existing = (
1486
+ deps.sessionHasPersistedEvidence ||
1487
+ deps.sessionExists ||
1488
+ jsonlSessionHasPersistedEvidence
1489
+ )(sessionId);
1490
+ if (typeof existing !== "boolean") {
1491
+ throw Object.assign(
1492
+ new Error("stream session existence must be checked synchronously"),
1493
+ { code: "CC_SESSION_BUDGET_JSONL_REQUIRED" },
1494
+ );
1495
+ }
1496
+ if (existing && !canReadCanonical) {
1497
+ throw Object.assign(
1498
+ new Error("budgeted stream resume requires verified session events"),
1499
+ { code: "CC_SESSION_BUDGET_JSONL_REQUIRED" },
1500
+ );
1501
+ }
1502
+ const canonical = existing
1503
+ ? readSessionHostResumeState(sessionId, {
1504
+ sessionExists: () => true,
1505
+ readVerifiedEvents:
1506
+ deps.readVerifiedEvents || jsonlReadVerifiedEvents,
1507
+ ...(!hasInjectedSessionStore || deps.readVerifiedProjection
1508
+ ? {
1509
+ readVerifiedProjection:
1510
+ deps.readVerifiedProjection || jsonlReadVerifiedProjection,
1511
+ }
1512
+ : {}),
1513
+ })
1514
+ : null;
1515
+ if (canonical && !isVerifiedSessionHostSnapshot(canonical.snapshot)) {
1516
+ throw Object.assign(
1517
+ new Error("canonical stream session could not be verified"),
1518
+ { code: "CC_SESSION_HOST_SNAPSHOT_UNVERIFIED" },
1519
+ );
1520
+ }
1521
+ if (!canonical && sidecar) {
1522
+ throw Object.assign(
1523
+ new Error("budget sidecar has no canonical JSONL session"),
1524
+ { code: "CC_SESSION_BUDGET_JSONL_REQUIRED" },
1525
+ );
1526
+ }
1527
+ if (canonical) {
1528
+ const declared = canonical.sessionBudgetRoot;
1529
+ const requested = options.sessionBudgetRoot?.enabled
1530
+ ? normalizeSessionBudgetRootConfig(options.sessionBudgetRoot)
1531
+ : null;
1532
+ if (declared?.enabled) {
1533
+ if (!sidecar) {
1534
+ throw Object.assign(
1535
+ new Error(
1536
+ "budgeted stream session is missing its budget sidecar",
1537
+ ),
1538
+ { code: "CC_SESSION_BUDGET_SIDECAR_REQUIRED" },
1539
+ );
1540
+ }
1541
+ if (
1542
+ requested &&
1543
+ JSON.stringify(requested) !== JSON.stringify(declared)
1544
+ ) {
1545
+ throw Object.assign(
1546
+ new Error("stream budget does not match its JSONL declaration"),
1547
+ { code: "CC_SESSION_BUDGET_CONFIG_MISMATCH" },
1548
+ );
1549
+ }
1550
+ effectiveBudgetConfig = declared;
1551
+ } else if (requested || sidecar) {
1552
+ throw Object.assign(
1553
+ new Error("existing stream has no canonical budget declaration"),
1554
+ { code: "CC_SESSION_BUDGET_JSONL_REQUIRED" },
1555
+ );
1556
+ }
1557
+ }
1558
+ }
1559
+ scopedOptions = {
1560
+ ...scopedOptions,
1561
+ sessionBudgetRoot: effectiveBudgetConfig,
1562
+ };
1464
1563
  budgetRoot = openProductionSessionBudgetRoot(
1465
1564
  persist ? sessionId : null,
1466
- options.sessionBudgetRoot,
1565
+ effectiveBudgetConfig,
1467
1566
  {
1468
1567
  persist,
1469
1568
  signal: scopedOptions.signal || null,
1470
- table: options.sessionBudgetRoot?.table,
1569
+ table: effectiveBudgetConfig?.table,
1471
1570
  open: deps.openSessionBudget,
1472
1571
  store: deps.sessionBudgetStore,
1473
1572
  registry: deps.sessionBudgetRegistry,
@@ -1476,11 +1575,40 @@ async function withStreamSessionHostLease(options, deps, streamCleanup, task) {
1476
1575
  if (budgetRoot.enabled) {
1477
1576
  scopedOptions = { ...scopedOptions, ...budgetRoot.options };
1478
1577
  }
1578
+ taskStarted = true;
1479
1579
  return await task(scopedOptions, {
1480
1580
  ...deps,
1481
1581
  [STREAM_SESSION_ID]: sessionId,
1482
1582
  [STREAM_SESSION_HOST_LEASE]: lease,
1483
1583
  });
1584
+ } catch (error) {
1585
+ // Admission can write a lease or take the Linux budget-sidecar read lock
1586
+ // before the workspace runner installs its persistence boundary. Preserve
1587
+ // the lock's filesystem cause, but never reclassify an executing task.
1588
+ if (taskStarted) throw error;
1589
+ const persistence = projectSessionPersistenceFailure(
1590
+ createSessionPersistenceFailure(error, {
1591
+ sessionId,
1592
+ operation: "session-start",
1593
+ }),
1594
+ { phase: "before-model" },
1595
+ );
1596
+ if (!persistence) throw error;
1597
+ deps.writeOut(
1598
+ `${JSON.stringify({
1599
+ type: "result",
1600
+ subtype: "error_persistence",
1601
+ is_error: true,
1602
+ code: persistence.code,
1603
+ error: "Canonical stream admission failed",
1604
+ session_id: sessionId,
1605
+ persistence,
1606
+ })}\n`,
1607
+ );
1608
+ deps.writeErr(
1609
+ `${persistence.code}: canonical stream admission was refused\n`,
1610
+ );
1611
+ return { exitCode: 1, turns: 0, persistence };
1484
1612
  } finally {
1485
1613
  budgetRoot?.close?.();
1486
1614
  if (lease?.signal && onLeaseAbort) {
@@ -1914,7 +2042,29 @@ async function runAgentHeadlessStreamInWorkspace(
1914
2042
  };
1915
2043
  }
1916
2044
  }
1917
- } catch {
2045
+ } catch (error) {
2046
+ const persistence = projectSessionPersistenceFailure(
2047
+ createSessionPersistenceFailure(error, {
2048
+ sessionId,
2049
+ operation: "session-start",
2050
+ }),
2051
+ { phase: "before-model" },
2052
+ );
2053
+ if (persistence) {
2054
+ emit({
2055
+ type: "result",
2056
+ subtype: "error_persistence",
2057
+ is_error: true,
2058
+ code: persistence.code,
2059
+ error: "Canonical stream session preparation failed",
2060
+ session_id: sessionId,
2061
+ persistence,
2062
+ });
2063
+ writeErr(
2064
+ `${persistence.code}: canonical stream preparation was refused\n`,
2065
+ );
2066
+ return { exitCode: 1, turns: 0, persistence };
2067
+ }
1918
2068
  const code = "CC_SESSION_HOST_SNAPSHOT_UNVERIFIED";
1919
2069
  emit({
1920
2070
  type: "result",
@@ -1986,8 +2136,9 @@ async function runAgentHeadlessStreamInWorkspace(
1986
2136
  const { loadHooks, projectHookTrustNotice, attachAuthorityErrors } =
1987
2137
  await import("../lib/settings-hooks.cjs");
1988
2138
  const loaded = loadHooks({ cwd, settingsFile: options.settingsFile });
1989
- const { mergePluginHooks } =
1990
- await import("../lib/plugin-runtime/hooks.js");
2139
+ const { mergePluginHooks } = await import(
2140
+ "../lib/plugin-runtime/hooks.js"
2141
+ );
1991
2142
  const effectiveHooks = mergePluginHooks(
1992
2143
  attachAuthorityErrors(loaded.hooks, loaded.authorityErrors),
1993
2144
  { cwd },
@@ -2069,8 +2220,9 @@ async function runAgentHeadlessStreamInWorkspace(
2069
2220
  });
2070
2221
 
2071
2222
  if (managedSettings) {
2072
- const { assertManagedPermissionMode } =
2073
- await import("../lib/settings-loader.cjs");
2223
+ const { assertManagedPermissionMode } = await import(
2224
+ "../lib/settings-loader.cjs"
2225
+ );
2074
2226
  assertManagedPermissionMode(options.permissionMode, managedSettings);
2075
2227
  }
2076
2228
  const perm = resolvePermissionMode(options.permissionMode);
@@ -2909,8 +3061,9 @@ async function runAgentHeadlessStreamInWorkspace(
2909
3061
  : null;
2910
3062
  if (!instructionExcludes) {
2911
3063
  try {
2912
- const { readStringArraySetting } =
2913
- await import("../lib/settings-loader.cjs");
3064
+ const { readStringArraySetting } = await import(
3065
+ "../lib/settings-loader.cjs"
3066
+ );
2914
3067
  const fromSettings = readStringArraySetting("instructionExcludes", {
2915
3068
  cwd,
2916
3069
  settingsFile: options.settingsFile,
@@ -2975,8 +3128,9 @@ async function runAgentHeadlessStreamInWorkspace(
2975
3128
  // Best-effort; no-op when project memory is off or no hook is registered.
2976
3129
  if (settingsHooks && _loadedInstructions) {
2977
3130
  try {
2978
- const { runInstructionsLoadedHooks } =
2979
- await import("../lib/settings-hook-events.js");
3131
+ const { runInstructionsLoadedHooks } = await import(
3132
+ "../lib/settings-hook-events.js"
3133
+ );
2980
3134
  const ctx = (
2981
3135
  await runInstructionsLoadedHooks(settingsHooks, {
2982
3136
  files: _loadedInstructions.files,
@@ -3018,8 +3172,9 @@ async function runAgentHeadlessStreamInWorkspace(
3018
3172
  // settings.json SessionStart hooks → inject session context once (observe-only).
3019
3173
  if (settingsHooks) {
3020
3174
  try {
3021
- const { runSessionStartHooks } =
3022
- await import("../lib/settings-hook-events.js");
3175
+ const { runSessionStartHooks } = await import(
3176
+ "../lib/settings-hook-events.js"
3177
+ );
3023
3178
  const ctx = (
3024
3179
  await runSessionStartHooks(settingsHooks, {
3025
3180
  source: "startup",
@@ -3069,6 +3224,9 @@ async function runAgentHeadlessStreamInWorkspace(
3069
3224
  provider,
3070
3225
  model,
3071
3226
  observabilityScope: options.observabilityScope,
3227
+ ...(options.sessionBudgetRoot?.enabled === true
3228
+ ? { sessionBudgetRoot: options.sessionBudgetRoot }
3229
+ : {}),
3072
3230
  executionLocation: captureAmbientExecutionLocation({
3073
3231
  provider,
3074
3232
  model,
@@ -3453,8 +3611,9 @@ async function runAgentHeadlessStreamInWorkspace(
3453
3611
  // the single-prompt runner + the REPL /add-dir path. Best-effort.
3454
3612
  if (hostMcp?.mcpClient && additionalDirectories.length > 0) {
3455
3613
  try {
3456
- const { notifyMcpRootsChanged, workspaceRootDirs } =
3457
- await import("../repl/add-dir.js");
3614
+ const { notifyMcpRootsChanged, workspaceRootDirs } = await import(
3615
+ "../repl/add-dir.js"
3616
+ );
3458
3617
  notifyMcpRootsChanged(
3459
3618
  [hostMcp.mcpClient],
3460
3619
  workspaceRootDirs(options.cwd || process.cwd(), additionalDirectories),
@@ -4376,15 +4535,17 @@ async function runAgentHeadlessStreamInWorkspace(
4376
4535
  return compactionCallId;
4377
4536
  },
4378
4537
  };
4379
- const { resolveCliContextMemoryCutover } =
4380
- await import("../lib/context-memory-kernel/authority.js");
4538
+ const { resolveCliContextMemoryCutover } = await import(
4539
+ "../lib/context-memory-kernel/authority.js"
4540
+ );
4381
4541
  const cutover = resolveCliContextMemoryCutover({
4382
4542
  env: options.contextMemoryEnv || process.env,
4383
4543
  scopeKey: `cli:session:${sessionId}`,
4384
4544
  });
4385
4545
  if (cutover.canonical) {
4386
- const { compactLiveMessagesCanonical } =
4387
- await import("../lib/context-memory-kernel/live-compaction.js");
4546
+ const { compactLiveMessagesCanonical } = await import(
4547
+ "../lib/context-memory-kernel/live-compaction.js"
4548
+ );
4388
4549
  const canonical = await compactLiveMessagesCanonical(messages, {
4389
4550
  compressor: {
4390
4551
  maxTokens: Math.max(
@@ -4472,8 +4633,9 @@ async function runAgentHeadlessStreamInWorkspace(
4472
4633
  } catch (error) {
4473
4634
  if (isAbortError(error) || options.signal?.aborted) throw error;
4474
4635
  if (error?.runtimeLedgerPersistence === true) throw error;
4475
- const { getRejectedCompactionUsage } =
4476
- await import("../lib/context-memory-kernel/live-compaction.js");
4636
+ const { getRejectedCompactionUsage } = await import(
4637
+ "../lib/context-memory-kernel/live-compaction.js"
4638
+ );
4477
4639
  const rejectedUsage = getRejectedCompactionUsage(error);
4478
4640
  if (
4479
4641
  rejectedUsage &&
@@ -4901,8 +5063,9 @@ async function runAgentHeadlessStreamInWorkspace(
4901
5063
  // session can honour the user's standing preferences ("越用越聪明"
4902
5064
  // flywheel). Best-effort — a learning ledger must never break the chat.
4903
5065
  try {
4904
- const { appendFeedback } =
4905
- await import("../lib/pdh-feedback-ledger.js");
5066
+ const { appendFeedback } = await import(
5067
+ "../lib/pdh-feedback-ledger.js"
5068
+ );
4906
5069
  appendFeedback({ sessionId, turnId, kind, comment });
4907
5070
  } catch {
4908
5071
  /* persistence is best-effort */
@@ -5074,8 +5237,9 @@ async function runAgentHeadlessStreamInWorkspace(
5074
5237
  // settings.json UserPromptSubmit hooks. block → skip this turn; context → inject.
5075
5238
  if (settingsHooks) {
5076
5239
  try {
5077
- const { runUserPromptSubmitHooks } =
5078
- await import("../lib/settings-hook-events.js");
5240
+ const { runUserPromptSubmitHooks } = await import(
5241
+ "../lib/settings-hook-events.js"
5242
+ );
5079
5243
  const ups = await runUserPromptSubmitHooks(settingsHooks, {
5080
5244
  prompt: userContent,
5081
5245
  cwd,
@@ -712,8 +712,9 @@ export async function setupMcpFromConfig(servers, deps = {}) {
712
712
  if (typeof mcpClient.setReconnector === "function") {
713
713
  const baseCfg = cfg;
714
714
  mcpClient.setReconnector(name, async () => {
715
- const { ensureValidToken: reauth } =
716
- await import("../lib/mcp-oauth.js");
715
+ const { ensureValidToken: reauth } = await import(
716
+ "../lib/mcp-oauth.js"
717
+ );
717
718
  const fresh = await reauth(baseCfg.url, { forceRefresh: true });
718
719
  if (!fresh) return null;
719
720
  return {
@@ -1224,20 +1225,24 @@ export async function loadIdeMcp(opts = {}, deps = {}) {
1224
1225
  const out = await setupMcpFromConfig({ ide: cfg }, deps);
1225
1226
  // Hot reconnect: a window reload / extension update restarts the editor's
1226
1227
  // MCP server on a NEW port with a NEW token. Register a reconnector so a
1227
- // failed mcp__ide__* call re-scans the lockfiles mid-session and retries,
1228
- // instead of the IDE tools (and selection/diagnostics injection) silently
1229
- // dying for the rest of the run. Note the stale CHAINLESSCHAIN_IDE_PORT in
1228
+ // connection failure re-scans the lockfiles mid-session. An unknown tool
1229
+ // outcome is returned without replay; the next explicit call can use the
1230
+ // recovered bridge. Note the stale CHAINLESSCHAIN_IDE_PORT in
1230
1231
  // our env no longer matches any live lock, so discovery falls through to
1231
1232
  // the workspace scan — exactly the path that finds the restarted instance.
1232
1233
  if (out?.mcpClient?.setReconnector) {
1233
- out.mcpClient.setReconnector("ide", () => {
1234
- const fresh = discover({
1235
- cwd: opts.cwd,
1236
- env: opts.env,
1237
- force: opts.force === true,
1238
- });
1239
- return fresh ? toCfg(fresh) : null;
1240
- });
1234
+ out.mcpClient.setReconnector(
1235
+ "ide",
1236
+ () => {
1237
+ const fresh = discover({
1238
+ cwd: opts.cwd,
1239
+ env: opts.env,
1240
+ force: opts.force === true,
1241
+ });
1242
+ return fresh ? toCfg(fresh) : null;
1243
+ },
1244
+ { recoverUnknownOutcome: true },
1245
+ );
1241
1246
  }
1242
1247
  return out;
1243
1248
  }
@@ -1323,10 +1328,14 @@ export async function loadJetbrainsMcp(opts = {}, deps = {}) {
1323
1328
  // re-injects a fresh CHAINLESSCHAIN_JETBRAINS_MCP_URL into the next spawn —
1324
1329
  // though within one run the env is fixed, so this just re-validates it).
1325
1330
  if (out?.mcpClient?.setReconnector) {
1326
- out.mcpClient.setReconnector("idea", () => {
1327
- const fresh = discover({ env: opts.env });
1328
- return fresh ? toCfg(fresh) : null;
1329
- });
1331
+ out.mcpClient.setReconnector(
1332
+ "idea",
1333
+ () => {
1334
+ const fresh = discover({ env: opts.env });
1335
+ return fresh ? toCfg(fresh) : null;
1336
+ },
1337
+ { recoverUnknownOutcome: true },
1338
+ );
1330
1339
  }
1331
1340
  return out;
1332
1341
  }
@@ -416,7 +416,10 @@ export function maybeApplyToolSearch(mcp, opts = {}) {
416
416
  if (config.enabled === false) return null;
417
417
 
418
418
  const estimate = opts.estimate || defaultEstimateTokens;
419
- if (config.enabled === "auto") {
419
+ // Once a session has a deferred catalog, later connections must keep using
420
+ // it even when the compact stubs bring the current request below threshold.
421
+ // Rechecking only the shrunken request would expose late schemas in full.
422
+ if (config.enabled === "auto" && !mcp.toolSearchRegistry) {
420
423
  const window = getContextWindow(opts.model, opts.provider);
421
424
  let mcpTokens = 0;
422
425
  for (const def of mcp.extraToolDefinitions) {
@@ -472,10 +475,13 @@ function normalizeTerms(query) {
472
475
  */
473
476
  export function searchDeferredTools(registry, query, opts = {}) {
474
477
  const q = String(query || "").trim();
478
+ const configuredMaxResults = registry?.maxResults;
475
479
  const maxResults =
476
480
  Number.isInteger(opts.maxResults) && opts.maxResults > 0
477
481
  ? Math.min(opts.maxResults, 50)
478
- : registry?.maxResults || TOOL_SEARCH_DEFAULTS.maxResults;
482
+ : Number.isInteger(configuredMaxResults) && configuredMaxResults > 0
483
+ ? Math.min(configuredMaxResults, 50)
484
+ : TOOL_SEARCH_DEFAULTS.maxResults;
479
485
  const entries = new Map(
480
486
  [...(registry?.deferred || [])].filter(([, entry]) => entry.stale !== true),
481
487
  );
@@ -488,22 +494,31 @@ export function searchDeferredTools(registry, query, opts = {}) {
488
494
  .filter(Boolean);
489
495
  const results = [];
490
496
  const notFound = [];
497
+ const seen = new Set();
498
+ let omittedCount = 0;
491
499
  for (const w of wanted) {
500
+ let match = null;
492
501
  if (entries.has(w)) {
493
- results.push({ name: w, entry: entries.get(w) });
494
- continue;
495
- }
496
- // bare tool name → unique suffix match
497
- const matches = [...entries.keys()].filter(
498
- (k) => k.endsWith(`__${w}`) || entries.get(k).toolName === w,
499
- );
500
- if (matches.length === 1) {
501
- results.push({ name: matches[0], entry: entries.get(matches[0]) });
502
+ match = w;
502
503
  } else {
504
+ // bare tool name → unique suffix match
505
+ const matches = [...entries.keys()].filter(
506
+ (k) => k.endsWith(`__${w}`) || entries.get(k).toolName === w,
507
+ );
508
+ if (matches.length === 1) match = matches[0];
509
+ }
510
+ if (!match) {
503
511
  notFound.push(w);
512
+ } else if (!seen.has(match)) {
513
+ seen.add(match);
514
+ if (results.length < maxResults) {
515
+ results.push({ name: match, entry: entries.get(match) });
516
+ } else {
517
+ omittedCount += 1;
518
+ }
504
519
  }
505
520
  }
506
- return { mode: "select", results, notFound };
521
+ return { mode: "select", results, notFound, omittedCount };
507
522
  }
508
523
 
509
524
  const terms = normalizeTerms(q);
@@ -549,7 +564,18 @@ export function executeToolSearch(registry, args = {}) {
549
564
  'tool_search requires a "query" argument — use "select:<tool_name>" or keywords.',
550
565
  };
551
566
  }
552
- const { mode, results, notFound } = searchDeferredTools(registry, query, {
567
+ if (query.length > 8192) {
568
+ return {
569
+ error:
570
+ "tool_search query is too long; select fewer tool names or use shorter keywords.",
571
+ };
572
+ }
573
+ const {
574
+ mode,
575
+ results,
576
+ notFound,
577
+ omittedCount = 0,
578
+ } = searchDeferredTools(registry, query, {
553
579
  maxResults:
554
580
  typeof args.max_results === "number"
555
581
  ? Math.floor(args.max_results)
@@ -579,6 +605,7 @@ export function executeToolSearch(registry, args = {}) {
579
605
  tools,
580
606
  };
581
607
  if (notFound.length > 0) payload.notFound = notFound;
608
+ if (omittedCount > 0) payload.omittedCount = omittedCount;
582
609
  if (tools.length === 0) {
583
610
  payload.note =
584
611
  mode === "select"
@@ -590,7 +617,10 @@ export function executeToolSearch(registry, args = {}) {
590
617
  .slice(0, 100);
591
618
  } else {
592
619
  payload.note =
593
- "Schemas loaded — call these tools directly with arguments matching `parameters`.";
620
+ "Schemas loaded — call these tools directly with arguments matching `parameters`." +
621
+ (omittedCount > 0
622
+ ? " Some selected tools were omitted by max_results; select those tools in a separate search before calling them."
623
+ : "");
594
624
  }
595
625
  return payload;
596
626
  }
@@ -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-CkqBoCiu.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:W}=de();async function w(o,f,ye,ae=8e3){if(W){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}),J=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:W,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:J,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,W,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"),J=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(J,{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 We=we(Pe,[["render",Le],["__scopeId","data-v-019ac5aa"],["__file","/tmp/cc-web-panel-Phhog6/repo/packages/web-panel/src/views/Projects.vue"]]);export{We as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-CkqBoCiu.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-04BSIj_z.js";import{a0 as t}from"./index-CkqBoCiu.js";import"./vendor-Bn1JzzAn.js";import"./index-6f6n0KFR.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-DQA_S8-9.js";import{a0 as t}from"./index-CkqBoCiu.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-bX7CsyWy.js";import"./useFlexGapSupport-DEqGB5Ng.js";import"./styleChecker-DHv_UilX.js";import"./index-6f6n0KFR.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};