Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
5442a5d
refactor(main): split index.ts by domain into ipc/, sessions/, storag…
Juliusolsson05 Apr 23, 2026
8b249d4
refactor(preload): split index.ts by API domain into preload/api/*
Juliusolsson05 Apr 23, 2026
6c6abf7
refactor(renderer): lift flat-root files into features/, ui/, lib/
Juliusolsson05 Apr 23, 2026
4d4808b
refactor(renderer): rename tiles/ → workspace/ with tile-tree/ subdir
Juliusolsson05 Apr 23, 2026
cdf0baa
refactor(workspace): extract pure modules out of workspaceStore god-file
Juliusolsson05 Apr 23, 2026
af6fd9d
refactor(renderer): finish tree reshape — code/, components/, PathPic…
Juliusolsson05 Apr 23, 2026
77cf73f
refactor(feed): move feed/ into features/feed/, extract MarkerRow, sc…
Juliusolsson05 Apr 23, 2026
c10360e
refactor(workspace): decompose useWorkspace into sub-hooks under hook/
Juliusolsson05 Apr 23, 2026
5953455
refactor(workspace): workspaceStore.ts → 46-line re-export shell
Juliusolsson05 Apr 23, 2026
e78b856
refactor(imports): switch cross-domain imports to path aliases (@shar…
Juliusolsson05 Apr 23, 2026
27a28cd
fix(workspace): memoize refs factory to stop IPC sub-hook thrash
Juliusolsson05 Apr 23, 2026
a199b78
refactor(build): fix node/renderer tsc boundary, delete dead provider…
Juliusolsson05 Apr 23, 2026
e221260
refactor(feed): wire Feed.tsx to extracted context/types/helpers/scro…
Juliusolsson05 Apr 23, 2026
342acce
refactor(feed): extract markdown renderers into ui/markdown/
Juliusolsson05 Apr 23, 2026
c813d16
refactor(feed): extract semantic-streaming components into ui/semantic/
Juliusolsson05 Apr 23, 2026
ac74c72
refactor(feed): extract row components into ui/rows/
Juliusolsson05 Apr 23, 2026
614feaa
fix(main): restore relative preload path — not an import
Juliusolsson05 Apr 23, 2026
6873387
refactor imports to domain aliases
Juliusolsson05 Apr 23, 2026
ae87af0
feat(debug): add Save Debug Logs palette command
Juliusolsson05 Apr 23, 2026
6faf7ee
refactor(renderer): move App.tsx + main.tsx into app/
Juliusolsson05 Apr 23, 2026
f896b25
refactor(renderer): rename state/ -> app-state/
Juliusolsson05 Apr 23, 2026
4b3772c
refactor(tile-leaf): extract pure helpers into TileLeaf/
Juliusolsson05 Apr 23, 2026
3606bbc
refactor(tile-leaf): extract UI subcomponents into TileLeaf/
Juliusolsson05 Apr 23, 2026
934acf6
refactor(tile-leaf): extract hooks into TileLeaf/use*
Juliusolsson05 Apr 23, 2026
91f3ec7
refactor(tile-leaf): extract ComposerInput + useComposerKeybinds
Juliusolsson05 Apr 23, 2026
9e1a367
refactor(repo): move submodules into packages/ and vendor/
Juliusolsson05 Apr 23, 2026
c4ca59d
chore(submodules): bump agent-transcript-parser + claude-code-headless
Juliusolsson05 Apr 23, 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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ temp.txt
# Reference material we read for understanding CC's internals — not part
# of cc-shell, intentionally left untracked. Live next to the project as
# a developer's local checkout.
claude-code-src/
vendor/claude-code-src/
file-dumps/
.proxy-testing/

Expand Down
8 changes: 4 additions & 4 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
[submodule "codex-src"]
path = codex-src
path = vendor/codex-src
url = https://github.com/openai/codex.git
[submodule "claude-code-headless"]
path = claude-code-headless
path = packages/claude-code-headless
url = https://github.com/Juliusolsson05/claude-code-headless.git
[submodule "codex-headless"]
path = codex-headless
path = packages/codex-headless
url = https://github.com/Juliusolsson05/codex-headless.git
[submodule "agent-transcript-parser"]
path = agent-transcript-parser
path = packages/agent-transcript-parser
url = git@github-personal:Juliusolsson05/agent-transcript-parser.git
1 change: 0 additions & 1 deletion agent-transcript-parser
Submodule agent-transcript-parser deleted from 1e680d
1 change: 0 additions & 1 deletion claude-code-headless
Submodule claude-code-headless deleted from 9c0892
28 changes: 22 additions & 6 deletions electron.vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,33 @@ import { resolve } from 'path'
// Only main + preload use these (they import Node APIs like
// EventEmitter, chokidar, fs). The renderer CANNOT import them —
// Vite would try to bundle Node modules for the browser and fail.
const headlessAlias = {
'claude-code-headless': resolve(__dirname, 'claude-code-headless/src/index.ts'),
'codex-headless': resolve(__dirname, 'codex-headless/src/index.ts'),
'agent-transcript-parser': resolve(__dirname, 'agent-transcript-parser/src/index.ts'),
const headlessAlias = [
{ find: /^claude-code-headless\/(.+)$/, replacement: `${resolve(__dirname, 'packages/claude-code-headless/src')}/$1` },
{ find: 'claude-code-headless', replacement: resolve(__dirname, 'packages/claude-code-headless/src/index.ts') },
{ find: /^codex-headless\/(.+)$/, replacement: `${resolve(__dirname, 'packages/codex-headless/src')}/$1` },
{ find: 'codex-headless', replacement: resolve(__dirname, 'packages/codex-headless/src/index.ts') },
{ find: /^agent-transcript-parser\/(.+)$/, replacement: `${resolve(__dirname, 'packages/agent-transcript-parser/src')}/$1` },
{ find: 'agent-transcript-parser', replacement: resolve(__dirname, 'packages/agent-transcript-parser/src/index.ts') },
]

// Project-wide absolute-import aliases. MUST match tsconfig.node.json
// + tsconfig.web.json `paths` — the two resolvers must agree or tsc
// will green-light an import the runtime can't load. Keep the alias
// names and targets in sync across all three configs.
const projectAlias = {
'@main': resolve(__dirname, 'src/main'),
'@preload': resolve(__dirname, 'src/preload'),
'@renderer': resolve(__dirname, 'src/renderer/src'),
'@shared': resolve(__dirname, 'src/shared'),
'@providers': resolve(__dirname, 'src/providers'),
}

const headlessExclude = ['claude-code-headless', 'codex-headless', 'agent-transcript-parser']

export default defineConfig({
main: {
plugins: [externalizeDepsPlugin({ exclude: headlessExclude })],
resolve: { alias: headlessAlias },
resolve: { alias: [...headlessAlias, ...Object.entries(projectAlias).map(([find, replacement]) => ({ find, replacement }))] },
build: {
rollupOptions: {
input: resolve(__dirname, 'src/main/index.ts')
Expand All @@ -27,7 +42,7 @@ export default defineConfig({
},
preload: {
plugins: [externalizeDepsPlugin({ exclude: headlessExclude })],
resolve: { alias: headlessAlias },
resolve: { alias: [...headlessAlias, ...Object.entries(projectAlias).map(([find, replacement]) => ({ find, replacement }))] },
build: {
rollupOptions: {
input: resolve(__dirname, 'src/preload/index.ts')
Expand All @@ -36,6 +51,7 @@ export default defineConfig({
},
renderer: {
root: resolve(__dirname, 'src/renderer'),
resolve: { alias: [...headlessAlias, ...Object.entries(projectAlias).map(([find, replacement]) => ({ find, replacement }))] },
build: {
rollupOptions: {
input: resolve(__dirname, 'src/renderer/index.html')
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@
"testing:rendering": "npm run testing:rendering:build && electron testing/rendering/out/main/main.js",
"testing:rendering:build": "electron-vite build --config testing/rendering/electron.vite.config.ts",
"testing:rendering:preview": "electron testing/rendering/out/main/main.js",
"proxy-demo-bootstrap": "npm --prefix claude-code-headless run proxy-test-bootstrap",
"proxy-demo": "npm --prefix claude-code-headless run build && electron experiments/claude-proxy-stream-app/main.mjs",
"proxy-demo-bootstrap": "npm --prefix packages/claude-code-headless run proxy-test-bootstrap",
"proxy-demo": "npm --prefix packages/claude-code-headless run build && electron experiments/claude-proxy-stream-app/main.mjs",
"postinstall": "electron-rebuild -f -w node-pty"
},
"dependencies": {
"@xterm/addon-fit": "^0.11.0",
"@xterm/headless": "^5.5.0",
"@xterm/xterm": "^6.0.0",
"agent-transcript-parser": "file:./agent-transcript-parser",
"agent-transcript-parser": "file:./packages/agent-transcript-parser",
"chokidar": "^5.0.0",
"highlight.js": "^11.11.1",
"monaco-editor": "^0.52.2",
Expand Down
1 change: 1 addition & 0 deletions packages/agent-transcript-parser
Submodule agent-transcript-parser added at 5b6e1e
1 change: 1 addition & 0 deletions packages/claude-code-headless
Submodule claude-code-headless added at ae3200
2 changes: 1 addition & 1 deletion src/main/ghostJournal.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Disk writer for ghost entries.
//
// Ghost entries are minted, updated, superseded, and orphaned in the
// renderer (via agent-transcript-parser + `src/renderer/src/tiles/ghosts.ts`).
// renderer (via agent-transcript-parser + `src/renderer/src/workspace/ghosts.ts`).
// This file handles the durable side: append each produced ghost to
// a cc-shell-owned JSONL file so the live view survives a crash, a
// window reload, or an Electron restart.
Expand Down
Loading