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
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
// orphan, per the same signature reapOrphanWalleProcesses() already uses).
|
|
12
12
|
// A same-title row with any OTHER ppid belongs to a different instance and
|
|
13
13
|
// must never be killed, adopted, or reported as pidSource:'discovered'.
|
|
14
|
-
function isOwnedRow(row, { titles, myPid }) {
|
|
14
|
+
function isOwnedRow(row, { titles, myPid, orphanParents = new Set([1]) }) {
|
|
15
15
|
if (!row) return false;
|
|
16
|
-
return titles.has(row.command) && (row.ppid === myPid || row.ppid
|
|
16
|
+
return titles.has(row.command) && (row.ppid === myPid || orphanParents.has(row.ppid));
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
// Index a listPidsWithPpid() snapshot by pid for O(1) ownership lookups
|
|
@@ -3,6 +3,66 @@
|
|
|
3
3
|
// Extracted verbatim from lib/walle-supervisor.js (file-size ratchet, restart/resume WP-7); the supervisor re-exports it.
|
|
4
4
|
|
|
5
5
|
const fs = require('fs');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const zlib = require('node:zlib');
|
|
8
|
+
const { pipeline } = require('node:stream/promises');
|
|
9
|
+
|
|
10
|
+
// WP-4 (docs/temp-file-leaks-disk-full-2026-10-25.html §5 D-9): the primary CTM runs under launchd
|
|
11
|
+
// with StandardOutPath/StandardErrorPath = ~/.walle/logs/ctm.log|ctm.err (bin/install-service.sh
|
|
12
|
+
// :96-99). launchd opens them O_APPEND once, for the life of the process, and nothing rotates them:
|
|
13
|
+
// ctm.err reached 985 MB and ctm.log 3.7 GiB before a manual rotation (§1 L-2). `rotateBoundedLog`
|
|
14
|
+
// below cannot serve those fds — a rename keeps the inode, so the writer silently keeps appending
|
|
15
|
+
// to the unlinked file. The only in-process rotation that works on an fd we do not own is
|
|
16
|
+
// copy-then-ftruncate: clone the bytes aside, truncate the live file through its own fd, then
|
|
17
|
+
// compress the clone.
|
|
18
|
+
const STDIO_ROTATE_MAX_BYTES = 64 * 1024 * 1024;
|
|
19
|
+
const STDIO_ROTATE_KEEP = 3;
|
|
20
|
+
// One warning per distinct message per process, same shape as server.js's `_diskHygieneLogged`:
|
|
21
|
+
// a rotation that keeps failing (a full disk) must not itself become a log flood.
|
|
22
|
+
const _rotationLogged = new Set();
|
|
23
|
+
|
|
24
|
+
function _rotationLogOnce(message) {
|
|
25
|
+
const text = String(message);
|
|
26
|
+
if (_rotationLogged.has(text)) return;
|
|
27
|
+
_rotationLogged.add(text);
|
|
28
|
+
console.warn(`[log-rotation] ${text}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function _utcStamp(date) {
|
|
32
|
+
const iso = (date instanceof Date && !Number.isNaN(date.getTime()) ? date : new Date()).toISOString();
|
|
33
|
+
return `${iso.slice(0, 10).replace(/-/g, '')}-${iso.slice(11, 19).replace(/:/g, '')}`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function _unlinkQuiet(fsModule, target) {
|
|
37
|
+
try { fsModule.unlinkSync(target); }
|
|
38
|
+
catch { /* expected: the artifact was never created (or already pruned) — nothing to remove */ }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function _isRotationArchiveName(name, base) {
|
|
42
|
+
return name.startsWith(`${base}.`) && name.endsWith('.gz')
|
|
43
|
+
&& /^\d{8}-\d{6}\.gz$/.test(name.slice(base.length + 1));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function _pruneRotationArchives(logPath, keep, fsModule) {
|
|
47
|
+
const directory = path.dirname(logPath);
|
|
48
|
+
const base = path.basename(logPath);
|
|
49
|
+
let entries;
|
|
50
|
+
try { entries = fsModule.readdirSync(directory); }
|
|
51
|
+
catch (error) {
|
|
52
|
+
// HANDLE: a directory we cannot read is not a reason to lose the archive we just made.
|
|
53
|
+
_rotationLogOnce(`archive prune skipped for ${base}: ${error?.message || error}`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// The stamp is fixed-width UTC, so a plain name sort is a chronological sort (newest last).
|
|
57
|
+
const archives = entries.filter((name) => _isRotationArchiveName(name, base)).sort();
|
|
58
|
+
for (const name of archives.slice(0, Math.max(0, archives.length - keep))) {
|
|
59
|
+
try { fsModule.unlinkSync(path.join(directory, name)); }
|
|
60
|
+
catch (error) {
|
|
61
|
+
// A failed prune costs disk, never data — report it once and keep the newest archives.
|
|
62
|
+
_rotationLogOnce(`archive prune failed for ${name}: ${error?.message || error}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
6
66
|
|
|
7
67
|
function rotateBoundedLog(filePath, options = {}) {
|
|
8
68
|
const fsModule = options.fsModule || fs;
|
|
@@ -29,4 +89,107 @@ function rotateBoundedLog(filePath, options = {}) {
|
|
|
29
89
|
return true;
|
|
30
90
|
}
|
|
31
91
|
|
|
32
|
-
|
|
92
|
+
// D-9. Rotates an fd we inherited (launchd's stdout/stderr) in place: clone, truncate through the
|
|
93
|
+
// fd, compress the clone, keep the newest `keep` archives.
|
|
94
|
+
//
|
|
95
|
+
// Returns `{ rotated, reason, archive? }` with reason one of:
|
|
96
|
+
// 'not-file' — the fd is not a regular file (a pipe/TTY/socket), so there is nothing to
|
|
97
|
+
// rotate and nothing was touched;
|
|
98
|
+
// 'inode-mismatch' — logPath is not the file this fd points at (a dev instance, a TTY, a
|
|
99
|
+
// rotated/relaunched process): touching either one would be wrong;
|
|
100
|
+
// 'below-threshold' — under maxBytes, or an I/O failure left the log exactly as it was;
|
|
101
|
+
// 'rotated' — the fd's file now holds only the rotation notice, and `archive` holds the
|
|
102
|
+
// bytes that were there before.
|
|
103
|
+
// It never throws: this runs on the disk-hygiene timer, where a rotation failure must stay a
|
|
104
|
+
// logged no-op rather than break the hygiene pass (or the boot sequence).
|
|
105
|
+
async function rotateInheritedStdio({
|
|
106
|
+
fd,
|
|
107
|
+
logPath,
|
|
108
|
+
maxBytes = STDIO_ROTATE_MAX_BYTES,
|
|
109
|
+
keep = STDIO_ROTATE_KEEP,
|
|
110
|
+
now = () => new Date(),
|
|
111
|
+
fsModule = fs,
|
|
112
|
+
} = {}) {
|
|
113
|
+
const limit = Math.max(1024, Number(maxBytes) || STDIO_ROTATE_MAX_BYTES);
|
|
114
|
+
const keepCount = Math.max(1, Math.min(20, Number(keep) || STDIO_ROTATE_KEEP));
|
|
115
|
+
const base = path.basename(String(logPath || ''));
|
|
116
|
+
|
|
117
|
+
let fdStat;
|
|
118
|
+
try { fdStat = fsModule.fstatSync(fd); }
|
|
119
|
+
catch { /* expected: EBADF/closed fd — not a file we can rotate, and nothing was touched */ return { rotated: false, reason: 'not-file' }; }
|
|
120
|
+
if (typeof fdStat?.isFile !== 'function' || !fdStat.isFile()) return { rotated: false, reason: 'not-file' };
|
|
121
|
+
|
|
122
|
+
let pathStat;
|
|
123
|
+
try { pathStat = fsModule.statSync(logPath); }
|
|
124
|
+
catch { /* expected: logPath missing/unreadable — this is not the file the fd points at */ return { rotated: false, reason: 'inode-mismatch' }; }
|
|
125
|
+
// dev+ino, not the path string: this is the whole point — a second process (dev instance) or a
|
|
126
|
+
// shell redirect has a DIFFERENT file at the same path, and rotating the primary's log from here
|
|
127
|
+
// would truncate a file we do not own.
|
|
128
|
+
if (Number(pathStat.dev) !== Number(fdStat.dev) || Number(pathStat.ino) !== Number(fdStat.ino)) {
|
|
129
|
+
return { rotated: false, reason: 'inode-mismatch' };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const bytes = Math.max(0, Number(fdStat.size) || 0);
|
|
133
|
+
if (bytes < limit) return { rotated: false, reason: 'below-threshold' };
|
|
134
|
+
|
|
135
|
+
const clonePath = `${logPath}.${_utcStamp(typeof now === 'function' ? now() : now)}`;
|
|
136
|
+
const gzPath = `${clonePath}.gz`;
|
|
137
|
+
const copyFlags = (fsModule.constants || fs.constants).COPYFILE_FICLONE;
|
|
138
|
+
try {
|
|
139
|
+
fsModule.copyFileSync(logPath, clonePath, copyFlags);
|
|
140
|
+
} catch (error) {
|
|
141
|
+
// HANDLE: nothing was truncated, so the log is untouched and the caller's only correct
|
|
142
|
+
// response is the below-threshold one — try again on the next hygiene pass.
|
|
143
|
+
_rotationLogOnce(`clone failed for ${base}: ${error?.message || error}`);
|
|
144
|
+
_unlinkQuiet(fsModule, clonePath);
|
|
145
|
+
return { rotated: false, reason: 'below-threshold' };
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
fsModule.ftruncateSync(fd, 0);
|
|
150
|
+
} catch (error) {
|
|
151
|
+
// HANDLE: the truncate is what makes this a rotation. It failed, so every byte is still in
|
|
152
|
+
// place — the clone is a redundant copy of a file that was never rotated, drop it.
|
|
153
|
+
_rotationLogOnce(`truncate failed for ${base}: ${error?.message || error}`);
|
|
154
|
+
_unlinkQuiet(fsModule, clonePath);
|
|
155
|
+
return { rotated: false, reason: 'below-threshold' };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// From here on the fd's file is empty: the clone is the ONLY copy of the pre-rotation bytes, so
|
|
159
|
+
// a failure below keeps it and never removes it.
|
|
160
|
+
const streamFs = (typeof fsModule.createReadStream === 'function' && typeof fsModule.createWriteStream === 'function') ? fsModule : fs;
|
|
161
|
+
try {
|
|
162
|
+
await pipeline(streamFs.createReadStream(clonePath), zlib.createGzip(), streamFs.createWriteStream(gzPath));
|
|
163
|
+
} catch (error) {
|
|
164
|
+
// REPORT: the un-compressed clone survives as the archive (never lose data), with one line.
|
|
165
|
+
_rotationLogOnce(`gzip failed for ${clonePath}: ${error?.message || error}`);
|
|
166
|
+
_unlinkQuiet(fsModule, gzPath);
|
|
167
|
+
return { rotated: true, reason: 'rotated', archive: clonePath };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
try { fsModule.unlinkSync(clonePath); }
|
|
171
|
+
catch (error) {
|
|
172
|
+
// HANDLE: the .gz is written; a surviving clone costs one extra file, not correctness.
|
|
173
|
+
if (error?.code !== 'ENOENT') _rotationLogOnce(`clone unlink failed for ${clonePath}: ${error?.message || error}`);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
_pruneRotationArchives(logPath, keepCount, fsModule);
|
|
177
|
+
|
|
178
|
+
// The notice goes to the ROTATED stream itself, so the next launchd line lands right after it
|
|
179
|
+
// and the archive never contains its own notice.
|
|
180
|
+
const writer = typeof fsModule.writeSync === 'function' ? fsModule : fs;
|
|
181
|
+
try { writer.writeSync(fd, `[log-rotation] rotated ${base} at ${bytes} bytes -> ${gzPath}\n`); }
|
|
182
|
+
catch (error) {
|
|
183
|
+
// REPORT: the rotation itself succeeded; only the notice is missing.
|
|
184
|
+
_rotationLogOnce(`rotation notice write failed for ${base}: ${error?.message || error}`);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return { rotated: true, reason: 'rotated', archive: gzPath };
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
module.exports = {
|
|
191
|
+
STDIO_ROTATE_MAX_BYTES,
|
|
192
|
+
STDIO_ROTATE_KEEP,
|
|
193
|
+
rotateBoundedLog,
|
|
194
|
+
rotateInheritedStdio,
|
|
195
|
+
};
|
|
@@ -37,6 +37,57 @@ function getMcpAutoConfigSkipReason(env = process.env) {
|
|
|
37
37
|
return '';
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
// WP-5 (§5 R-6/§9 S-21, opencode-lead-and-delegate-model-selection-2026-10-28.html §6.5): the entry
|
|
41
|
+
// an OpenCode LEAD's inline runtime config needs for the Wall-E MCP server.
|
|
42
|
+
//
|
|
43
|
+
// This is deliberately NOT the global client-config writer below: R-6 forbids CTM writing anything
|
|
44
|
+
// under ~/.config/opencode, and OpenCode's inline `OPENCODE_CONFIG_CONTENT` is a per-process carrier,
|
|
45
|
+
// so there is no file to write and no lock to take. The caller (session-create/provider-process.js)
|
|
46
|
+
// merges the returned entry into that inline document for THIS launch only.
|
|
47
|
+
//
|
|
48
|
+
// Only an explicit OPT-OUT (`getMcpAutoConfigSkipReason(env) === 'disabled'`) suppresses the entry.
|
|
49
|
+
// A `transient_instance` (test/dev) does NOT: an inline value writes no file, so suppressing it would
|
|
50
|
+
// only make the test/dev instance -- the one this feature is verified on -- unable to see its own
|
|
51
|
+
// MCP server. The command is the canonical stdio-proxy tuple from Wall-E's own mcp-integration
|
|
52
|
+
// (resolved real node + walle-mcp-stdio.js); CTM never hand-builds the path.
|
|
53
|
+
//
|
|
54
|
+
// NEVER throws: a module that fails to load or a config generator that refuses leaves the launch
|
|
55
|
+
// exactly as it was (null), and the failure is REPORTED to stderr ONCE per process.
|
|
56
|
+
let _opencodeWalleMcpEntryReported = false;
|
|
57
|
+
function _reportOpencodeWalleMcpEntryFailure(detail) {
|
|
58
|
+
if (_opencodeWalleMcpEntryReported) return;
|
|
59
|
+
_opencodeWalleMcpEntryReported = true;
|
|
60
|
+
process.stderr.write('[walle-mcp-auto-config] OpenCode Wall-E MCP entry unavailable: ' + detail + '\n');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function opencodeWalleMcpEntry(env = process.env) {
|
|
64
|
+
if (getMcpAutoConfigSkipReason(env) === 'disabled') return null;
|
|
65
|
+
let integration;
|
|
66
|
+
try {
|
|
67
|
+
integration = loadMcpIntegration();
|
|
68
|
+
} catch (err) {
|
|
69
|
+
_reportOpencodeWalleMcpEntryFailure(String((err && err.message) || err).slice(0, 200));
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
if (!integration || typeof integration.wallEMcpStdioConfig !== 'function') {
|
|
73
|
+
_reportOpencodeWalleMcpEntryFailure('wallEMcpStdioConfig is not exported by wall-e/lib/mcp-integration');
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
let config;
|
|
77
|
+
try {
|
|
78
|
+
config = integration.wallEMcpStdioConfig();
|
|
79
|
+
} catch (err) {
|
|
80
|
+
_reportOpencodeWalleMcpEntryFailure(String((err && err.message) || err).slice(0, 200));
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const command = config && config.command;
|
|
84
|
+
if (typeof command !== 'string' || !command) {
|
|
85
|
+
_reportOpencodeWalleMcpEntryFailure('wallEMcpStdioConfig returned no command');
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return { command, args: Array.isArray(config.args) ? config.args : [] };
|
|
89
|
+
}
|
|
90
|
+
|
|
40
91
|
async function ensureWalleMcpForAgentSession({
|
|
41
92
|
cmd,
|
|
42
93
|
wallePort,
|
|
@@ -52,6 +103,7 @@ async function ensureWalleMcpForAgentSession({
|
|
|
52
103
|
if (lastEnsureAt && now - lastEnsureAt < minIntervalMs) return { skipped: 'throttled' };
|
|
53
104
|
lastEnsureAt = now;
|
|
54
105
|
|
|
106
|
+
let failureMessage = (err) => err.message;
|
|
55
107
|
try {
|
|
56
108
|
// WP-3: ensureMcpIntegrations is async — it holds the SAME
|
|
57
109
|
// client-config lock (wall-e/lib/client-config-lock.js) that Wall-E's own
|
|
@@ -60,7 +112,8 @@ async function ensureWalleMcpForAgentSession({
|
|
|
60
112
|
// loadMcpIntegration() above) rather than re-implementing the write path.
|
|
61
113
|
// A single shared module means a single lock protects both processes —
|
|
62
114
|
// no separate lock protocol needed here.
|
|
63
|
-
const { ensureMcpIntegrations } = loadMcpIntegration();
|
|
115
|
+
const { ensureMcpIntegrations, ensureFailureMessage } = loadMcpIntegration();
|
|
116
|
+
failureMessage = ensureFailureMessage;
|
|
64
117
|
const results = await ensureMcpIntegrations(wallePort, { homeDir: homeDir || env.HOME || process.env.HOME });
|
|
65
118
|
const changed = results.filter(r => r.kind === 'mcp_config' && (r.action === 'added' || r.action === 'updated'));
|
|
66
119
|
const instructionChanged = results.filter(r => r.kind === 'agent_instructions' && (r.action === 'added' || r.action === 'updated'));
|
|
@@ -76,7 +129,7 @@ async function ensureWalleMcpForAgentSession({
|
|
|
76
129
|
}
|
|
77
130
|
return { results, changed: changed.length, instructionChanged: instructionChanged.length, errors: errors.length };
|
|
78
131
|
} catch (err) {
|
|
79
|
-
logger.warn(`[ctm] Wall-E MCP auto-config failed: ${err
|
|
132
|
+
logger.warn(`[ctm] Wall-E MCP auto-config failed: ${failureMessage(err)}`);
|
|
80
133
|
return { error: err.message };
|
|
81
134
|
}
|
|
82
135
|
}
|
|
@@ -87,6 +140,7 @@ function _resetWalleMcpAutoConfigState() {
|
|
|
87
140
|
|
|
88
141
|
module.exports = {
|
|
89
142
|
ensureWalleMcpForAgentSession,
|
|
143
|
+
opencodeWalleMcpEntry,
|
|
90
144
|
getMcpAutoConfigSkipReason,
|
|
91
145
|
isMcpAutoConfigDisabled,
|
|
92
146
|
isMcpCapableAgentCommand,
|