Commit Graph

2004 Commits

Author SHA1 Message Date
João Salavisa bed0d44ce0 fix(web): stop prompt font size changing on window resize (#2103)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-07-31 18:29:56 +01:00
Carlos Florêncio 272fa2d34d ci: review PRs only on open (#2100) 2026-07-31 17:06:22 +01:00
Jelloeater's Agent 26db9fc260 feat(agents): add Hermes ACP agent integration (#2089) 2026-07-31 16:32:19 +01:00
José Almeida abf21f52a6 feat(web): cycle linked reviews with held shortcut (#2099) 2026-07-31 16:15:32 +01:00
José Almeida 441c8a34ac fix(web): align status bar with sidebar (#2096) 2026-07-31 15:24:23 +01:00
João Salavisa eb72f53c1b fix(web): phone navigation for plugin pages (#2093)
Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 14:57:40 +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
Clément Fiere fa577dfe53 fix: darken auto-scroll toggle green, drop ban overlay, maximize icon size (#2073) 2026-07-31 14:33:57 +01:00
Carlos Florêncio 7ad1599b70 feat(web): show WebSocket connectivity warnings (#2083) 2026-07-31 14:23:16 +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
Carlos Florêncio a8af0787b1 fix: restore Changes focus on task return (#2091) 2026-07-31 13:26:20 +01:00
José Almeida d46ec16770 fix: improve interactive accent contrast (#2075) 2026-07-31 10:55:29 +01:00
João Manso 6bcd4fe711 feat(make): add start-windows-verbose and start-windows-debug (#2090) 2026-07-31 09:41:13 +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
Carlos Florêncio 41e819d80e fix(web): improve Mermaid render diagnostics (#2080) 2026-07-31 09:28:55 +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 6b31479ec2 feat(web): open the IDE at a file tree node's path (#2074)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-07-31 09:00:31 +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 0e1b813eab fix(web): hide transient metrics unavailable state (#2081) 2026-07-30 23:09:29 +01:00
João Salavisa 0866cd8af8 refactor(web): consolidate formatRelativeTime into lib/utils (#2069)
Five copies of formatRelativeTime had drifted across apps/web into three
different output vocabularies, so the same timestamp read differently
depending on which surface rendered it. lib/utils.ts is now the single
implementation.

Deletes the private copies in task-item, automations/format-utils,
commit-detail-panel, and kanban/graph2-task-pipeline; commit-detail-panel
adopts the shared short form rather than keeping its long-form wording.
Adds bucket-boundary unit tests for the shared function.
2026-07-30 22:49:56 +01:00
João Salavisa b082d5e1b9 refactor(web): use the shared formatBytes in chat attachments (#2071)
Delete the two byte-identical local formatBytes copies from the chat-attachment
modules and repoint all call sites at the canonical lib/utils/format-bytes.ts,
which its own doc comment asks new code to use.

The copies had no upper clamp (>= 1 TB rendered "1 undefined") and no NaN or
negative guard (NaN rendered "NaN undefined"). Size labels now carry one
decimal ("10.0 MB" instead of "10 MB") because the canonical helper does not
strip a trailing zero; unit and e2e expectations updated to match.
2026-07-30 22:40:50 +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
João Salavisa 5211a2d197 refactor(web): reuse stats-utils formatDuration in stats-sections (#2068)
Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 21:31:25 +01:00
Carlos Florêncio f74b0cc618 fix(web): preserve dockview focus during session restore (#2060) 2026-07-30 21:27:04 +01:00
Carlos Florêncio 167ab6b778 feat(mcp): add session attachment diagnostics (#2061) 2026-07-30 20:49:07 +01:00
Carlos Florêncio be85ce2f87 ci: forward approved users to Claude review (#2078) 2026-07-30 20:48:48 +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
José Almeida d4e8f0a62a fix(web): make review ordering and navigation safe (#2067) 2026-07-30 20:07:36 +01:00
nova28 cfa875d9d6 feat(agents): accept command_args when creating custom TUI agents (#2053) 2026-07-30 19:03:18 +01:00
nova28 2f84e8f3b1 fix(web): stop a closed dialog from leaving the page click-dead (#2056) 2026-07-30 16:24:10 +01:00
nova28 9b6d976f3b fix(backend): preserve local repository creation on macOS (#2052) 2026-07-30 16:23:39 +01:00
nova28 21742aa3ef fix(web): stop long GitLab row titles drawing over the row actions (#2057) 2026-07-30 14:48:03 +01:00
Carlos Florêncio 789b658a1c feat: distinguish workflow completion in task sidebar (#2058) 2026-07-30 14:47:49 +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
José Almeida eab70052d2 fix(web): prevent blank screens during SPA recovery (#2024)
* fix(web): prevent blank screens during SPA recovery

* fix(web): address SPA recovery review feedback
2026-07-30 10:46:35 +01:00
Carlos Florêncio 6ba9f1b0fd feat: add quarantine retention lifecycle (#2049) 2026-07-30 10:44:51 +01:00
Carlos Florêncio d05ba00b9f feat(web): preview markdown from review diffs (#2036) 2026-07-30 10:44:30 +01:00
João Salavisa d3bdad06c2 chore(plugin-registry): add kandev-plugin-kandy (#2042)
Co-authored-by: Kandev Agent <agent@kandev.dev>
2026-07-30 10:12:58 +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
Clément Fiere 69b3340653 fix(github): stop the PR panel from showing the previous task's stale feedback (#2048) 2026-07-29 22:10:30 +01:00
Carlos Florêncio b4c537fa11 feat(web): hide embedded VS Code on Windows hosts (#2045) 2026-07-29 22:10:19 +01:00