Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .claude/scheduled_tasks.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"sessionId":"57f44d3f-2540-472d-bc33-d4a87322ae05","pid":1372647,"procStart":"48543280","acquiredAt":1777290170782}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
name: meeseeks-cli-smoketest
description: End-to-end smoke testing of the Meeseeks CLI via tmux. Use this skill when asked to test the CLI, verify CLI behavior after changes, smoke-test the agent loop, check for regressions, or validate MCP/plugin/session features work correctly through the terminal interface. Also use when debugging CLI crashes, MCP connection issues, or session lifecycle problems that need live reproduction.
name: mewbo-cli-smoketest
description: End-to-end smoke testing of the Mewbo CLI via tmux. Use this skill when asked to test the CLI, verify CLI behavior after changes, smoke-test the agent loop, check for regressions, or validate MCP/plugin/session features work correctly through the terminal interface. Also use when debugging CLI crashes, MCP connection issues, or session lifecycle problems that need live reproduction.
---

# Meeseeks CLI Smoke Test via Tmux
# Mewbo CLI Smoke Test via Tmux

Automate end-to-end CLI testing by running `meeseeks` inside a tmux pane, sending commands/queries, and analyzing verbose output for errors, warnings, and regressions.
Automate end-to-end CLI testing by running `mewbo` inside a tmux pane, sending commands/queries, and analyzing verbose output for errors, warnings, and regressions.

## Why tmux

Expand All @@ -17,22 +17,22 @@ Find a running tmux session and create a new window:

```bash
tmux list-sessions
tmux new-window -t <session>:<next> -n meeseeks-test
tmux new-window -t <session>:<next> -n mewbo-test
```

Launch with maximum verbosity and auto-approve (skips permission prompts):

```bash
tmux send-keys -t <session>:meeseeks-test "uv run meeseeks -vv --auto-approve" Enter
tmux send-keys -t <session>:mewbo-test "uv run mewbo -vv --auto-approve" Enter
```

Wait for startup (MCP connections, plugin loading, skill discovery). Startup typically takes 5-10 seconds depending on MCP server count. Capture and verify the banner appears:

```bash
sleep 10 && tmux capture-pane -t <session>:meeseeks-test -p -S -100
sleep 10 && tmux capture-pane -t <session>:mewbo-test -p -S -100
```

Look for the ready banner showing model, session ID, tool counts, and `meeseeks>` prompt. If the prompt hasn't appeared, wait longer — MCP servers may take time to connect.
Look for the ready banner showing model, session ID, tool counts, and `mewbo>` prompt. If the prompt hasn't appeared, wait longer — MCP servers may take time to connect.

## Capture timing

Expand Down Expand Up @@ -151,11 +151,11 @@ Failed to — connection/reconnection failures

When you see MCP reconnection errors, the root cause is usually in the config merge pipeline:

1. **Multiple config formats**: `configs/mcp.json` (Meeseeks native: `servers` + `transport`) vs `.mcp.json` (Claude Code: `mcpServers` + `type`) vs plugin `.mcp.json` (varies)
1. **Multiple config formats**: `configs/mcp.json` (Mewbo native: `servers` + `transport`) vs `.mcp.json` (Claude Code: `mcpServers` + `type`) vs plugin `.mcp.json` (varies)
2. **Deep merge collision**: `_deep_merge` on individual server configs can produce entries with BOTH `type` and `transport` when CWD overrides global
3. **Plugin config normalization**: Plugin `.mcp.json` files may use `mcpServers` wrapper or bare server format without `transport`

To trace: read the MCP configs (`configs/mcp.json`, `.mcp.json`, and plugin `.mcp.json` files), then check `_normalize_mcp_config` in `meeseeks_tools/integration/mcp.py` and `load_all_plugin_components` in `meeseeks_core/plugins.py`.
To trace: read the MCP configs (`configs/mcp.json`, `.mcp.json`, and plugin `.mcp.json` files), then check `_normalize_mcp_config` in `mewbo_tools/integration/mcp.py` and `load_all_plugin_components` in `mewbo_core/plugins.py`.

### Session verification

Expand All @@ -173,9 +173,9 @@ For deeper verification, check Langfuse traces (trace_id == session_id) and Mong
When done testing, exit cleanly:

