chainlesschain 0.165.4 → 0.165.5

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 (180) 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-C__nnraW.js → AIOps-CEeYTeDB.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-CsKWHEZ-.js → ActionButton-BeRUQ3V2.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-BhIjfjWO.js → Analytics-DrV718XF.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-BjuXFzWZ.js → AppLayout-Cd2Frt7Q.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-k6whDkZJ.js → Artifacts-CUJMlORU.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-C4FBMYRh.js → Audit-CXJcfT6p.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-C_vRrSXk.js → BackgroundAgents-DOv6Z7H9.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-CngFZeVp.js → Backup-BwdDyBI0.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-B_H9EBRm.js → BaseInput-BmLn4kYH.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-DLEC5kt7.js → Chat-COg8pAW2.js} +4 -4
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-4gGkdGgA.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-m3ClR4xh.js → Checkbox-BCP4uoU8.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-CmLSFrgp.js → Codegen-pRt6Y9JI.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-DFGQteHN.js → Col-DLaprKhS.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-EUUVORHE.js → Community-DyATsz5f.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-2PSg0Yr7.js → Compact-BXAaupZK.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-CcKur7gB.js → Compliance-DpcJBELr.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-DK_Fezfa.js → Cowork-DG4EFWyd.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-Dbw89xl7.js → Cron-F6Oy5n2P.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CH66h_Ec.js → Crosschain-BOdgtalX.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-D1igRb17.js → DID-DT1dSkjH.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-DVAsrobk.js → Dashboard-NBUIqWzC.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-Dl7W8AQs.js → Dropdown-CSpHeMYB.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-D5tpaEQC.js → EmailListRenderer-CEG0xISr.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-O_VQf8gq.js → FamilyGuardDashboard-BTZ0BZna.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-BTVcgS9n.js → Federation-BuuCTn2V.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-BRnkJAIz.js → FormItemContext-KAVceevk.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-8OWSCkDj.js → GenericCardRenderer-DnHpcQvW.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-WXLYTQj2.js → Git-C_B_0HwB.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-BezaUhtc.js → Governance-DPSZuzuu.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-CuRay3Gu.js → Inference-BV-06V7q.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-DfWLDW1m.js → KnowledgeGraph-wpDuupn6.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-C55y2pPY.js → Logs-Bseca1_I.js} +2 -2
  36. package/src/assets/web-panel/assets/MarkdownRenderer-B4RLp2zs.js +1 -0
  37. package/src/assets/web-panel/assets/{Marketplace-Dk08Uycg.js → Marketplace-d3kM4DDL.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-C11fSB5V.js → McpTools-DQ_xZ23i.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-mr0eZc97.js → Memory-CRIeYO4L.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-C0iCSRbb.js → MobileBridge-BsllIa9l.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-CY-xMG8Z.js → MobileProjects-BUuQy30X.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-Bplqc_Wc.js → Mtc-BOFDIzrC.js} +2 -2
  43. package/src/assets/web-panel/assets/{MtcAudit-BlzwsoSM.js → MtcAudit-BQg-vyvG.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-BBLmTty6.js → Multisig-Bo1jrPdN.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-DtT1uf1W.js → NLProgramming-Bmod8alw.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-DcqQAxTK.js → Notes-CGGFL8w-.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-cb0kWoZe.js → NotificationSettings-BsZvCJxC.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-kw9HZQNN.js → OrderTableRenderer-C1-Quo_h.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-DlTlbkUN.js → Organization-BjOeDYOi.js} +2 -2
  50. package/src/assets/web-panel/assets/{Overflow-pp1qs-oY.js → Overflow-DwVV3l5A.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-BESLnyYz.js → P2P-Cu3DQT9W.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-B-J1mGuf.js → PdhVaultBrowser-Cg0gR7dH.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-B36PeT1_.js → Permissions-CsAXxRN5.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-CTK2ad-3.js → PersonalDataHub-C-nNmnYp.js} +4 -4
  55. package/src/assets/web-panel/assets/{Pipeline-zJNGXsac.js → Pipeline-BOnW7nNc.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-b9fz0Qf0.js → Privacy-ClLSyGKt.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-DjZbZgiB.js → ProjectInit-DuLvjjq7.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-C-hHJXlD.js → ProjectSettings-DQYYbDD9.js} +2 -2
  59. package/src/assets/web-panel/assets/Projects-Drw8MBGK.js +1 -0
  60. package/src/assets/web-panel/assets/Providers-ckqHQe6K.js +1 -0
  61. package/src/assets/web-panel/assets/{QrScannerModal-A0yoQ3-3.js → QrScannerModal-DW5BXk-G.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-DrFgFJNC.js → QuickAsk-DDLnhNTp.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-KC8hF1g4.js → Recommend-PJQ2C91U.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-DGTPIk6u.js → RemoteSession-s6wmda34.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-QmbwM7Yk.js → Reputation-DC2sb-I3.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-BxjJylia.js → Row-hPGk1eGj.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-B7Wda1J6.js → RssFeed-RIvfZql0.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-_plQ_YSA.js → Search-DFg1G1eR.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-CD2YJZfx.js → Security-D6H5p8Dp.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-qQE7NmwE.js → Services-nxYiFV_w.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-DgQqkFf7.js → Skeleton-BmgFNAdB.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-C4C0oFFt.js → Skills-CsaaD2av.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-Px2N2B5c.js → Sla-yM5y9yvK.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-DN6C3lQd.js → SpeechSettings-DPy1XMYh.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-jm5aH_m7.js → SyncSettings-CFVhEyyr.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-DlkJcv67.js → Tasks-DdO02Inn.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-DyrTHUBs.js → Templates-Eo2d8Llu.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-mC434PtL.js → Tenant-ChESOXgy.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-o0_s3NgK.js → Terminal-BJ7oDxTI.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-DAGlAXOw.js → TimelineRenderer-hWX0fUvz.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-BnulS_bs.js → Tokens-DVBZQnd-.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-suQbVXYM.js → Trigger-D89cQfVq.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-DbIJAPo5.js → Trust-BIVSb4-V.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-CQNpbIHi.js → UkeySign-B58gWopl.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-D8aWCERk.js → VideoEditing-DhHI7bmG.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-CuLpYfZc.js → Wallet-C4FheWS_.js} +3 -3
  87. package/src/assets/web-panel/assets/{WebAuthn-CsfG8ZMc.js → WebAuthn-DnPRq-Bx.js} +3 -3
  88. package/src/assets/web-panel/assets/{WorkflowEditor-BYsEAZbd.js → WorkflowEditor-BerRPjpJ.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-FT4Um3-I.js → chat-BzZ52iKr.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-CKbS_Wlt.js → colors-BI_E4BAn.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-CFJtzuJM.js → compact-item-d50mr3yk.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-B9kSRW6K.js → createContext-C6FsQ1IH.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-CagEcIex.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-DR-x0Xpi.js → hasIn-DLZEMgLP.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-DdkIhfi-.js → index-9H_M2jju.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BfFCQHL3.js → index-A5CDWP7y.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-7jHr_A_k.js → index-AHr7ryWf.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BVPU43b1.js → index-B81mo1Et.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-B3ZX81mK.js → index-BAE3hwev.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DMGmg497.js → index-BB9SqVSt.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-B7osrXqy.js → index-BRGx3w6T.js} +3 -3
  102. package/src/assets/web-panel/assets/{index-Bt4fS2eL.js → index-BTpIOTfR.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-WE08gMJP.js → index-BZjjdQ62.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BwR7yc2h.js → index-BcSUl9fA.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DtkFqPVA.js → index-BeM4hfht.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BGbPnC5x.js → index-Bmr_vxXD.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DjEP7WkH.js → index-BoNZlzhQ.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-r2VI1Ikk.js → index-C3k8kevG.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DeSgw-WV.js → index-CLoTQr0W.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C_enk9I_.js → index-CO8DAF7U.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CJmIQ9XR.js → index-CRN5TRTQ.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-Dap9c3eD.js → index-CUaEHfQ0.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-KqDaCApw.js → index-CVzuawCX.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BK3TiKVq.js → index-CdKt9fOd.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-OSzjTzGM.js → index-CgkoH3_g.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DW4BWjTk.js → index-CjuKZBqJ.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-C2JvmYRc.js → index-Co7s9LsB.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DiNUEpSQ.js → index-D-aBumtY.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BW-t9n-q.js → index-DE0V6cp-.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Bzz0C1BZ.js → index-DY4j5zkF.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Cr2FLUsD.js → index-Dec0Kf_Z.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DShSkww-.js → index-DoFtCVZ7.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DTxNy0ZU.js → index-DqkbHHg8.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CvrCCqJt.js → index-DsscwxPE.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DWdqx7zI.js → index-GXE0D8Nx.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-tqSEHPRT.js → index-IPkwSAW_.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DcfxhKXR.js → index-KNGgO4Wm.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CGaXUsIs.js → index-Pvf30m8Q.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-D4LfPvWA.js → index-Q5Tn735s.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BI5hP_qy.js → index-TWG-_D1M.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-QBSeNVO3.js → index-Y2-q7QLm.js} +1 -1
  132. package/src/assets/web-panel/assets/index-pzT9PpOU.js +1 -0
  133. package/src/assets/web-panel/assets/index-z1kFadaX.js +1 -0
  134. package/src/assets/web-panel/assets/{initDefaultProps-Dd7n7VgI.js → initDefaultProps-D-4Hzgej.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-BwxouRw1.js → motion-D4Wl4xU7.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-DObN0PG9.js → move-Cd5eQvL0.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-B3nOUQc7.js → mtc-parser-B4ilslCW.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-o9WU2Nbl.js → omit-Ckarx-tf.js} +1 -1
  139. package/src/assets/web-panel/assets/parsers-YNLm7sQ0.js +4 -0
  140. package/src/assets/web-panel/assets/{pickAttrs-CL_vvfQ_.js → pickAttrs-QJ0bpCmc.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-CYrM2tyK.js → placementArrow-CKHm-tq8.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-k_06cQ96.js → responsiveObserve-CV6a_w_Y.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-CPKG0pxS.js → slide-mHpeQFgk.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-BDDEeLTw.js → statusUtils-DIaQNQWA.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-Cmb7RTh7.js → styleChecker-PJpzavV8.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-e2IedC4N.js → useFlexGapSupport-BH7zTw8S.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CE_gxVnm.js → useFs-BDNG3JDd.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-BkMIIKMz.js → usePersonalDataHub-CY2VWdUg.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-DW886XV1.js → vnode-D0kw9jhz.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-Dwo_adaf.js → zoom-B5g7TN7r.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +1 -1
  153. package/src/commands/artifacts.js +235 -0
  154. package/src/commands/cowork.js +86 -57
  155. package/src/commands/session-location.js +20 -1
  156. package/src/commands/session.js +64 -69
  157. package/src/data/changelog.json +16 -3
  158. package/src/gateways/ws/message-dispatcher.js +57 -0
  159. package/src/lib/artifact-access-ledger.js +1 -0
  160. package/src/lib/artifact-deletion-ledger.js +1 -0
  161. package/src/lib/artifact-recovery.js +970 -0
  162. package/src/lib/artifact-workbench-projection.js +171 -0
  163. package/src/lib/dynamic-workflow-runtime.js +408 -1
  164. package/src/lib/execution-location-target.js +4 -2
  165. package/src/lib/mcp-stdio-executable-identity.js +16 -0
  166. package/src/lib/mcp-stdio-native-code-policy.js +74 -0
  167. package/src/lib/mcp-stdio-package-materialization.js +12 -3
  168. package/src/lib/process-execution-broker/index.js +112 -0
  169. package/src/lib/process-execution-broker/platform-sandbox.js +57 -3
  170. package/src/lib/process-execution-broker/workspace-transaction.js +26 -0
  171. package/src/lib/session-projection.js +126 -10
  172. package/src/runtime/agent-core.js +12 -0
  173. package/src/assets/web-panel/assets/ChatBubbleRenderer-xijcWkJe.js +0 -1
  174. package/src/assets/web-panel/assets/MarkdownRenderer-hDpWdiBc.js +0 -1
  175. package/src/assets/web-panel/assets/Projects-BC9KSDM6.js +0 -1
  176. package/src/assets/web-panel/assets/Providers-Dz-CAYYU.js +0 -1
  177. package/src/assets/web-panel/assets/devWarning-DJZ0gAMu.js +0 -1
  178. package/src/assets/web-panel/assets/index-Bizb4hkw.js +0 -1
  179. package/src/assets/web-panel/assets/index-OHSl-xCh.js +0 -1
  180. package/src/assets/web-panel/assets/parsers-UEvh_ShA.js +0 -4
@@ -75,9 +75,8 @@ function renderWorkflowPreflight(preflight) {
75
75
  }
76
76
 
77
77
  async function loadCoworkWorkflowRecord(cwd, id, definitionDigest) {
78
- const { getWorkflowRecord, getWorkflowVersion } = await import(
79
- "../lib/cowork-workflow.js"
80
- );
78
+ const { getWorkflowRecord, getWorkflowVersion } =
79
+ await import("../lib/cowork-workflow.js");
81
80
  return definitionDigest
82
81
  ? getWorkflowVersion(cwd, id, definitionDigest)
83
82
  : getWorkflowRecord(cwd, id);
@@ -135,9 +134,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
135
134
  .option("--model <name>", "LLM model to use")
136
135
  .option("--json", "Output as JSON")
137
136
  .action(async (target, options) => {
138
- const { startDebate, DEFAULT_PERSPECTIVES } = await import(
139
- "../lib/cowork/debate-review-cli.js"
140
- );
137
+ const { startDebate, DEFAULT_PERSPECTIVES } =
138
+ await import("../lib/cowork/debate-review-cli.js");
141
139
 
142
140
  const perspectives = options.perspectives
143
141
  .split(",")
@@ -346,9 +344,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
346
344
  let result;
347
345
 
348
346
  if (options.type === "style") {
349
- const { analyzeProjectStyle } = await import(
350
- "../lib/cowork/project-style-analyzer-cli.js"
351
- );
347
+ const { analyzeProjectStyle } =
348
+ await import("../lib/cowork/project-style-analyzer-cli.js");
352
349
  const llmOptions = {};
353
350
  if (options.provider) llmOptions.provider = options.provider;
354
351
  if (options.model) llmOptions.model = options.model;
@@ -357,14 +354,12 @@ export function registerCoworkCommand(program, commandDeps = {}) {
357
354
  llmOptions,
358
355
  });
359
356
  } else if (options.type === "knowledge-graph") {
360
- const { buildKnowledgeGraph } = await import(
361
- "../lib/cowork/code-knowledge-graph-cli.js"
362
- );
357
+ const { buildKnowledgeGraph } =
358
+ await import("../lib/cowork/code-knowledge-graph-cli.js");
363
359
  result = await buildKnowledgeGraph({ targetPath: resolved });
364
360
  } else if (options.type === "decisions") {
365
- const { extractDecisions } = await import(
366
- "../lib/cowork/decision-kb-cli.js"
367
- );
361
+ const { extractDecisions } =
362
+ await import("../lib/cowork/decision-kb-cli.js");
368
363
  const llmOptions = {};
369
364
  if (options.provider) llmOptions.provider = options.provider;
370
365
  if (options.model) llmOptions.model = options.model;
@@ -413,9 +408,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
413
408
  .option("--limit <n>", "Max results", "20")
414
409
  .option("--json", "Output as JSON")
415
410
  .action(async (query, options) => {
416
- const { searchTemplatesInHub } = await import(
417
- "../lib/cowork-evomap-adapter.js"
418
- );
411
+ const { searchTemplatesInHub } =
412
+ await import("../lib/cowork-evomap-adapter.js");
419
413
  try {
420
414
  const results = await searchTemplatesInHub(query || "", {
421
415
  hubUrl: options.hub,
@@ -461,9 +455,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
461
455
  (value, prev) => (prev ? [...prev, value] : [value]),
462
456
  )
463
457
  .action(async (geneId, options) => {
464
- const { installTemplateFromHub } = await import(
465
- "../lib/cowork-evomap-adapter.js"
466
- );
458
+ const { installTemplateFromHub } =
459
+ await import("../lib/cowork-evomap-adapter.js");
467
460
  try {
468
461
  const template = await installTemplateFromHub(process.cwd(), geneId, {
469
462
  hubUrl: options.hub,
@@ -486,9 +479,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
486
479
  .description("List locally installed Cowork templates")
487
480
  .option("--json", "Output as JSON")
488
481
  .action(async (options) => {
489
- const { listUserTemplates } = await import(
490
- "../lib/cowork-template-marketplace.js"
491
- );
482
+ const { listUserTemplates } =
483
+ await import("../lib/cowork-template-marketplace.js");
492
484
  const templates = listUserTemplates(process.cwd());
493
485
  if (options.json) {
494
486
  console.log(JSON.stringify(templates, null, 2));
@@ -511,9 +503,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
511
503
  .command("remove <id>")
512
504
  .description("Remove an installed Cowork template")
513
505
  .action(async (id) => {
514
- const { removeUserTemplate } = await import(
515
- "../lib/cowork-template-marketplace.js"
516
- );
506
+ const { removeUserTemplate } =
507
+ await import("../lib/cowork-template-marketplace.js");
517
508
  if (removeUserTemplate(process.cwd(), id)) {
518
509
  logger.log(chalk.green(`✓ Removed '${id}'`));
519
510
  } else {
@@ -937,9 +928,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
937
928
  : {}),
938
929
  });
939
930
  }
940
- const { generateDynamicWorkflowDraft } = await import(
941
- "../lib/dynamic-workflow-draft.js"
942
- );
931
+ const { generateDynamicWorkflowDraft } =
932
+ await import("../lib/dynamic-workflow-draft.js");
943
933
  const draft = await generateDynamicWorkflowDraft(
944
934
  { prompt, provider, model },
945
935
  { chat },
@@ -1019,12 +1009,13 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1019
1009
  workflow
1020
1010
  .command("runtime-status <run-id>")
1021
1011
  .description("Read a durable workflow run without invoking a task provider")
1012
+ .option("--cwd <path>", "Project root containing the durable run")
1022
1013
  .option("--json", "Machine-readable JSON output")
1023
1014
  .action(async (runId, options) => {
1024
1015
  try {
1025
1016
  const runtime = await import("../lib/dynamic-workflow-runtime.js");
1026
1017
  const statePath = runtime.dynamicWorkflowRunStatePath(
1027
- process.cwd(),
1018
+ options.cwd || process.cwd(),
1028
1019
  runId,
1029
1020
  );
1030
1021
  const projection = runtime.projectDynamicWorkflowRuntime(statePath, {
@@ -1068,6 +1059,46 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1068
1059
  }
1069
1060
  });
1070
1061
 
1062
+ workflow
1063
+ .command("runtime-recovery-plan")
1064
+ .description(
1065
+ "Dry-run the bounded startup/periodic recovery policy for this project",
1066
+ )
1067
+ .option("--cwd <path>", "Project root containing durable runs")
1068
+ .option("-n, --limit <n>", "Maximum durable runs to inspect", "100")
1069
+ .option("--json", "Machine-readable JSON output")
1070
+ .action(async (options) => {
1071
+ try {
1072
+ const runtime = await import("../lib/dynamic-workflow-runtime.js");
1073
+ const plan = runtime.buildDynamicWorkflowRecoveryPlan(
1074
+ options.cwd || process.cwd(),
1075
+ {
1076
+ limit: Math.max(1, parseInt(options.limit) || 100),
1077
+ ...(Object.hasOwn(commandDeps, "workflowCheckpointStore")
1078
+ ? { checkpointStore: commandDeps.workflowCheckpointStore }
1079
+ : {}),
1080
+ },
1081
+ );
1082
+ if (options.json) {
1083
+ console.log(JSON.stringify(plan, null, 2));
1084
+ return;
1085
+ }
1086
+ logger.log(
1087
+ `${plan.summary.attention}/${plan.summary.total} durable runs need attention; plan ${plan.planDigest}`,
1088
+ );
1089
+ for (const item of plan.items.filter(
1090
+ (entry) => entry.risk !== "none",
1091
+ )) {
1092
+ logger.log(
1093
+ ` ${item.runId} ${item.risk} action=${item.recommendedAction} revision=${item.revision}`,
1094
+ );
1095
+ }
1096
+ } catch (err) {
1097
+ logger.error(`WORKFLOW_RUNTIME_RECOVERY_PLAN_FAILED: ${err.message}`);
1098
+ process.exitCode = 2;
1099
+ }
1100
+ });
1101
+
1071
1102
  for (const action of ["pause", "stop", "resume"]) {
1072
1103
  workflow
1073
1104
  .command(`runtime-${action} <run-id>`)
@@ -1078,12 +1109,13 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1078
1109
  "--expected-revision <n>",
1079
1110
  "Exact runtime revision shown by runtime-status",
1080
1111
  )
1112
+ .option("--cwd <path>", "Project root containing the durable run")
1081
1113
  .option("--json", "Machine-readable JSON output")
1082
1114
  .action(async (runId, options) => {
1083
1115
  try {
1084
1116
  const runtime = await import("../lib/dynamic-workflow-runtime.js");
1085
1117
  const statePath = runtime.dynamicWorkflowRunStatePath(
1086
- process.cwd(),
1118
+ options.cwd || process.cwd(),
1087
1119
  runId,
1088
1120
  );
1089
1121
  const operation =
@@ -1119,12 +1151,13 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1119
1151
  "--expected-revision <n>",
1120
1152
  "Exact runtime revision shown by runtime-status",
1121
1153
  )
1154
+ .option("--cwd <path>", "Project root containing the durable run")
1122
1155
  .option("--json", "Machine-readable JSON output")
1123
1156
  .action(async (runId, callRecordId, options) => {
1124
1157
  try {
1125
1158
  const runtime = await import("../lib/dynamic-workflow-runtime.js");
1126
1159
  const statePath = runtime.dynamicWorkflowRunStatePath(
1127
- process.cwd(),
1160
+ options.cwd || process.cwd(),
1128
1161
  runId,
1129
1162
  );
1130
1163
  const state = runtime.recoverDurableWorkflowCheckpointCall(
@@ -1162,12 +1195,13 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1162
1195
  "--expected-revision <n>",
1163
1196
  "Exact runtime revision shown by runtime-status",
1164
1197
  )
1198
+ .option("--cwd <path>", "Project root containing the durable run")
1165
1199
  .option("--json", "Machine-readable JSON output")
1166
1200
  .action(async (runId, options) => {
1167
1201
  try {
1168
1202
  const runtime = await import("../lib/dynamic-workflow-runtime.js");
1169
1203
  const statePath = runtime.dynamicWorkflowRunStatePath(
1170
- process.cwd(),
1204
+ options.cwd || process.cwd(),
1171
1205
  runId,
1172
1206
  );
1173
1207
  const state = runtime.recoverDurableWorkflowCheckpointCalls(
@@ -1202,12 +1236,13 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1202
1236
  "--expected-revision <n>",
1203
1237
  "Exact runtime revision shown by runtime-status",
1204
1238
  )
1239
+ .option("--cwd <path>", "Project root containing the durable run")
1205
1240
  .option("--json", "Machine-readable JSON output")
1206
1241
  .action(async (runId, requestId, responseFile, options) => {
1207
1242
  try {
1208
1243
  const runtime = await import("../lib/dynamic-workflow-runtime.js");
1209
1244
  const statePath = runtime.dynamicWorkflowRunStatePath(
1210
- process.cwd(),
1245
+ options.cwd || process.cwd(),
1211
1246
  runId,
1212
1247
  );
1213
1248
  const answer =
@@ -1240,12 +1275,13 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1240
1275
  "--expected-revision <n>",
1241
1276
  "Exact runtime revision shown by runtime-status",
1242
1277
  )
1278
+ .option("--cwd <path>", "Project root containing the durable run")
1243
1279
  .option("--json", "Machine-readable JSON output")
1244
1280
  .action(async (runId, effectId, resultFile, options) => {
1245
1281
  try {
1246
1282
  const runtime = await import("../lib/dynamic-workflow-runtime.js");
1247
1283
  const statePath = runtime.dynamicWorkflowRunStatePath(
1248
- process.cwd(),
1284
+ options.cwd || process.cwd(),
1249
1285
  runId,
1250
1286
  );
1251
1287
  const result = runtime.readDynamicWorkflowEffectResultFile(resultFile);
@@ -1311,9 +1347,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1311
1347
  .option("--json", "Machine-readable JSON output")
1312
1348
  .action(async (id, options) => {
1313
1349
  try {
1314
- const { listWorkflowVersions } = await import(
1315
- "../lib/cowork-workflow.js"
1316
- );
1350
+ const { listWorkflowVersions } =
1351
+ await import("../lib/cowork-workflow.js");
1317
1352
  const versions = listWorkflowVersions(process.cwd(), id);
1318
1353
  if (options.json) {
1319
1354
  console.log(JSON.stringify(versions, null, 2));
@@ -1558,9 +1593,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1558
1593
  getVerifiedSessionExecutionLocationAuthority: descriptor.value,
1559
1594
  });
1560
1595
  } else {
1561
- workflowExecutionAuthorityModule = import(
1562
- "../harness/jsonl-session-store.js"
1563
- );
1596
+ workflowExecutionAuthorityModule =
1597
+ import("../harness/jsonl-session-store.js");
1564
1598
  }
1565
1599
  let workflowRunTaskModule;
1566
1600
  if (Object.hasOwn(commandDeps, "workflowRunTask")) {
@@ -1662,9 +1696,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1662
1696
  runTask: runCoworkTask,
1663
1697
  });
1664
1698
  }
1665
- const runtime = await import(
1666
- "../lib/dynamic-workflow-runtime.js"
1667
- );
1699
+ const runtime =
1700
+ await import("../lib/dynamic-workflow-runtime.js");
1668
1701
  return runtime.executeDurableDynamicWorkflow(
1669
1702
  {
1670
1703
  statePath: runtime.dynamicWorkflowRunStatePath(
@@ -1829,9 +1862,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1829
1862
  .description("Per-template aggregate stats across all runs")
1830
1863
  .option("--json", "Output as JSON")
1831
1864
  .action(async (options) => {
1832
- const { loadHistory, computeTemplateStats } = await import(
1833
- "../lib/cowork-learning.js"
1834
- );
1865
+ const { loadHistory, computeTemplateStats } =
1866
+ await import("../lib/cowork-learning.js");
1835
1867
  const stats = computeTemplateStats(loadHistory(process.cwd()));
1836
1868
  if (options.json) {
1837
1869
  console.log(JSON.stringify(stats, null, 2));
@@ -1864,9 +1896,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1864
1896
  .option("--min-runs <n>", "Only consider templates with ≥N past runs", "1")
1865
1897
  .option("--json", "Output as JSON")
1866
1898
  .action(async (messageParts, options) => {
1867
- const { loadHistory, recommendTemplate } = await import(
1868
- "../lib/cowork-learning.js"
1869
- );
1899
+ const { loadHistory, recommendTemplate } =
1900
+ await import("../lib/cowork-learning.js");
1870
1901
  const message = messageParts.join(" ");
1871
1902
  const rec = recommendTemplate(message, loadHistory(process.cwd()), {
1872
1903
  minRuns: parseInt(options.minRuns, 10) || 1,
@@ -1895,9 +1926,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1895
1926
  .option("--limit <n>", "Max examples per template", "3")
1896
1927
  .option("--json", "Output as JSON")
1897
1928
  .action(async (options) => {
1898
- const { loadHistory, summarizeFailures } = await import(
1899
- "../lib/cowork-learning.js"
1900
- );
1929
+ const { loadHistory, summarizeFailures } =
1930
+ await import("../lib/cowork-learning.js");
1901
1931
  const out = summarizeFailures(loadHistory(process.cwd()), {
1902
1932
  limit: parseInt(options.limit, 10) || 3,
1903
1933
  });
@@ -1924,9 +1954,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
1924
1954
  .description("Suggest systemPromptExtension patches from failure history")
1925
1955
  .option("--json", "Output as JSON")
1926
1956
  .action(async (options) => {
1927
- const { loadHistory, suggestPromptPatch } = await import(
1928
- "../lib/cowork-learning.js"
1929
- );
1957
+ const { loadHistory, suggestPromptPatch } =
1958
+ await import("../lib/cowork-learning.js");
1930
1959
  const patches = suggestPromptPatch(loadHistory(process.cwd()));
1931
1960
  if (options.json) {
1932
1961
  console.log(JSON.stringify(patches, null, 2));
@@ -5,6 +5,7 @@ import {
5
5
  buildExecutionLocationCatalog,
6
6
  buildExecutionLocationHandoffPreview,
7
7
  computeExecutionLocationTargetFactsDigest,
8
+ createExecutionLocationTargetAttestation,
8
9
  } from "../lib/execution-location-contract.js";
9
10
  import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
10
11
  import {
@@ -333,6 +334,24 @@ export function prepareSessionReplicaHandoff(sessionId, options, deps = {}) {
333
334
  if (targetFactsDigest !== String(options.expectedTargetFactsDigest || "")) {
334
335
  throw new Error("target facts changed before location handoff append");
335
336
  }
337
+ if (!/^sha256:[a-f0-9]{64}$/u.test(String(options.attestationDigest || ""))) {
338
+ throw new Error("source target attestation digest is invalid");
339
+ }
340
+ // observedAt is intentionally excluded from targetFactsDigest but included
341
+ // in attestationDigest. The source-side probe and this target-side prepare
342
+ // are separate process invocations, so a real target can never reproduce
343
+ // the source probe's timestamp. Bind the handoff event to this fresh target
344
+ // observation; the source rehashes its receipt and immediately verifies the
345
+ // canonical target projection before it is allowed to resume.
346
+ const targetAttestation = createExecutionLocationTargetAttestation({
347
+ profileDigest: options.profileDigest,
348
+ sourceSessionId: sessionId,
349
+ sourceHeadHash: options.expectedHeadHash,
350
+ sourceEventCount: Number(options.expectedEventCount),
351
+ targetEvidenceId: options.targetEvidenceId,
352
+ baseCommit: binding.source.git.commit,
353
+ binding,
354
+ });
336
355
  return (
337
356
  deps.installSessionReplicaWithLocationHandoff ||
338
357
  installSessionReplicaWithLocationHandoff
@@ -348,7 +367,7 @@ export function prepareSessionReplicaHandoff(sessionId, options, deps = {}) {
348
367
  profileDigest: options.profileDigest,
349
368
  targetEvidenceId: options.targetEvidenceId,
350
369
  targetFactsDigest,
351
- attestationDigest: options.attestationDigest,
370
+ attestationDigest: targetAttestation.attestationDigest,
352
371
  binding,
353
372
  },
354
373
  );
@@ -104,9 +104,8 @@ function _sessionEpoch(ts) {
104
104
  * @returns {{statusBar:string, autoMerge:{allow:boolean,reason:string,unmet:string[]}, lines:string[]}}
105
105
  */
106
106
  export async function renderPrStatus(signals = {}, opts = {}) {
107
- const { strictAutoMergeDecision, describePrStatusBar } = await import(
108
- "../lib/pr-automation-policy.js"
109
- );
107
+ const { strictAutoMergeDecision, describePrStatusBar } =
108
+ await import("../lib/pr-automation-policy.js");
110
109
  const autoMerge = strictAutoMergeDecision({
111
110
  enabled: opts.enabled === true,
112
111
  hasOpenPr: signals.hasOpenPr,
@@ -321,6 +320,7 @@ export function registerSessionCommand(program) {
321
320
  let remote = [];
322
321
  let team = [];
323
322
  let workflow = [];
323
+ let dynamicWorkflow = [];
324
324
  let artifacts = [];
325
325
  let prLinks = {};
326
326
 
@@ -350,25 +350,22 @@ export function registerSessionCommand(program) {
350
350
  sourceErrors.local = error?.message || String(error);
351
351
  }
352
352
  try {
353
- const { listBackgroundAgents } = await import(
354
- "../lib/background-agent-supervisor.js"
355
- );
353
+ const { listBackgroundAgents } =
354
+ await import("../lib/background-agent-supervisor.js");
356
355
  background = listBackgroundAgents({ all: true });
357
356
  } catch (error) {
358
357
  sourceErrors.background = error?.message || String(error);
359
358
  }
360
359
  try {
361
- const { readRemoteControlStates } = await import(
362
- "../lib/remote-control.js"
363
- );
360
+ const { readRemoteControlStates } =
361
+ await import("../lib/remote-control.js");
364
362
  remote = readRemoteControlStates();
365
363
  } catch (error) {
366
364
  sourceErrors.remote = error?.message || String(error);
367
365
  }
368
366
  try {
369
- const { listCollaborationRuns } = await import(
370
- "../lib/collaboration-run-store.js"
371
- );
367
+ const { listCollaborationRuns } =
368
+ await import("../lib/collaboration-run-store.js");
372
369
  team = listCollaborationRuns({ limit }).filter(
373
370
  (run) => run?.kind === "team",
374
371
  );
@@ -388,14 +385,29 @@ export function registerSessionCommand(program) {
388
385
  } catch (error) {
389
386
  sourceErrors.workflow = error?.message || String(error);
390
387
  }
388
+ try {
389
+ const { listDynamicWorkflowWorkbenchStates } =
390
+ await import("../lib/dynamic-workflow-runtime.js");
391
+ const discovered = listDynamicWorkflowWorkbenchStates(projectRoot, {
392
+ limit,
393
+ });
394
+ dynamicWorkflow = discovered.runs.map((item) => ({
395
+ ...item,
396
+ cwd: projectRoot,
397
+ }));
398
+ if (discovered.invalidCount > 0) {
399
+ sourceErrors.dynamicWorkflow = `${discovered.invalidCount} durable workflow state file(s) failed validation`;
400
+ }
401
+ } catch (error) {
402
+ sourceErrors.dynamicWorkflow = error?.message || String(error);
403
+ }
391
404
  try {
392
405
  // A file checkpoint is advertised only after the existing CLI git
393
406
  // engine proves that the exact worktree is supported. Copy-mode
394
407
  // checkpoints need explicit paths and therefore cannot truthfully be
395
408
  // offered as a one-click session action.
396
- const { isCheckpointAvailable } = await import(
397
- "../lib/checkpoint-store.js"
398
- );
409
+ const { isCheckpointAvailable } =
410
+ await import("../lib/checkpoint-store.js");
399
411
  const capability = new Map();
400
412
  const decorate = (items, pathFor, sessionFor) =>
401
413
  items.map((item) => {
@@ -438,9 +450,8 @@ export function registerSessionCommand(program) {
438
450
  // checkpoint action unavailable with its explicit reason.
439
451
  }
440
452
  try {
441
- const { ArtifactStore, publicArtifactMetadata } = await import(
442
- "../lib/artifact-store.js"
443
- );
453
+ const { ArtifactStore, publicArtifactMetadata } =
454
+ await import("../lib/artifact-store.js");
444
455
  artifacts = new ArtifactStore().list().map(publicArtifactMetadata);
445
456
  } catch {
446
457
  // Summaries are optional; absence never removes a session.
@@ -452,15 +463,15 @@ export function registerSessionCommand(program) {
452
463
  // Summaries are optional; absence never removes a session.
453
464
  }
454
465
 
455
- const { buildSessionProjection } = await import(
456
- "../lib/session-projection.js"
457
- );
466
+ const { buildSessionProjection } =
467
+ await import("../lib/session-projection.js");
458
468
  const projection = buildSessionProjection({
459
469
  local,
460
470
  background,
461
471
  remote,
462
472
  team,
463
473
  workflow,
474
+ dynamicWorkflow,
464
475
  artifacts,
465
476
  prLinks,
466
477
  sourceErrors,
@@ -478,9 +489,8 @@ export function registerSessionCommand(program) {
478
489
  }
479
490
  }
480
491
  } catch (error) {
481
- const { disconnectedSessionProjection } = await import(
482
- "../lib/session-projection.js"
483
- );
492
+ const { disconnectedSessionProjection } =
493
+ await import("../lib/session-projection.js");
484
494
  if (options.json) {
485
495
  jsonPayload = JSON.stringify(
486
496
  disconnectedSessionProjection(error?.message || String(error)),
@@ -530,9 +540,8 @@ export function registerSessionCommand(program) {
530
540
  } else {
531
541
  // Live path: resolve the session's linked PR and fetch via gh.
532
542
  const { getPrLinks } = await import("../lib/pr-link-ledger.js");
533
- const { getLastSessionId } = await import(
534
- "../harness/jsonl-session-store.js"
535
- );
543
+ const { getLastSessionId } =
544
+ await import("../harness/jsonl-session-store.js");
536
545
  const sid = !id || id === "last" ? getLastSessionId() : id;
537
546
  const links = sid ? getPrLinks(sid) : [];
538
547
  if (links.length === 0) {
@@ -610,9 +619,8 @@ export function registerSessionCommand(program) {
610
619
  // (single / non-TTY / Ctrl-C). Same helper as `cc agent --resume`.
611
620
  if (!id) {
612
621
  ctx = await bootstrap({ verbose: program.opts().verbose });
613
- const { pickRecentSession } = await import(
614
- "../lib/session-picker.js"
615
- );
622
+ const { pickRecentSession } =
623
+ await import("../lib/session-picker.js");
616
624
  const picked = await pickRecentSession(ctx);
617
625
  if (!picked.id) {
618
626
  logger.error(
@@ -642,9 +650,8 @@ export function registerSessionCommand(program) {
642
650
  if (jsonlId) {
643
651
  // Tamper gate: a broken hash chain means the transcript was edited
644
652
  // outside the store — never silently rebuild it as trusted context.
645
- const { verifySession } = await import(
646
- "../harness/jsonl-session-store.js"
647
- );
653
+ const { verifySession } =
654
+ await import("../harness/jsonl-session-store.js");
648
655
  const trust = verifySession(jsonlId);
649
656
  if (["missing", "conflict"].includes(trust.status)) {
650
657
  logger.error(
@@ -757,9 +764,8 @@ export function registerSessionCommand(program) {
757
764
  );
758
765
  }
759
766
  if (sid) {
760
- const { renderAgentSessionMarkdown } = await import(
761
- "../lib/agent-session-export.js"
762
- );
767
+ const { renderAgentSessionMarkdown } =
768
+ await import("../lib/agent-session-export.js");
763
769
  markdown = renderAgentSessionMarkdown(sid, store.readEvents(sid), {
764
770
  exportedAt: new Date().toISOString(),
765
771
  });
@@ -1012,9 +1018,8 @@ export function registerSessionCommand(program) {
1012
1018
  }
1013
1019
  let result;
1014
1020
  if (jsonlId) {
1015
- const { renameSession } = await import(
1016
- "../harness/jsonl-session-store.js"
1017
- );
1021
+ const { renameSession } =
1022
+ await import("../harness/jsonl-session-store.js");
1018
1023
  result = renameSession(jsonlId, normalized);
1019
1024
  } else {
1020
1025
  ctx = await bootstrap({ verbose: program.opts().verbose });
@@ -1053,9 +1058,8 @@ export function registerSessionCommand(program) {
1053
1058
  .option("--json", "Output as JSON")
1054
1059
  .action(async (options) => {
1055
1060
  try {
1056
- const { pruneJsonlSessions } = await import(
1057
- "../harness/jsonl-session-store.js"
1058
- );
1061
+ const { pruneJsonlSessions } =
1062
+ await import("../harness/jsonl-session-store.js");
1059
1063
  const result = pruneJsonlSessions({
1060
1064
  olderThanDays: Number(options.olderThan),
1061
1065
  keep: options.keep != null ? Number(options.keep) : undefined,
@@ -1433,9 +1437,8 @@ export function registerSessionCommand(program) {
1433
1437
  .option("--json", "Output as JSON")
1434
1438
  .action(async (id, options) => {
1435
1439
  try {
1436
- const { getApprovalGate } = await import(
1437
- "../lib/session-core-singletons.js"
1438
- );
1440
+ const { getApprovalGate } =
1441
+ await import("../lib/session-core-singletons.js");
1439
1442
  const gate = await getApprovalGate();
1440
1443
  if (options.set) {
1441
1444
  gate.setSessionPolicy(id, options.set);
@@ -1471,9 +1474,8 @@ export function registerSessionCommand(program) {
1471
1474
  .option("--json", "Output as JSON")
1472
1475
  .action(async (options) => {
1473
1476
  try {
1474
- const { getSessionManager } = await import(
1475
- "../lib/session-core-singletons.js"
1476
- );
1477
+ const { getSessionManager } =
1478
+ await import("../lib/session-core-singletons.js");
1477
1479
  const mgr = getSessionManager();
1478
1480
  const live = mgr.list({
1479
1481
  agentId: options.agent,
@@ -1517,9 +1519,8 @@ export function registerSessionCommand(program) {
1517
1519
  .argument("<id>", "Session ID")
1518
1520
  .action(async (id) => {
1519
1521
  try {
1520
- const { getSessionManager } = await import(
1521
- "../lib/session-core-singletons.js"
1522
- );
1522
+ const { getSessionManager } =
1523
+ await import("../lib/session-core-singletons.js");
1523
1524
  const mgr = getSessionManager();
1524
1525
  if (!mgr.has(id)) {
1525
1526
  logger.error(`Session ${id} is not active in this process`);
@@ -1544,9 +1545,8 @@ export function registerSessionCommand(program) {
1544
1545
  .argument("<id>", "Session ID")
1545
1546
  .action(async (id) => {
1546
1547
  try {
1547
- const { getSessionManager } = await import(
1548
- "../lib/session-core-singletons.js"
1549
- );
1548
+ const { getSessionManager } =
1549
+ await import("../lib/session-core-singletons.js");
1550
1550
  const mgr = getSessionManager();
1551
1551
  const ok = await mgr.resume(id);
1552
1552
  if (!ok) {
@@ -1575,14 +1575,12 @@ export function registerSessionCommand(program) {
1575
1575
  .option("--agent-id <id>", "Agent id for scope=agent")
1576
1576
  .action(async (id, options) => {
1577
1577
  try {
1578
- const { getSessionManager } = await import(
1579
- "../lib/session-core-singletons.js"
1580
- );
1578
+ const { getSessionManager } =
1579
+ await import("../lib/session-core-singletons.js");
1581
1580
  if (options.consolidate) {
1582
1581
  try {
1583
- const { consolidateJsonlSession } = await import(
1584
- "../lib/session-consolidator.js"
1585
- );
1582
+ const { consolidateJsonlSession } =
1583
+ await import("../lib/session-consolidator.js");
1586
1584
  const res = await consolidateJsonlSession(id, {
1587
1585
  scope: options.scope,
1588
1586
  scopeId: options.scopeId || null,
@@ -1801,9 +1799,8 @@ export function registerSessionCommand(program) {
1801
1799
  );
1802
1800
  process.exit(1);
1803
1801
  }
1804
- const { sessionUsage, allSessionsUsage } = await import(
1805
- "../lib/session-usage.js"
1806
- );
1802
+ const { sessionUsage, allSessionsUsage } =
1803
+ await import("../lib/session-usage.js");
1807
1804
  const result = id
1808
1805
  ? sessionUsage(id)
1809
1806
  : allSessionsUsage({ limit: parseInt(options.limit, 10) || 1000 });
@@ -1876,9 +1873,8 @@ export function registerSessionCommand(program) {
1876
1873
  .option("--json", "Machine-readable JSON output")
1877
1874
  .action(async (id) => {
1878
1875
  try {
1879
- const { getVerifiedSessionObservabilityAuthority } = await import(
1880
- "../harness/jsonl-session-store.js"
1881
- );
1876
+ const { getVerifiedSessionObservabilityAuthority } =
1877
+ await import("../harness/jsonl-session-store.js");
1882
1878
  const authority = getVerifiedSessionObservabilityAuthority(id);
1883
1879
  console.log(
1884
1880
  JSON.stringify(
@@ -2316,9 +2312,8 @@ async function mirrorPruneSessions() {
2316
2312
  * (`session.mirror.encryption`). Requires both to be configured.
2317
2313
  */
2318
2314
  async function mirrorRotateKey() {
2319
- const { createMirror, createMirrorCipher, rotateMirrorKey } = await import(
2320
- "../harness/session-mirror.js"
2321
- );
2315
+ const { createMirror, createMirrorCipher, rotateMirrorKey } =
2316
+ await import("../harness/session-mirror.js");
2322
2317
  const { cfg } = await loadConfiguredMirror();
2323
2318
  if (!cfg || !cfg.kind || cfg.kind === "none") {
2324
2319
  return { target: null };