chainlesschain 0.162.189 → 0.162.197

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 (317) hide show
  1. package/README.md +84 -11
  2. package/bin/chainlesschain.js +7 -52
  3. package/completions/_cc +209 -0
  4. package/completions/cc.bash +18 -0
  5. package/completions/cc.fish +13 -0
  6. package/completions/cc.ps1 +226 -0
  7. package/package.json +10 -2
  8. package/src/assets/web-panel/assets/{AIOps-DbZft8w0.js → AIOps-D3Gu1a5d.js} +1 -1
  9. package/src/assets/web-panel/assets/{ActionButton-DoOZpwfN.js → ActionButton-DrwAoKaz.js} +1 -1
  10. package/src/assets/web-panel/assets/{Analytics-B0J0KLTW.js → Analytics-C7Q-gd_3.js} +3 -3
  11. package/src/assets/web-panel/assets/{AppLayout-D9eIR0qq.js → AppLayout-DgBtae-n.js} +4 -4
  12. package/src/assets/web-panel/assets/{Artifacts-BnZXEVeo.js → Artifacts-pQ6LcA-W.js} +1 -1
  13. package/src/assets/web-panel/assets/{Audit-X1ce4Bjn.js → Audit-DK61tocB.js} +1 -1
  14. package/src/assets/web-panel/assets/{BackgroundAgents-BvWR-y5v.js → BackgroundAgents-BOKgDFRh.js} +1 -1
  15. package/src/assets/web-panel/assets/{Backup-BublSGEd.js → Backup-Bo9G4vTP.js} +1 -1
  16. package/src/assets/web-panel/assets/{BaseInput-CR_77Hso.js → BaseInput-Do_dE9_v.js} +1 -1
  17. package/src/assets/web-panel/assets/{Chat-DixW52tq.js → Chat-COVvZzOL.js} +6 -6
  18. package/src/assets/web-panel/assets/ChatBubbleRenderer-BUUyJ5QO.js +1 -0
  19. package/src/assets/web-panel/assets/{Checkbox-CCv1C87K.js → Checkbox-Z9MJMolt.js} +1 -1
  20. package/src/assets/web-panel/assets/{Codegen-B03Cc3dd.js → Codegen-BVzWKVbf.js} +1 -1
  21. package/src/assets/web-panel/assets/{Col-CA06-6pU.js → Col-C8MnYcbT.js} +1 -1
  22. package/src/assets/web-panel/assets/{Community-Bj881J52.js → Community-DQxqw15l.js} +1 -1
  23. package/src/assets/web-panel/assets/{Compact-UZLTPoaL.js → Compact-BAUmrh3y.js} +1 -1
  24. package/src/assets/web-panel/assets/{Compliance-kGwzRb_0.js → Compliance-jPAkQ3zK.js} +1 -1
  25. package/src/assets/web-panel/assets/{Cowork-KundoYM8.js → Cowork-BBQyxbh8.js} +2 -2
  26. package/src/assets/web-panel/assets/{Cron-BYZyoqDe.js → Cron-W5koq8Z5.js} +2 -2
  27. package/src/assets/web-panel/assets/{Crosschain-BhrrppBX.js → Crosschain-BQhnu5hS.js} +1 -1
  28. package/src/assets/web-panel/assets/{DID-CdC6EguZ.js → DID-DD7PlI18.js} +2 -2
  29. package/src/assets/web-panel/assets/{Dashboard-CcQx3J4y.js → Dashboard-w_ILuwKI.js} +2 -2
  30. package/src/assets/web-panel/assets/{Dropdown-BpijtEzQ.js → Dropdown-qiDUAyAo.js} +1 -1
  31. package/src/assets/web-panel/assets/{EmailListRenderer-DfZjeZTe.js → EmailListRenderer-PDeBcI5H.js} +1 -1
  32. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BFYSf69C.js → FamilyGuardDashboard-SuArscRM.js} +1 -1
  33. package/src/assets/web-panel/assets/{Federation-Okdi3pJm.js → Federation-BCovZaUn.js} +1 -1
  34. package/src/assets/web-panel/assets/{FormItemContext-mH-HebKW.js → FormItemContext-DjlFdVFk.js} +1 -1
  35. package/src/assets/web-panel/assets/{GenericCardRenderer-xivV69x7.js → GenericCardRenderer-DoEZ7fcS.js} +1 -1
  36. package/src/assets/web-panel/assets/{Git-1rh_YBwg.js → Git-CV0-6GPI.js} +2 -2
  37. package/src/assets/web-panel/assets/{Governance-eAXkNxdY.js → Governance-B_SFN50w.js} +1 -1
  38. package/src/assets/web-panel/assets/{Inference-CS6dMVTN.js → Inference-heI0Eo6k.js} +1 -1
  39. package/src/assets/web-panel/assets/{KnowledgeGraph-Bq_TnkvD.js → KnowledgeGraph-Cz5INS5p.js} +1 -1
  40. package/src/assets/web-panel/assets/{Logs-KchHtiHt.js → Logs-BSFxiHkg.js} +2 -2
  41. package/src/assets/web-panel/assets/MarkdownRenderer-1mNozZ8v.js +1 -0
  42. package/src/assets/web-panel/assets/{Marketplace-CsmGcX5X.js → Marketplace-0TWTpE7k.js} +1 -1
  43. package/src/assets/web-panel/assets/{McpTools-BaPFnnyz.js → McpTools-CV4-wBLm.js} +4 -4
  44. package/src/assets/web-panel/assets/{Memory-2m-sUUf7.js → Memory-x5bH5rw5.js} +2 -2
  45. package/src/assets/web-panel/assets/{MobileBridge-D5nVZBRu.js → MobileBridge-DaBmUu9G.js} +1 -1
  46. package/src/assets/web-panel/assets/{MobileProjects-Bo8MLZvT.js → MobileProjects-DqnoFPgR.js} +1 -1
  47. package/src/assets/web-panel/assets/{Mtc-3GDvamGa.js → Mtc-B_zKEBif.js} +4 -4
  48. package/src/assets/web-panel/assets/{MtcAudit-D2zGuZCH.js → MtcAudit-BCfKD2yg.js} +4 -4
  49. package/src/assets/web-panel/assets/{Multisig-BBVQ4t6t.js → Multisig-DgYfj6c_.js} +3 -3
  50. package/src/assets/web-panel/assets/{NLProgramming-BIOCyOGp.js → NLProgramming-Dz09lFUm.js} +1 -1
  51. package/src/assets/web-panel/assets/{Notes-DVwBGpzc.js → Notes-Cuj6ugBE.js} +3 -3
  52. package/src/assets/web-panel/assets/{NotificationSettings-BDnHfIfX.js → NotificationSettings-DK2WXjhg.js} +1 -1
  53. package/src/assets/web-panel/assets/{OrderTableRenderer-C7Ek20ag.js → OrderTableRenderer-D1IAOQoo.js} +1 -1
  54. package/src/assets/web-panel/assets/{Organization-D3SRKaa7.js → Organization-9fqnPvTw.js} +4 -4
  55. package/src/assets/web-panel/assets/{Overflow-C2B8ahyn.js → Overflow-n5xHkhow.js} +1 -1
  56. package/src/assets/web-panel/assets/{P2P-2iwQzG65.js → P2P-B5AUWwH-.js} +2 -2
  57. package/src/assets/web-panel/assets/{PdhVaultBrowser-CoPiWqMN.js → PdhVaultBrowser-CoUDV6dy.js} +4 -4
  58. package/src/assets/web-panel/assets/{Permissions-yV5XNXo5.js → Permissions-DPRmQf_H.js} +4 -4
  59. package/src/assets/web-panel/assets/{PersonalDataHub-uCDJhMUF.js → PersonalDataHub-B37bsbEN.js} +4 -4
  60. package/src/assets/web-panel/assets/{Pipeline-hN7ucMOA.js → Pipeline-CCAuPqu9.js} +1 -1
  61. package/src/assets/web-panel/assets/{Privacy-CgU0ptN4.js → Privacy-B81msZdv.js} +1 -1
  62. package/src/assets/web-panel/assets/{ProjectInit-CfYPiT6j.js → ProjectInit-B-Py2NbF.js} +2 -2
  63. package/src/assets/web-panel/assets/{ProjectSettings-B0A2C4nw.js → ProjectSettings-CYsneiRB.js} +2 -2
  64. package/src/assets/web-panel/assets/{Projects-BE5C0ajn.js → Projects-Y975Mh6R.js} +1 -1
  65. package/src/assets/web-panel/assets/{Providers-CstQPf8W.js → Providers-uO-10aP1.js} +1 -1
  66. package/src/assets/web-panel/assets/{QrScannerModal-Co3z_ynk.js → QrScannerModal-Bj_6gJ0l.js} +1 -1
  67. package/src/assets/web-panel/assets/{QuickAsk-DMTS6pQ6.js → QuickAsk-BgpBCMPE.js} +1 -1
  68. package/src/assets/web-panel/assets/{Recommend-ETw4odUa.js → Recommend-DhUW3YUA.js} +1 -1
  69. package/src/assets/web-panel/assets/RemoteSession-DdeyfbkA.js +5 -0
  70. package/src/assets/web-panel/assets/{Reputation-BTVqQgKq.js → Reputation-fxW421xd.js} +1 -1
  71. package/src/assets/web-panel/assets/{Row-CBKKwwtO.js → Row-De73w1og.js} +1 -1
  72. package/src/assets/web-panel/assets/{RssFeed-BHUQ438I.js → RssFeed-3US_Q_lj.js} +2 -2
  73. package/src/assets/web-panel/assets/{Search-B4NqeUsF.js → Search-DbZ_DU74.js} +1 -1
  74. package/src/assets/web-panel/assets/{Security-BRjoYG5_.js → Security-DoIU1vMF.js} +4 -4
  75. package/src/assets/web-panel/assets/{Services-CxQzu3p3.js → Services-DB_RGqpc.js} +2 -2
  76. package/src/assets/web-panel/assets/{Skeleton-BKzwwmWO.js → Skeleton-DnzLaayC.js} +1 -1
  77. package/src/assets/web-panel/assets/{Skills-DrsFcgth.js → Skills-VzVXHENF.js} +1 -1
  78. package/src/assets/web-panel/assets/{Sla-D21tmXCH.js → Sla-DMfvjCAI.js} +1 -1
  79. package/src/assets/web-panel/assets/{SpeechSettings-CjyjLfp8.js → SpeechSettings-DQQOYWbF.js} +1 -1
  80. package/src/assets/web-panel/assets/{SyncSettings-Cu45-tnx.js → SyncSettings-Bmx3FG1P.js} +2 -2
  81. package/src/assets/web-panel/assets/{Tasks-oMcILYOj.js → Tasks-DOQyfb-2.js} +1 -1
  82. package/src/assets/web-panel/assets/{Templates-Bh-Zcr5R.js → Templates-D6hTRT7c.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tenant-68ns63aI.js → Tenant-CTPQZAzs.js} +1 -1
  84. package/src/assets/web-panel/assets/{Terminal-BLJkFykE.js → Terminal-B7vII3oH.js} +2 -2
  85. package/src/assets/web-panel/assets/{TimelineRenderer-xcrJLq-O.js → TimelineRenderer-BkiFJeXV.js} +1 -1
  86. package/src/assets/web-panel/assets/{Tokens-C6PpFJtf.js → Tokens-BPPdQMNo.js} +1 -1
  87. package/src/assets/web-panel/assets/{Trigger-BaKA7tdM.js → Trigger-BxG8JAEI.js} +1 -1
  88. package/src/assets/web-panel/assets/{Trust-BzhA57Jc.js → Trust-DHD7nMpM.js} +1 -1
  89. package/src/assets/web-panel/assets/{UkeySign-4_U3JkIR.js → UkeySign-B4BJpU47.js} +1 -1
  90. package/src/assets/web-panel/assets/{VideoEditing-162AANxX.js → VideoEditing-CRiGpFx2.js} +1 -1
  91. package/src/assets/web-panel/assets/{Wallet-B1viuql_.js → Wallet-BSDSNiem.js} +4 -4
  92. package/src/assets/web-panel/assets/{WebAuthn-ZVWazhCy.js → WebAuthn-DLTUh5Zv.js} +5 -5
  93. package/src/assets/web-panel/assets/WorkflowEditor-tW2MwjhD.js +1 -0
  94. package/src/assets/web-panel/assets/{chat-DmrHNuwq.js → chat-SgsLQ3FC.js} +1 -1
  95. package/src/assets/web-panel/assets/{colors-DAJ_M-PK.js → colors-BHjjLIKO.js} +1 -1
  96. package/src/assets/web-panel/assets/{compact-item-uIzmYwLs.js → compact-item-VceErdKq.js} +1 -1
  97. package/src/assets/web-panel/assets/{createContext-D_ZmuLwb.js → createContext-BZ332MYl.js} +1 -1
  98. package/src/assets/web-panel/assets/devWarning-DosMaL-k.js +1 -0
  99. package/src/assets/web-panel/assets/{hasIn-CDt_shTL.js → hasIn-CBTjJOjn.js} +1 -1
  100. package/src/assets/web-panel/assets/index-0O5ePnUq.js +1 -0
  101. package/src/assets/web-panel/assets/{index-rXdwUeE3.js → index-1n7xjKDU.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BAvSmJXW.js → index-29wVzi-k.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-C16fYKFD.js → index-B2u26AS3.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-C5WcdJH2.js → index-B40dQn0G.js} +3 -3
  105. package/src/assets/web-panel/assets/{index-CaelyMgF.js → index-B5KAGxNo.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-OzTxFIJP.js → index-BC1xuQgX.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CzXqvMuP.js → index-BETEjuNr.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-clSX4PEc.js → index-BOtvPdHt.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-saf3VNeP.js → index-BPXFLYdW.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DdUMcwRB.js → index-BQSmZGgs.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DfSSy9uy.js → index-BRWhLbWF.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-GcKOHD_c.js → index-BTlc-Bve.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BHvlm0In.js → index-BY1wexYG.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Cvak6Oe2.js → index-BcUenmCX.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CKyd472S.js → index-BeiqkxJG.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DvFhhe6r.js → index-BhXZEUAc.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DBFmcaCQ.js → index-By5jBtkV.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DqDSF2RW.js → index-CLc19alH.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DeGBoLQA.js → index-CMVvxIS8.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-FyplHuNt.js → index-C_B9rFQE.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CeUpKjvi.js → index-CaIS_TNX.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BRa4kJ_S.js → index-CawpdGTW.js} +1 -1
  123. package/src/assets/web-panel/assets/index-ChAzPigF.js +1 -0
  124. package/src/assets/web-panel/assets/{index-QsgfSZrV.js → index-CpumS98o.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BDF6EQBs.js → index-Cr4rjlW5.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-rS3gl_68.js → index-CrUgDQkf.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-D4n1lGTB.js → index-CtjLcCNU.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-ifxmu8SY.js → index-DUkVN794.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BTCXf1t-.js → index-D_SePDWj.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Bbxjfstq.js → index-DaCCy6lq.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-D9OE8B3d.js → index-DdefYBSw.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CG0lY4h3.js → index-DePOeMDM.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-Bx4d6c1k.js → index-DgPvuIn2.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-Z8P4BexE.js → index-FJ3zC9LK.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-ByzGvpR9.js → index-_PHrIO4O.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-DwfvPe-j.js → index-fU7wNHDB.js} +1 -1
  137. package/src/assets/web-panel/assets/{index-CcZ9xJI9.js → index-iYQNU9za.js} +1 -1
  138. package/src/assets/web-panel/assets/{index-CbD_WW_6.js → index-vIXOpcjD.js} +1 -1
  139. package/src/assets/web-panel/assets/{initDefaultProps-pmfaD-aK.js → initDefaultProps-D1oZNz0D.js} +1 -1
  140. package/src/assets/web-panel/assets/{motion-CaQ2CpYF.js → motion-C8k6doMO.js} +1 -1
  141. package/src/assets/web-panel/assets/{move-CkKTqNbI.js → move-DJ4qSbYt.js} +1 -1
  142. package/src/assets/web-panel/assets/{mtc-parser-Dd4xsgRI.js → mtc-parser-CdpJD85j.js} +1 -1
  143. package/src/assets/web-panel/assets/{omit-BFuA5YEs.js → omit-B0V4slKA.js} +1 -1
  144. package/src/assets/web-panel/assets/{pickAttrs-DDfxOAJc.js → pickAttrs-Di5NiW1F.js} +1 -1
  145. package/src/assets/web-panel/assets/{placementArrow-Be595JCp.js → placementArrow-B5OMHgEM.js} +1 -1
  146. package/src/assets/web-panel/assets/{responsiveObserve-7byljUM3.js → responsiveObserve-C6U9IWql.js} +1 -1
  147. package/src/assets/web-panel/assets/{slide-CTWfOTaY.js → slide-BMyTH3rN.js} +1 -1
  148. package/src/assets/web-panel/assets/{statusUtils-CNZOuIxM.js → statusUtils-C7d6BG7Z.js} +1 -1
  149. package/src/assets/web-panel/assets/{styleChecker-DwOcBV78.js → styleChecker-CR50QnQy.js} +1 -1
  150. package/src/assets/web-panel/assets/{useFlexGapSupport-B6MNwAO9.js → useFlexGapSupport-DBEeoMb8.js} +1 -1
  151. package/src/assets/web-panel/assets/{useFs-CzyQjH9r.js → useFs-3r099cjv.js} +1 -1
  152. package/src/assets/web-panel/assets/{usePersonalDataHub-Dxh3KiVA.js → usePersonalDataHub-C5IYNdTK.js} +1 -1
  153. package/src/assets/web-panel/assets/{vnode-DVfZiS5N.js → vnode-DmEOLRHf.js} +1 -1
  154. package/src/assets/web-panel/assets/{zoom-BYme7fbY.js → zoom-DnpUiVCB.js} +1 -1
  155. package/src/assets/web-panel/index.html +1 -1
  156. package/src/cli-help.js +181 -0
  157. package/src/command-help-index.json +181 -0
  158. package/src/command-manifest.json +1271 -175
  159. package/src/command-surface-policy.js +312 -0
  160. package/src/commands/agent.js +76 -33
  161. package/src/commands/artifacts.js +400 -2
  162. package/src/commands/background-session.js +41 -3
  163. package/src/commands/checkpoint-restore-recovery.js +1476 -0
  164. package/src/commands/checkpoint.js +947 -22
  165. package/src/commands/compact.js +101 -25
  166. package/src/commands/config.js +506 -20
  167. package/src/commands/doctor.js +4 -1
  168. package/src/commands/hub.js +1 -1
  169. package/src/commands/mcp.js +688 -24
  170. package/src/commands/pack.js +16 -2
  171. package/src/commands/plugin.js +20 -12
  172. package/src/commands/session-mcp-recovery.js +218 -0
  173. package/src/commands/session.js +470 -110
  174. package/src/commands/setup.js +36 -10
  175. package/src/commands/skill.js +181 -110
  176. package/src/commands/status.js +21 -5
  177. package/src/commands/update.js +68 -6
  178. package/src/constants.js +11 -0
  179. package/src/data/changelog.json +14 -1
  180. package/src/gateways/ws/action-protocol.js +10 -0
  181. package/src/gateways/ws/session-protocol.js +555 -27
  182. package/src/gateways/ws/ws-agent-handler.js +541 -14
  183. package/src/gateways/ws/ws-session-gateway.js +129 -22
  184. package/src/gateways/ws/ws-session-state.js +431 -0
  185. package/src/harness/background-task-manager.js +233 -36
  186. package/src/harness/jsonl-session-store.js +2551 -167
  187. package/src/harness/mcp-client.js +802 -61
  188. package/src/harness/prompt-compressor.js +227 -27
  189. package/src/harness/session-index.js +89 -38
  190. package/src/harness/session-list-index.js +254 -0
  191. package/src/harness/structured-handoff.js +410 -0
  192. package/src/lazy-dispatch.js +747 -84
  193. package/src/lib/__tests__/logger.test.js +50 -2
  194. package/src/lib/advisor-runtime.js +1047 -0
  195. package/src/lib/agent-core.js +1 -0
  196. package/src/lib/agent-sandbox.js +120 -26
  197. package/src/lib/agent-session-export.js +20 -0
  198. package/src/lib/agent-team/team-runner.js +230 -8
  199. package/src/lib/artifact-store.js +131 -8
  200. package/src/lib/background-agent-supervisor.js +185 -13
  201. package/src/lib/background-interaction-journal.js +37 -9
  202. package/src/lib/background-launch-profile.js +1058 -0
  203. package/src/lib/checkpoint-restore-already-completed-controller.js +902 -0
  204. package/src/lib/checkpoint-restore-orchestrator.js +987 -0
  205. package/src/lib/checkpoint-restore-partial-rollback-controller.js +1953 -0
  206. package/src/lib/checkpoint-restore-recovery-controller.js +689 -0
  207. package/src/lib/checkpoint-restore-recovery.js +884 -0
  208. package/src/lib/checkpoint-restore-retention.js +126 -0
  209. package/src/lib/checkpoint-restore-saga.js +5079 -0
  210. package/src/lib/checkpoint-restore-session-recovery.js +1178 -0
  211. package/src/lib/checkpoint-restore-workspace-target-verifier.js +270 -0
  212. package/src/lib/checkpoint-store.js +1688 -97
  213. package/src/lib/checkpoint-timeline-authority.js +522 -0
  214. package/src/lib/checkpoint-timeline.js +642 -0
  215. package/src/lib/config-keys.js +18 -119
  216. package/src/lib/config-manager.js +446 -27
  217. package/src/lib/config-redaction.js +57 -0
  218. package/src/lib/config-schema.js +853 -0
  219. package/src/lib/cowork-mcp-tools.js +5 -0
  220. package/src/lib/cowork-task-runner.js +458 -63
  221. package/src/lib/delivery-coordinator.js +1234 -0
  222. package/src/lib/delivery-evidence.js +450 -0
  223. package/src/lib/doctor-checkup.js +199 -14
  224. package/src/lib/executable-path.js +34 -0
  225. package/src/lib/fatal-handler.js +16 -0
  226. package/src/lib/file-checkpoint.js +4909 -186
  227. package/src/lib/file-lines.js +125 -0
  228. package/src/lib/headless-config-command.js +16 -5
  229. package/src/lib/hook-runner.cjs +139 -38
  230. package/src/lib/hooks-v2-workspace-context.js +10 -0
  231. package/src/lib/impacted-gate-selector.js +424 -0
  232. package/src/lib/interaction-adapter.js +62 -0
  233. package/src/lib/jsonl-session-store.js +1 -35
  234. package/src/lib/logger.js +66 -14
  235. package/src/lib/mcp-call-ledger-store.js +1069 -0
  236. package/src/lib/mcp-call-ledger.js +747 -0
  237. package/src/lib/mcp-client.js +5 -0
  238. package/src/lib/mcp-conflict-scheduler.js +468 -0
  239. package/src/lib/mcp-effect-contract.js +102 -0
  240. package/src/lib/mcp-headers-helper-trust.js +145 -0
  241. package/src/lib/mcp-headers-helper.js +616 -0
  242. package/src/lib/mcp-host-recovery-runtime.js +131 -0
  243. package/src/lib/mcp-ledger-recovery-admission.js +1065 -0
  244. package/src/lib/mcp-recovery-adjudication.js +443 -0
  245. package/src/lib/output-context.js +86 -0
  246. package/src/lib/packer/file-identity.js +170 -0
  247. package/src/lib/packer/index.js +3 -0
  248. package/src/lib/packer/native-update-state.js +277 -0
  249. package/src/lib/packer/pack-update-applier.js +1983 -136
  250. package/src/lib/packer/pack-update-checker.js +34 -0
  251. package/src/lib/packer/pack-update-downloader.js +875 -86
  252. package/src/lib/packer/pack-update-signature.js +86 -0
  253. package/src/lib/packer/pkg-config-generator.js +6 -0
  254. package/src/lib/paths.js +65 -10
  255. package/src/lib/plan-mode.js +831 -14
  256. package/src/lib/plan-persistence.js +540 -0
  257. package/src/lib/plugin-runtime/hooks.js +227 -69
  258. package/src/lib/plugin-runtime/plugin-options.js +189 -44
  259. package/src/lib/pr-automation-policy.js +146 -8
  260. package/src/lib/process-execution-broker/credential-agent.js +7 -0
  261. package/src/lib/process-execution-broker/index.js +53 -8
  262. package/src/lib/process-execution-broker/workspace-transaction.js +976 -73
  263. package/src/lib/project-instructions.js +165 -29
  264. package/src/lib/project-mcp-trust.js +67 -0
  265. package/src/lib/public-ide-capability-manifest.js +278 -0
  266. package/src/lib/public-ide-capability-validation.js +351 -0
  267. package/src/lib/secret-store.js +267 -43
  268. package/src/lib/secure-fs.js +1089 -0
  269. package/src/lib/security-audit.js +58 -0
  270. package/src/lib/service-manager.js +34 -13
  271. package/src/lib/session-budget-runtime.js +1452 -0
  272. package/src/lib/session-host-snapshot.js +388 -0
  273. package/src/lib/session-message-provenance.js +429 -0
  274. package/src/lib/session-projection.js +804 -0
  275. package/src/lib/session-resource-budget.js +1495 -0
  276. package/src/lib/settings-hooks.cjs +138 -22
  277. package/src/lib/settings-loader.cjs +25 -2
  278. package/src/lib/side-effect-ledger-store.js +45 -23
  279. package/src/lib/skill-execution-identity.js +217 -0
  280. package/src/lib/skill-loader.js +299 -18
  281. package/src/lib/sub-agent-context.js +236 -28
  282. package/src/lib/sub-agent-registry.js +5 -0
  283. package/src/lib/subagent-contract.js +94 -0
  284. package/src/lib/todo-manager.js +185 -18
  285. package/src/lib/todo-persistence.js +417 -0
  286. package/src/lib/turn-binding-store.js +41 -23
  287. package/src/lib/with-file-lock.js +25 -1
  288. package/src/lib/ws-chat-handler.js +21 -0
  289. package/src/program-base.js +18 -0
  290. package/src/repl/advisor-command.js +103 -0
  291. package/src/repl/agent-repl.js +2332 -154
  292. package/src/repl/btw-command.js +93 -10
  293. package/src/repl/clipboard-image.js +119 -0
  294. package/src/repl/config-summary.js +64 -108
  295. package/src/repl/prompt-editor.js +233 -0
  296. package/src/repl/prompt-interactions.js +404 -0
  297. package/src/repl/prompt-stash.js +354 -0
  298. package/src/repl/prompt-suggestions.js +312 -0
  299. package/src/repl/repl-keybindings.js +227 -0
  300. package/src/repl/session-recap.js +217 -0
  301. package/src/repl/slash-command-registry.js +25 -4
  302. package/src/repl/terminal-layout.js +88 -0
  303. package/src/runtime/agent-core.js +1264 -325
  304. package/src/runtime/coding-agent-contract-shared.cjs +13 -1
  305. package/src/runtime/coding-agent-managed-tool-policy.cjs +7 -2
  306. package/src/runtime/diagnostics.js +32 -13
  307. package/src/runtime/headless-runner.js +298 -118
  308. package/src/runtime/headless-stream.js +353 -95
  309. package/src/runtime/mcp-config.js +148 -14
  310. package/src/runtime/status-diagnostics-lite.js +137 -0
  311. package/src/assets/web-panel/assets/ChatBubbleRenderer-DDHDpBBA.js +0 -1
  312. package/src/assets/web-panel/assets/MarkdownRenderer-TabqHW9B.js +0 -1
  313. package/src/assets/web-panel/assets/RemoteSession-B0rkE09d.js +0 -5
  314. package/src/assets/web-panel/assets/WorkflowEditor-tzdyUk-1.js +0 -1
  315. package/src/assets/web-panel/assets/devWarning-DIrncrV1.js +0 -1
  316. package/src/assets/web-panel/assets/index-D-Swwqld.js +0 -1
  317. package/src/assets/web-panel/assets/index-FMZAMKy8.js +0 -1
