Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
5ae51b3
Batch AI chat stream updates
JustYannicc Jul 3, 2026
18481a2
Batch cursor prompt stream updates
JustYannicc Jul 3, 2026
be66d99
perf(ai): batch Raycast useAI streaming
JustYannicc Jul 3, 2026
a1d8c7b
ci: add project regression checks
JustYannicc Jul 3, 2026
a1225c6
Add bundled TS import helper for tests
JustYannicc Jul 3, 2026
0799e71
fix(types): make renderer typecheck clean
JustYannicc Jul 3, 2026
835bf3a
ci(claude): fix review action on fork PRs
JustYannicc Jul 3, 2026
4605c88
fix(i18n): restore Italian parity checks
JustYannicc Jul 3, 2026
d4c6a9f
fix(pnpm): approve native build scripts
JustYannicc Jul 3, 2026
986c87a
perf: cache local icon asset existence checks
JustYannicc Jul 3, 2026
9e4eed3
Virtualize emoji grid list rendering
JustYannicc Jul 3, 2026
5245253
Memoize Phosphor icon resolution
JustYannicc Jul 3, 2026
cfe2ec3
Cache emoji caret session state
JustYannicc Jul 3, 2026
83d6b0b
Stabilize list item registry order
JustYannicc Jul 3, 2026
e03ad3e
perf(launcher): window command list rendering
JustYannicc Jul 3, 2026
f07b554
perf(grid): virtualize grid rendering
JustYannicc Jul 3, 2026
6f06eb4
perf(settings): coalesce AI status polling
JustYannicc Jul 3, 2026
949a6fd
perf(icons): coalesce file icon IPC
JustYannicc Jul 3, 2026
8ca7ec9
Remove root search ranking diagnostics
JustYannicc Jul 3, 2026
fb857f2
perf: optimize file search delete batches
JustYannicc Jul 3, 2026
dee7108
perf: memoize frecency sorting defaults
JustYannicc Jul 3, 2026
68cb050
Avoid interval file-index rebuilds
JustYannicc Jul 3, 2026
9f246ce
Avoid full script reads for command headers
JustYannicc Jul 3, 2026
12f951e
Optimize root search command scoring
JustYannicc Jul 3, 2026
a2737ce
perf(runtime): reduce extension and menubar churn
JustYannicc Jul 3, 2026
7ed6c2a
Speed up path-like file search queries
JustYannicc Jul 3, 2026
dff8539
Add file search perf harness
JustYannicc Jul 3, 2026
caa78e1
perf(browser-search): index hot query path
JustYannicc Jul 3, 2026
321d103
fix(browser-search): narrow indexed nickname candidates
JustYannicc Jul 3, 2026
644e72d
test: trim benchmark script eof whitespace
JustYannicc Jul 3, 2026
0007d73
perf(mac): reduce native polling and async IO stalls
JustYannicc Jul 3, 2026
6a43c57
Merge remote-tracking branch 'fork/codex/consolidate-validation-check…
JustYannicc Jul 3, 2026
5f84095
Merge remote-tracking branch 'fork/codex/consolidate-runtime-backgrou…
JustYannicc Jul 3, 2026
2a0d894
Merge remote-tracking branch 'fork/codex/consolidate-rendering-icons-…
JustYannicc Jul 3, 2026
50e7dd5
Merge remote-tracking branch 'fork/codex/consolidate-search-indexing'…
JustYannicc Jul 3, 2026
2916daf
Merge remote-tracking branch 'fork/codex/consolidate-ai-streaming-sta…
JustYannicc Jul 3, 2026
52288a0
Merge remote-tracking branch 'fork/codex/consolidate-native-async-io'…
JustYannicc Jul 3, 2026
9325446
perf(icons): cache main icon IPC lookups
JustYannicc Jul 3, 2026
8ef6b48
perf(extensions): quiet runtime success logs
JustYannicc Jul 3, 2026
f0b280c
perf(utils): ignore stale useFetch responses
JustYannicc Jul 3, 2026
07667ca
perf(form): skip no-op error state updates
JustYannicc Jul 3, 2026
be3681e
perf(grid): binary-search visible virtual rows
JustYannicc Jul 3, 2026
057fbb8
perf(ai): batch stream IPC chunks
JustYannicc Jul 3, 2026
b73c39c
perf(ai): cache local model status probes
JustYannicc Jul 3, 2026
9dfbb5b
perf(ai): clean up stream abort listeners
JustYannicc Jul 3, 2026
e4061fa
perf(menubar): cache native images
JustYannicc Jul 3, 2026
f524a65
perf(icons): cache tint color resolution
JustYannicc Jul 3, 2026
7136d22
perf(camera): remove redundant mkdir subprocess
JustYannicc Jul 3, 2026
79a74fc
perf(audio): bulk-write captured WAV samples
JustYannicc Jul 3, 2026
27ffb30
perf(raycast): cache registry dirty signatures
JustYannicc Jul 3, 2026
ede7359
perf(extensions): clean sandbox lifecycle handles
JustYannicc Jul 3, 2026
c3194d7
perf(icons): cache transient missing asset paths
JustYannicc Jul 3, 2026
65c2591
fix(raycast): guard stale promise hook runs
JustYannicc Jul 3, 2026
fb19666
test(raycast): align grid registry dirty harness
JustYannicc Jul 3, 2026
b75a732
perf(files): map launcher file result commands by path
JustYannicc Jul 3, 2026
d76c8f4
perf(utils): guard useStreamJSON lifecycle
JustYannicc Jul 3, 2026
31caa81
perf(settings): clean up Ollama pull listeners
JustYannicc Jul 3, 2026
d1589f4
perf(root-search): precompile command scoring fields
JustYannicc Jul 3, 2026
550165f
fix(native): guard helper process lifecycle
JustYannicc Jul 3, 2026
cb0f2ea
perf(files): map launcher file result commands by path
JustYannicc Jul 3, 2026
8ee9aae
perf(script): clear script command timeout on output limit
JustYannicc Jul 4, 2026
986a224
perf(files): speed up delete tombstone batches
JustYannicc Jul 4, 2026
e7dde6f
perf(rendering): avoid unused list virtual rows
JustYannicc Jul 4, 2026
ec66efe
perf(raycast): avoid useForm error state no-op churn
JustYannicc Jul 4, 2026
0ab1e4e
perf(emoji): reuse inline picker matches while navigating
JustYannicc Jul 4, 2026
1836170
perf(commands): cache script command icon data
JustYannicc Jul 4, 2026
6f3f65e
perf(menubar): skip unchanged native tray work
JustYannicc Jul 4, 2026
fc71aeb
perf(ai): avoid copying Whisper upload bodies
JustYannicc Jul 4, 2026
9b1d072
perf(ai): stream Gemini prompt responses
JustYannicc Jul 4, 2026
ba721cf
perf(raycast): add guarded form error state helpers
JustYannicc Jul 4, 2026
206864c
perf(commands): avoid rediscovery for metadata updates
JustYannicc Jul 4, 2026
9d15449
fix(renderer): type list detail fragment props
JustYannicc Jul 4, 2026
50300da
perf(extensions): prune fired one-shot timers
JustYannicc Jul 4, 2026
3a2dbc5
test(rendering): cover conditional list virtual rows
JustYannicc Jul 4, 2026
ff3dd2b
perf(whisper): avoid unused local STT file reads
JustYannicc Jul 4, 2026
0fd48da
test(commands): align wave performance harnesses
JustYannicc Jul 4, 2026
0498297
test(runtime): align lifecycle media harnesses
JustYannicc Jul 4, 2026
f91c6fb
fix(validation): restore npm ci for esbuild platform packages
JustYannicc Jul 4, 2026
db49697
fix(validation): make macos liquid glass dependency optional
JustYannicc Jul 4, 2026
8c3dec8
perf(validation): speed root search perf harness
JustYannicc Jul 4, 2026
9b46ca4
fix(validation): typecheck renderer in CI
JustYannicc Jul 4, 2026
e97ef70
perf(validation): skip warm native rebuilds
JustYannicc Jul 4, 2026
39c8ffe
perf(validation): support indexed root search harness
JustYannicc Jul 4, 2026
7eade0d
fix(types): make renderer typecheck clean
JustYannicc Jul 3, 2026
ab6ee8c
fix(i18n): restore Italian parity checks
JustYannicc Jul 3, 2026
61ac6f3
ci(claude): fix review action on fork PRs
JustYannicc Jul 3, 2026
8100474
Merge remote-tracking branch 'refs/remotes/origin/pr/530' into codex/…
JustYannicc Jul 4, 2026
4683dc0
Merge remote-tracking branch 'refs/remotes/origin/pr/531' into codex/…
JustYannicc Jul 4, 2026
0448149
Merge remote-tracking branch 'refs/remotes/origin/pr/532' into codex/…
JustYannicc Jul 4, 2026
d6548bb
Merge remote-tracking branch 'refs/remotes/origin/pr/533' into codex/…
JustYannicc Jul 4, 2026
8719131
Merge remote-tracking branch 'refs/remotes/origin/pr/534' into codex/…
JustYannicc Jul 4, 2026
143cafe
Merge remote-tracking branch 'refs/remotes/origin/pr/535' into codex/…
JustYannicc Jul 4, 2026
ba47b63
Merge remote-tracking branch 'refs/remotes/origin/pr/555' into codex/…
JustYannicc Jul 4, 2026
fc4d48e
Merge remote-tracking branch 'refs/remotes/origin/pr/556' into codex/…
JustYannicc Jul 4, 2026
c710784
Merge remote-tracking branch 'refs/remotes/origin/pr/558' into codex/…
JustYannicc Jul 4, 2026
55817f4
Merge remote-tracking branch 'refs/remotes/origin/pr/572' into codex/…
JustYannicc Jul 4, 2026
3a57564
Merge remote-tracking branch 'refs/remotes/origin/pr/573' into codex/…
JustYannicc Jul 4, 2026
c9dab48
Merge remote-tracking branch 'refs/remotes/origin/pr/575' into codex/…
JustYannicc Jul 4, 2026
7b2e839
Merge remote-tracking branch 'refs/remotes/origin/pr/578' into codex/…
JustYannicc Jul 4, 2026
34a04d4
fix(list): preserve conditional virtual row behavior
JustYannicc Jul 4, 2026
33194c1
perf(search): reuse renderer ranking work
JustYannicc Jul 4, 2026
4c180c6
perf(runtime): reduce menu bar and background churn
JustYannicc Jul 4, 2026
fbe3ece
perf(raycast): reduce runtime hook and registry churn
JustYannicc Jul 4, 2026
6bd8e50
perf(files): reduce main-process search and IPC cost
JustYannicc Jul 4, 2026
d38e957
perf(media): reduce audio and overlay churn
JustYannicc Jul 4, 2026
fc80ea6
perf(startup): reduce renderer and asset load cost
JustYannicc Jul 4, 2026
531a188
test(perf): add search regression budgets
JustYannicc Jul 4, 2026
73b25ec
Merge branch 'codex/perf-wave3-renderer-search' into codex/perf-wave3…
JustYannicc Jul 4, 2026
1411f8b
Merge branch 'codex/perf-wave3-file-index-main' into codex/perf-wave3…
JustYannicc Jul 4, 2026
ca9d081
Merge branch 'codex/perf-wave3-raycast-runtime' into codex/perf-wave3…
JustYannicc Jul 4, 2026
81166b3
Merge branch 'codex/perf-wave3-ai-media-ui-retry' into codex/perf-wav…
JustYannicc Jul 4, 2026
25042f3
Merge branch 'codex/perf-wave3-startup-bundle-assets-pr' into codex/p…
JustYannicc Jul 4, 2026
33d0c68
Merge branch 'codex/perf-wave3-validation-harnesses-retry' into codex…
JustYannicc Jul 4, 2026
206eab8
test(perf): support CommonJS facade harness exports
JustYannicc Jul 4, 2026
83c2a89
fix: clean up main abort listeners
JustYannicc Jul 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ on:

