create-walle 0.10.2 → 0.10.3
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 +3 -1
- package/lib/release-schema.json +2 -2
- package/lib/runtime-closure-policy.json +8 -7
- package/package.json +1 -1
- package/template/coding-task-manager/api-prompts.js +45 -7
- package/template/coding-task-manager/bin/claude-hook.js +55 -1
- package/template/coding-task-manager/bin/ctm-relay-client.js +35 -12
- package/template/coding-task-manager/bin/land.js +2069 -0
- package/template/coding-task-manager/bin/memory-census.js +4 -2
- package/template/coding-task-manager/bin/memory-sync-verify.js +151 -0
- package/template/coding-task-manager/bin/probe-refusal-scope.js +530 -0
- package/template/coding-task-manager/db.js +156 -32
- package/template/coding-task-manager/lib/acp/acp-client.js +383 -0
- package/template/coding-task-manager/lib/acp/dsh-context-truth.js +176 -0
- package/template/coding-task-manager/lib/acp/dsh-launch-model.js +302 -0
- package/template/coding-task-manager/lib/acp/dsh-mcp-servers.js +194 -0
- package/template/coding-task-manager/lib/acp/dsh-prompt-lane.js +616 -0
- package/template/coding-task-manager/lib/acp/dsh-route-patch.js +308 -0
- package/template/coding-task-manager/lib/acp/dsh-session-runtime.js +522 -0
- package/template/coding-task-manager/lib/acp/dsh-transcript.js +395 -0
- package/template/coding-task-manager/lib/acp/dsh-usage-log.js +162 -0
- package/template/coding-task-manager/lib/acp/ndjson-stdio-transport.js +225 -0
- package/template/coding-task-manager/lib/adopted-host-redial.js +47 -11
- package/template/coding-task-manager/lib/adopted-launch-environment.js +123 -0
- package/template/coding-task-manager/lib/agent-auto-update-runtime.js +0 -3
- package/template/coding-task-manager/lib/agent-auto-update.js +26 -10
- package/template/coding-task-manager/lib/agent-bundle/build.js +657 -0
- package/template/coding-task-manager/lib/agent-bundle/codex-install.js +558 -0
- package/template/coding-task-manager/lib/agent-bundle/drift.js +120 -0
- package/template/coding-task-manager/lib/agent-bundle/gc.js +522 -0
- package/template/coding-task-manager/lib/agent-bundle/inventory.js +346 -0
- package/template/coding-task-manager/lib/agent-bundle/push.js +717 -0
- package/template/coding-task-manager/lib/agent-bundle/skill-transfer.js +724 -0
- package/template/coding-task-manager/lib/agent-bundle/spawn.js +119 -0
- package/template/coding-task-manager/lib/agent-bundle/store.js +568 -0
- package/template/coding-task-manager/lib/agent-capabilities.js +142 -12
- package/template/coding-task-manager/lib/agent-cli-cache.js +30 -5
- package/template/coding-task-manager/lib/agent-definitions.js +19 -0
- package/template/coding-task-manager/lib/agent-hooks-codex-toml.js +28 -16
- package/template/coding-task-manager/lib/agent-hooks-codex-workspace.js +9 -1
- package/template/coding-task-manager/lib/agent-hooks-installer.js +23 -8
- package/template/coding-task-manager/lib/agent-hooks-prune.js +37 -11
- package/template/coding-task-manager/lib/agent-hooks-shim.js +105 -0
- package/template/coding-task-manager/lib/agent-presets.js +84 -1
- package/template/coding-task-manager/lib/agent-upgrade-jobs.js +12 -1
- package/template/coding-task-manager/lib/agent-version-service.js +74 -11
- package/template/coding-task-manager/lib/all-sessions-query.js +6 -2
- package/template/coding-task-manager/lib/api/agent-bundles.js +436 -0
- package/template/coding-task-manager/lib/api/backup-retention.js +83 -0
- package/template/coding-task-manager/lib/api/conversation-sync-routes.js +124 -0
- package/template/coding-task-manager/lib/api/diagnostics.js +549 -69
- package/template/coding-task-manager/lib/api/fleet.js +118 -0
- package/template/coding-task-manager/lib/api/hub-bridge.js +243 -0
- package/template/coding-task-manager/lib/api/ingress.js +9 -1
- package/template/coding-task-manager/lib/api/landing.js +403 -0
- package/template/coding-task-manager/lib/api/machines.js +691 -2
- package/template/coding-task-manager/lib/api/memory-sync-routes.js +335 -0
- package/template/coding-task-manager/lib/api/misc-ops.js +8 -3
- package/template/coding-task-manager/lib/api/remote-sessions.js +1326 -0
- package/template/coding-task-manager/lib/api/session-attach.js +623 -0
- package/template/coding-task-manager/lib/api/session-messages.js +1384 -0
- package/template/coding-task-manager/lib/api/sessions.js +77 -51
- package/template/coding-task-manager/lib/api/setup-network.js +544 -16
- package/template/coding-task-manager/lib/api/setup-wizard-handlers.js +884 -0
- package/template/coding-task-manager/lib/api/setup.js +829 -10
- package/template/coding-task-manager/lib/api/walle-bridge.js +9 -1
- package/template/coding-task-manager/lib/attachment-reconciler-wiring.js +5 -2
- package/template/coding-task-manager/lib/auth-rate-limit.js +23 -0
- package/template/coding-task-manager/lib/auth-rules.js +292 -21
- package/template/coding-task-manager/lib/background-stop.js +369 -0
- package/template/coding-task-manager/lib/best-of-attempts.js +4 -1
- package/template/coding-task-manager/lib/best-of-launch-plan.js +52 -0
- package/template/coding-task-manager/lib/box-keep-awake.js +89 -0
- package/template/coding-task-manager/lib/broadcast-reason-stats.js +152 -0
- package/template/coding-task-manager/lib/broadcast-serialize.js +5 -0
- package/template/coding-task-manager/lib/build-info.js +4 -2
- package/template/coding-task-manager/lib/claude-model-truth.js +13 -2
- package/template/coding-task-manager/lib/claude-transcript-terminal-renderer.js +17 -13
- package/template/coding-task-manager/lib/client-diag-handler.js +64 -2
- package/template/coding-task-manager/lib/codex-app-server-client.js +14 -16
- package/template/coding-task-manager/lib/codex-configuration-history.js +55 -0
- package/template/coding-task-manager/lib/codex-harness-qualification.js +43 -20
- package/template/coding-task-manager/lib/codex-rollout-history.js +743 -0
- package/template/coding-task-manager/lib/coding-agent-models.js +27 -12
- package/template/coding-task-manager/lib/coding-cli-skill-installer.js +44 -14
- package/template/coding-task-manager/lib/coding-session-model-adapters.js +43 -2
- package/template/coding-task-manager/lib/coding-session-model-owner.js +1 -1
- package/template/coding-task-manager/lib/coding-session-model-public.js +7 -1
- package/template/coding-task-manager/lib/coding-session-model-runtime.js +23 -4
- package/template/coding-task-manager/lib/coding-session-model-scan.js +31 -0
- package/template/coding-task-manager/lib/coding-session-model-state.js +7 -0
- package/template/coding-task-manager/lib/conversation-freshness-diagnostics.js +280 -0
- package/template/coding-task-manager/lib/conversation-item-clock.js +261 -0
- package/template/coding-task-manager/lib/conversation-source-registry.js +5 -0
- package/template/coding-task-manager/lib/conversation-store-v2.js +44 -0
- package/template/coding-task-manager/lib/conversation-sync.js +355 -0
- package/template/coding-task-manager/lib/create/resolve-launch-params.js +96 -12
- package/template/coding-task-manager/lib/create/worker-role-profile.js +4 -4
- package/template/coding-task-manager/lib/create-intent-lease.js +51 -0
- package/template/coding-task-manager/lib/ctm-session-context-api.js +97 -6
- package/template/coding-task-manager/lib/db-domain-tables.js +1 -0
- package/template/coding-task-manager/lib/db-domains.js +1 -0
- package/template/coding-task-manager/lib/db-owner-dispatch-probe.js +32 -0
- package/template/coding-task-manager/lib/db-owner-request-counts.js +178 -0
- package/template/coding-task-manager/lib/db-owner-worker-client.js +68 -14
- package/template/coding-task-manager/lib/db-schema-source-files.js +5 -0
- package/template/coding-task-manager/lib/deferred-restore-attempt.js +6 -2
- package/template/coding-task-manager/lib/feature-manifest.js +4 -0
- package/template/coding-task-manager/lib/fleet-conversation-route.js +97 -0
- package/template/coding-task-manager/lib/fleet-fanout.js +78 -0
- package/template/coding-task-manager/lib/fleet-hub.js +762 -0
- package/template/coding-task-manager/lib/fleet-origin-follower.js +252 -0
- package/template/coding-task-manager/lib/fleet-resolver-effects.js +147 -0
- package/template/coding-task-manager/lib/fleet-resolver-tick.js +148 -0
- package/template/coding-task-manager/lib/fleet-resolver.js +454 -0
- package/template/coding-task-manager/lib/fleet-session-list-routes.js +114 -0
- package/template/coding-task-manager/lib/fleet-session-lists.js +672 -0
- package/template/coding-task-manager/lib/fleet-update.js +798 -0
- package/template/coding-task-manager/lib/fs-watcher-root-watch.js +141 -0
- package/template/coding-task-manager/lib/fs-watcher.js +58 -42
- package/template/coding-task-manager/lib/harness-history-transition.js +50 -9
- package/template/coding-task-manager/lib/headless-term-service.js +84 -8
- package/template/coding-task-manager/lib/hermetic-agent-launch-guard.js +10 -0
- package/template/coding-task-manager/lib/history-transition-read-op.js +175 -8
- package/template/coding-task-manager/lib/host-cpu-categories.js +310 -0
- package/template/coding-task-manager/lib/host-fseventsd-sampler.js +399 -0
- package/template/coding-task-manager/lib/host-handoff.js +16 -19
- package/template/coding-task-manager/lib/host-stats.js +150 -3
- package/template/coding-task-manager/lib/hosted-sync-worker.js +43 -320
- package/template/coding-task-manager/lib/hub-bridge-access.js +798 -0
- package/template/coding-task-manager/lib/hub-bridge-box.js +409 -0
- package/template/coding-task-manager/lib/hub-bridge-mcp.js +380 -0
- package/template/coding-task-manager/lib/hub-bridge-mesh.js +313 -0
- package/template/coding-task-manager/lib/hub-bridge-ops.js +721 -0
- package/template/coding-task-manager/lib/hub-bridge.js +398 -0
- package/template/coding-task-manager/lib/idle-notify.js +491 -0
- package/template/coding-task-manager/lib/instance-id-ownership-manifest.js +8 -0
- package/template/coding-task-manager/lib/instance-manifest.js +5 -1
- package/template/coding-task-manager/lib/instance-sync-status.js +18 -8
- package/template/coding-task-manager/lib/landing/agent-rule.txt +1 -0
- package/template/coding-task-manager/lib/landing/batch-runner.js +366 -0
- package/template/coding-task-manager/lib/landing/config.js +536 -0
- package/template/coding-task-manager/lib/landing/ctm-view.js +256 -0
- package/template/coding-task-manager/lib/landing/gate.js +360 -0
- package/template/coding-task-manager/lib/landing/git.js +344 -0
- package/template/coding-task-manager/lib/landing/lease.js +247 -0
- package/template/coding-task-manager/lib/landing/merge-delta.js +380 -0
- package/template/coding-task-manager/lib/landing/proof.js +223 -0
- package/template/coding-task-manager/lib/landing/queue.js +998 -0
- package/template/coding-task-manager/lib/landing/radar.js +489 -0
- package/template/coding-task-manager/lib/landing/resolve-cli.js +424 -0
- package/template/coding-task-manager/lib/landing/state.js +263 -0
- package/template/coding-task-manager/lib/landing/stop.js +49 -0
- package/template/coding-task-manager/lib/landing/sync-cli.js +475 -0
- package/template/coding-task-manager/lib/landing/sync.js +456 -0
- package/template/coding-task-manager/lib/landing/train.js +885 -0
- package/template/coding-task-manager/lib/landing/window.js +57 -0
- package/template/coding-task-manager/lib/launch-environment.js +121 -0
- package/template/coding-task-manager/lib/launch-model-override.js +36 -10
- package/template/coding-task-manager/lib/launch-plan-pool.js +2 -1
- package/template/coding-task-manager/lib/launch-plan-warm-cache.js +6 -0
- package/template/coding-task-manager/lib/lead-model-observer.js +57 -1
- package/template/coding-task-manager/lib/lead-model-options.js +160 -3
- package/template/coding-task-manager/lib/lead-model-restore-reconciliation.js +106 -24
- package/template/coding-task-manager/lib/lead-model-switch-runtime.js +352 -68
- package/template/coding-task-manager/lib/lead-model-switch.js +114 -10
- package/template/coding-task-manager/lib/lead-model-transition-runtime.js +14 -2
- package/template/coding-task-manager/lib/lead-model-transition-store.js +24 -6
- package/template/coding-task-manager/lib/lead-route-preflight.js +179 -0
- package/template/coding-task-manager/lib/lead-switch-history-mode.js +110 -0
- package/template/coding-task-manager/lib/lead-wire-agent.js +7 -0
- package/template/coding-task-manager/lib/lifecycle-wake-experiment.js +9 -2
- package/template/coding-task-manager/lib/live-defer-announce.js +45 -0
- package/template/coding-task-manager/lib/machine-registry.js +750 -5
- package/template/coding-task-manager/lib/macos-capabilities.js +32 -15
- package/template/coding-task-manager/lib/main-thread-lint-exemptions.json +433 -53
- package/template/coding-task-manager/lib/mainloop-observability.js +14 -9
- package/template/coding-task-manager/lib/media-draft-owner.js +16 -3
- package/template/coding-task-manager/lib/memory-join.js +337 -0
- package/template/coding-task-manager/lib/memory-sync-verify.js +393 -0
- package/template/coding-task-manager/lib/memory-sync.js +565 -0
- package/template/coding-task-manager/lib/migrations/v57-delegate-pref-mirror-opencode.js +68 -0
- package/template/coding-task-manager/lib/migrations/v58-subagent-launch-native-subagents.js +42 -0
- package/template/coding-task-manager/lib/migrations/v59-coding-session-model-state-dsh.js +73 -0
- package/template/coding-task-manager/lib/migrations/v60-delegate-pref-mirror-dsh.js +78 -0
- package/template/coding-task-manager/lib/migrations/v61-conversation-item-clock.js +71 -0
- package/template/coding-task-manager/lib/model-availability.js +727 -0
- package/template/coding-task-manager/lib/model-execution-recipe-metadata.js +4 -6
- package/template/coding-task-manager/lib/model-host-receipt.js +6 -3
- package/template/coding-task-manager/lib/model-id-rule.js +19 -0
- package/template/coding-task-manager/lib/model-proxy/anthropic-face.js +4 -0
- package/template/coding-task-manager/lib/model-proxy/auto-mode-review.js +110 -23
- package/template/coding-task-manager/lib/model-proxy/chat-response-translators.js +3 -0
- package/template/coding-task-manager/lib/model-proxy/generation-probe.js +60 -17
- package/template/coding-task-manager/lib/model-proxy/historical-tool-declarations.js +37 -0
- package/template/coding-task-manager/lib/model-proxy/lead-request-validation.js +1 -0
- package/template/coding-task-manager/lib/model-proxy/lead-token-admin.js +130 -0
- package/template/coding-task-manager/lib/model-proxy/refusal-scope.js +151 -0
- package/template/coding-task-manager/lib/model-proxy/request-budget-store.js +11 -2
- package/template/coding-task-manager/lib/model-proxy/tokens.js +69 -5
- package/template/coding-task-manager/lib/model-proxy/upstream-outcome.js +9 -0
- package/template/coding-task-manager/lib/native-agent-model-args.js +25 -22
- package/template/coding-task-manager/lib/native-history-control.js +6 -4
- package/template/coding-task-manager/lib/native-lead-settings-client.js +44 -4
- package/template/coding-task-manager/lib/oauth-proxy-supervisor.js +173 -36
- package/template/coding-task-manager/lib/online-backup-worker-client.js +2 -0
- package/template/coding-task-manager/lib/opencode-cli.js +480 -0
- package/template/coding-task-manager/lib/opencode-launch-model.js +471 -0
- package/template/coding-task-manager/lib/opencode-v1-plugin/model-carrier.mjs +35 -0
- package/template/coding-task-manager/lib/opencode-v2-plugin/server.js +118 -0
- package/template/coding-task-manager/lib/owner-action-manifest-data.json +1 -1
- package/template/coding-task-manager/lib/park-composer-draft.js +54 -0
- package/template/coding-task-manager/lib/park-fresh-relaunch.js +41 -10
- package/template/coding-task-manager/lib/perf-phase-trace.js +72 -0
- package/template/coding-task-manager/lib/perf-summary.js +7 -0
- package/template/coding-task-manager/lib/perf-tracker.js +63 -2
- package/template/coding-task-manager/lib/project-config.js +7 -0
- package/template/coding-task-manager/lib/prompt-purge-v2.js +52 -1
- package/template/coding-task-manager/lib/provider-login-broker.js +72 -15
- package/template/coding-task-manager/lib/provider-login-tab.js +10 -2
- package/template/coding-task-manager/lib/read-pool-client.js +89 -2
- package/template/coding-task-manager/lib/read-pool-worker-handle.js +29 -4
- package/template/coding-task-manager/lib/recent-catalog-query.js +15 -0
- package/template/coding-task-manager/lib/recent-session-catalog-response.js +67 -10
- package/template/coding-task-manager/lib/recovery-evidence.js +26 -11
- package/template/coding-task-manager/lib/relay-client.js +57 -3
- package/template/coding-task-manager/lib/relink-audit.js +34 -5
- package/template/coding-task-manager/lib/remote-machine-catalog.js +321 -26
- package/template/coding-task-manager/lib/remote-machine-create.js +576 -36
- package/template/coding-task-manager/lib/remote-machine-link.js +546 -59
- package/template/coding-task-manager/lib/remote-machine-proxy.js +143 -9
- package/template/coding-task-manager/lib/remote-session-forward.js +65 -7
- package/template/coding-task-manager/lib/remote-terminal-target.js +9 -2
- package/template/coding-task-manager/lib/restart-guard.js +18 -6
- package/template/coding-task-manager/lib/restore-seed-modes.js +87 -0
- package/template/coding-task-manager/lib/restored-scrollback-hydration-runtime.js +22 -2
- package/template/coding-task-manager/lib/resume-admission.js +17 -3
- package/template/coding-task-manager/lib/review-repo-registry.js +58 -19
- package/template/coding-task-manager/lib/root-delivery-runtime.js +2 -2
- package/template/coding-task-manager/lib/root-prompt-flow.js +1 -1
- package/template/coding-task-manager/lib/runtime-contract.js +3 -1
- package/template/coding-task-manager/lib/schema-indexes.js +1 -0
- package/template/coding-task-manager/lib/session-context-locator.js +742 -0
- package/template/coding-task-manager/lib/session-create/attachment.js +2 -2
- package/template/coding-task-manager/lib/session-create/create-phases.js +118 -0
- package/template/coding-task-manager/lib/session-create/delegate-worker.js +86 -16
- package/template/coding-task-manager/lib/session-create/dsh-session.js +930 -0
- package/template/coding-task-manager/lib/session-create/lead-route-launch.js +186 -13
- package/template/coding-task-manager/lib/session-create/native-lead-lifetime.js +55 -3
- package/template/coding-task-manager/lib/session-create/opencode-lead-provider.js +50 -0
- package/template/coding-task-manager/lib/session-create/prepared.js +162 -38
- package/template/coding-task-manager/lib/session-create/provider-process.js +160 -28
- package/template/coding-task-manager/lib/session-create/response.js +7 -7
- package/template/coding-task-manager/lib/session-create/structured-session.js +27 -0
- package/template/coding-task-manager/lib/session-create/subagent-pick-table.js +3 -1
- package/template/coding-task-manager/lib/session-create/subagent-pick.js +458 -9
- package/template/coding-task-manager/lib/session-create/transcript.js +1 -1
- package/template/coding-task-manager/lib/session-create/worker-budget-setup.js +21 -2
- package/template/coding-task-manager/lib/session-create/worker-continuation.js +7 -1
- package/template/coding-task-manager/lib/session-create/worker-launch-sandbox.js +39 -10
- package/template/coding-task-manager/lib/session-create/worker-observability.js +2 -2
- package/template/coding-task-manager/lib/session-empty.js +13 -10
- package/template/coding-task-manager/lib/session-host-manager.js +60 -0
- package/template/coding-task-manager/lib/session-jobs.js +3 -1
- package/template/coding-task-manager/lib/session-lifecycle.js +10 -4
- package/template/coding-task-manager/lib/session-model-action-preconditions.js +6 -2
- package/template/coding-task-manager/lib/session-model-intent-contract.js +11 -8
- package/template/coding-task-manager/lib/session-park.js +738 -0
- package/template/coding-task-manager/lib/session-path-grant.js +13 -4
- package/template/coding-task-manager/lib/session-status-ledger.js +106 -4
- package/template/coding-task-manager/lib/session-transport.js +17 -0
- package/template/coding-task-manager/lib/session-workspace-projection.js +54 -5
- package/template/coding-task-manager/lib/session-workspace-tracking-runtime.js +213 -1
- package/template/coding-task-manager/lib/skill-autocomplete-query.js +120 -3
- package/template/coding-task-manager/lib/skill-autocomplete.js +15 -1
- package/template/coding-task-manager/lib/sqlite-file-set.js +39 -0
- package/template/coding-task-manager/lib/standup-search-adapter.js +16 -2
- package/template/coding-task-manager/lib/state-sync/client-ledger.js +12 -0
- package/template/coding-task-manager/lib/state-sync/frame-emitter.js +319 -100
- package/template/coding-task-manager/lib/storage/coding-session-model-store.js +4 -1
- package/template/coding-task-manager/lib/storage/delegate-pref-mirror-store.js +32 -9
- package/template/coding-task-manager/lib/structured-session-boot-sweep.js +235 -0
- package/template/coding-task-manager/lib/submission-ack.js +90 -2
- package/template/coding-task-manager/lib/systemd-scope.js +115 -0
- package/template/coding-task-manager/lib/telemetry-receiver.js +39 -0
- package/template/coding-task-manager/lib/terminal-attach-geometry.js +985 -0
- package/template/coding-task-manager/lib/terminal-bootstrap.js +30 -0
- package/template/coding-task-manager/lib/terminal-draft-operation.js +357 -0
- package/template/coding-task-manager/lib/terminal-input-admission.js +17 -1
- package/template/coding-task-manager/lib/terminal-input-prepared.js +563 -0
- package/template/coding-task-manager/lib/transcript-cache-temps.js +171 -0
- package/template/coding-task-manager/lib/transcript-frame-cache.js +8 -3
- package/template/coding-task-manager/lib/transcript-source.js +36 -4
- package/template/coding-task-manager/lib/transcript-store.js +9 -0
- package/template/coding-task-manager/lib/typing-interaction-trace.js +106 -3
- package/template/coding-task-manager/lib/usage-ledger/backfill.js +40 -5
- package/template/coding-task-manager/lib/usage-ledger/client.js +4 -1
- package/template/coding-task-manager/lib/usage-ledger/dsh-parse.js +152 -0
- package/template/coding-task-manager/lib/usage-ledger/dsh-read.js +73 -0
- package/template/coding-task-manager/lib/usage-ledger/ingest.js +34 -6
- package/template/coding-task-manager/lib/usage-ledger/live.js +35 -8
- package/template/coding-task-manager/lib/usage-ledger/read.js +29 -20
- package/template/coding-task-manager/lib/usage-ledger/schema.js +61 -1
- package/template/coding-task-manager/lib/usage-ledger/task-coordinator.js +4 -2
- package/template/coding-task-manager/lib/wake-skip-reasons.js +1 -0
- package/template/coding-task-manager/lib/walle/turn.js +1 -1
- package/template/coding-task-manager/lib/walle-history-serve.js +838 -0
- package/template/coding-task-manager/lib/walle-kill-authority.js +2 -2
- package/template/coding-task-manager/lib/walle-log-rotation.js +164 -1
- package/template/coding-task-manager/lib/walle-mcp-auto-config.js +56 -2
- package/template/coding-task-manager/lib/walle-row-history.js +495 -0
- package/template/coding-task-manager/lib/walle-supervisor.js +33 -14
- package/template/coding-task-manager/lib/watch-worker-client.js +203 -0
- package/template/coding-task-manager/lib/worker-terminal-output.js +5 -2
- package/template/coding-task-manager/lib/ws/hub-bridge.js +35 -0
- package/template/coding-task-manager/lib/ws/lifecycle.js +6 -11
- package/template/coding-task-manager/lib/ws/misc.js +1 -1
- package/template/coding-task-manager/lib/ws/state-sync.js +106 -4
- package/template/coding-task-manager/lib/ws/terminal-attach.js +91 -0
- package/template/coding-task-manager/oauth-proxy.js +112 -115
- package/template/coding-task-manager/package-lock.json +10 -94
- package/template/coding-task-manager/package.json +4 -3
- package/template/coding-task-manager/protocol/message-table.json +10 -0
- package/template/coding-task-manager/protocol/messages.js +10 -0
- package/template/coding-task-manager/protocol/ws-schema.json +20 -0
- package/template/coding-task-manager/protocol/ws-schema.md +2 -0
- package/template/coding-task-manager/public/css/app.css +170 -0
- package/template/coding-task-manager/public/css/walle-session.css +4 -0
- package/template/coding-task-manager/public/index.html +473 -243
- package/template/coding-task-manager/public/js/agent-command.js +86 -0
- package/template/coding-task-manager/public/js/app/backups-panel.js +111 -5
- package/template/coding-task-manager/public/js/app/coding-agent-upgrade.js +103 -4
- package/template/coding-task-manager/public/js/app/machines-page.js +1328 -8
- package/template/coding-task-manager/public/js/app/models-tab.js +113 -38
- package/template/coding-task-manager/public/js/app/restart-banner.js +53 -0
- package/template/coding-task-manager/public/js/app/worktrees-panel.js +184 -2
- package/template/coding-task-manager/public/js/background-work.js +196 -27
- package/template/coding-task-manager/public/js/coding-session-model-presentation.js +138 -10
- package/template/coding-task-manager/public/js/core/active-session-groups.js +179 -0
- package/template/coding-task-manager/public/js/core/pending-create.js +238 -0
- package/template/coding-task-manager/public/js/core/recent-machine-source.js +228 -0
- package/template/coding-task-manager/public/js/core/session-commands.js +180 -14
- package/template/coding-task-manager/public/js/dashboard-client-function-order.json +8 -0
- package/template/coding-task-manager/public/js/document-review-links.js +9 -1
- package/template/coding-task-manager/public/js/file-resolution-client.js +52 -1
- package/template/coding-task-manager/public/js/history-app-seam.js +22 -2
- package/template/coding-task-manager/public/js/machine-pool-shared.js +558 -3
- package/template/coding-task-manager/public/js/message-renderer.js +4 -3
- package/template/coding-task-manager/public/js/model-picker.js +3 -1
- package/template/coding-task-manager/public/js/native-subagent-review.js +15 -2
- package/template/coding-task-manager/public/js/new-session-agent-grid.js +346 -0
- package/template/coding-task-manager/public/js/pasted-content.js +236 -0
- package/template/coding-task-manager/public/js/pe-private-content-lifetime.js +39 -7
- package/template/coding-task-manager/public/js/private-model-lifetime.js +6 -2
- package/template/coding-task-manager/public/js/prompts.js +11 -10
- package/template/coding-task-manager/public/js/protocol.js +10 -0
- package/template/coding-task-manager/public/js/restart-banner-policy.js +29 -1
- package/template/coding-task-manager/public/js/session-model-picker.js +447 -57
- package/template/coding-task-manager/public/js/session-search-utils.js +18 -2
- package/template/coding-task-manager/public/js/session-usage-view.js +2 -1
- package/template/coding-task-manager/public/js/session-workspace-tracking.js +51 -1
- package/template/coding-task-manager/public/js/state-sync-client.js +10 -1
- package/template/coding-task-manager/public/js/stream-view.js +6 -5
- package/template/coding-task-manager/public/js/terminal/conv-only-session.js +287 -0
- package/template/coding-task-manager/public/js/terminal/runtime-09.js +2 -0
- package/template/coding-task-manager/public/js/terminal/runtime-10.js +5 -5
- package/template/coding-task-manager/public/js/terminal/runtime-12.js +8 -1
- package/template/coding-task-manager/public/js/terminal/runtime-16.js +4 -0
- package/template/coding-task-manager/public/js/terminal/runtime-20.js +1 -1
- package/template/coding-task-manager/public/js/terminal-attachment-draft.js +67 -13
- package/template/coding-task-manager/public/js/terminal-image-orchestration.js +52 -6
- package/template/coding-task-manager/public/js/terminal-wheel.js +23 -3
- package/template/coding-task-manager/public/js/walle/chat-conversation.js +4 -4
- package/template/coding-task-manager/public/js/walle.js +6 -0
- package/template/coding-task-manager/public/js/ws/live-dispatch.js +10 -0
- package/template/coding-task-manager/public/m/app.css +140 -0
- package/template/coding-task-manager/public/m/app.js +507 -68
- package/template/coding-task-manager/public/m/index.html +17 -0
- package/template/coding-task-manager/public/m/machines.js +838 -4
- package/template/coding-task-manager/public/m/private-api.js +31 -1
- package/template/coding-task-manager/public/usage.html +1 -0
- package/template/coding-task-manager/scripts/dev-route-fixture/synthetic-route-upstream.js +104 -0
- package/template/coding-task-manager/scripts/dev-route-fixture.js +339 -0
- package/template/coding-task-manager/scripts/opencode-lead-route-probe.js +195 -0
- package/template/coding-task-manager/scripts/opencode-v2-contract-probe/fake-anthropic.js +168 -0
- package/template/coding-task-manager/scripts/opencode-v2-contract-probe/probe-plugin/server.js +95 -0
- package/template/coding-task-manager/scripts/opencode-v2-contract-probe.js +673 -0
- package/template/coding-task-manager/server.js +1950 -11679
- package/template/coding-task-manager/session-integrity.js +64 -4
- package/template/coding-task-manager/workers/db-owner-worker.js +19 -2
- package/template/coding-task-manager/workers/online-backup-worker.js +1 -0
- package/template/coding-task-manager/workers/read-pool-model-collector.js +51 -3
- package/template/coding-task-manager/workers/read-pool-worker.js +76 -6
- package/template/coding-task-manager/workers/session-host-pool-process.js +6 -6
- package/template/coding-task-manager/workers/session-host-process.js +5 -5
- package/template/coding-task-manager/workers/watch-worker.js +105 -0
- package/template/coding-task-manager/workers/worktree-worker.js +168 -33
- package/template/ctm-relay/lib/protocol.js +14 -1
- package/template/package-lock.json +2 -2
- package/template/package.json +1 -1
- package/template/shared/backup-retention.js +82 -0
- package/template/shared/conversation-admission.js +2 -0
- package/template/shared/conversation-provenance.js +3 -7
- package/template/shared/conversation-storage-v2-contract.js +5 -0
- package/template/shared/linked-worktree.js +51 -0
- package/template/shared/macos-fda-target.js +57 -0
- package/template/shared/orphan-parents.js +55 -0
- package/template/shared/release-schema.json +2 -2
- package/template/shared/storage/contract.js +3 -0
- package/template/wall-e/adapters/imessage.js +12 -0
- package/template/wall-e/agent.js +71 -4
- package/template/wall-e/api-walle.js +21 -1
- package/template/wall-e/bin/train-gemma-e4b-tooluse.js +2 -2
- package/template/wall-e/bin/walle-mcp-stdio.js +5 -5
- package/template/wall-e/brain/brain-join.js +859 -0
- package/template/wall-e/brain/brain-sync-membership.js +20 -0
- package/template/wall-e/brain/brain-sync-store.js +131 -77
- package/template/wall-e/brain/brain-sync-v2-schema.js +203 -0
- package/template/wall-e/brain/brain-sync-v2.js +578 -0
- package/template/wall-e/brain/delegate-model-prefs-store.js +13 -4
- package/template/wall-e/brain/deterministic-id.js +51 -0
- package/template/wall-e/brain/memories.js +2 -2
- package/template/wall-e/brain/migrations.js +40 -6
- package/template/wall-e/brain/model-identity-migration.js +1 -1
- package/template/wall-e/brain/owner-call-whitelist.js +23 -7
- package/template/wall-e/brain/schema.js +45 -85
- package/template/wall-e/brain.js +171 -35
- package/template/wall-e/chat.js +3 -3
- package/template/wall-e/coding/agent-shell-env.js +7 -2
- package/template/wall-e/coding/prompt-bundle.js +66 -21
- package/template/wall-e/config/main-loop-exemptions.json +2 -2
- package/template/wall-e/http/admin-api.js +37 -0
- package/template/wall-e/http/gws-api.js +4 -0
- package/template/wall-e/http/helper-rules-api.js +7 -1
- package/template/wall-e/http/model-admin.js +8 -1
- package/template/wall-e/http/model-delegate-pref-admin.js +3 -3
- package/template/wall-e/http/model-proxy-providers.js +174 -1
- package/template/wall-e/http/model-route-health.js +157 -0
- package/template/wall-e/http/sync-api.js +278 -464
- package/template/wall-e/jobs/job-runner.js +28 -1
- package/template/wall-e/lib/brain-owner-op-priority.js +9 -1
- package/template/wall-e/lib/ctm-data-dir.js +26 -0
- package/template/wall-e/lib/derivation-home.js +147 -0
- package/template/wall-e/lib/helper-rules/evaluate.js +50 -9
- package/template/wall-e/lib/helper-rules/grade.js +51 -8
- package/template/wall-e/lib/helper-rules/lead-call-hook.js +38 -5
- package/template/wall-e/lib/helper-rules/store.js +4 -2
- package/template/wall-e/lib/landing-mcp-tools.js +170 -0
- package/template/wall-e/lib/mcp-client-config.js +133 -14
- package/template/wall-e/lib/mcp-gateway-migrate.js +28 -64
- package/template/wall-e/lib/mcp-integration.js +58 -13
- package/template/wall-e/lib/parent-death.js +7 -1
- package/template/wall-e/lib/scheduler-worker-jobs.js +6 -4
- package/template/wall-e/llm/delegate-lead-prefs.js +16 -1
- package/template/wall-e/llm/delegate-vendor-default.js +12 -5
- package/template/wall-e/llm/model-roles.js +1 -1
- package/template/wall-e/llm/native-delegate-selection.js +56 -8
- package/template/wall-e/llm/worker-delegate-args.js +72 -7
- package/template/wall-e/llm/worker-mcp-routing.js +66 -17
- package/template/wall-e/loops/brain-custom-writes.js +19 -0
- package/template/wall-e/loops/ingest.js +17 -1
- package/template/wall-e/loops/think.js +19 -4
- package/template/wall-e/mcp-contract.js +222 -6
- package/template/wall-e/mcp-protocol-contract.js +40 -5
- package/template/wall-e/mcp-server.js +128 -29
- package/template/wall-e/mcp-worker-schemas.js +5 -5
- package/template/wall-e/memory/ctm-context-client.js +85 -0
- package/template/wall-e/memory/ctm-session-context.js +9 -3
- package/template/wall-e/memory/hub-bridge-client.js +388 -0
- package/template/wall-e/memory/replica-origin.js +56 -0
- package/template/wall-e/memory/session-pool.js +135 -0
- package/template/wall-e/runtime/live-capabilities.js +8 -3
- package/template/wall-e/server.js +4 -2
- package/template/wall-e/shared/release-schema.json +2 -2
- package/template/wall-e/shared/sqlite-file-set.js +39 -0
- package/template/wall-e/shared/storage/contract.js +3 -0
- package/template/wall-e/skills/_templates/delegate-worker/VERSION +1 -1
- package/template/wall-e/skills/_templates/delegate-worker/released-sha256.json +7 -1
- package/template/wall-e/skills/_templates/delegate-worker/templates/claude/SKILL.md +4 -4
- package/template/wall-e/skills/_templates/delegate-worker/templates/codex/SKILL.md +6 -6
- package/template/wall-e/skills/_templates/fleet-sync/VERSION +1 -0
- package/template/wall-e/skills/_templates/fleet-sync/released-sha256.json +16 -0
- package/template/wall-e/skills/_templates/fleet-sync/templates/claude/SKILL.md +64 -0
- package/template/wall-e/skills/_templates/fleet-sync/templates/codex/SKILL.md +64 -0
- package/template/wall-e/tools/chrome-automation.js +6 -0
- package/template/wall-e/training/setup-cuda-train-env.sh +2 -2
- package/template/wall-e/workers/brain-owner-worker.js +18 -4
- package/template/wall-e/workers/mcp-gateway-process.js +5 -5
|
@@ -60,6 +60,7 @@ const { budgetRefusalResponse } = require('./lib/model-proxy/budget-response');
|
|
|
60
60
|
const { applyWorkerFinalization, minimumOutputForRequest } = require('./lib/model-proxy/worker-finalization');
|
|
61
61
|
const routes = require('./lib/model-proxy/routes');
|
|
62
62
|
const tokens = require('./lib/model-proxy/tokens');
|
|
63
|
+
const { handleLeadTokenRegistration: _handleLeadTokenRegistration } = require('./lib/model-proxy/lead-token-admin');
|
|
63
64
|
const leadWorkerPicks = require('./lib/model-proxy/lead-worker-picks');
|
|
64
65
|
const anthropicFace = require('./lib/model-proxy/anthropic-face');
|
|
65
66
|
const responsesFace = require('./lib/model-proxy/responses-face');
|
|
@@ -69,15 +70,23 @@ const nativeEndpoint = require('./lib/native-lead-endpoint');
|
|
|
69
70
|
const nativeForwarder = require('./lib/model-proxy/native-claude-forwarder');
|
|
70
71
|
const { createNativeLeadListener, wrapHttpServerClose } = require('./lib/model-proxy/native-lead-listener');
|
|
71
72
|
const { getDataDir } = require('./lib/data-dir');
|
|
73
|
+
// WP-9 §9b L-1 (docs/deepseek-harness-acp-agent-2026-10-28.html D-19): the per-request usage writer for
|
|
74
|
+
// a dsh lead token. ACP carries no token counts, so the proxy appends one contract row per completed
|
|
75
|
+
// request to <dataDir>/dsh-usage/<ctmSessionId>.jsonl.
|
|
76
|
+
const { appendDshUsageRow } = require('./lib/acp/dsh-usage-log');
|
|
72
77
|
const { validateLeadWorkerTarget, safeRefusalReason } = require('./lib/model-proxy/lead-request-validation');
|
|
73
78
|
const { buildCodexModelsResponse } = require('./lib/harness-model-profile');
|
|
79
|
+
const { normalizeHistoricalAdditionalTools } = require('./lib/model-proxy/historical-tool-declarations');
|
|
74
80
|
const legacyRelay = require('./lib/model-proxy/legacy-relay');
|
|
75
81
|
const streamAccountingMod = require('./lib/model-proxy/stream-accounting');
|
|
76
82
|
const instanceRecord = require('./lib/model-proxy/proxy-instance-record');
|
|
77
83
|
const handoff = require('./lib/model-proxy/handoff');
|
|
78
84
|
const {
|
|
79
|
-
unsupportedSafeguards, logReviewDiagnostic,
|
|
85
|
+
unsupportedSafeguards, logReviewDiagnostic, requestClassFromHeaders, serverReviewAsked,
|
|
80
86
|
} = require('./lib/model-proxy/auto-mode-review');
|
|
87
|
+
const {
|
|
88
|
+
refusalEntry, clientVersion, scopeVerification, warnIfUnverified,
|
|
89
|
+
} = require('./lib/model-proxy/refusal-scope');
|
|
81
90
|
|
|
82
91
|
const PORT = parseInt(process.env.OAUTH_PROXY_PORT || '3459', 10);
|
|
83
92
|
const HOST = '127.0.0.1';
|
|
@@ -451,11 +460,21 @@ async function _handleAdmin(req, res, pathName, ctx) {
|
|
|
451
460
|
res.end(JSON.stringify({ error: 'model_required' }));
|
|
452
461
|
return;
|
|
453
462
|
}
|
|
463
|
+
// WP-1b (§12a rule 1): an optional `face` names the harness whose wire the probe must dial. The
|
|
464
|
+
// set is closed (`anthropic`, `responses`, or absent = the legacy preference order); anything
|
|
465
|
+
// else is a caller bug, not a probe, so it is answered 400 rather than silently probed on a
|
|
466
|
+
// wire the caller did not ask for.
|
|
467
|
+
const face = body.face;
|
|
468
|
+
if (face !== undefined && face !== null && face !== 'anthropic' && face !== 'responses') {
|
|
469
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
470
|
+
res.end(JSON.stringify({ error: 'invalid_face' }));
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
454
473
|
const requestedTimeout = Number(body.timeoutMs);
|
|
455
474
|
const timeoutMs = Number.isFinite(requestedTimeout) && requestedTimeout > 0
|
|
456
475
|
? Math.min(requestedTimeout, generationProbe.MAX_TIMEOUT_MS)
|
|
457
476
|
: generationProbe.DEFAULT_TIMEOUT_MS;
|
|
458
|
-
const result = await generationProbe.probeGeneration(route, { model: body.model, timeoutMs });
|
|
477
|
+
const result = await generationProbe.probeGeneration(route, { model: body.model, timeoutMs, face: face == null ? undefined : face });
|
|
459
478
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
460
479
|
res.end(JSON.stringify(result));
|
|
461
480
|
return;
|
|
@@ -489,6 +508,9 @@ async function _handleAdmin(req, res, pathName, ctx) {
|
|
|
489
508
|
nativeTransport: body.nativeTransport,
|
|
490
509
|
nativeCertFingerprint: body.nativeCertFingerprint,
|
|
491
510
|
nativeSettingsRef: body.nativeSettingsRef,
|
|
511
|
+
// WP-9 §9b L-2: the OPTIONAL per-request usage mark. It is not secret and not an identity
|
|
512
|
+
// credential of its own — it only tells this proxy to append usage rows for the token's session.
|
|
513
|
+
usageLog: body.usageLog,
|
|
492
514
|
};
|
|
493
515
|
return _handleLeadTokenRegistration(res, registration, ctx);
|
|
494
516
|
}
|
|
@@ -559,111 +581,6 @@ async function _handleAdmin(req, res, pathName, ctx) {
|
|
|
559
581
|
res.end(JSON.stringify({ error: 'not_found' }));
|
|
560
582
|
}
|
|
561
583
|
|
|
562
|
-
// ── WP-1 §6.4/§6.5: the TLS-ready acknowledgment of an mtls-v1 registration ─────────────────────
|
|
563
|
-
//
|
|
564
|
-
// A legacy (or routed-primary) registration is unchanged: it is synchronous, creates no listener and
|
|
565
|
-
// never loads the CA. An `mtls-v1` registration is the one thing that starts this transport, and it is
|
|
566
|
-
// acknowledged ONLY once BOTH of these are true:
|
|
567
|
-
//
|
|
568
|
-
// 1. the strict HTTPS listener is bound and ready, and
|
|
569
|
-
// 2. the pending registration has committed against the live registry.
|
|
570
|
-
//
|
|
571
|
-
// The order matters, and so does the ticket. Between "the registration is well formed" and "the
|
|
572
|
-
// listener is ready" the caller is awaiting, which is exactly when a `DELETE /_admin/tokens` can land:
|
|
573
|
-
// a plain revalidation would still see the token as absent (it was never live) and commit a grant the
|
|
574
|
-
// caller already gave up on. The registry-owned ticket fences that operation, so commit refuses with a
|
|
575
|
-
// bounded code and no token is created. A failed bind cancels the ticket and leaves no grant either.
|
|
576
|
-
//
|
|
577
|
-
// Review item 3 adds the OTHER half of that window: the caller can also simply GO AWAY. The supervisor's
|
|
578
|
-
// admin fetch has a 2s budget, and the child's TLS bind can outlive it — so an interrupted registration
|
|
579
|
-
// must not leave a live owner behind that the parent never learned about. The response is therefore
|
|
580
|
-
// watched from BEFORE the await (a `res.close` listener installed up front, not after the fact), the
|
|
581
|
-
// ticket is cancelled the moment the response can no longer be written, and the commit is guarded by a
|
|
582
|
-
// re-check on both sides of the await. Nothing is ever written to a closed response.
|
|
583
|
-
function _responseIsGone(res) {
|
|
584
|
-
if (!res) return true;
|
|
585
|
-
if (res.writableEnded) return true; // we already answered
|
|
586
|
-
if (res.destroyed) return true; // the socket went away
|
|
587
|
-
return false;
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
async function _handleLeadTokenRegistration(res, registration, ctx) {
|
|
591
|
-
const sendJson = (status, payload) => {
|
|
592
|
-
// Never write on a response whose client is gone: a torn-down socket has no reader, and writing
|
|
593
|
-
// would surface as an unhandled error rather than as the honest "this registration was abandoned".
|
|
594
|
-
if (_responseIsGone(res)) return;
|
|
595
|
-
res.writeHead(status, { 'Content-Type': 'application/json' });
|
|
596
|
-
res.end(JSON.stringify(payload));
|
|
597
|
-
};
|
|
598
|
-
if (registration.nativeTransport !== tokens.NATIVE_TRANSPORT_MTLS) {
|
|
599
|
-
// Existing synchronous contract, byte-for-byte: no listener, no CA, no await.
|
|
600
|
-
try {
|
|
601
|
-
const result = tokens.registerLeadToken(registration);
|
|
602
|
-
sendJson(200, { token: result.token });
|
|
603
|
-
} catch (err) {
|
|
604
|
-
sendJson(400, { error: err.message });
|
|
605
|
-
}
|
|
606
|
-
return;
|
|
607
|
-
}
|
|
608
|
-
let ticket;
|
|
609
|
-
try {
|
|
610
|
-
// Validated, conflict-checked read-only against the live registry, and captured BEFORE the first
|
|
611
|
-
// await: the caller's own object cannot change what commits, a malformed OR already-conflicting
|
|
612
|
-
// registration never reaches the listener (no CA load, no bind), and the ticket exists before any
|
|
613
|
-
// await can be interrupted.
|
|
614
|
-
ticket = tokens.beginLeadTokenRegistration(registration);
|
|
615
|
-
} catch (err) {
|
|
616
|
-
sendJson(400, { error: err.message });
|
|
617
|
-
return;
|
|
618
|
-
}
|
|
619
|
-
let settled = false;
|
|
620
|
-
const cancelOwnTicket = () => {
|
|
621
|
-
if (settled) return;
|
|
622
|
-
settled = true;
|
|
623
|
-
ticket.cancel();
|
|
624
|
-
};
|
|
625
|
-
// Installed BEFORE the await, so a disconnect that happens while the listener is still binding is
|
|
626
|
-
// observed rather than discovered later as an orphaned owner.
|
|
627
|
-
const onClientGone = () => {
|
|
628
|
-
if (!res.writableEnded) cancelOwnTicket();
|
|
629
|
-
};
|
|
630
|
-
res.on('close', onClientGone);
|
|
631
|
-
try {
|
|
632
|
-
// Entry check: a caller that vanished before we even started has already given up on this attempt.
|
|
633
|
-
if (_responseIsGone(res)) return;
|
|
634
|
-
// This server's OWN controller, never another live server's.
|
|
635
|
-
if (!ctx.nativeListener) {
|
|
636
|
-
cancelOwnTicket();
|
|
637
|
-
sendJson(503, { error: 'native_lead_listener_unavailable' });
|
|
638
|
-
return;
|
|
639
|
-
}
|
|
640
|
-
await ctx.nativeListener.ensureReady();
|
|
641
|
-
// Re-check after the await: the interruption window is exactly the one the ticket exists for.
|
|
642
|
-
if (_responseIsGone(res)) return;
|
|
643
|
-
// The commit is synchronous and happens while the response is still writable, so the ticket is
|
|
644
|
-
// retired from the cancellation path here: from this point the grant is real and the only remaining
|
|
645
|
-
// hazard is a LOST acknowledgment, which the caller (the supervisor) owns via its pending-revoke
|
|
646
|
-
// obligation — the child cannot distinguish "the parent read it" from "the parent timed out".
|
|
647
|
-
settled = true;
|
|
648
|
-
const committed = ticket.commit();
|
|
649
|
-
if (!committed.ok) {
|
|
650
|
-
// A revoke/reset/cancel landed while the listener was starting, or the live revalidation found a
|
|
651
|
-
// concurrent owner: no grant, and the caller is told why by bounded code only.
|
|
652
|
-
sendJson(409, { error: committed.code });
|
|
653
|
-
return;
|
|
654
|
-
}
|
|
655
|
-
sendJson(200, { token: committed.token });
|
|
656
|
-
} catch (err) {
|
|
657
|
-
cancelOwnTicket();
|
|
658
|
-
sendJson(503, { error: (err && err.code) || 'native_lead_listener_unavailable' });
|
|
659
|
-
} finally {
|
|
660
|
-
// The response is no longer ours to reason about, so the listener and any unsettled ticket are
|
|
661
|
-
// released here. An already-committed ticket is untouched (cancel() only moves a PENDING ticket).
|
|
662
|
-
res.removeListener('close', onClientGone);
|
|
663
|
-
cancelOwnTicket();
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
|
|
667
584
|
// ── D-2 client faces: /r/<alias>/v1/... ────────────────────────────────
|
|
668
585
|
function _selectFaceModule(pathSuffix) {
|
|
669
586
|
// /v1/models is answered by the Responses face only (Codex's pre-turn probe,
|
|
@@ -1011,6 +928,23 @@ async function _handleRouted(req, res, pathName, trusted = null, ctx = null) {
|
|
|
1011
928
|
rawBody,
|
|
1012
929
|
telemetry,
|
|
1013
930
|
}, context);
|
|
931
|
+
// WP-0 (docs/auto-mode-native-lead-subagent-latch-2026-10-30.html §8): the native-lead lane had no
|
|
932
|
+
// observation line at all, so a lead could keep asking for the server-side review with nothing to
|
|
933
|
+
// see. ONE request-side line per generation POST, built only from the client's own headers and the
|
|
934
|
+
// body it already parsed -- never a second parse, a prompt, a token or a model. Results/completion
|
|
935
|
+
// stay 'unobserved': this line is the request, not a claim about the response. It must never throw,
|
|
936
|
+
// so a null body and a 0 status (an aborted dial) are both fine -- the builder bounds them.
|
|
937
|
+
if (endpoint === 'generation' && req.method === 'POST') {
|
|
938
|
+
logReviewDiagnostic({
|
|
939
|
+
pathKind: 'native-lead',
|
|
940
|
+
transport: 'native',
|
|
941
|
+
status: telemetry.status,
|
|
942
|
+
results: 'unobserved',
|
|
943
|
+
completion: 'unobserved',
|
|
944
|
+
requestClass: requestClassFromHeaders(req.headers),
|
|
945
|
+
review: serverReviewAsked(parsedBody, req.headers) ? 'requested' : 'not_requested',
|
|
946
|
+
});
|
|
947
|
+
}
|
|
1014
948
|
_logProxyRequest(alias, (parsedBody && parsedBody.model) || '-', telemetry);
|
|
1015
949
|
return;
|
|
1016
950
|
}
|
|
@@ -1159,29 +1093,59 @@ async function _handleRouted(req, res, pathName, trusted = null, ctx = null) {
|
|
|
1159
1093
|
faceModule.writeJson(res, 403, faceModule.errorEnvelope(bindingCheck.code, bindingCheck.code));
|
|
1160
1094
|
return;
|
|
1161
1095
|
}
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1096
|
+
const trustedRoutedCodexLead = endpoint === 'generation' && !workerSwap.swapped
|
|
1097
|
+
&& requestHarness === 'codex-cli'
|
|
1098
|
+
&& leadBinding?.purpose === 'routed-primary' && leadBinding.harness === 'codex-cli'
|
|
1099
|
+
&& faceModule === responsesFace;
|
|
1100
|
+
if (trustedRoutedCodexLead) {
|
|
1101
|
+
const normalized = normalizeHistoricalAdditionalTools(parsedBody, { trustedRoutedCodexLead: true });
|
|
1102
|
+
if (!normalized.ok) {
|
|
1103
|
+
detachOwnListeners();
|
|
1104
|
+
invalidLeadRequest(normalized.reason);
|
|
1105
|
+
return;
|
|
1106
|
+
}
|
|
1107
|
+
if (normalized.removedCount > 0) {
|
|
1108
|
+
parsedBody = normalized.body;
|
|
1109
|
+
rawBody = Buffer.from(JSON.stringify(parsedBody));
|
|
1110
|
+
}
|
|
1111
|
+
}
|
|
1112
|
+
// D-2: the client's own top-level `safeguards` (or dangerous-tool-use beta) request can
|
|
1113
|
+
// only be answered by a server-side review. When CTM itself is translating this
|
|
1114
|
+
// POST /v1/messages to a chat wire, say so with the documented 400 instead of dropping
|
|
1115
|
+
// the field and paying for a generation the client did not ask for. The wording is the
|
|
1116
|
+
// registry's conversation-scoped refusal (refusal-scope.js §6): a 400 NAMING the review
|
|
1117
|
+
// tokens would make the client latch server review off for its whole session (§1.2), so
|
|
1118
|
+
// this message names none of them. Native (passthrough), count_tokens, Responses and
|
|
1119
|
+
// unknown paths keep their previous behaviour; no provider call or budget reservation
|
|
1120
|
+
// happens on this path.
|
|
1168
1121
|
if (faceModule === anthropicFace && req.method === 'POST' && pathSuffix === '/v1/messages') {
|
|
1169
1122
|
const selection = routes.selectUpstream(route, 'anthropic', parsedBody && parsedBody.model);
|
|
1170
|
-
const negotiation = unsupportedSafeguards(parsedBody, selection && selection.mode);
|
|
1123
|
+
const negotiation = unsupportedSafeguards(parsedBody, selection && selection.mode, req.headers);
|
|
1171
1124
|
if (negotiation) {
|
|
1125
|
+
const entry = refusalEntry('claude-code', 'server-review');
|
|
1126
|
+
const version = clientVersion(entry, req.headers);
|
|
1127
|
+
const scope = scopeVerification(entry, version);
|
|
1128
|
+
warnIfUnverified(entry, version);
|
|
1172
1129
|
detachOwnListeners();
|
|
1173
1130
|
telemetry.status = negotiation.status;
|
|
1174
1131
|
faceModule.writeJson(res, negotiation.status, negotiation.body, telemetry);
|
|
1175
1132
|
_logProxyRequest(routeAlias, (parsedBody && parsedBody.model) || '-', telemetry);
|
|
1176
1133
|
// WP-1 AC-1a: the translated cycle answers the review request with CTM's own fixed
|
|
1177
1134
|
// 400 -- a complete response that carries no review result because this transport
|
|
1178
|
-
// cannot. One diagnostic, no provider call, no fabricated verdict.
|
|
1135
|
+
// cannot. One diagnostic, no provider call, no fabricated verdict. `refusal=conversation`
|
|
1136
|
+
// is the measured scope of this wording, and `scope=` records whether the installed
|
|
1137
|
+
// client version is the one the entry was measured on.
|
|
1138
|
+
// WP-0 §8: the same line also names which kind of client request this was, from the
|
|
1139
|
+
// caller's own headers only (never a body value).
|
|
1179
1140
|
logReviewDiagnostic({
|
|
1180
1141
|
pathKind: 'routed',
|
|
1181
1142
|
transport: 'translated',
|
|
1182
1143
|
status: negotiation.status,
|
|
1183
1144
|
results: 'unsupported',
|
|
1184
1145
|
completion: 'complete',
|
|
1146
|
+
requestClass: requestClassFromHeaders(req.headers),
|
|
1147
|
+
refusal: 'conversation',
|
|
1148
|
+
scope,
|
|
1185
1149
|
});
|
|
1186
1150
|
return;
|
|
1187
1151
|
}
|
|
@@ -1307,6 +1271,39 @@ async function _handleRouted(req, res, pathName, trusted = null, ctx = null) {
|
|
|
1307
1271
|
downstreamResponseId: telemetry.downstreamResponseId,
|
|
1308
1272
|
});
|
|
1309
1273
|
}
|
|
1274
|
+
// WP-9 §9b L-1 (docs/deepseek-harness-acp-agent-2026-10-28.html D-19): a dsh session's spend. Its
|
|
1275
|
+
// ACP wire carries no per-request token counts, so this is the only place CTM can see them — one
|
|
1276
|
+
// contract row per completed request, counts only (never a token, key, header, prompt or response
|
|
1277
|
+
// byte). Deliberately INDEPENDENT of the budget block above: a lead token never has a
|
|
1278
|
+
// budgetAdmission.requestId, and this writer must not depend on one. Never awaited on the response
|
|
1279
|
+
// path — the reply has already been written by the time this runs.
|
|
1280
|
+
if (leadBinding && leadBinding.usageLog === 'dsh' && leadBinding.ctmSessionId
|
|
1281
|
+
&& telemetry.usage && telemetry.status >= 200 && telemetry.status < 300) {
|
|
1282
|
+
void appendDshUsageRow({
|
|
1283
|
+
// This server's OWN captured data directory, never a module global (see the context note above).
|
|
1284
|
+
dataDir: context.dataDir,
|
|
1285
|
+
ctmSessionId: leadBinding.ctmSessionId,
|
|
1286
|
+
row: {
|
|
1287
|
+
ts: new Date().toISOString(),
|
|
1288
|
+
requestId: telemetry.downstreamRequestId || telemetry.requestId,
|
|
1289
|
+
model: (parsedBody && parsedBody.model) || '',
|
|
1290
|
+
input_tokens: telemetry.usage.input_tokens,
|
|
1291
|
+
output_tokens: telemetry.usage.output_tokens,
|
|
1292
|
+
cache_read_input_tokens: telemetry.usage.cache_read_input_tokens,
|
|
1293
|
+
cache_creation_input_tokens: telemetry.usage.cache_creation_input_tokens,
|
|
1294
|
+
},
|
|
1295
|
+
}).then((result) => {
|
|
1296
|
+
// REPORT: the writer never throws and never writes a partial line; a refusal is surfaced on the
|
|
1297
|
+
// proxy's existing diagnostic channel, with a bounded reason and no caller value.
|
|
1298
|
+
if (result && result.ok === false) {
|
|
1299
|
+
console.log(`[model-proxy] dsh_usage_write_failed reason=${result.reason}`);
|
|
1300
|
+
}
|
|
1301
|
+
}).catch((err) => {
|
|
1302
|
+
// The writer returns a result object rather than throwing, so this is belt-and-braces for a
|
|
1303
|
+
// future edit; it must never become an unhandled rejection on the response path.
|
|
1304
|
+
console.log(`[model-proxy] dsh_usage_write_failed reason=exception detail=${String(err && err.message || err).slice(0, 200)}`);
|
|
1305
|
+
});
|
|
1306
|
+
}
|
|
1310
1307
|
_logProxyRequest(routeAlias, (parsedBody && parsedBody.model) || '-', telemetry);
|
|
1311
1308
|
}
|
|
1312
1309
|
}
|