Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 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
14a6278
fix(validation): restore npm ci for esbuild platform packages
JustYannicc Jul 4, 2026
6ba173b
fix(validation): make macos liquid glass dependency optional
JustYannicc Jul 4, 2026
a3408dd
perf(validation): speed root search perf harness
JustYannicc Jul 4, 2026
813b457
fix(validation): typecheck renderer in CI
JustYannicc Jul 4, 2026
b4d6edd
perf(validation): skip warm native rebuilds
JustYannicc Jul 4, 2026
500ad65
perf(validation): support indexed root search harness
JustYannicc Jul 4, 2026
6c9a9d2
fix(types): make renderer typecheck clean
JustYannicc Jul 3, 2026
90edc06
fix(i18n): restore Italian parity checks
JustYannicc Jul 3, 2026
cf8675e
ci(claude): fix review action on fork PRs
JustYannicc Jul 3, 2026
b6c6fcd
test: guard package manager parity
JustYannicc Jul 4, 2026
db3907b
perf(renderer): lazy-load locale catalogs
JustYannicc Jul 4, 2026
ba70130
fix: scope Raycast frecency storage
JustYannicc Jul 4, 2026
a549053
perf: stream canvas asset serving
JustYannicc Jul 4, 2026
e5d9551
perf: reuse stale extension command builds
JustYannicc Jul 4, 2026
8d5dc12
ci: speed up validation feedback
JustYannicc Jul 4, 2026
88b7c51
perf(raycast): reduce grid cell selection churn
JustYannicc Jul 4, 2026
528bb32
fix: clear form snapshots on unmount
JustYannicc Jul 4, 2026
d89cd33
fix(raycast): guard registry microtask teardown
JustYannicc Jul 4, 2026
7905622
perf: target extension command refresh
JustYannicc Jul 4, 2026
977dd98
fix: clean up extension spawn lifecycle
JustYannicc Jul 4, 2026
ce93d8d
Fix extension fetch proxy cancellation
JustYannicc Jul 4, 2026
c448044
fix: clean up main abort listeners
JustYannicc Jul 4, 2026
a5e7148
perf: stream cloud media buffers
JustYannicc Jul 4, 2026
a18e78b
fix(renderer): validate Raycast wave4 consolidation
JustYannicc Jul 5, 2026
aac9a64
fix(raycast): guard registry microtask teardown
JustYannicc Jul 4, 2026
0635377
fix(validation): finish consolidated checks
JustYannicc Jul 5, 2026
b4e5dab
fix: align runtime consolidation integration
JustYannicc Jul 5, 2026
0fb756d
Merge PR #530 perf(runtime): reduce extension and menubar churn
JustYannicc Jul 5, 2026
01eab4b
Merge PR #531 perf(ai): batch streaming and status updates
JustYannicc Jul 5, 2026
38fe371
Merge PR #532 fix(validation): restore project checks
JustYannicc Jul 5, 2026
1adbb01
Merge PR #533 perf(renderer): cache icons and virtualize launcher sur…
JustYannicc Jul 5, 2026
81814e6
Merge PR #534 perf(mac): reduce native polling and async IO stalls
JustYannicc Jul 5, 2026
b34c6fb
Merge PR #535 perf(search): reduce indexing and ranking overhead
JustYannicc Jul 5, 2026
bef5071
Merge PR #555 perf(raycast): reduce renderer hook and registry churn
JustYannicc Jul 5, 2026
36d7f28
Merge PR #556 perf(ai): reduce streaming and native media overhead
JustYannicc Jul 5, 2026
d3e0bcc
Merge PR #558 perf(runtime): reduce extension lifecycle and icon churn
JustYannicc Jul 5, 2026
6da8e78
Merge PR #572 perf(renderer): reduce UI runtime churn
JustYannicc Jul 5, 2026
39472de
Merge PR #573 perf(commands): reduce command and file refresh overhead
JustYannicc Jul 5, 2026
7e53c40
Merge PR #575 perf(runtime): reduce lifecycle and media churn
JustYannicc Jul 5, 2026
3e59927
Merge PR #599 perf(renderer): consolidate Raycast runtime hot paths
JustYannicc Jul 5, 2026
6c8280f
Merge PR #600 fix(validation): consolidate project checks
JustYannicc Jul 5, 2026
62880d2
Merge PR #601 perf(runtime): consolidate extension lifecycle and medi…
JustYannicc Jul 5, 2026
ac90ce4
chore: finalize performance integration stack
JustYannicc Jul 5, 2026
d667091
perf(lifecycle): scope extension timer builtins
JustYannicc Jul 5, 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

61 changes: 61 additions & 0 deletions .github/workflows/project-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
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
run: npm ci --ignore-scripts

- 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: Run unit tests
run: npm run test:ci

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

- name: Build renderer
run: npm run build:renderer
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
node_modules/
pnpm-lock.yaml
dist/
out/
.DS_Store
Expand All @@ -11,4 +12,4 @@ extensions/*

**/.build/*
.gstack/
**/AeroSpace-main/**
**/AeroSpace-main/**
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.

22 changes: 17 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,31 @@
"homepage": "https://supercmd.sh",
"main": "dist/main/main.js",
"repository": "https://github.com/SuperCmdLabs/SuperCmd",
"packageManager": "npm@11.12.1",
"scripts": {
"dev": "npm run build:main && concurrently \"npm run watch:main\" \"npm run dev:renderer\" \"npm run start:electron\"",
"watch:main": "tsc -p tsconfig.main.json --watch",
"dev:renderer": "vite",
"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",
"prebuild:main": "node scripts/check-package-manager-parity.mjs",
"build:main": "tsc -p tsconfig.main.json && cp src/main/emoji-data.json dist/main/emoji-data.json",
"pretypecheck:renderer": "node scripts/check-package-manager-parity.mjs",
"typecheck:renderer": "tsc -p tsconfig.renderer.json --noEmit --pretty false",
"prebuild:renderer": "node scripts/check-package-manager-parity.mjs",
"build:renderer": "vite build",
"measure:launcher-command-list": "node scripts/measure-launcher-command-list-render.mjs",
"precheck:i18n": "node scripts/check-package-manager-parity.mjs",
"check:i18n": "node scripts/check-i18n.mjs",
"test": "node --test 'scripts/test-*.mjs'",
"check:package-manager": "node scripts/check-package-manager-parity.mjs",
"perf:file-search": "node scripts/file-search-perf-harness.mjs",
"test:ci": "node scripts/run-node-tests.mjs --exclude-perf",
"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",
"pretest": "node scripts/check-package-manager-parity.mjs",
"test": "node scripts/run-node-tests.mjs --exclude-perf",
"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 +54,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 +66,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