chainlesschain 0.166.128 → 0.166.129

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 (167) hide show
  1. package/README.md +18 -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-CjPaaF2r.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-B7WXwoF0.js → ActionButton-_zlP_Z6z.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-IvJG43B5.js → Analytics-C7X31L8l.js} +2 -2
  8. package/src/assets/web-panel/assets/{AppLayout-DWY017_e.js → AppLayout-BmYa34Se.js} +5 -5
  9. package/src/assets/web-panel/assets/Artifacts-B_YKNjlp.js +1 -0
  10. package/src/assets/web-panel/assets/{Audit-CD9sTnBN.js → Audit-5JsI67XQ.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-J6gg5z0U.js → BackgroundAgents-BL3QbzvS.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-D7ik3lse.js → Backup-BRmg-gTa.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-MrDd5zcz.js → BaseInput-DNE7mT3K.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-DbxRqGiK.js → Chat-OYwAopdM.js} +5 -5
  15. package/src/assets/web-panel/assets/ChatBubbleRenderer-Dtxw3Wgt.js +1 -0
  16. package/src/assets/web-panel/assets/{Checkbox-CditB77B.js → Checkbox-nMgYkH8H.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-Ds0UZWZG.js → Codegen-B9G2ngLI.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-CZlj1XI2.js → Col-i0owJaGP.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-j4B2SoT6.js → Community-B3Ta0mI_.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-BuKQutaO.js → Compact-DDXrvvm-.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-DAgDyS-p.js → Compliance-Bn4Uq6U1.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-DX2-I6V3.js → Cowork-CO5NKD6r.js} +2 -2
  23. package/src/assets/web-panel/assets/{Cron-dJpc-FxX.js → Cron-ByjNese0.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-7m8euM3v.js → Crosschain-BN1FUYyi.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-CLoYoCe1.js → DID-CUFX5RL3.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-DR1rRMb7.js → Dashboard-D_2FDPBP.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-BsKhCfvH.js → Dropdown-lGOMtIzb.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-BAGexzJu.js → EmailListRenderer-DA3Qf1S2.js} +1 -1
  29. package/src/assets/web-panel/assets/EvolutionSettings-DLcnicCr.js +1 -0
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BIpueefy.js → FamilyGuardDashboard-BPOSaIN1.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-BluNep6d.js → Federation-DzJUCQq8.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-CerdM3am.js → FormItemContext-DVx1XNKx.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-DXh4tOjU.js → GenericCardRenderer-BkqzO_lh.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-CEE0cGmf.js → Git-Dr_rdT_j.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-Bc-XNDhM.js → Governance-DyVkZddw.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-CiBzXyZ-.js → Inference-IN2YDd4v.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-CV2IiyuN.js → KnowledgeGraph-Ceiy4n6N.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-fbQYKuSz.js → Logs-d7pIEAX2.js} +2 -2
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-B73ZyMRI.js → MarkdownRenderer-DmSl0MNI.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-C5utdpxZ.js → Marketplace-uVE7U14g.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-CPE4SaF3.js → McpTools-DUfBM--y.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-DTFDszzk.js → Memory-6gkcR02J.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DxqPmTzP.js → MobileBridge-Cl6ys2O9.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-CwcK8l2y.js → MobileProjects-5P8jN4gf.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-DrjECLGO.js → Mtc-DtiT1Kol.js} +2 -2
  46. package/src/assets/web-panel/assets/{MtcAudit-4IURCa-3.js → MtcAudit-DZz8iiTE.js} +5 -5
  47. package/src/assets/web-panel/assets/{Multisig-CggLV1Cp.js → Multisig-DFH3-fBJ.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-DkOQJT73.js → NLProgramming-BYNuDOt-.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-Dodcva6s.js → Notes-BCY4jgYy.js} +3 -3
  50. package/src/assets/web-panel/assets/{NotificationSettings-CQ3HeTs6.js → NotificationSettings-Bk2ltghU.js} +1 -1
  51. package/src/assets/web-panel/assets/OrderTableRenderer-OdeXEGAn.js +1 -0
  52. package/src/assets/web-panel/assets/{Organization-B6HFsIfU.js → Organization-CY4_mSiV.js} +2 -2
  53. package/src/assets/web-panel/assets/{Overflow-G9dju55N.js → Overflow-CaRUAOY_.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-C1BCE155.js → P2P-Bd96rBWQ.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-BFAxXn5D.js → PdhVaultBrowser-JjnExxan.js} +3 -3
  56. package/src/assets/web-panel/assets/{Permissions-DWg7cw9Q.js → Permissions-CW1PUJB0.js} +2 -2
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BQxuOQOO.js → PersonalDataHub-BNn9alTk.js} +3 -3
  58. package/src/assets/web-panel/assets/{Pipeline-C3Gse9Ne.js → Pipeline-01_PBiUu.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-Dcsjx6Oi.js → Privacy-BP4DlVGb.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-DeYlnXJQ.js → ProjectInit-CAMnQj4n.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-D7kbZ_K7.js → ProjectSettings-DKxV5On_.js} +2 -2
  62. package/src/assets/web-panel/assets/{Projects-C5m3NGzM.js → Projects-B_4kRnM8.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-oT6jy83z.js → Providers-DeqqZyUv.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-NZ11GEBa.js → QrScannerModal-fFkycCT4.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-CtQU4Tx0.js → QuickAsk-Ln6qQidy.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-3CoXYu3O.js → Recommend-DeENA-y0.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-C2d4LzBM.js → RemoteSession-CRxSYxo4.js} +2 -2
  68. package/src/assets/web-panel/assets/{Reputation-WZQHrGwl.js → Reputation-B2kU2F0l.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-ChiqY7Hg.js → Row-lV_nLlFq.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-Cjwl2Kum.js → RssFeed-Df21mCdF.js} +2 -2
  71. package/src/assets/web-panel/assets/{Search-DRDMZxTF.js → Search-8_Dz4qU9.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-D0y4LlQ4.js → Security-Cl5-PEcp.js} +2 -2
  73. package/src/assets/web-panel/assets/{Services-ChpkqWm0.js → Services-C5qgCqA7.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-D3WGZ8yO.js → Skeleton-ASRgSh_Y.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-Bv_7HaUW.js → Skills-DWx01ZJ7.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-crZMKyX0.js → Sla-I2gbgtW8.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-ByWn5XDZ.js → SpeechSettings-BqTikzfe.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings--R55vxvj.js → SyncSettings-D3zCpBFV.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-BZA_Via_.js → Tasks-DjMWII45.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-9eJ9yY8Q.js → Templates-Cq7qDnHX.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-CfWX2jqj.js → Tenant-DEasKDpQ.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-CUXUF4kL.js → Terminal-J6fLkTzi.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-77y9bkYN.js → TimelineRenderer-CNvWrWN-.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-CvyrdLH6.js → Tokens-BSgHJCKH.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-MNRl_YNr.js → Trigger-DgGU_D0o.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-BHOXK-Mp.js → Trust-BANlv-uB.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-Bz1oZNyQ.js → UkeySign-qh8GPRsU.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-DlqmXyZv.js → VideoEditing-DBiGTB4H.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-Dg1rnqEG.js → Wallet-DMUFR7cL.js} +2 -2
  90. package/src/assets/web-panel/assets/{WebAuthn-DJtGeaOk.js → WebAuthn-DP9nQQzW.js} +3 -3
  91. package/src/assets/web-panel/assets/{WorkflowEditor-DJPubjX5.js → WorkflowEditor-DT_6jDkL.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-BWweDuIV.js → chat-C_kELmV6.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-BX5ViADF.js → colors-DE-ZxAv_.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-Df8MLbXp.js → compact-item-BowulLDi.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-C0FDTwdV.js → createContext-DCh8oMBQ.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-BVvJAp91.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-PpL6GdNk.js → hasIn-Be7mK-iw.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-P1ERNJla.js → index-3Ql7xQLn.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BF0ERucU.js → index-4KkYmFy5.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-B4UxFB2N.js → index-6OluUVJJ.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DGLbojjx.js → index-Ao-LXr-d.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-D5Ei75Wt.js → index-B-3EDOlf.js} +1 -1
  103. package/src/assets/web-panel/assets/index-B7IhCfsh.js +1 -0
  104. package/src/assets/web-panel/assets/{index-R0LQ3fgq.js → index-BDIIR8g6.js} +1 -1
  105. package/src/assets/web-panel/assets/index-BMrbe_Ey.js +1 -0
  106. package/src/assets/web-panel/assets/{index-itNn6pW1.js → index-BdzVLz-c.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-Cj00JSqq.js → index-BlzMqaWB.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-Cm7vZvA3.js → index-BwY31W-u.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-UXM5vpt4.js → index-C2pCquZC.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DBzaRg4E.js → index-CKmC6ugN.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Beh1kLwx.js → index-CL2hAUWh.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BMIEWinN.js → index-CUXfwAhF.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-C2JU-gdS.js → index-CXvy8HrM.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-FAZH69my.js → index-C_VnSUjh.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BeFhy4BX.js → index-CecGCLWI.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-C0PqPK-8.js → index-Ck6MYKVN.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DxJqyIP8.js → index-Cvy4vdVW.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DddQd0_V.js → index-CwJfLNqv.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-B3K1uZ7R.js → index-D3lOYd9_.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-iif2A1eL.js → index-DEDVYN7D.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-ChV82mzs.js → index-DLCzaLH4.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Cf86RSQk.js → index-DMDaGPxG.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-7VyVOEf7.js → index-DMKo49Um.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-NdEUFm32.js → index-DN1AT3FH.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BWSCphaT.js → index-DOebEvgn.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-D_6XIMVV.js → index-DPX3N4T8.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DFtzEEYe.js → index-DSRKtgJg.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-B982oUKN.js → index-DSqZBvQM.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CxY_U5RT.js → index-DbrQO1p9.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Dy8K2laU.js → index-DjC2TJeH.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-C9N1u8jV.js → index-LVrxqU88.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-C9FOwTgX.js → index-OH54KMLN.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CmMzB4C-.js → index-Qx8cTReg.js} +3 -3
  134. package/src/assets/web-panel/assets/{index-B8-pSyP7.js → index-_cYsz4df.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-DwZkBGXd.js → index-lN916819.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-C8wl7Ica.js → index-nLHTuHoT.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-DeMthvi4.js → initDefaultProps-BNhziAal.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-_7kbkzE0.js → motion-fUkbJz38.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-gCI04pLw.js → move-rFx211Cl.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-D5UWHv2U.js → mtc-parser-CEP1wN3R.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-CDCZcqeS.js → omit-DacHd_Zm.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-DGMDLi3S.js → pickAttrs-Dqp58Ep2.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-C-3vC1Vh.js → placementArrow-Cv6Rm0pV.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-vdoYucvi.js → responsiveObserve-rNE0p9ZW.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-B62FhgyZ.js → slide-C97JxD4S.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-DCLlfnym.js → statusUtils-Cxk1gV9M.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-CGvQ4LRR.js → styleChecker-CbtKKsPo.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-BqkGoKwe.js → useFlexGapSupport-CQATs2JQ.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-Bkr_nU3q.js → useFs-6c7qrpE_.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-CYxMIUEq.js → usePersonalDataHub-OjxtBGe7.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-sAbcY1FX.js → vnode-CSlXfUSh.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-Dm2pLrXi.js → zoom-Cc1qKiSZ.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/data/changelog.json +13 -0
  155. package/src/lib/codex-app-server-adapter.js +36 -22
  156. package/src/lib/codex-app-server-support.js +91 -0
  157. package/src/lib/coding-change-review-context.js +258 -0
  158. package/src/lib/coding-task-guidance.js +3 -0
  159. package/src/lib/context-memory-kernel/provider-context.js +22 -12
  160. package/src/runtime/agent-core.js +125 -40
  161. package/src/assets/web-panel/assets/Artifacts-BOyohM_-.js +0 -1
  162. package/src/assets/web-panel/assets/ChatBubbleRenderer-DbeJAwMg.js +0 -1
  163. package/src/assets/web-panel/assets/EvolutionSettings-BqYYmC01.js +0 -1
  164. package/src/assets/web-panel/assets/OrderTableRenderer-pT2nzmIO.js +0 -1
  165. package/src/assets/web-panel/assets/devWarning-BgM5vq1s.js +0 -1
  166. package/src/assets/web-panel/assets/index-Bl-HTXWn.js +0 -1
  167. package/src/assets/web-panel/assets/index-Cxf0YfM5.js +0 -1
@@ -69,6 +69,7 @@ import {
69
69
  CODING_TASK_QUALITY_GUIDANCE,
70
70
  CODING_CHANGE_REVIEW_PROMPT,
71
71
  } from "../lib/coding-task-guidance.js";
72
+ import { CodingChangeReviewContext } from "../lib/coding-change-review-context.js";
72
73
  import { RemoteReadLoopGuard } from "../lib/remote-read-loop-guard.js";
73
74
  import {
74
75
  isPrActionRequest,
@@ -14714,8 +14715,9 @@ export async function* agentLoop(messages, options) {
14714
14715
  const { HostResourceBudget } = await import("../lib/host-resource-budget.js");
14715
14716
  const hostResourceBudget =
14716
14717
  options.hostResourceBudget || new HostResourceBudget();
14717
- const taskProgressTracker =
14718
+ let taskProgressTracker =
14718
14719
  options.taskProgressTracker || new TaskProgressTracker();
14720
+ const hostTaskProgressTracker = taskProgressTracker;
14719
14721
  // A subtree preflight is deliberately not an executed mutation. Keep this
14720
14722
  // obligation outside transcript compaction and never replay it automatically.
14721
14723
  const pendingSubtreeMutations = new Map();
@@ -14723,6 +14725,22 @@ export async function* agentLoop(messages, options) {
14723
14725
  let hasFileContentChanges = false;
14724
14726
  // Headless outer turns share this object; a new user turn gets a fresh one.
14725
14727
  const changeReviewState = options._changeReviewState || { requested: false };
14728
+ let independentReviewContext = null;
14729
+ let independentReviewSetupError = null;
14730
+ const appendMessages = (...entries) => {
14731
+ // Keep complete review tool groups in both the durable conversation and a
14732
+ // separate request journal. Canonical compaction cannot restore author
14733
+ // rationale to this journal or remove its current file observations.
14734
+ independentReviewContext?.record(...entries);
14735
+ messages.push(...entries);
14736
+ };
14737
+ const recordTaskProgress = (...args) => {
14738
+ const advanced = taskProgressTracker.record(...args);
14739
+ if (taskProgressTracker !== hostTaskProgressTracker) {
14740
+ hostTaskProgressTracker.record(...args);
14741
+ }
14742
+ return advanced;
14743
+ };
14726
14744
  const recordSubtreeMutation = (tool, args, result) => {
14727
14745
  if (!GUARDED_FILE_MUTATION_TOOLS.has(tool)) return;
14728
14746
  if (!args || typeof args !== "object" || Array.isArray(args)) return;
@@ -14788,6 +14806,23 @@ export async function* agentLoop(messages, options) {
14788
14806
  { cwd: options.cwd || process.cwd() },
14789
14807
  );
14790
14808
  const hermeticExecution = options.hermeticExecution === true;
14809
+ if (options.reviewChanges === true && hermeticExecution) {
14810
+ if (changeReviewState.independentReviewPending === true) {
14811
+ const error = new Error(
14812
+ "An interrupted independent review cannot resume from author history; the task remains incomplete.",
14813
+ );
14814
+ error.code = "CC_CHANGE_REVIEW_RECONSTRUCTION_REQUIRED";
14815
+ throw error;
14816
+ }
14817
+ try {
14818
+ independentReviewContext = new CodingChangeReviewContext(messages);
14819
+ } catch (error) {
14820
+ // An explanation without writes still keeps its old behavior. If a
14821
+ // mutation later arms review, stop before an extra call rather than
14822
+ // silently falling back to the author's summarized context.
14823
+ independentReviewSetupError = error;
14824
+ }
14825
+ }
14791
14826
  if (
14792
14827
  fileMutationScope &&
14793
14828
  (options.exactToolNames !== true || !hermeticExecution)
@@ -15191,8 +15226,8 @@ export async function* agentLoop(messages, options) {
15191
15226
  // one-shot guard means a model that keeps returning empty turns completes
15192
15227
  // rather than looping forever (the iteration budget is the hard backstop).
15193
15228
  let emptyThinkingReprompted = false;
15194
- const readFileLoopGuard = new ReadFileLoopGuard();
15195
- const remoteReadLoopGuard = new RemoteReadLoopGuard();
15229
+ let readFileLoopGuard = new ReadFileLoopGuard();
15230
+ let remoteReadLoopGuard = new RemoteReadLoopGuard();
15196
15231
  const prActionTask = isPrActionRequest(messages);
15197
15232
  // Keep an explicit user-requested PR close action alive even if the
15198
15233
  // conversation is compacted down to tool evidence. It is guidance only;
@@ -15302,7 +15337,11 @@ export async function* agentLoop(messages, options) {
15302
15337
  // threshold. Settlement persists a bounded resume checkpoint before the
15303
15338
  // live array changes; the earlier hash-chained result events remain the
15304
15339
  // durable evidence for audit/recovery.
15305
- if (options.runtimeResultRetention !== false && messages.length > 32) {
15340
+ if (
15341
+ !independentReviewContext?.active &&
15342
+ options.runtimeResultRetention !== false &&
15343
+ messages.length > 32
15344
+ ) {
15306
15345
  const retentionConfig =
15307
15346
  options.runtimeResultRetention &&
15308
15347
  typeof options.runtimeResultRetention === "object"
@@ -15370,6 +15409,7 @@ export async function* agentLoop(messages, options) {
15370
15409
  // dangling call; `preserveToolPairs` then guarantees compaction never
15371
15410
  // orphans a tool result. Best-effort — a failure never aborts the run.
15372
15411
  if (
15412
+ !independentReviewContext?.active &&
15373
15413
  options.autoCompact !== false &&
15374
15414
  !automaticCompactionSettlementBlocked &&
15375
15415
  messages.length > 4
@@ -15915,7 +15955,7 @@ export async function* agentLoop(messages, options) {
15915
15955
  // SubagentStop hooks are best-effort
15916
15956
  }
15917
15957
  }
15918
- messages.push(
15958
+ appendMessages(
15919
15959
  markRuntimeOnlySessionMessage({
15920
15960
  role: "user",
15921
15961
  content: _backgroundSubAgentResultText(entry),
@@ -15950,7 +15990,10 @@ export async function* agentLoop(messages, options) {
15950
15990
  // Turn-scoped context injection (open-agents prepareCall parity).
15951
15991
  // prepareCall runs fresh each iteration and returns an ephemeral
15952
15992
  // system-message supplement that is NOT persisted to messages history.
15953
- let callMessages = messages;
15993
+ const requestMessages = independentReviewContext?.active
15994
+ ? independentReviewContext.project()
15995
+ : messages;
15996
+ let callMessages = requestMessages;
15954
15997
  // Give a looping model a turn focused on search/action rather than another
15955
15998
  // whole-file request. This changes discovery for one request only; runtime
15956
15999
  // permissions are untouched and ordinary reads return on the next turn.
@@ -16021,7 +16064,9 @@ export async function* agentLoop(messages, options) {
16021
16064
  }
16022
16065
  : effectiveToolOptions;
16023
16066
  const readContext = [
16024
- options.getTaskWorklogContext?.(),
16067
+ independentReviewContext?.active
16068
+ ? null
16069
+ : options.getTaskWorklogContext?.(),
16025
16070
  readFileLoopGuard.findingsHint,
16026
16071
  readFileLoopGuard.progressHint,
16027
16072
  remoteReadLoopGuard.findingsHint,
@@ -16031,11 +16076,11 @@ export async function* agentLoop(messages, options) {
16031
16076
  // Preserve the last conversational turn and never split a tool call
16032
16077
  // from its results. Source data must neither become system authority
16033
16078
  // nor create an assistant prefill / a new generic user request.
16034
- const resultIndex = messages.findLastIndex(
16079
+ const resultIndex = requestMessages.findLastIndex(
16035
16080
  (message) => message.role === "tool",
16036
16081
  );
16037
16082
  if (resultIndex >= 0) {
16038
- const result = messages[resultIndex];
16083
+ const result = requestMessages[resultIndex];
16039
16084
  const original =
16040
16085
  typeof result.content === "string"
16041
16086
  ? result.content
@@ -16052,15 +16097,17 @@ export async function* agentLoop(messages, options) {
16052
16097
  }
16053
16098
  // Enrich only the ephemeral copy. This preserves signed assistant
16054
16099
  // thinking blocks, the last tool result, and the persisted transcript.
16055
- callMessages = messages.map((message, index) =>
16100
+ callMessages = requestMessages.map((message, index) =>
16056
16101
  index === resultIndex ? { ...result, content } : message,
16057
16102
  );
16058
16103
  } else {
16059
16104
  // Full compaction can leave only the pinned request. Reiterate that
16060
16105
  // exact request after the source data, not a replacement objective.
16061
- const request = messages.findLast((message) => message.role === "user");
16106
+ const request = requestMessages.findLast(
16107
+ (message) => message.role === "user",
16108
+ );
16062
16109
  callMessages = [
16063
- ...messages,
16110
+ ...requestMessages,
16064
16111
  ...readContext.map((content) => ({ role: "assistant", content })),
16065
16112
  {
16066
16113
  role: "user",
@@ -16228,6 +16275,9 @@ export async function* agentLoop(messages, options) {
16228
16275
  callMessages,
16229
16276
  {
16230
16277
  ...options,
16278
+ ...(independentReviewContext?.active
16279
+ ? { contextMemoryRecall: false }
16280
+ : {}),
16231
16281
  contextMemoryToolDefinitions:
16232
16282
  getProviderToolDefinitions(iterationToolOptions),
16233
16283
  contextMemoryTrustedSystemIndexes,
@@ -16243,6 +16293,15 @@ export async function* agentLoop(messages, options) {
16243
16293
  }
16244
16294
  }
16245
16295
 
16296
+ if (independentReviewContext?.active) {
16297
+ try {
16298
+ independentReviewContext.assertRequirementsPreserved(callMessages);
16299
+ } catch (error) {
16300
+ error.code = "CC_CHANGE_REVIEW_CONTEXT_LOST";
16301
+ throw error;
16302
+ }
16303
+ }
16304
+
16246
16305
  const modelIdAttrs = recorder
16247
16306
  ? buildTelemetryAttributes({
16248
16307
  turnId: `${runId}:t${budget.consumed}`,
@@ -16476,6 +16535,16 @@ export async function* agentLoop(messages, options) {
16476
16535
  };
16477
16536
  }
16478
16537
  throwIfAborted(signal);
16538
+ if (
16539
+ independentReviewContext?.active &&
16540
+ changeReviewState.usageKnown === false
16541
+ ) {
16542
+ const error = new Error(
16543
+ "Change review stopped with unknown provider usage; the task remains incomplete.",
16544
+ );
16545
+ error.code = "CC_CHANGE_REVIEW_USAGE_UNKNOWN";
16546
+ throw error;
16547
+ }
16479
16548
 
16480
16549
  if (!msg) {
16481
16550
  await _awaitBackgroundUsageSettlement(
@@ -16573,7 +16642,7 @@ export async function* agentLoop(messages, options) {
16573
16642
  );
16574
16643
  _throwBackgroundUsageFailureState(backgroundUsageFailureState);
16575
16644
  throwIfAborted(signal);
16576
- messages.push(
16645
+ appendMessages(
16577
16646
  markRuntimeOnlySessionMessage({
16578
16647
  role: "assistant",
16579
16648
  content: msg.content || "",
@@ -16583,7 +16652,7 @@ export async function* agentLoop(messages, options) {
16583
16652
  backgroundSubAgents,
16584
16653
  )) {
16585
16654
  _throwBackgroundSubAgentUsageFailure(entry);
16586
- messages.push(
16655
+ appendMessages(
16587
16656
  markRuntimeOnlySessionMessage({
16588
16657
  role: "user",
16589
16658
  content:
@@ -16615,13 +16684,13 @@ export async function* agentLoop(messages, options) {
16615
16684
  const pending = [...pendingSubtreeMutations.values()];
16616
16685
  if (!subtreeMutationReprompted && budget.remaining() > 0) {
16617
16686
  subtreeMutationReprompted = true;
16618
- messages.push(
16687
+ appendMessages(
16619
16688
  markRuntimeOnlySessionMessage({
16620
16689
  role: "assistant",
16621
16690
  content: msg.content || "",
16622
16691
  }),
16623
16692
  );
16624
- messages.push(
16693
+ appendMessages(
16625
16694
  markRuntimeOnlySessionMessage({
16626
16695
  role: "user",
16627
16696
  content:
@@ -16665,17 +16734,31 @@ export async function* agentLoop(messages, options) {
16665
16734
  budget.hasRemaining()
16666
16735
  ) {
16667
16736
  throwIfAborted(signal);
16737
+ if (independentReviewSetupError) throw independentReviewSetupError;
16668
16738
  changeReviewState.requested = true;
16669
- messages.push(
16739
+ const reviewPrompt = markRuntimeOnlySessionMessage({
16740
+ role: "user",
16741
+ content: CODING_CHANGE_REVIEW_PROMPT,
16742
+ });
16743
+ appendMessages(
16670
16744
  markRuntimeOnlySessionMessage({
16671
16745
  role: "assistant",
16672
16746
  content: msg.content || "",
16673
16747
  }),
16674
- markRuntimeOnlySessionMessage({
16675
- role: "user",
16676
- content: CODING_CHANGE_REVIEW_PROMPT,
16677
- }),
16748
+ reviewPrompt,
16678
16749
  );
16750
+ if (independentReviewContext) {
16751
+ independentReviewContext.activate(reviewPrompt);
16752
+ changeReviewState.independentReviewPending = true;
16753
+ // These are phase-local discovery hints, not permission or spend
16754
+ // authorities. Fresh inspection must not inherit author assertions,
16755
+ // old visible file pages, or a pause caused by author exploration.
16756
+ readFileLoopGuard = new ReadFileLoopGuard();
16757
+ remoteReadLoopGuard = new RemoteReadLoopGuard();
16758
+ taskProgressTracker = new TaskProgressTracker();
16759
+ toolContext.readFileLoopGuard = readFileLoopGuard;
16760
+ lastTaskProgressIntervention = null;
16761
+ }
16679
16762
  yield {
16680
16763
  type: "iteration-warning",
16681
16764
  message: "Reviewing changed files against the task before finishing.",
@@ -16703,10 +16786,10 @@ export async function* agentLoop(messages, options) {
16703
16786
  const _contentEmpty = !String(msg.content || "").trim();
16704
16787
  if (_contentEmpty && _thinking && !emptyThinkingReprompted) {
16705
16788
  emptyThinkingReprompted = true;
16706
- messages.push(
16789
+ appendMessages(
16707
16790
  markRuntimeOnlySessionMessage({ role: "assistant", content: "" }),
16708
16791
  );
16709
- messages.push(
16792
+ appendMessages(
16710
16793
  markRuntimeOnlySessionMessage({
16711
16794
  role: "user",
16712
16795
  content:
@@ -16770,13 +16853,13 @@ export async function* agentLoop(messages, options) {
16770
16853
  }
16771
16854
  if (stopOutcome && stopOutcome.decision === "block") {
16772
16855
  stopHookActive = true;
16773
- messages.push(
16856
+ appendMessages(
16774
16857
  markRuntimeOnlySessionMessage({
16775
16858
  role: "assistant",
16776
16859
  content: msg.content || "",
16777
16860
  }),
16778
16861
  );
16779
- messages.push(
16862
+ appendMessages(
16780
16863
  markRuntimeOnlySessionMessage({
16781
16864
  role: "user",
16782
16865
  content:
@@ -16792,6 +16875,9 @@ export async function* agentLoop(messages, options) {
16792
16875
  continue;
16793
16876
  }
16794
16877
  }
16878
+ if (independentReviewContext?.active) {
16879
+ changeReviewState.independentReviewPending = false;
16880
+ }
16795
16881
  yield { type: "run-ended", runId, reason: "complete" };
16796
16882
  return;
16797
16883
  }
@@ -16815,7 +16901,7 @@ export async function* agentLoop(messages, options) {
16815
16901
  }
16816
16902
 
16817
16903
  // Add assistant message with tool calls
16818
- messages.push(msg);
16904
+ appendMessages(msg);
16819
16905
  readFileLoopGuard.startBatch();
16820
16906
 
16821
16907
  // Concurrent READ-ONLY batch (latency optimization). When every call in the
@@ -16935,7 +17021,7 @@ export async function* agentLoop(messages, options) {
16935
17021
  if (fatalError) throw fatalError;
16936
17022
  throwIfAborted(signal);
16937
17023
  recordSubtreeMutation(call.function.name, toolArgs, toolResult);
16938
- const taskAdvanced = taskProgressTracker.record(
17024
+ const taskAdvanced = recordTaskProgress(
16939
17025
  call.function.name,
16940
17026
  toolResult,
16941
17027
  toolArgs,
@@ -16968,7 +17054,7 @@ export async function* agentLoop(messages, options) {
16968
17054
  const resultStr = toolResultForModel(
16969
17055
  call.function.name,
16970
17056
  toolResult,
16971
- messages,
17057
+ requestMessages,
16972
17058
  );
16973
17059
  const toolContent = warningMsg
16974
17060
  ? `${resultStr}\n\n${warningMsg}`
@@ -16995,7 +17081,7 @@ export async function* agentLoop(messages, options) {
16995
17081
  toolResult,
16996
17082
  );
16997
17083
  if (nestedOutcomeUnknown) throw nestedOutcomeUnknown;
16998
- messages.push({
17084
+ appendMessages({
16999
17085
  role: "tool",
17000
17086
  content: toolContent,
17001
17087
  tool_call_id: call.id,
@@ -17052,7 +17138,7 @@ export async function* agentLoop(messages, options) {
17052
17138
  tool_use_id: call?.id || null,
17053
17139
  turn_id: `${runId}:t${budget.consumed}`,
17054
17140
  };
17055
- messages.push({
17141
+ appendMessages({
17056
17142
  role: "tool",
17057
17143
  content: `Error: ${reason}.`,
17058
17144
  tool_call_id: call?.id,
@@ -17111,12 +17197,7 @@ export async function* agentLoop(messages, options) {
17111
17197
  readFileLoopGuard.record(
17112
17198
  toolName,
17113
17199
  earlyAuthorityDenial,
17114
- taskProgressTracker.record(
17115
- toolName,
17116
- earlyAuthorityDenial,
17117
- toolArgs,
17118
- runId,
17119
- ),
17200
+ recordTaskProgress(toolName, earlyAuthorityDenial, toolArgs, runId),
17120
17201
  );
17121
17202
  const resultStr = capToolResultString(
17122
17203
  safeStringifyToolResult(earlyAuthorityDenial),
@@ -17152,7 +17233,7 @@ export async function* agentLoop(messages, options) {
17152
17233
  permission_decision_id: decision?.id || null,
17153
17234
  permission_decision: decision,
17154
17235
  };
17155
- messages.push({
17236
+ appendMessages({
17156
17237
  role: "tool",
17157
17238
  content: resultStr,
17158
17239
  tool_call_id: call.id,
@@ -17477,9 +17558,13 @@ export async function* agentLoop(messages, options) {
17477
17558
  // Cap an individual tool result so one giant output can't blow the
17478
17559
  // context — but tell the model when we cut it (no more silent
17479
17560
  // mid-content slice). See MAX_TOOL_RESULT_CHARS / capToolResultString.
17480
- const resultStr = toolResultForModel(toolName, toolResult, messages);
17561
+ const resultStr = toolResultForModel(
17562
+ toolName,
17563
+ toolResult,
17564
+ requestMessages,
17565
+ );
17481
17566
  recordSubtreeMutation(toolName, toolArgs, toolResult);
17482
- const taskAdvanced = taskProgressTracker.record(
17567
+ const taskAdvanced = recordTaskProgress(
17483
17568
  toolName,
17484
17569
  toolResult,
17485
17570
  toolArgs,
@@ -17519,7 +17604,7 @@ export async function* agentLoop(messages, options) {
17519
17604
  );
17520
17605
  if (nestedOutcomeUnknown) throw nestedOutcomeUnknown;
17521
17606
 
17522
- messages.push({
17607
+ appendMessages({
17523
17608
  role: "tool",
17524
17609
  content: toolContent,
17525
17610
  tool_call_id: call.id,
@@ -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 h,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as y,b as a}from"./vendor-Bn1JzzAn.js";import{_ as w}from"./index-CmMzB4C-.js";import"./icons-DG5UD-6K.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const o=p,e=a(()=>o.event.content||{}),d=a(()=>o.event.extra||{}),m=a(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=a(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),g=a(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=a(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=a(()=>e.value.status||e.value.state),b=a(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),S=a(()=>{if(!o.event.occurredAt)return"";const t=new Date(o.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:o,c:e,e:d,merchantText:m,itemText:c,amountText:g,orderNo:T,statusText:f,statusColor:b,formattedTime:S,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},R={class:"row"},V={class:"val"},B={class:"row"},D={class:"val"},I={class:"row amount-row"},j={class:"val amount"},A={key:0,class:"row"},F={class:"val mono"},M={key:1,class:"row"};function P(p,r,o,e,d,m){const c=h("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(o.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(o.event.subtype),1)]),_:1})]),s("div",R,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",V,n(e.merchantText),1)]),s("div",B,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",D,n(e.itemText),1)]),s("div",I,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",j,n(e.amountText),1)]),e.orderNo?(l(),u("div",A,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",F,n(e.orderNo),1)])):y("v-if",!0),e.statusText?(l(),u("div",M,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):y("v-if",!0)])}const K=w(k,[["render",P],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.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};