Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
1e6ff44
✨ feat(api): pass through orchestration mode
bearlike Feb 10, 2026
5c6af54
✨ feat(api): add notifications, attachments, and share endpoints
bearlike Feb 11, 2026
37b75fd
🐛 fix(core): emit completion errors
bearlike Feb 11, 2026
1bc0916
🧪 test(api): assert auto-approve
bearlike Feb 11, 2026
8fa7570
♻️ refactor(api): centralize notification helpers
bearlike Feb 11, 2026
1cf75e8
🔧 chore(api): resolve ruff/mypy errors
bearlike Feb 11, 2026
c9b6769
🐛 fix(api): define NotificationService before use
bearlike Feb 11, 2026
882cadc
🐛 fix(orchestration): surface reflection failures
bearlike Feb 11, 2026
1bec522
🐛 fix(orchestration): propagate reflection failures
bearlike Feb 11, 2026
0429ec5
🐛 fix(planning): keep DeepWiki tools in intent filter
bearlike Feb 11, 2026
d0f3de6
Revert "🐛 fix(planning): keep DeepWiki tools in intent filter"
bearlike Feb 11, 2026
973e9d3
⬆️ Bump cryptography from 46.0.4 to 46.0.5 in the uv group across 1 d…
dependabot[bot] Feb 11, 2026
63e74c9
⬆️(deps): Update langchain-litellm requirement from <0.5.0,>=0.4.0 to…
dependabot[bot] Feb 11, 2026
fb42138
✨ feat(orchestration): simplify plan schema and execution flow
bearlike Feb 11, 2026
f8dfc38
💄 style(core): apply formatter updates
bearlike Feb 11, 2026
efe321d
✨ feat(core): add per-session log files
bearlike Feb 11, 2026
aaae64c
🐛 fix(orchestration): retain tool output on reflection
bearlike Feb 11, 2026
e68e65b
🧪 test(planning): cover web_url_read selection
bearlike Feb 11, 2026
cb0ccfa
🧪 test(orchestration): align failure response
bearlike Feb 11, 2026
9a89220
♻️ refactor(core): replace action fields with tool fields
bearlike Feb 11, 2026
d67ee50
💄 style(core): apply formatter output
bearlike Feb 11, 2026
0b19335
♻️ refactor(orchestration): drop unused action step helper
bearlike Feb 11, 2026
d459c19
📝 docs(repo): refresh docs and agents
bearlike Feb 11, 2026
2e5f25e
🏗️ build(version): reset versioning to 0.0.6
bearlike Feb 11, 2026
6c01106
🏗️ build(version): bump workspace to 0.0.7
bearlike Feb 11, 2026
97082cf
🔧 chore(codecov): make coverage checks informational
bearlike Feb 11, 2026
57f98fe
🧪 test(coverage): close patch gaps
bearlike Feb 11, 2026
e7e709e
🧹 chore(lint): fix test warnings
bearlike Feb 11, 2026
ed4460c
🧹 chore(lint): sort imports
bearlike Feb 11, 2026
27c95f4
🔧 chore(ci): add uv lock refresh workflow
bearlike Feb 11, 2026
32c0e7d
🔧 chore(uv): refresh lockfile
bearlike Feb 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
# * Meeseeks 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=2.1.0-alpha
VERSION=0.0.7
ENVMODE=dev
LOG_LEVEL=DEBUG
CACHE_DIR='/path/to/cache/directory'
Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/uv-lock-refresh.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Refresh uv.lock

on:
schedule:
- cron: "0 4 * * 1"
workflow_dispatch:
push:
paths:
- "pyproject.toml"
- "**/pyproject.toml"
- "uv.lock"

jobs:
refresh-lock:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Update lockfile
run: uv lock
- name: Create pull request
uses: peter-evans/create-pull-request@v8
with:
branch: chore/uv-lock-refresh
delete-branch: true
title: "chore(uv): refresh lockfile"
commit-message: "chore(uv): refresh lockfile"
body: |
- Automated uv.lock refresh.
- Runs `uv lock` at repo root.
16 changes: 13 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ https://github.com/user-attachments/assets/78754e8f-828a-4c54-9e97-29cbeacbc3bc

# Intro

Meeseeks is an AI task agent assistant built on a plan-act-observe orchestration loop. It breaks a request into steps, runs tools, and synthesizes a final reply. It keeps a session transcript, compacts long histories, and stores summaries for continuity across longer conversations.
Meeseeks is an AI task agent assistant built on a plan → tool selection → step execution loop. It breaks a request into steps, chooses tools per step, runs them, and synthesizes a final reply. It keeps a session transcript, compacts long histories, and stores summaries for continuity across longer conversations.

<details>
<summary><i>Legends (Expand to View) </i></summary>
Expand Down Expand Up @@ -61,8 +61,9 @@ We are upgrading the API backend to better support a task-orchestration frontend
</table>

