Commit Graph

38 Commits

Author SHA1 Message Date
7d7fe6df42 Task link MCP tools + anti-loop agent prompts
Tools: create_task_link, list_task_links, delete_task_link (23 total)
TrackerClient.request() made public for generic API calls
Agent prompts: anti-loop rules for agent-to-agent communication
2026-02-27 23:32:32 +01:00
007beaad92 Fix infinite loop: agents ignore messages from other agents
Unless explicitly @mentioned, agent skips messages where author_type=agent.
Prevents two agents replying to each other forever.
2026-02-27 23:07:31 +01:00
a3365848af Hot config update + systemd template
- Router handles config.updated WS event (model, provider, prompt)
- picogent@.service template: systemctl start picogent@coder
2026-02-27 16:32:32 +01:00
6871fdb443 Config split: agent.json (connection) + config.json (LLM)
- loadAgentConfig() reads both files with priority: env > config.json > agent.json
- Remote config merge from auth.ok (model, provider, prompt)
- Local config.json overrides remote values
- Transport default changed to 'ws'
2026-02-27 16:30:37 +01:00
1c7fdf8d77 Session compaction + project_id from WS events
Memory:
- compactSession(): LLM summarization via Haiku (cheap)
- needsCompaction(): checks if session file > 50K chars
- runCompaction(): summarize → append recent → truncate session

Router:
- Uses project_id from WS event data (injected by Tracker)
- Falls back to chat_id→project mapping
- Background compaction check after each message (non-blocking)
2026-02-27 14:21:43 +01:00
b2ef840c8e Phase 2: Agent memory — bootstrap context + memory persistence
New memory.ts module:
- loadBootstrapContext(): AGENT.md + agent.md + per-project context.md + recent.md
- appendRecent(): rolling window (20 entries) of agent activity
- summarizeToolLog(): extracts tool names from log

Router:
- Resolves projectId from chat_id via auth.ok mappings
- Passes projectId to agent for project-specific context loading
- Flushes memory after each message (appends to recent.md)

