@blxzer/pactile 0.6.0-beta.2 → 0.6.0-beta.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 (704) hide show
  1. package/README.md +93 -84
  2. package/README.zh-CN.md +90 -81
  3. package/dist/bin/compat-warning.d.ts +2 -0
  4. package/dist/bin/compat-warning.d.ts.map +1 -0
  5. package/dist/bin/compat-warning.js +8 -0
  6. package/dist/bin/compat-warning.js.map +1 -0
  7. package/dist/bin/cstl.d.ts +3 -0
  8. package/dist/bin/cstl.d.ts.map +1 -0
  9. package/{bin → dist/bin}/cstl.js +2 -3
  10. package/dist/bin/cstl.js.map +1 -0
  11. package/dist/bin/pactile.d.ts +3 -0
  12. package/dist/bin/pactile.d.ts.map +1 -0
  13. package/dist/bin/pactile.js +4 -0
  14. package/dist/bin/pactile.js.map +1 -0
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +77 -17
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/commands/capability.d.ts +3 -0
  19. package/dist/commands/capability.d.ts.map +1 -0
  20. package/dist/commands/capability.js +129 -0
  21. package/dist/commands/capability.js.map +1 -0
  22. package/dist/commands/codex.d.ts.map +1 -1
  23. package/dist/commands/codex.js +54 -6
  24. package/dist/commands/codex.js.map +1 -1
  25. package/dist/commands/context.d.ts +2 -0
  26. package/dist/commands/context.d.ts.map +1 -1
  27. package/dist/commands/context.js +367 -41
  28. package/dist/commands/context.js.map +1 -1
  29. package/dist/commands/detach.d.ts.map +1 -1
  30. package/dist/commands/detach.js +5 -4
  31. package/dist/commands/detach.js.map +1 -1
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +615 -259
  34. package/dist/commands/init.js.map +1 -1
  35. package/dist/commands/legacy-task.d.ts +3 -0
  36. package/dist/commands/legacy-task.d.ts.map +1 -0
  37. package/dist/commands/legacy-task.js +295 -0
  38. package/dist/commands/legacy-task.js.map +1 -0
  39. package/dist/commands/pi.d.ts +3 -2
  40. package/dist/commands/pi.d.ts.map +1 -1
  41. package/dist/commands/pi.js +333 -10
  42. package/dist/commands/pi.js.map +1 -1
  43. package/dist/commands/session.d.ts.map +1 -1
  44. package/dist/commands/session.js +148 -24
  45. package/dist/commands/session.js.map +1 -1
  46. package/dist/commands/task-schedule.d.ts +17 -0
  47. package/dist/commands/task-schedule.d.ts.map +1 -0
  48. package/dist/commands/task-schedule.js +395 -0
  49. package/dist/commands/task-schedule.js.map +1 -0
  50. package/dist/commands/task-verify-plan.d.ts +3 -0
  51. package/dist/commands/task-verify-plan.d.ts.map +1 -0
  52. package/dist/commands/task-verify-plan.js +503 -0
  53. package/dist/commands/task-verify-plan.js.map +1 -0
  54. package/dist/commands/task-worktree-close.d.ts +4 -0
  55. package/dist/commands/task-worktree-close.d.ts.map +1 -0
  56. package/dist/commands/task-worktree-close.js +81 -0
  57. package/dist/commands/task-worktree-close.js.map +1 -0
  58. package/dist/commands/task.d.ts +3 -0
  59. package/dist/commands/task.d.ts.map +1 -1
  60. package/dist/commands/task.js +1373 -184
  61. package/dist/commands/task.js.map +1 -1
  62. package/dist/commands/tile-selection.d.ts +3 -0
  63. package/dist/commands/tile-selection.d.ts.map +1 -0
  64. package/dist/commands/tile-selection.js +174 -0
  65. package/dist/commands/tile-selection.js.map +1 -0
  66. package/dist/commands/update.d.ts +1 -1
  67. package/dist/commands/update.d.ts.map +1 -1
  68. package/dist/commands/update.js +80 -55
  69. package/dist/commands/update.js.map +1 -1
  70. package/dist/commands/worktree.d.ts +4 -0
  71. package/dist/commands/worktree.d.ts.map +1 -0
  72. package/dist/commands/worktree.js +198 -0
  73. package/dist/commands/worktree.js.map +1 -0
  74. package/dist/configurators/shared.js +1 -1
  75. package/dist/configurators/shared.js.map +1 -1
  76. package/dist/core/compat/environment.d.ts +0 -1
  77. package/dist/core/compat/environment.d.ts.map +1 -1
  78. package/dist/core/compat/environment.js +1 -9
  79. package/dist/core/compat/environment.js.map +1 -1
  80. package/dist/core/pactile/bounded-capabilities.d.ts +127 -0
  81. package/dist/core/pactile/bounded-capabilities.d.ts.map +1 -0
  82. package/dist/core/pactile/bounded-capabilities.js +188 -0
  83. package/dist/core/pactile/bounded-capabilities.js.map +1 -0
  84. package/dist/core/pactile/index.d.ts +1 -0
  85. package/dist/core/pactile/index.d.ts.map +1 -1
  86. package/dist/core/pactile/index.js +1 -0
  87. package/dist/core/pactile/index.js.map +1 -1
  88. package/dist/core/task/index.d.ts +4 -2
  89. package/dist/core/task/index.d.ts.map +1 -1
  90. package/dist/core/task/index.js +2 -1
  91. package/dist/core/task/index.js.map +1 -1
  92. package/dist/core/task/kernel-cli.d.ts +14 -1
  93. package/dist/core/task/kernel-cli.d.ts.map +1 -1
  94. package/dist/core/task/kernel-cli.js +128 -0
  95. package/dist/core/task/kernel-cli.js.map +1 -1
  96. package/dist/core/task/kernel-contract.d.ts +6 -3
  97. package/dist/core/task/kernel-contract.d.ts.map +1 -1
  98. package/dist/core/task/kernel-contract.js +71 -23
  99. package/dist/core/task/kernel-contract.js.map +1 -1
  100. package/dist/core/task/kernel-store.d.ts +6 -0
  101. package/dist/core/task/kernel-store.d.ts.map +1 -1
  102. package/dist/core/task/kernel-store.js +54 -2
  103. package/dist/core/task/kernel-store.js.map +1 -1
  104. package/dist/core/task/legacy-task-migration-reader.d.ts +137 -0
  105. package/dist/core/task/legacy-task-migration-reader.d.ts.map +1 -0
  106. package/dist/core/task/legacy-task-migration-reader.js +512 -0
  107. package/dist/core/task/legacy-task-migration-reader.js.map +1 -0
  108. package/dist/core/task/legacy-task-migration.d.ts +105 -0
  109. package/dist/core/task/legacy-task-migration.d.ts.map +1 -0
  110. package/dist/core/task/legacy-task-migration.js +562 -0
  111. package/dist/core/task/legacy-task-migration.js.map +1 -0
  112. package/dist/core/task/legacy-task-overlay-durable-io.d.ts +18 -0
  113. package/dist/core/task/legacy-task-overlay-durable-io.d.ts.map +1 -0
  114. package/dist/core/task/legacy-task-overlay-durable-io.js +66 -0
  115. package/dist/core/task/legacy-task-overlay-durable-io.js.map +1 -0
  116. package/dist/core/task/legacy-task-reconciliation-reader.d.ts +26 -0
  117. package/dist/core/task/legacy-task-reconciliation-reader.d.ts.map +1 -0
  118. package/dist/core/task/legacy-task-reconciliation-reader.js +324 -0
  119. package/dist/core/task/legacy-task-reconciliation-reader.js.map +1 -0
  120. package/dist/core/task/legacy-task-v2-import.d.ts +67 -0
  121. package/dist/core/task/legacy-task-v2-import.d.ts.map +1 -0
  122. package/dist/core/task/legacy-task-v2-import.js +1046 -0
  123. package/dist/core/task/legacy-task-v2-import.js.map +1 -0
  124. package/dist/core/task/project-file-observer.d.ts +46 -0
  125. package/dist/core/task/project-file-observer.d.ts.map +1 -0
  126. package/dist/core/task/project-file-observer.js +618 -0
  127. package/dist/core/task/project-file-observer.js.map +1 -0
  128. package/dist/core/task/start-authority.d.ts +14 -0
  129. package/dist/core/task/start-authority.d.ts.map +1 -0
  130. package/dist/core/task/start-authority.js +146 -0
  131. package/dist/core/task/start-authority.js.map +1 -0
  132. package/dist/core/task/strategy.d.ts +24 -0
  133. package/dist/core/task/strategy.d.ts.map +1 -0
  134. package/dist/core/task/strategy.js +136 -0
  135. package/dist/core/task/strategy.js.map +1 -0
  136. package/dist/core/task/task-candidate-observer.d.ts +111 -0
  137. package/dist/core/task/task-candidate-observer.d.ts.map +1 -0
  138. package/dist/core/task/task-candidate-observer.js +762 -0
  139. package/dist/core/task/task-candidate-observer.js.map +1 -0
  140. package/dist/core/task/task-kernel-close.d.ts +5 -0
  141. package/dist/core/task/task-kernel-close.d.ts.map +1 -0
  142. package/dist/core/task/task-kernel-close.js +367 -0
  143. package/dist/core/task/task-kernel-close.js.map +1 -0
  144. package/dist/core/task/task-kernel-dependencies.d.ts +3 -0
  145. package/dist/core/task/task-kernel-dependencies.d.ts.map +1 -0
  146. package/dist/core/task/task-kernel-dependencies.js +24 -0
  147. package/dist/core/task/task-kernel-dependencies.js.map +1 -0
  148. package/dist/core/task/task-kernel-host.d.ts +5 -0
  149. package/dist/core/task/task-kernel-host.d.ts.map +1 -0
  150. package/dist/core/task/task-kernel-host.js +136 -0
  151. package/dist/core/task/task-kernel-host.js.map +1 -0
  152. package/dist/core/task/task-kernel-paths.d.ts +19 -0
  153. package/dist/core/task/task-kernel-paths.d.ts.map +1 -0
  154. package/dist/core/task/task-kernel-paths.js +237 -0
  155. package/dist/core/task/task-kernel-paths.js.map +1 -0
  156. package/dist/core/task/task-kernel-reviews.d.ts +3 -0
  157. package/dist/core/task/task-kernel-reviews.d.ts.map +1 -0
  158. package/dist/core/task/task-kernel-reviews.js +100 -0
  159. package/dist/core/task/task-kernel-reviews.js.map +1 -0
  160. package/dist/core/task/task-kernel-runs.d.ts +5 -0
  161. package/dist/core/task/task-kernel-runs.d.ts.map +1 -0
  162. package/dist/core/task/task-kernel-runs.js +196 -0
  163. package/dist/core/task/task-kernel-runs.js.map +1 -0
  164. package/dist/core/task/task-kernel-schema.d.ts +29 -0
  165. package/dist/core/task/task-kernel-schema.d.ts.map +1 -0
  166. package/dist/core/task/task-kernel-schema.js +1169 -0
  167. package/dist/core/task/task-kernel-schema.js.map +1 -0
  168. package/dist/core/task/task-kernel-store-v2.d.ts +33 -0
  169. package/dist/core/task/task-kernel-store-v2.d.ts.map +1 -0
  170. package/dist/core/task/task-kernel-store-v2.js +574 -0
  171. package/dist/core/task/task-kernel-store-v2.js.map +1 -0
  172. package/dist/core/task/task-kernel-types.d.ts +585 -0
  173. package/dist/core/task/task-kernel-types.d.ts.map +1 -0
  174. package/dist/core/task/task-kernel-types.js +31 -0
  175. package/dist/core/task/task-kernel-types.js.map +1 -0
  176. package/dist/core/task/task-kernel-workspaces.d.ts +10 -0
  177. package/dist/core/task/task-kernel-workspaces.d.ts.map +1 -0
  178. package/dist/core/task/task-kernel-workspaces.js +250 -0
  179. package/dist/core/task/task-kernel-workspaces.js.map +1 -0
  180. package/dist/core/task/task-kernel-write-set.d.ts +3 -0
  181. package/dist/core/task/task-kernel-write-set.d.ts.map +1 -0
  182. package/dist/core/task/task-kernel-write-set.js +12 -0
  183. package/dist/core/task/task-kernel-write-set.js.map +1 -0
  184. package/dist/core/task/task-kernel.d.ts +19 -0
  185. package/dist/core/task/task-kernel.d.ts.map +1 -0
  186. package/dist/core/task/task-kernel.js +17 -0
  187. package/dist/core/task/task-kernel.js.map +1 -0
  188. package/dist/core/task/task-pull-request-observer.d.ts +25 -0
  189. package/dist/core/task/task-pull-request-observer.d.ts.map +1 -0
  190. package/dist/core/task/task-pull-request-observer.js +187 -0
  191. package/dist/core/task/task-pull-request-observer.js.map +1 -0
  192. package/dist/core/task/task-review-evidence.d.ts +27 -0
  193. package/dist/core/task/task-review-evidence.d.ts.map +1 -0
  194. package/dist/core/task/task-review-evidence.js +383 -0
  195. package/dist/core/task/task-review-evidence.js.map +1 -0
  196. package/dist/migrations/index.d.ts +1 -1
  197. package/dist/migrations/index.d.ts.map +1 -1
  198. package/dist/migrations/index.js +5 -3
  199. package/dist/migrations/index.js.map +1 -1
  200. package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
  201. package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
  202. package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
  203. package/dist/pactile/artifacts/documents.d.ts +72 -0
  204. package/dist/pactile/artifacts/documents.d.ts.map +1 -0
  205. package/dist/pactile/artifacts/documents.js +406 -0
  206. package/dist/pactile/artifacts/documents.js.map +1 -0
  207. package/dist/pactile/artifacts/index.d.ts +6 -0
  208. package/dist/pactile/artifacts/index.d.ts.map +1 -0
  209. package/dist/pactile/artifacts/index.js +6 -0
  210. package/dist/pactile/artifacts/index.js.map +1 -0
  211. package/dist/pactile/artifacts/projection.d.ts +50 -0
  212. package/dist/pactile/artifacts/projection.d.ts.map +1 -0
  213. package/dist/pactile/artifacts/projection.js +139 -0
  214. package/dist/pactile/artifacts/projection.js.map +1 -0
  215. package/dist/pactile/artifacts/reader.d.ts +20 -0
  216. package/dist/pactile/artifacts/reader.d.ts.map +1 -0
  217. package/dist/pactile/artifacts/reader.js +559 -0
  218. package/dist/pactile/artifacts/reader.js.map +1 -0
  219. package/dist/pactile/artifacts/schema.d.ts +4 -0
  220. package/dist/pactile/artifacts/schema.d.ts.map +1 -0
  221. package/dist/pactile/artifacts/schema.js +217 -0
  222. package/dist/pactile/artifacts/schema.js.map +1 -0
  223. package/dist/pactile/artifacts/types.d.ts +66 -0
  224. package/dist/pactile/artifacts/types.d.ts.map +1 -0
  225. package/dist/pactile/artifacts/types.js +45 -0
  226. package/dist/pactile/artifacts/types.js.map +1 -0
  227. package/dist/pactile/capabilities/claim.d.ts +3 -0
  228. package/dist/pactile/capabilities/claim.d.ts.map +1 -0
  229. package/dist/pactile/capabilities/claim.js +97 -0
  230. package/dist/pactile/capabilities/claim.js.map +1 -0
  231. package/dist/pactile/capabilities/command.d.ts +6 -0
  232. package/dist/pactile/capabilities/command.d.ts.map +1 -0
  233. package/dist/pactile/capabilities/command.js +253 -0
  234. package/dist/pactile/capabilities/command.js.map +1 -0
  235. package/dist/pactile/capabilities/discover.d.ts +6 -0
  236. package/dist/pactile/capabilities/discover.d.ts.map +1 -0
  237. package/dist/pactile/capabilities/discover.js +48 -0
  238. package/dist/pactile/capabilities/discover.js.map +1 -0
  239. package/dist/pactile/capabilities/node.d.ts +15 -0
  240. package/dist/pactile/capabilities/node.d.ts.map +1 -0
  241. package/dist/pactile/capabilities/node.js +292 -0
  242. package/dist/pactile/capabilities/node.js.map +1 -0
  243. package/dist/pactile/capabilities/read.d.ts +6 -0
  244. package/dist/pactile/capabilities/read.d.ts.map +1 -0
  245. package/dist/pactile/capabilities/read.js +100 -0
  246. package/dist/pactile/capabilities/read.js.map +1 -0
  247. package/dist/pactile/capabilities/receipts.d.ts +17 -0
  248. package/dist/pactile/capabilities/receipts.d.ts.map +1 -0
  249. package/dist/pactile/capabilities/receipts.js +90 -0
  250. package/dist/pactile/capabilities/receipts.js.map +1 -0
  251. package/dist/pactile/capabilities/search.d.ts +6 -0
  252. package/dist/pactile/capabilities/search.d.ts.map +1 -0
  253. package/dist/pactile/capabilities/search.js +181 -0
  254. package/dist/pactile/capabilities/search.js.map +1 -0
  255. package/dist/pactile/capabilities/shared.d.ts +29 -0
  256. package/dist/pactile/capabilities/shared.d.ts.map +1 -0
  257. package/dist/pactile/capabilities/shared.js +134 -0
  258. package/dist/pactile/capabilities/shared.js.map +1 -0
  259. package/dist/pactile/capabilities/workspace.d.ts +19 -0
  260. package/dist/pactile/capabilities/workspace.d.ts.map +1 -0
  261. package/dist/pactile/capabilities/workspace.js +273 -0
  262. package/dist/pactile/capabilities/workspace.js.map +1 -0
  263. package/dist/pactile/codex/bridge.d.ts +105 -2
  264. package/dist/pactile/codex/bridge.d.ts.map +1 -1
  265. package/dist/pactile/codex/bridge.js +1266 -92
  266. package/dist/pactile/codex/bridge.js.map +1 -1
  267. package/dist/pactile/codex/dispatch-stop-proof.d.ts +43 -0
  268. package/dist/pactile/codex/dispatch-stop-proof.d.ts.map +1 -0
  269. package/dist/pactile/codex/dispatch-stop-proof.js +177 -0
  270. package/dist/pactile/codex/dispatch-stop-proof.js.map +1 -0
  271. package/dist/pactile/codex/host-stop.d.ts +47 -0
  272. package/dist/pactile/codex/host-stop.d.ts.map +1 -0
  273. package/dist/pactile/codex/host-stop.js +344 -0
  274. package/dist/pactile/codex/host-stop.js.map +1 -0
  275. package/dist/pactile/coordination/index.d.ts +4 -0
  276. package/dist/pactile/coordination/index.d.ts.map +1 -0
  277. package/dist/pactile/coordination/index.js +4 -0
  278. package/dist/pactile/coordination/index.js.map +1 -0
  279. package/dist/pactile/coordination/journal.d.ts +10 -0
  280. package/dist/pactile/coordination/journal.d.ts.map +1 -0
  281. package/dist/pactile/coordination/journal.js +255 -0
  282. package/dist/pactile/coordination/journal.js.map +1 -0
  283. package/dist/pactile/coordination/kernel-resume.d.ts +8 -0
  284. package/dist/pactile/coordination/kernel-resume.d.ts.map +1 -0
  285. package/dist/pactile/coordination/kernel-resume.js +87 -0
  286. package/dist/pactile/coordination/kernel-resume.js.map +1 -0
  287. package/dist/pactile/coordination/model.d.ts +553 -0
  288. package/dist/pactile/coordination/model.d.ts.map +1 -0
  289. package/dist/pactile/coordination/model.js +239 -0
  290. package/dist/pactile/coordination/model.js.map +1 -0
  291. package/dist/pactile/coordination/state.d.ts +46 -0
  292. package/dist/pactile/coordination/state.d.ts.map +1 -0
  293. package/dist/pactile/coordination/state.js +301 -0
  294. package/dist/pactile/coordination/state.js.map +1 -0
  295. package/dist/pactile/coordination/store.d.ts +94 -0
  296. package/dist/pactile/coordination/store.d.ts.map +1 -0
  297. package/dist/pactile/coordination/store.js +396 -0
  298. package/dist/pactile/coordination/store.js.map +1 -0
  299. package/dist/pactile/index.d.ts +7 -1
  300. package/dist/pactile/index.d.ts.map +1 -1
  301. package/dist/pactile/index.js +7 -1
  302. package/dist/pactile/index.js.map +1 -1
  303. package/dist/pactile/jev/contracts.d.ts +104 -0
  304. package/dist/pactile/jev/contracts.d.ts.map +1 -0
  305. package/dist/pactile/jev/contracts.js +53 -0
  306. package/dist/pactile/jev/contracts.js.map +1 -0
  307. package/dist/pactile/jev/decision.d.ts +58 -0
  308. package/dist/pactile/jev/decision.d.ts.map +1 -0
  309. package/dist/pactile/jev/decision.js +149 -0
  310. package/dist/pactile/jev/decision.js.map +1 -0
  311. package/dist/pactile/jev/http.d.ts +25 -0
  312. package/dist/pactile/jev/http.d.ts.map +1 -0
  313. package/dist/pactile/jev/http.js +234 -0
  314. package/dist/pactile/jev/http.js.map +1 -0
  315. package/dist/pactile/jev/index.d.ts +8 -0
  316. package/dist/pactile/jev/index.d.ts.map +1 -0
  317. package/dist/pactile/jev/index.js +4 -0
  318. package/dist/pactile/jev/index.js.map +1 -0
  319. package/dist/pactile/jev/outbound.d.ts +15 -0
  320. package/dist/pactile/jev/outbound.d.ts.map +1 -0
  321. package/dist/pactile/jev/outbound.js +264 -0
  322. package/dist/pactile/jev/outbound.js.map +1 -0
  323. package/dist/pactile/jev/project-policy.d.ts +10 -0
  324. package/dist/pactile/jev/project-policy.d.ts.map +1 -0
  325. package/dist/pactile/jev/project-policy.js +53 -0
  326. package/dist/pactile/jev/project-policy.js.map +1 -0
  327. package/dist/pactile/jev/response.d.ts +17 -0
  328. package/dist/pactile/jev/response.d.ts.map +1 -0
  329. package/dist/pactile/jev/response.js +280 -0
  330. package/dist/pactile/jev/response.js.map +1 -0
  331. package/dist/pactile/jev/scheduler-advice.d.ts +92 -0
  332. package/dist/pactile/jev/scheduler-advice.d.ts.map +1 -0
  333. package/dist/pactile/jev/scheduler-advice.js +323 -0
  334. package/dist/pactile/jev/scheduler-advice.js.map +1 -0
  335. package/dist/pactile/jev/transport.d.ts +6 -0
  336. package/dist/pactile/jev/transport.d.ts.map +1 -0
  337. package/dist/pactile/jev/transport.js +87 -0
  338. package/dist/pactile/jev/transport.js.map +1 -0
  339. package/dist/pactile/lifecycle/deferred-live.d.ts +17 -0
  340. package/dist/pactile/lifecycle/deferred-live.d.ts.map +1 -0
  341. package/dist/pactile/lifecycle/deferred-live.js +173 -0
  342. package/dist/pactile/lifecycle/deferred-live.js.map +1 -0
  343. package/dist/pactile/lifecycle/legacy-import.d.ts +1 -1
  344. package/dist/pactile/lifecycle/legacy-import.js +3 -3
  345. package/dist/pactile/lifecycle/legacy-import.js.map +1 -1
  346. package/dist/pactile/lifecycle/project-files.d.ts.map +1 -1
  347. package/dist/pactile/lifecycle/project-files.js +1 -0
  348. package/dist/pactile/lifecycle/project-files.js.map +1 -1
  349. package/dist/pactile/migration/legacy-task-batch-generation.d.ts +23 -0
  350. package/dist/pactile/migration/legacy-task-batch-generation.d.ts.map +1 -0
  351. package/dist/pactile/migration/legacy-task-batch-generation.js +102 -0
  352. package/dist/pactile/migration/legacy-task-batch-generation.js.map +1 -0
  353. package/dist/pactile/migration/legacy-task-batch-io.d.ts +9 -0
  354. package/dist/pactile/migration/legacy-task-batch-io.d.ts.map +1 -0
  355. package/dist/pactile/migration/legacy-task-batch-io.js +208 -0
  356. package/dist/pactile/migration/legacy-task-batch-io.js.map +1 -0
  357. package/dist/pactile/migration/legacy-task-batch-journal.d.ts +6 -0
  358. package/dist/pactile/migration/legacy-task-batch-journal.d.ts.map +1 -0
  359. package/dist/pactile/migration/legacy-task-batch-journal.js +121 -0
  360. package/dist/pactile/migration/legacy-task-batch-journal.js.map +1 -0
  361. package/dist/pactile/migration/legacy-task-batch-orchestrator.d.ts +18 -0
  362. package/dist/pactile/migration/legacy-task-batch-orchestrator.d.ts.map +1 -0
  363. package/dist/pactile/migration/legacy-task-batch-orchestrator.js +634 -0
  364. package/dist/pactile/migration/legacy-task-batch-orchestrator.js.map +1 -0
  365. package/dist/pactile/migration/legacy-task-batch-source.d.ts +8 -0
  366. package/dist/pactile/migration/legacy-task-batch-source.d.ts.map +1 -0
  367. package/dist/pactile/migration/legacy-task-batch-source.js +158 -0
  368. package/dist/pactile/migration/legacy-task-batch-source.js.map +1 -0
  369. package/dist/pactile/migration/legacy-task-batch-types.d.ts +127 -0
  370. package/dist/pactile/migration/legacy-task-batch-types.d.ts.map +1 -0
  371. package/dist/pactile/migration/legacy-task-batch-types.js +127 -0
  372. package/dist/pactile/migration/legacy-task-batch-types.js.map +1 -0
  373. package/dist/pactile/migration/legacy-task-batch.d.ts +3 -0
  374. package/dist/pactile/migration/legacy-task-batch.d.ts.map +1 -0
  375. package/dist/pactile/migration/legacy-task-batch.js +2 -0
  376. package/dist/pactile/migration/legacy-task-batch.js.map +1 -0
  377. package/dist/pactile/migration/legacy-task-held-source-reader.d.ts +27 -0
  378. package/dist/pactile/migration/legacy-task-held-source-reader.d.ts.map +1 -0
  379. package/dist/pactile/migration/legacy-task-held-source-reader.js +261 -0
  380. package/dist/pactile/migration/legacy-task-held-source-reader.js.map +1 -0
  381. package/dist/pactile/migration/legacy-task-reconciliation.d.ts +46 -0
  382. package/dist/pactile/migration/legacy-task-reconciliation.d.ts.map +1 -0
  383. package/dist/pactile/migration/legacy-task-reconciliation.js +589 -0
  384. package/dist/pactile/migration/legacy-task-reconciliation.js.map +1 -0
  385. package/dist/pactile/migration/legacy-task-update.d.ts +19 -0
  386. package/dist/pactile/migration/legacy-task-update.d.ts.map +1 -0
  387. package/dist/pactile/migration/legacy-task-update.js +164 -0
  388. package/dist/pactile/migration/legacy-task-update.js.map +1 -0
  389. package/dist/pactile/parallel/batch.d.ts +21 -2
  390. package/dist/pactile/parallel/batch.d.ts.map +1 -1
  391. package/dist/pactile/parallel/batch.js +271 -50
  392. package/dist/pactile/parallel/batch.js.map +1 -1
  393. package/dist/pactile/parallel/policy.d.ts +1 -1
  394. package/dist/pactile/parallel/policy.d.ts.map +1 -1
  395. package/dist/pactile/parallel/policy.js +130 -102
  396. package/dist/pactile/parallel/policy.js.map +1 -1
  397. package/dist/pactile/pi/bridge.d.ts +139 -2
  398. package/dist/pactile/pi/bridge.d.ts.map +1 -1
  399. package/dist/pactile/pi/bridge.js +1317 -106
  400. package/dist/pactile/pi/bridge.js.map +1 -1
  401. package/dist/pactile/pi/rpc.d.ts +23 -4
  402. package/dist/pactile/pi/rpc.d.ts.map +1 -1
  403. package/dist/pactile/pi/rpc.js +243 -42
  404. package/dist/pactile/pi/rpc.js.map +1 -1
  405. package/dist/pactile/pi/v2-dispatch.d.ts +113 -0
  406. package/dist/pactile/pi/v2-dispatch.d.ts.map +1 -0
  407. package/dist/pactile/pi/v2-dispatch.js +919 -0
  408. package/dist/pactile/pi/v2-dispatch.js.map +1 -0
  409. package/dist/pactile/projection/planner.js +1 -1
  410. package/dist/pactile/projection/planner.js.map +1 -1
  411. package/dist/pactile/registry.d.ts +63 -1
  412. package/dist/pactile/registry.d.ts.map +1 -1
  413. package/dist/pactile/registry.js +633 -4
  414. package/dist/pactile/registry.js.map +1 -1
  415. package/dist/pactile/retrieval/index.d.ts +1 -0
  416. package/dist/pactile/retrieval/index.d.ts.map +1 -1
  417. package/dist/pactile/retrieval/index.js +1 -0
  418. package/dist/pactile/retrieval/index.js.map +1 -1
  419. package/dist/pactile/retrieval/jev-planning.d.ts +28 -0
  420. package/dist/pactile/retrieval/jev-planning.d.ts.map +1 -0
  421. package/dist/pactile/retrieval/jev-planning.js +96 -0
  422. package/dist/pactile/retrieval/jev-planning.js.map +1 -0
  423. package/dist/pactile/review/contract.d.ts +232 -0
  424. package/dist/pactile/review/contract.d.ts.map +1 -0
  425. package/dist/pactile/review/contract.js +695 -0
  426. package/dist/pactile/review/contract.js.map +1 -0
  427. package/dist/pactile/review/escalation-artifacts.d.ts +41 -0
  428. package/dist/pactile/review/escalation-artifacts.d.ts.map +1 -0
  429. package/dist/pactile/review/escalation-artifacts.js +415 -0
  430. package/dist/pactile/review/escalation-artifacts.js.map +1 -0
  431. package/dist/pactile/review/escalation-contract.d.ts +115 -0
  432. package/dist/pactile/review/escalation-contract.d.ts.map +1 -0
  433. package/dist/pactile/review/escalation-contract.js +151 -0
  434. package/dist/pactile/review/escalation-contract.js.map +1 -0
  435. package/dist/pactile/review/escalation-finalize.d.ts +14 -0
  436. package/dist/pactile/review/escalation-finalize.d.ts.map +1 -0
  437. package/dist/pactile/review/escalation-finalize.js +319 -0
  438. package/dist/pactile/review/escalation-finalize.js.map +1 -0
  439. package/dist/pactile/review/escalation-reply.d.ts +10 -0
  440. package/dist/pactile/review/escalation-reply.d.ts.map +1 -0
  441. package/dist/pactile/review/escalation-reply.js +61 -0
  442. package/dist/pactile/review/escalation-reply.js.map +1 -0
  443. package/dist/pactile/review/escalation-transport.d.ts +32 -0
  444. package/dist/pactile/review/escalation-transport.d.ts.map +1 -0
  445. package/dist/pactile/review/escalation-transport.js +216 -0
  446. package/dist/pactile/review/escalation-transport.js.map +1 -0
  447. package/dist/pactile/review/escalation.d.ts +7 -0
  448. package/dist/pactile/review/escalation.d.ts.map +1 -0
  449. package/dist/pactile/review/escalation.js +6 -0
  450. package/dist/pactile/review/escalation.js.map +1 -0
  451. package/dist/pactile/review/evidence.d.ts +25 -0
  452. package/dist/pactile/review/evidence.d.ts.map +1 -0
  453. package/dist/pactile/review/evidence.js +58 -0
  454. package/dist/pactile/review/evidence.js.map +1 -0
  455. package/dist/pactile/review/jev-escalation-advice.d.ts +77 -0
  456. package/dist/pactile/review/jev-escalation-advice.d.ts.map +1 -0
  457. package/dist/pactile/review/jev-escalation-advice.js +358 -0
  458. package/dist/pactile/review/jev-escalation-advice.js.map +1 -0
  459. package/dist/pactile/scheduler/index.d.ts +6 -0
  460. package/dist/pactile/scheduler/index.d.ts.map +1 -0
  461. package/dist/pactile/scheduler/index.js +5 -0
  462. package/dist/pactile/scheduler/index.js.map +1 -0
  463. package/dist/pactile/scheduler/project-lease-store.d.ts +35 -0
  464. package/dist/pactile/scheduler/project-lease-store.d.ts.map +1 -0
  465. package/dist/pactile/scheduler/project-lease-store.js +189 -0
  466. package/dist/pactile/scheduler/project-lease-store.js.map +1 -0
  467. package/dist/pactile/scheduler/scheduler.d.ts +91 -0
  468. package/dist/pactile/scheduler/scheduler.d.ts.map +1 -0
  469. package/dist/pactile/scheduler/scheduler.js +589 -0
  470. package/dist/pactile/scheduler/scheduler.js.map +1 -0
  471. package/dist/pactile/scheduler/task-kernel-admission.d.ts +173 -0
  472. package/dist/pactile/scheduler/task-kernel-admission.d.ts.map +1 -0
  473. package/dist/pactile/scheduler/task-kernel-admission.js +1560 -0
  474. package/dist/pactile/scheduler/task-kernel-admission.js.map +1 -0
  475. package/dist/pactile/scheduler/task-kernel-wave-dispatch.d.ts +184 -0
  476. package/dist/pactile/scheduler/task-kernel-wave-dispatch.d.ts.map +1 -0
  477. package/dist/pactile/scheduler/task-kernel-wave-dispatch.js +952 -0
  478. package/dist/pactile/scheduler/task-kernel-wave-dispatch.js.map +1 -0
  479. package/dist/pactile/scheduler/task-map-scheduler.d.ts +116 -0
  480. package/dist/pactile/scheduler/task-map-scheduler.d.ts.map +1 -0
  481. package/dist/pactile/scheduler/task-map-scheduler.js +1448 -0
  482. package/dist/pactile/scheduler/task-map-scheduler.js.map +1 -0
  483. package/dist/pactile/scheduler/task-run-dispatch-state.d.ts +7 -0
  484. package/dist/pactile/scheduler/task-run-dispatch-state.d.ts.map +1 -0
  485. package/dist/pactile/scheduler/task-run-dispatch-state.js +69 -0
  486. package/dist/pactile/scheduler/task-run-dispatch-state.js.map +1 -0
  487. package/dist/pactile/task/authorization.d.ts +3 -0
  488. package/dist/pactile/task/authorization.d.ts.map +1 -0
  489. package/dist/pactile/task/authorization.js +43 -0
  490. package/dist/pactile/task/authorization.js.map +1 -0
  491. package/dist/pactile/task/creation.d.ts +22 -0
  492. package/dist/pactile/task/creation.d.ts.map +1 -0
  493. package/dist/pactile/task/creation.js +95 -0
  494. package/dist/pactile/task/creation.js.map +1 -0
  495. package/dist/pactile/task/guards.d.ts +1 -4
  496. package/dist/pactile/task/guards.d.ts.map +1 -1
  497. package/dist/pactile/task/guards.js +5 -57
  498. package/dist/pactile/task/guards.js.map +1 -1
  499. package/dist/pactile/task/session-jev-receipt.d.ts +58 -0
  500. package/dist/pactile/task/session-jev-receipt.d.ts.map +1 -0
  501. package/dist/pactile/task/session-jev-receipt.js +375 -0
  502. package/dist/pactile/task/session-jev-receipt.js.map +1 -0
  503. package/dist/pactile/task/session-jev.d.ts +7 -0
  504. package/dist/pactile/task/session-jev.d.ts.map +1 -0
  505. package/dist/pactile/task/session-jev.js +217 -0
  506. package/dist/pactile/task/session-jev.js.map +1 -0
  507. package/dist/pactile/task/session-pack.d.ts.map +1 -1
  508. package/dist/pactile/task/session-pack.js +155 -16
  509. package/dist/pactile/task/session-pack.js.map +1 -1
  510. package/dist/pactile/task/session-retrieval-jev-receipt.d.ts +49 -0
  511. package/dist/pactile/task/session-retrieval-jev-receipt.d.ts.map +1 -0
  512. package/dist/pactile/task/session-retrieval-jev-receipt.js +97 -0
  513. package/dist/pactile/task/session-retrieval-jev-receipt.js.map +1 -0
  514. package/dist/pactile/task/session-retrieval-jev.d.ts +8 -0
  515. package/dist/pactile/task/session-retrieval-jev.d.ts.map +1 -0
  516. package/dist/pactile/task/session-retrieval-jev.js +352 -0
  517. package/dist/pactile/task/session-retrieval-jev.js.map +1 -0
  518. package/dist/pactile/task/strategy.d.ts +1 -23
  519. package/dist/pactile/task/strategy.d.ts.map +1 -1
  520. package/dist/pactile/task/strategy.js +2 -135
  521. package/dist/pactile/task/strategy.js.map +1 -1
  522. package/dist/pactile/tiles/jev-selection.d.ts +44 -0
  523. package/dist/pactile/tiles/jev-selection.d.ts.map +1 -0
  524. package/dist/pactile/tiles/jev-selection.js +210 -0
  525. package/dist/pactile/tiles/jev-selection.js.map +1 -0
  526. package/dist/pactile/tiles/safe-yaml.d.ts +5 -1
  527. package/dist/pactile/tiles/safe-yaml.d.ts.map +1 -1
  528. package/dist/pactile/tiles/safe-yaml.js +8 -8
  529. package/dist/pactile/tiles/safe-yaml.js.map +1 -1
  530. package/dist/pactile/tiles/selection-receipts.d.ts +71 -0
  531. package/dist/pactile/tiles/selection-receipts.d.ts.map +1 -0
  532. package/dist/pactile/tiles/selection-receipts.js +319 -0
  533. package/dist/pactile/tiles/selection-receipts.js.map +1 -0
  534. package/dist/pactile/tiles/selection.d.ts +185 -0
  535. package/dist/pactile/tiles/selection.d.ts.map +1 -0
  536. package/dist/pactile/tiles/selection.js +985 -0
  537. package/dist/pactile/tiles/selection.js.map +1 -0
  538. package/dist/pactile/verification/git-observer.d.ts +3 -0
  539. package/dist/pactile/verification/git-observer.d.ts.map +1 -0
  540. package/dist/pactile/verification/git-observer.js +3 -0
  541. package/dist/pactile/verification/git-observer.js.map +1 -0
  542. package/dist/pactile/verification/index.d.ts +11 -0
  543. package/dist/pactile/verification/index.d.ts.map +1 -0
  544. package/dist/pactile/verification/index.js +6 -0
  545. package/dist/pactile/verification/index.js.map +1 -0
  546. package/dist/pactile/verification/jev-advice.d.ts +78 -0
  547. package/dist/pactile/verification/jev-advice.d.ts.map +1 -0
  548. package/dist/pactile/verification/jev-advice.js +397 -0
  549. package/dist/pactile/verification/jev-advice.js.map +1 -0
  550. package/dist/pactile/verification/planner.d.ts +15 -0
  551. package/dist/pactile/verification/planner.d.ts.map +1 -0
  552. package/dist/pactile/verification/planner.js +412 -0
  553. package/dist/pactile/verification/planner.js.map +1 -0
  554. package/dist/pactile/verification/receipt.d.ts +101 -0
  555. package/dist/pactile/verification/receipt.d.ts.map +1 -0
  556. package/dist/pactile/verification/receipt.js +400 -0
  557. package/dist/pactile/verification/receipt.js.map +1 -0
  558. package/dist/pactile/verification/types.d.ts +72 -0
  559. package/dist/pactile/verification/types.d.ts.map +1 -0
  560. package/dist/pactile/verification/types.js +21 -0
  561. package/dist/pactile/verification/types.js.map +1 -0
  562. package/dist/pactile/worktree/git-probe.d.ts +32 -0
  563. package/dist/pactile/worktree/git-probe.d.ts.map +1 -0
  564. package/dist/pactile/worktree/git-probe.js +336 -0
  565. package/dist/pactile/worktree/git-probe.js.map +1 -0
  566. package/dist/pactile/worktree/git-removal.d.ts +3 -0
  567. package/dist/pactile/worktree/git-removal.d.ts.map +1 -0
  568. package/dist/pactile/worktree/git-removal.js +11 -0
  569. package/dist/pactile/worktree/git-removal.js.map +1 -0
  570. package/dist/pactile/worktree/index.d.ts +2 -0
  571. package/dist/pactile/worktree/index.d.ts.map +1 -0
  572. package/dist/pactile/worktree/index.js +2 -0
  573. package/dist/pactile/worktree/index.js.map +1 -0
  574. package/dist/pactile/worktree/integration-evidence.d.ts +80 -0
  575. package/dist/pactile/worktree/integration-evidence.d.ts.map +1 -0
  576. package/dist/pactile/worktree/integration-evidence.js +166 -0
  577. package/dist/pactile/worktree/integration-evidence.js.map +1 -0
  578. package/dist/pactile/worktree/manager-core.d.ts +50 -0
  579. package/dist/pactile/worktree/manager-core.d.ts.map +1 -0
  580. package/dist/pactile/worktree/manager-core.js +359 -0
  581. package/dist/pactile/worktree/manager-core.js.map +1 -0
  582. package/dist/pactile/worktree/manager-provenance.d.ts +32 -0
  583. package/dist/pactile/worktree/manager-provenance.d.ts.map +1 -0
  584. package/dist/pactile/worktree/manager-provenance.js +409 -0
  585. package/dist/pactile/worktree/manager-provenance.js.map +1 -0
  586. package/dist/pactile/worktree/manager-types.d.ts +84 -0
  587. package/dist/pactile/worktree/manager-types.d.ts.map +1 -0
  588. package/dist/pactile/worktree/manager-types.js +11 -0
  589. package/dist/pactile/worktree/manager-types.js.map +1 -0
  590. package/dist/pactile/worktree/manager.d.ts +10 -0
  591. package/dist/pactile/worktree/manager.d.ts.map +1 -0
  592. package/dist/pactile/worktree/manager.js +6 -0
  593. package/dist/pactile/worktree/manager.js.map +1 -0
  594. package/dist/pactile/worktree/run-workspace-cleanup.d.ts +10 -0
  595. package/dist/pactile/worktree/run-workspace-cleanup.d.ts.map +1 -0
  596. package/dist/pactile/worktree/run-workspace-cleanup.js +695 -0
  597. package/dist/pactile/worktree/run-workspace-cleanup.js.map +1 -0
  598. package/dist/pactile/worktree/run-workspace-lifecycle.d.ts +65 -0
  599. package/dist/pactile/worktree/run-workspace-lifecycle.d.ts.map +1 -0
  600. package/dist/pactile/worktree/run-workspace-lifecycle.js +276 -0
  601. package/dist/pactile/worktree/run-workspace-lifecycle.js.map +1 -0
  602. package/dist/templates/common/bundled-skills/pactile-meta/references/customize-local/change-hooks.md +1 -1
  603. package/dist/templates/common/bundled-skills/pactile-meta/references/local-architecture/generated-files.md +1 -1
  604. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/hooks-and-settings.md +1 -1
  605. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/overview.md +1 -1
  606. package/dist/templates/common/bundled-skills/pactile-meta/references/platform-files/platform-map.md +1 -1
  607. package/dist/templates/common/bundled-skills/smart-search-cli/SKILL.md +2 -0
  608. package/dist/templates/common/skills/brainstorm.md +19 -13
  609. package/dist/templates/markdown/agents.md +2 -2
  610. package/dist/templates/markdown/framework/execution-strategy.md.txt +1 -1
  611. package/dist/templates/markdown/framework/index.md.txt +1 -1
  612. package/dist/templates/markdown/framework/parallel-first-execution.md.txt +17 -105
  613. package/dist/templates/markdown/framework/prd-grill-frontier.md.txt +3 -3
  614. package/dist/templates/markdown/framework/release-boundary.md.txt +9 -10
  615. package/dist/templates/markdown/framework/retrieval-daily-guide.md.txt +1 -1
  616. package/dist/templates/pactile/CONTEXT.md +48 -36
  617. package/dist/templates/pactile/modules/approval-personal/contract.md +12 -24
  618. package/dist/templates/pactile/modules/close-basic/contract.md +15 -18
  619. package/dist/templates/pactile/modules/debug-recovery/contract.md +4 -4
  620. package/dist/templates/pactile/modules/define-basic/contract.md +15 -19
  621. package/dist/templates/pactile/modules/define-extended/contract.md +3 -3
  622. package/dist/templates/pactile/modules/execute-agent/contract.md +11 -19
  623. package/dist/templates/pactile/modules/intake-basic/contract.md +16 -13
  624. package/dist/templates/pactile/modules/verify-basic/contract.md +11 -20
  625. package/dist/templates/pactile/tasks/templates/release-execution/design.md +5 -5
  626. package/dist/templates/pactile/tasks/templates/release-readiness/design.md +6 -6
  627. package/dist/templates/pactile/tasks/templates/release-readiness/handoff-template.md +8 -2
  628. package/dist/templates/pactile/workflow.md +37 -41
  629. package/dist/templates/template-utils.d.ts +1 -2
  630. package/dist/templates/template-utils.d.ts.map +1 -1
  631. package/dist/templates/template-utils.js +2 -13
  632. package/dist/templates/template-utils.js.map +1 -1
  633. package/dist/types/ai-tools.d.ts +1 -1
  634. package/dist/types/ai-tools.js +1 -1
  635. package/dist/utils/manifest-prune.js +1 -1
  636. package/dist/utils/manifest-prune.js.map +1 -1
  637. package/dist/utils/p36-upgrade.d.ts +2 -2
  638. package/dist/utils/p36-upgrade.d.ts.map +1 -1
  639. package/dist/utils/p36-upgrade.js +2 -10
  640. package/dist/utils/p36-upgrade.js.map +1 -1
  641. package/dist/utils/post-update-smoke.js +1 -1
  642. package/dist/utils/post-update-smoke.js.map +1 -1
  643. package/dist/utils/readiness.d.ts +2 -2
  644. package/dist/utils/readiness.js +2 -2
  645. package/dist/utils/uninstall-scrubbers.js +1 -1
  646. package/dist/utils/workflow-dir.d.ts +1 -1
  647. package/dist/utils/workflow-dir.d.ts.map +1 -1
  648. package/dist/utils/workflow-dir.js +1 -1
  649. package/dist/utils/workflow-dir.js.map +1 -1
  650. package/package.json +42 -37
  651. package/CHANGELOG.md +0 -651
  652. package/bin/compat-warning.js +0 -11
  653. package/bin/pactile.js +0 -3
  654. package/bin/smart-search.js +0 -38
  655. package/dist/migrations/manifests/0.1.0.json +0 -9
  656. package/dist/migrations/manifests/0.1.1.json +0 -9
  657. package/dist/migrations/manifests/0.1.2.json +0 -9
  658. package/dist/migrations/manifests/0.1.3.json +0 -9
  659. package/dist/migrations/manifests/0.1.4.json +0 -9
  660. package/dist/migrations/manifests/0.2.1.json +0 -9
  661. package/dist/migrations/manifests/0.2.10.json +0 -374
  662. package/dist/migrations/manifests/0.2.2.json +0 -9
  663. package/dist/migrations/manifests/0.2.3.json +0 -9
  664. package/dist/migrations/manifests/0.2.4.json +0 -9
  665. package/dist/migrations/manifests/0.2.5.json +0 -9
  666. package/dist/migrations/manifests/0.2.6.json +0 -9
  667. package/dist/migrations/manifests/0.2.7.json +0 -9
  668. package/dist/migrations/manifests/0.2.8.json +0 -9
  669. package/dist/migrations/manifests/0.2.9.json +0 -9
  670. package/dist/migrations/manifests/0.3.0.json +0 -89
  671. package/dist/migrations/manifests/0.3.1.json +0 -32
  672. package/dist/migrations/manifests/0.3.2.json +0 -16
  673. package/dist/migrations/manifests/0.3.3.json +0 -9
  674. package/dist/migrations/manifests/0.3.4.json +0 -9
  675. package/dist/migrations/manifests/0.3.5.json +0 -9
  676. package/dist/migrations/manifests/0.3.6.json +0 -9
  677. package/dist/migrations/manifests/0.4.0.json +0 -9
  678. package/dist/migrations/manifests/0.4.1.json +0 -9
  679. package/dist/migrations/manifests/0.4.2.json +0 -9
  680. package/dist/migrations/manifests/0.4.3.json +0 -9
  681. package/dist/migrations/manifests/0.5.0-beta.0.json +0 -9
  682. package/dist/migrations/manifests/0.5.0-beta.1.json +0 -9
  683. package/dist/migrations/manifests/0.5.0-beta.2.json +0 -9
  684. package/dist/migrations/manifests/0.5.0-beta.3.json +0 -9
  685. package/dist/migrations/manifests/0.5.0-beta.4.json +0 -9
  686. package/dist/migrations/manifests/0.5.0-beta.5.json +0 -9
  687. package/dist/migrations/manifests/0.5.0.json +0 -9
  688. package/dist/pactile/compat/retired-alternate-client.d.ts +0 -42
  689. package/dist/pactile/compat/retired-alternate-client.d.ts.map +0 -1
  690. package/dist/pactile/compat/retired-alternate-client.js +0 -153
  691. package/dist/pactile/compat/retired-alternate-client.js.map +0 -1
  692. package/dist/pactile/compat/update-residue.d.ts +0 -4
  693. package/dist/pactile/compat/update-residue.d.ts.map +0 -1
  694. package/dist/pactile/compat/update-residue.js +0 -55
  695. package/dist/pactile/compat/update-residue.js.map +0 -1
  696. package/dist/utils/cursor-retrieval-env.d.ts +0 -17
  697. package/dist/utils/cursor-retrieval-env.d.ts.map +0 -1
  698. package/dist/utils/cursor-retrieval-env.js +0 -19
  699. package/dist/utils/cursor-retrieval-env.js.map +0 -1
  700. package/dist/utils/proxy.d.ts +0 -25
  701. package/dist/utils/proxy.d.ts.map +0 -1
  702. package/dist/utils/proxy.js +0 -60
  703. package/dist/utils/proxy.js.map +0 -1
  704. package/scripts/postinstall.js +0 -6
