chainlesschain 0.166.118 → 0.166.121

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 (162) hide show
  1. package/README.md +12 -2
  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-BGySwMIP.js → AIOps-DYEi6MCC.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-Chn7fBLr.js → ActionButton-kLXp42k3.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-ORH7UkGa.js → Analytics-BOgKma-R.js} +3 -3
  8. package/src/assets/web-panel/assets/{AppLayout-8xV4jWjP.js → AppLayout-D8z-uRpv.js} +5 -5
  9. package/src/assets/web-panel/assets/{Artifacts-26SBK-x-.js → Artifacts-TFX0t24T.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-CtXpqbXg.js → Audit-GjRCAv0V.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-C5zLvQis.js → BackgroundAgents-CpQcMxi1.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-C93xY4vO.js → Backup-BuQNWrhT.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-DpVCHfAn.js → BaseInput-QuOtSaFy.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-DM0LblR2.js → Chat-BC0W1L_3.js} +4 -4
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-unlQUF1T.js → ChatBubbleRenderer-B6SagRW5.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-BsAt3cKR.js → Checkbox-BsdQ1Ku0.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-E_kp4KFd.js → Codegen-CPsAAoqV.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-6msR3T6I.js → Col-C9LgCMN0.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-PyX9c5D-.js → Community-Xj0vGvD5.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-7G1bVDSH.js → Compact-CXoqTgrf.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-DcHN7GlD.js → Compliance-CeshjrVy.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-WUIHJYDx.js → Cowork-DjXRRrg1.js} +3 -3
  23. package/src/assets/web-panel/assets/{Cron-CWgCbptg.js → Cron-vGoU419C.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-BzKZ6roD.js → Crosschain-DZaChZ5s.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-r7zxeItn.js → DID-BojMQqQM.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-D3pBiN2H.js → Dashboard-pKAYt4UL.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-C4otRJlZ.js → Dropdown-CqJa8N05.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-CzDTC8lm.js → EmailListRenderer-fZ4_KAvw.js} +1 -1
  29. package/src/assets/web-panel/assets/{EvolutionSettings-DGkXiIs-.js → EvolutionSettings-C3kenWes.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BKdEyuiR.js → FamilyGuardDashboard-B3tqj1Hu.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-dsI-xcpf.js → Federation-CS1M1oJN.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-CEEb1fMR.js → FormItemContext-C5q-KYPu.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-D_mfO3Ts.js → GenericCardRenderer-Bl43BLxD.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-CBwr2ZI3.js → Git-BiN2Uo-z.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-D-Wy2Jjr.js → Governance-weglJWG4.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-B4Yk_IRx.js → Inference-B4qBxVSK.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-DoI7bi6m.js → KnowledgeGraph-iePl1vLv.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-Ce1IiKAj.js → Logs-t2lKo4HX.js} +2 -2
  39. package/src/assets/web-panel/assets/MarkdownRenderer-CxSrBHYC.js +1 -0
  40. package/src/assets/web-panel/assets/{Marketplace-CsIEByzK.js → Marketplace-D0Y_OmXs.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-_DRzjcIn.js → McpTools-B7zxPsFE.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-zvLpyi__.js → Memory-DDpmVHpl.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DXd1ik2Z.js → MobileBridge-BLXNdKH0.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-DKh2q-Y9.js → MobileProjects-CF6DqNfk.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-Ct-fhtIx.js → Mtc-7OFckDUe.js} +4 -4
  46. package/src/assets/web-panel/assets/{MtcAudit-J4zY3Oqk.js → MtcAudit-2QFWPXVR.js} +4 -4
  47. package/src/assets/web-panel/assets/{Multisig-B2HJMCKe.js → Multisig-D9opE0iP.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-CwcSmU4q.js → NLProgramming-jOD2E7Rs.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-Da53L6wb.js → Notes-CgtysN6L.js} +3 -3
  50. package/src/assets/web-panel/assets/{NotificationSettings-BxhufdrA.js → NotificationSettings-Itz3X5DM.js} +1 -1
  51. package/src/assets/web-panel/assets/OrderTableRenderer-C2ylWgSI.js +1 -0
  52. package/src/assets/web-panel/assets/{Organization-MIsMrUes.js → Organization-CKgpbSoy.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-Dy2P4v3q.js → Overflow-C0Pi9LvB.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-CD9Sxn2y.js → P2P-DdIDorai.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-BvBWgfG0.js → PdhVaultBrowser-DVJz6cGr.js} +4 -4
  56. package/src/assets/web-panel/assets/{Permissions-CwOlDRis.js → Permissions-D19dtcL0.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-CZYaxEpv.js → PersonalDataHub-A-QMQUJW.js} +5 -5
  58. package/src/assets/web-panel/assets/{Pipeline-kLU7PUbB.js → Pipeline-7YF1yhkH.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-BVRycSiI.js → Privacy-CcsoAU7d.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-DP3pr7uJ.js → ProjectInit-CMU0Z5in.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-CACaDYjs.js → ProjectSettings-D3l0RXK6.js} +2 -2
  62. package/src/assets/web-panel/assets/Projects-BCcHN_fQ.js +1 -0
  63. package/src/assets/web-panel/assets/{Providers-D7Y9WHRE.js → Providers-DB0pw3DM.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-CeP8xzs1.js → QrScannerModal-SVvLX_VH.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-iJVFrhZ2.js → QuickAsk-B4dJgwL4.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-DmTpnagw.js → Recommend-9GxSlYt5.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-C6ek8Uni.js → RemoteSession-C5vzfpTM.js} +2 -2
  68. package/src/assets/web-panel/assets/{Reputation-CPfwc9de.js → Reputation-7AeSkJz1.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-C1wwtSMJ.js → Row-Dc3RwqWR.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-BiDJsqaH.js → RssFeed-Y8iSgp9o.js} +2 -2
  71. package/src/assets/web-panel/assets/{Search-BF6Aon95.js → Search-bxkz-UtW.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-Bps0XnV4.js → Security-cs5yf-AE.js} +3 -3
  73. package/src/assets/web-panel/assets/{Services-uf92smGR.js → Services-2va9CJFi.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-DQd4eVWW.js → Skeleton-n8HOSPcE.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-DgamiYa5.js → Skills-BcV5aWYc.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-CF1IVIrm.js → Sla-B73zPlDG.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-Bzxmjbpc.js → SpeechSettings-OhhEZsxi.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-B8zKauiq.js → SyncSettings-4HT8618-.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-DPKV_xSt.js → Tasks-Dw7nEG94.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-BikeSZIF.js → Templates-BX7zHI9M.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-CEaUaDkJ.js → Tenant-SrFN1ZTF.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-ZPgOSQ_q.js → Terminal-B-ohas9S.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-DmyB4Udk.js → TimelineRenderer-exEpcIMD.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-g85Pm5TO.js → Tokens-Fucr0-Ek.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-D202hx9a.js → Trigger-CPlH4qBU.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-DzvQYVFy.js → Trust-DCNisGxI.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-KRzwddVg.js → UkeySign-Crf4bea0.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-IRBXLO2z.js → VideoEditing-JAq5jURW.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-DSf5KPgQ.js → Wallet-BaOfcyqF.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-DNPxLTCc.js → WebAuthn-DMtCTRsk.js} +5 -5
  91. package/src/assets/web-panel/assets/{WorkflowEditor-C3wAtVcK.js → WorkflowEditor-BAKiA5p0.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-q3XXUtv2.js → chat-D3MA12Z1.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-CF54SNei.js → colors-C7xYOAG-.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-BaRkvZuT.js → compact-item-ClybpIV-.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-CDR9hsfs.js → createContext-Dyp-8LSs.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-CTazgK0z.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-DlC--S8R.js → hasIn-D4xsaFD1.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Dc3gD0cw.js → index-B-eU0wCl.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-D0H-N0uG.js → index-B7jiI-31.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BZrE0Go8.js → index-BKyEhMUl.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BizdX2X5.js → index-BMybVxE3.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CC5HjNM6.js → index-BagQvwmy.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DiQzer2R.js → index-BcmJBS7G.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-D0vIgprF.js → index-BfZW-iaH.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-C87Yr3h1.js → index-BmBqpU1f.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-Ctid12Gq.js → index-Bn8O_DC1.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CPvIhha6.js → index-BpLWtYzy.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BU5DJqk7.js → index-CHJUN9dR.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-B0Ptc7yu.js → index-CNBhQp0_.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BEiUlFKb.js → index-CS7E_bsQ.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CtGfeD7E.js → index-CSOgUWox.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-W6cLGjpW.js → index-CiRxc4Y0.js} +1 -1
  113. package/src/assets/web-panel/assets/index-CrZlBv0O.js +1 -0
  114. package/src/assets/web-panel/assets/{index-Cl6av3X7.js → index-CvsWZZzU.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DX2REKNp.js → index-Cvwa0445.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CAoG_E-q.js → index-CxSVA3yj.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DntKLOs9.js → index-D5aA2hc_.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CZ8azVgB.js → index-D6ETHrUX.js} +3 -3
  119. package/src/assets/web-panel/assets/{index-B0V9rgdu.js → index-D6GFzqYv.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CR_wqMGy.js → index-DDDP6-gb.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CAxSyMrF.js → index-DJVzi25x.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BY-Tf3OM.js → index-DMlcfkHz.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-IVQdOBNN.js → index-DNeHM7F3.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CeiKbM3a.js → index-DT57ltH_.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C9Wypz9e.js → index-DWHngGhj.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-Dplhl6gh.js → index-DuGdqMTo.js} +1 -1
  127. package/src/assets/web-panel/assets/index-DyNp52Uj.js +1 -0
  128. package/src/assets/web-panel/assets/{index-D4wUDFRg.js → index-KvhXXaLi.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-qZDNFll9.js → index-Rk6e-ajq.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Kerduyao.js → index-ZmHm5rHI.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-CSClXoB3.js → index-_9loRV63.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-Ccc5z8eJ.js → index-avRJM_PM.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CNZQEZ9g.js → index-ciHSB-CC.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-BJO0n1LQ.js → index-faSaFsUp.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-DJFipyK7.js → index-nV4PAkOC.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-Dq8q_PWB.js → index-v5sQDXJx.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-Ccz7v71u.js → initDefaultProps-xrojGNIo.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-BlCLpVDp.js → motion-DzhD1BmE.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-B80G7fLU.js → move-BAq6xac8.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-Djw08NJh.js → mtc-parser-CbbkHqsY.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-Bg_G1eUr.js → omit-DvK7nt_t.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-Df9zYUg2.js → pickAttrs-B8N30ZEF.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-DjCDLhJ4.js → placementArrow-cUxaRoU7.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve--Naz7NgY.js → responsiveObserve-CxMioios.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-CHn3ald-.js → slide-CQx7R0mc.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-BiGwoIK_.js → statusUtils-kUphM3-c.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-Zf2dQx1j.js → styleChecker-BrGZ1xWq.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-sLES8nyD.js → useFlexGapSupport-Sb5Vj_ag.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-DV1Hl4qu.js → useFs-DrMnDCO5.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-CZXr2Qxg.js → usePersonalDataHub-C48ZIkOr.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-e8Eo3Oyl.js → vnode-BQP6PZY_.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-B8A6xKMF.js → zoom-DOJny9bH.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/evolution/evidence-json-text.js +59 -5
  156. package/src/lib/evolution/evolution-evidence-projector.js +25 -1
  157. package/src/assets/web-panel/assets/MarkdownRenderer-GND_8y0V.js +0 -1
  158. package/src/assets/web-panel/assets/OrderTableRenderer-BoFwohAi.js +0 -1
  159. package/src/assets/web-panel/assets/Projects-CB1k4zTC.js +0 -1
  160. package/src/assets/web-panel/assets/devWarning-1LO-NplX.js +0 -1
  161. package/src/assets/web-panel/assets/index-BLaJsev4.js +0 -1
  162. package/src/assets/web-panel/assets/index-BLmviChG.js +0 -1
@@ -65,6 +65,28 @@ const CODE_DOUBLE_QUOTED_PREFIX = /^"(?:[^"\\\x00-\x1f]|\\[\s\S])*"/u;
65
65
  const CODE_SINGLE_QUOTED_PREFIX = /^'(?:[^'\\\x00-\x1f]|\\[\s\S])*'/u;
