@phyzess/pappra 0.1.0-beta.13 → 0.1.0-beta.18

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 (357) hide show
  1. package/README.md +134 -15
  2. package/assets/integrations/skills/pappra/SKILL.md +28 -7
  3. package/assets/integrations/skills/pappra/references/collaboration.md +633 -0
  4. package/assets/integrations/skills/pappra/references/environment.md +360 -0
  5. package/assets/integrations/skills/pappra/references/hosts.md +20 -0
  6. package/assets/integrations/skills/pappra/references/operations.md +36 -5
  7. package/dist/adapters/pi/recovery-extension.d.ts +65 -0
  8. package/dist/adapters/pi/recovery-extension.js +238 -0
  9. package/dist/adapters/pi/session-transition-extension.d.ts +30 -0
  10. package/dist/adapters/pi/session-transition-extension.js +265 -0
  11. package/dist/app/automatic-handoff-events.d.ts +26 -0
  12. package/dist/app/automatic-handoff-events.js +134 -0
  13. package/dist/app/bounded-file.d.ts +2 -0
  14. package/dist/app/bounded-file.js +2 -0
  15. package/dist/app/capability-evidence/claude.d.ts +37 -0
  16. package/dist/app/capability-evidence/claude.js +206 -0
  17. package/dist/app/capability-evidence/codex.d.ts +35 -0
  18. package/dist/app/capability-evidence/codex.js +193 -0
  19. package/dist/app/capability-evidence/index.d.ts +33 -0
  20. package/dist/app/capability-evidence/index.js +117 -0
  21. package/dist/app/capability-evidence/pi.d.ts +73 -0
  22. package/dist/app/capability-evidence/pi.js +669 -0
  23. package/dist/app/capability-evidence/shared.d.ts +69 -0
  24. package/dist/app/capability-evidence/shared.js +195 -0
  25. package/dist/app/collab-auto-handoff.d.ts +55 -0
  26. package/dist/app/collab-auto-handoff.js +384 -0
  27. package/dist/app/collab-bindings.d.ts +57 -0
  28. package/dist/app/collab-bindings.js +1006 -0
  29. package/dist/app/collab-bootstrap-transport.d.ts +163 -0
  30. package/dist/app/collab-bootstrap-transport.js +769 -0
  31. package/dist/app/collab-bootstrap.d.ts +137 -0
  32. package/dist/app/collab-bootstrap.js +3455 -0
  33. package/dist/app/collab-handoff.d.ts +12 -0
  34. package/dist/app/collab-handoff.js +511 -0
  35. package/dist/app/collab-messages.d.ts +2 -0
  36. package/dist/app/collab-messages.js +2 -0
  37. package/dist/app/collab-notify.d.ts +156 -0
  38. package/dist/app/collab-notify.js +1208 -0
  39. package/dist/app/collab-preflight.d.ts +34 -0
  40. package/dist/app/collab-preflight.js +96 -0
  41. package/dist/app/collab-recovery-executor.d.ts +161 -0
  42. package/dist/app/collab-recovery-executor.js +1153 -0
  43. package/dist/app/collab-recovery-projection.d.ts +103 -0
  44. package/dist/app/collab-recovery-projection.js +659 -0
  45. package/dist/app/collab-recovery.d.ts +25 -0
  46. package/dist/app/collab-recovery.js +429 -0
  47. package/dist/app/collab-resources.d.ts +16 -0
  48. package/dist/app/collab-resources.js +278 -0
  49. package/dist/app/collab-role-events.d.ts +22 -0
  50. package/dist/app/collab-role-events.js +329 -0
  51. package/dist/app/collab-role-orchestration.d.ts +53 -0
  52. package/dist/app/collab-role-orchestration.js +601 -0
  53. package/dist/app/collab-role-plan.d.ts +81 -0
  54. package/dist/app/collab-role-plan.js +504 -0
  55. package/dist/app/collab-role-repair.d.ts +109 -0
  56. package/dist/app/collab-role-repair.js +821 -0
  57. package/dist/app/collab-rollover.d.ts +263 -0
  58. package/dist/app/collab-rollover.js +1112 -0
  59. package/dist/app/collab-route.d.ts +64 -0
  60. package/dist/app/collab-route.js +240 -0
  61. package/dist/app/collab-session-transition.d.ts +221 -0
  62. package/dist/app/collab-session-transition.js +3334 -0
  63. package/dist/app/collab-state.d.ts +7 -0
  64. package/dist/app/collab-state.js +162 -0
  65. package/dist/app/collab-task-store.d.ts +22 -0
  66. package/dist/app/collab-task-store.js +204 -0
  67. package/dist/app/collab-work-execution.d.ts +127 -0
  68. package/dist/app/collab-work-execution.js +1027 -0
  69. package/dist/app/collab-work-plan.d.ts +87 -0
  70. package/dist/app/collab-work-plan.js +437 -0
  71. package/dist/app/collaboration.d.ts +8 -2
  72. package/dist/app/collaboration.js +101 -12
  73. package/dist/app/doctor.js +108 -5
  74. package/dist/app/host-mcp.js +34 -8
  75. package/dist/app/host-probe.js +4 -4
  76. package/dist/app/init.d.ts +58 -4
  77. package/dist/app/init.js +768 -155
  78. package/dist/app/managed-pi-bootstrap-admission.d.ts +14 -0
  79. package/dist/app/managed-pi-bootstrap-admission.js +104 -0
  80. package/dist/app/managed-pi-bootstrap-refresh.d.ts +10 -0
  81. package/dist/app/managed-pi-bootstrap-refresh.js +78 -0
  82. package/dist/app/managed-pi-delivery.d.ts +8 -0
  83. package/dist/app/managed-pi-delivery.js +110 -0
  84. package/dist/app/managed-pi-handoff-receiver.d.ts +15 -0
  85. package/dist/app/managed-pi-handoff-receiver.js +263 -0
  86. package/dist/app/managed-pi-handoff-reference.d.ts +3 -0
  87. package/dist/app/managed-pi-handoff-reference.js +60 -0
  88. package/dist/app/managed-pi-herdr.d.ts +21 -0
  89. package/dist/app/managed-pi-herdr.js +185 -0
  90. package/dist/app/managed-pi-initial-admission.d.ts +28 -0
  91. package/dist/app/managed-pi-initial-admission.js +416 -0
  92. package/dist/app/managed-pi-initial-launch.d.ts +5 -0
  93. package/dist/app/managed-pi-initial-launch.js +61 -0
  94. package/dist/app/managed-pi-native-observation.d.ts +36 -0
  95. package/dist/app/managed-pi-native-observation.js +191 -0
  96. package/dist/app/managed-pi-readiness.d.ts +29 -0
  97. package/dist/app/managed-pi-readiness.js +288 -0
  98. package/dist/app/managed-pi-repair-stop.d.ts +21 -0
  99. package/dist/app/managed-pi-repair-stop.js +371 -0
  100. package/dist/app/managed-pi-resume-admission.d.ts +32 -0
  101. package/dist/app/managed-pi-resume-admission.js +618 -0
  102. package/dist/app/managed-pi-retirement.d.ts +28 -0
  103. package/dist/app/managed-pi-retirement.js +112 -0
  104. package/dist/app/managed-pi-sdk-control.d.ts +7 -0
  105. package/dist/app/managed-pi-sdk-control.js +169 -0
  106. package/dist/app/managed-pi-sdk-runtime.d.ts +3 -0
  107. package/dist/app/managed-pi-sdk-runtime.js +483 -0
  108. package/dist/app/managed-pi-source-admission.d.ts +14 -0
  109. package/dist/app/managed-pi-source-admission.js +323 -0
  110. package/dist/app/managed-pi-transition-host.d.ts +36 -0
  111. package/dist/app/managed-pi-transition-host.js +292 -0
  112. package/dist/app/managed-pi.d.ts +54 -0
  113. package/dist/app/managed-pi.js +248 -0
  114. package/dist/app/shell-readiness.d.ts +66 -0
  115. package/dist/app/shell-readiness.js +368 -0
  116. package/dist/app/task-pin.d.ts +2 -23
  117. package/dist/app/task-pin.js +2 -113
  118. package/dist/cli/commands/collaboration-binding.d.ts +13 -0
  119. package/dist/cli/commands/collaboration-binding.js +118 -0
  120. package/dist/cli/commands/collaboration-bootstrap.d.ts +10 -0
  121. package/dist/cli/commands/collaboration-bootstrap.js +84 -0
  122. package/dist/cli/commands/collaboration-capabilities.d.ts +13 -0
  123. package/dist/cli/commands/collaboration-capabilities.js +127 -0
  124. package/dist/cli/commands/collaboration-handoff.d.ts +13 -0
  125. package/dist/cli/commands/collaboration-handoff.js +102 -0
  126. package/dist/cli/commands/collaboration-message.d.ts +17 -0
  127. package/dist/cli/commands/collaboration-message.js +177 -0
  128. package/dist/cli/commands/collaboration-plan.d.ts +8 -0
  129. package/dist/cli/commands/collaboration-plan.js +108 -0
  130. package/dist/cli/commands/collaboration-preflight.d.ts +10 -0
  131. package/dist/cli/commands/collaboration-preflight.js +167 -0
  132. package/dist/cli/commands/collaboration-recovery-run.d.ts +46 -0
  133. package/dist/cli/commands/collaboration-recovery-run.js +224 -0
  134. package/dist/cli/commands/collaboration-recovery.d.ts +11 -0
  135. package/dist/cli/commands/collaboration-recovery.js +104 -0
  136. package/dist/cli/commands/collaboration-resources.d.ts +11 -0
  137. package/dist/cli/commands/collaboration-resources.js +96 -0
  138. package/dist/cli/commands/collaboration-role-plan.d.ts +9 -0
  139. package/dist/cli/commands/collaboration-role-plan.js +69 -0
  140. package/dist/cli/commands/collaboration-role-run.d.ts +11 -0
  141. package/dist/cli/commands/collaboration-role-run.js +128 -0
  142. package/dist/cli/commands/collaboration-rollover.d.ts +10 -0
  143. package/dist/cli/commands/collaboration-rollover.js +103 -0
  144. package/dist/cli/commands/collaboration-state.d.ts +10 -0
  145. package/dist/cli/commands/collaboration-state.js +96 -0
  146. package/dist/cli/commands/collaboration-transition.d.ts +10 -0
  147. package/dist/cli/commands/collaboration-transition.js +75 -0
  148. package/dist/cli/commands/collaboration-work-run.d.ts +34 -0
  149. package/dist/cli/commands/collaboration-work-run.js +178 -0
  150. package/dist/cli/commands/collaboration.d.ts +4 -0
  151. package/dist/cli/commands/collaboration.js +39 -4
  152. package/dist/cli/commands/continuity.js +2 -6
  153. package/dist/cli/commands/docs.d.ts +2 -0
  154. package/dist/cli/commands/docs.js +89 -15
  155. package/dist/cli/commands/host.d.ts +7 -1
  156. package/dist/cli/commands/host.js +122 -7
  157. package/dist/cli/commands/init.d.ts +20 -3
  158. package/dist/cli/commands/init.js +897 -232
  159. package/dist/cli/commands/mcp.d.ts +1 -0
  160. package/dist/cli/commands/mcp.js +11 -5
  161. package/dist/cli/commands/repair.d.ts +12 -0
  162. package/dist/cli/commands/repair.js +41 -0
  163. package/dist/cli/commands/runtime.d.ts +1 -1
  164. package/dist/cli/commands/runtime.js +139 -38
  165. package/dist/cli/commands/session.d.ts +7 -0
  166. package/dist/cli/commands/session.js +82 -0
  167. package/dist/cli/commands/task.js +19 -5
  168. package/dist/cli/run.js +866 -24
  169. package/dist/code/identity.d.ts +7 -0
  170. package/dist/code/identity.js +7 -3
  171. package/dist/code/registration.js +7 -0
  172. package/dist/code/service.d.ts +9 -0
  173. package/dist/code/service.js +16 -3
  174. package/dist/code/text.js +19 -7
  175. package/dist/collab/admission.d.ts +91 -66
  176. package/dist/collab/admission.js +21 -6
  177. package/dist/collab/canonical.d.ts +1 -1
  178. package/dist/collab/canonical.js +44 -3
  179. package/dist/collab/envelope.d.ts +2 -2
  180. package/dist/collab/envelope.js +12 -12
  181. package/dist/collab/first-work.d.ts +3 -0
  182. package/dist/collab/first-work.js +15 -0
  183. package/dist/collab/handoff.d.ts +16 -0
  184. package/dist/collab/handoff.js +39 -5
  185. package/dist/collab/index.d.ts +97 -1
  186. package/dist/collab/index.js +9 -1
  187. package/dist/collab/messages.js +126 -3
  188. package/dist/collab/persisted-messages.d.ts +123 -0
  189. package/dist/collab/persisted-messages.js +496 -0
  190. package/dist/collab/preflight.d.ts +1 -1
  191. package/dist/collab/resources.d.ts +13 -3
  192. package/dist/collab/resources.js +37 -6
  193. package/dist/collab/rollover.d.ts +311 -0
  194. package/dist/collab/rollover.js +1024 -0
  195. package/dist/collab/store.d.ts +1 -0
  196. package/dist/collab/store.js +1 -4
  197. package/dist/collab/types.d.ts +2 -354
  198. package/dist/collab/validation.d.ts +2 -10
  199. package/dist/collab/validation.js +2 -303
  200. package/dist/collab/work-plan.d.ts +105 -0
  201. package/dist/collab/work-plan.js +843 -0
  202. package/dist/continuity/context.d.ts +11 -2
  203. package/dist/continuity/context.js +100 -13
  204. package/dist/continuity/handoff-bundle.d.ts +296 -0
  205. package/dist/continuity/handoff-bundle.js +477 -0
  206. package/dist/continuity/index.d.ts +2 -0
  207. package/dist/continuity/index.js +1 -0
  208. package/dist/continuity/paths.js +10 -2
  209. package/dist/continuity/service.js +91 -15
  210. package/dist/continuity/task-pin.d.ts +24 -0
  211. package/dist/continuity/task-pin.js +590 -0
  212. package/dist/doctor.d.ts +1 -0
  213. package/dist/doctor.js +6 -0
  214. package/dist/experimental/index.d.ts +13 -0
  215. package/dist/experimental/index.js +25 -0
  216. package/dist/experimental/pi.d.ts +4 -0
  217. package/dist/experimental/pi.js +12 -0
  218. package/dist/hosts/claude/native.js +1 -1
  219. package/dist/hosts/codex/native.js +1 -1
  220. package/dist/hosts/codex/protocol.js +1 -1
  221. package/dist/hosts/integration/bootstrap-config.d.ts +58 -0
  222. package/dist/hosts/integration/bootstrap-config.js +254 -0
  223. package/dist/hosts/integration/bundle-export.d.ts +44 -0
  224. package/dist/hosts/integration/bundle-export.js +366 -3
  225. package/dist/hosts/integration/bundle.js +3 -0
  226. package/dist/hosts/integration/hook.js +36 -9
  227. package/dist/hosts/integration/pappra-bootstrap-extension.mjs +80 -0
  228. package/dist/hosts/integration/pappra-extension-runtime.mjs +59 -24631
  229. package/dist/hosts/integration/pappra-hook.mjs +61 -24749
  230. package/dist/hosts/integration/pappra-recovery-extension.mjs +259 -0
  231. package/dist/hosts/integration/pappra-session-transition-extension.mjs +276 -0
  232. package/dist/hosts/integration/pi-bootstrap-extension.d.ts +36 -0
  233. package/dist/hosts/integration/pi-bootstrap-extension.js +101 -0
  234. package/dist/hosts/integration/pi-bootstrap-guard.d.ts +125 -0
  235. package/dist/hosts/integration/pi-bootstrap-guard.js +438 -0
  236. package/dist/hosts/integration/pi-bootstrap-runtime.d.ts +63 -0
  237. package/dist/hosts/integration/pi-bootstrap-runtime.js +223 -0
  238. package/dist/hosts/integration/pi-native-events.d.ts +112 -0
  239. package/dist/hosts/integration/pi-native-events.js +348 -0
  240. package/dist/hosts/integration/pi-rollover-extension.d.ts +166 -0
  241. package/dist/hosts/integration/pi-rollover-extension.js +431 -0
  242. package/dist/hosts/integration/recovery-config.d.ts +48 -0
  243. package/dist/hosts/integration/recovery-config.js +117 -0
  244. package/dist/hosts/integration/service.d.ts +6 -1
  245. package/dist/hosts/integration/service.js +485 -35
  246. package/dist/hosts/integration/support.d.ts +7 -0
  247. package/dist/hosts/integration/support.js +9 -1
  248. package/dist/hosts/integration/templates.d.ts +3 -0
  249. package/dist/hosts/integration/templates.js +26 -3
  250. package/dist/hosts/pi/managed-host-identity.d.ts +2 -0
  251. package/dist/hosts/pi/managed-host-identity.js +40 -0
  252. package/dist/hosts/pi/managed-provider-diagnostics.d.ts +6 -0
  253. package/dist/hosts/pi/managed-provider-diagnostics.js +184 -0
  254. package/dist/hosts/pi/managed-sdk-session.d.ts +335 -0
  255. package/dist/hosts/pi/managed-sdk-session.js +1639 -0
  256. package/dist/hosts/pi/managed-session-extension.d.ts +20 -0
  257. package/dist/hosts/pi/managed-session-extension.js +84 -0
  258. package/dist/hosts/pi/managed-session.d.ts +177 -0
  259. package/dist/hosts/pi/managed-session.js +1557 -0
  260. package/dist/hosts/pi/protocol.js +1 -1
  261. package/dist/hosts/pi/query-result.js +1 -1
  262. package/dist/hosts/pi/resume-capability.d.ts +41 -0
  263. package/dist/hosts/pi/resume-capability.js +33 -0
  264. package/dist/hosts/pi/rpc.d.ts +182 -134
  265. package/dist/hosts/pi/rpc.js +230 -37
  266. package/dist/hosts/pilot.d.ts +97 -74
  267. package/dist/hosts/pilot.js +5 -1
  268. package/dist/hosts/version.d.ts +3 -0
  269. package/dist/hosts/version.js +18 -0
  270. package/dist/index.d.ts +0 -1
  271. package/dist/index.js +0 -1
  272. package/dist/infra/bounded-file.d.ts +19 -0
  273. package/dist/infra/bounded-file.js +66 -0
  274. package/dist/infra/fs.js +10 -2
  275. package/dist/infra/git.d.ts +29 -0
  276. package/dist/infra/git.js +45 -9
  277. package/dist/infra/json-property.d.ts +2 -0
  278. package/dist/infra/json-property.js +69 -0
  279. package/dist/infra/json.d.ts +4 -0
  280. package/dist/infra/json.js +24 -0
  281. package/dist/infra/owned-process-group.js +1 -1
  282. package/dist/infra/private-lock.d.ts +16 -0
  283. package/dist/infra/private-lock.js +148 -0
  284. package/dist/infra/private-state.d.ts +7 -0
  285. package/dist/infra/private-state.js +146 -0
  286. package/dist/infra/process-identity.d.ts +12 -0
  287. package/dist/infra/process-identity.js +142 -0
  288. package/dist/infra/validation.d.ts +5 -0
  289. package/dist/infra/validation.js +15 -0
  290. package/dist/init.d.ts +1 -0
  291. package/dist/init.js +6 -0
  292. package/dist/install/apply.d.ts +9 -1
  293. package/dist/install/apply.js +176 -12
  294. package/dist/install/dependencies.d.ts +38 -0
  295. package/dist/install/dependencies.js +282 -0
  296. package/dist/install/ownership.js +30 -1
  297. package/dist/install/references.d.ts +31 -0
  298. package/dist/install/references.js +208 -0
  299. package/dist/install/repair.d.ts +37 -0
  300. package/dist/install/repair.js +798 -0
  301. package/dist/install/reset-local.d.ts +16 -0
  302. package/dist/install/reset-local.js +304 -0
  303. package/dist/install/rollback.d.ts +3 -0
  304. package/dist/install/rollback.js +9 -3
  305. package/dist/install/runtime.d.ts +10 -6
  306. package/dist/install/runtime.js +299 -59
  307. package/dist/install/source-fingerprint.d.ts +2 -0
  308. package/dist/install/source-fingerprint.js +103 -0
  309. package/dist/knowledge/catalog.d.ts +1 -0
  310. package/dist/knowledge/catalog.js +143 -10
  311. package/dist/knowledge/journal.js +17 -7
  312. package/dist/knowledge/paths.js +2 -1
  313. package/dist/knowledge/refs.js +4 -0
  314. package/dist/knowledge/register-batch.d.ts +4 -0
  315. package/dist/knowledge/register-batch.js +225 -0
  316. package/dist/knowledge/relocate.d.ts +5 -0
  317. package/dist/knowledge/relocate.js +92 -0
  318. package/dist/knowledge/scan.js +103 -47
  319. package/dist/knowledge/service.d.ts +3 -0
  320. package/dist/knowledge/service.js +33 -1
  321. package/dist/knowledge/write.d.ts +4 -1
  322. package/dist/knowledge/write.js +1 -1
  323. package/dist/mcp/server.d.ts +4 -2
  324. package/dist/mcp/server.js +87 -136
  325. package/dist/schemas/collaboration-state-validation.d.ts +6 -0
  326. package/dist/schemas/collaboration-state-validation.js +342 -0
  327. package/dist/schemas/collaboration-state.d.ts +436 -0
  328. package/dist/schemas/collaboration-state.js +1 -0
  329. package/dist/schemas/collaboration.d.ts +335 -0
  330. package/dist/schemas/collaboration.js +272 -0
  331. package/dist/schemas/continuity.d.ts +8 -0
  332. package/dist/schemas/continuity.js +13 -3
  333. package/dist/schemas/doctor.d.ts +1 -0
  334. package/dist/schemas/doctor.js +1 -0
  335. package/dist/schemas/document.d.ts +61 -0
  336. package/dist/schemas/document.js +9 -0
  337. package/dist/schemas/errors.d.ts +1 -0
  338. package/dist/schemas/errors.js +1 -0
  339. package/dist/schemas/host.d.ts +24 -0
  340. package/dist/schemas/host.js +19 -0
  341. package/dist/schemas/install.d.ts +8 -2
  342. package/dist/schemas/install.js +11 -1
  343. package/dist/schemas/managed-pi-execution.d.ts +16 -0
  344. package/dist/schemas/managed-pi-execution.js +2 -0
  345. package/dist/schemas/outcome.d.ts +9 -5
  346. package/dist/workspace/config-file.js +1 -3
  347. package/dist/workspace/documents.js +12 -2
  348. package/dist/workspace/repositories.d.ts +7 -0
  349. package/dist/workspace/repositories.js +14 -5
  350. package/package.json +35 -35
  351. package/skills/pappra/SKILL.md +28 -7
  352. package/skills/pappra/references/collaboration.md +633 -0
  353. package/skills/pappra/references/environment.md +360 -0
  354. package/skills/pappra/references/hosts.md +20 -0
  355. package/skills/pappra/references/operations.md +36 -5
  356. package/dist/app/collab-from.d.ts +0 -35
  357. package/dist/app/collab-from.js +0 -84
