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
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// WP-0 (docs/shared-memory-every-machine-2026-10-31.html §5 D-4, §6.2): source-derived
|
|
4
|
+
// identity. Two machines that ingest the SAME source item must mint the SAME row id —
|
|
5
|
+
// dedupe on (source, source_id) is a unique index (brain.js:917-924), so with random
|
|
6
|
+
// uuids the second machine's copy is silently dropped on apply while every knowledge row
|
|
7
|
+
// naming the first machine's id points at nothing (measured: one iMessage under two ids,
|
|
8
|
+
// design §1.3/§2 I-3). A memory therefore derives its id from (source, source_id) and a
|
|
9
|
+
// newly created entity from (lower(canonical_name), entity_type).
|
|
10
|
+
//
|
|
11
|
+
// RFC 9562 §5.5 UUIDv5 over node:crypto's sha1 — no `uuid` package is installed in this
|
|
12
|
+
// repo and this is the whole of what is needed from one.
|
|
13
|
+
//
|
|
14
|
+
// The two namespace constants are FIXED FOREVER. Changing one forks the identity space of
|
|
15
|
+
// every replica: a machine still running the old constant keeps minting ids the others can
|
|
16
|
+
// never dedupe against, which is exactly the divergence this file exists to end.
|
|
17
|
+
// tests/deterministic-id.test.js pins the literals.
|
|
18
|
+
|
|
19
|
+
const crypto = require('node:crypto');
|
|
20
|
+
|
|
21
|
+
const MEMORY_NS = '6f1c2b7e-3d4a-5e8f-9a0b-1c2d3e4f5a6b';
|
|
22
|
+
const ENTITY_NS = '9b8a7c6d-5e4f-5a3b-8c2d-1e0f9a8b7c6d';
|
|
23
|
+
|
|
24
|
+
// namespace: a UUID string (its 16 bytes are the hash prefix). name: any value — it is
|
|
25
|
+
// UTF-8 encoded, so callers can pass a NUL-joined composite without escaping.
|
|
26
|
+
function uuidv5(namespace, name) {
|
|
27
|
+
const ns = Buffer.from(String(namespace).replace(/-/g, ''), 'hex');
|
|
28
|
+
const hash = crypto.createHash('sha1')
|
|
29
|
+
.update(ns)
|
|
30
|
+
.update(Buffer.from(String(name), 'utf8'))
|
|
31
|
+
.digest();
|
|
32
|
+
// Set the version nibble (5) and the RFC 4122 variant (10xx), then format 8-4-4-4-12.
|
|
33
|
+
hash[6] = (hash[6] & 0x0f) | 0x50;
|
|
34
|
+
hash[8] = (hash[8] & 0x3f) | 0x80;
|
|
35
|
+
const h = hash.subarray(0, 16).toString('hex');
|
|
36
|
+
return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20, 32)}`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The NUL separator makes the composite unambiguous: ("a", "b\0c") and ("a\0b", "c") hash
|
|
40
|
+
// differently, so two different (source, source_id) pairs can never collide by concatenation.
|
|
41
|
+
function deterministicMemoryId(source, sourceId) {
|
|
42
|
+
return uuidv5(MEMORY_NS, `${source}\u0000${sourceId}`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// The name is lower-cased and the type is optional so that the two producers that spell the
|
|
46
|
+
// same entity differently ("Ada Example"/"ada example", missing entity_type) converge on one row.
|
|
47
|
+
function deterministicEntityId(canonicalName, entityType) {
|
|
48
|
+
return uuidv5(ENTITY_NS, `${String(canonicalName).toLowerCase()}\u0000${entityType || ''}`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
module.exports = { uuidv5, deterministicMemoryId, deterministicEntityId, MEMORY_NS, ENTITY_NS };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const { randomUUID: uuidv4 } = require('node:crypto');
|
|
3
|
+
const { randomUUID: uuidv4 } = require('node:crypto'); const { deterministicMemoryId } = require('./deterministic-id');
|
|
4
4
|
const conversationProjectionV2 = require('../memory/conversation-projection-v2');
|
|
5
5
|
const { EXTRACTABLE_PREDICATE, EXTRACTABLE_PARAMS } = require('./knowledge-categories');
|
|
6
6
|
|
|
@@ -64,7 +64,7 @@ function insertMemory(mem) {
|
|
|
64
64
|
const _effectiveRaw = mem.content_raw || mem.content;
|
|
65
65
|
const _rawToStore = _effectiveRaw === cleanContent ? null : _effectiveRaw;
|
|
66
66
|
|
|
67
|
-
const id = uuidv4();
|
|
67
|
+
const id = mem.source_id ? deterministicMemoryId(mem.source, mem.source_id) : uuidv4(); // shared-memory D-4: same item, same id on every machine
|
|
68
68
|
const ingestedAt = String(mem.ingested_at || new Date().toISOString());
|
|
69
69
|
const triggerHint = _memoryRecallHint(mem.metadata);
|
|
70
70
|
// surface-redesign WP-0: occurred_at_ms is the sortable form of `timestamp` (which
|
|
@@ -2517,14 +2517,13 @@ const MIGRATIONS = {
|
|
|
2517
2517
|
97: (d) => {
|
|
2518
2518
|
d.exec(DROP_RETIRED_TABLES_SQL);
|
|
2519
2519
|
},
|
|
2520
|
-
// Migration 98 (multi-machine WP-5):
|
|
2521
|
-
// brain_sync_applied + brain_row_clock and the eight capture triggers — see
|
|
2520
|
+
// Migration 98 (multi-machine WP-5): brain_row_clock and the capture triggers — see
|
|
2522
2521
|
// brain/schema.js's ensureBrainSyncSchema for the why (R-10 LWW clock, R-11
|
|
2523
2522
|
// host-local tables excluded, the brain_sync_applying sentinel) and why the DDL
|
|
2524
2523
|
// text lives in schema.js: createTables() (the runner baseline) executes the same
|
|
2525
2524
|
// string, the ladder never runs on a fresh DB, and reaching back here from
|
|
2526
2525
|
// schema.js would make the two modules a require cycle (round3 walle-scc-size).
|
|
2527
|
-
// Additive and idempotent.
|
|
2526
|
+
// Additive and idempotent. Since WP-6 (105) this body creates brain_row_clock alone.
|
|
2528
2527
|
98: (d) => { require('./schema').ensureBrainSyncSchema(d); },
|
|
2529
2528
|
// Migration 99 (surface-redesign follow-up FU-6, D-26 tail): retire the last
|
|
2530
2529
|
// remnant of the deleted task engine. `task_events` is the event child of
|
|
@@ -2552,8 +2551,44 @@ const MIGRATIONS = {
|
|
|
2552
2551
|
// same text, same reason (tests-integration/migration-baseline-parity.test.js). Additive and
|
|
2553
2552
|
// idempotent: the ALTERs are `PRAGMA table_info`-guarded, the index is `IF NOT EXISTS`.
|
|
2554
2553
|
101: (d) => { require('./helper-rules-schema').ensureHelperRulesSchemaV2(d); },
|
|
2554
|
+
// Migration 102 (opencode-lead-and-delegate-model-selection-2026-10-28.html §6.4, §8 WP-4, S-13):
|
|
2555
|
+
// delegate_model_prefs.scope_key admits `default:opencode`, the per-agent default rung of an
|
|
2556
|
+
// OpenCode lead's delegate ladder. SQLite cannot ALTER a CHECK, so an EXISTING table is REBUILT
|
|
2557
|
+
// (see the helper below): every column and every row, one transaction. model-identity-migration.js
|
|
2558
|
+
// carries the widened CHECK for a fresh brain (the createTaskLedgerTables baseline); this is the
|
|
2559
|
+
// forward step a database created before it needs. Idempotent by inspection of the SCHEMA, never
|
|
2560
|
+
// by the version counter, so both a re-run and ensureSchema's invariant rewind are no-ops.
|
|
2561
|
+
102: (d) => { widenDelegateModelPrefsScope(d, 102, ['claude', 'codex'], 'opencode'); },
|
|
2562
|
+
// Migration 103 (deepseek-harness-acp-agent-2026-10-28.html WP-10, D-24): same rebuild, admits `default:dsh`.
|
|
2563
|
+
103: (d) => { widenDelegateModelPrefsScope(d, 103, ['claude', 'codex', 'opencode'], 'dsh'); },
|
|
2564
|
+
104: (d) => { require('./schema').ensureBrainSyncSchemaV2(d); }, // shared-memory WP-0 §6.1: v2 clock (origin_seq/deleted, 12 triggers, host-local vv tables); idempotent by inspection
|
|
2565
|
+
105: (d) => { require('./schema').ensureBrainSyncSchemaV3(d); }, // shared-memory WP-6b: drop the v1 outbox tables + the outbox INSERT from the 8 ai/au triggers (idempotent by inspection)
|
|
2555
2566
|
};
|
|
2556
2567
|
|
|
2568
|
+
// Migrations 102/103's body: rebuild from the table's OWN stored DDL with only the scope_key CHECK
|
|
2569
|
+
// widened, so nothing can drift. Absent or already-widened table -> 0 and no DDL; an unknown DDL throws.
|
|
2570
|
+
function widenDelegateModelPrefsScope(d, version, narrow, agent) {
|
|
2571
|
+
const row = d.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'delegate_model_prefs'").get();
|
|
2572
|
+
if (!row || typeof row.sql !== 'string') return 0;
|
|
2573
|
+
// Probe the WIDENED literal ('default:<agent>'): a test for `'<agent>'` never matches (a colon precedes it).
|
|
2574
|
+
if (row.sql.includes(`'default:${agent}'`)) return 0;
|
|
2575
|
+
const keys = narrow.map((name) => `'default:${name}'`);
|
|
2576
|
+
const widened = row.sql.replace(
|
|
2577
|
+
new RegExp(`scope_key\\s+IN\\s*\\(\\s*${keys.join('\\s*,\\s*')}\\s*\\)`),
|
|
2578
|
+
`scope_key IN (${[...keys, `'default:${agent}'`].join(',')})`,
|
|
2579
|
+
);
|
|
2580
|
+
if (widened === row.sql) throw new Error(`migration ${version}: delegate_model_prefs.scope_key has no ${narrow.join('/')} CHECK to widen`);
|
|
2581
|
+
const staging = `delegate_model_prefs__v${version - 1}`;
|
|
2582
|
+
// The canonical 12-step SQLite rebuild: rename, recreate, copy every row and column, drop.
|
|
2583
|
+
d.transaction(() => {
|
|
2584
|
+
d.exec(`ALTER TABLE delegate_model_prefs RENAME TO ${staging}`);
|
|
2585
|
+
d.exec(widened);
|
|
2586
|
+
d.exec(`INSERT INTO delegate_model_prefs SELECT * FROM ${staging}`);
|
|
2587
|
+
d.exec(`DROP TABLE ${staging}`);
|
|
2588
|
+
})();
|
|
2589
|
+
return 1;
|
|
2590
|
+
}
|
|
2591
|
+
|
|
2557
2592
|
// --- Migration 91 (surface-redesign WP-3) ---------------------------------
|
|
2558
2593
|
// The Jobs record: ONE table pair replacing the two legacy engines. Column
|
|
2559
2594
|
// notes from the design doc (§6.1), kept here rather than as SQL comments so
|
|
@@ -2947,9 +2982,8 @@ assertMigrationRegistry('walle', MIGRATIONS);
|
|
|
2947
2982
|
}
|
|
2948
2983
|
|
|
2949
2984
|
// The WP-5 capture DDL is exported by brain/schema.js as BRAIN_SYNC_DDL /
|
|
2950
|
-
// ensureBrainSyncSchema; the ladder reaches
|
|
2951
|
-
// this module never requires schema.js at load time (
|
|
2952
|
-
// would otherwise be the only require cycle in the wall-e graph).
|
|
2985
|
+
// ensureBrainSyncSchema (98) / V2 (104) / V3 (105); the ladder reaches them lazily above so
|
|
2986
|
+
// this module never requires schema.js at load time (that would be the only require cycle in wall-e).
|
|
2953
2987
|
|
|
2954
2988
|
module.exports = createMigrationsModule;
|
|
2955
2989
|
// Statics on the factory, for callers that hold the module rather than a built
|
|
@@ -74,7 +74,7 @@ function ensureModelIdentitySchema(d) {
|
|
|
74
74
|
PRIMARY KEY (identity_id, harness)
|
|
75
75
|
);
|
|
76
76
|
CREATE TABLE IF NOT EXISTS delegate_model_prefs (
|
|
77
|
-
scope_key TEXT PRIMARY KEY CHECK (scope_key IN ('default:claude','default:codex') OR scope_key LIKE 'session:_%'),
|
|
77
|
+
scope_key TEXT PRIMARY KEY CHECK (scope_key IN ('default:claude','default:codex','default:opencode','default:dsh') OR scope_key LIKE 'session:_%'),
|
|
78
78
|
lane TEXT NOT NULL CHECK (lane IN ('native','routed','inherit')),
|
|
79
79
|
model TEXT NOT NULL DEFAULT '',
|
|
80
80
|
identity_id TEXT NOT NULL DEFAULT '',
|
|
@@ -29,13 +29,28 @@ const BRAIN_CALL_WHITELIST = new Set([
|
|
|
29
29
|
// entry, not a bare brain.js export — see that map below and
|
|
30
30
|
// wall-e/loops/brain-custom-writes.js for what it does and why.
|
|
31
31
|
'commitThinkExtraction',
|
|
32
|
-
//
|
|
33
|
-
// page
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
'
|
|
37
|
-
//
|
|
38
|
-
'
|
|
32
|
+
// WP-0 §6.3: the v2 clock seed walk (wall-e/brain/brain-sync-store.js seedClockPage) — one
|
|
33
|
+
// bounded page per call, on the owner's connection, driven by the brain-clock-seed job. Same
|
|
34
|
+
// CUSTOM_BRAIN_CALLS pattern as the other v2 sync ops — see loops/brain-custom-writes.js.
|
|
35
|
+
// (WP-6/migration 104 retired the v1 trio brainSyncOutbox/brainSyncApplyEntries/brainSyncPrune.)
|
|
36
|
+
'brainSyncClockSeed',
|
|
37
|
+
// WP-1 §6.4: the v2 change feed (wall-e/brain/brain-sync-v2.js, served by the
|
|
38
|
+
// /api/walle/sync/v2/* routes). The apply is the one that must run on the OWNER's connection —
|
|
39
|
+
// it opens an IMMEDIATE transaction with the connection-scoped TEMP sentinel the capture
|
|
40
|
+
// triggers test; the rest are reads and one small hub-bookkeeping write.
|
|
41
|
+
'brainSyncV2Vector',
|
|
42
|
+
'brainSyncV2Changes',
|
|
43
|
+
'brainSyncV2Apply',
|
|
44
|
+
'brainSyncV2MemberVector',
|
|
45
|
+
'brainSyncV2PruneTombstones',
|
|
46
|
+
'brainSyncV2Digest',
|
|
47
|
+
// WP-4 §6.7: the join trio + the import job's step. The snapshot runs where the backup API
|
|
48
|
+
// runs (the owner's connection); the import records and then imports only the four replicated
|
|
49
|
+
// tables on the owner, with the sentinel on; the step is what the brain-join-import job drives.
|
|
50
|
+
'brainSyncV2JoinSnapshot',
|
|
51
|
+
'brainSyncV2JoinImport',
|
|
52
|
+
'brainSyncV2JoinStatus',
|
|
53
|
+
'brainSyncV2JoinStep',
|
|
39
54
|
// WP-2b: same CUSTOM_BRAIN_CALLS pattern for loops/backfill.js — three
|
|
40
55
|
// per-row transaction batches, see brain-custom-writes.js.
|
|
41
56
|
'backfillClassifyBatch',
|
|
@@ -151,6 +166,7 @@ const BRAIN_CALL_WHITELIST = new Set([
|
|
|
151
166
|
'setKv',
|
|
152
167
|
'setCurrentLocation',
|
|
153
168
|
'setBackupDir',
|
|
169
|
+
'setBackupRetentionDays',
|
|
154
170
|
'setDefaultProviderSelection',
|
|
155
171
|
'setModelDefault',
|
|
156
172
|
'setTaskModelDefault',
|
|
@@ -1173,13 +1173,15 @@ function createTables() {
|
|
|
1173
1173
|
ensureConnectionTables(db); // WP-5a: same constraint — every exec must precede ensureMemorySourceUniqueIndexOnly()
|
|
1174
1174
|
ensureSlackCursorTables(db); // WP-6a: same constraint — every exec must precede ensureMemorySourceUniqueIndexOnly()
|
|
1175
1175
|
ensureChatThreadTables(db); // WP-7a: same constraint — every exec must precede ensureMemorySourceUniqueIndexOnly()
|
|
1176
|
-
// WP-5 (multi-machine brain sync):
|
|
1177
|
-
//
|
|
1178
|
-
//
|
|
1179
|
-
//
|
|
1180
|
-
//
|
|
1176
|
+
// WP-5 (multi-machine brain sync): brain_row_clock + the 12 capture triggers, now at v2
|
|
1177
|
+
// (origin_seq/deleted, the four AFTER DELETE triggers — WP-0) and with the v1 outbox
|
|
1178
|
+
// transport retired (migration 105, WP-6). Migration 98 owns the clock DDL, 104 the v2
|
|
1179
|
+
// upgrade and 105 the v1 teardown for existing databases, but the ladder never runs on a
|
|
1180
|
+
// fresh install (baseline()+stamp) — and createTables() also runs unconditionally on every
|
|
1181
|
+
// non-fresh boot — so the baseline has to carry all three too (T-2 AC-2a parity). It is
|
|
1181
1182
|
// part of this function's OWN DDL, so it runs before the delegated helpers.
|
|
1182
|
-
|
|
1183
|
+
ensureBrainSyncSchemaV2(db);
|
|
1184
|
+
ensureBrainSyncSchemaV3(db);
|
|
1183
1185
|
ensureMemorySourceUniqueIndexOnly(db);
|
|
1184
1186
|
createTaskLedgerTables(db);
|
|
1185
1187
|
}
|
|
@@ -1379,12 +1381,10 @@ createSchemaModule.ensureTurnLedgerSchema = ensureTurnLedgerSchema;
|
|
|
1379
1381
|
module.exports = createSchemaModule;
|
|
1380
1382
|
|
|
1381
1383
|
// Migration 89 (multi-machine WP-5, design doc §6.6 / R-10 / R-11): the brain
|
|
1382
|
-
// outbox.
|
|
1383
|
-
//
|
|
1384
|
-
//
|
|
1385
|
-
//
|
|
1386
|
-
// `brain_sync_applying` for the duration of a batch and every trigger skips while
|
|
1387
|
-
// it exists, so an applied row never re-enqueues.
|
|
1384
|
+
// outbox. WP-6 (migration 105) retired the outbox transport — the three v1 tables
|
|
1385
|
+
// (brain_outbox / brain_sync_hwm / brain_sync_applied) and the ai/au outbox INSERT
|
|
1386
|
+
// are gone — but this module still owns the one object both paths need: the LWW clock,
|
|
1387
|
+
// and the text below is what createTables() and migration 98 execute.
|
|
1388
1388
|
//
|
|
1389
1389
|
// The DDL text lives in schema.js (a sanctioned DDL file) because createTables()
|
|
1390
1390
|
// executes it on the fresh path; a brain/ module would mean schema.js ->
|
|
@@ -1392,62 +1392,29 @@ module.exports = createSchemaModule;
|
|
|
1392
1392
|
//
|
|
1393
1393
|
// LWW clock: only `entities` has an `updated_at` column, so instead of adding an
|
|
1394
1394
|
// `updated_at` to memories/knowledge/people (which every existing writer and the
|
|
1395
|
-
// PG shadow would then have to stamp) the triggers
|
|
1395
|
+
// PG shadow would then have to stamp) the capture triggers maintain
|
|
1396
1396
|
// `brain_row_clock(table_name, row_id, updated_at, origin_instance_id)` — one
|
|
1397
1397
|
// clock row per replicated row, the WP-5 brief's option (b); '' = this host.
|
|
1398
|
+
// The eight v1 capture triggers and the `brain_sync_applying` sentinel they tested lived
|
|
1399
|
+
// here too; the capture triggers are now the 12 v2 ones (brain/brain-sync-v2-schema.js),
|
|
1400
|
+
// which also own the sentinel's test.
|
|
1398
1401
|
//
|
|
1399
1402
|
// Host-local tables (loop_checkpoints, channel_outbound_locks, kv_store, owner,
|
|
1400
1403
|
// activity_log, runtime_events, *_fts, memory_index, embeddings) get NO trigger:
|
|
1401
1404
|
// R-11 is enforced by construction, not by a filter.
|
|
1402
|
-
// Built once per process: the same string is executed by migration
|
|
1405
|
+
// Built once per process: the same string is executed by migration 98 (existing
|
|
1403
1406
|
// databases, via the ladder) AND by createTables() (the runner baseline — fresh
|
|
1404
1407
|
// installs run ZERO migration bodies, and every non-fresh boot re-runs
|
|
1405
|
-
// createTables(), so this is what makes the
|
|
1406
|
-
// see tests-integration/migration-baseline-parity.test.js T-2 AC-2a).
|
|
1408
|
+
// createTables(), so this is what makes the clock exist on both paths;
|
|
1409
|
+
// see tests-integration/migration-baseline-parity.test.js T-2 AC-2a). v2's
|
|
1410
|
+
// applyBrainSyncSchemaV2 indexes brain_row_clock, so it must be created first.
|
|
1411
|
+
//
|
|
1412
|
+
// WP-6 (migration 105) is why this string no longer creates brain_outbox /
|
|
1413
|
+
// brain_sync_hwm / brain_sync_applied and no longer installs the eight v1 capture
|
|
1414
|
+
// triggers: a fresh brain must never carry either. brain_row_clock's CREATE TABLE text
|
|
1415
|
+
// is deliberately unchanged, so fresh and migrated sqlite_master stay byte-equal.
|
|
1407
1416
|
function buildBrainSyncDdl() {
|
|
1408
|
-
|
|
1409
|
-
// objects in database temp") and a bare sqlite_temp_master resolves to
|
|
1410
|
-
// main.sqlite_temp_master; pragma_table_list does list temp tables.
|
|
1411
|
-
const skipWhen = "NOT EXISTS (SELECT 1 FROM pragma_table_list WHERE name = 'brain_sync_applying')";
|
|
1412
|
-
// The triggers reference NO column but `new.id`: the payload is built at READ time from the
|
|
1413
|
-
// live row (wall-e/http/sync-api.js listBrainOutbox via brain/brain-sync-store.js), so the
|
|
1414
|
-
// outbox never holds a second copy of a memory's bytes (the prompt purge sanitizer stays
|
|
1415
|
-
// exact) and a column added or dropped by a later migration never breaks a trigger
|
|
1416
|
-
// (`ALTER TABLE ... DROP COLUMN` fails while any trigger names the column). The UPDATE
|
|
1417
|
-
// triggers watch only columns present in the earliest baseline of each table — never one a
|
|
1418
|
-
// migration added (memories.consolidated_at / trigger_hint / embed_failed_count,
|
|
1419
|
-
// knowledge.metadata_json) — and never the read-stamp columns (access_count,
|
|
1420
|
-
// last_accessed), so a recall is not a replication event.
|
|
1421
|
-
const watchColumns = {
|
|
1422
|
-
memories: ['content', 'content_raw', 'subject', 'metadata', 'importance', 'archived_at'],
|
|
1423
|
-
knowledge: ['category', 'subject', 'predicate', 'object', 'confidence', 'source_memory_ids', 'status', 'superseded_by', 'valid_from', 'valid_to', 'last_confirmed', 'times_confirmed'],
|
|
1424
|
-
entities: ['canonical_name', 'entity_type', 'aliases', 'properties', 'updated_at'],
|
|
1425
|
-
people: ['name', 'aliases', 'identities', 'relationship', 'trust_level', 'trust_reason', 'interaction_freq', 'last_interaction', 'notes'],
|
|
1426
|
-
};
|
|
1427
|
-
let sql = `
|
|
1428
|
-
CREATE TABLE IF NOT EXISTS brain_outbox (
|
|
1429
|
-
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1430
|
-
operation_id TEXT NOT NULL UNIQUE,
|
|
1431
|
-
table_name TEXT NOT NULL CHECK (table_name IN ('memories', 'knowledge', 'entities', 'people')),
|
|
1432
|
-
row_id TEXT NOT NULL,
|
|
1433
|
-
op TEXT NOT NULL CHECK (op IN ('upsert', 'delete')),
|
|
1434
|
-
updated_at TEXT NOT NULL,
|
|
1435
|
-
origin_instance_id TEXT NOT NULL DEFAULT '',
|
|
1436
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
1437
|
-
delivered_at TEXT NOT NULL DEFAULT ''
|
|
1438
|
-
);
|
|
1439
|
-
CREATE INDEX IF NOT EXISTS idx_brain_outbox_seq ON brain_outbox(seq);
|
|
1440
|
-
CREATE TABLE IF NOT EXISTS brain_sync_hwm (
|
|
1441
|
-
source_instance_id TEXT PRIMARY KEY,
|
|
1442
|
-
last_seq INTEGER NOT NULL DEFAULT 0,
|
|
1443
|
-
updated_at TEXT NOT NULL
|
|
1444
|
-
);
|
|
1445
|
-
CREATE TABLE IF NOT EXISTS brain_sync_applied (
|
|
1446
|
-
source_instance_id TEXT NOT NULL,
|
|
1447
|
-
operation_id TEXT NOT NULL,
|
|
1448
|
-
applied_at TEXT NOT NULL,
|
|
1449
|
-
PRIMARY KEY (source_instance_id, operation_id)
|
|
1450
|
-
);
|
|
1417
|
+
return `
|
|
1451
1418
|
CREATE TABLE IF NOT EXISTS brain_row_clock (
|
|
1452
1419
|
table_name TEXT NOT NULL,
|
|
1453
1420
|
row_id TEXT NOT NULL,
|
|
@@ -1456,41 +1423,32 @@ function buildBrainSyncDdl() {
|
|
|
1456
1423
|
PRIMARY KEY (table_name, row_id)
|
|
1457
1424
|
);
|
|
1458
1425
|
`;
|
|
1459
|
-
// origin_instance_id '' in the clock and the outbox means "this host": a trigger cannot know
|
|
1460
|
-
// the instance id cheaply, so the reader (and the LWW compare) substitutes the local id.
|
|
1461
|
-
for (const table of Object.keys(watchColumns)) {
|
|
1462
|
-
const watch = watchColumns[table].map((column) => `"${column}"`).join(', ');
|
|
1463
|
-
const body = `
|
|
1464
|
-
INSERT INTO brain_row_clock (table_name, row_id, updated_at, origin_instance_id)
|
|
1465
|
-
VALUES ('${table}', new.id, strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), '')
|
|
1466
|
-
ON CONFLICT(table_name, row_id) DO UPDATE SET
|
|
1467
|
-
updated_at = excluded.updated_at,
|
|
1468
|
-
origin_instance_id = '';
|
|
1469
|
-
INSERT INTO brain_outbox (operation_id, table_name, row_id, op, updated_at)
|
|
1470
|
-
VALUES (lower(hex(randomblob(16))), '${table}', new.id, 'upsert',
|
|
1471
|
-
(SELECT updated_at FROM brain_row_clock WHERE table_name = '${table}' AND row_id = new.id));`;
|
|
1472
|
-
sql += `
|
|
1473
|
-
CREATE TRIGGER IF NOT EXISTS brain_outbox_${table}_ai AFTER INSERT ON ${table}
|
|
1474
|
-
WHEN ${skipWhen}
|
|
1475
|
-
BEGIN${body}
|
|
1476
|
-
END;
|
|
1477
|
-
CREATE TRIGGER IF NOT EXISTS brain_outbox_${table}_au AFTER UPDATE OF ${watch} ON ${table}
|
|
1478
|
-
WHEN ${skipWhen}
|
|
1479
|
-
BEGIN${body}
|
|
1480
|
-
END;
|
|
1481
|
-
`;
|
|
1482
|
-
}
|
|
1483
|
-
return sql;
|
|
1484
1426
|
}
|
|
1485
1427
|
|
|
1486
1428
|
const BRAIN_SYNC_DDL = buildBrainSyncDdl();
|
|
1487
1429
|
|
|
1488
|
-
// Migration
|
|
1430
|
+
// Migration 98's body, and the reason the DDL above is a plain string with two
|
|
1489
1431
|
// callers rather than an exec-in-place: the ladder never runs on a fresh DB.
|
|
1490
1432
|
function ensureBrainSyncSchema(d) {
|
|
1491
1433
|
d.exec(BRAIN_SYNC_DDL);
|
|
1492
1434
|
}
|
|
1493
1435
|
|
|
1436
|
+
// Migration 104's body (WP-0, shared-memory-every-machine-2026-10-31.html §6.1): the v1
|
|
1437
|
+
// brain_row_clock, then the v2 clock from brain/brain-sync-v2-schema.js. Idempotent by
|
|
1438
|
+
// inspection; createTables() runs it every boot on both paths.
|
|
1439
|
+
function ensureBrainSyncSchemaV2(d) {
|
|
1440
|
+
d.exec(BRAIN_SYNC_DDL);
|
|
1441
|
+
require('./brain-sync-v2-schema').applyBrainSyncSchemaV2(d);
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
// Migration 105's body (WP-6, shared-memory-every-machine-2026-10-31.html §11): retire the
|
|
1445
|
+
// v1 outbox transport — the three v1 tables and the outbox INSERT the ai/au capture bodies
|
|
1446
|
+
// appended. createTables() runs it every boot, so a fresh brain never carries them; an
|
|
1447
|
+
// existing v104 brain drops them here. v2 behaviour is untouched.
|
|
1448
|
+
function ensureBrainSyncSchemaV3(d) {
|
|
1449
|
+
require('./brain-sync-v2-schema').applyBrainSyncSchemaV3(d);
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1494
1452
|
// WP-5 §6.6: the connection-scoped sentinel that silences the eight capture
|
|
1495
1453
|
// triggers for the duration of one apply batch. TEMP, so no other connection can
|
|
1496
1454
|
// see it and it vanishes with the connection (an apply can never suppress capture
|
|
@@ -1509,5 +1467,7 @@ function dropBrainSyncSentinel(d) {
|
|
|
1509
1467
|
|
|
1510
1468
|
createSchemaModule.BRAIN_SYNC_DDL = BRAIN_SYNC_DDL;
|
|
1511
1469
|
createSchemaModule.ensureBrainSyncSchema = ensureBrainSyncSchema;
|
|
1470
|
+
createSchemaModule.ensureBrainSyncSchemaV2 = ensureBrainSyncSchemaV2;
|
|
1471
|
+
createSchemaModule.ensureBrainSyncSchemaV3 = ensureBrainSyncSchemaV3;
|
|
1512
1472
|
createSchemaModule.createBrainSyncSentinel = createBrainSyncSentinel;
|
|
1513
1473
|
createSchemaModule.dropBrainSyncSentinel = dropBrainSyncSentinel;
|