Commit Graph

64 Commits

Author SHA1 Message Date
Carlos Florêncio ea751d3ecc feat: improve task creation (#220) 2026-02-13 17:26:38 +00:00
João Salavisa 11ac58d3e0 fix: resolve session stuck issues and workflow transition bugs (#206) 2026-02-12 23:34:16 +00:00
Carlos Florêncio adc50bcf19 fix: complete tool calls on turn end (#216) 2026-02-10 18:56:25 +00:00
Carlos Florêncio 69c411f1ad fix: cumulative diff poll 2026-02-08 14:39:40 +00:00
Carlos Florêncio a70de7da11 feat: local executor and worktree + new task dialog (#211) 2026-02-08 11:56:23 +00:00
João Salavisa b2f0e156db refactor: consolidate system prompts into sysprompt package (#166) 2026-02-03 21:40:15 +00:00
João Salavisa 510c2c56c4 feat: Improve task approval workflow and workflow templates (#141) 2026-02-01 22:12:28 +00:00
Carlos Florêncio c163b61b7d feat: all tasks page plus search (#140) 2026-02-01 19:07:52 +00:00
Carlos Florêncio dbe5d20771 feat: improve task deletion (#139) 2026-02-01 16:25:43 +00:00
Carlos Florêncio 122deb3b13 feat: add GitHub Copilot CLI and Sourcegraph Amp agent support (#130) 2026-02-01 00:40:56 +00:00
Carlos Florêncio 6d23d68633 feat: improve chat ui messages (#132) 2026-01-31 19:45:33 +00:00
João Salavisa 6eb24006f9 feat: implement task plans feature (#131) 2026-01-31 00:51:17 +00:00
Carlos Florêncio 3f7154e186 feat: chat messages normalized (#121) 2026-01-30 17:16:05 +00:00
João Salavisa 0f449dd01f feat: Add ask_user_question MCP tool for agent clarifications (#123) 2026-01-30 03:05:28 +00:00
João Salavisa 1888f8465f feat(backend): add thinking/reasoning streaming support (#113) 2026-01-28 17:22:19 +00:00
João Salavisa 743e0d8606 feat(workflow): improve approval flow and step transitions (#111) 2026-01-28 15:09:47 +00:00
João Salavisa 456bdcd307 fix: synchronous event bus dispatch with regression tests (#106) 2026-01-27 22:55:30 +00:00
João Salavisa 0b573bbdda feat(workflow): implement workflow system with steps terminology (#102) 2026-01-27 01:21:47 +00:00
Carlos Florêncio 47a02fd18e feat: git pull before worktree creation (#100) 2026-01-26 19:09:55 +00:00
Carlos Florêncio 859eb70908 feat: improve task switch + cli passthrough resume (#98) 2026-01-25 20:14:40 +00:00
João Salavisa 187d002717 feat: per-task executor selection with multi-runtime support (#92) 2026-01-25 02:05:19 +00:00
Carlos Florêncio 3b9abea3ca feat: gemini and opencode 2026-01-24 19:03:31 +00:00
João Salavisa 39b6e89244 feat: Git status tracking refactor with persistent snapshots and commit history (#86) 2026-01-24 00:41:43 +00:00
Carlos Florêncio cff2906712 feat: setup and cleanup script (#80)
fix setup

error messages

feat: codex error handling
2026-01-23 23:36:04 +00:00
João Salavisa 8426bcb6bb refactor: split monolithic sqlite.go into domain-specific files (#84) 2026-01-23 21:45:41 +00:00
Carlos Florêncio 290359f7f0 feat: backend improved comments, logs and agents.md (#77) 2026-01-22 21:18:27 +00:00
Carlos Florêncio 752e6b4655 feat: process runners (#71) 2026-01-22 16:39:13 +00:00
João Salavisa b1433a8d45 Clean up dead code and fix ACP session event payload (#73) 2026-01-22 02:39:45 +00:00
João Salavisa 89d7f10211 feat: add session turns with duration display and live timer (#72) 2026-01-21 23:35:29 +00:00
João Salavisa 8dd88e8c60 refactor: comprehensive code quality improvements (#69) 2026-01-21 19:49:36 +00:00
Carlos Florêncio 93251b48ce feat: mcp servers + executors (#60)
* feat: mcp servers

* feat: mcp executors

* feat: mcp per agent profile

* feat: improve side bar

* feat: add reactive executors crud
2026-01-21 01:13:20 +00:00
Carlos Florêncio 011009109c feat: custom branch prefix (#58)
* feat: custom branch prefix

* feat: improve ui
2026-01-20 23:15:08 +00:00
Carlos Florêncio 8b8f8ff20b feat: refactor main, add providers (#46)
* feat: add providers

* feat: further refactor internal packages
2026-01-19 21:26:29 +00:00
Carlos Florêncio e25913c697 feat: refactor sqlite usage (#44) 2026-01-19 20:00:20 +00:00
João Salavisa dd68da4275 refactor: unify permission requests into agent event stream (#31) 2026-01-17 22:21:10 +00:00
Carlos Florêncio fb042e4c59 feat: session refactor (#30) 2026-01-17 19:02:22 +00:00
João Salavisa 2e108b040f refactor: session resumption cleanup and AgentInstance → AgentExecution rename (#23)
* feat: session resumption with ACP session ID support

- Add useSessionResumption hook for automatic session recovery on page reload
- Fix ACPSessionID not being set on AgentInstance in Launch() and createInstance()
- Add task.session.status and task.session.resume WebSocket actions
- Fix shell terminal retry logic for resumed sessions
- Fix taskSessionState reading from Zustand store instead of local state
- Remove dead code: unused stream handling functions in lifecycle/manager.go
- Fix test mock interfaces (CleanupStaleInstanceByTaskID, NewManager signature)
- Add enhanced logging for session resumption debugging
- Simplify page-client.tsx state merging logic

* refactor: remove unused AgentController (dead code)

- Delete agent_controller.go - entirely unused duplicate of Manager methods
- Remove agentController field from Manager struct
- Remove AgentController initialization in NewManager

The AgentController duplicated StartAgentProcess, initializeACPSession, and
PromptAgent from Manager but was never called. All agent control operations
go through Manager's own methods.

* refactor: remove unused MemoryRepository (dead code)

- Delete memory.go - entire MemoryRepository implementation unused
  (replaced by SQLite repository)
- Delete memory_test.go - tests for removed MemoryRepository

Found via 'deadcode' tool analysis.

* refactor: consolidate agentctl packages into server/client structure

Reorganize the confusing dual agentctl packages:
- internal/agentctl/* → internal/agentctl/server/
- internal/agent/agentctl/* → internal/agentctl/client/

Structure is now:
  internal/agentctl/
  ├── client/      - HTTP client for talking to agentctl servers
  │   ├── client.go
  │   ├── standalone.go
  │   ├── acp.go
  │   └── launcher/
  ├── server/      - agentctl server implementation (runs in containers)
  │   ├── api/
  │   ├── adapter/
  │   ├── acp/
  │   ├── config/
  │   ├── instance/
  │   ├── process/
  │   └── shell/
  └── types/       - Shared types used by both client and server

Also consolidated shared types (GitStatusUpdate, FileInfo, etc.) from
process/types.go into the shared types/ package.

* refactor: rename AgentInstance to AgentExecution for clarity

Rename AgentInstance -> AgentExecution across the entire codebase to better
reflect what it represents: an agent actively working on a task, not just
a generic 'instance'.

Changes:
- AgentInstance struct -> AgentExecution
- InstanceStore -> ExecutionStore (new file: execution_store.go)
- RecoveredInstance -> RecoveredExecution
- All method names: GetInstance* -> GetExecution*, ListInstances -> ListExecutions, etc.
- All parameters: instanceID -> executionID
- All local variables: instance -> execution
- DTOs and JSON tags: agent_instance_id -> agent_execution_id
- Database columns: agent_instance_id -> agent_execution_id

Also consolidates duplicate prompt logic:
- Merge sendInitialPrompt and SendPrompt into single SendPrompt method
- Add validateStatus parameter to differentiate initial vs follow-up prompts

Also extracts ACP session management to session.go:
- Move initializeACPSession logic to SessionManager.InitializeAndPrompt
- Move PromptAgent logic to SessionManager.SendPrompt
- Manager now delegates to SessionManager for all prompt operations

Also removes duplicate event publishing:
- Remove 9 duplicate m.publish*() methods from manager.go
- Use existing EventPublisher methods via m.eventPublisher.Publish*()

Also extracts types to dedicated file:
- Move AgentExecution, LaunchRequest, PromptResult, etc. to types.go

Net reduction: ~600 lines removed from manager.go through deduplication
and better separation of concerns.

* fix(backend): Docker runtime now creates instance via ControlServer

The Docker runtime was incorrectly creating an agentctl.Client pointing
directly to port 9999 (the ControlServer port), then trying to call
instance-specific APIs like /api/v1/agent/configure which only exist
on per-instance servers.

Fixed by making Docker runtime follow the same flow as standalone mode:
- LaunchContainer now uses StandaloneCtl to create an instance via the
  control API, then creates Client pointing to the instance port
- RecoverInstances queries the ControlServer to get the instance port
- Added waitForHealth helper to wait for agentctl to be ready

Also improved HTTP error handling in agentctl client:
- All client methods now check HTTP status codes before JSON decoding
- Better error messages include status code and response body

* fix: restore session resumption imports and variables

* fix: add sessionId prop back to TaskLayout
2026-01-16 22:14:19 +00:00
Carlos Florêncio 2b38197b31 feat: improve onboarding and task setup (#21) 2026-01-16 15:51:26 +00:00
Carlos Florêncio 41bad65020 feat: task_session_worktrees 2026-01-16 01:59:00 +00:00
Carlos Florêncio 4560901d35 feat: flaky resume sessions 2026-01-15 23:40:20 +00:00
Carlos Florêncio 712610e428 feat: rename agent_sessions to task_sessions 2026-01-15 20:31:39 +00:00
Carlos Florêncio e1bce95bac feat: golang linter 2026-01-15 19:05:16 +00:00
Carlos Florêncio 7d0905b8cb feat: tasks refactor 2026-01-15 18:25:42 +00:00
Carlos Florêncio 004fb20618 feat: chat improved renderer and comments pagination 2026-01-15 02:23:09 +00:00
João Salavisa 7e90883a30 chore: Remove dead code and consolidate agentctl modes (#17) 2026-01-15 00:01:13 +00:00
João Salavisa af7fb84a53 fix: address code review issues (#16) 2026-01-14 23:12:12 +00:00
João Salavisa 82e8c8905b feat: replace agent_type with agent_profile_id (#14)
* feat: replace agent_type with agent_profile_id

- Replace agent_type field with agent_profile_id across backend and frontend
- Add ProfileResolver interface and StoreProfileResolver implementation
- Update task creation/update to use agent_profile_id
- Change default agent runtime from docker to standalone
- Fix workspace state types to include all required fields
- Fix websocket handlers type mismatches for environments, executors, workspaces
- Update integration tests to use agent_profile_id

* feat: pass model as CLI argument to agents

- Add ModelFlag field to AgentTypeConfig for specifying the CLI flag
- Set ModelFlag to '--model' for all agents (auggie, claude, codex, gemini, opencode, copilot)
- Update launchStandalone to append model flag to agent command
- Update launchDocker/buildContainerConfig to append model flag to container command
- Model is passed when both agent supports ModelFlag and profile has Model configured

* fix: make WebSocket message handling async to prevent blocking

When a long-running handler like orchestrator.prompt was executing,
it blocked the ReadPump loop, preventing other requests (like
workspace.tree.get) from being processed until the handler completed.

Now each message is handled in its own goroutine, allowing concurrent
message handling so file tree requests work while the agent is working.

* feat: show task description as first message in chat

- Add 'Task' label with distinct styling (lighter background, border)
- Pass taskDescription from page to TaskChatPanel component
- Differentiate from regular user messages visually
2026-01-14 12:29:58 +00:00
Carlos Florêncio 9e04b75ddf feat: data fetching refactor ssr -> ws updates 2026-01-14 01:42:12 +00:00
Carlos Florêncio 6c50fef6fa feat: add defaults to workspace: env, executor, agent 2026-01-13 23:37:46 +00:00
Carlos Florêncio aed307d9b8 feat: simplify task creation 2026-01-13 22:41:52 +00:00