mixdog 0.9.3 → 0.9.4
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 +7 -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/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-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 +215 -29
- package/scripts/freevar-smoke.mjs +95 -0
- package/scripts/internal-comms-bench.mjs +1 -0
- package/scripts/internal-comms-smoke.mjs +10 -9
- 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-usecase-cases.json +18 -0
- package/scripts/recall-usecase-probe.json +6 -0
- package/scripts/session-bench.mjs +152 -6
- package/scripts/tool-smoke.mjs +23 -63
- 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 +6 -5
- package/src/agents/maintainer/AGENT.md +4 -0
- package/src/agents/reviewer/AGENT.md +2 -1
- package/src/agents/worker/AGENT.md +8 -4
- package/src/lib/rules-builder.cjs +4 -0
- package/src/mixdog-session-runtime.mjs +632 -2042
- package/src/output-styles/default.md +34 -9
- package/src/output-styles/{oneline.md → extreme-minimal.md} +5 -4
- package/src/output-styles/minimal.md +4 -1
- package/src/output-styles/simple.md +22 -7
- package/src/rules/agent/00-common.md +2 -0
- package/src/rules/lead/lead-brief.md +12 -0
- package/src/rules/lead/lead-tool.md +0 -11
- 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 +86 -11
- package/src/runtime/agent/orchestrator/providers/model-list-sanitize.mjs +348 -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 +732 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +193 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +297 -2123
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +130 -1002
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +227 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-events.mjs +67 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +436 -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/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 +182 -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 +251 -397
- 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/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 +32 -41
- 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 +12 -292
- package/src/runtime/channels/index.mjs +229 -663
- package/src/runtime/channels/lib/backend-dispatch.mjs +44 -0
- package/src/runtime/channels/lib/event-pipeline.mjs +18 -1
- package/src/runtime/channels/lib/event-queue.mjs +63 -4
- package/src/runtime/channels/lib/inbound-routing.mjs +111 -0
- 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/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 +312 -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 +36 -570
- package/src/runtime/channels/tool-defs.mjs +11 -130
- package/src/runtime/memory/index.mjs +201 -1948
- 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/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 +22 -2
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -1
- package/src/runtime/memory/lib/query-handlers.mjs +780 -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/launcher-control.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 +84 -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 +170 -0
- package/src/session-runtime/quick-search-models.mjs +46 -0
- package/src/session-runtime/session-hooks.mjs +93 -0
- package/src/session-runtime/settings-api.mjs +319 -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/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 +110 -671
- package/src/standalone/channel-worker.mjs +4 -7
- package/src/standalone/explore-tool.mjs +30 -9
- 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 +945 -8094
- package/src/tui/app/app-format.mjs +206 -0
- package/src/tui/app/channel-pickers.mjs +510 -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 +324 -0
- package/src/tui/app/model-options.mjs +330 -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 +490 -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 +671 -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 +510 -0
- package/src/tui/app/use-transcript-window.mjs +589 -0
- package/src/tui/components/ConfirmBar.jsx +1 -1
- package/src/tui/components/Picker.jsx +32 -4
- package/src/tui/components/PromptInput.jsx +23 -101
- package/src/tui/components/SlashCommandPalette.jsx +8 -1
- package/src/tui/components/StatusLine.jsx +63 -12
- 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 +19652 -18630
- 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 +122 -562
- package/src/tui/figures.mjs +5 -0
- package/src/tui/index.jsx +105 -0
- 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 +67 -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 +1 -1
- package/src/workflows/sequential/WORKFLOW.md +1 -1
- package/vendor/ink/build/display-width.js +19 -3
- package/vendor/ink/build/ink.js +103 -6
- 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/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
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* app-format.mjs — pure formatting/labeling helpers for the App shell.
|
|
3
|
+
*
|
|
4
|
+
* Extracted verbatim from App.jsx. No React, no engine state — string/label
|
|
5
|
+
* formatting, welcome hints, provider row labels, and small pure predicates.
|
|
6
|
+
*/
|
|
7
|
+
import stringWidth from 'string-width';
|
|
8
|
+
import { theme } from '../theme.mjs';
|
|
9
|
+
import { formatToolSurface } from '../../runtime/shared/tool-surface.mjs';
|
|
10
|
+
|
|
11
|
+
// SEARCH_DEFAULT marker — mirrors backend SEARCH_DEFAULT_PROVIDER/MODEL
|
|
12
|
+
// (mixdog-session-runtime.mjs 1167-1168). A search route of {provider:'default',
|
|
13
|
+
// model:'default'} means "follow the Main Model" at runtime (nativeSearchRoutes).
|
|
14
|
+
export const SEARCH_DEFAULT_ROUTE = Object.freeze({ provider: 'default', model: 'default' });
|
|
15
|
+
export const isSearchDefaultRoute = (route) =>
|
|
16
|
+
String(route?.provider || '').toLowerCase() === 'default'
|
|
17
|
+
&& String(route?.model || '').toLowerCase() === 'default';
|
|
18
|
+
|
|
19
|
+
export function terminalSize(stdout) {
|
|
20
|
+
// Match ink's getWindowSize() semantics (vendor/ink/build/utils.js): rows or
|
|
21
|
+
// columns can be 0 (not just undefined) before the TTY reports its size —
|
|
22
|
+
// treating 0 as valid made App's FIRST frame lay out against a tiny/default
|
|
23
|
+
// viewport, so the initial picker rendered collapsed and then "unfolded"
|
|
24
|
+
// when the post-mount resize effect read the real dimensions.
|
|
25
|
+
const columns = stdout?.columns;
|
|
26
|
+
const rows = stdout?.rows;
|
|
27
|
+
if (columns && rows) return { columns, rows };
|
|
28
|
+
return {
|
|
29
|
+
columns: columns || 80,
|
|
30
|
+
rows: rows || 24,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function clean(value) {
|
|
35
|
+
return String(value ?? '').trim();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function projectNameFromPath(value) {
|
|
39
|
+
const text = String(value || '').replace(/[\\/]+$/, '');
|
|
40
|
+
return text.split(/[\\/]/).pop() || text || '(current)';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function workflowDisplayName(workflow = {}) {
|
|
44
|
+
return clean(workflow?.name || workflow?.id) || 'Default';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function workflowSwitchNotice(workflow = {}) {
|
|
48
|
+
return 'Workflow updated · new sessions';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function modelSwitchNotice() {
|
|
52
|
+
return 'Model updated · new sessions';
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function compactJson(value, max = 180) {
|
|
56
|
+
let text = '';
|
|
57
|
+
try {
|
|
58
|
+
text = typeof value === 'string' ? value : JSON.stringify(value);
|
|
59
|
+
} catch {
|
|
60
|
+
text = String(value ?? '');
|
|
61
|
+
}
|
|
62
|
+
text = String(text || '').replace(/\s+/g, ' ').trim();
|
|
63
|
+
if (!text) return '';
|
|
64
|
+
return stringWidth(text) > max ? `${text.slice(0, Math.max(1, max - 1))}…` : text;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function toolApprovalDescription(request = {}) {
|
|
68
|
+
const surface = formatToolSurface(request.name, request.args);
|
|
69
|
+
const summary = surface?.summary ? `${surface.label || request.name} (${surface.summary})` : (surface?.label || request.name || 'tool');
|
|
70
|
+
const reason = clean(request.reason) || 'Hook requested approval.';
|
|
71
|
+
const args = compactJson(request.args);
|
|
72
|
+
return [
|
|
73
|
+
summary ? `Tool: ${summary}` : '',
|
|
74
|
+
reason ? `Reason: ${reason}` : '',
|
|
75
|
+
args ? `Args: ${args}` : '',
|
|
76
|
+
].filter(Boolean).join('\n');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function providerStatusLabel(provider = {}) {
|
|
80
|
+
const status = clean(provider.status);
|
|
81
|
+
if (status) return status;
|
|
82
|
+
if (provider.enabled || provider.authenticated) return 'Set';
|
|
83
|
+
if (provider.detected) return 'Detected';
|
|
84
|
+
return 'Off';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function providerDetailText(provider = {}) {
|
|
88
|
+
const detail = clean(provider.detail);
|
|
89
|
+
if (detail) return detail;
|
|
90
|
+
if (provider.env && provider.envName) return `env: ${provider.envName}`;
|
|
91
|
+
if (provider.envName) return provider.envName;
|
|
92
|
+
if (provider.baseURL) return provider.baseURL;
|
|
93
|
+
if (provider.desc) return provider.desc;
|
|
94
|
+
return '';
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function providerKindLabel(provider = {}) {
|
|
98
|
+
if (provider.type === 'oauth') return 'OAuth';
|
|
99
|
+
if (provider.type === 'local') return 'Local endpoint';
|
|
100
|
+
return 'API key';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function formatSessionUpdatedAt(value) {
|
|
104
|
+
const n = Number(value);
|
|
105
|
+
if (!Number.isFinite(n) || n <= 0) return '--:--';
|
|
106
|
+
const date = new Date(n);
|
|
107
|
+
if (Number.isNaN(date.getTime())) return '--:--';
|
|
108
|
+
const now = new Date();
|
|
109
|
+
const pad = (v) => String(v).padStart(2, '0');
|
|
110
|
+
const time = `${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
111
|
+
const day = `${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
|
|
112
|
+
return date.getFullYear() === now.getFullYear()
|
|
113
|
+
? `${day} ${time}`
|
|
114
|
+
: `${date.getFullYear()}-${day} ${time}`;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function formatSessionMessageCount(count) {
|
|
118
|
+
const n = Number(count || 0);
|
|
119
|
+
return `${Number.isFinite(n) ? Math.max(0, Math.round(n)) : 0} msg${n === 1 ? '' : 's'}`;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function fitLine(value, columns, reserve = 4) {
|
|
123
|
+
const text = String(value || '');
|
|
124
|
+
const width = Math.max(1, Number(columns || 80) - reserve);
|
|
125
|
+
return text.length > width ? `${text.slice(0, Math.max(1, width - 1))}…` : text;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function centerLine(value, columns, reserve = 0) {
|
|
129
|
+
const text = fitLine(value, columns, reserve);
|
|
130
|
+
const width = Math.max(1, Number(columns || 80) - reserve);
|
|
131
|
+
const pad = Math.max(0, Math.floor((width - text.length) / 2));
|
|
132
|
+
return `${' '.repeat(pad)}${text}`;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export const WELCOME_PROMPT_HINTS = [
|
|
136
|
+
'Tip: /setting · Tune the runtime before the run.',
|
|
137
|
+
'Tip: /model · Pick the right brain for the job.',
|
|
138
|
+
'Tip: /workflow · Change how work gets routed.',
|
|
139
|
+
'Tip: Ctrl+O · Expand tool output when you need details.',
|
|
140
|
+
'Tip: PageUp/PageDown · Scroll the transcript.',
|
|
141
|
+
'Tip: Esc · Close panels or interrupt work.',
|
|
142
|
+
'Tip: /usage · Check quota before a long run.',
|
|
143
|
+
'Tip: /agents · See who can help.',
|
|
144
|
+
'Tip: /theme · Change the terminal mood.',
|
|
145
|
+
'Tip: /search · Set web search routing.',
|
|
146
|
+
'Paste an error. I’ll trace it.',
|
|
147
|
+
'Tell me the goal. I’ll handle the steps.',
|
|
148
|
+
'Start with a task, a bug, or a wild idea.',
|
|
149
|
+
'Good fixes start with a repro.',
|
|
150
|
+
'Ask for a plan, then let the agents work.',
|
|
151
|
+
'Small prompt, sharp result.',
|
|
152
|
+
'Drop in a file path and ask what changed.',
|
|
153
|
+
'Describe the outcome, not just the command.',
|
|
154
|
+
'Ready when you are.',
|
|
155
|
+
'One clear goal beats ten vague tasks.',
|
|
156
|
+
];
|
|
157
|
+
|
|
158
|
+
export const CONDITIONAL_WELCOME_PROMPT_HINTS = {
|
|
159
|
+
noProvider: 'Tip: /providers · Connect a provider before your first turn.',
|
|
160
|
+
noModel: 'Tip: /model · Choose a model before your first turn.',
|
|
161
|
+
soloWorkflow: 'Tip: /workflow · Switch from Solo when you want agents.',
|
|
162
|
+
searchDefaultUnsupported: 'Tip: /search · Choose a native search model for this main model.',
|
|
163
|
+
error: 'Tip: /doctor · Check setup health. (coming soon)',
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export function randomWelcomePromptHint() {
|
|
167
|
+
const index = Math.floor(Math.random() * WELCOME_PROMPT_HINTS.length);
|
|
168
|
+
return WELCOME_PROMPT_HINTS[index] || WELCOME_PROMPT_HINTS[0] || '';
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export function providerSetupHasUsableProvider(setup = {}) {
|
|
172
|
+
const rows = [
|
|
173
|
+
...(Array.isArray(setup.api) ? setup.api : []),
|
|
174
|
+
...(Array.isArray(setup.oauth) ? setup.oauth : []),
|
|
175
|
+
...(Array.isArray(setup.local) ? setup.local : []),
|
|
176
|
+
];
|
|
177
|
+
return rows.some((row) => (
|
|
178
|
+
row?.authenticated === true
|
|
179
|
+
|| row?.enabled === true
|
|
180
|
+
|| row?.stored === true
|
|
181
|
+
|| row?.env === true
|
|
182
|
+
|| row?.detected === true
|
|
183
|
+
));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function activeWorkflowSummaryForStore(store, workflow = {}) {
|
|
187
|
+
try {
|
|
188
|
+
const workflows = store.listWorkflows?.() || [];
|
|
189
|
+
return workflows.find((item) => item.active)
|
|
190
|
+
|| workflows.find((item) => item.id === workflow?.id)
|
|
191
|
+
|| null;
|
|
192
|
+
} catch {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function promptStatusColor(tone) {
|
|
198
|
+
if (tone === 'error') return theme.error;
|
|
199
|
+
if (tone === 'warn' || tone === 'cancel') return theme.warning;
|
|
200
|
+
if (tone === 'plain') return theme.subtle;
|
|
201
|
+
return theme.inactive;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export function promptHistoryKey(value) {
|
|
205
|
+
return String(value || '').trim().replace(/\s+/g, ' ');
|
|
206
|
+
}
|