Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
598 commits
Select commit Hold shift + click to select a range
0431e64
Assert wildcard If-Match with If-None-Match interplay
cursoragent Feb 10, 2026
aa455d1
Allow optional spaces in Range header parsing
cursoragent Feb 10, 2026
94e661f
Assert spaced Range headers in smoke coverage
cursoragent Feb 10, 2026
b0482d8
Document tolerant whitespace in Range header parsing
cursoragent Feb 10, 2026
1acc3a5
Cover non-number runtime option rejection paths
cursoragent Feb 10, 2026
198621a
Cover whitespace-only launchCwd startup rejection
cursoragent Feb 10, 2026
3eb0abb
Clarify non-empty cwd requirement in docs
cursoragent Feb 10, 2026
965a21f
Cover wildcard If-Match support in array headers
cursoragent Feb 10, 2026
6b20a47
Assert HEAD wildcard If-Match and If-None-Match behavior
cursoragent Feb 10, 2026
b520aa6
Cover null runtime auth token startup rejection
cursoragent Feb 10, 2026
482aeb7
Cover trimmed comma-separated If-Match tokens
cursoragent Feb 10, 2026
738a1de
Assert mismatched If-None-Match keeps ranged 206 flow
cursoragent Feb 10, 2026
d90ec00
Assert stale ranged If-Modified-Since returns partial content
cursoragent Feb 10, 2026
fb6a083
Cover null launchCwd startup rejection
cursoragent Feb 10, 2026
8a424f2
Cover oversized suffix range clamping semantics
cursoragent Feb 10, 2026
3180b28
Assert oversized suffix range fallback in smoke
cursoragent Feb 10, 2026
0d7afe0
Document oversized suffix range normalization behavior
cursoragent Feb 10, 2026
741c02e
Refactor first-header extraction across conditional helpers
cursoragent Feb 10, 2026
78eea79
Assert current If-Unmodified-Since with If-None-Match
cursoragent Feb 10, 2026
933cc42
Assert ranged If-Unmodified-Since and If-None-Match behavior
cursoragent Feb 10, 2026
eef8485
Cover null runtime port startup rejection
cursoragent Feb 10, 2026
c9b921c
Clarify valid CLI port value range in docs
cursoragent Feb 10, 2026
c557259
Cover zero explicit backend and web port rejection
cursoragent Feb 10, 2026
de10dde
Cover zero environment backend and web port rejection
cursoragent Feb 10, 2026
1929660
Cover tab-separated Range header whitespace tolerance
cursoragent Feb 10, 2026
2a88b31
Assert tab-spaced Range headers in smoke coverage
cursoragent Feb 10, 2026
a1021ec
Cover empty token query rejection for auth runtime
cursoragent Feb 10, 2026
288c773
Assert empty websocket token rejection in smoke
cursoragent Feb 10, 2026
fa4089f
Cover tabbed environment port trimming semantics
cursoragent Feb 10, 2026
4627c42
Cover trimmed uppercase T3_NO_OPEN truthy parsing
cursoragent Feb 10, 2026
8364f8a
Cover trimmed uppercase T3_NO_OPEN falsey parsing
cursoragent Feb 10, 2026
0e77533
Document full T3_NO_OPEN boolean token support
cursoragent Feb 10, 2026
b16ca1c
Cover falsey T3_NO_OPEN environment parsing
cursoragent Feb 10, 2026
8951ec7
Cover whitespace token query rejection for auth runtime
cursoragent Feb 10, 2026
aa016aa
Assert whitespace websocket token rejection in smoke
cursoragent Feb 10, 2026
c1bec99
Cover unknown T3_NO_OPEN value handling
cursoragent Feb 10, 2026
cd32713
Cover whitespace-padded suffix and open-ended ranges
cursoragent Feb 10, 2026
7f29e39
Reject duplicate websocket token parameters
cursoragent Feb 10, 2026
e6b40ac
Document duplicate-token websocket auth rejection
cursoragent Feb 10, 2026
8edbf85
Cover duplicate-token unauthorized non-eviction behavior
cursoragent Feb 10, 2026
7c070b6
Assert duplicate-token auth attempts do not evict active client
cursoragent Feb 10, 2026
0c69ed5
Cover mixed-case spaced suffix range parsing
cursoragent Feb 10, 2026
a83aec3
Cover malformed whitespace-only suffix range rejection
cursoragent Feb 10, 2026
d68b1bb
Assert conditional 304 content-type header stability
cursoragent Feb 10, 2026
1441435
Verify structured unknown-method websocket errors in smoke test
cursoragent Feb 10, 2026
76be201
Reject websocket connections on non-root paths
cursoragent Feb 10, 2026
1b65041
Document root-path websocket connection requirement
cursoragent Feb 10, 2026
825a48e
Verify active-client replacement behavior in smoke test
cursoragent Feb 10, 2026
ec7eb7b
Exercise todos websocket CRUD flow in smoke test
cursoragent Feb 10, 2026
6606bd4
Validate terminal.run RPC success in smoke test
cursoragent Feb 10, 2026
8e88da9
Assert app.bootstrap payload contract in smoke test
cursoragent Feb 10, 2026
6098003
Require strict websocket query params for authorization
cursoragent Feb 10, 2026
0d6e84f
Cover extra-query unauthorized connection non-eviction
cursoragent Feb 10, 2026
fae8818
Exercise agent event streaming over websocket in smoke test
cursoragent Feb 10, 2026
90ec32f
Cover providers.listSessions RPC in smoke test
cursoragent Feb 10, 2026
90da976
Assert structured validation errors in websocket smoke flow
cursoragent Feb 10, 2026
684388f
Cover no-auth unexpected-query unauthorized non-eviction
cursoragent Feb 10, 2026
64152e8
Exercise agent.kill and agent.write RPCs in smoke test
cursoragent Feb 10, 2026
8da9a32
Assert invalid providers payload errors in smoke test
cursoragent Feb 10, 2026
1488f40
Cover invalid todos and shell cwd payload errors in smoke
cursoragent Feb 10, 2026
397edfe
Assert terminal.run timeout semantics in smoke test
cursoragent Feb 10, 2026
b6b2045
Cover binary websocket request payloads in smoke test
cursoragent Feb 10, 2026
92ca009
Cover no-auth token-query websocket rejection
cursoragent Feb 10, 2026
4cb1055
Document websocket replacement close code semantics
cursoragent Feb 10, 2026
c4b7956
Assert malformed websocket tolerance and unknown agent controls
cursoragent Feb 10, 2026
f997cc3
Assert listSessions reflects bootstrap session when startup succeeds
cursoragent Feb 10, 2026
9925328
Harden smoke websocket helpers for close/error handling
cursoragent Feb 10, 2026
d8b6299
Cover arraybuffer smoke requests and replacement close reasons
cursoragent Feb 10, 2026
dda8abb
Document websocket replacement close reason
cursoragent Feb 10, 2026
503e6d8
Assert unauthorized websocket close reason semantics
cursoragent Feb 10, 2026
cd2da30
Document unauthorized websocket close semantics
cursoragent Feb 10, 2026
c30a9e3
Assert websocket close reasons in smoke authorization checks
cursoragent Feb 10, 2026
30cfb90
Cover buffer websocket request payloads in smoke test
cursoragent Feb 10, 2026
2726938
Assert unauthorized close reasons in no-auth websocket rejections
cursoragent Feb 10, 2026
775c5d7
Assert unauthorized close reasons across auth token rejection cases
cursoragent Feb 10, 2026
7e2bbaa
Assert unauthorized close reasons in non-eviction scenarios
cursoragent Feb 10, 2026
3cbec3a
Introduce shared websocket close code and reason constants
cursoragent Feb 10, 2026
d9b539a
Use shared websocket close constants in runtime tests
cursoragent Feb 10, 2026
f7ae3e8
Centralize websocket close constants in smoke harness
cursoragent Feb 10, 2026
4966661
Test shared websocket close metadata constants
cursoragent Feb 10, 2026
d5f970c
Surface websocket close metadata in renderer connection errors
cursoragent Feb 10, 2026
43173d1
Expand renderer websocket close metadata test coverage
cursoragent Feb 10, 2026
beb2688
Document renderer websocket close-metadata diagnostics
cursoragent Feb 10, 2026
324b943
Improve renderer request disconnect errors with close metadata
cursoragent Feb 10, 2026
9cef7b7
Document renderer in-flight disconnect diagnostics
cursoragent Feb 10, 2026
c183380
Cover renderer websocket close-metadata fallback branches
cursoragent Feb 10, 2026
273ac4b
Cover renderer close code-only fallback messaging
cursoragent Feb 10, 2026
30c19f0
Surface reason-only websocket close diagnostics in renderer
cursoragent Feb 10, 2026
4633e3f
Cover renderer reason-only close metadata mappings
cursoragent Feb 10, 2026
0fb1da8
Cover renderer reconnection after unauthorized and replacement closes
cursoragent Feb 10, 2026
5b81ceb
Cover renderer reconnect after unauthorized pending-request disconnect
cursoragent Feb 10, 2026
7c423d4
Cover concurrent pending request rejection on unauthorized disconnect
cursoragent Feb 10, 2026
73f2b3e
Handle websocket error events for pending renderer requests
cursoragent Feb 10, 2026
dc60bdb
Document renderer websocket error-event request failures
cursoragent Feb 10, 2026
f3a5077
Ignore stale websocket events after renderer reconnect
cursoragent Feb 10, 2026
166e11c
Document stale websocket event isolation after reconnect
cursoragent Feb 10, 2026
091f9f2
Report websocket open error details in renderer connect failures
cursoragent Feb 10, 2026
9598488
Document renderer websocket connect error detail reporting
cursoragent Feb 10, 2026
124cd5e
Cover renderer stale-error isolation and generic error fallback
cursoragent Feb 10, 2026
4a5c2bf
Cover concurrent pending request rejection on websocket error
cursoragent Feb 10, 2026
b2d7c3e
Cover renderer reconnect after idle websocket error
cursoragent Feb 10, 2026
5323a13
Document renderer auto-reconnect after close and error disconnects
cursoragent Feb 10, 2026
bb9804c
Cover stale websocket message isolation after renderer reconnect
cursoragent Feb 10, 2026
ebfd405
Cover stale provider event isolation after renderer reconnect
cursoragent Feb 10, 2026
817541c
Cover stale agent event isolation after renderer reconnect
cursoragent Feb 10, 2026
10bb74b
Clarify stale provider and agent stream isolation docs
cursoragent Feb 10, 2026
136570c
Reject duplicate identical websocket token parameters
cursoragent Feb 10, 2026
f831e3b
Clarify duplicate-token rejection includes identical values
cursoragent Feb 10, 2026
995fcea
Cover non-eviction for duplicate identical token auth attempts
cursoragent Feb 10, 2026
b1c96a5
Cover auth-mode missing-token extra-query websocket rejection
cursoragent Feb 10, 2026
3421e53
Cover renderer recovery after transient websocket send failures
cursoragent Feb 10, 2026
fbd5562
Reset renderer websocket after request send failures
cursoragent Feb 10, 2026
706fa19
Document renderer websocket reset after send failures
cursoragent Feb 10, 2026
068093c
Cover auth token key case-sensitivity websocket rejection
cursoragent Feb 10, 2026
c7e7775
Document lowercase token query key requirement
cursoragent Feb 10, 2026
be8fccb
Deduplicate smoke auth token query encoding
cursoragent Feb 10, 2026
ef5ab36
Cover wrong-token-key unauthorized non-eviction behavior
cursoragent Feb 10, 2026
f048627
Cover close reason precedence in renderer websocket diagnostics
cursoragent Feb 10, 2026
ed6f58a
Cover no-auth wrong-token-key unauthorized non-eviction
cursoragent Feb 10, 2026
7df0b66
Cover pre-open close code precedence in renderer diagnostics
cursoragent Feb 10, 2026
dfd11e6
Cover disconnect close code precedence in renderer diagnostics
cursoragent Feb 10, 2026
0302f61
Guard websocket close metadata uniqueness in contracts tests
cursoragent Feb 10, 2026
1990e7b
Surface nested websocket error messages in renderer diagnostics
cursoragent Feb 10, 2026
0705246
Document nested websocket error detail reporting
cursoragent Feb 10, 2026
c9c7074
Reject all pending renderer requests after websocket send failure
cursoragent Feb 10, 2026
52f9acb
Document pending request rejection on websocket send failures
cursoragent Feb 10, 2026
7298c6c
Trim websocket error messages in renderer diagnostics
cursoragent Feb 10, 2026
a5aae62
Surface websocket constructor failures in renderer connect errors
cursoragent Feb 10, 2026
73794df
Document constructor failure diagnostics for websocket connect
cursoragent Feb 10, 2026
90f6d84
Cover renderer constructor error message normalization edge cases
cursoragent Feb 10, 2026
3cab8e6
Cover wrong-path unauthorized non-eviction behavior
cursoragent Feb 10, 2026
d05ba70
Cover no-auth wrong-path unauthorized non-eviction
cursoragent Feb 10, 2026
539258d
Normalize websocket close metadata in renderer diagnostics
cursoragent Feb 10, 2026
436a2b8
Document renderer close metadata normalization
cursoragent Feb 10, 2026
8b92651
Support string websocket error payload diagnostics in renderer
cursoragent Feb 10, 2026
a4069fb
Document string websocket error payload diagnostics
cursoragent Feb 10, 2026
cbd4ba0
Surface non-Error send failure details in renderer requests
cursoragent Feb 10, 2026
bf82632
Document detailed send-failure request diagnostics
cursoragent Feb 10, 2026
39d0a1f
Cover non-integer websocket close code normalization in renderer
cursoragent Feb 10, 2026
9d4acd4
Cover string send-failure propagation to pending renderer requests
cursoragent Feb 10, 2026
2af6a90
Expand websocket contract schema validation coverage
cursoragent Feb 10, 2026
22c6449
Add websocket contract guards for empty requests and hello version
cursoragent Feb 10, 2026
dd9cee8
Support ArrayBufferView websocket message decoding in renderer
cursoragent Feb 10, 2026
f16a7c3
Document renderer websocket ArrayBufferView decode support
cursoragent Feb 10, 2026
5b48034
Tighten websocket response schema result and error invariants
cursoragent Feb 10, 2026
95a31b7
Cover sliced Uint8Array websocket message decoding in renderer
cursoragent Feb 10, 2026
1df8e44
Cover dataview and sliced uint8 websocket request payloads
cursoragent Feb 10, 2026
964390d
Cover renderer resilience to invalid ws response envelope shapes
cursoragent Feb 10, 2026
38f792c
Cover nested string websocket error payload diagnostics in renderer
cursoragent Feb 10, 2026
37be291
Cover sliced DataView websocket request payloads
cursoragent Feb 10, 2026
e49b33b
Cover trimmed generic close reason diagnostics in renderer
cursoragent Feb 10, 2026
00879b3
Support deep nested websocket error payload diagnostics
cursoragent Feb 10, 2026
07a775c
Cover nested and fallback send-failure diagnostics in renderer
cursoragent Feb 10, 2026
ec402cf
Cover cyclic error payload fallback safety in renderer diagnostics
cursoragent Feb 10, 2026
1382c94
Document safe fallback for malformed websocket error payloads
cursoragent Feb 10, 2026
6ea0b04
Broaden renderer nested error extraction depth coverage
cursoragent Feb 10, 2026
44b145e
Document bounded-depth websocket diagnostics fallback
cursoragent Feb 10, 2026
634b11d
Support cause-chain websocket diagnostics extraction in renderer
cursoragent Feb 10, 2026
e4b842b
Document cause-chain websocket diagnostics extraction
cursoragent Feb 10, 2026
95b1a45
Cover over-depth cause-chain fallback in renderer diagnostics
cursoragent Feb 10, 2026
4b25e84
Assert null RPC results for void agent methods in smoke tests
cursoragent Feb 10, 2026
2a08d8e
Normalize undefined runtime success results to null
cursoragent Feb 10, 2026
ffff14e
Document stable result field in runtime success responses
cursoragent Feb 10, 2026
a7296d2
Validate runtime websocket test messages against contracts schema
cursoragent Feb 10, 2026
555f080
Harden smoke websocket parsing with envelope validation
cursoragent Feb 10, 2026
0d88eae
Validate outbound runtime websocket envelopes before send
cursoragent Feb 10, 2026
5bfbe96
Validate renderer websocket event payload shapes before dispatch
cursoragent Feb 10, 2026
12c03c6
Document renderer validation of websocket event payloads
cursoragent Feb 10, 2026
75b853a
Assert null agent void RPC results in runtime server tests
cursoragent Feb 10, 2026
8313d3c
Enforce typed websocket event payload schemas in contracts
cursoragent Feb 10, 2026
fcd4bd5
Tighten smoke websocket event envelope parsing
cursoragent Feb 10, 2026
c93cf95
Type runtime event fanout by websocket channel contracts
cursoragent Feb 10, 2026
32e0f58
Document typed websocket event payload envelopes
cursoragent Feb 10, 2026
dc4e46e
Enforce strict websocket envelope object schemas
cursoragent Feb 10, 2026
2642ce3
Document strict websocket envelope field handling
cursoragent Feb 10, 2026
f28015c
Ignore malformed extra-field websocket requests safely
cursoragent Feb 10, 2026
29b0731
Expand strict websocket schema tests for event and error keys
cursoragent Feb 10, 2026
730e30a
Make smoke parser enforce strict websocket top-level keys
cursoragent Feb 10, 2026
0ba9932
Cover strict-invalid websocket envelopes in renderer adapter tests
cursoragent Feb 10, 2026
8d84fdc
Bound websocket request id and method lengths in contracts
cursoragent Feb 10, 2026
8dd0ec5
Document websocket request id and method length bounds
cursoragent Feb 10, 2026
6ad9bda
Cover overlong websocket request envelopes in runtime and smoke
cursoragent Feb 10, 2026
ff83417
Use websocket length constants in runtime malformed-request tests
cursoragent Feb 10, 2026
c97eccb
Align smoke parser response id bounds with websocket contracts
cursoragent Feb 10, 2026
e83a163
Test renderer ignores overlong websocket response ids
cursoragent Feb 10, 2026
0063db3
Document websocket request and method 256-char limits
cursoragent Feb 10, 2026
21b1681
Validate critical renderer RPC payloads before resolving responses
cursoragent Feb 10, 2026
511dcb7
Document renderer RPC payload validation safeguards
cursoragent Feb 10, 2026
7498762
Expand renderer rejection coverage for malformed RPC success payloads
cursoragent Feb 10, 2026
65b85a9
Add renderer malformed-success coverage for spawn turn and shell RPCs
cursoragent Feb 10, 2026
a8d7b13
Await async runtime method results before schema validation
cursoragent Feb 10, 2026
807676a
Expand app bootstrap and health schema regression tests
cursoragent Feb 10, 2026
e6dcffe
Resolve contracts imports from source exports in workspace
cursoragent Feb 10, 2026
f07aed6
Use shared app and session schemas in renderer RPC parsing
cursoragent Feb 10, 2026
bce4b2a
Document shared runtime and renderer success payload validation
cursoragent Feb 10, 2026
00896ff
Remove redundant renderer event payload re-validation
cursoragent Feb 10, 2026
0a877b5
Share dialogs pick-folder result schema across runtime and renderer
cursoragent Feb 10, 2026
f57cff5
Document dialogs and agent coverage in renderer payload validation
cursoragent Feb 10, 2026
5d13d3c
Cover max-length websocket request id boundaries end-to-end
cursoragent Feb 10, 2026
8afca70
Make app bootstrap and health result schemas strict
cursoragent Feb 10, 2026
d8df4db
Use shared websocket id bound constant in renderer tests
cursoragent Feb 10, 2026
6b2bd27
Cover max-length unknown websocket method errors end-to-end
cursoragent Feb 10, 2026
6edbcff
Document over-limit websocket request handling semantics
cursoragent Feb 10, 2026
a124fd9
Add malformed payload coverage for todo add and provider void RPCs
cursoragent Feb 10, 2026
2f1eb3d
Test strict app payload unexpected-field rejection in renderer
cursoragent Feb 10, 2026
2638534
Make core contract object schemas strict
cursoragent Feb 10, 2026
2cf291e
Document strict core transport contract object semantics
cursoragent Feb 10, 2026
170460f
Bound websocket error field sizes and sanitize runtime errors
cursoragent Feb 10, 2026
3b46508
Document bounded websocket error envelope semantics
cursoragent Feb 10, 2026
ebd984d
Share editor and shell-open input schemas in contracts
cursoragent Feb 10, 2026
a59108c
Share agent.write input schema across runtime and contracts
cursoragent Feb 10, 2026
c6d7efc
Cover renderer handling of overlong websocket error responses
cursoragent Feb 10, 2026
6e3d048
Summarize oversized filesystem paths in runtime error messages
cursoragent Feb 10, 2026
2071e98
Reject blank websocket ids methods and error fields
cursoragent Feb 10, 2026
48fdeab
Document nonblank websocket field requirements
cursoragent Feb 10, 2026
b0113d0
Expand renderer strict nested payload field rejection coverage
cursoragent Feb 10, 2026
dd02660
Require non-empty session ids for agent event payloads
cursoragent Feb 10, 2026
e0a9865
Reject empty agent session ids in websocket event envelopes
cursoragent Feb 10, 2026
2462a90
Add canonical websocket method list and runtime coverage test
cursoragent Feb 10, 2026
9115604
Use shared websocket method schema for runtime dispatch
cursoragent Feb 10, 2026
669e960
Document shared websocket method registry and coverage
cursoragent Feb 10, 2026
e2cb297
Extract process and todo runtime services into shared package
cursoragent Feb 10, 2026
1bf5a4e
Add runtime-core tests for process and todo services
cursoragent Feb 10, 2026
115367d
Document runtime-core shared service package in repo guides
cursoragent Feb 10, 2026
98d11e1
Route provider manager through shared runtime-core package
cursoragent Feb 10, 2026
c277852
Enforce t3 runtime service boundary through runtime-core
cursoragent Feb 10, 2026
97296d4
Document provider manager in shared runtime-core package role
cursoragent Feb 10, 2026
106f555
Move codex app-server manager implementation into runtime-core
cursoragent Feb 10, 2026
e67d936
Update docs for runtime-core codex and provider ownership
cursoragent Feb 10, 2026
d6d3e69
Add desktop compatibility-surface guard tests
cursoragent Feb 10, 2026
5a963a6
Add runtime-core architecture boundary regression tests
cursoragent Feb 10, 2026
39fb56b
Expand t3 architecture guard to all runtime source files
cursoragent Feb 10, 2026
8c74af6
Prune obsolete desktop and t3 direct dependencies
cursoragent Feb 10, 2026
f2cd81e
Remove desktop compatibility package after runtime-core migration
cursoragent Feb 10, 2026
350f6bc
Add fake codex integration coverage for provider lifecycle RPCs
cursoragent Feb 10, 2026
2b5fc52
Cover provider approval-response flow with fake codex app-server
cursoragent Feb 10, 2026
0d9f9d1
Assert legacy desktop workspace package remains removed
cursoragent Feb 10, 2026
30be248
Add runtime-core provider lifecycle integration test with fake codex
cursoragent Feb 10, 2026
ef0c62d
Document runtime-core as sole runtime implementation source
cursoragent Feb 10, 2026
796848d
Test bootstrap success path with fake codex runtime
cursoragent Feb 10, 2026
54aec2a
Use fake codex in smoke tests and cover provider happy-path flows
cursoragent Feb 10, 2026
3db534f
Tighten smoke bootstrap expectations under fake codex runtime
cursoragent Feb 10, 2026
ef33141
Clarify fake-codex test behavior and smoke script usage
cursoragent Feb 10, 2026
8046bd2
Refresh architecture plan docs for runtime-core ownership
cursoragent Feb 10, 2026
eb38f3c
Share fake codex test helper across runtime test suites
cursoragent Feb 10, 2026
3e0bdaf
Bundle runtime-core in t3 build configuration
cursoragent Feb 10, 2026
dd94702
Guard smoke script fake-codex independence in architecture tests
cursoragent Feb 10, 2026
9e3e806
Align CI Bun version with workspace toolchain
cursoragent Feb 10, 2026
d01bd5e
Use shared fake-codex helpers for TS tests and smoke runtime
cursoragent Feb 10, 2026
d41af12
Assert smoke runtime imports shared fake codex helper
cursoragent Feb 10, 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
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.1.38
bun-version: 1.3.9

