@caupulican/pi-adaptative 0.81.39 → 0.81.40

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 (667) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +2 -0
  3. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +2 -0
  4. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +1 -1
  5. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +2 -0
  6. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +1 -1
  7. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +3 -0
  8. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +9 -0
  9. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
  10. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +290 -107
  11. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
  12. package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +357 -122
  13. package/dist/bundled-resources/skills/tool-call-repair/references/repair-catalogue.md +2 -2
  14. package/dist/cli/args.d.ts +2 -0
  15. package/dist/cli/args.d.ts.map +1 -1
  16. package/dist/cli/args.js +9 -0
  17. package/dist/cli/args.js.map +1 -1
  18. package/dist/core/agent-directory-layout.d.ts +15 -0
  19. package/dist/core/agent-directory-layout.d.ts.map +1 -0
  20. package/dist/core/agent-directory-layout.js +72 -0
  21. package/dist/core/agent-directory-layout.js.map +1 -0
  22. package/dist/core/agent-paths.d.ts +19 -2
  23. package/dist/core/agent-paths.d.ts.map +1 -1
  24. package/dist/core/agent-paths.js +67 -4
  25. package/dist/core/agent-paths.js.map +1 -1
  26. package/dist/core/agent-session-runtime.d.ts +52 -8
  27. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  28. package/dist/core/agent-session-runtime.js +397 -79
  29. package/dist/core/agent-session-runtime.js.map +1 -1
  30. package/dist/core/agent-session-services.d.ts +1 -0
  31. package/dist/core/agent-session-services.d.ts.map +1 -1
  32. package/dist/core/agent-session-services.js +1 -0
  33. package/dist/core/agent-session-services.js.map +1 -1
  34. package/dist/core/agent-session.d.ts +71 -136
  35. package/dist/core/agent-session.d.ts.map +1 -1
  36. package/dist/core/agent-session.js +477 -1318
  37. package/dist/core/agent-session.js.map +1 -1
  38. package/dist/core/autonomy/approval-gate.d.ts +3 -2
  39. package/dist/core/autonomy/approval-gate.d.ts.map +1 -1
  40. package/dist/core/autonomy/approval-gate.js +6 -28
  41. package/dist/core/autonomy/approval-gate.js.map +1 -1
  42. package/dist/core/autonomy/bounded-completion.d.ts +1 -1
  43. package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
  44. package/dist/core/autonomy/bounded-completion.js +1 -1
  45. package/dist/core/autonomy/bounded-completion.js.map +1 -1
  46. package/dist/core/autonomy/contracts.d.ts +20 -12
  47. package/dist/core/autonomy/contracts.d.ts.map +1 -1
  48. package/dist/core/autonomy/contracts.js.map +1 -1
  49. package/dist/core/autonomy/foreground-envelope.d.ts +8 -2
  50. package/dist/core/autonomy/foreground-envelope.d.ts.map +1 -1
  51. package/dist/core/autonomy/foreground-envelope.js +8 -25
  52. package/dist/core/autonomy/foreground-envelope.js.map +1 -1
  53. package/dist/core/autonomy/gates.d.ts.map +1 -1
  54. package/dist/core/autonomy/gates.js +8 -10
  55. package/dist/core/autonomy/gates.js.map +1 -1
  56. package/dist/core/autonomy/lane-private-paths.d.ts +2 -0
  57. package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -0
  58. package/dist/core/autonomy/lane-private-paths.js +16 -0
  59. package/dist/core/autonomy/lane-private-paths.js.map +1 -0
  60. package/dist/core/autonomy/lane-tool-surface.d.ts +10 -0
  61. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  62. package/dist/core/autonomy/lane-tool-surface.js +46 -8
  63. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  64. package/dist/core/autonomy/lane-tracker.d.ts +14 -0
  65. package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
  66. package/dist/core/autonomy/lane-tracker.js +38 -0
  67. package/dist/core/autonomy/lane-tracker.js.map +1 -1
  68. package/dist/core/autonomy/risk-assessment.d.ts +1 -2
  69. package/dist/core/autonomy/risk-assessment.d.ts.map +1 -1
  70. package/dist/core/autonomy/risk-assessment.js +1 -123
  71. package/dist/core/autonomy/risk-assessment.js.map +1 -1
  72. package/dist/core/autonomy/session-lane-record.d.ts +4 -4
  73. package/dist/core/autonomy/session-lane-record.d.ts.map +1 -1
  74. package/dist/core/autonomy/session-lane-record.js +16 -29
  75. package/dist/core/autonomy/session-lane-record.js.map +1 -1
  76. package/dist/core/autonomy/telemetry-events.d.ts +1 -1
  77. package/dist/core/autonomy/telemetry-events.d.ts.map +1 -1
  78. package/dist/core/autonomy/telemetry-events.js +1 -1
  79. package/dist/core/autonomy/telemetry-events.js.map +1 -1
  80. package/dist/core/autonomy-telemetry.d.ts +7 -7
  81. package/dist/core/autonomy-telemetry.d.ts.map +1 -1
  82. package/dist/core/autonomy-telemetry.js +9 -9
  83. package/dist/core/autonomy-telemetry.js.map +1 -1
  84. package/dist/core/background-lane-controller.d.ts +54 -236
  85. package/dist/core/background-lane-controller.d.ts.map +1 -1
  86. package/dist/core/background-lane-controller.js +140 -1273
  87. package/dist/core/background-lane-controller.js.map +1 -1
  88. package/dist/core/capability-contract.d.ts +4 -0
  89. package/dist/core/capability-contract.d.ts.map +1 -0
  90. package/dist/core/capability-contract.js +28 -0
  91. package/dist/core/capability-contract.js.map +1 -0
  92. package/dist/core/compaction-controller.d.ts +90 -0
  93. package/dist/core/compaction-controller.d.ts.map +1 -0
  94. package/dist/core/compaction-controller.js +452 -0
  95. package/dist/core/compaction-controller.js.map +1 -0
  96. package/dist/core/compaction-support.d.ts +12 -11
  97. package/dist/core/compaction-support.d.ts.map +1 -1
  98. package/dist/core/compaction-support.js.map +1 -1
  99. package/dist/core/context/context-artifacts.d.ts +6 -2
  100. package/dist/core/context/context-artifacts.d.ts.map +1 -1
  101. package/dist/core/context/context-artifacts.js +34 -2
  102. package/dist/core/context/context-artifacts.js.map +1 -1
  103. package/dist/core/context/context-store-retention.d.ts +8 -2
  104. package/dist/core/context/context-store-retention.d.ts.map +1 -1
  105. package/dist/core/context/context-store-retention.js +158 -35
  106. package/dist/core/context/context-store-retention.js.map +1 -1
  107. package/dist/core/context/okf-memory.d.ts.map +1 -1
  108. package/dist/core/context/okf-memory.js +9 -11
  109. package/dist/core/context/okf-memory.js.map +1 -1
  110. package/dist/core/context/sqlite-runtime-index.d.ts.map +1 -1
  111. package/dist/core/context/sqlite-runtime-index.js +6 -8
  112. package/dist/core/context/sqlite-runtime-index.js.map +1 -1
  113. package/dist/core/context-gc.d.ts +3 -0
  114. package/dist/core/context-gc.d.ts.map +1 -1
  115. package/dist/core/context-gc.js +10 -5
  116. package/dist/core/context-gc.js.map +1 -1
  117. package/dist/core/context-pipeline.d.ts.map +1 -1
  118. package/dist/core/context-pipeline.js +9 -4
  119. package/dist/core/context-pipeline.js.map +1 -1
  120. package/dist/core/default-tool-surface.d.ts.map +1 -1
  121. package/dist/core/default-tool-surface.js +1 -0
  122. package/dist/core/default-tool-surface.js.map +1 -1
  123. package/dist/core/delegation/managed-lane-controller.d.ts +34 -0
  124. package/dist/core/delegation/managed-lane-controller.d.ts.map +1 -0
  125. package/dist/core/delegation/managed-lane-controller.js +217 -0
  126. package/dist/core/delegation/managed-lane-controller.js.map +1 -0
  127. package/dist/core/delegation/session-worker-claim.d.ts +44 -0
  128. package/dist/core/delegation/session-worker-claim.d.ts.map +1 -0
  129. package/dist/core/delegation/session-worker-claim.js +98 -0
  130. package/dist/core/delegation/session-worker-claim.js.map +1 -0
  131. package/dist/core/delegation/worker-actions.d.ts +7 -5
  132. package/dist/core/delegation/worker-actions.d.ts.map +1 -1
  133. package/dist/core/delegation/worker-actions.js +20 -4
  134. package/dist/core/delegation/worker-actions.js.map +1 -1
  135. package/dist/core/delegation/{worker-result.d.ts → worker-claim.d.ts} +13 -13
  136. package/dist/core/delegation/worker-claim.d.ts.map +1 -0
  137. package/dist/core/delegation/{worker-result.js → worker-claim.js} +61 -51
  138. package/dist/core/delegation/worker-claim.js.map +1 -0
  139. package/dist/core/delegation/worker-delegation-controller.d.ts +110 -0
  140. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -0
  141. package/dist/core/delegation/worker-delegation-controller.js +861 -0
  142. package/dist/core/delegation/worker-delegation-controller.js.map +1 -0
  143. package/dist/core/delegation/worker-delegation-request.d.ts +11 -0
  144. package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -0
  145. package/dist/core/delegation/worker-delegation-request.js +2 -0
  146. package/dist/core/delegation/worker-delegation-request.js.map +1 -0
  147. package/dist/core/delegation/worker-dispatch-scheduler.d.ts +40 -0
  148. package/dist/core/delegation/worker-dispatch-scheduler.d.ts.map +1 -0
  149. package/dist/core/delegation/worker-dispatch-scheduler.js +93 -0
  150. package/dist/core/delegation/worker-dispatch-scheduler.js.map +1 -0
  151. package/dist/core/delegation/worker-execution-policy.d.ts +62 -0
  152. package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -0
  153. package/dist/core/delegation/worker-execution-policy.js +160 -0
  154. package/dist/core/delegation/worker-execution-policy.js.map +1 -0
  155. package/dist/core/delegation/worker-lane-projection.d.ts +14 -0
  156. package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -0
  157. package/dist/core/delegation/worker-lane-projection.js +100 -0
  158. package/dist/core/delegation/worker-lane-projection.js.map +1 -0
  159. package/dist/core/delegation/worker-lifecycle.d.ts +97 -0
  160. package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -0
  161. package/dist/core/delegation/worker-lifecycle.js +339 -0
  162. package/dist/core/delegation/worker-lifecycle.js.map +1 -0
  163. package/dist/core/delegation/worker-notification-coordinator.d.ts +36 -0
  164. package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -0
  165. package/dist/core/delegation/worker-notification-coordinator.js +90 -0
  166. package/dist/core/delegation/worker-notification-coordinator.js.map +1 -0
  167. package/dist/core/delegation/worker-profile-resolver.d.ts +55 -0
  168. package/dist/core/delegation/worker-profile-resolver.d.ts.map +1 -0
  169. package/dist/core/delegation/worker-profile-resolver.js +113 -0
  170. package/dist/core/delegation/worker-profile-resolver.js.map +1 -0
  171. package/dist/core/delegation/worker-runner.d.ts +25 -14
  172. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  173. package/dist/core/delegation/worker-runner.js +122 -53
  174. package/dist/core/delegation/worker-runner.js.map +1 -1
  175. package/dist/core/delegation/worker-task-label.d.ts +3 -0
  176. package/dist/core/delegation/worker-task-label.d.ts.map +1 -0
  177. package/dist/core/delegation/worker-task-label.js +11 -0
  178. package/dist/core/delegation/worker-task-label.js.map +1 -0
  179. package/dist/core/doctor.d.ts +8 -0
  180. package/dist/core/doctor.d.ts.map +1 -1
  181. package/dist/core/doctor.js +32 -1
  182. package/dist/core/doctor.js.map +1 -1
  183. package/dist/core/extensions/index.d.ts +1 -1
  184. package/dist/core/extensions/index.d.ts.map +1 -1
  185. package/dist/core/extensions/index.js.map +1 -1
  186. package/dist/core/extensions/loader.d.ts +5 -1
  187. package/dist/core/extensions/loader.d.ts.map +1 -1
  188. package/dist/core/extensions/loader.js +50 -15
  189. package/dist/core/extensions/loader.js.map +1 -1
  190. package/dist/core/extensions/runner.d.ts.map +1 -1
  191. package/dist/core/extensions/runner.js +6 -0
  192. package/dist/core/extensions/runner.js.map +1 -1
  193. package/dist/core/extensions/storage.d.ts +8 -0
  194. package/dist/core/extensions/storage.d.ts.map +1 -0
  195. package/dist/core/extensions/storage.js +28 -0
  196. package/dist/core/extensions/storage.js.map +1 -0
  197. package/dist/core/extensions/types.d.ts +70 -21
  198. package/dist/core/extensions/types.d.ts.map +1 -1
  199. package/dist/core/extensions/types.js.map +1 -1
  200. package/dist/core/failure-corpus.d.ts +1 -15
  201. package/dist/core/failure-corpus.d.ts.map +1 -1
  202. package/dist/core/failure-corpus.js +9 -37
  203. package/dist/core/failure-corpus.js.map +1 -1
  204. package/dist/core/foreground-recovery-controller.d.ts +52 -0
  205. package/dist/core/foreground-recovery-controller.d.ts.map +1 -0
  206. package/dist/core/foreground-recovery-controller.js +111 -0
  207. package/dist/core/foreground-recovery-controller.js.map +1 -0
  208. package/dist/core/gateways/channel-provider.d.ts +3 -0
  209. package/dist/core/gateways/channel-provider.d.ts.map +1 -1
  210. package/dist/core/gateways/channel-provider.js +31 -6
  211. package/dist/core/gateways/channel-provider.js.map +1 -1
  212. package/dist/core/goals/goal-acceptance.d.ts +11 -0
  213. package/dist/core/goals/goal-acceptance.d.ts.map +1 -0
  214. package/dist/core/goals/goal-acceptance.js +25 -0
  215. package/dist/core/goals/goal-acceptance.js.map +1 -0
  216. package/dist/core/goals/goal-auto-continue-controller.d.ts +27 -0
  217. package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -0
  218. package/dist/core/goals/goal-auto-continue-controller.js +93 -0
  219. package/dist/core/goals/goal-auto-continue-controller.js.map +1 -0
  220. package/dist/core/goals/goal-continuation-controller.d.ts +1 -1
  221. package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
  222. package/dist/core/goals/goal-continuation-controller.js +10 -0
  223. package/dist/core/goals/goal-continuation-controller.js.map +1 -1
  224. package/dist/core/goals/goal-continuation-prompt.d.ts +1 -1
  225. package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -1
  226. package/dist/core/goals/goal-continuation-prompt.js +6 -6
  227. package/dist/core/goals/goal-continuation-prompt.js.map +1 -1
  228. package/dist/core/goals/goal-lifecycle.d.ts +20 -0
  229. package/dist/core/goals/goal-lifecycle.d.ts.map +1 -0
  230. package/dist/core/goals/goal-lifecycle.js +17 -0
  231. package/dist/core/goals/goal-lifecycle.js.map +1 -0
  232. package/dist/core/goals/goal-runtime-snapshot.d.ts +11 -9
  233. package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
  234. package/dist/core/goals/goal-runtime-snapshot.js +10 -8
  235. package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
  236. package/dist/core/goals/goal-state.d.ts +1 -0
  237. package/dist/core/goals/goal-state.d.ts.map +1 -1
  238. package/dist/core/goals/goal-state.js +7 -10
  239. package/dist/core/goals/goal-state.js.map +1 -1
  240. package/dist/core/goals/goal-tool-core.d.ts +8 -6
  241. package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
  242. package/dist/core/goals/goal-tool-core.js +11 -41
  243. package/dist/core/goals/goal-tool-core.js.map +1 -1
  244. package/dist/core/goals/session-goal-state.d.ts +2 -4
  245. package/dist/core/goals/session-goal-state.d.ts.map +1 -1
  246. package/dist/core/goals/session-goal-state.js +10 -33
  247. package/dist/core/goals/session-goal-state.js.map +1 -1
  248. package/dist/core/human-input.d.ts +100 -0
  249. package/dist/core/human-input.d.ts.map +1 -0
  250. package/dist/core/human-input.js +362 -0
  251. package/dist/core/human-input.js.map +1 -0
  252. package/dist/core/index.d.ts +9 -1
  253. package/dist/core/index.d.ts.map +1 -1
  254. package/dist/core/index.js +9 -1
  255. package/dist/core/index.js.map +1 -1
  256. package/dist/core/{telemetry.d.ts → install-telemetry.d.ts} +1 -1
  257. package/dist/core/install-telemetry.d.ts.map +1 -0
  258. package/dist/core/{telemetry.js → install-telemetry.js} +1 -1
  259. package/dist/core/install-telemetry.js.map +1 -0
  260. package/dist/core/keybindings.d.ts +17 -1
  261. package/dist/core/keybindings.d.ts.map +1 -1
  262. package/dist/core/keybindings.js +24 -6
  263. package/dist/core/keybindings.js.map +1 -1
  264. package/dist/core/learning/learning-audit.d.ts +2 -4
  265. package/dist/core/learning/learning-audit.d.ts.map +1 -1
  266. package/dist/core/learning/learning-audit.js +9 -29
  267. package/dist/core/learning/learning-audit.js.map +1 -1
  268. package/dist/core/learning/learning-gate.d.ts.map +1 -1
  269. package/dist/core/learning/learning-gate.js +1 -6
  270. package/dist/core/learning/learning-gate.js.map +1 -1
  271. package/dist/core/learning/session-learning-decision.d.ts +2 -4
  272. package/dist/core/learning/session-learning-decision.d.ts.map +1 -1
  273. package/dist/core/learning/session-learning-decision.js +9 -29
  274. package/dist/core/learning/session-learning-decision.js.map +1 -1
  275. package/dist/core/memory-controller.d.ts.map +1 -1
  276. package/dist/core/memory-controller.js +4 -4
  277. package/dist/core/memory-controller.js.map +1 -1
  278. package/dist/core/model-capability.d.ts.map +1 -1
  279. package/dist/core/model-capability.js +1 -0
  280. package/dist/core/model-capability.js.map +1 -1
  281. package/dist/core/model-resolver.d.ts +1 -1
  282. package/dist/core/model-resolver.d.ts.map +1 -1
  283. package/dist/core/model-resolver.js +6 -9
  284. package/dist/core/model-resolver.js.map +1 -1
  285. package/dist/core/model-router/intent-classifier.d.ts +1 -4
  286. package/dist/core/model-router/intent-classifier.d.ts.map +1 -1
  287. package/dist/core/model-router/intent-classifier.js +1 -156
  288. package/dist/core/model-router/intent-classifier.js.map +1 -1
  289. package/dist/core/model-router-controller.d.ts.map +1 -1
  290. package/dist/core/model-router-controller.js +2 -2
  291. package/dist/core/model-router-controller.js.map +1 -1
  292. package/dist/core/model-selection-controller.d.ts +4 -4
  293. package/dist/core/model-selection-controller.d.ts.map +1 -1
  294. package/dist/core/model-selection-controller.js.map +1 -1
  295. package/dist/core/model-tool-protocol.d.ts +23 -0
  296. package/dist/core/model-tool-protocol.d.ts.map +1 -0
  297. package/dist/core/model-tool-protocol.js +43 -0
  298. package/dist/core/model-tool-protocol.js.map +1 -0
  299. package/dist/core/models/adaptation-store.d.ts +4 -6
  300. package/dist/core/models/adaptation-store.d.ts.map +1 -1
  301. package/dist/core/models/adaptation-store.js +95 -83
  302. package/dist/core/models/adaptation-store.js.map +1 -1
  303. package/dist/core/models/fitness-store.d.ts +2 -12
  304. package/dist/core/models/fitness-store.d.ts.map +1 -1
  305. package/dist/core/models/fitness-store.js +84 -57
  306. package/dist/core/models/fitness-store.js.map +1 -1
  307. package/dist/core/models/host-state-store.d.ts +34 -0
  308. package/dist/core/models/host-state-store.d.ts.map +1 -0
  309. package/dist/core/models/host-state-store.js +86 -0
  310. package/dist/core/models/host-state-store.js.map +1 -0
  311. package/dist/core/orchestration/agent-resume.d.ts +24 -0
  312. package/dist/core/orchestration/agent-resume.d.ts.map +1 -0
  313. package/dist/core/orchestration/agent-resume.js +90 -0
  314. package/dist/core/orchestration/agent-resume.js.map +1 -0
  315. package/dist/core/orchestration/capability-gateway.d.ts +61 -0
  316. package/dist/core/orchestration/capability-gateway.d.ts.map +1 -0
  317. package/dist/core/orchestration/capability-gateway.js +152 -0
  318. package/dist/core/orchestration/capability-gateway.js.map +1 -0
  319. package/dist/core/orchestration/contracts.d.ts +343 -0
  320. package/dist/core/orchestration/contracts.d.ts.map +1 -0
  321. package/dist/core/orchestration/contracts.js +135 -0
  322. package/dist/core/orchestration/contracts.js.map +1 -0
  323. package/dist/core/orchestration/delegation-ledger.d.ts +56 -0
  324. package/dist/core/orchestration/delegation-ledger.d.ts.map +1 -0
  325. package/dist/core/orchestration/delegation-ledger.js +197 -0
  326. package/dist/core/orchestration/delegation-ledger.js.map +1 -0
  327. package/dist/core/orchestration/event-store.d.ts +83 -0
  328. package/dist/core/orchestration/event-store.d.ts.map +1 -0
  329. package/dist/core/orchestration/event-store.js +560 -0
  330. package/dist/core/orchestration/event-store.js.map +1 -0
  331. package/dist/core/orchestration/lane-tool-manifests.d.ts +9 -0
  332. package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -0
  333. package/dist/core/orchestration/lane-tool-manifests.js +37 -0
  334. package/dist/core/orchestration/lane-tool-manifests.js.map +1 -0
  335. package/dist/core/orchestration/model-binding.d.ts +15 -0
  336. package/dist/core/orchestration/model-binding.d.ts.map +1 -0
  337. package/dist/core/orchestration/model-binding.js +29 -0
  338. package/dist/core/orchestration/model-binding.js.map +1 -0
  339. package/dist/core/orchestration/policy-compiler.d.ts +49 -0
  340. package/dist/core/orchestration/policy-compiler.d.ts.map +1 -0
  341. package/dist/core/orchestration/policy-compiler.js +191 -0
  342. package/dist/core/orchestration/policy-compiler.js.map +1 -0
  343. package/dist/core/orchestration/policy-gate.d.ts +18 -0
  344. package/dist/core/orchestration/policy-gate.d.ts.map +1 -0
  345. package/dist/core/orchestration/policy-gate.js +24 -0
  346. package/dist/core/orchestration/policy-gate.js.map +1 -0
  347. package/dist/core/orchestration/profile-registry.d.ts +51 -0
  348. package/dist/core/orchestration/profile-registry.d.ts.map +1 -0
  349. package/dist/core/orchestration/profile-registry.js +393 -0
  350. package/dist/core/orchestration/profile-registry.js.map +1 -0
  351. package/dist/core/orchestration/profile-store.d.ts +31 -0
  352. package/dist/core/orchestration/profile-store.d.ts.map +1 -0
  353. package/dist/core/orchestration/profile-store.js +136 -0
  354. package/dist/core/orchestration/profile-store.js.map +1 -0
  355. package/dist/core/orchestration/risk-budget.d.ts +9 -0
  356. package/dist/core/orchestration/risk-budget.d.ts.map +1 -0
  357. package/dist/core/orchestration/risk-budget.js +48 -0
  358. package/dist/core/orchestration/risk-budget.js.map +1 -0
  359. package/dist/core/orchestration/task-runtime.d.ts +168 -0
  360. package/dist/core/orchestration/task-runtime.d.ts.map +1 -0
  361. package/dist/core/orchestration/task-runtime.js +1600 -0
  362. package/dist/core/orchestration/task-runtime.js.map +1 -0
  363. package/dist/core/orchestration/work-state-projection.d.ts +32 -0
  364. package/dist/core/orchestration/work-state-projection.d.ts.map +1 -0
  365. package/dist/core/orchestration/work-state-projection.js +116 -0
  366. package/dist/core/orchestration/work-state-projection.js.map +1 -0
  367. package/dist/core/orchestration/worker-execution-contract.d.ts +21 -0
  368. package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -0
  369. package/dist/core/orchestration/worker-execution-contract.js +179 -0
  370. package/dist/core/orchestration/worker-execution-contract.js.map +1 -0
  371. package/dist/core/orchestration/worker-result-adapter.d.ts +21 -0
  372. package/dist/core/orchestration/worker-result-adapter.d.ts.map +1 -0
  373. package/dist/core/orchestration/worker-result-adapter.js +109 -0
  374. package/dist/core/orchestration/worker-result-adapter.js.map +1 -0
  375. package/dist/core/process-identity.d.ts +11 -0
  376. package/dist/core/process-identity.d.ts.map +1 -0
  377. package/dist/core/process-identity.js +26 -0
  378. package/dist/core/process-identity.js.map +1 -0
  379. package/dist/core/process-matrix/codes.d.ts +14 -3
  380. package/dist/core/process-matrix/codes.d.ts.map +1 -1
  381. package/dist/core/process-matrix/codes.js.map +1 -1
  382. package/dist/core/process-matrix/resume-launcher.d.ts +26 -0
  383. package/dist/core/process-matrix/resume-launcher.d.ts.map +1 -0
  384. package/dist/core/process-matrix/resume-launcher.js +62 -0
  385. package/dist/core/process-matrix/resume-launcher.js.map +1 -0
  386. package/dist/core/process-matrix/runtime.d.ts +37 -22
  387. package/dist/core/process-matrix/runtime.d.ts.map +1 -1
  388. package/dist/core/process-matrix/runtime.js +399 -76
  389. package/dist/core/process-matrix/runtime.js.map +1 -1
  390. package/dist/core/process-matrix/store.d.ts +5 -2
  391. package/dist/core/process-matrix/store.d.ts.map +1 -1
  392. package/dist/core/process-matrix/store.js +123 -14
  393. package/dist/core/process-matrix/store.js.map +1 -1
  394. package/dist/core/process-matrix/supervisor.d.ts +10 -7
  395. package/dist/core/process-matrix/supervisor.d.ts.map +1 -1
  396. package/dist/core/process-matrix/supervisor.js +45 -14
  397. package/dist/core/process-matrix/supervisor.js.map +1 -1
  398. package/dist/core/profile-registry.d.ts.map +1 -1
  399. package/dist/core/profile-registry.js +6 -8
  400. package/dist/core/profile-registry.js.map +1 -1
  401. package/dist/core/reflection-controller.d.ts +4 -4
  402. package/dist/core/reflection-controller.d.ts.map +1 -1
  403. package/dist/core/reflection-controller.js +2 -1
  404. package/dist/core/reflection-controller.js.map +1 -1
  405. package/dist/core/reload-blockers.d.ts.map +1 -1
  406. package/dist/core/reload-blockers.js +6 -8
  407. package/dist/core/reload-blockers.js.map +1 -1
  408. package/dist/core/research/evidence-bundle.d.ts.map +1 -1
  409. package/dist/core/research/evidence-bundle.js +1 -6
  410. package/dist/core/research/evidence-bundle.js.map +1 -1
  411. package/dist/core/research/lane-model-resolver.d.ts +33 -0
  412. package/dist/core/research/lane-model-resolver.d.ts.map +1 -0
  413. package/dist/core/research/lane-model-resolver.js +65 -0
  414. package/dist/core/research/lane-model-resolver.js.map +1 -0
  415. package/dist/core/research/model-fitness-controller.d.ts +38 -0
  416. package/dist/core/research/model-fitness-controller.d.ts.map +1 -0
  417. package/dist/core/research/model-fitness-controller.js +106 -0
  418. package/dist/core/research/model-fitness-controller.js.map +1 -0
  419. package/dist/core/research/model-fitness.d.ts +1 -1
  420. package/dist/core/research/model-fitness.d.ts.map +1 -1
  421. package/dist/core/research/model-fitness.js +4 -4
  422. package/dist/core/research/model-fitness.js.map +1 -1
  423. package/dist/core/research/research-gate.d.ts.map +1 -1
  424. package/dist/core/research/research-gate.js +7 -7
  425. package/dist/core/research/research-gate.js.map +1 -1
  426. package/dist/core/research/research-lane-controller.d.ts +62 -0
  427. package/dist/core/research/research-lane-controller.d.ts.map +1 -0
  428. package/dist/core/research/research-lane-controller.js +292 -0
  429. package/dist/core/research/research-lane-controller.js.map +1 -0
  430. package/dist/core/research/session-evidence-bundle.d.ts +2 -4
  431. package/dist/core/research/session-evidence-bundle.d.ts.map +1 -1
  432. package/dist/core/research/session-evidence-bundle.js +10 -46
  433. package/dist/core/research/session-evidence-bundle.js.map +1 -1
  434. package/dist/core/resource-loader.d.ts.map +1 -1
  435. package/dist/core/resource-loader.js +7 -2
  436. package/dist/core/resource-loader.js.map +1 -1
  437. package/dist/core/risk-classifier.d.ts +6 -0
  438. package/dist/core/risk-classifier.d.ts.map +1 -0
  439. package/dist/core/risk-classifier.js +225 -0
  440. package/dist/core/risk-classifier.js.map +1 -0
  441. package/dist/core/runtime-builder.d.ts +26 -20
  442. package/dist/core/runtime-builder.d.ts.map +1 -1
  443. package/dist/core/runtime-builder.js +237 -178
  444. package/dist/core/runtime-builder.js.map +1 -1
  445. package/dist/core/sdk.d.ts +6 -3
  446. package/dist/core/sdk.d.ts.map +1 -1
  447. package/dist/core/sdk.js +61 -24
  448. package/dist/core/sdk.js.map +1 -1
  449. package/dist/core/session-analytics.d.ts.map +1 -1
  450. package/dist/core/session-analytics.js +28 -1
  451. package/dist/core/session-analytics.js.map +1 -1
  452. package/dist/core/session-image-store.d.ts +33 -0
  453. package/dist/core/session-image-store.d.ts.map +1 -0
  454. package/dist/core/session-image-store.js +283 -0
  455. package/dist/core/session-image-store.js.map +1 -0
  456. package/dist/core/session-role.d.ts +6 -4
  457. package/dist/core/session-role.d.ts.map +1 -1
  458. package/dist/core/session-role.js +10 -4
  459. package/dist/core/session-role.js.map +1 -1
  460. package/dist/core/session-snapshot.d.ts +34 -0
  461. package/dist/core/session-snapshot.d.ts.map +1 -0
  462. package/dist/core/session-snapshot.js +68 -0
  463. package/dist/core/session-snapshot.js.map +1 -0
  464. package/dist/core/session-supervision-runtime.d.ts +31 -0
  465. package/dist/core/session-supervision-runtime.d.ts.map +1 -0
  466. package/dist/core/session-supervision-runtime.js +97 -0
  467. package/dist/core/session-supervision-runtime.js.map +1 -0
  468. package/dist/core/settings-manager.d.ts +9 -4
  469. package/dist/core/settings-manager.d.ts.map +1 -1
  470. package/dist/core/settings-manager.js +80 -28
  471. package/dist/core/settings-manager.js.map +1 -1
  472. package/dist/core/tasks/session-task-state.d.ts +2 -4
  473. package/dist/core/tasks/session-task-state.d.ts.map +1 -1
  474. package/dist/core/tasks/session-task-state.js +10 -28
  475. package/dist/core/tasks/session-task-state.js.map +1 -1
  476. package/dist/core/tasks/task-projection.d.ts +20 -0
  477. package/dist/core/tasks/task-projection.d.ts.map +1 -0
  478. package/dist/core/tasks/task-projection.js +47 -0
  479. package/dist/core/tasks/task-projection.js.map +1 -0
  480. package/dist/core/tasks/task-state.d.ts +4 -0
  481. package/dist/core/tasks/task-state.d.ts.map +1 -1
  482. package/dist/core/tasks/task-state.js +28 -11
  483. package/dist/core/tasks/task-state.js.map +1 -1
  484. package/dist/core/tool-capability-policy.d.ts +13 -0
  485. package/dist/core/tool-capability-policy.d.ts.map +1 -0
  486. package/dist/core/tool-capability-policy.js +85 -0
  487. package/dist/core/tool-capability-policy.js.map +1 -0
  488. package/dist/core/tool-protocol-controller.d.ts +91 -0
  489. package/dist/core/tool-protocol-controller.d.ts.map +1 -0
  490. package/dist/core/tool-protocol-controller.js +512 -0
  491. package/dist/core/tool-protocol-controller.js.map +1 -0
  492. package/dist/core/tool-recovery-log-records.d.ts +2 -3
  493. package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
  494. package/dist/core/tool-recovery-log-records.js +9 -35
  495. package/dist/core/tool-recovery-log-records.js.map +1 -1
  496. package/dist/core/tool-selection/tool-performance-store.d.ts +3 -7
  497. package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -1
  498. package/dist/core/tool-selection/tool-performance-store.js +97 -138
  499. package/dist/core/tool-selection/tool-performance-store.js.map +1 -1
  500. package/dist/core/tools/ask-question.d.ts +124 -0
  501. package/dist/core/tools/ask-question.d.ts.map +1 -0
  502. package/dist/core/tools/ask-question.js +693 -0
  503. package/dist/core/tools/ask-question.js.map +1 -0
  504. package/dist/core/tools/delegate-status.d.ts +31 -3
  505. package/dist/core/tools/delegate-status.d.ts.map +1 -1
  506. package/dist/core/tools/delegate-status.js +149 -29
  507. package/dist/core/tools/delegate-status.js.map +1 -1
  508. package/dist/core/tools/delegate.d.ts +15 -13
  509. package/dist/core/tools/delegate.d.ts.map +1 -1
  510. package/dist/core/tools/delegate.js +108 -23
  511. package/dist/core/tools/delegate.js.map +1 -1
  512. package/dist/core/tools/extensionify.d.ts.map +1 -1
  513. package/dist/core/tools/extensionify.js +1 -0
  514. package/dist/core/tools/extensionify.js.map +1 -1
  515. package/dist/core/tools/goal.d.ts +5 -5
  516. package/dist/core/tools/goal.d.ts.map +1 -1
  517. package/dist/core/tools/goal.js +10 -10
  518. package/dist/core/tools/goal.js.map +1 -1
  519. package/dist/core/tools/model-fitness.d.ts.map +1 -1
  520. package/dist/core/tools/model-fitness.js +2 -2
  521. package/dist/core/tools/model-fitness.js.map +1 -1
  522. package/dist/core/tools/orchestration-panel.d.ts +43 -0
  523. package/dist/core/tools/orchestration-panel.d.ts.map +1 -0
  524. package/dist/core/tools/orchestration-panel.js +168 -0
  525. package/dist/core/tools/orchestration-panel.js.map +1 -0
  526. package/dist/core/tools/run-process.d.ts +26 -0
  527. package/dist/core/tools/run-process.d.ts.map +1 -0
  528. package/dist/core/tools/run-process.js +138 -0
  529. package/dist/core/tools/run-process.js.map +1 -0
  530. package/dist/core/tools/task-steps.d.ts +2 -0
  531. package/dist/core/tools/task-steps.d.ts.map +1 -1
  532. package/dist/core/tools/task-steps.js +102 -0
  533. package/dist/core/tools/task-steps.js.map +1 -1
  534. package/dist/core/tools/tmux-dispatch.d.ts +3 -5
  535. package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
  536. package/dist/core/tools/tmux-dispatch.js +4 -4
  537. package/dist/core/tools/tmux-dispatch.js.map +1 -1
  538. package/dist/core/tools/windows-shell-engine.d.ts.map +1 -1
  539. package/dist/core/tools/windows-shell-engine.js +4 -6
  540. package/dist/core/tools/windows-shell-engine.js.map +1 -1
  541. package/dist/core/util/bounded-jsonl.d.ts +10 -0
  542. package/dist/core/util/bounded-jsonl.d.ts.map +1 -0
  543. package/dist/core/util/bounded-jsonl.js +75 -0
  544. package/dist/core/util/bounded-jsonl.js.map +1 -0
  545. package/dist/core/util/value-guards.d.ts +5 -0
  546. package/dist/core/util/value-guards.d.ts.map +1 -0
  547. package/dist/core/util/value-guards.js +12 -0
  548. package/dist/core/util/value-guards.js.map +1 -0
  549. package/dist/core/worktree-sync/store.d.ts +3 -3
  550. package/dist/core/worktree-sync/store.d.ts.map +1 -1
  551. package/dist/core/worktree-sync/store.js +10 -5
  552. package/dist/core/worktree-sync/store.js.map +1 -1
  553. package/dist/index.d.ts +13 -3
  554. package/dist/index.d.ts.map +1 -1
  555. package/dist/index.js +12 -2
  556. package/dist/index.js.map +1 -1
  557. package/dist/main.d.ts.map +1 -1
  558. package/dist/main.js +128 -44
  559. package/dist/main.js.map +1 -1
  560. package/dist/migrations.d.ts +4 -6
  561. package/dist/migrations.d.ts.map +1 -1
  562. package/dist/migrations.js +186 -28
  563. package/dist/migrations.js.map +1 -1
  564. package/dist/modes/interactive/clipboard-input.d.ts +7 -1
  565. package/dist/modes/interactive/clipboard-input.d.ts.map +1 -1
  566. package/dist/modes/interactive/clipboard-input.js +44 -6
  567. package/dist/modes/interactive/clipboard-input.js.map +1 -1
  568. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  569. package/dist/modes/interactive/components/settings-selector.js +2 -2
  570. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  571. package/dist/modes/interactive/config-backup.d.ts.map +1 -1
  572. package/dist/modes/interactive/config-backup.js +5 -4
  573. package/dist/modes/interactive/config-backup.js.map +1 -1
  574. package/dist/modes/interactive/extension-ui-host.d.ts +14 -0
  575. package/dist/modes/interactive/extension-ui-host.d.ts.map +1 -1
  576. package/dist/modes/interactive/extension-ui-host.js +76 -15
  577. package/dist/modes/interactive/extension-ui-host.js.map +1 -1
  578. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  579. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  580. package/dist/modes/interactive/interactive-mode.js +63 -1
  581. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  582. package/dist/modes/interactive/key-handlers.d.ts.map +1 -1
  583. package/dist/modes/interactive/key-handlers.js +1 -1
  584. package/dist/modes/interactive/key-handlers.js.map +1 -1
  585. package/dist/modes/interactive/profile-menu-controller.d.ts.map +1 -1
  586. package/dist/modes/interactive/profile-menu-controller.js +7 -7
  587. package/dist/modes/interactive/profile-menu-controller.js.map +1 -1
  588. package/dist/modes/interactive/report-commands.d.ts.map +1 -1
  589. package/dist/modes/interactive/report-commands.js +21 -0
  590. package/dist/modes/interactive/report-commands.js.map +1 -1
  591. package/dist/modes/interactive/session-flow-commands.d.ts +17 -2
  592. package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
  593. package/dist/modes/interactive/session-flow-commands.js +50 -17
  594. package/dist/modes/interactive/session-flow-commands.js.map +1 -1
  595. package/dist/modes/interactive/session-io-commands.d.ts.map +1 -1
  596. package/dist/modes/interactive/session-io-commands.js +16 -6
  597. package/dist/modes/interactive/session-io-commands.js.map +1 -1
  598. package/dist/modes/interactive/session-replacement-errors.d.ts +7 -0
  599. package/dist/modes/interactive/session-replacement-errors.d.ts.map +1 -0
  600. package/dist/modes/interactive/session-replacement-errors.js +15 -0
  601. package/dist/modes/interactive/session-replacement-errors.js.map +1 -0
  602. package/dist/modes/interactive/startup-checks.d.ts.map +1 -1
  603. package/dist/modes/interactive/startup-checks.js +1 -1
  604. package/dist/modes/interactive/startup-checks.js.map +1 -1
  605. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  606. package/dist/modes/rpc/rpc-mode.js +82 -23
  607. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  608. package/dist/modes/rpc/rpc-types.d.ts +15 -0
  609. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  610. package/dist/modes/rpc/rpc-types.js +138 -1
  611. package/dist/modes/rpc/rpc-types.js.map +1 -1
  612. package/dist/utils/clipboard-image.d.ts.map +1 -1
  613. package/dist/utils/clipboard-image.js +2 -13
  614. package/dist/utils/clipboard-image.js.map +1 -1
  615. package/dist/utils/clipboard-native.d.ts +1 -0
  616. package/dist/utils/clipboard-native.d.ts.map +1 -1
  617. package/dist/utils/clipboard-native.js.map +1 -1
  618. package/dist/utils/clipboard.d.ts +1 -0
  619. package/dist/utils/clipboard.d.ts.map +1 -1
  620. package/dist/utils/clipboard.js +52 -1
  621. package/dist/utils/clipboard.js.map +1 -1
  622. package/dist/utils/platform.d.ts +3 -0
  623. package/dist/utils/platform.d.ts.map +1 -0
  624. package/dist/utils/platform.js +8 -0
  625. package/dist/utils/platform.js.map +1 -0
  626. package/dist/utils/work-directory.d.ts +11 -0
  627. package/dist/utils/work-directory.d.ts.map +1 -1
  628. package/dist/utils/work-directory.js +30 -9
  629. package/dist/utils/work-directory.js.map +1 -1
  630. package/docs/UI_POLISH_ORCHESTRATION.md +44 -0
  631. package/docs/UI_QUALITY_ORCHESTRATION.md +30 -0
  632. package/docs/docs.json +4 -0
  633. package/docs/extensions.md +62 -2
  634. package/docs/harness-architecture.md +156 -0
  635. package/docs/keybindings.md +11 -1
  636. package/docs/process-matrix.md +59 -26
  637. package/docs/rpc.md +45 -2
  638. package/docs/sessions.md +15 -0
  639. package/docs/settings.md +125 -11
  640. package/docs/task-steps.md +8 -0
  641. package/docs/telemetry.md +19 -0
  642. package/docs/tmux-agent-manager.md +10 -3
  643. package/docs/ui-reference/README.md +9 -0
  644. package/docs/ui-reference/orchestration-after.txt +7 -0
  645. package/docs/ui-reference/orchestration-before.txt +7 -0
  646. package/docs/ui-reference/orchestration-reference.txt +6 -0
  647. package/docs/usage.md +14 -2
  648. package/docs/work-directory.md +19 -8
  649. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  650. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  651. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  652. package/examples/extensions/question.ts +34 -245
  653. package/examples/extensions/questionnaire.ts +41 -407
  654. package/examples/extensions/sandbox/package-lock.json +2 -2
  655. package/examples/extensions/sandbox/package.json +1 -1
  656. package/examples/extensions/with-deps/package-lock.json +2 -2
  657. package/examples/extensions/with-deps/package.json +1 -1
  658. package/npm-shrinkwrap.json +12 -12
  659. package/package.json +4 -4
  660. package/dist/core/delegation/session-worker-result.d.ts +0 -46
  661. package/dist/core/delegation/session-worker-result.d.ts.map +0 -1
  662. package/dist/core/delegation/session-worker-result.js +0 -113
  663. package/dist/core/delegation/session-worker-result.js.map +0 -1
  664. package/dist/core/delegation/worker-result.d.ts.map +0 -1
  665. package/dist/core/delegation/worker-result.js.map +0 -1
  666. package/dist/core/telemetry.d.ts.map +0 -1
  667. package/dist/core/telemetry.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { copyFileSync, existsSync, mkdirSync } from "node:fs";
