@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,919 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import { appendTaskRunHostSettlementRefs, bindTaskRunHostReceipt, fingerprintTaskValue, readTaskKernel, } from "../../core/task/index.js";
6
+ import { taskRunWorkspaceWriteSetsEqual } from "../../core/task/task-kernel-write-set.js";
7
+ import { acquireTaskKernelRunDispatchV1, assertTaskKernelRunDispatchPreSpawnV1, bindTaskKernelRunDispatchOwnerV1, readTaskKernelScheduleReceiptV1, readPiRunSettlementSealV1, releaseTaskKernelRunDispatchV1, scheduleTaskKernelGraph, validateTaskKernelRunDispatchStopProofV1, } from "../scheduler/index.js";
8
+ import { resolveTaskDir } from "../task/session.js";
9
+ import { sameGitRoot } from "../../utils/git-root.js";
10
+ import { inspectRunWorktree } from "../worktree/manager.js";
11
+ function taskRelativeRef(root, taskDir, ref) {
12
+ const relative = path.relative(root, path.resolve(taskDir, ref));
13
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative)) {
14
+ throw new Error("Pi V2 evidence must stay inside its Task directory");
15
+ }
16
+ return relative.replaceAll("\\", "/");
17
+ }
18
+ function runAt(root, taskDir, taskId, runId) {
19
+ const read = readTaskKernel({ root, taskDir, cwd: root });
20
+ if (read.kind !== "task-kernel-v2" ||
21
+ read.kernel.identity.taskId !== taskId) {
22
+ throw new Error("Pi V2 dispatch requires the matching Task Kernel V2");
23
+ }
24
+ const run = read.kernel.runs.at(-1);
25
+ if (run?.id !== runId || run?.taskId !== taskId) {
26
+ throw new Error("Pi V2 dispatch runId must identify the latest Task Run");
27
+ }
28
+ if (run.state !== "running" && run.state !== "waiting") {
29
+ throw new Error(`Pi V2 Run is not dispatchable: ${run.state}`);
30
+ }
31
+ if (run.candidateSnapshot) {
32
+ throw new Error("Pi V2 dispatch cannot start after a candidate snapshot exists");
33
+ }
34
+ return { kernel: read.kernel, run };
35
+ }
36
+ function workdirForRun(root, run) {
37
+ const binding = run.workspace;
38
+ if (!binding?.manager) {
39
+ throw new Error("Pi V2 dispatch requires a P38-managed or approved-adopted Run worktree");
40
+ }
41
+ if (binding.ownerRunId !== run.id) {
42
+ throw new Error("Pi V2 Run worktree owner does not match the active Run");
43
+ }
44
+ if (!taskRunWorkspaceWriteSetsEqual(run.writeSetSnapshot, binding.writeSet)) {
45
+ throw new Error("Pi V2 Run worktree write set does not match the Run snapshot");
46
+ }
47
+ const inspection = inspectRunWorktree({
48
+ repoRoot: root,
49
+ runId: run.id,
50
+ runState: run.state,
51
+ binding,
52
+ knownOwners: [],
53
+ });
54
+ const invalidIssues = inspection.issues.filter((issue) => issue !== "unintegrated");
55
+ if (invalidIssues.length > 0 ||
56
+ inspection.state !== "unintegrated" ||
57
+ inspection.dirty ||
58
+ inspection.headSha?.toLowerCase() !== binding.baseSha.toLowerCase()) {
59
+ const detail = invalidIssues.join(", ") || inspection.state;
60
+ throw new Error(`Pi V2 Run worktree is not a clean, manager-verified base checkout (${detail})`);
61
+ }
62
+ const candidate = inspection.actualPath;
63
+ if (!candidate)
64
+ throw new Error("Pi V2 Run worktree path could not be verified");
65
+ const realCandidate = fs.realpathSync(candidate);
66
+ if (realCandidate !== candidate) {
67
+ throw new Error("Pi V2 Run worktree path changed while it was being verified");
68
+ }
69
+ let gitRoot;
70
+ try {
71
+ gitRoot = execFileSync("git", [
72
+ "-c",
73
+ `safe.directory=${realCandidate.replaceAll("\\", "/")}`,
74
+ "-C",
75
+ realCandidate,
76
+ "rev-parse",
77
+ "--show-toplevel",
78
+ ], { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }).trim();
79
+ }
80
+ catch {
81
+ throw new Error("Pi V2 Run workspace is not a usable Git checkout");
82
+ }
83
+ if (!sameGitRoot(gitRoot, realCandidate)) {
84
+ throw new Error("Pi V2 Run workspace Git root does not match its binding");
85
+ }
86
+ return candidate;
87
+ }
88
+ export function recheckPiV2RunDispatchWorkspace(dispatch) {
89
+ const { run } = runAt(dispatch.root, dispatch.taskDir, dispatch.taskId, dispatch.runId);
90
+ if (run.host)
91
+ throw new Error("Pi V2 Run acquired a host binding before process start");
92
+ const currentWorkdir = workdirForRun(dispatch.root, run);
93
+ if (currentWorkdir !== dispatch.workdir) {
94
+ throw new Error("Pi V2 Run worktree path changed after dispatch admission");
95
+ }
96
+ return currentWorkdir;
97
+ }
98
+ /** Revalidates all dispatch gates synchronously at the final pre-spawn seam. */
99
+ export function recheckPiV2RunDispatchBeforeSpawn(dispatch) {
100
+ const currentWorkdir = recheckPiV2RunDispatchWorkspace(dispatch);
101
+ const loadedSchedule = readTaskKernelScheduleReceiptV1(dispatch.root, dispatch.scheduleReceiptFingerprint);
102
+ if (loadedSchedule.integrity !== "fingerprint-verified" ||
103
+ loadedSchedule.receipt.integrityVersion !== 2 ||
104
+ !loadedSchedule.receipt.candidateTaskIds.includes(dispatch.taskId)) {
105
+ throw new Error("Pi V2 Task schedule receipt is no longer dispatchable");
106
+ }
107
+ if (!dispatch.scheduleReceiptExplicit) {
108
+ const schedule = scheduleTaskKernelGraph(dispatch.root, [dispatch.taskId]);
109
+ if (schedule.receipt.receiptFingerprint !==
110
+ dispatch.scheduleReceiptFingerprint) {
111
+ throw new Error("Pi V2 Task schedule changed after dispatch admission");
112
+ }
113
+ }
114
+ const lease = assertTaskKernelRunDispatchPreSpawnV1(dispatch.root, {
115
+ leaseId: dispatch.leaseId,
116
+ taskId: dispatch.taskId,
117
+ runId: dispatch.runId,
118
+ scheduleReceiptFingerprint: dispatch.scheduleReceiptFingerprint,
119
+ owner: {
120
+ host: "pi",
121
+ role: "implement",
122
+ sessionId: null,
123
+ threadId: null,
124
+ hostId: null,
125
+ startRequestId: null,
126
+ processId: null,
127
+ },
128
+ });
129
+ if (!lease.asserted ||
130
+ lease.hostBound !== false ||
131
+ lease.scheduleReceiptFingerprint !== dispatch.scheduleReceiptFingerprint) {
132
+ throw new Error(`Pi V2 dispatch lease is not active and dispatchable (${lease.reasonCode ?? "invalid pre-spawn assertion"})`);
133
+ }
134
+ return currentWorkdir;
135
+ }
136
+ export function preparePiV2RunDispatch(rootValue, taskReference, runId, scheduleReceiptFingerprint) {
137
+ const root = path.resolve(rootValue);
138
+ const taskDir = resolveTaskDir(root, taskReference);
139
+ const initial = readTaskKernel({ root, taskDir, cwd: root });
140
+ if (initial.kind !== "task-kernel-v2") {
141
+ throw new Error("--run-id requires a Task Kernel V2 task");
142
+ }
143
+ const taskId = initial.kernel.identity.taskId;
144
+ const initialRun = runAt(root, taskDir, taskId, runId).run;
145
+ workdirForRun(root, initialRun);
146
+ if (initialRun.host)
147
+ throw new Error("Pi V2 Run already has a host binding");
148
+ let scheduleReceipt;
149
+ if (scheduleReceiptFingerprint === undefined) {
150
+ scheduleReceipt = scheduleTaskKernelGraph(root, [taskId]).receipt;
151
+ }
152
+ else {
153
+ const loaded = readTaskKernelScheduleReceiptV1(root, scheduleReceiptFingerprint);
154
+ if (loaded.integrity !== "fingerprint-verified" ||
155
+ loaded.receipt.integrityVersion !== 2) {
156
+ throw new Error("Pi V2 dispatch requires a fully fingerprint-verified schedule receipt");
157
+ }
158
+ scheduleReceipt = loaded.receipt;
159
+ }
160
+ if (!scheduleReceipt.candidateTaskIds.includes(taskId)) {
161
+ throw new Error("Pi V2 Task is not a candidate in the supplied schedule receipt");
162
+ }
163
+ const decision = scheduleReceipt.plan.decisions.find((candidate) => candidate.taskId === taskId);
164
+ if (!decision || !["scheduled", "in-flight"].includes(decision.action)) {
165
+ throw new Error("Pi V2 Task is not admitted by the supplied schedule receipt");
166
+ }
167
+ const admission = acquireTaskKernelRunDispatchV1(root, {
168
+ scheduleReceiptFingerprint: scheduleReceipt.receiptFingerprint,
169
+ taskId,
170
+ runId,
171
+ owner: {
172
+ host: "pi",
173
+ role: "implement",
174
+ sessionId: null,
175
+ threadId: null,
176
+ hostId: null,
177
+ startRequestId: null,
178
+ processId: null,
179
+ },
180
+ });
181
+ if (!admission.permitted) {
182
+ const reason = admission.receipt.reasonCodes.join(", ") || "dispatch denied";
183
+ throw new Error(`Pi V2 dispatch rejected before process start (${reason}; admission receipt ${admission.receiptFile})`);
184
+ }
185
+ const current = runAt(root, taskDir, taskId, runId);
186
+ if (current.run.host)
187
+ throw new Error("Pi V2 Run already has a host binding");
188
+ const workdir = workdirForRun(root, current.run);
189
+ return {
190
+ root,
191
+ taskDir,
192
+ taskDirRef: path.relative(root, taskDir).replaceAll("\\", "/"),
193
+ workdir,
194
+ taskId,
195
+ runId,
196
+ run: current.run,
197
+ scheduleReceiptFingerprint: scheduleReceipt.receiptFingerprint,
198
+ scheduleReceiptExplicit: scheduleReceiptFingerprint !== undefined,
199
+ admissionReceiptFingerprint: admission.receipt.receiptFingerprint,
200
+ admissionReceiptRef: admission.receiptFile,
201
+ leaseId: admission.leaseId,
202
+ };
203
+ }
204
+ export function bindPiV2RunHost(dispatch, input) {
205
+ const { kernel, run } = runAt(dispatch.root, dispatch.taskDir, dispatch.taskId, dispatch.runId);
206
+ if (run.host)
207
+ throw new Error("Pi V2 Run already has a bound host");
208
+ const hostMutation = bindTaskRunHostReceipt({
209
+ root: dispatch.root,
210
+ taskDir: dispatch.taskDir,
211
+ expectedRevision: kernel.revision,
212
+ runId: dispatch.runId,
213
+ host: {
214
+ host: "pi",
215
+ role: "implement",
216
+ sessionId: input.sessionId,
217
+ hostId: null,
218
+ threadId: null,
219
+ requestRefs: [input.startRequestId],
220
+ eventRefs: [input.progressEvidenceRef],
221
+ resultRefs: [],
222
+ assuranceSource: "manager-owned-child-exit",
223
+ },
224
+ actor: "pactile-pi-bridge",
225
+ idempotencyKey: `pi-host-bound:${dispatch.runId}:${input.piRunId}`,
226
+ cwd: dispatch.root,
227
+ });
228
+ const owner = {
229
+ host: "pi",
230
+ role: "implement",
231
+ sessionId: input.sessionId,
232
+ threadId: null,
233
+ hostId: null,
234
+ startRequestId: input.startRequestId,
235
+ processId: input.processId,
236
+ };
237
+ const bound = bindTaskKernelRunDispatchOwnerV1(dispatch.root, {
238
+ leaseId: dispatch.leaseId,
239
+ taskId: dispatch.taskId,
240
+ runId: dispatch.runId,
241
+ owner,
242
+ });
243
+ if (!bound.bound) {
244
+ throw new Error(`Pi V2 dispatch owner binding failed: ${bound.reasonCode}`);
245
+ }
246
+ return { owner, hostRevision: hostMutation.kernel.revision };
247
+ }
248
+ function storeProof(dispatch, proofBase) {
249
+ const proofFingerprint = fingerprintTaskValue(proofBase);
250
+ const file = path.join(dispatch.taskDir, "pi-bridge", "dispatch-proofs", `${proofFingerprint}.json`);
251
+ fs.mkdirSync(path.dirname(file), { recursive: true });
252
+ const value = { ...proofBase, proof_fingerprint: proofFingerprint };
253
+ const content = `${JSON.stringify(value, null, 2)}\n`;
254
+ try {
255
+ fs.writeFileSync(file, content, {
256
+ encoding: "utf8",
257
+ flag: "wx",
258
+ mode: 0o600,
259
+ });
260
+ }
261
+ catch (error) {
262
+ if (!fs.existsSync(file) || fs.readFileSync(file, "utf8") !== content)
263
+ throw error;
264
+ }
265
+ return path.relative(dispatch.root, file).replaceAll("\\", "/");
266
+ }
267
+ export function persistPiV2StopAndRelease(dispatch, stop) {
268
+ if (!stop.processExit.terminationVerified ||
269
+ !stop.processExit.exitObservedAt) {
270
+ return {
271
+ stopReceiptRef: "",
272
+ stopReceiptTaskRef: "",
273
+ proofFingerprint: "",
274
+ released: false,
275
+ reasonCode: "pi-process-close-unverified",
276
+ };
277
+ }
278
+ const startFile = path.resolve(dispatch.taskDir, stop.startReceiptRef);
279
+ const runFile = path.resolve(dispatch.taskDir, stop.runReceiptRef);
280
+ const startReceipt = JSON.parse(fs.readFileSync(startFile, "utf8"));
281
+ const runRecord = JSON.parse(fs.readFileSync(runFile, "utf8"));
282
+ const runSettlementSeal = readPiRunSettlementSealV1(runRecord);
283
+ const processStopReceipt = stop.processStopReceipt;
284
+ if (runSettlementSeal?.outcome !== stop.outcome ||
285
+ runSettlementSeal.result_file !== stop.resultRef ||
286
+ runSettlementSeal.result_sha256 !== stop.resultSha256 ||
287
+ runRecord.run_id !== stop.runId ||
288
+ runRecord.task_id !== dispatch.taskId ||
289
+ runRecord.task_run_id !== dispatch.runId ||
290
+ runRecord.start_request_id !== stop.startRequestId ||
291
+ runRecord.session_id !== stop.sessionId ||
292
+ runRecord.process_id !== stop.processId ||
293
+ runRecord.settle_receipt_id !== processStopReceipt.settleReceiptId) {
294
+ return {
295
+ stopReceiptRef: "",
296
+ stopReceiptTaskRef: "",
297
+ proofFingerprint: "",
298
+ released: false,
299
+ reasonCode: "pi-receipt-identity-mismatch",
300
+ };
301
+ }
302
+ const kernelRead = readTaskKernel({
303
+ root: dispatch.root,
304
+ taskDir: dispatch.taskDir,
305
+ cwd: dispatch.root,
306
+ });
307
+ if (kernelRead.kind !== "task-kernel-v2") {
308
+ return {
309
+ stopReceiptRef: "",
310
+ stopReceiptTaskRef: "",
311
+ proofFingerprint: "",
312
+ released: false,
313
+ reasonCode: "task-kernel-v2-required",
314
+ };
315
+ }
316
+ const kernelRun = kernelRead.kernel.runs.find((run) => run.id === dispatch.runId);
317
+ if (!kernelRun?.host ||
318
+ (kernelRun.state !== "running" && kernelRun.state !== "waiting")) {
319
+ return {
320
+ stopReceiptRef: "",
321
+ stopReceiptTaskRef: "",
322
+ proofFingerprint: "",
323
+ released: false,
324
+ reasonCode: "pi-run-host-binding-missing",
325
+ };
326
+ }
327
+ try {
328
+ appendTaskRunHostSettlementRefs({
329
+ root: dispatch.root,
330
+ taskDir: dispatch.taskDir,
331
+ expectedRevision: kernelRead.kernel.revision,
332
+ runId: dispatch.runId,
333
+ eventRefs: [processStopReceipt.settleReceiptId],
334
+ resultRefs: [stop.runReceiptRef],
335
+ actor: "pactile-pi-bridge",
336
+ idempotencyKey: `pi-host-settled:${dispatch.runId}:${processStopReceipt.settleReceiptId}`,
337
+ cwd: dispatch.root,
338
+ });
339
+ }
340
+ catch (error) {
341
+ return {
342
+ stopReceiptRef: "",
343
+ stopReceiptTaskRef: "",
344
+ proofFingerprint: "",
345
+ released: false,
346
+ reasonCode: error instanceof Error
347
+ ? error.message
348
+ : "pi-host-settlement-recording-failed",
349
+ };
350
+ }
351
+ const proofBase = {
352
+ schema_version: 1,
353
+ scope: "task-kernel-v2-run-dispatch-stop",
354
+ lease_id: dispatch.leaseId,
355
+ task_id: dispatch.taskId,
356
+ run_id: dispatch.runId,
357
+ schedule_receipt_fingerprint: dispatch.scheduleReceiptFingerprint,
358
+ admission_receipt_fingerprint: dispatch.admissionReceiptFingerprint,
359
+ source: "pi-host",
360
+ disposition: "native-terminal",
361
+ writer_exited: true,
362
+ owner: {
363
+ host: "pi",
364
+ role: "implement",
365
+ session_id: stop.sessionId,
366
+ thread_id: null,
367
+ host_id: null,
368
+ start_request_id: stop.startRequestId,
369
+ process_id: stop.processId,
370
+ },
371
+ request_ref: taskRelativeRef(dispatch.root, dispatch.taskDir, stop.startReceiptRef),
372
+ request_fingerprint: fingerprintTaskValue(startReceipt),
373
+ native_receipt_ref: taskRelativeRef(dispatch.root, dispatch.taskDir, stop.runReceiptRef),
374
+ native_receipt_fingerprint: fingerprintTaskValue(processStopReceipt),
375
+ native_run_settlement_fingerprint: fingerprintTaskValue(runSettlementSeal),
376
+ };
377
+ const stopReceiptRef = storeProof(dispatch, proofBase);
378
+ const proofFingerprint = fingerprintTaskValue(proofBase);
379
+ const request = {
380
+ leaseId: dispatch.leaseId,
381
+ taskId: dispatch.taskId,
382
+ runId: dispatch.runId,
383
+ stopReceiptRef,
384
+ };
385
+ const validation = validateTaskKernelRunDispatchStopProofV1(dispatch.root, request);
386
+ if (!validation.valid) {
387
+ return {
388
+ stopReceiptRef,
389
+ stopReceiptTaskRef: path
390
+ .relative(dispatch.taskDir, path.resolve(dispatch.root, stopReceiptRef))
391
+ .replaceAll("\\", "/"),
392
+ proofFingerprint,
393
+ released: false,
394
+ reasonCode: validation.reasonCode,
395
+ };
396
+ }
397
+ const result = releaseTaskKernelRunDispatchV1(dispatch.root, request);
398
+ return {
399
+ stopReceiptRef,
400
+ stopReceiptTaskRef: path
401
+ .relative(dispatch.taskDir, path.resolve(dispatch.root, stopReceiptRef))
402
+ .replaceAll("\\", "/"),
403
+ proofFingerprint,
404
+ released: result.released,
405
+ reasonCode: result.reasonCode,
406
+ };
407
+ }
408
+ function readSafeTaskFile(taskDir, ref) {
409
+ if (!ref || path.isAbsolute(ref) || ref.split(/[\\/]/u).includes(".."))
410
+ return null;
411
+ const file = path.resolve(taskDir, ref);
412
+ const relative = path.relative(taskDir, file);
413
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative))
414
+ return null;
415
+ try {
416
+ const realTaskDir = fs.realpathSync(taskDir);
417
+ let cursor = realTaskDir;
418
+ for (const segment of relative.split(path.sep)) {
419
+ cursor = path.join(cursor, segment);
420
+ if (fs.lstatSync(cursor).isSymbolicLink())
421
+ return null;
422
+ }
423
+ const info = fs.lstatSync(file);
424
+ if (!info.isFile() || info.isSymbolicLink() || info.size > 8 * 1024 * 1024)
425
+ return null;
426
+ const realFile = fs.realpathSync(file);
427
+ const realRelative = path.relative(realTaskDir, realFile);
428
+ if (!realRelative ||
429
+ realRelative.startsWith("..") ||
430
+ path.isAbsolute(realRelative))
431
+ return null;
432
+ return { file, bytes: fs.readFileSync(realFile) };
433
+ }
434
+ catch {
435
+ return null;
436
+ }
437
+ }
438
+ export function readPiHostStopReceipt(rootValue, taskReference, taskRunId) {
439
+ try {
440
+ const root = path.resolve(rootValue);
441
+ const taskDir = resolveTaskDir(root, taskReference);
442
+ const read = readTaskKernel({ root, taskDir, cwd: root });
443
+ if (read.kind !== "task-kernel-v2")
444
+ return null;
445
+ const run = read.kernel.runs.find((item) => item.id === taskRunId);
446
+ const host = run?.host;
447
+ if (run?.host?.host !== "pi" ||
448
+ host?.role !== "implement" ||
449
+ host.assuranceSource !== "manager-owned-child-exit")
450
+ return null;
451
+ const runCandidates = host.resultRefs.filter((ref) => ref.startsWith("pi-bridge/runs/") && !ref.includes(".."));
452
+ for (const runReceiptRef of runCandidates) {
453
+ const safeRun = readSafeTaskFile(taskDir, runReceiptRef);
454
+ if (!safeRun)
455
+ continue;
456
+ const runRecord = JSON.parse(safeRun.bytes.toString("utf8"));
457
+ const receipt = runRecord.process_stop_receipt;
458
+ const startReceiptRef = runRecord.host_start_receipt_ref;
459
+ const progressRef = runRecord.progress_evidence_ref;
460
+ if (!receipt ||
461
+ typeof startReceiptRef !== "string" ||
462
+ typeof progressRef !== "string")
463
+ continue;
464
+ const safeStart = readSafeTaskFile(taskDir, startReceiptRef);
465
+ const safeProgress = readSafeTaskFile(taskDir, progressRef);
466
+ if (!safeStart || !safeProgress)
467
+ continue;
468
+ const start = JSON.parse(safeStart.bytes.toString("utf8"));
469
+ const stop = receipt.processExit;
470
+ if (receipt.schemaVersion !== 1 ||
471
+ receipt.source !== "pactile-pi-rpc" ||
472
+ receipt.assurance !== "manager-owned-child-exit" ||
473
+ receipt.taskId !== read.kernel.identity.taskId ||
474
+ receipt.taskRunId !== run.id ||
475
+ receipt.role !== "implement" ||
476
+ runRecord.run_id !== receipt.piRunId ||
477
+ runRecord.task_id !== receipt.taskId ||
478
+ runRecord.task_run_id !== receipt.taskRunId ||
479
+ runRecord.role !== "implement" ||
480
+ runRecord.session_id !== receipt.sessionId ||
481
+ runRecord.process_id !== receipt.processId ||
482
+ runRecord.start_request_id !== receipt.startRequestId ||
483
+ runRecord.settle_receipt_id !== receipt.settleReceiptId ||
484
+ runRecord.task_host_id !== "pi" ||
485
+ runRecord.host_start_receipt_ref !== startReceiptRef ||
486
+ runRecord.progress_evidence_ref !== progressRef ||
487
+ runRecord.outcome === "running" ||
488
+ host.sessionId !== receipt.sessionId ||
489
+ host.threadId !== null ||
490
+ host.requestRefs.length !== 1 ||
491
+ !host.requestRefs.includes(receipt.startRequestId) ||
492
+ !host.eventRefs.includes(receipt.settleReceiptId) ||
493
+ !host.eventRefs.includes(progressRef) ||
494
+ !host.resultRefs.includes(runReceiptRef) ||
495
+ receipt.evidenceRef !== runReceiptRef ||
496
+ receipt.progressEvidenceRef !== progressRef ||
497
+ (receipt.terminal !== "exited" && receipt.terminal !== "cancelled") ||
498
+ stop?.terminationVerified !== true ||
499
+ stop.processId !== receipt.processId ||
500
+ !stop.exitObservedAt ||
501
+ !Number.isFinite(Date.parse(stop.exitObservedAt)) ||
502
+ !Number.isFinite(Date.parse(receipt.recordedAt)) ||
503
+ Date.parse(receipt.recordedAt) < Date.parse(stop.exitObservedAt) ||
504
+ start.schemaVersion !== 1 ||
505
+ start.source !== "pactile-pi-rpc" ||
506
+ start.taskId !== receipt.taskId ||
507
+ start.taskRunId !== receipt.taskRunId ||
508
+ start.piRunId !== receipt.piRunId ||
509
+ start.role !== "implement" ||
510
+ start.sessionId !== receipt.sessionId ||
511
+ start.processId !== receipt.processId ||
512
+ start.startRequestId !== receipt.startRequestId ||
513
+ start.evidenceRef !== runReceiptRef ||
514
+ start.progressEvidenceRef !== progressRef ||
515
+ receipt.processExit.exitCode !== receipt.exitCode ||
516
+ receipt.processExit.signalCode !== receipt.signalCode ||
517
+ !Number.isSafeInteger(receipt.processId) ||
518
+ receipt.processId <= 0)
519
+ continue;
520
+ const proofRef = runRecord.dispatch_stop_proof_ref;
521
+ if (typeof proofRef !== "string")
522
+ continue;
523
+ const safeProof = readSafeTaskFile(taskDir, proofRef);
524
+ if (!safeProof)
525
+ continue;
526
+ const proofFile = safeProof.file;
527
+ const proof = JSON.parse(safeProof.bytes.toString("utf8"));
528
+ const runSettlementSeal = readPiRunSettlementSealV1(runRecord);
529
+ const { proof_fingerprint: storedProofFingerprint, ...proofBase } = proof;
530
+ const proofOwner = proof.owner;
531
+ if (!runSettlementSeal ||
532
+ typeof storedProofFingerprint !== "string" ||
533
+ fingerprintTaskValue(proofBase) !== storedProofFingerprint ||
534
+ path.basename(proofFile) !== `${storedProofFingerprint}.json` ||
535
+ proof.source !== "pi-host" ||
536
+ proof.disposition !== "native-terminal" ||
537
+ proof.writer_exited !== true ||
538
+ proof.task_id !== receipt.taskId ||
539
+ proof.run_id !== receipt.taskRunId ||
540
+ proof.owner === null ||
541
+ typeof proofOwner !== "object" ||
542
+ proofOwner.host !== "pi" ||
543
+ proofOwner.role !== "implement" ||
544
+ proofOwner.session_id !== receipt.sessionId ||
545
+ proofOwner.start_request_id !== receipt.startRequestId ||
546
+ proofOwner.process_id !== receipt.processId ||
547
+ proof.lease_id !== runRecord.dispatch_lease_id ||
548
+ proof.schedule_receipt_fingerprint !==
549
+ runRecord.schedule_receipt_fingerprint ||
550
+ proof.admission_receipt_fingerprint !==
551
+ runRecord.admission_receipt_fingerprint ||
552
+ proof.request_ref !==
553
+ path
554
+ .relative(root, path.resolve(taskDir, startReceiptRef))
555
+ .replaceAll("\\", "/") ||
556
+ proof.native_receipt_ref !==
557
+ path.relative(root, safeRun.file).replaceAll("\\", "/") ||
558
+ proof.request_fingerprint !== fingerprintTaskValue(start) ||
559
+ proof.native_receipt_fingerprint !== fingerprintTaskValue(receipt) ||
560
+ proof.native_run_settlement_fingerprint !==
561
+ fingerprintTaskValue(runSettlementSeal))
562
+ continue;
563
+ if (receipt.resultRef !== null) {
564
+ const safeResult = readSafeTaskFile(taskDir, receipt.resultRef);
565
+ if (!safeResult ||
566
+ typeof receipt.resultSha256 !== "string" ||
567
+ createHash("sha256").update(safeResult.bytes).digest("hex") !==
568
+ receipt.resultSha256 ||
569
+ runRecord.result_sha256 !== receipt.resultSha256)
570
+ continue;
571
+ }
572
+ else if (receipt.resultSha256 !== null ||
573
+ runRecord.result_file !== null ||
574
+ runRecord.result_sha256 !== null) {
575
+ continue;
576
+ }
577
+ return receipt;
578
+ }
579
+ return null;
580
+ }
581
+ catch {
582
+ return null;
583
+ }
584
+ }
585
+ function asRecord(value) {
586
+ return value && typeof value === "object" && !Array.isArray(value)
587
+ ? value
588
+ : null;
589
+ }
590
+ function readSafeProjectFile(root, relativeRef) {
591
+ if (!relativeRef ||
592
+ path.isAbsolute(relativeRef) ||
593
+ relativeRef.split(/[\\/]/u).includes(".."))
594
+ return null;
595
+ const file = path.resolve(root, relativeRef);
596
+ const relative = path.relative(root, file);
597
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative))
598
+ return null;
599
+ try {
600
+ const realRoot = fs.realpathSync(root);
601
+ let cursor = realRoot;
602
+ for (const segment of relative.split(path.sep)) {
603
+ cursor = path.join(cursor, segment);
604
+ if (fs.lstatSync(cursor).isSymbolicLink())
605
+ return null;
606
+ }
607
+ const info = fs.lstatSync(file);
608
+ if (!info.isFile() || info.isSymbolicLink() || info.size > 8 * 1024 * 1024)
609
+ return null;
610
+ const realFile = fs.realpathSync(file);
611
+ const realRelative = path.relative(realRoot, realFile);
612
+ if (!realRelative ||
613
+ realRelative.startsWith("..") ||
614
+ path.isAbsolute(realRelative))
615
+ return null;
616
+ return { file, bytes: fs.readFileSync(realFile) };
617
+ }
618
+ catch {
619
+ return null;
620
+ }
621
+ }
622
+ /**
623
+ * Independently verifies the persisted Pi Host stop proof and released Kernel
624
+ * admission lease after an injected runner returns. Runner booleans and refs
625
+ * alone never establish writer settlement.
626
+ */
627
+ export function verifyPiV2RunSettlementV1(rootValue, taskReference, taskRunId, expectedScheduleReceiptFingerprint) {
628
+ const root = path.resolve(rootValue);
629
+ const invalid = (reasonCode, values = {}) => ({
630
+ verified: false,
631
+ outcome: null,
632
+ scheduleReceiptFingerprint: null,
633
+ admissionReceiptFingerprint: null,
634
+ hostStopVerified: false,
635
+ leaseReleased: false,
636
+ evidenceRef: null,
637
+ reasonCode,
638
+ ...values,
639
+ });
640
+ if (!/^[a-f0-9]{64}$/u.test(expectedScheduleReceiptFingerprint))
641
+ return invalid("expected-schedule-receipt-fingerprint-invalid");
642
+ try {
643
+ const taskDir = resolveTaskDir(root, taskReference);
644
+ const read = readTaskKernel({ root, taskDir, cwd: root });
645
+ if (read.kind !== "task-kernel-v2")
646
+ return invalid("task-kernel-v2-required");
647
+ const run = read.kernel.runs.find((candidate) => candidate.id === taskRunId);
648
+ if (run?.taskId !== read.kernel.identity.taskId ||
649
+ run.host?.host !== "pi" ||
650
+ run.host.role !== "implement" ||
651
+ run.host.assuranceSource !== "manager-owned-child-exit")
652
+ return invalid("kernel-pi-host-settlement-missing");
653
+ const runRefs = run.host.resultRefs.filter((ref) => ref.startsWith("pi-bridge/runs/") && !ref.includes(".."));
654
+ for (const runRef of runRefs) {
655
+ const safeRun = readSafeTaskFile(taskDir, runRef);
656
+ if (!safeRun)
657
+ continue;
658
+ const runRecord = asRecord(JSON.parse(safeRun.bytes.toString("utf8")));
659
+ if (runRecord?.task_id !== read.kernel.identity.taskId ||
660
+ runRecord.task_run_id !== run.id ||
661
+ runRecord.task_host_id !== "pi" ||
662
+ runRecord.role !== "implement" ||
663
+ runRecord.run_id !== path.basename(runRef, ".json") ||
664
+ runRecord.outcome === "running" ||
665
+ runRecord.schedule_receipt_fingerprint !==
666
+ expectedScheduleReceiptFingerprint)
667
+ continue;
668
+ const admissionFingerprint = runRecord.admission_receipt_fingerprint;
669
+ const leaseId = runRecord.dispatch_lease_id;
670
+ const evidenceRef = runRecord.dispatch_stop_proof_ref;
671
+ const outcome = runRecord.outcome;
672
+ if (typeof admissionFingerprint !== "string" ||
673
+ !/^[a-f0-9]{64}$/u.test(admissionFingerprint) ||
674
+ typeof leaseId !== "string" ||
675
+ !leaseId.trim() ||
676
+ typeof evidenceRef !== "string" ||
677
+ !evidenceRef.trim() ||
678
+ typeof outcome !== "string" ||
679
+ runRecord.dispatch_lease_released !== true)
680
+ continue;
681
+ const admissionRef = path.posix.join(".pactile", ".runtime", "scheduler", "admissions", `${admissionFingerprint}.json`);
682
+ const safeAdmission = readSafeProjectFile(root, admissionRef);
683
+ if (!safeAdmission)
684
+ continue;
685
+ const admission = asRecord(JSON.parse(safeAdmission.bytes.toString("utf8")));
686
+ if (!admission)
687
+ continue;
688
+ const { schemaVersion, scope, receiptFingerprint, createdAt: _createdAt, ...admissionBase } = admission;
689
+ const request = asRecord(admission.request);
690
+ if (schemaVersion !== 1 ||
691
+ scope !== "task-kernel-v2-run-admission" ||
692
+ receiptFingerprint !== admissionFingerprint ||
693
+ fingerprintTaskValue(admissionBase) !== admissionFingerprint ||
694
+ admission.decision !== "permitted" ||
695
+ admission.leaseId !== leaseId ||
696
+ request?.scheduleReceiptFingerprint !==
697
+ expectedScheduleReceiptFingerprint ||
698
+ request.taskId !== read.kernel.identity.taskId ||
699
+ request.runId !== run.id)
700
+ continue;
701
+ const hostStop = readPiHostStopReceipt(root, taskReference, taskRunId);
702
+ const safeProof = readSafeTaskFile(taskDir, evidenceRef);
703
+ if (!hostStop || !safeProof)
704
+ continue;
705
+ const proof = asRecord(JSON.parse(safeProof.bytes.toString("utf8")));
706
+ if (!proof)
707
+ continue;
708
+ const runSettlementSeal = readPiRunSettlementSealV1(runRecord);
709
+ const { proof_fingerprint: proofFingerprint, ...proofBase } = proof;
710
+ if (!runSettlementSeal ||
711
+ typeof proofFingerprint !== "string" ||
712
+ !/^[a-f0-9]{64}$/u.test(proofFingerprint) ||
713
+ fingerprintTaskValue(proofBase) !== proofFingerprint ||
714
+ path.basename(safeProof.file) !== `${proofFingerprint}.json` ||
715
+ proof.lease_id !== leaseId ||
716
+ proof.task_id !== read.kernel.identity.taskId ||
717
+ proof.run_id !== run.id ||
718
+ proof.schedule_receipt_fingerprint !==
719
+ expectedScheduleReceiptFingerprint ||
720
+ proof.admission_receipt_fingerprint !== admissionFingerprint ||
721
+ proof.native_run_settlement_fingerprint !==
722
+ fingerprintTaskValue(runSettlementSeal) ||
723
+ hostStop.piRunId !== runRecord.run_id ||
724
+ hostStop.terminal !== (outcome === "cancelled" ? "cancelled" : "exited"))
725
+ continue;
726
+ const historyRef = path.posix.join(".pactile", ".runtime", "scheduler", "lease-history", `${leaseId}.json`);
727
+ const activeRef = path.posix.join(".pactile", ".runtime", "scheduler", "active", `${leaseId}.json`);
728
+ const safeHistory = readSafeProjectFile(root, historyRef);
729
+ if (!safeHistory || fs.existsSync(path.resolve(root, activeRef)))
730
+ continue;
731
+ const history = asRecord(JSON.parse(safeHistory.bytes.toString("utf8")));
732
+ if (history?.id !== leaseId ||
733
+ history.owner_kind !== "task-kernel-v2-run" ||
734
+ history.status !== "released" ||
735
+ history.task_id !== read.kernel.identity.taskId ||
736
+ history.run_id !== run.id ||
737
+ history.schedule_receipt_fingerprint !==
738
+ expectedScheduleReceiptFingerprint ||
739
+ history.admission_receipt_fingerprint !== admissionFingerprint ||
740
+ history.stop_receipt_ref !==
741
+ path.relative(root, safeProof.file).replaceAll("\\", "/") ||
742
+ history.stop_proof_fingerprint !== proofFingerprint ||
743
+ history.release_disposition !== "native-terminal")
744
+ continue;
745
+ return {
746
+ verified: true,
747
+ outcome,
748
+ scheduleReceiptFingerprint: expectedScheduleReceiptFingerprint,
749
+ admissionReceiptFingerprint: admissionFingerprint,
750
+ hostStopVerified: hostStop.processExit.terminationVerified === true,
751
+ leaseReleased: true,
752
+ evidenceRef,
753
+ reasonCode: null,
754
+ };
755
+ }
756
+ return invalid("persisted-host-stop-or-lease-release-proof-invalid");
757
+ }
758
+ catch (error) {
759
+ return invalid(error instanceof Error
760
+ ? `settlement-evidence-read-failed:${error.message}`
761
+ : "settlement-evidence-read-failed");
762
+ }
763
+ }
764
+ /** Reads only persisted, cross-bound Pi V2 evidence for Task Run completion. */
765
+ export function readPiTaskRunEvidence(rootValue, taskReference, taskRunId) {
766
+ try {
767
+ const root = path.resolve(rootValue);
768
+ const taskDir = resolveTaskDir(root, taskReference);
769
+ const read = readTaskKernel({ root, taskDir, cwd: root });
770
+ if (read.kind !== "task-kernel-v2")
771
+ return null;
772
+ const run = read.kernel.runs.find((candidate) => candidate.id === taskRunId);
773
+ if (!run)
774
+ return null;
775
+ const host = run.host;
776
+ if (run.taskId !== read.kernel.identity.taskId ||
777
+ run.state !== "running" ||
778
+ run.candidateSnapshot !== null ||
779
+ run.result !== null ||
780
+ host?.host !== "pi" ||
781
+ host.role !== "implement" ||
782
+ host.assuranceSource !== "manager-owned-child-exit" ||
783
+ !host.sessionId ||
784
+ host.hostId !== null ||
785
+ host.threadId !== null ||
786
+ host.requestRefs.length !== 1 ||
787
+ host.eventRefs.length !== 2 ||
788
+ host.resultRefs.length !== 1 ||
789
+ !run.workspace?.manager ||
790
+ run.workspace.ownerRunId !== run.id ||
791
+ !taskRunWorkspaceWriteSetsEqual(run.writeSetSnapshot, run.workspace.writeSet)) {
792
+ return null;
793
+ }
794
+ const stop = readPiHostStopReceipt(root, taskReference, taskRunId);
795
+ if (!stop)
796
+ return null;
797
+ if (stop.taskId !== read.kernel.identity.taskId ||
798
+ stop.taskRunId !== run.id ||
799
+ stop.role !== "implement" ||
800
+ stop.terminal !== "exited" ||
801
+ stop.exitCode !== 0 ||
802
+ stop.signalCode !== null ||
803
+ stop.processExit.terminationVerified !== true ||
804
+ !stop.processExit.exitObservedAt) {
805
+ return null;
806
+ }
807
+ const runReceiptRef = `pi-bridge/runs/${stop.piRunId}.json`;
808
+ const startReceiptRef = `pi-bridge/starts/${stop.piRunId}.json`;
809
+ const progressEvidenceRef = `pi-bridge/events/${stop.piRunId}.jsonl`;
810
+ const resultRef = `pi-bridge/results/${stop.piRunId}.md`;
811
+ if (host.sessionId !== stop.sessionId ||
812
+ host.requestRefs[0] !== stop.startRequestId ||
813
+ !host.eventRefs.includes(stop.settleReceiptId) ||
814
+ !host.eventRefs.includes(progressEvidenceRef) ||
815
+ host.resultRefs[0] !== runReceiptRef ||
816
+ stop.evidenceRef !== runReceiptRef ||
817
+ stop.progressEvidenceRef !== progressEvidenceRef ||
818
+ stop.resultRef !== resultRef ||
819
+ typeof stop.resultSha256 !== "string" ||
820
+ !/^[a-f0-9]{64}$/u.test(stop.resultSha256)) {
821
+ return null;
822
+ }
823
+ const safeRun = readSafeTaskFile(taskDir, runReceiptRef);
824
+ const safeStart = readSafeTaskFile(taskDir, startReceiptRef);
825
+ const safeProgress = readSafeTaskFile(taskDir, progressEvidenceRef);
826
+ const safeResult = readSafeTaskFile(taskDir, resultRef);
827
+ if (!safeRun || !safeStart || !safeProgress || !safeResult)
828
+ return null;
829
+ const runRecord = asRecord(JSON.parse(safeRun.bytes.toString("utf8")));
830
+ if (!runRecord)
831
+ return null;
832
+ const startedAt = typeof runRecord.started_at === "string"
833
+ ? Date.parse(runRecord.started_at)
834
+ : Number.NaN;
835
+ const endedAt = typeof runRecord.ended_at === "string"
836
+ ? Date.parse(runRecord.ended_at)
837
+ : Number.NaN;
838
+ const elapsedMs = runRecord.elapsed_ms;
839
+ const wallElapsedMs = endedAt - startedAt;
840
+ if (runRecord.schema_version !== 2 ||
841
+ runRecord.run_id !== stop.piRunId ||
842
+ runRecord.task_id !== read.kernel.identity.taskId ||
843
+ runRecord.task !== path.relative(root, taskDir).replaceAll("\\", "/") ||
844
+ runRecord.task_run_id !== run.id ||
845
+ runRecord.task_host_id !== "pi" ||
846
+ runRecord.role !== "implement" ||
847
+ runRecord.outcome !== "settled" ||
848
+ runRecord.tool_errors !== 0 ||
849
+ runRecord.process_stop_error !== null ||
850
+ !Number.isFinite(startedAt) ||
851
+ !Number.isFinite(endedAt) ||
852
+ typeof elapsedMs !== "number" ||
853
+ !Number.isSafeInteger(elapsedMs) ||
854
+ elapsedMs < 0 ||
855
+ wallElapsedMs < 0 ||
856
+ Math.abs(elapsedMs - wallElapsedMs) > 2_000 ||
857
+ Date.parse(stop.processExit.exitObservedAt) > endedAt ||
858
+ runRecord.dispatch_lease_released !== true ||
859
+ runRecord.start_request_id !== stop.startRequestId ||
860
+ runRecord.session_id !== stop.sessionId ||
861
+ runRecord.process_id !== stop.processId ||
862
+ runRecord.settle_receipt_id !== stop.settleReceiptId ||
863
+ runRecord.host_start_receipt_ref !== startReceiptRef ||
864
+ runRecord.progress_evidence_ref !== progressEvidenceRef ||
865
+ runRecord.result_file !== resultRef ||
866
+ runRecord.result_sha256 !== stop.resultSha256 ||
867
+ typeof runRecord.dispatch_lease_id !== "string" ||
868
+ !runRecord.dispatch_lease_id.trim() ||
869
+ typeof runRecord.schedule_receipt_fingerprint !== "string" ||
870
+ !/^[a-f0-9]{64}$/u.test(runRecord.schedule_receipt_fingerprint) ||
871
+ typeof runRecord.admission_receipt_fingerprint !== "string" ||
872
+ !/^[a-f0-9]{64}$/u.test(runRecord.admission_receipt_fingerprint) ||
873
+ typeof runRecord.dispatch_stop_proof_ref !== "string" ||
874
+ !runRecord.dispatch_stop_proof_ref.trim()) {
875
+ return null;
876
+ }
877
+ const resultSha256 = createHash("sha256")
878
+ .update(safeResult.bytes)
879
+ .digest("hex");
880
+ if (!safeResult.bytes.toString("utf8").trim() ||
881
+ resultSha256 !== stop.resultSha256 ||
882
+ resultSha256 !== runRecord.result_sha256) {
883
+ return null;
884
+ }
885
+ const settlement = verifyPiV2RunSettlementV1(root, taskReference, taskRunId, runRecord.schedule_receipt_fingerprint);
886
+ if (!settlement.verified ||
887
+ settlement.outcome !== "settled" ||
888
+ !settlement.hostStopVerified ||
889
+ !settlement.leaseReleased ||
890
+ typeof settlement.evidenceRef !== "string" ||
891
+ settlement.evidenceRef !== runRecord.dispatch_stop_proof_ref) {
892
+ return null;
893
+ }
894
+ const proofRef = settlement.evidenceRef;
895
+ if (!readSafeTaskFile(taskDir, proofRef))
896
+ return null;
897
+ const evidenceRefs = [
898
+ startReceiptRef,
899
+ progressEvidenceRef,
900
+ resultRef,
901
+ runReceiptRef,
902
+ proofRef,
903
+ ];
904
+ if (new Set(evidenceRefs).size !== evidenceRefs.length)
905
+ return null;
906
+ return {
907
+ taskId: read.kernel.identity.taskId,
908
+ taskRunId: run.id,
909
+ evidenceRefs,
910
+ executionMeasurementRef: runReceiptRef,
911
+ assurance: "manager-owned-child-exit",
912
+ outcome: "settled",
913
+ };
914
+ }
915
+ catch {
916
+ return null;
917
+ }
918
+ }
919
+ //# sourceMappingURL=v2-dispatch.js.map