mixdog 0.9.3 → 0.9.5
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 +112 -38
- package/package.json +10 -3
- package/scripts/bench/lead-review-tasks-r3.json +20 -0
- package/scripts/bench/lead-review-tasks.json +20 -0
- package/scripts/bench/r4-mixed-tasks.json +20 -0
- package/scripts/bench/r5-orchestrated-task.json +7 -0
- package/scripts/bench/review-tasks.json +20 -0
- package/scripts/bench/round-codex.json +114 -0
- package/scripts/bench/round-mixdog-lead-r3.json +269 -0
- package/scripts/bench/round-mixdog-lead.json +269 -0
- package/scripts/bench/round-mixdog.json +126 -0
- package/scripts/bench/round-r10-bigsample.json +679 -0
- package/scripts/bench/round-r11-codexalign.json +257 -0
- package/scripts/bench/round-r13-clientmeta.json +464 -0
- package/scripts/bench/round-r14-betafeatures.json +466 -0
- package/scripts/bench/round-r15-fulldefault.json +462 -0
- package/scripts/bench/round-r16-sessionid.json +466 -0
- package/scripts/bench/round-r17-wirebytes.json +456 -0
- package/scripts/bench/round-r18-prewarm.json +468 -0
- package/scripts/bench/round-r19-clean.json +472 -0
- package/scripts/bench/round-r20-prewarm-clean.json +475 -0
- package/scripts/bench/round-r21-delta-retry.json +473 -0
- package/scripts/bench/round-r22-full-probe.json +693 -0
- package/scripts/bench/round-r23-itemprobe.json +701 -0
- package/scripts/bench/round-r24-shapefix.json +677 -0
- package/scripts/bench/round-r25-serial.json +464 -0
- package/scripts/bench/round-r26-parallel3.json +671 -0
- package/scripts/bench/round-r27-parallel10.json +894 -0
- package/scripts/bench/round-r28-parallel10-stagger.json +882 -0
- package/scripts/bench/round-r29-parallel10-stagger166.json +886 -0
- package/scripts/bench/round-r30-instid.json +253 -0
- package/scripts/bench/round-r31-upgradeprobe.json +256 -0
- package/scripts/bench/round-r32-vs-codex-lead.json +254 -0
- package/scripts/bench/round-r33-vs-codex-codex.json +115 -0
- package/scripts/bench/round-r34-orchestrated.json +120 -0
- package/scripts/bench/round-r35-orchestrated-codex.json +61 -0
- package/scripts/bench/round-r36-orchestrated-capped.json +128 -0
- package/scripts/bench/round-r4-codex.json +114 -0
- package/scripts/bench/round-r4-mixed.json +225 -0
- package/scripts/bench/round-r5-gpt-lead.json +259 -0
- package/scripts/bench/round-r6-codex.json +114 -0
- package/scripts/bench/round-r6-solo.json +257 -0
- package/scripts/bench/round-r7-full.json +254 -0
- package/scripts/bench/round-r8-fulldefault.json +255 -0
- package/scripts/bench-run.mjs +251 -32
- package/scripts/freevar-smoke.mjs +95 -0
- package/scripts/internal-comms-bench.mjs +3 -4
- package/scripts/internal-comms-smoke.mjs +10 -9
- package/scripts/model-catalog-audit.mjs +209 -0
- package/scripts/model-list-sanitize-test.mjs +37 -0
- package/scripts/mouse-probe.mjs +45 -0
- package/scripts/output-style-bench.mjs +13 -6
- package/scripts/output-style-smoke.mjs +4 -4
- package/scripts/provider-toolcall-test.mjs +7 -3
- package/scripts/recall-bench.mjs +76 -13
- package/scripts/recall-quality-cases.json +12 -0
- package/scripts/recall-usecase-cases.json +18 -0
- package/scripts/session-bench.mjs +152 -6
- package/scripts/tool-smoke.mjs +25 -65
- package/scripts/tui-render-smoke.mjs +90 -0
- package/scripts/webhook-smoke.mjs +208 -0
- package/src/agents/debugger/AGENT.md +4 -1
- package/src/agents/heavy-worker/AGENT.md +9 -8
- package/src/agents/maintainer/AGENT.md +4 -0
- package/src/agents/reviewer/AGENT.md +2 -1
- package/src/agents/scheduler-task/AGENT.md +2 -3
- package/src/agents/webhook-handler/AGENT.md +2 -3
- package/src/agents/worker/AGENT.md +10 -7
- package/src/app.mjs +12 -1
- package/src/headless-role.mjs +7 -1
- package/src/lib/rules-builder.cjs +4 -0
- package/src/mixdog-session-runtime.mjs +647 -2056
- package/src/output-styles/default.md +30 -9
- package/src/output-styles/{oneline.md → extreme-minimal.md} +5 -4
- package/src/output-styles/minimal.md +8 -6
- package/src/output-styles/simple.md +21 -7
- package/src/rules/agent/00-common.md +6 -3
- package/src/rules/agent/30-explorer.md +16 -5
- package/src/rules/lead/01-general.md +5 -5
- package/src/rules/lead/lead-brief.md +15 -0
- package/src/rules/lead/lead-tool.md +6 -15
- package/src/rules/shared/01-tool.md +17 -21
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +8 -3
- package/src/runtime/agent/orchestrator/agent-runtime/agent-loop-policy.mjs +25 -0
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +100 -23
- package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +6 -15
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +362 -0
- package/src/runtime/agent/orchestrator/agent-trace-io.mjs +410 -0
- package/src/runtime/agent/orchestrator/agent-trace.mjs +16 -735
- package/src/runtime/agent/orchestrator/config.mjs +69 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +62 -20
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +209 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +489 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +81 -1281
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +607 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +32 -3
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +81 -0
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +248 -0
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +303 -0
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +505 -0
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +43 -1013
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +17 -3
- package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +105 -11
- package/src/runtime/agent/orchestrator/providers/model-list-sanitize.mjs +356 -0
- package/src/runtime/agent/orchestrator/providers/openai-codex-model.mjs +108 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +58 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +368 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +760 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +40 -1143
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +740 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +193 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +349 -2131
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +143 -1002
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +229 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-events.mjs +67 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +465 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +1105 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +80 -0
- package/src/runtime/agent/orchestrator/session/compact/budget.mjs +288 -0
- package/src/runtime/agent/orchestrator/session/compact/constants.mjs +85 -0
- package/src/runtime/agent/orchestrator/session/compact/engine.mjs +749 -0
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +82 -0
- package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +315 -0
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +643 -0
- package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +326 -0
- package/src/runtime/agent/orchestrator/session/compact.mjs +40 -2282
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +14 -2
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +61 -0
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +1 -3
- package/src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs +275 -0
- package/src/runtime/agent/orchestrator/session/loop/steering-ladder.mjs +173 -0
- package/src/runtime/agent/orchestrator/session/loop/termination.mjs +58 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +239 -0
- package/src/runtime/agent/orchestrator/session/loop.mjs +278 -402
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +471 -0
- package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +7 -4
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +12 -0
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +406 -0
- package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +80 -0
- package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +210 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +166 -1087
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +189 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +74 -179
- package/src/runtime/agent/orchestrator/stall-policy.mjs +20 -1
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +70 -20
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +22 -2
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +35 -44
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +40 -0
- package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +29 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +8 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +126 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +81 -92
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +161 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +108 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +28 -265
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +0 -6
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +57 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/keyword-match.mjs +82 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +10 -122
- package/src/runtime/agent/orchestrator/tools/code-graph/text-columns.mjs +45 -0
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +6 -6
- package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/patch/constants.mjs +9 -0
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +171 -0
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +471 -0
- package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs +436 -0
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +342 -0
- package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +359 -0
- package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +340 -0
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +643 -0
- package/src/runtime/agent/orchestrator/tools/patch.mjs +36 -2959
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +0 -21
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +9 -72
- package/src/runtime/agent/orchestrator/tools/shell-powershell.mjs +77 -0
- package/src/runtime/agent/orchestrator/tools/shell-state.mjs +154 -0
- package/src/runtime/channels/backends/discord-access.mjs +32 -0
- package/src/runtime/channels/backends/discord-attachments.mjs +65 -0
- package/src/runtime/channels/backends/discord-gateway.mjs +233 -0
- package/src/runtime/channels/backends/discord.mjs +27 -318
- package/src/runtime/channels/backends/telegram.mjs +8 -12
- package/src/runtime/channels/index.mjs +247 -701
- package/src/runtime/channels/lib/backend-dispatch.mjs +46 -0
- package/src/runtime/channels/lib/config.mjs +37 -149
- package/src/runtime/channels/lib/event-pipeline.mjs +22 -5
- package/src/runtime/channels/lib/event-queue.mjs +78 -13
- package/src/runtime/channels/lib/inbound-routing.mjs +74 -0
- package/src/runtime/channels/lib/interaction-workflows.mjs +5 -113
- package/src/runtime/channels/lib/output-forwarder.mjs +1 -1
- package/src/runtime/channels/lib/owner-heartbeat.mjs +75 -0
- package/src/runtime/channels/lib/parent-bridge.mjs +88 -0
- package/src/runtime/channels/lib/runtime-paths.mjs +14 -4
- package/src/runtime/channels/lib/scheduler.mjs +27 -113
- package/src/runtime/channels/lib/session-discovery.mjs +56 -4
- package/src/runtime/channels/lib/tool-dispatch.mjs +158 -0
- package/src/runtime/channels/lib/tool-format.mjs +1 -1
- package/src/runtime/channels/lib/transcript-discovery.mjs +4 -4
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +6 -3
- package/src/runtime/channels/lib/voice-transcription.mjs +179 -0
- package/src/runtime/channels/lib/webhook/deliveries.mjs +313 -0
- package/src/runtime/channels/lib/webhook/log.mjs +42 -0
- package/src/runtime/channels/lib/webhook/ngrok.mjs +181 -0
- package/src/runtime/channels/lib/webhook/signature.mjs +60 -0
- package/src/runtime/channels/lib/webhook.mjs +43 -616
- package/src/runtime/channels/tool-defs.mjs +11 -130
- package/src/runtime/memory/index.mjs +210 -1948
- package/src/runtime/memory/lib/core-memory-store.mjs +5 -1
- package/src/runtime/memory/lib/cycle-llm-adapters.mjs +58 -0
- package/src/runtime/memory/lib/cycle-scheduler.mjs +497 -0
- package/src/runtime/memory/lib/embedding-warmup.mjs +58 -0
- package/src/runtime/memory/lib/ko-morph.mjs +195 -0
- package/src/runtime/memory/lib/memory-config-flags.mjs +91 -0
- package/src/runtime/memory/lib/memory-cycle.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-gate.mjs +515 -0
- package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +324 -0
- package/src/runtime/memory/lib/memory-cycle2-shared.mjs +18 -0
- package/src/runtime/memory/lib/memory-cycle2.mjs +24 -842
- package/src/runtime/memory/lib/memory-embed.mjs +149 -0
- package/src/runtime/memory/lib/memory-process-lock.mjs +162 -0
- package/src/runtime/memory/lib/memory-recall-store.mjs +69 -12
- package/src/runtime/memory/lib/memory-text-utils.mjs +46 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -1
- package/src/runtime/memory/lib/query-handlers.mjs +802 -0
- package/src/runtime/memory/lib/recall-format.mjs +55 -0
- package/src/runtime/memory/lib/runtime-fetcher.mjs +8 -3
- package/src/runtime/memory/lib/transcript-ingest.mjs +425 -0
- package/src/runtime/memory/tool-defs.mjs +5 -13
- package/src/runtime/search/lib/http-fetch.mjs +274 -0
- package/src/runtime/search/lib/ssrf-guard.mjs +333 -0
- package/src/runtime/search/lib/web-tools.mjs +24 -602
- package/src/runtime/shared/atomic-file.mjs +26 -1
- package/src/runtime/shared/config.mjs +14 -4
- package/src/runtime/shared/launcher-control.mjs +2 -2
- package/src/runtime/shared/markdown-frontmatter.mjs +19 -0
- package/src/runtime/shared/schedules-store.mjs +13 -3
- package/src/runtime/shared/tool-execution-contract.mjs +2 -2
- package/src/runtime/shared/tool-primitives.mjs +308 -0
- package/src/runtime/shared/tool-result-summary.mjs +515 -0
- package/src/runtime/shared/tool-surface.mjs +80 -898
- package/src/runtime/shared/transcript-writer.mjs +23 -0
- package/src/runtime/shared/update-checker.mjs +7 -4
- package/src/session-runtime/config-helpers.mjs +119 -2
- package/src/session-runtime/config-lifecycle.mjs +232 -0
- package/src/session-runtime/cwd-plugins.mjs +226 -0
- package/src/session-runtime/mcp-glue.mjs +177 -0
- package/src/session-runtime/model-recency.mjs +111 -0
- package/src/session-runtime/native-search.mjs +247 -0
- package/src/session-runtime/output-styles.mjs +11 -9
- package/src/session-runtime/prewarm.mjs +142 -0
- package/src/session-runtime/provider-models.mjs +278 -0
- package/src/session-runtime/provider-usage.mjs +120 -0
- package/src/session-runtime/quick-model-rows.mjs +205 -0
- package/src/session-runtime/quick-search-models.mjs +47 -0
- package/src/session-runtime/session-hooks.mjs +93 -0
- package/src/session-runtime/settings-api.mjs +352 -0
- package/src/session-runtime/tool-catalog.mjs +29 -29
- package/src/session-runtime/tool-defs.mjs +84 -0
- package/src/session-runtime/warmup-schedulers.mjs +201 -0
- package/src/session-runtime/workflow.mjs +1 -1
- package/src/standalone/agent-tool/helpers.mjs +237 -0
- package/src/standalone/agent-tool/notify.mjs +107 -0
- package/src/standalone/agent-tool/provider-init.mjs +143 -0
- package/src/standalone/agent-tool/render.mjs +152 -0
- package/src/standalone/agent-tool/tool-def.mjs +55 -0
- package/src/standalone/agent-tool.mjs +138 -669
- package/src/standalone/channel-admin.mjs +102 -90
- package/src/standalone/channel-worker.mjs +4 -7
- package/src/standalone/explore-tool.mjs +64 -14
- package/src/standalone/hook-bus/config.mjs +207 -0
- package/src/standalone/hook-bus/constants.mjs +90 -0
- package/src/standalone/hook-bus/handlers.mjs +481 -0
- package/src/standalone/hook-bus/payload.mjs +31 -0
- package/src/standalone/hook-bus/rules.mjs +77 -0
- package/src/standalone/hook-bus.mjs +77 -870
- package/src/standalone/memory-runtime-proxy.mjs +7 -0
- package/src/standalone/opencode-go-login.mjs +5 -1
- package/src/standalone/provider-admin.mjs +1 -16
- package/src/standalone/usage-dashboard.mjs +3 -1
- package/src/tui/App.jsx +1059 -8110
- package/src/tui/app/app-format.mjs +213 -0
- package/src/tui/app/channel-pickers.mjs +508 -0
- package/src/tui/app/clipboard.mjs +67 -0
- package/src/tui/app/core-memory-picker.mjs +210 -0
- package/src/tui/app/extension-pickers.mjs +506 -0
- package/src/tui/app/input-parsers.mjs +193 -0
- package/src/tui/app/maintenance-pickers.mjs +356 -0
- package/src/tui/app/model-options.mjs +334 -0
- package/src/tui/app/model-picker.mjs +365 -0
- package/src/tui/app/onboarding-steps.mjs +400 -0
- package/src/tui/app/project-picker.mjs +247 -0
- package/src/tui/app/provider-setup-picker.mjs +580 -0
- package/src/tui/app/resume-picker.mjs +55 -0
- package/src/tui/app/route-pickers.mjs +419 -0
- package/src/tui/app/settings-picker.mjs +489 -0
- package/src/tui/app/slash-commands.mjs +101 -0
- package/src/tui/app/slash-dispatch.mjs +427 -0
- package/src/tui/app/text-layout.mjs +46 -0
- package/src/tui/app/theme-effort-pickers.mjs +154 -0
- package/src/tui/app/transcript-window.mjs +677 -0
- package/src/tui/app/use-mouse-input.mjs +460 -0
- package/src/tui/app/use-prompt-handlers.mjs +310 -0
- package/src/tui/app/use-transcript-scroll.mjs +512 -0
- package/src/tui/app/use-transcript-window.mjs +607 -0
- package/src/tui/components/ConfirmBar.jsx +10 -7
- package/src/tui/components/Picker.jsx +64 -15
- package/src/tui/components/PromptInput.jsx +33 -102
- package/src/tui/components/SlashCommandPalette.jsx +8 -1
- package/src/tui/components/StatusLine.jsx +69 -15
- package/src/tui/components/TextEntryPanel.jsx +11 -0
- package/src/tui/components/ToolExecution.jsx +52 -594
- package/src/tui/components/TranscriptItem.jsx +105 -0
- package/src/tui/components/UsagePanel.jsx +18 -4
- package/src/tui/components/prompt-input/edit-helpers.mjs +72 -0
- package/src/tui/components/prompt-input/voice-indicator.mjs +39 -0
- package/src/tui/components/tool-execution/ResultBody.jsx +56 -0
- package/src/tui/components/tool-execution/surface-detail.mjs +405 -0
- package/src/tui/components/tool-execution/text-format.mjs +161 -0
- package/src/tui/display-width.mjs +20 -3
- package/src/tui/dist/index.mjs +13553 -12384
- package/src/tui/engine/agent-job-feed.mjs +133 -0
- package/src/tui/engine/notification-plan.mjs +76 -0
- package/src/tui/engine/render-timing.mjs +17 -0
- package/src/tui/engine/tool-approval.mjs +94 -0
- package/src/tui/engine/tool-card-results.mjs +234 -0
- package/src/tui/engine/tool-result-status.mjs +135 -0
- package/src/tui/engine.mjs +170 -574
- package/src/tui/figures.mjs +5 -0
- package/src/tui/index.jsx +65 -1
- package/src/tui/input-editing.mjs +2 -2
- package/src/tui/markdown/format-token.mjs +4 -1
- package/src/tui/statusline-ansi-bridge.mjs +11 -3
- package/src/tui/theme.mjs +6 -0
- package/src/ui/statusline-agents.mjs +213 -0
- package/src/ui/statusline-format.mjs +146 -0
- package/src/ui/statusline-segments.mjs +148 -0
- package/src/ui/statusline.mjs +77 -501
- package/src/ui/tool-card.mjs +0 -1
- package/src/vendor/statusline/bin/statusline-route.mjs +15 -2
- package/src/workflows/default/WORKFLOW.md +16 -18
- package/src/workflows/sequential/WORKFLOW.md +16 -18
- package/vendor/ink/build/display-width.js +19 -3
- package/vendor/ink/build/ink.js +112 -7
- package/vendor/ink/build/log-update.js +17 -3
- package/vendor/ink/build/wrap-text.js +125 -0
- package/scripts/_test-folder-dialog.mjs +0 -30
- package/scripts/fix-brief-fn.mjs +0 -35
- package/scripts/fix-format-tool-surface.mjs +0 -24
- package/scripts/fix-tool-exec-visible.mjs +0 -42
- package/scripts/patch-agent-brief.mjs +0 -48
- package/scripts/patch-app.mjs +0 -21
- package/scripts/patch-app2.mjs +0 -18
- package/scripts/patch-dist-brief.mjs +0 -96
- package/scripts/patch-tool-exec.mjs +0 -70
- package/src/examples/schedules/SCHEDULE.example.md +0 -32
- package/src/examples/webhooks/WEBHOOK.example.md +0 -40
- package/src/runtime/agent/orchestrator/session/manager.reactive-persist.test.mjs +0 -107
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.test.mjs +0 -143
- package/src/runtime/agent/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -285
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.test.mjs +0 -162
- package/src/runtime/agent/orchestrator/tools/builtin/open-config-tool.mjs +0 -26
- package/src/runtime/channels/lib/holidays.mjs +0 -138
- package/src/runtime/shared/channel-notification-routing.test.mjs +0 -45
- package/src/runtime/shared/task-notification-envelope.test.mjs +0 -107
- package/src/runtime/shared/tool-execution-contract.test.mjs +0 -183
- package/src/standalone/agent-task-status.test.mjs +0 -76
- package/src/tui/components/tool-output-format.test.mjs +0 -399
- package/src/tui/display-width.test.mjs +0 -35
- package/src/tui/engine-runtime-notification.test.mjs +0 -115
- package/src/tui/engine-tool-result-text.test.mjs +0 -75
- package/src/tui/input-editing.selection.test.mjs +0 -75
- package/src/tui/markdown/format-token.test.mjs +0 -354
- package/src/tui/markdown/render-ansi.test.mjs +0 -108
- package/src/tui/markdown/stream-fence.test.mjs +0 -26
- package/src/tui/markdown/streaming-markdown.test.mjs +0 -70
- package/src/tui/paste-fix.test.mjs +0 -119
- package/src/tui/prompt-history-store.test.mjs +0 -52
- package/src/tui/statusline-ansi-bridge.test.mjs +0 -159
- package/src/tui/transcript-tool-failures.test.mjs +0 -111
- package/src/ui/markdown.test.mjs +0 -70
- package/src/ui/statusline-context-label.test.mjs +0 -15
- package/src/vendor/statusline/bin/statusline-lib.mjs +0 -186
- package/src/vendor/statusline/bin/statusline-route.test.mjs +0 -80
package/README.md
CHANGED
|
@@ -1,84 +1,158 @@
|
|
|
1
1
|
# mixdog
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
one terminal
|
|
3
|
+
Standalone coding-agent CLI/TUI for running a multi-provider AI workspace from
|
|
4
|
+
one terminal.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
MCP/plugin/skill loading, memory, web search, channel integrations, and
|
|
8
|
-
repo tools for reading, editing, testing, and reviewing code.
|
|
6
|
+
Mixdog combines an Ink-based terminal UI, model/provider routing, workflow
|
|
7
|
+
agents, MCP/plugin/skill loading, memory, web search, channel integrations, and
|
|
8
|
+
repo-focused tools for reading, editing, testing, and reviewing code.
|
|
9
9
|
|
|
10
10
|
## Highlights
|
|
11
11
|
|
|
12
|
-
- Multi-provider model
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
- **Multi-provider model picker** for Anthropic, OpenAI, Google/Gemini, xAI/Grok,
|
|
13
|
+
DeepSeek, OpenCode Go, OAuth-backed providers, OpenAI-compatible APIs, Ollama,
|
|
14
|
+
and LM Studio/local endpoints.
|
|
15
|
+
- **Live model catalog** from provider `/models` endpoints, enriched with
|
|
16
|
+
LiteLLM/models.dev metadata for context windows, output limits, pricing, tool
|
|
17
|
+
support, reasoning, web search, and recency.
|
|
18
|
+
- **Full-screen TUI** with slash commands, provider setup, model/workflow
|
|
19
|
+
pickers, usage dashboards, statusline integration, resumable sessions, and
|
|
20
|
+
detailed tool cards.
|
|
21
|
+
- **Workflow delegation** through `/agent` and the `agent` tool, including
|
|
22
|
+
worker, heavy-worker, reviewer, debugger, maintainer, and explorer roles.
|
|
23
|
+
- **Repo-native tools** for `read`, `grep`, `glob`, `list`, `code_graph`,
|
|
18
24
|
`apply_patch`, `shell`, `cwd`, `explore`, web search, and memory recall.
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
- Optional Discord/channel/webhook/schedule integrations for remote or event
|
|
22
|
-
driven workflows.
|
|
25
|
+
- **Remote/event workflows** via optional Discord channel, webhook, schedule,
|
|
26
|
+
and channel-management integrations.
|
|
23
27
|
|
|
24
28
|
## Requirements
|
|
25
29
|
|
|
26
30
|
- Node.js >= 22
|
|
27
31
|
|
|
28
|
-
##
|
|
32
|
+
## Install
|
|
29
33
|
|
|
30
34
|
```bash
|
|
31
35
|
npm install
|
|
32
36
|
```
|
|
33
37
|
|
|
34
|
-
To install the
|
|
38
|
+
To install the `mixdog` command globally from this checkout:
|
|
35
39
|
|
|
36
40
|
```bash
|
|
37
41
|
npm install -g .
|
|
38
42
|
mixdog --help
|
|
39
43
|
```
|
|
40
44
|
|
|
41
|
-
##
|
|
45
|
+
## Run
|
|
42
46
|
|
|
43
47
|
```bash
|
|
44
|
-
#
|
|
48
|
+
# Start the TUI in the current project
|
|
45
49
|
mixdog
|
|
46
50
|
|
|
47
|
-
#
|
|
48
|
-
|
|
51
|
+
# Start with an explicit route
|
|
52
|
+
mixdog --provider anthropic-oauth --model claude-haiku-4-5-20251001
|
|
49
53
|
|
|
50
|
-
#
|
|
51
|
-
|
|
54
|
+
# Read-only tool surface
|
|
55
|
+
mixdog --readonly
|
|
56
|
+
|
|
57
|
+
# Enable remote/channel mode for this session
|
|
58
|
+
mixdog --remote
|
|
59
|
+
|
|
60
|
+
# Re-run first-run setup
|
|
61
|
+
mixdog --onboarding
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Headless role mode is also supported:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
mixdog worker "fix the failing test"
|
|
68
|
+
mixdog reviewer "review the current diff"
|
|
52
69
|
```
|
|
53
70
|
|
|
54
|
-
|
|
55
|
-
models, `/workflow` to select a workflow, `/agents` to inspect available
|
|
56
|
-
workflow agents, and `/agent` to manage active agent tasks.
|
|
71
|
+
## TUI basics
|
|
57
72
|
|
|
58
|
-
|
|
73
|
+
Common slash commands:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
/help show help
|
|
77
|
+
/providers configure provider auth and local endpoints
|
|
78
|
+
/model choose provider/model, effort, and fast mode
|
|
79
|
+
/workflow choose the active workflow
|
|
80
|
+
/agents show available workflow agents
|
|
81
|
+
/agent manage active agent tasks
|
|
82
|
+
/mode switch tool surface: full | readonly
|
|
83
|
+
/compact compact older conversation context
|
|
84
|
+
/clear reset the conversation and screen
|
|
85
|
+
/OutputStyle show or switch Lead output style
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Use `/providers` first if no model is configured, then `/model` to pick the
|
|
89
|
+
route. The model picker warms the provider catalog in the background and keeps
|
|
90
|
+
Claude families such as Opus, Sonnet, Haiku, and Fable separate when filtering
|
|
91
|
+
current Anthropic models.
|
|
92
|
+
|
|
93
|
+
## Scripts
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npm run smoke # basic smoke check
|
|
97
|
+
npm run smoke:all # core smoke suite
|
|
98
|
+
npm run smoke:tui # TUI render smoke
|
|
99
|
+
npm run smoke:tools # tool smoke suite
|
|
100
|
+
npm run build:tui # build the bundled Ink TUI
|
|
101
|
+
npm run audit:models # inspect model catalog metadata
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Additional diagnostics and benchmarks live under `scripts/`.
|
|
105
|
+
|
|
106
|
+
## Data and configuration
|
|
107
|
+
|
|
108
|
+
Mixdog uses `~/.mixdog` as its home root. Runtime data lives in
|
|
109
|
+
`~/.mixdog/data` by default.
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
MIXDOG_HOME=/path/to/home mixdog
|
|
113
|
+
MIXDOG_DATA_DIR=/path/to/data mixdog
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Useful environment toggles:
|
|
117
|
+
|
|
118
|
+
- `MIXDOG_TUI_MOUSE=0` — use terminal-native mouse behavior instead of the TUI
|
|
119
|
+
mouse/selection layer.
|
|
120
|
+
- `MIXDOG_DISABLE_MODEL_PREFETCH=1` — disable background provider model prefetch.
|
|
121
|
+
- `MIXDOG_PROVIDER_MODEL_WARMUP_DELAY_MS=<ms>` — tune model-catalog warmup delay.
|
|
122
|
+
- `MIXDOG_MODEL_STALE_MONTHS=<months>` — tune catalog staleness filtering.
|
|
123
|
+
|
|
124
|
+
## Project layout
|
|
59
125
|
|
|
60
126
|
```text
|
|
61
127
|
src/
|
|
62
128
|
cli.mjs # CLI entry point (bin: mixdog)
|
|
63
|
-
app.mjs #
|
|
64
|
-
|
|
65
|
-
runtime/ #
|
|
66
|
-
|
|
129
|
+
app.mjs # CLI/TUI/headless mode wiring
|
|
130
|
+
help.mjs # command help text
|
|
131
|
+
runtime/ # providers, tools, memory, channels, session runtime
|
|
132
|
+
session-runtime/
|
|
133
|
+
# model routing, catalog rows, workflow/session helpers
|
|
134
|
+
tui/ # canonical Ink TUI
|
|
67
135
|
agents/ # workflow agent definitions
|
|
136
|
+
workflows/ # workflow definitions
|
|
68
137
|
rules/ # Lead and agent instructions
|
|
69
138
|
scripts/
|
|
70
139
|
smoke*.mjs # smoke checks
|
|
140
|
+
*test.mjs # focused node:test checks
|
|
71
141
|
build-tui.mjs # esbuild bundle for the React TUI
|
|
72
142
|
vendor/
|
|
73
143
|
ink/ # Mixdog Ink renderer
|
|
74
144
|
```
|
|
75
145
|
|
|
76
|
-
##
|
|
146
|
+
## Published package contents
|
|
147
|
+
|
|
148
|
+
The npm package is limited by `package.json#files` to:
|
|
77
149
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
150
|
+
```text
|
|
151
|
+
README.md
|
|
152
|
+
scripts/
|
|
153
|
+
src/
|
|
154
|
+
vendor/
|
|
155
|
+
```
|
|
81
156
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
behavior.
|
|
157
|
+
`docs/` is not included in the published package unless `package.json#files` is
|
|
158
|
+
changed.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mixdog",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Standalone mixdog coding-agent CLI/TUI workspace.",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"files": [
|
|
27
27
|
"README.md",
|
|
28
28
|
"scripts/",
|
|
29
|
+
"!scripts/bench/cache-hit-*.json",
|
|
29
30
|
"src/",
|
|
30
31
|
"vendor/"
|
|
31
32
|
],
|
|
@@ -33,7 +34,7 @@
|
|
|
33
34
|
"prepack": "npm run build:tui",
|
|
34
35
|
"start": "node src/cli.mjs",
|
|
35
36
|
"smoke": "node scripts/smoke.mjs",
|
|
36
|
-
"smoke:all": "npm run smoke && npm run smoke:boot && npm run smoke:tools && npm run smoke:output",
|
|
37
|
+
"smoke:all": "npm run smoke && npm run smoke:boot && npm run smoke:tools && npm run smoke:output && npm run smoke:tui && npm run smoke:freevars",
|
|
37
38
|
"smoke:boot": "node scripts/boot-smoke.mjs",
|
|
38
39
|
"smoke:compact": "node scripts/compact-smoke.mjs",
|
|
39
40
|
"smoke:loop": "node scripts/smoke-loop.mjs",
|
|
@@ -41,6 +42,8 @@
|
|
|
41
42
|
"smoke:loop:report": "node scripts/smoke-loop-report.mjs",
|
|
42
43
|
"smoke:tools": "node scripts/tool-smoke.mjs",
|
|
43
44
|
"smoke:output": "node scripts/output-style-smoke.mjs",
|
|
45
|
+
"smoke:tui": "node scripts/tui-render-smoke.mjs",
|
|
46
|
+
"smoke:freevars": "node scripts/freevar-smoke.mjs",
|
|
44
47
|
"test:toolcall": "node --test scripts/toolcall-args-test.mjs",
|
|
45
48
|
"test:providers": "node --test scripts/provider-toolcall-test.mjs",
|
|
46
49
|
"failures": "node scripts/tool-failures.mjs",
|
|
@@ -52,6 +55,7 @@
|
|
|
52
55
|
"bench:corpus": "node scripts/routing-corpus.mjs",
|
|
53
56
|
"bench:run": "node scripts/bench-run.mjs",
|
|
54
57
|
"bench:recall": "node scripts/recall-bench.mjs",
|
|
58
|
+
"audit:models": "node scripts/model-catalog-audit.mjs",
|
|
55
59
|
"patch:replay": "node scripts/patch-replay.mjs",
|
|
56
60
|
"build:tui": "node scripts/build-tui.mjs"
|
|
57
61
|
},
|
|
@@ -70,6 +74,7 @@
|
|
|
70
74
|
"discord.js": "^14.26.4",
|
|
71
75
|
"ink": "^7.1.0",
|
|
72
76
|
"jsdom": "^26.1.0",
|
|
77
|
+
"kiwi-nlp": "^0.21.0",
|
|
73
78
|
"marked": "^14.1.4",
|
|
74
79
|
"node-cron": "^4.5.0",
|
|
75
80
|
"openai": "^6.44.0",
|
|
@@ -92,6 +97,8 @@
|
|
|
92
97
|
}
|
|
93
98
|
},
|
|
94
99
|
"devDependencies": {
|
|
95
|
-
"
|
|
100
|
+
"acorn": "^8.17.0",
|
|
101
|
+
"esbuild": "^0.28.1",
|
|
102
|
+
"eslint-scope": "^9.1.2"
|
|
96
103
|
}
|
|
97
104
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "lead-review-session-runtime",
|
|
4
|
+
"agent": "reviewer",
|
|
5
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
6
|
+
"prompt": "READ-ONLY review task: you and any delegated agents must NOT modify, create, or delete any files - report findings only. Review the folder src/session-runtime/ for correctness, regression, and security risks. Delegate exploration/reading to your workflow agents where useful and synthesize their findings. Focus on real actionable bugs: broken imports, undefined identifiers, race conditions, wrong fallbacks, data loss paths. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"id": "lead-review-channels-lib",
|
|
10
|
+
"agent": "reviewer",
|
|
11
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
12
|
+
"prompt": "READ-ONLY review task: you and any delegated agents must NOT modify, create, or delete any files - report findings only. Review the folder src/runtime/channels/lib/ for correctness, regression, and security risks. Delegate exploration/reading to your workflow agents where useful and synthesize their findings. Focus on real actionable bugs: message loss, double-forwarding, ownership races, watcher leaks, unsafe input handling. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "lead-review-compact",
|
|
16
|
+
"agent": "reviewer",
|
|
17
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
18
|
+
"prompt": "READ-ONLY review task: you and any delegated agents must NOT modify, create, or delete any files - report findings only. Review the folder src/runtime/agent/orchestrator/session/compact/ for correctness, regression, and security risks. Delegate exploration/reading to your workflow agents where useful and synthesize their findings. Focus on real actionable bugs: schema validation gaps, data corruption on summarize, lossy round-trips, error swallowing. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
19
|
+
}
|
|
20
|
+
]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "lead-review-session-runtime",
|
|
4
|
+
"agent": "reviewer",
|
|
5
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
6
|
+
"prompt": "Review the folder src/session-runtime/ for correctness, regression, and security risks. Delegate exploration/reading to your workflow agents where useful and synthesize their findings. Focus on real actionable bugs: broken imports, undefined identifiers, race conditions, wrong fallbacks, data loss paths. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"id": "lead-review-channels-lib",
|
|
10
|
+
"agent": "reviewer",
|
|
11
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
12
|
+
"prompt": "Review the folder src/runtime/channels/lib/ for correctness, regression, and security risks. Delegate exploration/reading to your workflow agents where useful and synthesize their findings. Focus on real actionable bugs: message loss, double-forwarding, ownership races, watcher leaks, unsafe input handling. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "lead-review-compact",
|
|
16
|
+
"agent": "reviewer",
|
|
17
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
18
|
+
"prompt": "Review the folder src/runtime/agent/orchestrator/session/compact/ for correctness, regression, and security risks. Delegate exploration/reading to your workflow agents where useful and synthesize their findings. Focus on real actionable bugs: schema validation gaps, data corruption on summarize, lossy round-trips, error swallowing. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
19
|
+
}
|
|
20
|
+
]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "r4-debug-forwarding-gap",
|
|
4
|
+
"agent": "reviewer",
|
|
5
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
6
|
+
"prompt": "Investigate a real reliability question in this repo: when the Discord channel bridge activates (bridge-state.json written) there can be a window where assistant output is not yet forwarded to the channel - transcript binding, fs.watch on a not-yet-created transcript file, and ownership probes are involved. Trace the full path from bridge activation to first forwarded message in src/runtime/channels/ (index.mjs, lib/output-forwarder.mjs), identify every gap where output produced during the window would be silently dropped or delayed, and state for each gap whether backlog catch-up recovers it. Report findings ordered by impact with file:line anchors. End with a one-line verdict."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"id": "r4-impl-usage-summary",
|
|
10
|
+
"agent": "worker",
|
|
11
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
12
|
+
"prompt": "Implement a small feature: add a `usage:today` npm script backed by a new scripts/usage-today.mjs that reads ~/.mixdog/data/history/agent-trace.jsonl (respect MIXDOG_DATA_DIR), filters usage rows from local midnight, and prints per-model calls, input/cached/output tokens, and costUsd totals plus a grand total line. Follow the style of scripts/session-bench.mjs arg parsing. Verify with node --check and run it once. Report the diff summary."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "r4-explain-compact-engine",
|
|
16
|
+
"agent": "explore",
|
|
17
|
+
"cwd": "C:/Project/mixdog-bench",
|
|
18
|
+
"prompt": "Map the compaction subsystem: starting from src/runtime/agent/orchestrator/session/compact/engine.mjs, produce a concise architecture brief - entry points and callers, the decision flow for when compaction fires, how the preserved tail is chosen, where redaction hooks in, and the failure/fallback paths. Anchor every claim with file:line. Keep it under 40 lines."
|
|
19
|
+
}
|
|
20
|
+
]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "r5-orchestrated-audit",
|
|
4
|
+
"agent": "lead",
|
|
5
|
+
"prompt": "You are coordinating work in this repo. Task: audit and improve the provider retry story in two independent scopes, then verify. Scope A: analyze src/runtime/agent/orchestrator/providers/retry-classifier.mjs and how openai-oauth-ws.mjs consumes its classifiers - list every classifier bucket, which are actually reachable, and any bucket that no code path can produce. Scope B: analyze the handshake retry loop in openai-oauth-ws.mjs (_acquireWithRetry) and the midstream retry loop (sendViaWebSocket) - document their budgets, backoff, and whether any error class can double-retry across both layers. These scopes are independent: delegate them to separate workers in parallel, then have the results cross-checked, and produce a single merged report with file:line evidence. Do NOT edit any files - analysis only. The final report is the deliverable."
|
|
6
|
+
}
|
|
7
|
+
]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "review-session-runtime",
|
|
4
|
+
"agent": "reviewer",
|
|
5
|
+
"cwd": "C:/Project/mixdog",
|
|
6
|
+
"prompt": "Review the folder src/session-runtime/ for correctness, regression, and security risks. Focus on real actionable bugs: broken imports, undefined identifiers, race conditions, wrong fallbacks, data loss paths. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"id": "review-channels-lib",
|
|
10
|
+
"agent": "reviewer",
|
|
11
|
+
"cwd": "C:/Project/mixdog",
|
|
12
|
+
"prompt": "Review the folder src/runtime/channels/lib/ for correctness, regression, and security risks. Focus on real actionable bugs: message loss, double-forwarding, ownership races, watcher leaks, unsafe input handling. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "review-compact",
|
|
16
|
+
"agent": "reviewer",
|
|
17
|
+
"cwd": "C:/Project/mixdog",
|
|
18
|
+
"prompt": "Review the folder src/runtime/agent/orchestrator/session/compact/ for correctness, regression, and security risks. Focus on real actionable bugs: schema validation gaps, data corruption on summarize, lossy round-trips, error swallowing. Report findings ordered by severity, one line each, with file:line anchors. Skip style nits. End with a one-line verdict."
|
|
19
|
+
}
|
|
20
|
+
]
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
{
|
|
2
|
+
"round": "1",
|
|
3
|
+
"runner": "codex",
|
|
4
|
+
"opts": {
|
|
5
|
+
"provider": "openai-oauth",
|
|
6
|
+
"model": "gpt-5.5",
|
|
7
|
+
"effort": "high",
|
|
8
|
+
"fast": false,
|
|
9
|
+
"env": {}
|
|
10
|
+
},
|
|
11
|
+
"tasks": 3,
|
|
12
|
+
"completed": 3,
|
|
13
|
+
"completion_rate": 100,
|
|
14
|
+
"sessions": [
|
|
15
|
+
"019f24e5-98ee-7cf0-afb0-a1a80ac81702",
|
|
16
|
+
"019f24e5-98f3-7f12-9638-7a899028c7e3",
|
|
17
|
+
"019f24e5-98f3-7f22-902c-934f0f7cbfb0"
|
|
18
|
+
],
|
|
19
|
+
"results": [
|
|
20
|
+
{
|
|
21
|
+
"id": "review-session-runtime",
|
|
22
|
+
"agent": "reviewer",
|
|
23
|
+
"ok": true,
|
|
24
|
+
"ms": 300087,
|
|
25
|
+
"sessionId": "019f24e5-98ee-7cf0-afb0-a1a80ac81702",
|
|
26
|
+
"card": {
|
|
27
|
+
"session": "019f24e5-98ee-7cf0-afb0-a1a80ac81702",
|
|
28
|
+
"wall_ms": 300087,
|
|
29
|
+
"uncached_in": 157635,
|
|
30
|
+
"cached_in": 1071360,
|
|
31
|
+
"out_tokens": 8581,
|
|
32
|
+
"cache_ratio": 0.872,
|
|
33
|
+
"completed": 1
|
|
34
|
+
},
|
|
35
|
+
"output": "- High: `src/session-runtime/plugin-mcp.mjs:40` project `.mcp.json` stdio entries can set `cwd` to `..` or an absolute path outside the project, bypassing the stricter project-root guard in `normalizeMcpServerInput` and letting repo-local MCP config run with access scoped outside the opened repo.\n- Medium: `src/session-runtime/workflow.mjs:276` invalid persisted `effort` values throw from read paths like `summarizeWorkflowRoutes`/`agentRouteFromConfig` instead of being ignored, so one bad config entry can break onboarding status or agent listing.\n- Low: `src/session-runtime/provider-models.mjs:42` cached `{id, provider}` fallback metadata is returned before honoring `allowFetch`, so a prior non-fetch lookup prevents a later forced lookup from ever retrieving real model capabilities.\n\nVerdict: no broken imports found, but fix the project MCP cwd escape before trusting repo-local MCP configs."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "review-channels-lib",
|
|
39
|
+
"agent": "reviewer",
|
|
40
|
+
"ok": true,
|
|
41
|
+
"ms": 172813,
|
|
42
|
+
"sessionId": "019f24e5-98f3-7f12-9638-7a899028c7e3",
|
|
43
|
+
"card": {
|
|
44
|
+
"session": "019f24e5-98f3-7f12-9638-7a899028c7e3",
|
|
45
|
+
"wall_ms": 172813,
|
|
46
|
+
"uncached_in": 136264,
|
|
47
|
+
"cached_in": 1237376,
|
|
48
|
+
"out_tokens": 8502,
|
|
49
|
+
"cache_ratio": 0.901,
|
|
50
|
+
"completed": 1
|
|
51
|
+
},
|
|
52
|
+
"output": "- High `src/runtime/channels/lib/webhook/deliveries.mjs:255`: delivery rows are appended asynchronously but the in-memory dedup state advances immediately, so crashes, append failures, out-of-order status writes, or compaction can lose/reorder `received/pending/done` rows and allow duplicate webhook dispatch or permanent dedup blockage.\n- High `src/runtime/channels/lib/event-queue.mjs:239`: queued events are moved to processed at `:241` after a fire-and-forget `injectFn`; if parent IPC drops/fails, the claimed event is acknowledged anyway and the message is lost.\n- Medium `src/runtime/channels/lib/output-forwarder.mjs:316`: actual backend send does not re-check `_isOwner()` at send time, so an ownership handoff during an in-flight drain can let the old owner send while the new owner tails the same transcript, causing double-forwarding.\n- Medium `src/runtime/channels/lib/output-forwarder.mjs:690`: `closeWatcher()` clears `sendRetryTimer` but leaves queued failed items in `finalLane/streamLane`, so transcript rebind/watch error during backoff can strand unsent messages until unrelated new activity kicks the drain.\n- Medium `src/runtime/channels/lib/webhook.mjs:530`: `startNgrok()` schedules `waitAndStart` timers that `stop()` at `:585` never cancels, so reload/stop during the delay can spawn a stale ngrok process after shutdown.\n- Low `src/runtime/channels/lib/inbound-routing.mjs:35`: stale dedup marker files are treated as non-duplicates but never refreshed/replaced, so cross-process duplicate inbound messages after TTL can bypass dedup repeatedly.\n\nVerdict: Not clean yet; I found real message-loss, double-forwarding, and lifecycle leak risks worth fixing before shipping."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "review-compact",
|
|
56
|
+
"agent": "reviewer",
|
|
57
|
+
"ok": true,
|
|
58
|
+
"ms": 140945,
|
|
59
|
+
"sessionId": "019f24e5-98f3-7f22-902c-934f0f7cbfb0",
|
|
60
|
+
"card": {
|
|
61
|
+
"session": "019f24e5-98f3-7f22-902c-934f0f7cbfb0",
|
|
62
|
+
"wall_ms": 140945,
|
|
63
|
+
"uncached_in": 102061,
|
|
64
|
+
"cached_in": 416512,
|
|
65
|
+
"out_tokens": 7120,
|
|
66
|
+
"cache_ratio": 0.803,
|
|
67
|
+
"completed": 1
|
|
68
|
+
},
|
|
69
|
+
"output": "- High `src/runtime/agent/orchestrator/session/compact/engine.mjs:588` - `recallTailStartIndex()` relies on object identity, so when `fitSingleRecallTurnToCap()` clones/truncates the first tail user message, `indexOf()` fails and the fallback can misplace the tail, duplicating summarized user content and dropping/reordering recent messages.\n- High `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:269` - `redactMessageToolCallSecrets()` returns unchanged unless `m.toolCalls` exists, leaving Anthropic-style `content` / `assistantBlocks` `tool_use` inputs unredacted in preserved tails.\n- High `src/runtime/agent/orchestrator/session/compact/text-utils.mjs:12` - the sensitive-key regex misses common camelCase token keys like `accessToken`, `idToken`, and `sessionToken`, so those secrets survive both prompt summaries and verbatim tail redaction.\n- Medium `src/runtime/agent/orchestrator/session/compact/budget.mjs:79` - `drainSessionCycle1()` swallows `cycle1` errors and returns a “successful” partial drain, so callers can proceed with raw pending rows while diagnostics lose the actual failure.\n- Medium `src/runtime/agent/orchestrator/session/compact/summary-schema.mjs:68` - semantic schema validation only checks top-level `##` anchors, while `truncateSummaryBySections()` can drop required `### Done/In Progress/Blocked` progress structure and still treat the summary as valid.\n\nVerdict: Needs fixes before compaction can be considered secure and loss-safe."
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"task_complete": true,
|
|
73
|
+
"task_errors": [],
|
|
74
|
+
"score_complete": true,
|
|
75
|
+
"score_errors": [],
|
|
76
|
+
"group": {
|
|
77
|
+
"n": 3,
|
|
78
|
+
"wall_ms": 204615,
|
|
79
|
+
"uncached_in": 131986.7,
|
|
80
|
+
"cached_in": 908416,
|
|
81
|
+
"out_tokens": 8067.7,
|
|
82
|
+
"cache_ratio": 0.9,
|
|
83
|
+
"completed": 1
|
|
84
|
+
},
|
|
85
|
+
"cards": [
|
|
86
|
+
{
|
|
87
|
+
"session": "019f24e5-98ee-7cf0-afb0-a1a80ac81702",
|
|
88
|
+
"wall_ms": 300087,
|
|
89
|
+
"uncached_in": 157635,
|
|
90
|
+
"cached_in": 1071360,
|
|
91
|
+
"out_tokens": 8581,
|
|
92
|
+
"cache_ratio": 0.872,
|
|
93
|
+
"completed": 1
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"session": "019f24e5-98f3-7f12-9638-7a899028c7e3",
|
|
97
|
+
"wall_ms": 172813,
|
|
98
|
+
"uncached_in": 136264,
|
|
99
|
+
"cached_in": 1237376,
|
|
100
|
+
"out_tokens": 8502,
|
|
101
|
+
"cache_ratio": 0.901,
|
|
102
|
+
"completed": 1
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"session": "019f24e5-98f3-7f22-902c-934f0f7cbfb0",
|
|
106
|
+
"wall_ms": 140945,
|
|
107
|
+
"uncached_in": 102061,
|
|
108
|
+
"cached_in": 416512,
|
|
109
|
+
"out_tokens": 7120,
|
|
110
|
+
"cache_ratio": 0.803,
|
|
111
|
+
"completed": 1
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
}
|