- name: Cache Bun and Turbo
uses: actions/cache@v4
Expand All @@ -40,3 +40,6 @@ jobs:

- name: Test
run: bun run test

- name: Smoke Test (t3 runtime)
run: bun run --cwd apps/t3 build && bun run smoke-test
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ node_modules
*.log
*.tsbuildinfo
apps/*/dist
apps/*/dist-electron
packages/*/dist
.env
.env.local
Expand Down
1 change: 0 additions & 1 deletion .oxfmtrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
"ignorePatterns": [
".plans",
"dist",
"dist-electron",
"node_modules",
"bun.lock",
"*.tsbuildinfo"
Expand Down
2 changes: 1 addition & 1 deletion .oxlintrc.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"ignorePatterns": ["dist", "dist-electron", "node_modules", "bun.lock", "*.tsbuildinfo"],
"ignorePatterns": ["dist", "node_modules", "bun.lock", "*.tsbuildinfo"],
"plugins": ["eslint", "oxc", "react", "unicorn", "typescript"],
"categories": {
"correctness": "warn",
Expand Down
6 changes: 3 additions & 3 deletions .plans/01-shared-model-normalization.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Move model alias/default normalization into `packages/contracts` so desktop and

## Motivation
- Removes duplicated logic between:
- `apps/desktop/src/codexAppServerManager.ts`
- `packages/runtime-core/src/codexAppServerManager.ts`
- `apps/renderer/src/model-logic.ts`
- Prevents behavior drift when model aliases/defaults are updated.

Expand All @@ -22,7 +22,7 @@ Move model alias/default normalization into `packages/contracts` so desktop and
- `resolveModelSlug`
- `DEFAULT_MODEL`
2. Export model utilities from `packages/contracts/src/index.ts`.
3. Update `apps/desktop/src/codexAppServerManager.ts` to replace local alias map/helper.
3. Update `packages/runtime-core/src/codexAppServerManager.ts` to replace local alias map/helper.
4. Update `apps/renderer/src/model-logic.ts` to wrap or re-export shared functions.
5. Update tests:
- Move/duplicate normalization tests to contracts.
Expand All @@ -38,5 +38,5 @@ Move model alias/default normalization into `packages/contracts` so desktop and
- Manual check that model selection and session start still send expected model slug.

## Done Criteria
- No duplicated alias/default map in desktop and renderer.
- No duplicated alias/default map in runtime-core and renderer.
- Shared model utilities are contract-tested.
26 changes: 13 additions & 13 deletions .plans/02-typed-ipc-boundaries.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
# Plan: Strengthen Typed IPC Boundaries in Main Process
# Plan: Strengthen Typed WS RPC Boundaries in Runtime Server

## Summary
Replace loose payload casting in IPC handlers with strict schema parsing and typed helper wrappers.
Replace loose payload casting in runtime RPC handlers with strict schema parsing and typed helper wrappers.

## Motivation
- `apps/desktop/src/main.ts` currently uses casts like `payload as Parameters<...>`.
- `apps/t3/src/runtimeApiServer.ts` should avoid payload casts and parse all unknown input at the RPC boundary.
- Casts can hide contract breakages until runtime.

## Scope
- Desktop main process IPC registration.
- Optional shared helper for handler registration.
- Runtime WebSocket RPC registration and method dispatch.
- Optional shared helper for method-level parse/dispatch registration.

## Proposed Changes
1. Add IPC helper utility (e.g. `apps/desktop/src/ipcHelpers.ts`) to:
1. Add RPC helper utility (e.g. `apps/t3/src/rpcHelpers.ts`) to:
- Parse payload(s) with Zod schemas
- Standardize typed handler signatures
2. Refactor provider IPC handlers in `apps/desktop/src/main.ts` to use:
2. Refactor provider RPC handlers in `apps/t3/src/runtimeApiServer.ts` to use:
- `providerSessionStartInputSchema.parse`
- `providerSendTurnInputSchema.parse`
- `providerInterruptTurnInputSchema.parse`
- `providerStopSessionInputSchema.parse`
3. Apply same pattern to agent/terminal handlers where possible.
4. Add tests for handler parsing failure paths (invalid payloads).
3. Apply same pattern to app/todo/agent/terminal/shell handlers where possible.
4. Add tests for parsing failure paths (invalid payloads).

## Risks
- Refactor can subtly change IPC error shape/messages.
- Refactor can subtly change RPC error shape/messages.
- Helper abstraction should stay simple and not obscure control flow.

## Validation
- `bun run test`
- `bun run typecheck`
- Manual invalid payload check from renderer/devtools to confirm fast failure.
- Manual invalid payload check from websocket client/devtools to confirm fast failure.

## Done Criteria
- No provider handler uses `payload as Parameters<...>`.
- All IPC entrypoints parse unknown payloads at boundary.
- No runtime handler uses `payload as Parameters<...>`.
- All websocket RPC entrypoints parse unknown payloads at boundary.
4 changes: 2 additions & 2 deletions .plans/03-split-codex-app-server-manager.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
Split `CodexAppServerManager` into smaller modules with clear responsibilities.

## Motivation
- `apps/desktop/src/codexAppServerManager.ts` is large and mixes:
- `packages/runtime-core/src/codexAppServerManager.ts` is large and mixes:
- Process lifecycle
- JSON-RPC parsing/routing
- Session state transitions
- Event emission
- This increases regression risk and slows changes.

## Scope
- Desktop provider internals only.
- Runtime-core provider internals only.
- Keep external behavior/API stable.

## Proposed Changes
Expand Down
8 changes: 4 additions & 4 deletions .plans/06-provider-logstream-lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@
Ensure `ProviderManager` logging stream is initialized, rotated/structured, and closed safely.

## Motivation
- `apps/desktop/src/providerManager.ts` opens a write stream in constructor.
- `packages/runtime-core/src/providerManager.ts` opens a write stream in constructor.
- Stream lifecycle is not explicit on shutdown.

## Scope
- Desktop provider logging behavior.
- App shutdown integration.
- Runtime-core provider logging behavior.
- Runtime server shutdown integration.

## Proposed Changes
1. Add explicit `dispose()` on `ProviderManager`:
- Remove event listeners
- End/close log stream
2. Call `providerManager.dispose()` from app shutdown path in `apps/desktop/src/main.ts`.
2. Call `providerManager.dispose()` from app shutdown path in `apps/t3/src/runtimeApiServer.ts` close flow.
3. Optional: change log format to JSON lines with stable fields.
4. Optional: per-session log files under `.logs/providers/`.

Expand Down
4 changes: 2 additions & 2 deletions .plans/10-unify-process-session-abstraction.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
Refactor `ProcessManager` to use a single runtime-session interface for child-process and PTY modes.

## Motivation
- `apps/desktop/src/processManager.ts` maintains parallel maps and branch-heavy logic.
- `packages/runtime-core/src/processManager.ts` maintains parallel maps and branch-heavy logic.
- New execution backends/providers will multiply complexity.

## Scope
- Desktop process execution internals.
- Runtime-core process execution internals.
- Preserve public `ProcessManager` API.

## Proposed Changes
Expand Down
20 changes: 15 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,44 @@
# AGENTS.md

## Project Snapshot

CodeThing is a minimal GUI for using code agents like Codex and Claude Code (coming soon).

This repository is a VERY EARLY WIP. Proposing sweeping changes that improve long-term maintainability is encouraged.

## Core Priorities

1. Performance first.
2. Reliability first.
3. Keep behavior predictable under load and during failures (session restarts, reconnects, partial streams).

If a tradeoff is required, choose correctness and robustness over short-term convenience.

## Package Roles
- `apps/desktop`: Electron main/preload runtime. Owns provider orchestration, process/session lifecycle, and native IPC boundaries.

- `apps/t3`: Node CLI/runtime. Owns WebSocket server lifecycle, browser launch, and RPC routing.
- `apps/renderer`: React/Vite UI. Owns session UX, conversation/event rendering, and client-side state.
- `packages/contracts`: Shared Zod schemas and TypeScript contracts for provider events, IPC payloads, and model/session types.
- `packages/contracts`: Shared Zod schemas and TypeScript contracts for provider events, WebSocket payloads, and model/session types.
- `packages/runtime-core`: Shared Node runtime services (`ProcessManager`, `TodoStore`, `ProviderManager`, `CodexAppServerManager`) used by `apps/t3`.
- Legacy desktop runtime wrapper package has been removed; `runtime-core` is the canonical runtime service source.
- Legacy desktop runtime wrapper package has been removed; `runtime-core` is the canonical runtime service source.

## Codex App Server (Important)
CodeThing is currently Codex-first. The desktop app starts `codex app-server` (JSON-RPC over stdio) per provider session, then streams structured events into the renderer through the provider APIs.

CodeThing is currently Codex-first. The `t3` runtime starts `codex app-server` (JSON-RPC over stdio) per provider session, then streams structured events into the renderer through the provider APIs.

How we use it in this codebase:
- Session startup/resume and turn lifecycle are brokered in `apps/desktop/src/codexAppServerManager.ts`.
- Provider dispatch and thread event logging are coordinated in `apps/desktop/src/providerManager.ts`.

- Session startup/resume and turn lifecycle are brokered in `packages/runtime-core/src/codexAppServerManager.ts`.
- Provider dispatch and thread event logging are coordinated in `packages/runtime-core/src/providerManager.ts`.
- Renderer consumes provider event streams via `nativeApi.providers.onEvent`.

Docs:

- Codex App Server docs: https://developers.openai.com/codex/sdk/#app-server

## Reference Repos

- Open-source Codex repo: https://github.com/openai/codex
- Codex-Monitor (Tauri, feature-complete, strong reference implementation): https://github.com/Dimillian/CodexMonitor

Expand Down
Loading