```bash
tmux send-keys -t <session>:meeseeks-test "/exit" Enter
tmux send-keys -t <session>:mewbo-test "/exit" Enter
sleep 2
tmux kill-window -t <session>:meeseeks-test
tmux kill-window -t <session>:mewbo-test
```

## Non-obvious gotchas
Expand Down
86 changes: 43 additions & 43 deletions .devin/wiki.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

# ── Node / frontend build artifacts ──────────────────────────
**/node_modules/
apps/meeseeks_console/dist/
apps/mewbo_console/dist/

# ── Environment & secrets ─────────────────────────────────────
.env
Expand Down
34 changes: 17 additions & 17 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# * Environment file for Meeseeks
# * Environment file for Mewbo
# * Repository: https://github.com/bearlike/Assistant
# - Rename this file to .env to make your application functional and remove unused variables.
# TODO-FUTURE: Convert this file to a YAML format for better readability


# * Meeseeks Settings
# * Mewbo Settings
# - VERSION: Version of your application (There is no need to change these value)
# - ENVMODE: Environment mode of your application (valid options: dev, prod)
VERSION=0.0.7
Expand All @@ -30,7 +30,7 @@ HA_URL=https://homeassistant.server.local/api
# - OPENAI_BASE_URL (optional): legacy alias used by some clients.
# - OPENAI_API_KEY (required): API key for the OpenAI-compatible endpoint.
# - If OPENAI_API_BASE is set and your model name has no provider prefix,
# Meeseeks will call openai/<model> automatically.
# Mewbo will call openai/<model> automatically.
OPENAI_API_BASE=https://lite-llm.server.local/v1
# OPENAI_BASE_URL=https://lite-llm.server.local/v1
OPENAI_API_KEY=sk-OPENAI_API_KEY
Expand All @@ -46,31 +46,31 @@ DEFAULT_MODEL=openai/gpt-5.2
ACTION_PLAN_MODEL=openai/gpt-5.2
#
# * Context Management
# - MEESEEKS_RECENT_EVENT_LIMIT: number of recent transcript events to inject
# - MEESEEKS_CONTEXT_SELECT_THRESHOLD: utilization ratio to trigger context selection
# - MEESEEKS_CONTEXT_SELECTION: set 0 to disable context selection
# - MEWBO_RECENT_EVENT_LIMIT: number of recent transcript events to inject
# - MEWBO_CONTEXT_SELECT_THRESHOLD: utilization ratio to trigger context selection
# - MEWBO_CONTEXT_SELECTION: set 0 to disable context selection
# - CONTEXT_SELECTOR_MODEL: optional model override for context selection
# - STEP_REFLECTION_MODEL: optional model override for step reflection
# - MEESEEKS_STEP_REFLECTION: set 0 to disable step reflection
MEESEEKS_RECENT_EVENT_LIMIT=8
MEESEEKS_CONTEXT_SELECT_THRESHOLD=0.8
MEESEEKS_CONTEXT_SELECTION=1
# - MEWBO_STEP_REFLECTION: set 0 to disable step reflection
MEWBO_RECENT_EVENT_LIMIT=8
MEWBO_CONTEXT_SELECT_THRESHOLD=0.8
MEWBO_CONTEXT_SELECTION=1
# CONTEXT_SELECTOR_MODEL=openai/gpt-5.2
# STEP_REFLECTION_MODEL=openai/gpt-5.2


# * Storage Backend
# - MEESEEKS_STORAGE_DRIVER: 'json' (filesystem, default) or 'mongodb'
# - MEESEEKS_MONGODB_URI: MongoDB connection string (used when driver is 'mongodb')
# - MEESEEKS_MONGODB_DATABASE: MongoDB database name
MEESEEKS_STORAGE_DRIVER=json
# MEESEEKS_MONGODB_URI=mongodb://meeseeks:password@localhost:27017/meeseeks?authSource=admin
# MEESEEKS_MONGODB_DATABASE=meeseeks
# - MEWBO_STORAGE_DRIVER: 'json' (filesystem, default) or 'mongodb'
# - MEWBO_MONGODB_URI: MongoDB connection string (used when driver is 'mongodb')
# - MEWBO_MONGODB_DATABASE: MongoDB database name
MEWBO_STORAGE_DRIVER=json
# MEWBO_MONGODB_URI=mongodb://mewbo:password@localhost:27017/mewbo?authSource=admin
# MEWBO_MONGODB_DATABASE=mewbo


