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
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ Screenshots show the real application with fictional `acme-ledger` data and scri
|
|
|
26
26
|
|
|
27
27
|
### Choose the agent for the task
|
|
28
28
|
|
|
29
|
-
Every session has its own agent choice. Run Claude Code, Codex, Gemini CLI, OpenCode, Cursor Agent, Wall-E or a shell side by side and move between them from the same workspace.
|
|
29
|
+
Every session has its own agent choice. Run Claude Code, Codex, Gemini CLI, OpenCode, Cursor Agent, DeepSeek Harness, Wall-E or a shell side by side and move between them from the same workspace.
|
|
30
30
|
|
|
31
31
|
The CLI, the model and the connection serving that model are separate decisions: the AI Providers area brings native agent options, direct provider connections and configured routers into one place, using your own accounts and credentials. Agents differ in what they support, so the available model-switching controls depend on the CLI you pick.
|
|
32
32
|
|
|
@@ -77,6 +77,8 @@ A shared MCP gateway lets eligible tool servers reuse one process across session
|
|
|
77
77
|
|
|
78
78
|
Pair another machine running CTM and its sessions join the same list, tagged by machine. Pick the machine when you start a session, open and type into it from the hub's browser, and sign that machine's coding agents in from the Machines page, on desktop or phone.
|
|
79
79
|
|
|
80
|
+
Recent Sessions and search cover every paired machine, and a session link from any of them opens wherever that session lives. Paired machines share Wall-E memory, receive the hub's skills, and can be kept up to date from the hub. A session on another machine can ask to use the hub's files, commands or browser, and it waits for your approval first.
|
|
81
|
+
|
|
80
82
|
### Review changes in one place
|
|
81
83
|
|
|
82
84
|
The Review page moves between rendered HTML or Markdown, source files and diffs, and new files appear before Git tracks them. Comments collect into one message for the session responsible for the change, keeping feedback beside the files that produced it.
|
package/lib/release-schema.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
|
|
10
10
|
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
|
11
11
|
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
|
|
12
|
-
51, 52, 53, 54, 55, 56
|
|
12
|
+
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61
|
|
13
13
|
]
|
|
14
14
|
},
|
|
15
15
|
"walle": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
|
|
26
26
|
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
|
|
27
27
|
97, 98, 99, 100,
|
|
28
|
-
101
|
|
28
|
+
101, 102, 103, 104, 105
|
|
29
29
|
]
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"coding-task-manager/bin/client-server-boundary-lint.js",
|
|
10
10
|
"coding-task-manager/bin/conv-order-write-lint.js",
|
|
11
11
|
"coding-task-manager/bin/conversation-provenance-lint.js",
|
|
12
|
+
"coding-task-manager/bin/credential-dir-fixture-lint.js",
|
|
12
13
|
"coding-task-manager/bin/dashboard-client-source.js",
|
|
13
14
|
"coding-task-manager/bin/deadline-lint.js",
|
|
14
15
|
"coding-task-manager/bin/delivery-contract-lint.js",
|
|
@@ -1785,13 +1786,13 @@
|
|
|
1785
1786
|
"coding-task-manager/lib/runtime-interaction-action-resolver.js": "178eebe1294c3b761da0085e0dcccef36c027bd8c08e4c7779efda2f3984aa04",
|
|
1786
1787
|
"coding-task-manager/lib/sqlite-driver.js": "78a1cd2a604748cf895dc44547b4cf1e4a3bdec6f02d77965f4b7b21a2b8a31b",
|
|
1787
1788
|
"coding-task-manager/lib/walle-deps-repair.js": "be85620d08795ea0fe9539820416d5cc50b654519abddab0811907fa3fe93a7f",
|
|
1788
|
-
"coding-task-manager/lib/walle-mcp-auto-config.js": "
|
|
1789
|
+
"coding-task-manager/lib/walle-mcp-auto-config.js": "369c4d1c7d91d822510e74cfe2b6b2a85a2543e32e52e34590b4b329f6d9f64b",
|
|
1789
1790
|
"coding-task-manager/lib/walle-native-health.js": "9fdf7f17eb77837aac4ea16140a6f4e5a97d7a568945da30f29b9a7541c3d967",
|
|
1790
|
-
"coding-task-manager/lib/walle-supervisor.js": "
|
|
1791
|
+
"coding-task-manager/lib/walle-supervisor.js": "f7597199724270f8fe0fabf0840606d52a568bb7e97421cf8079fd0d5cb4eded",
|
|
1791
1792
|
"coding-task-manager/public/js/client-health-worker.js": "07e300113ee749ac7a6adaaa1461502d1562087af395b6c89cf1b885f1f5e00e",
|
|
1792
1793
|
"coding-task-manager/public/js/image-normalize-worker.js": "37cb0758bddcf10c66060fae52088c1a842409f30e919988e789cfea7d05e2be",
|
|
1793
|
-
"coding-task-manager/public/m/app.js": "
|
|
1794
|
-
"coding-task-manager/server.js": "
|
|
1794
|
+
"coding-task-manager/public/m/app.js": "982f3a1b5910b4fb2843cf3028afaeabde8f1cd5ad37fb6cb52511fdbf7cfcb3",
|
|
1795
|
+
"coding-task-manager/server.js": "a329e948c2f8f2aefa8753a69169c826ccb5e884d6132c1f785080a1386c2d56",
|
|
1795
1796
|
"scripts/conversation-storage-v2-migration.js": "f2620ba24893c4d2ec6c594428ddb41dc098da38b4066f1df25fb87abbfaebfa",
|
|
1796
1797
|
"shared/storage/schema-port.js": "e41cec8c075a6167fba2efd0177d9e20a11c0cd49ae176aaf36d5b9257409e67",
|
|
1797
1798
|
"shared/storage/schema-sync.js": "7ca080e44e35e8178a0f74317023881f920ae75bde4f7431702ce1f9fa4a1d03",
|
|
@@ -1803,7 +1804,7 @@
|
|
|
1803
1804
|
"wall-e/adapters/claude-web.plugin.json": "29945817a251b14c0789ae527f7ecd345cb0097c654f851fe062b208c30a0a6b",
|
|
1804
1805
|
"wall-e/adapters/codex-memory.js": "18d6d0af08d9d48d5c92621a16b2b9a597d30b3993c534f88a4bc8b3d60c0d71",
|
|
1805
1806
|
"wall-e/adapters/codex-memory.plugin.json": "4cbc6a0f2023264a59ec703ec7553ed9997b1e55626831342bf3ee60f3828663",
|
|
1806
|
-
"wall-e/adapters/imessage.js": "
|
|
1807
|
+
"wall-e/adapters/imessage.js": "b689b538abb809df08c3f6f2a08673d6c38a6cb50d2f1d49aa693de28e0b11bd",
|
|
1807
1808
|
"wall-e/adapters/imessage.plugin.json": "28dc369a489ea44bd2063d6f9eae998099134b9de5db76118808f5def8534bb1",
|
|
1808
1809
|
"wall-e/adapters/plaintext.js": "3a834c50ef76b746987819c8fd453f0161ffb70a1c588e5c4161b1f102190599",
|
|
1809
1810
|
"wall-e/adapters/plaintext.plugin.json": "de4b6c6d151fdabf897be9856f6357cbb83cdff14a62186096de55e495cd4352",
|
|
@@ -1846,7 +1847,7 @@
|
|
|
1846
1847
|
"wall-e/llm/typesafe.plugin.json": "93109b5f27dcf0fb25cb18d461eda3bc6b294ebdd1614740da0bc2cee715948e",
|
|
1847
1848
|
"wall-e/llm/zai.js": "f94c77663cd450b2e54dc7450f0c24666b1fd5ced795e685c6d94d6f09d3931d",
|
|
1848
1849
|
"wall-e/llm/zai.plugin.json": "d9c6408fca68fed17a3a94f27d9119b947eadeb01f4a40a00e27e59faa942e00",
|
|
1849
|
-
"wall-e/memory/ctm-session-context.js": "
|
|
1850
|
+
"wall-e/memory/ctm-session-context.js": "635225f1070ea7bc95a057090122720450000aac52257f0b46a5ba089b5a3ed6",
|
|
1850
1851
|
"wall-e/plugins/discovery.js": "44dfc422e9cf570d1d300c4ebfe4be63ab8f2709d38da1d35f30f6a7e65b20bb",
|
|
1851
1852
|
"wall-e/plugins/manifest-loader.js": "501d3098c2356c35a0650def273e7c65cb076d986fe4bb0d4eba3189a08c5c52",
|
|
1852
1853
|
"wall-e/plugins/manifest-schema.js": "59b5dd76f0f85cc136a6511e2f4945a9d1fc16133495c9b5c64df097b47a6571",
|
|
@@ -1868,7 +1869,7 @@
|
|
|
1868
1869
|
"wall-e/skills/_bundled/model-trainer/index.js": "1c0e5f039dc7b06624c14631ea8427af956b243354da2ebd9930f6d382eee5bc",
|
|
1869
1870
|
"wall-e/skills/_bundled/morning-briefing/run.js": "e09ca88ed0a65570b11c8007d27a4cd42990a35df3343443fc560df90564f50d",
|
|
1870
1871
|
"wall-e/skills/skill-loader.js": "8572c97cb88bcc9fc78a89ed10bf5134b57cbc838dd06dd5cf46509bfcfd54be",
|
|
1871
|
-
"wall-e/workers/mcp-gateway-process.js": "
|
|
1872
|
+
"wall-e/workers/mcp-gateway-process.js": "3a5a22e2c620911510d452c7ce4714a6908682a1c0fa303f0e24f2eb31e20380"
|
|
1872
1873
|
},
|
|
1873
1874
|
"discoveryInventories": [
|
|
1874
1875
|
{
|
package/package.json
CHANGED
|
@@ -24,6 +24,9 @@ const { resolveWallePermissionV2 } = require('./lib/walle-permission-reply');
|
|
|
24
24
|
const claudeDesktopSessions = require('./lib/claude-desktop-sessions');
|
|
25
25
|
const desktopFork = require('./lib/desktop-fork');
|
|
26
26
|
const skillAutocomplete = require('./lib/skill-autocomplete');
|
|
27
|
+
// WP-9 (§9 S-9, AC-9d): the machine filter is applied HERE, on the main thread — the read pool runs
|
|
28
|
+
// the query in another process and holds none of the registry's in-memory machine state.
|
|
29
|
+
const skillAutocompleteQuery = require('./lib/skill-autocomplete-query');
|
|
27
30
|
const storageMigration = require('./lib/storage-migration');
|
|
28
31
|
const perfTracker = require('./lib/perf-tracker');
|
|
29
32
|
const { runSync } = perfTracker;
|
|
@@ -95,7 +98,16 @@ function _shouldLogWalleMigrationStep(sessionId, result = {}, nowMs = Date.now()
|
|
|
95
98
|
Number(result.sourceSize || 0),
|
|
96
99
|
]);
|
|
97
100
|
const prior = walleMigrationLogState.get(id);
|
|
98
|
-
|
|
101
|
+
// D-10 (docs/temp-file-leaks-disk-full-2026-10-25.html §5): a step that made no progress and whose
|
|
102
|
+
// disposition is already `complete` is a settled fact about the session, not a clock-driven event.
|
|
103
|
+
// Re-logging it every 5 minutes per session was 64% of ctm.log (605k lines in 26.8 d). Log it once
|
|
104
|
+
// per session per process: only when this session has no prior state, or the signature changed.
|
|
105
|
+
// Every other step keeps the 5-minute deferred repeat below.
|
|
106
|
+
if (!_walleMigrationMadeProgress(result)
|
|
107
|
+
&& String(result.action || '') === 'noop'
|
|
108
|
+
&& resolveMigrationDisposition(result) === MIGRATION_DISPOSITIONS.complete) {
|
|
109
|
+
if (prior?.signature === signature) return false;
|
|
110
|
+
} else if (prior?.signature === signature
|
|
99
111
|
&& nowMs - prior.loggedAtMs < WALLE_MIGRATION_DEFERRED_LOG_INTERVAL_MS) return false;
|
|
100
112
|
if (!prior && walleMigrationLogState.size >= WALLE_MIGRATION_LOG_STATE_LIMIT) {
|
|
101
113
|
walleMigrationLogState.delete(walleMigrationLogState.keys().next().value);
|
|
@@ -830,7 +842,15 @@ function handlePromptApi(req, res, url, deps = {}) {
|
|
|
830
842
|
}
|
|
831
843
|
if (p === '/api/images/ingest-path' && m === 'POST') return handleIngestImagePath(req, res);
|
|
832
844
|
if (p === '/api/mobile/attachments/upload' && m === 'POST') return handleUploadMobileAttachment(req, res, url);
|
|
833
|
-
|
|
845
|
+
// R-1 (docs/composer-image-chip-stuck-submission-recovery-2026-10-30.html): session-scoped so a MIRROR id is answered by the box.
|
|
846
|
+
const imageRefsMatch = /^\/api\/sessions\/([^/]+)\/image-refs$/.exec(p);
|
|
847
|
+
if (imageRefsMatch && m === 'POST') {
|
|
848
|
+
let sessionId = '';
|
|
849
|
+
try { sessionId = decodeURIComponent(imageRefsMatch[1]); } catch { return jsonResponse(res, 400, { error: 'Invalid session id' }); }
|
|
850
|
+
if (!remoteSessionForward.isMirrorSessionRequest(req, url, sessionId)) return handleSessionImageRefs(req, res, sessionId);
|
|
851
|
+
return remoteSessionForward.maybeForwardSessionRequest(req, res, url, sessionId)
|
|
852
|
+
.then((forwarded) => (forwarded ? undefined : handleSessionImageRefs(req, res, sessionId)));
|
|
853
|
+
}
|
|
834
854
|
if (p.match(/^\/api\/images\/\d+$/) && m === 'GET') return handleGetImage(req, res, url);
|
|
835
855
|
if (p.match(/^\/api\/images\/\d+\/annotations$/) && m === 'PUT') return handleUpdateAnnotations(req, res, url);
|
|
836
856
|
if (p.match(/^\/api\/images\/\d+$/) && m === 'DELETE') return handleDeleteImage(req, res, url);
|
|
@@ -850,9 +870,9 @@ function handlePromptApi(req, res, url, deps = {}) {
|
|
|
850
870
|
if (p === '/api/permissions/log' && m === 'GET') return handleListPermLog(req, res, url);
|
|
851
871
|
|
|
852
872
|
// --- Session Conversations ---
|
|
853
|
-
if (p === '/api/conversations' && m === 'GET') return handleListConversations(req, res, url);
|
|
873
|
+
if (p === '/api/conversations' && m === 'GET') return (handleListConversations.fleet ||= require('./lib/fleet-session-lists').fleetRouted('GET /api/conversations', handleListConversations, require('./lib/fleet-conversation-route').conversationsFleetSpec))(req, res, url); // fleet WP-4, wrapped once
|
|
854
874
|
if (p === '/api/conversations/import' && m === 'POST') return handleImportConversations(req, res);
|
|
855
|
-
if (p.match(/^\/api\/conversations\/[a-f0-9-]+$/) && m === 'GET') return handleGetConversation(req, res, url);
|
|
875
|
+
if (p.match(/^\/api\/conversations\/[a-f0-9-]+$/) && m === 'GET') return (handleGetConversation.byMachine ||= require('./lib/remote-machine-proxy').machineRouted('GET /api/conversations/:id', handleGetConversation))(req, res, url); // fleet WP-4: ?machine= -> owner box
|
|
856
876
|
|
|
857
877
|
// --- Templates ---
|
|
858
878
|
if (p === '/api/templates' && m === 'GET') return handleListTemplates(req, res);
|
|
@@ -1822,7 +1842,7 @@ async function handleUploadMobileAttachment(req, res, url) {
|
|
|
1822
1842
|
}
|
|
1823
1843
|
}
|
|
1824
1844
|
|
|
1825
|
-
async function handleSessionImageRefs(req, res) {
|
|
1845
|
+
async function handleSessionImageRefs(req, res, pathSessionId) {
|
|
1826
1846
|
try {
|
|
1827
1847
|
const body = await readBody(req, 256 * 1024);
|
|
1828
1848
|
// The media-write-behind draft store keeps terminal image drafts in its own
|
|
@@ -1833,7 +1853,13 @@ async function handleSessionImageRefs(req, res) {
|
|
|
1833
1853
|
// survive) and hand over a plain, pre-resolved Map so the resolver can bridge to it.
|
|
1834
1854
|
// Best-effort: falls through to the legacy SQL path unchanged when the draft service
|
|
1835
1855
|
// is unavailable (e.g. write-behind off) or a given attachment isn't a terminal draft.
|
|
1836
|
-
|
|
1856
|
+
// R-1: the PATH is the routing key; a body naming a different session is refused.
|
|
1857
|
+
const bodySessionId = String((body && (body.sessionId || body.session_id)) || '').trim();
|
|
1858
|
+
const routeSessionId = String(pathSessionId || '').trim();
|
|
1859
|
+
if (routeSessionId && bodySessionId && bodySessionId !== routeSessionId) {
|
|
1860
|
+
throw tagRouteValidationError(new Error('Session id in body does not match the route'), { status: 400, code: 'CTM_SESSION_IMAGE_REF_SESSION_MISMATCH' });
|
|
1861
|
+
}
|
|
1862
|
+
const sessionId = bodySessionId || routeSessionId;
|
|
1837
1863
|
const images = Array.isArray(body && body.images) ? body.images
|
|
1838
1864
|
: Array.isArray(body && body.attachments) ? body.attachments : [];
|
|
1839
1865
|
const mediaDrafts = new Map();
|
|
@@ -8052,7 +8078,19 @@ async function handleSkillAutocomplete(req, res, url) {
|
|
|
8052
8078
|
const { rows } = await _readRequestControl('skillAutocomplete', {
|
|
8053
8079
|
cwd, agent, includeSessionSeen, query,
|
|
8054
8080
|
});
|
|
8055
|
-
|
|
8081
|
+
// WP-9 (§9 S-9, AC-9d): a session that runs on a REMOTE machine has its own skill list — the hub
|
|
8082
|
+
// drops what that box held back and adds what only that box has. A local/absent session reads a
|
|
8083
|
+
// null view and the rows cross untouched.
|
|
8084
|
+
// The box-only names it adds go back through the SAME query match and ranking a local request
|
|
8085
|
+
// gets, and the same 20-row cap, so a box name never appears for a query it does not match.
|
|
8086
|
+
const sessionId = url.searchParams.get('sessionId') || url.searchParams.get('session') || '';
|
|
8087
|
+
const view = skillAutocompleteQuery.machineSkillViewFor(sessionId);
|
|
8088
|
+
const list = Array.isArray(rows) ? rows : [];
|
|
8089
|
+
jsonResponse(res, 200, view
|
|
8090
|
+
? skillAutocomplete.filterAndSortSkillAutocompleteItems(
|
|
8091
|
+
skillAutocompleteQuery.applyMachineSkillView(list, view), query, agent || 'all',
|
|
8092
|
+
).slice(0, 20)
|
|
8093
|
+
: list);
|
|
8056
8094
|
} catch (e) { promptRouteError(res, e); }
|
|
8057
8095
|
}
|
|
8058
8096
|
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
|
|
14
14
|
const http = require('http');
|
|
15
15
|
const crypto = require('crypto');
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
const path = require('path');
|
|
16
18
|
const modelGeneration = require('../lib/env-flags').strFlag('CTM_MODEL_PROCESS_GENERATION', '');
|
|
17
19
|
|
|
18
20
|
// Only these routes can carry a notice back to the model (Claude hook stdout JSON). `stop` is
|
|
@@ -32,6 +34,42 @@ function formatHookOutput(responseText, hookEventName) {
|
|
|
32
34
|
return JSON.stringify({ hookSpecificOutput: { hookEventName, additionalContext: texts.join('\n') } });
|
|
33
35
|
}
|
|
34
36
|
|
|
37
|
+
// A command that already declares its own lifetime somewhere on the line: an absolute, relative or
|
|
38
|
+
// quoted path to bounded.js followed by `--deadline-ms N` (whitespace or `=`). This is guidance for
|
|
39
|
+
// honest agents, not a security boundary — a command can always spell its way around a regex.
|
|
40
|
+
const BOUNDED_DEADLINE_RE = /bounded\.js['"]?\s+--deadline-ms(?:\s+|=)\d+/;
|
|
41
|
+
// Session-host/durable-jobs design D-8 (§6.4): bounded.js dies with the agent session, so a declared lifetime past
|
|
42
|
+
// 2 h belongs to bin/durable-job.js instead (its job is owned by the service manager, not by this session).
|
|
43
|
+
const DURABLE_THRESHOLD_MS = 7_200_000;
|
|
44
|
+
const BOUNDED_DEADLINE_VALUE_RE = /bounded\.js['"]?\s+--deadline-ms(?:\s+|=)(\d+)/;
|
|
45
|
+
|
|
46
|
+
// L1 declare (docs/background-gate-watchers-bounded-observation-2026-10-26.html §5 R1-R2, §6.3, §8
|
|
47
|
+
// WP-2): a Bash command launched with `run_in_background: true` must name its own lifetime, so there is
|
|
48
|
+
// always a clock its launcher chose. The decision is made here in the bridge rather than in CTM: it
|
|
49
|
+
// takes effect on the next hook invocation (no restart), it can name the absolute path of bounded.js
|
|
50
|
+
// for an agent whose cwd is another repo, and it fails open when bounded.js was never installed.
|
|
51
|
+
// Returns the deny reason, or null to allow (and print nothing).
|
|
52
|
+
function backgroundDeadlineDenial(hook, { boundedPath, boundedExists, durablePath, durableExists } = {}) {
|
|
53
|
+
if (!hook || typeof hook !== 'object' || Array.isArray(hook)) return null;
|
|
54
|
+
if (hook.hook_event_name !== 'PreToolUse' || hook.tool_name !== 'Bash') return null;
|
|
55
|
+
const input = hook.tool_input;
|
|
56
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) return null;
|
|
57
|
+
if (input.run_in_background !== true) return null;
|
|
58
|
+
if (boundedExists !== true) return null;
|
|
59
|
+
if (BOUNDED_DEADLINE_RE.test(String(input.command || ''))) {
|
|
60
|
+
const long = BOUNDED_DEADLINE_VALUE_RE.exec(String(input.command || ''));
|
|
61
|
+
if (long && Number(long[1]) > DURABLE_THRESHOLD_MS && durableExists === true && durablePath) {
|
|
62
|
+
const durableShown = /\s/.test(String(durablePath)) ? `'${durablePath}'` : String(durablePath);
|
|
63
|
+
return 'A background job longer than 2 h must not live inside this agent session (a CTM restart or the agent process exiting kills it). '
|
|
64
|
+
+ `Launch it with: node ${durableShown} start --name <slug> --deadline-ms ${long[1]} -- <command> `
|
|
65
|
+
+ 'then wait with Monitor until the printed receipt= file exists.';
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const shown = /\s/.test(String(boundedPath)) ? `'${boundedPath}'` : String(boundedPath);
|
|
70
|
+
return `Background Bash commands must declare their own lifetime. Re-run it as: node ${shown} --deadline-ms <N> -- <command> (N = its honest worst case in ms, at most 86400000 = 24 h; e.g. 5400000 for a commit gate; use -- sh -c '<…>' for a compound command). Foreground commands are not affected.`;
|
|
71
|
+
}
|
|
72
|
+
|
|
35
73
|
function post(port, route, body, onResponse) {
|
|
36
74
|
const req = http.request({
|
|
37
75
|
hostname: 'localhost',
|
|
@@ -56,7 +94,7 @@ function post(port, route, body, onResponse) {
|
|
|
56
94
|
return req;
|
|
57
95
|
}
|
|
58
96
|
|
|
59
|
-
module.exports = { post, formatHookOutput };
|
|
97
|
+
module.exports = { post, formatHookOutput, backgroundDeadlineDenial };
|
|
60
98
|
|
|
61
99
|
if (require.main === module) {
|
|
62
100
|
const port = parseInt(process.argv[2], 10) || parseInt(process.env.CTM_PORT, 10);
|
|
@@ -132,6 +170,22 @@ if (require.main === module) {
|
|
|
132
170
|
prompt_head: hook.prompt == null ? undefined : String(hook.prompt).slice(0, 1024),
|
|
133
171
|
payload: parsed ? forwardedPayload(hook, stdin) : (stdin.trim() || undefined),
|
|
134
172
|
});
|
|
173
|
+
// The menu route (the `.*` PreToolUse matcher) refuses an explicit background Bash launch with no
|
|
174
|
+
// declared lifetime. The POST below is unchanged — still sent, its response still ignored.
|
|
175
|
+
if (route === 'menu') {
|
|
176
|
+
const boundedPath = path.resolve(__dirname, '..', '..', 'bin', 'bounded.js');
|
|
177
|
+
let boundedExists = false;
|
|
178
|
+
try { boundedExists = fs.existsSync(boundedPath); } catch { /* expected: a path we cannot stat means no wrapper to name, so the gate stays open */ }
|
|
179
|
+
const durablePath = path.resolve(__dirname, '..', '..', 'bin', 'durable-job.js');
|
|
180
|
+
let durableExists = false;
|
|
181
|
+
try { durableExists = fs.existsSync(durablePath); } catch { /* expected: an unstat-able durable-job.js means nothing to name, so the long-deadline gate stays open */ }
|
|
182
|
+
const reason = parsed ? backgroundDeadlineDenial(hook, { boundedPath, boundedExists, durablePath, durableExists }) : null;
|
|
183
|
+
if (reason) {
|
|
184
|
+
process.stdout.write(JSON.stringify({
|
|
185
|
+
hookSpecificOutput: { hookEventName: 'PreToolUse', permissionDecision: 'deny', permissionDecisionReason: reason },
|
|
186
|
+
}) + '\n');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
135
189
|
if (!NOTICE_ROUTES.has(route)) { post(port, route, body); return; }
|
|
136
190
|
post(port, route, body, (text) => {
|
|
137
191
|
const out = formatHookOutput(text, str(hook.hook_event_name));
|
|
@@ -263,26 +263,43 @@ function ensureDir(dir) {
|
|
|
263
263
|
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
+
// The TLS seam (WP-11b): the rev 2 edge routes on SNI, so a request that reaches
|
|
267
|
+
// the relay by address (`https://127.0.0.1:<port>`) still has to name the control
|
|
268
|
+
// host and carry a test CA. `deps.tls` is a test seam only — nothing reads TLS
|
|
269
|
+
// settings from argv, env or the config file.
|
|
270
|
+
function tlsRequestOptions(url, host, tls) {
|
|
271
|
+
const options = tls && typeof tls === 'object' ? Object.assign({}, tls) : {};
|
|
272
|
+
if (options.servername) return options;
|
|
273
|
+
if (new URL(url).protocol !== 'https:') return options;
|
|
274
|
+
if (typeof host !== 'string' || host.length === 0) return options;
|
|
275
|
+
options.servername = host.split(':')[0];
|
|
276
|
+
return options;
|
|
277
|
+
}
|
|
278
|
+
|
|
266
279
|
// The relay routes by Host (`r.walle.sh` = control, `<slug>.r.walle.sh` =
|
|
267
280
|
// tenant), so a request that reaches the socket by address still has to name the
|
|
268
281
|
// control host. Production derives it from the relay URL; `deps.relayHost` is the
|
|
269
282
|
// same seam the engine exposes for tests and for a relay reached through a proxy.
|
|
270
283
|
function defaultRequest(
|
|
271
284
|
url,
|
|
272
|
-
{ method = 'GET', headers = {}, body = null, timeoutMs = HTTP_TIMEOUT_MS, host = null } = {},
|
|
285
|
+
{ method = 'GET', headers = {}, body = null, timeoutMs = HTTP_TIMEOUT_MS, host = null, tls = null } = {},
|
|
273
286
|
) {
|
|
274
287
|
return new Promise((resolve, reject) => {
|
|
275
288
|
const parsed = new URL(url);
|
|
276
|
-
const
|
|
289
|
+
const secure = parsed.protocol === 'https:';
|
|
290
|
+
const mod = secure ? https : http;
|
|
277
291
|
const req = mod.request(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
292
|
+
Object.assign(
|
|
293
|
+
{
|
|
294
|
+
protocol: parsed.protocol,
|
|
295
|
+
hostname: parsed.hostname,
|
|
296
|
+
port: parsed.port,
|
|
297
|
+
path: `${parsed.pathname}${parsed.search}`,
|
|
298
|
+
method,
|
|
299
|
+
headers: host ? Object.assign({ host }, headers) : headers,
|
|
300
|
+
},
|
|
301
|
+
secure ? tlsRequestOptions(url, host, tls) : {},
|
|
302
|
+
),
|
|
286
303
|
(res) => {
|
|
287
304
|
const chunks = [];
|
|
288
305
|
res.on('data', (chunk) => chunks.push(chunk));
|
|
@@ -310,8 +327,10 @@ function parseJsonBody(text) {
|
|
|
310
327
|
|
|
311
328
|
function requestJson(deps, url, options) {
|
|
312
329
|
const requestFn = deps.requestFn || defaultRequest;
|
|
313
|
-
const
|
|
314
|
-
|
|
330
|
+
const seam = {};
|
|
331
|
+
if (deps.relayHost) seam.host = deps.relayHost;
|
|
332
|
+
if (deps.tls) seam.tls = deps.tls;
|
|
333
|
+
return requestFn(url, Object.assign(seam, options));
|
|
315
334
|
}
|
|
316
335
|
|
|
317
336
|
function readConfig(configPath) {
|
|
@@ -406,6 +425,7 @@ function buildClient(args, deps, config) {
|
|
|
406
425
|
return createRelayClient({
|
|
407
426
|
relayUrl: args.relay || config.relay || DEFAULT_RELAY,
|
|
408
427
|
relayHost: deps.relayHost,
|
|
428
|
+
tls: deps.tls,
|
|
409
429
|
token: config.token,
|
|
410
430
|
localTarget: target,
|
|
411
431
|
stateFile: statePath,
|
|
@@ -477,6 +497,9 @@ async function cmdInstall(args, deps) {
|
|
|
477
497
|
if (plan.method === 'launchd') {
|
|
478
498
|
ensureDir(path.dirname(plan.plistPath));
|
|
479
499
|
atomicWriteFileSync(plan.plistPath, plan.plist, { mode: 0o644 });
|
|
500
|
+
// The create mode is masked by the process umask (077 under the nightly gate rendered it 0600);
|
|
501
|
+
// the job file is 0644 exactly, whatever umask the installer runs under.
|
|
502
|
+
fs.chmodSync(plan.plistPath, 0o644);
|
|
480
503
|
if (await launchdLoaded(execFile, domain, plan.label)) {
|
|
481
504
|
await execFile('launchctl', ['kickstart', '-k', `${domain}/${plan.label}`], { encoding: 'utf8' });
|
|
482
505
|
} else {
|