From dfe06261c459e9171d4fe4807bd1030fa3636b9f Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 26 Feb 2026 16:58:27 -0800 Subject: [PATCH] fmt --- .oxlintrc.json | 4 +- apps/server/src/git/Layers/GitManager.ts | 83 +++--- .../Layers/OrchestrationEngine.test.ts | 4 +- .../Layers/ProjectionPipeline.test.ts | 239 +++++++++--------- .../Layers/ProjectionPipeline.ts | 22 +- .../Layers/ProviderCommandReactor.ts | 13 +- .../Layers/ProviderRuntimeIngestion.test.ts | 10 +- .../src/orchestration/projector.test.ts | 8 +- .../src/persistence/Layers/ProjectionTurns.ts | 43 ++-- .../provider/Layers/ProviderService.test.ts | 98 +++---- apps/server/src/terminal/Layers/Manager.ts | 6 +- apps/server/src/wsServer.test.ts | 12 +- .../src/components/ProjectScriptsControl.tsx | 17 +- apps/web/src/routes/__root.tsx | 5 +- apps/web/src/routes/_chat.settings.tsx | 4 +- bun.lock | 84 +++--- package.json | 4 +- 17 files changed, 345 insertions(+), 311 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index fba6a9e2e368ffcd50ba29c484e7d0c71c6ac9d1..8ea8fbf2b8b3b8d34685c84e1c12e7544c6b5126 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -15,6 +15,8 @@ "perf": "warn" }, "rules": { - "react-in-jsx-scope": "off" + "react-in-jsx-scope": "off", + "eslint/no-shadow": "off", + "eslint/no-await-in-loop": "off" } } diff --git a/apps/server/src/git/Layers/GitManager.ts b/apps/server/src/git/Layers/GitManager.ts index 375dbdb8dddf37cb550b26b7cf60007ddfb7b96f..54be186ef2f3feb22efb8f5b34474f6d635131d7 100644 --- a/apps/server/src/git/Layers/GitManager.ts +++ b/apps/server/src/git/Layers/GitManager.ts @@ -29,10 +29,7 @@ function limitContext(value: string, maxChars: number): string { return `${value.slice(0, maxChars)}\n\n[truncated]`; } -function sanitizeCommitMessage(generated: { - subject: string; - body: string; -}): { +function sanitizeCommitMessage(generated: { subject: string; body: string }): { subject: string; body: string; } { @@ -161,12 +158,14 @@ export const makeGitManager = Effect.gen(function* () { let generated = parseCustomCommitMessage(commitMessage ?? ""); if (!generated) { - generated = yield* textGeneration.generateCommitMessage({ - cwd, - branch, - stagedSummary: limitContext(context.stagedSummary, 8_000), - stagedPatch: limitContext(context.stagedPatch, 50_000), - }).pipe(Effect.map((result) => sanitizeCommitMessage(result))); + generated = yield* textGeneration + .generateCommitMessage({ + cwd, + branch, + stagedSummary: limitContext(context.stagedSummary, 8_000), + stagedPatch: limitContext(context.stagedPatch, 50_000), + }) + .pipe(Effect.map((result) => sanitizeCommitMessage(result))); } const { commitSha } = yield* gitCore.commit(cwd, generated.subject, generated.body); @@ -182,7 +181,10 @@ export const makeGitManager = Effect.gen(function* () { const details = yield* gitCore.statusDetails(cwd); const branch = details.branch ?? fallbackBranch; if (!branch) { - return yield* gitManagerError("runPrStep", "Cannot create a pull request from detached HEAD."); + return yield* gitManagerError( + "runPrStep", + "Cannot create a pull request from detached HEAD.", + ); } if (!details.hasUpstream) { return yield* gitManagerError( @@ -220,11 +222,7 @@ export const makeGitManager = Effect.gen(function* () { .writeFileString(bodyFile, generated.body) .pipe( Effect.mapError((cause) => - gitManagerError( - "runPrStep", - "Failed to write pull request body temp file.", - cause, - ), + gitManagerError("runPrStep", "Failed to write pull request body temp file.", cause), ), ); yield* gitHubCli @@ -279,35 +277,40 @@ export const makeGitManager = Effect.gen(function* () { }; }); - const runStackedAction: GitManagerShape["runStackedAction"] = Effect.fnUntraced(function* (input) { - const wantsPush = input.action !== "commit"; - const wantsPr = input.action === "commit_push_pr"; + const runStackedAction: GitManagerShape["runStackedAction"] = Effect.fnUntraced( + function* (input) { + const wantsPush = input.action !== "commit"; + const wantsPr = input.action === "commit_push_pr"; - const initialStatus = yield* gitCore.statusDetails(input.cwd); - if (wantsPush && !initialStatus.branch) { - return yield* gitManagerError("runStackedAction", "Cannot push from detached HEAD."); - } - if (wantsPr && !initialStatus.branch) { - return yield* gitManagerError("runStackedAction", "Cannot create a pull request from detached HEAD."); - } + const initialStatus = yield* gitCore.statusDetails(input.cwd); + if (wantsPush && !initialStatus.branch) { + return yield* gitManagerError("runStackedAction", "Cannot push from detached HEAD."); + } + if (wantsPr && !initialStatus.branch) { + return yield* gitManagerError( + "runStackedAction", + "Cannot create a pull request from detached HEAD.", + ); + } - const commit = yield* runCommitStep(input.cwd, initialStatus.branch, input.commitMessage); + const commit = yield* runCommitStep(input.cwd, initialStatus.branch, input.commitMessage); - const push = wantsPush - ? yield* gitCore.pushCurrentBranch(input.cwd, initialStatus.branch) - : { status: "skipped_not_requested" as const }; + const push = wantsPush + ? yield* gitCore.pushCurrentBranch(input.cwd, initialStatus.branch) + : { status: "skipped_not_requested" as const }; - const pr = wantsPr - ? yield* runPrStep(input.cwd, initialStatus.branch) - : { status: "skipped_not_requested" as const }; + const pr = wantsPr + ? yield* runPrStep(input.cwd, initialStatus.branch) + : { status: "skipped_not_requested" as const }; - return { - action: input.action, - commit, - push, - pr, - }; - }); + return { + action: input.action, + commit, + push, + pr, + }; + }, + ); return { status, diff --git a/apps/server/src/orchestration/Layers/OrchestrationEngine.test.ts b/apps/server/src/orchestration/Layers/OrchestrationEngine.test.ts index 81c46f07d810be9d0ecedc08508aa8ff12cf088e..6680402a8d639b4320e96ea0179176bb557a88ec 100644 --- a/apps/server/src/orchestration/Layers/OrchestrationEngine.test.ts +++ b/apps/server/src/orchestration/Layers/OrchestrationEngine.test.ts @@ -561,7 +561,9 @@ describe("OrchestrationEngine", () => { ).rejects.toThrow("projection failed"); const readModelAfterFailure = await runtime.runPromise(engine.getReadModel()); - const updatedThread = readModelAfterFailure.threads.find((thread) => thread.id === "thread-sync"); + const updatedThread = readModelAfterFailure.threads.find( + (thread) => thread.id === "thread-sync", + ); expect(readModelAfterFailure.snapshotSequence).toBe(3); expect(updatedThread?.title).toBe("sync-after-failed-projection"); diff --git a/apps/server/src/orchestration/Layers/ProjectionPipeline.test.ts b/apps/server/src/orchestration/Layers/ProjectionPipeline.test.ts index 7381164c867804151372541a4abbe488a1e51fdc..9cc29bcd8eac19c723ad2340435803bb2165fafe 100644 --- a/apps/server/src/orchestration/Layers/ProjectionPipeline.test.ts +++ b/apps/server/src/orchestration/Layers/ProjectionPipeline.test.ts @@ -412,125 +412,127 @@ projectionLayer("OrchestrationProjectionPipeline", (it) => { }), ); - it.effect("resolves turn-count conflicts when checkpoint completion rewrites provisional turns", () => - Effect.gen(function* () { - const projectionPipeline = yield* OrchestrationProjectionPipeline; - const eventStore = yield* OrchestrationEventStore; - const sql = yield* SqlClient.SqlClient; - const appendAndProject = (event: Parameters[0]) => - eventStore - .append(event) - .pipe(Effect.flatMap((savedEvent) => projectionPipeline.projectEvent(savedEvent))); + it.effect( + "resolves turn-count conflicts when checkpoint completion rewrites provisional turns", + () => + Effect.gen(function* () { + const projectionPipeline = yield* OrchestrationProjectionPipeline; + const eventStore = yield* OrchestrationEventStore; + const sql = yield* SqlClient.SqlClient; + const appendAndProject = (event: Parameters[0]) => + eventStore + .append(event) + .pipe(Effect.flatMap((savedEvent) => projectionPipeline.projectEvent(savedEvent))); - yield* appendAndProject({ - type: "project.created", - eventId: EventId.makeUnsafe("evt-conflict-1"), - aggregateKind: "project", - aggregateId: ProjectId.makeUnsafe("project-conflict"), - occurredAt: "2026-02-26T13:00:00.000Z", - commandId: CommandId.makeUnsafe("cmd-conflict-1"), - causationEventId: null, - correlationId: CorrelationId.makeUnsafe("cmd-conflict-1"), - metadata: {}, - payload: { - projectId: ProjectId.makeUnsafe("project-conflict"), - title: "Project Conflict", - workspaceRoot: "/tmp/project-conflict", - defaultModel: null, - scripts: [], - createdAt: "2026-02-26T13:00:00.000Z", - updatedAt: "2026-02-26T13:00:00.000Z", - }, - }); + yield* appendAndProject({ + type: "project.created", + eventId: EventId.makeUnsafe("evt-conflict-1"), + aggregateKind: "project", + aggregateId: ProjectId.makeUnsafe("project-conflict"), + occurredAt: "2026-02-26T13:00:00.000Z", + commandId: CommandId.makeUnsafe("cmd-conflict-1"), + causationEventId: null, + correlationId: CorrelationId.makeUnsafe("cmd-conflict-1"), + metadata: {}, + payload: { + projectId: ProjectId.makeUnsafe("project-conflict"), + title: "Project Conflict", + workspaceRoot: "/tmp/project-conflict", + defaultModel: null, + scripts: [], + createdAt: "2026-02-26T13:00:00.000Z", + updatedAt: "2026-02-26T13:00:00.000Z", + }, + }); - yield* appendAndProject({ - type: "thread.created", - eventId: EventId.makeUnsafe("evt-conflict-2"), - aggregateKind: "thread", - aggregateId: ThreadId.makeUnsafe("thread-conflict"), - occurredAt: "2026-02-26T13:00:01.000Z", - commandId: CommandId.makeUnsafe("cmd-conflict-2"), - causationEventId: null, - correlationId: CorrelationId.makeUnsafe("cmd-conflict-2"), - metadata: {}, - payload: { - threadId: ThreadId.makeUnsafe("thread-conflict"), - projectId: ProjectId.makeUnsafe("project-conflict"), - title: "Thread Conflict", - model: "gpt-5-codex", - branch: null, - worktreePath: null, - createdAt: "2026-02-26T13:00:01.000Z", - updatedAt: "2026-02-26T13:00:01.000Z", - }, - }); + yield* appendAndProject({ + type: "thread.created", + eventId: EventId.makeUnsafe("evt-conflict-2"), + aggregateKind: "thread", + aggregateId: ThreadId.makeUnsafe("thread-conflict"), + occurredAt: "2026-02-26T13:00:01.000Z", + commandId: CommandId.makeUnsafe("cmd-conflict-2"), + causationEventId: null, + correlationId: CorrelationId.makeUnsafe("cmd-conflict-2"), + metadata: {}, + payload: { + threadId: ThreadId.makeUnsafe("thread-conflict"), + projectId: ProjectId.makeUnsafe("project-conflict"), + title: "Thread Conflict", + model: "gpt-5-codex", + branch: null, + worktreePath: null, + createdAt: "2026-02-26T13:00:01.000Z", + updatedAt: "2026-02-26T13:00:01.000Z", + }, + }); - yield* appendAndProject({ - type: "thread.turn-interrupt-requested", - eventId: EventId.makeUnsafe("evt-conflict-3"), - aggregateKind: "thread", - aggregateId: ThreadId.makeUnsafe("thread-conflict"), - occurredAt: "2026-02-26T13:00:02.000Z", - commandId: CommandId.makeUnsafe("cmd-conflict-3"), - causationEventId: null, - correlationId: CorrelationId.makeUnsafe("cmd-conflict-3"), - metadata: {}, - payload: { - threadId: ThreadId.makeUnsafe("thread-conflict"), - turnId: TurnId.makeUnsafe("turn-interrupted"), - createdAt: "2026-02-26T13:00:02.000Z", - }, - }); + yield* appendAndProject({ + type: "thread.turn-interrupt-requested", + eventId: EventId.makeUnsafe("evt-conflict-3"), + aggregateKind: "thread", + aggregateId: ThreadId.makeUnsafe("thread-conflict"), + occurredAt: "2026-02-26T13:00:02.000Z", + commandId: CommandId.makeUnsafe("cmd-conflict-3"), + causationEventId: null, + correlationId: CorrelationId.makeUnsafe("cmd-conflict-3"), + metadata: {}, + payload: { + threadId: ThreadId.makeUnsafe("thread-conflict"), + turnId: TurnId.makeUnsafe("turn-interrupted"), + createdAt: "2026-02-26T13:00:02.000Z", + }, + }); - yield* appendAndProject({ - type: "thread.message-sent", - eventId: EventId.makeUnsafe("evt-conflict-4"), - aggregateKind: "thread", - aggregateId: ThreadId.makeUnsafe("thread-conflict"), - occurredAt: "2026-02-26T13:00:03.000Z", - commandId: CommandId.makeUnsafe("cmd-conflict-4"), - causationEventId: null, - correlationId: CorrelationId.makeUnsafe("cmd-conflict-4"), - metadata: {}, - payload: { - threadId: ThreadId.makeUnsafe("thread-conflict"), - messageId: MessageId.makeUnsafe("assistant-conflict"), - role: "assistant", - text: "done", - turnId: TurnId.makeUnsafe("turn-completed"), - streaming: false, - createdAt: "2026-02-26T13:00:03.000Z", - updatedAt: "2026-02-26T13:00:03.000Z", - }, - }); + yield* appendAndProject({ + type: "thread.message-sent", + eventId: EventId.makeUnsafe("evt-conflict-4"), + aggregateKind: "thread", + aggregateId: ThreadId.makeUnsafe("thread-conflict"), + occurredAt: "2026-02-26T13:00:03.000Z", + commandId: CommandId.makeUnsafe("cmd-conflict-4"), + causationEventId: null, + correlationId: CorrelationId.makeUnsafe("cmd-conflict-4"), + metadata: {}, + payload: { + threadId: ThreadId.makeUnsafe("thread-conflict"), + messageId: MessageId.makeUnsafe("assistant-conflict"), + role: "assistant", + text: "done", + turnId: TurnId.makeUnsafe("turn-completed"), + streaming: false, + createdAt: "2026-02-26T13:00:03.000Z", + updatedAt: "2026-02-26T13:00:03.000Z", + }, + }); - yield* appendAndProject({ - type: "thread.turn-diff-completed", - eventId: EventId.makeUnsafe("evt-conflict-5"), - aggregateKind: "thread", - aggregateId: ThreadId.makeUnsafe("thread-conflict"), - occurredAt: "2026-02-26T13:00:04.000Z", - commandId: CommandId.makeUnsafe("cmd-conflict-5"), - causationEventId: null, - correlationId: CorrelationId.makeUnsafe("cmd-conflict-5"), - metadata: {}, - payload: { - threadId: ThreadId.makeUnsafe("thread-conflict"), - turnId: TurnId.makeUnsafe("turn-completed"), - checkpointTurnCount: 1, - checkpointRef: CheckpointRef.makeUnsafe("refs/t3/checkpoints/thread-conflict/turn/1"), - status: "ready", - files: [], - assistantMessageId: MessageId.makeUnsafe("assistant-conflict"), - completedAt: "2026-02-26T13:00:04.000Z", - }, - }); + yield* appendAndProject({ + type: "thread.turn-diff-completed", + eventId: EventId.makeUnsafe("evt-conflict-5"), + aggregateKind: "thread", + aggregateId: ThreadId.makeUnsafe("thread-conflict"), + occurredAt: "2026-02-26T13:00:04.000Z", + commandId: CommandId.makeUnsafe("cmd-conflict-5"), + causationEventId: null, + correlationId: CorrelationId.makeUnsafe("cmd-conflict-5"), + metadata: {}, + payload: { + threadId: ThreadId.makeUnsafe("thread-conflict"), + turnId: TurnId.makeUnsafe("turn-completed"), + checkpointTurnCount: 1, + checkpointRef: CheckpointRef.makeUnsafe("refs/t3/checkpoints/thread-conflict/turn/1"), + status: "ready", + files: [], + assistantMessageId: MessageId.makeUnsafe("assistant-conflict"), + completedAt: "2026-02-26T13:00:04.000Z", + }, + }); - const turnRows = yield* sql<{ - readonly turnId: string; - readonly checkpointTurnCount: number | null; - readonly status: string; - }>` + const turnRows = yield* sql<{ + readonly turnId: string; + readonly checkpointTurnCount: number | null; + readonly status: string; + }>` SELECT turn_id AS "turnId", checkpoint_turn_count AS "checkpointTurnCount", @@ -545,11 +547,11 @@ projectionLayer("OrchestrationProjectionPipeline", (it) => { checkpoint_turn_count ASC, requested_at ASC `; - assert.deepEqual(turnRows, [ - { turnId: "turn-completed", checkpointTurnCount: 1, status: "completed" }, - { turnId: "turn-interrupted", checkpointTurnCount: null, status: "interrupted" }, - ]); - }), + assert.deepEqual(turnRows, [ + { turnId: "turn-completed", checkpointTurnCount: 1, status: "completed" }, + { turnId: "turn-interrupted", checkpointTurnCount: null, status: "interrupted" }, + ]); + }), ); it.effect("does not fallback-retain messages whose turnId is removed by revert", () => @@ -753,7 +755,6 @@ projectionLayer("OrchestrationProjectionPipeline", (it) => { ]); }), ); - }); it.effect("restores pending turn-start metadata across projection pipeline restart", () => diff --git a/apps/server/src/orchestration/Layers/ProjectionPipeline.ts b/apps/server/src/orchestration/Layers/ProjectionPipeline.ts index 562190d14368e4270898443c12e9f043a32505f3..71ad8db405d84d88fce91487012306125983500d 100644 --- a/apps/server/src/orchestration/Layers/ProjectionPipeline.ts +++ b/apps/server/src/orchestration/Layers/ProjectionPipeline.ts @@ -14,7 +14,10 @@ import { ProjectionThreadMessageRepository, } from "../../persistence/Services/ProjectionThreadMessages.ts"; import { ProjectionThreadSessionRepository } from "../../persistence/Services/ProjectionThreadSessions.ts"; -import { type ProjectionTurn, ProjectionTurnRepository } from "../../persistence/Services/ProjectionTurns.ts"; +import { + type ProjectionTurn, + ProjectionTurnRepository, +} from "../../persistence/Services/ProjectionTurns.ts"; import { ProjectionThreadRepository } from "../../persistence/Services/ProjectionThreads.ts"; import { ProjectionPendingApprovalRepositoryLive } from "../../persistence/Layers/ProjectionPendingApprovals.ts"; import { ProjectionProjectRepositoryLive } from "../../persistence/Layers/ProjectionProjects.ts"; @@ -64,7 +67,10 @@ function retainProjectionMessagesAfterRevert( const retainedMessageIds = new Set(); const retainedTurnIds = new Set(); const keptTurns = turns.filter( - (turn) => turn.turnId !== null && turn.checkpointTurnCount !== null && turn.checkpointTurnCount <= turnCount, + (turn) => + turn.turnId !== null && + turn.checkpointTurnCount !== null && + turn.checkpointTurnCount <= turnCount, ); for (const turn of keptTurns) { if (turn.turnId !== null) { @@ -511,16 +517,22 @@ const makeOrchestrationProjectionPipeline = Effect.gen(function* () { (Option.isSome(pendingTurnStart) ? pendingTurnStart.value.messageId : null), startedAt: existingTurn.value.startedAt ?? - (Option.isSome(pendingTurnStart) ? pendingTurnStart.value.requestedAt : event.occurredAt), + (Option.isSome(pendingTurnStart) + ? pendingTurnStart.value.requestedAt + : event.occurredAt), requestedAt: existingTurn.value.requestedAt ?? - (Option.isSome(pendingTurnStart) ? pendingTurnStart.value.requestedAt : event.occurredAt), + (Option.isSome(pendingTurnStart) + ? pendingTurnStart.value.requestedAt + : event.occurredAt), }); } else { yield* projectionTurnRepository.upsertByTurnId({ turnId, threadId: event.payload.threadId, - pendingMessageId: Option.isSome(pendingTurnStart) ? pendingTurnStart.value.messageId : null, + pendingMessageId: Option.isSome(pendingTurnStart) + ? pendingTurnStart.value.messageId + : null, assistantMessageId: null, state: "running", requestedAt: Option.isSome(pendingTurnStart) diff --git a/apps/server/src/orchestration/Layers/ProviderCommandReactor.ts b/apps/server/src/orchestration/Layers/ProviderCommandReactor.ts index 3b7e73fea9c144646321dfbecc44568a359a1f8d..dc08566aefd9330b54bdf24efe2c2514ce3b603b 100644 --- a/apps/server/src/orchestration/Layers/ProviderCommandReactor.ts +++ b/apps/server/src/orchestration/Layers/ProviderCommandReactor.ts @@ -149,14 +149,11 @@ const make = Effect.gen(function* () { projects: readModel.projects, }); - const startedSession = yield* providerService.startSession( - threadId, - { - ...(preferredProvider ? { provider: preferredProvider } : {}), - ...(effectiveCwd ? { cwd: effectiveCwd } : {}), - ...(thread.model ? { model: thread.model } : {}), - }, - ); + const startedSession = yield* providerService.startSession(threadId, { + ...(preferredProvider ? { provider: preferredProvider } : {}), + ...(effectiveCwd ? { cwd: effectiveCwd } : {}), + ...(thread.model ? { model: thread.model } : {}), + }); yield* setThreadSession({ threadId, diff --git a/apps/server/src/orchestration/Layers/ProviderRuntimeIngestion.test.ts b/apps/server/src/orchestration/Layers/ProviderRuntimeIngestion.test.ts index f67d562218e0f94d677191e7a8027dad086ad687..5a87fa973f0380940b196588bab4e7abfa9c29a7 100644 --- a/apps/server/src/orchestration/Layers/ProviderRuntimeIngestion.test.ts +++ b/apps/server/src/orchestration/Layers/ProviderRuntimeIngestion.test.ts @@ -274,7 +274,8 @@ describe("ProviderRuntimeIngestion", () => { await waitForThread( harness.engine, (thread) => - thread.session?.status === "running" && thread.session?.activeTurnId === "turn-complete-dedup", + thread.session?.status === "running" && + thread.session?.activeTurnId === "turn-complete-dedup", ); harness.emit({ @@ -317,14 +318,17 @@ describe("ProviderRuntimeIngestion", () => { ); const events = await Effect.runPromise( - Stream.runCollect(harness.engine.readEvents(0)).pipe(Effect.map((chunk) => Array.from(chunk))), + Stream.runCollect(harness.engine.readEvents(0)).pipe( + Effect.map((chunk) => Array.from(chunk)), + ), ); const completionEvents = events.filter((event) => { if (event.type !== "thread.message-sent") { return false; } return ( - event.payload.messageId === "assistant:item-complete-dedup" && event.payload.streaming === false + event.payload.messageId === "assistant:item-complete-dedup" && + event.payload.streaming === false ); }); expect(completionEvents).toHaveLength(1); diff --git a/apps/server/src/orchestration/projector.test.ts b/apps/server/src/orchestration/projector.test.ts index 4f415e31a3b7713f4906505e08053ae1d0821c5d..ee4f7e872f9847d27db1f0a2af290671a5cec3df 100644 --- a/apps/server/src/orchestration/projector.test.ts +++ b/apps/server/src/orchestration/projector.test.ts @@ -702,7 +702,9 @@ describe("orchestration projector", () => { }, }), ); - const afterMessages = await messageEvents.reduce>>( + const afterMessages = await messageEvents.reduce< + Promise> + >( (statePromise, event) => statePromise.then((state) => Effect.runPromise(projectEvent(state, event))), Promise.resolve(afterCreate), @@ -730,7 +732,9 @@ describe("orchestration projector", () => { }, }), ); - const finalState = await checkpointEvents.reduce>>( + const finalState = await checkpointEvents.reduce< + Promise> + >( (statePromise, event) => statePromise.then((state) => Effect.runPromise(projectEvent(state, event))), Promise.resolve(afterMessages), diff --git a/apps/server/src/persistence/Layers/ProjectionTurns.ts b/apps/server/src/persistence/Layers/ProjectionTurns.ts index 4d25fd5c21f21e50c871ecca387f6891f4483bc5..8330661e3057f42600dd39516c08d01948170dfa 100644 --- a/apps/server/src/persistence/Layers/ProjectionTurns.ts +++ b/apps/server/src/persistence/Layers/ProjectionTurns.ts @@ -260,23 +260,21 @@ const makeProjectionTurnRepository = Effect.gen(function* () { ), ); - const getPendingTurnStartByThreadId: ProjectionTurnRepositoryShape["getPendingTurnStartByThreadId"] = ( - input, - ) => - getPendingProjectionTurn(input).pipe( - Effect.mapError( - toPersistenceSqlError("ProjectionTurnRepository.getPendingTurnStartByThreadId:query"), - ), - ); + const getPendingTurnStartByThreadId: ProjectionTurnRepositoryShape["getPendingTurnStartByThreadId"] = + (input) => + getPendingProjectionTurn(input).pipe( + Effect.mapError( + toPersistenceSqlError("ProjectionTurnRepository.getPendingTurnStartByThreadId:query"), + ), + ); - const deletePendingTurnStartByThreadId: ProjectionTurnRepositoryShape["deletePendingTurnStartByThreadId"] = ( - input, - ) => - clearPendingProjectionTurnsByThread(input).pipe( - Effect.mapError( - toPersistenceSqlError("ProjectionTurnRepository.deletePendingTurnStartByThreadId:query"), - ), - ); + const deletePendingTurnStartByThreadId: ProjectionTurnRepositoryShape["deletePendingTurnStartByThreadId"] = + (input) => + clearPendingProjectionTurnsByThread(input).pipe( + Effect.mapError( + toPersistenceSqlError("ProjectionTurnRepository.deletePendingTurnStartByThreadId:query"), + ), + ); const listByThreadId: ProjectionTurnRepositoryShape["listByThreadId"] = (input) => listProjectionTurnsByThread(input).pipe( @@ -306,12 +304,13 @@ const makeProjectionTurnRepository = Effect.gen(function* () { ), ); - const clearCheckpointTurnConflict: ProjectionTurnRepositoryShape["clearCheckpointTurnConflict"] = ( - input, - ) => - clearCheckpointTurnConflictRow(input).pipe( - Effect.mapError(toPersistenceSqlError("ProjectionTurnRepository.clearCheckpointTurnConflict:query")), - ); + const clearCheckpointTurnConflict: ProjectionTurnRepositoryShape["clearCheckpointTurnConflict"] = + (input) => + clearCheckpointTurnConflictRow(input).pipe( + Effect.mapError( + toPersistenceSqlError("ProjectionTurnRepository.clearCheckpointTurnConflict:query"), + ), + ); const deleteByThreadId: ProjectionTurnRepositoryShape["deleteByThreadId"] = (input) => deleteProjectionTurnsByThread(input).pipe( diff --git a/apps/server/src/provider/Layers/ProviderService.test.ts b/apps/server/src/provider/Layers/ProviderService.test.ts index 63262044d01338cfeb29665ac1df8a3c66768aea..9e87316f7741c273dc50d80056388f819902c05f 100644 --- a/apps/server/src/provider/Layers/ProviderService.test.ts +++ b/apps/server/src/provider/Layers/ProviderService.test.ts @@ -323,13 +323,10 @@ it.effect( const startedSession = yield* Effect.gen(function* () { const provider = yield* ProviderService; - return yield* provider.startSession( - asThreadId("thread-1"), - { - provider: "codex", - cwd: "/tmp/project", - }, - ); + return yield* provider.startSession(asThreadId("thread-1"), { + provider: "codex", + cwd: "/tmp/project", + }); }).pipe(Effect.provide(firstProviderLayer)); yield* Effect.gen(function* () { @@ -398,13 +395,10 @@ routing.layer("ProviderServiceLive routing", (it) => { Effect.gen(function* () { const provider = yield* ProviderService; - const session = yield* provider.startSession( - asThreadId("thread-1"), - { - provider: "codex", - cwd: "/tmp/project", - }, - ); + const session = yield* provider.startSession(asThreadId("thread-1"), { + provider: "codex", + cwd: "/tmp/project", + }); assert.equal(session.provider, "codex"); const sessions = yield* provider.listSessions(); @@ -453,13 +447,10 @@ routing.layer("ProviderServiceLive routing", (it) => { Effect.gen(function* () { const provider = yield* ProviderService; - const initial = yield* provider.startSession( - asThreadId("thread-1"), - { - provider: "codex", - cwd: "/tmp/project", - }, - ); + const initial = yield* provider.startSession(asThreadId("thread-1"), { + provider: "codex", + cwd: "/tmp/project", + }); yield* routing.codex.stopSession(initial.sessionId); routing.codex.startSession.mockClear(); routing.codex.rollbackThread.mockClear(); @@ -487,18 +478,12 @@ routing.layer("ProviderServiceLive routing", (it) => { Effect.gen(function* () { const provider = yield* ProviderService; - yield* provider.startSession( - asThreadId("thread-1"), - { - provider: "codex", - }, - ); - yield* provider.startSession( - asThreadId("thread-2"), - { - provider: "codex", - }, - ); + yield* provider.startSession(asThreadId("thread-1"), { + provider: "codex", + }); + yield* provider.startSession(asThreadId("thread-2"), { + provider: "codex", + }); yield* provider.stopAll(); @@ -512,12 +497,9 @@ routing.layer("ProviderServiceLive routing", (it) => { const provider = yield* ProviderService; const runtimeRepository = yield* ProviderSessionRuntimeRepository; - const session = yield* provider.startSession( - asThreadId("thread-1"), - { - provider: "codex", - }, - ); + const session = yield* provider.startSession(asThreadId("thread-1"), { + provider: "codex", + }); yield* provider.sendTurn({ sessionId: session.sessionId, input: "hello", @@ -566,12 +548,9 @@ fanout.layer("ProviderServiceLive fanout", (it) => { it.effect("fans out adapter turn completion events", () => Effect.gen(function* () { const provider = yield* ProviderService; - const session = yield* provider.startSession( - asThreadId("thread-1"), - { - provider: "codex", - }, - ); + const session = yield* provider.startSession(asThreadId("thread-1"), { + provider: "codex", + }); const eventsRef = yield* Ref.make>([]); const consumer = yield* Stream.runForEach(provider.streamEvents, (event) => @@ -606,12 +585,9 @@ fanout.layer("ProviderServiceLive fanout", (it) => { it.effect("keeps subscriber delivery ordered and isolates failing subscribers", () => Effect.gen(function* () { const provider = yield* ProviderService; - const session = yield* provider.startSession( - asThreadId("thread-1"), - { - provider: "codex", - }, - ); + const session = yield* provider.startSession(asThreadId("thread-1"), { + provider: "codex", + }); const receivedByHealthy: string[] = []; const expectedEventIds = new Set(["evt-ordered-1", "evt-ordered-2", "evt-ordered-3"]); @@ -686,12 +662,9 @@ validation.layer("ProviderServiceLive validation", (it) => { const provider = yield* ProviderService; const failure = yield* Effect.result( - provider.startSession( - asThreadId("thread-validation"), - { - provider: "invalid-provider", - } as never, - ), + provider.startSession(asThreadId("thread-validation"), { + provider: "invalid-provider", + } as never), ); assert.equal(failure._tag, "Failure"); @@ -726,13 +699,10 @@ validation.layer("ProviderServiceLive validation", (it) => { ); const failure = yield* Effect.result( - provider.startSession( - asThreadId("thread-missing"), - { - provider: "codex", - cwd: "/tmp/project", - }, - ), + provider.startSession(asThreadId("thread-missing"), { + provider: "codex", + cwd: "/tmp/project", + }), ); assertFailure( diff --git a/apps/server/src/terminal/Layers/Manager.ts b/apps/server/src/terminal/Layers/Manager.ts index de024ce400f82cdd0ac196d9e1fe6d0526d17ee4..fa766da570f1f1146f8acb5bc32bbc8e5b2fcffe 100644 --- a/apps/server/src/terminal/Layers/Manager.ts +++ b/apps/server/src/terminal/Layers/Manager.ts @@ -415,7 +415,11 @@ export class TerminalManagerRuntime extends EventEmitter } if (!existing.process) { - await this.startSession(existing, { ...input, cols: targetCols, rows: targetRows }, "started"); + await this.startSession( + existing, + { ...input, cols: targetCols, rows: targetRows }, + "started", + ); return this.snapshot(existing); } diff --git a/apps/server/src/wsServer.test.ts b/apps/server/src/wsServer.test.ts index 5403ad05703bda7a6153807b6f51a86a8e8516b9..6e177aa7f984dd41ae1dba21209bfcf8d050ba19 100644 --- a/apps/server/src/wsServer.test.ts +++ b/apps/server/src/wsServer.test.ts @@ -543,7 +543,9 @@ describe("WebSocket Server", () => { issues: [], }); - const persistedConfig = JSON.parse(fs.readFileSync(keybindingsPath, "utf8")) as KeybindingsConfig; + const persistedConfig = JSON.parse( + fs.readFileSync(keybindingsPath, "utf8"), + ) as KeybindingsConfig; expect(persistedConfig).toEqual(DEFAULT_KEYBINDINGS); }); @@ -711,7 +713,9 @@ describe("WebSocket Server", () => { const response = await sendRequest(ws, WS_METHODS.serverGetConfig); expect(response.error).toBeUndefined(); - const persistedConfig = JSON.parse(fs.readFileSync(keybindingsPath, "utf8")) as KeybindingsConfig; + const persistedConfig = JSON.parse( + fs.readFileSync(keybindingsPath, "utf8"), + ) as KeybindingsConfig; expect(response.result).toEqual({ cwd: "/my/workspace", keybindingsConfigPath: keybindingsPath, @@ -742,7 +746,9 @@ describe("WebSocket Server", () => { command: "script.run-tests.run", }); expect(upsertResponse.error).toBeUndefined(); - const persistedConfig = JSON.parse(fs.readFileSync(keybindingsPath, "utf8")) as KeybindingsConfig; + const persistedConfig = JSON.parse( + fs.readFileSync(keybindingsPath, "utf8"), + ) as KeybindingsConfig; const persistedCommands = new Set(persistedConfig.map((entry) => entry.command)); for (const defaultRule of DEFAULT_KEYBINDINGS) { expect(persistedCommands.has(defaultRule.command)).toBe(true); diff --git a/apps/web/src/components/ProjectScriptsControl.tsx b/apps/web/src/components/ProjectScriptsControl.tsx index 13966a5f508bedc66eb1dd1a35ea4ee5b584a4c5..092f2d598a9ccb391003eecb33f976030c297010 100644 --- a/apps/web/src/components/ProjectScriptsControl.tsx +++ b/apps/web/src/components/ProjectScriptsControl.tsx @@ -16,8 +16,15 @@ import { } from "lucide-react"; import React, { type FormEvent, type KeyboardEvent, useMemo, useState } from "react"; -import { keybindingValueForCommand, decodeProjectScriptKeybindingRule } from "~/lib/projectScriptKeybindings"; -import { commandForProjectScript, nextProjectScriptId, primaryProjectScript } from "~/projectScripts"; +import { + keybindingValueForCommand, + decodeProjectScriptKeybindingRule, +} from "~/lib/projectScriptKeybindings"; +import { + commandForProjectScript, + nextProjectScriptId, + primaryProjectScript, +} from "~/projectScripts"; import { shortcutLabelForCommand } from "~/keybindings"; import { isMacPlatform } from "~/lib/utils"; import { Button } from "./ui/button"; @@ -188,7 +195,11 @@ export default function ProjectScriptsControl({ setValidationError(null); try { const scriptIdForValidation = - editingScriptId ?? nextProjectScriptId(trimmedName, scripts.map((script) => script.id)); + editingScriptId ?? + nextProjectScriptId( + trimmedName, + scripts.map((script) => script.id), + ); const keybindingRule = decodeProjectScriptKeybindingRule({ keybinding, command: commandForProjectScript(scriptIdForValidation), diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index cb34f075a51833ebd1f4d721f99cee0d2bd59886..51b3a9b9249633f7e3725bbcbf04d42a6e3d39d7 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -201,10 +201,7 @@ function EventRouter() { void queryClient .ensureQueryData(serverConfigQueryOptions()) .then((config) => - api.shell.openInEditor( - config.keybindingsConfigPath, - preferredTerminalEditor(), - ), + api.shell.openInEditor(config.keybindingsConfigPath, preferredTerminalEditor()), ) .catch((error) => { toastManager.add({ diff --git a/apps/web/src/routes/_chat.settings.tsx b/apps/web/src/routes/_chat.settings.tsx index 96137a9fda7c756ab06447ade624ad8ad4389c72..1068502dc6f9e909467d151becc005d5e7202e7e 100644 --- a/apps/web/src/routes/_chat.settings.tsx +++ b/apps/web/src/routes/_chat.settings.tsx @@ -241,8 +241,8 @@ function SettingsRouteView() {

Keybindings

- Open the persisted keybindings.json file to edit advanced - bindings directly. + Open the persisted keybindings.json file to edit advanced bindings + directly.

diff --git a/bun.lock b/bun.lock index 5ff1864ee7e1ec6eff302373488398c635c6ffbb..053e976756790712edd965cc7671c2f9b135bc4d 100644 --- a/bun.lock +++ b/bun.lock @@ -5,8 +5,8 @@ "": { "name": "@t3tools/monorepo", "devDependencies": { - "oxfmt": "^0.28.0", - "oxlint": "^1.43.0", + "oxfmt": "^0.35.0", + "oxlint": "^1.50.0", "turbo": "^2.3.3", "typescript": "^5.7.3", "vitest": "^4.0.0", @@ -301,59 +301,81 @@ "@oxc-project/types": ["@oxc-project/types@0.112.0", "", {}, "sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ=="], - "@oxfmt/darwin-arm64": ["@oxfmt/darwin-arm64@0.28.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-jmUfF7cNJPw57bEK7sMIqrYRgn4LH428tSgtgLTCtjuGuu1ShREyrkeB7y8HtkXRfhBs4lVY+HMLhqElJvZ6ww=="], + "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.35.0", "", { "os": "android", "cpu": "arm" }, "sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA=="], - "@oxfmt/darwin-x64": ["@oxfmt/darwin-x64@0.28.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-S6vlV8S7jbjzJOSjfVg2CimUC0r7/aHDLdUm/3+/B/SU/s1jV7ivqWkMv1/8EB43d1BBwT9JQ60ZMTkBqeXSFA=="], + "@oxfmt/binding-android-arm64": ["@oxfmt/binding-android-arm64@0.35.0", "", { "os": "android", "cpu": "arm64" }, "sha512-/O+EbuAJYs6nde/anv+aID6uHsGQApyE9JtYBo/79KyU8e6RBN3DMbT0ix97y1SOnCglurmL2iZ+hlohjP2PnQ=="], - "@oxfmt/linux-arm64-gnu": ["@oxfmt/linux-arm64-gnu@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-TfJkMZjePbLiskmxFXVAbGI/OZtD+y+fwS0wyW8O6DWG0ARTf0AipY9zGwGoOdpFuXOJceXvN4SHGLbYNDMY4Q=="], + "@oxfmt/binding-darwin-arm64": ["@oxfmt/binding-darwin-arm64@0.35.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-pGqRtqlNdn9d4VrmGUWVyQjkw79ryhI6je9y2jfqNUIZCfqceob+R97YYAoG7C5TFyt8ILdLVoN+L2vw/hSFyA=="], - "@oxfmt/linux-arm64-musl": ["@oxfmt/linux-arm64-musl@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-7fyQUdW203v4WWGr1T3jwTz4L7KX9y5DeATryQ6fLT6QQp9GEuct8/k0lYhd+ys42iTV/IkJF20e3YkfSOOILg=="], + "@oxfmt/binding-darwin-x64": ["@oxfmt/binding-darwin-x64@0.35.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-8GmsDcSozTPjrCJeGpp+sCmS9+9V5yRrdEZ1p/sTWxPG5nYeAfSLuS0nuEYjXSO+CtdSbStIW6dxa+4NM58yRw=="], - "@oxfmt/linux-x64-gnu": ["@oxfmt/linux-x64-gnu@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-sRKqAvEonuz0qr1X1ncUZceOBJerKzkO2gZIZmosvy/JmqyffpIFL3OE2tqacFkeDhrC+dNYQpusO8zsfHo3pw=="], + "@oxfmt/binding-freebsd-x64": ["@oxfmt/binding-freebsd-x64@0.35.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QyfKfTe0ytHpFKHAcHCGQEzN45QSqq1AHJOYYxQMgLM3KY4xu8OsXHpCnINjDsV4XGnQzczJDU9e04Zmd8XqIQ=="], - "@oxfmt/linux-x64-musl": ["@oxfmt/linux-x64-musl@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-fW6czbXutX/tdQe8j4nSIgkUox9RXqjyxwyWXUDItpoDkoXllq17qbD7GVc0whrEhYQC6hFE1UEAcDypLJoSzw=="], + "@oxfmt/binding-linux-arm-gnueabihf": ["@oxfmt/binding-linux-arm-gnueabihf@0.35.0", "", { "os": "linux", "cpu": "arm" }, "sha512-u+kv3JD6P3J38oOyUaiCqgY5TNESzBRZJ5lyZQ6c2czUW2v5SIN9E/KWWa9vxoc+P8AFXQFUVrdzGy1tK+nbPQ=="], - "@oxfmt/win32-arm64": ["@oxfmt/win32-arm64@0.28.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-D/HDeQBAQRjTbD9OLV6kRDcStrIfO+JsUODDCdGmhRfNX8LPCx95GpfyybpZfn3wVF8Jq/yjPXV1xLkQ+s7RcA=="], + "@oxfmt/binding-linux-arm-musleabihf": ["@oxfmt/binding-linux-arm-musleabihf@0.35.0", "", { "os": "linux", "cpu": "arm" }, "sha512-1NiZroCiV57I7Pf8kOH4XGR366kW5zir3VfSMBU2D0V14GpYjiYmPYFAoJboZvp8ACnZKUReWyMkNKSa5ad58A=="], - "@oxfmt/win32-x64": ["@oxfmt/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-4+S2j4OxOIyo8dz5osm5dZuL0yVmxXvtmNdHB5xyGwAWVvyWNvf7tCaQD7w2fdSsAXQLOvK7KFQrHFe33nJUCA=="], + "@oxfmt/binding-linux-arm64-gnu": ["@oxfmt/binding-linux-arm64-gnu@0.35.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-7Q0Xeg7ZnW2nxnZ4R7aF6DEbCFls4skgHZg+I63XitpNvJCbVIU8MFOTZlvZGRsY9+rPgWPQGeUpLHlyx0wvMA=="], - "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.46.0", "", { "os": "android", "cpu": "arm" }, "sha512-vLPcE+HcZ/W/0cVA1KLuAnoUSejGougDH/fDjBFf0Q+rbBIyBNLevOhgx3AnBNAt3hcIGY7U05ISbJCKZeVa3w=="], + "@oxfmt/binding-linux-arm64-musl": ["@oxfmt/binding-linux-arm64-musl@0.35.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Okqi+uhYFxwKz8hcnUftNNwdm8BCkf6GSCbcz9xJxYMm87k1E4p7PEmAAbhLTk7cjSdDre6TDL0pDzNX+Y22Q=="], - "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.46.0", "", { "os": "android", "cpu": "arm64" }, "sha512-b8IqCczUsirdtJ3R/be4cRm64I5pMPafMO/9xyTAZvc+R/FxZHMQuhw0iNT9hQwRn+Uo5rNAoA8QS7QurG2QeA=="], + "@oxfmt/binding-linux-ppc64-gnu": ["@oxfmt/binding-linux-ppc64-gnu@0.35.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9k66pbZQXM/lBJWys3Xbc5yhl4JexyfqkEf/tvtq8976VIJnLAAL3M127xHA3ifYSqxdVHfVGTg84eiBHCGcNw=="], - "@oxlint/binding-darwin-arm64": ["@oxlint/binding-darwin-arm64@1.46.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-CfC/KGnNMhI01dkfCMjquKnW4zby3kqD5o/9XA7+pgo9I4b+Nipm+JVFyZPWMNwKqLXNmi35GTLWjs9svPxlew=="], + "@oxfmt/binding-linux-riscv64-gnu": ["@oxfmt/binding-linux-riscv64-gnu@0.35.0", "", { "os": "linux", "cpu": "none" }, "sha512-aUcY9ofKPtjO52idT6t0SAQvEF6ctjzUQa1lLp7GDsRpSBvuTrBQGeq0rYKz3gN8dMIQ7mtMdGD9tT4LhR8jAQ=="], - "@oxlint/binding-darwin-x64": ["@oxlint/binding-darwin-x64@1.46.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-m38mKPsV3rBdWOJ4TAGZiUjWU8RGrBxsmdSeMQ0bPr/8O6CUOm/RJkPBf0GAfPms2WRVcbkfEXvIiPshAeFkeA=="], + "@oxfmt/binding-linux-riscv64-musl": ["@oxfmt/binding-linux-riscv64-musl@0.35.0", "", { "os": "linux", "cpu": "none" }, "sha512-C6yhY5Hvc2sGM+mCPek9ZLe5xRUOC/BvhAt2qIWFAeXMn4il04EYIjl3DsWiJr0xDMTJhvMOmD55xTRPlNp39w=="], - "@oxlint/binding-freebsd-x64": ["@oxlint/binding-freebsd-x64@1.46.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-YaFRKslSAfuMwn7ejS1/wo9jENqQigpGBjjThX+mrpmEROLYGky+zIC5xSVGRng28U92VEDVbSNJ/sguz3dUAA=="], + "@oxfmt/binding-linux-s390x-gnu": ["@oxfmt/binding-linux-s390x-gnu@0.35.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-RG2hlvOMK4OMZpO3mt8MpxLQ0AAezlFqhn5mI/g5YrVbPFyoCv9a34AAvbSJS501ocOxlFIRcKEuw5hFvddf9g=="], - "@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/binding-linux-arm-gnueabihf@1.46.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Nlw+5mSZQtkg1Oj0N8ulxzG8ATpmSDz5V2DNaGhaYAVlcdR8NYSm/xTOnweOXc/UOOv3LwkPPYzqcfPhu2lEkA=="], + "@oxfmt/binding-linux-x64-gnu": ["@oxfmt/binding-linux-x64-gnu@0.35.0", "", { "os": "linux", "cpu": "x64" }, "sha512-wzmh90Pwvqj9xOKHJjkQYBpydRkaXG77ZvDz+iFDRRQpnqIEqGm5gmim2s6vnZIkDGsvKCuTdtxm0GFmBjM1+w=="], - "@oxlint/binding-linux-arm-musleabihf": ["@oxlint/binding-linux-arm-musleabihf@1.46.0", "", { "os": "linux", "cpu": "arm" }, "sha512-d3Y5y4ukMqAGnWLMKpwqj8ftNUaac7pA0NrId4AZ77JvHzezmxEcm2gswaBw2HW8y1pnq6KDB0vEPPvpTfDLrA=="], + "@oxfmt/binding-linux-x64-musl": ["@oxfmt/binding-linux-x64-musl@0.35.0", "", { "os": "linux", "cpu": "x64" }, "sha512-+HCqYCJPCUy5I+b2cf+gUVaApfgtoQT3HdnSg/l7NIcLHOhKstlYaGyrFZLmUpQt4WkFbpGKZZayG6zjRU0KFA=="], - "@oxlint/binding-linux-arm64-gnu": ["@oxlint/binding-linux-arm64-gnu@1.46.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-jkjx+XSOPuFR+C458prQmehO+v0VK19/3Hj2mOYDF4hHUf3CzmtA4fTmQUtkITZiGHnky7Oao6JeJX24mrX7WQ=="], + "@oxfmt/binding-openharmony-arm64": ["@oxfmt/binding-openharmony-arm64@0.35.0", "", { "os": "none", "cpu": "arm64" }, "sha512-kFYmWfR9YL78XyO5ws+1dsxNvZoD973qfVMNFOS4e9bcHXGF7DvGC2tY5UDFwyMCeB33t3sDIuGONKggnVNSJA=="], - "@oxlint/binding-linux-arm64-musl": ["@oxlint/binding-linux-arm64-musl@1.46.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-X/aPB1rpJUdykjWSeeGIbjk6qbD8VDulgLuTSMWgr/t6m1ljcAjqHb1g49pVG9bZl55zjECgzvlpPLWnfb4FMQ=="], + "@oxfmt/binding-win32-arm64-msvc": ["@oxfmt/binding-win32-arm64-msvc@0.35.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-uD/NGdM65eKNCDGyTGdO8e9n3IHX+wwuorBvEYrPJXhDXL9qz6gzddmXH8EN04ejUXUujlq4FsoSeCfbg0Y+Jg=="], - "@oxlint/binding-linux-ppc64-gnu": ["@oxlint/binding-linux-ppc64-gnu@1.46.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-AymyOxGWwKY2KJa8b+h8iLrYJZbWKYCjqctSc2q6uIAkYPrCsxcWlge1JP6XZ14Sa80DVMwI/QvktbytSV+xVw=="], + "@oxfmt/binding-win32-ia32-msvc": ["@oxfmt/binding-win32-ia32-msvc@0.35.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-oSRD2k8J2uxYDEKR2nAE/YTY9PobOEnhZgCmspHu0+yBQ665yH8lFErQVSTE7fcGJmJp/cC6322/gc8VFuQf7g=="], - "@oxlint/binding-linux-riscv64-gnu": ["@oxlint/binding-linux-riscv64-gnu@1.46.0", "", { "os": "linux", "cpu": "none" }, "sha512-PkeVdPKCDA59rlMuucsel2LjlNEpslQN5AhkMMorIJZItbbqi/0JSuACCzaiIcXYv0oNfbeQ8rbOBikv+aT6cg=="], + "@oxfmt/binding-win32-x64-msvc": ["@oxfmt/binding-win32-x64-msvc@0.35.0", "", { "os": "win32", "cpu": "x64" }, "sha512-WCDJjlS95NboR0ugI2BEwzt1tYvRDorDRM9Lvctls1SLyKYuNRCyrPwp1urUPFBnwgBNn9p2/gnmo7gFMySRoQ=="], - "@oxlint/binding-linux-riscv64-musl": ["@oxlint/binding-linux-riscv64-musl@1.46.0", "", { "os": "linux", "cpu": "none" }, "sha512-snQaRLO/X+Ry/CxX1px1g8GUbmXzymdRs+/RkP2bySHWZFhFDtbLm2hA1ujX/jKlTLMJDZn4hYzFGLDwG/Rh2w=="], + "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.50.0", "", { "os": "android", "cpu": "arm" }, "sha512-G7MRGk/6NCe+L8ntonRdZP7IkBfEpiZ/he3buLK6JkLgMHgJShXZ+BeOwADmspXez7U7F7L1Anf4xLSkLHiGTg=="], - "@oxlint/binding-linux-s390x-gnu": ["@oxlint/binding-linux-s390x-gnu@1.46.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-kZhDMwUe/sgDTluGao9c0Dqc1JzV6wPzfGo0l/FLQdh5Zmp39Yg1FbBsCgsJfVKmKl1fNqsHyFLTShWMOlOEhA=="], + "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.50.0", "", { "os": "android", "cpu": "arm64" }, "sha512-GeSuMoJWCVpovJi/e3xDSNgjeR8WEZ6MCXL6EtPiCIM2NTzv7LbflARINTXTJy2oFBYyvdf/l2PwHzYo6EdXvg=="], - "@oxlint/binding-linux-x64-gnu": ["@oxlint/binding-linux-x64-gnu@1.46.0", "", { "os": "linux", "cpu": "x64" }, "sha512-n5a7VtQTxHZ13cNAKQc3ziARv5bE1Fx868v/tnhZNVUjaRNYe5uiUrRJ/LZghdAzOxVuQGarjjq/q4QM2+9OPA=="], + "@oxlint/binding-darwin-arm64": ["@oxlint/binding-darwin-arm64@1.50.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-w3SY5YtxGnxCHPJ8Twl3KmS9oja1gERYk3AMoZ7Hv8P43ZtB6HVfs02TxvarxfL214Tm3uzvc2vn+DhtUNeKnw=="], - "@oxlint/binding-linux-x64-musl": ["@oxlint/binding-linux-x64-musl@1.46.0", "", { "os": "linux", "cpu": "x64" }, "sha512-KpsDU/BhdVn3iKCLxMXAOZIpO8fS0jEA5iluRoK1rhHPwKtpzEm/OCwERsu/vboMSZm66qnoTUVXRPJ8M+iKVQ=="], + "@oxlint/binding-darwin-x64": ["@oxlint/binding-darwin-x64@1.50.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-hNfogDqy7tvmllXKBSlHo6k5x7dhTUVOHbMSE15CCAcXzmqf5883aPvBYPOq9AE7DpDUQUZ1kVE22YbiGW+tuw=="], - "@oxlint/binding-openharmony-arm64": ["@oxlint/binding-openharmony-arm64@1.46.0", "", { "os": "none", "cpu": "arm64" }, "sha512-jtbqUyEXlsDlRmMtTZqNbw49+1V/WxqNAR5l0S3OEkdat9diI5I+eqq9IT+jb5cSDdszTGcXpn7S3+gUYSydxQ=="], + "@oxlint/binding-freebsd-x64": ["@oxlint/binding-freebsd-x64@1.50.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-ykZevOWEyu0nsxolA911ucxpEv0ahw8jfEeGWOwwb/VPoE4xoexuTOAiPNlWZNJqANlJl7yp8OyzCtXTUAxotw=="], - "@oxlint/binding-win32-arm64-msvc": ["@oxlint/binding-win32-arm64-msvc@1.46.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-EE8NjpqEZPwHQVigNvdyJ11dZwWIfsfn4VeBAuiJeAdrnY4HFX27mIjJINJgP5ZdBYEFV1OWH/eb9fURCYel8w=="], + "@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/binding-linux-arm-gnueabihf@1.50.0", "", { "os": "linux", "cpu": "arm" }, "sha512-hif3iDk7vo5GGJ4OLCCZAf2vjnU9FztGw4L0MbQL0M2iY9LKFtDMMiQAHmkF0PQGQMVbTYtPdXCLKVgdkiqWXQ=="], - "@oxlint/binding-win32-ia32-msvc": ["@oxlint/binding-win32-ia32-msvc@1.46.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-BHyk3H/HRdXs+uImGZ/2+qCET+B8lwGHOm7m54JiJEEUWf3zYCFX/Df1SPqtozWWmnBvioxoTG1J3mPRAr8KUA=="], + "@oxlint/binding-linux-arm-musleabihf": ["@oxlint/binding-linux-arm-musleabihf@1.50.0", "", { "os": "linux", "cpu": "arm" }, "sha512-dVp9iSssiGAnTNey2Ruf6xUaQhdnvcFOJyRWd/mu5o2jVbFK15E5fbWGeFRfmuobu5QXuROtFga44+7DOS3PLg=="], - "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.46.0", "", { "os": "win32", "cpu": "x64" }, "sha512-DJbQsSJUr4KSi9uU0QqOgI7PX2C+fKGZX+YDprt3vM2sC0dWZsgVTLoN2vtkNyEWJSY2mnvRFUshWXT3bmo0Ug=="], + "@oxlint/binding-linux-arm64-gnu": ["@oxlint/binding-linux-arm64-gnu@1.50.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-1cT7yz2HA910CKA9NkH1ZJo50vTtmND2fkoW1oyiSb0j6WvNtJ0Wx2zoySfXWc/c+7HFoqRK5AbEoL41LOn9oA=="], + + "@oxlint/binding-linux-arm64-musl": ["@oxlint/binding-linux-arm64-musl@1.50.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-++B3k/HEPFVlj89cOz8kWfQccMZB/aWL9AhsW7jPIkG++63Mpwb2cE9XOEsd0PATbIan78k2Gky+09uWM1d/gQ=="], + + "@oxlint/binding-linux-ppc64-gnu": ["@oxlint/binding-linux-ppc64-gnu@1.50.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Z9b/KpFMkx66w3gVBqjIC1AJBTZAGoI9+U+K5L4QM0CB/G0JSNC1es9b3Y0Vcrlvtdn8A+IQTkYjd/Q0uCSaZw=="], + + "@oxlint/binding-linux-riscv64-gnu": ["@oxlint/binding-linux-riscv64-gnu@1.50.0", "", { "os": "linux", "cpu": "none" }, "sha512-jvmuIw8wRSohsQlFNIST5uUwkEtEJmOQYr33bf/K2FrFPXHhM4KqGekI3ShYJemFS/gARVacQFgBzzJKCAyJjg=="], + + "@oxlint/binding-linux-riscv64-musl": ["@oxlint/binding-linux-riscv64-musl@1.50.0", "", { "os": "linux", "cpu": "none" }, "sha512-x+UrN47oYNh90nmAAyql8eQaaRpHbDPu5guasDg10+OpszUQ3/1+1J6zFMmV4xfIEgTcUXG/oI5fxJhF4eWCNA=="], + + "@oxlint/binding-linux-s390x-gnu": ["@oxlint/binding-linux-s390x-gnu@1.50.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-i/JLi2ljLUIVfekMj4ISmdt+Hn11wzYUdRRrkVUYsCWw7zAy5xV7X9iA+KMyM156LTFympa7s3oKBjuCLoTAUQ=="], + + "@oxlint/binding-linux-x64-gnu": ["@oxlint/binding-linux-x64-gnu@1.50.0", "", { "os": "linux", "cpu": "x64" }, "sha512-/C7brhn6c6UUPccgSPCcpLQXcp+xKIW/3sji/5VZ8/OItL3tQ2U7KalHz887UxxSQeEOmd1kY6lrpuwFnmNqOA=="], + + "@oxlint/binding-linux-x64-musl": ["@oxlint/binding-linux-x64-musl@1.50.0", "", { "os": "linux", "cpu": "x64" }, "sha512-oDR1f+bGOYU8LfgtEW8XtotWGB63ghtcxk5Jm6IDTCk++rTA/IRMsjOid2iMd+1bW+nP9Mdsmcdc7VbPD3+iyQ=="], + + "@oxlint/binding-openharmony-arm64": ["@oxlint/binding-openharmony-arm64@1.50.0", "", { "os": "none", "cpu": "arm64" }, "sha512-4CmRGPp5UpvXyu4jjP9Tey/SrXDQLRvZXm4pb4vdZBxAzbFZkCyh0KyRy4txld/kZKTJlW4TO8N1JKrNEk+mWw=="], + + "@oxlint/binding-win32-arm64-msvc": ["@oxlint/binding-win32-arm64-msvc@1.50.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Fq0M6vsGcFsSfeuWAACDhd5KJrO85ckbEfe1EGuBj+KPyJz7KeWte2fSFrFGmNKNXyhEMyx4tbgxiWRujBM2KQ=="], + + "@oxlint/binding-win32-ia32-msvc": ["@oxlint/binding-win32-ia32-msvc@1.50.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-qTdWR9KwY/vxJGhHVIZG2eBOhidOQvOwzDxnX+jhW/zIVacal1nAhR8GLkiywW8BIFDkQKXo/zOfT+/DY+ns/w=="], + + "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.50.0", "", { "os": "win32", "cpu": "x64" }, "sha512-682t7npLC4G2Ca+iNlI9fhAKTcFPYYXJjwoa88H4q+u5HHHlsnL/gHULapX3iqp+A8FIJbgdylL5KMYo2LaluQ=="], "@pierre/diffs": ["@pierre/diffs@1.1.0-beta.16", "", { "dependencies": { "@shikijs/transformers": "^3.0.0", "diff": "8.0.3", "hast-util-to-html": "9.0.5", "lru_map": "0.4.1", "shiki": "^3.0.0" }, "peerDependencies": { "react": "^18.3.1 || ^19.0.0", "react-dom": "^18.3.1 || ^19.0.0" } }, "sha512-McjTuEPuacSIcXdoI2O9W6VSHIOs9ApEHnEUwONKZnKqIo2GGv1vNg9Pr8tgBOL7lgBWNEHX5ROJ5z1X74sENQ=="], @@ -1115,9 +1137,9 @@ "outvariant": ["outvariant@1.4.3", "", {}, "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA=="], - "oxfmt": ["oxfmt@0.28.0", "", { "dependencies": { "tinypool": "2.1.0" }, "optionalDependencies": { "@oxfmt/darwin-arm64": "0.28.0", "@oxfmt/darwin-x64": "0.28.0", "@oxfmt/linux-arm64-gnu": "0.28.0", "@oxfmt/linux-arm64-musl": "0.28.0", "@oxfmt/linux-x64-gnu": "0.28.0", "@oxfmt/linux-x64-musl": "0.28.0", "@oxfmt/win32-arm64": "0.28.0", "@oxfmt/win32-x64": "0.28.0" }, "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-3+hhBqPE6Kp22KfJmnstrZbl+KdOVSEu1V0ABaFIg1rYLtrMgrupx9znnHgHLqKxAVHebjTdiCJDk30CXOt6cw=="], + "oxfmt": ["oxfmt@0.35.0", "", { "dependencies": { "tinypool": "2.1.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.35.0", "@oxfmt/binding-android-arm64": "0.35.0", "@oxfmt/binding-darwin-arm64": "0.35.0", "@oxfmt/binding-darwin-x64": "0.35.0", "@oxfmt/binding-freebsd-x64": "0.35.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.35.0", "@oxfmt/binding-linux-arm-musleabihf": "0.35.0", "@oxfmt/binding-linux-arm64-gnu": "0.35.0", "@oxfmt/binding-linux-arm64-musl": "0.35.0", "@oxfmt/binding-linux-ppc64-gnu": "0.35.0", "@oxfmt/binding-linux-riscv64-gnu": "0.35.0", "@oxfmt/binding-linux-riscv64-musl": "0.35.0", "@oxfmt/binding-linux-s390x-gnu": "0.35.0", "@oxfmt/binding-linux-x64-gnu": "0.35.0", "@oxfmt/binding-linux-x64-musl": "0.35.0", "@oxfmt/binding-openharmony-arm64": "0.35.0", "@oxfmt/binding-win32-arm64-msvc": "0.35.0", "@oxfmt/binding-win32-ia32-msvc": "0.35.0", "@oxfmt/binding-win32-x64-msvc": "0.35.0" }, "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-QYeXWkP+aLt7utt5SLivNIk09glWx9QE235ODjgcEZ3sd1VMaUBSpLymh6ZRCA76gD2rMP4bXanUz/fx+nLM9Q=="], - "oxlint": ["oxlint@1.46.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.46.0", "@oxlint/binding-android-arm64": "1.46.0", "@oxlint/binding-darwin-arm64": "1.46.0", "@oxlint/binding-darwin-x64": "1.46.0", "@oxlint/binding-freebsd-x64": "1.46.0", "@oxlint/binding-linux-arm-gnueabihf": "1.46.0", "@oxlint/binding-linux-arm-musleabihf": "1.46.0", "@oxlint/binding-linux-arm64-gnu": "1.46.0", "@oxlint/binding-linux-arm64-musl": "1.46.0", "@oxlint/binding-linux-ppc64-gnu": "1.46.0", "@oxlint/binding-linux-riscv64-gnu": "1.46.0", "@oxlint/binding-linux-riscv64-musl": "1.46.0", "@oxlint/binding-linux-s390x-gnu": "1.46.0", "@oxlint/binding-linux-x64-gnu": "1.46.0", "@oxlint/binding-linux-x64-musl": "1.46.0", "@oxlint/binding-openharmony-arm64": "1.46.0", "@oxlint/binding-win32-arm64-msvc": "1.46.0", "@oxlint/binding-win32-ia32-msvc": "1.46.0", "@oxlint/binding-win32-x64-msvc": "1.46.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.11.2" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-I9h42QDtAVsRwoueJ4PL/7qN5jFzIUXvbO4Z5ddtII92ZCiD7uiS/JW2V4viBSfGLsbZkQp3YEs6Ls4I8q+8tA=="], + "oxlint": ["oxlint@1.50.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.50.0", "@oxlint/binding-android-arm64": "1.50.0", "@oxlint/binding-darwin-arm64": "1.50.0", "@oxlint/binding-darwin-x64": "1.50.0", "@oxlint/binding-freebsd-x64": "1.50.0", "@oxlint/binding-linux-arm-gnueabihf": "1.50.0", "@oxlint/binding-linux-arm-musleabihf": "1.50.0", "@oxlint/binding-linux-arm64-gnu": "1.50.0", "@oxlint/binding-linux-arm64-musl": "1.50.0", "@oxlint/binding-linux-ppc64-gnu": "1.50.0", "@oxlint/binding-linux-riscv64-gnu": "1.50.0", "@oxlint/binding-linux-riscv64-musl": "1.50.0", "@oxlint/binding-linux-s390x-gnu": "1.50.0", "@oxlint/binding-linux-x64-gnu": "1.50.0", "@oxlint/binding-linux-x64-musl": "1.50.0", "@oxlint/binding-openharmony-arm64": "1.50.0", "@oxlint/binding-win32-arm64-msvc": "1.50.0", "@oxlint/binding-win32-ia32-msvc": "1.50.0", "@oxlint/binding-win32-x64-msvc": "1.50.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.14.1" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-iSJ4IZEICBma8cZX7kxIIz9PzsYLF2FaLAYN6RKu7VwRVKdu7RIgpP99bTZaGl//Yao7fsaGZLSEo5xBrI5ReQ=="], "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], diff --git a/package.json b/package.json index ac3a58a7525208541953bcc9f96b8f0d3397a294..94b1db738c91119bfe6cf0077097fc281521ecfe 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,8 @@ "sync:vscode-icons": "node scripts/sync-vscode-icons.mjs" }, "devDependencies": { - "oxfmt": "^0.28.0", - "oxlint": "^1.43.0", + "oxfmt": "^0.35.0", + "oxlint": "^1.50.0", "turbo": "^2.3.3", "typescript": "^5.7.3", "vitest": "^4.0.0" -- 2.54.0