## Core workflow
- (✅) **Plan → act → observe loop:** Builds a short action plan, executes tools, and replans when needed.
- (✅) **Step-level reflection:** Validates tool outcomes and adjusts step arguments when required.
- (✅) **Plan → select tools → execute:** Builds a short plan, chooses the right tools per step, and executes them.
- (✅) **Step-level reflection:** Validates tool outcomes and adjusts tool inputs when required.
- (✅) **Plan updates:** Emits updated action plans after each step so UIs can refresh the to‑do list.
- (✅) **Synthesized replies:** Produces a final answer after tool results are collected and summarized.

## Memory and context management
Expand Down Expand Up @@ -101,6 +102,7 @@ Optional features that can be installed when needed.
- **Inline approvals.** Rich-based approval prompts render with padded, dotted borders and clear after input.
- **Unified experience.** Web, API, Home Assistant, and CLI interfaces share the same core engine to reduce duplicated maintenance.
- **Shared session runtime.** The API exposes polling endpoints; the CLI runs the same runtime in-process for sync execution, cancellation, and summaries.
- **Event payloads.** `action_plan` steps are `{title, description}`; `tool_result`/`permission` use `tool_id`, `operation`, and `tool_input`.

## Monorepo layout

Expand Down Expand Up @@ -134,6 +136,10 @@ flowchart LR
subgraph Core["Core Orchestration\n(packages/meeseeks_core)"]
TaskMaster["orchestrate_session\n(task_master.py)"]
Orchestrator["Orchestrator\n(orchestrator.py)"]
Planner["Planner\n(planning.py)"]
ToolSelector["ToolSelector\n(planning.py)"]
StepExecutor["StepExecutor\n(planning.py)"]
PlanUpdater["PlanUpdater\n(planning.py)"]
ActionPlanRunner["ActionPlanRunner\n(action_runner.py)"]
ContextBuilder["ContextBuilder\n(context.py)"]
ActionStep["ActionStep\n(classes.py)"]
Expand Down Expand Up @@ -176,6 +182,10 @@ flowchart LR
SessionRuntime --> RunRegistry

TaskMaster --> Orchestrator
Orchestrator --> Planner
Orchestrator --> ToolSelector
Orchestrator --> StepExecutor
Orchestrator --> PlanUpdater
Orchestrator --> ActionPlanRunner
Orchestrator --> ContextBuilder
Orchestrator --> ToolRegistry
Expand Down
9 changes: 5 additions & 4 deletions agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ Meeseeks is a multi-agent LLM personal assistant that decomposes user requests i

## Core entry points
- `packages/meeseeks_core/src/meeseeks_core/task_master.py`: action planning + task execution loop
- `packages/meeseeks_core/src/meeseeks_core/classes.py`: `ActionStep`, `TaskQueue`, `AbstractTool` contracts
- `packages/meeseeks_core/src/meeseeks_core/classes.py`: `ActionStep` (tool_id/operation/tool_input), `TaskQueue`, `AbstractTool` contracts
- `packages/meeseeks_core/src/meeseeks_core/planning.py`: `Planner`, `ToolSelector`, `StepExecutor`, `PlanUpdater`
- `packages/meeseeks_core/src/meeseeks_core/session_runtime.py`: session lifecycle, listing, archiving, and async runs
- `packages/meeseeks_core/src/meeseeks_core/session_store.py`: transcript storage, tags, and archive state
- `packages/meeseeks_tools/src/meeseeks_tools/`: tool implementations and integration glue
Expand All @@ -32,7 +33,7 @@ When you need external context (other repos, CI failures, specs, APIs), prefer M
## Engineering principles (project-specific)
- KISS and DRY: prefer small, obvious changes; remove redundancy instead of adding layers.
- KRY: keep requirements and acceptance criteria in view; do not drift.
- Keep tool contracts stable (`AbstractTool`, `ActionStep`, `TaskQueue`).
- Keep tool contracts stable (`AbstractTool`, `ActionStep`, `TaskQueue`) and the tool field names (`tool_id`, `operation`, `tool_input`).
- Favor composition and reuse across interfaces; avoid duplicating core logic.
- Add or improve tests for non-trivial behavior; expand coverage when touching core logic or tools.
- Use Gitmoji + Conventional Commit format (e.g., `✨ feat: add session summary pass-through`).
Expand All @@ -44,7 +45,7 @@ When you need external context (other repos, CI failures, specs, APIs), prefer M
## Orchestration insights (transferable)
- Separate tool execution from user-facing response: synthesize after tool results, don't dump raw tool output.
- Keep the loop explicit: plan -> act -> observe -> decide; re-plan only when needed.
- Make tool inputs schema-aware; prefer structured arguments for MCP tools.
- Make tool inputs schema-aware; prefer structured `tool_input` for MCP tools.
- Surface tool activity clearly (permissions, tool IDs, arguments) to reduce user confusion.