66
66
  /* eslint-enable no-control-regex */
67
67
 
68
+ // Only closed, bounded display formats qualify. Never accept quotes, escapes,
69
+ // commas or nested containers here. Exponent-shaped hashes remain JSON numbers
70
+ // so non-finite/unsafe numeric values cannot evade the existing budget checks.
71
+ const DISPLAY_BRACKET_MARKER = new RegExp(
72
+ "^\\[(?:" +
73
+ "\\d+[ \\t]+\\d+(?:[ \\t]+\\d+)*|" +
74
+ "\\d+[ \\t]*\\/[ \\t]*\\d+(?:[ \\t]+\\d{1,3}%)?|" +
75
+ "\\d+[ \\t]+of[ \\t]+\\d+|" +
76
+ "\\d{1,3}(?:\\.\\d+)?%|" +
77
+ "\\d{4}-\\d{2}-\\d{2}(?:[ T]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})?)?|" +
78
+ "\\d{1,2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,9})?)?|" +
79
+ "v?\\d+\\.\\d+\\.\\d+|" +
80
+ "[0-9]-[0-9]|" +
81
+ "\\[[A-Za-z][A-Za-z0-9_./ #+-]*\\]|" +
82
+ "[ \\t]+\\d+[ \\t]+-(?:eq|ne|lt|le|gt|ge)[ \\t]+\\d+[ \\t]+|" +
83
+ "\\[[ \\t]+-[defrswx][ \\t]+[A-Za-z0-9_./-]+[ \\t]+\\]|" +
84
+ "(?!\\d+[eE]\\d+\\])(?=[0-9a-f]{7,64}\\])(?=[0-9a-f]*[a-f])[0-9][0-9a-f]+|" +
85
+ "[0-9a-f]{7,64}\\.\\.[0-9a-f]{7,64}" +
86
+ ")\\]",
87
+ "u",
88
+ );
89
+
68
90
  export function isAgentToolArgumentsPath(path) {
69
91
  return (
70
92
  path.length === 6 &&
@@ -292,6 +314,14 @@ export function createEvidenceJsonTextBoundary(
292
314
  );
293
315
  }
294
316
  index += token.length;
317
+ // A primitive prefix is not a complete source expression. In particular,
318
+ // redacting only `true` from trueSecretValue would expose the suffix of
319
+ // a sensitive quoted assignment. Historical policies retain their parser.
320
+ if (
321
+ policy.proseQuotedPairPolicy &&
322
+ /[\p{ID_Continue}$\\]/u.test(text[index] ?? "")
323
+ )
324
+ return parserReject("code-expression");
295
325
  const parsed = JSON.parse(token);
296
326
  if (
297
327
  typeof parsed === "number" &&
@@ -376,6 +406,26 @@ export function createEvidenceJsonTextBoundary(
376
406
  char === "{" || char === "["
377
407
  ? text.slice(index + 1).match(/^\s*(.)/u)?.[1]
378
408
  : undefined;
409
+ // Human-readable status markers are not JSON arrays. Only complete,
410
+ // bounded numeric formats qualify; quotes, escapes, commas and nested
411
+ // containers must still go through strict parsing. Leave these spans in
412
+ // plain text so the ordinary credential/PII sanitizer still sees them.
413
+ if (
414
+ char === "[" &&
415
+ policy.bracketMarkerPolicy === "bounded-display-markers-v1"
416
+ ) {
417
+ // ANSI CSI controls in terminal output start with ESC followed by [.
418
+ // Limit recognition to numeric parameters and a final control letter.
419
+ const marker =
420
+ (text[index - 1] === "\x1b"
421
+ ? /^\[[0-9;:?]{0,64}[A-Za-z]/u.exec(text.slice(index, index + 128))
422
+ : null) ??
423
+ DISPLAY_BRACKET_MARKER.exec(text.slice(index, index + 128));
424
+ if (marker) {
425
+ index += marker[0].length;
426
+ continue;
427
+ }
428
+ }
379
429
  const container =
380
430
  (char === "{" &&
381
431
  (next === '"' || next === "}" || next === "'" || next === "\\")) ||
@@ -467,7 +517,7 @@ export function createEvidenceJsonTextBoundary(
467
517
  const entryEnd = rhs.end();
468
518
  rhs.whitespace();
469
519
  if (
470
- codeText &&
520
+ (codeText || policy.proseQuotedPairPolicy) &&
471
521
  /^[+\-*/%?.([<>&|^=!"']/u.test(text[rhs.end()] ?? "")
472
522
  )
473
523
  requireSafeExpressionKey();
@@ -479,10 +529,14 @@ export function createEvidenceJsonTextBoundary(
479
529
  } catch (error) {
480
530
  const kind = error?.[PARSE_FAILURE];
481
531
  if (kind === undefined) throw error;
482
- if (!codeText || kind !== "code-expression")
532
+ if (
533
+ (!codeText && !policy.proseQuotedPairPolicy) ||
534
+ kind !== "code-expression"
535
+ )
483
536
  rejectParseFailure(error);
484
- // In a run_code source/result string, a quoted key followed by a
485
- // Python/JavaScript expression is code, not a broken JSON pair.
537
+ // A standalone prose label or a source key followed by an
538
+ // expression is not a broken JSON container. Sensitive decoded
539
+ // keys still fail closed before scanning resumes.
486
540
  // Resume the scan at the next literal so any string value still
487
541
  // receives key-aware or ordinary secret scanning.
488
542
  requireSafeExpressionKey();
@@ -509,7 +563,7 @@ export function createEvidenceJsonTextBoundary(
509
563
  }
510
564
  const safe = transform(parsed);
511
565
  if (
512
- codeText &&
566
+ (codeText || policy.proseQuotedPairPolicy) &&
513
567
  assignmentKey &&
514
568
  !equal(parsed, safe) &&
515
569
  /^\s*[+\-*/%?.([<>&|^=!"']/u.test(text.slice(end))
@@ -562,13 +562,32 @@ export const EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_V4_DIGEST = `sha256:${crea
562
562
  "utf8",
563
563
  )
564
564
  .digest("hex")}`;
565
- const AGENT_MODEL_RULESET = Object.freeze({
565
+ const AGENT_MODEL_RULESET_V5 = Object.freeze({
566
566
  ...AGENT_MODEL_RULESET_V4,
567
567
  schema: "chainlesschain.evolution-agent-model-projection-rules/v5",
568
568
  version: 5,
569
569
  fencedCodePolicy: "closed-message-code-fence-literal-scan-v1",
570
570
  fencedCodeLanguages: AGENT_FENCED_CODE_LANGUAGES,
571
571
  });
572
+ export const EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_V5_DIGEST = `sha256:${createHash(
573
+ "sha256",
574
+ )
575
+ .update(
576
+ `${AGENT_MODEL_RULESET_V5.schema}\0${JSON.stringify(AGENT_MODEL_RULESET_V5)}`,
577
+ "utf8",
578
+ )
579
+ .digest("hex")}`;
580
+ const AGENT_MODEL_RULESET = Object.freeze({
581
+ ...AGENT_MODEL_RULESET_V5,
582
+ schema: "chainlesschain.evolution-agent-model-projection-rules/v6",
583
+ version: 6,
584
+ jsonTextPolicy: Object.freeze({
585
+ ...AGENT_MODEL_RULESET_V5.jsonTextPolicy,
586
+ version: 3,
587
+ bracketMarkerPolicy: "bounded-display-markers-v1",
588
+ proseQuotedPairPolicy: "non-sensitive-top-level-expression-v1",
589
+ }),
590
+ });
572
591
  export const EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_DIGEST = `sha256:${createHash(
573
592
  "sha256",
574
593
  )
@@ -601,6 +620,7 @@ const SUPPORTED_RULESETS = new Map([
601
620
  [EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_V2_DIGEST, AGENT_MODEL_RULESET_V2],
602
621
  [EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_V3_DIGEST, AGENT_MODEL_RULESET_V3],
603
622
  [EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_V4_DIGEST, AGENT_MODEL_RULESET_V4],
623
+ [EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_V5_DIGEST, AGENT_MODEL_RULESET_V5],
604
624
  [EVOLUTION_AGENT_MODEL_PROJECTION_RULESET_DIGEST, AGENT_MODEL_RULESET],
605
625
  ]);
606
626
 
@@ -676,6 +696,7 @@ const AGENT_VALUE_PATTERNS = Object.freeze([
676
696
  function valuePatterns(ruleset) {
677
697
  return ruleset === SKILL_DECISION_RULESET ||
678
698
  ruleset === AGENT_MODEL_RULESET ||
699
+ ruleset === AGENT_MODEL_RULESET_V5 ||
679
700
  ruleset === AGENT_MODEL_RULESET_V4 ||
680
701
  ruleset === AGENT_MODEL_RULESET_V3 ||
681
702
  ruleset === AGENT_MODEL_RULESET_V2 ||
@@ -1428,6 +1449,7 @@ function sanitizePayload(
1428
1449
  const toolArguments = jsonText && isAgentToolArgumentsPath(path);
1429
1450
  const opaqueTransportBlock =
1430
1451
  ruleset === AGENT_MODEL_RULESET ||
1452
+ ruleset === AGENT_MODEL_RULESET_V5 ||
1431
1453
  ruleset === AGENT_MODEL_RULESET_V4 ||
1432
1454
  ruleset === AGENT_MODEL_RULESET_V3
1433
1455
  ? projectAgentOpaqueTransportBlock(value, path.join("."))
@@ -3316,6 +3338,7 @@ function validateBundleIntegrity(bundle) {
3316
3338
  }
3317
3339
  if (
3318
3340
  ruleset === AGENT_MODEL_RULESET ||
3341
+ ruleset === AGENT_MODEL_RULESET_V5 ||
3319
3342
  ruleset === AGENT_MODEL_RULESET_V4 ||
3320
3343
  ruleset === AGENT_MODEL_RULESET_V3 ||
3321
3344
  ruleset === AGENT_MODEL_RULESET_V2 ||
@@ -3325,6 +3348,7 @@ function validateBundleIntegrity(bundle) {
3325
3348
  allowStructuredArgumentText: ruleset !== AGENT_MODEL_RULESET_V1,
3326
3349
  allowOpaqueTransportBlocks:
3327
3350
  ruleset === AGENT_MODEL_RULESET ||
3351
+ ruleset === AGENT_MODEL_RULESET_V5 ||
3328
3352
  ruleset === AGENT_MODEL_RULESET_V4 ||
3329
3353
  ruleset === AGENT_MODEL_RULESET_V3,
3330
3354
  });
@@ -1 +0,0 @@
1
- import{P as c,J as p,b as s}from"./vendor-Bn1JzzAn.js";import{r as a}from"./markdown-Bq2x0XsR.js";import{_ as d}from"./index-CZ8azVgB.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=s(()=>a(e.content||"")),n={props:e,rendered:r,computed:s,get renderMarkdown(){return a}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return c(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-47hUXv/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
@@ -1 +0,0 @@
1
- import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as a}from"./vendor-Bn1JzzAn.js";import{_ as S}from"./index-CZ8azVgB.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||"—"),y=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),h=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"}),b=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:y,orderNo:T,statusText:f,statusColor:h,formattedTime:b,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={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=w("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",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,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)])):g("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"])])):g("v-if",!0)])}const J=S(k,[["render",P],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-47hUXv/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{J as default};
@@ -1 +0,0 @@
1
- import{I as i,J as h,U as A,R as s,Q as r,c as t,K as a,V as _,S as x,o as oe,b as ee,r as u,P as p,F as ne,a2 as ge}from"./vendor-Bn1JzzAn.js";import{_ as we,b as re,u as ie,d}from"./index-CZ8azVgB.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aN as ke,aO as Fe,aP as be,f as je,a5 as Ce,a8 as xe,at as Oe,R as Se}from"./icons-DG5UD-6K.js";const Pe={__name:"Projects",setup(se,{expose:l}){l();const{t:te}=re(),e=ie(),{isEmbedded:W}=de();async function w(o,f,ye,ae=8e3){if(W){const Z=await e.sendRaw({...f,type:o},ae);if(!Z?.ok){const $=Z?.error;throw new Error(typeof $=="string"?$:$?.message||`${o} failed`)}return Z.result}return e.executeJson(ye,ae)}const B=u(!1),y=u([]),O=u(""),S=u(""),P=u(!1),v=u(null),I=u([]),k=u(!1),E=u(!1),L=u(!1),F=u({name:"",description:"",type:"document",rootPath:""}),z=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],V=ee(()=>{const o={active:0,draft:0,completed:0,archived:0};for(const f of y.value)o[f.status]!==void 0&&(o[f.status]+=1);return o}),J=ee(()=>y.value.filter(o=>!(O.value&&o.status!==O.value||S.value&&!o.name.toLowerCase().includes(S.value.toLowerCase()))));function g(o){switch(o){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function K(o){switch(o){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function Q(o){return!o&&o!==0?"-":new Date(typeof o=="number"?o:parseInt(o,10)).toLocaleString("zh-CN",{hour12:!1})}async function C(){B.value=!0;try{const o=await w("project.list",{limit:500},"project list --limit 500 --json",1e4);y.value=Array.isArray(o?.projects)?o.projects:Array.isArray(o)?o:[]}catch(o){d.error("加载失败: "+(o.message||o)),y.value=[]}finally{B.value=!1}}function X(o){return{onClick:()=>M(o)}}async function M(o){v.value=o,P.value=!0,k.value=!0,I.value=[];try{const f=await w("project.listFiles",{projectId:o.id,limit:200},`project list-files ${o.id} --json`,8e3);I.value=Array.isArray(f?.files)?f.files:[]}catch{I.value=[]}finally{k.value=!1}}async function G(o){try{(await w("project.delete",{id:o.id},`project delete ${o.id} --json`,8e3))?.ok?(d.success(`已删除项目 '${o.name}'`),P.value=!1,await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}function H(){F.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function T(){if(!F.value.name.trim()){d.warning("请输入项目名称");return}L.value=!0;try{const o=await w("project.init",{name:F.value.name.trim(),description:F.value.description||null,projectType:F.value.type,rootPath:F.value.rootPath||null},`project init "${F.value.name.trim()}" --type ${F.value.type} --json`,8e3);o?.id?(d.success(`已创建项目 '${o.name}'`),E.value=!1,await C()):d.error("创建失败")}catch(o){d.error(o.message||String(o))}finally{L.value=!1}}const b=u(!1),D=u(!1),j=u({path:"",content:""}),U=u(!1),m=u(!1),R=u({path:""}),n=u(!1),c=u(null),q=u(""),Y=u(!1);function ue(){j.value={path:"",content:""},b.value=!0}function ce(){R.value={path:""},U.value=!0}async function N(){if(v.value){k.value=!0;try{const o=await w("project.listFiles",{projectId:v.value.id,limit:200},`project list-files ${v.value.id} --json`,8e3);I.value=Array.isArray(o?.files)?o.files:[]}catch(o){d.error("刷新文件失败: "+(o.message||o))}finally{k.value=!1}}}async function fe(){if(!j.value.path.trim()){d.warning("请输入文件路径");return}if(v.value){D.value=!0;try{const o=await w("project.createFile",{projectId:v.value.id,filePath:j.value.path.trim(),content:j.value.content||""},`project create-file ${v.value.id} "${j.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件 '${o.file_name}'`),b.value=!1,await N(),await C()):d.error("创建文件失败")}catch(o){d.error(o.message||String(o))}finally{D.value=!1}}}async function pe(){if(!R.value.path.trim()){d.warning("请输入文件夹路径");return}if(v.value){m.value=!0;try{const o=await w("project.createFolder",{projectId:v.value.id,folderPath:R.value.path.trim()},`project create-folder ${v.value.id} "${R.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件夹 '${o.file_name}'`),U.value=!1,await N(),await C()):d.error("创建文件夹失败")}catch(o){d.error(o.message||String(o))}finally{m.value=!1}}}async function ve(o){try{(await w("project.deleteFile",{fileId:o.id},`project delete-file ${o.id} --json`,8e3))?.deleted?(d.success(`已删除 '${o.file_name}'`),await N(),await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}async function me(o){if(o.is_folder){d.info("文件夹无内容可编辑");return}try{const f=await w("project.getFile",{fileId:o.id},`project get-file ${o.id} --json`,8e3);c.value=o,q.value=f?.content||"",n.value=!0}catch(f){d.error("读取文件失败: "+(f.message||f))}}async function _e(){if(c.value){Y.value=!0;try{(await w("project.writeFile",{fileId:c.value.id,content:q.value},`project write-file ${c.value.id} --json`,8e3))?.id?(d.success("已保存"),n.value=!1,await N()):d.error("保存失败")}catch(o){d.error(o.message||String(o))}finally{Y.value=!1}}}oe(()=>{C()});const le={t:te,ws:e,isEmbedded:W,callProjectTopic:w,loading:B,projects:y,statusFilter:O,nameFilter:S,detailOpen:P,detail:v,files:I,filesLoading:k,createOpen:E,creating:L,newProject:F,columns:z,countByStatus:V,filteredProjects:J,statusColor:g,syncColor:K,formatTime:Q,loadAll:C,onRowClick:X,openDetail:M,onDelete:G,onShowCreate:H,onCreate:T,createFileOpen:b,creatingFile:D,newFile:j,createFolderOpen:U,creatingFolder:m,newFolder:R,editFileOpen:n,editingFile:c,editFileContent:q,savingFile:Y,openCreateFile:ue,openCreateFolder:ce,refreshFiles:N,onCreateFile:fe,onCreateFolder:pe,onDeleteFile:ve,openEditFile:me,onSaveFile:_e,ref:u,computed:ee,onMounted:oe,get ReloadOutlined(){return Se},get PlusOutlined(){return Oe},get FolderOutlined(){return xe},get FileTextOutlined(){return Ce},get CheckCircleOutlined(){return je},get CheckSquareOutlined(){return be},get FileAddOutlined(){return Fe},get FolderAddOutlined(){return ke},get message(){return d},get useI18n(){return re},get useWsStore(){return ie},get useShellMode(){return de}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ue={class:"page-title"},he={class:"page-sub"},Ae={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},Ie={key:0,style:{"font-size":"12px",color:"#888"}},De={key:0,style:{color:"#888","font-size":"12px"}},Re={key:0},Te={key:1,style:{color:"#888"}},Be=["onClick"],Ee={key:0,style:{color:"#888","font-size":"12px"}};function Le(se,l,te,e,W,w){const B=i("router-link"),y=i("a-button"),O=i("a-space"),S=i("a-statistic"),P=i("a-card"),v=i("a-col"),I=i("a-row"),k=i("a-radio-button"),E=i("a-radio-group"),L=i("a-input-search"),F=i("a-alert"),z=i("a-tag"),V=i("a-popconfirm"),J=i("a-table"),g=i("a-descriptions-item"),K=i("a-descriptions"),Q=i("a-divider"),C=i("a-empty"),X=i("a-list-item"),M=i("a-list"),G=i("a-spin"),H=i("a-drawer"),T=i("a-input"),b=i("a-form-item"),D=i("a-textarea"),j=i("a-form"),U=i("a-modal"),m=i("a-select-option"),R=i("a-select");return p(),h("div",null,[A("div",ze,[A("div",null,[A("h2",Ue,s(e.t("projects.title")),1),A("p",he,[l[17]||(l[17]=r("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(B,{to:"/project-init"},{default:a(()=>[...l[16]||(l[16]=[r("项目初始化 / 环境设置",-1)])]),_:1}),l[18]||(l[18]=r(")",-1))])]),t(O,null,{default:a(()=>[t(y,{loading:e.loading,onClick:e.loadAll},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[l[19]||(l[19]=r(" 刷新 ",-1))]),_:1},8,["loading"]),t(y,{type:"primary",onClick:e.onShowCreate},{icon:a(()=>[t(e.PlusOutlined)]),default:a(()=>[l[20]||(l[20]=r(" 新建项目 ",-1))]),_:1})]),_:1})]),_(" Stats "),t(I,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"总项目",value:e.projects.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.FolderOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"活跃",value:e.countByStatus.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"草稿",value:e.countByStatus.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"已完成",value:e.countByStatus.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),_(" Filter "),A("div",Ae,[t(E,{value:e.statusFilter,"onUpdate:value":l[0]||(l[0]=n=>e.statusFilter=n),size:"small","button-style":"solid"},{default:a(()=>[t(k,{value:""},{default:a(()=>[...l[21]||(l[21]=[r("全部",-1)])]),_:1}),t(k,{value:"active"},{default:a(()=>[...l[22]||(l[22]=[r("活跃",-1)])]),_:1}),t(k,{value:"draft"},{default:a(()=>[...l[23]||(l[23]=[r("草稿",-1)])]),_:1}),t(k,{value:"completed"},{default:a(()=>[...l[24]||(l[24]=[r("已完成",-1)])]),_:1}),t(k,{value:"archived"},{default:a(()=>[...l[25]||(l[25]=[r("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(L,{value:e.nameFilter,"onUpdate:value":l[1]||(l[1]=n=>e.nameFilter=n),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!e.projects.length&&!e.loading?(p(),x(F,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):_("v-if",!0),e.projects.length||e.loading?(p(),x(J,{key:1,columns:e.columns,"data-source":e.filteredProjects,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":e.onRowClick},{bodyCell:a(({column:n,record:c})=>[n.key==="id"?(p(),h("code",Ie,s(c.id.slice(0,8))+"…",1)):n.key==="name"?(p(),h(ne,{key:1},[A("strong",null,s(c.name),1),c.description?(p(),h("div",De,s(c.description),1)):_("v-if",!0)],64)):n.key==="project_type"?(p(),x(z,{key:2},{default:a(()=>[r(s(c.project_type),1)]),_:2},1024)):n.key==="status"?(p(),x(z,{key:3,color:e.statusColor(c.status)},{default:a(()=>[r(s(c.status),1)]),_:2},1032,["color"])):n.key==="sync_status"?(p(),x(z,{key:4,color:e.syncColor(c.sync_status)},{default:a(()=>[r(s(c.sync_status||"unknown"),1)]),_:2},1032,["color"])):n.key==="updated_at"?(p(),h(ne,{key:5},[r(s(e.formatTime(c.updated_at)),1)],64)):n.key==="actions"?(p(),x(O,{key:6,onClick:l[2]||(l[2]=ge(()=>{},["stop"]))},{default:a(()=>[t(y,{size:"small",onClick:q=>e.openDetail(c)},{default:a(()=>[...l[26]||(l[26]=[r("详情",-1)])]),_:1},8,["onClick"]),t(V,{title:`删除项目 '${c.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:q=>e.onDelete(c)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[27]||(l[27]=[r("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):_("v-if",!0)]),_:1},8,["data-source","loading"])):_("v-if",!0),_(" Detail drawer "),t(H,{open:e.detailOpen,"onUpdate:open":l[3]||(l[3]=n=>e.detailOpen=n),title:e.detail?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[e.detail?(p(),x(K,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(g,{label:"ID"},{default:a(()=>[A("code",null,s(e.detail.id),1)]),_:1}),t(g,{label:"名称"},{default:a(()=>[r(s(e.detail.name),1)]),_:1}),t(g,{label:"描述"},{default:a(()=>[r(s(e.detail.description||"-"),1)]),_:1}),t(g,{label:"类型"},{default:a(()=>[t(z,null,{default:a(()=>[r(s(e.detail.project_type),1)]),_:1})]),_:1}),t(g,{label:"状态"},{default:a(()=>[t(z,{color:e.statusColor(e.detail.status)},{default:a(()=>[r(s(e.detail.status),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"同步状态"},{default:a(()=>[t(z,{color:e.syncColor(e.detail.sync_status)},{default:a(()=>[r(s(e.detail.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"用户"},{default:a(()=>[r(s(e.detail.user_id),1)]),_:1}),t(g,{label:"根路径"},{default:a(()=>[e.detail.root_path?(p(),h("code",Re,s(e.detail.root_path),1)):(p(),h("span",Te,"(无)"))]),_:1}),t(g,{label:"文件数"},{default:a(()=>[r(s(e.detail.file_count||0),1)]),_:1}),t(g,{label:"创建"},{default:a(()=>[r(s(e.formatTime(e.detail.created_at)),1)]),_:1}),t(g,{label:"更新"},{default:a(()=>[r(s(e.formatTime(e.detail.updated_at)),1)]),_:1})]),_:1})):_("v-if",!0),t(Q,null,{default:a(()=>[...l[28]||(l[28]=[r("文件",-1)])]),_:1}),_(" Sub-phase 7.3 (2026-05-17): 文件 CRUD toolbar "),t(O,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(y,{size:"small",type:"primary",disabled:!e.detail,onClick:e.openCreateFile},{default:a(()=>[t(e.FileAddOutlined),l[29]||(l[29]=r(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(y,{size:"small",disabled:!e.detail,onClick:e.openCreateFolder},{default:a(()=>[t(e.FolderAddOutlined),l[30]||(l[30]=r(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(G,{spinning:e.filesLoading},{default:a(()=>[!e.files.length&&!e.filesLoading?(p(),x(C,{key:0,description:"无文件 (点上方按钮新建)"})):(p(),x(M,{key:1,size:"small","data-source":e.files},{renderItem:a(({item:n})=>[t(X,null,{extra:a(()=>[t(O,null,{default:a(()=>[n.file_size?(p(),h("span",Ee,s(n.file_size)+" B",1)):_("v-if",!0),t(V,{title:`删除 ${n.is_folder?"文件夹":"文件"} '${n.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:c=>e.onDeleteFile(n)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[31]||(l[31]=[r("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[A("span",{style:{cursor:"pointer"},onClick:c=>e.openEditFile(n)},s(n.is_folder?"📁":"📄")+" "+s(n.file_path),9,Be)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),_(" Sub-phase 7.3: Create file modal "),t(U,{open:e.createFileOpen,"onUpdate:open":l[6]||(l[6]=n=>e.createFileOpen=n),title:"新建文件","confirm-loading":e.creatingFile,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFile},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFile.path,"onUpdate:value":l[4]||(l[4]=n=>e.newFile.path=n),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(b,{label:"初始内容(可选)"},{default:a(()=>[t(D,{value:e.newFile.content,"onUpdate:value":l[5]||(l[5]=n=>e.newFile.content=n),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Create folder modal "),t(U,{open:e.createFolderOpen,"onUpdate:open":l[8]||(l[8]=n=>e.createFolderOpen=n),title:"新建文件夹","confirm-loading":e.creatingFolder,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFolder},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFolder.path,"onUpdate:value":l[7]||(l[7]=n=>e.newFolder.path=n),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Edit file content modal "),t(U,{open:e.editFileOpen,"onUpdate:open":l[10]||(l[10]=n=>e.editFileOpen=n),title:`编辑 ${e.editingFile?.file_name||""}`,"confirm-loading":e.savingFile,"ok-text":"保存","cancel-text":"取消",onOk:e.onSaveFile,width:"720"},{default:a(()=>[t(D,{value:e.editFileContent,"onUpdate:value":l[9]||(l[9]=n=>e.editFileContent=n),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),_(" Create modal "),t(U,{open:e.createOpen,"onUpdate:open":l[15]||(l[15]=n=>e.createOpen=n),title:"新建项目","confirm-loading":e.creating,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreate},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"项目名称",required:""},{default:a(()=>[t(T,{value:e.newProject.name,"onUpdate:value":l[11]||(l[11]=n=>e.newProject.name=n),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(b,{label:"描述"},{default:a(()=>[t(D,{value:e.newProject.description,"onUpdate:value":l[12]||(l[12]=n=>e.newProject.description=n),rows:2},null,8,["value"])]),_:1}),t(b,{label:"类型"},{default:a(()=>[t(R,{value:e.newProject.type,"onUpdate:value":l[13]||(l[13]=n=>e.newProject.type=n)},{default:a(()=>[t(m,{value:"document"},{default:a(()=>[...l[32]||(l[32]=[r("文档 (document)",-1)])]),_:1}),t(m,{value:"data"},{default:a(()=>[...l[33]||(l[33]=[r("数据 (data)",-1)])]),_:1}),t(m,{value:"web"},{default:a(()=>[...l[34]||(l[34]=[r("Web",-1)])]),_:1}),t(m,{value:"app"},{default:a(()=>[...l[35]||(l[35]=[r("应用 (app)",-1)])]),_:1}),t(m,{value:"presentation"},{default:a(()=>[...l[36]||(l[36]=[r("演示文稿",-1)])]),_:1}),t(m,{value:"spreadsheet"},{default:a(()=>[...l[37]||(l[37]=[r("表格",-1)])]),_:1}),t(m,{value:"design"},{default:a(()=>[...l[38]||(l[38]=[r("设计",-1)])]),_:1}),t(m,{value:"code"},{default:a(()=>[...l[39]||(l[39]=[r("代码",-1)])]),_:1}),t(m,{value:"workflow"},{default:a(()=>[...l[40]||(l[40]=[r("工作流",-1)])]),_:1}),t(m,{value:"knowledge"},{default:a(()=>[...l[41]||(l[41]=[r("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(b,{label:"根路径 (可选)"},{default:a(()=>[t(T,{value:e.newProject.rootPath,"onUpdate:value":l[14]||(l[14]=n=>e.newProject.rootPath=n),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const We=we(Pe,[["render",Le],["__scopeId","data-v-019ac5aa"],["__file","/tmp/cc-web-panel-47hUXv/repo/packages/web-panel/src/views/Projects.vue"]]);export{We as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-CZ8azVgB.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-6msR3T6I.js";import{a0 as t}from"./index-CZ8azVgB.js";import"./vendor-Bn1JzzAn.js";import"./index-CSClXoB3.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-C1wwtSMJ.js";import{a0 as t}from"./index-CZ8azVgB.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve--Naz7NgY.js";import"./useFlexGapSupport-sLES8nyD.js";import"./styleChecker-Zf2dQx1j.js";import"./index-CSClXoB3.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};