create-walle 0.9.21 → 0.9.23
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 +27 -5
- package/package.json +2 -2
- package/template/CLAUDE.md +2 -2
- package/template/LICENSE +1 -1
- package/template/bin/ctm-dev-cleanup.js +24 -3
- package/template/bin/ctm-launch.sh +13 -0
- package/template/bin/dev.sh +156 -18
- package/template/bin/node-bin.sh +84 -0
- package/template/bin/pin-node.sh +51 -0
- package/template/claude-task-manager/api-prompts.js +1203 -182
- package/template/claude-task-manager/api-reviews.js +109 -15
- package/template/claude-task-manager/approval-agent.js +1360 -280
- package/template/claude-task-manager/bin/restart-ctm.sh +64 -23
- package/template/claude-task-manager/bin/storage-migration-supervisor.js +338 -0
- package/template/claude-task-manager/db.js +4417 -295
- package/template/claude-task-manager/docs/app-update-refresh-protocol.md +69 -0
- package/template/claude-task-manager/docs/approval-ai-refinement.md +138 -0
- package/template/claude-task-manager/docs/approval-rescue-loop.md +74 -0
- package/template/claude-task-manager/docs/codex-operational-warning-health.md +107 -0
- package/template/claude-task-manager/docs/codex-resume-state-guard-design.md +17 -12
- package/template/claude-task-manager/docs/codex-terminal-render-controller-handoff.md +311 -0
- package/template/claude-task-manager/docs/coding-agent-hooks-architecture.md +418 -0
- package/template/claude-task-manager/docs/conversation-import-freshness.md +20 -0
- package/template/claude-task-manager/docs/google-workspace-auth-health.md +77 -0
- package/template/claude-task-manager/docs/image-paste-ux.md +13 -0
- package/template/claude-task-manager/docs/ipad-web-preview.md +88 -0
- package/template/claude-task-manager/docs/main-loop-offload-architecture.md +66 -0
- package/template/claude-task-manager/docs/microsoft-dev-tunnel-phone-access-design.md +274 -519
- package/template/claude-task-manager/docs/mobile-live-streaming.md +27 -5
- package/template/claude-task-manager/docs/mobile-remote-submission-lifecycle.md +69 -0
- package/template/claude-task-manager/docs/phone-access-design.md +53 -15
- package/template/claude-task-manager/docs/phone-passkey-identity.md +122 -0
- package/template/claude-task-manager/docs/phone-setup.md +3 -0
- package/template/claude-task-manager/docs/prompt-editing-tree-design.md +25 -1
- package/template/claude-task-manager/docs/remote-desktop-access-design.md +268 -0
- package/template/claude-task-manager/docs/restart-lifecycle-architecture.md +95 -0
- package/template/claude-task-manager/docs/runtime-work-control-plane.md +53 -0
- package/template/claude-task-manager/docs/session-interactive-wait-surfaces.md +38 -0
- package/template/claude-task-manager/docs/session-needs-you-dismissal.md +84 -0
- package/template/claude-task-manager/docs/session-render-state-management-design.md +91 -3
- package/template/claude-task-manager/docs/session-standup-command-center-design.md +25 -1
- package/template/claude-task-manager/docs/session-title-authority.md +32 -0
- package/template/claude-task-manager/docs/session-workspace-binding.md +33 -0
- package/template/claude-task-manager/docs/skill-intent-resolution-design.md +72 -0
- package/template/claude-task-manager/docs/walle-mcp-supervisor-health.md +86 -0
- package/template/claude-task-manager/docs/walle-relay-phone-access-design.md +24 -15
- package/template/claude-task-manager/docs/walle-session-history-hydration.md +114 -0
- package/template/claude-task-manager/docs/walle-session-input-queue.md +104 -0
- package/template/claude-task-manager/docs/walle-session-model-catalog.md +90 -0
- package/template/claude-task-manager/docs/walle-session-model-preferences.md +15 -6
- package/template/claude-task-manager/git-utils.js +897 -27
- package/template/claude-task-manager/lib/agent-capabilities.js +33 -0
- package/template/claude-task-manager/lib/agent-cli-cache.js +37 -7
- package/template/claude-task-manager/lib/agent-hooks-installer.js +26 -2
- package/template/claude-task-manager/lib/agent-presets.js +17 -1
- package/template/claude-task-manager/lib/all-sessions-query.js +108 -0
- package/template/claude-task-manager/lib/approval-ai-refinement.js +488 -0
- package/template/claude-task-manager/lib/approval-self-adapt.js +168 -0
- package/template/claude-task-manager/lib/async-semaphore.js +44 -0
- package/template/claude-task-manager/lib/auth-context.js +5 -0
- package/template/claude-task-manager/lib/auth-rate-limit.js +47 -4
- package/template/claude-task-manager/lib/auth-rules.js +29 -2
- package/template/claude-task-manager/lib/auto-approval-verifier.js +129 -16
- package/template/claude-task-manager/lib/background-llm.js +144 -17
- package/template/claude-task-manager/lib/branch-inventory.js +212 -0
- package/template/claude-task-manager/lib/claude-desktop-sessions.js +15 -3
- package/template/claude-task-manager/lib/coalesce-sync-frames.js +151 -0
- package/template/claude-task-manager/lib/codex-launch-health.js +762 -0
- package/template/claude-task-manager/lib/codex-transcript-pager.js +51 -0
- package/template/claude-task-manager/lib/codex-zst.js +124 -0
- package/template/claude-task-manager/lib/coding-agent-models.js +233 -30
- package/template/claude-task-manager/lib/connection-health.js +232 -0
- package/template/claude-task-manager/lib/conversation-blob-parser.js +42 -0
- package/template/claude-task-manager/lib/conversation-tail-merge.js +89 -26
- package/template/claude-task-manager/lib/ctm-session-context-api.js +39 -10
- package/template/claude-task-manager/lib/cursor-conversation-store.js +354 -0
- package/template/claude-task-manager/lib/db-owner-worker-client.js +315 -0
- package/template/claude-task-manager/lib/document-review.js +141 -6
- package/template/claude-task-manager/lib/escalation-review.js +152 -0
- package/template/claude-task-manager/lib/graceful-shutdown.js +159 -0
- package/template/claude-task-manager/lib/headless-term-service.js +678 -0
- package/template/claude-task-manager/lib/heavy-worker-fallback.js +38 -0
- package/template/claude-task-manager/lib/jsonl-conversation-parser.js +542 -0
- package/template/claude-task-manager/lib/jsonl-range-reader.js +112 -0
- package/template/claude-task-manager/lib/main-db-census.js +216 -0
- package/template/claude-task-manager/lib/message-pagination.js +106 -4
- package/template/claude-task-manager/lib/microsoft-dev-tunnel-setup.js +750 -26
- package/template/claude-task-manager/lib/mobile-auth-api.js +274 -7
- package/template/claude-task-manager/lib/mobile-auth-store.js +592 -10
- package/template/claude-task-manager/lib/mobile-notification-dispatcher.js +15 -0
- package/template/claude-task-manager/lib/model-overview-brain-fallback.js +311 -0
- package/template/claude-task-manager/lib/model-overview-cache.js +141 -0
- package/template/claude-task-manager/lib/models-health-routing-notice.js +126 -0
- package/template/claude-task-manager/lib/node-pin-guard.js +93 -0
- package/template/claude-task-manager/lib/perf-tracker.js +242 -6
- package/template/claude-task-manager/lib/permission-match.js +76 -0
- package/template/claude-task-manager/lib/permission-sync.js +133 -20
- package/template/claude-task-manager/lib/process-title.js +35 -0
- package/template/claude-task-manager/lib/prompt-executions-query.js +25 -0
- package/template/claude-task-manager/lib/prompt-index-disk-cache.js +44 -0
- package/template/claude-task-manager/lib/prompt-intent.js +132 -0
- package/template/claude-task-manager/lib/provider-user-context.js +34 -0
- package/template/claude-task-manager/lib/read-pool-client.js +313 -0
- package/template/claude-task-manager/lib/readpool-breaker.js +31 -0
- package/template/claude-task-manager/lib/recent-sessions-breaker.js +12 -0
- package/template/claude-task-manager/lib/remote-feedback-client.js +72 -0
- package/template/claude-task-manager/lib/remote-relay-protocol.js +37 -4
- package/template/claude-task-manager/lib/remote-relay-store.js +159 -0
- package/template/claude-task-manager/lib/remote-submission-observer.js +278 -0
- package/template/claude-task-manager/lib/restart-guard.js +109 -0
- package/template/claude-task-manager/lib/restore-interruption-detector.js +439 -0
- package/template/claude-task-manager/lib/restore-policy.js +13 -0
- package/template/claude-task-manager/lib/restore-resume-batch.js +74 -0
- package/template/claude-task-manager/lib/restore-runtime.js +68 -0
- package/template/claude-task-manager/lib/restore-storm.js +34 -0
- package/template/claude-task-manager/lib/resume-cwd.js +36 -0
- package/template/claude-task-manager/lib/resume-preflight.js +313 -0
- package/template/claude-task-manager/lib/runtime-work-registry.js +444 -0
- package/template/claude-task-manager/lib/sanitize-openai-auth.js +31 -0
- package/template/claude-task-manager/lib/scheduler.js +21 -1
- package/template/claude-task-manager/lib/scrollback-snapshot-store.js +159 -0
- package/template/claude-task-manager/lib/serial-task-queue.js +64 -0
- package/template/claude-task-manager/lib/server-listeners.js +239 -0
- package/template/claude-task-manager/lib/session-capture.js +42 -7
- package/template/claude-task-manager/lib/session-content-backfill.js +131 -0
- package/template/claude-task-manager/lib/session-history.js +388 -43
- package/template/claude-task-manager/lib/session-host-manager.js +287 -0
- package/template/claude-task-manager/lib/session-image-refs.js +209 -0
- package/template/claude-task-manager/lib/session-jobs.js +399 -59
- package/template/claude-task-manager/lib/session-prompt-index.js +137 -0
- package/template/claude-task-manager/lib/session-restore.js +53 -0
- package/template/claude-task-manager/lib/session-standup.js +123 -23
- package/template/claude-task-manager/lib/session-state-bus.js +14 -0
- package/template/claude-task-manager/lib/session-stream.js +64 -16
- package/template/claude-task-manager/lib/session-timeline-summary.js +260 -0
- package/template/claude-task-manager/lib/session-token-usage.js +494 -0
- package/template/claude-task-manager/lib/session-workspace-binding.js +356 -0
- package/template/claude-task-manager/lib/setup-network-config.js +9 -0
- package/template/claude-task-manager/lib/size-cap.js +45 -0
- package/template/claude-task-manager/lib/size-cap.test.js +62 -0
- package/template/claude-task-manager/lib/skill-autocomplete.js +180 -1
- package/template/claude-task-manager/lib/skill-intent-resolver.js +304 -0
- package/template/claude-task-manager/lib/sqlite-driver.js +19 -3
- package/template/claude-task-manager/lib/standup-attention.js +7 -3
- package/template/claude-task-manager/lib/status-authority.js +39 -0
- package/template/claude-task-manager/lib/status-hooks.js +4 -0
- package/template/claude-task-manager/lib/storage-migration.js +235 -0
- package/template/claude-task-manager/lib/structured-capture.js +298 -0
- package/template/claude-task-manager/lib/sync-io-census.js +163 -0
- package/template/claude-task-manager/lib/tailscale-setup.js +6 -0
- package/template/claude-task-manager/lib/terminal-activity-evidence.js +33 -0
- package/template/claude-task-manager/lib/terminal-choice.js +364 -0
- package/template/claude-task-manager/lib/terminal-control-sanitize.js +17 -0
- package/template/claude-task-manager/lib/terminal-fingerprint.js +48 -0
- package/template/claude-task-manager/lib/terminal-output-flush.js +84 -0
- package/template/claude-task-manager/lib/timeline-order.js +122 -0
- package/template/claude-task-manager/lib/transcript-store.js +348 -43
- package/template/claude-task-manager/lib/transport-security.js +84 -1
- package/template/claude-task-manager/lib/wait-state.js +184 -0
- package/template/claude-task-manager/lib/walle-client.js +47 -5
- package/template/claude-task-manager/lib/walle-ctm-history.js +564 -4
- package/template/claude-task-manager/lib/walle-external-actions.js +135 -16
- package/template/claude-task-manager/lib/walle-history-hydration.js +46 -0
- package/template/claude-task-manager/lib/walle-native-health.js +403 -0
- package/template/claude-task-manager/lib/walle-repair.js +701 -0
- package/template/claude-task-manager/lib/walle-session-cache.js +109 -0
- package/template/claude-task-manager/lib/walle-session-context.js +57 -21
- package/template/claude-task-manager/lib/walle-session-model-catalog.js +34 -0
- package/template/claude-task-manager/lib/walle-supervisor.js +539 -63
- package/template/claude-task-manager/lib/walle-transcript.js +52 -0
- package/template/claude-task-manager/lib/worktree-active-sync.js +11 -7
- package/template/claude-task-manager/lib/worktree-cwd.js +32 -1
- package/template/claude-task-manager/package.json +1 -1
- package/template/claude-task-manager/prompt-harvest.js +89 -66
- package/template/claude-task-manager/providers/claude-code.js +51 -3
- package/template/claude-task-manager/providers/cursor.js +140 -45
- package/template/claude-task-manager/public/css/reviews.css +551 -61
- package/template/claude-task-manager/public/css/setup.css +191 -0
- package/template/claude-task-manager/public/css/walle-session.css +865 -10
- package/template/claude-task-manager/public/css/walle.css +154 -0
- package/template/claude-task-manager/public/designs/ai-providers-consolidation-v2.html +830 -0
- package/template/claude-task-manager/public/index.html +18516 -2058
- package/template/claude-task-manager/public/ipad.html +363 -0
- package/template/claude-task-manager/public/js/document-review-links.js +301 -0
- package/template/claude-task-manager/public/js/image-normalize.js +69 -36
- package/template/claude-task-manager/public/js/message-renderer.js +1265 -77
- package/template/claude-task-manager/public/js/prompts.js +66 -29
- package/template/claude-task-manager/public/js/reviews.js +901 -133
- package/template/claude-task-manager/public/js/session-activity-utils.js +11 -1
- package/template/claude-task-manager/public/js/session-search-utils.js +94 -10
- package/template/claude-task-manager/public/js/session-status-precedence.js +23 -5
- package/template/claude-task-manager/public/js/setup.js +1273 -176
- package/template/claude-task-manager/public/js/stream-view.js +691 -73
- package/template/claude-task-manager/public/js/terminal-reconciler.js +210 -0
- package/template/claude-task-manager/public/js/walle-session.js +2455 -158
- package/template/claude-task-manager/public/js/walle.js +455 -28
- package/template/claude-task-manager/public/m/app.css +2909 -262
- package/template/claude-task-manager/public/m/app.js +6601 -398
- package/template/claude-task-manager/public/m/claim.html +224 -17
- package/template/claude-task-manager/public/m/index.html +117 -21
- package/template/claude-task-manager/public/m/sw.js +3 -1
- package/template/claude-task-manager/public/manifest.json +2 -2
- package/template/claude-task-manager/public/prompts.html +30 -14
- package/template/claude-task-manager/queue-engine.js +507 -28
- package/template/claude-task-manager/scripts/repair-claude-session-images.js +27 -8
- package/template/claude-task-manager/server.js +14341 -2197
- package/template/claude-task-manager/session-integrity.js +160 -18
- package/template/claude-task-manager/session-search-ranking.js +1 -0
- package/template/claude-task-manager/session-utils.js +25 -5
- package/template/claude-task-manager/workers/approval-blocklist.js +96 -6
- package/template/claude-task-manager/workers/approval-widget-validator.js +14 -8
- package/template/claude-task-manager/workers/conversation-import-worker.js +11 -50
- package/template/claude-task-manager/workers/db-owner-worker.js +386 -0
- package/template/claude-task-manager/workers/harvest-worker.js +9 -55
- package/template/claude-task-manager/workers/headless-term-worker.js +9 -530
- package/template/claude-task-manager/workers/read-pool-worker.js +387 -0
- package/template/claude-task-manager/workers/scrollback-worker.js +11 -72
- package/template/claude-task-manager/workers/session-host-process.js +146 -0
- package/template/claude-task-manager/workers/session-integrity-worker.js +10 -54
- package/template/claude-task-manager/workers/state-detectors/base.js +18 -1
- package/template/claude-task-manager/workers/state-detectors/claude-code.js +182 -9
- package/template/claude-task-manager/workers/state-detectors/codex.js +150 -2
- package/template/claude-task-manager/workers/state-detectors/cursor.js +127 -0
- package/template/claude-task-manager/workers/state-detectors/gemini.js +21 -0
- package/template/claude-task-manager/workers/state-detectors/index.js +29 -0
- package/template/claude-task-manager/workers/state-detectors/opencode.js +103 -0
- package/template/docs/design/markdown-review-pane.md +206 -0
- package/template/docs/designs/2026-05-17-portkey-gateway-provider-ux.md +129 -38
- package/template/docs/designs/2026-05-20-mobile-worktree-finish-command.md +27 -0
- package/template/docs/designs/2026-05-22-ai-configuration-consolidation.md +248 -0
- package/template/docs/designs/ai-configuration-consolidation-mock.html +812 -0
- package/template/docs/private-memory-and-pii-policy.md +69 -0
- package/template/package.json +2 -1
- package/template/scripts/check-private-data.js +201 -0
- package/template/shared/sqlite-owner-guard.js +30 -0
- package/template/shared/sqlite-owner-write-queue.js +225 -0
- package/template/shared/sqlite-storage-policy.js +111 -0
- package/template/shared/sqlite-write-lock.js +428 -0
- package/template/wall-e/agent-runners/claude-code.js +5 -0
- package/template/wall-e/agent.js +166 -22
- package/template/wall-e/api-walle.js +524 -70
- package/template/wall-e/auth/provider-flows.js +11 -1
- package/template/wall-e/bin/walle-mcp-stdio.js +341 -17
- package/template/wall-e/brain.js +1614 -141
- package/template/wall-e/chat/attachment-blocks.js +96 -0
- package/template/wall-e/chat/attachments.js +2 -1
- package/template/wall-e/chat/capability-resolver.js +7 -7
- package/template/wall-e/chat/context-messages.js +28 -0
- package/template/wall-e/chat/conversation-frame.js +630 -0
- package/template/wall-e/chat/provider-messages.js +125 -0
- package/template/wall-e/chat.js +1002 -233
- package/template/wall-e/coding/acceptance-contract.js +170 -0
- package/template/wall-e/coding/acp-adapter.js +1 -1
- package/template/wall-e/coding/agent-catalog.js +3 -0
- package/template/wall-e/coding/artifact-store.js +93 -0
- package/template/wall-e/coding/capability-router.js +120 -0
- package/template/wall-e/coding/coding-run-controller.js +423 -0
- package/template/wall-e/coding/compaction-service.js +157 -12
- package/template/wall-e/coding/frontend-verification.js +258 -0
- package/template/wall-e/coding/lifecycle-hooks.js +75 -0
- package/template/wall-e/coding/local-preview-contract.js +157 -0
- package/template/wall-e/coding/permission-service.js +57 -13
- package/template/wall-e/coding/prompt-bundle.js +19 -1
- package/template/wall-e/coding/prompt-section-registry.js +227 -0
- package/template/wall-e/coding/provider-compat.js +15 -0
- package/template/wall-e/coding/runtime-events.js +224 -0
- package/template/wall-e/coding/runtime-mode.js +3 -0
- package/template/wall-e/coding/side-git-snapshot.js +160 -4
- package/template/wall-e/coding/snapshot-service.js +143 -1
- package/template/wall-e/coding/stream-processor.js +388 -34
- package/template/wall-e/coding/task-tool.js +141 -4
- package/template/wall-e/coding/tool-execution-controller.js +365 -0
- package/template/wall-e/coding/tool-registry.js +43 -5
- package/template/wall-e/coding/user-hooks.js +217 -0
- package/template/wall-e/coding-orchestrator.js +1330 -221
- package/template/wall-e/coding-prompts.js +20 -4
- package/template/wall-e/context/context-builder.js +15 -2
- package/template/wall-e/decision/confidence.js +1 -1
- package/template/wall-e/docs/coding-acceptance-contract.md +41 -0
- package/template/wall-e/docs/external-action-controller.md +26 -6
- package/template/wall-e/docs/telemetry-lifecycle.md +8 -2
- package/template/wall-e/embeddings.js +591 -53
- package/template/wall-e/external-action-controller.js +12 -0
- package/template/wall-e/http/auth.js +1 -0
- package/template/wall-e/http/chat-api.js +46 -11
- package/template/wall-e/http/model-admin.js +836 -34
- package/template/wall-e/lib/boot-profile.js +88 -0
- package/template/wall-e/lib/event-loop-monitor.js +93 -0
- package/template/wall-e/lib/service-health.js +194 -0
- package/template/wall-e/llm/anthropic.js +130 -5
- package/template/wall-e/llm/client.js +266 -63
- package/template/wall-e/llm/default-fallback.js +382 -0
- package/template/wall-e/llm/health.js +19 -0
- package/template/wall-e/llm/message-guard.js +78 -0
- package/template/wall-e/llm/model-catalog.js +252 -1
- package/template/wall-e/llm/openai.js +26 -4
- package/template/wall-e/llm/portkey-sync.js +654 -0
- package/template/wall-e/llm/provider-error.js +30 -2
- package/template/wall-e/llm/registry.js +5 -1
- package/template/wall-e/llm/request-compat.js +67 -0
- package/template/wall-e/loops/backfill.js +79 -23
- package/template/wall-e/loops/brain-optimize.js +67 -0
- package/template/wall-e/loops/ingest.js +25 -10
- package/template/wall-e/loops/question-digest.js +160 -0
- package/template/wall-e/loops/reflect.js +6 -4
- package/template/wall-e/loops/think.js +39 -12
- package/template/wall-e/mcp-server.js +318 -36
- package/template/wall-e/memory/ctm-context-client.js +52 -14
- package/template/wall-e/memory/ctm-operational-context.js +237 -0
- package/template/wall-e/memory/ctm-prompt-executions-client.js +128 -0
- package/template/wall-e/memory/ctm-session-context.js +111 -63
- package/template/wall-e/prompts/coding/deepseek.txt +3 -0
- package/template/wall-e/prompts/coding/gemini.txt +6 -0
- package/template/wall-e/prompts/coding/gpt.txt +6 -0
- package/template/wall-e/prompts/coding/local.txt +7 -0
- package/template/wall-e/runtime/decision-hooks.js +115 -0
- package/template/wall-e/runtime/devbox-gateway.js +82 -8
- package/template/wall-e/runtime/prompt-manifest.js +86 -0
- package/template/wall-e/runtime/tool-executor.js +269 -0
- package/template/wall-e/runtime/tool-result-envelope.js +138 -0
- package/template/wall-e/runtime/transcript-projection.js +60 -0
- package/template/wall-e/runtime/walle-runtime.js +224 -0
- package/template/wall-e/scripts/db-optimize/migrate.js +162 -0
- package/template/wall-e/scripts/db-optimize/recall-eval.js +117 -0
- package/template/wall-e/server.js +15 -0
- package/template/wall-e/session-files.js +9 -0
- package/template/wall-e/skills/_bundled/google-calendar/run.js +1 -1
- package/template/wall-e/skills/_bundled/gws-workspace/run.js +1 -1
- package/template/wall-e/skills/_bundled/slack-mentions/run.js +76 -6
- package/template/wall-e/skills/claude-code-reader.js +7 -3
- package/template/wall-e/skills/script-skill-runner.js +10 -0
- package/template/wall-e/skills/skill-planner.js +38 -0
- package/template/wall-e/tools/builtin-middleware.js +19 -9
- package/template/wall-e/tools/local-tools.js +1428 -16
- package/template/wall-e/tools/permission-checker.js +73 -5
- package/template/wall-e/tools/question-manager.js +117 -7
- package/template/wall-e/training/harvester.js +12 -28
- package/template/wall-e/training/replay.js +25 -80
- package/template/website/index.html +10 -10
- package/template/wall-e/eval/ab-test.js +0 -203
- package/template/wall-e/eval/agent-runner.js +0 -772
- package/template/wall-e/eval/agent-scorer.js +0 -461
- package/template/wall-e/eval/aggregator.js +0 -414
- package/template/wall-e/eval/allowed-test-commands.js +0 -34
- package/template/wall-e/eval/benchmark-generator.js +0 -113
- package/template/wall-e/eval/benchmarks/chat-eval.json +0 -1662
- package/template/wall-e/eval/benchmarks/chat.json +0 -82
- package/template/wall-e/eval/benchmarks/coding-agent-real.json +0 -1
- package/template/wall-e/eval/benchmarks/coding-agent.json +0 -1581
- package/template/wall-e/eval/benchmarks/coding.json +0 -122
- package/template/wall-e/eval/benchmarks/memory-retrieval.json +0 -234
- package/template/wall-e/eval/benchmarks/reasoning.json +0 -82
- package/template/wall-e/eval/benchmarks/swebench-lite-30.json +0 -212
- package/template/wall-e/eval/benchmarks.js +0 -669
- package/template/wall-e/eval/cc-replay.js +0 -719
- package/template/wall-e/eval/chat-eval.js +0 -525
- package/template/wall-e/eval/check-keys.js +0 -15
- package/template/wall-e/eval/check-providers.js +0 -42
- package/template/wall-e/eval/codex-cli-baseline.js +0 -669
- package/template/wall-e/eval/coding-agent-real.js +0 -570
- package/template/wall-e/eval/context-compactor.js +0 -251
- package/template/wall-e/eval/debug-agent003.js +0 -68
- package/template/wall-e/eval/diagnostics.js +0 -216
- package/template/wall-e/eval/eval-orchestrator.js +0 -642
- package/template/wall-e/eval/evaluate.js +0 -202
- package/template/wall-e/eval/evaluator.js +0 -373
- package/template/wall-e/eval/exporter.js +0 -212
- package/template/wall-e/eval/fixtures/express-basic/package.json +0 -9
- package/template/wall-e/eval/fixtures/express-basic/server.js +0 -115
- package/template/wall-e/eval/fixtures/express-basic/test.js +0 -83
- package/template/wall-e/eval/fixtures/express-buggy/package.json +0 -9
- package/template/wall-e/eval/fixtures/express-buggy/server.js +0 -113
- package/template/wall-e/eval/fixtures/express-buggy/test.js +0 -83
- package/template/wall-e/eval/fixtures/express-buggy-items/package.json +0 -9
- package/template/wall-e/eval/fixtures/express-buggy-items/server.js +0 -112
- package/template/wall-e/eval/fixtures/express-buggy-items/test.js +0 -83
- package/template/wall-e/eval/fixtures/express-buggy-search/package.json +0 -9
- package/template/wall-e/eval/fixtures/express-buggy-search/server.js +0 -121
- package/template/wall-e/eval/fixtures/express-buggy-search/test.js +0 -83
- package/template/wall-e/eval/fixtures/express-rename-data/data.js +0 -34
- package/template/wall-e/eval/fixtures/express-rename-data/package.json +0 -9
- package/template/wall-e/eval/fixtures/express-rename-data/server.js +0 -97
- package/template/wall-e/eval/fixtures/express-rename-data/test.js +0 -88
- package/template/wall-e/eval/fixtures/express-xss/package.json +0 -12
- package/template/wall-e/eval/fixtures/express-xss/server.js +0 -90
- package/template/wall-e/eval/fixtures/express-xss/test.js +0 -67
- package/template/wall-e/eval/fixtures/express-xss/views/profile.ejs +0 -9
- package/template/wall-e/eval/fixtures/fullstack-app/config/default.js +0 -9
- package/template/wall-e/eval/fixtures/fullstack-app/config/test.js +0 -13
- package/template/wall-e/eval/fixtures/fullstack-app/package.json +0 -11
- package/template/wall-e/eval/fixtures/fullstack-app/public/css/style.css +0 -137
- package/template/wall-e/eval/fixtures/fullstack-app/public/index.html +0 -46
- package/template/wall-e/eval/fixtures/fullstack-app/public/js/app.js +0 -121
- package/template/wall-e/eval/fixtures/fullstack-app/public/js/auth.js +0 -71
- package/template/wall-e/eval/fixtures/fullstack-app/public/js/items.js +0 -80
- package/template/wall-e/eval/fixtures/fullstack-app/public/js/users.js +0 -46
- package/template/wall-e/eval/fixtures/fullstack-app/public/login.html +0 -45
- package/template/wall-e/eval/fixtures/fullstack-app/public/register.html +0 -38
- package/template/wall-e/eval/fixtures/fullstack-app/scripts/migrate.js +0 -23
- package/template/wall-e/eval/fixtures/fullstack-app/scripts/seed.js +0 -46
- package/template/wall-e/eval/fixtures/fullstack-app/server/db.js +0 -99
- package/template/wall-e/eval/fixtures/fullstack-app/server/index.js +0 -94
- package/template/wall-e/eval/fixtures/fullstack-app/server/middleware/auth.js +0 -19
- package/template/wall-e/eval/fixtures/fullstack-app/server/middleware/logger.js +0 -19
- package/template/wall-e/eval/fixtures/fullstack-app/server/router.js +0 -50
- package/template/wall-e/eval/fixtures/fullstack-app/server/routes/auth.js +0 -69
- package/template/wall-e/eval/fixtures/fullstack-app/server/routes/health.js +0 -23
- package/template/wall-e/eval/fixtures/fullstack-app/server/routes/items.js +0 -88
- package/template/wall-e/eval/fixtures/fullstack-app/server/routes/users.js +0 -75
- package/template/wall-e/eval/fixtures/fullstack-app/server/test.js +0 -198
- package/template/wall-e/eval/fixtures/fullstack-app/server/utils/response.js +0 -34
- package/template/wall-e/eval/fixtures/fullstack-app/server/utils/validate.js +0 -26
- package/template/wall-e/eval/fixtures/fullstack-app/server.js +0 -8
- package/template/wall-e/eval/fixtures/fullstack-app/test.js +0 -12
- package/template/wall-e/eval/fixtures/monorepo-basic/package.json +0 -8
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/data.js +0 -58
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/middleware.js +0 -46
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/package.json +0 -8
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/routes.js +0 -64
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/server.js +0 -56
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/test.js +0 -116
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/commands.js +0 -61
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/index.js +0 -62
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/output.js +0 -43
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/package.json +0 -11
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/test.js +0 -44
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/formatters.js +0 -43
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/index.js +0 -12
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/package.json +0 -5
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/test.js +0 -55
- package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/validators.js +0 -29
- package/template/wall-e/eval/fixtures/monorepo-basic/test.js +0 -46
- package/template/wall-e/eval/fixtures/node-cli/index.js +0 -78
- package/template/wall-e/eval/fixtures/node-cli/package.json +0 -10
- package/template/wall-e/eval/fixtures/node-cli/test.js +0 -57
- package/template/wall-e/eval/fixtures/node-typed/package.json +0 -8
- package/template/wall-e/eval/fixtures/node-typed/src/handlers.js +0 -31
- package/template/wall-e/eval/fixtures/node-typed/src/utils.js +0 -33
- package/template/wall-e/eval/fixtures/node-typed/test.js +0 -36
- package/template/wall-e/eval/fixtures/python-flask/app.py +0 -14
- package/template/wall-e/eval/fixtures/python-flask/requirements.txt +0 -2
- package/template/wall-e/eval/fixtures/python-flask/test_app.py +0 -25
- package/template/wall-e/eval/fixtures/wall-e-subset/brain.js +0 -105
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/aggregator.js +0 -101
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks/chat.json +0 -20
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks/coding.json +0 -32
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks.js +0 -64
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/package.json +0 -6
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/server.js +0 -31
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/test.js +0 -18
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/utils.js +0 -34
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/runner.js +0 -104
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/scorer.js +0 -73
- package/template/wall-e/eval/fixtures/wall-e-subset/eval/test.js +0 -134
- package/template/wall-e/eval/fixtures/wall-e-subset/llm/client.js +0 -99
- package/template/wall-e/eval/fixtures/wall-e-subset/llm/providers.js +0 -63
- package/template/wall-e/eval/fixtures/wall-e-subset/llm/test.js +0 -70
- package/template/wall-e/eval/fixtures/wall-e-subset/package.json +0 -10
- package/template/wall-e/eval/fixtures/wall-e-subset/test.js +0 -86
- package/template/wall-e/eval/harvester.js +0 -685
- package/template/wall-e/eval/head-to-head.js +0 -388
- package/template/wall-e/eval/humaneval-adapter.js +0 -321
- package/template/wall-e/eval/list-models.js +0 -31
- package/template/wall-e/eval/livecodebench-adapter.js +0 -291
- package/template/wall-e/eval/mail-integration.js +0 -443
- package/template/wall-e/eval/manifest.js +0 -186
- package/template/wall-e/eval/meta-harness/adapters/coding-agent.js +0 -57
- package/template/wall-e/eval/meta-harness/bootstrap-snapshot.js +0 -149
- package/template/wall-e/eval/meta-harness/candidate-store.js +0 -117
- package/template/wall-e/eval/meta-harness/cli.js +0 -86
- package/template/wall-e/eval/meta-harness/domain-spec.js +0 -154
- package/template/wall-e/eval/meta-harness/domains/coding-agent.domain.json +0 -84
- package/template/wall-e/eval/meta-harness/examples/env-bootstrap-candidate.js +0 -29
- package/template/wall-e/eval/meta-harness/experience-store.js +0 -174
- package/template/wall-e/eval/meta-harness/frontier.js +0 -96
- package/template/wall-e/eval/meta-harness/harness-interface.js +0 -90
- package/template/wall-e/eval/meta-harness/leakage-guard.js +0 -80
- package/template/wall-e/eval/meta-harness/optimizer.js +0 -207
- package/template/wall-e/eval/meta-harness/proposer-runner.js +0 -110
- package/template/wall-e/eval/meta-harness/reporting.js +0 -58
- package/template/wall-e/eval/meta-harness/telemetry.js +0 -27
- package/template/wall-e/eval/meta-harness/validation.js +0 -81
- package/template/wall-e/eval/promoter.js +0 -228
- package/template/wall-e/eval/provider-normalizer.js +0 -33
- package/template/wall-e/eval/replay.js +0 -395
- package/template/wall-e/eval/run-agent-benchmarks.js +0 -386
- package/template/wall-e/eval/run-codex-cli-baseline.js +0 -177
- package/template/wall-e/eval/run-coding-agent-real.js +0 -187
- package/template/wall-e/eval/run-eval.js +0 -435
- package/template/wall-e/eval/run-model-comparison.js +0 -142
- package/template/wall-e/eval/session-evaluator.js +0 -187
- package/template/wall-e/eval/session-miner.js +0 -207
- package/template/wall-e/eval/session-retrieval-benchmark.js +0 -150
- package/template/wall-e/eval/session-transcripts.js +0 -509
- package/template/wall-e/eval/shadow.js +0 -161
- package/template/wall-e/eval/swebench-adapter.js +0 -345
- package/template/wall-e/eval/swebench-docker.js +0 -192
- package/template/wall-e/eval/train.py +0 -320
- package/template/wall-e/eval/trainer.js +0 -232
- package/template/wall-e/eval/weekly-eval-loop.js +0 -241
package/template/wall-e/agent.js
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
process.env.WALL_E_PROCESS_ROLE = process.env.WALL_E_PROCESS_ROLE || 'walle-daemon';
|
|
2
|
+
// Refuse to boot under a Node major that mismatches the pinned one BEFORE brain
|
|
3
|
+
// (and its native better-sqlite3) loads. No-op in shipped installs.
|
|
4
|
+
require('../claude-task-manager/lib/node-pin-guard').assertPinnedNode();
|
|
5
|
+
try {
|
|
6
|
+
if (process.env.WALL_E_STORAGE_MIGRATION_BYPASS !== '1' && process.env.CTM_STORAGE_MIGRATION_BYPASS !== '1') {
|
|
7
|
+
const guard = require('../claude-task-manager/lib/storage-migration').startupGuard('Wall-E', process.env);
|
|
8
|
+
if (!guard.ok) {
|
|
9
|
+
console.error('[storage-migration] Wall-E startup paused while storage migration is active.');
|
|
10
|
+
process.exit(75);
|
|
11
|
+
} else if (guard.stale) {
|
|
12
|
+
console.warn('[storage-migration] Ignoring stale storage migration lock.');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
} catch (e) {
|
|
16
|
+
console.warn('[storage-migration] Startup guard failed open:', e.message);
|
|
17
|
+
}
|
|
18
|
+
const { processTitle: formatProcessTitle } = require('../claude-task-manager/lib/process-title');
|
|
19
|
+
|
|
1
20
|
const brain = require('./brain'); // brain.js loads .env from project root
|
|
2
21
|
const ingest = require('./loops/ingest');
|
|
3
22
|
const think = require('./loops/think');
|
|
@@ -29,8 +48,8 @@ function _writeCrashLog(label, err) {
|
|
|
29
48
|
fs.appendFileSync(CRASH_LOG, line);
|
|
30
49
|
} catch {}
|
|
31
50
|
}
|
|
32
|
-
// Process tagging (discoverable via pgrep -f '
|
|
33
|
-
process.title =
|
|
51
|
+
// Process tagging (discoverable via pgrep -f 'Wall-E dev-4500')
|
|
52
|
+
process.title = formatProcessTitle('walle', process.env.WALLE_INSTANCE_TAG || 'primary');
|
|
34
53
|
|
|
35
54
|
let _epipeSeen = false; // prevent EPIPE cascade: console.error in handler throws EPIPE → retriggers handler
|
|
36
55
|
process.on('uncaughtException', (err) => {
|
|
@@ -262,14 +281,32 @@ async function checkForUpdates() {
|
|
|
262
281
|
async function main() {
|
|
263
282
|
console.log('[wall-e] Starting WALL-E agent daemon...');
|
|
264
283
|
|
|
284
|
+
// Boot profiler — per-phase wall-clock timing so we can SEE where startup time goes
|
|
285
|
+
// (logged below + surfaced at GET /api/wall-e/boot-profile). brain.initDb() records
|
|
286
|
+
// its own initDb.* sub-phases into the same profile.
|
|
287
|
+
const _bootp = require('./lib/boot-profile');
|
|
288
|
+
const { performance: _perf } = require('perf_hooks');
|
|
289
|
+
_bootp.reset();
|
|
290
|
+
let _phaseLast = _perf.now();
|
|
291
|
+
const _phase = (label) => { const n = _perf.now(); _bootp.mark(label, n - _phaseLast); _phaseLast = n; };
|
|
292
|
+
|
|
265
293
|
const providerType = (process.env.WALLE_PROVIDER || 'anthropic').toLowerCase();
|
|
266
294
|
console.log(`[wall-e] Provider: ${providerType}, Model: ${process.env.WALLE_MODEL || 'default'}`);
|
|
267
295
|
|
|
268
296
|
const config = loadOrCreateConfig();
|
|
297
|
+
_phase('loadConfig');
|
|
298
|
+
|
|
299
|
+
// Start the event-loop delay monitor early so a synchronous DB query that wedges the
|
|
300
|
+
// loop is surfaced in the logs (and on the health endpoint) instead of silently making
|
|
301
|
+
// the daemon look alive while every HTTP request times out.
|
|
302
|
+
try { require('./lib/event-loop-monitor').start(); } catch (e) { console.warn('[wall-e] event-loop monitor unavailable:', e.message); }
|
|
269
303
|
|
|
270
304
|
// Init database (auto-creates data directory if needed)
|
|
271
305
|
brain.initDb();
|
|
272
|
-
brain.
|
|
306
|
+
_phase('brain.initDb');
|
|
307
|
+
// backfillTemporalValidity is a ONE-TIME migration (new knowledge rows already set
|
|
308
|
+
// valid_from on insert). On a large legacy brain it took ~16s on the boot path; it is
|
|
309
|
+
// deferred off the readiness path below (after startServer) so it never blocks port bind.
|
|
273
310
|
|
|
274
311
|
// Load API keys from brain DB into env if not already set
|
|
275
312
|
// (setup page stores keys in DB; env var may not be present when spawned by CTM)
|
|
@@ -299,19 +336,19 @@ async function main() {
|
|
|
299
336
|
} else if (providerType === 'google' && !process.env.GOOGLE_API_KEY && !process.env.GEMINI_API_KEY) {
|
|
300
337
|
console.warn('[wall-e] WARNING: GOOGLE_API_KEY not set for Google provider.');
|
|
301
338
|
}
|
|
339
|
+
_phase('loadApiKeys');
|
|
302
340
|
brain.setDaemonOwned(); // Prevent bundled skills from closing the shared DB connection
|
|
303
|
-
|
|
341
|
+
// NOTE: the daily backup is registered as a scheduler job below (name: 'daily-backup'),
|
|
342
|
+
// NOT run here — it must never block boot / port bind / MCP readiness.
|
|
304
343
|
|
|
305
|
-
//
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
} catch (e) {
|
|
310
|
-
console.log('[wall-e] Embeddings not available:', e.message);
|
|
311
|
-
}
|
|
344
|
+
// Embedding subsystem init is DEFERRED off the readiness path (see after startServer).
|
|
345
|
+
// It's optional + degrades gracefully (boot-time memory inserts queue for the backfill
|
|
346
|
+
// job to embed later), and on the live brain it cost ~15s — which must not block port
|
|
347
|
+
// bind / MCP readiness.
|
|
312
348
|
bootstrapSkills();
|
|
313
349
|
syncBundledSkills();
|
|
314
350
|
bootstrapTasks();
|
|
351
|
+
_phase('bootstrap(skills+tasks)');
|
|
315
352
|
|
|
316
353
|
// Item C (multi-agent deep-dive): ensure the default auth profile exists.
|
|
317
354
|
// Idempotent — safe to call every boot. Existing skills with NULL
|
|
@@ -327,17 +364,11 @@ async function main() {
|
|
|
327
364
|
// Version check (async, non-blocking) — alert if a newer version is on npm
|
|
328
365
|
checkForUpdates().catch(() => {});
|
|
329
366
|
|
|
330
|
-
//
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
// Check for updates to imported skills
|
|
336
|
-
const updates = checkImportedSkillUpdates();
|
|
337
|
-
if (updates.length > 0) console.log(`[wall-e] Imported skill updates: ${updates.map(u => u.name + '(' + u.action + ')').join(', ')}`);
|
|
338
|
-
} catch (e) {
|
|
339
|
-
console.warn('[wall-e] Skill reference sync error:', e.message);
|
|
340
|
-
}
|
|
367
|
+
// Skill-reference sync (Learn+Reference system) does per-skill filesystem reads + a
|
|
368
|
+
// skill_reference scan of the memories table — hundreds of ms to seconds on a large
|
|
369
|
+
// brain. It is NOT needed for the daemon to serve requests, so it runs deferred off the
|
|
370
|
+
// readiness path (after startServer) rather than blocking port bind. See below.
|
|
371
|
+
_phase('skillRefSync+authProfile');
|
|
341
372
|
|
|
342
373
|
// Set owner from config
|
|
343
374
|
if (config.owner) {
|
|
@@ -370,6 +401,7 @@ async function main() {
|
|
|
370
401
|
}
|
|
371
402
|
}
|
|
372
403
|
console.log(`[wall-e] ${adapters.length} adapter(s) active`);
|
|
404
|
+
_phase('adapters');
|
|
373
405
|
|
|
374
406
|
// Initialize messaging channels via the plugin registry.
|
|
375
407
|
// Each channel manifest declares its configKey + required config paths;
|
|
@@ -426,18 +458,56 @@ async function main() {
|
|
|
426
458
|
if (channels.length > 0) {
|
|
427
459
|
console.log(`[wall-e] ${channels.length} channel(s) started`);
|
|
428
460
|
}
|
|
461
|
+
_phase('channels');
|
|
429
462
|
|
|
430
463
|
// Always start HTTP server — WALL-E API should be independently reachable
|
|
431
464
|
const { startServer } = require('./server');
|
|
432
465
|
let httpServer;
|
|
433
466
|
try {
|
|
467
|
+
const _serverT0 = _perf.now();
|
|
434
468
|
httpServer = startServer();
|
|
435
469
|
if (httpServer && httpServer.ready) await httpServer.ready;
|
|
470
|
+
_bootp.mark('startServer(portBind)', _perf.now() - _serverT0);
|
|
471
|
+
_phaseLast = _perf.now();
|
|
472
|
+
_bootp.done();
|
|
473
|
+
console.log(_bootp.summary());
|
|
436
474
|
} catch (e) {
|
|
437
475
|
console.error('[wall-e] HTTP server failed to start:', e.message);
|
|
438
476
|
process.exit(e && e.code === 'EADDRINUSE' ? 98 : 1);
|
|
439
477
|
}
|
|
440
478
|
|
|
479
|
+
// Deferred, off the readiness path: heavy/optional init that must not delay port bind +
|
|
480
|
+
// MCP readiness. Runs a few seconds after the server is up (the readiness probe completes
|
|
481
|
+
// first). unref'd so it never holds the process. Sub-phase timings are still captured in
|
|
482
|
+
// the boot profile (the marks append after startServer), so /api/wall-e/boot-profile shows
|
|
483
|
+
// exactly which embeddings sub-step is slow on the live brain.
|
|
484
|
+
setTimeout(() => {
|
|
485
|
+
// 1) Embedding subsystem (optional; degrades gracefully — inserts queue for the backfill job)
|
|
486
|
+
try {
|
|
487
|
+
require('./embeddings').init();
|
|
488
|
+
} catch (e) {
|
|
489
|
+
console.log('[wall-e] Embeddings not available:', e.message);
|
|
490
|
+
}
|
|
491
|
+
// 2) One-time temporal-validity backfill (no-op on an already-migrated brain)
|
|
492
|
+
try {
|
|
493
|
+
const n = brain.backfillTemporalValidity();
|
|
494
|
+
if (n > 0) console.log(`[wall-e] Temporal-validity backfill completed (${n} rows, deferred off boot)`);
|
|
495
|
+
} catch (err) {
|
|
496
|
+
console.warn('[wall-e] Deferred temporal-validity backfill failed (non-fatal):', err.message);
|
|
497
|
+
}
|
|
498
|
+
// 3) Skill-reference sync — deferred off the readiness path (was on the boot path,
|
|
499
|
+
// where its filesystem reads + skill_reference scan delayed HTTP port bind).
|
|
500
|
+
try {
|
|
501
|
+
const { syncSkillReferences, checkImportedSkillUpdates } = require('./skills/claude-code-reader');
|
|
502
|
+
const refResult = syncSkillReferences();
|
|
503
|
+
if (refResult.synced > 0) console.log(`[wall-e] Synced ${refResult.synced} skill references to brain (deferred off boot)`);
|
|
504
|
+
const updates = checkImportedSkillUpdates();
|
|
505
|
+
if (updates.length > 0) console.log(`[wall-e] Imported skill updates: ${updates.map(u => u.name + '(' + u.action + ')').join(', ')}`);
|
|
506
|
+
} catch (e) {
|
|
507
|
+
console.warn('[wall-e] Skill reference sync error:', e.message);
|
|
508
|
+
}
|
|
509
|
+
}, 2000).unref?.();
|
|
510
|
+
|
|
441
511
|
// Slack Socket Mode is optional and event-driven. It only starts when an
|
|
442
512
|
// app-level xapp token is configured, so the existing polling path remains
|
|
443
513
|
// unchanged for workspaces that have not registered a Wall-E Slack app.
|
|
@@ -456,6 +526,7 @@ async function main() {
|
|
|
456
526
|
channels: channels.map(c => c.name),
|
|
457
527
|
adapters: adapters.map(a => a.constructor?.name || 'unknown'),
|
|
458
528
|
});
|
|
529
|
+
try { require('./embeddings').trackEmbeddingStatus('boot'); } catch {}
|
|
459
530
|
telemetry.trackFunnelStep('boot');
|
|
460
531
|
|
|
461
532
|
// Recover tasks that were interrupted by previous shutdown
|
|
@@ -749,6 +820,17 @@ async function main() {
|
|
|
749
820
|
},
|
|
750
821
|
});
|
|
751
822
|
|
|
823
|
+
scheduler.register({
|
|
824
|
+
name: 'brain-optimize',
|
|
825
|
+
run: async () => require('./loops/brain-optimize').runOnce(),
|
|
826
|
+
intervalMs: 3600000, // hourly; self-gates to a one-shot via kv (brain:optimize:v1)
|
|
827
|
+
pool: 'io',
|
|
828
|
+
priority: 4,
|
|
829
|
+
startDelayMs: 180000, // 3 min after boot — well past the boot storm
|
|
830
|
+
timeoutMs: 120000,
|
|
831
|
+
onError: (err) => console.error('[brain-optimize] Loop error:', err.message),
|
|
832
|
+
});
|
|
833
|
+
|
|
752
834
|
scheduler.register({
|
|
753
835
|
name: 'dedup',
|
|
754
836
|
run: async () => {
|
|
@@ -765,6 +847,62 @@ async function main() {
|
|
|
765
847
|
onError: (err) => console.error('[dedup] Error:', err.message),
|
|
766
848
|
});
|
|
767
849
|
|
|
850
|
+
// Daily brain backup. Registered as a scheduler job (NOT run at boot) so the heavy
|
|
851
|
+
// backup never blocks port bind / MCP readiness; the scheduler owns "once a day +
|
|
852
|
+
// replay if a day was missed during downtime" (persistJobState). ensureDailyBackup()
|
|
853
|
+
// is idempotent (skips if today's already exists) and createBackup is now non-blocking.
|
|
854
|
+
scheduler.register({
|
|
855
|
+
name: 'daily-backup',
|
|
856
|
+
run: async () => {
|
|
857
|
+
const r = await brain.ensureDailyBackup();
|
|
858
|
+
if (r && r.created) console.log(`[wall-e] Daily backup: ${r.backupName}`);
|
|
859
|
+
return r;
|
|
860
|
+
},
|
|
861
|
+
intervalMs: 24 * 60 * 60 * 1000, // daily
|
|
862
|
+
pool: 'io',
|
|
863
|
+
priority: 11,
|
|
864
|
+
startDelayMs: 180000, // 3min after startup — well off the boot/readiness path
|
|
865
|
+
onError: (err) => {
|
|
866
|
+
console.error('[wall-e] Daily backup error:', err.message);
|
|
867
|
+
telemetry.trackError('daily-backup', err);
|
|
868
|
+
},
|
|
869
|
+
});
|
|
870
|
+
|
|
871
|
+
// Brain retention: prune unbounded tables + orphan embeddings. Hourly check; each prune
|
|
872
|
+
// is internally age-gated + batched (lock-friendly). See the 2026-05-31 audit.
|
|
873
|
+
scheduler.register({
|
|
874
|
+
name: 'brain-retention',
|
|
875
|
+
run: async () => brain.runBrainRetention(),
|
|
876
|
+
intervalMs: 60 * 60 * 1000,
|
|
877
|
+
pool: 'io',
|
|
878
|
+
priority: 11,
|
|
879
|
+
startDelayMs: 90000,
|
|
880
|
+
onResult: (r) => {
|
|
881
|
+
const nonZero = Object.entries(r || {}).filter(([, v]) => typeof v === 'number' && v > 0);
|
|
882
|
+
if (nonZero.length) console.log('[wall-e] Retention pruned: ' + nonZero.map(([k, v]) => `${k}=${v}`).join(', '));
|
|
883
|
+
},
|
|
884
|
+
onError: (err) => console.error('[brain-retention] Error:', err.message),
|
|
885
|
+
});
|
|
886
|
+
|
|
887
|
+
// Daily question digest: push the day's questions to opt-in channels (Slack/email). The
|
|
888
|
+
// CTM Wall-E tab always shows pending questions, so it needs no push. runDigestJob is
|
|
889
|
+
// self-gated to once/day at/after WALL_E_DIGEST_HOUR; we just tick it hourly.
|
|
890
|
+
scheduler.register({
|
|
891
|
+
name: 'question-digest',
|
|
892
|
+
run: async () => {
|
|
893
|
+
const { runDigestJob } = require('./loops/question-digest');
|
|
894
|
+
return runDigestJob();
|
|
895
|
+
},
|
|
896
|
+
intervalMs: 60 * 60 * 1000,
|
|
897
|
+
pool: 'io',
|
|
898
|
+
priority: 11,
|
|
899
|
+
startDelayMs: 100000,
|
|
900
|
+
onResult: (r) => {
|
|
901
|
+
if (r && r.sent) console.log(`[wall-e] Question digest sent (${r.count}): ${JSON.stringify(r.results)}`);
|
|
902
|
+
},
|
|
903
|
+
onError: (err) => console.error('[question-digest] Error:', err.message),
|
|
904
|
+
});
|
|
905
|
+
|
|
768
906
|
// Listening: Calendar sync (every 5 minutes)
|
|
769
907
|
scheduler.register({
|
|
770
908
|
name: 'listening:calendar-sync',
|
|
@@ -1027,6 +1165,12 @@ async function main() {
|
|
|
1027
1165
|
telemetry.track('shutdown', { uptime: process.uptime() });
|
|
1028
1166
|
telemetry.stop();
|
|
1029
1167
|
try { require('./skills/mcp-client').disconnectAll(); } catch {}
|
|
1168
|
+
try {
|
|
1169
|
+
const drained = await brain.drainOwnerWrites({ timeoutMs: 1500 });
|
|
1170
|
+
if (drained?.timedOut) {
|
|
1171
|
+
console.error(`[wall-e] Timed out waiting for brain write queue; active=${drained.active || 'none'} pending=${drained.pending || 0}`);
|
|
1172
|
+
}
|
|
1173
|
+
} catch {}
|
|
1030
1174
|
if (httpServer) httpServer.close();
|
|
1031
1175
|
brain.closeDb(true); // force=true bypasses daemon guard
|
|
1032
1176
|
} catch (e) {
|