Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -1008,12 +1008,9 @@ describe("ClaudeAdapterV2 approval cancellation", () => {
decision: ProviderApprovalDecision;
feedback?: string;
}>();
const controller = new AbortController();
controller.abort();

const result = yield* ClaudeAdapterV2.awaitClaudeApprovalDecision(
decision,
controller.signal,
AbortSignal.abort(),
);

assert.deepEqual(result, { decision: "cancel" });
Expand Down Expand Up @@ -1364,14 +1361,14 @@ describe("ClaudeAdapterV2 resume compaction", () => {
Stream.runHead,
Effect.forkScoped,
);
const controller = new AbortController();
const signal = yield* Effect.abortSignal;
const dialog = yield* Effect.promise(() =>
callback!(
{
dialogKind: "resume_return",
payload: { sessionAgeMinutes: 90, estimatedTokens: 120000 },
},
{ signal: controller.signal, requestId: "dialog-resume-1" },
{ signal, requestId: "dialog-resume-1" },
),
).pipe(Effect.forkScoped);
const event = yield* Fiber.join(requestEvent);
Expand All @@ -1387,16 +1384,14 @@ describe("ClaudeAdapterV2 resume compaction", () => {
});
assert.deepEqual(yield* Fiber.join(dialog), { behavior: "completed", result: "compact" });

const cancelledController = new AbortController();
cancelledController.abort();
assert.deepEqual(
yield* Effect.promise(() =>
callback!(
{
dialogKind: "resume_return",
payload: { sessionAgeMinutes: 90, estimatedTokens: 120000 },
},
{ signal: cancelledController.signal, requestId: "dialog-resume-2" },
{ signal: AbortSignal.abort(), requestId: "dialog-resume-2" },
),
),
{ behavior: "cancelled" },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ describe.skipIf(HostProcess.Platform.defaultValue() === "win32")("Claude CLI pro
args: [],
cwd: dir,
env: process.env,
// @effect-diagnostics-next-line abortControllerInEffect:off - This crash fixture closes pipes itself; aborting on test teardown raises an unrelated process error.
signal: new AbortController().signal,
}) as NodeChildProcess.ChildProcess;
yield* Effect.addFinalizer(() =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ it.effect.each(deliveries)(
const sdkMessages = yield* Queue.unbounded<SDKMessage>();
const offers: SDKUserMessage[] = [];
const nativeQueue: SDKUserMessage[] = [];
// @effect-diagnostics-next-line abortControllerInEffect:off - The fake SDK interrupts its batch independently of the test fiber.
const batchAbort = new AbortController();
const adapter = yield* ClaudeAdapterV2.makeClaudeAdapterV2({
instanceId: modelSelection.instanceId,
Expand Down
3 changes: 3 additions & 0 deletions packages/provider-opencode/src/server/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -983,6 +983,7 @@ export const makeOpenCodeAdapterV2 = Effect.fn("makeOpenCodeAdapterV2")(function
if (settledNativeRequestIds.size >= 2_048) settledNativeRequestIds.clear();
settledNativeRequestIds.add(nativeRequestId);
};
// @effect-diagnostics-next-line abortControllerInEffect:off - Session closure aborts this stream independently of the creation fiber.
const abortController = new AbortController();
let closing = false;
let hasConnected = false;
Expand Down Expand Up @@ -3159,6 +3160,7 @@ export const makeOpenCodeAdapterV2 = Effect.fn("makeOpenCodeAdapterV2")(function
admissionMessageObserved: false,
idleDuringAdmission: false,
admissionSettled: Deferred.makeUnsafe<void>(),
// @effect-diagnostics-next-line abortControllerInEffect:off - Turn interruption owns prompt admission cancellation.
admissionAbortController: new AbortController(),
};
if (turn.admissionMessageId !== null)
Expand Down Expand Up @@ -3325,6 +3327,7 @@ export const makeOpenCodeAdapterV2 = Effect.fn("makeOpenCodeAdapterV2")(function
turn.admissionMessageObserved = false;
turn.idleDuringAdmission = false;
turn.admissionSettled = Deferred.makeUnsafe<void>();
// @effect-diagnostics-next-line abortControllerInEffect:off - Steering replaces the admission request independently of this command fiber.
turn.admissionAbortController = new AbortController();
if (turn.admissionMessageId !== null)
turn.usage.promptMessageIds.add(turn.admissionMessageId);
Expand Down
1 change: 1 addition & 0 deletions tsconfig.base.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"namespaceImportPackages": ["@effect/platform-node", "effect"],
"effectFn": ["span", "inferred-span", "suggested-span"],
"diagnosticSeverity": {
"abortControllerInEffect": "error",
"runEffectInsideEffect": "error",
"flatMapConditionalToFilterOrFail": "error",
"catchConditionalRefailToCatchIf": "error",
Expand Down
Loading