# * MCP Configuration (optional)
# - MESEEKS_MCP_CONFIG: Path to MCP servers JSON config for external tools
# - Manifests are auto-generated and cached under ~/.meeseeks when MESEEKS_MCP_CONFIG is set
# - Manifests are auto-generated and cached under ~/.mewbo when MESEEKS_MCP_CONFIG is set
# - See configs/mcp.example.json for a template
MESEEKS_MCP_CONFIG=./configs/mcp.example.json

Expand Down
12 changes: 6 additions & 6 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ updates:
include: "scope"

- package-ecosystem: "pip"
directory: "/packages/meeseeks_core"
directory: "/packages/mewbo_core"
schedule:
interval: "weekly"
day: "monday"
Expand All @@ -49,7 +49,7 @@ updates:
include: "scope"

- package-ecosystem: "pip"
directory: "/packages/meeseeks_tools"
directory: "/packages/mewbo_tools"
schedule:
interval: "weekly"
day: "monday"
Expand All @@ -73,7 +73,7 @@ updates:
include: "scope"

- package-ecosystem: "pip"
directory: "/apps/meeseeks_api"
directory: "/apps/mewbo_api"
schedule:
interval: "weekly"
day: "monday"
Expand All @@ -97,7 +97,7 @@ updates:
include: "scope"

- package-ecosystem: "npm"
directory: "/apps/meeseeks_console"
directory: "/apps/mewbo_console"
schedule:
interval: "weekly"
day: "monday"
Expand All @@ -121,7 +121,7 @@ updates:
include: "scope"

- package-ecosystem: "pip"
directory: "/apps/meeseeks_cli"
directory: "/apps/mewbo_cli"
schedule:
interval: "weekly"
day: "monday"
Expand All @@ -145,7 +145,7 @@ updates:
include: "scope"

- package-ecosystem: "pip"
directory: "/meeseeks_ha_conversation"
directory: "/mewbo_ha_conversation"
schedule:
interval: "weekly"
day: "monday"
Expand Down
2 changes: 1 addition & 1 deletion .github/git-commit-instructions.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Git Commit + PR Instructions (Meeseeks)
# Git Commit + PR Instructions (Mewbo)

Use this file for **every** commit and PR title/body in this repo. It codifies our Gitmoji + Conventional Commits rules and common pitfalls to avoid.

Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/console.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@ name: Console CI
on:
push:
paths:
- "apps/meeseeks_console/**"
- "apps/mewbo_console/**"
- ".github/workflows/console.yml"
pull_request:
paths:
- "apps/meeseeks_console/**"
- "apps/mewbo_console/**"
workflow_dispatch:

permissions:
contents: read

defaults:
run:
working-directory: apps/meeseeks_console
working-directory: apps/mewbo_console

jobs:
lint:
Expand All @@ -29,7 +29,7 @@ jobs:
with:
node-version: "20"
cache: "npm"
cache-dependency-path: apps/meeseeks_console/package-lock.json
cache-dependency-path: apps/mewbo_console/package-lock.json

- name: Install dependencies
run: npm ci
Expand All @@ -51,7 +51,7 @@ jobs:
with:
node-version: "20"
cache: "npm"
cache-dependency-path: apps/meeseeks_console/package-lock.json
cache-dependency-path: apps/mewbo_console/package-lock.json

- name: Install dependencies
run: npm ci
Expand All @@ -70,7 +70,7 @@ jobs:
with:
node-version: "20"
cache: "npm"
cache-dependency-path: apps/meeseeks_console/package-lock.json
cache-dependency-path: apps/mewbo_console/package-lock.json

