import * as Schema from "effect/Schema"; import { ApprovalRequestId, ClientSurface, CommandId, EventId, IsoDateTime, NonNegativeInt, ProjectId, ProviderItemId, TrimmedNonEmptyString,} from "./baseSchemas.ts";import { RepositoryIdentity, ThreadEnvMode } from "./environment.ts";import { ModelSelection } from "./modelSelection.ts";import type { OrchestrationV2StoredEvent } from "./orchestrationV2.ts";import { ProjectIconOverride, ProjectScript } from "./project.ts"; /** * Which client dispatched the command that produced this event (#7774). * Stamped by the orchestration engine on client-dispatched commands; absent on * provider/server-originated events and on commands from clients too old to * report it. */export const OrchestrationClientOrigin = Schema.Struct({ surface: Schema.optional(ClientSurface), appVersion: Schema.optional(TrimmedNonEmptyString),});export type OrchestrationClientOrigin = typeof OrchestrationClientOrigin.Type; /** Metadata retained by the shared application event source. */export const ApplicationEventMetadata = Schema.Struct({ providerTurnId: Schema.optional(TrimmedNonEmptyString), providerItemId: Schema.optional(ProviderItemId), adapterKey: Schema.optional(TrimmedNonEmptyString), requestId: Schema.optional(ApprovalRequestId), ingestedAt: Schema.optional(IsoDateTime), origin: Schema.optional(OrchestrationClientOrigin),});export type ApplicationEventMetadata = typeof ApplicationEventMetadata.Type; export const ApplicationProjectCreatedPayload = Schema.Struct({ projectId: ProjectId, title: TrimmedNonEmptyString, workspaceRoot: TrimmedNonEmptyString, repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)), defaultModelSelection: Schema.NullOr(ModelSelection), // Per-project override for where new threads start; optional so persisted // events from older servers still decode. defaultThreadEnvMode: Schema.optional(Schema.NullOr(ThreadEnvMode)), // Optional so persisted events from older servers still decode. faviconPath: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)), projectIcon: Schema.optional(Schema.NullOr(ProjectIconOverride)), scripts: Schema.Array(ProjectScript), createdAt: IsoDateTime, updatedAt: IsoDateTime,});export type ApplicationProjectCreatedPayload = typeof ApplicationProjectCreatedPayload.Type; export const ApplicationProjectMetaUpdatedPayload = Schema.Struct({ projectId: ProjectId, title: Schema.optional(TrimmedNonEmptyString), workspaceRoot: Schema.optional(TrimmedNonEmptyString), repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)), defaultModelSelection: Schema.optional(Schema.NullOr(ModelSelection)), // Absent = leave unchanged; null = clear the override. defaultThreadEnvMode: Schema.optional(Schema.NullOr(ThreadEnvMode)), autoPull: Schema.optional(Schema.Boolean), faviconPath: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)), projectIcon: Schema.optional(Schema.NullOr(ProjectIconOverride)), scripts: Schema.optional(Schema.Array(ProjectScript)), updatedAt: IsoDateTime,});export type ApplicationProjectMetaUpdatedPayload = typeof ApplicationProjectMetaUpdatedPayload.Type; export const ApplicationProjectDeletedPayload = Schema.Struct({ projectId: ProjectId, deletedAt: IsoDateTime,});export type ApplicationProjectDeletedPayload = typeof ApplicationProjectDeletedPayload.Type; const ApplicationProjectEventBaseFields = { sequence: NonNegativeInt, eventId: EventId, aggregateKind: Schema.Literal("project"), aggregateId: ProjectId, occurredAt: IsoDateTime, commandId: Schema.NullOr(CommandId), causationEventId: Schema.NullOr(EventId), correlationId: Schema.NullOr(CommandId), metadata: ApplicationEventMetadata,} as const; export const ApplicationProjectCreatedEvent = Schema.Struct({ ...ApplicationProjectEventBaseFields, type: Schema.Literal("project.created"), payload: ApplicationProjectCreatedPayload,});export type ApplicationProjectCreatedEvent = typeof ApplicationProjectCreatedEvent.Type; export const ApplicationProjectMetaUpdatedEvent = Schema.Struct({ ...ApplicationProjectEventBaseFields, type: Schema.Literal("project.meta-updated"), payload: ApplicationProjectMetaUpdatedPayload,});export type ApplicationProjectMetaUpdatedEvent = typeof ApplicationProjectMetaUpdatedEvent.Type; export const ApplicationProjectDeletedEvent = Schema.Struct({ ...ApplicationProjectEventBaseFields, type: Schema.Literal("project.deleted"), payload: ApplicationProjectDeletedPayload,});export type ApplicationProjectDeletedEvent = typeof ApplicationProjectDeletedEvent.Type; export const ApplicationProjectEvent = Schema.Union([ ApplicationProjectCreatedEvent, ApplicationProjectMetaUpdatedEvent, ApplicationProjectDeletedEvent,]);export type ApplicationProjectEvent = typeof ApplicationProjectEvent.Type; /** Events exposed by the retained application event source. */export type ApplicationStoredEvent = ApplicationProjectEvent | OrchestrationV2StoredEvent;
import * as Schema from "effect/Schema";
import {
ApprovalRequestId,
ClientSurface,
CommandId,
EventId,
IsoDateTime,
NonNegativeInt,
ProjectId,
ProviderItemId,
TrimmedNonEmptyString,
} from "./baseSchemas.ts";
import { RepositoryIdentity, ThreadEnvMode } from "./environment.ts";
import { ModelSelection } from "./modelSelection.ts";
import type { OrchestrationV2StoredEvent } from "./orchestrationV2.ts";
import { ProjectIconOverride, ProjectScript } from "./project.ts";
/**
* Which client dispatched the command that produced this event (#7774).
* Stamped by the orchestration engine on client-dispatched commands; absent on
* provider/server-originated events and on commands from clients too old to
* report it.
*/
export const OrchestrationClientOrigin = Schema.Struct({
surface: Schema.optional(ClientSurface),
appVersion: Schema.optional(TrimmedNonEmptyString),
});
export type OrchestrationClientOrigin = typeof OrchestrationClientOrigin.Type;
/** Metadata retained by the shared application event source. */
export const ApplicationEventMetadata = Schema.Struct({
providerTurnId: Schema.optional(TrimmedNonEmptyString),
providerItemId: Schema.optional(ProviderItemId),
adapterKey: Schema.optional(TrimmedNonEmptyString),
requestId: Schema.optional(ApprovalRequestId),
ingestedAt: Schema.optional(IsoDateTime),
origin: Schema.optional(OrchestrationClientOrigin),
});
export type ApplicationEventMetadata = typeof ApplicationEventMetadata.Type;
export const ApplicationProjectCreatedPayload = Schema.Struct({
projectId: ProjectId,
title: TrimmedNonEmptyString,
workspaceRoot: TrimmedNonEmptyString,
repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)),
defaultModelSelection: Schema.NullOr(ModelSelection),
// Per-project override for where new threads start; optional so persisted
// events from older servers still decode.
defaultThreadEnvMode: Schema.optional(Schema.NullOr(ThreadEnvMode)),
// Optional so persisted events from older servers still decode.
faviconPath: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),
projectIcon: Schema.optional(Schema.NullOr(ProjectIconOverride)),
scripts: Schema.Array(ProjectScript),
createdAt: IsoDateTime,
updatedAt: IsoDateTime,
});
export type ApplicationProjectCreatedPayload = typeof ApplicationProjectCreatedPayload.Type;
export const ApplicationProjectMetaUpdatedPayload = Schema.Struct({
projectId: ProjectId,
title: Schema.optional(TrimmedNonEmptyString),
workspaceRoot: Schema.optional(TrimmedNonEmptyString),
repositoryIdentity: Schema.optional(Schema.NullOr(RepositoryIdentity)),
defaultModelSelection: Schema.optional(Schema.NullOr(ModelSelection)),
// Absent = leave unchanged; null = clear the override.
defaultThreadEnvMode: Schema.optional(Schema.NullOr(ThreadEnvMode)),
autoPull: Schema.optional(Schema.Boolean),
faviconPath: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),
projectIcon: Schema.optional(Schema.NullOr(ProjectIconOverride)),
scripts: Schema.optional(Schema.Array(ProjectScript)),
updatedAt: IsoDateTime,
});
export type ApplicationProjectMetaUpdatedPayload = typeof ApplicationProjectMetaUpdatedPayload.Type;
export const ApplicationProjectDeletedPayload = Schema.Struct({
projectId: ProjectId,
deletedAt: IsoDateTime,
});
export type ApplicationProjectDeletedPayload = typeof ApplicationProjectDeletedPayload.Type;
const ApplicationProjectEventBaseFields = {
sequence: NonNegativeInt,
eventId: EventId,
aggregateKind: Schema.Literal("project"),
aggregateId: ProjectId,
occurredAt: IsoDateTime,
commandId: Schema.NullOr(CommandId),
causationEventId: Schema.NullOr(EventId),
correlationId: Schema.NullOr(CommandId),
metadata: ApplicationEventMetadata,
} as const;
export const ApplicationProjectCreatedEvent = Schema.Struct({
...ApplicationProjectEventBaseFields,
type: Schema.Literal("project.created"),
payload: ApplicationProjectCreatedPayload,
});
export type ApplicationProjectCreatedEvent = typeof ApplicationProjectCreatedEvent.Type;
export const ApplicationProjectMetaUpdatedEvent = Schema.Struct({
...ApplicationProjectEventBaseFields,
type: Schema.Literal("project.meta-updated"),
payload: ApplicationProjectMetaUpdatedPayload,
});
export type ApplicationProjectMetaUpdatedEvent = typeof ApplicationProjectMetaUpdatedEvent.Type;
export const ApplicationProjectDeletedEvent = Schema.Struct({
...ApplicationProjectEventBaseFields,
type: Schema.Literal("project.deleted"),
payload: ApplicationProjectDeletedPayload,
});
export type ApplicationProjectDeletedEvent = typeof ApplicationProjectDeletedEvent.Type;
export const ApplicationProjectEvent = Schema.Union([
ApplicationProjectCreatedEvent,
ApplicationProjectMetaUpdatedEvent,
ApplicationProjectDeletedEvent,
]);
export type ApplicationProjectEvent = typeof ApplicationProjectEvent.Type;
/** Events exposed by the retained application event source. */
export type ApplicationStoredEvent = ApplicationProjectEvent | OrchestrationV2StoredEvent;