## Testing patterns (what worked)
Expand All @@ -64,7 +65,7 @@ When you need external context (other repos, CI failures, specs, APIs), prefer M
## Linting & formatting
- Primary linting uses `ruff` (root + subpackages). Auto-fix with `.venv/bin/ruff check --fix .`.
- Type checking uses `mypy`. Run from repo root after installing with `uv`.
- `flake8`, `pylint`, and `autopep8` are still available as dev tools (legacy or ad‑hoc use).
- `flake8`, `pylint`, and `autopep8` are still available as dev tools (optional/ad‑hoc use).
- Helper targets: `make lint`, `make lint-fix`, and `make typecheck`.
- Pre-commit hooks are defined in `.pre-commit-config.yaml` (install with `make precommit-install`).

Expand Down
11 changes: 10 additions & 1 deletion apps/meeseeks_api/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,20 @@ Scope: this file applies to the `apps/meeseeks_api/` package. It captures runtim
- `GET /api/sessions` list sessions
- `POST /api/sessions/{session_id}/query` enqueue run or core command
- `GET /api/sessions/{session_id}/events?after=...` poll events
- `POST /api/query` legacy synchronous endpoint
- `POST /api/query` synchronous endpoint (simple/CLI-compatible)
- `GET /api/tools` list tool registry entries
- `GET /api/notifications` list notifications
- `POST /api/notifications/dismiss` dismiss notifications
- `POST /api/notifications/clear` clear notifications
- `POST /api/sessions/{session_id}/attachments` upload attachments
- `POST /api/sessions/{session_id}/share` create share link
- `POST /api/sessions/{session_id}/export` export session payload
- `GET /api/share/{token}` fetch shared session data
- Auth: requires `X-API-KEY` header. Token defaults to `api.master_token` from `configs/app.json` (default: `msk-strong-password`).
- Orchestration: uses `meeseeks_core.session_runtime.SessionRuntime` to run sync/async sessions.
- Core commands: `/compact`, `/status`, `/terminate` (shared runtime).
- Sessions: supports `session_id`, `session_tag`, and `fork_from` (tag or id). Tags are resolved via `SessionStore`.
- Event payloads: `action_plan` steps are `{title, description}`; tool events use `tool_id`, `operation`, `tool_input`.

## Hidden dependencies / assumptions
- Uses core logging (`meeseeks_core.common.get_logger`); log level controlled by `runtime.log_level`.
Expand Down
16 changes: 12 additions & 4 deletions apps/meeseeks_api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
<a href="https://github.com/bearlike/Assistant/releases"><img src="https://img.shields.io/github/v/release/bearlike/Assistant?style=for-the-badge&" alt="GitHub Release"></a>
</p>

- REST API Engine wrapped around the meeseeks-core.
- No components are explicitly tested for safety or security. Use with caution in a production environment.
- For full setup and configuration, see `docs/getting-started.md`.
- REST API engine wrapped around meeseeks-core.
- No components are explicitly tested for safety or security. Use with caution in production.
- For setup and configuration, see `docs/getting-started.md`.

## Run
```bash
Expand All @@ -21,6 +21,14 @@ uv run meeseeks-api
- `GET /api/sessions/{session_id}/events?after=...` poll events
- `POST /api/sessions/{session_id}/archive` archive a session
- `DELETE /api/sessions/{session_id}/archive` unarchive a session
- `POST /api/query` legacy synchronous endpoint
- `POST /api/query` synchronous endpoint (simple/CLI-compatible)
- `GET /api/tools` list tool registry entries
- `GET /api/notifications` list notifications
- `POST /api/notifications/dismiss` dismiss notifications
- `POST /api/notifications/clear` clear notifications
- `POST /api/sessions/{session_id}/attachments` upload attachments
- `POST /api/sessions/{session_id}/share` create share link
- `POST /api/sessions/{session_id}/export` export session payload
- `GET /api/share/{token}` fetch shared session data

[Link to GitHub Repository](https://github.com/bearlike/Assistant)
6 changes: 3 additions & 3 deletions apps/meeseeks_api/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "meeseeks-api"
version = "2.1.0-alpha"
version = "0.0.7"
description = "REST API Engine wrapped around the Meeseeks core."
readme = "../../README.md"
requires-python = ">=3.10,<4.0"
Expand All @@ -10,8 +10,8 @@ authors = [
license = { text = "MIT" }

dependencies = [
"meeseeks-core>=2.1.0-alpha",
"meeseeks-tools>=2.1.0-alpha",
"meeseeks-core>=0.0.7",
"meeseeks-tools>=0.0.7",
"flask>=3.0.3,<4.0.0",
"flask-restx>=1.3.0,<2.0.0",
]
Expand Down
Loading