Commit Graph
2389 Commits
Author SHA1 Message Date
bot-hermes 7bf07f0dd9 fix(ui): provider-aware context rail branding for GitLab 2026-08-16 16:24:40 +00:00
bot-hermes 06a5dd63bb fix(ui): label GitLab merge requests as MR in the composer 2026-08-16 16:23:40 +00:00
bot-hermes 324dca9057 feat(ui): create, update and merge GitLab merge requests from the MR view 2026-08-16 16:23:39 +00:00
bot-hermes 28d992ac78 feat(web): create, update and merge GitLab merge requests 2026-08-16 16:23:39 +00:00
bot-hermes b8a0aa0242 feat(web): resolve walkthrough diffs for GitLab merge requests 2026-08-16 16:23:38 +00:00
bot-hermes 89db325168 feat(ui): show GitLab merge request status in walkthrough, git view and work status 2026-08-16 16:23:38 +00:00
bot-hermes 2c4ba78ae5 feat(ui): GitLab merge request view in the context panel 2026-08-16 16:23:37 +00:00
bot-hermes 454b3591e5 feat(ui): attach GitLab issues and merge requests to sessions 2026-08-16 16:23:36 +00:00
bot-hermes 267db3fb9d feat(web): filter GitLab merge requests by source branch 2026-08-16 16:23:36 +00:00
bot-hermes 6868a58359 fix(ui): hide GitHub surfaces in non-GitHub repositories 2026-08-16 16:23:36 +00:00
bot-hermes e83bd2bc08 fix(ui): refresh GitLab auth status on worktree dialog mount 2026-08-16 15:42:26 +00:00
bot-hermes a05056a871 feat(ui): start worktree sessions from GitLab issues and merge requests 2026-08-16 15:42:26 +00:00
bot-hermes a42eec5c9c feat(ui): add GitLab connect settings 2026-08-16 15:42:26 +00:00
bot-hermes d798b3f479 feat(web): add GitLab issues/MRs server module
Add a server-side GitLab integration mirroring the GitHub module:
- auth.js: PAT auth storage with multi-account support and configurable
  base URL (gitlab.com default, self-hosted instances supported)
- client.js: raw-fetch GitLab REST v4 client with per-request timeout,
  ETag conditional-GET cache, own rate-limit cooldown, pagination, and
  single-follow redirect handling
