chainlesschain 0.162.124 → 0.162.126

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 (260) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/AIOps-BrTOcqIJ.js +1 -0
  4. package/src/assets/web-panel/assets/{ActionButton-COjZZKWG.js → ActionButton-na9cocmf.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-4ZDZE7lc.js → Analytics-BtDygkpt.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-CYH5k2Rp.js → AppLayout-D_t5CS18.js} +5 -5
  7. package/src/assets/web-panel/assets/Audit-BYMZccCy.js +1 -0
  8. package/src/assets/web-panel/assets/{Backup-CiX61Qc2.js → Backup-D2qDfAdL.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-CDxIQokd.js → BaseInput-kj456Ju9.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-CaKgdRab.js → Chat-BY0A0ZLE.js} +4 -4
  11. package/src/assets/web-panel/assets/ChatBubbleRenderer-D1VvrOPQ.js +1 -0
  12. package/src/assets/web-panel/assets/{Checkbox-CjiWfu4s.js → Checkbox-DiBhtXsh.js} +1 -1
  13. package/src/assets/web-panel/assets/Codegen-B1ER0L0j.js +1 -0
  14. package/src/assets/web-panel/assets/{Col-ZKWREyNs.js → Col-CjLmza7D.js} +1 -1
  15. package/src/assets/web-panel/assets/Community-BNId05U7.js +1 -0
  16. package/src/assets/web-panel/assets/{Compact-DqknM98n.js → Compact-BuuMj7K1.js} +1 -1
  17. package/src/assets/web-panel/assets/Compliance-DUuDycaJ.js +1 -0
  18. package/src/assets/web-panel/assets/{Cowork-Dp29kHsC.js → Cowork-BKHiF6uL.js} +2 -2
  19. package/src/assets/web-panel/assets/{Cron-zmEJAetz.js → Cron-C7p-lHnC.js} +2 -2
  20. package/src/assets/web-panel/assets/Crosschain-BvSOx8a6.js +1 -0
  21. package/src/assets/web-panel/assets/{DID-D_UFNzJ5.js → DID-D1k9jgHv.js} +2 -2
  22. package/src/assets/web-panel/assets/Dashboard-B9mCCnqY.js +3 -0
  23. package/src/assets/web-panel/assets/{Dropdown-CH7l3KCs.js → Dropdown-ge9UHSXF.js} +1 -1
  24. package/src/assets/web-panel/assets/{EmailListRenderer-Bud2M3XX.js → EmailListRenderer-TZO7ppXi.js} +1 -1
  25. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Bd2_8uME.js → FamilyGuardDashboard-DkhLJmzx.js} +1 -1
  26. package/src/assets/web-panel/assets/Federation-JLuA_8zp.js +1 -0
  27. package/src/assets/web-panel/assets/{FormItemContext-CpSH464Y.js → FormItemContext-C4w-rzNg.js} +1 -1
  28. package/src/assets/web-panel/assets/{GenericCardRenderer-CANo8O-y.js → GenericCardRenderer-Btns4sV9.js} +1 -1
  29. package/src/assets/web-panel/assets/{Git-hvuZVoD3.js → Git-BheXMjzC.js} +2 -2
  30. package/src/assets/web-panel/assets/Governance-D9rLlatH.js +1 -0
  31. package/src/assets/web-panel/assets/Inference-DiklIMcd.js +1 -0
  32. package/src/assets/web-panel/assets/KnowledgeGraph-C70EWL03.js +1 -0
  33. package/src/assets/web-panel/assets/{Logs-DDkTnedu.js → Logs-Zt_MLI10.js} +2 -2
  34. package/src/assets/web-panel/assets/Marketplace-suQxES99.js +1 -0
  35. package/src/assets/web-panel/assets/{McpTools-Qx78XyOT.js → McpTools-CclpCDpY.js} +3 -3
  36. package/src/assets/web-panel/assets/{Memory-CXYDO1oT.js → Memory-B2lHOUwF.js} +2 -2
  37. package/src/assets/web-panel/assets/MobileBridge-BMXKoDAD.js +1 -0
  38. package/src/assets/web-panel/assets/{MobileProjects-DEDbWNIk.js → MobileProjects-a6mWVdBV.js} +1 -1
  39. package/src/assets/web-panel/assets/{Mtc-Dwa_vlR8.js → Mtc-BFpM4Fkj.js} +2 -2
  40. package/src/assets/web-panel/assets/{MtcAudit-DAVkxhJv.js → MtcAudit-DDQkxkbS.js} +4 -4
  41. package/src/assets/web-panel/assets/{Multisig-C3upmgPN.js → Multisig-Crkd_zKQ.js} +3 -3
  42. package/src/assets/web-panel/assets/NLProgramming-Dpk5An7B.js +1 -0
  43. package/src/assets/web-panel/assets/{Notes-B1Oy3FbC.js → Notes-BrFnOMNz.js} +4 -4
  44. package/src/assets/web-panel/assets/{NotificationSettings-Bs4-Fc6b.js → NotificationSettings-CM0iApFM.js} +1 -1
  45. package/src/assets/web-panel/assets/{OrderTableRenderer-CEy1pIeq.js → OrderTableRenderer-XXjeqkdz.js} +1 -1
  46. package/src/assets/web-panel/assets/{Organization-D4cJ1UNo.js → Organization-CHFW_38T.js} +2 -2
  47. package/src/assets/web-panel/assets/{Overflow-fdzvlF7x.js → Overflow-C-vl3EjV.js} +1 -1
  48. package/src/assets/web-panel/assets/{P2P-Y13PwXBA.js → P2P-BT7Slavq.js} +2 -2
  49. package/src/assets/web-panel/assets/{PdhVaultBrowser-Ck1zCLe6.js → PdhVaultBrowser-DRUaULap.js} +3 -3
  50. package/src/assets/web-panel/assets/{Permissions-CvEXP6LC.js → Permissions-DkhOAvMz.js} +2 -2
  51. package/src/assets/web-panel/assets/{PersonalDataHub-JeP7IWMW.js → PersonalDataHub-Dl7dSOvV.js} +3 -3
  52. package/src/assets/web-panel/assets/Pipeline-B3nVI4p6.js +1 -0
  53. package/src/assets/web-panel/assets/Privacy-Dv1SXx1Q.js +1 -0
  54. package/src/assets/web-panel/assets/{ProjectInit-DeWd9UcS.js → ProjectInit-DrAhVi5p.js} +2 -2
  55. package/src/assets/web-panel/assets/{ProjectSettings-DUpVuU9F.js → ProjectSettings-h-ggCYN_.js} +2 -2
  56. package/src/assets/web-panel/assets/Projects-CM91hYdr.js +1 -0
  57. package/src/assets/web-panel/assets/{Providers-DECW00ek.js → Providers-rfkZel3N.js} +1 -1
  58. package/src/assets/web-panel/assets/{QuickAsk-Dl-pK9Io.js → QuickAsk-XepZB7h_.js} +1 -1
  59. package/src/assets/web-panel/assets/Recommend-DzQWsh1a.js +1 -0
  60. package/src/assets/web-panel/assets/Reputation-CDeaal0j.js +1 -0
  61. package/src/assets/web-panel/assets/Row-BN4aKhFH.js +1 -0
  62. package/src/assets/web-panel/assets/{RssFeed-iyQT5q9l.js → RssFeed-INP6VYAA.js} +3 -3
  63. package/src/assets/web-panel/assets/Search-ChPbwatu.js +1 -0
  64. package/src/assets/web-panel/assets/{Security-c4Jxf5Ih.js → Security-C97ZCY8N.js} +4 -4
  65. package/src/assets/web-panel/assets/{Services-CRuisolj.js → Services-Cbtl2Ajs.js} +2 -2
  66. package/src/assets/web-panel/assets/{Skeleton-CCnzJkb-.js → Skeleton-B13sFxBQ.js} +1 -1
  67. package/src/assets/web-panel/assets/{Skills-CZURCwZg.js → Skills-vI9zSIKX.js} +1 -1
  68. package/src/assets/web-panel/assets/Sla-Cr3oBH39.js +1 -0
  69. package/src/assets/web-panel/assets/SpeechSettings-BwemqPPV.js +1 -0
  70. package/src/assets/web-panel/assets/{SyncSettings-CJWVtd87.js → SyncSettings-CLA78P-Z.js} +2 -2
  71. package/src/assets/web-panel/assets/{Tasks-61lrQ_lS.js → Tasks-DBjQ_DOM.js} +1 -1
  72. package/src/assets/web-panel/assets/Templates-BkSLDkBs.js +1 -0
  73. package/src/assets/web-panel/assets/Tenant-Dn0nSlib.js +1 -0
  74. package/src/assets/web-panel/assets/{Terminal-CP15hcNS.js → Terminal-C8f4boru.js} +2 -2
  75. package/src/assets/web-panel/assets/{TimelineRenderer-Sl5uXrkN.js → TimelineRenderer-DW_rMtJR.js} +1 -1
  76. package/src/assets/web-panel/assets/Tokens-BdffrKYV.js +1 -0
  77. package/src/assets/web-panel/assets/{Trigger-BLCQEOF2.js → Trigger-CX4CUg-Q.js} +1 -1
  78. package/src/assets/web-panel/assets/Trust-Cq9Bl7Od.js +1 -0
  79. package/src/assets/web-panel/assets/{UkeySign-Dwp0zXQ6.js → UkeySign-BQy18_VY.js} +1 -1
  80. package/src/assets/web-panel/assets/{VideoEditing-CIHA55Sx.js → VideoEditing-h5hzK7Vw.js} +1 -1
  81. package/src/assets/web-panel/assets/{Wallet-Hjajvnto.js → Wallet-BLotT3gw.js} +3 -3
  82. package/src/assets/web-panel/assets/{WebAuthn-DqSURUvI.js → WebAuthn-8cCANYLE.js} +4 -4
  83. package/src/assets/web-panel/assets/{WorkflowEditor-B5bHRwUG.js → WorkflowEditor-Db6NwtAv.js} +1 -1
  84. package/src/assets/web-panel/assets/{chat-DsheLKkG.js → chat-BPk1LbpL.js} +1 -1
  85. package/src/assets/web-panel/assets/{colors-CST2UkgL.js → colors-BnNal71p.js} +1 -1
  86. package/src/assets/web-panel/assets/{compact-item-yqEoy1L7.js → compact-item-W2VC0tcy.js} +1 -1
  87. package/src/assets/web-panel/assets/{createContext-Jwp78HFY.js → createContext-DceVsgnZ.js} +1 -1
  88. package/src/assets/web-panel/assets/devWarning--rwFDBhx.js +1 -0
  89. package/src/assets/web-panel/assets/{hasIn-CVS5mFEP.js → hasIn-BEq6EDcp.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-BLTUVd0V.js → index-5gIBUFBn.js} +2 -2
  91. package/src/assets/web-panel/assets/index-APCHxOkM.js +3 -0
  92. package/src/assets/web-panel/assets/index-B2dMhwZi.js +1 -0
  93. package/src/assets/web-panel/assets/{index-C0FZScMe.js → index-B8cPjrEH.js} +4 -4
  94. package/src/assets/web-panel/assets/{index-CjfN2CpJ.js → index-BDC5HsxZ.js} +1 -1
  95. package/src/assets/web-panel/assets/index-BPFuPGKi.js +1 -0
  96. package/src/assets/web-panel/assets/{index-SjxCCf5h.js → index-BUkDcIwJ.js} +2 -2
  97. package/src/assets/web-panel/assets/{index-Cjig5i3a.js → index-BWcCyH6-.js} +28 -26
  98. package/src/assets/web-panel/assets/{index-AnW25bEq.js → index-BgZikQoh.js} +1 -1
  99. package/src/assets/web-panel/assets/index-Bwjus13Y.js +1 -0
  100. package/src/assets/web-panel/assets/index-BzSzRWsw.js +55 -0
  101. package/src/assets/web-panel/assets/index-C1K9CsGr.js +1 -0
  102. package/src/assets/web-panel/assets/{index-DDAigsel.js → index-CBZVISK6.js} +2 -2
  103. package/src/assets/web-panel/assets/index-CEJN-R2L.js +1 -0
  104. package/src/assets/web-panel/assets/index-CG5dGC9E.js +1 -0
  105. package/src/assets/web-panel/assets/{index-DxaU_lza.js → index-CMGLpstm.js} +1 -1
  106. package/src/assets/web-panel/assets/index-CWrGCndd.js +1 -0
  107. package/src/assets/web-panel/assets/index-CbcvfpCV.js +1 -0
  108. package/src/assets/web-panel/assets/{index-De600Jjm.js → index-Ceqv4lI2.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Cy0dNzkp.js → index-CsT6frT8.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CDAPnZUs.js → index-D8PQKsDT.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Crk4KWLW.js → index-DGncdA-j.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-R-VGFpi6.js → index-DHanQHO0.js} +3 -3
  113. package/src/assets/web-panel/assets/index-DaUBk28E.js +12 -0
  114. package/src/assets/web-panel/assets/{index-BzetOasL.js → index-Di2J4b4V.js} +1 -1
  115. package/src/assets/web-panel/assets/index-DtuLvWZN.js +21 -0
  116. package/src/assets/web-panel/assets/{index-Dgyn8-wN.js → index-DvS1J8xc.js} +2 -2
  117. package/src/assets/web-panel/assets/{index-CtyEOGuj.js → index-DxePJdwP.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CzsKK0tQ.js → index-Et4XvL49.js} +2 -2
  119. package/src/assets/web-panel/assets/{index-BuI27WSx.js → index-GlFxgcj4.js} +2 -2
  120. package/src/assets/web-panel/assets/index-HV119Oui.js +1 -0
  121. package/src/assets/web-panel/assets/index-InGW87pj.js +13 -0
  122. package/src/assets/web-panel/assets/{index-Dxljh9Fu.js → index-P1-s8JR7.js} +2 -2
  123. package/src/assets/web-panel/assets/{index-CSBPc-sI.js → index-SdABCNoi.js} +2 -2
  124. package/src/assets/web-panel/assets/{index-BCHAUdel.js → index-WTAZbN-c.js} +1 -1
  125. package/src/assets/web-panel/assets/index-_2I-KzOj.js +1 -0
  126. package/src/assets/web-panel/assets/index-m1sVaWVU.js +1 -0
  127. package/src/assets/web-panel/assets/index-s37wwyeN.js +1 -0
  128. package/src/assets/web-panel/assets/{index-CRBbVS43.js → index-tyWABqp9.js} +1 -1
  129. package/src/assets/web-panel/assets/{initDefaultProps-ClAjrsQ-.js → initDefaultProps-DzrCDb3j.js} +1 -1
  130. package/src/assets/web-panel/assets/motion-BQERVnE3.js +11 -0
  131. package/src/assets/web-panel/assets/{move-DMelzIW-.js → move-I9ACA5XJ.js} +1 -1
  132. package/src/assets/web-panel/assets/mtc-parser-Dd2Pw-tr.js +1 -0
  133. package/src/assets/web-panel/assets/{omit-oxecfU3b.js → omit-DwzYRzWV.js} +1 -1
  134. package/src/assets/web-panel/assets/{pickAttrs-DJ5F5M6x.js → pickAttrs-BSGULyIL.js} +1 -1
  135. package/src/assets/web-panel/assets/{placementArrow-DdbKsant.js → placementArrow-tSYYjAts.js} +1 -1
  136. package/src/assets/web-panel/assets/{responsiveObserve-BUuM5cmS.js → responsiveObserve-Dy2lqikT.js} +1 -1
  137. package/src/assets/web-panel/assets/{slide-DSV0ccvR.js → slide-RaB4Uq0c.js} +1 -1
  138. package/src/assets/web-panel/assets/{statusUtils-B-6oLAXf.js → statusUtils-CBpC_wZg.js} +1 -1
  139. package/src/assets/web-panel/assets/{styleChecker-DdCAHtsZ.js → styleChecker-BEKwPWt5.js} +1 -1
  140. package/src/assets/web-panel/assets/{useFlexGapSupport-ZORkcoZd.js → useFlexGapSupport-C4CnYJH1.js} +1 -1
  141. package/src/assets/web-panel/assets/{useFs-BFp46LoP.js → useFs-n24jutw5.js} +1 -1
  142. package/src/assets/web-panel/assets/{usePersonalDataHub-H7rxgbdW.js → usePersonalDataHub-DMgS8F6G.js} +1 -1
  143. package/src/assets/web-panel/assets/{vnode-eIq4Tk0J.js → vnode-BSp2KYcj.js} +1 -1
  144. package/src/assets/web-panel/assets/{zoom-CTNrv8-H.js → zoom-7UfQtTPh.js} +1 -1
  145. package/src/assets/web-panel/index.html +1 -1
  146. package/src/commands/agent.js +51 -2
  147. package/src/commands/compliance.js +3 -1
  148. package/src/commands/ide.js +60 -5
  149. package/src/commands/incentive.js +22 -22
  150. package/src/commands/mtc.js +5 -1
  151. package/src/commands/review.js +47 -17
  152. package/src/commands/session.js +11 -2
  153. package/src/gateways/ws/message-dispatcher.js +149 -166
  154. package/src/gateways/ws/ws-session-gateway.js +95 -9
  155. package/src/harness/background-task-manager.js +5 -1
  156. package/src/harness/jsonl-session-store.js +90 -12
  157. package/src/harness/mcp-client.js +62 -21
  158. package/src/harness/prompt-compressor.js +24 -5
  159. package/src/harness/worktree-isolator.js +10 -1
  160. package/src/lib/agent-core.js +2 -0
  161. package/src/lib/audit-logger.js +3 -1
  162. package/src/lib/autonomous-agent.js +29 -0
  163. package/src/lib/chat-core.js +5 -2
  164. package/src/lib/chat-intent-service.js +82 -23
  165. package/src/lib/checkpoint-store.js +31 -4
  166. package/src/lib/claude-code-bridge.js +48 -3
  167. package/src/lib/config-manager.js +25 -1
  168. package/src/lib/cost-budget.js +13 -2
  169. package/src/lib/credential-guard.js +81 -1
  170. package/src/lib/git-integration.js +16 -2
  171. package/src/lib/goal-store.js +11 -0
  172. package/src/lib/hook-manager.js +4 -0
  173. package/src/lib/interaction-adapter.js +32 -11
  174. package/src/lib/jetbrains-bridge.js +147 -0
  175. package/src/lib/jsonl-session-store.js +2 -0
  176. package/src/lib/llm-config-defaults.js +37 -0
  177. package/src/lib/llm-pricing.js +11 -4
  178. package/src/lib/llm-providers.js +11 -1
  179. package/src/lib/mcp-oauth.js +88 -10
  180. package/src/lib/mcp-serve.js +29 -0
  181. package/src/lib/orchestrator.js +38 -2
  182. package/src/lib/permission-engine.js +4 -1
  183. package/src/lib/pipeline-orchestrator.js +20 -2
  184. package/src/lib/project-instructions.js +13 -0
  185. package/src/lib/repl-bang-memorize.js +9 -1
  186. package/src/lib/repl-denials.js +137 -0
  187. package/src/lib/runnable-provider.js +7 -1
  188. package/src/lib/safe-json.js +22 -0
  189. package/src/lib/sandbox-v2.js +7 -6
  190. package/src/lib/search-command.js +65 -0
  191. package/src/lib/session-insights.js +13 -6
  192. package/src/lib/session-usage.js +21 -3
  193. package/src/lib/settings-hooks.cjs +133 -0
  194. package/src/lib/settings-loader.cjs +16 -7
  195. package/src/lib/social-graph.js +3 -1
  196. package/src/lib/status-line.cjs +4 -1
  197. package/src/lib/stream-retry.js +27 -0
  198. package/src/lib/sub-agent-context.js +9 -0
  199. package/src/lib/turn-context.js +15 -5
  200. package/src/repl/agent-repl.js +110 -8
  201. package/src/runtime/__tests__/message-roles.test.js +36 -3
  202. package/src/runtime/agent-core.js +179 -52
  203. package/src/runtime/coding-agent-contract-shared.cjs +9 -2
  204. package/src/runtime/coding-agent-shell-policy.cjs +23 -2
  205. package/src/runtime/file-ref-expander.js +51 -7
  206. package/src/runtime/headless-runner.js +96 -2
  207. package/src/runtime/headless-stream.js +78 -3
  208. package/src/runtime/mcp-config.js +114 -4
  209. package/src/runtime/message-roles.js +14 -1
  210. package/src/runtime/pipe-safety.js +51 -0
  211. package/src/runtime/policies/agent-policy.js +3 -0
  212. package/src/assets/web-panel/assets/AIOps-BsDJlD_l.js +0 -1
  213. package/src/assets/web-panel/assets/Audit-BKlFbLdl.js +0 -1
  214. package/src/assets/web-panel/assets/ChatBubbleRenderer-DgvpwU5o.js +0 -1
  215. package/src/assets/web-panel/assets/Codegen-tKWGzajw.js +0 -1
  216. package/src/assets/web-panel/assets/Community-CmLuPBUU.js +0 -1
  217. package/src/assets/web-panel/assets/Compliance-PZw0aBLI.js +0 -1
  218. package/src/assets/web-panel/assets/Crosschain-Sb-uM7Ty.js +0 -1
  219. package/src/assets/web-panel/assets/Dashboard-Btag698v.js +0 -3
  220. package/src/assets/web-panel/assets/Federation-1jhstF5P.js +0 -1
  221. package/src/assets/web-panel/assets/Governance-BQrWksKt.js +0 -1
  222. package/src/assets/web-panel/assets/Inference-jEBTp12v.js +0 -1
  223. package/src/assets/web-panel/assets/KnowledgeGraph-tDiV2taf.js +0 -1
  224. package/src/assets/web-panel/assets/Marketplace-9Yi32avt.js +0 -1
  225. package/src/assets/web-panel/assets/MobileBridge-MfUfkHA0.js +0 -1
  226. package/src/assets/web-panel/assets/NLProgramming-DO3CZ0_z.js +0 -1
  227. package/src/assets/web-panel/assets/Pipeline-BZ7wRzG1.js +0 -1
  228. package/src/assets/web-panel/assets/Privacy-BJ6qj9Hv.js +0 -1
  229. package/src/assets/web-panel/assets/Projects-y1WbI337.js +0 -1
  230. package/src/assets/web-panel/assets/Recommend-Bju04wTd.js +0 -1
  231. package/src/assets/web-panel/assets/Reputation-BUPa3nEk.js +0 -1
  232. package/src/assets/web-panel/assets/Row-WYqqaq_5.js +0 -1
  233. package/src/assets/web-panel/assets/Search-CrfwJF0R.js +0 -1
  234. package/src/assets/web-panel/assets/Sla-CrMzaEi2.js +0 -1
  235. package/src/assets/web-panel/assets/SpeechSettings-jTDOM5eY.js +0 -1
  236. package/src/assets/web-panel/assets/Templates-Cg-iF2g1.js +0 -1
  237. package/src/assets/web-panel/assets/Tenant-DrDv1FFc.js +0 -1
  238. package/src/assets/web-panel/assets/Tokens-yRIZTVsR.js +0 -1
  239. package/src/assets/web-panel/assets/Trust-D5xq8z6s.js +0 -1
  240. package/src/assets/web-panel/assets/community-parser-Cuyslaku.js +0 -3
  241. package/src/assets/web-panel/assets/devWarning-C8to6gQk.js +0 -1
  242. package/src/assets/web-panel/assets/index-BeblNJDH.js +0 -1
  243. package/src/assets/web-panel/assets/index-C130LLPq.js +0 -1
  244. package/src/assets/web-panel/assets/index-C8rq85gu.js +0 -1
  245. package/src/assets/web-panel/assets/index-CIE2n8k_.js +0 -1
  246. package/src/assets/web-panel/assets/index-CTd3lDxp.js +0 -13
  247. package/src/assets/web-panel/assets/index-CUWj5L2s.js +0 -1
  248. package/src/assets/web-panel/assets/index-ChRL6rgA.js +0 -3
  249. package/src/assets/web-panel/assets/index-CrlRa054.js +0 -1
  250. package/src/assets/web-panel/assets/index-Cu6Ql64n.js +0 -1
  251. package/src/assets/web-panel/assets/index-Cx_t5rWw.js +0 -12
  252. package/src/assets/web-panel/assets/index-DZfnYE6e.js +0 -1
  253. package/src/assets/web-panel/assets/index-D_1b7uh6.js +0 -55
  254. package/src/assets/web-panel/assets/index-D_e9gwfn.js +0 -1
  255. package/src/assets/web-panel/assets/index-DbxAlpPC.js +0 -21
  256. package/src/assets/web-panel/assets/index-DiK4vSZa.js +0 -1
  257. package/src/assets/web-panel/assets/index-DpYn5v2k.js +0 -1
  258. package/src/assets/web-panel/assets/index-diWkx2Wq.js +0 -1
  259. package/src/assets/web-panel/assets/motion-BalXv_60.js +0 -11
  260. package/src/assets/web-panel/assets/mtc-parser-CEQffxds.js +0 -1
