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
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Canonical "what interactive state is this session in right now?" evaluator.
|
|
4
|
+
//
|
|
5
|
+
// One classifier, used by the live card path, the warm reconcile, and restart, so
|
|
6
|
+
// they can never disagree (the historical cause of "the approval card only shows
|
|
7
|
+
// after a restart": four detectors with four gates, and only the restart path
|
|
8
|
+
// happened to re-evaluate a clean frame). It composes the existing building blocks:
|
|
9
|
+
// - provider state detectors (workers/state-detectors) — detectWaitingInput is the
|
|
10
|
+
// authoritative, position-aware approval/choice signal (footer text does NOT veto;
|
|
11
|
+
// a bare composer below the widget does).
|
|
12
|
+
// - terminal-choice — highlighted numbered/form selection menus.
|
|
13
|
+
// - approval-agent — to derive a human label (the real command, not box junk).
|
|
14
|
+
//
|
|
15
|
+
// Pure: text in -> classification out. The live/stale discrimination that needs
|
|
16
|
+
// runtime knowledge (is the session output-quiet / not running?) is the CALLER's
|
|
17
|
+
// job (the reconcile only trusts this on a settled, non-running frame).
|
|
18
|
+
|
|
19
|
+
const { getStateDetector } = require('../workers/state-detectors');
|
|
20
|
+
const terminalChoice = require('./terminal-choice');
|
|
21
|
+
let approvalAgent = null;
|
|
22
|
+
try { approvalAgent = require('../approval-agent'); } catch { approvalAgent = null; }
|
|
23
|
+
|
|
24
|
+
// FNV-1a over a string — stable, dependency-free fingerprint for set/clear/dismissal.
|
|
25
|
+
function _fnv1a(str) {
|
|
26
|
+
let hash = 0x811c9dc5;
|
|
27
|
+
const s = String(str || '');
|
|
28
|
+
for (let i = 0; i < s.length; i += 1) {
|
|
29
|
+
hash ^= s.charCodeAt(i);
|
|
30
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
31
|
+
}
|
|
32
|
+
return hash.toString(16).padStart(8, '0');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function _approvalLabel(providerId, viewportText, rawTail) {
|
|
36
|
+
try {
|
|
37
|
+
if (approvalAgent && typeof approvalAgent.escalationCommandParts === 'function') {
|
|
38
|
+
const parts = approvalAgent.escalationCommandParts(rawTail || viewportText, providerId);
|
|
39
|
+
const title = parts && (parts.title || parts.command);
|
|
40
|
+
if (title && String(title).trim()) return String(title).trim().slice(0, 200);
|
|
41
|
+
}
|
|
42
|
+
} catch { /* label is best-effort */ }
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function _stripAnsiLocal(s) {
|
|
47
|
+
return String(s || '').replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, '').replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, '');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// A numbered option row of a selection menu: optional highlight cursor, a number,
|
|
51
|
+
// then "." or ")", then text. e.g. "❯ 1. Kimi / Moonshot", " 2. DeepSeek".
|
|
52
|
+
const _CHOICE_OPTION_ROW_RE = /^[>❯▸›▶◉○\s]*\d+[.)]\s+\S/;
|
|
53
|
+
// Header rows that are NOT the question: box borders/dividers, the AskUserQuestion
|
|
54
|
+
// tab row ("Model Approach Submit →"), keyboard-hint footers, "Read N file" notes.
|
|
55
|
+
const _CHOICE_HEADER_JUNK_RE = /^(?:[\s─━═│┃┌┐└┘├┤┬┴┼╭╮╰╯▀▄█▌▐░▒▓•·*\-_=.]+|(?:esc to|press enter|enter to|tab\b|tab to|arrow keys?|ctrl\+|shift\+|↑|↓|↵).*|read\s+\d+\s+files?\b.*|.*\bto\s+(?:select|navigate|cancel|submit|expand)\b.*|.*\b(?:submit|next|back)\s*[→›▶].*)$/i;
|
|
56
|
+
|
|
57
|
+
// Derive a human label for a `choice` prompt (e.g. a Claude AskUserQuestion or a
|
|
58
|
+
// numbered selection menu). evaluateWaitState only knows the option SET, not the
|
|
59
|
+
// QUESTION, so the banner read blank/divider for choices. We recover the question
|
|
60
|
+
// text from the rows ABOVE the options: take the question line nearest the options
|
|
61
|
+
// (the one with a "?"), reassembling any wrapped continuation rows, and clip at the
|
|
62
|
+
// "?". Falls back to the last meaningful header line, then "". Pure: text -> label.
|
|
63
|
+
function deriveChoiceLabel(viewportText) {
|
|
64
|
+
// Strip surrounding box-frame borders ("│ How broadly…? │") per line so a boxed
|
|
65
|
+
// widget's question is recovered cleanly (and its option rows match below), the
|
|
66
|
+
// same normalization terminal-choice applies to option rows.
|
|
67
|
+
const lines = _stripAnsiLocal(viewportText).split('\n')
|
|
68
|
+
.map((l) => l.replace(/\s+$/, '').replace(/^[│┃║▏▕|]\s?/, '').replace(/\s?[│┃║▏▕|]$/, ''));
|
|
69
|
+
let firstOpt = lines.length;
|
|
70
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
71
|
+
if (_CHOICE_OPTION_ROW_RE.test(lines[i])) { firstOpt = i; break; }
|
|
72
|
+
}
|
|
73
|
+
const header = lines.slice(0, firstOpt).map((l) => l.trim());
|
|
74
|
+
// The question is the "?"-bearing line closest to the options (scan upward), so a
|
|
75
|
+
// "?" in the agent's analysis prose higher up never wins over the real prompt.
|
|
76
|
+
let qIdx = -1;
|
|
77
|
+
for (let i = header.length - 1; i >= 0; i -= 1) {
|
|
78
|
+
if (header[i].includes('?') && !_CHOICE_HEADER_JUNK_RE.test(header[i])) { qIdx = i; break; }
|
|
79
|
+
}
|
|
80
|
+
if (qIdx >= 0) {
|
|
81
|
+
// Reassemble wrapped continuation rows: walk up while the previous row is prose
|
|
82
|
+
// that did not already end a sentence (so a long question split across terminal
|
|
83
|
+
// rows is rejoined), stopping at a junk/divider/tab row or a sentence boundary.
|
|
84
|
+
let start = qIdx;
|
|
85
|
+
while (start > 0) {
|
|
86
|
+
const prev = header[start - 1];
|
|
87
|
+
if (!prev || _CHOICE_HEADER_JUNK_RE.test(prev) || /[.?!:]$|[→›▶]$/.test(prev)) break;
|
|
88
|
+
start -= 1;
|
|
89
|
+
}
|
|
90
|
+
const para = header.slice(start, qIdx + 1).join(' ').replace(/\s+/g, ' ').trim();
|
|
91
|
+
const cut = para.indexOf('?');
|
|
92
|
+
const q = (cut >= 0 ? para.slice(0, cut + 1) : para).trim();
|
|
93
|
+
if (q.length > 1) return q.slice(0, 120);
|
|
94
|
+
}
|
|
95
|
+
// No question mark: the last meaningful (non-junk) header line is the best label.
|
|
96
|
+
for (let i = header.length - 1; i >= 0; i -= 1) {
|
|
97
|
+
const t = header[i];
|
|
98
|
+
if (t && !_CHOICE_HEADER_JUNK_RE.test(t)) return t.replace(/\s+/g, ' ').slice(0, 120);
|
|
99
|
+
}
|
|
100
|
+
return '';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const NONE = Object.freeze({ kind: 'none', live: false, label: '', fingerprint: '', gateReason: '' });
|
|
104
|
+
|
|
105
|
+
// `viewportText` = the settled headless viewport (authoritative). `rawTail` = a wider
|
|
106
|
+
// ANSI-stripped buffer, used ONLY to recover a label for a command box clipped by the
|
|
107
|
+
// fixed headless grid — never for liveness (it can contain stale scrollback).
|
|
108
|
+
function evaluateWaitState({ providerId, viewportText, rawTail } = {}) {
|
|
109
|
+
const text = String(viewportText || '');
|
|
110
|
+
if (!text.trim()) return NONE;
|
|
111
|
+
|
|
112
|
+
const detector = getStateDetector(providerId);
|
|
113
|
+
let wi = null;
|
|
114
|
+
try { wi = typeof detector.detectWaitingInput === 'function' ? detector.detectWaitingInput(text) : null; } catch { wi = null; }
|
|
115
|
+
const reason = wi && wi.reason;
|
|
116
|
+
|
|
117
|
+
// 1) A real approval (Yes/No + "Do you want to…"/confirm) is first-class — it must
|
|
118
|
+
// win over the generic menu detector, which would otherwise classify the Yes/No
|
|
119
|
+
// selection as a plain choice. Position-aware in the detector (footer text does
|
|
120
|
+
// NOT veto; a bare composer below the widget does).
|
|
121
|
+
if (reason === 'approval') {
|
|
122
|
+
const label = _approvalLabel(providerId, text, rawTail);
|
|
123
|
+
return { kind: 'approval', live: true, label, fingerprint: 'approval:' + _fnv1a(label || text.slice(-400)), gateReason: '' };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// 2) Idle composer awaiting free text, or a finished turn — not a blocker. Returning
|
|
127
|
+
// here also stops the menu detector from resurrecting a stale selection list that
|
|
128
|
+
// sits above the now-active composer.
|
|
129
|
+
if (reason === 'input') return { kind: 'input', live: false, label: '', fingerprint: '', gateReason: '' };
|
|
130
|
+
let finished = false;
|
|
131
|
+
try { finished = typeof detector.detectTurnFinished === 'function' && !!detector.detectTurnFinished(text); } catch { finished = false; }
|
|
132
|
+
if (finished) return { kind: 'finished', live: false, label: '', fingerprint: '', gateReason: '' };
|
|
133
|
+
|
|
134
|
+
// 3) Highlighted numbered / form selection menu (e.g. Claude AskUserQuestion).
|
|
135
|
+
try {
|
|
136
|
+
const menu = terminalChoice.extractTerminalChoice(text);
|
|
137
|
+
if (menu && (menu.kind === 'numbered' || menu.kind === 'form')) {
|
|
138
|
+
return { kind: 'choice', live: true, label: deriveChoiceLabel(text), fingerprint: 'choice:' + menu.fingerprint, gateReason: '' };
|
|
139
|
+
}
|
|
140
|
+
} catch { /* fall through */ }
|
|
141
|
+
|
|
142
|
+
// 4) Provider-reported choice (selection cursor without a generic menu shape).
|
|
143
|
+
if (reason === 'choice') {
|
|
144
|
+
return { kind: 'choice', live: true, label: deriveChoiceLabel(text), fingerprint: 'choice:' + _fnv1a(text.slice(-400)), gateReason: '' };
|
|
145
|
+
}
|
|
146
|
+
return NONE;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Decide whether the warm reconcile should CLEAR an existing approval/choice banner
|
|
150
|
+
// when the settled live frame no longer classifies as approval/choice. Reconcile is
|
|
151
|
+
// the single clearer, but it must clear ONLY with positive "moved-on" evidence — a
|
|
152
|
+
// genuine escalation whose live widget the provider detector can't structurally
|
|
153
|
+
// confirm (Codex's detectWaitingInput is narrower than the approver's gate) must NOT
|
|
154
|
+
// be dismissed while it is still on screen. Pure so it can be unit-tested.
|
|
155
|
+
// - movedOn: the detector saw the ready free-text composer (input) or a finished
|
|
156
|
+
// turn — a live widget would have replaced these, so the prompt is gone.
|
|
157
|
+
// - freshOutput: the agent rendered substantial output AFTER the card was raised —
|
|
158
|
+
// a blocked agent emits nothing until the prompt resolves, so it moved past it.
|
|
159
|
+
// - reconcileOwnsAndSeesNothing: a reconcile-raised card whose own detector now
|
|
160
|
+
// sees nothing is authoritative for itself; an escalation-owned `none` is kept.
|
|
161
|
+
function shouldClearWaitCard({ wsKind, prevOwner, lastSignificantOutput, raisedAt } = {}) {
|
|
162
|
+
const movedOn = wsKind === 'input' || wsKind === 'finished';
|
|
163
|
+
const freshOutput = Number(lastSignificantOutput || 0) > Number(raisedAt || 0);
|
|
164
|
+
const reconcileOwnsAndSeesNothing = prevOwner === 'reconcile' && wsKind === 'none';
|
|
165
|
+
const clear = !!(movedOn || freshOutput || reconcileOwnsAndSeesNothing);
|
|
166
|
+
const reason = !clear ? ''
|
|
167
|
+
: movedOn ? `moved-on:${wsKind}`
|
|
168
|
+
: freshOutput ? 'fresh-output'
|
|
169
|
+
: 'reconcile-owned-none';
|
|
170
|
+
return { clear, reason };
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Reconcile, while a frame is still repainting (inside the quiet-gate), must drop a
|
|
174
|
+
// stale ESCALATION-owned banner the moment the agent moves to a choice/question menu:
|
|
175
|
+
// it is now asking the USER to pick, not awaiting the escalated command's approval, so
|
|
176
|
+
// the old "Approval needed: …" banner (with the verifier's free-text reasoning) is
|
|
177
|
+
// moot and must not linger on top of the question. A navigated menu keeps output
|
|
178
|
+
// flowing, so the settled-frame choice branch may never run while the user interacts
|
|
179
|
+
// with it — hence this in-quiet-window supersede. Pure so server and tests share it.
|
|
180
|
+
function shouldSupersedeEscalation({ prevOwner, wsKind } = {}) {
|
|
181
|
+
return prevOwner === 'escalation' && wsKind === 'choice';
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
module.exports = { evaluateWaitState, _fnv1a, shouldClearWaitCard, deriveChoiceLabel, shouldSupersedeEscalation };
|
|
@@ -157,7 +157,39 @@ function _sanitizeHeaders(headers) {
|
|
|
157
157
|
return out;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
function
|
|
160
|
+
function _truncate(value, max = 500) {
|
|
161
|
+
const text = String(value || '');
|
|
162
|
+
return text.length > max ? `${text.slice(0, max)}...` : text;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function _buildUnavailablePayload(err, context = null) {
|
|
166
|
+
const status = context && typeof context === 'object' ? context : {};
|
|
167
|
+
const nativeDependency = status.nativeDependency || status.native_dependency || null;
|
|
168
|
+
const lastStartError = status.lastStartError || status.last_start_error || null;
|
|
169
|
+
const statusError = status.error || lastStartError?.message || (nativeDependency && nativeDependency.ok === false ? nativeDependency.message : null);
|
|
170
|
+
const reason = statusError || err.message || String(err);
|
|
171
|
+
const code = status.code
|
|
172
|
+
|| lastStartError?.code
|
|
173
|
+
|| (nativeDependency && nativeDependency.ok === false ? nativeDependency.code : null)
|
|
174
|
+
|| 'walle_unavailable';
|
|
175
|
+
return {
|
|
176
|
+
ok: false,
|
|
177
|
+
code,
|
|
178
|
+
error: `Wall-E unavailable: ${_truncate(reason)}`,
|
|
179
|
+
walle: {
|
|
180
|
+
running: !!status.running,
|
|
181
|
+
pid: status.pid || null,
|
|
182
|
+
pid_source: status.pidSource || status.pid_source || null,
|
|
183
|
+
stale_pid: status.stalePid || status.stale_pid || null,
|
|
184
|
+
code,
|
|
185
|
+
error: _truncate(reason),
|
|
186
|
+
native_dependency: nativeDependency || null,
|
|
187
|
+
last_start_error: lastStartError || null,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function proxyHttp(req, res, { pathname, port = getPort(), token = getToken(), unavailableContext = null } = {}) {
|
|
161
193
|
return new Promise((resolve) => {
|
|
162
194
|
const upstreamHeaders = _sanitizeHeaders(req.headers);
|
|
163
195
|
upstreamHeaders.host = `127.0.0.1:${port}`;
|
|
@@ -187,10 +219,19 @@ function proxyHttp(req, res, { pathname, port = getPort(), token = getToken() }
|
|
|
187
219
|
finish();
|
|
188
220
|
return;
|
|
189
221
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
222
|
+
Promise.resolve()
|
|
223
|
+
.then(() => (typeof unavailableContext === 'function' ? unavailableContext(err) : unavailableContext))
|
|
224
|
+
.catch(() => null)
|
|
225
|
+
.then((context) => {
|
|
226
|
+
if (res.headersSent || res.writableEnded || res.destroyed) {
|
|
227
|
+
finish();
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const body = JSON.stringify(_buildUnavailablePayload(err, context));
|
|
231
|
+
res.writeHead(502, { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body) });
|
|
232
|
+
res.end(body);
|
|
233
|
+
finish();
|
|
234
|
+
});
|
|
194
235
|
});
|
|
195
236
|
req.pipe(upstream);
|
|
196
237
|
});
|
|
@@ -203,4 +244,5 @@ module.exports = {
|
|
|
203
244
|
requestJson,
|
|
204
245
|
requestSse,
|
|
205
246
|
_sanitizeHeaders,
|
|
247
|
+
_buildUnavailablePayload,
|
|
206
248
|
};
|