chainlesschain 0.166.100 → 0.166.101

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 (166) hide show
  1. package/package.json +2 -2
  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-Cd4iUOPt.js → AIOps-BjBS_29I.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton--ucr-zko.js → ActionButton-CUnnQUaj.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-DbejYMWk.js → Analytics-BqYZxgnY.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-CLgKxeGw.js → AppLayout-m8B886ka.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-CTT5BIL5.js → Artifacts-JEOxU3Ug.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DP-WBWe9.js → Audit-DAXS5c9J.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-B6VqheJk.js → BackgroundAgents-e3a9XHw3.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-VWJK5zim.js → Backup-D3Qmp68h.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-YGFO9RHd.js → BaseInput-C7CXyiUl.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-CVfydnCd.js → Chat-2AHlAGi8.js} +6 -6
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BICpB-qU.js → ChatBubbleRenderer-D3KsyCUV.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-Bd5vKRMk.js → Checkbox-YfBuQlBH.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-DHNgPHvg.js → Codegen-DCCQDfTL.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-CA2BYQ8T.js → Col-03i2WfrV.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-DnKJ-qpI.js → Community-CJQIpng6.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-C9BZ8t4r.js → Compact-CCtcQ2pq.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-ByyQ2FOl.js → Compliance-Vxl7ZszJ.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-rXTwXE_c.js → Cowork-DN-BwA8I.js} +2 -2
  22. package/src/assets/web-panel/assets/{Cron-BuW-HODy.js → Cron-Dc2Q46X7.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-OudNtbYW.js → Crosschain-CQCblsl-.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-BQ6BxYNN.js → DID-YYvqUR8C.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-Cz5HG8tz.js → Dashboard-Cafy3DZT.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-BzclHOVv.js → Dropdown-BOyYpIpv.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-CbJETFdy.js → EmailListRenderer-B7NYjc1j.js} +1 -1
  28. package/src/assets/web-panel/assets/{EvolutionSettings-Dx_pJG3d.js → EvolutionSettings-C5wfxztf.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-6JCS1MNg.js → FamilyGuardDashboard-aA7KnDGK.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-BrPkMYaf.js → Federation-DlgXUu1L.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-Bhc9pobs.js → FormItemContext-B5YsrLDg.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-BxOh07uQ.js → GenericCardRenderer-DaWojPFw.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-D_idoujr.js → Git-dkhh6Fx2.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-ZGfIRE-x.js → Governance-Cz6vmkjc.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference-DpAmcwbw.js → Inference-DWt0hbh8.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-D1S1UTgP.js → KnowledgeGraph-BZJ0Z-nL.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-2sc8V5XV.js → Logs-BaBBmL1A.js} +2 -2
  38. package/src/assets/web-panel/assets/MarkdownRenderer-C1yByobo.js +1 -0
  39. package/src/assets/web-panel/assets/{Marketplace-0xlFUKbe.js → Marketplace-ct8sgQ0s.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-D25eJLGm.js → McpTools-CXKCRGYQ.js} +3 -3
  41. package/src/assets/web-panel/assets/{Memory-BLRGd9hM.js → Memory-O7ZwlS6a.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-zpFINGzn.js → MobileBridge-By12C-eC.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileProjects-Cbyd-8kx.js → MobileProjects-Ba-EVdex.js} +1 -1
  44. package/src/assets/web-panel/assets/{Mtc-DgXgUlHc.js → Mtc-g-932zV2.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-DzcL-dKH.js → MtcAudit-BW8hB0ly.js} +4 -4
  46. package/src/assets/web-panel/assets/{Multisig-C3OrZ6VN.js → Multisig-zspLaMbT.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-Bqp_vWA7.js → NLProgramming-dJeUPDoq.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-Dyn45-Ht.js → Notes-C4msiRQL.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-CLjafGZr.js → NotificationSettings-MOCHM-qg.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-Bx8wMauC.js → OrderTableRenderer-CX0T66NM.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-5gr9hyLm.js → Organization-DOZurBfk.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-BRdU02hT.js → Overflow-qOT9BhUp.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-DIi7fzh6.js → P2P-BMoy7Eo4.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-BCbS1KpA.js → PdhVaultBrowser-ByyV1q-D.js} +3 -3
  55. package/src/assets/web-panel/assets/{Permissions-BjeP9VtA.js → Permissions-6Qyro4ye.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-y8PXOQUc.js → PersonalDataHub-DR3DRNSX.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-B0fL5uxY.js → Pipeline-Cr6TTdud.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-C8jCDn8Z.js → Privacy-B70otG0l.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-B_L6Dc6V.js → ProjectInit-BHCqxoSk.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-Bb1CYbZh.js → ProjectSettings-B80GZpZk.js} +2 -2
  61. package/src/assets/web-panel/assets/Projects-cq-b9-fQ.js +1 -0
  62. package/src/assets/web-panel/assets/{Providers-mBSTDJ0E.js → Providers-dsVTimHa.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-CHxgalvt.js → QrScannerModal-DRJ8YepZ.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-DI9KIMEV.js → QuickAsk-BSXdEjIB.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-B5_zW1JH.js → Recommend-CQLJGyKC.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-BkH4bmM5.js → RemoteSession-BF9WUFVZ.js} +2 -2
  67. package/src/assets/web-panel/assets/{Reputation-DJrAqwAq.js → Reputation-Cy9o5tvW.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-xZ3MAM34.js → Row-BP346_3b.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-CCsrLLiu.js → RssFeed-BKulxXf3.js} +3 -3
  70. package/src/assets/web-panel/assets/{Search-CTCRKvaP.js → Search-EemQj2Dv.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-D7joyfp2.js → Security-DcWPAwwk.js} +4 -4
  72. package/src/assets/web-panel/assets/{Services-oqHPmTG4.js → Services-Bltqciay.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-BR_32bTG.js → Skeleton-BwRyOGY8.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-BoRz9mln.js → Skills-D98qlvpJ.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-UAGUHZ9b.js → Sla-BUTtBMY0.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-DeP_rMgv.js → SpeechSettings-C7kcY_98.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-CSzzMmeA.js → SyncSettings-Bsk6lKvT.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-CcqOLsLB.js → Tasks-DvSrtz0P.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-cDbkGSDG.js → Templates-BUM6LwPs.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-DmOy58cq.js → Tenant-D9TkOm7z.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-CsRZH5vr.js → Terminal-CP8ZVErN.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-BgJrk6HG.js → TimelineRenderer-V3SoKZ1T.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-CCQglKDE.js → Tokens-CCRlUTOA.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-t-Gt3oBY.js → Trigger-CznUcPme.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-DQgu2kI0.js → Trust-D1GIk_NF.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-Cod2WUGj.js → UkeySign-DHtvtyC-.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-SGN5zaVK.js → VideoEditing-CVxdaJIq.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-CnLEL-LD.js → Wallet-D221OjyE.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-C2keUpD6.js → WebAuthn-Cw0-ESsq.js} +2 -2
  90. package/src/assets/web-panel/assets/{WorkflowEditor-B1GvrwWJ.js → WorkflowEditor-ZYScrBx3.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-1E9_P_qY.js → chat-BU0e1obR.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-DuU6Os4q.js → colors-gzYweuha.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-C5NfOAcM.js → compact-item-ChAXal_k.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-D4Fxz9qQ.js → createContext-of3FolD7.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-Pa13TVrO.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-C6C49iFk.js → hasIn-4PsK_Kx8.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DP2DCKD-.js → index-1dzYRBbg.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DPzunJER.js → index-B5L7zddz.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BBVqlelF.js → index-BOeX7BzS.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-Bk-paNL3.js → index-BdxRVNPY.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CJS6GTpv.js → index-BfI4dXbi.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BlHkc48f.js → index-Bftq5rJR.js} +1 -1
  103. package/src/assets/web-panel/assets/index-BhQg-v6V.js +1 -0
  104. package/src/assets/web-panel/assets/{index-HQXFl8fh.js → index-By-pper5.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-cnDfwWU5.js → index-CCLsbul3.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DSypQU1h.js → index-CGFL59q4.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B-bb-R99.js → index-CHv_63Cp.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C7mh6xlu.js → index-CO2owKe0.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-gh11zJ9h.js → index-CeEE_SGZ.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BsH8mFp4.js → index-Cn1clrxx.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-C2nO02uW.js → index-Cx4Z6nUl.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BYg1dtne.js → index-CxzBcXOa.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-AO6iDCSL.js → index-CyDQNprx.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Dh-vezHe.js → index-D-Zss5KL.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BULggEX6.js → index-D1PGrfHE.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-bW6vfpLH.js → index-DDYj14Q4.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-B5lzRoHp.js → index-DEB5fQqG.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CXb8gEWh.js → index-DEXBckNR.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BZKRZYTX.js → index-DEzjUgkl.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CpiOzt7U.js → index-DJVrzXtk.js} +1 -1
  121. package/src/assets/web-panel/assets/index-DUD5o-vW.js +1 -0
  122. package/src/assets/web-panel/assets/{index-jFg3CPlQ.js → index-DZ0oKtBg.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DZgT7pH-.js → index-D_5LTPMH.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CXn-e3ki.js → index-D_9k680X.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DFK6PTGJ.js → index-D_ialOHx.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BmvU4Tp_.js → index-DjRAIRX7.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-Bu6qMjf4.js → index-Djfgsjfy.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CDVwN9Sv.js → index-DsoV9rzn.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DpaGe-dr.js → index-Dy0ojH6G.js} +3 -3
  130. package/src/assets/web-panel/assets/{index-CQJoh5rw.js → index-E8oDMSAo.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BU5mPkNX.js → index-Ef5YkVAn.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D1TXgNPA.js → index-Wr91cnWr.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BVE2wCeb.js → index-cFkMIx1x.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-B_ON9La1.js → index-wo0De0iG.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-lNmDaf3J.js → index-yMf7zmWv.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-3DSfnIpD.js → initDefaultProps-D0Bx6pgr.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-DxGLmgA0.js → motion-BnLuJqJ5.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-DrlLG6m5.js → move-Bxpq9xgR.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-BITbrJSb.js → mtc-parser-BdmrNhOs.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-D7k5vIbk.js → omit-tjJD34BZ.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-BJSvYFWo.js → pickAttrs-CMFzLt7b.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-Bf4to1jA.js → placementArrow-BZf6O3cd.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-BXzeyzTa.js → responsiveObserve-DFDLazsV.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-DLzNUNdj.js → slide-CMbTvp4Y.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-wBBnrRm_.js → statusUtils-FOan8MI7.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-BnmJzXNr.js → styleChecker-DTABspd4.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DrN8MrJb.js → useFlexGapSupport-CNHXWBpY.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-dnkYGkjY.js → useFs-5K-c_RoL.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-k_xkv7-k.js → usePersonalDataHub-Di0hL4G-.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-B-v8PXpK.js → vnode-DTyDv4ja.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-Coue8wAK.js → zoom-ontRt8ft.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/commands/eval.js +11 -8
  154. package/src/data/changelog.json +13 -0
  155. package/src/harness/provider-backed-compaction.js +13 -5
  156. package/src/lib/context-memory-kernel/live-compaction.js +142 -61
  157. package/src/lib/formal-budget-authority.js +533 -0
  158. package/src/lib/formal-budget-contract.js +609 -0
  159. package/src/lib/formal-budget-transport.js +345 -0
  160. package/src/runtime/agent-core.js +175 -12
  161. package/src/runtime/headless-stream.js +136 -4
  162. package/src/assets/web-panel/assets/MarkdownRenderer-575jjYE6.js +0 -1
  163. package/src/assets/web-panel/assets/Projects-CUSV10Cn.js +0 -1
  164. package/src/assets/web-panel/assets/devWarning-zDWbYMr7.js +0 -1
  165. package/src/assets/web-panel/assets/index-BPBsZZnT.js +0 -1
  166. package/src/assets/web-panel/assets/index-CtGQDg7m.js +0 -1
@@ -3782,7 +3782,13 @@ async function runAgentHeadlessStreamInWorkspace(
3782
3782
  ? (event) => {
3783
3783
  try {
3784
3784
  if (event.type === "token-usage") {
3785
- store.appendTokenUsage(sessionId, projectRuntimeTokenUsage(event));
3785
+ requireSynchronousRecoveryResult(
3786
+ store.appendTokenUsage(
3787
+ sessionId,
3788
+ projectRuntimeTokenUsage(event),
3789
+ ),
3790
+ "appendTokenUsage",
3791
+ );
3786
3792
  return;
3787
3793
  }
3788
3794
  const outcome =
@@ -4294,6 +4300,44 @@ async function runAgentHeadlessStreamInWorkspace(
4294
4300
  let usageUnknownEvent;
4295
4301
  const compactionCallId = `compact-${++slashRequestSeq}`;
4296
4302
  let compactionProviderStarted = false;
4303
+ let compatibilityResult = null;
4304
+ let settledCompactionUsage = null;
4305
+ let costExceeded = false;
4306
+ const settleCompactionUsage = (event) => {
4307
+ if (settledCompactionUsage) return;
4308
+ if (!compactionProviderStarted || event?.callId !== compactionCallId) {
4309
+ throw new Error("compaction usage does not match its provider call");
4310
+ }
4311
+ const projected = projectRuntimeTokenUsage({
4312
+ ...event,
4313
+ source: "semantic-compaction",
4314
+ });
4315
+ try {
4316
+ persistUsageEvent?.({ type: "token-usage", ...projected });
4317
+ requireSynchronousRecoveryResult(
4318
+ recordSessionBudgetUsage(
4319
+ options.sessionBudget,
4320
+ projected,
4321
+ "headless semantic compaction usage settlement",
4322
+ ),
4323
+ "recordUsage",
4324
+ );
4325
+ } catch (error) {
4326
+ // A completed provider call must not be reclassified or replayed
4327
+ // when its accounting write fails.
4328
+ throw markRuntimeLedgerPersistenceError(error);
4329
+ }
4330
+ settledCompactionUsage = Object.freeze({
4331
+ ...projected,
4332
+ usage: Object.freeze(projected.usage),
4333
+ ledgerSettled: typeof persistUsageEvent === "function",
4334
+ });
4335
+ emit({ type: "token_usage", ...projected });
4336
+ if (costBudget) {
4337
+ costBudget.add(projected);
4338
+ costExceeded = costBudget.exceeded();
4339
+ }
4340
+ };
4297
4341
  try {
4298
4342
  const providerCompactionOptions = {
4299
4343
  ...(evolutionIngress === null ? {} : { evolutionIngress }),
@@ -4340,7 +4384,6 @@ async function runAgentHeadlessStreamInWorkspace(
4340
4384
  if (cutover.canonical) {
4341
4385
  const { compactLiveMessagesCanonical } =
4342
4386
  await import("../lib/context-memory-kernel/live-compaction.js");
4343
- let compatibilityResult = null;
4344
4387
  const canonical = await compactLiveMessagesCanonical(messages, {
4345
4388
  compressor: {
4346
4389
  maxTokens: Math.max(
@@ -4352,6 +4395,23 @@ async function runAgentHeadlessStreamInWorkspace(
4352
4395
  dropped,
4353
4396
  providerCompactionOptions,
4354
4397
  );
4398
+ if (
4399
+ compatibilityResult.usageEvent &&
4400
+ !compatibilityResult.usageUnknownEvent
4401
+ ) {
4402
+ settleCompactionUsage(compatibilityResult.usageEvent);
4403
+ const settledStats = { ...compatibilityResult.stats };
4404
+ if (settledCompactionUsage.ledgerSettled) {
4405
+ settledStats.summaryCallId = compactionCallId;
4406
+ settledStats.summaryUsageLedgerSettled = true;
4407
+ } else {
4408
+ // Ordinary nonpersistent runs have no durable ledger to
4409
+ // attest. Keep their known usage without inventing one.
4410
+ delete settledStats.summaryCallId;
4411
+ delete settledStats.summaryUsageLedgerSettled;
4412
+ }
4413
+ return { ...compatibilityResult, stats: settledStats };
4414
+ }
4355
4415
  return compatibilityResult;
4356
4416
  },
4357
4417
  },
@@ -4411,6 +4471,63 @@ async function runAgentHeadlessStreamInWorkspace(
4411
4471
  } catch (error) {
4412
4472
  if (isAbortError(error) || options.signal?.aborted) throw error;
4413
4473
  if (error?.runtimeLedgerPersistence === true) throw error;
4474
+ const { getRejectedCompactionUsage } =
4475
+ await import("../lib/context-memory-kernel/live-compaction.js");
4476
+ const rejectedUsage = getRejectedCompactionUsage(error);
4477
+ if (
4478
+ rejectedUsage &&
4479
+ settledCompactionUsage &&
4480
+ settledCompactionUsage.callId === compactionCallId &&
4481
+ (!rejectedUsage.callId ||
4482
+ rejectedUsage.callId === compactionCallId) &&
4483
+ (!rejectedUsage.receipt.callId ||
4484
+ rejectedUsage.receipt.callId === compactionCallId) &&
4485
+ rejectedUsage.provider === settledCompactionUsage.provider &&
4486
+ rejectedUsage.model === settledCompactionUsage.model &&
4487
+ JSON.stringify(rejectedUsage.usage) ===
4488
+ JSON.stringify(settledCompactionUsage.usage)
4489
+ ) {
4490
+ emit({
4491
+ type: "compaction-degraded",
4492
+ code: error.code,
4493
+ reason: "canonical_compaction_plan_rejected",
4494
+ summaryMode: "none",
4495
+ });
4496
+ if (costExceeded) {
4497
+ sawError = true;
4498
+ emit({
4499
+ type: "cost_budget_exhausted",
4500
+ limit_usd: options.maxCostUsd,
4501
+ spent_usd: costBudget.spentUsd,
4502
+ session_id: sessionId,
4503
+ turn: turns,
4504
+ });
4505
+ break;
4506
+ }
4507
+ continue;
4508
+ }
4509
+ if (settledCompactionUsage) {
4510
+ // Only a kernel-owned precommit rejection permits continuing. A
4511
+ // commit failure may have changed durable state, but cannot erase
4512
+ // the provider usage that this host already settled.
4513
+ emit({
4514
+ type: "compaction-degraded",
4515
+ code: error.code,
4516
+ reason: "canonical_compaction_settlement_failed",
4517
+ summaryMode: "none",
4518
+ });
4519
+ emit({
4520
+ type: "result",
4521
+ subtype: "error_compaction_settlement",
4522
+ is_error: true,
4523
+ code: error.code || "CC_COMPACTION_SETTLEMENT_FAILED",
4524
+ error:
4525
+ "Compaction settlement failed; the paid compaction is not retried",
4526
+ session_id: sessionId,
4527
+ });
4528
+ sawError = true;
4529
+ break;
4530
+ }
4414
4531
  if (error?.code === AGENT_EVOLUTION_INGRESS_FAILED_CODE) {
4415
4532
  evolutionIngressFailed = true;
4416
4533
  sawError = true;
@@ -4431,6 +4548,22 @@ async function runAgentHeadlessStreamInWorkspace(
4431
4548
  "headless semantic compaction",
4432
4549
  );
4433
4550
  }
4551
+ emit({
4552
+ ...event,
4553
+ type: "compaction_usage_unknown",
4554
+ usage_outcome: "unknown",
4555
+ });
4556
+ emit({
4557
+ type: "result",
4558
+ subtype: "error_compaction_usage_unknown",
4559
+ is_error: true,
4560
+ code: "CC_COMPACTION_USAGE_UNKNOWN",
4561
+ error:
4562
+ "Compaction provider usage is unknown; the paid compaction is not retried",
4563
+ session_id: sessionId,
4564
+ });
4565
+ sawError = true;
4566
+ break;
4434
4567
  }
4435
4568
  if (error?.code === AGENT_EVOLUTION_INGRESS_FAILED_CODE) {
4436
4569
  emit({
@@ -4487,8 +4620,7 @@ async function runAgentHeadlessStreamInWorkspace(
4487
4620
  sawError = true;
4488
4621
  break;
4489
4622
  }
4490
- let costExceeded = false;
4491
- if (usageEvent) {
4623
+ if (usageEvent && !settledCompactionUsage) {
4492
4624
  const event = {
4493
4625
  type: "token-usage",
4494
4626
  callId: compactionCallId,
@@ -1 +0,0 @@
1
- import{P as c,J as d,b as s}from"./vendor-Bn1JzzAn.js";import{r as a}from"./markdown-Yo_c6Krv.js";import{_ as p}from"./index-DpaGe-dr.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=s(()=>a(e.content||"")),n={props:e,rendered:r,computed:s,get renderMarkdown(){return a}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return c(),d("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=p(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-dOhDed/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-DpaGe-dr.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-dOhDed/repo/packages/web-panel/src/views/Projects.vue"]]);export{We as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-DpaGe-dr.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-CA2BYQ8T.js";import{a0 as t}from"./index-DpaGe-dr.js";import"./vendor-Bn1JzzAn.js";import"./index-B-bb-R99.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-xZ3MAM34.js";import{a0 as t}from"./index-DpaGe-dr.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-BXzeyzTa.js";import"./useFlexGapSupport-DrN8MrJb.js";import"./styleChecker-BnmJzXNr.js";import"./index-B-bb-R99.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};