jobs:
claude-review:
# Fork PRs do not receive the OIDC token/secrets required by
# anthropics/claude-code-action on pull_request workflows.
if: github.event.pull_request.head.repo.full_name == github.repository
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
Expand Down Expand Up @@ -41,4 +44,3 @@ jobs:
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options

62 changes: 62 additions & 0 deletions .github/workflows/project-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Project Checks

on:
pull_request:
branches:
- main
push:
branches:
- main
workflow_dispatch:

permissions:
contents: read

concurrency:
group: project-checks-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test-i18n-build:
name: Tests, i18n, and build
runs-on: ubuntu-latest
timeout-minutes: 15
env:
CI: true
ELECTRON_SKIP_BINARY_DOWNLOAD: '1'
SUPERCMD_SKIP_ELECTRON_TESTS: '1'

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm
cache-dependency-path: package-lock.json

- name: Install dependencies without native postinstall scripts
# package.json pins darwin esbuild packages for release packaging; --force lets Ubuntu install the lockfile.
run: npm ci --ignore-scripts --force

- name: Run tests
run: npm test

- name: Run perf regression budgets
run: npm run test:perf:ci

- name: Check i18n
run: npm run check:i18n

- name: Build main process
run: npm run build:main

- name: Typecheck renderer
run: npm run typecheck:renderer

