Commit Graph

102 Commits

Author SHA1 Message Date
64a1223c1d chore: remove old test compose
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-03-14 10:28:11 +01:00
bb3c34d4fa feat: docker-compose.test.yml for isolated test DB
Some checks failed
Deploy Tracker / deploy (push) Failing after 5s
2026-03-14 10:21:31 +01:00
e5ce44e438 feat: slug change + streaming fix + specs
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-03-13 22:55:52 +01:00
f7622e13d5 UUID refactoring: remove slug from JWT, mentions stored as IDs, WS filtering by member_id only
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-03-02 09:02:53 +01:00
5030c06d76 Add project.created broadcast, debug log for bridge message delivery
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-02-28 18:31:53 +01:00
c1fd50f28c Labels on AgentConfig + auto-assign by labels
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
- AgentConfig.labels ARRAY(String) field
- Auto-assign matches task labels ↔ agent labels (not capabilities)
- labels in AgentConfigOut, auth.ok, config.updated
2026-02-28 00:47:09 +01:00
009789ad8b Global labels: remove project_id, endpoints at /labels
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
Labels are now app-wide, not project-scoped.
GET/POST /labels, PATCH/DELETE /labels/{id}
2026-02-28 00:42:03 +01:00
1f57f869ba Task search: q param in list_tasks (number + title ilike)
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-02-28 00:26:52 +01:00
a4ac2a6471 Subtasks: load subtasks + parent in task_out
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
- selectinload(Task.subtasks), joinedload(Task.parent) in _get_task + list_tasks
- SubtaskBrief schema: id, key, title, status, assignee
- TaskOut: subtasks list, parent_key, parent_title
- .unique() for joinedload dedup
2026-02-28 00:03:08 +01:00
502b55b5a9 Auto-assign as project option (default off)
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
- Project.auto_assign boolean field (default False)
- create_task only auto-assigns if project.auto_assign=True
- PATCH /projects/{id} accepts auto_assign
- ProjectOut includes auto_assign
2026-02-27 23:55:56 +01:00
93cdd38b96 Labels, auto-assign, subscription modes, init handshake
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
- Label + TaskLabel models (project-scoped labels with colors)
- Labels API: CRUD for labels + task-label associations
- TaskLinkType.ASSIGNED subscription mode
- Auto-assign: task labels matched against agent capabilities
- auth.ok: includes assigned_tasks for agents
- ListenMode.ASSIGNED added to enums
2026-02-27 23:45:43 +01:00
a65987a724 Task dependencies (Jira-style links)
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
- TaskLink model: source_id, target_id, link_type (blocks|depends_on|relates_to)
- TaskLinkType enum in enums.py
- API: POST/GET/DELETE /tasks/{id}/links
- GET returns both outgoing and incoming links with reverse types (blocked_by, required_by)
2026-02-27 23:32:27 +01:00
0aab543826 Add architect agent to seed
Some checks failed
Deploy Tracker / deploy (push) Failing after 5s
2026-02-27 22:55:00 +01:00
4dde7b940a config.updated WS event + provider in AgentConfig update
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
- PATCH /members/{id} sends config.updated WS event to agent
- WSEventType.CONFIG_UPDATED added to enums
- update_member handles provider + max_concurrent_tasks
2026-02-27 16:32:27 +01:00
80494c5058 Agent config in auth.ok + provider/max_concurrent_tasks in AgentConfig
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
- auth.ok now includes agent_config for agent members
- AgentConfig model: added provider, max_concurrent_tasks columns
- Fixed project_id injection in WS handler (syntax error)
- capabilities read from AgentConfig, not Member
2026-02-27 16:30:32 +01:00
d953cb73ab Inject project_id into all WS broadcast data
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
- broadcast_message: injects project_id into message dict
- broadcast_task_event: injects project_id into task data
- chat.send handler: resolves project_id from chat or task
- _system_message: adds project_id to both task and chat broadcasts