- name: Install dependencies
run: npm ci
Expand All @@ -82,5 +82,5 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: console-dist
path: apps/meeseeks_console/dist
path: apps/mewbo_console/dist
retention-days: 7
6 changes: 3 additions & 3 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
run: |
.venv/bin/coverage run \
--data-file "${COVERAGE_FILE}" \
--source=meeseeks_core,meeseeks_tools,meeseeks_ha_conversation \
--source=mewbo_core,mewbo_tools,mewbo_ha_conversation \
-m pytest
.venv/bin/coverage report --data-file "${COVERAGE_FILE}" --skip-covered
.venv/bin/coverage xml --data-file "${COVERAGE_FILE}" -o coverage.xml
Expand All @@ -54,8 +54,8 @@ jobs:
run: |
.venv/bin/coverage xml \
--data-file "${COVERAGE_FILE}" \
--include "packages/meeseeks_core/src/meeseeks_core/*" \
--include "*/packages/meeseeks_core/src/meeseeks_core/*" \
--include "packages/mewbo_core/src/mewbo_core/*" \
--include "*/packages/mewbo_core/src/mewbo_core/*" \
-o coverage-core.xml

- name: Upload coverage artifact
Expand Down
20 changes: 10 additions & 10 deletions .github/workflows/docker-buildx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,33 +49,33 @@ jobs:
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "release_type=$RELEASE_TYPE" >> $GITHUB_OUTPUT

- name: Docker meta for meeseeks-base
- name: Docker meta for mewbo-base
id: meta_base
uses: docker/metadata-action@v5
with:
images: ghcr.io/bearlike/meeseeks-base
images: ghcr.io/bearlike/mewbo-base
tags: |
type=raw,value=${{ steps.extract_version.outputs.version }}${{ steps.extract_version.outputs.release_type == 'dev' && '-dev' || '' }}
type=raw,value=latest,enable=${{ steps.extract_version.outputs.release_type == 'latest' }}
type=raw,value=stable,enable=${{ steps.extract_version.outputs.release_type == 'stable' }}
type=raw,value=dev,enable=${{ steps.extract_version.outputs.release_type == 'dev' }}

- name: Docker meta for meeseeks-console
- name: Docker meta for mewbo-console
id: meta_console
uses: docker/metadata-action@v5
with:
images: ghcr.io/bearlike/meeseeks-console
images: ghcr.io/bearlike/mewbo-console
tags: |
type=raw,value=${{ steps.extract_version.outputs.version }}${{ steps.extract_version.outputs.release_type == 'dev' && '-dev' || '' }}
type=raw,value=latest,enable=${{ steps.extract_version.outputs.release_type == 'latest' }}
type=raw,value=stable,enable=${{ steps.extract_version.outputs.release_type == 'stable' }}
type=raw,value=dev,enable=${{ steps.extract_version.outputs.release_type == 'dev' }}

- name: Docker meta for meeseeks-api
- name: Docker meta for mewbo-api
id: meta_api
uses: docker/metadata-action@v5
with:
images: ghcr.io/bearlike/meeseeks-api
images: ghcr.io/bearlike/mewbo-api
tags: |
type=raw,value=${{ steps.extract_version.outputs.version }}${{ steps.extract_version.outputs.release_type == 'dev' && '-dev' || '' }}
type=raw,value=latest,enable=${{ steps.extract_version.outputs.release_type == 'latest' }}
Expand All @@ -96,7 +96,7 @@ jobs:
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push meeseeks-base
- name: Build and push mewbo-base
uses: docker/build-push-action@v5
with:
context: .
Expand All @@ -108,7 +108,7 @@ jobs:
build-args: |
VERSION=${{ steps.extract_version.outputs.version }}

- name: Build and push meeseeks-console
- name: Build and push mewbo-console
uses: docker/build-push-action@v5
with:
context: .
Expand All @@ -120,7 +120,7 @@ jobs:
build-args: |
VERSION=${{ steps.extract_version.outputs.version }}

- name: Build and push meeseeks-api
- name: Build and push mewbo-api
uses: docker/build-push-action@v5
with:
context: .
Expand All @@ -131,4 +131,4 @@ jobs:
labels: ${{ steps.meta_api.outputs.labels }}
build-args: |
VERSION=${{ steps.extract_version.outputs.version }}
BASE_IMAGE=ghcr.io/bearlike/meeseeks-base:${{ steps.extract_version.outputs.version }}${{ steps.extract_version.outputs.release_type == 'dev' && '-dev' || '' }}
BASE_IMAGE=ghcr.io/bearlike/mewbo-base:${{ steps.extract_version.outputs.version }}${{ steps.extract_version.outputs.release_type == 'dev' && '-dev' || '' }}
Loading
Loading