- repo.js: GitLab remote URL parser + directory resolution
- routes.js: read-only /api/gitlab/* routes (auth, issues, MRs, branches)
- index.js + DOCUMENTATION.md + unit tests for auth, client, repo, routes
- Wire registerGitLabRoutes into feature-routes-runtime
2026-08-16 15:42:26 +00:00
bot-hermes b5ddb6f3a1 feat(web): add GitLab API client wrapper and types 2026-08-16 15:42:26 +00:00
bot-hermes f16a5bab6b docs: add GitLab issues/MRs page 2026-08-16 15:42:26 +00:00
Bohdan Triapitsyn 58c190f0b1 fix(web): use Vitest timers in PR status tests 2026-08-16 17:30:45 +03:00
Bohdan Triapitsyn 21152ec120 chore(vscode): update changelog for integrations settings page 2026-08-16 15:55:49 +03:00
Bohdan Triapitsyn e3094ee676 docs(changelog): add pending unreleased entries and reorder by impact 2026-08-15 17:58:31 +03:00
Bohdan Triapitsyn 268f9ea9f2 fix(github): keep merged PRs as branch history instead of hiding them
Branch status resolves an open PR across the whole fork network first, so a
merged fork PR can never hide an open upstream PR for the same head. Only when
no target has an open PR does the branch's newest closed/merged PR come back,
as history.

The panel shows that history as a compact note and offers creating the next PR
below it, instead of either sticking on a terminal PR or going blank after a
merge. Terminal associations stay persisted for reload continuity but are never
treated as authority: they revalidate on the discovery cadence and on focus.

History is looked up only for the branch's own remote and name, and remembered
per repo+branch, so the extra lookup cannot exhaust the route's resolve budget.
The checks summary and merge-permission lookup are skipped for a closed or
merged PR, where neither is actionable.
2026-08-15 17:56:55 +03:00
Bohdan Triapitsyn 52ac367b1e feat: update annotate toolbar icon to markup 2026-08-15 16:33:07 +03:00
Serhii Dziupin bfcb555aa5 Merge pull request #2928 from openchamber/feat/stale-last-directory-fallback-1be0
fix(sessions): recover new chats from a deleted lastDirectory
2026-08-15 15:48:25 +03:00
Bohdan Triapitsyn 9032dfa5c0 fix(ui): show project names exactly as the folder is named
Auto-derived project labels were title-cased, turning .ssh into .Ssh and
opencode-claude into Opencode Claude. Show the folder name verbatim in the
sidebar, window title, settings selector and notification templates, and
migrate persisted legacy labels back to the folder name (manual renames
are preserved).
2026-08-15 10:16:31 +03:00
Cursor Agentandserkraser d817c44c46 fix(sessions): accept in-flight draft rewrite to the fallback directory
Create no longer aborts when recoverStaleDraftDirectory rewrites the
implicit new-chat draft to the active project during the create probe.
Also rank the Unreleased Chat bullet below the changelog highlights.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 06:33:28 +00:00
Cursor Agentandserkraser a500a5d4e9 merge origin/main into feat/stale-last-directory-fallback-1be0
Keep both Unreleased changelog bullets: the lastDirectory new-chat
fallback and the Git PR panel stale-status fix from main.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 05:10:00 +00:00
Serhii Dziupin 8c91c82b62 Merge pull request #2929 from openchamber/feat/fix-stale-merged-pr-status-3a1e 2026-08-15 08:07:14 +03:00
Serhii Dziupin 11a136bba8 Merge pull request #2913 from Gautam0507/fix/2803-session-retention-persist 2026-08-15 08:05:48 +03:00
Serhii Dziupin 13b25eea64 Merge pull request #2920 from alohaninja/fix/ui-unused-runtimefetch-import 2026-08-15 08:03:17 +03:00
Cursor Agentandserkraser 7db8b2c463 chore(ui): keep directory availability type module-private
The availability union is only used by the OpenCode client probe.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 04:47:15 +00:00
Cursor Agentandserkraser ed972d9f9e test(ui): use toBe(undefined) for persist/hydrate assertions
The UI expect helper does not type toBeUndefined.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 04:30:30 +00:00
Cursor Agentandserkraser 9090733908 fix(sessions): rewrite stale new-chat drafts before send
When a regular new-chat draft inherits a deleted lastDirectory, update
the visible draft target to the active project immediately. lastDirectory
still stays unchanged until session creation succeeds.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 04:28:07 +00:00
Cursor Agentandserkraser c1640522ec docs(changelog): note stale merged PR panel fix
Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 04:27:52 +00:00
Cursor Agentandserkraser 13cbbc76d7 test(github): cover persist, hydrate, and complete open-list misses
Add store persist/hydrate regressions for terminal branch associations
and a server test that a complete empty open list does not query closed
PRs. Inline the open-only matcher state so the next repo target can win.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 04:27:52 +00:00
Serhii DziupinandSerhii Dziupin 5e9e35897f fix(github): harden terminal PR revalidation after critical review
Recompute focus/visibility staleness at event time, retry closed/merged
sidebar associations on the no-PR cadence, and assert refresh failures
preserve prior PR status.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
2026-08-15 04:27:02 +00:00
Serhii DziupinandSerhii Dziupin 962b016cbd fix(github): stop stale merged PRs from sticking in branch status
Branch PR status now resolves open PRs only, revalidates closed/merged
associations on a discovery cadence, and clears authoritative empty
results so the panel can self-heal without a manual refresh.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
2026-08-15 04:27:02 +00:00
Cursor Agentandserkraser 90e79b04a4 fix(sessions): fall back when lastDirectory is a deleted worktree
New chats inherited a persisted lastDirectory even after that worktree
was removed, so the first message saved but the prompt never started.
Validate the implicit draft directory, fall back to the active project
only when OpenCode confirms the path is missing, and leave explicit
worktree targets and unknown probes unchanged.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 04:26:39 +00:00
Serhii Dziupin 6b1e677aaf Merge pull request #2925 from makeittech/feat/fix-issue-2903-embedded-subagent-2cbc
fix(ui): restore embedded subagent history (#2892, #2903, #2919, #2922)
2026-08-15 07:07:39 +03:00
Serhii Dziupin 4e6ac40801 fix(ui): load embedded history while visibility stays inactive
Keep session-message loads and retries on messagesEnabled so a mounted
session-chat panel can materialize history even before the visibility
handshake, and cover the enabled-gate with the real hook.

Co-authored-by: serkraser <serkraser@gmail.com>
2026-08-15 03:51:33 +00:00
Serhii Dziupin 11537de734 Merge pull request #2924 from makeittech/feat/fix-clawhub-label-typo-5c30
Fix ClawHub display name typo in Skills Catalog (#2895)
2026-08-15 06:43:56 +03:00
Serhii DziupinandSerhii Dziupin de0455e10e test(ui): drop tautological #2903 enabled-gate helper
The helper reimplemented `if (!enabled) return []` locally, so those
cases never exercised the real hook. Keep the snapshot-builder and
source-contract coverage instead.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
2026-08-15 03:42:45 +00:00
Serhii DziupinandSerhii Dziupin 0a07bc7e03 test(ui): assert #2903 records through the real snapshot builder
Replace the fake enabled-gate helper's store fixture with
buildSessionMessageRecordsSnapshot so the regression covers the same
record shape ChatContainer renders.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
2026-08-15 03:40:37 +00:00
Serhii DziupinandSerhii Dziupin 903638db94 fix(ui): show embedded subagent history while visibility stays inactive
Busy context-panel session chats could render only the working-status row
when the iframe booted inactive or lost its visibility handshake, because
message reads shared the composer/background-work gate. Keep message
subscriptions enabled in the mounted session-chat panel so materialized
history remains visible (#2903, #2892).

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
2026-08-15 03:40:37 +00:00
Aaron Hogue bc443bba82 fix(ui): drop unused runtimeFetch import in gitApi
d353638f3 replaced both `runtimeFetch('/api/small-model/generate')` calls
with `requestSmallModel` but left the original import in place, so
`@typescript-eslint/no-unused-vars` fails `bun run --filter '*' lint` on
main:

  packages/ui/src/lib/gitApi.ts
    5:10  error  'runtimeFetch' is defined but never used

This blocks CI for every open PR, since pull_request runs lint against the
merge with main.
2026-08-14 19:41:49 -04:00
Bohdan Triapitsyn 1060ad1913 fix(ui): use native collapsible integration cards 2026-08-15 02:02:51 +03:00
Bohdan Triapitsyn d353638f39 fix: integrate Claude CLI provider state 2026-08-15 01:59:26 +03:00
Gautam0507 b15b20fe08 fix(settings): persist sessionRetentionAction through the settings sanitizer 2026-08-15 00:39:36 +05:30
Serhii DziupinandSerhii Dziupin a216b6871f Fix ClawHub display name typo in Skills Catalog (#2895)
The Skills Catalog source dropdown showed "ClawdHub"; the registry brands
itself as ClawHub. Update curated/fallback labels across web, UI, and VS Code,
align docs, and add regression tests.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
2026-08-14 18:49:31 +00:00
Bohdan Triapitsyn 72cd861eb8 fix(quota): match the Claude Code integration provider to Claude quota
The opencode-claude integration registers its provider as `claude-code`, which
never matched the `claude` quota provider, so the collapsed Usage section in
the work status panel showed no limit for a model from that integration.

Claude windows also reported no duration, leaving the headline to fall back to
whichever row came first instead of the limit that runs out soonest. The
session and weekly windows now carry their length; extra usage stays without
one because it is a monthly spend cap.
2026-08-14 21:07:55 +03:00
Bohdan Triapitsyn b77a30cd88 feat(quota): read Claude plan limits from the Claude Code login
Claude quota only worked when the user had signed into Anthropic through
OpenCode. Credentials are now discovered from Claude Code itself first: the
macOS Keychain entry, then the Linux/WSL credentials file (honouring
CLAUDE_CONFIG_DIR), then OpenCode auth.json, then CLAUDE_CODE_OAUTH_TOKEN.

All sources stay read-only and the OAuth token is never refreshed: Anthropic
allows one live refresh token per client_id, so refreshing here would sign the
user out of Claude Code. Credentials are re-read per request instead, and an
expired token reports that Claude Code needs a sign-in rather than a bare 401.

Usage is now read from the limits[] array, so model-scoped weekly limits work
again after Anthropic stopped populating seven_day_sonnet/seven_day_opus, and
new limit kinds no longer need a code change. Adds extra-usage spend and the
plan name, and holds the last good values through Anthropic's 429s with a
cooldown and an account-keyed cache.
2026-08-14 20:49:59 +03:00
Serhii Dziupin 9761f5ff3c Merge pull request #2910 from openchamber/feat/third-party-integrations-dashboard-6ead 2026-08-14 19:53:13 +03:00