Agent:
- Accepts projectId option, passes to bootstrap loader
- Bootstrap now loads project-specific memory when available
2026-02-27 14:11:48 +01:00
4c7a41494a Collect and send tool_log with final message
Router collects tool calls (name + truncated result) during agent run.
Sends tool_log array with final chat.send via WS.
2026-02-27 11:55:19 +01:00
1322a0b480 UUID everywhere: MCP tools use project_id instead of project_slug
All tools (tasks, files, projects) now accept project_id (UUID).
TrackerClient methods renamed accordingly.
2026-02-27 09:37:21 +01:00
fc86592a73 Refine: system messages pass only if agent @mentioned (not blanket ignore) 2026-02-27 08:00:00 +01:00
f8d9a6a41d Fix: ignore system messages and own messages in router
System messages (task lifecycle) were being forwarded to agent as
new prompts, causing duplicate task creation. Agent also received
its own chat.send broadcasts back and processed them.
2026-02-27 07:31:14 +01:00
6dcae9a320 Phase 1: streaming via WS + thinking support
- Router streams text deltas via WS (agent.stream.delta)
- Router streams tool calls (agent.stream.tool)
- Auto-reply via WS chat.send (not REST)
- Thinking blocks collected and sent with final message
- WsClientTransport: sendStreamEvent + sendChatMessage with thinking
- Router receives WS transport reference via setWsTransport()
2026-02-27 06:56:44 +01:00
fe613a4bf2 feat: auto-reply — send agent text response if no send_message tool used 2026-02-25 13:31:32 +01:00
ccdf1f21de fix: remove author_slug from sendMessage, clean client 2026-02-25 11:10:49 +01:00
e4e604b049 feat: project files MCP tools — list, get, download, upload, update description, delete 2026-02-25 10:40:40 +01:00
5e60e34c3f refactor: обновление типов под UUID member refs
- tasks.ts: assignee_slug -> assignee_id в параметрах
- Обновлены описания и фильтры для использования UUID идентификаторов
- TrackerClient методы остались без изменений (пока)
2026-02-25 00:13:41 +01:00
195c2eb691 refactor: убрана защита от loop (Tracker фильтрует own messages) 2026-02-24 23:41:34 +01:00
c151a69de5 refactor: убрана фильтрация system messages (перенесена в Tracker) 2026-02-24 23:40:17 +01:00
e76e84ffc0 refactor: убрана ручная project.subscribe (Tracker auto-subscribes) 2026-02-24 23:24:55 +01:00
db90b64f54 feat: bootstrap context из AGENT.md и memory/ файлов
- loadBootstrapContext() загружает AGENT.md, memory/notes.md, memory/projects/*.md
- Лимит 15K символов, автотрункейт
- agentHome передаётся из router в agent options
- System prompt из agent.json сохранён как fallback
2026-02-24 22:04:29 +01:00
dea2bcaef6 feat: agent sandboxed to agentHome by default (allowedPaths) 2026-02-24 13:37:14 +01:00
4b3e4d6195 refactor: remove slug params from API calls — Tracker resolves actor from auth 2026-02-24 13:32:31 +01:00
fa9f280bdd feat: pass agent slug as actor in update_task 2026-02-24 13:26:41 +01:00
4b592f367a fix: agent receives system messages only when mentioned (@slug) 2026-02-24 12:30:31 +01:00
9d757709b2 fix: ignore system messages — agent only responds to humans/agents 2026-02-24 12:29:34 +01:00
cbe3f86890 refactor: router is pure relay — no replies, no side effects
Agent sees system messages from Tracker and acts via tools.
Router only forwards message.new events to agent session.
2026-02-24 12:11:49 +01:00
64eca81f5a refactor: router has zero side effects — agent controls everything via tools
Removed: auto in_progress, auto in_review, selfAssignedTasks tracking.
Router only forwards events to agent session and posts replies.
Agent decides status changes, task flow, etc. through MCP tools.
2026-02-24 11:57:19 +01:00
e58c39dc0c fix: skip auto-processing for self-assigned tasks (taken via tool call)
When agent takes a task via take_task tool in conversation, the
task.assigned event is now skipped (no duplicate in_progress→in_review).
2026-02-24 11:45:11 +01:00
9d897621a7 fix: session_id generated at agent load (not lazy) 2026-02-24 11:19:24 +01:00
a9b2d43f84 fix: lazy session_id — generated on first agent invocation, not at startup 2026-02-24 11:18:00 +01:00
cb618a195e feat: persistent session UUID in agent.json
- session_id auto-generated on first run, saved to agent.json
- Survives agent renames (slug changes don't break session history)
- Directory mode: agent works inside its folder (agentHome = workspace)
2026-02-24 10:45:48 +01:00
a89e9a1bb9 feat: offset param in list_messages tool (pagination) 2026-02-24 10:30:49 +01:00
a8f205609b fix: single session per agent instance
One agent = one session. Chat, tasks, tools — all share the same
context. Session ID: 'agent-{slug}' (stable across restarts).
2026-02-23 22:28:57 +01:00
b2a620185f fix: stable session IDs for chat/task context persistence
- Chat messages use 'chat-{chat_id}' session → conversation history preserved
- Task messages use 'task-{task_id}' session → task context preserved
- Previously every message created a new random session (no memory)
2026-02-23 22:25:57 +01:00
7dd39f65f6 feat: MCP-compatible tracker tools (Function Calling hybrid)
- 14 tools: tasks (7), steps (2), messages (2), projects (2), members (1)
- TypeBox schemas for parameter validation
- Injected via customTools into Pi Agent Core session
- Tools wrap TrackerClient REST methods
2026-02-23 21:51:02 +01:00
58f5ebca68 fix: restore file attachment stubs with proper TODO 2026-02-23 14:12:39 +01:00
f97aa64142 fix: align with AGENT-PROTOCOL v1.0 — correct WS types, heartbeat, REST auth 2026-02-23 13:57:32 +01:00
Eugene
368b9abf69 update 2026-02-23 15:48:14 +03:00
Eugene
0525cea647 init 2026-02-21 02:41:39 +03:00