@iislee/opencodex 2.11.0 → 2.35.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_INSTALL.md +109 -0
- package/README.md +117 -22
- package/bin/ocx.mjs +245 -88
- package/bin/package-main.mjs +1 -1
- package/gui/dist/assets/index-Be1sDpWw.css +1 -0
- package/gui/dist/assets/index-D4OKgUV4.js +114 -0
- package/gui/dist/index.html +2 -2
- package/gui/dist/provider-icons/alibaba-color.svg +1 -1
- package/gui/dist/provider-icons/antigravity-color.svg +1 -1
- package/gui/dist/provider-icons/claude-color.svg +1 -1
- package/gui/dist/provider-icons/cline-color.svg +16 -0
- package/gui/dist/provider-icons/cloudflare-ai-gateway-color.svg +1 -1
- package/gui/dist/provider-icons/commandcode-color.svg +1 -0
- package/gui/dist/provider-icons/copilot-color.svg +1 -1
- package/gui/dist/provider-icons/cursor-color.svg +1 -1
- package/gui/dist/provider-icons/deepseek-color.svg +1 -1
- package/gui/dist/provider-icons/firepass-color.svg +1 -1
- package/gui/dist/provider-icons/fireworks-color.svg +1 -1
- package/gui/dist/provider-icons/gemini-color.svg +1 -1
- package/gui/dist/provider-icons/github-copilot-color.svg +1 -1
- package/gui/dist/provider-icons/gitlab-duo-color.svg +1 -1
- package/gui/dist/provider-icons/grok.svg +1 -1
- package/gui/dist/provider-icons/groq-color.svg +1 -1
- package/gui/dist/provider-icons/huggingface-color.svg +1 -1
- package/gui/dist/provider-icons/kimi-color.svg +1 -1
- package/gui/dist/provider-icons/kiro-color.svg +2 -2
- package/gui/dist/provider-icons/lm-studio-color.svg +1 -1
- package/gui/dist/provider-icons/mistral-color.svg +1 -1
- package/gui/dist/provider-icons/moonshot-color.svg +1 -1
- package/gui/dist/provider-icons/nvidia-color.svg +1 -1
- package/gui/dist/provider-icons/ollama-color.svg +1 -1
- package/gui/dist/provider-icons/openai.svg +1 -1
- package/gui/dist/provider-icons/opencode.svg +2 -1
- package/gui/dist/provider-icons/openrouter-color.svg +1 -1
- package/gui/dist/provider-icons/pi.svg +2 -2
- package/gui/dist/provider-icons/qianfan-color.svg +1 -1
- package/gui/dist/provider-icons/qwen-portal-color.svg +1 -1
- package/gui/dist/provider-icons/vercel-ai-gateway-color.svg +1 -1
- package/gui/dist/provider-icons/vllm-color.svg +1 -1
- package/gui/dist/provider-icons/xiaomi-color.svg +1 -1
- package/package.json +21 -10
- package/src/adapters/anthropic-output-schema.ts +137 -0
- package/src/adapters/anthropic.ts +475 -62
- package/src/adapters/base.ts +82 -7
- package/src/adapters/client-fingerprint.ts +18 -12
- package/src/adapters/cline-pass-deepseek-v4-tool-replay.ts +69 -0
- package/src/adapters/command-code.ts +637 -0
- package/src/adapters/cursor/call-id.ts +44 -0
- package/src/adapters/cursor/catalog.ts +541 -0
- package/src/adapters/cursor/checkpoint-store.ts +308 -0
- package/src/adapters/cursor/cursor-errors.ts +144 -6
- package/src/adapters/cursor/discovery.ts +122 -14
- package/src/adapters/cursor/effort-map.ts +106 -4
- package/src/adapters/cursor/envelope-echo.ts +290 -0
- package/src/adapters/cursor/framing.ts +39 -0
- package/src/adapters/cursor/h2-pool.ts +123 -0
- package/src/adapters/cursor/http1-bidi.ts +361 -0
- package/src/adapters/cursor/images.ts +704 -0
- package/src/adapters/cursor/live-models.ts +180 -59
- package/src/adapters/cursor/live-transport.ts +623 -170
- package/src/adapters/cursor/message-mapper.ts +4 -1
- package/src/adapters/cursor/native-exec-common.ts +23 -2
- package/src/adapters/cursor/native-exec-desktop.ts +23 -0
- package/src/adapters/cursor/native-exec-fs.ts +10 -7
- package/src/adapters/cursor/native-exec-network.ts +1 -1
- package/src/adapters/cursor/native-exec-shell.ts +5 -3
- package/src/adapters/cursor/native-exec.ts +121 -14
- package/src/adapters/cursor/protobuf-events.ts +829 -11
- package/src/adapters/cursor/protobuf-request.ts +447 -75
- package/src/adapters/cursor/request-builder.ts +271 -35
- package/src/adapters/cursor/tool-definitions.ts +252 -12
- package/src/adapters/cursor/tool-result-normalize.ts +115 -0
- package/src/adapters/cursor/transport.ts +22 -0
- package/src/adapters/cursor/types.ts +48 -1
- package/src/adapters/cursor.ts +336 -39
- package/src/adapters/exec-tool-result-normalize.ts +99 -0
- package/src/adapters/google-antigravity-replay.ts +713 -41
- package/src/adapters/google-antigravity-wire.ts +48 -10
- package/src/adapters/google-errors.ts +44 -12
- package/src/adapters/google-http.ts +38 -10
- package/src/adapters/google-tool-schema.ts +80 -15
- package/src/adapters/google-truncation.ts +11 -0
- package/src/adapters/google.ts +742 -86
- package/src/adapters/identity.ts +39 -6
- package/src/adapters/image.ts +1 -1
- package/src/adapters/kiro-constants.ts +27 -0
- package/src/adapters/kiro-errors.ts +11 -0
- package/src/adapters/kiro-events.ts +19 -1
- package/src/adapters/kiro-thinking.ts +18 -2
- package/src/adapters/kiro-tools.ts +65 -17
- package/src/adapters/kiro.ts +270 -73
- package/src/adapters/mimo-free.ts +17 -0
- package/src/adapters/openai-chat-url.ts +11 -0
- package/src/adapters/openai-chat.ts +1377 -344
- package/src/adapters/openai-responses-url.ts +16 -0
- package/src/adapters/openai-responses.ts +1164 -64
- package/src/adapters/registry.ts +175 -0
- package/src/adapters/responses-tool-schema.ts +67 -0
- package/src/adapters/run-turn-queue.ts +36 -1
- package/src/adapters/tool-call-id.ts +119 -0
- package/src/adapters/tool-catalog-nudge.ts +105 -21
- package/src/adapters/xai-tool-schema.ts +436 -0
- package/src/adapters/xai-web-search.ts +186 -0
- package/src/bridge.ts +512 -92
- package/src/chat/inbound.ts +57 -20
- package/src/chat/outbound.ts +97 -33
- package/src/claude/agents-inject.ts +40 -10
- package/src/claude/context-windows.ts +37 -14
- package/src/claude/desktop-3p.ts +243 -9
- package/src/claude/gateway-cache.ts +41 -4
- package/src/claude/inbound.ts +72 -3
- package/src/claude/model-info.ts +38 -15
- package/src/claude/outbound.ts +88 -21
- package/src/cli/access.ts +46 -3
- package/src/cli/account-api.ts +150 -19
- package/src/cli/account-auth.ts +33 -6
- package/src/cli/account-catalog-refresh.ts +14 -0
- package/src/cli/account-extended.ts +648 -28
- package/src/cli/account-main.ts +317 -0
- package/src/cli/account.ts +97 -19
- package/src/cli/agent.ts +53 -2
- package/src/cli/alias.ts +66 -0
- package/src/cli/capabilities-command.ts +94 -0
- package/src/cli/capabilities.ts +496 -0
- package/src/cli/claude-agent-startup-sync.ts +73 -0
- package/src/cli/claude-desktop.ts +60 -15
- package/src/cli/claude.ts +129 -35
- package/src/cli/codex-log-guard-doctor.ts +103 -0
- package/src/cli/codex-shim-autorestore.ts +2 -0
- package/src/cli/codex-shim-readiness.ts +76 -0
- package/src/cli/combo.ts +8 -0
- package/src/cli/config-command.ts +74 -10
- package/src/cli/dispatch.ts +821 -0
- package/src/cli/doctor.ts +440 -56
- package/src/cli/ensure-desired-integrations.ts +152 -0
- package/src/cli/export-command.ts +46 -20
- package/src/cli/help.ts +34 -274
- package/src/cli/index.ts +417 -528
- package/src/cli/init.ts +5 -17
- package/src/cli/inspect.ts +230 -0
- package/src/cli/integrations.ts +120 -2
- package/src/cli/lab.ts +607 -0
- package/src/cli/launcher-context.ts +77 -0
- package/src/cli/minimax.ts +497 -0
- package/src/cli/models-runtime.ts +130 -2
- package/src/cli/models.ts +118 -16
- package/src/cli/observe.ts +123 -11
- package/src/cli/opencode.ts +4 -2
- package/src/cli/provider-runtime.ts +34 -3
- package/src/cli/provider.ts +25 -3
- package/src/cli/ready.ts +301 -0
- package/src/cli/registry.ts +476 -0
- package/src/cli/root.ts +86 -0
- package/src/cli/route-policy.ts +92 -0
- package/src/cli/runtime-api.ts +57 -10
- package/src/cli/star-prompt.ts +71 -15
- package/src/cli/status.ts +51 -4
- package/src/cli/storage.ts +234 -0
- package/src/cli/system-command.ts +16 -0
- package/src/cli/system-restart-client.ts +146 -0
- package/src/cli/tray-proxy.ts +153 -6
- package/src/cli/usage-report.ts +184 -0
- package/src/cli/v2.ts +137 -18
- package/src/cli/version-skew.ts +46 -0
- package/src/cli.ts +1 -1
- package/src/clients/config-export.ts +1442 -23
- package/src/clients/effective-status.ts +30 -2
- package/src/clients/probes/cline.ts +81 -0
- package/src/codex/account-label.ts +35 -1
- package/src/codex/account-lifecycle.ts +130 -13
- package/src/codex/account-namespaces.ts +49 -3
- package/src/codex/account-pause.ts +2 -1
- package/src/codex/account-priority.ts +84 -0
- package/src/codex/account-store.ts +29 -2
- package/src/codex/account-usability.ts +25 -2
- package/src/codex/admission.ts +256 -0
- package/src/codex/affinity-debug.ts +162 -0
- package/src/codex/app-server-processes.ts +570 -107
- package/src/codex/app-server-restart-service.ts +232 -0
- package/src/codex/auth-api.ts +893 -246
- package/src/codex/auth-collision.ts +5 -3
- package/src/codex/auth-context.ts +348 -32
- package/src/codex/autostart-health.ts +24 -1
- package/src/codex/catalog/account-models.ts +67 -0
- package/src/codex/catalog/aggregation.ts +86 -10
- package/src/codex/catalog/bundled.ts +331 -33
- package/src/codex/catalog/effort.ts +138 -32
- package/src/codex/catalog/filesystem-evidence.ts +302 -0
- package/src/codex/catalog/kinds.ts +2 -0
- package/src/codex/catalog/metadata.ts +555 -45
- package/src/codex/catalog/native-models.ts +75 -0
- package/src/codex/catalog/parsing.ts +269 -30
- package/src/codex/catalog/provider-fetch.ts +1626 -144
- package/src/codex/catalog/sync.ts +1576 -187
- package/src/codex/catalog-admission.ts +199 -0
- package/src/codex/catalog-refresh-status.ts +105 -0
- package/src/codex/catalog-write-serialization.ts +242 -0
- package/src/codex/catalog.ts +6 -3
- package/src/codex/codex-write-lock.ts +386 -0
- package/src/codex/convergence-types.ts +614 -0
- package/src/codex/convergence.ts +676 -0
- package/src/codex/coordinator-doctor.ts +332 -0
- package/src/codex/custom-model-catalog-migration.ts +176 -0
- package/src/codex/desired-state.ts +230 -0
- package/src/codex/desktop-app-restart.ts +355 -0
- package/src/codex/features.ts +636 -39
- package/src/codex/generation.ts +202 -0
- package/src/codex/history-job.ts +436 -0
- package/src/codex/history-lock.ts +242 -0
- package/src/codex/history-manifest.ts +112 -0
- package/src/codex/history-migration-guardian.ts +30 -24
- package/src/codex/history-provider.ts +1016 -235
- package/src/codex/history-transition.ts +105 -0
- package/src/codex/history-worker.ts +223 -0
- package/src/codex/inject-coordination.ts +373 -0
- package/src/codex/inject.ts +1114 -152
- package/src/codex/injected-marker.ts +37 -3
- package/src/codex/integration-record.ts +266 -0
- package/src/codex/internal/catalog-writer.ts +203 -0
- package/src/codex/internal/history-writer.ts +81 -0
- package/src/codex/journal.ts +66 -4
- package/src/codex/log-guard/inspect.ts +524 -0
- package/src/codex/log-guard/lock.ts +150 -0
- package/src/codex/log-guard/maintenance.ts +403 -0
- package/src/codex/log-guard/path-safety.ts +88 -0
- package/src/codex/log-guard/policy.ts +44 -0
- package/src/codex/log-guard/processes.ts +205 -0
- package/src/codex/log-guard/protection.ts +489 -0
- package/src/codex/log-guard/sqlite-errors.ts +9 -0
- package/src/codex/main-account-cache.ts +24 -0
- package/src/codex/main-account.ts +29 -1
- package/src/codex/management-convergence.ts +167 -0
- package/src/codex/model-cache.ts +56 -10
- package/src/codex/model-entitlements.ts +360 -0
- package/src/codex/native-main-admission.ts +47 -0
- package/src/codex/native-main-auth-temp.ts +187 -0
- package/src/codex/native-main-claim.ts +178 -0
- package/src/codex/native-main-lock-file.ts +162 -0
- package/src/codex/native-main-owner.ts +329 -0
- package/src/codex/native-profile-api.ts +247 -0
- package/src/codex/native-profile-manager.ts +1531 -0
- package/src/codex/native-profile-processes.ts +121 -0
- package/src/codex/native-profile-recovery.ts +99 -0
- package/src/codex/native-profile-stage-store.ts +387 -0
- package/src/codex/native-profile-startup.ts +622 -0
- package/src/codex/native-profile-store.ts +855 -0
- package/src/codex/native-profile-types.ts +120 -0
- package/src/codex/native-residue.ts +675 -0
- package/src/codex/paths.ts +80 -1
- package/src/codex/plan-from-token.ts +140 -0
- package/src/codex/plan.ts +40 -0
- package/src/codex/plugins-doctor.ts +1 -1
- package/src/codex/pool-rotation.ts +74 -4
- package/src/codex/project-config-warnings.ts +20 -6
- package/src/codex/prompt-journal.ts +352 -0
- package/src/codex/prompt-layers.ts +1313 -0
- package/src/codex/prompt-lock.ts +143 -0
- package/src/codex/prompt-text-probe.ts +238 -0
- package/src/codex/quota-rejection.ts +298 -0
- package/src/codex/quota.ts +264 -21
- package/src/codex/refresh.ts +11 -2
- package/src/codex/reset-credit-recovery.ts +1044 -0
- package/src/codex/routing.ts +514 -94
- package/src/codex/runtime.ts +159 -38
- package/src/codex/shim.ts +1065 -31
- package/src/codex/subagent-model-fallback.ts +437 -43
- package/src/codex/sync.ts +191 -2
- package/src/codex/transition-state.ts +720 -0
- package/src/codex/upstream-host-health.ts +368 -0
- package/src/codex/user-identity.ts +557 -0
- package/src/codex/warmup.ts +187 -81
- package/src/codex/write-coordination.ts +114 -0
- package/src/combos/failover.ts +47 -0
- package/src/combos/index.ts +4 -0
- package/src/combos/request.ts +32 -0
- package/src/combos/types.ts +91 -9
- package/src/compatibility/index.ts +26 -0
- package/src/compatibility/manifest.ts +253 -0
- package/src/compatibility/openai-responses.ts +121 -0
- package/src/config/atomic-write.ts +219 -0
- package/src/config/paths.ts +40 -0
- package/src/config/process-state.ts +309 -0
- package/src/config/provider-name.ts +24 -0
- package/src/config/provider-validation.ts +177 -0
- package/src/config/rebase-provenance.ts +68 -0
- package/src/config.ts +1713 -709
- package/src/generated/compatibility-version.json +3324 -0
- package/src/generated/{jawcode-model-metadata.ts → model-metadata.ts} +19 -17
- package/src/grok/inject.ts +16 -5
- package/src/grok/inspect.ts +45 -0
- package/src/grok/sync.ts +2 -2
- package/src/images/loop.ts +157 -33
- package/src/images/plan.ts +24 -13
- package/src/integrations/config-io.ts +269 -0
- package/src/integrations/journal.ts +315 -0
- package/src/integrations/merge.ts +135 -0
- package/src/integrations/mutation-flight.ts +71 -0
- package/src/integrations/native/ownership-preflight.ts +202 -0
- package/src/integrations/omp-yaml-source.ts +358 -0
- package/src/integrations/owned-refresh.ts +74 -0
- package/src/integrations/ownership-policy.ts +160 -0
- package/src/integrations/ownership.ts +155 -0
- package/src/integrations/registry.ts +166 -0
- package/src/integrations/serialize.ts +314 -0
- package/src/integrations/state.ts +433 -0
- package/src/integrations/store.ts +103 -0
- package/src/integrations/writer-lock.ts +98 -0
- package/src/integrations/writer.ts +715 -0
- package/src/lab/artifacts/sanitize.ts +586 -0
- package/src/lab/artifacts/secure-fs.ts +475 -0
- package/src/lab/artifacts/store.ts +310 -0
- package/src/lab/automation/budgets.ts +78 -0
- package/src/lab/automation/config-persistence.ts +256 -0
- package/src/lab/automation/constants.ts +39 -0
- package/src/lab/automation/cooldown.ts +103 -0
- package/src/lab/automation/dispatch.ts +211 -0
- package/src/lab/automation/index.ts +13 -0
- package/src/lab/automation/orchestrator.ts +499 -0
- package/src/lab/automation/persistence.ts +512 -0
- package/src/lab/automation/planner.ts +371 -0
- package/src/lab/automation/policy.ts +136 -0
- package/src/lab/automation/queue.ts +191 -0
- package/src/lab/automation/recovery.ts +24 -0
- package/src/lab/automation/route-context.ts +21 -0
- package/src/lab/automation/run-key.ts +44 -0
- package/src/lab/automation/runs-query.ts +34 -0
- package/src/lab/automation/types.ts +160 -0
- package/src/lab/conformance/assertion.ts +325 -0
- package/src/lab/conformance/digest.ts +22 -0
- package/src/lab/conformance/executor.ts +741 -0
- package/src/lab/conformance/fixture-provider.ts +27 -0
- package/src/lab/conformance/fixtures/live-v1-cases.json +175 -0
- package/src/lab/conformance/fixtures/protocol-v1-cases.json +461 -0
- package/src/lab/conformance/harness-budget.ts +47 -0
- package/src/lab/conformance/index.ts +5 -0
- package/src/lab/conformance/jcs.ts +64 -0
- package/src/lab/conformance/json-pointer.ts +39 -0
- package/src/lab/conformance/manifest.ts +180 -0
- package/src/lab/conformance/mcp-stub.ts +179 -0
- package/src/lab/conformance/negative-controls.ts +164 -0
- package/src/lab/conformance/observation.ts +355 -0
- package/src/lab/conformance/runner.ts +68 -0
- package/src/lab/conformance/sse-normalize.ts +59 -0
- package/src/lab/conformance/suite-manifest.ts +78 -0
- package/src/lab/conformance/types.ts +214 -0
- package/src/lab/constants.ts +126 -0
- package/src/lab/digest.ts +64 -0
- package/src/lab/events/errors.ts +9 -0
- package/src/lab/events/limits.ts +117 -0
- package/src/lab/events/types.ts +229 -0
- package/src/lab/events/validate.ts +781 -0
- package/src/lab/fabric/constants.ts +40 -0
- package/src/lab/fabric/executor.ts +492 -0
- package/src/lab/fabric/index.ts +80 -0
- package/src/lab/fabric/manifest.ts +222 -0
- package/src/lab/fabric/observe.ts +489 -0
- package/src/lab/fabric/patch.ts +79 -0
- package/src/lab/fabric/producer-child.ts +139 -0
- package/src/lab/fabric/producer-isolate.ts +276 -0
- package/src/lab/fabric/producer-protocol.ts +61 -0
- package/src/lab/fabric/scratch.ts +439 -0
- package/src/lab/fabric/subject.ts +106 -0
- package/src/lab/fabric/types.ts +134 -0
- package/src/lab/fabric/verifier.ts +98 -0
- package/src/lab/index.ts +54 -0
- package/src/lab/ledger/artifact-refs.ts +127 -0
- package/src/lab/ledger/invalidation.ts +136 -0
- package/src/lab/ledger/purge.ts +310 -0
- package/src/lab/ledger/store.ts +532 -0
- package/src/lab/live/credential-lease.ts +53 -0
- package/src/lab/live/destination.ts +155 -0
- package/src/lab/live/executor.ts +336 -0
- package/src/lab/live/inert-tools.ts +56 -0
- package/src/lab/live/manifest.ts +85 -0
- package/src/lab/live/mcp-loopback.ts +57 -0
- package/src/lab/live/runner.ts +19 -0
- package/src/lab/live/sandbox.ts +61 -0
- package/src/lab/live/suite-manifest.ts +41 -0
- package/src/lab/live/transport.ts +118 -0
- package/src/lab/live/types.ts +197 -0
- package/src/lab/observe/from-conformance.ts +301 -0
- package/src/lab/observe/from-live.ts +117 -0
- package/src/lab/paths.ts +153 -0
- package/src/lab/projection/rebuild.ts +495 -0
- package/src/lab/projection/schema.ts +135 -0
- package/src/lab/projection/verdicts.ts +474 -0
- package/src/lab/projection/verification.ts +412 -0
- package/src/lab/public/bundle.ts +217 -0
- package/src/lab/public/community-authority.ts +175 -0
- package/src/lab/public/community-files.ts +29 -0
- package/src/lab/public/community.ts +479 -0
- package/src/lab/public/file-safety.ts +155 -0
- package/src/lab/public/ids.ts +26 -0
- package/src/lab/public/index.ts +16 -0
- package/src/lab/public/mutation-lock.ts +424 -0
- package/src/lab/public/operator.ts +353 -0
- package/src/lab/public/origin-purge.ts +79 -0
- package/src/lab/public/origin.ts +203 -0
- package/src/lab/public/privacy.ts +143 -0
- package/src/lab/public/private-file.ts +261 -0
- package/src/lab/public/project.ts +124 -0
- package/src/lab/public/purge-test-fault.ts +21 -0
- package/src/lab/public/purge.ts +223 -0
- package/src/lab/public/registry.ts +44 -0
- package/src/lab/public/revocation.ts +252 -0
- package/src/lab/public/signature.ts +243 -0
- package/src/lab/public/storage.ts +105 -0
- package/src/lab/public/strict-json.ts +206 -0
- package/src/lab/public/time.ts +26 -0
- package/src/lab/public/types.ts +172 -0
- package/src/lab/public/validate.ts +391 -0
- package/src/lab/query/catalog.ts +101 -0
- package/src/lab/query/connection.ts +107 -0
- package/src/lab/query/constants.ts +4 -0
- package/src/lab/query/cursor.ts +132 -0
- package/src/lab/query/dto-map.ts +277 -0
- package/src/lab/query/errors.ts +22 -0
- package/src/lab/query/freshness.ts +53 -0
- package/src/lab/query/index.ts +45 -0
- package/src/lab/query/latest-observation.ts +59 -0
- package/src/lab/query/passive-production.ts +159 -0
- package/src/lab/query/queries.ts +444 -0
- package/src/lab/query/types.ts +266 -0
- package/src/lab/subject/behavior-fingerprint.ts +77 -0
- package/src/lab/subject/installation-salt.ts +112 -0
- package/src/lab/subject/protocol-subject.ts +80 -0
- package/src/lab/subject/route-subject.ts +74 -0
- package/src/lib/admin-secrets.ts +24 -0
- package/src/lib/app-owned-memory-stores.ts +22 -0
- package/src/lib/bounded-body.ts +167 -11
- package/src/lib/bun-runtime.ts +125 -12
- package/src/lib/bun-stream-caps.ts +13 -9
- package/src/lib/codex-restart-contract.ts +120 -0
- package/src/lib/config-ownership.ts +26 -2
- package/src/lib/destination-policy.ts +65 -1
- package/src/lib/errors.ts +80 -5
- package/src/lib/fabric-task-execution-authority.ts +7 -0
- package/src/lib/fabric-task-host.ts +29 -0
- package/src/lib/lab-activation.ts +223 -0
- package/src/lib/lab-live-execution-authority.ts +13 -0
- package/src/lib/lab-live-host.ts +30 -0
- package/src/lib/lab-live-pinned-sender.ts +56 -0
- package/src/lib/lab-live-route-production.ts +130 -0
- package/src/lib/lab-passive-linker-registration.ts +26 -0
- package/src/lib/local-management-attestation.ts +51 -0
- package/src/lib/local-management-capability.ts +100 -0
- package/src/lib/local-provider-reload-contract.ts +100 -0
- package/src/lib/optional-shutdown-hooks.ts +57 -0
- package/src/lib/package-tree-integrity.ts +101 -0
- package/src/lib/pinned-http.ts +145 -26
- package/src/lib/process-control.ts +6 -2
- package/src/lib/provider-outbound.ts +49 -9
- package/src/lib/redact.ts +419 -3
- package/src/lib/self-launch-argv.ts +15 -0
- package/src/lib/server-resource-ownership.ts +71 -0
- package/src/lib/service-secrets.ts +15 -0
- package/src/lib/shadow-call.ts +35 -4
- package/src/lib/sse-decoder.ts +41 -0
- package/src/lib/state-store-registrations.ts +10 -2
- package/src/lib/system-restart-contract.ts +73 -0
- package/src/lib/token-estimate.ts +19 -2
- package/src/lib/tool-argument-integers.ts +253 -0
- package/src/lib/translator-budget.ts +44 -0
- package/src/lib/upstream-http-version.ts +57 -0
- package/src/lib/upstream-reachability.ts +95 -0
- package/src/lib/upstream-retry.ts +156 -3
- package/src/lib/windows-atomic-replace.ts +155 -0
- package/src/lib/windows-elevation.ts +70 -2
- package/src/lib/windows-secret-acl.ts +409 -69
- package/src/lib/windows-service-wrappers.ts +72 -0
- package/src/lib/windows-text.ts +106 -0
- package/src/lib/windows-user-principal.ts +341 -0
- package/src/lib/winsw.ts +33 -5
- package/src/oauth/account-import/google-antigravity-adapter.ts +74 -0
- package/src/oauth/account-import/index.ts +15 -0
- package/src/oauth/account-import/parser.ts +83 -0
- package/src/oauth/account-import/registry.ts +18 -0
- package/src/oauth/account-import/service.ts +75 -0
- package/src/oauth/account-import/types.ts +91 -0
- package/src/oauth/anthropic.ts +12 -1
- package/src/oauth/callback-server.ts +30 -4
- package/src/oauth/chatgpt.ts +12 -1
- package/src/oauth/cline.ts +203 -0
- package/src/oauth/command-code.ts +239 -0
- package/src/oauth/cursor.ts +46 -5
- package/src/oauth/generic-account-failover.ts +231 -0
- package/src/oauth/google-antigravity.ts +35 -3
- package/src/oauth/health.ts +20 -12
- package/src/oauth/index.ts +462 -71
- package/src/oauth/key-providers.ts +25 -0
- package/src/oauth/kimi.ts +25 -3
- package/src/oauth/kiro.ts +95 -6
- package/src/oauth/local-token-detect.ts +13 -2
- package/src/oauth/log.ts +3 -1
- package/src/oauth/login-cli.ts +88 -28
- package/src/oauth/nous.ts +798 -0
- package/src/oauth/open-browser-choice.ts +26 -0
- package/src/oauth/store.ts +133 -26
- package/src/oauth/token-guardian.ts +9 -3
- package/src/oauth/types.ts +15 -0
- package/src/pi/models.ts +2 -2
- package/src/providers/alibaba-region-migration.ts +1 -1
- package/src/providers/antigravity-models.ts +521 -31
- package/src/providers/auto-compact-budget.ts +65 -0
- package/src/providers/base-url-choices.ts +10 -0
- package/src/providers/codex-capacity.ts +292 -0
- package/src/providers/command-code-efforts.ts +176 -0
- package/src/providers/context-cap.ts +26 -8
- package/src/providers/cursor-pool.ts +72 -0
- package/src/providers/default-aliases.ts +65 -0
- package/src/providers/derive.ts +281 -6
- package/src/providers/fastwire.ts +507 -0
- package/src/providers/free-directory.ts +10 -7
- package/src/providers/google-vertex-location.ts +14 -0
- package/src/providers/key-failover.ts +71 -3
- package/src/providers/label.ts +35 -2
- package/src/providers/model-discovery-limits.ts +16 -0
- package/src/providers/model-discovery.ts +115 -22
- package/src/providers/model-presets.ts +119 -0
- package/src/providers/model-rename-migration.ts +255 -0
- package/src/providers/model-rename-startup.ts +28 -0
- package/src/providers/new-model-policy.ts +146 -0
- package/src/providers/openai-sidecar.ts +72 -4
- package/src/providers/openai-tier-startup.ts +31 -2
- package/src/providers/openai-tiers.ts +119 -4
- package/src/providers/openai-virtual-models.ts +1 -0
- package/src/providers/opencode-zen-rate-limit.ts +102 -0
- package/src/providers/provider-id-rewrite.ts +30 -0
- package/src/providers/quota.ts +1379 -40
- package/src/providers/registry.ts +1545 -112
- package/src/providers/request-pacing.ts +310 -0
- package/src/providers/service-tier.ts +277 -0
- package/src/providers/slug-codec.ts +94 -6
- package/src/providers/static-model-discovery.ts +86 -0
- package/src/providers/xai-responses-opt-in.ts +15 -0
- package/src/providers/xai-transport.ts +32 -4
- package/src/reasoning-effort.ts +68 -3
- package/src/responses/apply-patch-envelope.ts +63 -0
- package/src/responses/code-mode-helper-compat.ts +50 -0
- package/src/responses/compaction.ts +26 -1
- package/src/responses/custom-tool-compat.ts +384 -0
- package/src/responses/hosted-tool-policy.ts +9 -0
- package/src/responses/namespace-tool-compat.ts +435 -0
- package/src/responses/parser.ts +225 -38
- package/src/responses/provider-continuation.ts +98 -0
- package/src/responses/provider-opaque-metadata.ts +73 -0
- package/src/responses/reasoning-envelope.ts +9 -1
- package/src/responses/reasoning-replay-cache.ts +504 -0
- package/src/responses/schema.ts +12 -2
- package/src/responses/spill-store.ts +75 -10
- package/src/responses/state.ts +659 -31
- package/src/responses/thought-signature-replay.ts +364 -0
- package/src/responses/tool-search-compat.ts +301 -0
- package/src/responses/truncated-stop-reason.ts +60 -0
- package/src/responses/turn-termination.ts +107 -0
- package/src/router.ts +405 -31
- package/src/routing/analytics.ts +379 -0
- package/src/routing/capability.ts +244 -0
- package/src/routing/compatibility/assemble.ts +73 -0
- package/src/routing/compatibility/behavior.ts +278 -0
- package/src/routing/compatibility/catalog.ts +99 -0
- package/src/routing/compatibility/endpoint.ts +52 -0
- package/src/routing/compatibility/lab-evidence-provider.ts +130 -0
- package/src/routing/compatibility/policy.ts +181 -0
- package/src/routing/compatibility/provider-slot.ts +56 -0
- package/src/routing/compatibility/reader.ts +110 -0
- package/src/routing/compatibility/subject.ts +191 -0
- package/src/routing/compatibility/types.ts +64 -0
- package/src/routing/compatibility/version.ts +104 -0
- package/src/routing/cost.ts +77 -0
- package/src/routing/evaluator.ts +495 -0
- package/src/routing/health.ts +412 -0
- package/src/routing/history/cursor.ts +43 -0
- package/src/routing/history/indexer.ts +605 -0
- package/src/routing/history/schema.ts +72 -0
- package/src/routing/profile-namespace.ts +15 -0
- package/src/routing/profile.ts +547 -0
- package/src/routing/quota.ts +155 -0
- package/src/routing/request-evidence.ts +45 -0
- package/src/routing/trace.ts +776 -0
- package/src/server/adapter-resolve.ts +2 -29
- package/src/server/auth-cors.ts +289 -48
- package/src/server/background-lifecycle.ts +182 -0
- package/src/server/chat-completions.ts +154 -72
- package/src/server/chat-native-sse.ts +331 -0
- package/src/server/chat-native.ts +445 -0
- package/src/server/claude-messages.ts +160 -44
- package/src/server/direct-local-http.ts +347 -0
- package/src/server/effort-policy.ts +18 -0
- package/src/server/github-copilot-responses-repair.ts +338 -0
- package/src/server/gui-static.ts +39 -10
- package/src/server/images.ts +94 -12
- package/src/server/index.ts +1021 -190
- package/src/server/lifecycle.ts +336 -14
- package/src/server/live.ts +136 -17
- package/src/server/local-management-read-client.ts +90 -0
- package/src/server/local-provider-reload-client.ts +137 -0
- package/src/server/management/agent-settings-routes.ts +433 -116
- package/src/server/management/api-key-usage.ts +31 -5
- package/src/server/management/body.ts +6 -0
- package/src/server/management/codex-prompt-routes.ts +570 -0
- package/src/server/management/combo-routes.ts +64 -25
- package/src/server/management/config-routes.ts +511 -51
- package/src/server/management/context.ts +89 -2
- package/src/server/management/integration-routes.ts +498 -0
- package/src/server/management/lab-automation-routes.ts +206 -0
- package/src/server/management/lab-routes.ts +563 -0
- package/src/server/management/logs-usage-routes.ts +127 -52
- package/src/server/management/model-routes.ts +461 -133
- package/src/server/management/model-rows.ts +167 -0
- package/src/server/management/native-integration-routes.ts +770 -0
- package/src/server/management/oauth-account-routes.ts +90 -8
- package/src/server/management/provider-capability-config.ts +48 -0
- package/src/server/management/provider-routes.ts +836 -159
- package/src/server/management/request-history-routes.ts +191 -0
- package/src/server/management/route-registry.ts +332 -0
- package/src/server/management/routing-analytics-routes.ts +74 -0
- package/src/server/management/routing-profile-routes.ts +380 -0
- package/src/server/management/shared.ts +27 -11
- package/src/server/management/sidebar-routes.ts +47 -31
- package/src/server/management/storage-log-guard-routes.ts +186 -0
- package/src/server/management/sync-response.ts +69 -0
- package/src/server/management/system-restart.ts +289 -33
- package/src/server/management/system-routes.ts +77 -0
- package/src/server/management/usage-summary-cache.ts +9 -1
- package/src/server/management/vision-sidecar-options.ts +167 -0
- package/src/server/management/web-search-sidecar-options.ts +120 -0
- package/src/server/management-api.ts +126 -23
- package/src/server/management-auth.ts +220 -5
- package/src/server/passive-route-linker.ts +66 -0
- package/src/server/port-reclaim.ts +1 -1
- package/src/server/ports.ts +41 -1
- package/src/server/proxy-liveness.ts +161 -10
- package/src/server/readiness.ts +99 -0
- package/src/server/relay-eager.ts +221 -54
- package/src/server/relay.ts +479 -87
- package/src/server/request-decompress.ts +113 -6
- package/src/server/request-log-conversation.ts +51 -0
- package/src/server/request-log.ts +298 -31
- package/src/server/responses/agent-task-recovery-cache.ts +143 -0
- package/src/server/responses/agent-task-recovery.ts +465 -0
- package/src/server/responses/codex-auth-error.ts +55 -0
- package/src/server/responses/collaboration.ts +239 -36
- package/src/server/responses/combo-stream-preflight.ts +178 -0
- package/src/server/responses/compact.ts +444 -72
- package/src/server/responses/core.ts +3579 -436
- package/src/server/responses/empty-completion-guard.ts +333 -0
- package/src/server/responses/encrypted-payload.ts +62 -39
- package/src/server/responses/fetch-helpers.ts +89 -99
- package/src/server/responses/input-admission.ts +187 -0
- package/src/server/responses/pacing-overload.ts +13 -0
- package/src/server/responses/passthrough-error.ts +33 -9
- package/src/server/responses/policy-fallback.ts +178 -0
- package/src/server/responses/responses-field-backfill.ts +343 -0
- package/src/server/responses/terminal-guard.ts +26 -5
- package/src/server/responses/upstream-error.ts +5 -0
- package/src/server/responses/ws-upstream.ts +381 -0
- package/src/server/responses-custom-tool-repair.ts +363 -0
- package/src/server/responses-item-id-repair.ts +54 -6
- package/src/server/responses-json-events.ts +90 -0
- package/src/server/responses-model-rewrite.ts +29 -0
- package/src/server/responses-reasoning-summary-rewrite.ts +178 -0
- package/src/server/responses-snapshot-repair.ts +621 -0
- package/src/server/responses-terminal-repair.ts +363 -0
- package/src/server/responses-tool-search-repair.ts +267 -0
- package/src/server/responses-undeclared-tool-guard.ts +376 -0
- package/src/server/responses.ts +18 -2
- package/src/server/search.ts +78 -13
- package/src/server/sse-frame-buffer.ts +319 -0
- package/src/server/sse-payload-rewrite.ts +110 -22
- package/src/server/startup-action-control.ts +8 -1
- package/src/server/startup-health-cache.ts +19 -1
- package/src/server/system-env.ts +80 -9
- package/src/server/ws-bridge.ts +53 -40
- package/src/service-manager-probe.ts +892 -0
- package/src/service.ts +1153 -94
- package/src/sidecar/auth.ts +92 -0
- package/src/sidecar/candidates.ts +83 -0
- package/src/storage/cleanup.ts +2 -2
- package/src/storage/policy-job.ts +14 -4
- package/src/storage/policy.ts +88 -23
- package/src/storage/scanner.ts +1 -1
- package/src/storage/worker-lifecycle.ts +14 -14
- package/src/tray/windows-tray.ps1 +83 -9
- package/src/tray/windows.ts +43 -16
- package/src/types/accounts.ts +37 -0
- package/src/types/config.ts +911 -0
- package/src/types/provider.ts +614 -0
- package/src/types/request.ts +397 -0
- package/src/types/tools.ts +236 -0
- package/src/types/wire.ts +80 -0
- package/src/types.ts +107 -1237
- package/src/update/index.ts +37 -23
- package/src/update/job.ts +445 -68
- package/src/update/notify.ts +12 -6
- package/src/update/npm-cache-preflight.d.mts +47 -0
- package/src/update/npm-cache-preflight.mjs +201 -0
- package/src/update/transactional-install.d.mts +22 -0
- package/src/update/transactional-install.mjs +266 -0
- package/src/usage/cost.ts +0 -0
- package/src/usage/expected-prices.ts +287 -16
- package/src/usage/log.ts +666 -50
- package/src/usage/summary.ts +388 -17
- package/src/usage/user-cost-overlay-reconciler.ts +313 -0
- package/src/usage/user-cost-overlays.ts +314 -0
- package/src/vision/anthropic-describe.ts +10 -6
- package/src/vision/backends.ts +97 -0
- package/src/vision/describe.ts +27 -16
- package/src/vision/eligibility.ts +250 -0
- package/src/vision/index.ts +238 -24
- package/src/vision/reasoning.ts +55 -0
- package/src/vision/routed-describe.ts +175 -0
- package/src/vision/timeout-bounds.ts +9 -0
- package/src/web-search/anthropic-executor.ts +13 -7
- package/src/web-search/backends.ts +108 -0
- package/src/web-search/exa-executor.ts +119 -0
- package/src/web-search/executor.ts +21 -6
- package/src/web-search/gemini-executor.ts +141 -0
- package/src/web-search/index.ts +150 -15
- package/src/web-search/loop.ts +284 -54
- package/src/web-search/parse.ts +125 -30
- package/src/web-search/sources.ts +60 -0
- package/src/web-search/xai-executor.ts +219 -0
- package/gui/dist/assets/index-DTpMHS4F.js +0 -67
- package/gui/dist/assets/index-ZNVDE3C7.css +0 -1
- package/gui/dist/provider-icons/antigravity.svg +0 -1
- package/gui/dist/provider-icons/claude.svg +0 -1
- package/gui/dist/provider-icons/copilot.svg +0 -1
- package/gui/dist/provider-icons/cursor.svg +0 -2
- package/gui/dist/provider-icons/gemini.svg +0 -1
- package/gui/dist/provider-icons/grok-color.svg +0 -1
- package/gui/dist/provider-icons/kiro.svg +0 -14
- package/src/cli/internal-dispatch.ts +0 -20
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the Codex safe-interruption write substrate.
|
|
3
|
+
*
|
|
4
|
+
* This module is the SINGLE owner of every surface WP9-WP13 share. Two prior
|
|
5
|
+
* attempts failed audit because four phase documents each invented their share
|
|
6
|
+
* of the record schema, the /api/sync contract, and the convergence entry
|
|
7
|
+
* point; the contract is centralized here so a consumer can only import.
|
|
8
|
+
*
|
|
9
|
+
* Design record: devlog/_fin/260804_codex_write_substrate/005_contract.md
|
|
10
|
+
* Audit trail: 006, 007, 008, 009, 010 audit syntheses in the same unit.
|
|
11
|
+
*
|
|
12
|
+
* TYPES ONLY. WP8b deliberately rewires nothing: WP9 supplies the first
|
|
13
|
+
* `ConvergeCodex` implementation. Every phase must typecheck and preserve
|
|
14
|
+
* behavior at its own commit, which a runtime placeholder here would break.
|
|
15
|
+
*/
|
|
16
|
+
import type { OcxConfig } from "../types";
|
|
17
|
+
import type { ProviderModelDiscoveryFilter } from "../providers/registry";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The non-CAS JSON record for the Codex integration.
|
|
21
|
+
*
|
|
22
|
+
* ONE owner. WP12 writes provenance here through `updateIntegrationRecord` —
|
|
23
|
+
* never its own read/merge/write. Cross-process transition state is deliberately
|
|
24
|
+
* absent; it belongs to the CODEX_HOME-keyed SQLite row below.
|
|
25
|
+
*
|
|
26
|
+
* Provenance is OPTIONAL at v1. A record written before WP12 is valid, and
|
|
27
|
+
* unknown extension sections from a newer writer remain valid and preserved.
|
|
28
|
+
*/
|
|
29
|
+
export interface CodexIntegrationRecord {
|
|
30
|
+
version: 1;
|
|
31
|
+
provenance?: CodexProvenanceLedger;
|
|
32
|
+
/** Unknown keys from a newer writer survive every older-writer update. */
|
|
33
|
+
readonly [extra: string]: unknown;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface CodexHistoryState {
|
|
37
|
+
status: "adoption-pending" | "converged" | "pending" | "running" | "blocked" | "unknown" | "not-evaluated";
|
|
38
|
+
/**
|
|
39
|
+
* Why it is not converged, when it is not. These are terminal observations
|
|
40
|
+
* for one attempt, not reasons to collapse the durable retry schedule.
|
|
41
|
+
*/
|
|
42
|
+
reason?:
|
|
43
|
+
| "db-busy"
|
|
44
|
+
| "permission"
|
|
45
|
+
| "unreadable"
|
|
46
|
+
| "schema"
|
|
47
|
+
| "timeout"
|
|
48
|
+
| "shutdown-cancelled"
|
|
49
|
+
| "worker-died"
|
|
50
|
+
| "overtaken"
|
|
51
|
+
| "record-write-failed";
|
|
52
|
+
attempts: number;
|
|
53
|
+
/** null means "no timer armed"; see 020 — it must never mean "never again". */
|
|
54
|
+
nextRetryAt: string | null;
|
|
55
|
+
/** The transition this state belongs to, so an overtaken job is detectable. */
|
|
56
|
+
txId: string | null;
|
|
57
|
+
/** null means the final probe could not produce a trustworthy row count. */
|
|
58
|
+
pendingRows: number | null;
|
|
59
|
+
/** null means the final probe could not produce a trustworthy manifest count. */
|
|
60
|
+
backupEntries: number | null;
|
|
61
|
+
/** Unknown keys from a newer writer, preserved verbatim. */
|
|
62
|
+
readonly [extra: string]: unknown;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Every mutable Codex artifact for which the provenance ledger can authorize a
|
|
67
|
+
* restore. Embedded config fragments share the `config` entry because they are
|
|
68
|
+
* committed and restored as one file. Dynamic history ids name the exact row or
|
|
69
|
+
* rollout whose semantic pre-image is retained.
|
|
70
|
+
*/
|
|
71
|
+
export type CodexArtifactId =
|
|
72
|
+
| { readonly kind: "config"; readonly [extra: string]: unknown }
|
|
73
|
+
| { readonly kind: "generated-profile"; readonly [extra: string]: unknown }
|
|
74
|
+
| { readonly kind: "active-catalog"; readonly canonicalPath: string;
|
|
75
|
+
readonly [extra: string]: unknown }
|
|
76
|
+
| { readonly kind: "catalog-backup"; readonly form: "hashed" | "legacy";
|
|
77
|
+
readonly canonicalPath: string; readonly [extra: string]: unknown }
|
|
78
|
+
| { readonly kind: "models-cache"; readonly [extra: string]: unknown }
|
|
79
|
+
| { readonly kind: "injection-journal"; readonly [extra: string]: unknown }
|
|
80
|
+
| { readonly kind: "history-row"; readonly stateDbId: string; readonly threadId: string;
|
|
81
|
+
readonly [extra: string]: unknown }
|
|
82
|
+
| { readonly kind: "history-manifest"; readonly stateDbId: string;
|
|
83
|
+
readonly canonicalPath: string; readonly [extra: string]: unknown }
|
|
84
|
+
| { readonly kind: "history-manifest-entry"; readonly stateDbId: string;
|
|
85
|
+
readonly threadId: string; readonly [extra: string]: unknown }
|
|
86
|
+
| { readonly kind: "history-rollout"; readonly stateDbId: string;
|
|
87
|
+
readonly canonicalPath: string; readonly [extra: string]: unknown };
|
|
88
|
+
|
|
89
|
+
export interface CodexProvenanceEntry {
|
|
90
|
+
artifact: CodexArtifactId;
|
|
91
|
+
baseline:
|
|
92
|
+
| { kind: "absent"; readonly [extra: string]: unknown }
|
|
93
|
+
| { kind: "present"; sha256: string; bytesBase64: string;
|
|
94
|
+
readonly [extra: string]: unknown };
|
|
95
|
+
/** Hash of what WE wrote. null when the write did not complete. */
|
|
96
|
+
postImage: string | null;
|
|
97
|
+
txId: string;
|
|
98
|
+
at: string;
|
|
99
|
+
/** Entry-level extensions are preserved, not only ledger/top-level keys. */
|
|
100
|
+
readonly [extra: string]: unknown;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface CodexProvenanceLedger {
|
|
104
|
+
entries: readonly CodexProvenanceEntry[];
|
|
105
|
+
readonly [extra: string]: unknown;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export type CodexArtifactObservation =
|
|
109
|
+
| "applied"
|
|
110
|
+
| "absent"
|
|
111
|
+
| "missing"
|
|
112
|
+
| "residue"
|
|
113
|
+
| "drifted"
|
|
114
|
+
| "unreadable"
|
|
115
|
+
| "invalid"
|
|
116
|
+
| "not-evaluated"
|
|
117
|
+
| "unknown";
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Read-only proof of what Codex has now, not what persisted intent requests.
|
|
121
|
+
* `isApplied` is true only for aggregate `applied`; a partial surface can never
|
|
122
|
+
* be flattened into true. OFF is operationally converged only at `absent`.
|
|
123
|
+
*/
|
|
124
|
+
export interface CodexObservedState {
|
|
125
|
+
aggregate: "applied" | "absent" | "partial" | "external" | "blocked" | "not-evaluated";
|
|
126
|
+
/** null only for a catalog-scoped request that deliberately did not observe. */
|
|
127
|
+
isApplied: boolean | null;
|
|
128
|
+
desired: "on" | "off" | "unknown";
|
|
129
|
+
/** null only when aggregate is `not-evaluated`. */
|
|
130
|
+
converged: boolean | null;
|
|
131
|
+
authority: {
|
|
132
|
+
service: "owned" | "foreign" | "unknown";
|
|
133
|
+
externalProvider: string | null;
|
|
134
|
+
};
|
|
135
|
+
surfaces: {
|
|
136
|
+
config: CodexArtifactObservation;
|
|
137
|
+
profile: CodexArtifactObservation;
|
|
138
|
+
catalog: CodexArtifactObservation;
|
|
139
|
+
cache: CodexArtifactObservation;
|
|
140
|
+
journal: "absent" | "pending" | "live" | "invalid" | "unknown" | "not-evaluated";
|
|
141
|
+
history: {
|
|
142
|
+
state: CodexHistoryState;
|
|
143
|
+
database: CodexArtifactObservation;
|
|
144
|
+
manifest: CodexArtifactObservation;
|
|
145
|
+
rollouts: CodexArtifactObservation;
|
|
146
|
+
};
|
|
147
|
+
provenance: {
|
|
148
|
+
state: "verified" | "missing" | "conflict" | "unreadable" | "unknown" | "not-evaluated";
|
|
149
|
+
nativeGeneration: number | null;
|
|
150
|
+
currentTxId: string | null;
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export type CatalogNotice = "provider-auth" | "provider-network" | "fallback";
|
|
156
|
+
|
|
157
|
+
/** Sanitized catalog fact safe to append to management mutation responses. */
|
|
158
|
+
export type CatalogDisposition =
|
|
159
|
+
| { status: "committed"; changed: boolean; degraded: boolean;
|
|
160
|
+
notices: readonly CatalogNotice[] }
|
|
161
|
+
| { status: "skipped";
|
|
162
|
+
reason: "not-requested" | "catalog-unavailable" | "busy" | "stale" | "refused";
|
|
163
|
+
retryable: boolean }
|
|
164
|
+
| { status: "failed";
|
|
165
|
+
/**
|
|
166
|
+
* `disk` used to absorb every unclassified failure, so a malformed request and a
|
|
167
|
+
* genuine ENOSPC were indistinguishable and both reported non-retryable (#1784).
|
|
168
|
+
*/
|
|
169
|
+
reason: "provider-auth" | "provider-network" | "disk" | "request-invalid" | "admission" | "internal";
|
|
170
|
+
phase: "gather" | "commit"; retryable: boolean; partialWrite: boolean;
|
|
171
|
+
/** Allowlisted cause summary. Closed vocabularies only -- never message text. */
|
|
172
|
+
cause?: CatalogFailureCause };
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Why a catalog operation failed, in terms safe to return from the management plane.
|
|
176
|
+
*
|
|
177
|
+
* Both fields are closed sets on purpose. An `Error.constructor.name` is dependency- or
|
|
178
|
+
* input-influenced (any thrown custom class names itself) and an `Error.message` routinely
|
|
179
|
+
* carries paths, home directories and account identifiers, none of which may cross this
|
|
180
|
+
* boundary.
|
|
181
|
+
*/
|
|
182
|
+
export type CatalogFailureCause = {
|
|
183
|
+
kind: "invalid-request" | "lock-busy" | "io" | "unknown";
|
|
184
|
+
/** Recognized errno/code token, when the underlying error carried one. */
|
|
185
|
+
code?: "ENOSPC" | "EACCES" | "EPERM" | "EROFS" | "ENOENT" | "SQLITE_BUSY";
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* The ONLY way Codex-owned bytes are written. Startup, ensure, /api/sync, the
|
|
190
|
+
* CLI verbs and all 16 management mutation callbacks funnel here.
|
|
191
|
+
*
|
|
192
|
+
* The funnel is the point: admission, generation checks and the lock live in one
|
|
193
|
+
* place, so a new caller cannot forget them. Round 1's 16 callers each held
|
|
194
|
+
* their own path to a commit.
|
|
195
|
+
*/
|
|
196
|
+
export type ConvergeCodex = (
|
|
197
|
+
request: ConvergeRequest,
|
|
198
|
+
) => Promise<ConvergeOutcome>;
|
|
199
|
+
|
|
200
|
+
export interface ConvergeRequest {
|
|
201
|
+
/**
|
|
202
|
+
* The caller says WHEN, never WHICH WAY.
|
|
203
|
+
*
|
|
204
|
+
* Round 2 N1: an `apply | remove` request let `/api/sync` skip while desired
|
|
205
|
+
* state was OFF instead of removing residue, which violates C11 and
|
|
206
|
+
* contradicts the rule that callers cannot supply desired state. The
|
|
207
|
+
* direction is derived from admitted persisted intent, full stop.
|
|
208
|
+
*
|
|
209
|
+
* `observe` writes nothing and is the status read.
|
|
210
|
+
*/
|
|
211
|
+
action: "converge" | "observe";
|
|
212
|
+
/**
|
|
213
|
+
* WP9 management mutations use `catalog`; explicit/lifecycle convergence uses
|
|
214
|
+
* `full`. Scope limits work, but still never lets the caller choose direction.
|
|
215
|
+
*/
|
|
216
|
+
scope: "catalog" | "full";
|
|
217
|
+
/** Why, for the record and for log attribution. */
|
|
218
|
+
reason: "startup" | "ensure" | "api-sync" | "cli" | "management-mutation";
|
|
219
|
+
/** Automatic callers fail fast and defer; explicit ones may wait. See §5. */
|
|
220
|
+
mode: "automatic" | "explicit";
|
|
221
|
+
deadlineMs: number;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** Caller-controlled input for the fixed management catalog request shape. */
|
|
225
|
+
export interface CatalogConvergeRequestInput {
|
|
226
|
+
deadlineMs: number;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export type ConvergeOutcome =
|
|
230
|
+
| { kind: "catalog-only"; changed: boolean;
|
|
231
|
+
observed: CodexObservedState; catalogRefresh: CatalogDisposition;
|
|
232
|
+
history: CodexHistoryState }
|
|
233
|
+
| { kind: "converged"; direction: "applied" | "removed"; changed: boolean;
|
|
234
|
+
observed: CodexObservedState; nativeGeneration: number;
|
|
235
|
+
currentTxId: string;
|
|
236
|
+
catalogRefresh: CatalogDisposition; history: CodexHistoryState }
|
|
237
|
+
| { kind: "skipped"; reason: "already-converged";
|
|
238
|
+
observed: CodexObservedState; catalogRefresh: CatalogDisposition; history: CodexHistoryState }
|
|
239
|
+
| { kind: "refused"; authority: "service-home" | "external-provider" | "journal" | "provenance";
|
|
240
|
+
message: string; observed: CodexObservedState }
|
|
241
|
+
| { kind: "busy"; surface: "lock" | "history" | "config"; retryAfterMs: number }
|
|
242
|
+
| { kind: "deferred"; direction: "applied" | "removed"; changed: boolean;
|
|
243
|
+
unresolved: readonly UnresolvedSurface[];
|
|
244
|
+
nativeGeneration: number; currentTxId: string;
|
|
245
|
+
observed: CodexObservedState; catalogRefresh: CatalogDisposition; history: CodexHistoryState }
|
|
246
|
+
| { kind: "failed"; surface: string; message: string };
|
|
247
|
+
|
|
248
|
+
export type CatalogOnlyOutcome = Extract<ConvergeOutcome, { kind: "catalog-only" }>;
|
|
249
|
+
|
|
250
|
+
export interface ProjectCatalogOnlyOutcomeInput {
|
|
251
|
+
changed: boolean;
|
|
252
|
+
catalogRefresh: CatalogDisposition;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Note what is NOT here: `desired-off`. Desired OFF is not a skip — it is a
|
|
257
|
+
* `converged` with `direction: "removed"`. That is round 2 N1: the old shape let
|
|
258
|
+
* a sync while OFF return "skipped" and leave routed residue on disk.
|
|
259
|
+
*/
|
|
260
|
+
export type UnresolvedSurface =
|
|
261
|
+
| "config"
|
|
262
|
+
| "native"
|
|
263
|
+
| "catalog"
|
|
264
|
+
| "cache"
|
|
265
|
+
| "journal"
|
|
266
|
+
| "provenance"
|
|
267
|
+
| "history";
|
|
268
|
+
|
|
269
|
+
/** Bumped by every cooperating CONFIG write. Owned by src/config.ts. */
|
|
270
|
+
export interface ConfigGeneration { readonly value: number; }
|
|
271
|
+
|
|
272
|
+
/** Bumped by every cooperating NATIVE commit. Owned by transition-state.ts. */
|
|
273
|
+
export interface NativeGeneration { readonly value: number; }
|
|
274
|
+
|
|
275
|
+
export type ConfigGenerationRead =
|
|
276
|
+
| { kind: "ready"; generation: ConfigGeneration }
|
|
277
|
+
| { kind: "unavailable"; reason: "busy" | "database" };
|
|
278
|
+
|
|
279
|
+
export type ConfigGenerationBump =
|
|
280
|
+
| { kind: "updated"; generation: ConfigGeneration }
|
|
281
|
+
| { kind: "conflict"; current: ConfigGeneration }
|
|
282
|
+
| { kind: "unavailable"; reason: "busy" | "database" };
|
|
283
|
+
|
|
284
|
+
export type ExpectedConfigGenerationSyncResult<T> =
|
|
285
|
+
| { kind: "matched"; generation: ConfigGeneration; value: T }
|
|
286
|
+
| { kind: "conflict"; current: ConfigGeneration }
|
|
287
|
+
| { kind: "unavailable"; reason: "busy" | "database" };
|
|
288
|
+
|
|
289
|
+
export type ReadConfigGeneration = () => ConfigGenerationRead;
|
|
290
|
+
export type BumpConfigGeneration = (expected: ConfigGeneration) => ConfigGenerationBump;
|
|
291
|
+
export type WithExpectedConfigGenerationSync = <T>(
|
|
292
|
+
expected: ConfigGeneration,
|
|
293
|
+
commit: () => T,
|
|
294
|
+
) => ExpectedConfigGenerationSyncResult<T>;
|
|
295
|
+
|
|
296
|
+
export interface CommitExpectation {
|
|
297
|
+
/** Read at admission. */
|
|
298
|
+
readonly nativeBefore: number;
|
|
299
|
+
/** What OUR commit will produce. Always nativeBefore + 1. */
|
|
300
|
+
readonly nativeAfter: number;
|
|
301
|
+
/** Identifies the commit that performed the bump. */
|
|
302
|
+
readonly txId: string;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/** The authoritative pair and history schedule stored under canonical CODEX_HOME. */
|
|
306
|
+
export interface CodexTransitionVersion {
|
|
307
|
+
readonly nativeGeneration: number;
|
|
308
|
+
readonly currentTxId: string | null;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
export interface CodexTransitionState extends CodexTransitionVersion {
|
|
312
|
+
readonly history: CodexHistoryState;
|
|
313
|
+
readonly historySchedule: null | Readonly<{
|
|
314
|
+
direction: "apply" | "remove";
|
|
315
|
+
authoritySnapshotId: string;
|
|
316
|
+
}>;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
export type TransitionStateRead =
|
|
320
|
+
| { kind: "ready"; state: CodexTransitionState }
|
|
321
|
+
| { kind: "legacy-ambiguous"; message: string }
|
|
322
|
+
| { kind: "unavailable"; reason: "busy" | "unsafe-path" | "database" };
|
|
323
|
+
|
|
324
|
+
export type TransitionStateUpdate =
|
|
325
|
+
| { kind: "updated"; state: CodexTransitionState }
|
|
326
|
+
| { kind: "conflict"; current: CodexTransitionState }
|
|
327
|
+
| { kind: "unavailable"; reason: "busy" | "unsafe-path" | "database" };
|
|
328
|
+
|
|
329
|
+
export interface BeginCodexTransitionNext {
|
|
330
|
+
readonly txId: string;
|
|
331
|
+
readonly direction: "apply" | "remove";
|
|
332
|
+
readonly authoritySnapshotId: string;
|
|
333
|
+
readonly nextRetryAt: string;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export type BeginCodexTransition = (
|
|
337
|
+
expected: CodexTransitionVersion,
|
|
338
|
+
next: BeginCodexTransitionNext,
|
|
339
|
+
) => TransitionStateUpdate;
|
|
340
|
+
|
|
341
|
+
export type ReadCodexTransitionState = () => TransitionStateRead;
|
|
342
|
+
|
|
343
|
+
export type UpdateCodexHistoryTransition = (
|
|
344
|
+
expected: CodexTransitionVersion,
|
|
345
|
+
history: CodexHistoryState,
|
|
346
|
+
) => TransitionStateUpdate;
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* A coordinator transaction never exposes its SQLite connection. The runtime
|
|
350
|
+
* owner adds a private brand so only its one-shot factory can create one.
|
|
351
|
+
*/
|
|
352
|
+
export interface CodexCoordinatorTransaction {
|
|
353
|
+
readonly beginTransition: BeginCodexTransition;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export interface CodexCoordinatorTransactionController {
|
|
357
|
+
readonly capability: CodexCoordinatorTransaction;
|
|
358
|
+
expectation(): CommitExpectation;
|
|
359
|
+
/**
|
|
360
|
+
* The pair the row holds right now, read on the ALREADY-OPEN transaction.
|
|
361
|
+
*
|
|
362
|
+
* A holder needs `currentTxId` to build the conditional update, and
|
|
363
|
+
* `CommitExpectation` carries only the generation pair plus the new txId.
|
|
364
|
+
* Opening a second connection to read it would contend with this
|
|
365
|
+
* transaction's own `BEGIN IMMEDIATE`.
|
|
366
|
+
*/
|
|
367
|
+
version(): CodexTransitionVersion;
|
|
368
|
+
assertPublished(expectation: CommitExpectation): void;
|
|
369
|
+
assertStablePath(): void;
|
|
370
|
+
commit(): void;
|
|
371
|
+
rollback(): void;
|
|
372
|
+
close(): void;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/** Why a filesystem observation influenced catalog preparation. Closed by contract. */
|
|
376
|
+
export type CatalogRequiredSourceRole = "catalog-target-selection";
|
|
377
|
+
|
|
378
|
+
export type CatalogConditionalSourceRole =
|
|
379
|
+
| "bundled-catalog-template"
|
|
380
|
+
| "active-catalog-merge"
|
|
381
|
+
| "hashed-backup-fallback"
|
|
382
|
+
| "legacy-backup-fallback"
|
|
383
|
+
| "models-cache-fallback"
|
|
384
|
+
| "native-catalog-selection"
|
|
385
|
+
| "runtime-selection"
|
|
386
|
+
| "provider-auth-selection";
|
|
387
|
+
|
|
388
|
+
export type CatalogSourceRole =
|
|
389
|
+
| CatalogRequiredSourceRole
|
|
390
|
+
| CatalogConditionalSourceRole;
|
|
391
|
+
|
|
392
|
+
/** Portable normalized identity: POSIX dev/inode or Windows volume/file id. */
|
|
393
|
+
export interface CatalogFilesystemIdentity {
|
|
394
|
+
readonly volume: string;
|
|
395
|
+
readonly fileId: string;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
export interface CatalogParentIdentity extends CatalogFilesystemIdentity {
|
|
399
|
+
readonly canonicalPath: string;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/** Required evidence for the selector that chose every CODEX_HOME-derived path. */
|
|
403
|
+
export interface CatalogHomeSelectionObservation {
|
|
404
|
+
readonly selector: Readonly<{
|
|
405
|
+
readonly kind: "environment" | "default";
|
|
406
|
+
/** Exact pre-canonicalization selector string used by the production resolver. */
|
|
407
|
+
readonly raw: string;
|
|
408
|
+
}>;
|
|
409
|
+
readonly canonicalCodexHome: string;
|
|
410
|
+
readonly rootIdentity: CatalogFilesystemIdentity;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
export type CatalogProcessLocalObservation =
|
|
414
|
+
| { readonly state: "unused" }
|
|
415
|
+
| { readonly state: "used"; readonly epoch: number; readonly valueIdentity: string };
|
|
416
|
+
|
|
417
|
+
/** Candidate-bound evidence for mutable process-local authority, never file evidence. */
|
|
418
|
+
export interface CatalogProcessLocalEvidence {
|
|
419
|
+
readonly runtime: CatalogProcessLocalObservation;
|
|
420
|
+
readonly bundledCatalog: CatalogProcessLocalObservation;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
export type CatalogDiscoveryPolicyField<T> =
|
|
424
|
+
| Readonly<{ state: "absent" }>
|
|
425
|
+
| Readonly<{ state: "present"; value: T }>;
|
|
426
|
+
|
|
427
|
+
export interface CatalogTrustedOpenAiApiPolicySnapshot {
|
|
428
|
+
readonly state: "unused" | "transport-mismatch" | "registry-models-absent" | "captured";
|
|
429
|
+
readonly models?: readonly string[];
|
|
430
|
+
readonly modelContextWindows?: Readonly<Record<string, number>>;
|
|
431
|
+
readonly modelMaxInputTokens?: Readonly<Record<string, number>>;
|
|
432
|
+
readonly modelInputModalities?: Readonly<Record<string, readonly string[]>>;
|
|
433
|
+
readonly modelReasoningEfforts?: Readonly<Record<string, readonly string[]>>;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/** Detached effective policy consumed by one enabled provider inside a gather flight. */
|
|
437
|
+
export interface CatalogProviderDiscoveryPolicySnapshot {
|
|
438
|
+
readonly provider: string;
|
|
439
|
+
readonly registryTransportMatch: boolean;
|
|
440
|
+
readonly location: Readonly<{
|
|
441
|
+
readonly spec: "absent" | "present";
|
|
442
|
+
readonly url: CatalogDiscoveryPolicyField<string | undefined>;
|
|
443
|
+
readonly path: CatalogDiscoveryPolicyField<string | undefined>;
|
|
444
|
+
readonly query: CatalogDiscoveryPolicyField<Readonly<Record<string, string>> | undefined>;
|
|
445
|
+
}>;
|
|
446
|
+
readonly finalMethod: "GET" | "POST";
|
|
447
|
+
readonly finalUrl: string;
|
|
448
|
+
readonly filter: CatalogDiscoveryPolicyField<ProviderModelDiscoveryFilter | undefined>;
|
|
449
|
+
readonly maxResponseBytes: number;
|
|
450
|
+
readonly maxModels: number;
|
|
451
|
+
readonly trustedOpenAiApi: CatalogTrustedOpenAiApiPolicySnapshot;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/** Non-secret-bearing identity of every authority input admitted to one gather flight. */
|
|
455
|
+
export interface CatalogGatherAuthorityIdentity {
|
|
456
|
+
readonly version: 1;
|
|
457
|
+
/** Process-local keyed HMAC over every component below; never a raw content hash. */
|
|
458
|
+
readonly authorityId: string;
|
|
459
|
+
readonly admittedConfig: Readonly<{
|
|
460
|
+
/** Opaque WeakMap identity of the exact resident Readonly<OcxConfig> reference. */
|
|
461
|
+
readonly referenceIdentity: string;
|
|
462
|
+
readonly generation: ConfigGeneration;
|
|
463
|
+
/** Keyed HMAC of the exact canonical config snapshot, including secret-bearing fields. */
|
|
464
|
+
readonly snapshotIdentity: string;
|
|
465
|
+
}>;
|
|
466
|
+
readonly authSnapshotIdentity: string;
|
|
467
|
+
readonly discoveryPolicyIdentity: string;
|
|
468
|
+
readonly nativeCatalogSourceIdentity: string;
|
|
469
|
+
readonly sourceEvidenceIdentity: string;
|
|
470
|
+
readonly processLocalEvidenceIdentity: string;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/** Exact gather-time evidence for one consulted filesystem source. */
|
|
474
|
+
export type CatalogSourceObservation<R extends CatalogSourceRole = CatalogSourceRole> =
|
|
475
|
+
| {
|
|
476
|
+
readonly state: "present";
|
|
477
|
+
readonly role: R;
|
|
478
|
+
readonly logicalPath: string;
|
|
479
|
+
readonly canonicalPath: string;
|
|
480
|
+
readonly parentIdentity: CatalogParentIdentity;
|
|
481
|
+
readonly fileIdentity: CatalogFilesystemIdentity;
|
|
482
|
+
/** Digest of the exact buffer returned to gather. */
|
|
483
|
+
readonly sha256: string;
|
|
484
|
+
}
|
|
485
|
+
| {
|
|
486
|
+
readonly state: "absent";
|
|
487
|
+
readonly role: R;
|
|
488
|
+
readonly logicalPath: string;
|
|
489
|
+
readonly canonicalPath: string;
|
|
490
|
+
readonly parentIdentity: CatalogParentIdentity;
|
|
491
|
+
readonly fileIdentity: null;
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
export type CatalogRequiredSourceObservations = Readonly<{
|
|
495
|
+
[R in CatalogRequiredSourceRole]: CatalogSourceObservation<R>;
|
|
496
|
+
}>;
|
|
497
|
+
|
|
498
|
+
export type CatalogConditionalSourceObservations = Readonly<{
|
|
499
|
+
[R in CatalogConditionalSourceRole]: readonly CatalogSourceObservation<R>[];
|
|
500
|
+
}>;
|
|
501
|
+
|
|
502
|
+
export interface CatalogSourceEvidence {
|
|
503
|
+
/** Required before any CODEX_HOME-derived target or source path is accepted. */
|
|
504
|
+
readonly homeSelection: CatalogHomeSelectionObservation;
|
|
505
|
+
readonly required: CatalogRequiredSourceObservations;
|
|
506
|
+
/** Every role is a required key; an empty list means the role was not consulted. */
|
|
507
|
+
readonly conditional: CatalogConditionalSourceObservations;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/** The shared WP8b/WP9 snapshot; it authorizes catalog work only. */
|
|
511
|
+
export interface CatalogAdmissionSnapshot {
|
|
512
|
+
config: Readonly<OcxConfig>;
|
|
513
|
+
generation: ConfigGeneration;
|
|
514
|
+
/** Exact retained-reference/generation/snapshot identity used by gather authority. */
|
|
515
|
+
readonly configIdentity: CatalogGatherAuthorityIdentity["admittedConfig"];
|
|
516
|
+
targets: Readonly<{
|
|
517
|
+
catalog: string;
|
|
518
|
+
cache: string;
|
|
519
|
+
catalogBackups: readonly string[];
|
|
520
|
+
}>;
|
|
521
|
+
/** Candidate-bound present/absent evidence, produced by the sole read owner. */
|
|
522
|
+
sourceEvidence: CatalogSourceEvidence;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
export interface AdmissionSnapshot {
|
|
526
|
+
config: Readonly<OcxConfig>;
|
|
527
|
+
configDigest: string;
|
|
528
|
+
intent: "on" | "off";
|
|
529
|
+
/**
|
|
530
|
+
* `present:false` means the coordinator database did not exist when this was
|
|
531
|
+
* captured. It is not a baseline: it authorizes a write only when the read
|
|
532
|
+
* taken inside the config transaction returns exactly 0.
|
|
533
|
+
*/
|
|
534
|
+
generation: Readonly<{ present: boolean; value: number }>;
|
|
535
|
+
ownership: "owned" | "foreign" | "unknown";
|
|
536
|
+
externalProvider: string | null;
|
|
537
|
+
canonicalTargets: Readonly<{
|
|
538
|
+
codexHome: string;
|
|
539
|
+
opencodexHome: string;
|
|
540
|
+
config: string;
|
|
541
|
+
profile: string;
|
|
542
|
+
catalog: string;
|
|
543
|
+
cache: string;
|
|
544
|
+
journal: string;
|
|
545
|
+
integrationRecord: string;
|
|
546
|
+
catalogBackups: readonly string[];
|
|
547
|
+
historyDb: string;
|
|
548
|
+
historyManifest: string;
|
|
549
|
+
historyRollouts: readonly string[];
|
|
550
|
+
}>;
|
|
551
|
+
journalIdentity: string;
|
|
552
|
+
provenanceIdentity: string;
|
|
553
|
+
/** Digest of every authority field above; passed to the history Worker. */
|
|
554
|
+
authoritySnapshotId: string;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* Effective-user identity for the lock namespace.
|
|
559
|
+
*
|
|
560
|
+
* NOT a home path. Bun 1.3.14 returns an environment-controlled home from both
|
|
561
|
+
* os.homedir() AND os.userInfo().homedir, so any home-derived namespace can be
|
|
562
|
+
* split by a service and a CLI that see different HOME values — which defeats
|
|
563
|
+
* exclusion entirely, silently.
|
|
564
|
+
*/
|
|
565
|
+
export type UserIdentity =
|
|
566
|
+
| { platform: "posix"; uid: number }
|
|
567
|
+
| { platform: "win32"; sid: string };
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Resolve the effective account from operating-system identity APIs only.
|
|
571
|
+
* Failure is a typed namespace refusal; username/home/environment fallback is
|
|
572
|
+
* forbidden because it can split one account across two lock databases.
|
|
573
|
+
*/
|
|
574
|
+
export type ResolveEffectiveUserIdentity = () => UserIdentity;
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* Return the FINAL SQLite coordinator database path for this exact canonical
|
|
578
|
+
* CODEX_HOME. Consumers append no uid/SID, version, directory or filename.
|
|
579
|
+
*/
|
|
580
|
+
export type ResolveCodexCoordinatorDatabasePath = (
|
|
581
|
+
identity: UserIdentity,
|
|
582
|
+
canonicalCodexHome: string,
|
|
583
|
+
) => string;
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Return K's FINAL database path; this is never the native coordinator path.
|
|
587
|
+
*
|
|
588
|
+
* Catalog serialization is a separate ownership surface from N. `K -> C` is a
|
|
589
|
+
* legal order and `N -> K` nests, so one shared database would self-contend.
|
|
590
|
+
* Consumers append no uid/SID, version, directory or filename.
|
|
591
|
+
*/
|
|
592
|
+
export type ResolveCodexCatalogSerializationDatabasePath = (
|
|
593
|
+
identity: UserIdentity,
|
|
594
|
+
canonicalCodexHome: string,
|
|
595
|
+
) => string;
|
|
596
|
+
|
|
597
|
+
/**
|
|
598
|
+
* H's FINAL database path. Never N's and never K's.
|
|
599
|
+
*
|
|
600
|
+
* History exclusion is keyed by the CANONICAL STATE DB as well as the canonical
|
|
601
|
+
* home, because one `CODEX_HOME` can name a different `state_5.sqlite` through a
|
|
602
|
+
* relative or retargeted path, and two operations against different history
|
|
603
|
+
* databases are not the same exclusion. N and K key on the home alone: they guard
|
|
604
|
+
* routing and catalog bytes, which the home fully determines.
|
|
605
|
+
*
|
|
606
|
+
* `H -> N` is the real order — the Worker reads the coordinator and writes its
|
|
607
|
+
* terminal row while holding H — so H must be its own database or that read would
|
|
608
|
+
* self-contend. Consumers append nothing to the returned path.
|
|
609
|
+
*/
|
|
610
|
+
export type ResolveCodexHistorySerializationDatabasePath = (
|
|
611
|
+
identity: UserIdentity,
|
|
612
|
+
canonicalCodexHome: string,
|
|
613
|
+
canonicalStateDbPath: string,
|
|
614
|
+
) => string;
|