@@ -26,6 +26,18 @@ export const CHECK_STATE = Object.freeze({
26
26
  ERROR: "error",
27
27
  });
28
28
 
29
+ /** Terminal outcomes prove that a side effect no longer needs adjudication. */
30
+ export const SETTLED_SIDE_EFFECT_STATES = Object.freeze([
31
+ "committed",
32
+ "failed",
33
+ "no_effect",
34
+ "not_applicable",
35
+ "rejected",
36
+ "rolled_back",
37
+ "settled",
38
+ "verified",
39
+ ]);
40
+
29
41
  const CHECK_ALIASES = new Map([
30
42
  ["passed", CHECK_STATE.PASSED],
31
43
  ["pass", CHECK_STATE.PASSED],
@@ -49,6 +61,8 @@ const CHECK_ALIASES = new Map([
49
61
  ["action_required", CHECK_STATE.ERROR],
50
62
  ]);
51
63
 
64
+ const EXACT_COMMIT_RE = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i;
65
+
52
66
  /** Normalize any provider's check conclusion/status to a canonical state. */
53
67
  export function normalizeCheckState(value) {
54
68
  if (typeof value !== "string") return null;
@@ -94,6 +108,31 @@ export function summarizeChecks(checks = []) {
94
108
  };
95
109
  }
96
110
 
111
+ /**
112
+ * Summarize side effects without guessing. A missing ledger is different from
113
+ * an explicitly empty ledger: only the latter proves that there are no side
114
+ * effects to adjudicate.
115
+ */
116
+ export function summarizeSideEffects(sideEffects) {
117
+ if (!Array.isArray(sideEffects)) {
118
+ return { verified: false, total: 0, unresolved: ["ledger-unavailable"] };
119
+ }
120
+ const settled = new Set(SETTLED_SIDE_EFFECT_STATES);
121
+ const unresolved = [];
122
+ sideEffects.forEach((effect, index) => {
123
+ const id = String(effect?.id || effect?.operationId || index);
124
+ const state = String(effect?.status || effect?.state || "")
125
+ .trim()
126
+ .toLowerCase();
127
+ if (!settled.has(state)) unresolved.push(id);
128
+ });
129
+ return {
130
+ verified: true,
131
+ total: sideEffects.length,
132
+ unresolved,
133
+ };
134
+ }
135
+
97
136
  function budgetExhausted(budget) {
98
137
  if (!budget || typeof budget !== "object") return false;
99
138
  const over = (spent, cap) =>
@@ -152,9 +191,47 @@ export function autoFixDecision(params = {}) {
152
191
  }
153
192
 
154
193
  /**
155
- * Decide whether a PR may be auto-merged. Fail-closed and exhaustive: every
156
- * unmet requirement is collected, and merge is allowed ONLY when the list is
157
- * empty. Auto-merge is off unless `enabled === true`.
194
+ * Backward-compatible decision used by the existing session PR status view.
195
+ * The resumable delivery workflow uses `strictAutoMergeDecision` below, whose
196
+ * evidence contract additionally binds every required check to an exact head
197
+ * commit and requires an explicit side-effect ledger.
198
+ */
199
+ export function autoMergeDecision(params = {}) {
200
+ const unmet = [];
201
+
202
+ if (params.enabled !== true) unmet.push("auto-merge-disabled");
203
+ if (params.hasOpenPr !== true) unmet.push("no-open-pr");
204
+ if (params.branchProtectionSatisfied !== true) {
205
+ unmet.push("branch-protection-unsatisfied");
206
+ }
207
+ if (params.reviewApproved !== true) unmet.push("review-not-approved");
208
+ if (Number(params.pendingApprovals) > 0) unmet.push("pending-approvals");
209
+
210
+ const summary = summarizeChecks(params.checks);
211
+ if (summary.anyFailed) unmet.push("checks-failing");
212
+ if (summary.pending > 0) unmet.push("checks-pending");
213
+
214
+ const required = Array.isArray(params.requiredChecks)
215
+ ? params.requiredChecks
216
+ : [];
217
+ for (const name of required) {
218
+ const state = summary.byName.get(String(name));
219
+ if (state !== CHECK_STATE.PASSED && state !== CHECK_STATE.NEUTRAL) {
220
+ unmet.push(`required-check-missing:${name}`);
221
+ }
222
+ }
223
+
224
+ return {
225
+ allow: unmet.length === 0,
226
+ reason: unmet.length === 0 ? "ok" : unmet[0],
227
+ unmet,
228
+ };
229
+ }
230
+
231
+ /**
232
+ * Decide whether a delivery workflow may request a PR merge. Fail-closed and
233
+ * exhaustive: every unmet requirement is collected, and merge is allowed ONLY
234
+ * when the complete, exact-commit evidence contract is satisfied.
158
235
  *
159
236
  * @param {object} params
160
237
  * @param {boolean} params.enabled auto-merge explicitly turned on
@@ -163,11 +240,15 @@ export function autoFixDecision(params = {}) {
163
240
  * @param {boolean} params.reviewApproved
164
241
  * @param {number} params.pendingApprovals permission approvals still waiting
165
242
  * @param {string[]} params.requiredChecks names that must be present AND passed
243
+ * @param {boolean} params.requiredMatrixComplete list is the authoritative full matrix
166
244
  * @param {Array} params.checks observed checks (summarizeChecks input)
245
+ * @param {string} params.headCommitSha exact PR head
246
+ * @param {string} params.ciCommitSha commit assessed by CI
247
+ * @param {Array} params.sideEffects explicit adjudication ledger (may be empty)
167
248
  * @param {string} [params.targetBranch]
168
249
  * @returns {{allow:boolean, reason:string, unmet:string[]}}
169
250
  */
170
- export function autoMergeDecision(params = {}) {
251
+ export function strictAutoMergeDecision(params = {}) {
171
252
  const unmet = [];
172
253
 
173
254
  if (params.enabled !== true) unmet.push("auto-merge-disabled");
@@ -176,7 +257,23 @@ export function autoMergeDecision(params = {}) {
176
257
  unmet.push("branch-protection-unsatisfied");
177
258
  }
178
259
  if (params.reviewApproved !== true) unmet.push("review-not-approved");
179
- if (Number(params.pendingApprovals) > 0) unmet.push("pending-approvals");
260
+ const pendingApprovals = Number(params.pendingApprovals);
261
+ if (!Number.isInteger(pendingApprovals) || pendingApprovals < 0) {
262
+ unmet.push("pending-approvals-unverified");
263
+ } else if (pendingApprovals > 0) {
264
+ unmet.push("pending-approvals");
265
+ }
266
+
267
+ const headCommitSha = String(params.headCommitSha || "").trim();
268
+ const ciCommitSha = String(params.ciCommitSha || "").trim();
269
+ if (
270
+ !EXACT_COMMIT_RE.test(headCommitSha) ||
271
+ !EXACT_COMMIT_RE.test(ciCommitSha)
272
+ ) {
273
+ unmet.push("commit-sha-unverifiable");
274
+ } else if (headCommitSha !== ciCommitSha) {
275
+ unmet.push("ci-head-mismatch");
276
+ }
180
277
 
181
278
  const summary = summarizeChecks(params.checks);
182
279
  if (summary.anyFailed) unmet.push("checks-failing");
@@ -185,13 +282,54 @@ export function autoMergeDecision(params = {}) {
185
282
  // Every REQUIRED check must be present and passed — a required check that
186
283
  // never ran is a block, not a pass.
187
284
  const required = Array.isArray(params.requiredChecks)
188
- ? params.requiredChecks
285
+ ? params.requiredChecks.map((name) => String(name || "").trim())
189
286
  : [];
287
+ if (params.requiredMatrixComplete !== true) {
288
+ unmet.push("required-matrix-unverified");
289
+ }
290
+ if (required.length === 0 || required.some((name) => !name)) {
291
+ unmet.push("required-checks-unverified");
292
+ }
293
+ if (new Set(required).size !== required.length) {
294
+ unmet.push("required-checks-ambiguous");
295
+ }
190
296
  for (const name of required) {
191
- const state = summary.byName.get(String(name));
192
- if (state !== CHECK_STATE.PASSED && state !== CHECK_STATE.NEUTRAL) {
297
+ const matches = (Array.isArray(params.checks) ? params.checks : []).filter(
298
+ (check) => String(check?.name || "") === name,
299
+ );
300
+ if (matches.length === 0) {
193
301
  unmet.push(`required-check-missing:${name}`);
302
+ continue;
194
303
  }
304
+ if (matches.length > 1) {
305
+ unmet.push(`required-check-ambiguous:${name}`);
306
+ continue;
307
+ }
308
+ const check = matches[0];
309
+ const state =
310
+ normalizeCheckState(check?.state) ??
311
+ normalizeCheckState(check?.conclusion) ??
312
+ normalizeCheckState(check?.status);
313
+ if (state !== CHECK_STATE.PASSED) {
314
+ unmet.push(`required-check-not-passed:${name}`);
315
+ }
316
+ const checkCommitSha = String(check?.commitSha || "").trim();
317
+ if (
318
+ !EXACT_COMMIT_RE.test(checkCommitSha) ||
319
+ !EXACT_COMMIT_RE.test(headCommitSha)
320
+ ) {
321
+ unmet.push(`required-check-commit-unverifiable:${name}`);
322
+ } else if (checkCommitSha !== headCommitSha) {
323
+ unmet.push(`required-check-stale:${name}`);
324
+ }
325
+ }
326
+
327
+ const sideEffects = summarizeSideEffects(params.sideEffects);
328
+ if (!sideEffects.verified) {
329
+ unmet.push("side-effects-unverified");
330
+ }
331
+ for (const id of sideEffects.unresolved) {
332
+ if (sideEffects.verified) unmet.push(`side-effect-unresolved:${id}`);
195
333
  }
196
334
 
197
335
  return {
@@ -88,6 +88,13 @@ const ENV_ALLOWLIST = new Set([
88
88
  "VISUAL",
89
89
  "NODE_ENV",
90
90
  "NODE_OPTIONS",
91
+ // Deterministic local commit metadata is identity text, not an auth secret.
92
+ // The broad /AUTH/i detector would otherwise strip GIT_AUTHOR_* and break
93
+ // checkpoint commit-tree in repos without user.name/user.email.
94
+ "GIT_AUTHOR_NAME",
95
+ "GIT_AUTHOR_EMAIL",
96
+ "GIT_COMMITTER_NAME",
97
+ "GIT_COMMITTER_EMAIL",
91
98
  // These identify a run; they are not authentication credentials.
92
99
  "CC_SESSION_ID",
93
100
  "CLAUDE_CODE_SESSION_ID",
@@ -2308,6 +2308,33 @@ class ProcessExecutionBroker extends EventEmitter {
2308
2308
  }
2309
2309
  }
2310
2310
 
2311
+ _normalizeAuditRedactArgIndexes(value, argCount) {
2312
+ if (value === undefined) return new Set();
2313
+ if (!Array.isArray(value)) {
2314
+ throw new TypeError("auditRedactArgIndexes must be an array");
2315
+ }
2316
+ const indexes = new Set();
2317
+ for (const index of value) {
2318
+ if (!Number.isInteger(index) || index < 0 || index >= argCount) {
2319
+ throw new TypeError("auditRedactArgIndexes contains an invalid index");
2320
+ }
2321
+ indexes.add(index);
2322
+ }
2323
+ return indexes;
2324
+ }
2325
+
2326
+ _auditArgs(args, redactIndexes = new Set()) {
2327
+ const sanitized = this._sanitizeAuditArgs(args);
2328
+ for (const index of redactIndexes) {
2329
+ sanitized[index] = "***REDACTED***";
2330
+ }
2331
+ return sanitized;
2332
+ }
2333
+
2334
+ _stripAuditControlOptions(options) {
2335
+ delete options.auditRedactArgIndexes;
2336
+ }
2337
+
2311
2338
  _applyCredentialBoundary(command, args, spawnOptions, origin) {
2312
2339
  const originalArgs = Array.isArray(args) ? [...args] : [];
2313
2340
  const originalEnv = spawnOptions.env || process.env;
@@ -2704,6 +2731,10 @@ class ProcessExecutionBroker extends EventEmitter {
2704
2731
  let decision = policy;
2705
2732
  if (isDangerous && policy !== "deny") decision = "deny";
2706
2733
  if (options.forceAllow) decision = "elevated";
2734
+ const auditRedactArgIndexes = this._normalizeAuditRedactArgIndexes(
2735
+ options.auditRedactArgIndexes,
2736
+ Array.isArray(args) ? args.length : 0,
2737
+ );
2707
2738
 
2708
2739
  const traceCtx = this._getTraceContext();
2709
2740
  const auditEntry = {
@@ -2712,7 +2743,7 @@ class ProcessExecutionBroker extends EventEmitter {
2712
2743
  origin,
2713
2744
  scope,
2714
2745
  command,
2715
- args: this._sanitizeAuditArgs(args),
2746
+ args: this._auditArgs(args, auditRedactArgIndexes),
2716
2747
  cwd,
2717
2748
  startTime,
2718
2749
  permissionDecision: decision,
@@ -2781,6 +2812,7 @@ class ProcessExecutionBroker extends EventEmitter {
2781
2812
  this._stripSandboxControlOptions(spawnOpts);
2782
2813
  this._stripPluginControlOptions(spawnOpts);
2783
2814
  this._stripWorkspaceTransactionOptions(spawnOpts);
2815
+ this._stripAuditControlOptions(spawnOpts);
2784
2816
  if (traceCtx) {
2785
2817
  spawnOpts.env = { ...(spawnOpts.env || process.env) };
2786
2818
  spawnOpts.env.TRACEPARENT = traceCtx.traceparent;
@@ -2802,7 +2834,7 @@ class ProcessExecutionBroker extends EventEmitter {
2802
2834
  );
2803
2835
  spawnOpts.env = credentialBoundary.env;
2804
2836
  args = credentialBoundary.args;
2805
- auditEntry.args = [...args];
2837
+ auditEntry.args = this._auditArgs(args, auditRedactArgIndexes);
2806
2838
  this._recordCredentialReport(auditEntry, credentialBoundary.report);
2807
2839
  this._stripCredentialControlOptions(spawnOpts);
2808
2840
  }
@@ -2932,7 +2964,7 @@ class ProcessExecutionBroker extends EventEmitter {
2932
2964
  executionId,
2933
2965
  toolName: origin,
2934
2966
  command,
2935
- args,
2967
+ args: [...auditEntry.args],
2936
2968
  cwd,
2937
2969
  pid: proc.pid,
2938
2970
  component: origin,
@@ -2993,6 +3025,10 @@ class ProcessExecutionBroker extends EventEmitter {
2993
3025
  let decision = policy;
2994
3026
  if (isDangerous && policy !== "deny") decision = "deny";
2995
3027
  if (options.forceAllow) decision = "elevated";
3028
+ const auditRedactArgIndexes = this._normalizeAuditRedactArgIndexes(
3029
+ options.auditRedactArgIndexes,
3030
+ Array.isArray(args) ? args.length : 0,
3031
+ );
2996
3032
 
2997
3033
  const traceCtx = this._getTraceContext();
2998
3034
  const auditEntry = {
@@ -3001,7 +3037,7 @@ class ProcessExecutionBroker extends EventEmitter {
3001
3037
  origin,
3002
3038
  scope,
3003
3039
  command,
3004
- args: this._sanitizeAuditArgs(args),
3040
+ args: this._auditArgs(args, auditRedactArgIndexes),
3005
3041
  cwd,
3006
3042
  startTime,
3007
3043
  permissionDecision: decision,
@@ -3060,6 +3096,7 @@ class ProcessExecutionBroker extends EventEmitter {
3060
3096
  this._stripSandboxControlOptions(spawnOpts);
3061
3097
  this._stripPluginControlOptions(spawnOpts);
3062
3098
  this._stripWorkspaceTransactionOptions(spawnOpts);
3099
+ this._stripAuditControlOptions(spawnOpts);
3063
3100
  if (traceCtx) {
3064
3101
  spawnOpts.env = { ...(spawnOpts.env || process.env) };
3065
3102
  spawnOpts.env.TRACEPARENT = traceCtx.traceparent;
@@ -3081,7 +3118,7 @@ class ProcessExecutionBroker extends EventEmitter {
3081
3118
  );
3082
3119
  spawnOpts.env = credentialBoundary.env;
3083
3120
  args = credentialBoundary.args;
3084
- auditEntry.args = [...args];
3121
+ auditEntry.args = this._auditArgs(args, auditRedactArgIndexes);
3085
3122
  this._recordCredentialReport(auditEntry, credentialBoundary.report);
3086
3123
  this._stripCredentialControlOptions(spawnOpts);
3087
3124
  }
@@ -3182,13 +3219,17 @@ class ProcessExecutionBroker extends EventEmitter {
3182
3219
  const origin = options.origin || "terminal:pty";
3183
3220
  const scope = options.scope || "terminal";
3184
3221
  const policy = options.policy || "allow";
3222
+ const auditRedactArgIndexes = this._normalizeAuditRedactArgIndexes(
3223
+ options.auditRedactArgIndexes,
3224
+ Array.isArray(args) ? args.length : 0,
3225
+ );
3185
3226
  const auditEntry = {
3186
3227
  executionId,
3187
3228
  traceId: this._getTraceContext()?.traceId || null,
3188
3229
  origin,
3189
3230
  scope,
3190
3231
  command,
3191
- args: this._sanitizeAuditArgs(args),
3232
+ args: this._auditArgs(args, auditRedactArgIndexes),
3192
3233
  cwd: options.cwd || process.cwd(),
3193
3234
  startTime,
3194
3235
  permissionDecision: policy,
@@ -3237,10 +3278,11 @@ class ProcessExecutionBroker extends EventEmitter {
3237
3278
  throw error;
3238
3279
  }
3239
3280
 
3240
- const spawnOptions = { ...options, args: [...auditEntry.args] };
3281
+ const spawnOptions = { ...options, args: [...args] };
3241
3282
  this._stripSandboxControlOptions(spawnOptions);
3242
3283
  this._stripPluginControlOptions(spawnOptions);
3243
3284
  this._stripWorkspaceTransactionOptions(spawnOptions);
3285
+ this._stripAuditControlOptions(spawnOptions);
3244
3286
  try {
3245
3287
  const terminalName =
3246
3288
  typeof options.name === "string" && options.name
@@ -3265,7 +3307,10 @@ class ProcessExecutionBroker extends EventEmitter {
3265
3307
  );
3266
3308
  spawnOptions.env = credentialBoundary.env;
3267
3309
  spawnOptions.args = credentialBoundary.args;
3268
- auditEntry.args = [...credentialBoundary.args];
3310
+ auditEntry.args = this._auditArgs(
3311
+ credentialBoundary.args,
3312
+ auditRedactArgIndexes,
3313
+ );
3269
3314
  this._recordCredentialReport(auditEntry, credentialBoundary.report);
3270
3315
  this._stripCredentialControlOptions(spawnOptions);
3271
3316
  }