oh-my-super-agent 0.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.
- package/.agents/agents/advisor.md +15 -0
- package/.agents/agents/conductor.md +32 -0
- package/.agents/agents/dreamer.md +13 -0
- package/.agents/agents/executor.md +17 -0
- package/.agents/agents/grader.md +15 -0
- package/.agents/config/endurance-policy.json +8 -0
- package/.agents/config/oms-config.json +119 -0
- package/.agents/config/release-policy.json +12 -0
- package/.agents/config/secret-scan-policy.json +7 -0
- package/.agents/config/verification-plan.json +33 -0
- package/.agents/registry.json +11 -0
- package/.agents/rules/constitution.md +7 -0
- package/.agents/skills/conductor/SKILL.md +23 -0
- package/.agents/skills/dream/SKILL.md +14 -0
- package/.agents/skills/executor/SKILL.md +13 -0
- package/.agents/skills/oms/SKILL.md +52 -0
- package/.agents/skills/quota-aware/SKILL.md +12 -0
- package/.agents/skills/schedule/SKILL.md +13 -0
- package/.agents/skills/team-protocol/SKILL.md +20 -0
- package/LICENSE +21 -0
- package/README.md +146 -0
- package/dist/src/audit/run-ledger.d.ts +183 -0
- package/dist/src/audit/run-ledger.js +1655 -0
- package/dist/src/audit/run-ledger.js.map +1 -0
- package/dist/src/cli.d.ts +61 -0
- package/dist/src/cli.js +2096 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/github-queue-probe.d.ts +26 -0
- package/dist/src/commands/github-queue-probe.js +51 -0
- package/dist/src/commands/github-queue-probe.js.map +1 -0
- package/dist/src/commands/trace-fixture.d.ts +20 -0
- package/dist/src/commands/trace-fixture.js +72 -0
- package/dist/src/commands/trace-fixture.js.map +1 -0
- package/dist/src/conductor/activity.d.ts +46 -0
- package/dist/src/conductor/activity.js +224 -0
- package/dist/src/conductor/activity.js.map +1 -0
- package/dist/src/conductor/bridge.d.ts +53 -0
- package/dist/src/conductor/bridge.js +652 -0
- package/dist/src/conductor/bridge.js.map +1 -0
- package/dist/src/conductor/notifications.d.ts +59 -0
- package/dist/src/conductor/notifications.js +381 -0
- package/dist/src/conductor/notifications.js.map +1 -0
- package/dist/src/conductor/recovery.d.ts +29 -0
- package/dist/src/conductor/recovery.js +198 -0
- package/dist/src/conductor/recovery.js.map +1 -0
- package/dist/src/conductor/start.d.ts +73 -0
- package/dist/src/conductor/start.js +519 -0
- package/dist/src/conductor/start.js.map +1 -0
- package/dist/src/conductor/waiter.d.ts +88 -0
- package/dist/src/conductor/waiter.js +427 -0
- package/dist/src/conductor/waiter.js.map +1 -0
- package/dist/src/config.d.ts +9 -0
- package/dist/src/config.js +40 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/dispatch/advice-source.d.ts +61 -0
- package/dist/src/dispatch/advice-source.js +198 -0
- package/dist/src/dispatch/advice-source.js.map +1 -0
- package/dist/src/dispatch/advice-store.d.ts +41 -0
- package/dist/src/dispatch/advice-store.js +201 -0
- package/dist/src/dispatch/advice-store.js.map +1 -0
- package/dist/src/dispatch/advice.d.ts +34 -0
- package/dist/src/dispatch/advice.js +371 -0
- package/dist/src/dispatch/advice.js.map +1 -0
- package/dist/src/dispatch/authority.d.ts +124 -0
- package/dist/src/dispatch/authority.js +1202 -0
- package/dist/src/dispatch/authority.js.map +1 -0
- package/dist/src/dispatch/intent.d.ts +66 -0
- package/dist/src/dispatch/intent.js +71 -0
- package/dist/src/dispatch/intent.js.map +1 -0
- package/dist/src/dispatch/runtime-authority.d.ts +42 -0
- package/dist/src/dispatch/runtime-authority.js +52 -0
- package/dist/src/dispatch/runtime-authority.js.map +1 -0
- package/dist/src/doctor.d.ts +20 -0
- package/dist/src/doctor.js +85 -0
- package/dist/src/doctor.js.map +1 -0
- package/dist/src/domain/records.d.ts +44 -0
- package/dist/src/domain/records.js +138 -0
- package/dist/src/domain/records.js.map +1 -0
- package/dist/src/domain/role-policy.d.ts +67 -0
- package/dist/src/domain/role-policy.js +547 -0
- package/dist/src/domain/role-policy.js.map +1 -0
- package/dist/src/events/bus.d.ts +32 -0
- package/dist/src/events/bus.js +115 -0
- package/dist/src/events/bus.js.map +1 -0
- package/dist/src/events/kinds.d.ts +126 -0
- package/dist/src/events/kinds.js +14 -0
- package/dist/src/events/kinds.js.map +1 -0
- package/dist/src/evidence/immutable-file.d.ts +12 -0
- package/dist/src/evidence/immutable-file.js +141 -0
- package/dist/src/evidence/immutable-file.js.map +1 -0
- package/dist/src/evidence/store.d.ts +125 -0
- package/dist/src/evidence/store.js +1189 -0
- package/dist/src/evidence/store.js.map +1 -0
- package/dist/src/evidence/verdict.d.ts +17 -0
- package/dist/src/evidence/verdict.js +23 -0
- package/dist/src/evidence/verdict.js.map +1 -0
- package/dist/src/generation/agent.d.ts +5 -0
- package/dist/src/generation/agent.js +34 -0
- package/dist/src/generation/agent.js.map +1 -0
- package/dist/src/generation/frontmatter.d.ts +7 -0
- package/dist/src/generation/frontmatter.js +33 -0
- package/dist/src/generation/frontmatter.js.map +1 -0
- package/dist/src/github/adapter.d.ts +44 -0
- package/dist/src/github/adapter.js +592 -0
- package/dist/src/github/adapter.js.map +1 -0
- package/dist/src/github/dispatch-eligibility.d.ts +9 -0
- package/dist/src/github/dispatch-eligibility.js +94 -0
- package/dist/src/github/dispatch-eligibility.js.map +1 -0
- package/dist/src/github/projector.d.ts +23 -0
- package/dist/src/github/projector.js +181 -0
- package/dist/src/github/projector.js.map +1 -0
- package/dist/src/github/review.d.ts +39 -0
- package/dist/src/github/review.js +1450 -0
- package/dist/src/github/review.js.map +1 -0
- package/dist/src/github/sync.d.ts +21 -0
- package/dist/src/github/sync.js +518 -0
- package/dist/src/github/sync.js.map +1 -0
- package/dist/src/github/types.d.ts +134 -0
- package/dist/src/github/types.js +11 -0
- package/dist/src/github/types.js.map +1 -0
- package/dist/src/goals/artifact-store.d.ts +31 -0
- package/dist/src/goals/artifact-store.js +241 -0
- package/dist/src/goals/artifact-store.js.map +1 -0
- package/dist/src/goals/authority.d.ts +112 -0
- package/dist/src/goals/authority.js +621 -0
- package/dist/src/goals/authority.js.map +1 -0
- package/dist/src/goals/native-snapshot.d.ts +12 -0
- package/dist/src/goals/native-snapshot.js +53 -0
- package/dist/src/goals/native-snapshot.js.map +1 -0
- package/dist/src/goals/runtime-authority.d.ts +7 -0
- package/dist/src/goals/runtime-authority.js +20 -0
- package/dist/src/goals/runtime-authority.js.map +1 -0
- package/dist/src/health/release-assessment.d.ts +11 -0
- package/dist/src/health/release-assessment.js +83 -0
- package/dist/src/health/release-assessment.js.map +1 -0
- package/dist/src/health/release-policy.d.ts +16 -0
- package/dist/src/health/release-policy.js +40 -0
- package/dist/src/health/release-policy.js.map +1 -0
- package/dist/src/hooks/native.d.ts +30 -0
- package/dist/src/hooks/native.js +495 -0
- package/dist/src/hooks/native.js.map +1 -0
- package/dist/src/hooks/provider-runtime.d.ts +55 -0
- package/dist/src/hooks/provider-runtime.js +479 -0
- package/dist/src/hooks/provider-runtime.js.map +1 -0
- package/dist/src/hooks/provider.d.ts +102 -0
- package/dist/src/hooks/provider.js +358 -0
- package/dist/src/hooks/provider.js.map +1 -0
- package/dist/src/live/contact-journal.d.ts +73 -0
- package/dist/src/live/contact-journal.js +439 -0
- package/dist/src/live/contact-journal.js.map +1 -0
- package/dist/src/live-probes/gh-adapter.d.ts +28 -0
- package/dist/src/live-probes/gh-adapter.js +188 -0
- package/dist/src/live-probes/gh-adapter.js.map +1 -0
- package/dist/src/live-probes/github-queue.d.ts +1 -0
- package/dist/src/live-probes/github-queue.js +2 -0
- package/dist/src/live-probes/github-queue.js.map +1 -0
- package/dist/src/notifications/slack-request.d.ts +13 -0
- package/dist/src/notifications/slack-request.js +40 -0
- package/dist/src/notifications/slack-request.js.map +1 -0
- package/dist/src/outbox/processor.d.ts +27 -0
- package/dist/src/outbox/processor.js +63 -0
- package/dist/src/outbox/processor.js.map +1 -0
- package/dist/src/outbox/store.d.ts +158 -0
- package/dist/src/outbox/store.js +834 -0
- package/dist/src/outbox/store.js.map +1 -0
- package/dist/src/package-root.d.ts +1 -0
- package/dist/src/package-root.js +26 -0
- package/dist/src/package-root.js.map +1 -0
- package/dist/src/project.d.ts +12 -0
- package/dist/src/project.js +60 -0
- package/dist/src/project.js.map +1 -0
- package/dist/src/projection/generated-file.d.ts +15 -0
- package/dist/src/projection/generated-file.js +72 -0
- package/dist/src/projection/generated-file.js.map +1 -0
- package/dist/src/projection/project-workspace.d.ts +11 -0
- package/dist/src/projection/project-workspace.js +94 -0
- package/dist/src/projection/project-workspace.js.map +1 -0
- package/dist/src/projection/registry.d.ts +15 -0
- package/dist/src/projection/registry.js +59 -0
- package/dist/src/projection/registry.js.map +1 -0
- package/dist/src/projection/safe-path.d.ts +4 -0
- package/dist/src/projection/safe-path.js +106 -0
- package/dist/src/projection/safe-path.js.map +1 -0
- package/dist/src/providers/claude-interactive.d.ts +38 -0
- package/dist/src/providers/claude-interactive.js +287 -0
- package/dist/src/providers/claude-interactive.js.map +1 -0
- package/dist/src/providers/claude-structured-bridge.d.ts +32 -0
- package/dist/src/providers/claude-structured-bridge.js +215 -0
- package/dist/src/providers/claude-structured-bridge.js.map +1 -0
- package/dist/src/providers/claude-structured-completion.d.ts +23 -0
- package/dist/src/providers/claude-structured-completion.js +229 -0
- package/dist/src/providers/claude-structured-completion.js.map +1 -0
- package/dist/src/providers/claude-structured-pane.d.ts +23 -0
- package/dist/src/providers/claude-structured-pane.js +156 -0
- package/dist/src/providers/claude-structured-pane.js.map +1 -0
- package/dist/src/providers/claude-structured-store.d.ts +48 -0
- package/dist/src/providers/claude-structured-store.js +212 -0
- package/dist/src/providers/claude-structured-store.js.map +1 -0
- package/dist/src/providers/claude-structured.d.ts +56 -0
- package/dist/src/providers/claude-structured.js +250 -0
- package/dist/src/providers/claude-structured.js.map +1 -0
- package/dist/src/providers/codex-exec.d.ts +29 -0
- package/dist/src/providers/codex-exec.js +127 -0
- package/dist/src/providers/codex-exec.js.map +1 -0
- package/dist/src/providers/grading.d.ts +2 -0
- package/dist/src/providers/grading.js +20 -0
- package/dist/src/providers/grading.js.map +1 -0
- package/dist/src/providers/native-dispatch.d.ts +24 -0
- package/dist/src/providers/native-dispatch.js +34 -0
- package/dist/src/providers/native-dispatch.js.map +1 -0
- package/dist/src/providers/preflight.d.ts +65 -0
- package/dist/src/providers/preflight.js +256 -0
- package/dist/src/providers/preflight.js.map +1 -0
- package/dist/src/providers/process.d.ts +18 -0
- package/dist/src/providers/process.js +21 -0
- package/dist/src/providers/process.js.map +1 -0
- package/dist/src/queue/model.d.ts +37 -0
- package/dist/src/queue/model.js +51 -0
- package/dist/src/queue/model.js.map +1 -0
- package/dist/src/queue/service.d.ts +1 -0
- package/dist/src/queue/service.js +2 -0
- package/dist/src/queue/service.js.map +1 -0
- package/dist/src/reflections/store.d.ts +21 -0
- package/dist/src/reflections/store.js +60 -0
- package/dist/src/reflections/store.js.map +1 -0
- package/dist/src/reports/daily-trust.d.ts +11 -0
- package/dist/src/reports/daily-trust.js +98 -0
- package/dist/src/reports/daily-trust.js.map +1 -0
- package/dist/src/runs/controller.d.ts +187 -0
- package/dist/src/runs/controller.js +1182 -0
- package/dist/src/runs/controller.js.map +1 -0
- package/dist/src/runtime/composition.d.ts +9 -0
- package/dist/src/runtime/composition.js +35 -0
- package/dist/src/runtime/composition.js.map +1 -0
- package/dist/src/runtime/endurance-authorities.d.ts +44 -0
- package/dist/src/runtime/endurance-authorities.js +101 -0
- package/dist/src/runtime/endurance-authorities.js.map +1 -0
- package/dist/src/runtime/endurance-policy.d.ts +12 -0
- package/dist/src/runtime/endurance-policy.js +13 -0
- package/dist/src/runtime/endurance-policy.js.map +1 -0
- package/dist/src/runtime/lock.d.ts +63 -0
- package/dist/src/runtime/lock.js +577 -0
- package/dist/src/runtime/lock.js.map +1 -0
- package/dist/src/runtime/process-identity.d.ts +10 -0
- package/dist/src/runtime/process-identity.js +43 -0
- package/dist/src/runtime/process-identity.js.map +1 -0
- package/dist/src/runtime/quota.d.ts +130 -0
- package/dist/src/runtime/quota.js +590 -0
- package/dist/src/runtime/quota.js.map +1 -0
- package/dist/src/runtime/record-store.d.ts +45 -0
- package/dist/src/runtime/record-store.js +272 -0
- package/dist/src/runtime/record-store.js.map +1 -0
- package/dist/src/runtime/schema.d.ts +28 -0
- package/dist/src/runtime/schema.js +194 -0
- package/dist/src/runtime/schema.js.map +1 -0
- package/dist/src/runtime/stable-id.d.ts +3 -0
- package/dist/src/runtime/stable-id.js +27 -0
- package/dist/src/runtime/stable-id.js.map +1 -0
- package/dist/src/runtime/system-clock.d.ts +8 -0
- package/dist/src/runtime/system-clock.js +35 -0
- package/dist/src/runtime/system-clock.js.map +1 -0
- package/dist/src/schedule/service-plan.d.ts +58 -0
- package/dist/src/schedule/service-plan.js +327 -0
- package/dist/src/schedule/service-plan.js.map +1 -0
- package/dist/src/schedule/user-installation.d.ts +62 -0
- package/dist/src/schedule/user-installation.js +701 -0
- package/dist/src/schedule/user-installation.js.map +1 -0
- package/dist/src/schedule/user-plan.d.ts +47 -0
- package/dist/src/schedule/user-plan.js +286 -0
- package/dist/src/schedule/user-plan.js.map +1 -0
- package/dist/src/scheduler/minute.d.ts +31 -0
- package/dist/src/scheduler/minute.js +441 -0
- package/dist/src/scheduler/minute.js.map +1 -0
- package/dist/src/schemas/registry.d.ts +10 -0
- package/dist/src/schemas/registry.js +36 -0
- package/dist/src/schemas/registry.js.map +1 -0
- package/dist/src/security/secret-scan.d.ts +50 -0
- package/dist/src/security/secret-scan.js +384 -0
- package/dist/src/security/secret-scan.js.map +1 -0
- package/dist/src/sessions/registry.d.ts +89 -0
- package/dist/src/sessions/registry.js +443 -0
- package/dist/src/sessions/registry.js.map +1 -0
- package/dist/src/state.d.ts +27 -0
- package/dist/src/state.js +235 -0
- package/dist/src/state.js.map +1 -0
- package/dist/src/status/hud.d.ts +37 -0
- package/dist/src/status/hud.js +88 -0
- package/dist/src/status/hud.js.map +1 -0
- package/dist/src/team/plan.d.ts +31 -0
- package/dist/src/team/plan.js +184 -0
- package/dist/src/team/plan.js.map +1 -0
- package/dist/src/team/projection.d.ts +24 -0
- package/dist/src/team/projection.js +79 -0
- package/dist/src/team/projection.js.map +1 -0
- package/dist/src/tickets/admission.d.ts +34 -0
- package/dist/src/tickets/admission.js +169 -0
- package/dist/src/tickets/admission.js.map +1 -0
- package/dist/src/tickets/materializer.d.ts +1 -0
- package/dist/src/tickets/materializer.js +2 -0
- package/dist/src/tickets/materializer.js.map +1 -0
- package/dist/src/tickets/runtime-authority.d.ts +32 -0
- package/dist/src/tickets/runtime-authority.js +46 -0
- package/dist/src/tickets/runtime-authority.js.map +1 -0
- package/dist/src/tickets/store.d.ts +221 -0
- package/dist/src/tickets/store.js +2025 -0
- package/dist/src/tickets/store.js.map +1 -0
- package/dist/src/tracer/one-ticket.d.ts +58 -0
- package/dist/src/tracer/one-ticket.js +578 -0
- package/dist/src/tracer/one-ticket.js.map +1 -0
- package/dist/src/trust/assessment.d.ts +24 -0
- package/dist/src/trust/assessment.js +124 -0
- package/dist/src/trust/assessment.js.map +1 -0
- package/dist/src/trust/runs.d.ts +13 -0
- package/dist/src/trust/runs.js +46 -0
- package/dist/src/trust/runs.js.map +1 -0
- package/dist/src/types.d.ts +6 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/fs.d.ts +13 -0
- package/dist/src/utils/fs.js +188 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/verification/authority.d.ts +28 -0
- package/dist/src/verification/authority.js +153 -0
- package/dist/src/verification/authority.js.map +1 -0
- package/dist/src/verification/grade-source.d.ts +17 -0
- package/dist/src/verification/grade-source.js +30 -0
- package/dist/src/verification/grade-source.js.map +1 -0
- package/dist/src/verification/plan.d.ts +20 -0
- package/dist/src/verification/plan.js +128 -0
- package/dist/src/verification/plan.js.map +1 -0
- package/dist/src/verification/protected-runner.d.ts +50 -0
- package/dist/src/verification/protected-runner.js +171 -0
- package/dist/src/verification/protected-runner.js.map +1 -0
- package/dist/src/verification/result-gate-store.d.ts +72 -0
- package/dist/src/verification/result-gate-store.js +193 -0
- package/dist/src/verification/result-gate-store.js.map +1 -0
- package/dist/src/verification/result-gate.d.ts +41 -0
- package/dist/src/verification/result-gate.js +731 -0
- package/dist/src/verification/result-gate.js.map +1 -0
- package/dist/src/verification/runner.d.ts +38 -0
- package/dist/src/verification/runner.js +143 -0
- package/dist/src/verification/runner.js.map +1 -0
- package/dist/src/verification/sandbox.d.ts +16 -0
- package/dist/src/verification/sandbox.js +199 -0
- package/dist/src/verification/sandbox.js.map +1 -0
- package/dist/src/verify.d.ts +8 -0
- package/dist/src/verify.js +35 -0
- package/dist/src/verify.js.map +1 -0
- package/dist/src/watchdog/reconcile.d.ts +42 -0
- package/dist/src/watchdog/reconcile.js +440 -0
- package/dist/src/watchdog/reconcile.js.map +1 -0
- package/dist/src/workers/bridge.d.ts +35 -0
- package/dist/src/workers/bridge.js +426 -0
- package/dist/src/workers/bridge.js.map +1 -0
- package/dist/src/workers/delivery.d.ts +31 -0
- package/dist/src/workers/delivery.js +876 -0
- package/dist/src/workers/delivery.js.map +1 -0
- package/dist/src/workers/panes.d.ts +32 -0
- package/dist/src/workers/panes.js +212 -0
- package/dist/src/workers/panes.js.map +1 -0
- package/dist/src/workers/registry.d.ts +80 -0
- package/dist/src/workers/registry.js +351 -0
- package/dist/src/workers/registry.js.map +1 -0
- package/dist/src/workers/runtime.d.ts +44 -0
- package/dist/src/workers/runtime.js +21 -0
- package/dist/src/workers/runtime.js.map +1 -0
- package/dist/src/worktrees/manager.d.ts +35 -0
- package/dist/src/worktrees/manager.js +315 -0
- package/dist/src/worktrees/manager.js.map +1 -0
- package/docs/ARCHITECTURE.md +323 -0
- package/docs/PLAN.md +216 -0
- package/docs/REFERENCES.md +42 -0
- package/docs/ROADMAP.md +327 -0
- package/docs/SECURITY.md +242 -0
- package/docs/adr/0001-tracer-first-file-backed-certification.md +41 -0
- package/docs/adr/0002-conductor-first-typed-dispatch.md +102 -0
- package/docs/adr/0003-mandatory-pre-dispatch-advice.md +59 -0
- package/docs/compatibility/claude-code-2.1.207.md +25 -0
- package/loop/contract.md +102 -0
- package/package.json +54 -0
- package/schemas/advisor-evidence.schema.json +54 -0
- package/schemas/advisor-output.schema.json +31 -0
- package/schemas/conductor-activity-payload.schema.json +38 -0
- package/schemas/conductor-decision.schema.json +29 -0
- package/schemas/conductor-dispatch-intent.schema.json +71 -0
- package/schemas/conductor-dispatch-preparation.schema.json +46 -0
- package/schemas/conductor-dispatch-proposal.schema.json +82 -0
- package/schemas/conductor-goal-proposal.schema.json +30 -0
- package/schemas/conductor-manage-worker.schema.json +17 -0
- package/schemas/conductor-notification-payload.schema.json +39 -0
- package/schemas/conductor-process-result.schema.json +14 -0
- package/schemas/conductor-route.schema.json +51 -0
- package/schemas/conductor-start-team.schema.json +16 -0
- package/schemas/conductor-waiter-payload.schema.json +68 -0
- package/schemas/deterministic-check.schema.json +107 -0
- package/schemas/dispatch-acknowledgement.schema.json +15 -0
- package/schemas/dispatch-advice-payload.schema.json +64 -0
- package/schemas/dispatch-payload.schema.json +131 -0
- package/schemas/dispatch-result.schema.json +28 -0
- package/schemas/endurance-policy.schema.json +16 -0
- package/schemas/events/dispatch-delivery-requested.schema.json +17 -0
- package/schemas/events/github-observed.schema.json +28 -0
- package/schemas/events/native-hook-observed.schema.json +35 -0
- package/schemas/events/provider-observed.schema.json +64 -0
- package/schemas/events/run-heartbeat-due.schema.json +10 -0
- package/schemas/events/slack-notification-requested.schema.json +14 -0
- package/schemas/events/structured-role-completed.schema.json +54 -0
- package/schemas/events/ticket-resume-due.schema.json +28 -0
- package/schemas/events/watchdog-lease-expired.schema.json +14 -0
- package/schemas/events/watchdog-outbox-stalled.schema.json +12 -0
- package/schemas/events/watchdog-session-stalled.schema.json +11 -0
- package/schemas/evidence-record.schema.json +37 -0
- package/schemas/executor-result.schema.json +17 -0
- package/schemas/github-observation.schema.json +33 -0
- package/schemas/github-watermark.schema.json +66 -0
- package/schemas/goal-artifact.schema.json +19 -0
- package/schemas/goal-create-input.schema.json +14 -0
- package/schemas/goal-executor-result.schema.json +18 -0
- package/schemas/goal-payload.schema.json +95 -0
- package/schemas/grader-output.schema.json +33 -0
- package/schemas/lease-expiry.schema.json +19 -0
- package/schemas/live-disclosure.schema.json +16 -0
- package/schemas/live-outcome.schema.json +52 -0
- package/schemas/native-goal-snapshot.schema.json +27 -0
- package/schemas/provider-observed.schema.json +64 -0
- package/schemas/quota-observation.schema.json +72 -0
- package/schemas/reflection-evidence.schema.json +61 -0
- package/schemas/reflection.schema.json +13 -0
- package/schemas/regression-request.schema.json +54 -0
- package/schemas/release-assessment.schema.json +34 -0
- package/schemas/release-policy.schema.json +30 -0
- package/schemas/result-gate-payload.schema.json +244 -0
- package/schemas/review-delivery-payload.schema.json +42 -0
- package/schemas/role-policy.schema.json +111 -0
- package/schemas/run-abort-input.schema.json +11 -0
- package/schemas/run-completion-proof.schema.json +62 -0
- package/schemas/run-ledger-entry.schema.json +78 -0
- package/schemas/run-manifest.schema.json +74 -0
- package/schemas/run-start-intent.schema.json +74 -0
- package/schemas/runtime-record.schema.json +111 -0
- package/schemas/service-plan.schema.json +35 -0
- package/schemas/session-payload.schema.json +80 -0
- package/schemas/structured-role-read-request.schema.json +14 -0
- package/schemas/structured-role-request.schema.json +44 -0
- package/schemas/structured-role-result.schema.json +38 -0
- package/schemas/structured-role-submit-result.schema.json +15 -0
- package/schemas/team-checkpoint.schema.json +42 -0
- package/schemas/team-plan.schema.json +30 -0
- package/schemas/ticket-content.schema.json +38 -0
- package/schemas/ticket-queue-payload.schema.json +191 -0
- package/schemas/trust-report.schema.json +68 -0
- package/schemas/trust-run.schema.json +47 -0
- package/schemas/ultragoal-checkpoint.schema.json +49 -0
- package/schemas/user-schedule-installation-v1.schema.json +32 -0
- package/schemas/user-schedule-installation.schema.json +38 -0
- package/schemas/user-schedule-plan.schema.json +39 -0
- package/schemas/verification-plan-evidence.schema.json +37 -0
- package/schemas/worker-acknowledge-dispatch.schema.json +12 -0
- package/schemas/worker-payload.schema.json +47 -0
- package/schemas/worker-read-dispatch.schema.json +11 -0
- package/schemas/worker-record-dispatch-result.schema.json +14 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { claudeStructuredResultIdentity, } from "../providers/claude-structured.js";
|
|
2
|
+
import { codexStructuredResultIdentity, } from "../providers/codex-exec.js";
|
|
3
|
+
import { isRecord } from "../utils/fs.js";
|
|
4
|
+
export function captureProtectedGradeSource(source) {
|
|
5
|
+
if (source.engine === "codex") {
|
|
6
|
+
const identity = codexStructuredResultIdentity(source.result);
|
|
7
|
+
if (!identity.certifying || identity.role_id !== "oms.grader.codex" || !isRecord(source.result.value)) {
|
|
8
|
+
throw new Error("protected Codex grade source has the wrong structured role or output");
|
|
9
|
+
}
|
|
10
|
+
return Object.freeze({
|
|
11
|
+
engine: "codex",
|
|
12
|
+
role_id: "oms.grader.codex",
|
|
13
|
+
request_id: identity.request_id,
|
|
14
|
+
fresh_session_id: identity.fresh_session_id,
|
|
15
|
+
output: source.result.value,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
const identity = claudeStructuredResultIdentity(source.result);
|
|
19
|
+
if (!identity.certifying || identity.role_id !== "oms.grader.claude" || source.result.evidence_schema !== "grader-output.v1") {
|
|
20
|
+
throw new Error("protected Claude grade source has the wrong structured role or output");
|
|
21
|
+
}
|
|
22
|
+
return Object.freeze({
|
|
23
|
+
engine: "claude",
|
|
24
|
+
role_id: "oms.grader.claude",
|
|
25
|
+
request_id: identity.request_id,
|
|
26
|
+
fresh_session_id: identity.fresh_session_id,
|
|
27
|
+
output: source.result.result,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=grade-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grade-source.js","sourceRoot":"","sources":["../../../src/verification/grade-source.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,GAC/B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,6BAA6B,GAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAc1C,MAAM,UAAU,2BAA2B,CAAC,MAA4B;IACtE,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,KAAK,kBAAkB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,OAAgB;YACxB,OAAO,EAAE,kBAA2B;YACpC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,KAAK,mBAAmB,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,KAAK,kBAAkB,EAAE,CAAC;QAC7H,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,QAAiB;QACzB,OAAO,EAAE,mBAA4B;QACrC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;KAC7B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface VerificationStep {
|
|
2
|
+
id: string;
|
|
3
|
+
command: "typescript" | "vitest" | "oms";
|
|
4
|
+
args: readonly string[];
|
|
5
|
+
timeout_ms: number;
|
|
6
|
+
max_output_bytes: number;
|
|
7
|
+
}
|
|
8
|
+
export interface VerificationPlan {
|
|
9
|
+
schema_version: 1;
|
|
10
|
+
steps: readonly VerificationStep[];
|
|
11
|
+
}
|
|
12
|
+
export interface FrozenVerificationPlan {
|
|
13
|
+
readonly plan: VerificationPlan;
|
|
14
|
+
readonly digest: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function freezeTrackedVerificationPlan(packageRoot: string): FrozenVerificationPlan;
|
|
17
|
+
/** Re-establishes the immutable in-process brand from persisted prepare-phase evidence. */
|
|
18
|
+
export declare function rehydrateFrozenVerificationPlan(value: unknown): FrozenVerificationPlan;
|
|
19
|
+
export declare function assertFrozenVerificationPlan(value: FrozenVerificationPlan): VerificationPlan;
|
|
20
|
+
export declare function parseVerificationPlan(value: unknown, label?: string): VerificationPlan;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { isRecord, readJsonFileNoFollow, validateExistingDirectory } from "../utils/fs.js";
|
|
4
|
+
const FROZEN_PLANS = new WeakSet();
|
|
5
|
+
const SHIPPED_STEPS = Object.freeze([
|
|
6
|
+
Object.freeze({
|
|
7
|
+
id: "typecheck",
|
|
8
|
+
command: "typescript",
|
|
9
|
+
args: Object.freeze(["-p", "tsconfig.test.json", "--noEmit"]),
|
|
10
|
+
timeout_ms: 120_000,
|
|
11
|
+
max_output_bytes: 262_144,
|
|
12
|
+
}),
|
|
13
|
+
Object.freeze({
|
|
14
|
+
id: "test",
|
|
15
|
+
command: "vitest",
|
|
16
|
+
args: Object.freeze(["run", "--globals"]),
|
|
17
|
+
timeout_ms: 180_000,
|
|
18
|
+
max_output_bytes: 524_288,
|
|
19
|
+
}),
|
|
20
|
+
Object.freeze({
|
|
21
|
+
id: "build",
|
|
22
|
+
command: "typescript",
|
|
23
|
+
args: Object.freeze(["-p", "tsconfig.json"]),
|
|
24
|
+
timeout_ms: 120_000,
|
|
25
|
+
max_output_bytes: 262_144,
|
|
26
|
+
}),
|
|
27
|
+
Object.freeze({
|
|
28
|
+
id: "offline-verify",
|
|
29
|
+
command: "oms",
|
|
30
|
+
args: Object.freeze(["verify"]),
|
|
31
|
+
timeout_ms: 120_000,
|
|
32
|
+
max_output_bytes: 262_144,
|
|
33
|
+
}),
|
|
34
|
+
]);
|
|
35
|
+
export function freezeTrackedVerificationPlan(packageRoot) {
|
|
36
|
+
const root = validateExistingDirectory(packageRoot, "package root");
|
|
37
|
+
const agentsRoot = validateExistingDirectory(join(root, ".agents"), "tracked agents root");
|
|
38
|
+
const configRoot = validateExistingDirectory(join(agentsRoot, "config"), "tracked verification config root");
|
|
39
|
+
const path = join(configRoot, "verification-plan.json");
|
|
40
|
+
const parsed = parseVerificationPlan(readJsonFileNoFollow(path, 128 * 1024), path);
|
|
41
|
+
return freezeParsedPlan(parsed);
|
|
42
|
+
}
|
|
43
|
+
/** Re-establishes the immutable in-process brand from persisted prepare-phase evidence. */
|
|
44
|
+
export function rehydrateFrozenVerificationPlan(value) {
|
|
45
|
+
assertExactObject(value, ["plan", "digest"], "frozen verification plan evidence");
|
|
46
|
+
if (typeof value.digest !== "string" || !/^[0-9a-f]{64}$/.test(value.digest)) {
|
|
47
|
+
throw new Error("frozen verification plan evidence digest is invalid");
|
|
48
|
+
}
|
|
49
|
+
const plan = parseVerificationPlan(value.plan, "frozen verification plan evidence plan");
|
|
50
|
+
return freezeParsedPlan(plan, value.digest);
|
|
51
|
+
}
|
|
52
|
+
function freezeParsedPlan(parsed, expectedDigest) {
|
|
53
|
+
const plan = Object.freeze({
|
|
54
|
+
schema_version: 1,
|
|
55
|
+
steps: Object.freeze(parsed.steps.map((step) => Object.freeze({ ...step, args: Object.freeze([...step.args]) }))),
|
|
56
|
+
});
|
|
57
|
+
const digest = createHash("sha256").update(JSON.stringify(plan)).digest("hex");
|
|
58
|
+
if (expectedDigest !== undefined && expectedDigest !== digest) {
|
|
59
|
+
throw new Error("frozen verification plan evidence digest mismatch");
|
|
60
|
+
}
|
|
61
|
+
const frozen = Object.freeze({
|
|
62
|
+
plan,
|
|
63
|
+
digest,
|
|
64
|
+
});
|
|
65
|
+
FROZEN_PLANS.add(frozen);
|
|
66
|
+
return frozen;
|
|
67
|
+
}
|
|
68
|
+
export function assertFrozenVerificationPlan(value) {
|
|
69
|
+
if (!FROZEN_PLANS.has(value))
|
|
70
|
+
throw new Error("verification plan was not created by the trusted freeze boundary");
|
|
71
|
+
if (!Object.isFrozen(value) || !Object.isFrozen(value.plan) || !Object.isFrozen(value.plan.steps)) {
|
|
72
|
+
throw new Error("verification plan snapshot is not immutable");
|
|
73
|
+
}
|
|
74
|
+
const digest = createHash("sha256").update(JSON.stringify(value.plan)).digest("hex");
|
|
75
|
+
if (digest !== value.digest)
|
|
76
|
+
throw new Error("verification plan digest mismatch");
|
|
77
|
+
return value.plan;
|
|
78
|
+
}
|
|
79
|
+
export function parseVerificationPlan(value, label = "verification plan") {
|
|
80
|
+
assertExactObject(value, ["schema_version", "steps"], label);
|
|
81
|
+
if (value.schema_version !== 1)
|
|
82
|
+
throw new Error(`${label} schema_version must be 1`);
|
|
83
|
+
if (!Array.isArray(value.steps) || value.steps.length !== SHIPPED_STEPS.length) {
|
|
84
|
+
throw new Error(`${label} must contain the ${SHIPPED_STEPS.length} shipped steps`);
|
|
85
|
+
}
|
|
86
|
+
const steps = value.steps.map((candidate, index) => {
|
|
87
|
+
const stepLabel = `${label} step ${index + 1}`;
|
|
88
|
+
const expected = SHIPPED_STEPS[index];
|
|
89
|
+
if (!expected)
|
|
90
|
+
throw new Error(`${stepLabel} is not shipped`);
|
|
91
|
+
assertExactObject(candidate, ["id", "command", "args", "timeout_ms", "max_output_bytes"], stepLabel);
|
|
92
|
+
if (candidate.id !== expected.id)
|
|
93
|
+
throw new Error(`${stepLabel} id must be ${expected.id}`);
|
|
94
|
+
if (candidate.command !== expected.command) {
|
|
95
|
+
throw new Error(`${stepLabel} command must be ${expected.command}`);
|
|
96
|
+
}
|
|
97
|
+
if (!Array.isArray(candidate.args)
|
|
98
|
+
|| candidate.args.length !== expected.args.length
|
|
99
|
+
|| candidate.args.some((argument, argumentIndex) => argument !== expected.args[argumentIndex])) {
|
|
100
|
+
throw new Error(`${stepLabel} args do not match the shipped command`);
|
|
101
|
+
}
|
|
102
|
+
if (candidate.timeout_ms !== expected.timeout_ms) {
|
|
103
|
+
throw new Error(`${stepLabel} timeout_ms must be ${expected.timeout_ms}`);
|
|
104
|
+
}
|
|
105
|
+
if (candidate.max_output_bytes !== expected.max_output_bytes) {
|
|
106
|
+
throw new Error(`${stepLabel} max_output_bytes must be ${expected.max_output_bytes}`);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
...expected,
|
|
110
|
+
args: [...expected.args],
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
return { schema_version: 1, steps };
|
|
114
|
+
}
|
|
115
|
+
function assertExactObject(value, keys, label) {
|
|
116
|
+
if (!isRecord(value))
|
|
117
|
+
throw new Error(`${label} must be an object`);
|
|
118
|
+
const expected = new Set(keys);
|
|
119
|
+
for (const key of keys) {
|
|
120
|
+
if (!(key in value))
|
|
121
|
+
throw new Error(`${label} is missing ${key}`);
|
|
122
|
+
}
|
|
123
|
+
for (const key of Object.keys(value)) {
|
|
124
|
+
if (!expected.has(key))
|
|
125
|
+
throw new Error(`${label} has unexpected property: ${key}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/verification/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { RoleId } from "../domain/role-policy.js";
|
|
2
|
+
import type { EvidenceReference } from "../evidence/store.js";
|
|
3
|
+
import type { FrozenVerificationPlan } from "./plan.js";
|
|
4
|
+
import { type VerificationResult } from "./runner.js";
|
|
5
|
+
export interface ProtectedVerificationBinding {
|
|
6
|
+
readonly goal_id: string;
|
|
7
|
+
readonly goal_version: number;
|
|
8
|
+
readonly dispatch_id: string;
|
|
9
|
+
readonly dispatch_version: number;
|
|
10
|
+
readonly ticket_id: string;
|
|
11
|
+
readonly attempt: number;
|
|
12
|
+
readonly lease_token: string;
|
|
13
|
+
readonly session_id: string;
|
|
14
|
+
readonly worker_record_id: string;
|
|
15
|
+
readonly worker_id: string;
|
|
16
|
+
readonly worktree_id: string;
|
|
17
|
+
readonly worktree_root: string;
|
|
18
|
+
readonly worktree_branch: string;
|
|
19
|
+
readonly worktree_base_commit: string;
|
|
20
|
+
readonly expected_commit: string;
|
|
21
|
+
readonly executor_role: Extract<RoleId, "oms.ticket-executor" | "oms.goal-long-executor">;
|
|
22
|
+
readonly executor_engine: "claude" | "codex";
|
|
23
|
+
readonly executor_evidence: EvidenceReference;
|
|
24
|
+
}
|
|
25
|
+
export interface WorktreeVerificationProof {
|
|
26
|
+
readonly worktree_root: string;
|
|
27
|
+
readonly worktree_branch: string;
|
|
28
|
+
readonly head_commit: string;
|
|
29
|
+
readonly clean: true;
|
|
30
|
+
}
|
|
31
|
+
export interface ProtectedVerificationRun {
|
|
32
|
+
readonly binding: ProtectedVerificationBinding;
|
|
33
|
+
readonly policy_version: number;
|
|
34
|
+
readonly policy_digest: string;
|
|
35
|
+
readonly verification: VerificationResult;
|
|
36
|
+
readonly preflight: WorktreeVerificationProof;
|
|
37
|
+
readonly postflight: WorktreeVerificationProof;
|
|
38
|
+
}
|
|
39
|
+
export interface RunProtectedVerificationOptions {
|
|
40
|
+
packageRoot: string;
|
|
41
|
+
frozenPlan: FrozenVerificationPlan;
|
|
42
|
+
policyVersion: number;
|
|
43
|
+
policyDigest: string;
|
|
44
|
+
binding: ProtectedVerificationBinding;
|
|
45
|
+
}
|
|
46
|
+
/** Certifying path: caller cannot replace the process runner or installed tool paths. */
|
|
47
|
+
export declare function runProtectedVerification(options: RunProtectedVerificationOptions): ProtectedVerificationRun;
|
|
48
|
+
export declare function assertProtectedVerificationRun(value: unknown): asserts value is ProtectedVerificationRun;
|
|
49
|
+
export declare function captureProtectedVerificationBinding(value: ProtectedVerificationBinding): ProtectedVerificationBinding;
|
|
50
|
+
export declare function probeProtectedVerificationWorktree(binding: ProtectedVerificationBinding): WorktreeVerificationProof;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { realpathSync } from "node:fs";
|
|
2
|
+
import { isAbsolute, normalize } from "node:path";
|
|
3
|
+
import { assertLeaseToken, assertOpaqueId, assertRecordId } from "../domain/records.js";
|
|
4
|
+
import { runProcess } from "../providers/process.js";
|
|
5
|
+
import { validateExistingDirectory } from "../utils/fs.js";
|
|
6
|
+
import { runFrozenVerification } from "./runner.js";
|
|
7
|
+
const COMMIT_PATTERN = /^[a-f0-9]{40}(?:[a-f0-9]{24})?$/u;
|
|
8
|
+
const PROTECTED_VERIFICATION_RUNS = new WeakSet();
|
|
9
|
+
/** Certifying path: caller cannot replace the process runner or installed tool paths. */
|
|
10
|
+
export function runProtectedVerification(options) {
|
|
11
|
+
const packageRoot = validateExistingDirectory(options.packageRoot, "installed OMS package root");
|
|
12
|
+
const binding = captureProtectedVerificationBinding(options.binding);
|
|
13
|
+
if (!Number.isSafeInteger(options.policyVersion) || options.policyVersion < 1) {
|
|
14
|
+
throw new Error("protected verification policy version is invalid");
|
|
15
|
+
}
|
|
16
|
+
if (!/^[a-f0-9]{64}$/u.test(options.policyDigest)) {
|
|
17
|
+
throw new Error("protected verification policy digest is invalid");
|
|
18
|
+
}
|
|
19
|
+
const preflight = probeProtectedVerificationWorktree(binding);
|
|
20
|
+
const verification = runFrozenVerification({
|
|
21
|
+
packageRoot,
|
|
22
|
+
frozenPlan: options.frozenPlan,
|
|
23
|
+
worktreeRoot: binding.worktree_root,
|
|
24
|
+
runner: runProcess,
|
|
25
|
+
requireInstalledTools: true,
|
|
26
|
+
});
|
|
27
|
+
const postflight = probeProtectedVerificationWorktree(binding);
|
|
28
|
+
const run = deepFreeze({
|
|
29
|
+
binding,
|
|
30
|
+
policy_version: options.policyVersion,
|
|
31
|
+
policy_digest: options.policyDigest,
|
|
32
|
+
verification,
|
|
33
|
+
preflight,
|
|
34
|
+
postflight,
|
|
35
|
+
});
|
|
36
|
+
PROTECTED_VERIFICATION_RUNS.add(run);
|
|
37
|
+
return run;
|
|
38
|
+
}
|
|
39
|
+
export function assertProtectedVerificationRun(value) {
|
|
40
|
+
if (typeof value !== "object" || value === null || !PROTECTED_VERIFICATION_RUNS.has(value)) {
|
|
41
|
+
throw new Error("live deterministic evidence requires a real OMS protected verification run");
|
|
42
|
+
}
|
|
43
|
+
if (!Object.isFrozen(value))
|
|
44
|
+
throw new Error("protected verification run lost its frozen authority boundary");
|
|
45
|
+
}
|
|
46
|
+
export function captureProtectedVerificationBinding(value) {
|
|
47
|
+
const worktreeRoot = validateExistingDirectory(value.worktree_root, "verification worktree");
|
|
48
|
+
if (!isAbsolute(value.worktree_root) || normalize(value.worktree_root) !== value.worktree_root || worktreeRoot !== value.worktree_root) {
|
|
49
|
+
throw new Error("verification worktree binding must be a canonical absolute path");
|
|
50
|
+
}
|
|
51
|
+
if (!Number.isSafeInteger(value.attempt) || value.attempt < 1)
|
|
52
|
+
throw new Error("verification attempt is invalid");
|
|
53
|
+
if (!Number.isSafeInteger(value.goal_version) || value.goal_version < 0)
|
|
54
|
+
throw new Error("verification goal version is invalid");
|
|
55
|
+
if (!Number.isSafeInteger(value.dispatch_version) || value.dispatch_version < 0) {
|
|
56
|
+
throw new Error("verification dispatch version is invalid");
|
|
57
|
+
}
|
|
58
|
+
if (typeof value.worktree_branch !== "string" || value.worktree_branch.length < 1 || value.worktree_branch.length > 255) {
|
|
59
|
+
throw new Error("verification worktree branch is invalid");
|
|
60
|
+
}
|
|
61
|
+
if (!COMMIT_PATTERN.test(value.expected_commit))
|
|
62
|
+
throw new Error("verification expected commit is invalid");
|
|
63
|
+
if (!COMMIT_PATTERN.test(value.worktree_base_commit))
|
|
64
|
+
throw new Error("verification worktree base commit is invalid");
|
|
65
|
+
if (value.executor_role !== "oms.ticket-executor" && value.executor_role !== "oms.goal-long-executor") {
|
|
66
|
+
throw new Error("verification executor role is invalid");
|
|
67
|
+
}
|
|
68
|
+
const expectedEngine = value.executor_role === "oms.ticket-executor" ? "claude" : "codex";
|
|
69
|
+
if (value.executor_engine !== expectedEngine)
|
|
70
|
+
throw new Error("verification executor engine does not match its role");
|
|
71
|
+
const executorEvidence = captureEvidenceReference(value.executor_evidence);
|
|
72
|
+
return deepFreeze({
|
|
73
|
+
goal_id: assertRecordId(value.goal_id, "verification goal id"),
|
|
74
|
+
goal_version: value.goal_version,
|
|
75
|
+
dispatch_id: assertRecordId(value.dispatch_id, "verification dispatch id"),
|
|
76
|
+
dispatch_version: value.dispatch_version,
|
|
77
|
+
ticket_id: assertRecordId(value.ticket_id, "verification ticket id"),
|
|
78
|
+
attempt: value.attempt,
|
|
79
|
+
lease_token: assertLeaseToken(value.lease_token, "verification lease token"),
|
|
80
|
+
session_id: assertOpaqueId(value.session_id, "verification session id"),
|
|
81
|
+
worker_record_id: assertRecordId(value.worker_record_id, "verification worker record id"),
|
|
82
|
+
worker_id: assertOpaqueId(value.worker_id, "verification worker id"),
|
|
83
|
+
worktree_id: assertOpaqueId(value.worktree_id, "verification worktree id"),
|
|
84
|
+
worktree_root: worktreeRoot,
|
|
85
|
+
worktree_branch: value.worktree_branch,
|
|
86
|
+
worktree_base_commit: value.worktree_base_commit,
|
|
87
|
+
expected_commit: value.expected_commit,
|
|
88
|
+
executor_role: value.executor_role,
|
|
89
|
+
executor_engine: value.executor_engine,
|
|
90
|
+
executor_evidence: executorEvidence,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function captureEvidenceReference(value) {
|
|
94
|
+
if (typeof value !== "object"
|
|
95
|
+
|| value === null
|
|
96
|
+
|| !/^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/u.test(value.evidence_id)
|
|
97
|
+
|| !/^[a-f0-9]{64}$/u.test(value.sha256)
|
|
98
|
+
|| value.file_name !== `${value.evidence_id}.json`) {
|
|
99
|
+
throw new Error("verification executor evidence reference is invalid");
|
|
100
|
+
}
|
|
101
|
+
return Object.freeze({ ...value });
|
|
102
|
+
}
|
|
103
|
+
export function probeProtectedVerificationWorktree(binding) {
|
|
104
|
+
const env = protectedGitEnvironment(process.env);
|
|
105
|
+
const identity = requireGitSuccess({
|
|
106
|
+
command: "git",
|
|
107
|
+
args: ["rev-parse", "--path-format=absolute", "--show-toplevel", "HEAD"],
|
|
108
|
+
cwd: binding.worktree_root,
|
|
109
|
+
env,
|
|
110
|
+
timeoutMs: 10_000,
|
|
111
|
+
maxBufferBytes: 64 * 1024,
|
|
112
|
+
}, "verification worktree identity probe");
|
|
113
|
+
const [reportedRoot, headCommit, ...extra] = identity.stdout.trim().split(/\r?\n/u);
|
|
114
|
+
const branch = requireGitSuccess({
|
|
115
|
+
command: "git",
|
|
116
|
+
args: ["symbolic-ref", "--short", "HEAD"],
|
|
117
|
+
cwd: binding.worktree_root,
|
|
118
|
+
env,
|
|
119
|
+
timeoutMs: 10_000,
|
|
120
|
+
maxBufferBytes: 64 * 1024,
|
|
121
|
+
}, "verification worktree branch probe").stdout.trim();
|
|
122
|
+
const status = requireGitSuccess({
|
|
123
|
+
command: "git",
|
|
124
|
+
args: ["status", "--porcelain=v1", "--untracked-files=all"],
|
|
125
|
+
cwd: binding.worktree_root,
|
|
126
|
+
env,
|
|
127
|
+
timeoutMs: 10_000,
|
|
128
|
+
maxBufferBytes: 64 * 1024,
|
|
129
|
+
}, "verification worktree cleanliness probe").stdout.trim();
|
|
130
|
+
if (!reportedRoot
|
|
131
|
+
|| !headCommit
|
|
132
|
+
|| extra.length > 0
|
|
133
|
+
|| realpathSync.native(reportedRoot) !== binding.worktree_root
|
|
134
|
+
|| branch !== binding.worktree_branch
|
|
135
|
+
|| headCommit !== binding.expected_commit
|
|
136
|
+
|| status !== "") {
|
|
137
|
+
throw new Error("verification worktree does not match the expected clean branch and commit");
|
|
138
|
+
}
|
|
139
|
+
return Object.freeze({
|
|
140
|
+
worktree_root: binding.worktree_root,
|
|
141
|
+
worktree_branch: branch,
|
|
142
|
+
head_commit: headCommit,
|
|
143
|
+
clean: true,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function requireGitSuccess(request, label) {
|
|
147
|
+
const result = runProcess(request);
|
|
148
|
+
if (result.error || result.status !== 0 || result.signal !== null) {
|
|
149
|
+
throw new Error(`${label} failed`);
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
function protectedGitEnvironment(source) {
|
|
154
|
+
const env = {};
|
|
155
|
+
for (const key of ["PATH", "HOME", "TMPDIR", "TMP", "TEMP", "LANG", "LC_ALL", "SYSTEMROOT"]) {
|
|
156
|
+
if (source[key] !== undefined)
|
|
157
|
+
env[key] = source[key];
|
|
158
|
+
}
|
|
159
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
160
|
+
env.GIT_CONFIG_NOSYSTEM = "1";
|
|
161
|
+
env.GIT_CONFIG_GLOBAL = "/dev/null";
|
|
162
|
+
return env;
|
|
163
|
+
}
|
|
164
|
+
function deepFreeze(value) {
|
|
165
|
+
if (typeof value !== "object" || value === null || Object.isFrozen(value))
|
|
166
|
+
return value;
|
|
167
|
+
for (const child of Object.values(value))
|
|
168
|
+
deepFreeze(child);
|
|
169
|
+
return Object.freeze(value);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=protected-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protected-runner.js","sourceRoot":"","sources":["../../../src/verification/protected-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type RuntimeRecord } from "../domain/records.js";
|
|
2
|
+
import type { Engine, RoleId } from "../domain/role-policy.js";
|
|
3
|
+
import type { EvidenceReference } from "../evidence/store.js";
|
|
4
|
+
export type ResultGateState = "checking" | "checked" | "grading" | "graded" | "reflecting" | "finalized" | "blocked";
|
|
5
|
+
export type ResultGateOutcome = "completed" | "retryable" | "blocked";
|
|
6
|
+
export interface ResultGateSubject {
|
|
7
|
+
readonly goal_id: string;
|
|
8
|
+
readonly goal_version: number;
|
|
9
|
+
readonly dispatch_id: string;
|
|
10
|
+
readonly dispatch_version: number;
|
|
11
|
+
readonly ticket_id: string;
|
|
12
|
+
readonly verifying_ticket_version: number;
|
|
13
|
+
readonly attempt: number;
|
|
14
|
+
readonly max_attempts: number;
|
|
15
|
+
readonly lease_token: string;
|
|
16
|
+
readonly worker_record_id: string;
|
|
17
|
+
readonly worker_id: string;
|
|
18
|
+
readonly session_id: string;
|
|
19
|
+
readonly executor_role: Extract<RoleId, "oms.ticket-executor" | "oms.goal-long-executor">;
|
|
20
|
+
readonly executor_engine: Engine;
|
|
21
|
+
readonly worktree_id: string;
|
|
22
|
+
readonly worktree_root: string;
|
|
23
|
+
readonly worktree_branch: string;
|
|
24
|
+
readonly worktree_base_commit: string;
|
|
25
|
+
readonly expected_commit: string;
|
|
26
|
+
readonly policy_version: number;
|
|
27
|
+
readonly policy_digest: string;
|
|
28
|
+
readonly plan_digest: string;
|
|
29
|
+
readonly verification_plan_ref: EvidenceReference;
|
|
30
|
+
readonly executor_evidence: EvidenceReference;
|
|
31
|
+
}
|
|
32
|
+
export interface ResultGateRoleRequest {
|
|
33
|
+
readonly request_id: string;
|
|
34
|
+
readonly role_id: "oms.grader.codex" | "oms.grader.claude" | "oms.bounded-dreamer";
|
|
35
|
+
readonly engine: Engine;
|
|
36
|
+
readonly evidence_schema: "grader-output.v1" | "reflection.v1";
|
|
37
|
+
readonly input: Readonly<Record<string, unknown>>;
|
|
38
|
+
readonly started_at: string | null;
|
|
39
|
+
readonly session_id: string | null;
|
|
40
|
+
}
|
|
41
|
+
export type ResultGatePayload = Record<string, unknown> & {
|
|
42
|
+
gate_id: string;
|
|
43
|
+
subject: ResultGateSubject;
|
|
44
|
+
created_at: string;
|
|
45
|
+
updated_at: string;
|
|
46
|
+
deterministic_evidence: EvidenceReference | null;
|
|
47
|
+
grade_request: ResultGateRoleRequest | null;
|
|
48
|
+
grade_evidence: EvidenceReference | null;
|
|
49
|
+
reflection_request: ResultGateRoleRequest | null;
|
|
50
|
+
reflection_evidence: EvidenceReference | null;
|
|
51
|
+
outcome: ResultGateOutcome | null;
|
|
52
|
+
trust_evidence: EvidenceReference | null;
|
|
53
|
+
blocked_reason: string | null;
|
|
54
|
+
};
|
|
55
|
+
export type ResultGateRecord = RuntimeRecord<ResultGateState, ResultGatePayload>;
|
|
56
|
+
export interface ResultGateStore {
|
|
57
|
+
create(gateId: string, subject: ResultGateSubject, at: string): ResultGateRecord;
|
|
58
|
+
read(gateId: string): ResultGateRecord;
|
|
59
|
+
readIfExists(gateId: string): ResultGateRecord | undefined;
|
|
60
|
+
transition(options: {
|
|
61
|
+
record: ResultGateRecord;
|
|
62
|
+
step: string;
|
|
63
|
+
toState: ResultGateState;
|
|
64
|
+
at: string;
|
|
65
|
+
update: (payload: ResultGatePayload) => ResultGatePayload;
|
|
66
|
+
}): ResultGateRecord;
|
|
67
|
+
list(): readonly ResultGateRecord[];
|
|
68
|
+
}
|
|
69
|
+
export declare function createResultGateStore(options: {
|
|
70
|
+
packageRoot: string;
|
|
71
|
+
stateRoot: string;
|
|
72
|
+
}): ResultGateStore;
|