1f57f869ba
Task search: q param in list_tasks (number + title ilike)
Deploy Tracker / deploy (push) Failing after 3s
2026-02-28 00:26:52 +01:00
a4ac2a6471
Subtasks: load subtasks + parent in task_out
...
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)
...
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
...
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)
...
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
Deploy Tracker / deploy (push) Failing after 5s
2026-02-27 22:55:00 +01:00
4dde7b940a
config.updated WS event + provider in AgentConfig update
...
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
...
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
...
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
...
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)
...
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)
...
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
...
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)
...
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
...
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)
...
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
...
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
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
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
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
Deploy Tracker / deploy (push) Failing after 4s
2026-02-26 15:16:10 +01:00
21199dd4e3
Fix #15 : Remove empty services/ directory
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)
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
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
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)
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)
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
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
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)
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)
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
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
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
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
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
Deploy Tracker / deploy (push) Failing after 5s
2026-02-26 15:11:47 +01:00
c7b073b36c
Switch all imports to relative paths
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, убраны сломанные алиасы
Deploy Tracker / deploy (push) Failing after 3s
2026-02-25 16:15:08 +01:00
d0c0c87120
типизация: единые схемы везде, убраны ручные dict-ы из broadcasts, удалён дублирующий schemas.py
Deploy Tracker / deploy (push) Failing after 3s
2026-02-25 14:14:29 +01:00
be5fc6e99e
Унифицированная типизация данных через Pydantic схемы
...
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
...
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
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
Deploy Tracker / deploy (push) Failing after 4s
2026-02-25 12:21:29 +01:00
9bf66a88b2
fix: system messages author=None (actor tracked in task_actions, not message author)
Deploy Tracker / deploy (push) Failing after 3s
2026-02-25 12:04:19 +01:00
0840e38849
enforce: auth required on ALL API endpoints except login
Deploy Tracker / deploy (push) Failing after 4s
2026-02-25 11:24:01 +01:00
8b993abc37
fix: support ?token= query param for auth (downloads from browser)
Deploy Tracker / deploy (push) Failing after 4s
2026-02-25 11:16:10 +01:00
d2402dc213
fix: ProjectMember unique constraint, task flush before action, clean models
Deploy Tracker / deploy (push) Failing after 4s
2026-02-25 11:10:48 +01:00
aedbe583c8
fix: flush task before recording action (task_id was None)
Deploy Tracker / deploy (push) Failing after 4s
2026-02-25 11:05:40 +01:00
39dde0e2d8
fix: consistent delete response format
Deploy Tracker / deploy (push) Failing after 4s
2026-02-25 10:37:47 +01:00
cd2ffd78ac
Fix duplicate volume mount in docker-compose.yml
Deploy Tracker / deploy (push) Failing after 9s
2026-02-25 09:20:32 +01:00