v0.8.33: kb fixes, chat ui cleanup, connectors instructions improvements - #7762
Merged
Conversation
* fix(knowledge): skip verified empty Slack threads * chore(knowledge): format Slack sync integration fixture
…rive files and macro-only Confluence pages (#7739) * fix(knowledge): stop connector sync failures on download-restricted Drive files and macro-only Confluence pages * fix(knowledge): drop raw error message from hydration failure logs
* fix(search): streamline Atlassian source setup * fix(search): validate Atlassian keys beyond discovery limits * fix(search): preserve partial Confluence lookup failures * fix(search): remove redundant source account banner * feat(search): unify source setup and organization usage
* improvement(chat): simplify inline tool activity * fix(chat): replace activity across message segments * fix(chat): retain answered browser handoffs
…round tab (#7745) * feat(desktop): browser pages as resource tabs, agent works in the background Each live desktop browser page is now its own resource tab in the Chat panel, derived from the desktop app's tab list instead of a persisted singleton "Browser" resource with a second tab strip inside it. The inner browser tab strip, tab pinning, duplicate, reorder, the native tab context menu, and the auto-replacement of a closed last tab are removed. The agent drives its own tab (the desktop's automation cursor) without moving the user's visible page: the renderer no longer force-activates the browser on every tool call nor auto-switches the panel to the agent's tab. The agent's tab is announced as resource activity, so the existing view policy shows it or badges it depending on whether the user has taken over selection. Mentions and attachments point at exact tabs; the chat row never stores browser resources, and legacy rows are dropped on read. * fix(desktop): settle browser tab sync edge cases and ease the tab width cap Review and in-app verification of the resource-tab browser model found five problems, all fixed here with tests: - The strip's switch and follow effects could trade `switch-tab` calls forever after a native switch; the switch effect is now keyed on the selection alone and ignores the switch it requested itself. - Migrating a pending chat onto its durable id briefly removed and re-added every browser tab; a missing store bucket is no longer read as closed. - Chat hydration could replace the resource list underneath a fresh add, dropping restored tabs on return; a tab stays projected until its resource is seen. Hydration also falls back to the last server-held resource instead of whichever tab happened to land first. - Strip-driven `switch-tab` no longer claims the page for the user (`claim: false`), so the agent can still close or adopt it; a user closing the agent's tab leaves the agent cursor unset rather than announcing the neighbour as agent activity. - The driver marked every restored scope as material, refusing pending chat migration after an empty restore; only a restore that yields pages does now, matching the session layer. The bridge snapshot is regenerated with the documented `'new-tab'` fallback. Resource tab titles ellipsize at 200px for one or two tabs, 180px for three, and 160px from four on, one small step at a time. * fix(desktop): mirror strip order into native tabs and drag live tab titles Reordering a browser tab in the resource strip now reorders the desktop's native tab list too, so restore and the agent's tab list keep the strip's order (`reorderTab` returns as an optional bridge method). Dragging a tab into the chat carries the strip's live title rather than the title captured when the tab was added. The fork route test follows the new policy that stored browser rows are dropped. * fix(emcn): drive the loader spin period from a CSS variable instead of an inline style
* improvement(chat): show browser agent site favicons * fix(chat): load favicons from the visited site * fix(chat): limit favicon loads to the local agent browser
* improvement(chat): remove legacy workspace mode selector * fix(chat): preserve request options when editing queued messages
* feat(search): add shared Slack app installation and commands * fix(slack): clean up unsuccessful shared app grants * improvement(slack): rename commands to query and connect * fix(slack): scope personal revocation to affected searches * fix(slack): reject stale uninstall before revoking member grants * fix(slack): process member revocations independently of bot events
* improvement(desktop): make each terminal its own resource tab * fix(desktop): close hidden terminal tabs from the strip and keep the activity icon on terminal tabs * fix(desktop): keep terminal close ownership with the window showing the panel
* improvement(chat): unify expandable inline tool activity * fix(chat): share activity disclosure and status lifecycle * improvement(chat): keep activity summaries concise
* feat(gitlab): support non-admin tokens with CSV permissions * fix(gitlab): address setup review and test expectations
* feat(library): Top AI Assistants in 2026 * Pi Babysit: address PR #7741 feedback --------- Co-authored-by: Sim Pi Agent <pi@sim.ai>
* improvement(chat): refine tool activity summaries and icons * chore(chat): enforce activity icon catalog coverage
…on cleanup on account deletion (#7755) * fix(mothership): derive block chat ids from the conversation id The Sim block passed its Conversation ID input straight through as the copilot chat id. Builders use stable strings such as `customer-456` there, but every chat column in Sim is a uuid, so each read keyed by the id failed, and the copilot service keys conversations by id alone, so two workspaces choosing the same string shared one thread. Every conversation id is now mapped to a UUID v5 of `workspaceId:id` under a fixed namespace. The same value keeps the same thread, workspaces never collide, a block can only reach a chat it derived, and the literal value never leaves the executor. An omitted id mints a token that the block exposes so a chained block continues the thread. The fork feature's UUID v5 helper moves to a shared module. * fix(knowledge): keep a held deletion pass a completed sync Since #7477 `completeSuccessfulSync` folded `checkpoint.unsafe` into the same predicate as an unfinished listing and a failed source read, so every connector whose provider cannot promise a stable listing (Fireflies and Notion always, Gmail and Slack at their caps) was recorded as `partial` with a frozen `last_sync_at` even when every document listed. `unsafe` only ever meant "do not infer deletions from this listing", and the deletion hold in `reconcileCompletedListing` still honors it. One `isContentPassIncomplete` predicate now drives the sync-log status, the watermark advance, and the task outcome, and it excludes `unsafe`, restoring the pre-#7477 behavior at all four sites. * fix(auth): end the session on account deletion and refuse a deleted owner Deleting an account removes the user and session rows, but the signed cookie cache keeps authenticating that browser for up to five minutes. The settings page then clears the query cache concurrently with signing out, every mounted query refetches, and the workspace list finds nothing and tries to create a default workspace for a user who no longer exists. The insert fails on the `workspace` -> `user` foreign key and surfaces as an unhandled 500 on roughly half of all deletions. The deletion response now clears the session cookies itself, so no later request from that browser carries them. The route builder keeps each cleared cookie on its own header line. Workspace creation classifies a user foreign key violation as `WorkspaceOwnerMissingError`, which both workspace routes answer with 401 instead of a logged fault.
* feat(cli): add explicit self-update command and update notices * fix(cli): reject update downgrades and explain installation errors * fix(cli): preserve update failures during lock cleanup
* fix(slack): skip completed shared app verification setup * fix(slack): preserve outdated member access repair
…ch (#7759) #7730 switched the knowledge base lists to a KnowledgeAccessProvider, which turned the single joined count into a per-400-base loop of count plus candidate-discovery queries. The staging integ workspace holds 21k archived bases, so GET /api/knowledge?scope=archived went from ~4s to ~100s and the archive-kb integ check timed out at 30s. The stored-ACL count moves back into the list's own join. Only documents a live source (GitHub, Confluence) authorizes beyond that are counted afterwards, once for the whole list, bounded by the list filter (unpaged) or the page's ids. The provider now reports whether the reader holds any live-source credential, and the shared batch generator skips candidate discovery entirely when it does not, since the discovered predicate would be provably empty. Claude-Session: https://claude.ai/code/session_01Lm5mdDU9bi1vb4oAvPtbjn Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* chore(repo): remove devcontainer, renovate config, and drained cache-cleanup workflow - Delete .devcontainer/ and its CONTRIBUTING section; the Dev Containers setup was undocumented elsewhere and no longer maintained - Delete renovate.json: Renovate has never opened a PR or dashboard issue on this repo; Dependabot security updates are what actually run - Delete ci-cache-cleanup.yml: it drained legacy Next.js build-cache sticky disks left by PRs open before #6080 (2026-07-30); Blacksmith evicts sticky disks after 7 days idle, so the backlog is gone and the job is a no-op - Move vitest.scripts.config.ts to scripts/vitest.config.ts with a pinned root so the repo root holds no test config; update test:scripts and check:script-tests - Drop the duplicate husky `prepare` in apps/sim; the root prepare installs the hooks * chore(agents): generate Cursor rules from .claude/rules and symlink AGENTS.md - .claude/rules/<name>.md is now the single source for editor rules; the sync script projects .cursor/rules/<name>.mdc from it (description + globs, or alwaysApply when a rule has no paths). The Cursor copies had drifted since July and five newer rules never reached Cursor - Move the Cursor-only testing rule to .claude/rules/sim-testing.md and add a description to every canonical rule - Pre-commit regenerates on staged rule edits; check:skills verifies - AGENTS.md becomes a symlink to CLAUDE.md; it was a stale subset * fix(agents): reject YAML-unsafe rule descriptions and quote the Cursor projection * fix(agents): reject implicitly typed YAML rule descriptions
#7761) * improvement(search): simplify integration connections and sync actions * improvement(integrations): align setup controls and refresh search guides * fix(search): expose incomplete connection checks and update setup tests
Contributor
|
Too many files changed for review (557 files, 100 file limit). |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
* fix(github): simplify repository setup and indexing outcomes * fix(github): complete repository setup through one approval flow * fix(github): align shared setup test fixtures
…ge telemetry (#7763) * feat(analytics): attribute requests by client surface and add CLI usage telemetry * fix(analytics): tolerate get-only header readers, gate CLI notice on stderr, re-read telemetry state before send
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.