Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
929021d
feat(search): unify organization search and reviewed assistant action…
waleedlatif1 Oct 29, 2026
b6122f0
docs(library): update ai-agent-vs-chatbot (#9441)
waleedlatif1 Oct 29, 2026
2c9fc53
feat(library): Best AI Agents for Meeting Notes and Follow-Ups: 6 Opt…
waleedlatif1 Oct 29, 2026
28dcc76
feat(library): Best AI Agent Builders for Automated Daily Email Diges…
waleedlatif1 Oct 29, 2026
467236e
chore(deps): bump re2js to 2.8.7 (#9444)
waleedlatif1 Oct 29, 2026
8948b54
perf(file-search): probe each backfill page's revisions by primary ke…
waleedlatif1 Oct 29, 2026
94b33d2
perf(outbox): resume each retention batch where the previous run's ba…
waleedlatif1 Oct 29, 2026
d59a275
perf(audit-logs): read a listing narrowed only by time through per-wo…
waleedlatif1 Oct 29, 2026
20ec175
perf(db): serve workspace usage drill-downs index-only on usage_log (…
waleedlatif1 Oct 29, 2026
6a269f9
perf(admin): read dashboard ledger usage one bounded scan per entity …
waleedlatif1 Oct 29, 2026
99d034a
perf(knowledge): reconcile a completed listing in one pass over its w…
waleedlatif1 Oct 29, 2026
322abb2
improvement(sandbox): pause idle chat workbenches instead of keeping …
waleedlatif1 Oct 29, 2026
01b2363
fix(billing): price Pi sandboxes at their build resources (#9453)
waleedlatif1 Oct 29, 2026
9c571fb
fix(billing): correct the Pi sizing note on E2B's resource maximums (…
waleedlatif1 Oct 29, 2026
d444d58
fix(workflows): refuse new placements of sunset blocks in workflow ed…
waleedlatif1 Oct 29, 2026
a0f47b1
fix(search): inline action review and unify account menus (#9451)
waleedlatif1 Oct 29, 2026
2698438
fix(integrations): one integration-access verdict across the catalog,…
waleedlatif1 Oct 30, 2026
584848a
improvement(comparisons): lead the OpenAI AgentKit page with the Agen…
waleedlatif1 Oct 30, 2026
9e2afe0
fix(billing): hold free plans to their allowance mid-run (#9462)
waleedlatif1 Oct 30, 2026
dff74b6
fix(search): unify navigation and preserve action review history (#9467)
waleedlatif1 Oct 30, 2026
b127bf4
fix(executor): bound condition loops and reject unnamed variable assi…
waleedlatif1 Oct 30, 2026
075c4ff
feat(workflows): let a synchronous run continue in the background aft…
waleedlatif1 Oct 30, 2026
465ea3c
feat(mcp): type mcp block replies from declared output schemas (#9466)
waleedlatif1 Oct 30, 2026
9f3d3e1
fix(search): remove the extra assistant tools gate (#9468)
waleedlatif1 Oct 30, 2026
5facc5f
feat(extension): bring Sim chat and page context to Chrome (#9454)
waleedlatif1 Oct 30, 2026
1782a22
fix(mothership): settle a sim_cli wait that outlasted --wait-timeout …
waleedlatif1 Oct 30, 2026
1e6b594
docs(library): update 6-best-ai-observability-tools-for-production-ag…
waleedlatif1 Oct 30, 2026
c4282f1
feat(library): Best AI Agents for Internal Knowledge Search Across Do…
waleedlatif1 Oct 30, 2026
1bed04e
feat(library): Best AI Agent Platforms for Slack and Discord: 4 Cross…
waleedlatif1 Oct 30, 2026
d2f09ff
feat(library): Best AI Agents for Automated Data Reports in 2026: 4 T…
waleedlatif1 Oct 30, 2026
06faa07
improvement(auth): unify sign-in and access pages (#9461)
emir-karabeg Oct 30, 2026
875f40a
test(mothership): drive a draft run past a wait slice through the rea…
waleedlatif1 Oct 30, 2026
c17cb55
fix(extension): isolate embedded pages from tracking (#9480)
waleedlatif1 Oct 30, 2026
0b26514
fix(sandbox): correct the E2B build default in the Pi sizing doc (#9477)
waleedlatif1 Oct 30, 2026
13a782b
docs(billing): scope the usage_log workspace index note to created_at…
waleedlatif1 Oct 30, 2026
3175daa
fix(search): harden assistant review and account discovery (#9478)
waleedlatif1 Oct 30, 2026
9fffbcc
fix(mcp): honor json schema openness in mcp output shapes (#9476)
waleedlatif1 Oct 30, 2026
397ea37
chore(trigger): run tasks on the bun-1.4 runtime (#9481)
waleedlatif1 Oct 30, 2026
5f2b8cd
fix(search): trace live provider latency and partial failures (#9482)
waleedlatif1 Oct 30, 2026
e9ac764
fix(integrations): align connection header actions (#9487)
waleedlatif1 Oct 30, 2026
00e25a4
feat(sim-links): organization Sim links (go links) with sim/<name> re…
waleedlatif1 Oct 30, 2026
91479e6
feat(extension): open typed sim/ links through the Sim link resolver …
waleedlatif1 Oct 30, 2026
7860fbe
feat(docs): rebuild documentation with the shared Sim design system (…
emir-karabeg Oct 31, 2026
08bdbea
chore(search): diagnose unsupported Fireflies response shapes (#9488)
waleedlatif1 Oct 31, 2026
854e095
feat(access-control): govern access requests per permission item (#9483)
waleedlatif1 Oct 31, 2026
c63e93e
improvement(sim-links): show each link's destination favicon (#9489)
waleedlatif1 Oct 31, 2026
3a39177
fix(search): accept Fireflies data-array responses (#9490)
waleedlatif1 Oct 31, 2026
051b223
improvement(sim-links): use the shared resource table layout (#9491)
waleedlatif1 Oct 31, 2026
7027fd5
improvement(sim-links): cleanup and simplify pass on the resource lay…
waleedlatif1 Oct 31, 2026
873489c
fix(docs): simplify selection and verify media interactions (#9493)
waleedlatif1 Oct 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,6 @@ Dockerfile* text eol=lf
*.ttf binary
*.eot binary
*.pdf binary

apps/docs/migration/report.json linguist-generated=true
apps/docs/migration/verification/** linguist-generated=true
4 changes: 4 additions & 0 deletions .github/ci-suites.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
"group": "desktop-inbox",
"task": "ci:e2e-desktop-inbox"
},
{
"group": "browser-extension",
"task": "ci:e2e-browser-extension"
},
{
"group": "seo",
"task": "ci:e2e-seo"
Expand Down
2 changes: 1 addition & 1 deletion .github/scripts/ci-plan.gql
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ query($base: String!, $head: String!) {
affectedTasks(base: $base, head: $head, tasks: [
"test", "build", "type-check", "ci:integration", "ci:desktop-live",
"ci:e2e-scim", "ci:e2e-cli", "ci:e2e-stop-after", "ci:e2e-desktop-inbox",
"ci:e2e-project-files", "ci:e2e-mobile", "ci:e2e-seo"
"ci:e2e-browser-extension", "ci:e2e-project-files", "ci:e2e-mobile", "ci:e2e-seo"
]) {
items {
name
Expand Down
50 changes: 47 additions & 3 deletions .github/scripts/http-e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# CI groups, which reuse the production build from `e2e-build`.
# The job extracts it into apps/sim/.next before running these suites.
#
# Usage: http-e2e.sh <scim|cli|stop-after|desktop-inbox|project-files|mobile|seo> (run from apps/sim)
# Usage: http-e2e.sh <scim|cli|stop-after|desktop-inbox|browser-extension|project-files|mobile|seo> (run from apps/sim)
#
# The job provides DATABASE_URL, BETTER_AUTH_SECRET and ENCRYPTION_KEY; each group sets the rest of
# its app's environment here. Reports and server logs land in $RUNNER_TEMP/e2e.
Expand All @@ -20,7 +20,7 @@
# telemetry flush runs detached and still writes .next/dev).
set -euo pipefail

group=${1:?usage: http-e2e.sh <scim|cli|stop-after|desktop-inbox|project-files|mobile|seo>}
group=${1:?usage: http-e2e.sh <scim|cli|stop-after|desktop-inbox|browser-extension|project-files|mobile|seo>}
report_dir="$RUNNER_TEMP/e2e"
ready_timeout_seconds=600
mkdir -p "$report_dir"
Expand Down Expand Up @@ -144,6 +144,7 @@ case "$group" in
export INTERNAL_API_SECRET=scim-http-ci-local-secret-at-least-32-characters
export DB_TX_TRIPWIRE=throw
export NEXT_PUBLIC_CHAT_DISABLED=true
export SIM_LINKS=true
start_app scim 3017 SCIM record-http-status
SCIM_E2E_BASE_URL="$local_app_url" \
SCIM_E2E_DATABASE_URL="$DATABASE_URL" \
Expand All @@ -155,6 +156,11 @@ case "$group" in
VERSION_COMPARE_E2E_AUTH_SECRET="$BETTER_AUTH_SECRET" \
VERSION_COMPARE_E2E_REPORT_PATH="$report_dir/version-compare-http-report.json" \
bun run test:workflow-version-compare:e2e
SIM_LINKS_E2E_BASE_URL="$local_app_url" \
SIM_LINKS_E2E_DATABASE_URL="$DATABASE_URL" \
SIM_LINKS_E2E_AUTH_SECRET="$BETTER_AUTH_SECRET" \
SIM_LINKS_E2E_REPORT_PATH="$report_dir/sim-links-e2e-report.json" \
bun run test:sim-links:e2e
;;

# The search suites serve their own fixtures in-process and need no app. They share this group
Expand Down Expand Up @@ -198,11 +204,14 @@ case "$group" in
;;

# The desktop background executor's protocol: device registration, the SSE doorbell over Redis
# pub/sub, presence, leased claims, Stop and isolation. The only group whose app gets Redis.
# pub/sub, presence, leased claims, Stop and isolation.
desktop-inbox)
export REDIS_URL=redis://127.0.0.1:6379
export NEXT_PUBLIC_FORCE_HOSTED=false
export COPILOT_TOOL_PERMISSIONS_ENABLED=true
export KNOWLEDGE_MEMBER_ACCESS=true CREDENTIAL_GROUPS=true ACCESS_CONTROL_ENABLED=true
export NEXT_PUBLIC_ACCESS_CONTROL_ENABLED=true NEXT_PUBLIC_ORGANIZATIONS_ENABLED=true
bunx --no-install playwright install --with-deps chromium
export INTERNAL_API_SECRET=desktop-inbox-http-ci-local-secret-at-least-32-characters
export DB_TX_TRIPWIRE=throw
start_app desktop-inbox 3019 'desktop executor' record-http-status
Expand All @@ -212,6 +221,41 @@ case "$group" in
DESKTOP_INBOX_E2E_AUTH_SECRET="$BETTER_AUTH_SECRET" \
DESKTOP_INBOX_E2E_REPORT_PATH="$report_dir/desktop-inbox-http-report.json" \
bun run test:desktop-inbox:e2e
ASSISTANT_ACTIONS_E2E_BASE_URL="$local_app_url" \
ASSISTANT_ACTIONS_E2E_DATABASE_URL="$DATABASE_URL" \
ASSISTANT_ACTIONS_E2E_AUTH_SECRET="$BETTER_AUTH_SECRET" \
ASSISTANT_ACTIONS_E2E_REPORT_PATH="$report_dir/assistant-actions-ui-report.json" \
bun --no-env-file scripts/test-assistant-actions-e2e.ts
ORGANIZATION_SEARCH_E2E_BASE_URL="$local_app_url" \
ORGANIZATION_SEARCH_E2E_DATABASE_URL="$DATABASE_URL" \
ORGANIZATION_SEARCH_E2E_AUTH_SECRET="$BETTER_AUTH_SECRET" \
ORGANIZATION_SEARCH_E2E_REPORT_PATH="$report_dir/organization-search-ui-report.json" \
bun --no-env-file scripts/test-organization-search-e2e.ts
;;

browser-extension)
export REDIS_URL=redis://127.0.0.1:6379
export NEXT_PUBLIC_FORCE_HOSTED=false
export KNOWLEDGE_MEMBER_ACCESS=true CREDENTIAL_GROUPS=true ACCESS_CONTROL_ENABLED=true
export NEXT_PUBLIC_ACCESS_CONTROL_ENABLED=true
export API_ENCRYPTION_KEY="$ENCRYPTION_KEY"
bunx --no-install playwright install --with-deps chromium
extension_identity=$(bun - <<'JS'
import { generateKeyPairSync, createHash } from 'node:crypto'
const { publicKey } = generateKeyPairSync('rsa', { modulusLength: 2048 })
const der = publicKey.export({ type: 'spki', format: 'der' })
const id = [...createHash('sha256').update(der).digest('hex').slice(0, 32)]
.map(c => String.fromCharCode(97 + parseInt(c, 16))).join('')
process.stdout.write(`${der.toString('base64')}\n${id}`)
JS
)
export SIM_EXTENSION_KEY="${extension_identity%%$'\n'*}"
export BROWSER_EXTENSION_IDS="${extension_identity#*$'\n'}"
start_app browser-extension 3007 'browser extension' record-http-status
EXTENSION_APP_E2E_BASE_URL="$local_app_url" \
EXTENSION_APP_E2E_DATABASE_URL="$DATABASE_URL" \
EXTENSION_APP_E2E_REPORT_PATH="$report_dir/browser-extension/report.json" \
bun run test:browser-extension:e2e
;;

project-files)
Expand Down
58 changes: 58 additions & 0 deletions .github/workflows/browser-extension.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: browser-extension

on:
pull_request:
paths:
- '.github/workflows/browser-extension.yml'
- 'apps/extension/**'
- 'packages/browser-extension-protocol/**'
- 'apps/sim/app/extension/**'
- 'apps/sim/app/workspace/**/home/**'
- 'apps/sim/stores/mothership-drafts/**'
- 'apps/sim/scripts/test-browser-extension-e2e.ts'
- 'apps/sim/lib/core/security/**'
- 'apps/sim/lib/mothership/chat/**'
- 'apps/sim/lib/api/contracts/mothership-chat-context.ts'
- 'apps/sim/proxy.ts'
- 'apps/sim/next.config.ts'
- 'apps/sim/package.json'
- 'packages/emcn/**'
- 'packages/logger/**'
- 'packages/utils/**'
- 'bun.lock'
workflow_dispatch:

permissions:
contents: read

concurrency:
group: browser-extension-${{ github.ref }}
cancel-in-progress: true

jobs:
transport:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v6
with:
node-version: '24'
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: 1.4.4
- run: bun install --frozen-lockfile
- run: bunx playwright install --with-deps chromium
working-directory: apps/extension
- run: bun run type-check && bun run build && bun run test:e2e
working-directory: apps/extension
env:
EXTENSION_REPORT_PATH: test-results/extension-report.json
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
if: always()
with:
name: browser-extension-results
path: apps/extension/test-results
retention-days: 7
12 changes: 9 additions & 3 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -217,9 +217,9 @@ jobs:
--health-interval 5s
--health-timeout 5s
--health-retries 10
# Desktop inbox and Project Files use Redis.
# Desktop inbox, browser extension, and Project Files use Redis.
redis:
image: ${{ (matrix.group == 'desktop-inbox' || matrix.group == 'project-files') && 'redis:8.2-alpine' || '' }}
image: ${{ (matrix.group == 'desktop-inbox' || matrix.group == 'browser-extension' || matrix.group == 'project-files') && 'redis:8.2-alpine' || '' }}
ports:
- 6379:6379
options: >-
Expand Down Expand Up @@ -296,7 +296,10 @@ jobs:
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: e2e-reports-${{ matrix.group }}
path: ${{ runner.temp }}/e2e/**/*.json
path: |
${{ runner.temp }}/e2e/**/*.json
${{ runner.temp }}/e2e/browser-extension/**/*.png
${{ runner.temp }}/e2e/*-ui-report.json.artifacts/*.png
if-no-files-found: ignore
retention-days: 7

Expand Down Expand Up @@ -681,6 +684,9 @@ jobs:
tar -xzf "$archive" -C "$RUNNER_TEMP" actionlint
"$RUNNER_TEMP/actionlint" -color -shellcheck= -pyflakes=
- name: Generate documentation modules for import audits
run: bun run --cwd apps/docs content:generate

# Every zero-argument `check:*` script, run concurrently. The list is derived in
# scripts/run-audits.ts, which also writes the per-audit timing table to the job
# summary and annotates failures. Audits needing a base ref stay separate below.
Expand Down
21 changes: 16 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ jobs:
if [ -n "$TRIGGER_BRANCH" ]; then
TARGET_ARGS+=(--branch "$TRIGGER_BRANCH")
fi
bunx trigger.dev@4.7.6 deploy "${TARGET_ARGS[@]}" --skip-promotion
bunx trigger.dev@4.8.2 deploy "${TARGET_ARGS[@]}" --skip-promotion
- name: Validate deployment version output
env:
Expand Down Expand Up @@ -638,7 +638,7 @@ jobs:
if [ -n "$TRIGGER_BRANCH" ]; then
TARGET_ARGS+=(--branch "$TRIGGER_BRANCH")
fi
bunx trigger.dev@4.7.6 promote "$VERSION" "${TARGET_ARGS[@]}"
bunx trigger.dev@4.8.2 promote "$VERSION" "${TARGET_ARGS[@]}"
# Production only, once the new app serves traffic: submit the library and comparison URLs this
# push changed to IndexNow. Best effort: nothing depends on it, and a failure never fails the run.
Expand Down Expand Up @@ -1149,9 +1149,20 @@ jobs:
with:
filters: |
docs:
- 'apps/docs/content/docs/**'
- 'apps/sim/scripts/process-docs.ts'
- 'apps/sim/lib/chunkers/**'
- 'apps/docs/content/**'
- 'apps/docs/components/workflow-preview/examples.ts'
- 'apps/docs/components/workflow-preview/block-display-workflows.ts'
- 'apps/docs/scripts/compile-content.ts'
- 'apps/docs/scripts/index-search.ts'
- 'apps/docs/lib/content/**'
- 'apps/docs/lib/search/**'
- 'apps/docs/lib/openapi-specs.ts'
- 'apps/docs/lib/urls.ts'
- 'apps/docs/openapi*.json'
- 'apps/docs/package.json'
- 'bun.lock'
- '.github/workflows/docs.yml'
- '.github/workflows/ci.yml'
# Process docs embeddings (only when docs change, after images are promoted)
docs:
Expand Down
Loading
Loading