chainlesschain 0.166.128 → 0.166.130

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 (177) hide show
  1. package/README.md +24 -4
  2. package/package.json +1 -1
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/assets/{AIOps-BmGA5zXX.js → AIOps-o-rFKEYL.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-B7WXwoF0.js → ActionButton-Dzv1ReHF.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-IvJG43B5.js → Analytics-Bt7H_jrh.js} +3 -3
  8. package/src/assets/web-panel/assets/{AppLayout-DWY017_e.js → AppLayout-CgynsRFP.js} +5 -5
  9. package/src/assets/web-panel/assets/Artifacts-gghOGDyE.js +1 -0
  10. package/src/assets/web-panel/assets/{Audit-CD9sTnBN.js → Audit-DBXn-AZ6.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-J6gg5z0U.js → BackgroundAgents--dxPftKa.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-D7ik3lse.js → Backup-D9Zf_2tH.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-MrDd5zcz.js → BaseInput-DDTOjovq.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-DbxRqGiK.js → Chat-2ETqdBLn.js} +6 -6
  15. package/src/assets/web-panel/assets/ChatBubbleRenderer-DSg2Xs8G.js +1 -0
  16. package/src/assets/web-panel/assets/{Checkbox-CditB77B.js → Checkbox-B5uzaLLP.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-Ds0UZWZG.js → Codegen-4ieEEIwt.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-CZlj1XI2.js → Col-D3I2kUGu.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-j4B2SoT6.js → Community-DeYxFMJb.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-BuKQutaO.js → Compact-5GigOmb8.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-DAgDyS-p.js → Compliance-DLVjbVUh.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-DX2-I6V3.js → Cowork-DfUKa0T5.js} +3 -3
  23. package/src/assets/web-panel/assets/{Cron-dJpc-FxX.js → Cron-_RpktpO5.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-7m8euM3v.js → Crosschain-7x6xdbwH.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-CLoYoCe1.js → DID-ccVhToC1.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-DR1rRMb7.js → Dashboard-DhygcaoK.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-BsKhCfvH.js → Dropdown-DFplwXK7.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-BAGexzJu.js → EmailListRenderer-Bm01soCN.js} +1 -1
  29. package/src/assets/web-panel/assets/EvolutionSettings-C4v--DkD.js +1 -0
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BIpueefy.js → FamilyGuardDashboard-ChQXDBA3.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-BluNep6d.js → Federation-C0yomE-M.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-CerdM3am.js → FormItemContext-DtT3ZEZK.js} +1 -1
  33. package/src/assets/web-panel/assets/GenericCardRenderer-DgITtFRv.js +1 -0
  34. package/src/assets/web-panel/assets/{Git-CEE0cGmf.js → Git-CCY42R8S.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-Bc-XNDhM.js → Governance-N66Bwvqg.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-CiBzXyZ-.js → Inference-BkbPuR_2.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-CV2IiyuN.js → KnowledgeGraph-B3PibXdA.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-fbQYKuSz.js → Logs-CUtNB_N6.js} +2 -2
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-B73ZyMRI.js → MarkdownRenderer-D-V4dOe3.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-C5utdpxZ.js → Marketplace-DLNJb6Nr.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-CPE4SaF3.js → McpTools-2zGjJb5K.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-DTFDszzk.js → Memory-9rNZ1EvR.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DxqPmTzP.js → MobileBridge-Cw7sAAgn.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-CwcK8l2y.js → MobileProjects-8XACrqqy.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-DrjECLGO.js → Mtc-mg02JNy-.js} +4 -4
  46. package/src/assets/web-panel/assets/{MtcAudit-4IURCa-3.js → MtcAudit-B1Vkhj2l.js} +5 -5
  47. package/src/assets/web-panel/assets/{Multisig-CggLV1Cp.js → Multisig-BQEeA7GG.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-DkOQJT73.js → NLProgramming-BIbkjZV3.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-Dodcva6s.js → Notes-DIwhkZNY.js} +3 -3
  50. package/src/assets/web-panel/assets/{NotificationSettings-CQ3HeTs6.js → NotificationSettings-Cj9175ce.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-pT2nzmIO.js → OrderTableRenderer-IfNpXT2R.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-B6HFsIfU.js → Organization-DPFp6G9o.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-G9dju55N.js → Overflow-ky9UfGv4.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-C1BCE155.js → P2P-tXck8GLq.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-BFAxXn5D.js → PdhVaultBrowser-DSvpQl9k.js} +3 -3
  56. package/src/assets/web-panel/assets/{Permissions-DWg7cw9Q.js → Permissions-CKPkdLj-.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BQxuOQOO.js → PersonalDataHub-DnqXc12l.js} +4 -4
  58. package/src/assets/web-panel/assets/{Pipeline-C3Gse9Ne.js → Pipeline-BKjFU_kd.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-Dcsjx6Oi.js → Privacy-ChC-J5Tn.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-DeYlnXJQ.js → ProjectInit-ByFZG9sY.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-D7kbZ_K7.js → ProjectSettings-Bbv1Kiw-.js} +2 -2
  62. package/src/assets/web-panel/assets/{Projects-C5m3NGzM.js → Projects-QYyGW31-.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-oT6jy83z.js → Providers-CJLnWw0r.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-NZ11GEBa.js → QrScannerModal-er_HkLCI.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-CtQU4Tx0.js → QuickAsk-DoXU0np9.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-3CoXYu3O.js → Recommend-DCo_vuaf.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-C2d4LzBM.js → RemoteSession-CLuL925Z.js} +2 -2
  68. package/src/assets/web-panel/assets/{Reputation-WZQHrGwl.js → Reputation-CNNCA_-M.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-ChiqY7Hg.js → Row-Vu4j631i.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-Cjwl2Kum.js → RssFeed-C18B4xiy.js} +3 -3
  71. package/src/assets/web-panel/assets/{Search-DRDMZxTF.js → Search-DxiqccE2.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-D0y4LlQ4.js → Security-Droe_hHI.js} +3 -3
  73. package/src/assets/web-panel/assets/{Services-ChpkqWm0.js → Services-CwmmyXzq.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-D3WGZ8yO.js → Skeleton-CrFs6rUL.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-Bv_7HaUW.js → Skills-Dp-d2miK.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-crZMKyX0.js → Sla-2DFXVbK4.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-ByWn5XDZ.js → SpeechSettings-Cdd9lCoy.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings--R55vxvj.js → SyncSettings-CxQhcYSk.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-BZA_Via_.js → Tasks-BHWVRfXx.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-9eJ9yY8Q.js → Templates-DNFk3a5_.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-CfWX2jqj.js → Tenant-B6X6dPo8.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-CUXUF4kL.js → Terminal-BuUNoLGM.js} +2 -2
  83. package/src/assets/web-panel/assets/TimelineRenderer-DThrBYj8.js +1 -0
  84. package/src/assets/web-panel/assets/{Tokens-CvyrdLH6.js → Tokens-CA_u4Blu.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-MNRl_YNr.js → Trigger-CXrW4Nry.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-BHOXK-Mp.js → Trust-DHcLpNy3.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-Bz1oZNyQ.js → UkeySign-B_fni4C2.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-DlqmXyZv.js → VideoEditing-g9nf2EhS.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-Dg1rnqEG.js → Wallet-C8pOjIve.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-DJtGeaOk.js → WebAuthn-BaKNjxZt.js} +3 -3
  91. package/src/assets/web-panel/assets/{WorkflowEditor-DJPubjX5.js → WorkflowEditor-CX030Wb1.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-BWweDuIV.js → chat-BpJsXlTK.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-BX5ViADF.js → colors-CUNg0-fh.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-Df8MLbXp.js → compact-item-C3tFHnhu.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-C0FDTwdV.js → createContext-B8rTvO61.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-B4_IVU_n.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-PpL6GdNk.js → hasIn-CU6RIciB.js} +1 -1
  98. package/src/assets/web-panel/assets/index--6BUI55w.js +1 -0
  99. package/src/assets/web-panel/assets/{index-DGLbojjx.js → index-111hR8WZ.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BF0ERucU.js → index-1L0tt7G2.js} +1 -1
  101. package/src/assets/web-panel/assets/index-5Q1bepcM.js +1 -0
  102. package/src/assets/web-panel/assets/{index-DwZkBGXd.js → index-6EwPIfXu.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-C0PqPK-8.js → index-B10Ia2KL.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-FAZH69my.js → index-B1SLBLli.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BWSCphaT.js → index-B8_VQAav.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-itNn6pW1.js → index-BG4zuFf0.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-iif2A1eL.js → index-BJjEAoDb.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DFtzEEYe.js → index-BMuPJra-.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-B982oUKN.js → index-BOCjph-k.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-B8-pSyP7.js → index-BOlAutGy.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-C8wl7Ica.js → index-BPWJw4Ji.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-UXM5vpt4.js → index-BpBaOWmV.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-7VyVOEf7.js → index-BzhobTgZ.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-R0LQ3fgq.js → index-CDlHvQtw.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-ChV82mzs.js → index-CEIoRm_c.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-B3K1uZ7R.js → index-CLQjdKmE.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-B4UxFB2N.js → index-CPF7Vqri.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DddQd0_V.js → index-CPmgKQcl.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CxY_U5RT.js → index-CcpMHPWd.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-D5Ei75Wt.js → index-Cyksnofp.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DxJqyIP8.js → index-CyyhilXV.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-P1ERNJla.js → index-D4njcYFw.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Cj00JSqq.js → index-Dc9pcin6.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-Cf86RSQk.js → index-DfAC55QA.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DBzaRg4E.js → index-DgNCfwvg.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-NdEUFm32.js → index-DvfhIBNZ.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-Beh1kLwx.js → index-Hbzd9WeI.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-D_6XIMVV.js → index-IiS7WoUl.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-C2JU-gdS.js → index-K2Uqqkr1.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Dy8K2laU.js → index-KgR1f2Gq.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-C9FOwTgX.js → index-X6e0cGRU.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BeFhy4BX.js → index-Xa6TlaD7.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-Cm7vZvA3.js → index-YczWc2_0.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BMIEWinN.js → index-h_ANnbR8.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CmMzB4C-.js → index-k7QsBwyo.js} +3 -3
  136. package/src/assets/web-panel/assets/{index-C9N1u8jV.js → index-lo9rgpyj.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-DeMthvi4.js → initDefaultProps-FI8D7E2x.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-_7kbkzE0.js → motion-B1hpJYSD.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-gCI04pLw.js → move-Vl1vUReW.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-D5UWHv2U.js → mtc-parser-6Cu2aFME.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-CDCZcqeS.js → omit-VRKL8iSO.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-DGMDLi3S.js → pickAttrs-DZfWsOe0.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-C-3vC1Vh.js → placementArrow-qmcOUc4W.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-vdoYucvi.js → responsiveObserve-BLB6SsSw.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-B62FhgyZ.js → slide-41jdYeSH.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-DCLlfnym.js → statusUtils-Yn8OQ5ey.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-CGvQ4LRR.js → styleChecker-4CEwz9Zd.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-BqkGoKwe.js → useFlexGapSupport-BClv53kR.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-Bkr_nU3q.js → useFs-Bugo8HuF.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-CYxMIUEq.js → usePersonalDataHub-B-q2ElB0.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-sAbcY1FX.js → vnode-ejVeFJ0x.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-Dm2pLrXi.js → zoom-DM1y_KKP.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/constants.js +1 -1
  155. package/src/data/changelog.json +26 -0
  156. package/src/lib/codex-app-server-adapter.js +36 -22
  157. package/src/lib/codex-app-server-support.js +91 -0
  158. package/src/lib/coding-change-review-context.js +258 -0
  159. package/src/lib/coding-task-guidance.js +3 -0
  160. package/src/lib/context-memory-kernel/provider-context.js +22 -12
  161. package/src/lib/goal-assess.js +4 -1
  162. package/src/lib/goal-check-evidence.js +77 -9
  163. package/src/lib/goal-model-call.js +107 -0
  164. package/src/lib/goal-workspace-evidence.js +299 -0
  165. package/src/lib/llm-onboarding-catalog.json +1 -1
  166. package/src/lib/llm-providers.js +1 -0
  167. package/src/lib/task-model-selector.js +1 -1
  168. package/src/runtime/agent-core.js +152 -41
  169. package/src/runtime/headless-runner.js +201 -107
  170. package/src/assets/web-panel/assets/Artifacts-BOyohM_-.js +0 -1
  171. package/src/assets/web-panel/assets/ChatBubbleRenderer-DbeJAwMg.js +0 -1
  172. package/src/assets/web-panel/assets/EvolutionSettings-BqYYmC01.js +0 -1
  173. package/src/assets/web-panel/assets/GenericCardRenderer-DXh4tOjU.js +0 -1
  174. package/src/assets/web-panel/assets/TimelineRenderer-77y9bkYN.js +0 -1
  175. package/src/assets/web-panel/assets/devWarning-BgM5vq1s.js +0 -1
  176. package/src/assets/web-panel/assets/index-Bl-HTXWn.js +0 -1
  177. package/src/assets/web-panel/assets/index-Cxf0YfM5.js +0 -1
@@ -245,7 +245,11 @@ import {
245
245
  runtimeUsageEventType,
246
246
  runtimeToolCallId,
247
247
  } from "../lib/runtime-usage-ledger.js";
248
- import { runMeteredDirectModelCall } from "../lib/direct-model-usage.js";
248
+ import {
249
+ goalModelCallError,
250
+ runGoalModelCall,
251
+ } from "../lib/goal-model-call.js";
252
+ import { captureGoalWorkspace } from "../lib/goal-workspace-evidence.js";
249
253
  import {
250
254
  GoalCheckEvidence,
251
255
  buildGoalJudgePrompt,
@@ -3380,6 +3384,52 @@ async function runAgentHeadlessInWorkspace(
3380
3384
  };
3381
3385
  };
3382
3386
 
3387
+ const recordRunUsage = (event) => {
3388
+ if (!event.attribution) {
3389
+ usage.input_tokens += event.usage?.input_tokens || 0;
3390
+ usage.output_tokens += event.usage?.output_tokens || 0;
3391
+ // Carry prompt-cache tokens into accumulated usage (cost accuracy).
3392
+ usage.cache_read_input_tokens +=
3393
+ event.usage?.cache_read_input_tokens || 0;
3394
+ usage.cache_creation_input_tokens +=
3395
+ event.usage?.cache_creation_input_tokens || 0;
3396
+ }
3397
+ emitStream({
3398
+ type: "token_usage",
3399
+ provider: event.provider,
3400
+ model: event.model,
3401
+ usage: event.usage,
3402
+ ...(event.contextWindow ? { contextWindow: event.contextWindow } : {}),
3403
+ ...(event.attribution ? { attribution: event.attribution } : {}),
3404
+ ...(event.source ? { source: event.source } : {}),
3405
+ });
3406
+ if (costBudget) {
3407
+ costBudget.add({
3408
+ provider: event.provider,
3409
+ model: event.model,
3410
+ usage: event.usage,
3411
+ });
3412
+ if (costBudget.shouldWarnInactive()) {
3413
+ const m = `cost cap $${options.maxCostUsd} set but model "${event.model}" is unpriced/free — cap inactive`;
3414
+ if (isText) writeErr(` ${m}\n`);
3415
+ emitStream({ type: "cost_warning", message: m });
3416
+ }
3417
+ if (costBudget.exceeded()) {
3418
+ endReason = "cost-budget-exhausted";
3419
+ stopForCost = true;
3420
+ if (isText)
3421
+ writeErr(
3422
+ ` ⛔ cost budget $${options.maxCostUsd} reached (spent ≈$${costBudget.spentUsd}) — stopping\n`,
3423
+ );
3424
+ emitStream({
3425
+ type: "cost_budget_exhausted",
3426
+ limit_usd: options.maxCostUsd,
3427
+ spent_usd: costBudget.spentUsd,
3428
+ });
3429
+ }
3430
+ }
3431
+ };
3432
+
3383
3433
  // --goal-condition: session-level completion-condition engine (P1). After each
3384
3434
  // outer turn an independent checker judges a completion CONDITION; if unmet and
3385
3435
  // budget remains, a follow-up user turn re-drives the agent — until met
@@ -3390,6 +3440,51 @@ async function runAgentHeadlessInWorkspace(
3390
3440
  let _goalHelpers = null;
3391
3441
  let _goalTokensSeen = 0; // per-turn usage deltas (engine totals == run total)
3392
3442
  let _goalCostSeen = 0;
3443
+ const recordGoalUsage = () => {
3444
+ if (!goalEngine) return;
3445
+ const tokens =
3446
+ usage.input_tokens +
3447
+ usage.output_tokens +
3448
+ usage.cache_read_input_tokens +
3449
+ usage.cache_creation_input_tokens;
3450
+ goalEngine.recordTurnUsage({
3451
+ tokens: tokens - _goalTokensSeen,
3452
+ costUsd: costBudget.spentUsd - _goalCostSeen,
3453
+ });
3454
+ _goalTokensSeen = tokens;
3455
+ _goalCostSeen = costBudget.spentUsd;
3456
+ };
3457
+ const callGoalModel = async (prompt, operationId) => {
3458
+ const { chatWithTools } = await import("./agent-core.js");
3459
+ try {
3460
+ return await runGoalModelCall({
3461
+ sessionId: resolveHeadlessMeteredSessionId(persist, sessionId),
3462
+ persist: persist
3463
+ ? (type, data) => store.appendEvent(sessionId, type, data)
3464
+ : null,
3465
+ sessionBudget: options.sessionBudget || null,
3466
+ iterationBudget: budget,
3467
+ costBudget,
3468
+ signal: options.signal,
3469
+ operationId,
3470
+ prompt,
3471
+ chat: chatWithTools,
3472
+ chatOptions: {
3473
+ ...(evolutionIngress === null ? {} : { evolutionIngress }),
3474
+ model,
3475
+ provider,
3476
+ baseUrl,
3477
+ apiKey,
3478
+ serviceTier: options.serviceTier,
3479
+ maxOutputTokens: options.maxOutputTokens,
3480
+ },
3481
+ onUsage: recordRunUsage,
3482
+ });
3483
+ } finally {
3484
+ // Include auxiliary usage before the completion decision and checkpoint.
3485
+ recordGoalUsage();
3486
+ }
3487
+ };
3393
3488
  let goalSetupFailure = null;
3394
3489
  let goalRecoveryReviewed = false;
3395
3490
  const goalEvidence = options.goalCondition
@@ -3398,36 +3493,47 @@ async function runAgentHeadlessInWorkspace(
3398
3493
  // Model-judged conditions reuse the run's own model as an independent
3399
3494
  // evaluator (mirrors --goal-assess). Overridable via deps for tests.
3400
3495
  const _defaultGoalJudge = async (cond, transcript) => {
3496
+ const checkCancellation = () => {
3497
+ if (options.signal?.aborted || options.sessionBudget?.signal?.aborted)
3498
+ throw goalModelCallError("cancelled");
3499
+ };
3500
+ checkCancellation();
3501
+ const goalBudget = goalEngine?.budget;
3502
+ const goalState = goalEngine?.state;
3503
+ if (
3504
+ goalBudget &&
3505
+ ((goalBudget.maxTokens != null &&
3506
+ goalState.tokens >= goalBudget.maxTokens) ||
3507
+ (goalBudget.maxCostUsd != null &&
3508
+ goalState.costUsd >= goalBudget.maxCostUsd) ||
3509
+ (goalBudget.maxTimeMs != null &&
3510
+ (deps.now ? deps.now() : Date.now()) - goalState.startedAtMs >=
3511
+ goalBudget.maxTimeMs))
3512
+ ) {
3513
+ return {
3514
+ met: false,
3515
+ reason: "Goal budget exhausted before model evaluation",
3516
+ };
3517
+ }
3401
3518
  if (!usableGoalEvidence(transcript.goalEvidence).length) {
3519
+ const bindingReasons = [
3520
+ ...new Set(
3521
+ (transcript.goalEvidence?.tools || [])
3522
+ .map((record) => record.workspace?.reason)
3523
+ .filter(Boolean),
3524
+ ),
3525
+ ];
3402
3526
  return {
3403
3527
  met: false,
3404
- reason:
3405
- "No current successful tool evidence; run an explicit check for the goal condition",
3528
+ reason: bindingReasons.length
3529
+ ? `Goal workspace evidence unavailable (${bindingReasons.join(", ")}); run a fresh artifact read or explicit check`
3530
+ : "No current successful tool evidence; run an explicit check for the goal condition",
3406
3531
  evidence: { kind: "model", source: "current-turn-tools", toolIds: [] },
3407
3532
  };
3408
3533
  }
3409
- const { chatWithTools } = await import("./agent-core.js");
3410
3534
  const { firstBalancedJson } = await import("../lib/json-schema-output.js");
3411
3535
  const judgePrompt = buildGoalJudgePrompt(cond, transcript);
3412
- const r = await runMeteredDirectModelCall({
3413
- sessionId: resolveHeadlessMeteredSessionId(persist, sessionId),
3414
- persist: persist
3415
- ? (type, data) => store.appendEvent(sessionId, type, data)
3416
- : null,
3417
- provider,
3418
- model,
3419
- source: "model",
3420
- sessionBudget: options.sessionBudget || null,
3421
- call: () =>
3422
- chatWithTools([{ role: "user", content: judgePrompt }], {
3423
- ...(evolutionIngress === null ? {} : { evolutionIngress }),
3424
- model,
3425
- provider,
3426
- baseUrl,
3427
- apiKey,
3428
- enabledToolNames: [],
3429
- }),
3430
- });
3536
+ const r = await callGoalModel(judgePrompt, "goal-condition");
3431
3537
  const text = r?.message?.content || "";
3432
3538
  let verdict = null;
3433
3539
  const block = firstBalancedJson(text, "{");
@@ -3438,16 +3544,25 @@ async function runAgentHeadlessInWorkspace(
3438
3544
  /* tolerant: a non-JSON verdict stays unmet */
3439
3545
  }
3440
3546
  }
3441
- return validateGoalJudgeVerdict(verdict, transcript.goalEvidence);
3547
+ // A user or background writer can change files while the model evaluates.
3548
+ // Re-read the bound inputs before accepting its cited observations.
3549
+ await goalEvidence.refreshWorkspace();
3550
+ checkCancellation();
3551
+ return validateGoalJudgeVerdict(verdict, goalEvidence.snapshot());
3442
3552
  };
3443
3553
  // A running checkpoint precedes model/tool effects; an evaluated checkpoint
3444
3554
  // precedes publishing the decision. An interrupted running phase requires
3445
3555
  // reconciliation on resume instead of silently replaying the old goal state.
3446
- const persistGoalSnapshot = (phase, failurePhase = "after-model") => {
3556
+ const persistGoalSnapshot = (
3557
+ phase,
3558
+ failurePhase = "after-model",
3559
+ evaluation = null,
3560
+ ) => {
3447
3561
  if (!persist || !goalEngine) return;
3448
3562
  try {
3449
3563
  store.appendEvent(sessionId, "goal_snapshot", {
3450
3564
  ...goalEngine.snapshot(),
3565
+ ...(evaluation ? { evaluation } : {}),
3451
3566
  checkpoint: {
3452
3567
  schema: "chainlesschain.goal-checkpoint/v1",
3453
3568
  phase,
@@ -3520,6 +3635,15 @@ async function runAgentHeadlessInWorkspace(
3520
3635
  now: goalNow,
3521
3636
  });
3522
3637
  }
3638
+ if (goalEngine.condition.kind === "model" && !deps.goalConditionJudge) {
3639
+ const signals = [options.signal, options.sessionBudget?.signal].filter(
3640
+ Boolean,
3641
+ );
3642
+ const signal =
3643
+ signals.length > 1 ? AbortSignal.any(signals) : signals[0];
3644
+ goalEvidence.captureWorkspace = (call) =>
3645
+ captureGoalWorkspace(cwd, call, { signal });
3646
+ }
3523
3647
  _goalHelpers = {
3524
3648
  isDeterministicCondition: eng.isDeterministicCondition,
3525
3649
  runDeterministicCheck: eng.runDeterministicCheck,
@@ -3650,7 +3774,7 @@ async function runAgentHeadlessInWorkspace(
3650
3774
  args: event.args,
3651
3775
  };
3652
3776
  toolCalls.push(toolCall);
3653
- goalEvidence?.started(toolCall);
3777
+ await goalEvidence?.started(toolCall);
3654
3778
  toolStartedAt.set(
3655
3779
  telemetryToolId,
3656
3780
  deps.now ? deps.now() : Date.now(),
@@ -3778,7 +3902,11 @@ async function runAgentHeadlessInWorkspace(
3778
3902
  if (policyEvent) emitStream(policyEvent);
3779
3903
  }
3780
3904
  if (settledCall) {
3781
- goalEvidence?.settled(settledCall, event.result, Boolean(err));
3905
+ await goalEvidence?.settled(
3906
+ settledCall,
3907
+ event.result,
3908
+ Boolean(err),
3909
+ );
3782
3910
  settledCall.is_error = Boolean(err);
3783
3911
  settledCall.durationMs =
3784
3912
  event.result?.toolTelemetryRecord?.durationMs ??
@@ -3921,51 +4049,7 @@ async function runAgentHeadlessInWorkspace(
3921
4049
  event,
3922
4050
  "headless usage settlement",
3923
4051
  );
3924
- if (!event.attribution) {
3925
- usage.input_tokens += event.usage?.input_tokens || 0;
3926
- usage.output_tokens += event.usage?.output_tokens || 0;
3927
- // Carry prompt-cache tokens into accumulated usage (cost accuracy).
3928
- usage.cache_read_input_tokens +=
3929
- event.usage?.cache_read_input_tokens || 0;
3930
- usage.cache_creation_input_tokens +=
3931
- event.usage?.cache_creation_input_tokens || 0;
3932
- }
3933
- emitStream({
3934
- type: "token_usage",
3935
- provider: event.provider,
3936
- model: event.model,
3937
- usage: event.usage,
3938
- ...(event.contextWindow
3939
- ? { contextWindow: event.contextWindow }
3940
- : {}),
3941
- ...(event.attribution ? { attribution: event.attribution } : {}),
3942
- ...(event.source ? { source: event.source } : {}),
3943
- });
3944
- if (costBudget) {
3945
- costBudget.add({
3946
- provider: event.provider,
3947
- model: event.model,
3948
- usage: event.usage,
3949
- });
3950
- if (costBudget.shouldWarnInactive()) {
3951
- const m = `cost cap $${options.maxCostUsd} set but model "${event.model}" is unpriced/free — cap inactive`;
3952
- if (isText) writeErr(` ${m}\n`);
3953
- emitStream({ type: "cost_warning", message: m });
3954
- }
3955
- if (costBudget.exceeded()) {
3956
- endReason = "cost-budget-exhausted";
3957
- stopForCost = true;
3958
- if (isText)
3959
- writeErr(
3960
- ` ⛔ cost budget $${options.maxCostUsd} reached (spent ≈$${costBudget.spentUsd}) — stopping\n`,
3961
- );
3962
- emitStream({
3963
- type: "cost_budget_exhausted",
3964
- limit_usd: options.maxCostUsd,
3965
- spent_usd: costBudget.spentUsd,
3966
- });
3967
- }
3968
- }
4052
+ recordRunUsage(event);
3969
4053
  break;
3970
4054
  }
3971
4055
  case "iteration-warning": {
@@ -4095,18 +4179,7 @@ async function runAgentHeadlessInWorkspace(
4095
4179
  ) {
4096
4180
  // Feed this turn's usage DELTA so the engine's totals equal the run's
4097
4181
  // cumulative usage (recordTurnUsage accumulates).
4098
- const curTokens =
4099
- usage.input_tokens +
4100
- usage.output_tokens +
4101
- usage.cache_read_input_tokens +
4102
- usage.cache_creation_input_tokens;
4103
- const curCost = costBudget ? Number(costBudget.spentUsd) || 0 : 0;
4104
- goalEngine.recordTurnUsage({
4105
- tokens: curTokens - _goalTokensSeen,
4106
- costUsd: curCost - _goalCostSeen,
4107
- });
4108
- _goalTokensSeen = curTokens;
4109
- _goalCostSeen = curCost;
4182
+ recordGoalUsage();
4110
4183
 
4111
4184
  const cond = goalEngine.condition;
4112
4185
  let evaluation;
@@ -4131,6 +4204,7 @@ async function runAgentHeadlessInWorkspace(
4131
4204
  throw error;
4132
4205
  }
4133
4206
  const judge = deps.goalConditionJudge || _defaultGoalJudge;
4207
+ await goalEvidence.refreshWorkspace();
4134
4208
  evaluation = await judge(cond, {
4135
4209
  prompt: options.prompt,
4136
4210
  finalText,
@@ -4140,6 +4214,12 @@ async function runAgentHeadlessInWorkspace(
4140
4214
  }
4141
4215
  } catch (err) {
4142
4216
  if (err?.runtimeLedgerPersistence === true) throw err;
4217
+ if (
4218
+ err?.goalModelFailure ||
4219
+ (typeof err?.code === "string" &&
4220
+ err.code.startsWith("CC_SESSION_BUDGET_"))
4221
+ )
4222
+ throw err;
4143
4223
  if (err?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw err;
4144
4224
  evaluation = {
4145
4225
  met: false,
@@ -4150,7 +4230,7 @@ async function runAgentHeadlessInWorkspace(
4150
4230
 
4151
4231
  const { decision, events } = goalEngine.evaluate(evaluation);
4152
4232
  // Publish only after the decision and accumulated usage are durable.
4153
- persistGoalSnapshot("evaluated");
4233
+ persistGoalSnapshot("evaluated", "after-model", evaluation);
4154
4234
  for (const ev of events) {
4155
4235
  emitStream(ev);
4156
4236
  if (isText) {
@@ -4167,6 +4247,10 @@ async function runAgentHeadlessInWorkspace(
4167
4247
  }
4168
4248
  }
4169
4249
  if (decision === _goalHelpers.GOAL_DECISION.CONTINUE) {
4250
+ if (budget.isExhausted()) {
4251
+ endReason = "max_turns";
4252
+ break;
4253
+ }
4170
4254
  messages.push(
4171
4255
  markRuntimeOnlySessionMessage({
4172
4256
  role: "user",
@@ -4232,7 +4316,9 @@ async function runAgentHeadlessInWorkspace(
4232
4316
  ? "error_persistence"
4233
4317
  : sessionBudgetFailed
4234
4318
  ? "error_session_budget"
4235
- : "error";
4319
+ : err?.goalModelFailure
4320
+ ? err.subtype
4321
+ : "error";
4236
4322
  const transportDetails =
4237
4323
  errorSubtype === "error" ? transportErrorDetails(err) : undefined;
4238
4324
  const diagnosticFields = transportDetails
@@ -4247,6 +4333,13 @@ async function runAgentHeadlessInWorkspace(
4247
4333
  subtype: errorSubtype,
4248
4334
  is_error: true,
4249
4335
  error: message,
4336
+ ...(err?.goalModelFailure
4337
+ ? {
4338
+ usage,
4339
+ total_cost_usd: costBudget.spentUsd,
4340
+ num_turns: budget.consumed,
4341
+ }
4342
+ : {}),
4250
4343
  ...diagnosticFields,
4251
4344
  });
4252
4345
  } else if (isJson) {
@@ -4259,6 +4352,7 @@ async function runAgentHeadlessInWorkspace(
4259
4352
  sessionId,
4260
4353
  toolCalls,
4261
4354
  usage,
4355
+ totalCostUsd: costBudget.spentUsd,
4262
4356
  numTurns: budget.consumed,
4263
4357
  durationMs: (deps.now ? deps.now() : Date.now()) - startedAt,
4264
4358
  denials,
@@ -4274,7 +4368,11 @@ async function runAgentHeadlessInWorkspace(
4274
4368
  // "the model call failed" from "the run itself errored" (1).
4275
4369
  loopFailureOutcome = {
4276
4370
  exitCode:
4277
- persistenceFailed || sessionBudgetFailed ? 1 : classifyLoopError(err),
4371
+ persistenceFailed || sessionBudgetFailed
4372
+ ? 1
4373
+ : err?.goalModelFailure
4374
+ ? exitCodeForEndReason(err.endReason, true)
4375
+ : classifyLoopError(err),
4278
4376
  result: message,
4279
4377
  isError: true,
4280
4378
  ...(persistence ? { persistence } : {}),
@@ -4538,26 +4636,7 @@ async function runAgentHeadlessInWorkspace(
4538
4636
  const assessChat =
4539
4637
  deps.assessChat ||
4540
4638
  (async (assessPrompt) => {
4541
- const { chatWithTools } = await import("./agent-core.js");
4542
- const r = await runMeteredDirectModelCall({
4543
- sessionId: resolveHeadlessMeteredSessionId(persist, sessionId),
4544
- persist: persist
4545
- ? (type, data) => store.appendEvent(sessionId, type, data)
4546
- : null,
4547
- provider,
4548
- model,
4549
- source: "model",
4550
- sessionBudget: options.sessionBudget || null,
4551
- call: () =>
4552
- chatWithTools([{ role: "user", content: assessPrompt }], {
4553
- ...(evolutionIngress === null ? {} : { evolutionIngress }),
4554
- model,
4555
- provider,
4556
- baseUrl,
4557
- apiKey,
4558
- enabledToolNames: [],
4559
- }),
4560
- });
4639
+ const r = await callGoalModel(assessPrompt, "goal-assessment");
4561
4640
  return r?.message?.content || "";
4562
4641
  });
4563
4642
  const { assessment } = await doAssess({
@@ -4585,6 +4664,21 @@ async function runAgentHeadlessInWorkspace(
4585
4664
  }
4586
4665
  }
4587
4666
  } catch (error) {
4667
+ if (error?.goalModelFailure) {
4668
+ isError = true;
4669
+ subtype = error.subtype;
4670
+ endReason = error.endReason;
4671
+ finalText = error.message;
4672
+ }
4673
+ if (
4674
+ typeof error?.code === "string" &&
4675
+ error.code.startsWith("CC_SESSION_BUDGET_")
4676
+ ) {
4677
+ isError = true;
4678
+ subtype = "error_session_budget";
4679
+ endReason = "session-budget-exhausted";
4680
+ finalText = error.message;
4681
+ }
4588
4682
  if (error?.runtimeLedgerPersistence === true) {
4589
4683
  isError = true;
4590
4684
  subtype = "error_persistence";
@@ -1 +0,0 @@
1
- import{E as J,b as z,r as C,I as k,J as y,U as _,c as r,K as o,S,V as B,o as V,f as D,P as d,Q as f,R as p,F as j}from"./vendor-Bn1JzzAn.js";import{M as Q}from"./MarkdownRenderer-B73ZyMRI.js";import{u as F,_ as W,d as I}from"./index-CmMzB4C-.js";import{R as q}from"./icons-DG5UD-6K.js";import"./markdown-Bq2x0XsR.js";import"./markdown-DUKxbhE4.js";const K=J("artifacts",()=>{const h=C([]),t=C(!1),u=C(""),e=C(""),v=C(null),b=C(!1),A=z(()=>[...new Set(h.value.map(a=>a.kind).filter(Boolean))].sort());async function l(){const n=F();t.value=!0;try{const a={type:"artifact-list"};u.value&&(a.kind=u.value),e.value&&(a.session=e.value);const s=await n.sendRaw(a);s&&Array.isArray(s.artifacts)&&(h.value=[...s.artifacts].reverse())}catch{}finally{t.value=!1}}async function g(n){const a=F();b.value=!0,v.value={entry:n,previewable:!1};try{const s=await a.sendRaw({type:"artifact-content",artifactId:n.id});v.value={entry:n,previewable:s?.previewable===!0,encoding:s?.encoding||null,content:s?.content||"",truncated:s?.truncated===!0,reason:s?.reason||null}}catch(s){v.value={entry:n,previewable:!1,reason:s?.message||"preview failed"}}finally{b.value=!1}}function i(){v.value=null}const m=z(()=>{const n=v.value;return!n?.previewable||n.encoding!=="base64"?null:`data:${n.entry?.mime||"image/png"};base64,${n.content}`}),O=z(()=>{const n=v.value;return n?.previewable===!0&&n.encoding==="utf8"&&String(n.entry?.mime||"").toLowerCase()==="text/markdown"});async function M(n,a={}){if(!n?.id)return!1;const s=a.fetch||globalThis.fetch,T=a.document||globalThis.document,L=a.URL||globalThis.URL,N=(a.config||globalThis.window?.__CC_CONFIG__)??{};try{const U=await s(`/api/artifacts/${n.id}/download`,{headers:N.wsToken?{Authorization:`Bearer ${N.wsToken}`}:{}});if(!U.ok)return!1;const G=await U.blob(),E=L.createObjectURL(G),R=T.createElement("a");return R.href=E,R.download=n.title||n.id,T.body.appendChild(R),R.click(),R.remove(),L.revokeObjectURL(E),!0}catch{return!1}}async function P(n){const a=F();if(!n)return!1;try{const s=await a.sendRaw({type:"artifact-remove",artifactId:n});return v.value?.entry?.id===n&&(v.value=null),await l(),s?.found===!0}catch{return!1}}async function c(){const n=F();try{const a=await n.sendRaw({type:"artifact-clean"});return await l(),Number(a?.removed)||0}catch{return 0}}function w(n){const a=Number(n)||0;return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function x(n){switch(n){case"report":return"blue";case"patch":return"purple";case"screenshot":return"cyan";case"log":return"default";case"data":return"green";default:return"default"}}return{artifacts:h,loading:t,kindFilter:u,sessionFilter:e,kinds:A,preview:v,previewLoading:b,previewImageSrc:m,previewIsMarkdown:O,fetchArtifacts:l,openPreview:g,closePreview:i,removeArtifact:P,cleanExpired:c,downloadArtifact:M,formatSize:w,kindColor:x}}),H={__name:"Artifacts",setup(h,{expose:t}){t();const u=K(),e=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"类型",key:"kind",dataIndex:"kind",width:110},{title:"MIME",dataIndex:"mime",width:160,ellipsis:!0},{title:"大小",key:"size",dataIndex:"size",width:90},{title:"发布时间",key:"createdAt",dataIndex:"createdAt",width:170},{title:"会话",dataIndex:"sessionId",width:160,ellipsis:!0},{title:"操作",key:"actions",width:150}],v=z(()=>u.kinds.map(i=>({label:i,value:i})));async function b(i){await u.removeArtifact(i)?I.success("已删除"):I.error("删除失败")}async function A(){const i=await u.cleanExpired();I.info(i>0?`清理了 ${i} 个过期交付物`:"没有过期交付物")}async function l(i){await u.downloadArtifact(i)||I.error("下载失败")}V(()=>{u.fetchArtifacts()}),D(()=>{u.closePreview()});const g={store:u,columns:e,kindOptions:v,onRemove:b,onClean:A,onDownload:l,computed:z,onBeforeUnmount:D,onMounted:V,get ReloadOutlined(){return q},get message(){return I},MarkdownRenderer:Q,get useArtifactsStore(){return K}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}},X={class:"page-header"},Y=["onClick"],Z=["src"],$={key:1,class:"preview-markdown"},ee={key:2,class:"preview-text"},te={class:"preview-meta"},ne={key:0};function ae(h,t,u,e,v,b){const A=k("a-select"),l=k("a-button"),g=k("a-popconfirm"),i=k("a-space"),m=k("a-tag"),O=k("a-table"),M=k("a-empty"),P=k("a-card");return d(),y("div",null,[_("div",X,[t[7]||(t[7]=_("div",null,[_("h2",{class:"page-title"},"交付物"),_("p",{class:"page-sub"}," agent 用 publish_artifact 发布的交付物(报告 / patch / 截图 / 日志),在这里预览与管理(cc artifacts 同源)。 ")],-1)),r(i,null,{default:o(()=>[r(A,{value:e.store.kindFilter,"onUpdate:value":t[0]||(t[0]=c=>e.store.kindFilter=c),style:{"min-width":"120px"},placeholder:"全部类型","allow-clear":"",options:e.kindOptions,onChange:t[1]||(t[1]=c=>e.store.fetchArtifacts())},null,8,["value","options"]),r(g,{title:"删除所有过期交付物?",onConfirm:e.onClean},{default:o(()=>[r(l,null,{default:o(()=>[...t[5]||(t[5]=[f("清理过期",-1)])]),_:1})]),_:1}),r(l,{ghost:"",loading:e.store.loading,onClick:t[2]||(t[2]=c=>e.store.fetchArtifacts())},{icon:o(()=>[r(e.ReloadOutlined)]),default:o(()=>[t[6]||(t[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),r(O,{"data-source":e.store.artifacts,columns:e.columns,"row-key":"id",size:"small",pagination:{pageSize:10,hideOnSinglePage:!0}},{bodyCell:o(({column:c,record:w})=>[c.key==="title"?(d(),y("a",{key:0,onClick:x=>e.store.openPreview(w)},p(w.title),9,Y)):c.key==="kind"?(d(),S(m,{key:1,color:e.store.kindColor(w.kind)},{default:o(()=>[f(p(w.kind),1)]),_:2},1032,["color"])):c.key==="size"?(d(),y(j,{key:2},[f(p(e.store.formatSize(w.size)),1)],64)):c.key==="createdAt"?(d(),y(j,{key:3},[f(p((w.createdAt||"").replace("T"," ").slice(0,19)),1)],64)):c.key==="actions"?(d(),S(i,{key:4},{default:o(()=>[r(l,{size:"small",onClick:x=>e.store.openPreview(w)},{default:o(()=>[...t[8]||(t[8]=[f("预览",-1)])]),_:1},8,["onClick"]),r(l,{size:"small",onClick:x=>e.onDownload(w)},{default:o(()=>[...t[9]||(t[9]=[f("下载",-1)])]),_:1},8,["onClick"]),r(g,{title:"删除该交付物?",onConfirm:x=>e.onRemove(w.id)},{default:o(()=>[r(l,{size:"small",danger:""},{default:o(()=>[...t[10]||(t[10]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):B("v-if",!0)]),_:1},8,["data-source"]),e.store.preview?(d(),S(P,{key:0,size:"small",class:"preview-card",loading:e.store.previewLoading},{title:o(()=>[r(i,null,{default:o(()=>[_("span",null,p(e.store.preview.entry?.title),1),r(m,{color:e.store.kindColor(e.store.preview.entry?.kind)},{default:o(()=>[f(p(e.store.preview.entry?.kind),1)]),_:1},8,["color"]),r(m,{color:"default"},{default:o(()=>[f(p(e.store.preview.entry?.mime),1)]),_:1}),e.store.preview.truncated?(d(),S(m,{key:0,color:"warning"},{default:o(()=>[...t[11]||(t[11]=[f("已截断预览",-1)])]),_:1})):B("v-if",!0)]),_:1})]),extra:o(()=>[r(i,null,{default:o(()=>[r(l,{size:"small",onClick:t[3]||(t[3]=c=>e.onDownload(e.store.preview.entry))},{default:o(()=>[...t[12]||(t[12]=[f("下载",-1)])]),_:1}),r(l,{size:"small",onClick:t[4]||(t[4]=c=>e.store.closePreview())},{default:o(()=>[...t[13]||(t[13]=[f("关闭",-1)])]),_:1})]),_:1})]),default:o(()=>[e.store.previewImageSrc?(d(),y("img",{key:0,src:e.store.previewImageSrc,class:"preview-image",alt:"artifact preview"},null,8,Z)):e.store.previewIsMarkdown?(d(),y("div",$,[r(e.MarkdownRenderer,{content:e.store.preview.content||""},null,8,["content"])])):e.store.preview.previewable?(d(),y("pre",ee,p(e.store.preview.content||"(空文件)"),1)):(d(),S(M,{key:3,description:e.store.preview.reason||"该类型不支持在线预览,可在本机用 cc artifacts open <id> 打开"},null,8,["description"])),_("div",te,[_("span",null,p(e.store.preview.entry?.id),1),e.store.preview.entry?.sessionId?(d(),y("span",ne," · session "+p(e.store.preview.entry.sessionId),1)):B("v-if",!0),_("span",null," · sha256 "+p((e.store.preview.entry?.sha256||"").slice(0,12))+"…",1)])]),_:1},8,["loading"])):B("v-if",!0)])}const de=W(H,[["render",ae],["__scopeId","data-v-c8b48f8c"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/views/Artifacts.vue"]]);export{de as default};
@@ -1 +0,0 @@
1
- import{I as v,P as m,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-CmMzB4C-.js";import"./icons-DG5UD-6K.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),u=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),b=String(e.getMonth()+1).padStart(2,"0"),f=String(e.getDate()).padStart(2,"0"),g=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${b}-${f} ${g}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:u,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},R={class:"bubble"},T={class:"meta"},M={class:"actor"},V={class:"time"},q={class:"body"};function D(c,d,t,r,i,l){const o=v("a-tag");return m(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",R,[n("div",T,[n("span",M,a(r.actorLabel),1),n("span",V,a(r.formattedTime),1)]),n("div",q,a(r.messageText),1),t.event.source.adapter?(m(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const A=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{A as default};
@@ -1 +0,0 @@
1
- import{I as s,J as T,U as i,c as a,K as o,S as I,V as C,o as V,r as k,a as A,b as L,P as E,Q as c,R as v,F as z,Z as H}from"./vendor-Bn1JzzAn.js";import{_ as W,u as N,d}from"./index-CmMzB4C-.js";import{R as F}from"./icons-DG5UD-6K.js";function B(R){return["ask","agent"].map(t=>{const n=R?.readiness?.[t],e=n?.state==="admitted",m=n?.scope==="deployment-admission"&&n.runtimeVerification==="not_checked"&&Array.isArray(n.requiredCommands)&&n.requiredCommands.includes(t)&&(e?n.ready===!0&&n.taskReady===null:["not_configured","disabled","invalid","command_not_allowed"].includes(n.state)&&n.ready===!1&&n.taskReady===!1);return{command:t,state:m?n.state:"unknown",summary:m?e?"部署准入通过":"部署准入被阻断":"未提供准入诊断",detail:m&&typeof n.detail=="string"?n.detail:"当前 CLI 未提供可识别的部署准入诊断,请更新 CLI。",remediation:m&&typeof n.remediation=="string"?n.remediation:""}})}function U(R,t){for(const n of Object.keys(R))delete R[n];Object.assign(R,{source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[],readiness:null},t||{})}const J={__name:"EvolutionSettings",setup(R,{expose:t}){t();const n=N(),e=k(!1),m=k(!1),S=k(!1),_=k(!1),P=k(!1),y=k(""),f=k(""),p=k(""),u=A({source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[]}),x=L(()=>e.value||m.value||S.value||_.value||P.value),O=L(()=>B(u));function w(r){U(u,r),f.value=u.descriptorPath||"",p.value=u.trustRootPath||"",y.value=u.modulePath||y.value||""}async function g(r,q=3e4){return await n.waitConnected(8e3),(await n.sendRaw(r,q)).result}async function h(){e.value=!0;try{w(await g({type:"evolution.deployment.status"}))}catch(r){d.error("读取配置失败:"+r.message)}finally{e.value=!1}}async function b(){if(!f.value.trim()||!p.value.trim()){d.warning("请填写描述符和信任根公钥的绝对路径");return}m.value=!0;try{w(await g({type:"evolution.deployment.configure",descriptorPath:f.value.trim(),trustRootPath:p.value.trim()},6e4)),d.success("签名校验通过,配置已保存并启用;自动发布仍为 HOLD")}catch(r){d.error("配置失败:"+r.message)}finally{m.value=!1}}async function D(){if(!y.value.trim()){d.warning("请填写测试部署宿主模块的服务器绝对路径");return}_.value=!0;try{w(await g({type:"evolution.deployment.init-test",modulePath:y.value.trim()},6e4)),d.success("TEST 测试开发环境已生成并启用;禁止用于生产")}catch(r){d.error("生成测试环境失败:"+r.message)}finally{_.value=!1}}async function j(){if(!f.value.trim()||!p.value.trim()){d.warning("请填写正式描述符和正式信任根公钥的绝对路径");return}P.value=!0;try{w(await g({type:"evolution.deployment.replace-test",descriptorPath:f.value.trim(),trustRootPath:p.value.trim()},6e4)),d.success("测试根已安全轮换为正式受管证书;请重启 cc ui、IDE 或 Desktop 长驻进程后做正式验证")}catch(r){d.error("替换失败:"+r.message)}finally{P.value=!1}}async function l(){S.value=!0;try{w(await g({type:"evolution.deployment.set-enabled",enabled:!u.profileEnabled})),d.success(u.profileEnabled?"已启用":"已停用")}catch(r){d.error("更新失败:"+r.message)}finally{S.value=!1}}V(h);const M={ws:n,loading:e,saving:m,toggling:S,initializingTest:_,replacingTest:P,modulePath:y,descriptorPath:f,trustRootPath:p,status:u,busy:x,readinessRows:O,apply:w,request:g,loadStatus:h,save:b,initTest:D,replaceTest:j,toggle:l,computed:L,onMounted:V,reactive:A,ref:k,get ReloadOutlined(){return F},get message(){return d},get useWsStore(){return N},get deploymentReadinessRows(){return B},get replaceDeploymentStatus(){return U}};return Object.defineProperty(M,"__isScriptSetup",{enumerable:!1,value:!0}),M}},Q={class:"page-head"},K={class:"mono"},Z={class:"mono"},G={class:"admission-status","aria-live":"polite"},X=["data-admission-command"],Y={class:"mono"},$={key:0,class:"mono"};function ee(R,t,n,e,m,S){const _=s("a-button"),P=s("a-switch"),y=s("a-card"),f=s("a-alert"),p=s("a-input"),u=s("a-form-item"),x=s("a-divider"),O=s("a-space"),w=s("a-form"),g=s("a-col"),h=s("a-tag"),b=s("a-descriptions-item"),D=s("a-descriptions"),j=s("a-row");return E(),T("div",null,[i("div",Q,[t[4]||(t[4]=i("div",null,[i("h2",{class:"page-title"},"Skill 自进化配置"),i("p",{class:"page-sub"}," 默认关闭;CLI、IDE 插件与 cc ui 共用 evolution.enabled 配置。 ")],-1)),a(_,{loading:e.loading,onClick:e.loadStatus},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[t[3]||(t[3]=c("刷新 ",-1))]),_:1},8,["loading"])]),a(y,{title:"自进化开关",class:"notice"},{default:o(()=>[a(P,{checked:e.status.profileEnabled,loading:e.toggling,disabled:e.busy||e.loading,"checked-children":"已开启","un-checked-children":"已关闭",onChange:e.toggle},null,8,["checked","loading","disabled"]),t[5]||(t[5]=i("p",null," 关闭后仍可正常聊天和使用 Agent。首次开启会初始化本地运行时,也可使用下方配置的部署。 ",-1)),t[6]||(t[6]=i("p",null," Quick Ask 的下一次请求生效;正在运行的 Agent 会话请停止后重新启动。候选项发布仍需人工审核。 ",-1)),t[7]||(t[7]=i("p",{class:"mono"},'config.json:"evolution": { "enabled": false }',-1))]),_:1}),a(f,{message:"自进化与自动发布分别控制",description:"开启后使用经过签名的 Skill 自进化运行时;自动发布始终保持 HOLD。",type:"info","show-icon":"",class:"notice"}),e.status.deploymentMode==="test"?(E(),I(f,{key:0,message:"当前为 TEST 测试开发环境",description:"本机自动生成的测试密钥不能用于生产。正式 descriptor 和 trust root 到位后,请使用下方“一键替换测试证书并转正式”。",type:"error","show-icon":"",class:"notice"})):C("v-if",!0),a(j,{gutter:16},{default:o(()=>[a(g,{xs:24,xl:15},{default:o(()=>[a(y,{title:"上线前测试与正式部署",class:"panel-card"},{default:o(()=>[a(w,{layout:"vertical"},{default:o(()=>[a(u,{label:"测试部署宿主模块"},{extra:o(()=>[...t[8]||(t[8]=[c("首次填写后点击一次即可生成 Ed25519 测试密钥、签名描述符并启用;宿主模块修改后再次点击可刷新。",-1)])]),default:o(()=>[a(p,{value:e.modulePath,"onUpdate:value":t[0]||(t[0]=l=>e.modulePath=l),disabled:e.busy,placeholder:"运行 cc ui 的机器上 deployment host .mjs/.js 的绝对路径"},null,8,["value","disabled"])]),_:1}),a(_,{type:"primary",loading:e.initializingTest,onClick:e.initTest},{default:o(()=>[...t[9]||(t[9]=[c("一键生成/刷新测试环境",-1)])]),_:1},8,["loading"]),a(x),a(u,{label:"签名部署描述符"},{extra:o(()=>[...t[10]||(t[10]=[c("Web 页面不能读取本机文件选择器,请填写运行 cc ui 的机器上的绝对路径。",-1)])]),default:o(()=>[a(p,{value:e.descriptorPath,"onUpdate:value":t[1]||(t[1]=l=>e.descriptorPath=l),disabled:e.busy,placeholder:"deployment descriptor JSON 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(u,{label:"Ed25519 信任根公钥"},{default:o(()=>[a(p,{value:e.trustRootPath,"onUpdate:value":t[2]||(t[2]=l=>e.trustRootPath=l),disabled:e.busy,placeholder:"信任根 public key 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(O,null,{default:o(()=>[a(_,{type:"primary",loading:e.saving,onClick:e.save},{default:o(()=>[...t[11]||(t[11]=[c("校验、保存并启用",-1)])]),_:1},8,["loading"]),e.status.deploymentMode==="test"?(E(),I(_,{key:0,loading:e.replacingTest,onClick:e.replaceTest},{default:o(()=>[...t[12]||(t[12]=[c("一键替换测试证书并转正式",-1)])]),_:1},8,["loading"])):C("v-if",!0)]),_:1})]),_:1})]),_:1})]),_:1}),a(g,{xs:24,xl:9},{default:o(()=>[a(y,{title:"治理状态",class:"panel-card status-card"},{default:o(()=>[a(D,{column:1,size:"small"},{default:o(()=>[a(b,{label:"部署模式"},{default:o(()=>[a(h,{color:e.status.deploymentMode==="test"?"red":"blue"},{default:o(()=>[c(v(e.status.deploymentMode==="test"?"TEST(仅限上线前联调)":e.status.deploymentMode||"none"),1)]),_:1},8,["color"])]),_:1}),a(b,{label:"生效状态"},{default:o(()=>[a(h,{color:e.status.effectiveEnabled?"green":"default"},{default:o(()=>[c(v(e.status.effectiveEnabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),a(b,{label:"生效来源"},{default:o(()=>[c(v(e.status.source||"none"),1)]),_:1}),a(b,{label:"签名校验"},{default:o(()=>[a(h,{color:e.status.verified?"green":"red"},{default:o(()=>[c(v(e.status.verified?"已通过":"未通过"),1)]),_:1},8,["color"])]),_:1}),a(b,{label:"自动发布"},{default:o(()=>[a(h,{color:"orange"},{default:o(()=>[...t[13]||(t[13]=[c("HOLD",-1)])]),_:1})]),_:1}),a(b,{label:"配置文件"},{default:o(()=>[i("span",K,v(e.status.profilePath||"—"),1)]),_:1}),a(b,{label:"允许命令"},{default:o(()=>[i("span",Z,v((e.status.commands||[]).join(", ")||"—"),1)]),_:1})]),_:1}),i("section",G,[t[14]||(t[14]=i("h3",null,"自进化部署准入",-1)),t[15]||(t[15]=i("p",null,"这里只检查部署准入,实际任务运行尚未验证。",-1)),(E(!0),T(z,null,H(e.readinessRows,l=>(E(),T("div",{key:l.command,"data-admission-command":l.command},[i("strong",null,v(l.command)+":"+v(l.summary),1),i("p",Y,v(l.detail),1),l.remediation?(E(),T("p",$,v(l.remediation),1)):C("v-if",!0)],8,X))),128))]),e.status.error?(E(),I(f,{key:0,message:e.status.error,type:"error","show-icon":"",class:"error"},null,8,["message"])):C("v-if",!0)]),_:1})]),_:1})]),_:1})])}const le=W(J,[["render",ee],["__scopeId","data-v-5a42105e"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/views/EvolutionSettings.vue"]]);export{le as default};
@@ -1 +0,0 @@
1
- import{I as x,P as s,J as i,U as l,R as n,c as g,K as u,Q as m,V as _,F as C,Z as N,S as T,b as p}from"./vendor-Bn1JzzAn.js";import{_ as R}from"./index-CmMzB4C-.js";import"./icons-DG5UD-6K.js";const V={__name:"GenericCardRenderer",props:{event:{type:Object,required:!0}},setup(v,{expose:f}){f();const t=v,o=p(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),c=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),k=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),S=String(e.getMinutes()).padStart(2,"0");return`${c}-${r}-${k} ${b}:${S}`}catch{return""}}),h=p(()=>{const e=t.event.content||{};return e.text||e.title||e.subject||e.name||e.prompt||JSON.stringify(e).slice(0,200)}),y=p(()=>{const e=t.event.content||{};return e.body||e.snippet||e.description||e.from||e.counterparty||null}),d=p(()=>{const e=t.event.content||{},c=t.event.extra||{},r=[];return e.amount!=null&&r.push({k:"金额",v:e.amount,color:"gold"}),c.merchant&&r.push({k:"商户",v:c.merchant,color:"green"}),c.orderNo&&r.push({k:"订单",v:c.orderNo,color:"purple"}),e.from&&e.to&&r.push({k:"路线",v:`${e.from} → ${e.to}`,color:"cyan"}),e.trainNo&&r.push({k:"车次",v:e.trainNo,color:"cyan"}),e.model&&r.push({k:"模型",v:e.model,color:"magenta"}),t.event.place&&r.push({k:"地点",v:t.event.place,color:"geekblue"}),r}),a={props:t,formattedTime:o,primaryText:h,secondaryText:y,metaChips:d,computed:p};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}},w={class:"event-card"},B={class:"card-head"},j={class:"time"},D={key:0,class:"actor"},F={class:"card-body"},G={class:"primary"},O={key:0,class:"secondary"},A={key:0,class:"card-meta"},I={class:"meta-k"};function J(v,f,t,o,h,y){const d=x("a-tag");return s(),i("div",w,[l("div",B,[l("span",j,n(o.formattedTime),1),g(d,{color:"blue",class:"adapter"},{default:u(()=>[m(n(t.event.source.adapter),1)]),_:1}),g(d,{class:"subtype"},{default:u(()=>[m(n(t.event.subtype),1)]),_:1}),t.event.actor?(s(),i("span",D,"@"+n(t.event.actor),1)):_("v-if",!0)]),l("div",F,[l("div",G,n(o.primaryText),1),o.secondaryText?(s(),i("div",O,n(o.secondaryText),1)):_("v-if",!0)]),o.metaChips.length>0?(s(),i("div",A,[(s(!0),i(C,null,N(o.metaChips,a=>(s(),T(d,{key:a.k,color:a.color},{default:u(()=>[l("span",I,n(a.k)+":",1),m(" "+n(a.v),1)]),_:2},1032,["color"]))),128))])):_("v-if",!0)])}const E=R(V,[["render",J],["__scopeId","data-v-c52d08ab"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/components/pdh/renderers/GenericCardRenderer.vue"]]);export{E as default};
@@ -1 +0,0 @@
1
- import{I as S,P as n,J as i,U as l,S as h,R as o,c,K as d,Q as u,V as g,b as a}from"./vendor-Bn1JzzAn.js";import{_ as b}from"./index-CmMzB4C-.js";import{aE as O,aI as C}from"./icons-DG5UD-6K.js";const D={__name:"TimelineRenderer",props:{event:{type:Object,required:!0}},setup(v,{expose:_}){_();const r=v,e=a(()=>r.event.content||{}),m=a(()=>{const t=r.event.source.adapter||"";return t.startsWith("travel-12306")||t.startsWith("travel-ctrip")}),p=a(()=>e.value.from&&e.value.to?`${e.value.from} → ${e.value.to}`:e.value.origin&&e.value.destination?`${e.value.origin} → ${e.value.destination}`:null),s=a(()=>r.event.place||e.value.placeName||e.value.poi),N=a(()=>e.value.trainNo),y=a(()=>e.value.flightNo),T=a(()=>e.value.title||e.value.text||e.value.description||"—"),k=a(()=>{const t=[];return e.value.departureTime&&t.push(`出发 ${e.value.departureTime}`),e.value.arrivalTime&&t.push(`到达 ${e.value.arrivalTime}`),e.value.duration&&t.push(`${e.value.duration}`),e.value.distance&&t.push(`${e.value.distance}`),t.length?t.join(" · "):null}),x=a(()=>{if(!r.event.occurredAt)return"";const t=new Date(r.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),f={props:r,c:e,isTravel:m,route:p,placeName:s,trainNo:N,flightNo:y,fallbackText:T,extraDetail:k,formattedTime:x,computed:a,get CarOutlined(){return C},get EnvironmentOutlined(){return O}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}},E={class:"timeline-event"},R={class:"dot"},V={class:"card"},w={class:"head"},B={class:"time"},j={class:"primary"},I={key:0},A={key:1},M={key:2},P={key:0,class:"trip-no"},W={key:1,class:"extra"};function q(v,_,r,e,m,p){const s=S("a-tag");return n(),i("div",E,[l("div",R,[e.isTravel?(n(),h(e.CarOutlined,{key:0})):(n(),h(e.EnvironmentOutlined,{key:1}))]),l("div",V,[l("div",w,[l("span",B,o(e.formattedTime),1),c(s,{color:"cyan"},{default:d(()=>[u(o(r.event.source.adapter),1)]),_:1}),c(s,null,{default:d(()=>[u(o(r.event.subtype),1)]),_:1})]),l("div",j,[e.route?(n(),i("span",I,o(e.route),1)):e.placeName?(n(),i("span",A,"📍 "+o(e.placeName),1)):(n(),i("span",M,o(e.fallbackText),1))]),e.trainNo||e.flightNo?(n(),i("div",P,[c(s,{color:"blue"},{default:d(()=>[u(o(e.trainNo||e.flightNo),1)]),_:1})])):g("v-if",!0),e.extraDetail?(n(),i("div",W,o(e.extraDetail),1)):g("v-if",!0)])])}const K=b(D,[["render",q],["__scopeId","data-v-18400280"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/components/pdh/renderers/TimelineRenderer.vue"]]);export{K as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-CmMzB4C-.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-CZlj1XI2.js";import{a0 as t}from"./index-CmMzB4C-.js";import"./vendor-Bn1JzzAn.js";import"./index-C9FOwTgX.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-ChiqY7Hg.js";import{a0 as t}from"./index-CmMzB4C-.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-vdoYucvi.js";import"./useFlexGapSupport-BqkGoKwe.js";import"./styleChecker-CGvQ4LRR.js";import"./index-C9FOwTgX.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};