@@ -0,0 +1,695 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import { assertAllowedPath, branchRef, ensureAllowedRoot, assertNoSymlinkBetween, git, isAncestor, pathKey, pathWithin, registrations, repoIdentity, resolveCommit, resolveLocalBranchTarget, verifyLinkedGitDirectory, } from "./git-probe.js";
6
+ import { readAllManagerProvenance, synchronizeManagerProvenanceGitDir } from "./manager-provenance.js";
7
+ import { inspectRunWorktree } from "./manager-core.js";
8
+ import { WorktreeManagerError, } from "./manager-types.js";
9
+ import { fingerprintRunContentAtTarget, verifyWorktreeIntegration } from "./integration-evidence.js";
10
+ import { acquireTaskRunWorkspaceCleanupLease, fingerprintTaskValue, recordTaskRunHostStopReceipt, recordTaskRunWorkspaceCleanupRefusal, finishTaskRunWorkspaceCleanup, } from "../../core/task/task-kernel.js";
11
+ import { TASK_RUN_WORKSPACE_CLEANUP_RISK_DISCLOSURE } from "../../core/task/task-kernel-types.js";
12
+ import { readStoredTaskRun } from "./run-workspace-lifecycle.js";
13
+ import { removeManagedGitWorktree } from "./git-removal.js";
14
+ function recordValue(value) {
15
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
16
+ }
17
+ function valueOf(record, ...names) {
18
+ for (const name of names)
19
+ if (record[name] !== undefined)
20
+ return record[name];
21
+ return undefined;
22
+ }
23
+ function textOf(record, ...names) {
24
+ const value = valueOf(record, ...names);
25
+ return typeof value === "string" && value.trim() ? value.trim() : null;
26
+ }
27
+ function numberOf(record, ...names) {
28
+ const value = valueOf(record, ...names);
29
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0 ? value : null;
30
+ }
31
+ function boolOf(record, ...names) {
32
+ const value = valueOf(record, ...names);
33
+ return typeof value === "boolean" ? value : null;
34
+ }
35
+ function receiptRecords(value) {
36
+ if (Array.isArray(value))
37
+ return value.map(recordValue).filter((item) => item !== null);
38
+ const record = recordValue(value);
39
+ if (!record)
40
+ return [];
41
+ const nested = valueOf(record, "receipts", "items");
42
+ if (Array.isArray(nested))
43
+ return nested.map(recordValue).filter((item) => item !== null);
44
+ return [record];
45
+ }
46
+ async function readVerifiedHostStopReceipt(root, taskDir, kernel, run) {
47
+ const host = run.host;
48
+ const candidate = run.candidateSnapshot;
49
+ if (!host || !candidate)
50
+ throw new WorktreeManagerError("host-stop-unverified", "Run host binding and persisted candidate are required before cleanup");
51
+ if (host.contractFingerprint !== fingerprintTaskValue(kernel.definition)) {
52
+ throw new WorktreeManagerError("host-contract-stale", "Run host receipt is bound to an outdated Task contract");
53
+ }
54
+ if (host.host === "codex-desktop") {
55
+ const module = await import("../codex/bridge.js");
56
+ const reader = module.readCodexHostStopReceipts;
57
+ if (typeof reader !== "function")
58
+ throw new WorktreeManagerError("host-stop-reader-unavailable", "Codex bridge does not expose its verified terminal receipt reader");
59
+ const raw = await reader(root, taskDir, run.id);
60
+ const records = receiptRecords(raw).filter((item) => textOf(item, "runId", "run_id", "taskRunId", "task_run_id") === run.id);
61
+ if (records.length !== 1)
62
+ throw new WorktreeManagerError("host-stop-unverified", "Codex must return exactly one verified terminal receipt for this Run");
63
+ const item = records[0];
64
+ if (!item)
65
+ throw new WorktreeManagerError("host-stop-unverified", "Codex terminal receipt was empty");
66
+ const createRequestId = textOf(item, "createRequestId", "create_request_id", "startRequestId", "start_request_id");
67
+ const waitRequestId = textOf(item, "waitRequestId", "wait_request_id");
68
+ const waitReceiptId = textOf(item, "waitReceiptId", "wait_receipt_id", "settleReceiptId", "settle_receipt_id");
69
+ const evidenceRef = textOf(item, "evidenceRef", "evidence_ref");
70
+ const candidateId = textOf(item, "candidateSnapshotId", "candidate_snapshot_id");
71
+ const candidateFingerprint = textOf(item, "candidateFingerprint", "candidate_fingerprint");
72
+ const candidateSource = textOf(item, "candidateSource", "candidate_source");
73
+ const hostId = textOf(item, "hostId", "host_id");
74
+ const threadId = textOf(item, "threadId", "thread_id");
75
+ const status = textOf(item, "status", "terminalStatus", "terminal_status");
76
+ const source = textOf(item, "source") ?? "codex-desktop-bridge";
77
+ const assurance = textOf(item, "assurance") ?? "host-reported";
78
+ const evidenceLevel = textOf(item, "evidenceLevel", "evidence_level");
79
+ const contractFingerprint = textOf(item, "contractFingerprint", "contract_fingerprint");
80
+ const stale = boolOf(item, "contractStale", "contract_stale");
81
+ if (host.role !== "execute" || host.assuranceSource !== "codex-desktop-native"
82
+ || hostId !== host.hostId || threadId !== host.threadId || source !== "codex-desktop-bridge"
83
+ || assurance !== "host-reported" || evidenceLevel !== "desktop-native" || status !== "completed"
84
+ || stale !== false || createRequestId === null || waitRequestId === null || waitReceiptId === null
85
+ || evidenceRef === null || candidateId !== candidate.id || candidateFingerprint !== candidate.fingerprint
86
+ || (candidateSource !== "captured" && candidateSource !== "derived")
87
+ || contractFingerprint !== host.contractFingerprint
88
+ || !host.requestRefs.includes(createRequestId) || !host.requestRefs.includes(waitRequestId)
89
+ || !host.eventRefs.includes(waitReceiptId) || !host.resultRefs.includes(evidenceRef)) {
90
+ throw new WorktreeManagerError("host-stop-unverified", "Codex terminal receipt does not match the bound thread, wait request, candidate, contract, or durable refs");
91
+ }
92
+ const requestKernelRevision = numberOf(item, "requestKernelRevision", "request_kernel_revision");
93
+ const receiptKernelRevision = numberOf(item, "receiptKernelRevision", "receipt_kernel_revision", "currentKernelRevision", "current_kernel_revision");
94
+ const receiptRef = textOf(item, "receiptRef", "receipt_ref") ?? waitReceiptId;
95
+ const recordedAt = textOf(item, "recordedAt", "recorded_at");
96
+ if (requestKernelRevision === null || receiptKernelRevision === null || recordedAt === null) {
97
+ throw new WorktreeManagerError("host-stop-unverified", "Codex terminal receipt lacks durable revisions or timestamp");
98
+ }
99
+ return {
100
+ source, assurance, evidenceLevel, taskId: kernel.identity.taskId, runId: run.id,
101
+ sessionId: host.sessionId, threadId: host.threadId, startRequestId: createRequestId,
102
+ settleReceiptId: waitReceiptId, terminalStatus: status, requestKernelRevision,
103
+ receiptKernelRevision, contractFingerprint, contractStale: false,
104
+ candidateSnapshotId: candidate.id, candidateFingerprint: candidate.fingerprint,
105
+ candidateSource,
106
+ receiptRef, evidenceRef, recordedAt,
107
+ };
108
+ }
109
+ if (host.host === "pi") {
110
+ const module = await import("../pi/bridge.js");
111
+ const reader = module.readPiHostStopReceipt;
112
+ if (typeof reader !== "function")
113
+ throw new WorktreeManagerError("host-stop-reader-unavailable", "Pi bridge does not expose its verified terminal receipt reader");
114
+ const item = recordValue(await reader(root, taskDir, run.id));
115
+ if (!item)
116
+ throw new WorktreeManagerError("host-stop-unverified", "Pi has no persisted process exit receipt for this Run");
117
+ const taskId = textOf(item, "taskId", "task_id");
118
+ const itemRunId = textOf(item, "taskRunId", "task_run_id", "runId", "run_id");
119
+ const sessionId = textOf(item, "sessionId", "session_id");
120
+ const startRequestId = textOf(item, "startRequestId", "start_request_id");
121
+ const settleReceiptId = textOf(item, "settleReceiptId", "settle_receipt_id");
122
+ const evidenceRef = textOf(item, "evidenceRef", "evidence_ref");
123
+ const piRunId = textOf(item, "piRunId", "pi_run_id");
124
+ const terminalStatus = textOf(item, "terminal");
125
+ const role = textOf(item, "role");
126
+ const source = textOf(item, "source") ?? "pactile-pi-rpc";
127
+ const assurance = textOf(item, "assurance") ?? "manager-owned-child-exit";
128
+ const recordedAt = textOf(item, "recordedAt", "recorded_at");
129
+ const processId = numberOf(item, "processId", "process_id");
130
+ const receiptRef = piRunId && /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(piRunId) ? `pi-bridge/runs/${piRunId}.json` : null;
131
+ if (taskId !== kernel.identity.taskId || itemRunId !== run.id || sessionId !== host.sessionId
132
+ || host.role !== "implement" || host.assuranceSource !== "manager-owned-child-exit"
133
+ || role !== host.role || source !== "pactile-pi-rpc" || assurance !== "manager-owned-child-exit"
134
+ || (terminalStatus !== "exited" && terminalStatus !== "cancelled")
135
+ || startRequestId === null || settleReceiptId === null || evidenceRef === null || piRunId === null
136
+ || recordedAt === null || processId === null || processId === 0 || receiptRef === null || !host.requestRefs.includes(startRequestId)
137
+ || !host.eventRefs.includes(settleReceiptId)
138
+ || !host.resultRefs.includes(receiptRef)) {
139
+ throw new WorktreeManagerError("host-stop-unverified", "Pi child exit receipt does not match this manager-bound process and durable refs");
140
+ }
141
+ return {
142
+ source, assurance, evidenceLevel: "manager-owned-child-exit", taskId: kernel.identity.taskId, runId: run.id,
143
+ sessionId: host.sessionId, threadId: host.threadId, startRequestId, settleReceiptId,
144
+ terminalStatus, requestKernelRevision: host.kernelRevision,
145
+ receiptKernelRevision: host.stopReceipt?.receiptKernelRevision ?? kernel.revision,
146
+ contractFingerprint: host.contractFingerprint, contractStale: false,
147
+ candidateSnapshotId: candidate.id, candidateFingerprint: candidate.fingerprint,
148
+ candidateSource: "derived",
149
+ receiptRef, evidenceRef, recordedAt,
150
+ };
151
+ }
152
+ throw new WorktreeManagerError("host-stop-unverified", `No terminal receipt reader is configured for host ${host.host}`);
153
+ }
154
+ function restoreRemovedWorktree(identity, binding) {
155
+ let stage = "checking the recorded Run owner";
156
+ const failed = (reason) => ({ binding: null, reason });
157
+ try {
158
+ if (!binding.manager)
159
+ return failed("Run has no manager ownership credential");
160
+ stage = "checking the canonical workspace parent";
161
+ const allowedRoot = ensureAllowedRoot(identity);
162
+ if (!path.isAbsolute(binding.canonicalPath))
163
+ return failed("Canonical workspace path is not absolute");
164
+ const canonicalPath = path.resolve(binding.canonicalPath);
165
+ if (!pathWithin(allowedRoot, canonicalPath) || pathKey(canonicalPath) !== pathKey(binding.canonicalPath))
166
+ return failed("Canonical workspace path is outside the allowed worktree root");
167
+ assertNoSymlinkBetween(identity.root, canonicalPath);
168
+ if (fs.existsSync(canonicalPath) || registrations(identity).some((item) => pathKey(item.path) === pathKey(canonicalPath)))
169
+ return failed("Workspace path or Git registration is already occupied");
170
+ stage = "checking the persisted manager provenance";
171
+ const old = readAllManagerProvenance(identity).find((item) => item.ownerRunId === binding.ownerRunId);
172
+ if (old?.credentialId !== binding.manager.credentialId
173
+ || pathKey(old.canonicalPath) !== pathKey(canonicalPath)
174
+ || pathKey(old.projectRoot) !== pathKey(identity.root)
175
+ || pathKey(old.commonDir) !== pathKey(identity.commonDir)
176
+ || old.branch !== binding.branch)
177
+ return failed("Persisted manager provenance no longer matches this Run and repository");
178
+ const expectedRef = branchRef(identity.root, binding.branch);
179
+ stage = "checking the preserved Run branch";
180
+ git(identity.root, ["show-ref", "--verify", "--quiet", expectedRef]);
181
+ stage = "restoring the checkout from its preserved branch";
182
+ try {
183
+ execFileSync("git", ["worktree", "add", canonicalPath, binding.branch], {
184
+ cwd: identity.root, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"], maxBuffer: 16 * 1024 * 1024,
185
+ });
186
+ }
187
+ catch (error) {
188
+ const stderr = error && typeof error === "object" && "stderr" in error
189
+ ? error.stderr
190
+ : undefined;
191
+ const detail = typeof stderr === "string" ? stderr.trim().split(/\r?\n/).filter(Boolean).join(" | ").slice(0, 500)
192
+ : Buffer.isBuffer(stderr) ? stderr.toString("utf8").trim().split(/\r?\n/).filter(Boolean).join(" | ").slice(0, 500) : null;
193
+ return failed(`${stage} failed${detail ? `: ${detail}` : ""}`);
194
+ }
195
+ stage = "verifying the restored checkout registration";
196
+ const gitDir = verifyLinkedGitDirectory(canonicalPath, identity.commonDir);
197
+ const registration = registrations(identity).find((item) => pathKey(item.path) === pathKey(canonicalPath));
198
+ const actualBranch = git(canonicalPath, ["symbolic-ref", "--quiet", "HEAD"]);
199
+ const actualHead = resolveCommit(canonicalPath, "HEAD");
200
+ if (registration?.branch !== expectedRef || registration.head !== actualHead
201
+ || actualBranch !== expectedRef || actualHead !== resolveCommit(identity.root, expectedRef))
202
+ return failed("Restored checkout did not match the Run branch registration and HEAD");
203
+ stage = "updating the trusted manager Git-directory record";
204
+ synchronizeManagerProvenanceGitDir({
205
+ identity,
206
+ ownerRunId: old.ownerRunId,
207
+ credentialId: old.credentialId,
208
+ priorGitDir: binding.manager.gitDir,
209
+ actualGitDir: gitDir,
210
+ });
211
+ return { binding: { ...binding.manager, gitDir }, reason: null };
212
+ }
213
+ catch (error) {
214
+ const stderr = error && typeof error === "object" && "stderr" in error
215
+ ? error.stderr
216
+ : undefined;
217
+ const detail = typeof stderr === "string" ? stderr.trim().split(/\r?\n/)[0] : Buffer.isBuffer(stderr) ? stderr.toString("utf8").trim().split(/\r?\n/)[0] : null;
218
+ return failed(`${stage} failed${detail ? `: ${detail}` : error instanceof Error ? `: ${error.message}` : ""}`);
219
+ }
220
+ }
221
+ function reconcileRestoredManagerBinding(input) {
222
+ const manager = input.binding.manager;
223
+ if (!manager)
224
+ return null;
225
+ try {
226
+ const canonicalPath = assertAllowedPath(input.identity, input.binding.canonicalPath);
227
+ const actualGitDir = verifyLinkedGitDirectory(canonicalPath, input.identity.commonDir);
228
+ const proposedBinding = { ...input.binding, manager: { ...manager, gitDir: actualGitDir } };
229
+ const before = inspectRunWorktree({
230
+ repoRoot: input.identity.root,
231
+ runId: input.runId,
232
+ runState: input.runState,
233
+ binding: proposedBinding,
234
+ });
235
+ if (before.issues.some((issue) => issue !== "manager-provenance-mismatch") || before.gitDir === null)
236
+ return null;
237
+ let priorRecord;
238
+ try {
239
+ priorRecord = readAllManagerProvenance(input.identity).find((item) => item.ownerRunId === input.runId);
240
+ }
241
+ catch {
242
+ // The synchronizer below accepts only a one-field Git-directory mismatch.
243
+ }
244
+ const changed = pathKey(manager.gitDir) !== pathKey(actualGitDir)
245
+ || !priorRecord || pathKey(priorRecord.gitDir) !== pathKey(actualGitDir);
246
+ const synchronized = synchronizeManagerProvenanceGitDir({
247
+ identity: input.identity,
248
+ ownerRunId: input.runId,
249
+ credentialId: manager.credentialId,
250
+ priorGitDir: manager.gitDir,
251
+ actualGitDir,
252
+ });
253
+ const managerBinding = { ...manager, gitDir: synchronized.gitDir };
254
+ const after = inspectRunWorktree({
255
+ repoRoot: input.identity.root,
256
+ runId: input.runId,
257
+ runState: input.runState,
258
+ binding: { ...input.binding, manager: managerBinding },
259
+ });
260
+ if (after.issues.length > 0 || after.state !== "clean")
261
+ return null;
262
+ return { managerBinding, changed };
263
+ }
264
+ catch {
265
+ return null;
266
+ }
267
+ }
268
+ function processIsAlive(processId) {
269
+ try {
270
+ process.kill(processId, 0);
271
+ return true;
272
+ }
273
+ catch (error) {
274
+ const code = error.code;
275
+ return code !== "ESRCH";
276
+ }
277
+ }
278
+ function finishCleanupLease(input) {
279
+ const stored = readStoredTaskRun(input.repoRoot, input.taskDir, input.runId);
280
+ return finishTaskRunWorkspaceCleanup({
281
+ root: input.repoRoot, taskDir: input.taskDir, expectedRevision: stored.kernel.revision,
282
+ runId: input.runId, leaseId: input.leaseId, result: input.result,
283
+ ...(input.reason ? { reason: input.reason } : {}),
284
+ ...(input.updatedManagerBinding ? { updatedManagerBinding: input.updatedManagerBinding } : {}),
285
+ actor: input.actor, idempotencyKey: input.idempotencyKey,
286
+ });
287
+ }
288
+ function cleanupResultFromKernel(input) {
289
+ const stored = readStoredTaskRun(input.repoRoot, input.taskDir, input.runId);
290
+ const binding = stored.run.workspace;
291
+ if (!binding)
292
+ throw new WorktreeManagerError("workspace-not-bound", "Run has no workspace binding to report");
293
+ const leaseId = binding.cleanupLease?.leaseId;
294
+ if (!leaseId)
295
+ throw new WorktreeManagerError("cleanup-lease-missing", "Run has no persisted cleanup lease");
296
+ const mutation = finishCleanupLease({ ...input, leaseId });
297
+ const finished = mutation.kernel.runs.find((item) => item.id === input.runId)?.workspace;
298
+ if (!finished)
299
+ throw new WorktreeManagerError("cleanup-finalize-failed", "Cleanup state was not persisted to the Run");
300
+ if (input.result === "reclaimed")
301
+ return {
302
+ state: "reclaimed", binding: finished, path: finished.canonicalPath,
303
+ expectedHeadSha: input.expectedHeadSha ?? finished.integrationReceipt?.worktreeHeadSha ?? "",
304
+ receiptRef: input.receiptRef ?? finished.cleanupLease?.receiptRef ?? "",
305
+ };
306
+ return { state: input.result, binding: finished, path: finished.canonicalPath, reason: input.reason ?? input.result };
307
+ }
308
+ export async function reclaimRunWorktree(input) {
309
+ let stored = readStoredTaskRun(input.repoRoot, input.taskDir, input.runId);
310
+ let { kernel, run } = stored;
311
+ let binding = run.workspace;
312
+ const retain = (reason, state = "retained") => {
313
+ let persistedReason = state === "retained" ? reason : `${state}: ${reason}`;
314
+ try {
315
+ const latest = readStoredTaskRun(input.repoRoot, input.taskDir, input.runId);
316
+ const refusalFingerprint = fingerprintTaskValue({
317
+ runId: input.runId,
318
+ requestIdempotencyKey: input.idempotencyKey,
319
+ state,
320
+ reason,
321
+ });
322
+ const mutation = recordTaskRunWorkspaceCleanupRefusal({
323
+ root: input.repoRoot,
324
+ taskDir: input.taskDir,
325
+ expectedRevision: latest.kernel.revision,
326
+ runId: input.runId,
327
+ reason: persistedReason,
328
+ actor: input.actor,
329
+ idempotencyKey: `workspace-cleanup-refusal:${refusalFingerprint}`,
330
+ });
331
+ binding = mutation.kernel.runs.find((item) => item.id === input.runId)?.workspace ?? binding;
332
+ }
333
+ catch (error) {
334
+ persistedReason = `${persistedReason} (refusal event could not be persisted${error instanceof Error ? `: ${error.message}` : ""})`;
335
+ }
336
+ if (!binding)
337
+ return { state, binding: null, path: null, reason: persistedReason };
338
+ return { state, binding, path: path.resolve(binding.canonicalPath), reason: persistedReason };
339
+ };
340
+ if (!binding?.manager || !binding.integrationReceipt)
341
+ return retain("Run has no manager-owned workspace and persisted integration receipt");
342
+ if (run.state !== "completed" || !run.result || !run.candidateSnapshot)
343
+ return retain("Only a completed Run with preserved result and candidate can be reclaimed");
344
+ const closure = kernel.closure;
345
+ if (kernel.phase !== "close" || closure?.runId !== run.id
346
+ || closure.candidateSnapshotId !== run.candidateSnapshot.id || closure.candidateFingerprint !== run.candidateSnapshot.fingerprint
347
+ || !closure.deliveryEvidence.reference.trim())
348
+ return retain("Run candidate has not been accepted and closed with delivery evidence");
349
+ try {
350
+ const observedStop = await readVerifiedHostStopReceipt(input.repoRoot, input.taskDir, kernel, run);
351
+ if (run.host?.stopReceipt) {
352
+ if (fingerprintTaskValue(run.host.stopReceipt) !== fingerprintTaskValue(observedStop)) {
353
+ return retain("Persisted host stop receipt differs from the source bridge receipt");
354
+ }
355
+ }
356
+ else {
357
+ recordTaskRunHostStopReceipt({
358
+ root: input.repoRoot, taskDir: input.taskDir, expectedRevision: kernel.revision,
359
+ runId: input.runId, receipt: observedStop, actor: input.actor,
360
+ idempotencyKey: `${input.idempotencyKey}:host-stop:${observedStop.settleReceiptId}`,
361
+ });
362
+ stored = readStoredTaskRun(input.repoRoot, input.taskDir, input.runId);
363
+ kernel = stored.kernel;
364
+ run = stored.run;
365
+ binding = run.workspace;
366
+ if (run.state !== "completed" || !run.result || !run.candidateSnapshot)
367
+ return retain("Run result or candidate changed while host stop was being persisted", "recovery-required");
368
+ if (!binding?.manager || !binding.integrationReceipt || !run.host?.stopReceipt)
369
+ return retain("Host stop receipt was not persisted");
370
+ }
371
+ }
372
+ catch (error) {
373
+ return retain(error instanceof Error ? error.message : "Host stop receipt verification failed");
374
+ }
375
+ if (run.host?.stopReceipt?.terminalStatus === "cancelled")
376
+ return retain("Cancelled Runs are retained for diagnosis");
377
+ if (binding.reclamationState === "reclaimed" || binding.cleanupLease?.state === "reclaimed") {
378
+ try {
379
+ const identity = repoIdentity(input.repoRoot);
380
+ const allowedRoot = ensureAllowedRoot(identity);
381
+ const canonicalPath = path.resolve(binding.canonicalPath);
382
+ assertNoSymlinkBetween(identity.root, canonicalPath);
383
+ if (!path.isAbsolute(binding.canonicalPath) || pathKey(canonicalPath) !== pathKey(binding.canonicalPath)
384
+ || !pathWithin(allowedRoot, canonicalPath)
385
+ || pathKey(binding.manager.projectRoot) !== pathKey(identity.root)
386
+ || pathKey(binding.manager.commonDir) !== pathKey(identity.commonDir)) {
387
+ return retain("Previously reclaimed workspace ownership or canonical path changed", "recovery-required");
388
+ }
389
+ const stillRegistered = registrations(identity).some((entry) => pathKey(entry.path) === pathKey(canonicalPath));
390
+ if (fs.existsSync(canonicalPath) || stillRegistered) {
391
+ return retain("Previously reclaimed path has reappeared or is registered again; it may belong to another checkout and was left untouched", "recovery-required");
392
+ }
393
+ }
394
+ catch (error) {
395
+ return retain(error instanceof Error ? error.message : "Previously reclaimed path could not be verified", "recovery-required");
396
+ }
397
+ if (binding.cleanupLease?.state === "reclaimed") {
398
+ return { state: "reclaimed", binding, path: binding.canonicalPath,
399
+ expectedHeadSha: binding.integrationReceipt.worktreeHeadSha, receiptRef: binding.cleanupLease.receiptRef };
400
+ }
401
+ if (binding.reclamationState === "reclaimed") {
402
+ return { state: "reclaimed", binding, path: binding.canonicalPath,
403
+ expectedHeadSha: binding.integrationReceipt.worktreeHeadSha, receiptRef: run.host?.stopReceipt?.receiptRef ?? "" };
404
+ }
405
+ }
406
+ if (binding.cleanupLease?.state === "partial-removal" || binding.cleanupLease?.state === "recovery-required") {
407
+ if (binding.cleanupLease.state === "recovery-required") {
408
+ const reason = binding.cleanupLease.reason ?? "Worktree is in a persisted recovery state";
409
+ try {
410
+ const identity = repoIdentity(input.repoRoot);
411
+ const reconciled = reconcileRestoredManagerBinding({ identity, runId: run.id, runState: run.state, binding });
412
+ if (reconciled?.changed) {
413
+ return cleanupResultFromKernel({
414
+ ...input,
415
+ result: "recovery-required",
416
+ reason: `${reason}; manager provenance and canonical-path index were synchronized for inspection`,
417
+ updatedManagerBinding: reconciled.managerBinding,
418
+ });
419
+ }
420
+ }
421
+ catch {
422
+ // Keep the previously persisted recovery state authoritative when a repair cannot be proven.
423
+ }
424
+ }
425
+ return retain(binding.cleanupLease.reason ?? "Worktree is in a persisted recovery state", "recovery-required");
426
+ }
427
+ let identity;
428
+ try {
429
+ identity = repoIdentity(input.repoRoot);
430
+ }
431
+ catch (error) {
432
+ return retain(error instanceof Error ? error.message : "Run worktree repository identity could not be verified", "recovery-required");
433
+ }
434
+ const heldLease = binding.cleanupLease;
435
+ const absentCheckoutWithStaleLease = !fs.existsSync(binding.canonicalPath)
436
+ && heldLease?.state === "held" && !processIsAlive(heldLease.processId);
437
+ let canonicalPath;
438
+ if (absentCheckoutWithStaleLease) {
439
+ const allowedRoot = ensureAllowedRoot(identity);
440
+ canonicalPath = path.resolve(binding.canonicalPath);
441
+ if (!path.isAbsolute(binding.canonicalPath) || pathKey(canonicalPath) !== pathKey(binding.canonicalPath)
442
+ || !pathWithin(allowedRoot, canonicalPath)) {
443
+ return retain("Interrupted cleanup path is not a normalized child of the allowed worktree root", "recovery-required");
444
+ }
445
+ assertNoSymlinkBetween(identity.root, canonicalPath);
446
+ }
447
+ else {
448
+ try {
449
+ canonicalPath = assertAllowedPath(identity, binding.canonicalPath);
450
+ }
451
+ catch (error) {
452
+ return retain(error instanceof Error ? error.message : "Run worktree path could not be verified", "recovery-required");
453
+ }
454
+ }
455
+ if (pathKey(canonicalPath) !== pathKey(binding.canonicalPath)
456
+ || pathKey(binding.manager.projectRoot) !== pathKey(identity.root)
457
+ || pathKey(binding.manager.commonDir) !== pathKey(identity.commonDir)) {
458
+ return retain("Run workspace project root, common directory, or canonical path changed", "recovery-required");
459
+ }
460
+ const integrationReceipt = binding.integrationReceipt;
461
+ if (!integrationReceipt.contentFingerprint)
462
+ return retain("Persisted integration receipt lacks target-tree content proof", "recovery-required");
463
+ const expectedHeadSha = integrationReceipt.worktreeHeadSha.toLowerCase();
464
+ if (integrationReceipt.runId !== run.id || integrationReceipt.candidateSnapshotId !== run.candidateSnapshot.id
465
+ || integrationReceipt.candidateFingerprint !== run.candidateSnapshot.fingerprint
466
+ || !sameStringArray(integrationReceipt.resultEvidenceRefs, run.result.evidenceRefs)) {
467
+ return retain("Persisted integration receipt no longer matches the closed Run result", "recovery-required");
468
+ }
469
+ const activeLease = binding.cleanupLease;
470
+ if (activeLease?.state === "held") {
471
+ if (processIsAlive(activeLease.processId))
472
+ return retain("Another live Pactile process holds the persistent cleanup lease");
473
+ const pathExists = fs.existsSync(canonicalPath);
474
+ const registered = registrations(identity).some((entry) => pathKey(entry.path) === pathKey(canonicalPath));
475
+ if (!pathExists && !registered) {
476
+ if (!binding)
477
+ return retain("Interrupted cleanup has no Run workspace binding to restore", "recovery-required");
478
+ const recoveryBinding = binding;
479
+ const restoreAndRequireRecovery = (reason) => {
480
+ const restoration = restoreRemovedWorktree(identity, recoveryBinding);
481
+ return cleanupResultFromKernel({
482
+ ...input,
483
+ result: "recovery-required",
484
+ reason: restoration.binding
485
+ ? `${reason}; the checkout was restored at the preserved Run branch head`
486
+ : `${reason}; Run refs were preserved for manual reconciliation${restoration.reason ? ` (${restoration.reason})` : ""}`,
487
+ ...(restoration.binding ? { updatedManagerBinding: restoration.binding } : {}),
488
+ });
489
+ };
490
+ try {
491
+ if (activeLease.expectedHeadSha.toLowerCase() !== expectedHeadSha
492
+ || activeLease.targetBranch !== integrationReceipt.targetBranch
493
+ || activeLease.targetHeadSha.toLowerCase() !== integrationReceipt.targetHeadSha.toLowerCase()) {
494
+ return restoreAndRequireRecovery("Interrupted cleanup lease no longer matches its integration receipt");
495
+ }
496
+ const branchHead = resolveCommit(identity.root, branchRef(identity.root, binding.branch));
497
+ const target = resolveLocalBranchTarget(identity.root, integrationReceipt.targetBranch);
498
+ if (branchHead !== expectedHeadSha || !isAncestor(identity.root, expectedHeadSha, target.headSha)) {
499
+ return restoreAndRequireRecovery("The preserved Run branch head or target ancestry changed after removal");
500
+ }
501
+ const contentFingerprint = fingerprintRunContentAtTarget({
502
+ repoRoot: identity.root,
503
+ runId: run.id,
504
+ baseSha: binding.baseSha,
505
+ worktreeHeadSha: expectedHeadSha,
506
+ targetHeadSha: target.headSha,
507
+ candidateSnapshotId: run.candidateSnapshot.id,
508
+ candidateFingerprint: run.candidateSnapshot.fingerprint,
509
+ resultEvidenceRefs: run.result.evidenceRefs,
510
+ });
511
+ if (contentFingerprint !== integrationReceipt.contentFingerprint) {
512
+ return restoreAndRequireRecovery("The target tree no longer preserves the Run deliverable content after interrupted removal");
513
+ }
514
+ return cleanupResultFromKernel({ ...input, result: "reclaimed", expectedHeadSha, receiptRef: activeLease.receiptRef });
515
+ }
516
+ catch (error) {
517
+ return restoreAndRequireRecovery(`Interrupted removal could not be proven safe${error instanceof Error ? `: ${error.message}` : ""}`);
518
+ }
519
+ }
520
+ if (pathExists && !registered) {
521
+ return cleanupResultFromKernel({ ...input, result: "partial-removal", reason: "Git removed the worktree registration but left directory contents; preserved the residue without recursive deletion" });
522
+ }
523
+ if (!pathExists || !registered) {
524
+ return cleanupResultFromKernel({ ...input, result: "recovery-required", reason: "Interrupted cleanup left an inconsistent Git registration/path state" });
525
+ }
526
+ const staleInspection = inspectRunWorktree({ repoRoot: identity.root, runId: run.id, runState: run.state, binding });
527
+ if (staleInspection.state !== "clean" || staleInspection.headSha !== activeLease.expectedHeadSha) {
528
+ return cleanupResultFromKernel({ ...input, result: "recovery-required", reason: `Interrupted cleanup checkout needs preservation (${staleInspection.state})` });
529
+ }
530
+ cleanupResultFromKernel({ ...input, result: "retained", reason: "Previous cleaner stopped before invoking Git; verified checkout retained for a fresh lease" });
531
+ stored = readStoredTaskRun(input.repoRoot, input.taskDir, input.runId);
532
+ kernel = stored.kernel;
533
+ run = stored.run;
534
+ binding = run.workspace;
535
+ if (run.state !== "completed" || !run.result || !run.candidateSnapshot)
536
+ return retain("Run result or candidate changed while stale cleanup was reconciled", "recovery-required");
537
+ if (!binding?.manager || !binding.integrationReceipt)
538
+ return retain("Workspace binding disappeared while reconciling a stale lease", "recovery-required");
539
+ }
540
+ const stopReceipt = run.host?.stopReceipt;
541
+ if (!stopReceipt)
542
+ return retain("Verified host stop receipt is not persisted");
543
+ const leaseId = randomUUID();
544
+ try {
545
+ acquireTaskRunWorkspaceCleanupLease({
546
+ root: input.repoRoot, taskDir: input.taskDir, expectedRevision: kernel.revision,
547
+ runId: input.runId,
548
+ lease: {
549
+ leaseId, processId: process.pid, acquiredAt: new Date().toISOString(),
550
+ expectedHeadSha, targetBranch: integrationReceipt.targetBranch,
551
+ targetHeadSha: integrationReceipt.targetHeadSha, receiptRef: stopReceipt.receiptRef,
552
+ riskDisclosure: TASK_RUN_WORKSPACE_CLEANUP_RISK_DISCLOSURE,
553
+ },
554
+ actor: input.actor, idempotencyKey: `${input.idempotencyKey}:cleanup-lease:${leaseId}`,
555
+ });
556
+ }
557
+ catch (error) {
558
+ return retain(error instanceof Error ? error.message : "Could not acquire the persistent cleanup lease");
559
+ }
560
+ stored = readStoredTaskRun(input.repoRoot, input.taskDir, input.runId);
561
+ kernel = stored.kernel;
562
+ run = stored.run;
563
+ binding = run.workspace;
564
+ if (!binding?.manager || binding.cleanupLease?.leaseId !== leaseId)
565
+ return retain("Cleanup lease was not durably recorded", "recovery-required");
566
+ if (run.state !== "completed" || !run.result || !run.candidateSnapshot)
567
+ return retain("Run result or candidate changed after cleanup lease acquisition", "recovery-required");
568
+ const keepLeaseResult = (reason, state = "retained", updatedManagerBinding) => cleanupResultFromKernel({ ...input, result: state, reason, updatedManagerBinding });
569
+ const verifyBeforeRemoval = () => {
570
+ const latest = readStoredTaskRun(input.repoRoot, input.taskDir, input.runId);
571
+ const currentRun = latest.run;
572
+ const currentWorkspace = currentRun.workspace;
573
+ const currentCandidate = currentRun.candidateSnapshot;
574
+ const currentResult = currentRun.result;
575
+ const currentClosure = latest.kernel.closure;
576
+ if (latest.kernel.phase !== "close" || currentClosure?.runId !== currentRun.id
577
+ || currentClosure?.candidateSnapshotId !== currentCandidate?.id
578
+ || currentClosure?.candidateFingerprint !== currentCandidate.fingerprint
579
+ || !currentClosure?.deliveryEvidence.reference.trim() || currentRun.state !== "completed" || !currentResult
580
+ || !currentWorkspace?.manager || !currentWorkspace.integrationReceipt
581
+ || currentWorkspace.cleanupLease?.state !== "held" || currentWorkspace.cleanupLease.leaseId !== leaseId
582
+ || !currentRun.host?.stopReceipt
583
+ || fingerprintTaskValue(currentRun.host.stopReceipt) !== fingerprintTaskValue(stopReceipt)
584
+ || fingerprintTaskValue(currentWorkspace.integrationReceipt) !== fingerprintTaskValue(integrationReceipt)
585
+ || currentCandidate.id !== integrationReceipt.candidateSnapshotId
586
+ || currentCandidate.fingerprint !== integrationReceipt.candidateFingerprint) {
587
+ throw new WorktreeManagerError("cleanup-preflight-stale", "Run Close, host-stop, integration, or cleanup-lease evidence changed before Git removal", canonicalPath);
588
+ }
589
+ const freshIdentity = repoIdentity(input.repoRoot);
590
+ const freshPath = assertAllowedPath(freshIdentity, currentWorkspace.canonicalPath);
591
+ if (pathKey(freshPath) !== pathKey(canonicalPath)
592
+ || pathKey(currentWorkspace.manager.projectRoot) !== pathKey(freshIdentity.root)
593
+ || pathKey(currentWorkspace.manager.commonDir) !== pathKey(freshIdentity.commonDir)) {
594
+ throw new WorktreeManagerError("cleanup-path-changed", "Run worktree path or Git repository identity changed before removal", canonicalPath);
595
+ }
596
+ const verified = verifyWorktreeIntegration({
597
+ repoRoot: freshIdentity.root, runId: currentRun.id, runState: currentRun.state,
598
+ binding: currentWorkspace, targetRef: integrationReceipt.targetBranch,
599
+ result: { runId: currentRun.id, summary: currentResult.summary, evidenceRefs: currentResult.evidenceRefs,
600
+ candidateSnapshotId: currentCandidate.id, candidateFingerprint: currentCandidate.fingerprint },
601
+ });
602
+ if (verified.receipt.worktreeHeadSha.toLowerCase() !== expectedHeadSha
603
+ || verified.receipt.targetBranch !== integrationReceipt.targetBranch
604
+ || verified.receipt.contentFingerprint !== integrationReceipt.contentFingerprint) {
605
+ throw new WorktreeManagerError("cleanup-head-changed", "Worktree HEAD, integrated target branch, or preserved content changed before Git removal", canonicalPath);
606
+ }
607
+ const finalInspection = inspectRunWorktree({ repoRoot: freshIdentity.root, runId: currentRun.id, runState: currentRun.state, binding: currentWorkspace });
608
+ if (finalInspection.state !== "clean" || finalInspection.headSha?.toLowerCase() !== expectedHeadSha
609
+ || !finalInspection.gitDir || pathKey(finalInspection.gitDir) !== pathKey(currentWorkspace.manager.gitDir)) {
610
+ throw new WorktreeManagerError("cleanup-worktree-changed", `Worktree changed or contains user/ignored files (${finalInspection.state})`, canonicalPath);
611
+ }
612
+ };
613
+ try {
614
+ verifyBeforeRemoval();
615
+ }
616
+ catch (error) {
617
+ return keepLeaseResult(error instanceof Error ? error.message : "Worktree cleanup preflight failed", "recovery-required");
618
+ }
619
+ let removalError = null;
620
+ let finalCheckRejected = false;
621
+ try {
622
+ removeManagedGitWorktree(identity.root, canonicalPath, () => {
623
+ try {
624
+ verifyBeforeRemoval();
625
+ }
626
+ catch (error) {
627
+ finalCheckRejected = true;
628
+ throw error;
629
+ }
630
+ });
631
+ }
632
+ catch (error) {
633
+ removalError = error instanceof Error ? error.message : "Git refused or could not finish non-force worktree removal";
634
+ }
635
+ const pathExistsAfter = fs.existsSync(canonicalPath);
636
+ const registeredAfter = registrations(identity).some((entry) => pathKey(entry.path) === pathKey(canonicalPath));
637
+ if (pathExistsAfter && !registeredAfter) {
638
+ return keepLeaseResult("Git removed the worktree registration but left directory contents; residual files are preserved and are not treated as a checkout", "partial-removal");
639
+ }
640
+ if (pathExistsAfter && registeredAfter) {
641
+ return keepLeaseResult(removalError ?? "Git removal left the registered checkout in place; it is retained for inspection", finalCheckRejected ? "recovery-required" : "retained");
642
+ }
643
+ if (!pathExistsAfter && registeredAfter) {
644
+ return keepLeaseResult("Git registration remains although the worktree path disappeared", "recovery-required");
645
+ }
646
+ const restoreAndRetain = (reason) => {
647
+ const recoveryBinding = binding;
648
+ if (!recoveryBinding) {
649
+ return keepLeaseResult(`${reason}; the Run workspace binding is unavailable, preserve refs for manual reconciliation`, "recovery-required");
650
+ }
651
+ const restoration = restoreRemovedWorktree(identity, recoveryBinding);
652
+ return keepLeaseResult(restoration.binding
653
+ ? `${reason}; the checkout was restored at the preserved Run branch head`
654
+ : `${reason}; preserve repository refs and reconcile manually${restoration.reason ? ` (${restoration.reason})` : ""}`, "recovery-required", restoration.binding ?? undefined);
655
+ };
656
+ let branchHead;
657
+ let targetAfter;
658
+ try {
659
+ branchHead = resolveCommit(identity.root, branchRef(identity.root, binding.branch));
660
+ targetAfter = resolveLocalBranchTarget(identity.root, integrationReceipt.targetBranch);
661
+ }
662
+ catch (error) {
663
+ return restoreAndRetain(`The worktree was removed but post-removal branch verification failed${error instanceof Error ? `: ${error.message}` : ""}`);
664
+ }
665
+ if (branchHead !== expectedHeadSha || !isAncestor(identity.root, expectedHeadSha, targetAfter.headSha)) {
666
+ return restoreAndRetain("A Run branch or integration ancestry change raced with removal");
667
+ }
668
+ try {
669
+ const contentFingerprint = fingerprintRunContentAtTarget({
670
+ repoRoot: identity.root,
671
+ runId: run.id,
672
+ baseSha: binding.baseSha,
673
+ worktreeHeadSha: expectedHeadSha,
674
+ targetHeadSha: targetAfter.headSha,
675
+ candidateSnapshotId: run.candidateSnapshot.id,
676
+ candidateFingerprint: run.candidateSnapshot.fingerprint,
677
+ resultEvidenceRefs: run.result.evidenceRefs,
678
+ });
679
+ if (contentFingerprint !== integrationReceipt.contentFingerprint) {
680
+ return restoreAndRetain("The target tree changed Run deliverable content after Git removed the checkout");
681
+ }
682
+ }
683
+ catch (error) {
684
+ return restoreAndRetain(`Target content verification failed after Git removed the checkout${error instanceof Error ? `: ${error.message}` : ""}`);
685
+ }
686
+ return keepLeaseResult(removalError ?? "", "reclaimed");
687
+ }
688
+ function sameStringArray(left, right) {
689
+ if (left.length !== right.length)
690
+ return false;
691
+ const a = [...left].sort();
692
+ const b = [...right].sort();
693
+ return a.every((value, index) => value === b[index]);
694
+ }
695
+ //# sourceMappingURL=run-workspace-cleanup.js.map