mixdog 0.9.2 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/scripts/anthropic-maxtokens-test.mjs +119 -0
- package/scripts/build-tui.mjs +13 -1
- package/scripts/explore-bench.mjs +124 -0
- package/scripts/hook-bus-test.mjs +191 -0
- package/scripts/path-suffix-test.mjs +57 -0
- package/scripts/recall-bench.mjs +207 -0
- package/scripts/tool-smoke.mjs +7 -4
- package/src/agents/debugger/AGENT.md +2 -2
- package/src/agents/heavy-worker/AGENT.md +20 -11
- package/src/agents/reviewer/AGENT.md +2 -2
- package/src/agents/worker/AGENT.md +17 -11
- package/src/mixdog-session-runtime.mjs +424 -1812
- package/src/repl.mjs +5 -5
- package/src/rules/agent/30-explorer.md +8 -11
- package/src/rules/lead/lead-tool.md +9 -5
- package/src/rules/shared/01-tool.md +11 -5
- package/src/runtime/agent/orchestrator/context/collect.mjs +51 -0
- package/src/runtime/agent/orchestrator/mcp/client.mjs +6 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +93 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +22 -68
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +46 -7
- package/src/runtime/agent/orchestrator/providers/api-usage.mjs +1 -13
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/lib/usage-primitives.mjs +32 -0
- package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +54 -20
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +19 -12
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +7 -5
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +33 -23
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +31 -14
- package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +38 -12
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +7 -8
- package/src/runtime/agent/orchestrator/session/loop/compact-debug.mjs +28 -0
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +262 -0
- package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +38 -0
- package/src/runtime/agent/orchestrator/session/loop/env.mjs +14 -0
- package/src/runtime/agent/orchestrator/session/loop/hidden-agents.mjs +21 -0
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +49 -0
- package/src/runtime/agent/orchestrator/session/loop/steering.mjs +63 -0
- package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +100 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +52 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +218 -0
- package/src/runtime/agent/orchestrator/session/loop/transcript-repair.mjs +101 -0
- package/src/runtime/agent/orchestrator/session/loop/usage.mjs +35 -0
- package/src/runtime/agent/orchestrator/session/loop.mjs +169 -918
- package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +227 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +235 -0
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +137 -0
- package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +155 -0
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +303 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +65 -1032
- package/src/runtime/agent/orchestrator/stall-policy.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +241 -0
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.test.mjs +162 -0
- package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +42 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +11 -4
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +5 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +50 -39
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +11 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +303 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +43 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +382 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +497 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +295 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/graph-model.mjs +158 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/lang-predicates.mjs +128 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/memory-cache.mjs +66 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/project-root.mjs +44 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +1192 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/source-access.mjs +81 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/span.mjs +19 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +280 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/text-mask.mjs +347 -0
- package/src/runtime/agent/orchestrator/tools/code-graph.mjs +36 -4277
- package/src/runtime/agent/orchestrator/tools/patch.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +1 -2
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +1 -2
- package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +2 -4
- package/src/runtime/channels/index.mjs +14 -233
- package/src/runtime/channels/lib/boot-profile.mjs +23 -0
- package/src/runtime/channels/lib/crash-log.mjs +106 -0
- package/src/runtime/channels/lib/index-drop-trace.mjs +72 -0
- package/src/runtime/channels/lib/output-forwarder.mjs +8 -0
- package/src/runtime/channels/lib/telegram-format.mjs +19 -22
- package/src/runtime/channels/lib/whisper-language.mjs +42 -0
- package/src/runtime/memory/index.mjs +314 -359
- package/src/runtime/memory/lib/core-memory-store.mjs +351 -1
- package/src/runtime/memory/lib/cycle-signatures.mjs +34 -0
- package/src/runtime/memory/lib/http-wire.mjs +57 -0
- package/src/runtime/memory/lib/memory-cycle2.mjs +56 -3
- package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +24 -0
- package/src/runtime/memory/lib/memory-retrievers.mjs +8 -0
- package/src/runtime/memory/lib/memory.mjs +20 -0
- package/src/runtime/memory/lib/promotion-fingerprint.mjs +50 -0
- package/src/runtime/memory/lib/recall-format.mjs +183 -0
- package/src/runtime/memory/tool-defs.mjs +4 -4
- package/src/runtime/shared/abort-controller.mjs +1 -1
- package/src/runtime/shared/background-tasks.mjs +2 -3
- package/src/runtime/shared/buffered-appender.mjs +149 -0
- package/src/runtime/shared/task-notification-envelope.mjs +98 -0
- package/src/runtime/shared/task-notification-envelope.test.mjs +107 -0
- package/src/runtime/shared/tool-execution-contract.mjs +2 -2
- package/src/runtime/shared/transcript-writer.mjs +29 -2
- package/src/session-runtime/config-helpers.mjs +209 -0
- package/src/session-runtime/effort.mjs +128 -0
- package/src/session-runtime/fs-utils.mjs +10 -0
- package/src/session-runtime/model-capabilities.mjs +130 -0
- package/src/session-runtime/output-styles.mjs +124 -0
- package/src/session-runtime/plugin-mcp.mjs +114 -0
- package/src/session-runtime/session-text.mjs +100 -0
- package/src/session-runtime/statusline-route.mjs +35 -0
- package/src/session-runtime/tool-catalog.mjs +720 -0
- package/src/session-runtime/workflow.mjs +358 -0
- package/src/standalone/agent-tool.mjs +49 -10
- package/src/standalone/channel-worker.mjs +3 -2
- package/src/standalone/explore-tool.mjs +10 -3
- package/src/standalone/hook-bus.mjs +165 -8
- package/src/standalone/opencode-go-login.mjs +121 -0
- package/src/standalone/provider-admin.mjs +14 -3
- package/src/tui/App.jsx +884 -143
- package/src/tui/components/PromptInput.jsx +272 -15
- package/src/tui/components/ToolExecution.jsx +20 -10
- package/src/tui/components/tool-output-format.mjs +2 -2
- package/src/tui/dist/index.mjs +1771 -1947
- package/src/tui/engine/agent-envelope.mjs +296 -0
- package/src/tui/engine/boot-profile.mjs +21 -0
- package/src/tui/engine/labels.mjs +67 -0
- package/src/tui/engine/notice-text.mjs +112 -0
- package/src/tui/engine/queue-helpers.mjs +161 -0
- package/src/tui/engine/session-stats.mjs +46 -0
- package/src/tui/engine/tool-call-fields.mjs +23 -0
- package/src/tui/engine/tool-result-text.mjs +126 -0
- package/src/tui/engine.mjs +311 -851
- package/src/tui/input-editing.mjs +58 -8
- package/src/tui/input-editing.selection.test.mjs +75 -0
- package/src/tui/keyboard-protocol.mjs +2 -2
- package/src/tui/lib/voice-recorder.mjs +35 -19
- package/src/tui/markdown/format-token.mjs +7 -8
- package/src/tui/markdown/format-token.test.mjs +3 -3
- package/src/tui/paste-attachments.mjs +38 -0
- package/src/tui/paste-fix.test.mjs +119 -0
- package/src/tui/themes/base.mjs +2 -2
- package/src/tui/themes/kanagawa.mjs +4 -4
- package/src/tui/themes/teal.mjs +4 -5
- package/src/tui/themes/utils.mjs +1 -1
- package/src/ui/statusline.mjs +49 -0
- package/src/workflows/default/WORKFLOW.md +16 -9
- package/src/workflows/sequential/WORKFLOW.md +16 -11
- package/src/workflows/solo/WORKFLOW.md +5 -1
package/src/ui/statusline.mjs
CHANGED
|
@@ -425,6 +425,16 @@ function renderNativeStatusline({
|
|
|
425
425
|
const label = `Running ${n} Shell${n === 1 ? '' : 's'}`;
|
|
426
426
|
addL2(`${spin} ${B}${label}${R}${elapsedSuffix(shellStatus.elapsedLabel)}`);
|
|
427
427
|
}
|
|
428
|
+
// Memory cycle segment — single unified "Memory" wording for all states:
|
|
429
|
+
// running -> "⠋ Memory · 12s"; backlog warning -> "⠋ Memory · backlog 512"
|
|
430
|
+
// (yellow). Nothing when idle (no L2 pollution).
|
|
431
|
+
const memStatus = memoryCycleStatus();
|
|
432
|
+
if (memStatus?.kind === 'running') {
|
|
433
|
+
const elapsed = formatElapsed(Date.now() - memStatus.startedAt);
|
|
434
|
+
addL2(`${spin} ${B}Memory${R}${elapsedSuffix(elapsed)}`);
|
|
435
|
+
} else if (memStatus?.kind === 'backlog') {
|
|
436
|
+
addL2(`${spin} ${B}Memory${R} ${D}·${R} ${YLW}backlog ${memStatus.pending}${R}`);
|
|
437
|
+
}
|
|
428
438
|
const l1 = l1Parts.join(sep) || 'mixdog';
|
|
429
439
|
const l2 = l2Parts.join(sep);
|
|
430
440
|
return l2 ? `${l1}\n${l2}` : l1;
|
|
@@ -767,6 +777,45 @@ function maintenanceLabel(tag) {
|
|
|
767
777
|
}
|
|
768
778
|
|
|
769
779
|
function shellJobsStatus({ clientHostPid } = {}) {
|
|
780
|
+
return _shellJobsStatusImpl({ clientHostPid });
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
// Memory cycle L2 segment source. The memory daemon writes
|
|
784
|
+
// data/memory-cycle-state.json on every cycle start/finish (index.mjs
|
|
785
|
+
// _writeCycleStateFile) — no HTTP call from the statusline path. Cached at
|
|
786
|
+
// the same 1s cadence as the shell segment. Shows a single unified "Memory"
|
|
787
|
+
// segment: running (spinner + elapsed) or backlog warning (yellow count).
|
|
788
|
+
let _memoryCycleSegmentCache = { at: 0, value: null };
|
|
789
|
+
const MEMORY_CYCLE_SEGMENT_CACHE_MS = 1000;
|
|
790
|
+
const MEMORY_CYCLE_BACKLOG_WARN = 500;
|
|
791
|
+
function memoryCycleStatus() {
|
|
792
|
+
const now = Date.now();
|
|
793
|
+
if (now - _memoryCycleSegmentCache.at < MEMORY_CYCLE_SEGMENT_CACHE_MS) {
|
|
794
|
+
return _memoryCycleSegmentCache.value;
|
|
795
|
+
}
|
|
796
|
+
let value = null;
|
|
797
|
+
try {
|
|
798
|
+
const p = join(dataDir(), 'memory-cycle-state.json');
|
|
799
|
+
if (existsSync(p)) {
|
|
800
|
+
const state = JSON.parse(readFileSync(p, 'utf-8'));
|
|
801
|
+
const running = state?.running || null;
|
|
802
|
+
const backlog = state?.backlog || {};
|
|
803
|
+
// Stale-file guard: a daemon that died mid-run leaves running set —
|
|
804
|
+
// ignore anything not refreshed in the last 10 minutes.
|
|
805
|
+
const fresh = Number(state?.updatedAt) > now - 10 * 60_000;
|
|
806
|
+
if (fresh && running?.cycle && Number(running.started_at) > 0) {
|
|
807
|
+
value = { kind: 'running', startedAt: Number(running.started_at) };
|
|
808
|
+
} else if (fresh) {
|
|
809
|
+
const pending = Math.max(Number(backlog?.unchunked) || 0, Number(backlog?.cycle2_pending) || 0);
|
|
810
|
+
if (pending > MEMORY_CYCLE_BACKLOG_WARN) value = { kind: 'backlog', pending };
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
} catch { value = null; }
|
|
814
|
+
_memoryCycleSegmentCache = { at: now, value };
|
|
815
|
+
return value;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
function _shellJobsStatusImpl({ clientHostPid } = {}) {
|
|
770
819
|
const ownerPid = positiveInt(clientHostPid);
|
|
771
820
|
const empty = { count: 0, elapsedLabel: '' };
|
|
772
821
|
if (!ownerPid) return empty;
|
|
@@ -26,16 +26,23 @@ Lead supervises: delegates, coordinates, judges, decides. Route by complexity:
|
|
|
26
26
|
- SEQUENTIAL within a single complex scope — split it into ordered steps
|
|
27
27
|
rather than handing it off in one shot, with a build/test-green gate
|
|
28
28
|
between steps.
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
contract (token-optimized labeled fragments).
|
|
29
|
+
- Write briefs per the lead-tool brief contract (token-optimized labeled
|
|
30
|
+
fragments).
|
|
32
31
|
- After spawning async agent(s), END THE TURN — do not poll, guess, or start
|
|
33
|
-
dependent work until the completion notification resumes you
|
|
34
|
-
|
|
32
|
+
dependent work until the completion notification resumes you. Then wait
|
|
33
|
+
and continue automatically.
|
|
35
34
|
3. Review — pair one reviewer 1:1 with each implementation scope, spawned in the
|
|
36
|
-
same turn
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
same turn; never defer or batch the reviewer call — wait for its result.
|
|
36
|
+
Fact-check the agent response and cross-check implementation and review
|
|
37
|
+
results yourself before acting on them. Send fixes back to the original
|
|
38
|
+
scope and loop verify -> fix -> re-verify until clean. Skip review only for
|
|
39
|
+
simple, low-risk tasks. If the user asks for debugging, or a bug survives
|
|
40
|
+
2+ fix cycles, have the debugger investigate first instead of another fix
|
|
41
|
+
round.
|
|
39
42
|
4. Report — deliver the final report: synthesize results (outcome + key
|
|
40
43
|
evidence; never forward raw agent output), state the final state, and ask the
|
|
41
|
-
user whether to ship/deploy when relevant.
|
|
44
|
+
user whether to ship/deploy when relevant. Only after user feedback with no
|
|
45
|
+
issues prepare deploy/build/commit.
|
|
46
|
+
|
|
47
|
+
On any major change or direction shift mid-work, pause and re-consult the user
|
|
48
|
+
before continuing.
|
|
@@ -29,18 +29,23 @@ Lead supervises: delegates, coordinates, judges, decides. Route by complexity:
|
|
|
29
29
|
- SEQUENTIAL within a single complex scope — split it into ordered steps
|
|
30
30
|
rather than handing it off in one shot, with a build/test-green gate
|
|
31
31
|
between steps.
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
contract (token-optimized labeled fragments).
|
|
32
|
+
- Write briefs per the lead-tool brief contract (token-optimized labeled
|
|
33
|
+
fragments).
|
|
35
34
|
- After spawning an async agent, END THE TURN — do not poll, guess, or start
|
|
36
|
-
dependent or subsequent work until the completion notification resumes
|
|
37
|
-
|
|
38
|
-
automatically.
|
|
35
|
+
dependent or subsequent work until the completion notification resumes
|
|
36
|
+
you. Then wait and continue automatically.
|
|
39
37
|
3. Review — after each implementation scope completes, pair one reviewer 1:1
|
|
40
|
-
with that scope (spawned on its own turn, not batched)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
with that scope (spawned on its own turn, not batched); never defer the
|
|
39
|
+
reviewer call — wait for its result. Fact-check the agent response and
|
|
40
|
+
cross-check implementation and review results yourself before acting on
|
|
41
|
+
them. Send fixes back to the original scope and loop verify -> fix ->
|
|
42
|
+
re-verify until clean. Skip review only for simple, low-risk tasks. If the
|
|
43
|
+
user asks for debugging, or a bug survives 2+ fix cycles, have the debugger
|
|
44
|
+
investigate first instead of another fix round.
|
|
44
45
|
4. Report — deliver the final report: synthesize results (outcome + key
|
|
45
46
|
evidence; never forward raw agent output), state the final state, and ask the
|
|
46
|
-
user whether to ship/deploy when relevant.
|
|
47
|
+
user whether to ship/deploy when relevant. Only after user feedback with no
|
|
48
|
+
issues prepare deploy/build/commit.
|
|
49
|
+
|
|
50
|
+
On any major change or direction shift mid-work, pause and re-consult the user
|
|
51
|
+
before continuing.
|
|
@@ -14,7 +14,11 @@ agents:
|
|
|
14
14
|
3. Verify — Lead checks the result directly, fixes issues directly, and repeats
|
|
15
15
|
until the work is clean or a blocker must be reported.
|
|
16
16
|
4. Report — Lead summarizes the final state, verification result, and any
|
|
17
|
-
remaining risk or requested next step.
|
|
17
|
+
remaining risk or requested next step. Only after user feedback with no
|
|
18
|
+
issues prepare deploy/build/commit.
|
|
19
|
+
|
|
20
|
+
On any major change or direction shift mid-work, pause and re-consult the user
|
|
21
|
+
before continuing.
|
|
18
22
|
|
|
19
23
|
Delegation rule:
|
|
20
24
|
- Do not delegate, spawn, send, or ask any agent to perform work.
|