@bjoernrochel/sevro 0.1.0-rc.8 → 1.1.0

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 (582) hide show
  1. package/CONTRIBUTING.md +52 -6
  2. package/README.md +12 -7
  3. package/dist/examples/basic/graded.json +13 -0
  4. package/dist/examples/basic/host.js +9 -0
  5. package/dist/examples/basic/host.js.map +1 -0
  6. package/dist/examples/basic/prompt-only.json +7 -0
  7. package/dist/examples/recipes/candidate.js +23 -0
  8. package/dist/examples/recipes/candidate.js.map +1 -0
  9. package/dist/examples/recipes/cases/coding-change.json +21 -0
  10. package/dist/examples/recipes/cases/host-tools.json +21 -0
  11. package/dist/examples/recipes/cases/mise.json +21 -0
  12. package/dist/examples/recipes/cases/node.json +21 -0
  13. package/dist/examples/recipes/cases/python-uv.json +21 -0
  14. package/dist/examples/recipes/cases/semantic.json +17 -0
  15. package/dist/examples/recipes/coding-change/check.js +16 -0
  16. package/dist/examples/recipes/coding-change/check.js.map +1 -0
  17. package/dist/examples/recipes/executable.js +20 -0
  18. package/dist/examples/recipes/executable.js.map +1 -0
  19. package/dist/examples/recipes/extension-artifacts.js +56 -0
  20. package/dist/examples/recipes/extension-artifacts.js.map +1 -0
  21. package/dist/examples/recipes/extension-methods.js +167 -0
  22. package/dist/examples/recipes/extension-methods.js.map +1 -0
  23. package/dist/examples/recipes/extension.js +28 -0
  24. package/dist/examples/recipes/extension.js.map +1 -0
  25. package/dist/examples/recipes/modules.js +9 -0
  26. package/dist/examples/recipes/modules.js.map +1 -0
  27. package/dist/examples/recipes/repository-skill/.agents/skills/startup-guide/SKILL.md +7 -0
  28. package/dist/examples/recipes/repository-skill/.claude/skills/startup-guide/SKILL.md +7 -0
  29. package/dist/examples/recipes/repository-skill/README.md +3 -0
  30. package/dist/examples/recipes/run-inputs.js +144 -0
  31. package/dist/examples/recipes/run-inputs.js.map +1 -0
  32. package/dist/examples/recipes/run-options.js +103 -0
  33. package/dist/examples/recipes/run-options.js.map +1 -0
  34. package/dist/examples/recipes/run.js +62 -0
  35. package/dist/examples/recipes/run.js.map +1 -0
  36. package/dist/examples/recipes/runtime/empty.json +1 -0
  37. package/dist/examples/recipes/runtime/goals.json +1 -0
  38. package/dist/examples/recipes/runtime/mise.json +6 -0
  39. package/dist/examples/recipes/runtime/path.json +1 -0
  40. package/dist/examples/recipes/runtime/plugins.json +4 -0
  41. package/dist/examples/recipes/runtime/python-uv.json +10 -0
  42. package/dist/examples/recipes/semantic-judge.js +27 -0
  43. package/dist/examples/recipes/semantic-judge.js.map +1 -0
  44. package/dist/examples/templates/coding/adapter.js +14 -0
  45. package/dist/examples/templates/coding/adapter.js.map +1 -0
  46. package/dist/examples/templates/coding/case.json +15 -0
  47. package/dist/examples/templates/repository-skill/.agents/skills/startup-guide/SKILL.md +6 -0
  48. package/dist/examples/templates/repository-skill/extension-data.js +61 -0
  49. package/dist/examples/templates/repository-skill/extension-data.js.map +1 -0
  50. package/dist/examples/templates/repository-skill/extension.js +29 -0
  51. package/dist/examples/templates/repository-skill/extension.js.map +1 -0
  52. package/dist/examples/templates/response/adapter.js +13 -0
  53. package/dist/examples/templates/response/adapter.js.map +1 -0
  54. package/dist/examples/templates/response/case.json +13 -0
  55. package/dist/src/advisory.js +86 -0
  56. package/dist/src/advisory.js.map +1 -0
  57. package/dist/src/candidate-artifacts.js +139 -0
  58. package/dist/src/candidate-artifacts.js.map +1 -0
  59. package/dist/src/candidate-codex-state.js +110 -0
  60. package/dist/src/candidate-codex-state.js.map +1 -0
  61. package/dist/src/case-validation.js +92 -0
  62. package/dist/src/case-validation.js.map +1 -0
  63. package/dist/src/cli/cancellation.js +21 -0
  64. package/dist/src/cli/cancellation.js.map +1 -0
  65. package/dist/src/cli/command.js +60 -0
  66. package/dist/src/cli/command.js.map +1 -0
  67. package/dist/src/cli/completion.js +14 -0
  68. package/dist/src/cli/completion.js.map +1 -0
  69. package/dist/src/cli/demo.js +45 -0
  70. package/dist/src/cli/demo.js.map +1 -0
  71. package/dist/src/cli/evaluation.js +40 -0
  72. package/dist/src/cli/evaluation.js.map +1 -0
  73. package/dist/src/cli/extension.js +54 -0
  74. package/dist/src/cli/extension.js.map +1 -0
  75. package/dist/src/cli/help.js +190 -0
  76. package/dist/src/cli/help.js.map +1 -0
  77. package/dist/src/cli/hosts.js +33 -0
  78. package/dist/src/cli/hosts.js.map +1 -0
  79. package/dist/src/cli/init-settings.js +29 -0
  80. package/dist/src/cli/init-settings.js.map +1 -0
  81. package/dist/src/cli/init.js +82 -0
  82. package/dist/src/cli/init.js.map +1 -0
  83. package/dist/src/cli/invocation.js +431 -0
  84. package/dist/src/cli/invocation.js.map +1 -0
  85. package/dist/src/cli/loading.js +110 -0
  86. package/dist/src/cli/loading.js.map +1 -0
  87. package/dist/src/cli/preparation.js +88 -0
  88. package/dist/src/cli/preparation.js.map +1 -0
  89. package/dist/src/cli/presentation.js +61 -0
  90. package/dist/src/cli/presentation.js.map +1 -0
  91. package/dist/src/cli/progress.js +5 -0
  92. package/dist/src/cli/progress.js.map +1 -0
  93. package/dist/src/cli/run-manifest.js +108 -0
  94. package/dist/src/cli/run-manifest.js.map +1 -0
  95. package/dist/src/cli/run-options.js +367 -0
  96. package/dist/src/cli/run-options.js.map +1 -0
  97. package/dist/src/cli/run-overrides.js +51 -0
  98. package/dist/src/cli/run-overrides.js.map +1 -0
  99. package/dist/src/cli/settings.js +127 -0
  100. package/dist/src/cli/settings.js.map +1 -0
  101. package/dist/src/cli/summary.js +28 -0
  102. package/dist/src/cli/summary.js.map +1 -0
  103. package/dist/src/cli.js +20 -0
  104. package/dist/src/cli.js.map +1 -0
  105. package/dist/src/contract-types.js +2 -0
  106. package/dist/src/contract-types.js.map +1 -0
  107. package/dist/src/engine.js +4 -0
  108. package/dist/src/engine.js.map +1 -0
  109. package/dist/src/evaluation/advisory.js +85 -0
  110. package/dist/src/evaluation/advisory.js.map +1 -0
  111. package/dist/src/evaluation/check-plan.js +292 -0
  112. package/dist/src/evaluation/check-plan.js.map +1 -0
  113. package/dist/src/evaluation/collection.js +61 -0
  114. package/dist/src/evaluation/collection.js.map +1 -0
  115. package/dist/src/evaluation/context.js +2 -0
  116. package/dist/src/evaluation/context.js.map +1 -0
  117. package/dist/src/evaluation/grading-host.js +28 -0
  118. package/dist/src/evaluation/grading-host.js.map +1 -0
  119. package/dist/src/evaluation/grading.js +154 -0
  120. package/dist/src/evaluation/grading.js.map +1 -0
  121. package/dist/src/evaluation/invocation-plan.js +312 -0
  122. package/dist/src/evaluation/invocation-plan.js.map +1 -0
  123. package/dist/src/evaluation/plan.js +376 -0
  124. package/dist/src/evaluation/plan.js.map +1 -0
  125. package/dist/src/evaluation/progress.js +14 -0
  126. package/dist/src/evaluation/progress.js.map +1 -0
  127. package/dist/src/evaluation/resources.js +159 -0
  128. package/dist/src/evaluation/resources.js.map +1 -0
  129. package/dist/src/evaluation/run.js +148 -0
  130. package/dist/src/evaluation/run.js.map +1 -0
  131. package/dist/src/evaluation/scheduler.js +27 -0
  132. package/dist/src/evaluation/scheduler.js.map +1 -0
  133. package/dist/src/evaluation/semantic.js +183 -0
  134. package/dist/src/evaluation/semantic.js.map +1 -0
  135. package/dist/src/evaluation/trial.js +593 -0
  136. package/dist/src/evaluation/trial.js.map +1 -0
  137. package/dist/src/evaluation/types.js +20 -0
  138. package/dist/src/evaluation/types.js.map +1 -0
  139. package/dist/src/evidence/host-results.js +67 -0
  140. package/dist/src/evidence/host-results.js.map +1 -0
  141. package/dist/src/evidence/retained-artifacts.js +17 -0
  142. package/dist/src/evidence/retained-artifacts.js.map +1 -0
  143. package/dist/src/evidence/trial-writer.js +131 -0
  144. package/dist/src/evidence/trial-writer.js.map +1 -0
  145. package/dist/src/evidence/usage.js +14 -0
  146. package/dist/src/evidence/usage.js.map +1 -0
  147. package/dist/src/executable.js +20 -0
  148. package/dist/src/executable.js.map +1 -0
  149. package/dist/src/extension-client.js +212 -0
  150. package/dist/src/extension-client.js.map +1 -0
  151. package/dist/src/extension-session.js +236 -0
  152. package/dist/src/extension-session.js.map +1 -0
  153. package/dist/src/fixtures/advisory.js +206 -0
  154. package/dist/src/fixtures/advisory.js.map +1 -0
  155. package/dist/src/fixtures/bin.js +41 -0
  156. package/dist/src/fixtures/bin.js.map +1 -0
  157. package/dist/src/fixtures/cleanup.js +43 -0
  158. package/dist/src/fixtures/cleanup.js.map +1 -0
  159. package/dist/src/fixtures/create.js +94 -0
  160. package/dist/src/fixtures/create.js.map +1 -0
  161. package/dist/src/fixtures/generated.js +181 -0
  162. package/dist/src/fixtures/generated.js.map +1 -0
  163. package/dist/src/fixtures/git-hooks.js +16 -0
  164. package/dist/src/fixtures/git-hooks.js.map +1 -0
  165. package/dist/src/fixtures/preparation.js +201 -0
  166. package/dist/src/fixtures/preparation.js.map +1 -0
  167. package/dist/src/fixtures/repository.js +255 -0
  168. package/dist/src/fixtures/repository.js.map +1 -0
  169. package/dist/src/fixtures/setup.js +175 -0
  170. package/dist/src/fixtures/setup.js.map +1 -0
  171. package/dist/src/fixtures/tools.js +57 -0
  172. package/dist/src/fixtures/tools.js.map +1 -0
  173. package/dist/src/fixtures/workspace-state.js +155 -0
  174. package/dist/src/fixtures/workspace-state.js.map +1 -0
  175. package/dist/src/generated/cli-result.cjs +2 -0
  176. package/dist/src/generated/extension.cjs +2 -0
  177. package/dist/src/generated/report.cjs +2 -0
  178. package/dist/src/generated/run-evidence.cjs +2 -0
  179. package/dist/src/generated/runtime.cjs +2 -0
  180. package/dist/src/git.js +72 -0
  181. package/dist/src/git.js.map +1 -0
  182. package/dist/src/graders/artifact.js +68 -0
  183. package/dist/src/graders/artifact.js.map +1 -0
  184. package/dist/src/graders/git-head.js +112 -0
  185. package/dist/src/graders/git-head.js.map +1 -0
  186. package/dist/src/graders/output.js +345 -0
  187. package/dist/src/graders/output.js.map +1 -0
  188. package/dist/src/graders/semantic.js +132 -0
  189. package/dist/src/graders/semantic.js.map +1 -0
  190. package/dist/src/graders/shell.js +321 -0
  191. package/dist/src/graders/shell.js.map +1 -0
  192. package/dist/src/host-diagnostic-redaction.js +52 -0
  193. package/dist/src/host-diagnostic-redaction.js.map +1 -0
  194. package/dist/src/host-diagnostics.js +248 -0
  195. package/dist/src/host-diagnostics.js.map +1 -0
  196. package/dist/src/hosts/claude-continuation.js +89 -0
  197. package/dist/src/hosts/claude-continuation.js.map +1 -0
  198. package/dist/src/hosts/claude-credential.js +121 -0
  199. package/dist/src/hosts/claude-credential.js.map +1 -0
  200. package/dist/src/hosts/claude-events.js +136 -0
  201. package/dist/src/hosts/claude-events.js.map +1 -0
  202. package/dist/src/hosts/claude-keychain.js +100 -0
  203. package/dist/src/hosts/claude-keychain.js.map +1 -0
  204. package/dist/src/hosts/claude-login-recovery.js +67 -0
  205. package/dist/src/hosts/claude-login-recovery.js.map +1 -0
  206. package/dist/src/hosts/claude-login-refresh.js +146 -0
  207. package/dist/src/hosts/claude-login-refresh.js.map +1 -0
  208. package/dist/src/hosts/claude-login-store.js +124 -0
  209. package/dist/src/hosts/claude-login-store.js.map +1 -0
  210. package/dist/src/hosts/claude-login.js +74 -0
  211. package/dist/src/hosts/claude-login.js.map +1 -0
  212. package/dist/src/hosts/claude-native-goal.js +138 -0
  213. package/dist/src/hosts/claude-native-goal.js.map +1 -0
  214. package/dist/src/hosts/claude-process.js +10 -0
  215. package/dist/src/hosts/claude-process.js.map +1 -0
  216. package/dist/src/hosts/claude-refresh-lock.js +76 -0
  217. package/dist/src/hosts/claude-refresh-lock.js.map +1 -0
  218. package/dist/src/hosts/claude-repository-invocation.js +229 -0
  219. package/dist/src/hosts/claude-repository-invocation.js.map +1 -0
  220. package/dist/src/hosts/claude-settings.js +156 -0
  221. package/dist/src/hosts/claude-settings.js.map +1 -0
  222. package/dist/src/hosts/claude-skill-activations.js +131 -0
  223. package/dist/src/hosts/claude-skill-activations.js.map +1 -0
  224. package/dist/src/hosts/claude-state.js +237 -0
  225. package/dist/src/hosts/claude-state.js.map +1 -0
  226. package/dist/src/hosts/claude-tool-calls.js +150 -0
  227. package/dist/src/hosts/claude-tool-calls.js.map +1 -0
  228. package/dist/src/hosts/claude.js +373 -0
  229. package/dist/src/hosts/claude.js.map +1 -0
  230. package/dist/src/hosts/codex-app-server.js +764 -0
  231. package/dist/src/hosts/codex-app-server.js.map +1 -0
  232. package/dist/src/hosts/codex-configuration.js +91 -0
  233. package/dist/src/hosts/codex-configuration.js.map +1 -0
  234. package/dist/src/hosts/codex-events.js +104 -0
  235. package/dist/src/hosts/codex-events.js.map +1 -0
  236. package/dist/src/hosts/codex-exec-controls.js +434 -0
  237. package/dist/src/hosts/codex-exec-controls.js.map +1 -0
  238. package/dist/src/hosts/codex-invocation.js +54 -0
  239. package/dist/src/hosts/codex-invocation.js.map +1 -0
  240. package/dist/src/hosts/codex-marketplace.js +185 -0
  241. package/dist/src/hosts/codex-marketplace.js.map +1 -0
  242. package/dist/src/hosts/codex-native-calls.js +516 -0
  243. package/dist/src/hosts/codex-native-calls.js.map +1 -0
  244. package/dist/src/hosts/codex-process.js +10 -0
  245. package/dist/src/hosts/codex-process.js.map +1 -0
  246. package/dist/src/hosts/codex-profile.js +206 -0
  247. package/dist/src/hosts/codex-profile.js.map +1 -0
  248. package/dist/src/hosts/codex-session-files.js +89 -0
  249. package/dist/src/hosts/codex-session-files.js.map +1 -0
  250. package/dist/src/hosts/codex-state.js +310 -0
  251. package/dist/src/hosts/codex-state.js.map +1 -0
  252. package/dist/src/hosts/codex.js +527 -0
  253. package/dist/src/hosts/codex.js.map +1 -0
  254. package/dist/src/hosts/isolation-common.js +43 -0
  255. package/dist/src/hosts/isolation-common.js.map +1 -0
  256. package/dist/src/hosts/isolation-roots.js +64 -0
  257. package/dist/src/hosts/isolation-roots.js.map +1 -0
  258. package/dist/src/hosts/isolation.js +12 -0
  259. package/dist/src/hosts/isolation.js.map +1 -0
  260. package/dist/src/hosts/linux-sandbox.js +127 -0
  261. package/dist/src/hosts/linux-sandbox.js.map +1 -0
  262. package/dist/src/hosts/mac-sandbox.js +137 -0
  263. package/dist/src/hosts/mac-sandbox.js.map +1 -0
  264. package/dist/src/hosts/native-controls.js +151 -0
  265. package/dist/src/hosts/native-controls.js.map +1 -0
  266. package/dist/src/hosts/native-request.js +33 -0
  267. package/dist/src/hosts/native-request.js.map +1 -0
  268. package/dist/src/hosts/process-lifecycle.js +167 -0
  269. package/dist/src/hosts/process-lifecycle.js.map +1 -0
  270. package/dist/src/hosts/protected-worktrees.js +81 -0
  271. package/dist/src/hosts/protected-worktrees.js.map +1 -0
  272. package/dist/src/hosts/skill-hook-catalog.js +100 -0
  273. package/dist/src/hosts/skill-hook-catalog.js.map +1 -0
  274. package/dist/src/hosts/skill-hook-handler.js +228 -0
  275. package/dist/src/hosts/skill-hook-handler.js.map +1 -0
  276. package/dist/src/hosts/skill-hooks.js +423 -0
  277. package/dist/src/hosts/skill-hooks.js.map +1 -0
  278. package/dist/src/hosts/workspace-fingerprint.js +72 -0
  279. package/dist/src/hosts/workspace-fingerprint.js.map +1 -0
  280. package/dist/src/identity.js +167 -0
  281. package/dist/src/identity.js.map +1 -0
  282. package/dist/src/instrumentation.js +83 -0
  283. package/dist/src/instrumentation.js.map +1 -0
  284. package/dist/src/native-transcript-state.js +85 -0
  285. package/dist/src/native-transcript-state.js.map +1 -0
  286. package/dist/src/native-transcript-view.js +65 -0
  287. package/dist/src/native-transcript-view.js.map +1 -0
  288. package/dist/src/native-transcripts.js +208 -0
  289. package/dist/src/native-transcripts.js.map +1 -0
  290. package/dist/src/paths.js +13 -0
  291. package/dist/src/paths.js.map +1 -0
  292. package/dist/src/process-lifecycle.js +101 -0
  293. package/dist/src/process-lifecycle.js.map +1 -0
  294. package/dist/src/provenance.js +263 -0
  295. package/dist/src/provenance.js.map +1 -0
  296. package/dist/src/prune.js +228 -0
  297. package/dist/src/prune.js.map +1 -0
  298. package/dist/src/report.js +276 -0
  299. package/dist/src/report.js.map +1 -0
  300. package/dist/src/resolved-case.js +29 -0
  301. package/dist/src/resolved-case.js.map +1 -0
  302. package/dist/src/results-lock.js +40 -0
  303. package/dist/src/results-lock.js.map +1 -0
  304. package/dist/src/results.js +127 -0
  305. package/dist/src/results.js.map +1 -0
  306. package/dist/src/run-owner.js +283 -0
  307. package/dist/src/run-owner.js.map +1 -0
  308. package/dist/src/runner-paths.js +11 -0
  309. package/dist/src/runner-paths.js.map +1 -0
  310. package/dist/src/runtime/config.js +323 -0
  311. package/dist/src/runtime/config.js.map +1 -0
  312. package/dist/src/runtime/discovery-apple.js +65 -0
  313. package/dist/src/runtime/discovery-apple.js.map +1 -0
  314. package/dist/src/runtime/discovery-providers.js +37 -0
  315. package/dist/src/runtime/discovery-providers.js.map +1 -0
  316. package/dist/src/runtime/discovery.js +40 -0
  317. package/dist/src/runtime/discovery.js.map +1 -0
  318. package/dist/src/runtime/hook-processes.js +81 -0
  319. package/dist/src/runtime/hook-processes.js.map +1 -0
  320. package/dist/src/runtime/hooks.js +304 -0
  321. package/dist/src/runtime/hooks.js.map +1 -0
  322. package/dist/src/runtime/paths.js +244 -0
  323. package/dist/src/runtime/paths.js.map +1 -0
  324. package/dist/src/runtime/query.js +76 -0
  325. package/dist/src/runtime/query.js.map +1 -0
  326. package/dist/src/runtime/seeds.js +98 -0
  327. package/dist/src/runtime/seeds.js.map +1 -0
  328. package/dist/src/runtime/shared-cache.js +81 -0
  329. package/dist/src/runtime/shared-cache.js.map +1 -0
  330. package/dist/src/runtime/state.js +106 -0
  331. package/dist/src/runtime/state.js.map +1 -0
  332. package/dist/src/runtime-process.js +148 -0
  333. package/dist/src/runtime-process.js.map +1 -0
  334. package/dist/src/schema-types.js +2 -0
  335. package/dist/src/schema-types.js.map +1 -0
  336. package/dist/src/schema.js +16 -0
  337. package/dist/src/schema.js.map +1 -0
  338. package/dist/src/shell.js +5 -0
  339. package/dist/src/shell.js.map +1 -0
  340. package/dist/src/sqlite-lock.js +18 -0
  341. package/dist/src/sqlite-lock.js.map +1 -0
  342. package/dist/src/storage.js +21 -0
  343. package/dist/src/storage.js.map +1 -0
  344. package/dist/src/transcript-retention.js +109 -0
  345. package/dist/src/transcript-retention.js.map +1 -0
  346. package/dist/src/value-guards.js +26 -0
  347. package/dist/src/value-guards.js.map +1 -0
  348. package/docs/README.md +19 -15
  349. package/docs/architecture.md +141 -17
  350. package/docs/assets/README.md +5 -4
  351. package/docs/builtin-graders-v1.md +9 -2
  352. package/docs/codex-host.md +155 -57
  353. package/docs/contracts.md +2 -1
  354. package/docs/creating-cases.md +10 -4
  355. package/docs/development-cli.md +197 -24
  356. package/docs/documentation-quality.md +16 -5
  357. package/docs/evaluation-workflow.md +110 -0
  358. package/docs/extension-protocol-v1.md +26 -3
  359. package/docs/getting-started.md +29 -7
  360. package/docs/guide-evaluation.md +34 -2
  361. package/docs/identity-v1.md +29 -3
  362. package/docs/installing.md +35 -17
  363. package/docs/licensing.md +2 -2
  364. package/docs/native-controls.md +76 -5
  365. package/docs/native-hosts.md +197 -8
  366. package/docs/reading-results.md +102 -0
  367. package/docs/recipes.md +490 -0
  368. package/docs/releases.md +48 -13
  369. package/docs/report-v1.md +29 -1
  370. package/docs/results-v1.md +122 -4
  371. package/docs/run-settings-v1.md +147 -0
  372. package/docs/runtime-v1.md +255 -22
  373. package/docs/specs/repository-guide.md +1 -1
  374. package/docs/troubleshooting.md +12 -12
  375. package/docs/typescript-quality.md +106 -26
  376. package/examples/recipes/candidate.ts +26 -0
  377. package/examples/recipes/cases/coding-change.json +21 -0
  378. package/examples/recipes/cases/host-tools.json +21 -0
  379. package/examples/recipes/cases/mise.json +21 -0
  380. package/examples/recipes/cases/node.json +21 -0
  381. package/examples/recipes/cases/python-uv.json +21 -0
  382. package/examples/recipes/cases/semantic.json +17 -0
  383. package/examples/recipes/coding-change/check.ts +23 -0
  384. package/examples/recipes/executable.ts +19 -0
  385. package/examples/recipes/extension-artifacts.ts +65 -0
  386. package/examples/recipes/extension-methods.ts +174 -0
  387. package/examples/recipes/extension.ts +38 -0
  388. package/examples/recipes/modules.ts +9 -0
  389. package/examples/recipes/repository-skill/.agents/skills/startup-guide/SKILL.md +7 -0
  390. package/examples/recipes/repository-skill/.claude/skills/startup-guide/SKILL.md +7 -0
  391. package/examples/recipes/repository-skill/README.md +3 -0
  392. package/examples/recipes/run-inputs.ts +183 -0
  393. package/examples/recipes/run-options.ts +132 -0
  394. package/examples/recipes/run.ts +77 -0
  395. package/examples/recipes/runtime/empty.json +1 -0
  396. package/examples/recipes/runtime/goals.json +1 -0
  397. package/examples/recipes/runtime/mise.json +6 -0
  398. package/examples/recipes/runtime/path.json +1 -0
  399. package/examples/recipes/runtime/plugins.json +4 -0
  400. package/examples/recipes/runtime/python-uv.json +10 -0
  401. package/examples/recipes/semantic-judge.ts +29 -0
  402. package/examples/templates/coding/adapter.ts +17 -0
  403. package/examples/templates/coding/case.json +15 -0
  404. package/examples/templates/repository-skill/.agents/skills/startup-guide/SKILL.md +6 -0
  405. package/examples/templates/repository-skill/extension-data.ts +64 -0
  406. package/examples/templates/repository-skill/extension.ts +32 -0
  407. package/examples/templates/response/adapter.ts +12 -0
  408. package/examples/templates/response/case.json +13 -0
  409. package/package.json +23 -9
  410. package/schemas/report-v1.schema.json +9 -0
  411. package/schemas/run-evidence-v1.schema.json +2 -1
  412. package/schemas/runtime-v1.schema.json +43 -7
  413. package/src/advisory.ts +2 -2
  414. package/src/candidate-artifacts.ts +42 -11
  415. package/src/candidate-codex-state.ts +185 -0
  416. package/src/case-validation.ts +73 -50
  417. package/src/cli/cancellation.ts +20 -0
  418. package/src/cli/command.ts +87 -0
  419. package/src/cli/completion.ts +15 -0
  420. package/src/cli/demo.ts +61 -0
  421. package/src/cli/evaluation.ts +55 -0
  422. package/src/cli/extension.ts +79 -0
  423. package/src/cli/help.ts +199 -0
  424. package/src/cli/hosts.ts +55 -0
  425. package/src/cli/init-settings.ts +31 -0
  426. package/src/cli/init.ts +112 -0
  427. package/src/{cli-invocation.ts → cli/invocation.ts} +215 -218
  428. package/src/cli/loading.ts +151 -0
  429. package/src/cli/preparation.ts +154 -0
  430. package/src/cli/presentation.ts +93 -0
  431. package/src/cli/progress.ts +6 -0
  432. package/src/cli/run-manifest.ts +128 -0
  433. package/src/cli/run-options.ts +403 -0
  434. package/src/cli/run-overrides.ts +69 -0
  435. package/src/cli/settings.ts +154 -0
  436. package/src/cli/summary.ts +43 -0
  437. package/src/cli.ts +14 -592
  438. package/src/contract-types.ts +94 -0
  439. package/src/engine.ts +9 -5
  440. package/src/evaluation/advisory.ts +150 -0
  441. package/src/{evaluation-check-plan.ts → evaluation/check-plan.ts} +103 -67
  442. package/src/evaluation/collection.ts +88 -0
  443. package/src/evaluation/context.ts +10 -0
  444. package/src/{evaluation-grading-host.ts → evaluation/grading-host.ts} +5 -5
  445. package/src/evaluation/grading.ts +235 -0
  446. package/src/{evaluation-invocation-plan.ts → evaluation/invocation-plan.ts} +147 -58
  447. package/src/{evaluation-plan.ts → evaluation/plan.ts} +208 -141
  448. package/src/evaluation/progress.ts +19 -0
  449. package/src/evaluation/resources.ts +241 -0
  450. package/src/evaluation/run.ts +206 -0
  451. package/src/{evaluation-semantic.ts → evaluation/semantic.ts} +77 -87
  452. package/src/evaluation/trial.ts +800 -0
  453. package/src/{evaluation-types.ts → evaluation/types.ts} +79 -29
  454. package/src/evidence/host-results.ts +85 -0
  455. package/src/evidence/retained-artifacts.ts +18 -0
  456. package/src/evidence/trial-writer.ts +203 -0
  457. package/src/evidence/usage.ts +17 -0
  458. package/src/executable.ts +19 -0
  459. package/src/extension-client.ts +40 -108
  460. package/src/extension-session.ts +24 -48
  461. package/src/{advisory-fixture.ts → fixtures/advisory.ts} +12 -72
  462. package/src/{fixture-bin.ts → fixtures/bin.ts} +1 -1
  463. package/src/{fixture-cleanup.ts → fixtures/cleanup.ts} +13 -7
  464. package/src/fixtures/create.ts +183 -0
  465. package/src/{generated-fixture.ts → fixtures/generated.ts} +10 -53
  466. package/src/{git-hooks.ts → fixtures/git-hooks.ts} +1 -1
  467. package/src/{preparation.ts → fixtures/preparation.ts} +6 -16
  468. package/src/{repository-fixture.ts → fixtures/repository.ts} +30 -64
  469. package/src/{fixture-setup.ts → fixtures/setup.ts} +36 -53
  470. package/src/{fixture-tools.ts → fixtures/tools.ts} +1 -1
  471. package/src/{workspace-state.ts → fixtures/workspace-state.ts} +5 -5
  472. package/src/generated/cli-result.d.cts +2 -1
  473. package/src/generated/extension.d.cts +2 -1
  474. package/src/generated/report.cjs +1 -1
  475. package/src/generated/report.d.cts +2 -1
  476. package/src/generated/run-evidence.cjs +1 -1
  477. package/src/generated/run-evidence.d.cts +2 -1
  478. package/src/generated/runtime.cjs +1 -1
  479. package/src/generated/runtime.d.cts +2 -1
  480. package/src/git.ts +94 -0
  481. package/src/graders/git-head.ts +31 -85
  482. package/src/graders/shell.ts +54 -71
  483. package/src/host-diagnostic-redaction.ts +52 -0
  484. package/src/host-diagnostics.ts +331 -0
  485. package/src/hosts/claude-continuation.ts +57 -40
  486. package/src/hosts/claude-credential.ts +160 -63
  487. package/src/hosts/claude-events.ts +34 -18
  488. package/src/hosts/claude-keychain.ts +79 -21
  489. package/src/hosts/claude-login-recovery.ts +85 -0
  490. package/src/hosts/claude-login-refresh.ts +179 -0
  491. package/src/hosts/claude-login-store.ts +162 -0
  492. package/src/hosts/claude-login.ts +107 -0
  493. package/src/hosts/claude-native-goal.ts +15 -12
  494. package/src/hosts/claude-process.ts +10 -50
  495. package/src/hosts/claude-refresh-lock.ts +82 -0
  496. package/src/hosts/claude-repository-invocation.ts +9 -34
  497. package/src/hosts/claude-settings.ts +46 -9
  498. package/src/hosts/claude-skill-activations.ts +169 -0
  499. package/src/hosts/claude-state.ts +28 -15
  500. package/src/hosts/claude-tool-calls.ts +13 -10
  501. package/src/hosts/claude.ts +121 -81
  502. package/src/hosts/codex-app-server.ts +78 -52
  503. package/src/hosts/codex-configuration.ts +5 -10
  504. package/src/hosts/codex-exec-controls.ts +516 -0
  505. package/src/hosts/codex-marketplace.ts +12 -10
  506. package/src/hosts/codex-native-calls.ts +15 -122
  507. package/src/hosts/codex-process.ts +10 -183
  508. package/src/hosts/codex-profile.ts +36 -21
  509. package/src/hosts/codex-session-files.ts +1 -9
  510. package/src/hosts/codex-state.ts +134 -18
  511. package/src/hosts/codex.ts +210 -183
  512. package/src/hosts/isolation-common.ts +8 -11
  513. package/src/hosts/isolation-roots.ts +5 -4
  514. package/src/hosts/linux-sandbox.ts +15 -2
  515. package/src/hosts/mac-sandbox.ts +87 -18
  516. package/src/hosts/native-controls.ts +72 -22
  517. package/src/hosts/native-request.ts +55 -0
  518. package/src/hosts/process-lifecycle.ts +215 -49
  519. package/src/hosts/protected-worktrees.ts +3 -2
  520. package/src/hosts/skill-hook-catalog.ts +131 -0
  521. package/src/hosts/skill-hook-handler.ts +374 -0
  522. package/src/hosts/skill-hooks.ts +585 -0
  523. package/src/instrumentation.ts +7 -8
  524. package/src/native-transcript-state.ts +22 -3
  525. package/src/native-transcript-view.ts +52 -13
  526. package/src/native-transcripts.ts +26 -11
  527. package/src/paths.ts +22 -0
  528. package/src/process-lifecycle.ts +150 -0
  529. package/src/provenance.ts +34 -13
  530. package/src/prune.ts +300 -0
  531. package/src/report.ts +63 -36
  532. package/src/resolved-case.ts +1 -1
  533. package/src/results-lock.ts +42 -0
  534. package/src/results.ts +14 -18
  535. package/src/run-owner.ts +15 -9
  536. package/src/runner-paths.ts +21 -0
  537. package/src/{runtime-config.ts → runtime/config.ts} +160 -46
  538. package/src/{runtime-discovery-apple.ts → runtime/discovery-apple.ts} +3 -3
  539. package/src/{runtime-discovery-providers.ts → runtime/discovery-providers.ts} +3 -9
  540. package/src/{runtime-discovery.ts → runtime/discovery.ts} +4 -4
  541. package/src/{runtime-hook-processes.ts → runtime/hook-processes.ts} +3 -2
  542. package/src/{runtime-hooks.ts → runtime/hooks.ts} +40 -28
  543. package/src/{runtime-paths.ts → runtime/paths.ts} +5 -19
  544. package/src/{runtime-query.ts → runtime/query.ts} +5 -5
  545. package/src/{runtime-seeds.ts → runtime/seeds.ts} +3 -3
  546. package/src/runtime/shared-cache.ts +130 -0
  547. package/src/{runtime-state.ts → runtime/state.ts} +28 -11
  548. package/src/runtime-process.ts +194 -0
  549. package/src/schema-types.ts +73 -161
  550. package/src/shell.ts +4 -0
  551. package/src/sqlite-lock.ts +25 -0
  552. package/src/transcript-retention.ts +146 -0
  553. package/src/value-guards.ts +22 -0
  554. package/docs/assets/sevro-logo.png +0 -0
  555. package/docs/assets/sevro-symbol.svg +0 -1
  556. package/docs/assets/sevro-wordmark.svg +0 -1
  557. package/docs/cache-ownership-validation.md +0 -49
  558. package/docs/claude-continuation-validation.md +0 -47
  559. package/docs/concurrency-validation.md +0 -86
  560. package/docs/configuration-root-validation.md +0 -70
  561. package/docs/engine-slice.md +0 -114
  562. package/docs/evidence/runtime-startup-30/README.md +0 -185
  563. package/docs/evidence/runtime-startup-30/after.json +0 -319
  564. package/docs/evidence/runtime-startup-30/baseline-timeout.jsonl +0 -2
  565. package/docs/evidence/runtime-startup-30/before.json +0 -403
  566. package/docs/evidence/runtime-startup-30/consumer-smoke.json +0 -63
  567. package/docs/evidence/runtime-startup-30/full-policy-diagnostic.jsonl +0 -3
  568. package/docs/evidence/runtime-startup-30/minimal-policy-diagnostic.jsonl +0 -3
  569. package/docs/evidence/runtime-startup-30/plugin-template-assessment.json +0 -20
  570. package/docs/evidence/runtime-startup-30/seedless-timeout.jsonl +0 -2
  571. package/docs/evidence.md +0 -17
  572. package/docs/fixture-cleanup-validation.md +0 -73
  573. package/docs/guide-verification.json +0 -239
  574. package/src/evaluation-context.ts +0 -259
  575. package/src/evaluation-fixture.ts +0 -302
  576. package/src/evaluation-run.ts +0 -200
  577. package/src/evaluation-trial.ts +0 -1016
  578. package/src/hosts/claude-nested-skills.ts +0 -272
  579. package/src/hosts/codex-command-output.ts +0 -510
  580. package/src/hosts/codex-executor-command.ts +0 -291
  581. package/src/hosts/codex-skill-reads.ts +0 -783
  582. /package/src/{trial-scheduler.ts → evaluation/scheduler.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-state.js","sourceRoot":"","sources":["codex-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { runtimeLocalHttpEnabled, runtimeSeedSources } from \"../runtime/config\";\nimport { shellQuote } from \"../shell\";\nimport {\n candidateArtifactEnvironment,\n candidateArtifactReadRoots,\n} from \"../candidate-artifacts\";\nimport {\n codexStateEnabled,\n retainCandidateCodexState,\n} from \"../candidate-codex-state\";\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { isMissingFile } from \"../fixtures/tools\";\nimport {\n cp,\n lstat,\n mkdir,\n readFile,\n realpath,\n rm,\n stat,\n symlink,\n writeFile,\n} from \"node:fs/promises\";\nimport { delimiter, dirname, join, sep } from \"node:path\";\nimport type { HostAdapter } from \"../engine\";\nimport {\n candidateTranscriptEnvironment,\n candidateTranscriptRoots,\n} from \"../native-transcripts\";\nimport { prepareHookMounts } from \"../runtime/hooks\";\nimport { requireNativeHookRoots } from \"../native-transcript-state\";\nimport {\n requireRuntimeReadRoots,\n runtimeExecutableProtection,\n} from \"../runtime/paths\";\nimport { prepareRuntimeState } from \"../runtime/state\";\nimport {\n sharedCacheDenyRoots,\n sharedCacheRoots,\n} from \"../runtime/shared-cache\";\nimport { codexPermissionProfile } from \"./codex-profile\";\nimport { evaluationProtectedRoots } from \"./isolation-roots\";\ntype Request = Parameters<HostAdapter[\"run\"]>[0];\ntype CodexState = Awaited<ReturnType<typeof prepareCodexState>>;\nconst MAX_AUTH_BYTES = 1024 * 1024;\n\nexport interface CodexHostOptions {\n binary: string;\n authFile: string;\n model: string;\n effort: string;\n projectRoot: string;\n resultsRoot: string;\n additionalProtectedRoots: string[];\n agentConcurrencyLimit?: number | null;\n timeoutMs?: number;\n entrypoint?: \"exec\" | \"app-server\";\n retainHostDiagnostics?: boolean;\n /** Integration-test seam; production uses the same CLI for execution and preflight. */\n sandboxBinary?: string;\n}\n\nasync function copyAuth(source: string, target: string): Promise<void> {\n let bytes: Buffer;\n try {\n if ((await stat(source)).size > MAX_AUTH_BYTES)\n throw new Error(\"Codex auth file exceeds the size limit\");\n bytes = await readFile(source);\n } catch (error) {\n throw new Error(\"Codex auth file is unreadable or oversized\", {\n cause: error,\n });\n }\n if (bytes.byteLength > MAX_AUTH_BYTES)\n throw new Error(\"Codex auth file exceeds the size limit\");\n await writeFile(target, bytes, { flag: \"wx\", mode: 0o600 });\n}\n\nexport async function codexHookMounts(\n request: Request,\n state: CodexState,\n installedPluginRoots: string[],\n) {\n const hooks = await prepareHookMounts({\n workspace: request.workspace,\n stateRoot: state.stateRoot,\n privateRoot: state.codexHome,\n pluginRoots: installedPluginRoots,\n protectedRoots: state.protectedRoots,\n policy: request.runtimePolicy ?? {\n format: \"sevro.runtime.v1\",\n environment: {},\n readOnlyRoots: [],\n },\n });\n for (const [index, root] of installedPluginRoots.entries()) {\n const curated = hooks.directories[index];\n if (!curated) throw new Error(\"Codex hook projection is incomplete\");\n await rm(root, { recursive: true });\n await cp(curated, root, { recursive: true });\n }\n await grantCodexHookReads(state, hooks.directories);\n return hooks;\n}\n\n/** Hooks advertise paths relative to these curated copies, not the install cache. */\nasync function grantCodexHookReads(\n state: CodexState,\n roots: string[],\n): Promise<void> {\n if (roots.length === 0) return;\n await requireNativeHookRoots(roots, state.codexHome);\n const path = join(state.codexHome, \"config.toml\");\n const config = await readFile(path, \"utf8\");\n const header = `[permissions.${state.profileId}.filesystem]\\n`;\n const grants = roots\n .map((root) => `${JSON.stringify(root)} = \"read\"\\n`)\n .join(\"\");\n await writeFile(path, config.replace(header, header + grants), {\n mode: 0o600,\n });\n}\n\nasync function privateCodexDirectories(stateRoot: string) {\n const codexHome = join(stateRoot, \"codex-home\"),\n parentHome = join(stateRoot, \"home\"),\n parentTemp = join(stateRoot, \"tmp\"),\n commandHome = join(stateRoot, \"command-home\"),\n commandTemp = join(stateRoot, \"command-tmp\");\n await Promise.all(\n [codexHome, parentHome, parentTemp, commandHome, commandTemp].map((path) =>\n mkdir(path, { mode: 0o700 }),\n ),\n );\n if (process.platform === \"linux\")\n await mkdir(join(codexHome, \"tmp\", \"arg0\"), {\n recursive: true,\n mode: 0o700,\n });\n return {\n codexHome,\n parentHome,\n parentTemp,\n commandHome,\n commandTemp,\n pluginCacheRoot: join(codexHome, \"plugins\", \"cache\"),\n };\n}\n\nfunction requireUnprotectedExecutables(\n readRoots: string[],\n protectedRoots: string[],\n): void {\n if (\n readRoots.some((readRoot) =>\n protectedRoots.some(\n (root) => readRoot === root || readRoot.startsWith(`${root}${sep}`),\n ),\n )\n )\n throw new Error(\"Codex executable resides inside a protected root\");\n}\n\nfunction concurrencyConfiguration(limit: number | null): string {\n return limit === null\n ? \"\"\n : `\\n[agents]\\nmax_concurrent_threads_per_session = ${limit}\\n`;\n}\n\nasync function writeCodexProfile(\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n profileId: string,\n request: Request,\n readRoots: string[],\n protectedRoots: string[],\n limit: number | null,\n commandEnvironment = request.runtimePolicy?.environment,\n runtimeWriteRoot: string | undefined,\n writableCacheRoots: string[],\n): Promise<void> {\n const profile = codexPermissionProfile({\n localHttp: runtimeLocalHttpEnabled(\n request.runtimePolicy,\n request.runtimeRole ?? \"candidate\",\n ),\n commandEnvironment: codexProfileEnvironment(\n request,\n paths,\n commandEnvironment,\n ),\n runtimeWriteRoot,\n runtimeReadRoots: request.runtimePolicy?.readOnlyRoots,\n nativeReadRoots: codexNativeReadRoots(request, paths.codexHome),\n nativeWriteRoots: [\n ...codexStateWriteRoots(request, paths),\n ...writableCacheRoots,\n ],\n id: profileId,\n workspace: request.workspace,\n commandHome: paths.commandHome,\n commandTemp: paths.commandTemp,\n executableReadRoots: readRoots,\n ...codexPluginReadRoot(request, paths.pluginCacheRoot),\n protectedRoots,\n });\n await writeFile(\n join(paths.codexHome, \"config.toml\"),\n profile +\n concurrencyConfiguration(limit) +\n fixtureTrustConfiguration(request),\n { flag: \"wx\", mode: 0o600 },\n );\n}\n\nfunction fixtureTrustConfiguration(request: Request): string {\n return `\\n[projects.${JSON.stringify(request.workspace)}]\\ntrust_level = \"untrusted\"\\n`;\n}\n\nfunction codexProfileEnvironment(\n request: Request,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n environment: Record<string, string> | undefined,\n) {\n return {\n ...codexCommandEnvironment(request, environment),\n ...codexTranscriptEnvironment(request, paths.codexHome),\n ...candidateTranscriptEnvironment(request.candidateTranscriptRoot),\n ...candidateArtifactEnvironment(request.candidateArtifactRoots),\n ...(request.runtimePolicy?.codexState === true\n ? {\n SEVRO_CODEX_AGENT_SKILLS: join(paths.parentHome, \".agents\", \"skills\"),\n }\n : {}),\n };\n}\n\nfunction codexTranscriptEnvironment(\n request: Request,\n home: string,\n): Record<string, string> {\n return {\n ...(request.runtimePolicy?.codexState === true ? { CODEX_HOME: home } : {}),\n ...(request.runtimePolicy?.nativeTranscripts === true\n ? {\n CODEX_HOME: home,\n SEVRO_NATIVE_TRANSCRIPT_ROOT: join(home, \"sessions\"),\n }\n : {}),\n };\n}\n\nfunction codexNativeReadRoots(request: Request, home: string) {\n return [\n ...linuxArg0ReadRoots(home),\n ...(request.runtimePolicy?.codexState === true\n ? [join(home, \"config.toml\"), join(home, \"skills\", \".system\")]\n : []),\n ...codexTranscriptRoots(request, home),\n ...candidateTranscriptRoots(request.candidateTranscriptRoot),\n ...candidateArtifactReadRoots(request.candidateArtifactRoots),\n ];\n}\n\nfunction codexTranscriptRoots(request: Request, home: string) {\n return request.runtimePolicy?.nativeTranscripts === true\n ? [join(home, \"sessions\")]\n : [];\n}\n\nfunction linuxArg0ReadRoots(codexHome: string): string[] {\n return process.platform === \"linux\" ? [join(codexHome, \"tmp\", \"arg0\")] : [];\n}\n\nfunction codexPluginReadRoot(request: Request, root: string) {\n return request.codexMarketplace ? { pluginReadRoot: root } : {};\n}\n\nfunction codexHelperBinary(options: CodexHostOptions, sandboxBinary: string) {\n const sibling = join(dirname(options.binary), \"codex-linux-sandbox\");\n return (\n options.sandboxBinary ?? (existsSync(sibling) ? sibling : sandboxBinary)\n );\n}\n\nfunction codexCommandEnvironment(\n request: Request,\n environment: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!environment) return undefined;\n const path =\n environment.PATH ??\n \"/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin\";\n return {\n ...environment,\n PATH: [request.fixtureBinDir, path].filter(Boolean).join(delimiter),\n };\n}\n\nasync function fixtureShellRoot(\n request: Request,\n parentHome: string,\n): Promise<string> {\n const root = join(request.workspace, \".git\", \"sevro-shell\");\n if (request.fixtureBinDir) {\n await mkdir(root, { mode: 0o700 });\n await writeFile(\n process.platform === \"linux\"\n ? join(parentHome, \".bash_profile\")\n : join(root, \".zprofile\"),\n `export PATH=${shellQuote(request.fixtureBinDir)}:\"$PATH\"\\n`,\n { flag: \"wx\", mode: 0o600 },\n );\n }\n return root;\n}\n\nfunction codexPath(fixtureBin: string | undefined): string {\n const path = process.env.PATH ?? \"/usr/bin:/bin\";\n return fixtureBin ? `${fixtureBin}${delimiter}${path}` : path;\n}\n\nfunction codexEnvironment(\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n request: Request,\n shellRoot: string,\n): Record<string, string> {\n return {\n ...request.runtimePolicy?.environment,\n PATH: declaredCodexPath(request),\n LANG: process.env.LANG ?? \"C\",\n HOME: paths.parentHome,\n TMPDIR: paths.parentTemp,\n CODEX_HOME: paths.codexHome,\n NO_COLOR: \"1\",\n ...(request.fixtureBinDir && process.platform === \"darwin\"\n ? { ZDOTDIR: shellRoot }\n : {}),\n };\n}\n\nfunction declaredCodexPath(request: Request): string {\n return (\n request.runtimePolicy?.environment.PATH ?? codexPath(request.fixtureBinDir)\n );\n}\n\nfunction codexSeedSources(request: Request): string[] {\n return runtimeSeedSources(request.runtimePolicy);\n}\n\nasync function codexRuntime(\n request: Request,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n stateRoot: string,\n) {\n if (!request.runtimePolicy) return undefined;\n const runtime = await prepareRuntimeState(\n request.workspace,\n request.runtimePolicy,\n request.runtimeRole ?? \"candidate\",\n request.candidateRuntimeRoot ?? join(stateRoot, \"runtime\"),\n );\n paths.commandHome = runtime.home;\n paths.commandTemp = runtime.temp;\n return runtime;\n}\n\nfunction applyCodexRuntime(\n runtime: Awaited<ReturnType<typeof codexRuntime>>,\n env: Record<string, string>,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n): void {\n if (runtime)\n Object.assign(env, runtime.environment, {\n HOME: paths.parentHome,\n TMPDIR: paths.parentTemp,\n });\n}\n\nfunction codexRuntimeProfile(\n runtime: Awaited<ReturnType<typeof codexRuntime>>,\n) {\n return {\n environment: runtime?.environment,\n root: runtime?.root,\n writableCacheRoots: runtime?.writableCacheRoots ?? [],\n };\n}\n\nexport async function prepareCodexState(\n stateRoot: string,\n options: CodexHostOptions,\n limit: number | null,\n request: Request,\n helperRoot?: string,\n) {\n await requireIsolatedGitMetadata(request.workspace);\n const paths = await privateCodexDirectories(stateRoot);\n const runtime = await codexRuntime(request, paths, stateRoot);\n await copyAuth(options.authFile, join(paths.codexHome, \"auth.json\"));\n const protectedRoots = await evaluationProtectedRoots({\n workspace: request.workspace,\n projectRoot: options.projectRoot,\n resultsRoot: options.resultsRoot,\n additionalRoots: [\n ...options.additionalProtectedRoots,\n ...(process.platform === \"linux\" ? [] : [stateRoot]),\n ...codexSeedSources(request),\n ],\n });\n const sandboxBinary = options.sandboxBinary ?? options.binary;\n const helperBinary = codexHelperBinary(options, sandboxBinary);\n if (helperRoot)\n await symlink(helperBinary, join(helperRoot, \"codex-linux-sandbox\"));\n const readRoots = await Promise.all(\n [options.binary, sandboxBinary, helperBinary].flatMap((binary) => [\n realpath(dirname(binary)),\n realpath(binary).then(dirname),\n ]),\n );\n if (helperRoot) readRoots.push(helperRoot);\n requireCodexRuntimeReadRoots(request, protectedRoots);\n await sharedCacheRoots(\n request.runtimePolicy,\n request.runtimeRole,\n protectedRoots,\n );\n protectedRoots.push(\n ...sharedCacheDenyRoots(request.runtimePolicy, request.runtimeRole),\n );\n requireUnprotectedExecutables(\n readRoots,\n runtimeExecutableProtection(\n readRoots,\n protectedRoots,\n Boolean(request.runtimePolicy),\n ),\n );\n const profileId = `sevro_${randomUUID().replaceAll(\"-\", \"\")}`;\n const runtimeProfile = codexRuntimeProfile(runtime);\n await writeCodexProfile(\n paths,\n profileId,\n request,\n readRoots,\n protectedRoots,\n limit,\n runtimeProfile.environment,\n runtimeProfile.root,\n runtimeProfile.writableCacheRoots,\n );\n const shellRoot = await fixtureShellRoot(request, paths.parentHome);\n const env = codexEnvironment(paths, request, shellRoot);\n applyCodexRuntime(runtime, env, paths);\n await prepareCodexStateEvidence(request, stateRoot, paths);\n return { ...paths, stateRoot, sandboxBinary, profileId, env, protectedRoots };\n}\n\nfunction codexStateWriteRoots(\n request: Request,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n): string[] {\n return codexStateEnabled(request.runtimePolicy)\n ? [\n join(paths.codexHome, \"skills\"),\n join(paths.parentHome, \".agents\", \"skills\"),\n join(paths.commandHome, \".agents\", \"skills\"),\n join(paths.commandHome, \".codex\", \"skills\"),\n ]\n : [];\n}\n\nasync function prepareCodexStateEvidence(\n request: Request,\n stateRoot: string,\n paths: Awaited<ReturnType<typeof privateCodexDirectories>>,\n): Promise<void> {\n if (!codexStateEnabled(request.runtimePolicy)) return;\n const skillRoots = codexStateWriteRoots(request, paths);\n await Promise.all(\n skillRoots.map((root) => mkdir(root, { recursive: true, mode: 0o700 })),\n );\n await mkdir(join(paths.codexHome, \"skills\", \".system\"), { mode: 0o700 });\n await retainCandidateCodexState(\n request.candidateRuntimeRoot,\n stateRoot,\n paths,\n );\n}\n\nasync function requireIsolatedGitMetadata(workspace: string): Promise<void> {\n try {\n if (!(await lstat(join(workspace, \".git\"))).isDirectory())\n throw new Error(\"Codex Git metadata must be an isolated directory\");\n } catch (cause) {\n if (!isMissingFile(cause)) throw cause;\n }\n}\n\nfunction requireCodexRuntimeReadRoots(\n request: Request,\n protectedRoots: string[],\n): void {\n requireRuntimeReadRoots(\n request.runtimePolicy?.readOnlyRoots ?? [],\n protectedRoots,\n );\n}\n"]}
