@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,69 @@
1
+ import type { Assignment, Capability, CapabilityCard } from '../../collab/contracts.js';
2
+ export declare const MAX_NATIVE_EVIDENCE_BYTES: number;
3
+ export declare const MAX_ASSIGNMENT_BYTES: number;
4
+ export declare const MAX_EVENTS = 20000;
5
+ export declare class EvidenceError extends Error {
6
+ readonly code: string;
7
+ constructor(code: string);
8
+ }
9
+ export declare function fail(code: string): never;
10
+ export interface EvidenceFile {
11
+ readonly bytes: Buffer;
12
+ readonly text: string;
13
+ readonly digest: string;
14
+ }
15
+ /**
16
+ * Read one native evidence file. The bounded loader refuses final symlinks and
17
+ * special entries without blocking and enforces descriptor-level type and size.
18
+ */
19
+ export declare function readNativeEvidence(file: string): EvidenceFile;
20
+ export declare function parseExecution(text: string): Record<string, unknown>;
21
+ export declare function record(value: unknown): value is Record<string, unknown>;
22
+ export declare function digestOf(bytes: Buffer): string;
23
+ export declare function evidenceRecords(evidenceFile: EvidenceFile, evidenceRef: string, executionFile: EvidenceFile, executionRef: string): {
24
+ ref: string;
25
+ digest: string;
26
+ }[];
27
+ export declare function isTimestamp(value: unknown): boolean;
28
+ /**
29
+ * Interpret one recorded Pi timestamp. A message-level value is numeric Unix
30
+ * milliseconds; a record-level value is an explicit-zone ISO string. Numeric
31
+ * strings are not accepted as a substitute for either form.
32
+ */
33
+ export declare function piTimestamp(value: unknown): number | null;
34
+ export declare function samePath(left: unknown, right: unknown): boolean;
35
+ export declare function realPath(value: string): string;
36
+ export declare function argumentStrings(value: unknown, found?: string[]): string[];
37
+ export declare function payloadStrings(item: unknown): string[];
38
+ /** Assert the template still claims exactly the assignment's assignee identity. */
39
+ export declare function assertTemplateIdentity(assignment: Assignment, template: CapabilityCard, harness: string): void;
40
+ export interface SkillSnapshot {
41
+ readonly entry: string;
42
+ readonly directory: string;
43
+ readonly bundleDigest: string;
44
+ }
45
+ /**
46
+ * Reproduce the maintained fingerprint check: the template's pinned digest must
47
+ * still describe the selected skill before evidence can promote it.
48
+ */
49
+ export declare function fingerprintTemplateSkill(skill: Capability): SkillSnapshot;
50
+ export type CapabilityDerivation = {
51
+ readonly status: 'derived';
52
+ readonly card: CapabilityCard;
53
+ readonly limitations?: readonly string[];
54
+ } | {
55
+ readonly status: 'needs_input';
56
+ readonly blockers: readonly string[];
57
+ } | {
58
+ readonly status: 'invalid';
59
+ readonly blockers: readonly string[];
60
+ };
61
+ /**
62
+ * Validate the pinned contract/template and translate adapter failures into the
63
+ * maintained outcome shapes. A derived card remains a claim derived from the
64
+ * supplied evidence; nothing here authenticates, launches or dispatches.
65
+ */
66
+ export declare function deriveOutcome(assignment: Assignment, template: CapabilityCard, work: () => {
67
+ readonly card: CapabilityCard;
68
+ readonly limitations?: readonly string[];
69
+ }): CapabilityDerivation;
@@ -0,0 +1,195 @@
1
+ import crypto from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fingerprintSkill } from '../../collab/fingerprint.js';
5
+ import { validateContractAndCard } from '../../collab/preflight.js';
6
+ import { readBoundedFile } from '../bounded-file.js';
7
+ export const MAX_NATIVE_EVIDENCE_BYTES = 16 * 1024 * 1024;
8
+ export const MAX_ASSIGNMENT_BYTES = 1024 * 1024;
9
+ export const MAX_EVENTS = 20000;
10
+ export class EvidenceError extends Error {
11
+ code;
12
+ constructor(code) {
13
+ super(code);
14
+ this.code = code;
15
+ this.name = 'EvidenceError';
16
+ }
17
+ }
18
+ export function fail(code) {
19
+ throw new EvidenceError(code);
20
+ }
21
+ /**
22
+ * Read one native evidence file. The bounded loader refuses final symlinks and
23
+ * special entries without blocking and enforces descriptor-level type and size.
24
+ */
25
+ export function readNativeEvidence(file) {
26
+ const read = readBoundedFile(file, MAX_NATIVE_EVIDENCE_BYTES);
27
+ if (!read.ok) {
28
+ switch (read.code) {
29
+ case 'path_not_absolute':
30
+ return fail('evidence_path_must_be_absolute');
31
+ case 'unreadable':
32
+ return fail('native_evidence_unavailable');
33
+ default:
34
+ return fail('unsupported_evidence_file');
35
+ }
36
+ }
37
+ return { bytes: read.bytes, text: read.text, digest: read.digest };
38
+ }
39
+ export function parseExecution(text) {
40
+ try {
41
+ const value = JSON.parse(text);
42
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
43
+ return fail('invalid_native_json');
44
+ }
45
+ return value;
46
+ }
47
+ catch {
48
+ return fail('invalid_native_json');
49
+ }
50
+ }
51
+ export function record(value) {
52
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
53
+ }
54
+ export function digestOf(bytes) {
55
+ return `sha256:${crypto.createHash('sha256').update(bytes).digest('hex')}`;
56
+ }
57
+ export function evidenceRecords(evidenceFile, evidenceRef, executionFile, executionRef) {
58
+ return [
59
+ { ref: evidenceRef, digest: evidenceFile.digest },
60
+ { ref: executionRef, digest: executionFile.digest },
61
+ ];
62
+ }
63
+ export function isTimestamp(value) {
64
+ return (typeof value === 'string' &&
65
+ /(?:Z|[+-]\d\d:\d\d)$/.test(value) &&
66
+ Number.isFinite(Date.parse(value)));
67
+ }
68
+ const DATE_MS_LIMIT = 8.64e15;
69
+ /**
70
+ * Interpret one recorded Pi timestamp. A message-level value is numeric Unix
71
+ * milliseconds; a record-level value is an explicit-zone ISO string. Numeric
72
+ * strings are not accepted as a substitute for either form.
73
+ */
74
+ export function piTimestamp(value) {
75
+ if (typeof value === 'number') {
76
+ return Number.isFinite(value) && Math.abs(value) <= DATE_MS_LIMIT
77
+ ? value
78
+ : null;
79
+ }
80
+ if (typeof value === 'string' && /(?:Z|[+-]\d\d:\d\d)$/.test(value)) {
81
+ const parsed = Date.parse(value);
82
+ return Number.isFinite(parsed) ? parsed : null;
83
+ }
84
+ return null;
85
+ }
86
+ export function samePath(left, right) {
87
+ if (typeof left !== 'string' || typeof right !== 'string')
88
+ return false;
89
+ try {
90
+ return fs.realpathSync(left) === fs.realpathSync(right);
91
+ }
92
+ catch {
93
+ return false;
94
+ }
95
+ }
96
+ export function realPath(value) {
97
+ try {
98
+ return fs.realpathSync(value);
99
+ }
100
+ catch {
101
+ return fail('native_evidence_unavailable');
102
+ }
103
+ }
104
+ export function argumentStrings(value, found = []) {
105
+ if (typeof value === 'string') {
106
+ if (value.includes('/') || value.toLowerCase().endsWith('.md'))
107
+ found.push(value);
108
+ return found;
109
+ }
110
+ if (Array.isArray(value)) {
111
+ for (const item of value)
112
+ argumentStrings(item, found);
113
+ return found;
114
+ }
115
+ if (record(value)) {
116
+ for (const item of Object.values(value))
117
+ argumentStrings(item, found);
118
+ }
119
+ return found;
120
+ }
121
+ export function payloadStrings(item) {
122
+ const found = [];
123
+ const visit = (value) => {
124
+ if (typeof value === 'string')
125
+ found.push(value);
126
+ else if (Array.isArray(value))
127
+ value.forEach(visit);
128
+ else if (record(value))
129
+ Object.values(value).forEach(visit);
130
+ };
131
+ visit(item);
132
+ return found;
133
+ }
134
+ /** Assert the template still claims exactly the assignment's assignee identity. */
135
+ export function assertTemplateIdentity(assignment, template, harness) {
136
+ if (assignment.assignee.harness !== harness)
137
+ fail('unsupported_harness');
138
+ for (const key of [
139
+ 'agent_id',
140
+ 'session_id',
141
+ 'harness',
142
+ 'surface',
143
+ 'configuration_id',
144
+ ]) {
145
+ if (template[key] !== assignment.assignee[key])
146
+ fail('template_identity_mismatch');
147
+ }
148
+ if (!samePath(template.cwd, assignment.assignee.cwd))
149
+ fail('template_cwd_mismatch');
150
+ }
151
+ /**
152
+ * Reproduce the maintained fingerprint check: the template's pinned digest must
153
+ * still describe the selected skill before evidence can promote it.
154
+ */
155
+ export function fingerprintTemplateSkill(skill) {
156
+ if (typeof skill.path !== 'string')
157
+ fail('skill_path_missing');
158
+ const snapshot = fingerprintSkill(skill.path);
159
+ if (snapshot.bundle_digest !== skill.bundle_digest)
160
+ fail('skill_files_changed');
161
+ return {
162
+ entry: snapshot.path,
163
+ directory: path.dirname(snapshot.path),
164
+ bundleDigest: snapshot.bundle_digest,
165
+ };
166
+ }
167
+ function errorCode(error) {
168
+ if (error instanceof EvidenceError)
169
+ return error.code;
170
+ const message = error instanceof Error ? error.message : String(error);
171
+ if (/^[a-z_]+$/.test(message))
172
+ return message;
173
+ if (/^unsupported_row_types/.test(message))
174
+ return message;
175
+ return 'native_evidence_unavailable';
176
+ }
177
+ /**
178
+ * Validate the pinned contract/template and translate adapter failures into the
179
+ * maintained outcome shapes. A derived card remains a claim derived from the
180
+ * supplied evidence; nothing here authenticates, launches or dispatches.
181
+ */
182
+ export function deriveOutcome(assignment, template, work) {
183
+ try {
184
+ validateContractAndCard(assignment, template);
185
+ }
186
+ catch {
187
+ return { status: 'invalid', blockers: ['invalid_contract_or_template'] };
188
+ }
189
+ try {
190
+ return { status: 'derived', ...work() };
191
+ }
192
+ catch (error) {
193
+ return { status: 'needs_input', blockers: [errorCode(error)] };
194
+ }
195
+ }
@@ -0,0 +1,55 @@
1
+ import type { RolloverInventory } from '../collab/rollover.js';
2
+ import { type SaveCheckpointInput, type HandoffSourceNativeSession } from '../continuity/index.js';
3
+ import type { ManagedPiReadinessConfig } from './managed-pi-readiness.js';
4
+ import { type SessionTransitionDependencies, type SessionTransitionReport, type SessionTransitionRequest } from './collab-session-transition.js';
5
+ export declare const AUTO_HANDOFF_SCHEMA = "pappra/automatic-handoff/1";
6
+ export interface AutomaticHandoffConfig {
7
+ readonly schema: typeof AUTO_HANDOFF_SCHEMA;
8
+ readonly id: string;
9
+ readonly thresholdPercent: number;
10
+ readonly workspaceRoot: string;
11
+ readonly checkpoint: SaveCheckpointInput & {
12
+ readonly objective: string;
13
+ readonly acceptance: readonly string[];
14
+ };
15
+ readonly bundleId: string;
16
+ readonly nextAction: string;
17
+ /** Approved output locations for this source's independently observed admission. */
18
+ readonly sourceReadiness?: ManagedPiReadinessConfig;
19
+ readonly transition: Omit<SessionTransitionRequest, 'bundle'>;
20
+ }
21
+ /** Provided by an owned runtime, never deserialized from a claimed proof file. */
22
+ export interface AutomaticHandoffRuntime {
23
+ /** Native eligibility is checked before reserving a provider call or fencing input. */
24
+ canCaptureSummary?(): boolean;
25
+ /** Trusted app callback; refreshes only the source capability pin after native compaction. */
26
+ prepareBootstrapAdmission?(original: {
27
+ readonly ref: string;
28
+ readonly digest: string;
29
+ }): Promise<{
30
+ readonly ref: string;
31
+ readonly digest: string;
32
+ }>;
33
+ observe(): {
34
+ readonly native: HandoffSourceNativeSession;
35
+ readonly cwd: string;
36
+ readonly contextPercent: number | null;
37
+ };
38
+ /** Real native model summary; an absent/failed summary must never be filled in. */
39
+ captureSummary(causeId: string): Promise<{
40
+ readonly summary: string;
41
+ readonly complete: boolean;
42
+ readonly sessionFile?: string | null;
43
+ }>;
44
+ inventory(): Promise<RolloverInventory>;
45
+ }
46
+ export interface AutomaticHandoffResult {
47
+ readonly schema: typeof AUTO_HANDOFF_SCHEMA;
48
+ readonly status: 'below-threshold' | 'waiting' | 'progressed' | 'complete' | 'blocked' | 'reconcile_required';
49
+ readonly code: string | null;
50
+ readonly transition: SessionTransitionReport | null;
51
+ /** Exact revalidated request used for the guarded transition, including admitted evidence. */
52
+ readonly request?: SessionTransitionRequest;
53
+ }
54
+ /** One supported event advances one bounded transition. Existing transition effects remain authoritative. */
55
+ export declare function tickAutomaticHandoff(config: AutomaticHandoffConfig, runtime: AutomaticHandoffRuntime, dependencies?: SessionTransitionDependencies): Promise<AutomaticHandoffResult>;