Commit Graph

1159 Commits

Author SHA1 Message Date
Carlos Florêncio e077658a61 refactor: centralize runtime feature flag bindings (#2142) 2026-08-02 15:36:21 +01:00
João Manso 443e9c89cc fix(agentctl): abandon instance creation when the caller has gone (#2149) 2026-08-02 14:39:40 +01:00
João Manso 46a35704ec fix(agentctl): demote unwatched workspace trackers to slow polling (#2113) 2026-08-02 14:37:50 +01:00
Carlos Florêncio 190eeddbc4 fix: default new workspaces to host GitHub access (#2156) 2026-08-02 14:13:04 +01:00
Carlos Florêncio 27e7e0776a fix: preserve managed GitHub tools across login shells (#2141) 2026-08-02 11:18:32 +01:00
João Salavisa c7be985a29 feat(i18n): localize shared-task artifacts in the creator's locale (#2147)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-08-02 10:58:18 +02:00
João Salavisa 83c3c1ccf1 feat(i18n): ratchet new code to require t()/<Trans> everywhere (#2105)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-08-01 23:14:50 +01:00
João Salavisa 6cd89a78d3 feat(i18n): add scoped i18n foundation with one migrated page (#2097)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-08-01 23:11:18 +02:00
João Manso 3b91515f8f perf(agentctl): collapse the git poll tick into a single spawn (#2133) 2026-08-01 22:02:03 +01:00
Carlos Florêncio 1e353fbbbc fix: prevent scheduler database access during shutdown (#2135) 2026-08-01 20:11:04 +01:00
Carlos Florêncio 1d70a0df6d feat: enforce task title length limit (#2134) 2026-08-01 19:42:23 +01:00
Carlos Florêncio a1135aa8cf fix: hide false session question indicator (#2132) 2026-08-01 19:07:02 +01:00
Carlos Florêncio 5182cfb95a chore: improve harness guidance and ACP debugging (#1969) 2026-08-01 18:35:14 +01:00
Carlos Florêncio 1bccadf8f9 fix: validate MCP tool arguments (#2123) (#2128) 2026-08-01 18:18:08 +01:00
Carlos Florêncio 1a999f201a fix: resolve chat file links from task workspace root (#2127) 2026-08-01 14:46:57 +01:00
Carlos Florêncio bb525f1894 fix: preserve integration provider auth errors (#2119) 2026-08-01 11:19:40 +01:00
Carlos Florêncio e466bda55f fix: preserve service identity and resume credentials (#2121) 2026-08-01 11:19:24 +01:00
Carlos Florêncio 01beeb3753 fix: handle same-version agent runtime updates (#2120) 2026-08-01 11:18:37 +01:00
José Almeida 03e179c4d3 feat: add last task startup preference (#2102) 2026-08-01 09:58:05 +01:00
José Almeida d580be66d5 fix(web): remove mobile repository switcher (#2101) 2026-08-01 09:45:06 +01:00
Carlos Florêncio c5056f562e fix(preview): retry transient sprites errors (#2116) 2026-07-31 23:20:06 +01:00
Carlos Florêncio 805cbb6b62 fix: clear stale context usage after reset (#2108) 2026-07-31 19:53:05 +01:00
Carlos Florêncio 9f2b5f92c3 refactor(settings): centralize portable user-setting defaults (#2107) 2026-07-31 18:41:49 +01:00
Jelloeater's Agent 26db9fc260 feat(agents): add Hermes ACP agent integration (#2089) 2026-07-31 16:32:19 +01:00
Carlos Florêncio ea5173c922 fix: re-anchor stale git base for commits panel and cumulative diff (#2062) 2026-07-31 14:53:36 +01:00
Clément Fiere 59d1cc7277 feat: add Slack-style unread divider to session transcript (#1922) 2026-07-31 14:42:14 +01:00
Clément Fiere 68f1b773c6 feat: allow selecting multiple repositories in automation config (#2077) 2026-07-31 14:34:44 +01:00
João Salavisa 7c73d5c4c4 fix(agentctl): tear down adapter when the agent process self-exits (#2095)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-07-31 14:06:06 +01:00
João Salavisa 6c01e4e1ae fix(agentctl): clamp file-search limit to bound result allocation (#2088)
Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 09:31:37 +01:00
Carlos Florêncio 5b1d464ae5 fix(orchestrator): order runtime task state events (#2082) 2026-07-31 09:29:48 +01:00
João Salavisa 9be979827d fix: sync quick chats and their names across devices (#2085)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 09:01:22 +01:00
João Salavisa 1a3c134f1a feat(plugins): ship the plugin system without a feature flag (#2086)
Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 08:59:34 +01:00
Carlos Florêncio 5e486fccf9 fix(acp): preserve model across context reset (#2079) 2026-07-30 22:40:45 +01:00
Carlos Florêncio 3760f12939 feat(editors): scope embedded VS Code by executor (#2059) 2026-07-30 22:24:16 +01:00
Carlos Florêncio 167ab6b778 feat(mcp): add session attachment diagnostics (#2061) 2026-07-30 20:49:07 +01:00
Carlos Florêncio 40702d9095 fix(settings): improve transcript navigation controls (#2064) 2026-07-30 20:32:34 +01:00
Clément Fiere 8ade812fe7 fix(acp): strip multi-line command echoes in workDir-resolved output (#2072) 2026-07-30 20:20:21 +01:00
nova28 cfa875d9d6 feat(agents): accept command_args when creating custom TUI agents (#2053) 2026-07-30 19:03:18 +01:00
nova28 9b6d976f3b fix(backend): preserve local repository creation on macOS (#2052) 2026-07-30 16:23:39 +01:00
Clément Fiere 3eb8e4a59c feat: add transcript last prompt navigation (#1999) 2026-07-30 12:35:26 +01:00
nova28 5459644bf4 fix(gitlab): parse glab's "Token found:" auth status label (#2054) 2026-07-30 12:27:49 +01:00
Clément Fiere 04d2806645 fix: resume archive-cancelled sessions without a running row (#2041) 2026-07-30 11:22:53 +01:00
Carlos Florêncio 6ba9f1b0fd feat: add quarantine retention lifecycle (#2049) 2026-07-30 10:44:51 +01:00
João Salavisa d93b06005d refactor(backend): drop dead req param from resolveGHToken (#2013)
PR #1810 retired the host-global gh token detection that injected GITHUB_TOKEN
into the request env, leaving both remote executors with a `_ = req` placeholder
to silence the unused parameter. resolveGHToken is now just a filter over the
selected credential IDs, so the parameter is gone from the Sprites and SSH
flavors alike. Test asserts the pass-through selection value, not just length.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-29 23:47:56 +01:00
Carlos Florêncio 21674ec03c fix: bound task cleanup retries and ignore missing resources (#2027) (#2046) 2026-07-29 23:14:36 +01:00
João Salavisa 744aabee96 fix(mcp): keep spawner attribution on a spawned session's first turn (#2047)
* fix(mcp): keep spawner attribution on a spawned session's first turn

A session started through spawn_session_kandev never learned who spawned
it, so it had no way to report back. The MCP handler did prepend a
<kandev-system> attribution block, but the first-turn canonicalizer
(sysprompt.canonicalizeKandevContext) drops every system block it cannot
attribute to server state — and the spawn block was not on the trusted
list, so it was deleted before the agent ever saw it. Spawns are always a
first turn, so this happened every time.

Generate the block at the launch site instead, from server-resolved
identity, and whitelist that exact content for the injector — the same
pattern entity references already use:

- config/prompts/spawned-session.md holds the attribution template.
- sysprompt.SpawnedSessionContext builds it; sysprompt.StripTags (lifted
  out of the handlers' stripSystemTag) keeps embedded IDs from closing
  the block early.
- LaunchSessionRequest.SpawnOrigin carries the spawner identity and is
  kept off the wire (json:"-") so a WS client cannot forge a trusted
  system block.
- startTask prepends the block and passes the identical content as
  trusted content to both the task and Office injectors. Its trailing
  env/route parameters move into a startTaskOptions struct rather than
  growing the positional list again.
- The MCP handler now only fills SpawnOrigin (including the spawner's
  session name) and passes the prompt through untouched.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(mcp): derive spawn attribution from the verified spawner session

Addresses both PR review findings.

CodeRabbit: spawnOrigin copied sender_task_id / sender_session_id straight
out of the request, so an unknown or cross-task sender_session_id became
trusted launch attribution — the spawned agent would be told to report to
a session that never asked for it. Resolve the spawner session once, up
front, require it to belong to the claimed sender task, and derive the
origin (and the inherited agent profile) from that row. An unverifiable
claim now yields no attribution instead of a forged one. This also drops
a duplicate session lookup.

Codex: passthrough profiles skip the Kandev MCP wrap, so the new
attribution never reached a spawned passthrough session even though it
gets MCP configured and can reply. Give that path plain-text attribution
(no <kandev-system> markup, which would show up raw in the TTY the user
is watching). The wrap branch moves into applyLaunchPromptContext, which
keeps startTask under the nesting limit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-29 22:51:40 +01:00
Carlos Florêncio b4c537fa11 feat(web): hide embedded VS Code on Windows hosts (#2045) 2026-07-29 22:10:19 +01:00
Carlos Florêncio e77788706e fix(backend): cover agent launch readiness timeout (#2040) 2026-07-29 19:07:47 +01:00
Clément Fiere 3e794ba903 fix(github): stop SELECT * scans from breaking on TaskPR schema drift (#1988) 2026-07-29 18:52:00 +01:00
Alassane 3c5578285e fix: backfill remote_url from local checkout for legacy GitLab repos (#2030) 2026-07-29 18:14:01 +01:00