@@ -0,0 +1,527 @@
1
+ import { existsSync } from "node:fs";
2
+ import { candidateCodexStateRetained } from "../candidate-codex-state.js";
3
+ import { lstat, mkdtemp, rm, writeFile } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
5
+ import { isAbsolute, join } from "node:path";
6
+ import { allocateNativeState } from "../native-transcript-state.js";
7
+ import { failedNativeTranscripts, retainEnabledNativeTranscripts, } from "../native-transcripts.js";
8
+ import { runtimeNativeGoalEnabled } from "../runtime/config.js";
9
+ import { releaseRuntimeHooks, runtimeHookObservation, } from "../runtime/hooks.js";
10
+ import { runtimeObservations } from "../runtime/state.js";
11
+ import { validateNativeHostRequest, validHostTimeout } from "./native-request.js";
12
+ import { runCodexAppServer } from "./codex-app-server.js";
13
+ import { summarizeCodexEvents } from "./codex-events.js";
14
+ import { verifyCodexInvocation } from "./codex-invocation.js";
15
+ import { installCodexPlugins } from "./codex-marketplace.js";
16
+ import { codexNativeCallObservation, codexNativeSessionLastOrdinal, } from "./codex-native-calls.js";
17
+ import { runCodexProcess, CodexProcessFailure } from "./codex-process.js";
18
+ import { codexHookMounts, prepareCodexState, } from "./codex-state.js";
19
+ import { codexNativeControls } from "./native-controls.js";
20
+ import { workspaceFingerprint } from "./workspace-fingerprint.js";
21
+ import { codexSkillCatalogRoots } from "./skill-hook-catalog.js";
22
+ import { prepareSkillTracking, skillTrackingObservation, skillActivationClaims, skillExposureClaims, } from "./skill-hooks.js";
23
+ import { cleanupNativeState, createHostDiagnostics, diagnoseHostRequest, diagnosticConfiguration, } from "../host-diagnostics.js";
24
+ const DEFAULT_TIMEOUT_MS = 10 * 60_000;
25
+ function validCodexPaths(options) {
26
+ return ([
27
+ options.binary,
28
+ options.authFile,
29
+ options.projectRoot,
30
+ options.resultsRoot,
31
+ ...options.additionalProtectedRoots,
32
+ ].every(isAbsolute) &&
33
+ (options.sandboxBinary === undefined || isAbsolute(options.sandboxBinary)));
34
+ }
35
+ function validConcurrencyLimit(limit) {
36
+ return limit === null || (Number.isSafeInteger(limit) && limit >= 1);
37
+ }
38
+ function validEntrypoint(entrypoint) {
39
+ return (entrypoint === undefined || ["exec", "app-server"].includes(entrypoint));
40
+ }
41
+ function validCodexIdentity(options, limit, timeoutMs) {
42
+ return (!!options.model &&
43
+ !!options.effort &&
44
+ validEntrypoint(options.entrypoint) &&
45
+ validConcurrencyLimit(limit) &&
46
+ validHostTimeout(timeoutMs));
47
+ }
48
+ function codexCapabilities(entrypoint) {
49
+ return [
50
+ "sevro.host.continuation",
51
+ "sevro.host.runtime",
52
+ "sevro.host.native-transcripts",
53
+ "sevro.host.hooks",
54
+ "sevro.host.skill-activations",
55
+ "sevro.host.skill-activation-claims",
56
+ "sevro.host.skill-exposure-claims",
57
+ ...(entrypoint === "app-server" ? ["sevro.host.native-goal"] : []),
58
+ "sevro.codex.plugin-marketplace",
59
+ "sevro.codex.explicit-invocation",
60
+ "sevro.codex.repository-invocation",
61
+ "sevro.codex.native-calls",
62
+ "sevro.host.native-controls",
63
+ ];
64
+ }
65
+ function codexConfiguration(limit, entrypoint, retainDiagnostics) {
66
+ return {
67
+ ...diagnosticConfiguration(retainDiagnostics),
68
+ "sevro.codex.agent-concurrency-limit": limit,
69
+ ...(entrypoint === "app-server"
70
+ ? { "sevro.codex.entrypoint": "app-server" }
71
+ : {}),
72
+ };
73
+ }
74
+ /** Construct one Codex route without inheriting user settings or credentials. */
75
+ export function createCodexHost(options) {
76
+ const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
77
+ const limit = options.agentConcurrencyLimit ?? null;
78
+ if (!validCodexPaths(options) ||
79
+ !validCodexIdentity(options, limit, timeoutMs))
80
+ throw new Error("invalid Codex host configuration");
81
+ return {
82
+ id: "sevro.host.codex",
83
+ hostCapabilities: codexCapabilities(options.entrypoint),
84
+ model: options.model,
85
+ effort: options.effort,
86
+ configuration: codexConfiguration(limit, options.entrypoint, options.retainHostDiagnostics),
87
+ run(request) {
88
+ return runCodexRequest(options, timeoutMs, limit, request);
89
+ },
90
+ };
91
+ }
92
+ function allocateCodexRequestState(request) {
93
+ return allocateNativeState("codex-", request.runtimePolicy ? request.workspace : undefined);
94
+ }
95
+ async function runCodexRequest(options, timeoutMs, limit, request) {
96
+ const diagnostics = createHostDiagnostics("codex", options.retainHostDiagnostics, request);
97
+ return diagnoseHostRequest(diagnostics, async () => {
98
+ diagnostics.stage = "request-validation";
99
+ await diagnostics.readCredentials(options.authFile);
100
+ return executeCodexRequest(options, timeoutMs, limit, request, diagnostics);
101
+ });
102
+ }
103
+ async function executeCodexRequest(options, timeoutMs, limit, request, diagnostics) {
104
+ await validateCodexRequest(options, request);
105
+ diagnostics.stage = "state-allocation";
106
+ const stateRoot = await allocateCodexRequestState(request);
107
+ const helperRoot = process.platform === "linux"
108
+ ? await mkdtemp(join(tmpdir(), "sevro-codex-helper-"))
109
+ : undefined;
110
+ let activeHooks;
111
+ try {
112
+ diagnostics.stage = "state-preparation";
113
+ const state = await prepareCodexState(stateRoot, options, limit, request, helperRoot);
114
+ const installedPluginRoots = await installCodexPlugins({
115
+ binary: options.binary,
116
+ env: state.env,
117
+ pluginCacheRoot: state.pluginCacheRoot,
118
+ request,
119
+ diagnostics,
120
+ });
121
+ diagnostics.stage = "hooks-preparation";
122
+ const hooks = await codexHookMounts(request, state, installedPluginRoots);
123
+ activeHooks = hooks;
124
+ const skillTracking = await prepareCodexSkillTracking(state, request, installedPluginRoots);
125
+ await codexPreflight(options, request, state, diagnostics);
126
+ const context = {
127
+ options,
128
+ request,
129
+ state,
130
+ timeoutMs,
131
+ hooks,
132
+ skillTracking,
133
+ diagnostics,
134
+ };
135
+ const turns = await new CodexTurnExecution(context).run();
136
+ if (turns.summary.complete)
137
+ diagnostics.stage = "result-processing";
138
+ return await retainCodexResult(context, turns);
139
+ }
140
+ catch (cause) {
141
+ return await failedNativeTranscripts(cause, request.runtimePolicy, join(stateRoot, "codex-home", "sessions"), "codex", request.runtimeRole, diagnostics);
142
+ }
143
+ finally {
144
+ await cleanupNativeState(diagnostics, async () => {
145
+ await releaseRuntimeHooks(activeHooks);
146
+ if (!candidateCodexStateRetained(request.candidateRuntimeRoot, stateRoot))
147
+ await rm(stateRoot, { recursive: true, force: true });
148
+ if (helperRoot)
149
+ await rm(helperRoot, { recursive: true, force: true });
150
+ });
151
+ }
152
+ }
153
+ async function retainCodexResult(context, turns) {
154
+ const result = await codexHostResult(context, turns);
155
+ await context.diagnostics.retainFailure(result, "Codex host execution did not complete");
156
+ await retainEnabledNativeTranscripts(result, context.request.runtimePolicy, join(context.state.codexHome, "sessions"), "codex", context.request.runtimeRole, turns.summary.threadId);
157
+ return result;
158
+ }
159
+ async function prepareCodexSkillTracking(state, request, pluginRoots) {
160
+ const roots = await codexSkillCatalogRoots(request.workspace, pluginRoots, [
161
+ { directory: join(state.codexHome, "skills"), boundary: state.codexHome },
162
+ {
163
+ directory: join(state.parentHome, ".agents/skills"),
164
+ boundary: state.parentHome,
165
+ },
166
+ {
167
+ directory: join(state.commandHome, ".agents/skills"),
168
+ boundary: state.commandHome,
169
+ },
170
+ {
171
+ directory: join(state.commandHome, ".codex/skills"),
172
+ boundary: state.commandHome,
173
+ },
174
+ ]);
175
+ const tracking = await prepareSkillTracking({
176
+ privateRoot: state.codexHome,
177
+ host: "codex",
178
+ roots,
179
+ });
180
+ await writeFile(join(state.codexHome, "hooks.json"), JSON.stringify({ hooks: tracking.hooks }), {
181
+ flag: "wx",
182
+ mode: 0o600,
183
+ });
184
+ return tracking;
185
+ }
186
+ async function validateCodexRequest(options, request) {
187
+ await validateNativeHostRequest(request, "Codex");
188
+ requireCodexGoalRoute(request, options);
189
+ await verifyCodexInvocation(request);
190
+ await requireCodexFixtureConfiguration(request);
191
+ }
192
+ async function requireCodexFixtureConfiguration(request) {
193
+ const path = join(request.workspace, ".codex");
194
+ if (!existsSync(path))
195
+ return;
196
+ if (request.runtimePolicy?.codexState !== true)
197
+ throw new Error("fixture Codex configuration is unsupported");
198
+ if (!(await lstat(path)).isDirectory())
199
+ throw new Error("fixture Codex configuration must be a physical directory");
200
+ }
201
+ function requireCodexGoalRoute(request, options) {
202
+ if (runtimeNativeGoalEnabled(request.runtimePolicy) &&
203
+ options.entrypoint !== "app-server")
204
+ throw new Error("native-goal runtime policy requires Codex app-server");
205
+ }
206
+ function sandboxArgs(state, request, command) {
207
+ return [
208
+ state.sandboxBinary,
209
+ "sandbox",
210
+ "-P",
211
+ state.profileId,
212
+ "-C",
213
+ request.workspace,
214
+ ...command,
215
+ ];
216
+ }
217
+ async function sandboxPreflight(state, request, command, diagnostics) {
218
+ return runCodexProcess({
219
+ diagnostics,
220
+ argv: sandboxArgs(state, request, command),
221
+ cwd: request.workspace,
222
+ env: state.env,
223
+ timeoutMs: 60_000,
224
+ phase: "isolation-preflight",
225
+ signal: request.signal,
226
+ });
227
+ }
228
+ async function codexPreflight(options, request, state, diagnostics) {
229
+ diagnostics.stage = "isolation-preflight";
230
+ const probe = join(state.commandTemp, "isolation-probe");
231
+ await writeFile(probe, "probe\n", { flag: "wx", mode: 0o600 });
232
+ const checked = await sandboxPreflight(state, request, [
233
+ "/bin/sh",
234
+ "-c",
235
+ '/bin/cat "$1" >/dev/null && ! /bin/ls "$2" >/dev/null 2>&1 && ! /bin/cat "$3" >/dev/null 2>&1 && ! /bin/cat "$4" >/dev/null 2>&1 || exit 70; "$5" --version >/dev/null 2>&1 || exit 71',
236
+ "sevro-probe",
237
+ probe,
238
+ options.projectRoot,
239
+ join(state.codexHome, "auth.json"),
240
+ // The opt-in config read is tested separately; credentials always stay denied.
241
+ join(state.codexHome, request.runtimePolicy?.codexState === true
242
+ ? "auth.json"
243
+ : "config.toml"),
244
+ state.sandboxBinary,
245
+ ], diagnostics);
246
+ if (checked.code === 71)
247
+ throw new CodexProcessFailure("executable-preflight", checked);
248
+ if (checked.code !== 0)
249
+ throw new CodexProcessFailure("isolation-preflight", checked);
250
+ await rm(probe);
251
+ }
252
+ function routeArgs(context) {
253
+ return [
254
+ "-m",
255
+ context.options.model,
256
+ "-c",
257
+ `model_reasoning_effort=${JSON.stringify(context.options.effort)}`,
258
+ "-c",
259
+ `default_permissions=${JSON.stringify(context.state.profileId)}`,
260
+ "-c",
261
+ 'approval_policy="never"',
262
+ "-c",
263
+ "features.hooks=true",
264
+ ];
265
+ }
266
+ function initialTurnArgs(context) {
267
+ return [
268
+ context.options.binary,
269
+ "exec",
270
+ "--json",
271
+ "--strict-config",
272
+ "--skip-git-repo-check",
273
+ ...(context.request.followUpPrompt ||
274
+ context.request.runtimePolicy?.nativeTranscripts
275
+ ? []
276
+ : ["--ephemeral"]),
277
+ "--ignore-rules",
278
+ "--dangerously-bypass-hook-trust",
279
+ "-C",
280
+ context.request.workspace,
281
+ ...routeArgs(context),
282
+ "-",
283
+ ];
284
+ }
285
+ function followUpTurnArgs(context, threadId) {
286
+ return [
287
+ context.options.binary,
288
+ "exec",
289
+ "resume",
290
+ "--json",
291
+ "--strict-config",
292
+ "--skip-git-repo-check",
293
+ "--ignore-rules",
294
+ "--dangerously-bypass-hook-trust",
295
+ ...routeArgs(context),
296
+ threadId,
297
+ "-",
298
+ ];
299
+ }
300
+ async function codexProcessTurn(context, argv, input) {
301
+ context.diagnostics.stage = "exec";
302
+ const result = await runCodexProcess({
303
+ diagnostics: context.diagnostics,
304
+ argv,
305
+ cwd: context.request.workspace,
306
+ env: context.state.env,
307
+ input,
308
+ timeoutMs: context.timeoutMs,
309
+ signal: context.request.signal,
310
+ });
311
+ return result;
312
+ }
313
+ async function initialFingerprint(request) {
314
+ return request.followUpPrompt
315
+ ? workspaceFingerprint(request.workspace)
316
+ : null;
317
+ }
318
+ async function continuationBoundary(context, threadId, originalFingerprint, goal = {}) {
319
+ const boundary = await workspaceFingerprint(context.request.workspace);
320
+ const measured = originalFingerprint !== null && boundary !== null;
321
+ return {
322
+ id: "sevro.codex.continuation",
323
+ completeness: measured ? "complete" : "partial",
324
+ data: {
325
+ method: "same_thread_resume",
326
+ ...goal,
327
+ threadId,
328
+ nativeAfterOrdinal: await codexNativeSessionLastOrdinal(context.state.codexHome, threadId),
329
+ preFollowUpWorktreeUnchanged: measured
330
+ ? originalFingerprint === boundary
331
+ : null,
332
+ },
333
+ };
334
+ }
335
+ function requireInitialCompletion(summary, appServer) {
336
+ if (!summary.complete && !appServer)
337
+ throw new Error("Codex turn did not complete");
338
+ }
339
+ function requireFollowUpCompletion(followUp, original) {
340
+ if (!followUp.complete || followUp.threadId !== original.threadId)
341
+ throw new Error("Codex follow-up turn did not complete in the original thread");
342
+ }
343
+ function appServerSummary(result) {
344
+ return {
345
+ threadId: result.evidence.threadId ?? "",
346
+ complete: result.code === 0,
347
+ finalMessage: result.finalMessage,
348
+ // App-server reports cumulative thread totals, not per-turn usage. Keep
349
+ // usage unknown rather than count continuations or feedback more than once.
350
+ inputTokens: null,
351
+ outputTokens: null,
352
+ usageComplete: false,
353
+ };
354
+ }
355
+ function initialSummary(appServer, execution) {
356
+ return appServer
357
+ ? appServerSummary(appServer)
358
+ : summarizeCodexEvents(execution.out, execution.code);
359
+ }
360
+ class CodexTurnExecution {
361
+ context;
362
+ appServerContinuation;
363
+ constructor(context) {
364
+ this.context = context;
365
+ }
366
+ async run() {
367
+ const fingerprint = await initialFingerprint(this.context.request);
368
+ const appServer = await this.maybeAppServer(fingerprint);
369
+ const execution = appServer ??
370
+ (await codexProcessTurn(this.context, initialTurnArgs(this.context), this.context.request.prompt));
371
+ const summary = initialSummary(appServer, execution);
372
+ requireInitialCompletion(summary, appServer);
373
+ const follow = await this.maybeFollowUp(summary, appServer, fingerprint);
374
+ return {
375
+ execution,
376
+ summary,
377
+ appServer,
378
+ ...follow,
379
+ };
380
+ }
381
+ async maybeAppServer(fingerprint) {
382
+ const { options, request, state, timeoutMs } = this.context;
383
+ if (options.entrypoint !== "app-server")
384
+ return null;
385
+ this.context.diagnostics.stage = "app-server";
386
+ return runCodexAppServer({
387
+ diagnostics: this.context.diagnostics,
388
+ argv: [
389
+ options.binary,
390
+ "app-server",
391
+ "--stdio",
392
+ "--strict-config",
393
+ "-c",
394
+ `default_permissions=${JSON.stringify(state.profileId)}`,
395
+ "-c",
396
+ "features.hooks=true",
397
+ ],
398
+ env: state.env,
399
+ permissionProfile: state.profileId,
400
+ vettedHooks: true,
401
+ request: {
402
+ repoDir: request.workspace,
403
+ prompt: request.prompt,
404
+ model: options.model,
405
+ effort: options.effort,
406
+ signal: request.signal,
407
+ control: {
408
+ appServerTimeoutMs: timeoutMs,
409
+ ...(request.followUpPrompt
410
+ ? { followUpPrompt: request.followUpPrompt }
411
+ : {}),
412
+ },
413
+ },
414
+ followUpBoundary: async (threadId, goal) => {
415
+ this.appServerContinuation = await continuationBoundary(this.context, threadId, fingerprint, goal);
416
+ return JSON.stringify({
417
+ type: "sevro.codex.feedback-boundary",
418
+ ...this.appServerContinuation.data,
419
+ });
420
+ },
421
+ });
422
+ }
423
+ async maybeFollowUp(summary, appServer, fingerprint) {
424
+ const prompt = this.context.request.followUpPrompt;
425
+ if (!prompt || appServer)
426
+ return {
427
+ followUp: null,
428
+ followUpSummary: null,
429
+ continuation: this.appServerContinuation,
430
+ };
431
+ const continuation = await continuationBoundary(this.context, summary.threadId, fingerprint);
432
+ const followUp = await codexProcessTurn(this.context, followUpTurnArgs(this.context, summary.threadId), prompt);
433
+ const followUpSummary = summarizeCodexEvents(followUp.out, followUp.code);
434
+ requireFollowUpCompletion(followUpSummary, summary);
435
+ return { followUp, followUpSummary, continuation };
436
+ }
437
+ }
438
+ function explicitInvocationReceipt(selected, completed) {
439
+ if (!selected)
440
+ return null;
441
+ return {
442
+ id: "sevro.codex.explicit-invocation",
443
+ completeness: completed ? "complete" : "partial",
444
+ data: {
445
+ method: "explicit_invocation",
446
+ primarySkill: selected.skillName,
447
+ },
448
+ };
449
+ }
450
+ function appServerObservation(result) {
451
+ return result
452
+ ? [
453
+ {
454
+ id: "sevro.host.native-goal",
455
+ completeness: result.code === 0 ? "complete" : "partial",
456
+ data: { ...result.evidence },
457
+ },
458
+ ]
459
+ : [];
460
+ }
461
+ async function codexObservations(context, turns) {
462
+ const tracking = await skillTrackingObservation(context.skillTracking, turns.summary.threadId, turns.summary.complete);
463
+ const native = await codexNativeCallObservation(context.state.codexHome, turns.summary.threadId, { followUpPrompt: context.request.followUpPrompt });
464
+ const explicit = explicitInvocationReceipt(context.request.explicitSkillInvocation, turns.summary.complete);
465
+ return [
466
+ ...(await codexHookObservations(context)),
467
+ ...runtimeObservations(context.request.runtimePolicy, context.request.runtimeRole),
468
+ ...appServerObservation(turns.appServer),
469
+ native,
470
+ codexNativeControls(native),
471
+ ...(turns.continuation ? [turns.continuation] : []),
472
+ ...(explicit ? [explicit] : []),
473
+ tracking,
474
+ ...skillActivationClaims(tracking),
475
+ ...skillExposureClaims(tracking),
476
+ ];
477
+ }
478
+ async function codexHookObservations(context) {
479
+ if (!context.request.runtimePolicy)
480
+ return [];
481
+ return [await runtimeHookObservation(context.hooks)];
482
+ }
483
+ function codexArtifacts(turns) {
484
+ return [
485
+ {
486
+ id: "sevro.codex.events",
487
+ bytes: Buffer.from(turns.execution.out, "utf8"),
488
+ },
489
+ ...(turns.followUp
490
+ ? [
491
+ {
492
+ id: "sevro.codex.follow-up-events",
493
+ bytes: Buffer.from(turns.followUp.out, "utf8"),
494
+ },
495
+ ]
496
+ : []),
497
+ ];
498
+ }
499
+ function tokenCount(initial, followUp) {
500
+ if (followUp === undefined)
501
+ return initial;
502
+ return initial !== null && followUp !== null ? initial + followUp : null;
503
+ }
504
+ function codexUsageComplete(summary, followUp) {
505
+ return summary.usageComplete && (followUp?.usageComplete ?? true);
506
+ }
507
+ function codexUsage(turns) {
508
+ return {
509
+ inputTokens: tokenCount(turns.summary.inputTokens, turns.followUpSummary?.inputTokens),
510
+ outputTokens: tokenCount(turns.summary.outputTokens, turns.followUpSummary?.outputTokens),
511
+ usageComplete: codexUsageComplete(turns.summary, turns.followUpSummary),
512
+ costUsd: null,
513
+ };
514
+ }
515
+ async function codexHostResult(context, turns) {
516
+ const final = turns.followUpSummary ?? turns.summary;
517
+ return {
518
+ finalMessage: final.finalMessage,
519
+ ...(turns.appServer ? { executionFailed: !turns.summary.complete } : {}),
520
+ complete: final.finalMessage !== null,
521
+ observations: await codexObservations(context, turns),
522
+ artifacts: codexArtifacts(turns),
523
+ actualCondition: "passive",
524
+ ...codexUsage(turns),
525
+ };
526
+ }
527
+ //# sourceMappingURL=codex.js.map