1
+ import { copyFileSync, existsSync, constants as fsConstants, mkdirSync, unlinkSync } from "node:fs";
2
2
  import { basename, join, resolve } from "node:path";
3
3
  import { SessionManager } from "@caupulican/pi-agent-core/node";
4
4
  import { resolvePath } from "../utils/paths.js";
@@ -15,6 +15,35 @@ export class SessionImportFileNotFoundError extends Error {
15
15
  this.filePath = filePath;
16
16
  }
17
17
  }
18
+ /** A teardown or activation failure at the replacement boundary, including rollback outcome. */
19
+ export class SessionReplacementRuntimeError extends Error {
20
+ phase;
21
+ recovered;
22
+ transitionError;
23
+ recoveryError;
24
+ constructor(phase, transitionError, recovered, recoveryError) {
25
+ const transitionMessage = transitionError instanceof Error ? transitionError.message : String(transitionError);
26
+ super(recovered
27
+ ? `Session replacement ${phase} failed; the previous session was restored: ${transitionMessage}`
28
+ : `Session replacement ${phase} failed and the previous session could not be restored safely: ${transitionMessage}`);
29
+ this.name = "SessionReplacementRuntimeError";
30
+ this.phase = phase;
31
+ this.recovered = recovered;
32
+ this.transitionError = transitionError;
33
+ this.recoveryError = recoveryError;
34
+ }
35
+ }
36
+ /** A post-commit extension callback failed; the replacement itself remains the active session. */
37
+ export class SessionReplacementCallbackError extends Error {
38
+ replacementCommitted = true;
39
+ callbackError;
40
+ constructor(callbackError) {
41
+ const callbackMessage = callbackError instanceof Error ? callbackError.message : String(callbackError);
42
+ super(`Session replacement completed, but its withSession callback failed: ${callbackMessage}`);
43
+ this.name = "SessionReplacementCallbackError";
44
+ this.callbackError = callbackError;
45
+ }
46
+ }
18
47
  function extractUserMessageText(content) {
19
48
  if (typeof content === "string") {
20
49
  return content;
@@ -27,9 +56,8 @@ function extractUserMessageText(content) {
27
56
  /**
28
57
  * Owns the current AgentSession plus its cwd-bound services.
29
58
  *
30
- * Session replacement methods tear down the current runtime first, then create
31
- * and apply the next runtime. If creation fails, the error is propagated to the
32
- * caller. The caller is responsible for user-facing error handling.
59
+ * Session replacement methods construct the candidate runtime before retiring
60
+ * the current one. If preparation fails, the working session remains active.
33
61
  */
34
62
  export class AgentSessionRuntime {
35
63
  rebindSession;
@@ -39,6 +67,17 @@ export class AgentSessionRuntime {
39
67
  createRuntime;
40
68
  _diagnostics;
41
69
  _modelFallbackMessage;
70
+ _replacementInFlight;
71
+ _disposeInFlight;
72
+ _disposeStarted = false;
73
+ _disposed = false;
74
+ disposeProgress = {
75
+ shutdownEventEmitted: false,
76
+ stoppedResources: new Set(),
77
+ hostInvalidated: false,
78
+ sessionDisposed: false,
79
+ };
80
+ sessionResources = [];
42
81
  constructor(_session, _services, createRuntime, _diagnostics = [], _modelFallbackMessage) {
43
82
  this._session = _session;
44
83
  this._services = _services;
@@ -61,6 +100,10 @@ export class AgentSessionRuntime {
61
100
  get modelFallbackMessage() {
62
101
  return this._modelFallbackMessage;
63
102
  }
103
+ /** True from replacement admission until rebind and replacement callbacks have settled. */
104
+ get isReplacing() {
105
+ return this._replacementInFlight !== undefined;
106
+ }
64
107
  setRebindSession(rebindSession) {
65
108
  this.rebindSession = rebindSession;
66
109
  }
@@ -75,6 +118,12 @@ export class AgentSessionRuntime {
75
118
  setBeforeSessionInvalidate(beforeSessionInvalidate) {
76
119
  this.beforeSessionInvalidate = beforeSessionInvalidate;
77
120
  }
121
+ /** Register a resource whose lifecycle follows the active session (supervisors, watchers). */
122
+ registerSessionResource(resource) {
123
+ if (this.sessionResources.includes(resource))
124
+ return;
125
+ this.sessionResources.push(resource);
126
+ }
78
127
  async emitBeforeSwitch(reason, targetSessionFile) {
79
128
  const runner = this.session.extensionRunner;
80
129
  if (!runner.hasHandlers("session_before_switch")) {
@@ -100,13 +149,69 @@ export class AgentSessionRuntime {
100
149
  return { cancelled: result?.cancel === true };
101
150
  }
102
151
  async teardownCurrent(reason, targetSessionFile) {
103
- await emitSessionShutdownEvent(this.session.extensionRunner, {
104
- type: "session_shutdown",
105
- reason,
106
- targetSessionFile,
152
+ const errors = await this.shutdownRuntime(this.session, reason, targetSessionFile, {
153
+ stopResources: true,
154
+ invalidateHost: true,
107
155
  });
108
- this.beforeSessionInvalidate?.();
109
- this.session.dispose();
156
+ if (errors.length === 1)
157
+ throw errors[0];
158
+ if (errors.length > 1)
159
+ throw new AggregateError(errors, "Session runtime teardown failed.");
160
+ }
161
+ async discardPrepared(result) {
162
+ await result.session.disposeAndWait();
163
+ }
164
+ removeCreatedSessionFile(sessionFile) {
165
+ if (!sessionFile || sessionFile === this.session.sessionFile || !existsSync(sessionFile))
166
+ return;
167
+ try {
168
+ unlinkSync(sessionFile);
169
+ }
170
+ catch {
171
+ // Best-effort rollback of an artifact created solely for the rejected replacement.
172
+ }
173
+ }
174
+ async prepareReplacement(sessionManager, sessionStartEvent) {
175
+ return this.createRuntime({
176
+ cwd: sessionManager.getCwd(),
177
+ agentDir: this.services.agentDir,
178
+ sessionManager,
179
+ sessionStartEvent,
180
+ });
181
+ }
182
+ async commitReplacement(result, options) {
183
+ const previous = this.snapshot();
184
+ try {
185
+ await this.teardownCurrent(options.reason, options.targetSessionFile);
186
+ }
187
+ catch (transitionError) {
188
+ const recoveryError = await this.restorePreviousAfterRuntimeFailure(previous, result, options, false);
189
+ throw new SessionReplacementRuntimeError("teardown", transitionError, recoveryError === undefined, recoveryError);
190
+ }
191
+ this.apply(result);
192
+ try {
193
+ await this.activateReplacement(options);
194
+ }
195
+ catch (activationError) {
196
+ const recoveryError = await this.restorePreviousAfterRuntimeFailure(previous, result, options, true);
197
+ throw new SessionReplacementRuntimeError("activation", activationError, recoveryError === undefined, recoveryError);
198
+ }
199
+ if (options.withSession) {
200
+ try {
201
+ await options.withSession(this.session.createReplacedSessionContext());
202
+ }
203
+ catch (callbackError) {
204
+ throw new SessionReplacementCallbackError(callbackError);
205
+ }
206
+ }
207
+ }
208
+ snapshot() {
209
+ return {
210
+ session: this._session,
211
+ services: this._services,
212
+ diagnostics: [...this._diagnostics],
213
+ ...(this._modelFallbackMessage !== undefined ? { modelFallbackMessage: this._modelFallbackMessage } : {}),
214
+ };
110
215
  }
111
216
  apply(result) {
112
217
  this._session = result.session;
@@ -114,15 +219,136 @@ export class AgentSessionRuntime {
114
219
  this._diagnostics = result.diagnostics;
115
220
  this._modelFallbackMessage = result.modelFallbackMessage;
116
221
  }
117
- async finishSessionReplacement(withSession) {
222
+ async activateReplacement(options) {
118
223
  if (this.rebindSession) {
119
224
  await this.rebindSession(this.session);
120
225
  }
121
- if (withSession) {
122
- await withSession(this.session.createReplacedSessionContext());
226
+ await options.beforeSessionResourcesStart?.(this.session);
227
+ for (const resource of this.sessionResources)
228
+ await resource.start(this.session);
229
+ }
230
+ async restorePreviousAfterRuntimeFailure(previous, failed, options, candidateActivated) {
231
+ const cleanupErrors = await this.shutdownRuntime(failed.session, options.reason, previous.session.sessionFile, {
232
+ stopResources: candidateActivated,
233
+ invalidateHost: candidateActivated,
234
+ });
235
+ // The old AgentSession was disposed at the commit boundary, but its SessionManager remains the
236
+ // durable reconstruction source. Restore the old snapshot temporarily so rollback-only artifact
237
+ // cleanup cannot mistake the failed candidate for the active session.
238
+ this.apply(previous);
239
+ try {
240
+ options.onDiscard?.();
241
+ }
242
+ catch (error) {
243
+ cleanupErrors.push(error);
244
+ }
245
+ let restored;
246
+ try {
247
+ restored = await this.createRuntime({
248
+ cwd: previous.services.cwd,
249
+ agentDir: previous.services.agentDir,
250
+ sessionManager: previous.session.sessionManager,
251
+ sessionStartEvent: {
252
+ type: "session_start",
253
+ reason: "resume",
254
+ previousSessionFile: failed.session.sessionFile,
255
+ },
256
+ });
257
+ this.apply(restored);
258
+ if (this.rebindSession)
259
+ await this.rebindSession(this.session);
260
+ for (const resource of this.sessionResources)
261
+ await resource.start(this.session);
262
+ }
263
+ catch (recoveryError) {
264
+ if (restored) {
265
+ cleanupErrors.push(...(await this.shutdownRuntime(restored.session, "resume", failed.session.sessionFile, {
266
+ stopResources: true,
267
+ invalidateHost: true,
268
+ })));
269
+ }
270
+ this.apply(previous);
271
+ return cleanupErrors.length > 0
272
+ ? new AggregateError([...cleanupErrors, recoveryError], "Session rollback and cleanup failed.")
273
+ : recoveryError;
274
+ }
275
+ return cleanupErrors.length > 0
276
+ ? new AggregateError(cleanupErrors, "The previous session was restored, but failed replacement cleanup was incomplete.")
277
+ : undefined;
278
+ }
279
+ async shutdownRuntime(session, reason, targetSessionFile, options) {
280
+ const errors = [];
281
+ const progress = options.progress ??
282
+ {
283
+ shutdownEventEmitted: false,
284
+ stoppedResources: new Set(),
285
+ hostInvalidated: false,
286
+ sessionDisposed: false,
287
+ };
288
+ if (!progress.shutdownEventEmitted) {
289
+ try {
290
+ await emitSessionShutdownEvent(session.extensionRunner, {
291
+ type: "session_shutdown",
292
+ reason,
293
+ targetSessionFile,
294
+ });
295
+ progress.shutdownEventEmitted = true;
296
+ }
297
+ catch (error) {
298
+ errors.push(error);
299
+ }
300
+ }
301
+ if (options.stopResources) {
302
+ for (const resource of this.sessionResources) {
303
+ if (progress.stoppedResources.has(resource))
304
+ continue;
305
+ try {
306
+ await resource.stop();
307
+ progress.stoppedResources.add(resource);
308
+ }
309
+ catch (error) {
310
+ errors.push(error);
311
+ }
312
+ }
313
+ }
314
+ if (options.invalidateHost && !progress.hostInvalidated) {
315
+ try {
316
+ this.beforeSessionInvalidate?.();
317
+ progress.hostInvalidated = true;
318
+ }
319
+ catch (error) {
320
+ errors.push(error);
321
+ }
322
+ }
323
+ if (!progress.sessionDisposed) {
324
+ try {
325
+ await session.disposeAndWait();
326
+ progress.sessionDisposed = true;
327
+ }
328
+ catch (error) {
329
+ errors.push(error);
330
+ }
123
331
  }
332
+ return errors;
333
+ }
334
+ runSessionReplacement(operation) {
335
+ if (this._disposeStarted) {
336
+ return Promise.reject(new Error("The session runtime has already been disposed."));
337
+ }
338
+ if (this._replacementInFlight) {
339
+ return Promise.reject(new Error("A session replacement is already in progress."));
340
+ }
341
+ const replacement = Promise.resolve().then(operation);
342
+ this._replacementInFlight = replacement;
343
+ return replacement.finally(() => {
344
+ if (this._replacementInFlight === replacement)
345
+ this._replacementInFlight = undefined;
346
+ });
124
347
  }
125
348
  async switchSession(sessionPath, options) {
349
+ return this.runSessionReplacement(() => this.switchSessionUnserialized(sessionPath, options));
350
+ }
351
+ async switchSessionUnserialized(sessionPath, options) {
126
352
  const beforeResult = await this.emitBeforeSwitch("resume", sessionPath);
127
353
  if (beforeResult.cancelled) {
128
354
  return beforeResult;
@@ -130,17 +356,23 @@ export class AgentSessionRuntime {
130
356
  const previousSessionFile = this.session.sessionFile;
131
357
  const sessionManager = SessionManager.open(sessionPath, this.services.agentDir, undefined, options?.cwdOverride);
132
358
  assertSessionCwdExists(sessionManager, this.cwd);
133
- await this.teardownCurrent("resume", sessionManager.getSessionFile());
134
- this.apply(await this.createRuntime({
135
- cwd: sessionManager.getCwd(),
136
- agentDir: this.services.agentDir,
137
- sessionManager,
138
- sessionStartEvent: { type: "session_start", reason: "resume", previousSessionFile },
139
- }));
140
- await this.finishSessionReplacement(options?.withSession);
359
+ const prepared = await this.prepareReplacement(sessionManager, {
360
+ type: "session_start",
361
+ reason: "resume",
362
+ previousSessionFile,
363
+ });
364
+ await this.commitReplacement(prepared, {
365
+ reason: "resume",
366
+ targetSessionFile: sessionManager.getSessionFile(),
367
+ beforeSessionResourcesStart: options?.beforeSessionResourcesStart,
368
+ withSession: options?.withSession,
369
+ });
141
370
  return { cancelled: false };
142
371
  }
143
372
  async newSession(options) {
373
+ return this.runSessionReplacement(() => this.newSessionUnserialized(options));
374
+ }
375
+ async newSessionUnserialized(options) {
144
376
  const beforeResult = await this.emitBeforeSwitch("new");
145
377
  if (beforeResult.cancelled) {
146
378
  return beforeResult;
@@ -151,21 +383,41 @@ export class AgentSessionRuntime {
151
383
  if (options?.parentSession) {
152
384
  sessionManager.newSession({ parentSession: options.parentSession });
153
385
  }
154
- await this.teardownCurrent("new", sessionManager.getSessionFile());
155
- this.apply(await this.createRuntime({
156
- cwd: this.cwd,
157
- agentDir: this.services.agentDir,
158
- sessionManager,
159
- sessionStartEvent: { type: "session_start", reason: "new", previousSessionFile },
160
- }));
386
+ let prepared;
387
+ try {
388
+ prepared = await this.prepareReplacement(sessionManager, {
389
+ type: "session_start",
390
+ reason: "new",
391
+ previousSessionFile,
392
+ });
393
+ }
394
+ catch (error) {
395
+ this.removeCreatedSessionFile(sessionManager.getSessionFile());
396
+ throw error;
397
+ }
161
398
  if (options?.setup) {
162
- await options.setup(this.session.sessionManager);
163
- this.session.agent.state.messages = this.session.sessionManager.buildSessionContext().messages;
399
+ try {
400
+ await options.setup(prepared.session.sessionManager);
401
+ prepared.session.agent.state.messages = prepared.session.sessionManager.buildSessionContext().messages;
402
+ }
403
+ catch (error) {
404
+ await this.discardPrepared(prepared);
405
+ this.removeCreatedSessionFile(sessionManager.getSessionFile());
406
+ throw error;
407
+ }
164
408
  }
165
- await this.finishSessionReplacement(options?.withSession);
409
+ await this.commitReplacement(prepared, {
410
+ reason: "new",
411
+ targetSessionFile: sessionManager.getSessionFile(),
412
+ withSession: options?.withSession,
413
+ onDiscard: () => this.removeCreatedSessionFile(sessionManager.getSessionFile()),
414
+ });
166
415
  return { cancelled: false };
167
416
  }
168
417
  async fork(entryId, options) {
418
+ return this.runSessionReplacement(() => this.forkUnserialized(entryId, options));
419
+ }
420
+ async forkUnserialized(entryId, options) {
169
421
  const position = options?.position ?? "before";
170
422
  const beforeResult = await this.emitBeforeFork(entryId, { position });
171
423
  if (beforeResult.cancelled) {
@@ -197,46 +449,70 @@ export class AgentSessionRuntime {
197
449
  if (!targetLeafId) {
198
450
  const sessionManager = SessionManager.create(this.cwd, this.services.agentDir, sessionDir);
199
451
  sessionManager.newSession({ parentSession: currentSessionFile });
200
- await this.teardownCurrent("fork", sessionManager.getSessionFile());
201
- this.apply(await this.createRuntime({
202
- cwd: this.cwd,
203
- agentDir: this.services.agentDir,
204
- sessionManager,
205
- sessionStartEvent: { type: "session_start", reason: "fork", previousSessionFile },
206
- }));
207
- await this.finishSessionReplacement(options?.withSession);
452
+ let prepared;
453
+ try {
454
+ prepared = await this.prepareReplacement(sessionManager, {
455
+ type: "session_start",
456
+ reason: "fork",
457
+ previousSessionFile,
458
+ });
459
+ }
460
+ catch (error) {
461
+ this.removeCreatedSessionFile(sessionManager.getSessionFile());
462
+ throw error;
463
+ }
464
+ await this.commitReplacement(prepared, {
465
+ reason: "fork",
466
+ targetSessionFile: sessionManager.getSessionFile(),
467
+ withSession: options?.withSession,
468
+ onDiscard: () => this.removeCreatedSessionFile(sessionManager.getSessionFile()),
469
+ });
208
470
  return { cancelled: false, selectedText };
209
471
  }
210
- const sessionManager = SessionManager.open(currentSessionFile, this.services.agentDir, sessionDir);
211
- const forkedSessionPath = sessionManager.createBranchedSession(targetLeafId);
472
+ const sourceSessionManager = SessionManager.open(currentSessionFile, this.services.agentDir, sessionDir);
473
+ const sessionManager = sourceSessionManager.createBranchedSessionManager(targetLeafId);
474
+ const forkedSessionPath = sessionManager.getSessionFile();
212
475
  if (!forkedSessionPath) {
213
476
  throw new Error("Failed to create forked session");
214
477
  }
215
- await this.teardownCurrent("fork", sessionManager.getSessionFile());
216
- this.apply(await this.createRuntime({
217
- cwd: sessionManager.getCwd(),
218
- agentDir: this.services.agentDir,
219
- sessionManager,
220
- sessionStartEvent: { type: "session_start", reason: "fork", previousSessionFile },
221
- }));
222
- await this.finishSessionReplacement(options?.withSession);
478
+ let prepared;
479
+ try {
480
+ prepared = await this.prepareReplacement(sessionManager, {
481
+ type: "session_start",
482
+ reason: "fork",
483
+ previousSessionFile,
484
+ });
485
+ }
486
+ catch (error) {
487
+ this.removeCreatedSessionFile(forkedSessionPath);
488
+ throw error;
489
+ }
490
+ await this.commitReplacement(prepared, {
491
+ reason: "fork",
492
+ targetSessionFile: forkedSessionPath,
493
+ withSession: options?.withSession,
494
+ onDiscard: () => this.removeCreatedSessionFile(forkedSessionPath),
495
+ });
223
496
  return { cancelled: false, selectedText };
224
497
  }
225
- const sessionManager = this.session.sessionManager;
498
+ let sessionManager;
226
499
  if (!targetLeafId) {
500
+ sessionManager = SessionManager.inMemory(this.cwd);
227
501
  sessionManager.newSession({ parentSession: this.session.sessionFile });
228
502
  }
229
503
  else {
230
- sessionManager.createBranchedSession(targetLeafId);
504
+ sessionManager = this.session.sessionManager.createBranchedSessionManager(targetLeafId);
231
505
  }
232
- await this.teardownCurrent("fork", sessionManager.getSessionFile());
233
- this.apply(await this.createRuntime({
234
- cwd: this.cwd,
235
- agentDir: this.services.agentDir,
236
- sessionManager,
237
- sessionStartEvent: { type: "session_start", reason: "fork", previousSessionFile },
238
- }));
239
- await this.finishSessionReplacement(options?.withSession);
506
+ const prepared = await this.prepareReplacement(sessionManager, {
507
+ type: "session_start",
508
+ reason: "fork",
509
+ previousSessionFile,
510
+ });
511
+ await this.commitReplacement(prepared, {
512
+ reason: "fork",
513
+ targetSessionFile: sessionManager.getSessionFile(),
514
+ withSession: options?.withSession,
515
+ });
240
516
  return { cancelled: false, selectedText };
241
517
  }
242
518
  /**
@@ -247,42 +523,84 @@ export class AgentSessionRuntime {
247
523
  * @throws {MissingSessionCwdError} When the imported session cwd cannot be resolved and no override is provided.
248
524
  */
249
525
  async importFromJsonl(inputPath, cwdOverride) {
526
+ return this.runSessionReplacement(() => this.importFromJsonlUnserialized(inputPath, cwdOverride));
527
+ }
528
+ async importFromJsonlUnserialized(inputPath, cwdOverride) {
250
529
  const resolvedPath = resolvePath(inputPath);
251
530
  if (!existsSync(resolvedPath)) {
252
531
  throw new SessionImportFileNotFoundError(resolvedPath);
253
532
  }
254
533
  const sessionDir = this.session.sessionManager.getSessionDir();
255
- if (!existsSync(sessionDir)) {
256
- mkdirSync(sessionDir, { recursive: true });
257
- }
258
534
  const destinationPath = join(sessionDir, basename(resolvedPath));
259
535
  const beforeResult = await this.emitBeforeSwitch("resume", destinationPath);
260
536
  if (beforeResult.cancelled) {
261
537
  return beforeResult;
262
538
  }
263
539
  const previousSessionFile = this.session.sessionFile;
540
+ let copied = false;
264
541
  if (resolve(destinationPath) !== resolvedPath) {
265
- copyFileSync(resolvedPath, destinationPath);
542
+ if (!existsSync(sessionDir))
543
+ mkdirSync(sessionDir, { recursive: true });
544
+ copyFileSync(resolvedPath, destinationPath, fsConstants.COPYFILE_EXCL);
545
+ copied = true;
266
546
  }
267
- const sessionManager = SessionManager.open(destinationPath, this.services.agentDir, sessionDir, cwdOverride);
268
- assertSessionCwdExists(sessionManager, this.cwd);
269
- await this.teardownCurrent("resume", sessionManager.getSessionFile());
270
- this.apply(await this.createRuntime({
271
- cwd: sessionManager.getCwd(),
272
- agentDir: this.services.agentDir,
273
- sessionManager,
274
- sessionStartEvent: { type: "session_start", reason: "resume", previousSessionFile },
275
- }));
276
- await this.finishSessionReplacement();
547
+ let sessionManager;
548
+ let prepared;
549
+ try {
550
+ sessionManager = SessionManager.open(destinationPath, this.services.agentDir, sessionDir, cwdOverride);
551
+ assertSessionCwdExists(sessionManager, this.cwd);
552
+ prepared = await this.prepareReplacement(sessionManager, {
553
+ type: "session_start",
554
+ reason: "resume",
555
+ previousSessionFile,
556
+ });
557
+ }
558
+ catch (error) {
559
+ if (copied)
560
+ this.removeCreatedSessionFile(destinationPath);
561
+ throw error;
562
+ }
563
+ await this.commitReplacement(prepared, {
564
+ reason: "resume",
565
+ targetSessionFile: sessionManager.getSessionFile(),
566
+ onDiscard: copied ? () => this.removeCreatedSessionFile(destinationPath) : undefined,
567
+ });
277
568
  return { cancelled: false };
278
569
  }
279
570
  async dispose() {
280
- await emitSessionShutdownEvent(this.session.extensionRunner, {
281
- type: "session_shutdown",
282
- reason: "quit",
283
- });
284
- this.beforeSessionInvalidate?.();
285
- this.session.dispose();
571
+ if (this._disposeInFlight)
572
+ return this._disposeInFlight;
573
+ if (this._disposed)
574
+ return;
575
+ this._disposeStarted = true;
576
+ const replacement = this._replacementInFlight;
577
+ const disposal = (async () => {
578
+ if (replacement) {
579
+ try {
580
+ await replacement;
581
+ }
582
+ catch {
583
+ // Replacement already reports its own error; dispose whichever runtime it left active.
584
+ }
585
+ }
586
+ const errors = await this.shutdownRuntime(this.session, "quit", undefined, {
587
+ stopResources: true,
588
+ invalidateHost: true,
589
+ progress: this.disposeProgress,
590
+ });
591
+ if (errors.length === 1)
592
+ throw errors[0];
593
+ if (errors.length > 1)
594
+ throw new AggregateError(errors, "Session runtime disposal failed.");
595
+ this._disposed = true;
596
+ })();
597
+ this._disposeInFlight = disposal;
598
+ try {
599
+ await disposal;
600
+ }
601
+ finally {
602
+ this._disposeInFlight = undefined;
603
+ }
286
604
  }
287
605
  }
288
606
  /**