Skip to content

Commit 05a5c5f

Browse files
committed
Merge upstream/main (Cursor/ACP + Opus 4.5)
Integrates 7 upstream commits, headlined by Cursor provider via ACP (pingdotgg#1355, new effect-acp package + AcpSessionRuntime) and Claude Opus 4.5. Conflicts resolved (see untangle.md for full policy/playbook): - ClaudeAdapter.ts queryOptions — took upstream's effort type cast + kept our isOpus47 thinking-adaptive line. - MessagesTimeline.tsx SimpleWorkEntryRow — took upstream's cleaner outer rawCommand ternary (ours had dead inner checks). - ProviderRuntimeIngestion.ts assistant-delta flow — adopted upstream's new getOrCreateAssistantMessageId / flushBufferedAssistantMessagesForTurn / finalizeActiveAssistantSegmentForTurn helpers + pauseForUserTurnId block; re-injected our timed 150ms streaming flush, reasoningDelta/ reasoningCompletion dispatch, agentKind plumbing on top. Downstream adaptations required by upstream's new code: - Cursor/ACP agentKind plumbing — upstream emitted ProviderRuntimeEvent values without agentKind; our thinking-blocks tweak made it required. Fixed via a single makeEventStamp helper change in CursorAdapter (hard-codes "primary") + AcpEventStamp interface extension. Mirrors the OpenCode pattern; ~14 event constructions cascade. - Session reaper — removed dead Effect.catch on a reconcile effect whose error channel is now `never` (lint hint in our own tweak code). Test adaptations: - Fast-mode tests in ClaudeAdapter.test.ts + ClaudeTextGeneration.test.ts migrated from claude-opus-4-6 (fast mode disabled by our tweak) to claude-opus-4-5 (upstream's new model, currently the only one that still supports fast mode). - Buffered-streaming tests in ProviderRuntimeIngestion.test.ts updated to pass enableAssistantStreaming: false explicitly, since our tweak flipped the default to true. - dev-runner.test.ts — T3CODE_NO_BROWSER assertion updated from undefined to "1" to match our previously-undocumented tweak. Docs: - tweakings.md — added T3CODE_NO_BROWSER + Cursor/ACP agentKind entries. - untangle.md — added Policy + Active resolution entries for the three conflicted files, plus reconciliation pattern for future upstream restructures of the ingestion flow.
2 parents a76f4ce + 9df3c64 commit 05a5c5f

118 files changed

Lines changed: 27637 additions & 982 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/release.yml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ jobs:
171171
build:
172172
name: Build ${{ matrix.label }}
173173
needs: preflight
174+
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' }}
174175
runs-on: ${{ matrix.runner }}
175176
timeout-minutes: 30
176177
strategy:
@@ -353,6 +354,7 @@ jobs:
353354
publish_cli:
354355
name: Publish CLI to npm
355356
needs: [preflight, build]
357+
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.build.result == 'success' }}
356358
runs-on: ubuntu-24.04 # blacksmith-8vcpu-ubuntu-2404
357359
timeout-minutes: 10
358360
steps:
@@ -387,9 +389,18 @@ jobs:
387389
release:
388390
name: Publish GitHub Release
389391
needs: [preflight, build, publish_cli]
392+
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.build.result == 'success' && needs.publish_cli.result == 'success' }}
390393
runs-on: ubuntu-24.04 # blacksmith-8vcpu-ubuntu-2404
391394
timeout-minutes: 10
392395
steps:
396+
- id: app_token
397+
name: Mint release app token
398+
uses: actions/create-github-app-token@v2
399+
with:
400+
app-id: ${{ secrets.RELEASE_APP_ID }}
401+
private-key: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
402+
owner: ${{ github.repository_owner }}
403+
393404
- name: Checkout
394405
uses: actions/checkout@v6
395406
with:
@@ -474,6 +485,7 @@ jobs:
474485
release-assets/*.blockmap
475486
release-assets/*.yml
476487
fail_on_unmatched_files: true
488+
token: ${{ steps.app_token.outputs.token }}
477489

478490
- name: Publish first release
479491
if: needs.preflight.outputs.previous_tag == ''
@@ -493,10 +505,11 @@ jobs:
493505
release-assets/*.blockmap
494506
release-assets/*.yml
495507
fail_on_unmatched_files: true
508+
token: ${{ steps.app_token.outputs.token }}
496509

497510
finalize:
498511
name: Finalize release
499-
if: needs.preflight.outputs.release_channel == 'stable'
512+
if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' && needs.release.result == 'success' && needs.preflight.outputs.release_channel == 'stable' }}
500513
needs: [preflight, release]
501514
runs-on: blacksmith-8vcpu-ubuntu-2404
502515
timeout-minutes: 10

apps/desktop/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"@t3tools/contracts": "workspace:*",
2424
"@t3tools/shared": "workspace:*",
2525
"@types/node": "catalog:",
26+
"effect-acp": "workspace:*",
2627
"tsdown": "catalog:",
2728
"typescript": "catalog:",
2829
"vitest": "catalog:"

apps/desktop/tsdown.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default defineConfig([
1212
...shared,
1313
entry: ["src/main.ts"],
1414
clean: true,
15-
noExternal: (id) => id.startsWith("@t3tools/"),
15+
noExternal: (id) => id.startsWith("@t3tools/") || id.startsWith("effect-acp"),
1616
},
1717
{
1818
...shared,

apps/server/integration/OrchestrationEngineHarness.integration.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import {
5858
OrchestrationEngineService,
5959
type OrchestrationEngineShape,
6060
} from "../src/orchestration/Services/OrchestrationEngine.ts";
61+
import { ThreadDeletionReactor } from "../src/orchestration/Services/ThreadDeletionReactor.ts";
6162
import { OrchestrationReactor } from "../src/orchestration/Services/OrchestrationReactor.ts";
6263
import { ProjectionSnapshotQuery } from "../src/orchestration/Services/ProjectionSnapshotQuery.ts";
6364
import {
@@ -351,6 +352,12 @@ export const makeOrchestrationIntegrationHarness = (
351352
Layer.provideMerge(runtimeIngestionLayer),
352353
Layer.provideMerge(providerCommandReactorLayer),
353354
Layer.provideMerge(checkpointReactorLayer),
355+
Layer.provideMerge(
356+
Layer.succeed(ThreadDeletionReactor, {
357+
start: () => Effect.void,
358+
drain: Effect.void,
359+
}),
360+
),
354361
);
355362
const layer = Layer.empty.pipe(
356363
Layer.provideMerge(runtimeServicesLayer),

apps/server/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"@t3tools/web": "workspace:*",
4444
"@types/bun": "catalog:",
4545
"@types/node": "catalog:",
46+
"effect-acp": "workspace:*",
4647
"tsdown": "catalog:",
4748
"typescript": "catalog:",
4849
"vitest": "catalog:"

0 commit comments

Comments
 (0)