Commit Graph

83 Commits

Author SHA1 Message Date
Henry dfb53409f3 fix(backend): retry SSH agentctl handshake rejection instead of failing the launch (#3511)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-09-08 22:26:48 +01:00
Clément Fiere d61e06a8b0 feat(queue): move automation toggles to session scope (#3465)
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-09-08 22:22:17 +01:00
Carlos Florêncio 3173c2b56a feat(sidebar): add automatic task color rules (#3180) 2026-09-06 17:18:09 +01:00
Henry f91fd4611e fix(backend): recover dynamic agent routes stuck in starting with no owner (#3362)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-09-04 17:42:52 +00:00
Carlos Florêncio 613b9a4eb9 fix: deduplicate empty workflow prompts (#3299) 2026-09-03 10:21:55 +00:00
Henry 63f47a692f fix(backend): stop office agents from spawning duplicate concurrent sessions (#3253)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-09-01 17:57:17 +00:00
Henry 83b125f690 fix(backend): repair office session race guard that could never trigger (#3228)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-31 23:30:57 +00:00
Carlos Florêncio 07da130284 fix(git): keep shared-environment status authoritative (#3173) 2026-08-31 10:18:03 +00:00
Henry c7de33b0bc fix(backend): stop a duplicate lifecycle turn from hiding a pending clarification (#2989)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-27 19:56:39 +00:00
Alassane 60140b83c6 fix(orchestrator): prevent terminal session revival on workflow re-entry (#2766)
Co-authored-by: ayattara <alassane.yattara@savoirfairelinux.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-27 10:49:18 +00:00
Henry d3d4d9d04e fix(office): require agents to explicitly signal before advancing the Work step (#2972)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-24 20:34:52 +00:00
Carlos Florêncio 832734bb67 docs: migrate legacy specs and add product context (#2964) 2026-08-24 11:09:03 +00:00
Henry 4c0d92154b feat(backend): add per-run cost/token ledger for task usage (#2960)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-23 22:15:19 +00:00
Alassane 0a45728753 fix: reuse task workspaces for additional sessions (#2843)
Co-authored-by: ayattara <alassane.yattara@savoirfairelinux.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-23 21:24:01 +00:00
Carlos Florêncio 94e7b0245f feat(routing): add dynamic agent profile routing (#2698) 2026-08-21 22:04:17 +01:00
Carlos Florêncio d99092e09c fix: add durable task launch failure recovery (#2832) 2026-08-21 16:39:47 +01:00
José Almeida 7e2c4ae84e fix: enforce active clarification lifecycle (#2669) 2026-08-17 11:14:12 +00:00
nova28 00994cf406 fix(office): preserve cache split, cost provenance, and turn_id on cost events (#2606)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-15 19:33:52 +01:00
nova28 fe991d0b77 feat: add task-level workflow step transition ledger (#2623)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-15 16:59:40 +01:00
Luan Martins 3653404be7 fix: clear stale sidebar queued prompt count (#2600) 2026-08-13 16:00:15 +01:00
Carlos Florêncio 10606d13a7 feat(mcp): inherit creator session runtime for new tasks (#2581) 2026-08-13 11:08:07 +01:00
nova28 47a878498b fix(backend): thread cached input tokens through the session usage rollup (#2521)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
2026-08-12 22:56:07 +01:00
nova28 2c6a9c287d feat(backend): count accepted step-completion signals (#2526)
Co-authored-by: nova28 <17953305+nova28@users.noreply.github.com>
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-12 17:12:56 +01:00
Carlos Florêncio 2832170eb4 fix(task): preserve task-owned worktrees across session deletion (#2456) 2026-08-09 12:05:48 +01:00
nova28 6b40d5b2ec feat(automation): make the automation the object, with its own runs destination (#2190)
Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
2026-08-06 11:18:59 +01:00
Carlos Florêncio ad70426d46 feat: rename generated task branches (#2262) 2026-08-05 18:23:57 +01:00
Carlos Florêncio 405ffb1d40 feat: configure workflow session settings (#2137) 2026-08-02 22:32:56 +01:00
Carlos Florêncio 484d5b148b feat: track inferred context compactions (#2162) 2026-08-02 17:25:55 +01:00
Carlos Florêncio 1a999f201a fix: resolve chat file links from task workspace root (#2127) 2026-08-01 14:46:57 +01:00
Clément Fiere 59d1cc7277 feat: add Slack-style unread divider to session transcript (#1922) 2026-07-31 14:42:14 +01:00
Luan Martins 04a5c4e4ee feat(github): add task PR lifecycle notifications (#2038) 2026-07-29 18:13:02 +01:00
Clément Fiere 62919efbdc fix: distinguish archived automation runs from cancelled ones (#1860) 2026-07-24 09:50:36 +01:00
Carlos Florêncio 73bf0fb028 fix: improve session failure recovery UX (#1866) 2026-07-23 20:02:20 +01:00
Clément Fiere 26c38b02e1 fix(backend): publish session state_changed when archiving cancels sessions (#1891) 2026-07-23 14:08:41 +01:00
Carlos Florêncio be56eff1a2 fix: reset office session state when execution profile changes (#1846) 2026-07-21 21:37:08 +01:00
José Almeida f7f1d10996 feat: add parent-controlled task stopping via MCP (#1803)
* feat: add parent-controlled task stopping via MCP

* fix: harden parent task stop lifecycle

* fix: preserve rejected task rollback state
2026-07-19 20:23:46 +01:00
Carlos Florêncio 9e484d7e89 feat: improve ACP model configuration summaries (#1723) 2026-07-17 18:47:59 +01:00
Carlos Florêncio 16da501fc4 feat(office): route agents through execution profiles (#1725) 2026-07-17 18:47:09 +01:00
João Salavisa 934b713ee9 feat(orchestrator): persist ACP session id in session metadata (#1748)
* feat(orchestrator): persist ACP session id in session metadata

storeResumeToken now mirrors the agent's ACP session id into the
session's durable acp metadata map after the CAS succeeds. Previously
the id only reached metadata when an agent emitted a session_info
frame, so most sessions could not be joined to their agent-CLI
transcripts once their executors_running row was pruned.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(orchestrator): make ACP session id mirror atomic and rotation-safe

Address review feedback on the metadata mirror: replace the
read-modify-write in persistACPSessionID with a single guarded UPDATE
(SetSessionACPSessionID). json_patch merges the session_id sub-key
atomically, preserving session_info keys, and the write is gated on
executors_running still holding the id as its resume token — so a
delayed event from a rotated execution can never overwrite the live
execution's id, and the session_info TOCTOU disappears along with the
unlogged GetTaskSession read.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 01:54:04 +01:00
João Salavisa 9381a6a9f7 feat(mcp): session spawning, sibling messaging, and renameable tabs (#1734)
* fix(scripts): launch dev-isolated backend via __backend subcommand

The kandev binary became a bundle launcher with the restart supervisor
(ADR 0019) and exits without KANDEV_BUNDLE_DIR when invoked bare; the
isolated dev instance must run the backend entrypoint directly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(mcp): session spawning, sibling messaging, and renameable tabs

- spawn_session_kandev spawns an additional agent session on an existing
  task (default: the caller's own) via LaunchSession(IntentStart), with
  optional agent_profile_id (defaults to the spawner's profile) and a
  session name; the initial prompt carries spawner attribution and reply
  instructions.
- message_task_kandev accepts an optional session_id to target a specific
  session, enabling same-task sibling messaging. Explicit targets are
  pinned through dispatch so the idle-path primary-session re-resolution
  cannot reroute a sibling message back to its sender (regression-tested).
- task_sessions gains a name column (migration ordered after the
  agent_execution_id-drop rebuild), a session.rename WS action, and inline
  tab rename UI; custom names take precedence over derived agent/model
  labels across the tab, agents dropdown, mobile list, chat header, and
  dockview panel titles.
- Inter-session messages stamp sender_session_name into metadata so the
  sender badge shows which session sent the message.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(mcp): address review findings on session spawn/rename/messaging

- include name in task-session DTOs (list + full, no omitempty) so
  persisted tab names survive list hydration and clears propagate
- sanitize sender task/session ids embedded in <kandev-system> blocks
- reject cross-workspace spawn targets; require sender_task_id
- truncate session names by runes, not bytes
- distinguish not-found from internal errors in message target lookup
- guard TabRenameInput blur-commit after Enter/Escape resolution
- cap optimistic rename length client-side and toast on rename failure
- add tests: spawn launch-failure and cross-workspace paths, renameSession
  API client

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(mcp): round-two review fixes for spawn/rename lint and hardening

- extract spawn validation/authorization helpers (cyclop/nestif limits)
- make stripSystemTag replace until stable to block nested tag evasion
- load session before rename so a durable rename can never skip its
  broadcast; surface lookup failures to the caller instead
- drop redundant sessionLauncher nil check (guarded registration)
- add maxLength to the rename input matching the server cap
- add tests: nested sanitizer evasion, spawn rename-failure tolerance

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 17:26:50 +01:00
Carlos Florêncio b1f0cbc022 fix: prune orphaned task worktree repositories (#1667) 2026-07-13 10:37:23 +01:00
Carlos Florêncio ff2647bf13 feat: add configurable branch names (#1615) 2026-07-09 19:59:29 +01:00
Carlos Florêncio b4824bd4c7 fix: preserve inherited task worktrees (#1621) 2026-07-08 17:11:50 +01:00
Carlos Florêncio 211e738ec0 fix: reuse worktrees for same-task handoffs (#1510) 2026-06-27 15:00:38 +01:00
Carlos Florêncio 991c7817ad fix: stop task runtimes from leaking (#1465) 2026-06-23 12:07:46 +01:00
Carlos Florêncio aee1846cd5 feat: remove nextjs production runtime (#1389) 2026-06-18 18:36:48 +01:00
Carlos Florêncio 327f7d4ec0 fix: persist agent error dismissal (#1397) 2026-06-16 22:27:28 +01:00
Carlos Florêncio a140c5817b fix: preserve recoverable agent errors (#1368) 2026-06-14 21:40:52 +01:00
Carlos Florêncio 1ba3f086d6 fix(web): update session tab title on model changes (#1335) 2026-06-11 22:27:06 +01:00
Nicolas Lenepveu 5d3ddff8b6 fix(task): reap active sessions when archiving a task (#1275) 2026-06-11 14:51:34 +01:00