@bitkyc08/opencodex 2.83.0 → 2.86.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/README.md +0 -4
- package/bin/ocx.mjs +61 -3
- package/gui/dist/assets/App-BjlttVLy.js +58 -0
- package/gui/dist/assets/Tray-DyR9yBee.js +1 -0
- package/gui/dist/assets/{index-BAbcj51J.css → index-BB6uK6tU.css} +1 -1
- package/gui/dist/assets/index-BMssP4k3.js +94 -0
- package/gui/dist/assets/quota-summary-D8M1bc_R.js +1 -0
- package/gui/dist/index.html +2 -2
- package/package.json +2 -3
- package/src/adapters/anthropic/beta-allowlist.ts +87 -8
- package/src/adapters/anthropic/client-identity.ts +1 -1
- package/src/adapters/anthropic/passthrough.ts +33 -4
- package/src/adapters/azure.ts +19 -1
- package/src/adapters/client-fingerprint.ts +24 -0
- package/src/adapters/coding-agent/protocol.ts +15 -8
- package/src/adapters/coding-agent/turn.ts +22 -9
- package/src/adapters/cursor/arg-codec.ts +17 -5
- package/src/adapters/cursor/catalog.ts +8 -0
- package/src/adapters/cursor/effort-map.ts +3 -0
- package/src/adapters/cursor/freeform-args.ts +75 -0
- package/src/adapters/cursor/protobuf-events.ts +36 -23
- package/src/adapters/google-antigravity-wire.ts +22 -1
- package/src/adapters/google.ts +2 -2
- package/src/adapters/ollama-native.ts +29 -1
- package/src/adapters/openai-chat/messages.ts +8 -4
- package/src/adapters/openai-chat/response-events.ts +59 -1
- package/src/adapters/openai-chat.ts +8 -5
- package/src/adapters/openai-responses/empty-assistant.ts +32 -0
- package/src/adapters/openai-responses/passthrough.ts +3 -0
- package/src/adapters/openai-responses/request-strips.ts +10 -2
- package/src/adapters/qoder/adapter.ts +56 -15
- package/src/advisor/consult.ts +220 -0
- package/src/advisor/context.ts +226 -0
- package/src/advisor/disclosure.ts +20 -0
- package/src/advisor/runtime.ts +305 -0
- package/src/advisor/settings.ts +135 -0
- package/src/advisor/state.ts +369 -0
- package/src/advisor/synthetic-tool.ts +33 -0
- package/src/bridge/errors.ts +24 -0
- package/src/bridge.ts +1 -1
- package/src/chat/inbound.ts +30 -6
- package/src/chat/outbound.ts +5 -0
- package/src/claude/context-windows.ts +54 -1
- package/src/claude/desktop-3p-library.ts +43 -3
- package/src/claude/desktop-3p.ts +22 -8
- package/src/claude/desktop-picker-profile.ts +11 -4
- package/src/claude/desktop-profile.ts +10 -1
- package/src/claude/desktop-remote-store-io.ts +5 -3
- package/src/claude/inbound.ts +121 -50
- package/src/claude/intercept/connect-proxy.ts +10 -3
- package/src/claude/intercept/local-ca.ts +8 -1
- package/src/claude/intercept/picker-ca-persistence.ts +3 -1
- package/src/claude/intercept/picker-listener.ts +49 -1
- package/src/claude/intercept/settings-no-proxy.ts +146 -0
- package/src/claude/intercept/settings.ts +101 -9
- package/src/claude/model-default-settings.ts +154 -0
- package/src/claude/model-info.ts +7 -7
- package/src/claude/outbound.ts +13 -6
- package/src/cli/account-api.ts +65 -0
- package/src/cli/account-auth.ts +26 -2
- package/src/cli/account.ts +41 -5
- package/src/cli/advisor.ts +151 -0
- package/src/cli/auxiliary-listener-preflight.ts +37 -0
- package/src/cli/capabilities-access-remote.ts +8 -0
- package/src/cli/capabilities-agents-routing.ts +18 -0
- package/src/cli/capabilities-base.ts +14 -2
- package/src/cli/catalog-command-result.ts +2 -1
- package/src/cli/chatgpt-command.ts +35 -14
- package/src/cli/claude.ts +60 -11
- package/src/cli/config-command.ts +8 -2
- package/src/cli/debug.ts +8 -0
- package/src/cli/dispatch.ts +21 -4
- package/src/cli/doctor.ts +9 -0
- package/src/cli/ensure-desktop-cold-start.ts +329 -0
- package/src/cli/export-command.ts +15 -2
- package/src/cli/help.ts +2 -1
- package/src/cli/hub-disable.ts +99 -0
- package/src/cli/hub.ts +4 -2
- package/src/cli/index.ts +26 -8
- package/src/cli/integration-plan-dto.ts +2 -0
- package/src/cli/link-child.ts +104 -0
- package/src/cli/link-enrollment.ts +96 -0
- package/src/cli/link.ts +39 -24
- package/src/cli/observe-stream.ts +6 -1
- package/src/cli/observe.ts +10 -2
- package/src/cli/provider.ts +12 -0
- package/src/cli/registry.ts +20 -7
- package/src/cli/restart-scope.ts +3 -1
- package/src/cli/runtime-api.ts +27 -2
- package/src/cli/status.ts +104 -20
- package/src/client/connect.ts +39 -4
- package/src/client/hub-client.ts +14 -7
- package/src/client/hub-state.ts +25 -14
- package/src/client/link-home.ts +248 -0
- package/src/client/link-management-relay.ts +61 -0
- package/src/client/link-relay.ts +6 -1
- package/src/client/link-status.ts +14 -0
- package/src/client/machine-api.ts +14 -7
- package/src/client/machine-listener.ts +29 -4
- package/src/clients/config-export/contracts.ts +1 -0
- package/src/clients/config-export/model-metadata.ts +3 -2
- package/src/clients/config-export/qoder.ts +93 -0
- package/src/clients/config-export.ts +59 -16
- package/src/clients/omo-role-models.ts +6 -3
- package/src/codex/agent-role-models.ts +26 -8
- package/src/codex/auth-api/account-list.ts +17 -2
- package/src/codex/auth-api/account-selection.ts +17 -7
- package/src/codex/auth-api/pool-mode-gate.ts +5 -2
- package/src/codex/auth-api/routes.ts +5 -1
- package/src/codex/auth-context.ts +79 -5
- package/src/codex/autostart-health.ts +7 -1
- package/src/codex/catalog/build-entries.ts +11 -2
- package/src/codex/catalog/bundled.ts +5 -1
- package/src/codex/catalog/configured-tiers.ts +50 -0
- package/src/codex/catalog/effort.ts +6 -3
- package/src/codex/catalog/metadata.ts +4 -2
- package/src/codex/catalog/model-hints.ts +21 -3
- package/src/codex/catalog/native-models.ts +16 -2
- package/src/codex/catalog/native-ultrafast.ts +106 -0
- package/src/codex/catalog/parsing.ts +5 -0
- package/src/codex/catalog/provider-models.ts +4 -0
- package/src/codex/catalog/retained-sync.ts +2 -0
- package/src/codex/catalog/routed-gather.ts +22 -4
- package/src/codex/catalog/vendor-context.ts +82 -0
- package/src/codex/config-write-lock.ts +40 -2
- package/src/codex/convergence.ts +2 -0
- package/src/codex/desktop-app/types.ts +2 -0
- package/src/codex/desktop-app/windows.ts +29 -16
- package/src/codex/desktop-app-restart.ts +4 -2
- package/src/codex/desktop-compatibility/certificate-service.ts +99 -0
- package/src/codex/desktop-compatibility/certificate-store.ts +193 -0
- package/src/codex/desktop-compatibility/connection-store.ts +87 -0
- package/src/codex/desktop-compatibility/installed-build.ts +55 -0
- package/src/codex/desktop-compatibility/json-body.ts +29 -0
- package/src/codex/desktop-compatibility/native-identity.ts +62 -0
- package/src/codex/desktop-compatibility/relay-listener.ts +93 -0
- package/src/codex/desktop-compatibility/routing-binding.ts +10 -0
- package/src/codex/desktop-compatibility/routing-preflight.ts +69 -0
- package/src/codex/desktop-compatibility/runtime-ownership.ts +28 -0
- package/src/codex/desktop-compatibility/runtime.ts +173 -0
- package/src/codex/desktop-compatibility/service.ts +30 -0
- package/src/codex/desktop-compatibility/startup-settings.ts +50 -0
- package/src/codex/desktop-compatibility/usage-activation.ts +86 -0
- package/src/codex/desktop-compatibility/usage-controlled-fetch.ts +59 -0
- package/src/codex/desktop-compatibility/usage-controller.ts +107 -0
- package/src/codex/desktop-compatibility/usage-policy.ts +59 -0
- package/src/codex/desktop-compatibility/usage-refresh.ts +33 -0
- package/src/codex/desktop-compatibility/usage-sse-controller.ts +86 -0
- package/src/codex/desktop-compatibility/windows-activation-source.ts +44 -0
- package/src/codex/desktop-compatibility/windows-certificate-trust.ts +81 -0
- package/src/codex/desktop-compatibility/windows-key-protection.ts +59 -0
- package/src/codex/desktop-compatibility/windows-package-command.ts +86 -0
- package/src/codex/desktop-compatibility/windows-package-launch.ts +28 -0
- package/src/codex/history-provider.ts +1 -1
- package/src/codex/inject/config-write-section.ts +4 -1
- package/src/codex/inject/remove.ts +18 -6
- package/src/codex/journal.ts +16 -1
- package/src/codex/main-account.ts +99 -15
- package/src/codex/native-main-refresh-mode.ts +217 -0
- package/src/codex/native-profile-startup.ts +4 -1
- package/src/codex/prompt-journal.ts +20 -2
- package/src/codex/prompt-layers/encoding.ts +49 -0
- package/src/codex/prompt-layers/import-source.ts +30 -0
- package/src/codex/prompt-layers/toml-edit.ts +269 -37
- package/src/codex/prompt-layers/toml-read.ts +52 -4
- package/src/codex/prompt-layers.ts +383 -20
- package/src/codex/prompt-lock-claim.ts +13 -3
- package/src/codex/prompt-lock-evidence.ts +3 -3
- package/src/codex/prompt-lock-owner.ts +14 -6
- package/src/codex/prompt-text-probe.ts +34 -5
- package/src/codex/quota.ts +13 -6
- package/src/codex/role-auto-assign.ts +2 -5
- package/src/codex/routing/active-account.ts +21 -0
- package/src/codex/routing/health-store.ts +1 -1
- package/src/codex/routing/pool-recovery.ts +79 -0
- package/src/codex/routing.ts +1 -1
- package/src/codex/runtime.ts +196 -8
- package/src/codex/shim-diagnostics.ts +6 -0
- package/src/codex/shim-overlay.ts +15 -6
- package/src/codex/shim.ts +1 -1
- package/src/combos/failover.ts +3 -0
- package/src/config/api-key-reconcile.ts +34 -0
- package/src/config/diagnostics.ts +18 -1
- package/src/config/feature-flags.ts +5 -0
- package/src/config/live-reconcile.ts +56 -29
- package/src/config/live-topology.ts +29 -0
- package/src/config/load-degrade.ts +8 -2
- package/src/config/paths.ts +13 -3
- package/src/config/salvage.ts +3 -1
- package/src/config/schema/config-schema.ts +19 -0
- package/src/config/schema/desktop-compatibility.ts +9 -0
- package/src/config/schema/leaf-validators.ts +1 -0
- package/src/generated/compatibility-version.json +713 -285
- package/src/generated/model-metadata.ts +1 -1
- package/src/grok/grpc-web.ts +23 -1
- package/src/grok/reset-coupon-ledger.ts +75 -5
- package/src/grok/reset-coupons.ts +4 -2
- package/src/integrations/catalog-refresh.ts +1 -1
- package/src/integrations/config-io.ts +20 -2
- package/src/integrations/journal.ts +15 -1
- package/src/integrations/mutation-plan.ts +14 -7
- package/src/integrations/registry.ts +52 -11
- package/src/integrations/state.ts +19 -7
- package/src/integrations/store.ts +3 -0
- package/src/integrations/target.ts +42 -5
- package/src/integrations/writer.ts +24 -7
- package/src/lib/advisor-activation.ts +16 -0
- package/src/lib/app-owned-memory-stores.ts +4 -0
- package/src/lib/app-owned-memory.ts +11 -0
- package/src/lib/background-work.ts +65 -0
- package/src/lib/bounded-file-read.ts +58 -0
- package/src/lib/bun-path-runtime.d.mts +10 -1
- package/src/lib/bun-path-runtime.mjs +62 -3
- package/src/lib/desktop-proxy-route.ts +30 -0
- package/src/lib/desktop-upstream-tunnel.ts +107 -0
- package/src/lib/errors.ts +7 -0
- package/src/lib/json-byte-size.ts +31 -0
- package/src/lib/local-internal-call-capability.ts +55 -0
- package/src/lib/optional-shutdown-hooks.ts +35 -0
- package/src/lib/outbound-credential-registry.ts +210 -0
- package/src/lib/package-tree-integrity.ts +2 -2
- package/src/lib/passive-read.ts +35 -0
- package/src/lib/shadow-call.ts +44 -5
- package/src/lib/socks5-fetch.ts +48 -71
- package/src/lib/socks5-handshake.ts +112 -0
- package/src/lib/translator-budget.ts +7 -1
- package/src/link/codex-settings.ts +155 -0
- package/src/link/management-routes.ts +89 -0
- package/src/link/remote-probe.ts +38 -0
- package/src/link/ssh-argv.ts +26 -5
- package/src/link/ssh-runner.ts +58 -27
- package/src/link/status-projection.ts +22 -4
- package/src/link/supervisor.ts +144 -49
- package/src/link/tunnel-state.ts +11 -4
- package/src/oauth/anthropic-continuity.ts +4 -3
- package/src/oauth/anthropic-identity.ts +13 -2
- package/src/oauth/anthropic-model-quota.ts +13 -1
- package/src/oauth/anthropic-routing.ts +230 -23
- package/src/oauth/anthropic.ts +18 -4
- package/src/oauth/generic-account-failover.ts +29 -5
- package/src/oauth/google-antigravity.ts +24 -7
- package/src/oauth/index.ts +28 -17
- package/src/oauth/kiro-account-identity.ts +106 -0
- package/src/oauth/kiro-device-login.ts +2 -1
- package/src/oauth/kiro.ts +55 -6
- package/src/oauth/plan.ts +29 -0
- package/src/oauth/store.ts +40 -3
- package/src/oauth/types.ts +2 -0
- package/src/plugins/loader.ts +11 -0
- package/src/protocols/codecs/chat-ir.ts +467 -0
- package/src/protocols/codecs/chat.ts +10 -1
- package/src/protocols/codecs/messages-ir.ts +500 -0
- package/src/protocols/features.ts +10 -2
- package/src/protocols/path.ts +11 -1
- package/src/protocols/plan-snapshot.ts +39 -16
- package/src/protocols/plan.ts +9 -1
- package/src/protocols/settings.ts +8 -0
- package/src/providers/anthropic-billing-ownership.ts +74 -0
- package/src/providers/anthropic-billing-recovery.ts +31 -0
- package/src/providers/anthropic-billing-refusal.ts +55 -0
- package/src/providers/anthropic-reset-admission.ts +62 -0
- package/src/providers/anthropic-reset-grant-ledger.ts +28 -6
- package/src/providers/antigravity-account-roster.ts +102 -0
- package/src/providers/antigravity-models.ts +85 -7
- package/src/providers/api-key-resolve.ts +17 -2
- package/src/providers/key-failover.ts +52 -5
- package/src/providers/model-rename-fields.ts +2 -0
- package/src/providers/model-rename-migration.ts +5 -3
- package/src/providers/model-rename-startup.ts +5 -3
- package/src/providers/quota/account-cache.ts +11 -0
- package/src/providers/quota/anthropic-account-quota.ts +4 -2
- package/src/providers/quota/report-cache.ts +14 -0
- package/src/providers/quota/vendor-probes-oauth.ts +3 -3
- package/src/providers/quota.ts +4 -1
- package/src/providers/registry/entries-core.ts +21 -20
- package/src/providers/registry/entries-extended.ts +19 -1
- package/src/providers/registry/model-seeds.ts +17 -0
- package/src/providers/request-pacing.ts +9 -0
- package/src/providers/stale-no-vision-seed-migration.ts +72 -0
- package/src/responses/compaction.ts +14 -0
- package/src/responses/parser.ts +37 -20
- package/src/responses/state.ts +32 -29
- package/src/routing/history/build-file.ts +92 -0
- package/src/routing/history/indexer.ts +248 -216
- package/src/routing/history/ingest.ts +238 -0
- package/src/routing/history/rebuild-job.ts +111 -0
- package/src/routing/history/rebuild-protocol.ts +15 -0
- package/src/routing/history/rebuild-worker.ts +34 -0
- package/src/server/admission-model-scope.ts +4 -1
- package/src/server/antigravity-direct-eligibility.ts +208 -0
- package/src/server/auth-cors.ts +46 -0
- package/src/server/chat-completions.ts +75 -9
- package/src/server/claude-messages.ts +110 -20
- package/src/server/configured-credentials.ts +194 -0
- package/src/server/index/desktop-compatibility-startup.ts +56 -0
- package/src/server/index/link-management.ts +58 -0
- package/src/server/index/optional-listeners.ts +5 -1
- package/src/server/index/serve-options.ts +15 -2
- package/src/server/index/startup-warnings.ts +9 -0
- package/src/server/index/websocket-handler.ts +9 -0
- package/src/server/index.ts +13 -10
- package/src/server/inference/client-encoder-delivery.ts +6 -5
- package/src/server/lifecycle.ts +2 -1
- package/src/server/login-shell-path.ts +146 -0
- package/src/server/management/advisor-routes.ts +191 -0
- package/src/server/management/agent-settings-routes.ts +50 -14
- package/src/server/management/anthropic-reset-grant-routes.ts +17 -1
- package/src/server/management/codex-agent-role-routes.ts +19 -6
- package/src/server/management/codex-prompt-routes.ts +136 -5
- package/src/server/management/codex-role-auto-assign.ts +1 -1
- package/src/server/management/companion-routes.ts +4 -0
- package/src/server/management/config-routes.ts +2 -2
- package/src/server/management/context.ts +4 -0
- package/src/server/management/desktop-compatibility-routes.ts +46 -0
- package/src/server/management/desktop-compatibility-runtime-routes.ts +46 -0
- package/src/server/management/desktop-compatibility-settings-routes.ts +27 -0
- package/src/server/management/grok-coupon-routes.ts +78 -27
- package/src/server/management/link-enrollment.ts +192 -0
- package/src/server/management/link-route-state.ts +185 -0
- package/src/server/management/link-routes.ts +82 -402
- package/src/server/management/model-routes.ts +2 -2
- package/src/server/management/model-rows.ts +3 -1
- package/src/server/management/protocol-settings-patch.ts +1 -0
- package/src/server/management/provider-overwrite-carry.ts +10 -0
- package/src/server/management/provider-routes.ts +1 -0
- package/src/server/management/route-registry.ts +16 -3
- package/src/server/management/shared.ts +3 -0
- package/src/server/management/sibling-guard.ts +1 -0
- package/src/server/management-api.ts +9 -1
- package/src/server/messages-antigravity-direct.ts +195 -0
- package/src/server/messages-native.ts +73 -43
- package/src/server/relay-eager.ts +2 -0
- package/src/server/request-log-filter.ts +6 -1
- package/src/server/request-log-terminal-status.ts +63 -6
- package/src/server/request-log.ts +7 -0
- package/src/server/responses/adapter-continuation.ts +35 -18
- package/src/server/responses/adapter-delivery.ts +24 -2
- package/src/server/responses/adapter-dispatch.ts +261 -81
- package/src/server/responses/advisor-plan-slot.ts +27 -0
- package/src/server/responses/advisor-slot.ts +336 -0
- package/src/server/responses/code-mode-collab-surface.ts +313 -0
- package/src/server/responses/codex-ws-exchange.ts +147 -6
- package/src/server/responses/codex-ws-wire.ts +203 -0
- package/src/server/responses/collaboration.ts +36 -7
- package/src/server/responses/compact.ts +126 -48
- package/src/server/responses/context-overflow.ts +13 -1
- package/src/server/responses/core-codex-account.ts +105 -1
- package/src/server/responses/core-combo-failure.ts +24 -1
- package/src/server/responses/core-combo.ts +28 -2
- package/src/server/responses/core-errors.ts +29 -1
- package/src/server/responses/core-lifetime.ts +2 -0
- package/src/server/responses/core-normalize.ts +11 -0
- package/src/server/responses/core-options.ts +48 -0
- package/src/server/responses/core-replay.ts +7 -4
- package/src/server/responses/core.ts +1 -1
- package/src/server/responses/deferred-collab-surface.ts +158 -0
- package/src/server/responses/deferred-send-reporter.ts +25 -0
- package/src/server/responses/fetch-helpers.ts +12 -1
- package/src/server/responses/passthrough-delivery.ts +20 -11
- package/src/server/responses/passthrough-dispatch.ts +29 -7
- package/src/server/responses/request-prepare.ts +74 -9
- package/src/server/responses/request-transport.ts +22 -8
- package/src/server/responses/run-turn-execution.ts +70 -8
- package/src/server/responses/sidecar-execution.ts +89 -5
- package/src/server/responses/terminal-guard.ts +2 -1
- package/src/server/responses/ws-upstream.ts +9 -1
- package/src/server/responses-undeclared-tool-guard.ts +30 -9
- package/src/server/startup-action-control.ts +38 -4
- package/src/server/startup-health-cache.ts +5 -0
- package/src/server/system-env-shell.ts +7 -2
- package/src/server/system-env.ts +11 -1
- package/src/service/cli.ts +5 -1
- package/src/service/desktop-startup.ts +161 -34
- package/src/service/desktop-supervision.d.mts +27 -1
- package/src/service/desktop-supervision.mjs +111 -5
- package/src/service/health-sentinel-launch.ts +176 -0
- package/src/service/health-sentinel-main.ts +466 -0
- package/src/service/health-sentinel-policy.ts +241 -0
- package/src/service/health-sentinel-probe.ts +71 -0
- package/src/service/health-sentinel-windows.ts +87 -0
- package/src/service/linux-linger.ts +20 -0
- package/src/service/logging.ts +72 -0
- package/src/tray/windows-tray.ps1 +43 -24
- package/src/types/config.ts +68 -6
- package/src/types/provider.ts +7 -0
- package/src/types/request.ts +15 -0
- package/src/types/tools.ts +2 -0
- package/src/update/async-check.ts +1 -1
- package/src/update/badge.ts +2 -2
- package/src/update/index.ts +88 -15
- package/src/update/job-supervised-restart.ts +107 -0
- package/src/update/job.ts +32 -32
- package/src/update/notify.ts +1 -1
- package/src/update/refresh-scheduler.ts +2 -2
- package/src/update/supervised-recovery.d.mts +27 -0
- package/src/update/supervised-recovery.mjs +157 -0
- package/src/usage/cache-diagnostic.ts +2 -0
- package/src/usage/expected-prices.ts +16 -0
- package/src/usage/log.ts +19 -1
- package/src/web-search/gemini-executor.ts +2 -2
- package/assets/sponsors/packycode.png +0 -0
- package/gui/dist/assets/App-Ba8uG696.js +0 -54
- package/gui/dist/assets/Tray-IImbNPRy.js +0 -1
- package/gui/dist/assets/index-BHRZdJuv.js +0 -94
- package/gui/dist/assets/quota-summary-DiJO6sYY.js +0 -1
|
@@ -56,6 +56,20 @@ export const SUMMARY_PREFIX = "Another language model started to solve this prob
|
|
|
56
56
|
|
|
57
57
|
export const OPAQUE_COMPACTION_NOTE = "[earlier conversation was compacted; the summary is stored in a format this model cannot read]";
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Prompt contract for a routed model receiving a decoded `ocx1` checkpoint as user text (#6764).
|
|
61
|
+
* It preserves existing authorization scope and permission gates; it grants no authority.
|
|
62
|
+
* Kept apart from SUMMARY_PREFIX, which the v1 retention and recovery paths match exactly.
|
|
63
|
+
*/
|
|
64
|
+
export const CHECKPOINT_CONTINUATION_NOTE = "This conversation was compacted automatically. A checkpoint summary from an earlier context window appears as a user message and records prior work. Treat earlier requests it reports as completed as history; do not repeat them unless a later user message asks you to. Continue an unfinished task only when it was already authorized and remains within the scope of that authorization. Do not ask for the same authorization again while it still applies. Preserve all existing permission and confirmation gates; if a decision or required permission is pending, wait for it before taking the dependent action. A checkpoint or delegation, including one from another thread, does not itself grant authority or expand the task's scope. Later user messages take priority; obey any pause, cancellation, replacement, or change of scope.";
|
|
65
|
+
|
|
66
|
+
/** Append the continuation note to existing instructions once. */
|
|
67
|
+
export function appendCheckpointContinuationNote(instructions: unknown): string {
|
|
68
|
+
const existing = typeof instructions === "string" ? instructions : "";
|
|
69
|
+
if (existing.includes(CHECKPOINT_CONTINUATION_NOTE)) return existing;
|
|
70
|
+
return existing.trim().length > 0 ? `${existing}\n\n${CHECKPOINT_CONTINUATION_NOTE}` : CHECKPOINT_CONTINUATION_NOTE;
|
|
71
|
+
}
|
|
72
|
+
|
|
59
73
|
/**
|
|
60
74
|
* Item types in the compact wire family. Each carries an `encrypted_content` blob the client
|
|
61
75
|
* replays verbatim on every later turn, and the minting backend verifies it is unmodified.
|
package/src/responses/parser.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { createToolChoiceResolver, namespacedToolName } from "../types";
|
|
|
15
15
|
import { responsesRequestSchema } from "./schema";
|
|
16
16
|
import { providerMetadataFromResponsesFunctionCall } from "./provider-opaque-metadata";
|
|
17
17
|
import { lookupReplayThoughtSignature } from "./thought-signature-replay";
|
|
18
|
-
import { compactionItemToText, isCompactionItemType } from "./compaction";
|
|
18
|
+
import { CHECKPOINT_CONTINUATION_NOTE, compactionItemToText, decodeCompactionSummary, isCompactionItemType } from "./compaction";
|
|
19
19
|
import { previousResponseReplayPrefixLength } from "./state";
|
|
20
20
|
import { decodeReasoningEnvelope } from "./reasoning-envelope";
|
|
21
21
|
import { hasRoutedIdentity, nameRoutedIdentity } from "../adapters/identity";
|
|
@@ -66,6 +66,35 @@ function repairJsonObjectEnvelope(text: string): Record<string, unknown> | undef
|
|
|
66
66
|
return undefined;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Decode a function call's serialized arguments the way history replay tolerates them: empty
|
|
71
|
+
* or non-JSON text becomes `{}` instead of failing every later turn, and the one bounded
|
|
72
|
+
* lost-brace corruption above is repaired. Shared with the direct Chat decoder
|
|
73
|
+
* (`src/protocols/codecs/chat-ir.ts`) so both decode the same call to the same object.
|
|
74
|
+
*/
|
|
75
|
+
export function functionCallArgumentsFromText(callId: string, rawArguments: string | undefined): Record<string, unknown> {
|
|
76
|
+
let args: Record<string, unknown> = {};
|
|
77
|
+
const rawArgs = rawArguments?.trim();
|
|
78
|
+
if (rawArgs) {
|
|
79
|
+
try {
|
|
80
|
+
const parsed: unknown = JSON.parse(rawArgs);
|
|
81
|
+
if (isObj(parsed)) args = parsed;
|
|
82
|
+
} catch {
|
|
83
|
+
// One observed serialization corruption loses exactly the JSON object's opening
|
|
84
|
+
// brace; the closed envelope is tight enough to repair back into a call the
|
|
85
|
+
// routed model can still see and retry, instead of replaying {} forever.
|
|
86
|
+
const repaired = repairJsonObjectEnvelope(rawArgs);
|
|
87
|
+
if (repaired === undefined) {
|
|
88
|
+
console.warn(`[parser] function_call ${callId} has non-JSON arguments; defaulting to {}`);
|
|
89
|
+
} else {
|
|
90
|
+
args = repaired;
|
|
91
|
+
console.warn(`[parser] function_call ${callId} arguments lost the JSON opening brace; repaired from history`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return args;
|
|
96
|
+
}
|
|
97
|
+
|
|
69
98
|
|
|
70
99
|
|
|
71
100
|
function ensureAssistantPlaceholder(messages: OcxMessage[], modelId: string, now: number): OcxAssistantMessage {
|
|
@@ -193,6 +222,7 @@ export function parseRequest(
|
|
|
193
222
|
// Remote compaction v2: the input tail carries `{type:"compaction_trigger"}` and Codex expects a
|
|
194
223
|
// synthetic `{type:"compaction"}` output item (src/responses/compaction.ts). Flagged for the server.
|
|
195
224
|
let compactionRequest = false;
|
|
225
|
+
let decodedCheckpoint = false;
|
|
196
226
|
let contextCompactionBoundary = false;
|
|
197
227
|
let continuationConversationMessageIndex: number | undefined;
|
|
198
228
|
|
|
@@ -261,6 +291,7 @@ export function parseRequest(
|
|
|
261
291
|
if (inputIndex >= replayedInputPrefixLength) contextCompactionBoundary = true;
|
|
262
292
|
const encrypted = (item as { encrypted_content?: unknown }).encrypted_content;
|
|
263
293
|
if (effectiveType === "context_compaction" && typeof encrypted !== "string") continue;
|
|
294
|
+
if (typeof encrypted === "string" && decodeCompactionSummary(encrypted) !== null) decodedCheckpoint = true;
|
|
264
295
|
pendingReasoning.length = 0;
|
|
265
296
|
messages.push({
|
|
266
297
|
role: "user",
|
|
@@ -395,25 +426,7 @@ export function parseRequest(
|
|
|
395
426
|
const call = item as { id?: string; call_id: string; name: string; arguments?: string; namespace?: string; extra_content?: unknown };
|
|
396
427
|
// Tolerate empty/non-JSON arguments (e.g. a no-arg tool call serialized as "") instead of
|
|
397
428
|
// throwing — a single poisoned history item would otherwise 400 every subsequent turn.
|
|
398
|
-
|
|
399
|
-
const rawArgs = call.arguments?.trim();
|
|
400
|
-
if (rawArgs) {
|
|
401
|
-
try {
|
|
402
|
-
const parsed: unknown = JSON.parse(rawArgs);
|
|
403
|
-
if (isObj(parsed)) args = parsed;
|
|
404
|
-
} catch {
|
|
405
|
-
// One observed serialization corruption loses exactly the JSON object's opening
|
|
406
|
-
// brace; the closed envelope is tight enough to repair back into a call the
|
|
407
|
-
// routed model can still see and retry, instead of replaying {} forever.
|
|
408
|
-
const repaired = repairJsonObjectEnvelope(rawArgs);
|
|
409
|
-
if (repaired === undefined) {
|
|
410
|
-
console.warn(`[parser] function_call ${call.call_id} has non-JSON arguments; defaulting to {}`);
|
|
411
|
-
} else {
|
|
412
|
-
args = repaired;
|
|
413
|
-
console.warn(`[parser] function_call ${call.call_id} arguments lost the JSON opening brace; repaired from history`);
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
}
|
|
429
|
+
const args = functionCallArgumentsFromText(call.call_id, call.arguments);
|
|
417
430
|
// Do NOT map Responses item `id` (fc_/ctc_/…) onto `thoughtSignature`. That field is
|
|
418
431
|
// reserved for Gemini/Antigravity opaque thought tokens; forwarding item ids as
|
|
419
432
|
// thoughtSignature 400s Antigravity (Base64 / TYPE_BYTES). Continuity for CCA comes from
|
|
@@ -586,6 +599,10 @@ export function parseRequest(
|
|
|
586
599
|
.map(t => loadedToolNames.has(namespacedToolName(t.namespace, t.name))
|
|
587
600
|
? { ...t, loadedFromToolSearch: true }
|
|
588
601
|
: t);
|
|
602
|
+
// #6764: the decoded checkpoint is ordinary user text on this route. Say in the system prompt
|
|
603
|
+
// what it is, so a retained earlier request that it reports as completed is not repeated.
|
|
604
|
+
// A compaction request is a summarizer turn and must not be told to continue.
|
|
605
|
+
if (decodedCheckpoint && !compactionRequest) systemPrompt.push(CHECKPOINT_CONTINUATION_NOTE);
|
|
589
606
|
const context: OcxContext = {
|
|
590
607
|
...(systemPrompt.length > 0 ? { systemPrompt } : {}),
|
|
591
608
|
messages,
|
package/src/responses/state.ts
CHANGED
|
@@ -710,11 +710,6 @@ export function sweepOrphanedResponseSpills(): number {
|
|
|
710
710
|
type SnapshotWriteOutcome = "stable" | "unstable" | "failed";
|
|
711
711
|
|
|
712
712
|
async function writeBoundedSnapshot(path: string, attemptLimit: number): Promise<SnapshotWriteOutcome> {
|
|
713
|
-
// Serialize writers so concurrent flush + debounce cannot race on temps / ACL (#612).
|
|
714
|
-
const previous = persistGate;
|
|
715
|
-
let release!: () => void;
|
|
716
|
-
persistGate = new Promise<void>(resolve => { release = resolve; });
|
|
717
|
-
await previous;
|
|
718
713
|
try {
|
|
719
714
|
for (let attempt = 0; attempt < attemptLimit; attempt += 1) {
|
|
720
715
|
const revision = stateRevision;
|
|
@@ -751,13 +746,19 @@ async function writeBoundedSnapshot(path: string, attemptLimit: number): Promise
|
|
|
751
746
|
lastSnapshotTarget = resolveWriteTarget(path);
|
|
752
747
|
}
|
|
753
748
|
persistAttemptHookForTests?.();
|
|
754
|
-
if (revision === stateRevision)
|
|
749
|
+
if (revision === stateRevision) {
|
|
750
|
+
// Cancel only the timer whose mutation this stable revision includes,
|
|
751
|
+
// before an awaiting caller's microtask can record a newer revision.
|
|
752
|
+
if (persistTimer) clearTimeout(persistTimer);
|
|
753
|
+
persistTimer = null;
|
|
754
|
+
pendingPersistPath = null;
|
|
755
|
+
drainPendingSpillUnlinks();
|
|
756
|
+
return "stable";
|
|
757
|
+
}
|
|
755
758
|
}
|
|
756
759
|
return "unstable";
|
|
757
760
|
} catch {
|
|
758
761
|
return "failed";
|
|
759
|
-
} finally {
|
|
760
|
-
release();
|
|
761
762
|
}
|
|
762
763
|
}
|
|
763
764
|
|
|
@@ -792,21 +793,30 @@ function schedulePersistAt(path: string, replace = false): void {
|
|
|
792
793
|
}
|
|
793
794
|
|
|
794
795
|
async function persistNow(path: string, awaitFollowUp = false): Promise<void> {
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
796
|
+
// Include follow-up scheduling in the gate: releasing after only the disk write
|
|
797
|
+
// lets shutdown observe an empty timer before the background pass re-arms it.
|
|
798
|
+
const previous = persistGate;
|
|
799
|
+
let release!: () => void;
|
|
800
|
+
persistGate = new Promise<void>(resolve => { release = resolve; });
|
|
801
|
+
await previous;
|
|
802
|
+
try {
|
|
803
|
+
if (persistTimer) {
|
|
804
|
+
clearTimeout(persistTimer);
|
|
805
|
+
persistTimer = null;
|
|
806
|
+
}
|
|
805
807
|
pendingPersistPath = null;
|
|
806
|
-
|
|
808
|
+
const attemptLimit = awaitFollowUp ? MAX_SNAPSHOT_REWRITE_ATTEMPTS : 1;
|
|
809
|
+
let outcome = await writeBoundedSnapshot(path, attemptLimit);
|
|
810
|
+
if (outcome === "unstable" && awaitFollowUp) {
|
|
811
|
+
if (persistTimer) clearTimeout(persistTimer);
|
|
812
|
+
persistTimer = null;
|
|
813
|
+
pendingPersistPath = null;
|
|
814
|
+
outcome = await writeBoundedSnapshot(path, attemptLimit);
|
|
815
|
+
}
|
|
816
|
+
if (outcome === "unstable" && !awaitFollowUp) schedulePersistAt(path, true);
|
|
817
|
+
} finally {
|
|
818
|
+
release();
|
|
807
819
|
}
|
|
808
|
-
if (outcome === "stable") drainPendingSpillUnlinks();
|
|
809
|
-
else if (outcome === "unstable" && !awaitFollowUp) schedulePersistAt(path, true);
|
|
810
820
|
}
|
|
811
821
|
|
|
812
822
|
function schedulePersist(): void {
|
|
@@ -816,15 +826,8 @@ function schedulePersist(): void {
|
|
|
816
826
|
}
|
|
817
827
|
|
|
818
828
|
async function flushResponseSnapshot(): Promise<void> {
|
|
819
|
-
|
|
820
|
-
await persistNow(pendingPersistPath ?? snapshotPath(), true);
|
|
821
|
-
return;
|
|
822
|
-
}
|
|
823
|
-
// No pending timer: still await any in-flight write so shutdown does not race (#612).
|
|
829
|
+
// The gate includes the background pass's timer decision, not just its write.
|
|
824
830
|
await persistGate;
|
|
825
|
-
// A bounded background pass may have scheduled its same-path follow-up while
|
|
826
|
-
// this flush was waiting on the single-flight gate. Shutdown owns one awaited
|
|
827
|
-
// bounded follow-up rather than returning behind that unref'd timer.
|
|
828
831
|
if (persistTimer) await persistNow(pendingPersistPath ?? snapshotPath(), true);
|
|
829
832
|
}
|
|
830
833
|
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The private build file of a worker rebuild (#6990).
|
|
3
|
+
*
|
|
4
|
+
* The worker writes the whole index into `<index>.rebuild-<pid>-<n>` next to
|
|
5
|
+
* the published file; the serving thread swaps it in only once it is complete,
|
|
6
|
+
* so no reader ever sees a partial index.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { Database } from "bun:sqlite";
|
|
10
|
+
import { readdirSync, rmSync } from "node:fs";
|
|
11
|
+
import { basename, dirname, join } from "node:path";
|
|
12
|
+
import type { UsageLogRevision } from "../../usage/log";
|
|
13
|
+
import { ingestSourceTail, recordSourceMeta, resetAndCreateSchema, setMeta } from "./ingest";
|
|
14
|
+
import { HISTORY_META_KEYS } from "./schema";
|
|
15
|
+
|
|
16
|
+
const BUILD_SIDE_FILES = ["", "-journal", "-wal", "-shm"] as const;
|
|
17
|
+
|
|
18
|
+
export function buildFilePath(indexPath: string, pid: number, sequence: number): string {
|
|
19
|
+
return `${indexPath}.rebuild-${pid}-${sequence}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function removeBuildFiles(buildPath: string): void {
|
|
23
|
+
for (const suffix of BUILD_SIDE_FILES) {
|
|
24
|
+
try { rmSync(`${buildPath}${suffix}`, { force: true }); } catch { /* best effort; swept on a later build */ }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function processIsAlive(pid: number): boolean {
|
|
29
|
+
try {
|
|
30
|
+
process.kill(pid, 0);
|
|
31
|
+
return true;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
// EPERM: the process exists under another user. Anything but ESRCH is treated as alive.
|
|
34
|
+
return (error as { code?: unknown } | null)?.code !== "ESRCH";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Remove build files a crashed process left beside the index. A build of this
|
|
40
|
+
* process, or of another live process, is left alone; this process removes
|
|
41
|
+
* its own builds once their worker has exited.
|
|
42
|
+
*/
|
|
43
|
+
export function removeAbandonedBuilds(indexPath: string): number {
|
|
44
|
+
const prefix = `${basename(indexPath)}.rebuild-`;
|
|
45
|
+
let names: string[];
|
|
46
|
+
try {
|
|
47
|
+
names = readdirSync(dirname(indexPath));
|
|
48
|
+
} catch {
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
const abandoned = new Set<string>();
|
|
52
|
+
for (const name of names) {
|
|
53
|
+
if (!name.startsWith(prefix)) continue;
|
|
54
|
+
const match = /^(\d+)-(\d+)/.exec(name.slice(prefix.length));
|
|
55
|
+
if (!match) continue;
|
|
56
|
+
const pid = Number(match[1]);
|
|
57
|
+
if (pid === process.pid || processIsAlive(pid)) continue;
|
|
58
|
+
abandoned.add(`${prefix}${match[1]}-${match[2]}`);
|
|
59
|
+
}
|
|
60
|
+
for (const name of abandoned) removeBuildFiles(join(dirname(indexPath), name));
|
|
61
|
+
return abandoned.size;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Build a complete index of the ledger snapshot `revision` describes into
|
|
66
|
+
* `buildPath`, leave it in WAL mode and close it. Returns the rows ingested.
|
|
67
|
+
* A private build needs no crash durability: an interrupted one is discarded.
|
|
68
|
+
*/
|
|
69
|
+
export function buildIndexFile(buildPath: string, reason: string, revision: UsageLogRevision): number {
|
|
70
|
+
removeBuildFiles(buildPath);
|
|
71
|
+
const build = new Database(buildPath, { create: true, readwrite: true });
|
|
72
|
+
try {
|
|
73
|
+
build.exec("PRAGMA journal_mode = MEMORY");
|
|
74
|
+
build.exec("PRAGMA synchronous = OFF");
|
|
75
|
+
resetAndCreateSchema(build);
|
|
76
|
+
setMeta(build, HISTORY_META_KEYS.lastError, reason);
|
|
77
|
+
recordSourceMeta(build, revision);
|
|
78
|
+
const inserted = ingestSourceTail(build, revision.path, 0, {
|
|
79
|
+
expected: revision,
|
|
80
|
+
endOffset: Number(revision.size),
|
|
81
|
+
});
|
|
82
|
+
// The serving thread opens the published file in WAL mode; switching here
|
|
83
|
+
// keeps that first open from rewriting the database header.
|
|
84
|
+
build.exec("PRAGMA journal_mode = WAL");
|
|
85
|
+
build.close();
|
|
86
|
+
return inserted;
|
|
87
|
+
} catch (error) {
|
|
88
|
+
try { build.close(); } catch { /* already unusable */ }
|
|
89
|
+
removeBuildFiles(buildPath);
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
}
|