Testing Mastracode TUI
Guide for interactive testing of mastracode's terminal UI in Konsole.
Devin Secrets Needed
OPENROUTER_API_KEY — for using OpenRouter as a custom provider when Anthropic/OpenAI keys are unavailable
Prerequisites
Build mastracode and its dependencies:
cd /home/ubuntu/repos/mastra
COREPACK_ENABLE_STRICT=0 pnpm build:mastracode
This may take a few minutes. If pnpm has corepack issues, install directly: npm install -g pnpm@10.11.0
If the build fails due to pre-existing DTS errors in @mastra/core or @mastra/memory, use --continue to let downstream packages (including mastracode) still build:
COREPACK_ENABLE_STRICT=0 pnpm turbo build --filter ./mastracode --continue
If unit tests fail with missing @mastra/core/workspace, run pnpm build:core first.
Configuring a Custom Provider (OpenRouter)
If you don't have a direct Anthropic/OpenAI API key, configure OpenRouter as a custom provider:
Edit ~/.local/share/mastracode/settings.json:
{
"customProviders": [
{
"name": "OpenRouter",
"url": "https://openrouter.ai/api/v1",
"apiKey": "<OPENROUTER_API_KEY value>",
"models": ["minimax/minimax-m2.7"]
}
],
"models": {
"activeModelPackId": "custom:Custom",
"modeDefaults": {
"build": "openrouter/minimax/minimax-m2.7",
"plan": "openrouter/minimax/minimax-m2.7",
"fast": "openrouter/minimax/minimax-m2.7"
}
},
"customModelPacks": [
{
"name": "Custom",
"models": {
"build": "openrouter/minimax/minimax-m2.7",
"plan": "openrouter/minimax/minimax-m2.7",
"fast": "openrouter/minimax/minimax-m2.7"
},
"createdAt": "2026-01-01T00:00:00.000Z"
}
]
}
After launching mastracode, you may also need to activate the custom pack via /models → select "Custom" → "Activate".
Verify the status bar at the bottom shows the correct model (e.g., build openrouter/minimax/minimax-m2.7).
Launching Mastracode
cd /home/ubuntu/repos/mastra/mastracode
COREPACK_ENABLE_STRICT=0 pnpm cli
On first launch, mastracode may show a setup wizard. Select "Skip" to proceed to the main TUI without configuring models interactively.
Key TUI Commands
| Command |
Action |
/new |
Create a new empty thread |
/threads |
Open thread selector (↑↓ navigate, Enter select) |
/clone |
Clone current thread |
/models |
Switch model pack |
/help |
Show all available commands |
Programmatic Rendering Tests
For visual/rendering bugs (e.g., border alignment, padding, wrapping), writing a quick tsx script that directly renders the component is more reliable than visual inspection alone:
cd /home/ubuntu/repos/mastra/mastracode
npx tsx test-script.ts
Key approach:
- Import the component directly (e.g.,
UserMessageComponent from ./src/tui/components/user-message.js)
- Render at specific widths and strip ANSI codes to measure visible character widths
- Assert all lines have identical visible width (for bordered components)
- Test at multiple terminal widths (40, 60, 80, 100, 120+) to catch edge cases
- Filter out trailing empty lines from
Spacer components when measuring
- For before/after comparisons, simulate the old logic inline to confirm the bug exists
This approach catches bugs that are hard to see visually and provides concrete pass/fail evidence.
Testing Thread State Isolation
The key scenario for thread state testing:
Generate tasks: Ask the model to use the task_write tool explicitly. Some models (e.g., minimax) may not call it automatically — you may need to say something like: "Please use the task_write tool to create a task list with 3 items: Fix login bug, Add unit tests, Update docs"
Verify tasks visible: Look for the "Tasks [0/N completed]" section with ○/▶/✓ icons between the status line and the editor input.
Test /new: The task progress component should completely disappear. The screen should show only "Ready for new conversation" and an empty input.
Test /threads switch: Switch back to the original thread — messages and tasks should restore correctly.
Test /clone: Cloned threads should start with empty tasks (tasks are ephemeral, not persisted to clones).
Common Issues
- Observational memory errors: You may see errors about
GOOGLE_GENERATIVE_AI_API_KEY for the OM model. Fix this by setting the OM model to an OpenRouter model via /om or in settings.json (models.omModelOverride). Configure the OM model if you expect observation to trigger during testing.
- Model not calling tools: Less capable models may not use mastracode's tool system. Explicitly instruct them to use specific tools by name.
- Status bar shows wrong model: After changing settings.json, you may need to use
/models in the TUI to activate the custom pack.
- Build failures: If
pnpm cli fails with module resolution errors, run pnpm build:mastracode (or with --continue) from the repo root to build all transitive dependencies.
- User message rendering without LLM: The user message box renders immediately on Enter, before any LLM response. You can test rendering bugs without a working LLM connection — just submit a message and inspect the bordered box.
Running Unit Tests
cd /home/ubuntu/repos/mastra
COREPACK_ENABLE_STRICT=0 pnpm --filter mastracode exec vitest run src/tui/__tests__/
Some pre-existing test failures may exist in the broader test suite — focus on tests relevant to the feature being verified.
1---2name: testing-mastracode-tui3description: Testing mastracode TUI features interactively in Konsole. Covers model configuration, thread lifecycle, task state isolation, and common blockers.4---5
6# Testing Mastracode TUI
7
8Guide for interactive testing of mastracode's terminal UI in Konsole.
9
10## Devin Secrets Needed
11
12- `OPENROUTER_API_KEY` — for using OpenRouter as a custom provider when Anthropic/OpenAI keys are unavailable
13
14## Prerequisites
15
161. Build mastracode and its dependencies:
17
18 ```bash
19 cd /home/ubuntu/repos/mastra
20 COREPACK_ENABLE_STRICT=0 pnpm build:mastracode
21 ```
22
23 This may take a few minutes. If `pnpm` has corepack issues, install directly: `npm install -g pnpm@10.11.0`
24
252. If the build fails due to pre-existing DTS errors in `@mastra/core` or `@mastra/memory`, use `--continue` to let downstream packages (including mastracode) still build:
26
27 ```bash
28 COREPACK_ENABLE_STRICT=0 pnpm turbo build --filter ./mastracode --continue
29 ```
30
313. If unit tests fail with missing `@mastra/core/workspace`, run `pnpm build:core` first.
32
33## Configuring a Custom Provider (OpenRouter)
34
35If you don't have a direct Anthropic/OpenAI API key, configure OpenRouter as a custom provider:
36
371. Edit `~/.local/share/mastracode/settings.json`:
38
39 ```json
40 {
41 "customProviders": [
42 {
43 "name": "OpenRouter",
44 "url": "https://openrouter.ai/api/v1",
45 "apiKey": "<OPENROUTER_API_KEY value>",
46 "models": ["minimax/minimax-m2.7"]
47 }
48 ],
49 "models": {
50 "activeModelPackId": "custom:Custom",
51 "modeDefaults": {
52 "build": "openrouter/minimax/minimax-m2.7",
53 "plan": "openrouter/minimax/minimax-m2.7",
54 "fast": "openrouter/minimax/minimax-m2.7"
55 }
56 },
57 "customModelPacks": [
58 {
59 "name": "Custom",
60 "models": {
61 "build": "openrouter/minimax/minimax-m2.7",
62 "plan": "openrouter/minimax/minimax-m2.7",
63 "fast": "openrouter/minimax/minimax-m2.7"
64 },
65 "createdAt": "2026-01-01T00:00:00.000Z"
66 }
67 ]
68 }
69 ```
70
712. After launching mastracode, you may also need to activate the custom pack via `/models` → select "Custom" → "Activate".
72
733. Verify the status bar at the bottom shows the correct model (e.g., `build openrouter/minimax/minimax-m2.7`).
74
75## Launching Mastracode
76
77```bash
78cd /home/ubuntu/repos/mastra/mastracode
79COREPACK_ENABLE_STRICT=0 pnpm cli
80```
81
82On first launch, mastracode may show a setup wizard. Select "Skip" to proceed to the main TUI without configuring models interactively.
83
84## Key TUI Commands
85
86| Command | Action |
87| ---------- | ------------------------------------------------ |
88| `/new` | Create a new empty thread |
89| `/threads` | Open thread selector (↑↓ navigate, Enter select) |
90| `/clone` | Clone current thread |
91| `/models` | Switch model pack |
92| `/help` | Show all available commands |
93
94## Programmatic Rendering Tests
95
96For visual/rendering bugs (e.g., border alignment, padding, wrapping), writing a quick `tsx` script that directly renders the component is more reliable than visual inspection alone:
97
98```bash
99cd /home/ubuntu/repos/mastra/mastracode
100npx tsx test-script.ts
101```
102
103Key approach:
104
105- Import the component directly (e.g., `UserMessageComponent` from `./src/tui/components/user-message.js`)
106- Render at specific widths and strip ANSI codes to measure visible character widths
107- Assert all lines have identical visible width (for bordered components)
108- Test at multiple terminal widths (40, 60, 80, 100, 120+) to catch edge cases
109- Filter out trailing empty lines from `Spacer` components when measuring
110- For before/after comparisons, simulate the old logic inline to confirm the bug exists
111
112This approach catches bugs that are hard to see visually and provides concrete pass/fail evidence.
113
114## Testing Thread State Isolation
115
116The key scenario for thread state testing:
117
1181. **Generate tasks**: Ask the model to use the `task_write` tool explicitly. Some models (e.g., minimax) may not call it automatically — you may need to say something like: "Please use the task_write tool to create a task list with 3 items: Fix login bug, Add unit tests, Update docs"
119
1202. **Verify tasks visible**: Look for the "Tasks [0/N completed]" section with ○/▶/✓ icons between the status line and the editor input.
121
1223. **Test `/new`**: The task progress component should completely disappear. The screen should show only "Ready for new conversation" and an empty input.
123
1244. **Test `/threads` switch**: Switch back to the original thread — messages and tasks should restore correctly.
125
1265. **Test `/clone`**: Cloned threads should start with empty tasks (tasks are ephemeral, not persisted to clones).
127
128## Common Issues
129
130- **Observational memory errors**: You may see errors about `GOOGLE_GENERATIVE_AI_API_KEY` for the OM model. Fix this by setting the OM model to an OpenRouter model via `/om` or in settings.json (`models.omModelOverride`). Configure the OM model if you expect observation to trigger during testing.
131- **Model not calling tools**: Less capable models may not use mastracode's tool system. Explicitly instruct them to use specific tools by name.
132- **Status bar shows wrong model**: After changing settings.json, you may need to use `/models` in the TUI to activate the custom pack.
133- **Build failures**: If `pnpm cli` fails with module resolution errors, run `pnpm build:mastracode` (or with `--continue`) from the repo root to build all transitive dependencies.
134- **User message rendering without LLM**: The user message box renders immediately on Enter, before any LLM response. You can test rendering bugs without a working LLM connection — just submit a message and inspect the bordered box.
135
136## Running Unit Tests
137
138```bash
139cd /home/ubuntu/repos/mastra
140COREPACK_ENABLE_STRICT=0 pnpm --filter mastracode exec vitest run src/tui/__tests__/
141```
142
143Some pre-existing test failures may exist in the broader test suite — focus on tests relevant to the feature being verified.