@@ -0,0 +1,34 @@
1
+ import { type Check } from '../collab/preflight.js';
2
+ /**
3
+ * Public, read-only readiness preflight over the existing collaboration
4
+ * primitive. This module only reads the two configuration files and lets the
5
+ * primitive inspect pinned inputs/evidence; it never launches, claims, mutates a
6
+ * task record, emits input bodies, or refreshes evidence.
7
+ */
8
+ export declare const COLLAB_PREFLIGHT_SCHEMA = "pappra/collaboration-preflight/1";
9
+ export type CollabPreflightStatus = 'ready' | 'needs_input' | 'invalid';
10
+ export interface CollabPreflightReport {
11
+ readonly schema: typeof COLLAB_PREFLIGHT_SCHEMA;
12
+ readonly ok: boolean;
13
+ readonly status: CollabPreflightStatus;
14
+ readonly task_id?: string;
15
+ readonly assignment_id?: string;
16
+ readonly attempt?: number;
17
+ readonly checked_at?: string;
18
+ readonly errors: readonly string[];
19
+ readonly blockers: readonly Check[];
20
+ readonly warnings: readonly Check[];
21
+ readonly limits: readonly string[];
22
+ }
23
+ export interface CollabPreflightOptions {
24
+ readonly assignmentFile: string;
25
+ readonly capabilitiesFile: string;
26
+ readonly maxAgeMinutes?: number;
27
+ readonly now?: number;
28
+ }
29
+ /**
30
+ * Runs the existing preflight primitive against caller-supplied absolute files.
31
+ * The result preserves the primitive's status, blockers, warnings and limits;
32
+ * `ok` is true only for `ready`. This is reported readiness, not authorization.
33
+ */
34
+ export declare function runCollaborationPreflight(options: CollabPreflightOptions): CollabPreflightReport;
@@ -0,0 +1,96 @@
1
+ import { preflight } from '../collab/preflight.js';
2
+ import { readBoundedFile } from './bounded-file.js';
3
+ /**
4
+ * Public, read-only readiness preflight over the existing collaboration
5
+ * primitive. This module only reads the two configuration files and lets the
6
+ * primitive inspect pinned inputs/evidence; it never launches, claims, mutates a
7
+ * task record, emits input bodies, or refreshes evidence.
8
+ */
9
+ export const COLLAB_PREFLIGHT_SCHEMA = 'pappra/collaboration-preflight/1';
10
+ const MAX_FILE_BYTES = 1024 * 1024;
11
+ function invalidReport(errors) {
12
+ return {
13
+ schema: COLLAB_PREFLIGHT_SCHEMA,
14
+ ok: false,
15
+ status: 'invalid',
16
+ errors,
17
+ blockers: [],
18
+ warnings: [],
19
+ limits: [],
20
+ };
21
+ }
22
+ /**
23
+ * Reads one bounded regular JSON file through the shared bounded loader, which
24
+ * refuses special entries from the initial observation and keeps the open
25
+ * itself nonblocking/no-follow.
26
+ */
27
+ function readBoundedJson(file, label) {
28
+ const read = readBoundedFile(file, MAX_FILE_BYTES);
29
+ if (!read.ok) {
30
+ const name = label.toLowerCase();
31
+ switch (read.code) {
32
+ case 'path_not_absolute':
33
+ return { ok: false, message: `${label} path must be absolute.` };
34
+ case 'symlink':
35
+ return {
36
+ ok: false,
37
+ message: `${label} must be a regular file, not a symlink.`,
38
+ };
39
+ case 'too_large':
40
+ return {
41
+ ok: false,
42
+ message: `${label} exceeds the ${MAX_FILE_BYTES}-byte limit.`,
43
+ };
44
+ case 'not_regular':
45
+ return { ok: false, message: `${label} must be a regular file.` };
46
+ default:
47
+ return { ok: false, message: `Cannot read ${name} file.` };
48
+ }
49
+ }
50
+ try {
51
+ return { ok: true, value: JSON.parse(read.text) };
52
+ }
53
+ catch {
54
+ return { ok: false, message: `${label} is not valid JSON.` };
55
+ }
56
+ }
57
+ /**
58
+ * Runs the existing preflight primitive against caller-supplied absolute files.
59
+ * The result preserves the primitive's status, blockers, warnings and limits;
60
+ * `ok` is true only for `ready`. This is reported readiness, not authorization.
61
+ */
62
+ export function runCollaborationPreflight(options) {
63
+ const maxAge = options.maxAgeMinutes ?? 30;
64
+ if (!Number.isFinite(maxAge) || maxAge <= 0) {
65
+ return invalidReport(['Maximum age must be a positive finite number.']);
66
+ }
67
+ const assignment = readBoundedJson(options.assignmentFile, 'Assignment');
68
+ if (!assignment.ok)
69
+ return invalidReport([assignment.message]);
70
+ const capabilities = readBoundedJson(options.capabilitiesFile, 'Capabilities');
71
+ if (!capabilities.ok)
72
+ return invalidReport([capabilities.message]);
73
+ const result = preflight(assignment.value, capabilities.value, {
74
+ now: options.now ?? Date.now(),
75
+ maxAgeMinutes: maxAge,
76
+ });
77
+ const hasTask = 'task_id' in result;
78
+ const status = result.status;
79
+ return {
80
+ schema: COLLAB_PREFLIGHT_SCHEMA,
81
+ ok: status === 'ready',
82
+ status,
83
+ ...(hasTask
84
+ ? {
85
+ task_id: result.task_id,
86
+ assignment_id: result.assignment_id,
87
+ attempt: result.attempt,
88
+ checked_at: result.checked_at,
89
+ }
90
+ : {}),
91
+ errors: result.errors,
92
+ blockers: result.blockers,
93
+ warnings: result.warnings,
94
+ limits: 'limits' in result ? result.limits : [],
95
+ };
96
+ }
@@ -0,0 +1,161 @@
1
+ import { type RecoveryAction, type RecoveryPolicy } from './collab-recovery-projection.js';
2
+ import type { Identity } from '../collab/types.js';
3
+ import { type CommandRunner, type HerdrTransport } from './collab-notify.js';
4
+ export declare const COLLAB_RECOVERY_EXECUTOR_SCHEMA: 'pappra/collab-recovery-executor/1';
5
+ export type RecoveryExecutionMode = 'plan' | 'apply';
6
+ /** A continuation target is an already-authorised, verified existing session; never a fresh process. */
7
+ export interface RecoveryContinuationTarget {
8
+ readonly agent_id: string;
9
+ readonly session_id: string;
10
+ readonly harness: string | null;
11
+ readonly pane_id: string | null;
12
+ }
13
+ /** The admitted task participant a dispatch is bound to; verified against the live Herdr participant. */
14
+ export interface RecoveryBindingParticipant {
15
+ readonly agent: string;
16
+ readonly session_id: string;
17
+ readonly cwd: string | null;
18
+ readonly pane_id: string | null;
19
+ readonly harness: string | null;
20
+ }
21
+ export interface RecoveryTaskBinding {
22
+ readonly digest: string;
23
+ readonly participant: RecoveryBindingParticipant;
24
+ }
25
+ export interface RecoveryExpectedSession {
26
+ readonly session_id: string;
27
+ readonly cwd: string | null;
28
+ /** Digest of the canonical task-local binding file, not a caller-created participant hash. */
29
+ readonly binding_digest: string | null;
30
+ readonly target_agent?: string | null;
31
+ readonly pane_id?: string | null;
32
+ readonly harness?: string | null;
33
+ /** Absolute path to the bounded, task-local pappra/collab-binding/1 file. */
34
+ readonly binding_ref?: string | null;
35
+ /** Populated only from the file whose digest and task identity were verified. */
36
+ readonly binding?: RecoveryTaskBinding | null;
37
+ }
38
+ export type RecoveryCauseReason = 'resume_unfinished' | 'progress_review';
39
+ /**
40
+ * The durable, canonical cause a recovery wake is issued for. The reservation key derives from the cause
41
+ * identity (task/actor/role/attempt/input/epoch + admitted answer/report identity), NOT from the caller
42
+ * request id — a different request id for the same cause must not create a second right to send.
43
+ */
44
+ export interface RecoveryCause {
45
+ readonly reason: RecoveryCauseReason;
46
+ readonly task_id: string | null;
47
+ readonly role: RecoveryPolicy['role'];
48
+ readonly actor: {
49
+ readonly agent_id: string;
50
+ readonly session_id: string;
51
+ };
52
+ readonly action_key: string;
53
+ readonly subtask_id: string | null;
54
+ readonly attempt: number | null;
55
+ readonly input_revision: string | null;
56
+ readonly report_digest: string | null;
57
+ readonly owner_epoch: number;
58
+ /** Correlates callers only; it is not part of the dedup key. */
59
+ readonly request_id: string;
60
+ readonly is_recovery_wake: true;
61
+ }
62
+ export type RecoveryControllerKind = 'continue' | 'review';
63
+ export interface RecoveryControllerRequest {
64
+ readonly kind: RecoveryControllerKind;
65
+ readonly taskRoot: string;
66
+ readonly target: RecoveryContinuationTarget;
67
+ readonly expected: RecoveryExpectedSession | null;
68
+ readonly cause: RecoveryCause;
69
+ /** A recovery wake message, deliberately distinguishable from a fresh coordinator instruction. */
70
+ readonly text: string;
71
+ /**
72
+ * Re-checks current task authority AFTER the controller's awaited live lookup and immediately before the
73
+ * prompt, closing the lookup-to-send gap. A `false` result must stop the controller before any effect.
74
+ */
75
+ readonly confirmAuthority?: () => Promise<boolean>;
76
+ }
77
+ export type RecoveryControllerDisposition = 'submitted' | 'deferred' | 'refused' | 'unknown' | 'failed' | 'unavailable';
78
+ /**
79
+ * Honest effect observation.
80
+ * - `none`: the controller has supported evidence that NO effect was issued (safe to retry).
81
+ * - `queued`: a submission/queue acceptance only — never consumption or completion; stop.
82
+ * - `applied`: a supported positive acknowledgement (still not task completion); stop.
83
+ * - `unknown`: a possible/ambiguous effect (a throw, a post-submit failure) — stop, never retry.
84
+ */
85
+ export type RecoveryEffectObservation = 'queued' | 'applied' | 'none' | 'unknown';
86
+ export interface RecoveryControllerResult {
87
+ readonly disposition: RecoveryControllerDisposition;
88
+ readonly detail: string | null;
89
+ readonly observation: RecoveryEffectObservation;
90
+ }
91
+ /**
92
+ * The only component permitted to touch a live host. Injected by the CLI/host controller (real Herdr
93
+ * transport with exact live-target verification) or by tests. A thrown controller is treated as a possible
94
+ * effect (observation `unknown`), never retried.
95
+ */
96
+ export interface RecoveryController {
97
+ readonly id: string;
98
+ perform(request: RecoveryControllerRequest): Promise<RecoveryControllerResult>;
99
+ }
100
+ export interface RecoveryExecutionRequest {
101
+ readonly taskRoot: string;
102
+ readonly planFile: string;
103
+ readonly self: Identity;
104
+ readonly policy: RecoveryPolicy;
105
+ /** Stable caller correlation id; it does not widen the durable cause dedup. */
106
+ readonly requestId: string;
107
+ readonly mode: RecoveryExecutionMode;
108
+ readonly expectedSession?: RecoveryExpectedSession | null;
109
+ readonly maxRetries?: number;
110
+ }
111
+ export interface RecoveryExecutionDeps {
112
+ readonly controller: RecoveryController;
113
+ readonly now?: () => number;
114
+ /** Bounded backoff sleeper; defaults to a real timer. Tests inject a synchronous stub. */
115
+ readonly sleep?: (ms: number) => Promise<void>;
116
+ }
117
+ export type RecoveryExecutionStatus = 'planned' | 'applied' | 'noop' | 'blocked' | 'deferred' | 'unknown' | 'refused';
118
+ export interface ReservationView {
119
+ readonly key: string;
120
+ readonly path: string;
121
+ readonly created: boolean;
122
+ readonly outcome: string | null;
123
+ }
124
+ export interface RecoveryExecutionResult {
125
+ readonly schema: typeof COLLAB_RECOVERY_EXECUTOR_SCHEMA;
126
+ readonly ok: boolean;
127
+ readonly status: RecoveryExecutionStatus;
128
+ readonly action: RecoveryAction | null;
129
+ readonly cause: RecoveryCause | null;
130
+ readonly reservation: ReservationView | null;
131
+ readonly performed: RecoveryControllerResult | null;
132
+ readonly retries: number;
133
+ readonly notes: readonly string[];
134
+ readonly limits: readonly string[];
135
+ }
136
+ /**
137
+ * Execute one durable, idempotent recovery step. `plan` validates and reports the intended action with
138
+ * zero effect; `apply` reserves atomically by canonical cause through no-follow inode-anchored sidecars
139
+ * before issuing a single supported continuation/review wake through the injected (exact live-target
140
+ * verifying) controller. Authority, namespace, sidecar anchors and the live target are re-validated before
141
+ * every attempt and again inside the controller after its live lookup; only explicit known no-effect
142
+ * failures retry within a bounded budget, and a possible/ambiguous effect stops as unknown. Persistence
143
+ * failures become structured outcomes and never throw out of the host callback.
144
+ */
145
+ export declare function executeRecovery(request: RecoveryExecutionRequest, deps: RecoveryExecutionDeps): Promise<RecoveryExecutionResult>;
146
+ /**
147
+ * Concrete controller for one visible Herdr target. Apply requires a complete native identity and a bounded,
148
+ * digest-pinned task-local binding that admits the acting participant and target. The live session identity,
149
+ * cwd, pane and harness must all match exactly. Task authority and the binding are re-read after the awaited
150
+ * live lookup and immediately before the prompt. It never spawns a process.
151
+ */
152
+ export declare function herdrRecoveryController(transport: HerdrTransport, target: {
153
+ readonly agent: string;
154
+ }): RecoveryController;
155
+ /** Build a Herdr-backed recovery controller from the ambient environment and a target agent. */
156
+ export declare function createHerdrRecoveryController(options: {
157
+ readonly env?: NodeJS.ProcessEnv;
158
+ readonly run?: CommandRunner;
159
+ }, target: {
160
+ readonly agent: string;
161
+ }): RecoveryController;