477 lines · 14.9 KB · TypeScript
RawDownload
import assert from "node:assert/strict";import { it } from "@effect/vitest";import { Effect, Schema } from "effect"; import {  DEFAULT_PROVIDER_INTERACTION_MODE,  DEFAULT_RUNTIME_MODE,  OrchestrationCommand,  OrchestrationEvent,  OrchestrationGetTurnDiffInput,  OrchestrationLatestTurn,  ProjectCreatedPayload,  ProjectMetaUpdatedPayload,  OrchestrationProposedPlan,  OrchestrationSession,  ProjectCreateCommand,  ThreadMetaUpdatedPayload,  ThreadTurnStartCommand,  ThreadCreatedPayload,  ThreadTurnDiff,  ThreadTurnStartRequestedPayload,} from "./orchestration"; const decodeTurnDiffInput = Schema.decodeUnknownEffect(OrchestrationGetTurnDiffInput);const decodeThreadTurnDiff = Schema.decodeUnknownEffect(ThreadTurnDiff);const decodeProjectCreateCommand = Schema.decodeUnknownEffect(ProjectCreateCommand);const decodeProjectCreatedPayload = Schema.decodeUnknownEffect(ProjectCreatedPayload);const decodeProjectMetaUpdatedPayload = Schema.decodeUnknownEffect(ProjectMetaUpdatedPayload);const decodeThreadTurnStartCommand = Schema.decodeUnknownEffect(ThreadTurnStartCommand);const decodeThreadTurnStartRequestedPayload = Schema.decodeUnknownEffect(  ThreadTurnStartRequestedPayload,);const decodeOrchestrationLatestTurn = Schema.decodeUnknownEffect(OrchestrationLatestTurn);const decodeOrchestrationProposedPlan = Schema.decodeUnknownEffect(OrchestrationProposedPlan);const decodeOrchestrationSession = Schema.decodeUnknownEffect(OrchestrationSession);const decodeThreadCreatedPayload = Schema.decodeUnknownEffect(ThreadCreatedPayload);const decodeOrchestrationCommand = Schema.decodeUnknownEffect(OrchestrationCommand);const decodeOrchestrationEvent = Schema.decodeUnknownEffect(OrchestrationEvent);const decodeThreadMetaUpdatedPayload = Schema.decodeUnknownEffect(ThreadMetaUpdatedPayload); it.effect("parses turn diff input when fromTurnCount <= toTurnCount", () =>  Effect.gen(function* () {    const parsed = yield* decodeTurnDiffInput({      threadId: "thread-1",      fromTurnCount: 1,      toTurnCount: 2,    });    assert.strictEqual(parsed.fromTurnCount, 1);    assert.strictEqual(parsed.toTurnCount, 2);  }),); it.effect("rejects turn diff input when fromTurnCount > toTurnCount", () =>  Effect.gen(function* () {    const result = yield* Effect.exit(      decodeTurnDiffInput({        threadId: "thread-1",        fromTurnCount: 3,        toTurnCount: 2,      }),    );    assert.strictEqual(result._tag, "Failure");  }),); it.effect("rejects thread turn diff when fromTurnCount > toTurnCount", () =>  Effect.gen(function* () {    const result = yield* Effect.exit(      decodeThreadTurnDiff({        threadId: "thread-1",        fromTurnCount: 3,        toTurnCount: 2,        diff: "patch",      }),    );    assert.strictEqual(result._tag, "Failure");  }),); it.effect("trims branded ids and command string fields at decode boundaries", () =>  Effect.gen(function* () {    const parsed = yield* decodeProjectCreateCommand({      type: "project.create",      commandId: " cmd-1 ",      projectId: " project-1 ",      title: " Project Title ",      workspaceRoot: " /tmp/workspace ",      defaultModelSelection: {        provider: "codex",        model: " gpt-5.2 ",      },      createdAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.commandId, "cmd-1");    assert.strictEqual(parsed.projectId, "project-1");    assert.strictEqual(parsed.title, "Project Title");    assert.strictEqual(parsed.workspaceRoot, "/tmp/workspace");    assert.deepStrictEqual(parsed.defaultModelSelection, {      provider: "codex",      model: "gpt-5.2",    });  }),); it.effect("decodes historical project.created payloads with a default provider", () =>  Effect.gen(function* () {    const parsed = yield* decodeProjectCreatedPayload({      projectId: "project-1",      title: "Project Title",      workspaceRoot: "/tmp/workspace",      defaultModelSelection: {        provider: "codex",        model: "gpt-5.4",      },      scripts: [],      createdAt: "2026-01-01T00:00:00.000Z",      updatedAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.defaultModelSelection?.provider, "codex");  }),); it.effect("decodes project.meta-updated payloads with explicit default provider", () =>  Effect.gen(function* () {    const parsed = yield* decodeProjectMetaUpdatedPayload({      projectId: "project-1",      defaultModelSelection: {        provider: "claudeAgent",        model: "claude-opus-4-6",      },      updatedAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.defaultModelSelection?.provider, "claudeAgent");  }),); it.effect("rejects command fields that become empty after trim", () =>  Effect.gen(function* () {    const result = yield* Effect.exit(      decodeProjectCreateCommand({        type: "project.create",        commandId: "cmd-1",        projectId: "project-1",        title: "  ",        workspaceRoot: "/tmp/workspace",        createdAt: "2026-01-01T00:00:00.000Z",      }),    );    assert.strictEqual(result._tag, "Failure");  }),); it.effect("decodes thread.turn.start defaults for provider and runtime mode", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadTurnStartCommand({      type: "thread.turn.start",      commandId: "cmd-turn-1",      threadId: "thread-1",      message: {        messageId: "msg-1",        role: "user",        text: "hello",        attachments: [],      },      createdAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.modelSelection, undefined);    assert.strictEqual(parsed.runtimeMode, DEFAULT_RUNTIME_MODE);    assert.strictEqual(parsed.interactionMode, DEFAULT_PROVIDER_INTERACTION_MODE);  }),); it.effect("preserves explicit provider and runtime mode in thread.turn.start", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadTurnStartCommand({      type: "thread.turn.start",      commandId: "cmd-turn-2",      threadId: "thread-1",      message: {        messageId: "msg-2",        role: "user",        text: "hello",        attachments: [],      },      modelSelection: {        provider: "codex",        model: "gpt-5.4",      },      runtimeMode: "full-access",      createdAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.modelSelection?.provider, "codex");    assert.strictEqual(parsed.runtimeMode, "full-access");    assert.strictEqual(parsed.interactionMode, DEFAULT_PROVIDER_INTERACTION_MODE);  }),); it.effect("decodes thread.created runtime mode for historical events", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadCreatedPayload({      threadId: "thread-1",      projectId: "project-1",      title: "Thread title",      modelSelection: {        provider: "codex",        model: "gpt-5.4",      },      interactionMode: "default",      branch: null,      worktreePath: null,      createdAt: "2026-01-01T00:00:00.000Z",      updatedAt: "2026-01-01T00:00:00.000Z",    });     assert.strictEqual(parsed.runtimeMode, DEFAULT_RUNTIME_MODE);    assert.strictEqual(parsed.modelSelection.provider, "codex");  }),); it.effect("decodes thread.meta-updated payloads with explicit provider", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadMetaUpdatedPayload({      threadId: "thread-1",      modelSelection: {        provider: "claudeAgent",        model: "claude-opus-4-6",      },      updatedAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.modelSelection?.provider, "claudeAgent");  }),); it.effect("decodes thread archive and unarchive commands", () =>  Effect.gen(function* () {    const archive = yield* decodeOrchestrationCommand({      type: "thread.archive",      commandId: "cmd-archive-1",      threadId: "thread-1",    });    const unarchive = yield* decodeOrchestrationCommand({      type: "thread.unarchive",      commandId: "cmd-unarchive-1",      threadId: "thread-1",    });     assert.strictEqual(archive.type, "thread.archive");    assert.strictEqual(unarchive.type, "thread.unarchive");  }),); it.effect("decodes thread archived and unarchived events", () =>  Effect.gen(function* () {    const archived = yield* decodeOrchestrationEvent({      sequence: 1,      eventId: "event-archive-1",      aggregateKind: "thread",      aggregateId: "thread-1",      type: "thread.archived",      occurredAt: "2026-01-01T00:00:00.000Z",      commandId: "cmd-archive-1",      causationEventId: null,      correlationId: "cmd-archive-1",      metadata: {},      payload: {        threadId: "thread-1",        archivedAt: "2026-01-01T00:00:00.000Z",        updatedAt: "2026-01-01T00:00:00.000Z",      },    });    const unarchived = yield* decodeOrchestrationEvent({      sequence: 2,      eventId: "event-unarchive-1",      aggregateKind: "thread",      aggregateId: "thread-1",      type: "thread.unarchived",      occurredAt: "2026-01-02T00:00:00.000Z",      commandId: "cmd-unarchive-1",      causationEventId: null,      correlationId: "cmd-unarchive-1",      metadata: {},      payload: {        threadId: "thread-1",        updatedAt: "2026-01-02T00:00:00.000Z",      },    });     assert.strictEqual(archived.type, "thread.archived");    assert.strictEqual(archived.payload.archivedAt, "2026-01-01T00:00:00.000Z");    assert.strictEqual(unarchived.type, "thread.unarchived");  }),); it.effect("accepts provider-scoped model options in thread.turn.start", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadTurnStartCommand({      type: "thread.turn.start",      commandId: "cmd-turn-options",      threadId: "thread-1",      message: {        messageId: "msg-options",        role: "user",        text: "hello",        attachments: [],      },      modelSelection: {        provider: "codex",        model: "gpt-5.3-codex",        options: {          reasoningEffort: "high",          fastMode: true,        },      },      createdAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.modelSelection?.provider, "codex");    assert.strictEqual(parsed.modelSelection?.options?.reasoningEffort, "high");    assert.strictEqual(parsed.modelSelection?.options?.fastMode, true);  }),); it.effect("accepts a title seed in thread.turn.start", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadTurnStartCommand({      type: "thread.turn.start",      commandId: "cmd-turn-title-seed",      threadId: "thread-1",      message: {        messageId: "msg-title-seed",        role: "user",        text: "hello",        attachments: [],      },      titleSeed: "Investigate reconnect failures",      createdAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.titleSeed, "Investigate reconnect failures");  }),); it.effect("accepts a source proposed plan reference in thread.turn.start", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadTurnStartCommand({      type: "thread.turn.start",      commandId: "cmd-turn-source-plan",      threadId: "thread-2",      message: {        messageId: "msg-source-plan",        role: "user",        text: "implement this",        attachments: [],      },      sourceProposedPlan: {        threadId: "thread-1",        planId: "plan-1",      },      createdAt: "2026-01-01T00:00:00.000Z",    });    assert.deepStrictEqual(parsed.sourceProposedPlan, {      threadId: "thread-1",      planId: "plan-1",    });  }),); it.effect(  "decodes thread.turn-start-requested defaults for provider, runtime mode, and interaction mode",  () =>    Effect.gen(function* () {      const parsed = yield* decodeThreadTurnStartRequestedPayload({        threadId: "thread-1",        messageId: "msg-1",        createdAt: "2026-01-01T00:00:00.000Z",      });      assert.strictEqual(parsed.modelSelection, undefined);      assert.strictEqual(parsed.runtimeMode, DEFAULT_RUNTIME_MODE);      assert.strictEqual(parsed.interactionMode, DEFAULT_PROVIDER_INTERACTION_MODE);      assert.strictEqual(parsed.sourceProposedPlan, undefined);    }),); it.effect("decodes thread.turn-start-requested source proposed plan metadata when present", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadTurnStartRequestedPayload({      threadId: "thread-2",      messageId: "msg-2",      sourceProposedPlan: {        threadId: "thread-1",        planId: "plan-1",      },      createdAt: "2026-01-01T00:00:00.000Z",    });    assert.deepStrictEqual(parsed.sourceProposedPlan, {      threadId: "thread-1",      planId: "plan-1",    });  }),); it.effect("decodes thread.turn-start-requested title seed when present", () =>  Effect.gen(function* () {    const parsed = yield* decodeThreadTurnStartRequestedPayload({      threadId: "thread-2",      messageId: "msg-2",      titleSeed: "Investigate reconnect failures",      createdAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.titleSeed, "Investigate reconnect failures");  }),); it.effect("decodes latest turn source proposed plan metadata when present", () =>  Effect.gen(function* () {    const parsed = yield* decodeOrchestrationLatestTurn({      turnId: "turn-2",      state: "running",      requestedAt: "2026-01-01T00:00:00.000Z",      startedAt: "2026-01-01T00:00:01.000Z",      completedAt: null,      assistantMessageId: null,      sourceProposedPlan: {        threadId: "thread-1",        planId: "plan-1",      },    });    assert.deepStrictEqual(parsed.sourceProposedPlan, {      threadId: "thread-1",      planId: "plan-1",    });  }),); it.effect("decodes orchestration session runtime mode defaults", () =>  Effect.gen(function* () {    const parsed = yield* decodeOrchestrationSession({      threadId: "thread-1",      status: "idle",      providerName: null,      providerSessionId: null,      providerThreadId: null,      activeTurnId: null,      lastError: null,      updatedAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.runtimeMode, DEFAULT_RUNTIME_MODE);  }),); it.effect("defaults proposed plan implementation metadata for historical rows", () =>  Effect.gen(function* () {    const parsed = yield* decodeOrchestrationProposedPlan({      id: "plan-1",      turnId: "turn-1",      planMarkdown: "# Plan",      createdAt: "2026-01-01T00:00:00.000Z",      updatedAt: "2026-01-01T00:00:00.000Z",    });    assert.strictEqual(parsed.implementedAt, null);    assert.strictEqual(parsed.implementationThreadId, null);  }),); it.effect("preserves proposed plan implementation metadata when present", () =>  Effect.gen(function* () {    const parsed = yield* decodeOrchestrationProposedPlan({      id: "plan-2",      turnId: "turn-2",      planMarkdown: "# Plan",      implementedAt: "2026-01-02T00:00:00.000Z",      implementationThreadId: "thread-2",      createdAt: "2026-01-01T00:00:00.000Z",      updatedAt: "2026-01-02T00:00:00.000Z",    });    assert.strictEqual(parsed.implementedAt, "2026-01-02T00:00:00.000Z");    assert.strictEqual(parsed.implementationThreadId, "thread-2");  }),);