Agents always know which project a message belongs to.
2026-02-27 14:21:36 +01:00
ff6b32316c Tool log: persist agent tool calls in messages
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
- Message model: tool_log JSON column (array of {name, args, result, error})
- chat.send WS handler accepts tool_log
- MessageOut schema includes tool_log
- Converters pass tool_log through
2026-02-27 11:55:14 +01:00
f07bbfe6fc Auto-create AgentConfig for all agents (not just when explicitly passed)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
Prevents silent fallback to chat_listen=ALL when config is missing.
2026-02-27 11:10:40 +01:00
d6ebb56004 Fix: seed creates AgentConfig for coder (chat_listen/task_listen defaults)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
Without AgentConfig, handler.py defaulted to chat_listen=ALL,
ignoring UI settings which were lost on DB recreation.
2026-02-27 10:16:33 +01:00
6069a2da1f UUID everywhere: all API URLs use ID instead of slug
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
- /projects/{project_id} instead of /projects/{slug}
- /members/{member_id} instead of /members/{slug}
- /projects/{project_id}/files/* instead of /projects/{slug}/files/*
- /projects/{project_id}/members/* instead of /projects/{slug}/members/*
- create_task: ?project_id= instead of ?project_slug=
- list_tasks: removed project_slug filter (use project_id)
- addProjectMember: accepts member_id in body
- Heartbeat timeout: lookup by Member.id
- Slug remains only for: display, uniqueness check, login form
2026-02-27 09:37:16 +01:00
b8e836fd07 UUID as primary identifier everywhere (replace slug-based routing)
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
WS Manager:
- member_sessions keyed by member_id (UUID), not slug
- broadcast_message: author_id instead of author_slug
- broadcast_all: exclude_member_id instead of exclude_slug
- mention filtering by member_id from MemberBrief objects

WS Handler:
- All DB lookups by Member.id (UUID), not slug
- auth.ok includes member_id + online as [{id, slug}]
- agent.status events include id + slug
- Bridge on_behalf_of by UUID

API callers (messages, members, tasks):
- All broadcast calls use author_id/exclude_member_id
2026-02-27 09:20:19 +01:00
5642f53e11 Structured system messages: actor + mentions as objects
Some checks failed
Deploy Tracker / deploy (push) Failing after 5s
- Message model: added actor_id FK (who initiated the action)
- MessageOut: mentions as MemberBrief[], actor as MemberBrief
- _system_message: accepts mentioned_members list, stores actor_id
- WS filtering: checks mentions array (not just text content)
- broadcast_message: handles both string and dict mentions
2026-02-27 08:33:39 +01:00
f20da3685d Fix: task system messages use broadcast_message (not broadcast_all)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
broadcast_all bypasses agent filtering (system message @mention check),
so agents received ALL task lifecycle messages and processed them as
new requests, causing duplicate task creation.
2026-02-27 07:59:53 +01:00
c2c595224c Phase 1: agent streaming WS events + thinking field in messages
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
- New WS events: agent.stream.start/delta/tool/end
- Tracker relays agent stream events to project subscribers
- Message model: added 'thinking' column (nullable text)
- MessageCreate, MessageOut, converters: thinking support
- chat.send WS handler: accepts thinking field
- broadcast_message: custom event_type parameter
2026-02-27 06:55:36 +01:00
0c44a8b384 Fix #4 hotfix: restore missing router = APIRouter in steps.py
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-02-26 15:17:35 +01:00
73c4ace9e9 Fix #18: Add comment explaining token query param in download_project_file
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:16:50 +01:00
b6f12c2a56 Fix #17: Add comment explaining token query param in download_attachment
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:16:42 +01:00
19bb797856 Fix #16: Use explicit 'online' key in auth_ok instead of StrEnum value
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:16:10 +01:00
21199dd4e3 Fix #15: Remove empty services/ directory
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:15:58 +01:00
e842149a23 Fix #14: broadcast_message excludes by session_id, not slug (multi-tab support)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:15:50 +01:00
8a54a2d609 Fix #13: Basic RBAC — only owners can delete projects and members
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:15:25 +01:00
7360c79eeb Fix #12: Remove duplicate _to_member_out, use converters.member_out
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:15:00 +01:00
872699647f Fix #11: Remove dead config (redis, authentik, gitea, agent_max_restarts)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:14:29 +01:00
b930ca1155 Fix #10: list_tasks API now accepts project_slug query param (used by Picogent)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:14:17 +01:00
5dfd83c28f Fix #9: Validate sender exists and is active in WS chat.send
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:13:59 +01:00
607f822b4e Fix #8: Remove author_type/author_id from MessageCreate — always resolve from auth
Some checks failed
Deploy Tracker / deploy (push) Failing after 5s
2026-02-26 15:13:50 +01:00
7233d3f507 Fix #7: Implement update_my_status endpoint (was TODO stub)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:13:31 +01:00
3228b4c290 Fix #6: Remove useless _record_action in delete_task (CASCADE deletes it)
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:13:10 +01:00
901f54f790 Fix #5: reject_task now uses _system_message for proper WS broadcast
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:13:00 +01:00
05b56dbdae Fix #4: Remove duplicate step_out and import in steps.py
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:12:46 +01:00
b67587b647 Fix #3: Avoid detached SQLAlchemy objects in middleware — store member_id, re-fetch in endpoints
Some checks failed
Deploy Tracker / deploy (push) Failing after 5s
2026-02-26 15:12:36 +01:00
dc6556074e Fix #2: Use broadcast_all for task system messages instead of broadcast_task_event
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:11:59 +01:00
5e3ec5e7c5 Fix #1: SELECT FOR UPDATE on task_counter to prevent race condition
Some checks failed
Deploy Tracker / deploy (push) Failing after 5s
2026-02-26 15:11:47 +01:00
c7b073b36c Switch all imports to relative paths
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-02-26 10:46:09 +01:00
659454c2e6 fix: _to_message_out → message_out, _to_step_out → step_out, убраны сломанные алиасы
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-02-25 16:15:08 +01:00
d0c0c87120 типизация: единые схемы везде, убраны ручные dict-ы из broadcasts, удалён дублирующий schemas.py
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-02-25 14:14:29 +01:00
be5fc6e99e Унифицированная типизация данных через Pydantic схемы
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
- Добавлен schemas.py с едиными моделями для API и WS
- Заменены ручные dict-ы на helper функции во всех endpoints
- Обновлены WS broadcasts для использования тех же схем
- Все передаваемые данные теперь строго типизированы
2026-02-25 14:08:33 +01:00
67eecc079f Строгая типизация: единые Pydantic-схемы и конвертеры для REST/WS
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
- Добавлен api/schemas.py с MemberBrief, MemberOut, TaskOut, MessageOut, StepOut, ProjectFileOut, AttachmentOut
- Добавлен api/converters.py — единые ORM→Pydantic конвертеры
- Все REST endpoints используют response_model из schemas
- Все WS broadcasts используют .model_dump() вместо ручных dict-ов
- Удалены дублирующие локальные схемы из каждого модуля
2026-02-25 14:03:31 +01:00
a4fcfe91b3 fix: unified message format (author object), CASCADE delete tasks, author_id nullable
Some checks failed
Deploy Tracker / deploy (push) Failing after 3s
2026-02-25 13:56:15 +01:00
2e36b26b05 security: path traversal fix, bcrypt passwords, OPTIONS preflight skip
Some checks failed
Deploy Tracker / deploy (push) Failing after 4s
2026-02-25 12:21:29 +01:00