@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
@@ -26,8 +26,13 @@ export declare function readClaudeSessionId(file: string): string | null;
26
26
  export declare function readPiSessionId(file: string): string | null;
27
27
  export declare function runNativePilot({ harness, profile, cwd, promptFile, evidenceDir, sessionId, resume, timeoutMs, maxBudgetUsd, outputName, phase, trustProject, extraDirs, clock, assignmentFile, capabilitiesFile, taskRoot, maxAgeMinutes, launchKind, discovery, }: PilotOptions): Promise<{
28
28
  reservation?: never;
29
+ settlement?: never;
30
+ reservation_id?: never;
29
31
  refused: boolean;
30
32
  admission: {
33
+ detail?: never;
34
+ state?: never;
35
+ state_revision?: never;
31
36
  ok: false;
32
37
  reason: string;
33
38
  checks: Record<string, unknown>[];
@@ -36,10 +41,6 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
36
41
  required_skills?: never;
37
42
  required_tools?: never;
38
43
  preflight?: never;
39
- state?: never;
40
- detail?: never;
41
- state_revision?: never;
42
- owner_epoch?: never;
43
44
  attempt_state?: never;
44
45
  resources?: never;
45
46
  mode?: never;
@@ -50,19 +51,19 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
50
51
  capability_evidence?: never;
51
52
  assignment_digest?: never;
52
53
  input_revision?: never;
54
+ owner_epoch?: never;
53
55
  } | {
56
+ detail?: never;
57
+ expected?: never;
58
+ state?: never;
59
+ state_revision?: never;
54
60
  ok: false;
55
61
  reason: string;
56
62
  checks: Record<string, unknown>[];
57
- detail: string;
63
+ actual: string;
58
64
  required_skills?: never;
59
65
  required_tools?: never;
60
66
  preflight?: never;
61
- state?: never;
62
- expected?: never;
63
- actual?: never;
64
- state_revision?: never;
65
- owner_epoch?: never;
66
67
  attempt_state?: never;
67
68
  resources?: never;
68
69
  mode?: never;
@@ -73,19 +74,42 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
73
74
  capability_evidence?: never;
74
75
  assignment_digest?: never;
75
76
  input_revision?: never;
77
+ owner_epoch?: never;
76
78
  } | {
79
+ expected?: never;
80
+ actual?: never;
81
+ state?: never;
82
+ state_revision?: never;
77
83
  ok: false;
78
84
  reason: string;
79
85
  checks: Record<string, unknown>[];
86
+ detail: string;
80
87
  required_skills?: never;
81
88
  required_tools?: never;
82
89
  preflight?: never;
83
- state?: never;
90
+ attempt_state?: never;
91
+ resources?: never;
92
+ mode?: never;
93
+ launch_kind?: never;
94
+ resume_selector?: never;
95
+ pre_bound_identity?: never;
96
+ expected_identity?: never;
97
+ capability_evidence?: never;
98
+ assignment_digest?: never;
99
+ input_revision?: never;
100
+ owner_epoch?: never;
101
+ } | {
84
102
  detail?: never;
85
103
  expected?: never;
86
104
  actual?: never;
105
+ state?: never;
87
106
  state_revision?: never;
88
- owner_epoch?: never;
107
+ ok: false;
108
+ reason: string;
109
+ checks: Record<string, unknown>[];
110
+ required_skills?: never;
111
+ required_tools?: never;
112
+ preflight?: never;
89
113
  attempt_state?: never;
90
114
  resources?: never;
91
115
  mode?: never;
@@ -96,7 +120,11 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
96
120
  capability_evidence?: never;
97
121
  assignment_digest?: never;
98
122
  input_revision?: never;
123
+ owner_epoch?: never;
99
124
  } | {
125
+ detail?: never;
126
+ state?: never;
127
+ state_revision?: never;
100
128
  ok: false;
101
129
  reason: string;
102
130
  checks: Record<string, unknown>[];
@@ -105,10 +133,6 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
105
133
  required_skills?: never;
106
134
  required_tools?: never;
107
135
  preflight?: never;
108
- state?: never;
109
- detail?: never;
110
- state_revision?: never;
111
- owner_epoch?: never;
112
136
  attempt_state?: never;
113
137
  resources?: never;
114
138
  mode?: never;
@@ -119,12 +143,16 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
119
143
  capability_evidence?: never;
120
144
  assignment_digest?: never;
121
145
  input_revision?: never;
146
+ owner_epoch?: never;
122
147
  } | {
148
+ detail?: never;
149
+ state?: never;
150
+ state_revision?: never;
123
151
  ok: false;
124
152
  reason: string;
125
153
  checks: Record<string, unknown>[];
126
- expected: import("../collab/types.js").Identity;
127
- actual: import("../collab/types.js").Identity & {
154
+ expected: import("../schemas/collaboration-state.js").Identity;
155
+ actual: import("../schemas/collaboration-state.js").Identity & {
128
156
  harness: string;
129
157
  cwd: string;
130
158
  surface: string;
@@ -133,10 +161,6 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
133
161
  required_skills?: never;
134
162
  required_tools?: never;
135
163
  preflight?: never;
136
- state?: never;
137
- detail?: never;
138
- state_revision?: never;
139
- owner_epoch?: never;
140
164
  attempt_state?: never;
141
165
  resources?: never;
142
166
  mode?: never;
@@ -147,7 +171,10 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
147
171
  capability_evidence?: never;
148
172
  assignment_digest?: never;
149
173
  input_revision?: never;
174
+ owner_epoch?: never;
150
175
  } | {
176
+ state?: never;
177
+ state_revision?: never;
151
178
  ok: false;
152
179
  reason: string;
153
180
  checks: Record<string, unknown>[];
@@ -157,9 +184,6 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
157
184
  required_skills?: never;
158
185
  required_tools?: never;
159
186
  preflight?: never;
160
- state?: never;
161
- state_revision?: never;
162
- owner_epoch?: never;
163
187
  attempt_state?: never;
164
188
  resources?: never;
165
189
  mode?: never;
@@ -170,19 +194,19 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
170
194
  capability_evidence?: never;
171
195
  assignment_digest?: never;
172
196
  input_revision?: never;
197
+ owner_epoch?: never;
173
198
  } | {
199
+ detail?: never;
200
+ expected?: never;
201
+ actual?: never;
202
+ state?: never;
203
+ state_revision?: never;
174
204
  ok: false;
175
205
  reason: string;
176
206
  checks: Record<string, unknown>[];
177
207
  required_skills: number;
178
208
  required_tools: number;
179
209
  preflight?: never;
180
- state?: never;
181
- detail?: never;
182
- expected?: never;
183
- actual?: never;
184
- state_revision?: never;
185
- owner_epoch?: never;
186
210
  attempt_state?: never;
187
211
  resources?: never;
188
212
  mode?: never;
@@ -193,7 +217,13 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
193
217
  capability_evidence?: never;
194
218
  assignment_digest?: never;
195
219
  input_revision?: never;
220
+ owner_epoch?: never;
196
221
  } | {
222
+ detail?: never;
223
+ expected?: never;
224
+ actual?: never;
225
+ state?: never;
226
+ state_revision?: never;
197
227
  required_skills?: never;
198
228
  required_tools?: never;
199
229
  ok: false;
@@ -220,12 +250,6 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
220
250
  warnings: import("../collab/preflight.js").Check[];
221
251
  limits: string[];
222
252
  };
223
- state?: never;
224
- detail?: never;
225
- expected?: never;
226
- actual?: never;
227
- state_revision?: never;
228
- owner_epoch?: never;
229
253
  attempt_state?: never;
230
254
  resources?: never;
231
255
  mode?: never;
@@ -236,7 +260,12 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
236
260
  capability_evidence?: never;
237
261
  assignment_digest?: never;
238
262
  input_revision?: never;
263
+ owner_epoch?: never;
239
264
  } | {
265
+ detail?: never;
266
+ expected?: never;
267
+ actual?: never;
268
+ state_revision?: never;
240
269
  required_skills?: never;
241
270
  required_tools?: never;
242
271
  preflight?: never;
@@ -244,11 +273,6 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
244
273
  reason: string;
245
274
  checks: Record<string, unknown>[];
246
275
  state: string;
247
- detail?: never;
248
- expected?: never;
249
- actual?: never;
250
- state_revision?: never;
251
- owner_epoch?: never;
252
276
  attempt_state?: never;
253
277
  resources?: never;
254
278
  mode?: never;
@@ -259,19 +283,19 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
259
283
  capability_evidence?: never;
260
284
  assignment_digest?: never;
261
285
  input_revision?: never;
286
+ owner_epoch?: never;
262
287
  } | {
288
+ detail?: never;
289
+ state?: never;
290
+ state_revision?: never;
263
291
  required_skills?: never;
264
292
  required_tools?: never;
265
293
  preflight?: never;
266
- state?: never;
267
294
  ok: false;
268
295
  reason: string;
269
296
  checks: Record<string, unknown>[];
270
297
  expected: (string | null)[];
271
298
  actual: string;
272
- detail?: never;
273
- state_revision?: never;
274
- owner_epoch?: never;
275
299
  attempt_state?: never;
276
300
  resources?: never;
277
301
  mode?: never;
@@ -282,20 +306,20 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
282
306
  capability_evidence?: never;
283
307
  assignment_digest?: never;
284
308
  input_revision?: never;
309
+ owner_epoch?: never;
285
310
  } | {
311
+ expected?: never;
312
+ actual?: never;
313
+ state?: never;
314
+ state_revision?: never;
286
315
  required_skills?: never;
287
316
  required_tools?: never;
288
317
  preflight?: never;
289
- state?: never;
290
318
  ok: false;
291
319
  reason: string;
292
320
  checks: Record<string, unknown>[];
293
321
  resources: Record<string, unknown>[];
294
322
  detail: string;
295
- expected?: never;
296
- actual?: never;
297
- state_revision?: never;
298
- owner_epoch?: never;
299
323
  attempt_state?: never;
300
324
  mode?: never;
301
325
  launch_kind?: never;
@@ -305,20 +329,20 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
305
329
  capability_evidence?: never;
306
330
  assignment_digest?: never;
307
331
  input_revision?: never;
332
+ owner_epoch?: never;
308
333
  } | {
334
+ detail?: never;
335
+ state?: never;
336
+ state_revision?: never;
309
337
  required_skills?: never;
310
338
  required_tools?: never;
311
339
  preflight?: never;
312
- state?: never;
313
- detail?: never;
314
340
  ok: false;
315
341
  reason: string;
316
342
  checks: Record<string, unknown>[];
317
343
  resources: Record<string, unknown>[];
318
344
  expected: number | undefined;
319
345
  actual: number;
320
- state_revision?: never;
321
- owner_epoch?: never;
322
346
  attempt_state?: never;
323
347
  mode?: never;
324
348
  launch_kind?: never;
@@ -328,20 +352,20 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
328
352
  capability_evidence?: never;
329
353
  assignment_digest?: never;
330
354
  input_revision?: never;
355
+ owner_epoch?: never;
331
356
  } | {
332
- required_skills?: never;
333
- required_tools?: never;
334
- preflight?: never;
335
- state?: never;
336
357
  detail?: never;
337
358
  expected?: never;
338
359
  actual?: never;
360
+ state?: never;
361
+ state_revision?: never;
362
+ required_skills?: never;
363
+ required_tools?: never;
364
+ preflight?: never;
339
365
  ok: false;
340
366
  reason: string;
341
367
  checks: Record<string, unknown>[];
342
368
  resources: Record<string, unknown>[];
343
- state_revision?: never;
344
- owner_epoch?: never;
345
369
  attempt_state?: never;
346
370
  mode?: never;
347
371
  launch_kind?: never;
@@ -351,6 +375,7 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
351
375
  capability_evidence?: never;
352
376
  assignment_digest?: never;
353
377
  input_revision?: never;
378
+ owner_epoch?: never;
354
379
  };
355
380
  reason: string;
356
381
  process?: never;
@@ -361,19 +386,19 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
361
386
  stdoutFile?: never;
362
387
  stderrFile?: never;
363
388
  nativeEvidence?: never;
364
- reservation_id?: never;
365
- settlement?: never;
366
389
  } | {
390
+ settlement?: never;
391
+ reservation_id?: never;
367
392
  refused: boolean;
368
393
  admission: {
369
- required_skills?: never;
370
- required_tools?: never;
371
- preflight?: never;
372
- state?: never;
373
394
  detail?: never;
374
395
  expected?: never;
375
396
  actual?: never;
397
+ state?: never;
376
398
  reason?: never;
399
+ required_skills?: never;
400
+ required_tools?: never;
401
+ preflight?: never;
377
402
  ok: true;
378
403
  checks: Record<string, unknown>[];
379
404
  state_revision: number;
@@ -403,13 +428,12 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
403
428
  stdoutFile?: never;
404
429
  stderrFile?: never;
405
430
  nativeEvidence?: never;
406
- reservation_id?: never;
407
- settlement?: never;
408
431
  } | {
409
432
  reason?: never;
410
433
  reservation?: never;
411
- refused?: never;
412
434
  admission?: never;
435
+ refused?: never;
436
+ reservation_id?: never;
413
437
  execution: null;
414
438
  evidenceError: string;
415
439
  settlement: {
@@ -435,12 +459,12 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
435
459
  stdoutFile?: never;
436
460
  stderrFile?: never;
437
461
  nativeEvidence?: never;
438
- reservation_id?: never;
439
462
  } | {
440
463
  reason?: never;
441
464
  reservation?: never;
442
- refused?: never;
443
465
  admission?: never;
466
+ refused?: never;
467
+ reservation_id?: never;
444
468
  process?: never;
445
469
  execution: Record<string, unknown> | null;
446
470
  evidenceError: string;
@@ -458,12 +482,11 @@ export declare function runNativePilot({ harness, profile, cwd, promptFile, evid
458
482
  stdoutFile?: never;
459
483
  stderrFile?: never;
460
484
  nativeEvidence?: never;
461
- reservation_id?: never;
462
485
  } | {
463
486
  reason?: never;
464
487
  reservation?: never;
465
- refused?: never;
466
488
  admission?: never;
489
+ refused?: never;
467
490
  process?: never;
468
491
  evidenceError?: never;
469
492
  execution: Record<string, unknown>;
@@ -6,7 +6,7 @@ import { spawn } from 'node:child_process';
6
6
  import { admitLaunch, reserveLaunch, settleLaunch, classifyIdentity, TOOL_PROFILES, } from '../collab/admission.js';
7
7
  import { createNonce, nowIso } from '../collab/store.js';
8
8
  import { sha256File as digestFile } from '../collab/envelope.js';
9
- import { object, parseJson } from '../collab/validation.js';
9
+ import { object, parseJson } from '../infra/validation.js';
10
10
  import { isAssignment } from '../collab/contracts.js';
11
11
  const PHASES = new Set([
12
12
  'discovery',
@@ -28,6 +28,7 @@ function buildArgv({ harness, profile, cwd, prompt, sessionId, resume, maxBudget
28
28
  ...(trustProject ? ['--approve'] : []),
29
29
  resume ? '--session' : '--session-id',
30
30
  (resume ?? sessionId),
31
+ '--',
31
32
  prompt,
32
33
  ];
33
34
  return { command: 'pi', argv, session_selector: resume ?? sessionId };
@@ -46,6 +47,7 @@ function buildArgv({ harness, profile, cwd, prompt, sessionId, resume, maxBudget
46
47
  '--skip-git-repo-check',
47
48
  '-c',
48
49
  `sandbox_mode="${sandbox}"`,
50
+ '--',
49
51
  prompt,
50
52
  ]
51
53
  : [
@@ -56,6 +58,7 @@ function buildArgv({ harness, profile, cwd, prompt, sessionId, resume, maxBudget
56
58
  '-s',
57
59
  sandbox,
58
60
  '--skip-git-repo-check',
61
+ '--',
59
62
  prompt,
60
63
  ];
61
64
  return { command: 'codex', argv: base, session_selector: resume ?? null };
@@ -88,6 +91,7 @@ function buildArgv({ harness, profile, cwd, prompt, sessionId, resume, maxBudget
88
91
  String(maxBudgetUsd),
89
92
  resume ? '--resume' : '--session-id',
90
93
  (resume ?? sessionId),
94
+ '--',
91
95
  prompt,
92
96
  ];
93
97
  return { command: 'claude', argv, session_selector: resume ?? sessionId };
@@ -0,0 +1,3 @@
1
+ import type { HostName } from '../schemas/host.js';
2
+ /** Bounded executable observation only; never sends a prompt or starts a model. */
3
+ export declare function observeHostVersion(host: HostName, pathEnv: string): string | null;
@@ -0,0 +1,18 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { executableOnPath } from './detect.js';
3
+ /** Bounded executable observation only; never sends a prompt or starts a model. */
4
+ export function observeHostVersion(host, pathEnv) {
5
+ const executable = executableOnPath(host, pathEnv);
6
+ if (!executable)
7
+ return null;
8
+ const result = spawnSync(executable, ['--version'], {
9
+ encoding: 'utf8',
10
+ shell: false,
11
+ timeout: 5000,
12
+ maxBuffer: 16 * 1024,
13
+ env: { ...process.env, PATH: pathEnv },
14
+ });
15
+ if (result.error || result.status !== 0)
16
+ return null;
17
+ return (/(?:^|\s)([0-9]+\.[0-9]+\.[0-9]+)(?:\s|$)/.exec(`${result.stdout}\n${result.stderr}`)?.[1] ?? null);
18
+ }
package/dist/index.d.ts CHANGED
@@ -2,4 +2,3 @@ export { getPackageInfo, getPackageRoot } from './package-info.js';
2
2
  export type { PackageInfo } from './package-info.js';
3
3
  export { HostAdapter, HostIntegrationService, type HostIntegrationOptions, type HostTargetOptions, } from './hosts/integration/service.js';
4
4
  export { mapNativeHookEvent, runHostHook, type HostHookOptions, type NativeHookMapping, } from './hosts/integration/hook.js';
5
- export * from './app/collaboration.js';
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
1
  export { getPackageInfo, getPackageRoot } from './package-info.js';
2
2
  export { HostAdapter, HostIntegrationService, } from './hosts/integration/service.js';
3
3
  export { mapNativeHookEvent, runHostHook, } from './hosts/integration/hook.js';
4
- export * from './app/collaboration.js';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Bounded, read-only access to one explicit regular file.
3
+ *
4
+ * The pathname is observed first so obviously unsafe entries are refused without
5
+ * opening them. The open itself is nonblocking/no-follow on POSIX, so a regular
6
+ * file replaced by a FIFO or symlink between inspection and open cannot block or
7
+ * redirect the read; the descriptor is re-validated afterwards for type and size.
8
+ */
9
+ export type BoundedFileFailureCode = 'path_not_absolute' | 'symlink' | 'not_regular' | 'too_large' | 'unreadable';
10
+ export type BoundedFileResult = {
11
+ readonly ok: true;
12
+ readonly bytes: Buffer;
13
+ readonly text: string;
14
+ readonly digest: string;
15
+ } | {
16
+ readonly ok: false;
17
+ readonly code: BoundedFileFailureCode;
18
+ };
19
+ export declare function readBoundedFile(file: string, maxBytes: number): BoundedFileResult;
@@ -0,0 +1,66 @@
1
+ import crypto from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ const digestOf = (bytes) => `sha256:${crypto.createHash('sha256').update(bytes).digest('hex')}`;
5
+ const nonblockingFlag = () => process.platform === 'win32' ? 0 : (fs.constants.O_NONBLOCK ?? 0);
6
+ export function readBoundedFile(file, maxBytes) {
7
+ if (!Number.isSafeInteger(maxBytes) || maxBytes <= 0) {
8
+ throw new Error('Bounded read limit must be a positive integer.');
9
+ }
10
+ if (!path.isAbsolute(file)) {
11
+ return { ok: false, code: 'path_not_absolute' };
12
+ }
13
+ let observed;
14
+ try {
15
+ observed = fs.lstatSync(file);
16
+ }
17
+ catch {
18
+ return { ok: false, code: 'unreadable' };
19
+ }
20
+ if (observed.isSymbolicLink())
21
+ return { ok: false, code: 'symlink' };
22
+ if (!observed.isFile())
23
+ return { ok: false, code: 'not_regular' };
24
+ if (observed.size > maxBytes)
25
+ return { ok: false, code: 'too_large' };
26
+ const flags = fs.constants.O_RDONLY | (fs.constants.O_NOFOLLOW ?? 0) | nonblockingFlag();
27
+ let handle;
28
+ try {
29
+ handle = fs.openSync(file, flags);
30
+ }
31
+ catch (error) {
32
+ const code = typeof error === 'object' && error !== null && 'code' in error
33
+ ? String(error.code)
34
+ : null;
35
+ return { ok: false, code: code === 'ELOOP' ? 'symlink' : 'unreadable' };
36
+ }
37
+ try {
38
+ const stat = fs.fstatSync(handle);
39
+ if (!stat.isFile())
40
+ return { ok: false, code: 'not_regular' };
41
+ if (stat.size > maxBytes)
42
+ return { ok: false, code: 'too_large' };
43
+ // Read at most the observed size (already bounded); never read until EOF.
44
+ const bytes = Buffer.alloc(stat.size);
45
+ let total = 0;
46
+ while (total < bytes.length) {
47
+ const read = fs.readSync(handle, bytes, total, bytes.length - total, total);
48
+ if (read === 0)
49
+ break;
50
+ total += read;
51
+ }
52
+ const content = bytes.subarray(0, total);
53
+ return {
54
+ ok: true,
55
+ bytes: content,
56
+ text: content.toString('utf8'),
57
+ digest: digestOf(content),
58
+ };
59
+ }
60
+ catch {
61
+ return { ok: false, code: 'unreadable' };
62
+ }
63
+ finally {
64
+ fs.closeSync(handle);
65
+ }
66
+ }
package/dist/infra/fs.js CHANGED
@@ -51,9 +51,17 @@ export async function readFileBounded(path, maxBytes = DEFAULT_CONFIG_MAX_BYTES)
51
51
  if (!stats.isFile()) {
52
52
  return failed(diagnosticCodes.fileNotRegular, `Not a regular file: ${path}`, { nextAction: 'Replace it with a regular file.' });
53
53
  }
54
- const buffer = Buffer.allocUnsafe(maxBytes + 1);
54
+ // Size the allocation to the opened file, rather than the caller's ceiling.
55
+ // Keep one extra byte to detect overflow, including files that grow after
56
+ // fstat; a small runtime dependency must not allocate the 64 MiB ceiling.
57
+ let buffer = Buffer.allocUnsafe(Math.min(stats.size, maxBytes) + 1);
55
58
  let total = 0;
56
- while (total < buffer.length) {
59
+ while (total <= maxBytes) {
60
+ if (total === buffer.length) {
61
+ const grown = Buffer.allocUnsafe(Math.min(maxBytes + 1, Math.max(4096, buffer.length * 2)));
62
+ buffer.copy(grown, 0, 0, total);
63
+ buffer = grown;
64
+ }
57
65
  const { bytesRead } = await handle.read(buffer, total, buffer.length - total, null);
58
66
  if (bytesRead === 0)
59
67
  break;
@@ -45,6 +45,12 @@ export interface InspectGitRepositoryOptions {
45
45
  readonly timeoutMs?: number;
46
46
  readonly maxOutputBytes?: number;
47
47
  readonly signal?: AbortSignal;
48
+ /**
49
+ * Set to `false` when the caller derives working-tree state from its own
50
+ * diffs. The observation then reports `dirty: null` instead of spawning an
51
+ * additional `git status` scan.
52
+ */
53
+ readonly workingTreeState?: boolean;
48
54
  }
49
55
  /**
50
56
  * Observes a repository without modifying the index, refs, or working tree.
@@ -58,3 +64,26 @@ export declare function inspectGitRepository(candidateRoot: string, options?: In
58
64
  * "nothing is ignored".
59
65
  */
60
66
  export declare function filterGitIgnored(repositoryRoot: string, candidates: readonly string[], options?: InspectGitRepositoryOptions): Promise<Outcome<readonly string[]>>;
67
+ export interface GitObservationScope {
68
+ readonly repository: (root: string, options?: InspectGitRepositoryOptions) => Promise<Outcome<GitRepositoryObservation>>;
69
+ }
70
+ export interface GitObservationScopeOptions {
71
+ /**
72
+ * Default for `InspectGitRepositoryOptions.workingTreeState`; `true` keeps the
73
+ * `inspectGitRepository` behaviour. Callers that derive working-tree state from
74
+ * their own diffs opt out to save one `git status` scan per checkout.
75
+ */
76
+ readonly workingTreeState?: boolean;
77
+ }
78
+ /**
79
+ * Memoizes Git repository probes for exactly one operation.
80
+ *
81
+ * Repository identity (root, git dir, HEAD, branch) is immutable for the
82
+ * duration of a single command, so repeated inspections of the same checkout
83
+ * reuse the first observation instead of spawning equivalent Git processes.
84
+ * Working-tree state is *not* immutable: the scope therefore only lives inside
85
+ * one operation and must never be reused across operations or persisted. Callers
86
+ * that re-observe a tree after mutation (code prepare) keep using the scope for
87
+ * identity probes while the working-tree diff is always re-read.
88
+ */
89
+ export declare function createGitObservationScope(options?: GitObservationScopeOptions): GitObservationScope;