chainlesschain 0.162.189 → 0.162.193

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 (316) hide show
  1. package/README.md +61 -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-DBLkaTje.js} +1 -1
  9. package/src/assets/web-panel/assets/{ActionButton-DoOZpwfN.js → ActionButton-BAy-Qebo.js} +1 -1
  10. package/src/assets/web-panel/assets/{Analytics-B0J0KLTW.js → Analytics-Dfb1Mlau.js} +3 -3
  11. package/src/assets/web-panel/assets/{AppLayout-D9eIR0qq.js → AppLayout-BbFkN8m0.js} +5 -5
  12. package/src/assets/web-panel/assets/{Artifacts-BnZXEVeo.js → Artifacts-kM4-cEEH.js} +1 -1
  13. package/src/assets/web-panel/assets/{Audit-X1ce4Bjn.js → Audit-BSQfYWf3.js} +1 -1
  14. package/src/assets/web-panel/assets/{BackgroundAgents-BvWR-y5v.js → BackgroundAgents-CWDbI_fG.js} +1 -1
  15. package/src/assets/web-panel/assets/{Backup-BublSGEd.js → Backup-BxLPbq_Q.js} +1 -1
  16. package/src/assets/web-panel/assets/{BaseInput-CR_77Hso.js → BaseInput-DuIbdrp6.js} +1 -1
  17. package/src/assets/web-panel/assets/{Chat-DixW52tq.js → Chat-NEmjGahU.js} +6 -6
  18. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DDHDpBBA.js → ChatBubbleRenderer-DfJEo-5_.js} +1 -1
  19. package/src/assets/web-panel/assets/{Checkbox-CCv1C87K.js → Checkbox-CaoeG3Ns.js} +1 -1
  20. package/src/assets/web-panel/assets/{Codegen-B03Cc3dd.js → Codegen-BFf_g3xY.js} +1 -1
  21. package/src/assets/web-panel/assets/{Col-CA06-6pU.js → Col-CNOd8mdQ.js} +1 -1
  22. package/src/assets/web-panel/assets/{Community-Bj881J52.js → Community-BhpDqz-i.js} +1 -1
  23. package/src/assets/web-panel/assets/{Compact-UZLTPoaL.js → Compact-CQ42T7Z6.js} +1 -1
  24. package/src/assets/web-panel/assets/{Compliance-kGwzRb_0.js → Compliance-DI5PcLMN.js} +1 -1
  25. package/src/assets/web-panel/assets/{Cowork-KundoYM8.js → Cowork-wYYZe0wR.js} +3 -3
  26. package/src/assets/web-panel/assets/{Cron-BYZyoqDe.js → Cron-Dlq03DD_.js} +2 -2
  27. package/src/assets/web-panel/assets/{Crosschain-BhrrppBX.js → Crosschain-BzqS8PP3.js} +1 -1
  28. package/src/assets/web-panel/assets/{DID-CdC6EguZ.js → DID-It55Yem7.js} +2 -2
  29. package/src/assets/web-panel/assets/{Dashboard-CcQx3J4y.js → Dashboard-9HkH6oxn.js} +2 -2
  30. package/src/assets/web-panel/assets/{Dropdown-BpijtEzQ.js → Dropdown-00e2YWRB.js} +1 -1
  31. package/src/assets/web-panel/assets/{EmailListRenderer-DfZjeZTe.js → EmailListRenderer-By-ugRDL.js} +1 -1
  32. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BFYSf69C.js → FamilyGuardDashboard-C396yu5m.js} +1 -1
  33. package/src/assets/web-panel/assets/{Federation-Okdi3pJm.js → Federation-BME5sbZY.js} +1 -1
  34. package/src/assets/web-panel/assets/{FormItemContext-mH-HebKW.js → FormItemContext-B4TEZCr-.js} +1 -1
  35. package/src/assets/web-panel/assets/{GenericCardRenderer-xivV69x7.js → GenericCardRenderer-_9CX9ieY.js} +1 -1
  36. package/src/assets/web-panel/assets/{Git-1rh_YBwg.js → Git-BrS6WVSr.js} +2 -2
  37. package/src/assets/web-panel/assets/{Governance-eAXkNxdY.js → Governance-BMdCWnKF.js} +1 -1
  38. package/src/assets/web-panel/assets/{Inference-CS6dMVTN.js → Inference-Bcp3vzcA.js} +1 -1
  39. package/src/assets/web-panel/assets/{KnowledgeGraph-Bq_TnkvD.js → KnowledgeGraph-DlLuqGY5.js} +1 -1
  40. package/src/assets/web-panel/assets/{Logs-KchHtiHt.js → Logs-D-W_6x09.js} +2 -2
  41. package/src/assets/web-panel/assets/{MarkdownRenderer-TabqHW9B.js → MarkdownRenderer-DElGPxCZ.js} +1 -1
  42. package/src/assets/web-panel/assets/{Marketplace-CsmGcX5X.js → Marketplace-Dzn2guvI.js} +1 -1
  43. package/src/assets/web-panel/assets/{McpTools-BaPFnnyz.js → McpTools-uPict-KL.js} +6 -6
  44. package/src/assets/web-panel/assets/{Memory-2m-sUUf7.js → Memory-BCw43kOb.js} +2 -2
  45. package/src/assets/web-panel/assets/{MobileBridge-D5nVZBRu.js → MobileBridge-DmV8Wv7F.js} +1 -1
  46. package/src/assets/web-panel/assets/MobileProjects-C-HaCmSM.js +1 -0
  47. package/src/assets/web-panel/assets/{Mtc-3GDvamGa.js → Mtc-C6jxJ34Y.js} +6 -6
  48. package/src/assets/web-panel/assets/{MtcAudit-D2zGuZCH.js → MtcAudit-Za8ExwhQ.js} +5 -5
  49. package/src/assets/web-panel/assets/{Multisig-BBVQ4t6t.js → Multisig-KKDbuEgb.js} +3 -3
  50. package/src/assets/web-panel/assets/{NLProgramming-BIOCyOGp.js → NLProgramming-Dj97zbCk.js} +1 -1
  51. package/src/assets/web-panel/assets/{Notes-DVwBGpzc.js → Notes-DBXvMraU.js} +4 -4
  52. package/src/assets/web-panel/assets/{NotificationSettings-BDnHfIfX.js → NotificationSettings-DOxITLYl.js} +1 -1
  53. package/src/assets/web-panel/assets/OrderTableRenderer-7DVjZwMM.js +1 -0
  54. package/src/assets/web-panel/assets/{Organization-D3SRKaa7.js → Organization-D1i73mjb.js} +4 -4
  55. package/src/assets/web-panel/assets/{Overflow-C2B8ahyn.js → Overflow-kW6Q3rvg.js} +1 -1
  56. package/src/assets/web-panel/assets/{P2P-2iwQzG65.js → P2P-C-v_8p2v.js} +2 -2
  57. package/src/assets/web-panel/assets/{PdhVaultBrowser-CoPiWqMN.js → PdhVaultBrowser-tUbbY64W.js} +5 -5
  58. package/src/assets/web-panel/assets/{Permissions-yV5XNXo5.js → Permissions-DkHxEZ58.js} +4 -4
  59. package/src/assets/web-panel/assets/{PersonalDataHub-uCDJhMUF.js → PersonalDataHub-DWuMPGrK.js} +4 -4
  60. package/src/assets/web-panel/assets/{Pipeline-hN7ucMOA.js → Pipeline-30IYXWWm.js} +1 -1
  61. package/src/assets/web-panel/assets/{Privacy-CgU0ptN4.js → Privacy-DZNQ4RrH.js} +1 -1
  62. package/src/assets/web-panel/assets/{ProjectInit-CfYPiT6j.js → ProjectInit-De2MCElf.js} +2 -2
  63. package/src/assets/web-panel/assets/{ProjectSettings-B0A2C4nw.js → ProjectSettings-5uHk9wsC.js} +2 -2
  64. package/src/assets/web-panel/assets/{Projects-BE5C0ajn.js → Projects-XjDfrFLb.js} +1 -1
  65. package/src/assets/web-panel/assets/{Providers-CstQPf8W.js → Providers-Bgwj6gcE.js} +1 -1
  66. package/src/assets/web-panel/assets/{QrScannerModal-Co3z_ynk.js → QrScannerModal-gKql9umv.js} +1 -1
  67. package/src/assets/web-panel/assets/{QuickAsk-DMTS6pQ6.js → QuickAsk-BWvmwkh7.js} +1 -1
  68. package/src/assets/web-panel/assets/{Recommend-ETw4odUa.js → Recommend-Uok4hZPd.js} +1 -1
  69. package/src/assets/web-panel/assets/RemoteSession-DLJzTk9a.js +5 -0
  70. package/src/assets/web-panel/assets/{Reputation-BTVqQgKq.js → Reputation-ZVwIPMSO.js} +1 -1
  71. package/src/assets/web-panel/assets/{Row-CBKKwwtO.js → Row-CN04HxWR.js} +1 -1
  72. package/src/assets/web-panel/assets/{RssFeed-BHUQ438I.js → RssFeed-BdSrEG4g.js} +3 -3
  73. package/src/assets/web-panel/assets/{Search-B4NqeUsF.js → Search-5PwVd0IR.js} +1 -1
  74. package/src/assets/web-panel/assets/{Security-BRjoYG5_.js → Security-DdBo4zjN.js} +4 -4
  75. package/src/assets/web-panel/assets/{Services-CxQzu3p3.js → Services-D3letU7M.js} +2 -2
  76. package/src/assets/web-panel/assets/{Skeleton-BKzwwmWO.js → Skeleton--Jb83f1v.js} +1 -1
  77. package/src/assets/web-panel/assets/{Skills-DrsFcgth.js → Skills-Bg-CulHX.js} +1 -1
  78. package/src/assets/web-panel/assets/{Sla-D21tmXCH.js → Sla-7QOa7S-X.js} +1 -1
  79. package/src/assets/web-panel/assets/{SpeechSettings-CjyjLfp8.js → SpeechSettings-DQwppjRw.js} +1 -1
  80. package/src/assets/web-panel/assets/{SyncSettings-Cu45-tnx.js → SyncSettings-dNPQGL-s.js} +2 -2
  81. package/src/assets/web-panel/assets/{Tasks-oMcILYOj.js → Tasks-Ggs-Z48q.js} +1 -1
  82. package/src/assets/web-panel/assets/{Templates-Bh-Zcr5R.js → Templates-78TYHgRO.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tenant-68ns63aI.js → Tenant-xHwwv9vO.js} +1 -1
  84. package/src/assets/web-panel/assets/{Terminal-BLJkFykE.js → Terminal-BJXSJfm4.js} +2 -2
  85. package/src/assets/web-panel/assets/{TimelineRenderer-xcrJLq-O.js → TimelineRenderer-fLbjRhJw.js} +1 -1
  86. package/src/assets/web-panel/assets/{Tokens-C6PpFJtf.js → Tokens-oMSBSBmB.js} +1 -1
  87. package/src/assets/web-panel/assets/{Trigger-BaKA7tdM.js → Trigger-CfnY_wX_.js} +1 -1
  88. package/src/assets/web-panel/assets/{Trust-BzhA57Jc.js → Trust-AdyTgYKO.js} +1 -1
  89. package/src/assets/web-panel/assets/{UkeySign-4_U3JkIR.js → UkeySign-C5K_81dS.js} +1 -1
  90. package/src/assets/web-panel/assets/{VideoEditing-162AANxX.js → VideoEditing-vcGVDqki.js} +1 -1
  91. package/src/assets/web-panel/assets/{Wallet-B1viuql_.js → Wallet-hhOc3hlY.js} +4 -4
  92. package/src/assets/web-panel/assets/{WebAuthn-ZVWazhCy.js → WebAuthn-CVloC11s.js} +4 -4
  93. package/src/assets/web-panel/assets/{WorkflowEditor-tzdyUk-1.js → WorkflowEditor-CYeE32R5.js} +1 -1
  94. package/src/assets/web-panel/assets/{chat-DmrHNuwq.js → chat-CNROR5bN.js} +1 -1
  95. package/src/assets/web-panel/assets/{colors-DAJ_M-PK.js → colors-Cjx-cnwU.js} +1 -1
  96. package/src/assets/web-panel/assets/{compact-item-uIzmYwLs.js → compact-item-DOIfelvD.js} +1 -1
  97. package/src/assets/web-panel/assets/{createContext-D_ZmuLwb.js → createContext-DfA7UZ8u.js} +1 -1
  98. package/src/assets/web-panel/assets/devWarning-ChcCBGs7.js +1 -0
  99. package/src/assets/web-panel/assets/{hasIn-CDt_shTL.js → hasIn-BMSCzcfM.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CaelyMgF.js → index-5-HXgOX5.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-D4n1lGTB.js → index-AWg-0M1S.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-saf3VNeP.js → index-B4iYzpkL.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Bx4d6c1k.js → index-B5Udeb_6.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DdUMcwRB.js → index-B7gf77CJ.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-clSX4PEc.js → index-BEMwBBHk.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DBFmcaCQ.js → index-BM1y_9hM.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-ByzGvpR9.js → index-BUonmKSE.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C16fYKFD.js → index-BbQ2eQ8H.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CzXqvMuP.js → index-BemJ2u_E.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-D9OE8B3d.js → index-BolaOQxx.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-OzTxFIJP.js → index-BxOk9vkG.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DqDSF2RW.js → index-By61ojUx.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CG0lY4h3.js → index-C2K9SNVX.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-QsgfSZrV.js → index-C3L5gdiD.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-GcKOHD_c.js → index-C7xn0Nub.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BRa4kJ_S.js → index-CAnvhwg6.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CeUpKjvi.js → index-CEKMcOyU.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Cvak6Oe2.js → index-CNC5onm4.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CbD_WW_6.js → index-CVL27kXC.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BHvlm0In.js → index-CVm1_i3t.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-rS3gl_68.js → index-CdYBye8B.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-FyplHuNt.js → index-ClNMrqEY.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DfSSy9uy.js → index-Cs6l7uRu.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-rXdwUeE3.js → index-CshQbilz.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DeGBoLQA.js → index-Cyweh0Hy.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-C5WcdJH2.js → index-DBpWXFed.js} +3 -3
  127. package/src/assets/web-panel/assets/{index-CcZ9xJI9.js → index-DHtpHZAQ.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CKyd472S.js → index-DLmn0BoK.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BAvSmJXW.js → index-DPAWBrMf.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-ifxmu8SY.js → index-DjEsxO5h.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BDF6EQBs.js → index-FBc_CJBd.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-Bbxjfstq.js → index-Icdoqmzt.js} +1 -1
  133. package/src/assets/web-panel/assets/index-Q2IajL54.js +1 -0
  134. package/src/assets/web-panel/assets/index-bRkHgOMc.js +1 -0
  135. package/src/assets/web-panel/assets/{index-BTCXf1t-.js → index-dCd8cSUq.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-DvFhhe6r.js → index-m2vG9gG_.js} +1 -1
  137. package/src/assets/web-panel/assets/{index-DwfvPe-j.js → index-mTpHoEzr.js} +1 -1
  138. package/src/assets/web-panel/assets/{index-Z8P4BexE.js → index-ti_lnTWl.js} +1 -1
  139. package/src/assets/web-panel/assets/{initDefaultProps-pmfaD-aK.js → initDefaultProps-Bu8k7H1Y.js} +1 -1
  140. package/src/assets/web-panel/assets/{motion-CaQ2CpYF.js → motion-s3iVK41k.js} +1 -1
  141. package/src/assets/web-panel/assets/{move-CkKTqNbI.js → move-B6B-E5Jz.js} +1 -1
  142. package/src/assets/web-panel/assets/{mtc-parser-Dd4xsgRI.js → mtc-parser-BiYgTidA.js} +1 -1
  143. package/src/assets/web-panel/assets/{omit-BFuA5YEs.js → omit-pU1RdUDA.js} +1 -1
  144. package/src/assets/web-panel/assets/{pickAttrs-DDfxOAJc.js → pickAttrs-Cdoq_SeM.js} +1 -1
  145. package/src/assets/web-panel/assets/{placementArrow-Be595JCp.js → placementArrow-DIuvAn2K.js} +1 -1
  146. package/src/assets/web-panel/assets/{responsiveObserve-7byljUM3.js → responsiveObserve-8w16YR2D.js} +1 -1
  147. package/src/assets/web-panel/assets/{slide-CTWfOTaY.js → slide-VZ01cZe3.js} +1 -1
  148. package/src/assets/web-panel/assets/{statusUtils-CNZOuIxM.js → statusUtils-lh8YMN8Z.js} +1 -1
  149. package/src/assets/web-panel/assets/{styleChecker-DwOcBV78.js → styleChecker-CmDyreec.js} +1 -1
  150. package/src/assets/web-panel/assets/{useFlexGapSupport-B6MNwAO9.js → useFlexGapSupport-hiJWMU5y.js} +1 -1
  151. package/src/assets/web-panel/assets/{useFs-CzyQjH9r.js → useFs-Thnu-Iaj.js} +1 -1
  152. package/src/assets/web-panel/assets/{usePersonalDataHub-Dxh3KiVA.js → usePersonalDataHub-LBdOxjwY.js} +1 -1
  153. package/src/assets/web-panel/assets/{vnode-DVfZiS5N.js → vnode-Cg6lFY_X.js} +1 -1
  154. package/src/assets/web-panel/assets/{zoom-BYme7fbY.js → zoom-DVfsR1YO.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 +1107 -175
  159. package/src/command-surface-policy.js +197 -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 +272 -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 +2156 -145
  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 +344 -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 +22 -0
  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/MobileProjects-Bo8MLZvT.js +0 -1
  312. package/src/assets/web-panel/assets/OrderTableRenderer-C7Ek20ag.js +0 -1
  313. package/src/assets/web-panel/assets/RemoteSession-B0rkE09d.js +0 -5
  314. package/src/assets/web-panel/assets/devWarning-DIrncrV1.js +0 -1
  315. package/src/assets/web-panel/assets/index-D-Swwqld.js +0 -1
  316. package/src/assets/web-panel/assets/index-FMZAMKy8.js +0 -1
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Stable command-surface policy used by the manifest generator.
3
+ *
4
+ * Keep this module dependency-free: phase-0 help and manifest generation both
5
+ * consume it before the full Commander command graph is loaded.
6
+ */
7
+
8
+ export const COMMAND_MANIFEST_SCHEMA = "chainlesschain.command-manifest.v3";
9
+ export const COMMAND_SURFACE_SCHEMA = "chainlesschain.command-surface.v2";
10
+ export const COMMAND_LIFECYCLE_SCHEMA = "chainlesschain.command-lifecycle.v1";
11
+ export const DEFAULT_COMMAND = "agent";
12
+
13
+ export const TOP_LEVEL_GROWTH_POLICY = Object.freeze({
14
+ baselineCommandCount: 175,
15
+ maximumNetGrowth: 0,
16
+ });
17
+
18
+ export const COMMAND_NAMESPACES = Object.freeze([
19
+ Object.freeze({
20
+ name: "lab",
21
+ summary: "Compatibility namespace for long-tail and experimental commands",
22
+ visibility: "extended",
23
+ }),
24
+ ]);
25
+
26
+ const MINIMUM_COMPATIBILITY_RELEASE_CYCLES = 2;
27
+
28
+ const COMMAND_MIGRATIONS = Object.freeze({
29
+ dao: Object.freeze({
30
+ namespace: "lab",
31
+ deprecatedSince: "0.162.189",
32
+ removalNotBefore: "0.164.0",
33
+ }),
34
+ evomap: Object.freeze({
35
+ namespace: "lab",
36
+ deprecatedSince: "0.162.189",
37
+ removalNotBefore: "0.164.0",
38
+ }),
39
+ });
40
+
41
+ export const CORE_COMMAND_GROUPS = Object.freeze([
42
+ Object.freeze({
43
+ id: "code",
44
+ label: "Code",
45
+ commands: Object.freeze(["agent", "session", "skill"]),
46
+ }),
47
+ Object.freeze({
48
+ id: "integrations",
49
+ label: "Integrations",
50
+ commands: Object.freeze(["mcp", "plugin"]),
51
+ }),
52
+ Object.freeze({
53
+ id: "configuration",
54
+ label: "Configuration",
55
+ commands: Object.freeze(["config", "auth", "doctor", "status", "update"]),
56
+ }),
57
+ ]);
58
+
59
+ const CORE_GROUP_BY_COMMAND = new Map(
60
+ CORE_COMMAND_GROUPS.flatMap((group) =>
61
+ group.commands.map((command) => [command, group]),
62
+ ),
63
+ );
64
+
65
+ function parseReleaseVersion(value, label) {
66
+ const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(value);
67
+ if (!match) throw new Error(`${label} must be an exact semver release`);
68
+ return match.slice(1).map(Number);
69
+ }
70
+
71
+ function releaseCycleDistance(from, to) {
72
+ const [fromMajor, fromMinor] = parseReleaseVersion(from, "deprecatedSince");
73
+ const [toMajor, toMinor] = parseReleaseVersion(to, "removalNotBefore");
74
+ if (fromMajor !== toMajor) {
75
+ throw new Error(
76
+ "command migration windows may not cross a major release boundary",
77
+ );
78
+ }
79
+ return toMinor - fromMinor;
80
+ }
81
+
82
+ function lifecycleForCommand(commandName) {
83
+ const migration = COMMAND_MIGRATIONS[commandName];
84
+ if (!migration) return Object.freeze({ state: "active" });
85
+
86
+ const releaseCycles = releaseCycleDistance(
87
+ migration.deprecatedSince,
88
+ migration.removalNotBefore,
89
+ );
90
+ if (releaseCycles < MINIMUM_COMPATIBILITY_RELEASE_CYCLES) {
91
+ throw new Error(
92
+ `${commandName} must remain compatible for at least ${MINIMUM_COMPATIBILITY_RELEASE_CYCLES} release cycles`,
93
+ );
94
+ }
95
+
96
+ return Object.freeze({
97
+ state: "deprecated",
98
+ deprecatedSince: migration.deprecatedSince,
99
+ removalNotBefore: migration.removalNotBefore,
100
+ minimumReleaseCycles: MINIMUM_COMPATIBILITY_RELEASE_CYCLES,
101
+ releaseCycle: "minor",
102
+ });
103
+ }
104
+
105
+ export function validateCommandSurface(entries) {
106
+ if (!Array.isArray(entries)) {
107
+ throw new TypeError("command surface entries must be an array");
108
+ }
109
+ const netGrowth =
110
+ entries.length - TOP_LEVEL_GROWTH_POLICY.baselineCommandCount;
111
+ if (netGrowth > TOP_LEVEL_GROWTH_POLICY.maximumNetGrowth) {
112
+ throw new Error(
113
+ `Top-level command net growth is ${netGrowth}; maximum is ${TOP_LEVEL_GROWTH_POLICY.maximumNetGrowth}`,
114
+ );
115
+ }
116
+
117
+ const names = new Set(entries.map((entry) => entry.name));
118
+ const topLevelTokens = new Set(
119
+ entries.flatMap((entry) => [
120
+ entry.name,
121
+ ...(Array.isArray(entry.aliases) ? entry.aliases : []),
122
+ ]),
123
+ );
124
+ for (const namespace of COMMAND_NAMESPACES) {
125
+ if (topLevelTokens.has(namespace.name)) {
126
+ throw new Error(
127
+ `Virtual command namespace '${namespace.name}' collides with a registered top-level command or alias`,
128
+ );
129
+ }
130
+ }
131
+ for (const commandName of Object.keys(COMMAND_MIGRATIONS)) {
132
+ if (!names.has(commandName)) {
133
+ throw new Error(`Migrated command is not registered: ${commandName}`);
134
+ }
135
+ }
136
+
137
+ const deprecatedCompatibilityCount = entries.filter(
138
+ (entry) => entry.lifecycle?.state === "deprecated",
139
+ ).length;
140
+ const activeRegisteredCommandCount =
141
+ entries.length - deprecatedCompatibilityCount;
142
+ return {
143
+ ...TOP_LEVEL_GROWTH_POLICY,
144
+ registeredCommandCount: entries.length,
145
+ activeRegisteredCommandCount,
146
+ virtualNamespaceCount: COMMAND_NAMESPACES.length,
147
+ deprecatedCompatibilityCount,
148
+ recommendedTopLevelCommandCount:
149
+ activeRegisteredCommandCount + COMMAND_NAMESPACES.length,
150
+ netGrowth,
151
+ };
152
+ }
153
+
154
+ export function describeCommandSurface(commandName) {
155
+ const group = CORE_GROUP_BY_COMMAND.get(commandName);
156
+ const migration = COMMAND_MIGRATIONS[commandName];
157
+ return {
158
+ stability: group ? "stable" : "compatibility",
159
+ category: group?.id || "compatibility",
160
+ visibility: group ? "core" : "extended",
161
+ replacement: migration ? `${migration.namespace} ${commandName}` : null,
162
+ lifecycle: lifecycleForCommand(commandName),
163
+ };
164
+ }
165
+
166
+ export function buildCommandSurfaceDescriptor(entries = []) {
167
+ const migrationCommands = Object.entries(COMMAND_MIGRATIONS).map(
168
+ ([command, migration]) => ({
169
+ command,
170
+ replacement: `${migration.namespace} ${command}`,
171
+ }),
172
+ );
173
+ return {
174
+ schema: COMMAND_SURFACE_SCHEMA,
175
+ defaultCommand: DEFAULT_COMMAND,
176
+ lifecyclePolicy: {
177
+ schema: COMMAND_LIFECYCLE_SCHEMA,
178
+ minimumCompatibilityReleaseCycles: MINIMUM_COMPATIBILITY_RELEASE_CYCLES,
179
+ releaseCycle: "minor",
180
+ },
181
+ topLevelGrowth: validateCommandSurface(entries),
182
+ namespaces: COMMAND_NAMESPACES.map((namespace) => ({
183
+ ...namespace,
184
+ commands: migrationCommands
185
+ .filter(({ replacement }) =>
186
+ replacement.startsWith(`${namespace.name} `),
187
+ )
188
+ .map(({ command }) => command)
189
+ .sort(),
190
+ })),
191
+ coreGroups: CORE_COMMAND_GROUPS.map((group) => ({
192
+ id: group.id,
193
+ label: group.label,
194
+ commands: [...group.commands],
195
+ })),
196
+ };
197
+ }
@@ -17,9 +17,11 @@ import {
17
17
  import { resolveImages, resolveVisionLlm } from "../lib/image-input.js";
18
18
  import { loadConfig } from "../lib/config-manager.js";
19
19
  import {
20
- normalizeAgentSandbox,
20
+ normalizeAgentSandboxMode,
21
21
  assertSandboxAvailable,
22
+ enforceSandboxFailClosed,
22
23
  } from "../lib/agent-sandbox.js";
24
+ import { appendSecurityAuditEvent } from "../lib/security-audit.js";
23
25
 
24
26
  /**
25
27
  * Resolve + validate `--add-dir` values into absolute, existing, de-duped
@@ -82,6 +84,12 @@ export function resolveFallbackModels(flagValue, llm = {}) {
82
84
  return normalizeFallbackModels(configured);
83
85
  }
84
86
 
87
+ export function containsApiKeyArgument(argv = process.argv) {
88
+ return argv.some(
89
+ (value) => value === "--api-key" || String(value).startsWith("--api-key="),
90
+ );
91
+ }
92
+
85
93
  /**
86
94
  * Read all of stdin as a UTF-8 string. Resolves "" immediately when stdin is a
87
95
  * TTY (nothing piped) so we never block an interactive invocation.
@@ -154,6 +162,10 @@ export function registerAgentCommand(program) {
154
162
  "--fork-session",
155
163
  "When resuming, branch into a NEW session id and leave the original untouched (claude --fork-session parity)",
156
164
  )
165
+ .option(
166
+ "--fork-request-id <key>",
167
+ "Stable idempotency key for --fork-session retries (omit for a new fork each invocation)",
168
+ )
157
169
  .option(
158
170
  "--add-dir <dir>",
159
171
  "Extra working directory the agent may read/search/edit (repeatable)",
@@ -220,6 +232,10 @@ export function registerAgentCommand(program) {
220
232
  "--sandbox [image]",
221
233
  "Run shell commands in an ephemeral Docker sandbox (network disabled by default)",
222
234
  )
235
+ .option(
236
+ "--sandbox-mode <mode>",
237
+ "Sandbox posture: off | workspace-write | strict (explicit isolation modes fail closed)",
238
+ )
223
239
  .option("--sandbox-network", "Allow network access inside --sandbox")
224
240
  .option(
225
241
  "--otlp <file>",
@@ -466,7 +482,7 @@ export function registerAgentCommand(program) {
466
482
  options.apiKey = process.env.CC_API_KEY;
467
483
  } else if (
468
484
  options.apiKey &&
469
- process.argv.includes("--api-key") &&
485
+ containsApiKeyArgument(process.argv) &&
470
486
  !process.env.VITEST &&
471
487
  !process.env.VITEST_WORKER_ID
472
488
  ) {
@@ -491,6 +507,7 @@ export function registerAgentCommand(program) {
491
507
  // 2.1.169 parity): flip every customization kill-switch BEFORE anything
492
508
  // loads. Permission rules stay active. --bare (CC_BARE) is safe mode
493
509
  // PLUS skills, plugins and MCP/IDE/PDH/JetBrains auto-connect off.
510
+ let safeIsolationRequested = options.permissionMode === "auto";
494
511
  {
495
512
  const {
496
513
  applySafeMode,
@@ -499,6 +516,7 @@ export function registerAgentCommand(program) {
499
516
  bareModeRequested,
500
517
  } = await import("../lib/safe-mode.js");
501
518
  if (bareModeRequested(options)) {
519
+ safeIsolationRequested = true;
502
520
  const applied = applyBareMode();
503
521
  // Ambient auto-connects off; an EXPLICIT --ide/--pdh/--jetbrains
504
522
  // (or --mcp-config, handled downstream) still wins — bare kills
@@ -511,6 +529,7 @@ export function registerAgentCommand(program) {
511
529
  `bare mode: hooks/skills/plugins/memory/MCP-auto-connect disabled (${applied.join(", ")}) — permission rules stay active.\n`,
512
530
  );
513
531
  } else if (safeModeRequested(options)) {
532
+ safeIsolationRequested = true;
514
533
  const applied = applySafeMode();
515
534
  process.stderr.write(
516
535
  `safe mode: customizations disabled (${applied.join(", ")}) — permission rules stay active.\n`,
@@ -734,7 +753,11 @@ export function registerAgentCommand(program) {
734
753
  const { applyForkSession } =
735
754
  await import("../runtime/headless-runner.js");
736
755
  const fork = applyForkSession(
737
- { forkSession: true, sessionId: options.session },
756
+ {
757
+ forkSession: true,
758
+ sessionId: options.session,
759
+ forkRequestId: options.forkRequestId,
760
+ },
738
761
  store,
739
762
  );
740
763
  if (fork.missing) {
@@ -791,6 +814,7 @@ export function registerAgentCommand(program) {
791
814
  // interactive, which all read options.model) picks it up; env vars are
792
815
  // set on the process so the agent loop + child tools inherit them.
793
816
  let settingsSandbox = null;
817
+ let managedSettingsSandbox = null;
794
818
  try {
795
819
  const { loadSettingsConfig } =
796
820
  await import("../lib/settings-loader.cjs");
@@ -813,8 +837,52 @@ export function registerAgentCommand(program) {
813
837
  }
814
838
  if (!options.model && sc.model) options.model = sc.model;
815
839
  settingsSandbox = sc.sandbox || null;
816
- } catch {
817
- // settings overrides are best-effort 鈥?never block the run
840
+ managedSettingsSandbox = sc.managedSandbox || null;
841
+ } catch (error) {
842
+ if (error?.code === "CC_MANAGED_SETTINGS_INVALID") {
843
+ process.stderr.write(`Error: ${error.message}\n`);
844
+ await _finishWorktree();
845
+ process.exit(6);
846
+ }
847
+ // User/project settings overrides remain best-effort. Organization
848
+ // managed settings are handled above and may never fail open.
849
+ }
850
+
851
+ let resolvedAgentSandbox;
852
+ try {
853
+ resolvedAgentSandbox = normalizeAgentSandboxMode(
854
+ options.sandboxMode,
855
+ options.sandbox,
856
+ {
857
+ cwd: process.cwd(),
858
+ network: options.sandboxNetwork === true,
859
+ settings: settingsSandbox,
860
+ managedSettings: managedSettingsSandbox,
861
+ },
862
+ );
863
+ if (safeIsolationRequested && resolvedAgentSandbox) {
864
+ resolvedAgentSandbox = enforceSandboxFailClosed(
865
+ resolvedAgentSandbox,
866
+ options.permissionMode === "auto" ? "auto" : "safe",
867
+ );
868
+ }
869
+ assertSandboxAvailable(resolvedAgentSandbox);
870
+ if (options.sandboxMode === "off") {
871
+ appendSecurityAuditEvent("sandbox_mode_off", {
872
+ details: {
873
+ command: "agent",
874
+ permissionMode: options.permissionMode || "default",
875
+ isolation: "policy-only",
876
+ },
877
+ });
878
+ process.stderr.write(
879
+ "Warning: sandbox mode is explicitly off; shell commands use policy checks without OS isolation.\n",
880
+ );
881
+ }
882
+ } catch (err) {
883
+ process.stderr.write(`Error: ${err.message}\n`);
884
+ await _finishWorktree();
885
+ process.exit(6);
818
886
  }
819
887
 
820
888
  // Extra workspace roots (--add-dir) 鈥?shared by headless + interactive.
@@ -1014,6 +1082,7 @@ export function registerAgentCommand(program) {
1014
1082
  allowedTools: parseToolList(options.allowedTools),
1015
1083
  disallowedTools: parseToolList(options.disallowedTools),
1016
1084
  additionalDirectories,
1085
+ sandbox: resolvedAgentSandbox,
1017
1086
  maxTurns: options.maxTurns
1018
1087
  ? parseInt(options.maxTurns, 10)
1019
1088
  : undefined,
@@ -1179,20 +1248,6 @@ export function registerAgentCommand(program) {
1179
1248
  }
1180
1249
  return;
1181
1250
  }
1182
- const agentSandbox = normalizeAgentSandbox(options.sandbox, {
1183
- cwd: process.cwd(),
1184
- network: options.sandboxNetwork === true,
1185
- settings: settingsSandbox,
1186
- });
1187
- // Strict sandbox mode: failIfUnavailable refuses to START when the
1188
- // configured engine can't run — no silent per-command degradation.
1189
- try {
1190
- assertSandboxAvailable(agentSandbox);
1191
- } catch (err) {
1192
- process.stderr.write(`Error: ${err.message}\n`);
1193
- await _finishWorktree();
1194
- process.exit(6); // config error (see lib/exit-codes.cjs)
1195
- }
1196
1251
  // Resume requested onto a session with no headless (JSONL) transcript?
1197
1252
  // Warn instead of silently starting empty 鈥?headless resume rebuilds
1198
1253
  // from the JSONL store only (DB-only sessions are not replayable here).
@@ -1246,7 +1301,7 @@ export function registerAgentCommand(program) {
1246
1301
  allowedTools: parseToolList(options.allowedTools),
1247
1302
  disallowedTools: parseToolList(options.disallowedTools),
1248
1303
  additionalDirectories,
1249
- sandbox: agentSandbox,
1304
+ sandbox: resolvedAgentSandbox,
1250
1305
  autoCheckpoint,
1251
1306
  managedCheckpoint: options.managedCheckpoint === true,
1252
1307
  managedCheckpointStateDir: options.managedCheckpointState || null,
@@ -1420,18 +1475,6 @@ export function registerAgentCommand(program) {
1420
1475
 
1421
1476
  // Strict sandbox mode also guards the interactive session: refuse to
1422
1477
  // start when failIfUnavailable is set and the engine can't run.
1423
- const interactiveSandbox = normalizeAgentSandbox(options.sandbox, {
1424
- cwd: process.cwd(),
1425
- network: options.sandboxNetwork === true,
1426
- settings: settingsSandbox,
1427
- });
1428
- try {
1429
- assertSandboxAvailable(interactiveSandbox);
1430
- } catch (err) {
1431
- process.stderr.write(`Error: ${err.message}\n`);
1432
- process.exit(6); // config error (see lib/exit-codes.cjs)
1433
- }
1434
-
1435
1478
  const runtime = createAgentRuntimeFactory().createAgentRuntime({
1436
1479
  model: options.model,
1437
1480
  thinking,
@@ -1453,7 +1496,7 @@ export function registerAgentCommand(program) {
1453
1496
  parkOnExit: options.parkOnExit, // false when --no-park-on-exit
1454
1497
  bundlePath: options.bundle || null,
1455
1498
  additionalDirectories,
1456
- sandbox: interactiveSandbox,
1499
+ sandbox: resolvedAgentSandbox,
1457
1500
  autoCheckpoint,
1458
1501
  managedCheckpoint: options.managedCheckpoint === true,
1459
1502
  managedCheckpointStateDir: options.managedCheckpointState || null,