@@ -29,6 +29,11 @@ import {
29
29
  analyzeContinuation,
30
30
  joinContinuation,
31
31
  } from "../lib/repl-multiline.js";
32
+ import {
33
+ classifyDenial,
34
+ recordDenial,
35
+ formatDenials,
36
+ } from "../lib/repl-denials.js";
32
37
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
33
38
  import {
34
39
  createSession,
@@ -84,6 +89,7 @@ import { formatBackgroundTasks } from "./tasks-status.js";
84
89
  import { expandFileRefsAsync } from "../runtime/file-ref-expander.js";
85
90
  import { prepareVisionTurn } from "../lib/image-input.js";
86
91
  import { composeSystemPrompt } from "../runtime/system-prompt.js";
92
+ import { installPipeSafety } from "../runtime/pipe-safety.js";
87
93
  import {
88
94
  makeFallbackChatFn,
89
95
  normalizeFallbackModels,
@@ -117,6 +123,14 @@ let _settingsHooks = null;
117
123
  // `!command` auto-triggers an assistant response to its output. undefined =
118
124
  // unset → defaults OFF (opt-in) in shouldRespondToBashCommands.
119
125
  let _respondToBash;
126
+ // .claude/settings.json `autoMode.classifyAllShell` (Claude-Code 2.1.193): route
127
+ // the built-in verification allowlist through the shell-policy classifier (→
128
+ // ApprovalGate confirm) instead of fast-pathing it. false = unset → off.
129
+ let _classifyAllShell = false;
130
+ // Bounded log of tool calls the agent was BLOCKED from running this session
131
+ // (shell-policy / ApprovalGate / settings rule / hook). Surfaced by
132
+ // `/permissions denials` (Claude-Code 2.1.193 "recent denials"). In-memory only.
133
+ const _recentDenials = [];
120
134
 
121
135
  /**
122
136
  * Fire settings.json Notification hooks (observe-only) — the agent needs the
@@ -179,13 +193,17 @@ async function executeTool(name, args) {
179
193
  permissionRules: _permissionRules,
180
194
  permissionConfirm: _permissionConfirm,
181
195
  settingsHooks: _settingsHooks,
196
+ classifyAllShell: _classifyAllShell,
182
197
  });
183
198
  }
184
199
 
185
200
  /**
186
201
  * Agentic loop — wraps agent-core's async generator with REPL display output.
202
+ * Exported so its event-translation contract (checkpoint-mark accuracy for
203
+ * `/rewind`, content/usage extraction, forced-off in-loop compaction) is
204
+ * unit-testable via the `options._coreLoop` injection seam.
187
205
  */
188
- async function agentLoop(messages, options) {
206
+ export async function agentLoop(messages, options) {
189
207
  // Resume-degenerate role merge (Claude Code 2.1.187 parity), gated by the
190
208
  // one-shot `mergeRoles` flag so it fires only on the first model call after
191
209
  // resuming a session whose prior run produced no assistant response. Collapse
@@ -211,12 +229,19 @@ async function agentLoop(messages, options) {
211
229
  `\n ⚠️ ${info.message || `已从 "${info.from}" 切换到 "${info.to}"`}\n`,
212
230
  ),
213
231
  ));
214
- // The REPL runs its own auto-compaction (after each turn, with metrics +
215
- // persisted compact events), so opt out of the agent loop's in-loop
216
- // compaction to avoid compacting the same history twice.
217
- for await (const event of coreAgentLoop(messages, {
218
- autoCompact: false,
232
+ // `_coreLoop` is an injectable seam (defaults to agent-core's loop) so the
233
+ // wrapper's event translation can be unit-tested without a live model.
234
+ const runCoreLoop = options._coreLoop || coreAgentLoop;
235
+ // The tool-result event carries no args; remember the last tool-executing
236
+ // pair so a recorded denial can show what was attempted (/permissions denials).
237
+ let _lastExec = null;
238
+ for await (const event of runCoreLoop(messages, {
219
239
  ...options,
240
+ // FORCE in-loop compaction off — the REPL runs its OWN post-turn compaction
241
+ // (with metrics + persisted compact events), so letting agent-core compact
242
+ // too would trim the same history twice. Placed AFTER the spread so a
243
+ // caller's options.autoCompact can never silently re-enable the double pass.
244
+ autoCompact: false,
220
245
  onProviderFallback,
221
246
  })) {
222
247
  if (event.type === "checkpoint") {
@@ -235,6 +260,7 @@ async function agentLoop(messages, options) {
235
260
  chalk.gray(` ⎌ checkpoint ${event.id} (before ${event.tool})\n`),
236
261
  );
237
262
  } else if (event.type === "tool-executing") {
263
+ _lastExec = { tool: event.tool, args: event.args };
238
264
  process.stdout.write(
239
265
  chalk.gray(
240
266
  ` [${event.tool}] ${formatToolArgs(event.tool, event.args)}\n`,
@@ -245,6 +271,24 @@ async function agentLoop(messages, options) {
245
271
  process.stdout.write(
246
272
  chalk.red(` Error: ${event.error || event.result?.error}\n`),
247
273
  );
274
+ // Record policy denials (not plain tool failures) into the caller's
275
+ // denial log for review via `/permissions denials` (Claude-Code 2.1.193
276
+ // recent denials). Caller passes the session log (mirrors checkpointMarks)
277
+ // so the wrapper stays unit-testable.
278
+ if (Array.isArray(options.denialLog)) {
279
+ const denial = classifyDenial({
280
+ tool: event.tool,
281
+ result: event.result,
282
+ error: event.error,
283
+ argsSummary:
284
+ _lastExec && _lastExec.tool === event.tool
285
+ ? formatToolArgs(event.tool, _lastExec.args)
286
+ : "",
287
+ });
288
+ if (denial) {
289
+ recordDenial(options.denialLog, { ...denial, at: Date.now() });
290
+ }
291
+ }
248
292
  // Parity with Desktop AIChatPage's `Switch to Trusted` button:
249
293
  // when the deny came from ApprovalGate (not shell-policy), surface
250
294
  // the exact CLI command the user can run to relax the per-session
@@ -297,6 +341,27 @@ async function agentLoop(messages, options) {
297
341
  * Start the agentic REPL
298
342
  */
299
343
  export async function startAgentRepl(options = {}) {
344
+ // EPIPE guard: if the REPL's stdout is piped and the consumer closes (e.g.
345
+ // `cc agent | head`), the async stream `error` would otherwise crash the
346
+ // process. Route a broken pipe into the REPL's own graceful shutdown (the
347
+ // rl "close" handler — MCP disconnect, kill background tasks) when the
348
+ // interface exists, else exit cleanly. `_replClosing` makes it fire once so a
349
+ // cleanup write that also EPIPEs can't loop. `_replRl` is set when rl is built.
350
+ let _replRl = null;
351
+ let _replClosing = false;
352
+ installPipeSafety(undefined, () => {
353
+ if (_replClosing) return;
354
+ _replClosing = true;
355
+ if (_replRl) {
356
+ try {
357
+ _replRl.close(); // triggers the graceful "close" cleanup → process.exit
358
+ return;
359
+ } catch {
360
+ /* fall through to a bare exit */
361
+ }
362
+ }
363
+ process.exit(0);
364
+ });
300
365
  let model = options.model || "qwen2.5:7b";
301
366
  let provider = options.provider || "ollama";
302
367
  // Extended thinking (Anthropic; opt-in via --think/--ultrathink). Carried from
@@ -481,6 +546,11 @@ export async function startAgentRepl(options = {}) {
481
546
  _respondToBash = readBooleanSetting("respondToBashCommands", {
482
547
  cwd: process.cwd(),
483
548
  });
549
+ // Claude-Code 2.1.193 autoMode.classifyAllShell (default OFF when unset).
550
+ _classifyAllShell =
551
+ readBooleanSetting("autoMode.classifyAllShell", {
552
+ cwd: process.cwd(),
553
+ }) === true;
484
554
  const total =
485
555
  loaded.rules.allow.length +
486
556
  loaded.rules.ask.length +
@@ -516,12 +586,21 @@ export async function startAgentRepl(options = {}) {
516
586
  // PostToolUse). The interactive _permissionConfirm above doubles as the
517
587
  // confirmer for a hook `ask` decision.
518
588
  try {
519
- const { loadHooks } = await import("../lib/settings-hooks.cjs");
589
+ const { loadHooks, projectHookTrustNotice } =
590
+ await import("../lib/settings-hooks.cjs");
520
591
  const loaded = loadHooks({ cwd: process.cwd() });
521
592
  _settingsHooks =
522
593
  loaded.hooks && Object.keys(loaded.hooks).length > 0
523
594
  ? loaded.hooks
524
595
  : null;
596
+ // First-run trust notice for an untrusted/cloned repo's shell-running
597
+ // hooks (Claude-Code 2.1.195 parity). Best-effort, stderr-only.
598
+ try {
599
+ const notice = projectHookTrustNotice({ cwd: process.cwd() });
600
+ if (notice) process.stderr.write(notice + "\n");
601
+ } catch {
602
+ /* trust notice is best-effort */
603
+ }
525
604
  } catch (_err) {
526
605
  _settingsHooks = null;
527
606
  }
@@ -779,6 +858,10 @@ export async function startAgentRepl(options = {}) {
779
858
  // (parity with headless; auto-detect already works via process.env).
780
859
  ide: options.ide,
781
860
  pdh: options.pdh,
861
+ // IDEA built-in MCP (server `idea`): auto-connect when the JetBrains
862
+ // plugin injected CHAINLESSCHAIN_JETBRAINS_MCP_URL. --jetbrains forces,
863
+ // --no-jetbrains disables.
864
+ jetbrains: options.jetbrains,
782
865
  cwd: process.cwd(),
783
866
  // advertise the session id to spawned stdio MCP servers
784
867
  sessionId,
@@ -1030,6 +1113,9 @@ export async function startAgentRepl(options = {}) {
1030
1113
  terminal: true,
1031
1114
  completer: atCompleter,
1032
1115
  });
1116
+ // Let the EPIPE guard route a broken pipe through this interface's graceful
1117
+ // "close" cleanup instead of a bare exit.
1118
+ _replRl = rl;
1033
1119
 
1034
1120
  // Vim-mode plumbing: capture readline's OWN keypress listeners now so we can
1035
1121
  // suspend them while in NORMAL mode (the engine drives editing then) and
@@ -1453,7 +1539,7 @@ export async function startAgentRepl(options = {}) {
1453
1539
  ` ${chalk.cyan("/cost")} Session token spend + estimated $ (per model & category)`,
1454
1540
  );
1455
1541
  logger.log(
1456
- ` ${chalk.cyan("/permissions")} Allow/ask/deny rules; set/cycle tier (/permissions <tier> · Shift+Tab cycles)`,
1542
+ ` ${chalk.cyan("/permissions")} Allow/ask/deny rules; set/cycle tier (/permissions <tier> · Shift+Tab); /permissions denials to review blocked calls`,
1457
1543
  );
1458
1544
  logger.log(
1459
1545
  ` ${chalk.cyan("/export")} Save this conversation to a Markdown file (/export [path])`,
@@ -3005,6 +3091,13 @@ export async function startAgentRepl(options = {}) {
3005
3091
  // parity): what the agent runs unprompted, asks about, or is blocked from.
3006
3092
  if (trimmed === "/permissions" || trimmed.startsWith("/permissions ")) {
3007
3093
  const arg = trimmed.slice("/permissions".length).trim();
3094
+ if (arg === "denials" || arg === "denied") {
3095
+ // Review what the agent was BLOCKED from running this session
3096
+ // (Claude-Code 2.1.193 "recent denials").
3097
+ logger.log(formatDenials(_recentDenials));
3098
+ prompt();
3099
+ return;
3100
+ }
3008
3101
  if (arg) {
3009
3102
  // Set this session's approval tier mid-session (Claude-Code
3010
3103
  // permission-mode / Shift+Tab parity; mirrors `cc session policy --set`).
@@ -3050,6 +3143,13 @@ export async function startAgentRepl(options = {}) {
3050
3143
  " Set tier mid-session: /permissions <strict|trusted|autopilot>",
3051
3144
  ),
3052
3145
  );
3146
+ if (_recentDenials.length) {
3147
+ logger.log(
3148
+ chalk.gray(
3149
+ ` ${_recentDenials.length} tool call(s) denied this session — /permissions denials to review`,
3150
+ ),
3151
+ );
3152
+ }
3053
3153
  prompt();
3054
3154
  return;
3055
3155
  }
@@ -3482,11 +3582,13 @@ export async function startAgentRepl(options = {}) {
3482
3582
  autoCheckpoint,
3483
3583
  checkpointSession: sessionId,
3484
3584
  checkpointMarks: _checkpointMarks,
3585
+ denialLog: _recentDenials,
3485
3586
  prepareCall,
3486
3587
  approvalGate: _approvalGate,
3487
3588
  permissionRules: _permissionRules,
3488
3589
  permissionConfirm: _permissionConfirm,
3489
3590
  settingsHooks: _settingsHooks,
3591
+ classifyAllShell: _classifyAllShell,
3490
3592
  // Interactive session: gate run_code through the ApprovalGate (like
3491
3593
  // run_shell) so a strict tier prompts before arbitrary code runs.
3492
3594
  interactiveApproval: true,
@@ -51,13 +51,38 @@ describe("mergeConsecutiveMessages", () => {
51
51
  // A multi-tool turn produces back-to-back `tool` results — folding them
52
52
  // would drop tool_call_ids and corrupt the tool-call pairing.
53
53
  const msgs = [
54
- { role: "assistant", content: "", tool_calls: [{ id: "a" }, { id: "b" }] },
54
+ {
55
+ role: "assistant",
56
+ content: "",
57
+ tool_calls: [{ id: "a" }, { id: "b" }],
58
+ },
55
59
  { role: "tool", content: "r1", tool_call_id: "a" },
56
60
  { role: "tool", content: "r2", tool_call_id: "b" },
57
61
  ];
58
62
  expect(mergeConsecutiveMessages(msgs)).toEqual(msgs);
59
63
  });
60
64
 
65
+ it("never merges a structured assistant tool-call turn (tool_calls preserved)", () => {
66
+ // Two consecutive assistants where the SECOND carries tool_calls — folding
67
+ // would drop them (orphaning the result) and the strict API would 400.
68
+ const msgs = [
69
+ { role: "assistant", content: "let me check" },
70
+ { role: "assistant", content: "", tool_calls: [{ id: "c1" }] },
71
+ { role: "tool", content: "result", tool_call_id: "c1" },
72
+ ];
73
+ expect(mergeConsecutiveMessages(msgs)).toEqual(msgs);
74
+ });
75
+
76
+ it("never folds two consecutive assistants when the FIRST has tool_calls", () => {
77
+ // e.g. after a compaction dropped the tool results — merging would mutate
78
+ // the structured turn's content and keep its now-unanswered tool_calls.
79
+ const msgs = [
80
+ { role: "assistant", content: "", tool_calls: [{ id: "a" }] },
81
+ { role: "assistant", content: "fallback text" },
82
+ ];
83
+ expect(mergeConsecutiveMessages(msgs)).toEqual(msgs);
84
+ });
85
+
61
86
  it("never merges system messages (leading base + context pair kept distinct)", () => {
62
87
  const msgs = [
63
88
  { role: "system", content: "base" },
@@ -202,14 +227,22 @@ describe("collapseConsecutiveMessagesInPlace", () => {
202
227
  const messages = [
203
228
  { role: "user", content: "u1" },
204
229
  { role: "user", content: "u2" },
205
- { role: "assistant", content: "", tool_calls: [{ id: "a" }, { id: "b" }] },
230
+ {
231
+ role: "assistant",
232
+ content: "",
233
+ tool_calls: [{ id: "a" }, { id: "b" }],
234
+ },
206
235
  { role: "tool", content: "r1", tool_call_id: "a" },
207
236
  { role: "tool", content: "r2", tool_call_id: "b" },
208
237
  ];
209
238
  expect(collapseConsecutiveMessagesInPlace(messages)).toBe(true);
210
239
  expect(messages).toEqual([
211
240
  { role: "user", content: "u1\n\nu2" },
212
- { role: "assistant", content: "", tool_calls: [{ id: "a" }, { id: "b" }] },
241
+ {
242
+ role: "assistant",
243
+ content: "",
244
+ tool_calls: [{ id: "a" }, { id: "b" }],
245
+ },
213
246
  { role: "tool", content: "r1", tool_call_id: "a" },
214
247
  { role: "tool", content: "r2", tool_call_id: "b" },
215
248
  ]);