- name: Build renderer
run: npm run build:renderer
14 changes: 10 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 10 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,18 @@
"start:electron": "wait-on dist/main/main.js && cross-env NODE_ENV=development SUPERCMD_OPEN_DEVTOOLS_ON_STARTUP=1 electron .",
"build": "npm run build:main && npm run build:renderer && npm run build:native",
"build:main": "tsc -p tsconfig.main.json && cp src/main/emoji-data.json dist/main/emoji-data.json",
"typecheck:renderer": "tsc -p tsconfig.renderer.json --noEmit --pretty false",
"build:renderer": "vite build",
"measure:launcher-command-list": "node scripts/measure-launcher-command-list-render.mjs",
"measure:renderer-bundle": "node scripts/measure-renderer-bundle.mjs",
"measure:canvas-asset-event-loop": "node scripts/measure-canvas-asset-event-loop.mjs",
"check:i18n": "node scripts/check-i18n.mjs",
"perf:file-search": "node scripts/file-search-perf-harness.mjs",
"test:perf:ci": "cross-env SUPERCMD_PERF_CI=1 SUPERCMD_PERF_REPORT=1 node --test scripts/test-browser-search-performance.mjs scripts/test-file-search-perf-harness.mjs && cross-env SUPERCMD_ROOT_SEARCH_PERF_JSON=1 SUPERCMD_ROOT_SEARCH_PERF_COMMANDS=5000 SUPERCMD_ROOT_SEARCH_PERF_ITERATIONS=3 SUPERCMD_ROOT_SEARCH_PERF_WARMUPS=1 SUPERCMD_ROOT_SEARCH_PERF_OPTIMIZED_MEDIAN_MS=900 SUPERCMD_ROOT_SEARCH_PERF_INDEXED_MEDIAN_MS=350 SUPERCMD_ROOT_SEARCH_PERF_COMPILE_MEDIAN_MS=500 SUPERCMD_ROOT_SEARCH_PERF_INDEXED_SPEEDUP_MIN=1.05 node scripts/test-root-search-perf.mjs",
"test": "node --test 'scripts/test-*.mjs'",
"build:native": "node scripts/build-native.mjs",
"ensure:cross-arch-esbuild": "node scripts/ensure-cross-arch-esbuild.mjs",
"postinstall": "node scripts/ensure-cross-arch-esbuild.mjs && electron-builder install-app-deps",
"postinstall": "node scripts/ensure-macos-runtime-deps.mjs && node scripts/ensure-cross-arch-esbuild.mjs && electron-builder install-app-deps",
"start": "electron .",
"package": "cross-env NODE_ENV=production npm run build && electron-builder",
"package:unsigned": "cross-env NODE_ENV=production CSC_IDENTITY_AUTO_DISCOVERY=false npm run build && electron-builder --mac dmg -c.mac.identity=null -c.mac.notarize=false"
Expand All @@ -42,12 +48,9 @@
},
"dependencies": {
"@aptabase/electron": "^0.3.1",
"@esbuild/darwin-arm64": "0.19.12",
"@esbuild/darwin-x64": "0.19.12",
"@phosphor-icons/react": "^2.1.10",
"@raycast/api": "^1.104.5",
"electron-builder-notarize": "^1.5.2",
"electron-liquid-glass": "^1.1.1",
"electron-updater": "^6.7.3",
"esbuild": "^0.19.12",
"lucide-react": "^0.312.0",
Expand All @@ -57,6 +60,9 @@
"react-dom": "^18.2.0",
"transliteration": "^2.6.1"
},
"optionalDependencies": {
"electron-liquid-glass": "^1.1.1"
},
"build": {
"appId": "com.supercmd.app",
"productName": "SuperCmd",
Expand Down
5 changes: 5 additions & 0 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
allowBuilds:
electron: true
esbuild: true
extract-file-icon: true
node-window-manager: true
106 changes: 106 additions & 0 deletions scripts/bench-ax-bfs-queue.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import Foundation

private struct Node {
let firstChild: Int
let childCount: Int
}

private let depthLimit = 8
private let branching = 3
private var nodes: [Node] = []
private var frontier: [(index: Int, depth: Int)] = [(0, 0)]

nodes.reserveCapacity(9_841)
nodes.append(Node(firstChild: -1, childCount: 0))

var frontierIndex = 0
while frontierIndex < frontier.count {
let (nodeIndex, depth) = frontier[frontierIndex]
frontierIndex += 1
guard depth < depthLimit else { continue }

let firstChild = nodes.count
for _ in 0..<branching {
nodes.append(Node(firstChild: -1, childCount: 0))
frontier.append((nodes.count - 1, depth + 1))
}
nodes[nodeIndex] = Node(firstChild: firstChild, childCount: branching)
}

private let roots = [0, 1, 2].filter { $0 < nodes.count }
private let maxDepth = 8
private let maxElements = 240
private let iterations = 20_000

@inline(never)
private func removeFirstTraversal() -> Int {
var queue = roots.map { ($0, 0) }
var inspected = 0
var checksum = 0

while let (nodeIndex, depth) = queue.first {
queue.removeFirst()
inspected += 1
if inspected > maxElements { break }

checksum &+= nodeIndex &+ depth
if depth >= maxDepth { continue }

let node = nodes[nodeIndex]
if node.childCount > 0 {
for offset in 0..<node.childCount {
queue.append((node.firstChild + offset, depth + 1))
}
}
}
return checksum
}

@inline(never)
private func cursorTraversal() -> Int {
var queue = roots.map { ($0, 0) }
var queueIndex = 0
var inspected = 0
var checksum = 0

while queueIndex < queue.count {
let (nodeIndex, depth) = queue[queueIndex]
queueIndex += 1
inspected += 1
if inspected > maxElements { break }

checksum &+= nodeIndex &+ depth
if depth >= maxDepth { continue }

let node = nodes[nodeIndex]
if node.childCount > 0 {
for offset in 0..<node.childCount {
queue.append((node.firstChild + offset, depth + 1))
}
}
}
return checksum
}

@inline(never)
private func measure(_ label: String, _ block: () -> Int) -> (label: String, ms: Double, checksum: Int) {
var checksum = 0
let start = DispatchTime.now().uptimeNanoseconds
for _ in 0..<iterations {
checksum &+= block()
}
let elapsed = DispatchTime.now().uptimeNanoseconds - start
return (label, Double(elapsed) / 1_000_000.0, checksum)
}

let removeFirstWarmup = removeFirstTraversal()
let cursorWarmup = cursorTraversal()
precondition(removeFirstWarmup == cursorWarmup)

let removeFirst = measure("removeFirst", removeFirstTraversal)
let cursor = measure("cursor", cursorTraversal)

print("nodes=\(nodes.count) roots=\(roots.count) maxDepth=\(maxDepth) maxElements=\(maxElements) iterations=\(iterations)")
print("\(removeFirst.label): \(String(format: "%.2f", removeFirst.ms)) ms checksum=\(removeFirst.checksum)")
print("\(cursor.label): \(String(format: "%.2f", cursor.ms)) ms checksum=\(cursor.checksum)")
print("speedup: \(String(format: "%.2fx", removeFirst.ms / cursor.ms))")
Loading
Loading