mixdog 0.7.1
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/.claude-plugin/marketplace.json +31 -0
- package/.claude-plugin/plugin.json +20 -0
- package/.gitattributes +34 -0
- package/.mcp.json +14 -0
- package/ARCHITECTURE.md +77 -0
- package/CHANGELOG.md +7 -0
- package/CONTRIBUTING.md +45 -0
- package/DATA-FLOW.md +79 -0
- package/LICENSE +21 -0
- package/README.md +389 -0
- package/SECURITY.md +138 -0
- package/UNINSTALL.md +112 -0
- package/agents/maintenance.md +5 -0
- package/agents/memory-classification.md +30 -0
- package/agents/scheduler-task.md +18 -0
- package/agents/webhook-handler.md +27 -0
- package/agents/worker.md +24 -0
- package/bin/bridge +133 -0
- package/bin/statusline-launcher.mjs +78 -0
- package/bin/statusline-lib.mjs +550 -0
- package/bin/statusline.mjs +607 -0
- package/bun.lock +802 -0
- package/commands/config.md +16 -0
- package/commands/doctor.md +13 -0
- package/commands/setup.md +17 -0
- package/defaults/cycle3-review-prompt.md +90 -0
- package/defaults/hidden-roles.json +65 -0
- package/defaults/memory-chunk-prompt.md +63 -0
- package/defaults/memory-promote-prompt.md +135 -0
- package/defaults/mixdog-config.template.json +27 -0
- package/defaults/user-workflow.json +8 -0
- package/defaults/user-workflow.md +12 -0
- package/hooks/hooks.json +73 -0
- package/hooks/lib/active-instance.cjs +77 -0
- package/hooks/lib/permission-evaluator.cjs +411 -0
- package/hooks/lib/permission-route.cjs +63 -0
- package/hooks/lib/permission-rules.cjs +170 -0
- package/hooks/lib/settings-loader.cjs +116 -0
- package/hooks/post-tool-use.cjs +84 -0
- package/hooks/pre-mcp-sandbox.cjs +158 -0
- package/hooks/pre-tool-subagent.cjs +253 -0
- package/hooks/session-start.cjs +1372 -0
- package/hooks/turn-timer.cjs +82 -0
- package/lib/claude-md-writer.cjs +386 -0
- package/lib/config-cjs.cjs +61 -0
- package/lib/hook-pipe-path.cjs +10 -0
- package/lib/keychain-cjs.cjs +263 -0
- package/lib/plugin-paths.cjs +61 -0
- package/lib/rules-builder.cjs +241 -0
- package/lib/text-utils.cjs +61 -0
- package/native/README.md +117 -0
- package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
- package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
- package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
- package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
- package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
- package/package.json +107 -0
- package/prompts/code-review.txt +16 -0
- package/prompts/security-audit.txt +17 -0
- package/rules/bridge/00-common.md +39 -0
- package/rules/bridge/20-skip-protocol.md +18 -0
- package/rules/bridge/30-explorer.md +33 -0
- package/rules/bridge/40-cycle1-agent.md +52 -0
- package/rules/bridge/41-cycle2-agent.md +62 -0
- package/rules/bridge/42-cycle3-agent.md +44 -0
- package/rules/lead/00-tool-lead.md +61 -0
- package/rules/lead/01-general.md +23 -0
- package/rules/lead/02-channels.md +49 -0
- package/rules/lead/03-team.md +27 -0
- package/rules/lead/04-workflow.md +20 -0
- package/rules/shared/00-language.md +14 -0
- package/rules/shared/01-tool.md +138 -0
- package/scripts/bootstrap.mjs +184 -0
- package/scripts/bridge-unify-smoke.mjs +308 -0
- package/scripts/build-runtime-linux.sh +348 -0
- package/scripts/build-runtime-macos.sh +217 -0
- package/scripts/build-runtime-windows.ps1 +242 -0
- package/scripts/builtin-utils-smoke.mjs +392 -0
- package/scripts/check-json.mjs +45 -0
- package/scripts/check-syntax-changed.mjs +102 -0
- package/scripts/check-syntax.mjs +58 -0
- package/scripts/code-graph-batch.test.mjs +33 -0
- package/scripts/config-preserve-smoke.mjs +180 -0
- package/scripts/doctor.mjs +484 -0
- package/scripts/edit-normalize-fuzz.mjs +130 -0
- package/scripts/edit-normalize-smoke.mjs +401 -0
- package/scripts/edit-operation-smoke.mjs +369 -0
- package/scripts/edit2-smoke.mjs +63 -0
- package/scripts/fuzzy-e2e.mjs +28 -0
- package/scripts/fuzzy-smoke.mjs +26 -0
- package/scripts/generate-runtime-manifest.mjs +166 -0
- package/scripts/guard-smoke.mjs +66 -0
- package/scripts/hidden-role-schema-smoke.mjs +162 -0
- package/scripts/hook-routing-smoke.mjs +29 -0
- package/scripts/inject-input.ps1 +204 -0
- package/scripts/io-complex-smoke.mjs +667 -0
- package/scripts/io-explore-bench.mjs +424 -0
- package/scripts/io-guardrails-smoke.mjs +205 -0
- package/scripts/io-mini-bench-baseline.json +11 -0
- package/scripts/io-mini-bench.mjs +216 -0
- package/scripts/io-route-harness.mjs +933 -0
- package/scripts/io-telemetry-report.mjs +691 -0
- package/scripts/mutation-bench.mjs +564 -0
- package/scripts/mutation-io-smoke.mjs +1081 -0
- package/scripts/native-patch-bridge-smoke.mjs +288 -0
- package/scripts/native-patch-smoke.mjs +304 -0
- package/scripts/patch-interior-context-smoke.mjs +49 -0
- package/scripts/patch-newline-utf8-smoke.mjs +157 -0
- package/scripts/perf-hook-smoke.mjs +71 -0
- package/scripts/permission-eval-smoke.mjs +426 -0
- package/scripts/prep-patch.mjs +53 -0
- package/scripts/prep-shim.mjs +96 -0
- package/scripts/provider-cache-smoke.mjs +687 -0
- package/scripts/report-runtime-health.mjs +132 -0
- package/scripts/run-mcp.mjs +1547 -0
- package/scripts/salvage-v4a-shatter.test.mjs +58 -0
- package/scripts/scoped-cache-io-smoke.mjs +103 -0
- package/scripts/shell-policy-round3-smoke.mjs +46 -0
- package/scripts/smoke-runtime-negative.ps1 +100 -0
- package/scripts/smoke-runtime-negative.sh +95 -0
- package/scripts/stall-policy-smoke.mjs +50 -0
- package/scripts/start-memory-worker.mjs +23 -0
- package/scripts/statusline-launcher-smoke.mjs +82 -0
- package/scripts/stress-atomic-write.mjs +1028 -0
- package/scripts/test-config-rmw-restore.mjs +122 -0
- package/scripts/test-fault-inject.mjs +164 -0
- package/scripts/test-large-file.mjs +174 -0
- package/scripts/tool-edge-smoke.mjs +209 -0
- package/scripts/uninstall.mjs +201 -0
- package/scripts/webhook-selfheal-smoke.mjs +29 -0
- package/scripts/write-overwrite-guard-smoke.mjs +56 -0
- package/server-main.mjs +3055 -0
- package/server.mjs +468 -0
- package/setup/config-merge.mjs +254 -0
- package/setup/install.mjs +120 -0
- package/setup/launch-core.mjs +507 -0
- package/setup/launch.mjs +101 -0
- package/setup/setup-server.mjs +3206 -0
- package/setup/setup.html +3693 -0
- package/skills/retro-skill-proposer/SKILL.md +92 -0
- package/skills/schedule-add/SKILL.md +77 -0
- package/skills/setup/SKILL.md +346 -0
- package/skills/webhook-add/SKILL.md +81 -0
- package/src/agent/bridge-stall-watchdog.mjs +337 -0
- package/src/agent/index.mjs +2138 -0
- package/src/agent/orchestrator/activity-bus.mjs +38 -0
- package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +1010 -0
- package/src/agent/orchestrator/bridge-retry.mjs +220 -0
- package/src/agent/orchestrator/bridge-trace.mjs +583 -0
- package/src/agent/orchestrator/cache-mtime.mjs +58 -0
- package/src/agent/orchestrator/config.mjs +358 -0
- package/src/agent/orchestrator/context/collect.mjs +651 -0
- package/src/agent/orchestrator/dispatch-persist.mjs +549 -0
- package/src/agent/orchestrator/drain-registry.mjs +50 -0
- package/src/agent/orchestrator/explore-validator.mjs +8 -0
- package/src/agent/orchestrator/internal-roles.mjs +118 -0
- package/src/agent/orchestrator/internal-tools.mjs +88 -0
- package/src/agent/orchestrator/jobs.mjs +116 -0
- package/src/agent/orchestrator/mcp/client.mjs +364 -0
- package/src/agent/orchestrator/providers/anthropic-betas.mjs +21 -0
- package/src/agent/orchestrator/providers/anthropic-oauth.mjs +1745 -0
- package/src/agent/orchestrator/providers/anthropic.mjs +437 -0
- package/src/agent/orchestrator/providers/gemini.mjs +1175 -0
- package/src/agent/orchestrator/providers/grok-oauth.mjs +782 -0
- package/src/agent/orchestrator/providers/model-catalog.mjs +241 -0
- package/src/agent/orchestrator/providers/openai-compat.mjs +1467 -0
- package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +1890 -0
- package/src/agent/orchestrator/providers/openai-oauth.mjs +1307 -0
- package/src/agent/orchestrator/providers/openai-ws.mjs +104 -0
- package/src/agent/orchestrator/providers/registry.mjs +192 -0
- package/src/agent/orchestrator/providers/retry-classifier.mjs +325 -0
- package/src/agent/orchestrator/session/abort-lookup.mjs +13 -0
- package/src/agent/orchestrator/session/cache/post-edit-marks.mjs +42 -0
- package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
- package/src/agent/orchestrator/session/cache/read-cache.mjs +319 -0
- package/src/agent/orchestrator/session/cache/scoped-cache-outcome.mjs +11 -0
- package/src/agent/orchestrator/session/cache/scoped-cache.mjs +361 -0
- package/src/agent/orchestrator/session/cache/util.mjs +49 -0
- package/src/agent/orchestrator/session/loop.mjs +1478 -0
- package/src/agent/orchestrator/session/manager.mjs +1975 -0
- package/src/agent/orchestrator/session/read-dedup.mjs +6 -0
- package/src/agent/orchestrator/session/result-classification.mjs +65 -0
- package/src/agent/orchestrator/session/save-session-worker.mjs +18 -0
- package/src/agent/orchestrator/session/store.mjs +624 -0
- package/src/agent/orchestrator/session/stream-watchdog.mjs +130 -0
- package/src/agent/orchestrator/session/tool-result-offload.mjs +166 -0
- package/src/agent/orchestrator/session/trim.mjs +491 -0
- package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +115 -0
- package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +327 -0
- package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +150 -0
- package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +228 -0
- package/src/agent/orchestrator/smart-bridge/index.mjs +215 -0
- package/src/agent/orchestrator/smart-bridge/profiles.mjs +37 -0
- package/src/agent/orchestrator/smart-bridge/registry.mjs +348 -0
- package/src/agent/orchestrator/smart-bridge/session-builder.mjs +116 -0
- package/src/agent/orchestrator/stall-policy.mjs +195 -0
- package/src/agent/orchestrator/tool-loop-guard.mjs +75 -0
- package/src/agent/orchestrator/tools/bash-policy-scan.mjs +77 -0
- package/src/agent/orchestrator/tools/bash-session.mjs +721 -0
- package/src/agent/orchestrator/tools/builtin/advisory-lock.mjs +171 -0
- package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +455 -0
- package/src/agent/orchestrator/tools/builtin/atomic-write.mjs +236 -0
- package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +480 -0
- package/src/agent/orchestrator/tools/builtin/binary-file.mjs +76 -0
- package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +256 -0
- package/src/agent/orchestrator/tools/builtin/cache-layers.mjs +386 -0
- package/src/agent/orchestrator/tools/builtin/cwd-utils.mjs +37 -0
- package/src/agent/orchestrator/tools/builtin/device-paths.mjs +154 -0
- package/src/agent/orchestrator/tools/builtin/diagnostics-tool.mjs +292 -0
- package/src/agent/orchestrator/tools/builtin/diff-utils.mjs +109 -0
- package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +58 -0
- package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +240 -0
- package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +113 -0
- package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +74 -0
- package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +242 -0
- package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +211 -0
- package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +1364 -0
- package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +126 -0
- package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +141 -0
- package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +194 -0
- package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +60 -0
- package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +168 -0
- package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +173 -0
- package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +48 -0
- package/src/agent/orchestrator/tools/builtin/fs-reachability.mjs +48 -0
- package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +99 -0
- package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +170 -0
- package/src/agent/orchestrator/tools/builtin/grep-formatting.mjs +113 -0
- package/src/agent/orchestrator/tools/builtin/hash-utils.mjs +6 -0
- package/src/agent/orchestrator/tools/builtin/list-formatting.mjs +7 -0
- package/src/agent/orchestrator/tools/builtin/list-tool.mjs +593 -0
- package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +89 -0
- package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +300 -0
- package/src/agent/orchestrator/tools/builtin/open-config-tool.mjs +26 -0
- package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +152 -0
- package/src/agent/orchestrator/tools/builtin/path-locks.mjs +35 -0
- package/src/agent/orchestrator/tools/builtin/path-utils.mjs +201 -0
- package/src/agent/orchestrator/tools/builtin/read-args.mjs +103 -0
- package/src/agent/orchestrator/tools/builtin/read-batch.mjs +172 -0
- package/src/agent/orchestrator/tools/builtin/read-constants.mjs +40 -0
- package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
- package/src/agent/orchestrator/tools/builtin/read-image-resize.mjs +189 -0
- package/src/agent/orchestrator/tools/builtin/read-image.mjs +88 -0
- package/src/agent/orchestrator/tools/builtin/read-lines.mjs +12 -0
- package/src/agent/orchestrator/tools/builtin/read-mode-tool.mjs +455 -0
- package/src/agent/orchestrator/tools/builtin/read-open.mjs +190 -0
- package/src/agent/orchestrator/tools/builtin/read-range-index.mjs +271 -0
- package/src/agent/orchestrator/tools/builtin/read-ranges.mjs +26 -0
- package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +728 -0
- package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +173 -0
- package/src/agent/orchestrator/tools/builtin/read-special-files.mjs +268 -0
- package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
- package/src/agent/orchestrator/tools/builtin/read-tool.mjs +530 -0
- package/src/agent/orchestrator/tools/builtin/read-windows.mjs +107 -0
- package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +196 -0
- package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +422 -0
- package/src/agent/orchestrator/tools/builtin/search-builders.mjs +158 -0
- package/src/agent/orchestrator/tools/builtin/search-tool.mjs +869 -0
- package/src/agent/orchestrator/tools/builtin/shell-analysis.mjs +653 -0
- package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +936 -0
- package/src/agent/orchestrator/tools/builtin/shell-output.mjs +36 -0
- package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +214 -0
- package/src/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +143 -0
- package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +206 -0
- package/src/agent/orchestrator/tools/builtin/snapshot-validation.mjs +98 -0
- package/src/agent/orchestrator/tools/builtin/text-stats.mjs +69 -0
- package/src/agent/orchestrator/tools/builtin/windows-roots.mjs +23 -0
- package/src/agent/orchestrator/tools/builtin/write-tool.mjs +401 -0
- package/src/agent/orchestrator/tools/builtin.mjs +500 -0
- package/src/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +39 -0
- package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
- package/src/agent/orchestrator/tools/code-graph.mjs +4095 -0
- package/src/agent/orchestrator/tools/cwd-tool.mjs +298 -0
- package/src/agent/orchestrator/tools/destructive-warning.mjs +323 -0
- package/src/agent/orchestrator/tools/edit-normalize.mjs +603 -0
- package/src/agent/orchestrator/tools/env-scrub.mjs +100 -0
- package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +144 -0
- package/src/agent/orchestrator/tools/graph-manifest.json +26 -0
- package/src/agent/orchestrator/tools/host-input.mjs +204 -0
- package/src/agent/orchestrator/tools/mutation-content-cache.mjs +67 -0
- package/src/agent/orchestrator/tools/mutation-planner.mjs +75 -0
- package/src/agent/orchestrator/tools/next-call-utils.mjs +48 -0
- package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +133 -0
- package/src/agent/orchestrator/tools/patch-manifest.json +26 -0
- package/src/agent/orchestrator/tools/patch-tool-defs.mjs +20 -0
- package/src/agent/orchestrator/tools/patch.mjs +2754 -0
- package/src/agent/orchestrator/tools/progress-message.mjs +118 -0
- package/src/agent/orchestrator/tools/result-compression.mjs +279 -0
- package/src/agent/orchestrator/tools/shell-command.mjs +865 -0
- package/src/agent/orchestrator/tools/shell-exec-policy.mjs +89 -0
- package/src/agent/orchestrator/tools/shell-policy-danger-target.mjs +27 -0
- package/src/agent/orchestrator/tools/shell-policy-imports.mjs +7 -0
- package/src/agent/orchestrator/tools/shell-policy.mjs +345 -0
- package/src/agent/orchestrator/tools/shell-snapshot.mjs +313 -0
- package/src/agent/orchestrator/workflow-store.mjs +93 -0
- package/src/agent/tool-defs.mjs +103 -0
- package/src/channels/backends/discord.mjs +784 -0
- package/src/channels/data/voice-runtime-manifest.json +138 -0
- package/src/channels/index.mjs +3229 -0
- package/src/channels/lib/cli-worker-host.mjs +12 -0
- package/src/channels/lib/config-lock.mjs +13 -0
- package/src/channels/lib/config.mjs +292 -0
- package/src/channels/lib/drop-trace.mjs +71 -0
- package/src/channels/lib/event-pipeline.mjs +81 -0
- package/src/channels/lib/event-queue.mjs +345 -0
- package/src/channels/lib/executor.mjs +168 -0
- package/src/channels/lib/format.mjs +188 -0
- package/src/channels/lib/holidays.mjs +138 -0
- package/src/channels/lib/hook-pipe-server.mjs +802 -0
- package/src/channels/lib/interaction-workflows.mjs +184 -0
- package/src/channels/lib/memory-client.mjs +149 -0
- package/src/channels/lib/output-forwarder.mjs +765 -0
- package/src/channels/lib/runtime-paths.mjs +479 -0
- package/src/channels/lib/scheduler.mjs +723 -0
- package/src/channels/lib/session-control.mjs +36 -0
- package/src/channels/lib/session-discovery.mjs +103 -0
- package/src/channels/lib/settings.mjs +11 -0
- package/src/channels/lib/state-file.mjs +68 -0
- package/src/channels/lib/status-snapshot.mjs +219 -0
- package/src/channels/lib/tool-format.mjs +140 -0
- package/src/channels/lib/transcript-discovery.mjs +195 -0
- package/src/channels/lib/voice-runtime-fetcher.mjs +734 -0
- package/src/channels/lib/webhook.mjs +1179 -0
- package/src/channels/lib/whisper-server.mjs +477 -0
- package/src/channels/tool-defs.mjs +170 -0
- package/src/daemon/host.mjs +118 -0
- package/src/daemon/mcp-transport.mjs +47 -0
- package/src/daemon/session.mjs +100 -0
- package/src/daemon/thin-client.mjs +71 -0
- package/src/daemon/transport.mjs +163 -0
- package/src/memory/data/runtime-manifest.json +40 -0
- package/src/memory/index.mjs +3305 -0
- package/src/memory/lib/agent-ipc.mjs +93 -0
- package/src/memory/lib/bridge-trace-queries.mjs +120 -0
- package/src/memory/lib/core-memory-store.mjs +330 -0
- package/src/memory/lib/embedding-provider.mjs +269 -0
- package/src/memory/lib/embedding-worker.mjs +323 -0
- package/src/memory/lib/llm-worker-host.mjs +17 -0
- package/src/memory/lib/memory-cycle.mjs +11 -0
- package/src/memory/lib/memory-cycle1.mjs +641 -0
- package/src/memory/lib/memory-cycle2.mjs +1284 -0
- package/src/memory/lib/memory-cycle3.mjs +540 -0
- package/src/memory/lib/memory-embed.mjs +299 -0
- package/src/memory/lib/memory-extraction.mjs +5 -0
- package/src/memory/lib/memory-maintenance-store.mjs +32 -0
- package/src/memory/lib/memory-ops-policy.mjs +190 -0
- package/src/memory/lib/memory-recall-id-patch.mjs +15 -0
- package/src/memory/lib/memory-recall-read-query.mjs +7 -0
- package/src/memory/lib/memory-recall-scope-filter.mjs +63 -0
- package/src/memory/lib/memory-recall-store.mjs +621 -0
- package/src/memory/lib/memory-retrievers.mjs +112 -0
- package/src/memory/lib/memory-score.mjs +71 -0
- package/src/memory/lib/memory-text-utils.mjs +58 -0
- package/src/memory/lib/memory.mjs +412 -0
- package/src/memory/lib/model-profile.mjs +85 -0
- package/src/memory/lib/pg/adapter.mjs +308 -0
- package/src/memory/lib/pg/process.mjs +360 -0
- package/src/memory/lib/pg/supervisor.mjs +396 -0
- package/src/memory/lib/project-id-resolver.mjs +86 -0
- package/src/memory/lib/runtime-fetcher.mjs +442 -0
- package/src/memory/lib/trace-store.mjs +728 -0
- package/src/memory/tool-defs.mjs +79 -0
- package/src/search/index.mjs +1173 -0
- package/src/search/lib/backends/anthropic-oauth.mjs +98 -0
- package/src/search/lib/backends/exa.mjs +50 -0
- package/src/search/lib/backends/firecrawl.mjs +61 -0
- package/src/search/lib/backends/gemini-api.mjs +83 -0
- package/src/search/lib/backends/grok-oauth.mjs +86 -0
- package/src/search/lib/backends/index.mjs +150 -0
- package/src/search/lib/backends/openai-api.mjs +144 -0
- package/src/search/lib/backends/openai-oauth.mjs +98 -0
- package/src/search/lib/backends/openai-web-search.mjs +76 -0
- package/src/search/lib/backends/tavily.mjs +55 -0
- package/src/search/lib/backends/xai-api.mjs +113 -0
- package/src/search/lib/cache.mjs +131 -0
- package/src/search/lib/config.mjs +192 -0
- package/src/search/lib/formatter.mjs +115 -0
- package/src/search/lib/provider-usage.mjs +67 -0
- package/src/search/lib/providers.mjs +47 -0
- package/src/search/lib/search-intent.mjs +109 -0
- package/src/search/lib/setup-handler.mjs +261 -0
- package/src/search/lib/state.mjs +201 -0
- package/src/search/lib/web-tools.mjs +1207 -0
- package/src/search/tool-defs.mjs +83 -0
- package/src/setup/defender-exclusion.mjs +183 -0
- package/src/shared/abort-controller.mjs +15 -0
- package/src/shared/atomic-file.mjs +420 -0
- package/src/shared/config.mjs +350 -0
- package/src/shared/daemon-recycle.mjs +108 -0
- package/src/shared/disable-claude-builtins.mjs +88 -0
- package/src/shared/err-text.mjs +12 -0
- package/src/shared/llm/cost.mjs +66 -0
- package/src/shared/llm/http-agent.mjs +123 -0
- package/src/shared/llm/index.mjs +41 -0
- package/src/shared/llm/pid-cleanup.mjs +27 -0
- package/src/shared/llm/usage-log.mjs +47 -0
- package/src/shared/plugin-paths.mjs +58 -0
- package/src/shared/schedules-store.mjs +70 -0
- package/src/shared/seed.mjs +119 -0
- package/src/shared/user-cwd.mjs +213 -0
- package/src/shared/user-data-guard.mjs +238 -0
- package/src/status/aggregator.mjs +584 -0
- package/src/status/server.mjs +413 -0
- package/tools.json +1653 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Open the mixdog settings UI (Providers + Presets)
|
|
3
|
+
allowed-tools: Bash(bun:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Launch (already executed)
|
|
7
|
+
|
|
8
|
+
- Launcher output: !`bun "${CLAUDE_PLUGIN_ROOT}/setup/launch.mjs"`
|
|
9
|
+
|
|
10
|
+
The config UI launcher above has ALREADY run at command invocation — the
|
|
11
|
+
settings window is opening (or open) at http://localhost:3458. Do NOT call
|
|
12
|
+
`open_config` or re-run the launcher when the output above shows a
|
|
13
|
+
"Config UI:" URL; just report that URL to the user.
|
|
14
|
+
|
|
15
|
+
Only if the launcher output above shows an error instead of a URL, fall back
|
|
16
|
+
to calling the `open_config` tool, then report the resulting URL.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run mixdog health diagnostics
|
|
3
|
+
allowed-tools: Bash(bun:*)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!--
|
|
7
|
+
Checks version sync, Bun version/source, shell runtime, supervisor,
|
|
8
|
+
hook-pipe reachability, config/data files, cache layout & storage sizes,
|
|
9
|
+
voice runtime, required npm deps, and log sizes. Prints an OK/WARN/FAIL
|
|
10
|
+
report; exits 1 on any FAIL.
|
|
11
|
+
-->
|
|
12
|
+
|
|
13
|
+
!`bun "${CLAUDE_PLUGIN_ROOT}/scripts/doctor.mjs"`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Open the mixdog initial setup UI
|
|
3
|
+
allowed-tools: Bash(bun:*)
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Launch (already executed)
|
|
8
|
+
|
|
9
|
+
- Launcher output: !`bun "${CLAUDE_PLUGIN_ROOT}/setup/launch.mjs"`
|
|
10
|
+
|
|
11
|
+
The setup UI launcher above has ALREADY run at command invocation — the
|
|
12
|
+
setup window is opening (or open) at http://localhost:3458. Do NOT call
|
|
13
|
+
`open_config` or re-run the launcher when the output above shows a
|
|
14
|
+
"Config UI:" URL; just report that URL to the user.
|
|
15
|
+
|
|
16
|
+
Only if the launcher output above shows an error instead of a URL, fall back
|
|
17
|
+
to calling the `open_config` tool, then report the resulting URL.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Task
|
|
2
|
+
|
|
3
|
+
You review user-curated CORE memory against the current project memory. Each
|
|
4
|
+
entry is shown with its most-related current memory. Emit ONE verdict line per
|
|
5
|
+
entry id. The system may conservatively apply safe compression updates and
|
|
6
|
+
strict duplicate merges automatically; deletes and broad rewrites require
|
|
7
|
+
explicit user confirmation. Extracting a lesson from a narrative is a BROAD
|
|
8
|
+
rewrite — emit it only as a proposal (proposal mode), never as an auto-applied
|
|
9
|
+
conservative "safe compression" update; conservative mode must not lossy-rewrite
|
|
10
|
+
user-curated core. The first character of your response is a digit.
|
|
11
|
+
Plain text — no preamble, JSON, or fences. NEVER attempt a tool call.
|
|
12
|
+
|
|
13
|
+
## What CORE is
|
|
14
|
+
|
|
15
|
+
CORE is durable standing knowledge that lands in one of three layers:
|
|
16
|
+
|
|
17
|
+
- **L1 — Relationship / communication:** user identity, address form,
|
|
18
|
+
reply-style preferences, patterns the user dislikes.
|
|
19
|
+
- **L2 — Behavior rules:** principles the user corrected or insisted on, hard
|
|
20
|
+
safety boundaries, quality bars.
|
|
21
|
+
- **L3 — Current map:** one-line project-landscape summaries, live long-running
|
|
22
|
+
goals, environment anchors documented nowhere else.
|
|
23
|
+
|
|
24
|
+
Every entry should be ONE short clause (≤120 chars). CORE is not a log.
|
|
25
|
+
|
|
26
|
+
## The distinction that decides every verdict
|
|
27
|
+
|
|
28
|
+
- An entry that DESCRIBES how something currently is — an L1/L2/L3 rule,
|
|
29
|
+
preference, goal, or live map entry — is DURABLE.
|
|
30
|
+
- An entry that RECORDS a past event that already happened — a version shipped,
|
|
31
|
+
a value measured, a fix made — is NOT durable. For a past decision/failure,
|
|
32
|
+
keep only the one-line lesson that still constrains behavior (as L2); archive
|
|
33
|
+
the narrative. Extracting that lesson is a BROAD rewrite, so it belongs in a
|
|
34
|
+
proposal, not an auto-applied conservative update — conservative mode must not
|
|
35
|
+
lossy-rewrite user-curated core.
|
|
36
|
+
- Anything whose source of truth is code, rules files, or skill docs — plus
|
|
37
|
+
implementation specs, code-internal constants, measurements, resolved-bug
|
|
38
|
+
stories, status snapshots — is NOT durable.
|
|
39
|
+
|
|
40
|
+
When unsure which it is → keep.
|
|
41
|
+
|
|
42
|
+
Related memory is evidence, not authority. Archived related rows may contain
|
|
43
|
+
historical context or old work logs; use them only when they clearly prove a
|
|
44
|
+
CORE entry is a past-event log, duplicate, or stale. If related memory is empty
|
|
45
|
+
or inconclusive, keep the CORE entry.
|
|
46
|
+
|
|
47
|
+
## Verdicts
|
|
48
|
+
|
|
49
|
+
- `keep` — durable and already one short clause.
|
|
50
|
+
- `update` — durable but verbose or multi-sentence → rewrite as one ≤120-char clause.
|
|
51
|
+
- `merge` — duplicates another entry → fold into the survivor (same project pool).
|
|
52
|
+
- `delete` — records a past event, not a current rule or structure; OR merely
|
|
53
|
+
restates a rule already in **Current rules** below (rules load every session,
|
|
54
|
+
so a CORE copy is redundant); OR is sourced from code, rules files, or skill
|
|
55
|
+
docs, or is an implementation spec, constant, measurement, resolved-bug
|
|
56
|
+
story, or status snapshot that fits no L1/L2/L3 layer. Do not delete an entry
|
|
57
|
+
that adds durable specifics the rule itself does not state.
|
|
58
|
+
|
|
59
|
+
A verbose durable entry is always `update`, never `keep`.
|
|
60
|
+
Delete is the rarest verdict. Prefer `keep` for durable rules/preferences and
|
|
61
|
+
`update` for compression when the current behavior is still valid.
|
|
62
|
+
|
|
63
|
+
## Current rules (Source Of Truth — loaded into the session every turn)
|
|
64
|
+
|
|
65
|
+
These rules are always present, so a CORE entry that merely restates one is
|
|
66
|
+
redundant → `delete`. Treat them as authority for the delete-on-restatement
|
|
67
|
+
verdict only; an entry that is merely related but adds durable specifics the
|
|
68
|
+
rule does not state stays `keep`/`update`.
|
|
69
|
+
|
|
70
|
+
{{CURRENT_RULES}}
|
|
71
|
+
|
|
72
|
+
## Entries to review
|
|
73
|
+
|
|
74
|
+
Each block is one CORE entry followed by its most-related current memory.
|
|
75
|
+
|
|
76
|
+
{{CORE_REVIEW}}
|
|
77
|
+
|
|
78
|
+
## Output
|
|
79
|
+
|
|
80
|
+
One line per entry id, any order:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
<id>|keep
|
|
84
|
+
<id>|update|<element>|<summary>
|
|
85
|
+
<id>|merge|<target_id>|<source_ids_csv>
|
|
86
|
+
<id>|delete
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`summary` ≤120 chars, one clause. No literal `|` or newline inside a field
|
|
90
|
+
(replace `|` with `/`). No prose, no fences. First character is a digit.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"roles": [
|
|
3
|
+
{
|
|
4
|
+
"name": "explorer",
|
|
5
|
+
"slot": "explore",
|
|
6
|
+
"systemFile": "rules/bridge/30-explorer.md",
|
|
7
|
+
"description": "Filesystem navigation agent invoked by the `explore` MCP tool",
|
|
8
|
+
"invokedBy": "explore",
|
|
9
|
+
"toolSchemaProfile": "unified",
|
|
10
|
+
"kind": "retrieval",
|
|
11
|
+
"permission": "read",
|
|
12
|
+
"stallCap": { "idleSeconds": 240, "toolRunningSeconds": 180 }
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"name": "cycle1-agent",
|
|
16
|
+
"slot": "cycle1",
|
|
17
|
+
"systemFile": "rules/bridge/40-cycle1-agent.md",
|
|
18
|
+
"description": "Chunker/classifier invoked by memory-cycle runCycle1",
|
|
19
|
+
"invokedBy": "cycle1",
|
|
20
|
+
"toolSchemaProfile": "llm-only", "kind": "maintenance",
|
|
21
|
+
"permission": "read",
|
|
22
|
+
"stallCap": { "idleSeconds": 300, "toolRunningSeconds": 300 }
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "cycle2-agent",
|
|
26
|
+
"slot": "cycle2",
|
|
27
|
+
"systemFile": "rules/bridge/41-cycle2-agent.md",
|
|
28
|
+
"description": "Root re-scorer invoked by memory-cycle runCycle2",
|
|
29
|
+
"invokedBy": "cycle2",
|
|
30
|
+
"toolSchemaProfile": "llm-only", "kind": "maintenance",
|
|
31
|
+
"permission": "read",
|
|
32
|
+
"stallCap": { "idleSeconds": 300, "toolRunningSeconds": 300 }
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "cycle3-agent",
|
|
36
|
+
"slot": "cycle3",
|
|
37
|
+
"systemFile": "rules/bridge/42-cycle3-agent.md",
|
|
38
|
+
"description": "Core memory reviewer invoked by memory-cycle runCycle3",
|
|
39
|
+
"invokedBy": "cycle3",
|
|
40
|
+
"toolSchemaProfile": "llm-only", "kind": "maintenance",
|
|
41
|
+
"permission": "read",
|
|
42
|
+
"stallCap": { "idleSeconds": 300, "toolRunningSeconds": 300 }
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "scheduler-task",
|
|
46
|
+
"slot": "scheduler",
|
|
47
|
+
"systemFile": "agents/scheduler-task.md",
|
|
48
|
+
"description": "Scheduled-task executor invoked by scheduler tick",
|
|
49
|
+
"invokedBy": "scheduler",
|
|
50
|
+
"toolSchemaProfile": "unified", "kind": "maintenance",
|
|
51
|
+
"permission": "read-write",
|
|
52
|
+
"stallCap": { "idleSeconds": 600, "toolRunningSeconds": 600 }
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "webhook-handler",
|
|
56
|
+
"slot": "webhook",
|
|
57
|
+
"systemFile": "agents/webhook-handler.md",
|
|
58
|
+
"description": "Webhook payload handler invoked by inbound webhook events",
|
|
59
|
+
"invokedBy": "webhook",
|
|
60
|
+
"toolSchemaProfile": "unified", "kind": "maintenance",
|
|
61
|
+
"permission": "read-write",
|
|
62
|
+
"stallCap": { "idleSeconds": 600, "toolRunningSeconds": 600 }
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
You are a strict memory chunker and classifier.
|
|
2
|
+
|
|
3
|
+
Read the entries below, group contiguous related entries into memory chunks,
|
|
4
|
+
and output pipe-separated lines only. No JSON, no prose, no fences, no preamble.
|
|
5
|
+
The first character of your response must be a digit.
|
|
6
|
+
|
|
7
|
+
## Output
|
|
8
|
+
|
|
9
|
+
One line per chunk:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
idx_csv|element|category|summary
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- `idx_csv`: comma-separated 1-based input indexes. Use bare numbers.
|
|
16
|
+
- `element`: short recall key, 5-10 words, with the subject and any distinctive
|
|
17
|
+
identifier.
|
|
18
|
+
- `category`: exactly one of `rule`, `constraint`, `decision`, `fact`, `goal`,
|
|
19
|
+
`preference`, `task`, `issue`.
|
|
20
|
+
- `summary`: compact declarative memory. Preserve decisive identifiers,
|
|
21
|
+
numbers, paths, versions, causes, outcomes, and constraints when present.
|
|
22
|
+
- Fields must not contain literal `|` or newlines.
|
|
23
|
+
|
|
24
|
+
## Chunking
|
|
25
|
+
|
|
26
|
+
- Every substantive input should appear in exactly one chunk.
|
|
27
|
+
- Omit entries whose only function is acknowledgement, courtesy, reaction, or
|
|
28
|
+
handoff and which add no fact, decision, constraint, result, preference, or
|
|
29
|
+
task.
|
|
30
|
+
- Do not include non-substantive rows in a chunk merely because they are
|
|
31
|
+
adjacent to useful content.
|
|
32
|
+
- Never merge across `[sess:...]` markers.
|
|
33
|
+
- Split unrelated topics even when they are adjacent.
|
|
34
|
+
- Keep question/context and answer/resolution together when they form one
|
|
35
|
+
cause-outcome memory.
|
|
36
|
+
- If later entries supersede earlier ones, summarize the latest state while
|
|
37
|
+
keeping the relevant member ids together.
|
|
38
|
+
|
|
39
|
+
## Categories
|
|
40
|
+
|
|
41
|
+
- `rule`: standing operating rule or durable identity/system policy.
|
|
42
|
+
- `constraint`: hard limit, prohibition, or approval boundary.
|
|
43
|
+
- `decision`: explicit choice with a clear resolution moment.
|
|
44
|
+
- `fact`: verified current state or observed technical detail.
|
|
45
|
+
- `goal`: long-running target still in flight.
|
|
46
|
+
- `preference`: user style or taste that may guide future behavior.
|
|
47
|
+
- `task`: concrete work item with a done state or next step.
|
|
48
|
+
- `issue`: bug, incident, broken state, or risk needing attention.
|
|
49
|
+
|
|
50
|
+
Choose the category that best preserves future recall intent. Do not use
|
|
51
|
+
`decision` unless a choice was actually made.
|
|
52
|
+
|
|
53
|
+
## Quality
|
|
54
|
+
|
|
55
|
+
- Use the same language as the input content.
|
|
56
|
+
- Prefer one dense sentence; use two only when ambiguity would otherwise remain.
|
|
57
|
+
- Do not pad thin content or speculate beyond the source.
|
|
58
|
+
- Do not name speakers or describe the conversation mechanics.
|
|
59
|
+
- Keep technical identifiers verbatim.
|
|
60
|
+
|
|
61
|
+
## Entries
|
|
62
|
+
|
|
63
|
+
{{ENTRIES}}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Task
|
|
2
|
+
|
|
3
|
+
Judge generated memory candidates. Output pipe-separated lines only: no JSON,
|
|
4
|
+
no prose, no fences, no tool calls. The first character of your response must
|
|
5
|
+
be a digit.
|
|
6
|
+
|
|
7
|
+
Example:
|
|
8
|
+
|
|
9
|
+
For Entries numbered `1. id:... 2. id:... 3. id:... 4. id:...`:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
1|archived
|
|
13
|
+
2|active
|
|
14
|
+
2|why|A|Durable reply-style preference; forgetting it changes future responses.
|
|
15
|
+
2|core|user prefers terse one-line replies
|
|
16
|
+
3|update|compact element|one-sentence durable summary
|
|
17
|
+
3|why|B|Live project-map anchor documented nowhere else.
|
|
18
|
+
3|core|current project layout summary
|
|
19
|
+
4|merge|2|2,4|merged element|merged durable summary
|
|
20
|
+
2|why|A|Same durable preference as the survivor.
|
|
21
|
+
2|core|merged core line
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Required Lines
|
|
25
|
+
|
|
26
|
+
Emit exactly one primary verdict for every Entry:
|
|
27
|
+
|
|
28
|
+
The first field of every line MUST be the ROW NUMBER printed before the entry
|
|
29
|
+
in Entries (the `<n>.` prefix, 1-based). One verdict per row; do not skip a row
|
|
30
|
+
or invent a row number that is not listed.
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
<row>|active
|
|
34
|
+
<row>|archived
|
|
35
|
+
<row>|update|<element>|<summary>
|
|
36
|
+
<row>|merge|<target_row>|<source_rows_csv>|<element>|<summary>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
For every non-archived primary verdict (`active`, `update`, `merge`), also emit:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
<row>|why|A|<short reason>
|
|
43
|
+
<row>|core|<core_summary>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Use `why|A` for durable cross-session invariants (L1/L2). Use `why|B` for L3
|
|
47
|
+
current-map entries: one-line project-landscape summaries, live long-running
|
|
48
|
+
goals, and environment anchors documented nowhere else. `why` is validation
|
|
49
|
+
evidence only; it is
|
|
50
|
+
not stored. `core_summary` is injected into Core Memory, so keep it one
|
|
51
|
+
self-contained clause, <=120 chars. For `merge`, `why` and `core` may use the
|
|
52
|
+
survivor `target_row`.
|
|
53
|
+
|
|
54
|
+
Allowed primary verbs:
|
|
55
|
+
|
|
56
|
+
| Current status | Verbs |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `pending` | `active`, `archived` |
|
|
59
|
+
| `active` | `active`, `archived`, `update`, `merge` |
|
|
60
|
+
|
|
61
|
+
## Source Of Truth
|
|
62
|
+
|
|
63
|
+
Current rules load every session. User-curated core is canonical. If a
|
|
64
|
+
candidate restates either source, archive it; do not promote duplicates.
|
|
65
|
+
|
|
66
|
+
### Current Rules
|
|
67
|
+
|
|
68
|
+
{{CURRENT_RULES}}
|
|
69
|
+
|
|
70
|
+
### User-Curated Core
|
|
71
|
+
|
|
72
|
+
{{USER_CORE}}
|
|
73
|
+
|
|
74
|
+
### Active Generated Core
|
|
75
|
+
|
|
76
|
+
{{CORE_MEMORY}}
|
|
77
|
+
|
|
78
|
+
## Entries
|
|
79
|
+
|
|
80
|
+
{{ITEMS}}
|
|
81
|
+
|
|
82
|
+
Active: {{ACTIVE_COUNT}} / cap: {{ACTIVE_CAP}}
|
|
83
|
+
|
|
84
|
+
## Decision Rule
|
|
85
|
+
|
|
86
|
+
Long-term memory is exceptional. Keep ONLY content that lands in one of three
|
|
87
|
+
layers:
|
|
88
|
+
|
|
89
|
+
- **L1 — Relationship / communication:** user identity, address form,
|
|
90
|
+
reply-style preferences, and patterns the user dislikes. (`why|A`)
|
|
91
|
+
- **L2 — Behavior rules:** principles the user corrected or insisted on during
|
|
92
|
+
work, hard safety boundaries, and quality bars. (`why|A`)
|
|
93
|
+
- **L3 — Current map:** one-line project-landscape summaries, live
|
|
94
|
+
long-running goals, and environment anchors documented nowhere else. (`why|B`)
|
|
95
|
+
|
|
96
|
+
**Transform rule.** For a past decision or failure, ask: *does a lesson from it
|
|
97
|
+
still constrain today's behavior?* If yes → keep the one-line L2 lesson and
|
|
98
|
+
archive the narrative. For an ACTIVE row, use `update` to rewrite it into the
|
|
99
|
+
lesson. For a PENDING row (which allows only `active`/`archived`), promote with
|
|
100
|
+
`active` and put the one-line lesson in its `core` line — pending rows cannot
|
|
101
|
+
emit `update`. If no → archive. Anything whose source of truth is code, rules
|
|
102
|
+
files, or skill docs → archive.
|
|
103
|
+
|
|
104
|
+
Archive everything else: implementation specs, code-internal constants,
|
|
105
|
+
measurements, resolved-bug stories, and status snapshots.
|
|
106
|
+
|
|
107
|
+
The cap is an upper bound, not a target. When `Active < cap`, seed and grow the
|
|
108
|
+
active set: a pending row with a concrete A/B reason that is NOT a
|
|
109
|
+
Source-Of-Truth duplicate MUST be promoted with `active` — promotion is NOT
|
|
110
|
+
reserved for already-active rows, and an empty active set must be bootstrapped
|
|
111
|
+
from clear, non-duplicate A/B pending rows. When `Active > cap`, contract
|
|
112
|
+
strictly: any active entry without a concrete A/B reason must archive.
|
|
113
|
+
|
|
114
|
+
If useful content is buried inside work narrative, keep only the durable L2
|
|
115
|
+
behavior lesson (via `update` on an active row, or `active` for a pending row);
|
|
116
|
+
archive the surrounding story.
|
|
117
|
+
|
|
118
|
+
## Merge / Update
|
|
119
|
+
|
|
120
|
+
- `update` rewrites verbose durable entries into one short element and one
|
|
121
|
+
one-sentence summary.
|
|
122
|
+
- `merge` only within the same project pool. The survivor is `target_row`.
|
|
123
|
+
- Never merge across project_id boundaries.
|
|
124
|
+
- `element` <=100 chars. `summary` <=200 chars. No literal `|` or newlines.
|
|
125
|
+
- When a row genuinely fails the A/B bar or you are unsure it qualifies, prefer
|
|
126
|
+
`archived`. But never withhold `active` from a pending row that clearly meets
|
|
127
|
+
A/B merely because it is currently pending — clear, non-duplicate A/B pending
|
|
128
|
+
rows are promoted, not archived (rows that restate current rules or
|
|
129
|
+
user-curated core still archive per Source Of Truth).
|
|
130
|
+
|
|
131
|
+
## Output
|
|
132
|
+
|
|
133
|
+
Pipe lines only. No prose. First character must be a digit. Each line's first
|
|
134
|
+
field MUST be the ROW NUMBER (`<n>.` prefix) shown before that entry in
|
|
135
|
+
Entries. Emit one verdict per listed row; do not skip rows or invent numbers.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"channels": {
|
|
3
|
+
"promptInjection": {
|
|
4
|
+
"mode": "claude_md",
|
|
5
|
+
"targetPath": "~/.claude/CLAUDE.md"
|
|
6
|
+
}
|
|
7
|
+
},
|
|
8
|
+
"memory": {
|
|
9
|
+
"enabled": true,
|
|
10
|
+
"user": { "title": "" },
|
|
11
|
+
"cycle1": { "interval": "10m" },
|
|
12
|
+
"cycle2": { "interval": "1h" }
|
|
13
|
+
},
|
|
14
|
+
"search": {
|
|
15
|
+
"enabled": true,
|
|
16
|
+
"rawSearch": {
|
|
17
|
+
"maxResults": 10,
|
|
18
|
+
"credentials": {
|
|
19
|
+
"firecrawl": { "apiKey": "" },
|
|
20
|
+
"tavily": { "apiKey": "" },
|
|
21
|
+
"exa": { "apiKey": "" }
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"requestTimeoutMs": 120000,
|
|
25
|
+
"crawl": { "maxPages": 10, "maxDepth": 2, "sameDomainOnly": true }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"roles": [
|
|
3
|
+
{ "name": "worker", "preset": "sonnet-high", "permission": "full" },
|
|
4
|
+
{ "name": "reviewer", "preset": "opus-high", "permission": "full" },
|
|
5
|
+
{ "name": "debugger", "preset": "opus-high", "permission": "full" },
|
|
6
|
+
{ "name": "tester", "preset": "sonnet-high", "permission": "full" }
|
|
7
|
+
]
|
|
8
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Default role assignment:
|
|
2
|
+
- Implementation → worker
|
|
3
|
+
- Verification → reviewer
|
|
4
|
+
- Debugging → debugger
|
|
5
|
+
- Testing → tester
|
|
6
|
+
|
|
7
|
+
Cross-verification loop (1:1 worker↔reviewer pairing is the DEFAULT):
|
|
8
|
+
- Pair every implementation worker 1:1 with its own reviewer: the moment a worker completes, immediately dispatch a dedicated reviewer scoped to that worker's files. Parallel fix workers get parallel paired reviewers — reviews never serialize behind one combined pass. Start the Lead self-check (syntax check, diff inspection, invariant verification) in parallel too.
|
|
9
|
+
- When several workers touched interacting files, the LEAD performs ONE thin integration pass DIRECTLY (Lead self-check — NOT a dispatched reviewer; spawning another reviewer adds latency) to catch cross-file effects. Never replace the 1:1 paired reviewers with a single combined reviewer.
|
|
10
|
+
- If a reviewer returns issues, dispatch a fix worker → re-pair it 1:1 with a reviewer. Repeat until every reviewer issues a clean verdict ("all issues resolved" / "ship-ready").
|
|
11
|
+
- If issues require changing the original plan/spec (not just fixable bugs), halt the loop and report to the user. Resume only after the user updates the plan.
|
|
12
|
+
- Do not report completion to the user before every reviewer's clean verdict. Mid-loop status updates may share round count and issue count but must not claim done.
|
package/hooks/hooks.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "mixdog unified hooks",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "startup|clear",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "\"${CLAUDE_PLUGIN_ROOT}/native/mixdog-shim/target/release/mixdog-shim.exe\" --part=rules",
|
|
11
|
+
"timeout": 30
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"type": "command",
|
|
15
|
+
"command": "\"${CLAUDE_PLUGIN_ROOT}/native/mixdog-shim/target/release/mixdog-shim.exe\" --part=core",
|
|
16
|
+
"timeout": 130
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "command",
|
|
20
|
+
"command": "\"${CLAUDE_PLUGIN_ROOT}/native/mixdog-shim/target/release/mixdog-shim.exe\" --part=recap",
|
|
21
|
+
"timeout": 130
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"PreToolUse": [
|
|
27
|
+
{
|
|
28
|
+
"matcher": "^mcp__plugin_mixdog_(?:mixdog|trib-plugin)__(?!(?:read|list|glob|grep|code_graph|find_symbol|find_references|find_callers|explore|recall|search|fetch|web_fetch|schedule_status|list_models|job_wait|download_attachment)$)",
|
|
29
|
+
"hooks": [
|
|
30
|
+
{
|
|
31
|
+
"type": "command",
|
|
32
|
+
"command": "\"${CLAUDE_PLUGIN_ROOT}/native/mixdog-shim/target/release/mixdog-shim.exe\"",
|
|
33
|
+
"timeout": 10
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"PostToolUse": [
|
|
39
|
+
{
|
|
40
|
+
"matcher": "Edit|Write|MultiEdit|Bash|NotebookEdit",
|
|
41
|
+
"hooks": [
|
|
42
|
+
{
|
|
43
|
+
"type": "command",
|
|
44
|
+
"command": "\"${CLAUDE_PLUGIN_ROOT}/native/mixdog-shim/target/release/mixdog-shim.exe\" --kind=post-tool",
|
|
45
|
+
"timeout": 5
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"UserPromptSubmit": [
|
|
51
|
+
{
|
|
52
|
+
"hooks": [
|
|
53
|
+
{
|
|
54
|
+
"type": "command",
|
|
55
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/turn-timer.cjs\" start",
|
|
56
|
+
"timeout": 10
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"Stop": [
|
|
62
|
+
{
|
|
63
|
+
"hooks": [
|
|
64
|
+
{
|
|
65
|
+
"type": "command",
|
|
66
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/turn-timer.cjs\" stop",
|
|
67
|
+
"timeout": 10
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
|
|
7
|
+
const RUNTIME_ROOT = path.join(os.tmpdir(), 'mixdog');
|
|
8
|
+
const ACTIVE_INSTANCE_FILE = path.join(RUNTIME_ROOT, 'active-instance.json');
|
|
9
|
+
|
|
10
|
+
function parsePositivePid(value) {
|
|
11
|
+
const pid = Number(value);
|
|
12
|
+
return Number.isFinite(pid) && pid > 0 ? pid : null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function readActiveInstance() {
|
|
16
|
+
try {
|
|
17
|
+
const active = JSON.parse(fs.readFileSync(ACTIVE_INSTANCE_FILE, 'utf8'));
|
|
18
|
+
return activeInstanceStaleReason(active) ? null : active;
|
|
19
|
+
} catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function getActiveOwnerPid(active) {
|
|
25
|
+
return parsePositivePid(active && active.ownerLeadPid)
|
|
26
|
+
|| parsePositivePid(active && active.terminalLeadPid)
|
|
27
|
+
|| parsePositivePid(active && active.supervisor_pid)
|
|
28
|
+
|| parsePositivePid(active && active.instanceId);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function isPidAlive(pid) {
|
|
32
|
+
const n = parsePositivePid(pid);
|
|
33
|
+
if (!n) return false;
|
|
34
|
+
try {
|
|
35
|
+
process.kill(n, 0);
|
|
36
|
+
return true;
|
|
37
|
+
} catch (err) {
|
|
38
|
+
return err && err.code === 'EPERM';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function activeInstanceStaleReason(active) {
|
|
43
|
+
const ownerPid = getActiveOwnerPid(active);
|
|
44
|
+
if (!isPidAlive(ownerPid)) return `owner PID ${ownerPid || 'unknown'} is dead`;
|
|
45
|
+
const channelsPid = parsePositivePid(active && active.channels_pid);
|
|
46
|
+
if (channelsPid && !isPidAlive(channelsPid)) return `channels PID ${channelsPid} is dead`;
|
|
47
|
+
const workerPid = parsePositivePid(active && active.worker_pid);
|
|
48
|
+
if (workerPid && !isPidAlive(workerPid)) return `worker PID ${workerPid} is dead`;
|
|
49
|
+
const serverPid = parsePositivePid(active && active.server_pid);
|
|
50
|
+
if (serverPid && !isPidAlive(serverPid)) return `server PID ${serverPid} is dead`;
|
|
51
|
+
return '';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function getPermissionInstanceId(active) {
|
|
55
|
+
return getPermissionInstanceIds(active)[0] || '';
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function getPermissionInstanceIds(active) {
|
|
59
|
+
const ids = [];
|
|
60
|
+
const ownerPid = parsePositivePid(active && active.ownerLeadPid)
|
|
61
|
+
|| parsePositivePid(active && active.terminalLeadPid);
|
|
62
|
+
if (ownerPid) ids.push(String(ownerPid));
|
|
63
|
+
if (active && active.instanceId) ids.push(String(active.instanceId));
|
|
64
|
+
return [...new Set(ids.filter(Boolean))];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
module.exports = {
|
|
68
|
+
ACTIVE_INSTANCE_FILE,
|
|
69
|
+
RUNTIME_ROOT,
|
|
70
|
+
activeInstanceStaleReason,
|
|
71
|
+
getActiveOwnerPid,
|
|
72
|
+
getPermissionInstanceId,
|
|
73
|
+
getPermissionInstanceIds,
|
|
74
|
+
isPidAlive,
|
|
75
|
+
parsePositivePid,
|
|
76
|
+
readActiveInstance,
|
|
77
|
+
};
|