@mozaik-ai/core 4.2.0-beta.6 → 4.2.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +13 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/domain/space/event.ts","../src/domain/space/participant.ts","../src/domain/space/runtime.ts","../src/util/uuid-generator.ts","../src/application/use-cases/create-participant.ts","../src/application/use-cases/participant-joined.ts","../src/infrastructure/repositories/in-memory-space-repository.ts","../src/domain/space/event-publisher.ts","../src/application/use-cases/participant-left.ts","../src/application/use-cases/send-message.ts","../src/util/system-clock.ts","../src/domain/space/space.ts","../src/application/use-cases/create-space.ts","../src/define-runtime.ts","../src/domain/space/situation-specification.ts","../src/domain/agent/agent.ts","../src/application/use-cases/create-agent.ts","../src/infrastructure/repositories/in-memory-agent-repository.ts","../src/domain/agent/loop/specification.ts","../src/domain/agent/loop/action.ts","../src/domain/agent/loop/rule.ts","../src/domain/agent/loop/loop.ts","../src/application/use-cases/create-loop.ts","../src/infrastructure/repositories/in-memory-loop-repository.ts","../src/domain/inference/tool-use-item-factory.ts","../src/application/runners/local-tool-runner.ts","../src/application/runners/inference-runner.ts","../src/domain/inference/request-validation/reasoning-effort.ts","../src/domain/inference/request-validation/tool-calling.ts","../src/domain/inference/request-validation/streaming.ts","../src/domain/inference/request-validation/structured-output.ts","../src/domain/inference/request-validation/context.ts","../src/domain/inference/request-validation/inference-request-validator.ts","../src/domain/inference/token-usage.ts","../src/infrastructure/providers/anthropic/anthropic-messages-mapper.ts","../src/infrastructure/providers/anthropic/anthropic-messages.ts","../src/infrastructure/providers/openai/openai-responses-mapper.ts","../src/infrastructure/providers/openai/openai-responses.ts","../src/infrastructure/providers/gemini/gemini-generate-content.ts","../src/infrastructure/providers/gemini/gemini-generate-content-mapper.ts","../src/infrastructure/providers/openai/openai-chat-completions-mapper.ts","../src/infrastructure/providers/openai/openai-chat-completions.ts","../src/infrastructure/providers/anthropic/models/claude-4-6-sonnet.ts","../src/infrastructure/providers/anthropic/models/claude-4-8-opus.ts","../src/infrastructure/providers/anthropic/models/claude-4-7-opus.ts","../src/infrastructure/providers/gemini/models/gemini-3-5-flash.ts","../src/infrastructure/providers/gemini/models/gemini-3-1-pro.ts","../src/infrastructure/providers/deepseek/models/deepseek-v4-flash.ts","../src/infrastructure/providers/deepseek/models/deepseek-v4-pro.ts","../src/infrastructure/providers/openai/models/gpt-5-4.ts","../src/infrastructure/providers/openai/models/gpt-5-4-mini.ts","../src/infrastructure/providers/openai/models/gpt-5-4-nano.ts","../src/infrastructure/providers/openai/models/gpt-5-5.ts","../src/infrastructure/providers/anthropic/models/claude-4-5-haiku.ts","../src/infrastructure/providers/openai/models/gpt-6-luna.ts","../src/infrastructure/providers/openai/models/gpt-6-sol.ts","../src/infrastructure/providers/openai/models/gpt-6-1-sol.ts","../src/infrastructure/providers/openai/models/gpt-6-astra.ts","../src/infrastructure/providers/anthropic/models/claude-5-sonnet.ts","../src/infrastructure/providers/anthropic/models/claude-5-5-sonnet.ts","../src/infrastructure/providers/anthropic/models/claude-5-5-opus.ts","../src/infrastructure/providers/anthropic/models/claude-5-1-fable.ts","../src/infrastructure/providers/gemini/models/gemini-3-5-flash-lite.ts","../src/infrastructure/providers/gemini/models/gemini-3-8-flash.ts","../src/infrastructure/providers/deepseek/models/deepseek-flash.ts","../src/infrastructure/providers/supported-models.ts","../src/domain/agent/loop/rule-engine.ts","../src/application/use-cases/run-loop.ts","../src/infrastructure/memory/runtime-memory.ts","../src/infrastructure/memory/runtime-memory-factory.ts","../src/application/directive-execution/directive-execution-strategy-resolver.ts","../src/application/directive-execution/complete-execution-strategy.ts","../src/application/directive-execution/inference-execution-strategy.ts","../src/application/directive-execution/tool-use-execution-strategy.ts","../src/application/directive-execution/wait-execution-strategy.ts","../src/agent-module.ts"],"sourcesContent":["import { SpaceEvent } from \"@domain/space/event\"\nimport { Participant } from \"@domain/space/participant\"\nimport { SharedState } from \"@domain/space/shared-state\"\nimport { defineRuntime } from \"src/define-runtime\"\nimport { SituationContext, SituationHandler, SituationProcessor } from \"@domain/space/situation-handler\"\nimport { SituationSpecification } from \"@domain/space/situation-specification\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { defineAgentModule, InferenceRunnerConfig, AgentModuleConfig } from \"./agent-module\"\nimport { GenerativeModel } from \"@domain/inference/generative-model\"\nimport { InferenceRunner } from \"@domain/inference/inference-runner\"\nimport { AgentRepository } from \"@domain/agent/agent-repository\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\nimport { ToolUseRunner } from \"@domain/inference/tool-use-runner\"\nimport { Agent } from \"@domain/agent/agent\"\nimport { ModelMessageItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\n\nexport {\n\tdefineRuntime,\n\tdefineAgentModule,\n\tInferenceRunnerConfig,\n\tGenerativeModel,\n\tInferenceRunner,\n\tAgentModuleConfig,\n\tAgentRepository,\n\tLoopRepository,\n\tToolUseRunner,\n\tSharedState,\n\tSpaceEvent,\n\tParticipant,\n\tSituationHandler,\n\tSituationProcessor,\n\tSituationSpecification,\n\tSituationContext,\n\tAgent,\n\tTool,\n\tToolUseResult,\n\tToolUseRequest,\n\tModelMessageItem,\n}\n","import { ParticipantManifest } from \"@domain/space/participant\"\n\nexport class SpaceEvent<TType extends string = string, TPayload = unknown> {\n\treadonly type: TType\n\treadonly producerId: string\n\treadonly occurredAt: Date\n\treadonly payload: TPayload\n\n\tconstructor(type: TType, producerId: string, occurredAt: Date, payload: TPayload) {\n\t\tthis.type = type\n\t\tthis.producerId = producerId\n\t\tthis.occurredAt = occurredAt\n\t\tthis.payload = payload\n\t}\n\n\tstatic create<TType extends string = string, TPayload = unknown>(\n\t\ttype: TType,\n\t\tproducerId: string,\n\t\toccurredAt: Date,\n\t\tpayload: TPayload,\n\t): SpaceEvent<TType, TPayload> {\n\t\treturn new SpaceEvent(type, producerId, occurredAt, payload)\n\t}\n}\n\nexport class ParticipantJoinedEvent extends SpaceEvent<\"participant.joined\", ParticipantManifest> {\n\tstatic init(manifest: ParticipantManifest, occurredAt: Date): ParticipantJoinedEvent {\n\t\treturn SpaceEvent.create(\"participant.joined\", manifest.id, occurredAt, manifest)\n\t}\n}\n\nexport class ParticipantLeftEvent extends SpaceEvent<\"participant.left\", ParticipantManifest> {\n\tstatic init(manifest: ParticipantManifest, occurredAt: Date): ParticipantLeftEvent {\n\t\treturn SpaceEvent.create(\"participant.left\", manifest.id, occurredAt, manifest)\n\t}\n}\n\nexport class MessageSentEvent extends SpaceEvent<\"message.sent\", { message: string }> {\n\tstatic init(producerId: string, message: string, occurredAt: Date): MessageSentEvent {\n\t\treturn SpaceEvent.create(\"message.sent\", producerId, occurredAt, { message })\n\t}\n}\n\nexport class ModelAnswerEvent extends SpaceEvent<\"model.answer\", { answer: string }> {\n\tstatic init(producerId: string, answer: string, occurredAt: Date): ModelAnswerEvent {\n\t\treturn ModelAnswerEvent.create(\"model.answer\", producerId, occurredAt, { answer })\n\t}\n}\n","import { SituationHandler } from \"@domain/space/situation-handler\"\n\nexport type ParticipantRole = \"agent\" | \"external\"\n\nexport type ParticipantManifest = {\n\treadonly id: string\n\treadonly name: string\n\treadonly role: ParticipantRole\n\treadonly capabilities?: readonly string[]\n}\n\nexport class Participant {\n\tprivate manifest: ParticipantManifest\n\tprivate handlers: SituationHandler[]\n\n\tconstructor(manifest: ParticipantManifest, handlers: SituationHandler[]) {\n\t\tthis.manifest = manifest\n\t\tthis.handlers = handlers\n\t}\n\n\tgetManifest(): ParticipantManifest {\n\t\treturn this.manifest\n\t}\n\n\tsetManifest(manifest: ParticipantManifest): void {\n\t\tthis.manifest = manifest\n\t}\n\n\tgetId(): string {\n\t\treturn this.manifest.id\n\t}\n\n\tgetHandlers(): SituationHandler[] {\n\t\treturn this.handlers\n\t}\n\n\tsetHandlers(handlers: SituationHandler[]): void {\n\t\tthis.handlers = handlers\n\t}\n}\n","import { SharedState } from \"@domain/space/shared-state\"\n\nexport class RuntimeService<TSharedState extends SharedState> {\n\tconstructor(public readonly state: TSharedState) {}\n}\n","export class UuidGenerator {\n\tstatic create(): string {\n\t\treturn crypto.randomUUID()\n\t}\n}\n","import { Participant, ParticipantManifest } from \"@domain/space/participant\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { UuidGenerator } from \"@util/uuid-generator\"\n\nexport class CreateParticipantUseCase {\n\tasync execute(name: string, capabilities: readonly string[], handlers: SituationHandler[]): Promise<Participant> {\n\t\tconst manifest: ParticipantManifest = {\n\t\t\tid: UuidGenerator.create(),\n\t\t\tname,\n\t\t\tcapabilities,\n\t\t\trole: \"external\",\n\t\t}\n\t\tconst participant = new Participant(manifest, handlers)\n\t\treturn participant\n\t}\n}\n","import { SpaceRepository } from \"@domain/space/space-repository\"\nimport { EventPublisher } from \"@domain/space/event-publisher\"\n\nexport class ParticipantJoinedUseCase {\n\tprivate readonly spaceRepository: SpaceRepository\n\tprivate readonly eventPublisher: EventPublisher\n\n\tconstructor(spaceRepository: SpaceRepository, eventPublisher: EventPublisher) {\n\t\tthis.spaceRepository = spaceRepository\n\t\tthis.eventPublisher = eventPublisher\n\t}\n\n\tasync execute(spaceId: string, participantId: string): Promise<void> {\n\t\tconst space = await this.spaceRepository.findById(spaceId)\n\t\tif (!space) {\n\t\t\tthrow new Error(\"Space not found\")\n\t\t}\n\t\tconst participant = space.getParticipant(participantId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(\"Participant not found\")\n\t\t}\n\t\tconst event = space.addParticipant(participant)\n\t\tif (event) {\n\t\t\tthis.eventPublisher.publish(event, space.getParticipants())\n\t\t}\n\t\tawait this.spaceRepository.save(space)\n\t}\n}\n","import { Space } from \"@domain/space/space\"\nimport { SpaceRepository } from \"@domain/space/space-repository\"\n\nexport class InMemorySpaceRepository implements SpaceRepository {\n\tprivate spaces: Space[] = []\n\n\tasync save(space: Space): Promise<void> {\n\t\tthis.spaces.push(space)\n\t}\n\n\tasync findById(id: string): Promise<Space | undefined> {\n\t\treturn this.spaces.find((space) => space.getId() === id)\n\t}\n\n\tasync delete(id: string): Promise<void> {\n\t\tthis.spaces = this.spaces.filter((space) => space.getId() !== id)\n\t}\n}\n","import { SpaceEvent } from \"./event\"\nimport { Participant } from \"./participant\"\n\nexport class EventPublisher {\n\tpublish(event: SpaceEvent, participants: Participant[]): void {\n\t\tfor (const participant of participants) {\n\t\t\tparticipant.getHandlers().forEach((handler) => {\n\t\t\t\tif (handler.specification.isSatisfiedBy({ event, participant })) {\n\t\t\t\t\thandler.processor.apply({ event, participant })\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n}\n","import { SpaceRepository } from \"@domain/space/space-repository\"\nimport { EventPublisher } from \"@domain/space/event-publisher\"\n\nexport class ParticipantLefUseCase {\n\tprivate readonly spaceRepository: SpaceRepository\n\tprivate readonly eventPublisher: EventPublisher\n\n\tconstructor(spaceRepository: SpaceRepository, eventPublisher: EventPublisher) {\n\t\tthis.spaceRepository = spaceRepository\n\t\tthis.eventPublisher = eventPublisher\n\t}\n\n\tasync execute(spaceId: string, participantId: string): Promise<void> {\n\t\tconst space = await this.spaceRepository.findById(spaceId)\n\t\tif (!space) {\n\t\t\tthrow new Error(\"Space not found\")\n\t\t}\n\t\tconst participant = space.getParticipant(participantId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(\"Participant not found\")\n\t\t}\n\t\tconst event = space.removeParticipant(participant)\n\t\tif (event) {\n\t\t\tthis.eventPublisher.publish(event, space.getParticipants())\n\t\t}\n\t\tawait this.spaceRepository.save(space)\n\t}\n}\n","import { SpaceRepository } from \"@domain/space/space-repository\"\nimport { EventPublisher } from \"@domain/space/event-publisher\"\n\nexport class SendMessageUseCase {\n\tconstructor(\n\t\tprivate readonly spaceRepository: SpaceRepository,\n\t\tprivate readonly eventPublisher: EventPublisher,\n\t) {}\n\n\tasync execute(spaceId: string, participantId: string, message: string): Promise<void> {\n\t\tconst space = await this.spaceRepository.findById(spaceId)\n\t\tif (!space) {\n\t\t\tthrow new Error(\"Space not found\")\n\t\t}\n\t\tconst participant = space.getParticipant(participantId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(\"Participant not found\")\n\t\t}\n\t\tconst event = space.sendMessage(participant, message, new Date())\n\t\tif (event) {\n\t\t\tthis.eventPublisher.publish(event, space.getParticipants())\n\t\t}\n\t\tawait this.spaceRepository.save(space)\n\t}\n}\n","export class SystemClock {\n\tstatic now(): Date {\n\t\treturn new Date()\n\t}\n}\n","import { MessageSentEvent, ParticipantJoinedEvent, ParticipantLeftEvent, SpaceEvent } from \"@domain/space/event\"\nimport { Participant } from \"@domain/space/participant\"\nimport { SystemClock } from \"@util/system-clock\"\nimport { UuidGenerator } from \"@util/uuid-generator\"\n\nexport type SpaceRecord = {\n\tid: string\n\tname: string\n\tparticipants: Participant[]\n}\n\nexport class Space {\n\tprivate readonly id: string\n\tprivate name: string\n\tprivate participants: Participant[]\n\tprivate events: SpaceEvent[]\n\n\tconstructor(id: string, name: string, participants: Participant[], events: SpaceEvent[] = []) {\n\t\tthis.id = id\n\t\tthis.name = name\n\t\tthis.participants = participants\n\t\tthis.events = events\n\t}\n\n\tgetId(): string {\n\t\treturn this.id\n\t}\n\n\tgetName(): string {\n\t\treturn this.name\n\t}\n\n\taddParticipant(participant: Participant): SpaceEvent | undefined {\n\t\tconst alreadyExists = this.participants.find((p) => p.getId() === participant.getId())\n\n\t\tif (alreadyExists) return\n\n\t\tthis.participants.push(participant)\n\n\t\tconst occurredAt = SystemClock.now()\n\t\treturn ParticipantJoinedEvent.init(participant.getManifest(), occurredAt)\n\t}\n\n\tgetParticipant(id: string): Participant | undefined {\n\t\tconst participant = this.getParticipants().find((p) => p.getId() === id)\n\t\tif (!participant) {\n\t\t\tthrow new Error(`Participant ${id} not found`)\n\t\t}\n\n\t\treturn participant\n\t}\n\n\tremoveParticipant(participant: Participant): SpaceEvent {\n\t\tthis.participants = this.participants.filter((p) => p.getId() !== participant.getId())\n\n\t\tconst occurredAt = SystemClock.now()\n\t\treturn ParticipantLeftEvent.init(participant.getManifest(), occurredAt)\n\t}\n\n\tgetParticipants(): Participant[] {\n\t\treturn [...this.participants]\n\t}\n\n\tsendMessage(participant: Participant, message: string, occurredAt: Date): SpaceEvent {\n\t\tconst event = MessageSentEvent.init(participant.getId(), message, occurredAt)\n\t\tthis.events.push(event)\n\t\treturn event\n\t}\n\n\tgetEvents(): SpaceEvent[] {\n\t\treturn [...this.events]\n\t}\n\n\tstatic create(name: string, participants: Participant[] = []): Space {\n\t\tconst id = UuidGenerator.create()\n\t\treturn new Space(id, name, participants)\n\t}\n\n\tget record(): SpaceRecord {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tname: this.name,\n\t\t\tparticipants: this.participants,\n\t\t}\n\t}\n\n\tstatic rehydrate({ id, name, participants }: SpaceRecord): Space {\n\t\treturn new Space(id, name, participants)\n\t}\n}\n","import { Space } from \"@domain/space/space\"\nimport { SpaceRepository } from \"@domain/space/space-repository\"\nimport { Participant } from \"@domain/space/participant\"\n\nexport class CreateSpaceUseCase {\n\tprivate readonly spaceRepository: SpaceRepository\n\n\tconstructor(spaceRepository: SpaceRepository) {\n\t\tthis.spaceRepository = spaceRepository\n\t}\n\n\tasync execute(name: string): Promise<Space> {\n\t\tconst participants: Participant[] = []\n\t\tconst space = Space.create(name, participants)\n\n\t\tawait this.spaceRepository.save(space)\n\t\treturn space\n\t}\n}\n","import { RuntimeService } from \"@domain/space/runtime\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { CreateParticipantUseCase } from \"@application/use-cases/create-participant\"\nimport { SharedState } from \"@domain/space/shared-state\"\nimport { ParticipantJoinedUseCase } from \"@application/use-cases/participant-joined\"\nimport { InMemorySpaceRepository } from \"@infrastructure/repositories/in-memory-space-repository\"\nimport { EventPublisher } from \"@domain/space/event-publisher\"\nimport { ParticipantLefUseCase } from \"@application/use-cases/participant-left\"\nimport { SendMessageUseCase } from \"@application/use-cases/send-message\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { CreateSpaceUseCase } from \"@application/use-cases/create-space\"\n\nexport function defineRuntime<TSharedState extends SharedState>() {\n\tlet runtime: RuntimeService<TSharedState> | null = null\n\n\tfunction initializeRuntime(config: { state: TSharedState }): RuntimeService<TSharedState> {\n\t\tif (runtime) {\n\t\t\tthrow new Error(\"Runtime already initialized\")\n\t\t}\n\n\t\truntime = new RuntimeService(config.state)\n\n\t\treturn runtime\n\t}\n\n\tfunction resolveRuntime(): RuntimeService<TSharedState> {\n\t\tif (!runtime) {\n\t\t\tthrow new Error(\"Runtime not initialized\")\n\t\t}\n\n\t\treturn runtime\n\t}\n\n\tconst createParticipantUseCase = new CreateParticipantUseCase()\n\n\tconst createParticipant = async (name: string, capabilities: readonly string[], handlers: SituationHandler[]) => {\n\t\treturn await createParticipantUseCase.execute(name, capabilities, handlers)\n\t}\n\n\tconst spaceRepository = new InMemorySpaceRepository()\n\tconst eventPublisher = new EventPublisher()\n\n\tconst createSpaceUseCase = new CreateSpaceUseCase(spaceRepository)\n\tconst createSpace = async (name: string) => {\n\t\treturn await createSpaceUseCase.execute(name)\n\t}\n\n\tconst participantJoinedUseCase = new ParticipantJoinedUseCase(spaceRepository, eventPublisher)\n\tconst join = async (spaceId: string, participantId: string) => {\n\t\treturn await participantJoinedUseCase.execute(spaceId, participantId)\n\t}\n\n\tconst participantLeftUseCase = new ParticipantLefUseCase(spaceRepository, eventPublisher)\n\tconst leave = async (spaceId: string, participantId: string) => {\n\t\treturn await participantLeftUseCase.execute(spaceId, participantId)\n\t}\n\n\tconst sendMessageUseCase = new SendMessageUseCase(spaceRepository, eventPublisher)\n\tconst sendMessage = async (spaceId: string, participantId: string, message: string) => {\n\t\treturn await sendMessageUseCase.execute(spaceId, participantId, message)\n\t}\n\n\tconst sendMessageTool: Tool = {\n\t\ttype: \"function\",\n\t\tname: \"send_message\",\n\t\tdescription: \"Send a message to the space. The message will be sent to all participants in the space.\",\n\t\tparameters: {\n\t\t\tspaceId: { type: \"string\" },\n\t\t\tsenderId: { type: \"string\" },\n\t\t\tmessage: { type: \"string\" },\n\t\t},\n\t\tstrict: true,\n\t\tinvoke: async (args: { spaceId: string; senderId: string; message: string }) => {\n\t\t\tconst sendMessageUseCase = new SendMessageUseCase(spaceRepository, eventPublisher)\n\t\t\tawait sendMessageUseCase.execute(args.spaceId, args.senderId, args.message)\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tmessage: \"Message sent successfully\",\n\t\t\t}\n\t\t},\n\t}\n\n\treturn {\n\t\tinitializeRuntime,\n\t\tresolveRuntime,\n\t\tcreateParticipant,\n\t\tcreateSpace,\n\t\tjoin,\n\t\tleave,\n\t\tsendMessage,\n\t\tsendMessageTool,\n\t}\n}\n","import { SpaceEvent } from \"@domain/space/event\"\nimport { Participant } from \"@domain/space/participant\"\n\nexport type SituationContext<TEvent extends SpaceEvent = SpaceEvent> = {\n\treadonly event: TEvent\n\treadonly participant: Participant\n}\n\nexport abstract class SituationSpecification<TEvent extends SpaceEvent = SpaceEvent> {\n\tabstract isSatisfiedBy(situationContext: SituationContext<TEvent>): boolean\n\n\tand(other: SituationSpecification<TEvent>): SituationSpecification<TEvent> {\n\t\treturn new AndSituationSpecification(this, other)\n\t}\n\n\tor(other: SituationSpecification<TEvent>): SituationSpecification<TEvent> {\n\t\treturn new OrSituationSpecification(this, other)\n\t}\n\n\tnot(): SituationSpecification<TEvent> {\n\t\treturn new NotSituationSpecification(this)\n\t}\n}\n\nclass AndSituationSpecification<TEvent extends SpaceEvent> extends SituationSpecification<TEvent> {\n\tconstructor(\n\t\tprivate readonly left: SituationSpecification<TEvent>,\n\t\tprivate readonly right: SituationSpecification<TEvent>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn this.left.isSatisfiedBy(situationContext) && this.right.isSatisfiedBy(situationContext)\n\t}\n}\n\nclass OrSituationSpecification<TEvent extends SpaceEvent> extends SituationSpecification<TEvent> {\n\tconstructor(\n\t\tprivate readonly left: SituationSpecification<TEvent>,\n\t\tprivate readonly right: SituationSpecification<TEvent>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn this.left.isSatisfiedBy(situationContext) || this.right.isSatisfiedBy(situationContext)\n\t}\n}\n\nclass NotSituationSpecification<TEvent extends SpaceEvent> extends SituationSpecification<TEvent> {\n\tconstructor(private readonly rule: SituationSpecification<TEvent>) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn !this.rule.isSatisfiedBy(situationContext)\n\t}\n}\n","import { Memory } from \"@domain/agent/memory\"\nimport { Participant, ParticipantManifest } from \"@domain/space/participant\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { AgentRecord } from \"@domain/agent/record\"\n\nexport class Agent extends Participant {\n\tprivate memory: Memory\n\tprivate tools: Tool[]\n\n\tconstructor(manifest: ParticipantManifest, tools: Tool[], memory: Memory, handlers: SituationHandler[]) {\n\t\tsuper(manifest, handlers)\n\t\tthis.memory = memory\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tgetMemory(): Memory {\n\t\treturn this.memory\n\t}\n\n\tstatic create({\n\t\tmanifest,\n\t\ttools,\n\t\tmemory,\n\t\thandlers,\n\t}: {\n\t\tmanifest: ParticipantManifest\n\t\ttools: Tool[]\n\t\tmemory: Memory\n\t\thandlers: SituationHandler[]\n\t}): Agent {\n\t\treturn new Agent(manifest, tools, memory, handlers)\n\t}\n\n\tstatic rehydrate(record: AgentRecord): Agent {\n\t\treturn new Agent(record.manifest, record.tools, record.memory, record.handlers)\n\t}\n}\n","import { Agent } from \"@domain/agent/agent\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { AgentRepository } from \"@domain/agent/agent-repository\"\nimport { ParticipantManifest } from \"@domain/space/participant\"\nimport { DeveloperMessageItem } from \"@domain/inference/context\"\nimport { AgentRecord } from \"@domain/agent/record\"\nimport { MemoryFactory } from \"@domain/agent/memory\"\nimport { UuidGenerator } from \"@util/uuid-generator\"\n\nexport class CreateAgentUseCase {\n\tprivate readonly agentRepository: AgentRepository\n\tprivate readonly memoryFactory: MemoryFactory\n\n\tconstructor(agentRepository: AgentRepository, memoryFactory: MemoryFactory) {\n\t\tthis.agentRepository = agentRepository\n\t\tthis.memoryFactory = memoryFactory\n\t}\n\n\tasync execute(\n\t\tname: string,\n\t\tinstruction: string,\n\t\ttools: Tool[],\n\t\thandlers: SituationHandler[],\n\t): Promise<AgentRecord> {\n\t\tconst id = UuidGenerator.create()\n\t\tconst manifest: ParticipantManifest = { id, name, role: \"agent\" }\n\t\tconst memory = this.memoryFactory.create()\n\n\t\tconst agentRecord: AgentRecord = { id, manifest, tools, memory, handlers }\n\t\tconst agent = Agent.create(agentRecord)\n\t\tawait this.agentRepository.save(agent)\n\t\treturn agentRecord\n\t}\n}\n","import { Agent } from \"@domain/agent/agent\"\nimport { AgentRepository } from \"@domain/agent/agent-repository\"\n\nexport class InMemoryAgentRepository implements AgentRepository {\n\tprivate readonly agents: Agent[] = []\n\n\texists(id: string): Promise<boolean> {\n\t\treturn Promise.resolve(this.agents.some((agent) => agent.getManifest().id === id))\n\t}\n\tfindById(id: string): Promise<Agent | undefined> {\n\t\treturn Promise.resolve(this.agents.find((agent) => agent.getManifest().id === id))\n\t}\n\tfindAll(): Promise<Agent[]> {\n\t\treturn Promise.resolve(this.agents)\n\t}\n\n\tasync save(agent: Agent): Promise<void> {\n\t\tthis.agents.push(agent)\n\t}\n}\n","import { Agent } from \"@domain/agent/agent\"\nimport { Loop } from \"@domain/agent/loop/loop\"\n\nexport type AgentLoop = {\n\treadonly agent: Agent\n\treadonly loop: Loop\n}\n\nexport abstract class LoopSpecification {\n\tabstract isSatisfiedBy(agentLoop: AgentLoop): boolean\n\n\tand(other: LoopSpecification): LoopSpecification {\n\t\treturn new AndLoopSpecification(this, other)\n\t}\n\n\tor(other: LoopSpecification): LoopSpecification {\n\t\treturn new OrLoopSpecification(this, other)\n\t}\n\n\tnot(): LoopSpecification {\n\t\treturn new NotLoopSpecification(this)\n\t}\n}\n\nclass AndLoopSpecification extends LoopSpecification {\n\tconstructor(\n\t\tprivate readonly left: LoopSpecification,\n\t\tprivate readonly right: LoopSpecification,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(agentLoop: AgentLoop): boolean {\n\t\treturn this.left.isSatisfiedBy(agentLoop) && this.right.isSatisfiedBy(agentLoop)\n\t}\n}\n\nclass OrLoopSpecification extends LoopSpecification {\n\tconstructor(\n\t\tprivate readonly left: LoopSpecification,\n\t\tprivate readonly right: LoopSpecification,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(agentLoop: AgentLoop): boolean {\n\t\treturn this.left.isSatisfiedBy(agentLoop) || this.right.isSatisfiedBy(agentLoop)\n\t}\n}\n\nclass NotLoopSpecification extends LoopSpecification {\n\tconstructor(private readonly rule: LoopSpecification) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(agentLoop: AgentLoop): boolean {\n\t\treturn !this.rule.isSatisfiedBy(agentLoop)\n\t}\n}\n\nexport class Idle extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"idle\"\n\t}\n}\n\nexport class AwaitingInference extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"awaiting_inference\"\n\t}\n}\n\nexport class AwaitingRequest extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"awaiting_inference_request\"\n\t}\n}\n\nexport class AwaitingToolOutput extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"awaiting_tool_output\"\n\t}\n}\n\nexport class Stopped extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"stopped\"\n\t}\n}\n\nexport class Completed extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"completed\"\n\t}\n}\n\nexport class ModelAnswered extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\tconst operations = agentLoop.loop.completedOperations\n\t\tconst lastOperation = operations[operations.length - 1]\n\n\t\tif (lastOperation?.type !== \"inference\") {\n\t\t\treturn false\n\t\t}\n\n\t\treturn lastOperation.result.items.some((item) => item.type === \"model_message\")\n\t}\n}\n","import { AgentLoop } from \"@domain/agent/loop/specification\"\nimport { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport abstract class LoopAction {\n\tabstract execute(agentLoop: AgentLoop): LoopControlDirective\n}\n\nexport class RequestPreparationAction extends LoopAction {\n\tconstructor(private readonly request: InferenceRequest) {\n\t\tsuper()\n\t}\n\texecute(agentLoop: AgentLoop): LoopControlDirective {\n\t\treturn {\n\t\t\ttype: \"inference\",\n\t\t\trequest: this.request,\n\t\t}\n\t}\n}\n\nexport class InferenceAction extends LoopAction {\n\texecute(agentLoop: AgentLoop): LoopControlDirective {\n\t\tconst request = agentLoop.loop.request\n\n\t\tif (!request) {\n\t\t\treturn { type: \"wait\", reason: \"no request\" }\n\t\t}\n\n\t\treturn { type: \"inference\", request }\n\t}\n}\n\nexport class ToolUseAction extends LoopAction {\n\texecute(agentLoop: AgentLoop): LoopControlDirective {\n\t\tif (!agentLoop.loop.pending) {\n\t\t\treturn { type: \"wait\" } as LoopControlDirective\n\t\t}\n\n\t\tconst pendingOperation = agentLoop.loop.pending\n\n\t\tif (pendingOperation.type === \"tool_execution\") {\n\t\t\treturn { type: \"tool_use\", call: pendingOperation.call }\n\t\t}\n\n\t\treturn { type: \"wait\" } as LoopControlDirective\n\t}\n}\n\nexport class CompleteAction extends LoopAction {\n\tprivate reason: string\n\n\tconstructor(reason: string) {\n\t\tsuper()\n\t\tthis.reason = reason\n\t}\n\n\texecute(): LoopControlDirective {\n\t\treturn { type: \"complete\", reason: this.reason }\n\t}\n}\n\nexport class WaitAction extends LoopAction {\n\tprivate reason: string\n\n\tconstructor(reason: string) {\n\t\tsuper()\n\t\tthis.reason = reason\n\t}\n\texecute(): LoopControlDirective {\n\t\treturn { type: \"wait\", reason: this.reason }\n\t}\n}\n","import {\n\tAwaitingInference,\n\tAwaitingRequest,\n\tAwaitingToolOutput,\n\tLoopSpecification,\n\tModelAnswered,\n} from \"@domain/agent/loop/specification\"\nimport {\n\tCompleteAction,\n\tInferenceAction,\n\tLoopAction,\n\tRequestPreparationAction,\n\tToolUseAction,\n} from \"@domain/agent/loop/action\"\nimport { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport type CreateLoopRuleParams = {\n\treadonly priority?: number\n\treadonly when: LoopSpecification\n\treadonly then: LoopAction\n}\n\nexport type LoopRuleRecord = {\n\treadonly id: string\n\treadonly priority: number\n\treadonly condition: LoopSpecification\n\treadonly action: LoopAction\n}\n\nexport class LoopRule {\n\t_id: string\n\t_priority: number\n\t_condition: LoopSpecification\n\t_action: LoopAction\n\n\tconstructor(id: string, condition: LoopSpecification, action: LoopAction, priority: number) {\n\t\tthis._id = id\n\t\tthis._priority = priority\n\t\tthis._condition = condition\n\t\tthis._action = action\n\t}\n\n\tget id(): string {\n\t\treturn this._id\n\t}\n\n\tget priority(): number {\n\t\treturn this._priority\n\t}\n\n\tget condition(): LoopSpecification {\n\t\treturn this._condition\n\t}\n\n\tget action(): LoopAction {\n\t\treturn this._action\n\t}\n\n\tstatic create(spec: CreateLoopRuleParams): LoopRule {\n\t\tconst priority = spec.priority ?? 0\n\t\tconst id = crypto.randomUUID()\n\t\treturn new LoopRule(id, spec.when, spec.then, priority)\n\t}\n\n\tstatic rehydrate(spec: LoopRuleRecord): LoopRule {\n\t\tconst priority = spec.priority ?? 0\n\t\tconst rule = new LoopRule(spec.id, spec.condition, spec.action, priority)\n\t\treturn rule\n\t}\n}\n\nexport type RuleBookRecord = {\n\treadonly rules: LoopRuleRecord[]\n}\n\nexport class RuleBook {\n\tprivate rules: LoopRule[]\n\n\tprivate constructor(rules: LoopRule[]) {\n\t\tthis.rules = rules\n\t}\n\n\taddRule(rule: LoopRule): void {\n\t\tthis.rules.push(rule)\n\t}\n\n\tremoveRule(rule: LoopRule): void {\n\t\tthis.rules = this.rules.filter((r) => r.id !== rule.id)\n\t}\n\n\tgetRules(): readonly LoopRule[] {\n\t\treturn this.rules\n\t}\n\n\tstatic create(loopRuleParams: CreateLoopRuleParams[]): RuleBook {\n\t\tconst rules = loopRuleParams.map((param) => LoopRule.create(param))\n\t\treturn new RuleBook(rules)\n\t}\n\n\tstatic rehydrate(record: RuleBookRecord): RuleBook {\n\t\tconst rules = record.rules.map((rule) => LoopRule.rehydrate(rule))\n\t\treturn new RuleBook(rules)\n\t}\n\n\trecord(): RuleBookRecord {\n\t\treturn {\n\t\t\trules: this.rules.map((rule) => ({\n\t\t\t\tid: rule.id,\n\t\t\t\tpriority: rule.priority,\n\t\t\t\tcondition: rule.condition,\n\t\t\t\taction: rule.action,\n\t\t\t})),\n\t\t}\n\t}\n}\n\nexport const defaultRules: (request: InferenceRequest) => CreateLoopRuleParams[] = (request: InferenceRequest) => [\n\t{\n\t\twhen: new AwaitingRequest(),\n\t\tthen: new RequestPreparationAction(request),\n\t},\n\t{\n\t\twhen: new AwaitingInference(),\n\t\tthen: new InferenceAction(),\n\t},\n\t{\n\t\twhen: new AwaitingToolOutput(),\n\t\tthen: new ToolUseAction(),\n\t},\n\t{\n\t\twhen: new ModelAnswered(),\n\t\tthen: new CompleteAction(\"completed\"),\n\t},\n]\n","import { ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport {\n\tPendingOperation,\n\tPendingInference,\n\tPendingToolExecution,\n\tCompletedOperation,\n} from \"@domain/agent/loop/operation\"\nimport { LoopTransition } from \"@domain/agent/loop/transition\"\nimport { LoopRecord } from \"@domain/agent/loop/record\"\nimport { CreateLoopRuleParams, RuleBook } from \"./rule\"\nimport { SystemClock } from \"@util/system-clock\"\nimport { UuidGenerator } from \"@util/uuid-generator\"\n\nexport type LoopStateId =\n\t| \"idle\"\n\t| \"awaiting_inference_request\"\n\t| \"awaiting_inference\"\n\t| \"awaiting_tool_output\"\n\t| \"stopped\"\n\t| \"completed\"\n\nexport type CreateLoopParams =\n\t| {\n\t\t\tsubject: string\n\t\t\tagentId: string\n\t\t\trules: CreateLoopRuleParams[]\n\t }\n\t| {\n\t\t\tsubject: string\n\t\t\tagentId: string\n\t\t\trequest: InferenceRequest\n\t }\n\nexport class Loop {\n\tprivate readonly loopId: string\n\tprivate readonly agentId: string\n\tprivate readonly subject: string\n\tprivate readonly createdAt: Date\n\tprivate state: LoopStateId\n\tprivate pendingOperation: PendingOperation | undefined\n\tprivate readonly transitionHistory: LoopTransition[]\n\tprivate inferenceRequest: InferenceRequest | undefined\n\tprivate readonly operationHistory: CompletedOperation[]\n\tprivate readonly _ruleBook: RuleBook\n\n\tprivate constructor(\n\t\tloopId: string,\n\t\tagentId: string,\n\t\tsubject: string,\n\t\tcreatedAt: Date,\n\t\tstate: LoopStateId,\n\t\tinferenceRequest: InferenceRequest | undefined,\n\t\tpendingOperation: PendingOperation | undefined,\n\t\ttransitionHistory: LoopTransition[],\n\t\toperationHistory: CompletedOperation[],\n\t\truleBook: RuleBook,\n\t) {\n\t\tthis.loopId = loopId\n\t\tthis.agentId = agentId\n\t\tthis.subject = subject\n\t\tthis.createdAt = createdAt\n\t\tthis.state = state\n\t\tthis.inferenceRequest = inferenceRequest\n\t\tthis.pendingOperation = pendingOperation\n\t\tthis.transitionHistory = transitionHistory\n\t\tthis.operationHistory = operationHistory\n\t\tthis._ruleBook = ruleBook\n\t}\n\n\tget id(): string {\n\t\treturn this.loopId\n\t}\n\n\tget stateId(): LoopStateId {\n\t\treturn this.state\n\t}\n\n\tget pending(): PendingOperation | undefined {\n\t\treturn this.pendingOperation\n\t}\n\n\tget history(): readonly LoopTransition[] {\n\t\treturn this.transitionHistory\n\t}\n\n\tget completedOperations(): readonly CompletedOperation[] {\n\t\treturn this.operationHistory\n\t}\n\n\tget request(): InferenceRequest | undefined {\n\t\treturn this.inferenceRequest\n\t}\n\n\tget ruleBook(): RuleBook {\n\t\treturn this._ruleBook\n\t}\n\n\tgetSubject(): string {\n\t\treturn this.subject\n\t}\n\n\tgetAgentId(): string {\n\t\treturn this.agentId\n\t}\n\n\trecord(): LoopRecord {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tagentId: this.agentId,\n\t\t\tsubject: this.subject,\n\t\t\tcreatedAt: this.createdAt,\n\t\t\tstate: this.state,\n\t\t\tinferenceRequest: this.inferenceRequest,\n\t\t\tpendingOperation: this.pendingOperation,\n\t\t\ttransitionHistory: [...this.transitionHistory],\n\t\t\toperationHistory: [...this.operationHistory],\n\t\t\truleBook: this.ruleBook.record(),\n\t\t}\n\t}\n\n\tmoveToIdle(reason: string, transitionId: string): void {\n\t\tthis.transitionTo(\"idle\", reason, transitionId)\n\t\tthis.pendingOperation = undefined\n\t}\n\n\tmoveToAwaitingInference(operation: PendingInference): void {\n\t\tthis.assertAwaitingInferenceRequest()\n\t\tthis.pendingOperation = operation\n\n\t\tthis.transitionTo(\"awaiting_inference\", \"inference_requested\", operation.id)\n\t}\n\n\tmoveToAwaitingToolOutput(operation: Extract<PendingOperation, { type: \"tool_execution\" }>, occurredAt: Date): void {\n\t\tthis.assertIdle()\n\t\tthis.pendingOperation = operation\n\n\t\tthis.transitionTo(\"awaiting_tool_output\", \"tool_execution_requested\", operation.id)\n\t}\n\n\trequestInference(request: InferenceRequest): PendingInference {\n\t\tthis.assertAwaitingInferenceRequest()\n\t\tthis.inferenceRequest = request\n\t\tconst operation: PendingInference = {\n\t\t\tid: UuidGenerator.create(),\n\t\t\ttype: \"inference\",\n\t\t\trequestedAt: SystemClock.now(),\n\t\t\trequest: this.inferenceRequest,\n\t\t}\n\n\t\tthis.moveToAwaitingInference(operation)\n\n\t\treturn operation\n\t}\n\n\trequestToolUse(operationId: string, call: ToolUseRequest, requestedAt: Date): PendingToolExecution {\n\t\tthis.assertIdle()\n\n\t\tconst operation: PendingToolExecution = {\n\t\t\tid: operationId,\n\t\t\ttype: \"tool_execution\",\n\t\t\trequestedAt,\n\t\t\tcall,\n\t\t}\n\n\t\tthis.moveToAwaitingToolOutput(operation, requestedAt)\n\n\t\treturn operation\n\t}\n\n\tprivate transitionTo(nextState: LoopStateId, reason: string, operationId?: string): void {\n\t\tconst occurredAt = SystemClock.now()\n\t\tconst previousState = this.state\n\t\tthis.state = nextState\n\n\t\tthis.transitionHistory.push({\n\t\t\toccurredAt,\n\t\t\tpreviousState,\n\t\t\tnextState,\n\t\t\treason,\n\t\t\toperationId,\n\t\t})\n\t}\n\n\tprivate assertIdle(): void {\n\t\tif (this.state !== \"idle\") {\n\t\t\tthrow new Error(`Expected idle loop, but loop is ${this.state}`)\n\t\t}\n\t}\n\n\tprivate assertAwaitingInferenceRequest(): void {\n\t\tif (this.state !== \"awaiting_inference_request\") {\n\t\t\tthrow new Error(`Expected awaiting inference request loop, but loop is ${this.state}`)\n\t\t}\n\t}\n\n\treceiveInferenceResult(operationId: string, result: InferenceResult): void {\n\t\tif (this.state !== \"awaiting_inference\") {\n\t\t\tthrow new Error(`Cannot receive inference result while loop is ${this.state}`)\n\t\t}\n\n\t\tconst operation = this.pendingOperation\n\n\t\tif (operation?.type !== \"inference\" || operation.id !== operationId) {\n\t\t\tthrow new Error(`Inference result does not match pending operation ${operationId}`)\n\t\t}\n\n\t\tif (!this.inferenceRequest) {\n\t\t\tthrow new Error(\"Inference request is not provided\")\n\t\t}\n\t\tthis.moveToIdle(\"inference_completed\", operationId)\n\n\t\tthis.operationHistory.push({\n\t\t\ttype: \"inference\",\n\t\t\toperationId,\n\t\t\trequestedAt: operation.requestedAt,\n\t\t\tcompletedAt: SystemClock.now(),\n\t\t\trequest: operation.request,\n\t\t\tresult,\n\t\t})\n\n\t\tthis.inferenceRequest.context.items.push(...result.items)\n\n\t\tconst call = result.items.find((item): item is ToolUseRequest => item.type === \"tool_use_request\")\n\n\t\tif (call) {\n\t\t\tthis.pendingOperation = {\n\t\t\t\tid: call.requestId,\n\t\t\t\ttype: \"tool_execution\",\n\t\t\t\trequestedAt: SystemClock.now(),\n\t\t\t\tcall,\n\t\t\t}\n\n\t\t\tthis.transitionTo(\"awaiting_tool_output\", \"tool_use_requested\", call.requestId)\n\t\t\treturn\n\t\t}\n\n\t\tthis.pendingOperation = undefined\n\t}\n\n\treceiveToolUseResult(operationId: string, result: ToolUseResult): void {\n\t\tif (this.state !== \"awaiting_tool_output\") {\n\t\t\tthrow new Error(`Cannot receive tool output while loop is ${this.state}`)\n\t\t}\n\n\t\tconst operation = this.pendingOperation\n\n\t\tif (operation?.type !== \"tool_execution\" || operation.id !== operationId) {\n\t\t\tthrow new Error(`Tool output does not match pending operation ${operationId}`)\n\t\t}\n\n\t\tif (!this.inferenceRequest) {\n\t\t\tthrow new Error(\"Inference request is not provided\")\n\t\t}\n\n\t\tthis.operationHistory.push({\n\t\t\ttype: \"tool_use\",\n\t\t\toperationId,\n\t\t\trequestedAt: operation.requestedAt,\n\t\t\tcompletedAt: SystemClock.now(),\n\t\t\tcall: operation.call,\n\t\t\tresult,\n\t\t})\n\n\t\tthis.inferenceRequest.context.items.push(result)\n\n\t\tthis.pendingOperation = undefined\n\n\t\tthis.transitionTo(\"awaiting_inference_request\", \"tool_use_completed\", operationId)\n\t}\n\n\tcomplete(reason: string): void {\n\t\tthis.assertNotSettled(\"complete\")\n\t\tthis.pendingOperation = undefined\n\t\tthis.transitionTo(\"completed\", reason)\n\t}\n\n\tstop(reason: string): void {\n\t\tthis.assertNotSettled(\"stop\")\n\t\tthis.pendingOperation = undefined\n\t\tthis.transitionTo(\"stopped\", reason)\n\t}\n\n\twait(reason: string): void {\n\t\tthis.assertNotSettled(\"wait\")\n\t\tthis.pendingOperation = undefined\n\t\tthis.transitionTo(\"idle\", reason)\n\t}\n\n\tprivate assertNotSettled(intent: string): void {\n\t\tif (this.state === \"completed\" || this.state === \"stopped\") {\n\t\t\tthrow new Error(`Cannot ${intent} a loop that is already ${this.state}`)\n\t\t}\n\t}\n\n\tstatic create(agentId: string, subject: string, ruleBook: RuleBook): Loop {\n\t\tconst createdAt = SystemClock.now()\n\t\tconst id = UuidGenerator.create()\n\t\treturn new Loop(\n\t\t\tid,\n\t\t\tagentId,\n\t\t\tsubject,\n\t\t\tcreatedAt,\n\t\t\t\"awaiting_inference_request\",\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t[],\n\t\t\t[],\n\t\t\truleBook,\n\t\t)\n\t}\n\n\tstatic rehydrate(record: LoopRecord): Loop {\n\t\treturn new Loop(\n\t\t\trecord.id,\n\t\t\trecord.agentId,\n\t\t\trecord.subject,\n\t\t\trecord.createdAt,\n\t\t\trecord.state,\n\t\t\trecord.inferenceRequest,\n\t\t\trecord.pendingOperation,\n\t\t\t[...record.transitionHistory],\n\t\t\t[...record.operationHistory],\n\t\t\tRuleBook.rehydrate(record.ruleBook),\n\t\t)\n\t}\n}\n","import { CreateLoopParams, Loop } from \"@domain/agent/loop/loop\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\nimport { defaultRules, RuleBook } from \"@domain/agent/loop/rule\"\n\nexport class CreateAgentLoopUseCase {\n\tconstructor(private readonly loopRepository: LoopRepository) {}\n\n\tasync execute(params: CreateLoopParams): Promise<Loop> {\n\t\tif (\"rules\" in params) {\n\t\t\tconst ruleBook = RuleBook.create(params.rules)\n\t\t\tconst loop = Loop.create(params.agentId, params.subject, ruleBook)\n\t\t\tawait this.loopRepository.save(loop)\n\t\t\treturn loop\n\t\t} else {\n\t\t\tconst ruleBook = RuleBook.create(defaultRules(params.request))\n\t\t\tconst loop = Loop.create(params.agentId, params.subject, ruleBook)\n\t\t\tawait this.loopRepository.save(loop)\n\t\t\treturn loop\n\t\t}\n\t}\n}\n","import { Loop } from \"@domain/agent/loop/loop\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\n\nexport class InMemoryLoopRepository implements LoopRepository {\n\tprivate loops: Loop[] = []\n\n\tfindById(id: string): Promise<Loop | undefined> {\n\t\treturn Promise.resolve(this.loops.find((loop) => loop.id === id))\n\t}\n\tsave(loop: Loop): Promise<void> {\n\t\tconst index = this.loops.findIndex((stored) => stored.id === loop.id)\n\t\tif (index === -1) {\n\t\t\tthis.loops.push(loop)\n\t\t} else {\n\t\t\tthis.loops[index] = loop\n\t\t}\n\t\treturn Promise.resolve()\n\t}\n}\n","import { ToolUseRequest, ToolUseResult } from \"./context\"\n\nexport class ToolUseItemFactory {\n\tcreate(toolUseRequest: ToolUseRequest, result: string): ToolUseResult {\n\t\tconst toolUseResult: ToolUseResult = {\n\t\t\ttype: \"tool_use_result\",\n\t\t\trequestId: toolUseRequest.requestId,\n\t\t\tresult: {\n\t\t\t\ttype: \"input_text\",\n\t\t\t\ttext: result,\n\t\t\t},\n\t\t}\n\t\treturn toolUseResult\n\t}\n}\n","import { ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport { ToolUseRunner } from \"@domain/inference/tool-use-runner\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { ToolUseItemFactory } from \"@domain/inference/tool-use-item-factory\"\n\nexport class LocalToolRunner implements ToolUseRunner {\n\tprivate readonly toolUseItemFactory = new ToolUseItemFactory()\n\n\tasync run(input: ToolUseRequest, tool: Tool): Promise<ToolUseResult> {\n\t\ttry {\n\t\t\tconst result = await tool.invoke(JSON.parse(input.toolArguments))\n\t\t\tconst resultText = typeof result === \"string\" ? result : JSON.stringify(result)\n\t\t\treturn this.toolUseItemFactory.create(input, resultText)\n\t\t} catch (error) {\n\t\t\tconst errorText = `Error calling tool: ${error}`\n\t\t\treturn this.toolUseItemFactory.create(input, errorText)\n\t\t}\n\t}\n}\n","import type { InferenceRequest, InferenceResult, InferenceRunner } from \"@domain/inference/inference-runner\"\nimport type { InferenceRequestValidator } from \"@domain/inference/request-validation/inference-request-validator\"\nimport { GenerativeModel } from \"@domain/inference/generative-model\"\nimport { SpaceEvent } from \"@domain/space/event\"\n\nexport type InferenceCompletedParams = { answer: string; producerId: string; price?: number }\n\nexport class DefaultInferenceRunner implements InferenceRunner {\n\tconstructor(\n\t\tprivate readonly supportedModels: GenerativeModel[],\n\t\tprivate readonly requestValidator: InferenceRequestValidator,\n\t) {}\n\n\tasync run(input: InferenceRequest): Promise<InferenceResult> {\n\t\tconst generativeModel = this.supportedModels.find((model) => model.specification.name === input.model)\n\t\tif (!generativeModel) {\n\t\t\tthrow new Error(`Unsupported model: ${input.model}`)\n\t\t}\n\n\t\tthis.requestValidator.validate(input, generativeModel.specification)\n\n\t\treturn await generativeModel.endpoint.infer(input)\n\t}\n\n\tasync *stream(input: InferenceRequest): AsyncGenerator<SpaceEvent> {\n\t\tconst generativeModel = this.supportedModels.find((model) => model.specification.name === input.model)\n\t\tif (!generativeModel) {\n\t\t\tthrow new Error(`Unsupported model: ${input.model}`)\n\t\t}\n\n\t\tthis.requestValidator.validate(input, generativeModel.specification)\n\n\t\tyield* generativeModel.endpoint.stream(input)\n\t}\n}\n","import type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport class ReasoningEffortValidation implements RequestValidationRule {\n\treadonly name = \"reasoning-effort\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\tif (inferenceRequest.reasoningEffort === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\tif (!model.supportsReasoningEffort) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn model.supportedReasoningEfforts.includes(inferenceRequest.reasoningEffort)\n\t}\n}\n","import type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport class ToolUseRequestingValidation implements RequestValidationRule {\n\treadonly name = \"tool-calling\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\tif (inferenceRequest.tools === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsFunctionCalling\n\t}\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport type { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport class StreamingValidation implements RequestValidationRule {\n\treadonly name = \"streaming\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\tif (!inferenceRequest.streaming) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsStreaming\n\t}\n}\n","import type { InferenceRequest } from \"@domain/inference/inference-runner\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\n\nexport type StructuredOutputFormat = {\n\tname?: string\n\tschema: Record<string, any>\n\tstrict?: boolean\n}\n\nexport class StructuredOutputValidation implements RequestValidationRule {\n\treadonly name = \"structured-output\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\tif (inferenceRequest.structuredOutput === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsStructuredOutput\n\t}\n}\n","import type { InferenceRequest } from \"@domain/inference/inference-runner\"\nimport type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport type { ContextItem } from \"@domain/inference/context\"\n\nfunction getContextItemValidationKey(item: ContextItem): string {\n\tif (item.type === \"user_message\") {\n\t\treturn \"user_message\"\n\t}\n\tif (item.type === \"system_message\") {\n\t\treturn \"system_message\"\n\t}\n\tif (item.type === \"developer_message\") {\n\t\treturn \"developer_message\"\n\t}\n\tif (item.type === \"model_message\") {\n\t\treturn \"model_message\"\n\t}\n\treturn item.type\n}\n\nexport class ContextValidation implements RequestValidationRule {\n\treadonly name = \"context\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\treturn inferenceRequest.context.items.every((item) =>\n\t\t\tmodel.supportedContextItemTypes.includes(getContextItemValidationKey(item)),\n\t\t)\n\t}\n}\n","import type { InferenceRequest } from \"@domain/inference/inference-runner\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport { ReasoningEffortValidation } from \"@domain/inference/request-validation/reasoning-effort\"\nimport { ToolUseRequestingValidation } from \"@domain/inference/request-validation/tool-calling\"\nimport { StreamingValidation } from \"@domain/inference/request-validation/streaming\"\nimport { StructuredOutputValidation } from \"@domain/inference/request-validation/structured-output\"\nimport { ContextValidation } from \"@domain/inference/request-validation/context\"\n\nexport const defaultRequestValidationRules: RequestValidationRule[] = [\n\tnew ReasoningEffortValidation(),\n\tnew ToolUseRequestingValidation(),\n\tnew StreamingValidation(),\n\tnew StructuredOutputValidation(),\n\tnew ContextValidation(),\n]\n\nexport class InferenceRequestValidator {\n\tconstructor(private readonly rules: RequestValidationRule[] = defaultRequestValidationRules) {}\n\n\tvalidate(inferenceRequest: InferenceRequest, model: ModelSpecification): void {\n\t\tfor (const rule of this.rules) {\n\t\t\tif (!rule.isValid(inferenceRequest, model)) {\n\t\t\t\tthrow new Error(`Request validation \"${rule.name}\" failed for model \"${model.name}\"`)\n\t\t\t}\n\t\t}\n\t}\n}\n","export class InputTokenDetails {\n\treadonly cached_tokens: number\n\n\tconstructor(cached_tokens: number) {\n\t\tthis.cached_tokens = cached_tokens\n\t}\n}\n\nexport class OutputTokenDetails {\n\treadonly reasoning_tokens: number\n\n\tconstructor(reasoning_tokens: number) {\n\t\tthis.reasoning_tokens = reasoning_tokens\n\t}\n}\n\nexport class TokenUsage {\n\treadonly inputTokens: number\n\treadonly outputTokens: number\n\treadonly totalTokens: number\n\treadonly inputTokenDetails: InputTokenDetails\n\treadonly outputTokenDetails: OutputTokenDetails\n\n\tconstructor(\n\t\tinputTokens: number,\n\t\toutputTokens: number,\n\t\ttotalTokens: number,\n\t\tinputTokenDetails: InputTokenDetails,\n\t\toutputTokenDetails: OutputTokenDetails,\n\t) {\n\t\tthis.inputTokens = inputTokens\n\t\tthis.outputTokens = outputTokens\n\t\tthis.totalTokens = totalTokens\n\t\tthis.inputTokenDetails = inputTokenDetails\n\t\tthis.outputTokenDetails = outputTokenDetails\n\t}\n}\n","import type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { ModelOutputItem, ReasoningItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/inference/token-usage\"\nimport type Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicMessagesMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceRequest: InferenceRequest) {\n\t\tconst { messages, system } = this.mapContextItems(inferenceRequest)\n\t\tconst outputConfig: any = {}\n\n\t\tconst request: any = {\n\t\t\tmodel: inferenceRequest.model,\n\t\t\tmessages,\n\t\t}\n\n\t\trequest.max_tokens = inferenceRequest.maxOutputTokens!\n\n\t\tif (system) {\n\t\t\trequest.system = system\n\t\t}\n\n\t\tif (inferenceRequest.tools && inferenceRequest.tools.length > 0) {\n\t\t\trequest.tools = inferenceRequest.tools.map((tool) => ({\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tinput_schema: tool.parameters,\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceRequest.structuredOutput) {\n\t\t\toutputConfig.format = {\n\t\t\t\ttype: \"json_schema\",\n\t\t\t\tschema: inferenceRequest.structuredOutput.schema,\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceRequest.reasoningEffort) {\n\t\t\trequest.thinking = { type: \"adaptive\" }\n\t\t\toutputConfig.effort = inferenceRequest.reasoningEffort\n\t\t}\n\n\t\tif (Object.keys(outputConfig).length > 0) {\n\t\t\trequest.output_config = outputConfig\n\t\t}\n\n\t\tif (inferenceRequest.streaming) {\n\t\t\trequest.stream = inferenceRequest.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tprivate addContentBlock(messages: any[], role: \"user\" | \"assistant\", block: any): void {\n\t\tconst lastMessage = messages[messages.length - 1]\n\t\tif (lastMessage?.role === role) {\n\t\t\tlastMessage.content.push(block)\n\t\t\treturn\n\t\t}\n\n\t\tmessages.push({\n\t\t\trole: role,\n\t\t\tcontent: [block],\n\t\t})\n\t}\n\n\tmapContextItems(inferenceRequest: InferenceRequest): { messages: any[]; system?: string } {\n\t\tconst context = inferenceRequest.context\n\t\tconst messages: any[] = []\n\t\tconst system: string[] = []\n\n\t\tfor (const item of context.items) {\n\t\t\tif (item.type === \"developer_message\" || item.type === \"system_message\") {\n\t\t\t\tsystem.push(item.text)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"user_message\") {\n\t\t\t\tthis.addContentBlock(messages, \"user\", { type: \"text\", text: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"model_message\") {\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", { type: \"text\", text: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\tconst reasoning = item as ReasoningItem\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", {\n\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\tthinking: reasoning.content?.text ?? \"\",\n\t\t\t\t\tsignature: reasoning.encryptedContent ?? \"\",\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_request\") {\n\t\t\t\tconst toolUseRequest = item as ToolUseRequest\n\t\t\t\tlet input: any\n\t\t\t\ttry {\n\t\t\t\t\tinput = JSON.parse(toolUseRequest.toolArguments)\n\t\t\t\t} catch {\n\t\t\t\t\tinput = toolUseRequest.toolArguments\n\t\t\t\t}\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", {\n\t\t\t\t\ttype: \"tool_use\",\n\t\t\t\t\tid: toolUseRequest.requestId,\n\t\t\t\t\tname: toolUseRequest.toolName,\n\t\t\t\t\tinput: input,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_result\") {\n\t\t\t\tconst toolUseResult = item as ToolUseResult\n\t\t\t\tthis.addContentBlock(messages, \"user\", {\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUseResult.requestId,\n\t\t\t\t\tcontent: toolUseResult.result.text,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmessages: messages,\n\t\t\tsystem: system.length > 0 ? system.join(\"\\n\\n\") : undefined,\n\t\t}\n\t}\n\n\textractTokenUsage(response: Anthropic.Messages.Message): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.input_tokens,\n\t\t\tresponse.usage.output_tokens,\n\t\t\tresponse.usage.input_tokens + response.usage.output_tokens,\n\t\t\tnew InputTokenDetails(\n\t\t\t\t(response.usage.cache_creation_input_tokens ?? 0) + (response.usage.cache_read_input_tokens ?? 0),\n\t\t\t),\n\t\t\tnew OutputTokenDetails(0),\n\t\t)\n\t}\n\n\ttoResponse(response: Anthropic.Messages.Message): InferenceResult {\n\t\tconst items: ModelOutputItem[] = []\n\n\t\tfor (const block of response.content as any[]) {\n\t\t\tif (block.type === \"text\") {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"model_message\",\n\t\t\t\t\ttext: block.text,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (block.type === \"tool_use\") {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"tool_use_request\",\n\t\t\t\t\trequestId: block.id,\n\t\t\t\t\ttoolName: block.name,\n\t\t\t\t\ttoolArguments: JSON.stringify(block.input ?? {}),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (block.type === \"thinking\") {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\tcontent: block.thinking ? { type: \"input_text\", text: block.thinking } : undefined,\n\t\t\t\t\tencryptedContent: block.signature,\n\t\t\t\t\tsummary: [],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import { SpaceEvent } from \"@domain/space/event\"\nimport type { Endpoint } from \"@domain/inference/endpoint\"\nimport type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport { AnthropicMessagesMapper } from \"@infrastructure/providers/anthropic/anthropic-messages-mapper\"\nimport Anthropic from \"@anthropic-ai/sdk\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\n\nexport interface AnthropicConnectionConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\n/**\n * Native Anthropic adapter on the `@anthropic-ai/sdk` (`messages.create`).\n * Maps domain context to Anthropic's `messages`/`content` blocks shape,\n * system prompt, tools, adaptive thinking, and structured output config.\n */\nexport class AnthropicMessages implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: Anthropic\n\tprivate readonly clientConfig: AnthropicConnectionConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new AnthropicMessagesMapper(),\n\t\tconfig: AnthropicConnectionConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): Anthropic {\n\t\treturn (this._client ??= new Anthropic({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResult> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst response = await this.client.messages.create(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceRequest: InferenceRequest): AsyncIterable<SpaceEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst stream = this.client.messages.stream(request)\n\n\t\tfor await (const event of stream) {\n\t\t\tyield event as unknown as SpaceEvent\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(await stream.finalMessage())\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tproducerId: request.model,\n\t\t\toccurredAt: new Date(),\n\t\t\tpayload: output,\n\t\t}\n\t}\n}\n","import type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport type { ModelOutputItem, ReasoningItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/inference/token-usage\"\nimport type OpenAI from \"openai\"\n\nexport class OpenAIResponsesMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceRequest: InferenceRequest): any {\n\t\tconst request: any = {\n\t\t\tmodel: inferenceRequest.model,\n\t\t\tinput: this.mapContextItems(inferenceRequest),\n\t\t}\n\n\t\tif (inferenceRequest.tools && inferenceRequest.tools.length > 0) {\n\t\t\trequest.tools = inferenceRequest.tools.map((tool) => ({\n\t\t\t\ttype: tool.type,\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tparameters: tool.parameters,\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceRequest.reasoningEffort) {\n\t\t\trequest.reasoning = {\n\t\t\t\teffort: inferenceRequest.reasoningEffort,\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceRequest.structuredOutput) {\n\t\t\tconst format = inferenceRequest.structuredOutput\n\t\t\trequest.text = {\n\t\t\t\tformat: {\n\t\t\t\t\ttype: \"json_schema\",\n\t\t\t\t\tname: format.name ?? \"response\",\n\t\t\t\t\tschema: format.schema,\n\t\t\t\t\tstrict: format.strict ?? true,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceRequest.streaming) {\n\t\t\trequest.stream = inferenceRequest.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceRequest: InferenceRequest): any[] {\n\t\tconst input: any[] = []\n\n\t\tfor (const item of inferenceRequest.context.items) {\n\t\t\tif (item.type === \"developer_message\" || item.type === \"system_message\" || item.type === \"user_message\") {\n\t\t\t\tconst role =\n\t\t\t\t\titem.type === \"developer_message\" ? \"developer\" : item.type === \"system_message\" ? \"system\" : \"user\"\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: \"message\",\n\t\t\t\t\trole,\n\t\t\t\t\tcontent: [{ type: \"input_text\", text: item.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"model_message\") {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: \"message\",\n\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\tcontent: [{ type: \"output_text\", text: item.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_request\") {\n\t\t\t\tconst toolUseRequest = item as ToolUseRequest\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: \"function_call\",\n\t\t\t\t\tcall_id: toolUseRequest.requestId,\n\t\t\t\t\tname: toolUseRequest.toolName,\n\t\t\t\t\targuments: toolUseRequest.toolArguments,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_result\") {\n\t\t\t\tconst toolUseResult = item as ToolUseResult\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: \"function_call_output\",\n\t\t\t\t\tcall_id: toolUseResult.requestId,\n\t\t\t\t\toutput: [{ type: \"input_text\", text: toolUseResult.result.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\tconst reasoning = item as ReasoningItem\n\t\t\t\tconst reasoningInput: Record<string, unknown> = {\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\tsummary: reasoning.summary.map((summary) => ({ type: \"summary_text\", text: summary.text })),\n\t\t\t\t}\n\t\t\t\tif (reasoning.encryptedContent !== undefined) {\n\t\t\t\t\treasoningInput.encrypted_content = reasoning.encryptedContent\n\t\t\t\t}\n\t\t\t\tinput.push(reasoningInput)\n\t\t\t}\n\t\t}\n\n\t\treturn input\n\t}\n\n\textractTokenUsage(response: OpenAI.Responses.Response): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.input_tokens,\n\t\t\tresponse.usage.output_tokens,\n\t\t\tresponse.usage.total_tokens,\n\t\t\tnew InputTokenDetails(response.usage.input_tokens_details?.cached_tokens ?? 0),\n\t\t\tnew OutputTokenDetails(response.usage.output_tokens_details?.reasoning_tokens ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceResult {\n\t\tconst items: ModelOutputItem[] = []\n\n\t\tfor (const item of response.output ?? []) {\n\t\t\tif (item.type === \"message\" && item.role === \"assistant\") {\n\t\t\t\tconst firstContent = item.content?.[0]\n\t\t\t\tif (firstContent) {\n\t\t\t\t\titems.push({\n\t\t\t\t\t\ttype: \"model_message\",\n\t\t\t\t\t\ttext: firstContent.text,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.type === \"function_call\") {\n\t\t\t\tconst toolUseRequest: ToolUseRequest = {\n\t\t\t\t\ttype: \"tool_use_request\",\n\t\t\t\t\trequestId: item.call_id,\n\t\t\t\t\ttoolName: item.name,\n\t\t\t\t\ttoolArguments: item.arguments,\n\t\t\t\t}\n\t\t\t\titems.push(toolUseRequest)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\tcontent: undefined,\n\t\t\t\t\tencryptedContent: item.encrypted_content,\n\t\t\t\t\tsummary: (item.summary ?? []).map((summary: { text: string }) => ({\n\t\t\t\t\t\ttype: \"summary_text\" as const,\n\t\t\t\t\t\ttext: summary.text,\n\t\t\t\t\t})),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\titems,\n\t\t\ttokenUsage: this.extractTokenUsage(response),\n\t\t\trowResponse: response,\n\t\t}\n\t}\n}\n","import { SpaceEvent } from \"@domain/space/event\"\nimport { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { Endpoint } from \"@domain/inference/endpoint\"\nimport { OpenAIResponsesMapper } from \"@infrastructure/providers/openai/openai-responses-mapper\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport OpenAI from \"openai\"\n\n/**\n * Optional connection config. When omitted, the `openai` SDK reads\n * `OPENAI_API_KEY` and `OPENAI_BASE_URL` from the environment.\n */\nexport interface OpenAIResponsesConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\nexport class OpenAIResponses implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: OpenAI\n\tprivate readonly clientConfig: OpenAIResponsesConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new OpenAIResponsesMapper(),\n\t\tconfig: OpenAIResponsesConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): OpenAI {\n\t\t// Passing `undefined` for baseURL/apiKey lets the SDK fall back\n\t\t// to OPENAI_BASE_URL / OPENAI_API_KEY from the environment.\n\t\treturn (this._client ??= new OpenAI({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResult> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst response = await this.client.responses.create(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceRequest: InferenceRequest): AsyncIterable<SpaceEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst stream: any = await this.client.responses.create({ ...request, stream: true })\n\n\t\t// Only the terminal `response.completed` event carries the assembled\n\t\t// response; the deltas before it cannot be mapped to an InferenceResult.\n\t\tlet completedResponse: any = undefined\n\t\tfor await (const event of stream) {\n\t\t\tif (event.type === \"response.completed\") {\n\t\t\t\tcompletedResponse = event.response\n\t\t\t}\n\n\t\t\tyield event\n\t\t}\n\n\t\tif (!completedResponse) {\n\t\t\tthrow new Error(\"Stream ended without a completed response\")\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(completedResponse)\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tpayload: output,\n\t\t\toccurredAt: new Date(),\n\t\t\tproducerId: inferenceRequest.model,\n\t\t}\n\t}\n}\n","import { SpaceEvent } from \"@domain/space/event\"\nimport { GoogleGenAI } from \"@google/genai\"\nimport type { Endpoint } from \"@domain/inference/endpoint\"\nimport type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport { GeminiGenerateContentMapper } from \"@infrastructure/providers/gemini/gemini-generate-content-mapper\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\n\nexport interface GeminiConnectionConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\n/**\n * Native Gemini adapter on the `@google/genai` SDK (`generateContent` /\n * `generateContentStream`). Unlike an OpenAI-compat shim this maps our\n * domain context to Gemini's native `contents`/`parts` shape, system\n * instruction, `functionDeclarations`, and `thinkingConfig`, and reads\n * thought parts + native usage metadata back out. Another `ModelRuntime`\n * — no runner or port changes.\n */\nexport class GeminiGenerateContent implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: GoogleGenAI\n\tprivate readonly clientConfig: GeminiConnectionConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new GeminiGenerateContentMapper(),\n\t\tconfig: GeminiConnectionConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): GoogleGenAI {\n\t\treturn (this._client ??= new GoogleGenAI({\n\t\t\tapiKey: this.clientConfig.apiKey ?? process.env.GEMINI_API_KEY,\n\t\t\t...(this.clientConfig.baseURL ? { httpOptions: { baseUrl: this.clientConfig.baseURL } } : {}),\n\t\t}))\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResult> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst response = await this.client.models.generateContent(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceRequest: InferenceRequest): AsyncIterable<SpaceEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst stream: any = await this.client.models.generateContentStream(request)\n\n\t\tlet lastEvent: SpaceEvent | undefined = undefined\n\t\tfor await (const chunk of stream) {\n\t\t\tlastEvent = chunk\n\t\t\tyield chunk\n\t\t}\n\n\t\tif (!lastEvent) {\n\t\t\tthrow new Error(\"Last event not found\")\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(lastEvent)\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tproducerId: request.model,\n\t\t\toccurredAt: new Date(),\n\t\t\tpayload: output,\n\t\t}\n\t}\n}\n","import type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/inference/token-usage\"\nimport type { ModelOutputItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\n\nexport class GeminiGenerateContentMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceRequest: InferenceRequest) {\n\t\tconst { contents, systemInstruction } = this.mapContextItems(inferenceRequest)\n\t\tconst config: any = {}\n\n\t\tif (systemInstruction) {\n\t\t\tconfig.systemInstruction = systemInstruction\n\t\t}\n\n\t\tif (inferenceRequest.tools && inferenceRequest.tools.length > 0) {\n\t\t\tconfig.tools = [\n\t\t\t\t{\n\t\t\t\t\tfunctionDeclarations: inferenceRequest.tools.map((tool) => ({\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\t\tparametersJsonSchema: tool.parameters,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tif (inferenceRequest.structuredOutput) {\n\t\t\tconfig.responseMimeType = \"application/json\"\n\t\t\tconfig.responseSchema = inferenceRequest.structuredOutput.schema\n\t\t}\n\n\t\tif (inferenceRequest.reasoningEffort) {\n\t\t\tconfig.thinkingConfig = {\n\t\t\t\tthinkingLevel: inferenceRequest.reasoningEffort,\n\t\t\t\tincludeThoughts: true,\n\t\t\t}\n\t\t}\n\n\t\tconst request: any = {\n\t\t\tmodel: inferenceRequest.model,\n\t\t\tcontents,\n\t\t\tconfig,\n\t\t}\n\n\t\tif (inferenceRequest.streaming) {\n\t\t\trequest.stream = inferenceRequest.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceRequest: InferenceRequest): { contents: any[]; systemInstruction?: string } {\n\t\tconst context = inferenceRequest.context\n\t\tconst contents: any[] = []\n\t\tconst system: string[] = []\n\t\tconst callNames = new Map<string, string>()\n\n\t\tfor (const item of context.items) {\n\t\t\tif (item.type === \"developer_message\" || item.type === \"system_message\") {\n\t\t\t\tsystem.push(item.text)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"user_message\") {\n\t\t\t\tthis.addPart(contents, \"user\", { text: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"model_message\") {\n\t\t\t\tthis.addPart(contents, \"model\", { text: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_request\") {\n\t\t\t\tconst toolUseRequest = item as ToolUseRequest\n\t\t\t\tcallNames.set(toolUseRequest.requestId, toolUseRequest.toolName)\n\t\t\t\tlet args: any\n\t\t\t\ttry {\n\t\t\t\t\targs = JSON.parse(toolUseRequest.toolArguments)\n\t\t\t\t} catch {\n\t\t\t\t\targs = {}\n\t\t\t\t}\n\t\t\t\tthis.addPart(contents, \"model\", {\n\t\t\t\t\tfunctionCall: { id: toolUseRequest.requestId, name: toolUseRequest.toolName, args },\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_result\") {\n\t\t\t\tconst toolUseResult = item as ToolUseResult\n\t\t\t\tthis.addPart(contents, \"user\", {\n\t\t\t\t\tfunctionResponse: {\n\t\t\t\t\t\tid: toolUseResult.requestId,\n\t\t\t\t\t\tname: callNames.get(toolUseResult.requestId) ?? \"\",\n\t\t\t\t\t\tresponse: this.parseResponse(toolUseResult.result.text),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontents,\n\t\t\tsystemInstruction: system.length > 0 ? system.join(\"\\n\\n\") : undefined,\n\t\t}\n\t}\n\n\tprivate addPart(contents: any[], role: \"user\" | \"model\", part: any): void {\n\t\tconst last = contents[contents.length - 1]\n\t\tif (last?.role === role) {\n\t\t\tlast.parts.push(part)\n\t\t\treturn\n\t\t}\n\n\t\tcontents.push({ role, parts: [part] })\n\t}\n\n\tprivate parseResponse(output: string): any {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(output)\n\t\t\treturn parsed && typeof parsed === \"object\" ? parsed : { output }\n\t\t} catch {\n\t\t\treturn { output }\n\t\t}\n\t}\n\n\textractTokenUsage(response: any): TokenUsage | undefined {\n\t\tconst usage = response.usageMetadata\n\t\tif (!usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tusage.promptTokenCount ?? 0,\n\t\t\tusage.candidatesTokenCount ?? 0,\n\t\t\tusage.totalTokenCount ?? 0,\n\t\t\tnew InputTokenDetails(usage.cachedContentTokenCount ?? 0),\n\t\t\tnew OutputTokenDetails(usage.thoughtsTokenCount ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceResult {\n\t\tconst items: ModelOutputItem[] = []\n\t\tconst parts = response.candidates?.[0]?.content?.parts ?? []\n\n\t\tfor (const part of parts) {\n\t\t\tif (part.thought && part.text) {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\tcontent: { type: \"input_text\", text: part.text },\n\t\t\t\t\tencryptedContent: undefined,\n\t\t\t\t\tsummary: [],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (part.text) {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"model_message\",\n\t\t\t\t\ttext: part.text,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (part.functionCall) {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"tool_use_request\",\n\t\t\t\t\trequestId: part.functionCall.id ?? \"\",\n\t\t\t\t\ttoolName: part.functionCall.name,\n\t\t\t\t\ttoolArguments: JSON.stringify(part.functionCall.args ?? {}),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport type { ModelOutputItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/inference/token-usage\"\n\nexport class OpenAIChatCompletionsMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceRequest: InferenceRequest) {\n\t\tconst request: any = {\n\t\t\tmodel: inferenceRequest.model,\n\t\t\tmessages: this.mapContextItems(inferenceRequest),\n\t\t}\n\n\t\tif (inferenceRequest.tools && inferenceRequest.tools.length > 0) {\n\t\t\trequest.tools = inferenceRequest.tools.map((tool) => ({\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.name,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.parameters,\n\t\t\t\t},\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceRequest.reasoningEffort) {\n\t\t\trequest.reasoning_effort = inferenceRequest.reasoningEffort\n\t\t}\n\n\t\tif (inferenceRequest.streaming) {\n\t\t\trequest.stream = inferenceRequest.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceRequest: InferenceRequest): any[] {\n\t\tconst messages: any[] = []\n\n\t\tfor (const item of inferenceRequest.context.items) {\n\t\t\tif (item.type === \"developer_message\" || item.type === \"system_message\") {\n\t\t\t\tmessages.push({ role: \"system\", content: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"user_message\") {\n\t\t\t\tmessages.push({ role: \"user\", content: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"model_message\") {\n\t\t\t\tmessages.push({ role: \"assistant\", content: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_request\") {\n\t\t\t\tconst toolUseRequest = item as ToolUseRequest\n\t\t\t\tconst toolCall = {\n\t\t\t\t\tid: toolUseRequest.requestId,\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tfunction: { name: toolUseRequest.toolName, arguments: toolUseRequest.toolArguments },\n\t\t\t\t}\n\t\t\t\tconst last = messages[messages.length - 1]\n\t\t\t\tif (last?.role === \"assistant\") {\n\t\t\t\t\tlast.tool_calls = last.tool_calls ?? []\n\t\t\t\t\tlast.tool_calls.push(toolCall)\n\t\t\t\t} else {\n\t\t\t\t\tmessages.push({ role: \"assistant\", content: null, tool_calls: [toolCall] })\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_result\") {\n\t\t\t\tconst toolUseResult = item as ToolUseResult\n\t\t\t\tmessages.push({\n\t\t\t\t\trole: \"tool\",\n\t\t\t\t\ttool_call_id: toolUseResult.requestId,\n\t\t\t\t\tcontent: toolUseResult.result.text,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn messages\n\t}\n\n\textractTokenUsage(response: any): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.prompt_tokens,\n\t\t\tresponse.usage.completion_tokens,\n\t\t\tresponse.usage.total_tokens,\n\t\t\tnew InputTokenDetails(response.usage.prompt_tokens_details?.cached_tokens ?? 0),\n\t\t\tnew OutputTokenDetails(response.usage.completion_tokens_details?.reasoning_tokens ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceResult {\n\t\tconst items: ModelOutputItem[] = []\n\t\tconst message = response.choices?.[0]?.message\n\t\tif (!message) {\n\t\t\treturn { items: [], tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t\t}\n\n\t\tif (message.reasoning_content) {\n\t\t\titems.push({\n\t\t\t\ttype: \"reasoning\",\n\t\t\t\tcontent: { type: \"input_text\", text: message.reasoning_content },\n\t\t\t\tencryptedContent: undefined,\n\t\t\t\tsummary: [],\n\t\t\t})\n\t\t}\n\n\t\tif (message.content) {\n\t\t\titems.push({\n\t\t\t\ttype: \"model_message\",\n\t\t\t\ttext: message.content,\n\t\t\t})\n\t\t}\n\n\t\tfor (const toolCall of message.tool_calls ?? []) {\n\t\t\titems.push({\n\t\t\t\ttype: \"tool_use_request\",\n\t\t\t\trequestId: toolCall.id,\n\t\t\t\ttoolName: toolCall.function.name,\n\t\t\t\ttoolArguments: toolCall.function.arguments,\n\t\t\t})\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport { SpaceEvent } from \"@domain/space/event\"\nimport type { Endpoint } from \"@domain/inference/endpoint\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport { OpenAIChatCompletionsMapper } from \"@infrastructure/providers/openai/openai-chat-completions-mapper\"\nimport OpenAI from \"openai\"\n\n/**\n * Optional connection config. When omitted, the `openai` SDK reads\n * `OPENAI_API_KEY` and `OPENAI_BASE_URL` from the environment, so the\n * default-constructed runtime targets whatever `OPENAI_BASE_URL` points\n * at (real OpenAI when unset). Provider presets (e.g. DeepSeek) pass an\n * explicit base URL + credential.\n */\nexport interface OpenAICompatibleConfig {\n\tbaseURL?: string\n\tapiKey?: string\n\t/**\n\t * Extra request-body fields merged into every `chat.completions`\n\t * call. This is how provider-specific quirks are handled **without\n\t * a per-provider subclass in mozaik** — the consumer supplies the\n\t * vendor-only fields (e.g. DeepSeek's `{ thinking: { type } }`,\n\t * safety flags, routing hints). Standard fields the runtime already\n\t * sets (`model`, `messages`, `tools`, `reasoning_effort`) take\n\t * precedence and are not overwritten.\n\t */\n\textraBody?: Record<string, unknown>\n}\n\n/**\n * Generic adapter for any **OpenAI Chat Completions**-compatible\n * endpoint — real OpenAI, DeepSeek, Xiaomi MiMo, OpenRouter, vLLM,\n * Ollama, etc. It speaks `/chat/completions` (not the Responses API),\n * which is the dialect third-party OpenAI-compatible providers expose.\n *\n * The base URL and credential are configurable; everything else (the\n * `Context` ⇄ chat-message conversion, tool-call round-trip, token\n * usage extraction) is provider-agnostic. Provider-specific request\n * shaping (e.g. DeepSeek's `thinking` field) is supplied by the\n * consumer via {@link OpenAICompatibleConfig.extraBody} — mozaik stays\n * generic and gains no per-provider subclasses.\n *\n * Was `DeepSeekChatCompletions`; generalized so consumers can point it\n * at any OpenAI-compatible endpoint.\n */\nexport class OpenAIChatCompletions implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: OpenAI\n\tprivate readonly clientConfig: OpenAICompatibleConfig\n\tprivate readonly extraBody: Record<string, unknown>\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new OpenAIChatCompletionsMapper(),\n\t\tconfig: OpenAICompatibleConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t\tthis.extraBody = config.extraBody ?? {}\n\t}\n\n\tprivate get client(): OpenAI {\n\t\t// Passing `undefined` for baseURL/apiKey lets the SDK fall back\n\t\t// to OPENAI_BASE_URL / OPENAI_API_KEY from the environment.\n\t\treturn (this._client ??= new OpenAI({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tprivate buildRequest(inferenceRequest: InferenceRequest): any {\n\t\treturn {\n\t\t\t...this.extraBody,\n\t\t\t...this.endpointMapper.toRequest(inferenceRequest),\n\t\t}\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResult> {\n\t\tconst response = await this.client.chat.completions.create(this.buildRequest(inferenceRequest))\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceRequest: InferenceRequest): AsyncIterable<SpaceEvent> {\n\t\tconst stream = this.client.chat.completions.stream(this.buildRequest(inferenceRequest))\n\n\t\tfor await (const chunk of stream) {\n\t\t\tyield chunk as unknown as SpaceEvent\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(await stream.finalChatCompletion())\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tpayload: output,\n\t\t\toccurredAt: new Date(),\n\t\t\tproducerId: inferenceRequest.model,\n\t\t}\n\t}\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeSonnet46Specification: ModelSpecification = {\n\tname: \"claude-sonnet-4-6\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeOpus48Specification: ModelSpecification = {\n\tname: \"claude-opus-4-8\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 32_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeOpus47Specification: ModelSpecification = {\n\tname: \"claude-opus-4-7\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 32_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gemini35FlashSpecification: ModelSpecification = {\n\tname: \"gemini-3.5-flash\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gemini31ProSpecification: ModelSpecification = {\n\tname: \"gemini-3.1-pro-preview\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const deepSeekV4FlashSpecification: ModelSpecification = {\n\tname: \"deepseek-v4-flash\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const deepSeekV4ProSpecification: ModelSpecification = {\n\tname: \"deepseek-v4-pro\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt54Specification: ModelSpecification = {\n\tname: \"gpt-5.4\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt54MiniSpecification: ModelSpecification = {\n\tname: \"gpt-5.4-mini\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 400_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt54NanoSpecification: ModelSpecification = {\n\tname: \"gpt-5.4-nano\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 400_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt55Specification: ModelSpecification = {\n\tname: \"gpt-5.5\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeHaiku45Specification: ModelSpecification = {\n\tname: \"claude-haiku-4-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt6LunaSpecification: ModelSpecification = {\n\tname: \"gpt-6-luna\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt6SolSpecification: ModelSpecification = {\n\tname: \"gpt-6-sol\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt61SolSpecification: ModelSpecification = {\n\tname: \"gpt-6.1-sol\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt6AstraSpecification: ModelSpecification = {\n\tname: \"gpt-6-astra\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeSonnet5Specification: ModelSpecification = {\n\tname: \"claude-sonnet-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeSonnet55Specification: ModelSpecification = {\n\tname: \"claude-sonnet-5-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeOpus55Specification: ModelSpecification = {\n\tname: \"claude-opus-5-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeFable51Specification: ModelSpecification = {\n\tname: \"claude-fable-5-1\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gemini35FlashLiteSpecification: ModelSpecification = {\n\tname: \"gemini-3.5-flash-lite\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 65_536,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gemini38FlashSpecification: ModelSpecification = {\n\tname: \"gemini-3.8-flash\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 65_536,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const deepSeekFlashSpecification: ModelSpecification = {\n\tname: \"deepseek-flash\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import { AnthropicMessages } from \"@infrastructure/providers/anthropic/anthropic-messages\"\nimport { OpenAIResponses } from \"@infrastructure/providers/openai/openai-responses\"\nimport { GeminiGenerateContent } from \"@infrastructure/providers/gemini/gemini-generate-content\"\nimport { OpenAIChatCompletions } from \"@infrastructure/providers/openai/openai-chat-completions\"\nimport { claudeSonnet46Specification } from \"@infrastructure/providers/anthropic/models/claude-4-6-sonnet\"\nimport { claudeOpus48Specification } from \"@infrastructure/providers/anthropic/models/claude-4-8-opus\"\nimport { claudeOpus47Specification } from \"@infrastructure/providers/anthropic/models/claude-4-7-opus\"\nimport { gemini35FlashSpecification } from \"@infrastructure/providers/gemini/models/gemini-3-5-flash\"\nimport { gemini31ProSpecification } from \"@infrastructure/providers/gemini/models/gemini-3-1-pro\"\nimport { deepSeekV4FlashSpecification } from \"@infrastructure/providers/deepseek/models/deepseek-v4-flash\"\nimport { deepSeekV4ProSpecification } from \"@infrastructure/providers/deepseek/models/deepseek-v4-pro\"\nimport { gpt54Specification } from \"@infrastructure/providers/openai/models/gpt-5-4\"\nimport { gpt54MiniSpecification } from \"@infrastructure/providers/openai/models/gpt-5-4-mini\"\nimport { gpt54NanoSpecification } from \"@infrastructure/providers/openai/models/gpt-5-4-nano\"\nimport { gpt55Specification } from \"@infrastructure/providers/openai/models/gpt-5-5\"\nimport { claudeHaiku45Specification } from \"@infrastructure/providers/anthropic/models/claude-4-5-haiku\"\nimport { gpt6LunaSpecification } from \"@infrastructure/providers/openai/models/gpt-6-luna\"\nimport { gpt6SolSpecification } from \"@infrastructure/providers/openai/models/gpt-6-sol\"\nimport { gpt61SolSpecification } from \"@infrastructure/providers/openai/models/gpt-6-1-sol\"\nimport { gpt6AstraSpecification } from \"@infrastructure/providers/openai/models/gpt-6-astra\"\nimport { claudeSonnet5Specification } from \"@infrastructure/providers/anthropic/models/claude-5-sonnet\"\nimport { claudeSonnet55Specification } from \"@infrastructure/providers/anthropic/models/claude-5-5-sonnet\"\nimport { claudeOpus55Specification } from \"@infrastructure/providers/anthropic/models/claude-5-5-opus\"\nimport { claudeFable51Specification } from \"@infrastructure/providers/anthropic/models/claude-5-1-fable\"\nimport { gemini35FlashLiteSpecification } from \"@infrastructure/providers/gemini/models/gemini-3-5-flash-lite\"\nimport { gemini38FlashSpecification } from \"@infrastructure/providers/gemini/models/gemini-3-8-flash\"\nimport { deepSeekFlashSpecification } from \"@infrastructure/providers/deepseek/models/deepseek-flash\"\nimport type { GenerativeModel } from \"@domain/inference/generative-model\"\n\nexport const supportedModels: GenerativeModel[] = [\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54Specification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54MiniSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54NanoSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt55Specification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt6LunaSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt6SolSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt61SolSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt6AstraSpecification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeHaiku45Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeSonnet46Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus47Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus48Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeSonnet5Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeSonnet55Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus55Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeFable51Specification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini35FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini31ProSpecification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini35FlashLiteSpecification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini38FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekV4FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekV4ProSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekFlashSpecification,\n\t},\n]\n","import { Loop } from \"@domain/agent/loop/loop\"\nimport { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { AgentLoop } from \"./specification\"\nimport { Agent } from \"@domain/agent/agent\"\n\nexport class RuleEngine {\n\tdecide(agent: Agent, loop: Loop): LoopControlDirective | undefined {\n\t\tconst agentLoop: AgentLoop = { agent, loop }\n\t\tconst satisfiedRules = loop.ruleBook.getRules().filter((rule) => rule.condition.isSatisfiedBy(agentLoop))\n\t\tif (satisfiedRules.length === 0) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst highestPriorityRule = satisfiedRules.reduce((highest, current) => {\n\t\t\treturn highest.priority > current.priority ? highest : current\n\t\t})\n\n\t\treturn highestPriorityRule.action.execute(agentLoop)\n\t}\n}\n","import { AgentRepository } from \"@domain/agent/agent-repository\"\nimport { Loop } from \"@domain/agent/loop/loop\"\nimport { RuleEngine } from \"@domain/agent/loop/rule-engine\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\nimport { DirectiveExecutionStrategyResolver } from \"@application/directive-execution/directive-execution-strategy-resolver\"\n\nexport class RunLoopUseCase {\n\tprivate readonly ruleEngine: RuleEngine\n\n\tconstructor(\n\t\tprivate readonly agentRepository: AgentRepository,\n\t\tprivate readonly loopRepository: LoopRepository,\n\t\tprivate readonly directiveExecutionStrategyResolver: DirectiveExecutionStrategyResolver,\n\t) {\n\t\tthis.ruleEngine = new RuleEngine()\n\t}\n\n\tasync execute(loopId: string): Promise<Loop> {\n\t\tconst loop = await this.loopRepository.findById(loopId)\n\t\tif (!loop) {\n\t\t\tthrow new Error(\"Loop not found\")\n\t\t}\n\n\t\tconst agent = await this.agentRepository.findById(loop.getAgentId())\n\t\tif (!agent) {\n\t\t\tthrow new Error(\"Agent not found\")\n\t\t}\n\n\t\twhile (loop.stateId !== \"completed\") {\n\t\t\tconst directive = this.ruleEngine.decide(agent, loop)\n\n\t\t\tif (!directive) return loop\n\n\t\t\tconst strategy = this.directiveExecutionStrategyResolver.resolve(directive)\n\t\t\tawait strategy.execute(directive, agent, loop)\n\t\t}\n\n\t\tawait this.loopRepository.save(loop)\n\n\t\treturn loop\n\t}\n}\n","import { Memory } from \"@domain/agent/memory\"\nimport { Context, ContextItem } from \"@domain/inference/context\"\n\nexport class RuntimeMemory implements Memory {\n\tprivate readonly context: Context\n\n\tconstructor(context: Context) {\n\t\tthis.context = context\n\t}\n\tremember(items: ContextItem[], participantId: string): void {\n\t\tthrow new Error(\"Method not implemented.\")\n\t}\n\trecall(topic: string, participantId: string): ContextItem[] {\n\t\tthrow new Error(\"Method not implemented.\")\n\t}\n}\n","import { Memory, MemoryFactory } from \"@domain/agent/memory\"\nimport { RuntimeMemory } from \"@infrastructure/memory/runtime-memory\"\nimport { Context } from \"@domain/inference/context\"\n\nexport class RuntimeMemoryFactory implements MemoryFactory {\n\tcreate(): Memory {\n\t\tconst context: Context = {\n\t\t\titems: [],\n\t\t}\n\t\treturn new RuntimeMemory(context)\n\t}\n}\n","import { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\n\nexport class DirectiveExecutionStrategyResolver {\n\tconstructor(private readonly strategies: Record<LoopControlDirective[\"type\"], DirectiveExecutionStrategy>) {}\n\n\tresolve(directive: LoopControlDirective): DirectiveExecutionStrategy {\n\t\treturn this.strategies[directive.type]\n\t}\n}\n","import { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\nimport { Loop } from \"@domain/agent/loop/loop\"\nimport { Agent } from \"@domain/agent/agent\"\n\nexport class CompleteExecutionStrategy implements DirectiveExecutionStrategy {\n\tasync execute(directive: LoopControlDirective, agent: Agent, loop: Loop) {\n\t\tif (directive.type !== \"complete\") {\n\t\t\tthrow new Error(\"Expected a completion directive\")\n\t\t}\n\n\t\tloop.complete(directive.reason)\n\t}\n}\n","import { Agent } from \"@domain/agent/agent\"\nimport { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { InferenceRunner } from \"@domain/inference/inference-runner\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\nimport { Loop } from \"@domain/agent/loop/loop\"\n\nexport class InferenceExecutionStrategy implements DirectiveExecutionStrategy {\n\tconstructor(private readonly inferenceRunner: InferenceRunner) {}\n\n\tasync execute(directive: LoopControlDirective, agent: Agent, loop: Loop) {\n\t\tif (directive.type !== \"inference\") {\n\t\t\tthrow new Error(\"Expected an inference directive\")\n\t\t}\n\n\t\tconst pending = loop.requestInference(directive.request)\n\t\tconst result = await this.inferenceRunner.run(directive.request)\n\n\t\tloop.receiveInferenceResult(pending.id, result)\n\t}\n}\n","import { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\nimport { ToolUseRunner } from \"@domain/inference/tool-use-runner\"\nimport { Agent } from \"@domain/agent/agent\"\nimport { Loop } from \"@domain/agent/loop/loop\"\n\nexport class ToolUseExecutionStrategy implements DirectiveExecutionStrategy {\n\tconstructor(private readonly toolRunner: ToolUseRunner) {}\n\n\tasync execute(directive: LoopControlDirective, agent: Agent, loop: Loop) {\n\t\tif (directive.type !== \"tool_use\") {\n\t\t\tthrow new Error(\"Expected a tool-use directive\")\n\t\t}\n\n\t\tconst pending = loop.pending\n\t\tif (pending?.type !== \"tool_execution\") {\n\t\t\tthrow new Error(\"The loop has no pending tool execution\")\n\t\t}\n\n\t\tconst tool = agent.getTools().find((tool) => tool.name === directive.call.toolName)\n\n\t\tif (!tool) {\n\t\t\tthrow new Error(`Tool \"${directive.call.toolName}\" not found`)\n\t\t}\n\n\t\tconst result = await this.toolRunner.run(directive.call, tool)\n\n\t\tloop.receiveToolUseResult(pending.id, result)\n\t}\n}\n","import { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\nimport { Agent } from \"@domain/agent/agent\"\nimport { Loop } from \"@domain/agent/loop/loop\"\n\nexport class WaitExecutionStrategy implements DirectiveExecutionStrategy {\n\tasync execute(directive: LoopControlDirective, agent: Agent, loop: Loop) {\n\t\tif (directive.type !== \"wait\") {\n\t\t\tthrow new Error(\"Expected a wait directive\")\n\t\t}\n\n\t\tloop.wait(directive.reason)\n\t}\n}\n","import { CreateAgentUseCase } from \"@application/use-cases/create-agent\"\nimport { InMemoryAgentRepository } from \"@infrastructure/repositories/in-memory-agent-repository\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { CreateAgentLoopUseCase } from \"@application/use-cases/create-loop\"\nimport { InMemoryLoopRepository } from \"@infrastructure/repositories/in-memory-loop-repository\"\nimport { InferenceRequest, InferenceRunner } from \"@domain/inference/inference-runner\"\nimport { AgentRepository } from \"@domain/agent/agent-repository\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\nimport { ToolUseRunner } from \"@domain/inference/tool-use-runner\"\nimport { LocalToolRunner } from \"@application/runners/local-tool-runner\"\nimport { DefaultInferenceRunner } from \"@application/runners/inference-runner\"\nimport { GenerativeModel } from \"@domain/inference/generative-model\"\nimport { InferenceRequestValidator } from \"@domain/inference/request-validation/inference-request-validator\"\nimport { supportedModels } from \"@infrastructure/providers/supported-models\"\nimport { AgentRecord } from \"./domain/agent/record\"\nimport { CreateLoopParams, Loop, LoopStateId } from \"./domain/agent/loop/loop\"\nimport { RunLoopUseCase } from \"@application/use-cases/run-loop\"\nimport { LoopSpecification, ModelAnswered } from \"./domain/agent/loop/specification\"\nimport { CompleteAction, InferenceAction, LoopAction, ToolUseAction, WaitAction } from \"./domain/agent/loop/action\"\nimport { CreateLoopRuleParams, LoopRule, RuleBook } from \"./domain/agent/loop/rule\"\nimport { RuntimeMemoryFactory } from \"@infrastructure/memory/runtime-memory-factory\"\nimport { DirectiveExecutionStrategyResolver } from \"@application/directive-execution/directive-execution-strategy-resolver\"\nimport { CompleteExecutionStrategy } from \"@application/directive-execution/complete-execution-strategy\"\nimport { InferenceExecutionStrategy } from \"@application/directive-execution/inference-execution-strategy\"\nimport { ToolUseExecutionStrategy } from \"@application/directive-execution/tool-use-execution-strategy\"\nimport { WaitExecutionStrategy } from \"@application/directive-execution/wait-execution-strategy\"\n\nexport type InferenceRunnerConfig = {\n\tsupportedModels?: GenerativeModel[]\n\trunner?: InferenceRunner\n}\n\nexport type AgentModuleConfig = {\n\tagentRepository?: AgentRepository\n\tagentLoopRepository?: LoopRepository\n\tinferenceRunnerConfig?: InferenceRunnerConfig\n\ttoolRunner?: ToolUseRunner\n}\n\nexport function defineAgentModule(config: AgentModuleConfig) {\n\t// Dependencies\n\tconst agentRepository = config.agentRepository ?? new InMemoryAgentRepository()\n\tconst agentLoopRepository = config.agentLoopRepository ?? new InMemoryLoopRepository()\n\n\tconst inferenceRunner =\n\t\tconfig.inferenceRunnerConfig?.runner ??\n\t\tnew DefaultInferenceRunner(\n\t\t\tconfig.inferenceRunnerConfig?.supportedModels ?? supportedModels,\n\t\t\tnew InferenceRequestValidator(),\n\t\t)\n\n\tconst toolRunner = config.toolRunner ?? new LocalToolRunner()\n\n\tconst memoryFactory = new RuntimeMemoryFactory()\n\t// Use cases\n\tconst createAgentUseCase = new CreateAgentUseCase(agentRepository, memoryFactory)\n\tconst createLoopUseCase = new CreateAgentLoopUseCase(agentLoopRepository)\n\n\ttype CreateAgentParams = {\n\t\tname: string\n\t\tinstruction: string\n\t\ttools: Tool[]\n\t\thandlers: SituationHandler[]\n\t}\n\t// Interfaces\n\tasync function createAgent(config: CreateAgentParams): Promise<AgentRecord> {\n\t\treturn await createAgentUseCase.execute(config.name, config.instruction, config.tools, config.handlers)\n\t}\n\n\tasync function createLoop(params: CreateLoopParams): Promise<Loop> {\n\t\treturn await createLoopUseCase.execute(params)\n\t}\n\n\tconst directiveExecutionStrategyResolver = new DirectiveExecutionStrategyResolver({\n\t\tinference: new InferenceExecutionStrategy(inferenceRunner),\n\t\ttool_use: new ToolUseExecutionStrategy(toolRunner),\n\t\tcomplete: new CompleteExecutionStrategy(),\n\t\twait: new WaitExecutionStrategy(),\n\t})\n\n\tconst runLoopUseCase = new RunLoopUseCase(agentRepository, agentLoopRepository, directiveExecutionStrategyResolver)\n\n\tasync function runLoop(loopId: string): Promise<Loop> {\n\t\treturn await runLoopUseCase.execute(loopId)\n\t}\n\n\treturn {\n\t\tcreateAgent,\n\t\tcreateLoop,\n\t\trunLoop,\n\t}\n}\n"],"mappings":"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","names":["sendMessageUseCase","supportedModels","Anthropic","OpenAI","import_openai","OpenAI","tool","config"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/domain/space/event.ts","../src/domain/space/participant.ts","../src/domain/space/runtime.ts","../src/util/uuid-generator.ts","../src/application/use-cases/create-participant.ts","../src/application/use-cases/participant-join.ts","../src/infrastructure/repositories/in-memory-space-repository.ts","../src/domain/space/event-publisher.ts","../src/application/use-cases/participant-leave.ts","../src/application/use-cases/send-message.ts","../src/util/system-clock.ts","../src/domain/space/space.ts","../src/application/use-cases/create-space.ts","../src/define-runtime.ts","../src/domain/space/situation-specification.ts","../src/domain/agent/agent.ts","../src/application/use-cases/create-agent.ts","../src/infrastructure/repositories/in-memory-agent-repository.ts","../src/domain/agent/loop/specification.ts","../src/domain/agent/loop/action.ts","../src/domain/agent/loop/rule.ts","../src/domain/agent/loop/loop.ts","../src/application/use-cases/create-loop.ts","../src/infrastructure/repositories/in-memory-loop-repository.ts","../src/domain/inference/tool-use-item-factory.ts","../src/application/runners/local-tool-runner.ts","../src/application/runners/inference-runner.ts","../src/domain/inference/request-validation/reasoning-effort.ts","../src/domain/inference/request-validation/tool-calling.ts","../src/domain/inference/request-validation/streaming.ts","../src/domain/inference/request-validation/structured-output.ts","../src/domain/inference/request-validation/context.ts","../src/domain/inference/request-validation/inference-request-validator.ts","../src/domain/inference/token-usage.ts","../src/infrastructure/providers/anthropic/anthropic-messages-mapper.ts","../src/infrastructure/providers/anthropic/anthropic-messages.ts","../src/infrastructure/providers/openai/openai-responses-mapper.ts","../src/infrastructure/providers/openai/openai-responses.ts","../src/infrastructure/providers/gemini/gemini-generate-content.ts","../src/infrastructure/providers/gemini/gemini-generate-content-mapper.ts","../src/infrastructure/providers/openai/openai-chat-completions-mapper.ts","../src/infrastructure/providers/openai/openai-chat-completions.ts","../src/infrastructure/providers/anthropic/models/claude-4-6-sonnet.ts","../src/infrastructure/providers/anthropic/models/claude-4-8-opus.ts","../src/infrastructure/providers/anthropic/models/claude-4-7-opus.ts","../src/infrastructure/providers/gemini/models/gemini-3-5-flash.ts","../src/infrastructure/providers/gemini/models/gemini-3-1-pro.ts","../src/infrastructure/providers/deepseek/models/deepseek-v4-flash.ts","../src/infrastructure/providers/deepseek/models/deepseek-v4-pro.ts","../src/infrastructure/providers/openai/models/gpt-5-4.ts","../src/infrastructure/providers/openai/models/gpt-5-4-mini.ts","../src/infrastructure/providers/openai/models/gpt-5-4-nano.ts","../src/infrastructure/providers/openai/models/gpt-5-5.ts","../src/infrastructure/providers/anthropic/models/claude-4-5-haiku.ts","../src/infrastructure/providers/openai/models/gpt-6-luna.ts","../src/infrastructure/providers/openai/models/gpt-6-sol.ts","../src/infrastructure/providers/openai/models/gpt-6-1-sol.ts","../src/infrastructure/providers/openai/models/gpt-6-astra.ts","../src/infrastructure/providers/anthropic/models/claude-5-sonnet.ts","../src/infrastructure/providers/anthropic/models/claude-5-5-sonnet.ts","../src/infrastructure/providers/anthropic/models/claude-5-5-opus.ts","../src/infrastructure/providers/anthropic/models/claude-5-1-fable.ts","../src/infrastructure/providers/gemini/models/gemini-3-5-flash-lite.ts","../src/infrastructure/providers/gemini/models/gemini-3-8-flash.ts","../src/infrastructure/providers/deepseek/models/deepseek-flash.ts","../src/infrastructure/providers/supported-models.ts","../src/domain/agent/loop/rule-engine.ts","../src/application/use-cases/run-loop.ts","../src/infrastructure/memory/runtime-memory.ts","../src/infrastructure/memory/runtime-memory-factory.ts","../src/application/directive-execution/directive-execution-strategy-resolver.ts","../src/application/directive-execution/complete-execution-strategy.ts","../src/application/directive-execution/inference-execution-strategy.ts","../src/application/directive-execution/tool-use-execution-strategy.ts","../src/application/directive-execution/wait-execution-strategy.ts","../src/agent-module.ts"],"sourcesContent":["import { SpaceEvent } from \"@domain/space/event\"\nimport { Participant } from \"@domain/space/participant\"\nimport { SharedState } from \"@domain/space/shared-state\"\nimport { defineRuntime } from \"src/define-runtime\"\nimport { SituationContext, SituationHandler, SituationProcessor } from \"@domain/space/situation-handler\"\nimport { SituationSpecification } from \"@domain/space/situation-specification\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { defineAgentModule, InferenceRunnerConfig, AgentModuleConfig } from \"./agent-module\"\nimport { GenerativeModel } from \"@domain/inference/generative-model\"\nimport { InferenceRunner } from \"@domain/inference/inference-runner\"\nimport { AgentRepository } from \"@domain/agent/agent-repository\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\nimport { ToolUseRunner } from \"@domain/inference/tool-use-runner\"\nimport { Agent } from \"@domain/agent/agent\"\nimport { ModelMessageItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\n\nexport {\n\tdefineRuntime,\n\tdefineAgentModule,\n\tInferenceRunnerConfig,\n\tGenerativeModel,\n\tInferenceRunner,\n\tAgentModuleConfig,\n\tAgentRepository,\n\tLoopRepository,\n\tToolUseRunner,\n\tSharedState,\n\tSpaceEvent,\n\tParticipant,\n\tSituationHandler,\n\tSituationProcessor,\n\tSituationSpecification,\n\tSituationContext,\n\tAgent,\n\tTool,\n\tToolUseResult,\n\tToolUseRequest,\n\tModelMessageItem,\n}\n","import { ParticipantManifest } from \"@domain/space/participant\"\n\nexport class SpaceEvent<TType extends string = string, TPayload = unknown> {\n\treadonly type: TType\n\treadonly producerId: string\n\treadonly occurredAt: Date\n\treadonly payload: TPayload\n\n\tconstructor(type: TType, producerId: string, occurredAt: Date, payload: TPayload) {\n\t\tthis.type = type\n\t\tthis.producerId = producerId\n\t\tthis.occurredAt = occurredAt\n\t\tthis.payload = payload\n\t}\n\n\tstatic create<TType extends string = string, TPayload = unknown>(\n\t\ttype: TType,\n\t\tproducerId: string,\n\t\toccurredAt: Date,\n\t\tpayload: TPayload,\n\t): SpaceEvent<TType, TPayload> {\n\t\treturn new SpaceEvent(type, producerId, occurredAt, payload)\n\t}\n}\n\nexport class ParticipantJoinedEvent extends SpaceEvent<\"participant.joined\", ParticipantManifest> {\n\tstatic init(manifest: ParticipantManifest, occurredAt: Date): ParticipantJoinedEvent {\n\t\treturn SpaceEvent.create(\"participant.joined\", manifest.id, occurredAt, manifest)\n\t}\n}\n\nexport class ParticipantLeftEvent extends SpaceEvent<\"participant.left\", ParticipantManifest> {\n\tstatic init(manifest: ParticipantManifest, occurredAt: Date): ParticipantLeftEvent {\n\t\treturn SpaceEvent.create(\"participant.left\", manifest.id, occurredAt, manifest)\n\t}\n}\n\nexport class MessageSentEvent extends SpaceEvent<\"message.sent\", { message: string }> {\n\tstatic init(producerId: string, message: string, occurredAt: Date): MessageSentEvent {\n\t\treturn SpaceEvent.create(\"message.sent\", producerId, occurredAt, { message })\n\t}\n}\n\nexport class ModelAnswerEvent extends SpaceEvent<\"model.answer\", { answer: string }> {\n\tstatic init(producerId: string, answer: string, occurredAt: Date): ModelAnswerEvent {\n\t\treturn ModelAnswerEvent.create(\"model.answer\", producerId, occurredAt, { answer })\n\t}\n}\n","import { SituationHandler } from \"@domain/space/situation-handler\"\n\nexport type ParticipantRole = \"agent\" | \"external\"\n\nexport type ParticipantManifest = {\n\treadonly id: string\n\treadonly name: string\n\treadonly role: ParticipantRole\n\treadonly capabilities?: readonly string[]\n}\n\nexport class Participant {\n\tprivate manifest: ParticipantManifest\n\tprivate handlers: SituationHandler[]\n\n\tconstructor(manifest: ParticipantManifest, handlers: SituationHandler[]) {\n\t\tthis.manifest = manifest\n\t\tthis.handlers = handlers\n\t}\n\n\tgetManifest(): ParticipantManifest {\n\t\treturn this.manifest\n\t}\n\n\tsetManifest(manifest: ParticipantManifest): void {\n\t\tthis.manifest = manifest\n\t}\n\n\tgetId(): string {\n\t\treturn this.manifest.id\n\t}\n\n\tgetHandlers(): SituationHandler[] {\n\t\treturn this.handlers\n\t}\n\n\tsetHandlers(handlers: SituationHandler[]): void {\n\t\tthis.handlers = handlers\n\t}\n}\n","import { SharedState } from \"@domain/space/shared-state\"\n\nexport class RuntimeService<TSharedState extends SharedState> {\n\tconstructor(public readonly state: TSharedState) {}\n}\n","export class UuidGenerator {\n\tstatic create(): string {\n\t\treturn crypto.randomUUID()\n\t}\n}\n","import { Participant, ParticipantManifest } from \"@domain/space/participant\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { UuidGenerator } from \"@util/uuid-generator\"\n\nexport class CreateParticipantUseCase {\n\tasync execute(name: string, capabilities: readonly string[], handlers: SituationHandler[]): Promise<Participant> {\n\t\tconst manifest: ParticipantManifest = {\n\t\t\tid: UuidGenerator.create(),\n\t\t\tname,\n\t\t\tcapabilities,\n\t\t\trole: \"external\",\n\t\t}\n\t\tconst participant = new Participant(manifest, handlers)\n\t\treturn participant\n\t}\n}\n","import { SpaceRepository } from \"@domain/space/space-repository\"\nimport { EventPublisher } from \"@domain/space/event-publisher\"\nimport { Participant } from \"@domain/space/participant\"\n\nexport class ParticipantJoinUseCase {\n\tprivate readonly spaceRepository: SpaceRepository\n\tprivate readonly eventPublisher: EventPublisher\n\n\tconstructor(spaceRepository: SpaceRepository, eventPublisher: EventPublisher) {\n\t\tthis.spaceRepository = spaceRepository\n\t\tthis.eventPublisher = eventPublisher\n\t}\n\n\tasync execute(spaceId: string, participant: Participant): Promise<void> {\n\t\tconst space = await this.spaceRepository.findById(spaceId)\n\t\tif (!space) {\n\t\t\tthrow new Error(\"Space not found\")\n\t\t}\n\t\tconst existingParticipant = space.getParticipant(participant.getId())\n\t\tif (existingParticipant) {\n\t\t\tthrow new Error(\"Participant already joined\")\n\t\t}\n\t\tconst event = space.addParticipant(participant)\n\t\tif (event) {\n\t\t\tthis.eventPublisher.publish(event, space.getParticipants())\n\t\t}\n\t\tawait this.spaceRepository.save(space)\n\t}\n}\n","import { Space } from \"@domain/space/space\"\nimport { SpaceRepository } from \"@domain/space/space-repository\"\n\nexport class InMemorySpaceRepository implements SpaceRepository {\n\tprivate spaces: Space[] = []\n\n\tasync save(space: Space): Promise<void> {\n\t\tthis.spaces.push(space)\n\t}\n\n\tasync findById(id: string): Promise<Space | undefined> {\n\t\treturn this.spaces.find((space) => space.getId() === id)\n\t}\n\n\tasync delete(id: string): Promise<void> {\n\t\tthis.spaces = this.spaces.filter((space) => space.getId() !== id)\n\t}\n}\n","import { SpaceEvent } from \"./event\"\nimport { Participant } from \"./participant\"\n\nexport class EventPublisher {\n\tpublish(event: SpaceEvent, participants: Participant[]): void {\n\t\tfor (const participant of participants) {\n\t\t\tparticipant.getHandlers().forEach((handler) => {\n\t\t\t\tif (handler.specification.isSatisfiedBy({ event, participant })) {\n\t\t\t\t\thandler.processor.apply({ event, participant })\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n}\n","import { SpaceRepository } from \"@domain/space/space-repository\"\nimport { EventPublisher } from \"@domain/space/event-publisher\"\n\nexport class ParticipantLeaveUseCase {\n\tprivate readonly spaceRepository: SpaceRepository\n\tprivate readonly eventPublisher: EventPublisher\n\n\tconstructor(spaceRepository: SpaceRepository, eventPublisher: EventPublisher) {\n\t\tthis.spaceRepository = spaceRepository\n\t\tthis.eventPublisher = eventPublisher\n\t}\n\n\tasync execute(spaceId: string, participantId: string): Promise<void> {\n\t\tconst space = await this.spaceRepository.findById(spaceId)\n\t\tif (!space) {\n\t\t\tthrow new Error(\"Space not found\")\n\t\t}\n\t\tconst participant = space.getParticipant(participantId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(\"Participant not found\")\n\t\t}\n\t\tconst event = space.removeParticipant(participant)\n\t\tif (event) {\n\t\t\tthis.eventPublisher.publish(event, space.getParticipants())\n\t\t}\n\t\tawait this.spaceRepository.save(space)\n\t}\n}\n","import { SpaceRepository } from \"@domain/space/space-repository\"\nimport { EventPublisher } from \"@domain/space/event-publisher\"\n\nexport class SendMessageUseCase {\n\tconstructor(\n\t\tprivate readonly spaceRepository: SpaceRepository,\n\t\tprivate readonly eventPublisher: EventPublisher,\n\t) {}\n\n\tasync execute(spaceId: string, participantId: string, message: string): Promise<void> {\n\t\tconst space = await this.spaceRepository.findById(spaceId)\n\t\tif (!space) {\n\t\t\tthrow new Error(\"Space not found\")\n\t\t}\n\t\tconst participant = space.getParticipant(participantId)\n\t\tif (!participant) {\n\t\t\tthrow new Error(\"Participant not found\")\n\t\t}\n\t\tconst event = space.sendMessage(participant, message, new Date())\n\t\tif (event) {\n\t\t\tthis.eventPublisher.publish(event, space.getParticipants())\n\t\t}\n\t\tawait this.spaceRepository.save(space)\n\t}\n}\n","export class SystemClock {\n\tstatic now(): Date {\n\t\treturn new Date()\n\t}\n}\n","import { MessageSentEvent, ParticipantJoinedEvent, ParticipantLeftEvent, SpaceEvent } from \"@domain/space/event\"\nimport { Participant } from \"@domain/space/participant\"\nimport { SystemClock } from \"@util/system-clock\"\nimport { UuidGenerator } from \"@util/uuid-generator\"\n\nexport type SpaceRecord = {\n\tid: string\n\tname: string\n\tparticipants: Participant[]\n}\n\nexport class Space {\n\tprivate readonly id: string\n\tprivate name: string\n\tprivate participants: Participant[]\n\tprivate events: SpaceEvent[]\n\n\tconstructor(id: string, name: string, participants: Participant[], events: SpaceEvent[] = []) {\n\t\tthis.id = id\n\t\tthis.name = name\n\t\tthis.participants = participants\n\t\tthis.events = events\n\t}\n\n\tgetId(): string {\n\t\treturn this.id\n\t}\n\n\tgetName(): string {\n\t\treturn this.name\n\t}\n\n\taddParticipant(participant: Participant): SpaceEvent | undefined {\n\t\tconst alreadyExists = this.participants.find((p) => p.getId() === participant.getId())\n\n\t\tif (alreadyExists) return\n\n\t\tthis.participants.push(participant)\n\n\t\tconst occurredAt = SystemClock.now()\n\t\treturn ParticipantJoinedEvent.init(participant.getManifest(), occurredAt)\n\t}\n\n\tgetParticipant(id: string): Participant | undefined {\n\t\tconst participant = this.getParticipants().find((p) => p.getId() === id)\n\t\treturn participant\n\t}\n\n\tremoveParticipant(participant: Participant): SpaceEvent {\n\t\tthis.participants = this.participants.filter((p) => p.getId() !== participant.getId())\n\n\t\tconst occurredAt = SystemClock.now()\n\t\treturn ParticipantLeftEvent.init(participant.getManifest(), occurredAt)\n\t}\n\n\tgetParticipants(): Participant[] {\n\t\treturn [...this.participants]\n\t}\n\n\tsendMessage(participant: Participant, message: string, occurredAt: Date): SpaceEvent {\n\t\tconst event = MessageSentEvent.init(participant.getId(), message, occurredAt)\n\t\tthis.events.push(event)\n\t\treturn event\n\t}\n\n\tgetEvents(): SpaceEvent[] {\n\t\treturn [...this.events]\n\t}\n\n\tstatic create(name: string, participants: Participant[] = []): Space {\n\t\tconst id = UuidGenerator.create()\n\t\treturn new Space(id, name, participants)\n\t}\n\n\tget record(): SpaceRecord {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tname: this.name,\n\t\t\tparticipants: this.participants,\n\t\t}\n\t}\n\n\tstatic rehydrate({ id, name, participants }: SpaceRecord): Space {\n\t\treturn new Space(id, name, participants)\n\t}\n}\n","import { Space } from \"@domain/space/space\"\nimport { SpaceRepository } from \"@domain/space/space-repository\"\nimport { Participant } from \"@domain/space/participant\"\n\nexport class CreateSpaceUseCase {\n\tprivate readonly spaceRepository: SpaceRepository\n\n\tconstructor(spaceRepository: SpaceRepository) {\n\t\tthis.spaceRepository = spaceRepository\n\t}\n\n\tasync execute(name: string): Promise<Space> {\n\t\tconst participants: Participant[] = []\n\t\tconst space = Space.create(name, participants)\n\n\t\tawait this.spaceRepository.save(space)\n\t\treturn space\n\t}\n}\n","import { RuntimeService } from \"@domain/space/runtime\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { CreateParticipantUseCase } from \"@application/use-cases/create-participant\"\nimport { SharedState } from \"@domain/space/shared-state\"\nimport { ParticipantJoinUseCase } from \"@application/use-cases/participant-join\"\nimport { InMemorySpaceRepository } from \"@infrastructure/repositories/in-memory-space-repository\"\nimport { EventPublisher } from \"@domain/space/event-publisher\"\nimport { ParticipantLeaveUseCase } from \"@application/use-cases/participant-leave\"\nimport { SendMessageUseCase } from \"@application/use-cases/send-message\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { CreateSpaceUseCase } from \"@application/use-cases/create-space\"\nimport { Participant } from \"@domain/space/participant\"\n\nexport function defineRuntime<TSharedState extends SharedState>() {\n\tlet runtime: RuntimeService<TSharedState> | null = null\n\n\tfunction initializeRuntime(config: { state: TSharedState }): RuntimeService<TSharedState> {\n\t\tif (runtime) {\n\t\t\tthrow new Error(\"Runtime already initialized\")\n\t\t}\n\n\t\truntime = new RuntimeService(config.state)\n\n\t\treturn runtime\n\t}\n\n\tfunction resolveRuntime(): RuntimeService<TSharedState> {\n\t\tif (!runtime) {\n\t\t\tthrow new Error(\"Runtime not initialized\")\n\t\t}\n\n\t\treturn runtime\n\t}\n\n\tconst createParticipantUseCase = new CreateParticipantUseCase()\n\n\tconst createParticipant = async (name: string, capabilities: readonly string[], handlers: SituationHandler[]) => {\n\t\treturn await createParticipantUseCase.execute(name, capabilities, handlers)\n\t}\n\n\tconst spaceRepository = new InMemorySpaceRepository()\n\tconst eventPublisher = new EventPublisher()\n\n\tconst createSpaceUseCase = new CreateSpaceUseCase(spaceRepository)\n\tconst createSpace = async (name: string) => {\n\t\treturn await createSpaceUseCase.execute(name)\n\t}\n\n\tconst participantJoinUseCase = new ParticipantJoinUseCase(spaceRepository, eventPublisher)\n\tconst join = async (spaceId: string, participant: Participant) => {\n\t\treturn await participantJoinUseCase.execute(spaceId, participant)\n\t}\n\n\tconst participantLeaveUseCase = new ParticipantLeaveUseCase(spaceRepository, eventPublisher)\n\tconst leave = async (spaceId: string, participantId: string) => {\n\t\treturn await participantLeaveUseCase.execute(spaceId, participantId)\n\t}\n\n\tconst sendMessageUseCase = new SendMessageUseCase(spaceRepository, eventPublisher)\n\tconst sendMessage = async (spaceId: string, participantId: string, message: string) => {\n\t\treturn await sendMessageUseCase.execute(spaceId, participantId, message)\n\t}\n\n\tconst sendMessageTool: Tool = {\n\t\ttype: \"function\",\n\t\tname: \"send_message\",\n\t\tdescription: \"Send a message to the space. The message will be sent to all participants in the space.\",\n\t\tparameters: {\n\t\t\tspaceId: { type: \"string\" },\n\t\t\tsenderId: { type: \"string\" },\n\t\t\tmessage: { type: \"string\" },\n\t\t},\n\t\tstrict: true,\n\t\tinvoke: async (args: { spaceId: string; senderId: string; message: string }) => {\n\t\t\tconst sendMessageUseCase = new SendMessageUseCase(spaceRepository, eventPublisher)\n\t\t\tawait sendMessageUseCase.execute(args.spaceId, args.senderId, args.message)\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tmessage: \"Message sent successfully\",\n\t\t\t}\n\t\t},\n\t}\n\n\treturn {\n\t\tinitializeRuntime,\n\t\tresolveRuntime,\n\t\tcreateParticipant,\n\t\tcreateSpace,\n\t\tjoin,\n\t\tleave,\n\t\tsendMessage,\n\t\tsendMessageTool,\n\t}\n}\n","import { SpaceEvent } from \"@domain/space/event\"\nimport { Participant } from \"@domain/space/participant\"\n\nexport type SituationContext<TEvent extends SpaceEvent = SpaceEvent> = {\n\treadonly event: TEvent\n\treadonly participant: Participant\n}\n\nexport abstract class SituationSpecification<TEvent extends SpaceEvent = SpaceEvent> {\n\tabstract isSatisfiedBy(situationContext: SituationContext<TEvent>): boolean\n\n\tand(other: SituationSpecification<TEvent>): SituationSpecification<TEvent> {\n\t\treturn new AndSituationSpecification(this, other)\n\t}\n\n\tor(other: SituationSpecification<TEvent>): SituationSpecification<TEvent> {\n\t\treturn new OrSituationSpecification(this, other)\n\t}\n\n\tnot(): SituationSpecification<TEvent> {\n\t\treturn new NotSituationSpecification(this)\n\t}\n}\n\nclass AndSituationSpecification<TEvent extends SpaceEvent> extends SituationSpecification<TEvent> {\n\tconstructor(\n\t\tprivate readonly left: SituationSpecification<TEvent>,\n\t\tprivate readonly right: SituationSpecification<TEvent>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn this.left.isSatisfiedBy(situationContext) && this.right.isSatisfiedBy(situationContext)\n\t}\n}\n\nclass OrSituationSpecification<TEvent extends SpaceEvent> extends SituationSpecification<TEvent> {\n\tconstructor(\n\t\tprivate readonly left: SituationSpecification<TEvent>,\n\t\tprivate readonly right: SituationSpecification<TEvent>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn this.left.isSatisfiedBy(situationContext) || this.right.isSatisfiedBy(situationContext)\n\t}\n}\n\nclass NotSituationSpecification<TEvent extends SpaceEvent> extends SituationSpecification<TEvent> {\n\tconstructor(private readonly rule: SituationSpecification<TEvent>) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(situationContext: SituationContext<TEvent>): boolean {\n\t\treturn !this.rule.isSatisfiedBy(situationContext)\n\t}\n}\n","import { Memory } from \"@domain/agent/memory\"\nimport { Participant, ParticipantManifest } from \"@domain/space/participant\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { AgentRecord } from \"@domain/agent/record\"\n\nexport class Agent extends Participant {\n\tprivate memory: Memory\n\tprivate tools: Tool[]\n\n\tconstructor(manifest: ParticipantManifest, tools: Tool[], memory: Memory, handlers: SituationHandler[]) {\n\t\tsuper(manifest, handlers)\n\t\tthis.memory = memory\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tgetMemory(): Memory {\n\t\treturn this.memory\n\t}\n\n\tstatic create({\n\t\tmanifest,\n\t\ttools,\n\t\tmemory,\n\t\thandlers,\n\t}: {\n\t\tmanifest: ParticipantManifest\n\t\ttools: Tool[]\n\t\tmemory: Memory\n\t\thandlers: SituationHandler[]\n\t}): Agent {\n\t\treturn new Agent(manifest, tools, memory, handlers)\n\t}\n\n\tstatic rehydrate(record: AgentRecord): Agent {\n\t\treturn new Agent(record.manifest, record.tools, record.memory, record.handlers)\n\t}\n}\n","import { Agent } from \"@domain/agent/agent\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { AgentRepository } from \"@domain/agent/agent-repository\"\nimport { ParticipantManifest } from \"@domain/space/participant\"\nimport { DeveloperMessageItem } from \"@domain/inference/context\"\nimport { AgentRecord } from \"@domain/agent/record\"\nimport { MemoryFactory } from \"@domain/agent/memory\"\nimport { UuidGenerator } from \"@util/uuid-generator\"\n\nexport class CreateAgentUseCase {\n\tprivate readonly agentRepository: AgentRepository\n\tprivate readonly memoryFactory: MemoryFactory\n\n\tconstructor(agentRepository: AgentRepository, memoryFactory: MemoryFactory) {\n\t\tthis.agentRepository = agentRepository\n\t\tthis.memoryFactory = memoryFactory\n\t}\n\n\tasync execute(\n\t\tname: string,\n\t\tinstruction: string,\n\t\ttools: Tool[],\n\t\thandlers: SituationHandler[],\n\t): Promise<AgentRecord> {\n\t\tconst id = UuidGenerator.create()\n\t\tconst manifest: ParticipantManifest = { id, name, role: \"agent\" }\n\t\tconst memory = this.memoryFactory.create()\n\n\t\tconst agentRecord: AgentRecord = { id, manifest, tools, memory, handlers }\n\t\tconst agent = Agent.create(agentRecord)\n\t\tawait this.agentRepository.save(agent)\n\t\treturn agentRecord\n\t}\n}\n","import { Agent } from \"@domain/agent/agent\"\nimport { AgentRepository } from \"@domain/agent/agent-repository\"\n\nexport class InMemoryAgentRepository implements AgentRepository {\n\tprivate readonly agents: Agent[] = []\n\n\texists(id: string): Promise<boolean> {\n\t\treturn Promise.resolve(this.agents.some((agent) => agent.getManifest().id === id))\n\t}\n\tfindById(id: string): Promise<Agent | undefined> {\n\t\treturn Promise.resolve(this.agents.find((agent) => agent.getManifest().id === id))\n\t}\n\tfindAll(): Promise<Agent[]> {\n\t\treturn Promise.resolve(this.agents)\n\t}\n\n\tasync save(agent: Agent): Promise<void> {\n\t\tthis.agents.push(agent)\n\t}\n}\n","import { Agent } from \"@domain/agent/agent\"\nimport { Loop } from \"@domain/agent/loop/loop\"\n\nexport type AgentLoop = {\n\treadonly agent: Agent\n\treadonly loop: Loop\n}\n\nexport abstract class LoopSpecification {\n\tabstract isSatisfiedBy(agentLoop: AgentLoop): boolean\n\n\tand(other: LoopSpecification): LoopSpecification {\n\t\treturn new AndLoopSpecification(this, other)\n\t}\n\n\tor(other: LoopSpecification): LoopSpecification {\n\t\treturn new OrLoopSpecification(this, other)\n\t}\n\n\tnot(): LoopSpecification {\n\t\treturn new NotLoopSpecification(this)\n\t}\n}\n\nclass AndLoopSpecification extends LoopSpecification {\n\tconstructor(\n\t\tprivate readonly left: LoopSpecification,\n\t\tprivate readonly right: LoopSpecification,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(agentLoop: AgentLoop): boolean {\n\t\treturn this.left.isSatisfiedBy(agentLoop) && this.right.isSatisfiedBy(agentLoop)\n\t}\n}\n\nclass OrLoopSpecification extends LoopSpecification {\n\tconstructor(\n\t\tprivate readonly left: LoopSpecification,\n\t\tprivate readonly right: LoopSpecification,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(agentLoop: AgentLoop): boolean {\n\t\treturn this.left.isSatisfiedBy(agentLoop) || this.right.isSatisfiedBy(agentLoop)\n\t}\n}\n\nclass NotLoopSpecification extends LoopSpecification {\n\tconstructor(private readonly rule: LoopSpecification) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(agentLoop: AgentLoop): boolean {\n\t\treturn !this.rule.isSatisfiedBy(agentLoop)\n\t}\n}\n\nexport class Idle extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"idle\"\n\t}\n}\n\nexport class AwaitingInference extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"awaiting_inference\"\n\t}\n}\n\nexport class AwaitingRequest extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"awaiting_inference_request\"\n\t}\n}\n\nexport class AwaitingToolOutput extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"awaiting_tool_output\"\n\t}\n}\n\nexport class Stopped extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"stopped\"\n\t}\n}\n\nexport class Completed extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\treturn agentLoop.loop.stateId === \"completed\"\n\t}\n}\n\nexport class ModelAnswered extends LoopSpecification {\n\tisSatisfiedBy(agentLoop: AgentLoop) {\n\t\tconst operations = agentLoop.loop.completedOperations\n\t\tconst lastOperation = operations[operations.length - 1]\n\n\t\tif (lastOperation?.type !== \"inference\") {\n\t\t\treturn false\n\t\t}\n\n\t\treturn lastOperation.result.items.some((item) => item.type === \"model_message\")\n\t}\n}\n","import { AgentLoop } from \"@domain/agent/loop/specification\"\nimport { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport abstract class LoopAction {\n\tabstract execute(agentLoop: AgentLoop): LoopControlDirective\n}\n\nexport class RequestPreparationAction extends LoopAction {\n\tconstructor(private readonly request: InferenceRequest) {\n\t\tsuper()\n\t}\n\texecute(agentLoop: AgentLoop): LoopControlDirective {\n\t\treturn {\n\t\t\ttype: \"inference\",\n\t\t\trequest: this.request,\n\t\t}\n\t}\n}\n\nexport class InferenceAction extends LoopAction {\n\texecute(agentLoop: AgentLoop): LoopControlDirective {\n\t\tconst request = agentLoop.loop.request\n\n\t\tif (!request) {\n\t\t\treturn { type: \"wait\", reason: \"no request\" }\n\t\t}\n\n\t\treturn { type: \"inference\", request }\n\t}\n}\n\nexport class ToolUseAction extends LoopAction {\n\texecute(agentLoop: AgentLoop): LoopControlDirective {\n\t\tif (!agentLoop.loop.pending) {\n\t\t\treturn { type: \"wait\" } as LoopControlDirective\n\t\t}\n\n\t\tconst pendingOperation = agentLoop.loop.pending\n\n\t\tif (pendingOperation.type === \"tool_execution\") {\n\t\t\treturn { type: \"tool_use\", call: pendingOperation.call }\n\t\t}\n\n\t\treturn { type: \"wait\" } as LoopControlDirective\n\t}\n}\n\nexport class CompleteAction extends LoopAction {\n\tprivate reason: string\n\n\tconstructor(reason: string) {\n\t\tsuper()\n\t\tthis.reason = reason\n\t}\n\n\texecute(): LoopControlDirective {\n\t\treturn { type: \"complete\", reason: this.reason }\n\t}\n}\n\nexport class WaitAction extends LoopAction {\n\tprivate reason: string\n\n\tconstructor(reason: string) {\n\t\tsuper()\n\t\tthis.reason = reason\n\t}\n\texecute(): LoopControlDirective {\n\t\treturn { type: \"wait\", reason: this.reason }\n\t}\n}\n","import {\n\tAwaitingInference,\n\tAwaitingRequest,\n\tAwaitingToolOutput,\n\tLoopSpecification,\n\tModelAnswered,\n} from \"@domain/agent/loop/specification\"\nimport {\n\tCompleteAction,\n\tInferenceAction,\n\tLoopAction,\n\tRequestPreparationAction,\n\tToolUseAction,\n} from \"@domain/agent/loop/action\"\nimport { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport type CreateLoopRuleParams = {\n\treadonly priority?: number\n\treadonly when: LoopSpecification\n\treadonly then: LoopAction\n}\n\nexport type LoopRuleRecord = {\n\treadonly id: string\n\treadonly priority: number\n\treadonly condition: LoopSpecification\n\treadonly action: LoopAction\n}\n\nexport class LoopRule {\n\t_id: string\n\t_priority: number\n\t_condition: LoopSpecification\n\t_action: LoopAction\n\n\tconstructor(id: string, condition: LoopSpecification, action: LoopAction, priority: number) {\n\t\tthis._id = id\n\t\tthis._priority = priority\n\t\tthis._condition = condition\n\t\tthis._action = action\n\t}\n\n\tget id(): string {\n\t\treturn this._id\n\t}\n\n\tget priority(): number {\n\t\treturn this._priority\n\t}\n\n\tget condition(): LoopSpecification {\n\t\treturn this._condition\n\t}\n\n\tget action(): LoopAction {\n\t\treturn this._action\n\t}\n\n\tstatic create(spec: CreateLoopRuleParams): LoopRule {\n\t\tconst priority = spec.priority ?? 0\n\t\tconst id = crypto.randomUUID()\n\t\treturn new LoopRule(id, spec.when, spec.then, priority)\n\t}\n\n\tstatic rehydrate(spec: LoopRuleRecord): LoopRule {\n\t\tconst priority = spec.priority ?? 0\n\t\tconst rule = new LoopRule(spec.id, spec.condition, spec.action, priority)\n\t\treturn rule\n\t}\n}\n\nexport type RuleBookRecord = {\n\treadonly rules: LoopRuleRecord[]\n}\n\nexport class RuleBook {\n\tprivate rules: LoopRule[]\n\n\tprivate constructor(rules: LoopRule[]) {\n\t\tthis.rules = rules\n\t}\n\n\taddRule(rule: LoopRule): void {\n\t\tthis.rules.push(rule)\n\t}\n\n\tremoveRule(rule: LoopRule): void {\n\t\tthis.rules = this.rules.filter((r) => r.id !== rule.id)\n\t}\n\n\tgetRules(): readonly LoopRule[] {\n\t\treturn this.rules\n\t}\n\n\tstatic create(loopRuleParams: CreateLoopRuleParams[]): RuleBook {\n\t\tconst rules = loopRuleParams.map((param) => LoopRule.create(param))\n\t\treturn new RuleBook(rules)\n\t}\n\n\tstatic rehydrate(record: RuleBookRecord): RuleBook {\n\t\tconst rules = record.rules.map((rule) => LoopRule.rehydrate(rule))\n\t\treturn new RuleBook(rules)\n\t}\n\n\trecord(): RuleBookRecord {\n\t\treturn {\n\t\t\trules: this.rules.map((rule) => ({\n\t\t\t\tid: rule.id,\n\t\t\t\tpriority: rule.priority,\n\t\t\t\tcondition: rule.condition,\n\t\t\t\taction: rule.action,\n\t\t\t})),\n\t\t}\n\t}\n}\n\nexport const defaultRules: (request: InferenceRequest) => CreateLoopRuleParams[] = (request: InferenceRequest) => [\n\t{\n\t\twhen: new AwaitingRequest(),\n\t\tthen: new RequestPreparationAction(request),\n\t},\n\t{\n\t\twhen: new AwaitingInference(),\n\t\tthen: new InferenceAction(),\n\t},\n\t{\n\t\twhen: new AwaitingToolOutput(),\n\t\tthen: new ToolUseAction(),\n\t},\n\t{\n\t\twhen: new ModelAnswered(),\n\t\tthen: new CompleteAction(\"completed\"),\n\t},\n]\n","import { ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport {\n\tPendingOperation,\n\tPendingInference,\n\tPendingToolExecution,\n\tCompletedOperation,\n} from \"@domain/agent/loop/operation\"\nimport { LoopTransition } from \"@domain/agent/loop/transition\"\nimport { LoopRecord } from \"@domain/agent/loop/record\"\nimport { CreateLoopRuleParams, RuleBook } from \"./rule\"\nimport { SystemClock } from \"@util/system-clock\"\nimport { UuidGenerator } from \"@util/uuid-generator\"\n\nexport type LoopStateId =\n\t| \"idle\"\n\t| \"awaiting_inference_request\"\n\t| \"awaiting_inference\"\n\t| \"awaiting_tool_output\"\n\t| \"stopped\"\n\t| \"completed\"\n\nexport type CreateLoopParams =\n\t| {\n\t\t\tsubject: string\n\t\t\tagentId: string\n\t\t\trules: CreateLoopRuleParams[]\n\t }\n\t| {\n\t\t\tsubject: string\n\t\t\tagentId: string\n\t\t\trequest: InferenceRequest\n\t }\n\nexport class Loop {\n\tprivate readonly loopId: string\n\tprivate readonly agentId: string\n\tprivate readonly subject: string\n\tprivate readonly createdAt: Date\n\tprivate state: LoopStateId\n\tprivate pendingOperation: PendingOperation | undefined\n\tprivate readonly transitionHistory: LoopTransition[]\n\tprivate inferenceRequest: InferenceRequest | undefined\n\tprivate readonly operationHistory: CompletedOperation[]\n\tprivate readonly _ruleBook: RuleBook\n\n\tprivate constructor(\n\t\tloopId: string,\n\t\tagentId: string,\n\t\tsubject: string,\n\t\tcreatedAt: Date,\n\t\tstate: LoopStateId,\n\t\tinferenceRequest: InferenceRequest | undefined,\n\t\tpendingOperation: PendingOperation | undefined,\n\t\ttransitionHistory: LoopTransition[],\n\t\toperationHistory: CompletedOperation[],\n\t\truleBook: RuleBook,\n\t) {\n\t\tthis.loopId = loopId\n\t\tthis.agentId = agentId\n\t\tthis.subject = subject\n\t\tthis.createdAt = createdAt\n\t\tthis.state = state\n\t\tthis.inferenceRequest = inferenceRequest\n\t\tthis.pendingOperation = pendingOperation\n\t\tthis.transitionHistory = transitionHistory\n\t\tthis.operationHistory = operationHistory\n\t\tthis._ruleBook = ruleBook\n\t}\n\n\tget id(): string {\n\t\treturn this.loopId\n\t}\n\n\tget stateId(): LoopStateId {\n\t\treturn this.state\n\t}\n\n\tget pending(): PendingOperation | undefined {\n\t\treturn this.pendingOperation\n\t}\n\n\tget history(): readonly LoopTransition[] {\n\t\treturn this.transitionHistory\n\t}\n\n\tget completedOperations(): readonly CompletedOperation[] {\n\t\treturn this.operationHistory\n\t}\n\n\tget request(): InferenceRequest | undefined {\n\t\treturn this.inferenceRequest\n\t}\n\n\tget ruleBook(): RuleBook {\n\t\treturn this._ruleBook\n\t}\n\n\tgetSubject(): string {\n\t\treturn this.subject\n\t}\n\n\tgetAgentId(): string {\n\t\treturn this.agentId\n\t}\n\n\trecord(): LoopRecord {\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tagentId: this.agentId,\n\t\t\tsubject: this.subject,\n\t\t\tcreatedAt: this.createdAt,\n\t\t\tstate: this.state,\n\t\t\tinferenceRequest: this.inferenceRequest,\n\t\t\tpendingOperation: this.pendingOperation,\n\t\t\ttransitionHistory: [...this.transitionHistory],\n\t\t\toperationHistory: [...this.operationHistory],\n\t\t\truleBook: this.ruleBook.record(),\n\t\t}\n\t}\n\n\tmoveToIdle(reason: string, transitionId: string): void {\n\t\tthis.transitionTo(\"idle\", reason, transitionId)\n\t\tthis.pendingOperation = undefined\n\t}\n\n\tmoveToAwaitingInference(operation: PendingInference): void {\n\t\tthis.assertAwaitingInferenceRequest()\n\t\tthis.pendingOperation = operation\n\n\t\tthis.transitionTo(\"awaiting_inference\", \"inference_requested\", operation.id)\n\t}\n\n\tmoveToAwaitingToolOutput(operation: Extract<PendingOperation, { type: \"tool_execution\" }>, occurredAt: Date): void {\n\t\tthis.assertIdle()\n\t\tthis.pendingOperation = operation\n\n\t\tthis.transitionTo(\"awaiting_tool_output\", \"tool_execution_requested\", operation.id)\n\t}\n\n\trequestInference(request: InferenceRequest): PendingInference {\n\t\tthis.assertAwaitingInferenceRequest()\n\t\tthis.inferenceRequest = request\n\t\tconst operation: PendingInference = {\n\t\t\tid: UuidGenerator.create(),\n\t\t\ttype: \"inference\",\n\t\t\trequestedAt: SystemClock.now(),\n\t\t\trequest: this.inferenceRequest,\n\t\t}\n\n\t\tthis.moveToAwaitingInference(operation)\n\n\t\treturn operation\n\t}\n\n\trequestToolUse(operationId: string, call: ToolUseRequest, requestedAt: Date): PendingToolExecution {\n\t\tthis.assertIdle()\n\n\t\tconst operation: PendingToolExecution = {\n\t\t\tid: operationId,\n\t\t\ttype: \"tool_execution\",\n\t\t\trequestedAt,\n\t\t\tcall,\n\t\t}\n\n\t\tthis.moveToAwaitingToolOutput(operation, requestedAt)\n\n\t\treturn operation\n\t}\n\n\tprivate transitionTo(nextState: LoopStateId, reason: string, operationId?: string): void {\n\t\tconst occurredAt = SystemClock.now()\n\t\tconst previousState = this.state\n\t\tthis.state = nextState\n\n\t\tthis.transitionHistory.push({\n\t\t\toccurredAt,\n\t\t\tpreviousState,\n\t\t\tnextState,\n\t\t\treason,\n\t\t\toperationId,\n\t\t})\n\t}\n\n\tprivate assertIdle(): void {\n\t\tif (this.state !== \"idle\") {\n\t\t\tthrow new Error(`Expected idle loop, but loop is ${this.state}`)\n\t\t}\n\t}\n\n\tprivate assertAwaitingInferenceRequest(): void {\n\t\tif (this.state !== \"awaiting_inference_request\") {\n\t\t\tthrow new Error(`Expected awaiting inference request loop, but loop is ${this.state}`)\n\t\t}\n\t}\n\n\treceiveInferenceResult(operationId: string, result: InferenceResult): void {\n\t\tif (this.state !== \"awaiting_inference\") {\n\t\t\tthrow new Error(`Cannot receive inference result while loop is ${this.state}`)\n\t\t}\n\n\t\tconst operation = this.pendingOperation\n\n\t\tif (operation?.type !== \"inference\" || operation.id !== operationId) {\n\t\t\tthrow new Error(`Inference result does not match pending operation ${operationId}`)\n\t\t}\n\n\t\tif (!this.inferenceRequest) {\n\t\t\tthrow new Error(\"Inference request is not provided\")\n\t\t}\n\t\tthis.moveToIdle(\"inference_completed\", operationId)\n\n\t\tthis.operationHistory.push({\n\t\t\ttype: \"inference\",\n\t\t\toperationId,\n\t\t\trequestedAt: operation.requestedAt,\n\t\t\tcompletedAt: SystemClock.now(),\n\t\t\trequest: operation.request,\n\t\t\tresult,\n\t\t})\n\n\t\tthis.inferenceRequest.context.items.push(...result.items)\n\n\t\tconst call = result.items.find((item): item is ToolUseRequest => item.type === \"tool_use_request\")\n\n\t\tif (call) {\n\t\t\tthis.pendingOperation = {\n\t\t\t\tid: call.requestId,\n\t\t\t\ttype: \"tool_execution\",\n\t\t\t\trequestedAt: SystemClock.now(),\n\t\t\t\tcall,\n\t\t\t}\n\n\t\t\tthis.transitionTo(\"awaiting_tool_output\", \"tool_use_requested\", call.requestId)\n\t\t\treturn\n\t\t}\n\n\t\tthis.pendingOperation = undefined\n\t}\n\n\treceiveToolUseResult(operationId: string, result: ToolUseResult): void {\n\t\tif (this.state !== \"awaiting_tool_output\") {\n\t\t\tthrow new Error(`Cannot receive tool output while loop is ${this.state}`)\n\t\t}\n\n\t\tconst operation = this.pendingOperation\n\n\t\tif (operation?.type !== \"tool_execution\" || operation.id !== operationId) {\n\t\t\tthrow new Error(`Tool output does not match pending operation ${operationId}`)\n\t\t}\n\n\t\tif (!this.inferenceRequest) {\n\t\t\tthrow new Error(\"Inference request is not provided\")\n\t\t}\n\n\t\tthis.operationHistory.push({\n\t\t\ttype: \"tool_use\",\n\t\t\toperationId,\n\t\t\trequestedAt: operation.requestedAt,\n\t\t\tcompletedAt: SystemClock.now(),\n\t\t\tcall: operation.call,\n\t\t\tresult,\n\t\t})\n\n\t\tthis.inferenceRequest.context.items.push(result)\n\n\t\tthis.pendingOperation = undefined\n\n\t\tthis.transitionTo(\"awaiting_inference_request\", \"tool_use_completed\", operationId)\n\t}\n\n\tcomplete(reason: string): void {\n\t\tthis.assertNotSettled(\"complete\")\n\t\tthis.pendingOperation = undefined\n\t\tthis.transitionTo(\"completed\", reason)\n\t}\n\n\tstop(reason: string): void {\n\t\tthis.assertNotSettled(\"stop\")\n\t\tthis.pendingOperation = undefined\n\t\tthis.transitionTo(\"stopped\", reason)\n\t}\n\n\twait(reason: string): void {\n\t\tthis.assertNotSettled(\"wait\")\n\t\tthis.pendingOperation = undefined\n\t\tthis.transitionTo(\"idle\", reason)\n\t}\n\n\tprivate assertNotSettled(intent: string): void {\n\t\tif (this.state === \"completed\" || this.state === \"stopped\") {\n\t\t\tthrow new Error(`Cannot ${intent} a loop that is already ${this.state}`)\n\t\t}\n\t}\n\n\tstatic create(agentId: string, subject: string, ruleBook: RuleBook): Loop {\n\t\tconst createdAt = SystemClock.now()\n\t\tconst id = UuidGenerator.create()\n\t\treturn new Loop(\n\t\t\tid,\n\t\t\tagentId,\n\t\t\tsubject,\n\t\t\tcreatedAt,\n\t\t\t\"awaiting_inference_request\",\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t[],\n\t\t\t[],\n\t\t\truleBook,\n\t\t)\n\t}\n\n\tstatic rehydrate(record: LoopRecord): Loop {\n\t\treturn new Loop(\n\t\t\trecord.id,\n\t\t\trecord.agentId,\n\t\t\trecord.subject,\n\t\t\trecord.createdAt,\n\t\t\trecord.state,\n\t\t\trecord.inferenceRequest,\n\t\t\trecord.pendingOperation,\n\t\t\t[...record.transitionHistory],\n\t\t\t[...record.operationHistory],\n\t\t\tRuleBook.rehydrate(record.ruleBook),\n\t\t)\n\t}\n}\n","import { CreateLoopParams, Loop } from \"@domain/agent/loop/loop\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\nimport { defaultRules, RuleBook } from \"@domain/agent/loop/rule\"\n\nexport class CreateAgentLoopUseCase {\n\tconstructor(private readonly loopRepository: LoopRepository) {}\n\n\tasync execute(params: CreateLoopParams): Promise<Loop> {\n\t\tif (\"rules\" in params) {\n\t\t\tconst ruleBook = RuleBook.create(params.rules)\n\t\t\tconst loop = Loop.create(params.agentId, params.subject, ruleBook)\n\t\t\tawait this.loopRepository.save(loop)\n\t\t\treturn loop\n\t\t} else {\n\t\t\tconst ruleBook = RuleBook.create(defaultRules(params.request))\n\t\t\tconst loop = Loop.create(params.agentId, params.subject, ruleBook)\n\t\t\tawait this.loopRepository.save(loop)\n\t\t\treturn loop\n\t\t}\n\t}\n}\n","import { Loop } from \"@domain/agent/loop/loop\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\n\nexport class InMemoryLoopRepository implements LoopRepository {\n\tprivate loops: Loop[] = []\n\n\tfindById(id: string): Promise<Loop | undefined> {\n\t\treturn Promise.resolve(this.loops.find((loop) => loop.id === id))\n\t}\n\tsave(loop: Loop): Promise<void> {\n\t\tconst index = this.loops.findIndex((stored) => stored.id === loop.id)\n\t\tif (index === -1) {\n\t\t\tthis.loops.push(loop)\n\t\t} else {\n\t\t\tthis.loops[index] = loop\n\t\t}\n\t\treturn Promise.resolve()\n\t}\n}\n","import { ToolUseRequest, ToolUseResult } from \"./context\"\n\nexport class ToolUseItemFactory {\n\tcreate(toolUseRequest: ToolUseRequest, result: string): ToolUseResult {\n\t\tconst toolUseResult: ToolUseResult = {\n\t\t\ttype: \"tool_use_result\",\n\t\t\trequestId: toolUseRequest.requestId,\n\t\t\tresult: {\n\t\t\t\ttype: \"input_text\",\n\t\t\t\ttext: result,\n\t\t\t},\n\t\t}\n\t\treturn toolUseResult\n\t}\n}\n","import { ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport { ToolUseRunner } from \"@domain/inference/tool-use-runner\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { ToolUseItemFactory } from \"@domain/inference/tool-use-item-factory\"\n\nexport class LocalToolRunner implements ToolUseRunner {\n\tprivate readonly toolUseItemFactory = new ToolUseItemFactory()\n\n\tasync run(input: ToolUseRequest, tool: Tool): Promise<ToolUseResult> {\n\t\ttry {\n\t\t\tconst result = await tool.invoke(JSON.parse(input.toolArguments))\n\t\t\tconst resultText = typeof result === \"string\" ? result : JSON.stringify(result)\n\t\t\treturn this.toolUseItemFactory.create(input, resultText)\n\t\t} catch (error) {\n\t\t\tconst errorText = `Error calling tool: ${error}`\n\t\t\treturn this.toolUseItemFactory.create(input, errorText)\n\t\t}\n\t}\n}\n","import type { InferenceRequest, InferenceResult, InferenceRunner } from \"@domain/inference/inference-runner\"\nimport type { InferenceRequestValidator } from \"@domain/inference/request-validation/inference-request-validator\"\nimport { GenerativeModel } from \"@domain/inference/generative-model\"\nimport { SpaceEvent } from \"@domain/space/event\"\n\nexport type InferenceCompletedParams = { answer: string; producerId: string; price?: number }\n\nexport class DefaultInferenceRunner implements InferenceRunner {\n\tconstructor(\n\t\tprivate readonly supportedModels: GenerativeModel[],\n\t\tprivate readonly requestValidator: InferenceRequestValidator,\n\t) {}\n\n\tasync run(input: InferenceRequest): Promise<InferenceResult> {\n\t\tconst generativeModel = this.supportedModels.find((model) => model.specification.name === input.model)\n\t\tif (!generativeModel) {\n\t\t\tthrow new Error(`Unsupported model: ${input.model}`)\n\t\t}\n\n\t\tthis.requestValidator.validate(input, generativeModel.specification)\n\n\t\treturn await generativeModel.endpoint.infer(input)\n\t}\n\n\tasync *stream(input: InferenceRequest): AsyncGenerator<SpaceEvent> {\n\t\tconst generativeModel = this.supportedModels.find((model) => model.specification.name === input.model)\n\t\tif (!generativeModel) {\n\t\t\tthrow new Error(`Unsupported model: ${input.model}`)\n\t\t}\n\n\t\tthis.requestValidator.validate(input, generativeModel.specification)\n\n\t\tyield* generativeModel.endpoint.stream(input)\n\t}\n}\n","import type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport class ReasoningEffortValidation implements RequestValidationRule {\n\treadonly name = \"reasoning-effort\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\tif (inferenceRequest.reasoningEffort === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\tif (!model.supportsReasoningEffort) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn model.supportedReasoningEfforts.includes(inferenceRequest.reasoningEffort)\n\t}\n}\n","import type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport class ToolUseRequestingValidation implements RequestValidationRule {\n\treadonly name = \"tool-calling\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\tif (inferenceRequest.tools === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsFunctionCalling\n\t}\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport type { InferenceRequest } from \"@domain/inference/inference-runner\"\n\nexport class StreamingValidation implements RequestValidationRule {\n\treadonly name = \"streaming\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\tif (!inferenceRequest.streaming) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsStreaming\n\t}\n}\n","import type { InferenceRequest } from \"@domain/inference/inference-runner\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\n\nexport type StructuredOutputFormat = {\n\tname?: string\n\tschema: Record<string, any>\n\tstrict?: boolean\n}\n\nexport class StructuredOutputValidation implements RequestValidationRule {\n\treadonly name = \"structured-output\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\tif (inferenceRequest.structuredOutput === undefined) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn model.supportsStructuredOutput\n\t}\n}\n","import type { InferenceRequest } from \"@domain/inference/inference-runner\"\nimport type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport type { ContextItem } from \"@domain/inference/context\"\n\nfunction getContextItemValidationKey(item: ContextItem): string {\n\tif (item.type === \"user_message\") {\n\t\treturn \"user_message\"\n\t}\n\tif (item.type === \"system_message\") {\n\t\treturn \"system_message\"\n\t}\n\tif (item.type === \"developer_message\") {\n\t\treturn \"developer_message\"\n\t}\n\tif (item.type === \"model_message\") {\n\t\treturn \"model_message\"\n\t}\n\treturn item.type\n}\n\nexport class ContextValidation implements RequestValidationRule {\n\treadonly name = \"context\"\n\n\tisValid(inferenceRequest: InferenceRequest, model: ModelSpecification): boolean {\n\t\treturn inferenceRequest.context.items.every((item) =>\n\t\t\tmodel.supportedContextItemTypes.includes(getContextItemValidationKey(item)),\n\t\t)\n\t}\n}\n","import type { InferenceRequest } from \"@domain/inference/inference-runner\"\nimport type { ModelSpecification } from \"@domain/inference/generative-model\"\nimport type { RequestValidationRule } from \"@domain/inference/request-validation/rule\"\nimport { ReasoningEffortValidation } from \"@domain/inference/request-validation/reasoning-effort\"\nimport { ToolUseRequestingValidation } from \"@domain/inference/request-validation/tool-calling\"\nimport { StreamingValidation } from \"@domain/inference/request-validation/streaming\"\nimport { StructuredOutputValidation } from \"@domain/inference/request-validation/structured-output\"\nimport { ContextValidation } from \"@domain/inference/request-validation/context\"\n\nexport const defaultRequestValidationRules: RequestValidationRule[] = [\n\tnew ReasoningEffortValidation(),\n\tnew ToolUseRequestingValidation(),\n\tnew StreamingValidation(),\n\tnew StructuredOutputValidation(),\n\tnew ContextValidation(),\n]\n\nexport class InferenceRequestValidator {\n\tconstructor(private readonly rules: RequestValidationRule[] = defaultRequestValidationRules) {}\n\n\tvalidate(inferenceRequest: InferenceRequest, model: ModelSpecification): void {\n\t\tfor (const rule of this.rules) {\n\t\t\tif (!rule.isValid(inferenceRequest, model)) {\n\t\t\t\tthrow new Error(`Request validation \"${rule.name}\" failed for model \"${model.name}\"`)\n\t\t\t}\n\t\t}\n\t}\n}\n","export class InputTokenDetails {\n\treadonly cached_tokens: number\n\n\tconstructor(cached_tokens: number) {\n\t\tthis.cached_tokens = cached_tokens\n\t}\n}\n\nexport class OutputTokenDetails {\n\treadonly reasoning_tokens: number\n\n\tconstructor(reasoning_tokens: number) {\n\t\tthis.reasoning_tokens = reasoning_tokens\n\t}\n}\n\nexport class TokenUsage {\n\treadonly inputTokens: number\n\treadonly outputTokens: number\n\treadonly totalTokens: number\n\treadonly inputTokenDetails: InputTokenDetails\n\treadonly outputTokenDetails: OutputTokenDetails\n\n\tconstructor(\n\t\tinputTokens: number,\n\t\toutputTokens: number,\n\t\ttotalTokens: number,\n\t\tinputTokenDetails: InputTokenDetails,\n\t\toutputTokenDetails: OutputTokenDetails,\n\t) {\n\t\tthis.inputTokens = inputTokens\n\t\tthis.outputTokens = outputTokens\n\t\tthis.totalTokens = totalTokens\n\t\tthis.inputTokenDetails = inputTokenDetails\n\t\tthis.outputTokenDetails = outputTokenDetails\n\t}\n}\n","import type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { ModelOutputItem, ReasoningItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/inference/token-usage\"\nimport type Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicMessagesMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceRequest: InferenceRequest) {\n\t\tconst { messages, system } = this.mapContextItems(inferenceRequest)\n\t\tconst outputConfig: any = {}\n\n\t\tconst request: any = {\n\t\t\tmodel: inferenceRequest.model,\n\t\t\tmessages,\n\t\t}\n\n\t\trequest.max_tokens = inferenceRequest.maxOutputTokens!\n\n\t\tif (system) {\n\t\t\trequest.system = system\n\t\t}\n\n\t\tif (inferenceRequest.tools && inferenceRequest.tools.length > 0) {\n\t\t\trequest.tools = inferenceRequest.tools.map((tool) => ({\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tinput_schema: tool.parameters,\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceRequest.structuredOutput) {\n\t\t\toutputConfig.format = {\n\t\t\t\ttype: \"json_schema\",\n\t\t\t\tschema: inferenceRequest.structuredOutput.schema,\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceRequest.reasoningEffort) {\n\t\t\trequest.thinking = { type: \"adaptive\" }\n\t\t\toutputConfig.effort = inferenceRequest.reasoningEffort\n\t\t}\n\n\t\tif (Object.keys(outputConfig).length > 0) {\n\t\t\trequest.output_config = outputConfig\n\t\t}\n\n\t\tif (inferenceRequest.streaming) {\n\t\t\trequest.stream = inferenceRequest.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tprivate addContentBlock(messages: any[], role: \"user\" | \"assistant\", block: any): void {\n\t\tconst lastMessage = messages[messages.length - 1]\n\t\tif (lastMessage?.role === role) {\n\t\t\tlastMessage.content.push(block)\n\t\t\treturn\n\t\t}\n\n\t\tmessages.push({\n\t\t\trole: role,\n\t\t\tcontent: [block],\n\t\t})\n\t}\n\n\tmapContextItems(inferenceRequest: InferenceRequest): { messages: any[]; system?: string } {\n\t\tconst context = inferenceRequest.context\n\t\tconst messages: any[] = []\n\t\tconst system: string[] = []\n\n\t\tfor (const item of context.items) {\n\t\t\tif (item.type === \"developer_message\" || item.type === \"system_message\") {\n\t\t\t\tsystem.push(item.text)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"user_message\") {\n\t\t\t\tthis.addContentBlock(messages, \"user\", { type: \"text\", text: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"model_message\") {\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", { type: \"text\", text: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\tconst reasoning = item as ReasoningItem\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", {\n\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\tthinking: reasoning.content?.text ?? \"\",\n\t\t\t\t\tsignature: reasoning.encryptedContent ?? \"\",\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_request\") {\n\t\t\t\tconst toolUseRequest = item as ToolUseRequest\n\t\t\t\tlet input: any\n\t\t\t\ttry {\n\t\t\t\t\tinput = JSON.parse(toolUseRequest.toolArguments)\n\t\t\t\t} catch {\n\t\t\t\t\tinput = toolUseRequest.toolArguments\n\t\t\t\t}\n\t\t\t\tthis.addContentBlock(messages, \"assistant\", {\n\t\t\t\t\ttype: \"tool_use\",\n\t\t\t\t\tid: toolUseRequest.requestId,\n\t\t\t\t\tname: toolUseRequest.toolName,\n\t\t\t\t\tinput: input,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_result\") {\n\t\t\t\tconst toolUseResult = item as ToolUseResult\n\t\t\t\tthis.addContentBlock(messages, \"user\", {\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUseResult.requestId,\n\t\t\t\t\tcontent: toolUseResult.result.text,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmessages: messages,\n\t\t\tsystem: system.length > 0 ? system.join(\"\\n\\n\") : undefined,\n\t\t}\n\t}\n\n\textractTokenUsage(response: Anthropic.Messages.Message): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.input_tokens,\n\t\t\tresponse.usage.output_tokens,\n\t\t\tresponse.usage.input_tokens + response.usage.output_tokens,\n\t\t\tnew InputTokenDetails(\n\t\t\t\t(response.usage.cache_creation_input_tokens ?? 0) + (response.usage.cache_read_input_tokens ?? 0),\n\t\t\t),\n\t\t\tnew OutputTokenDetails(0),\n\t\t)\n\t}\n\n\ttoResponse(response: Anthropic.Messages.Message): InferenceResult {\n\t\tconst items: ModelOutputItem[] = []\n\n\t\tfor (const block of response.content as any[]) {\n\t\t\tif (block.type === \"text\") {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"model_message\",\n\t\t\t\t\ttext: block.text,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (block.type === \"tool_use\") {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"tool_use_request\",\n\t\t\t\t\trequestId: block.id,\n\t\t\t\t\ttoolName: block.name,\n\t\t\t\t\ttoolArguments: JSON.stringify(block.input ?? {}),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (block.type === \"thinking\") {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\tcontent: block.thinking ? { type: \"input_text\", text: block.thinking } : undefined,\n\t\t\t\t\tencryptedContent: block.signature,\n\t\t\t\t\tsummary: [],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import { SpaceEvent } from \"@domain/space/event\"\nimport type { Endpoint } from \"@domain/inference/endpoint\"\nimport type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport { AnthropicMessagesMapper } from \"@infrastructure/providers/anthropic/anthropic-messages-mapper\"\nimport Anthropic from \"@anthropic-ai/sdk\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\n\nexport interface AnthropicConnectionConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\n/**\n * Native Anthropic adapter on the `@anthropic-ai/sdk` (`messages.create`).\n * Maps domain context to Anthropic's `messages`/`content` blocks shape,\n * system prompt, tools, adaptive thinking, and structured output config.\n */\nexport class AnthropicMessages implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: Anthropic\n\tprivate readonly clientConfig: AnthropicConnectionConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new AnthropicMessagesMapper(),\n\t\tconfig: AnthropicConnectionConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): Anthropic {\n\t\treturn (this._client ??= new Anthropic({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResult> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst response = await this.client.messages.create(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceRequest: InferenceRequest): AsyncIterable<SpaceEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst stream = this.client.messages.stream(request)\n\n\t\tfor await (const event of stream) {\n\t\t\tyield event as unknown as SpaceEvent\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(await stream.finalMessage())\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tproducerId: request.model,\n\t\t\toccurredAt: new Date(),\n\t\t\tpayload: output,\n\t\t}\n\t}\n}\n","import type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport type { ModelOutputItem, ReasoningItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/inference/token-usage\"\nimport type OpenAI from \"openai\"\n\nexport class OpenAIResponsesMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceRequest: InferenceRequest): any {\n\t\tconst request: any = {\n\t\t\tmodel: inferenceRequest.model,\n\t\t\tinput: this.mapContextItems(inferenceRequest),\n\t\t}\n\n\t\tif (inferenceRequest.tools && inferenceRequest.tools.length > 0) {\n\t\t\trequest.tools = inferenceRequest.tools.map((tool) => ({\n\t\t\t\ttype: tool.type,\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description,\n\t\t\t\tparameters: tool.parameters,\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceRequest.reasoningEffort) {\n\t\t\trequest.reasoning = {\n\t\t\t\teffort: inferenceRequest.reasoningEffort,\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceRequest.structuredOutput) {\n\t\t\tconst format = inferenceRequest.structuredOutput\n\t\t\trequest.text = {\n\t\t\t\tformat: {\n\t\t\t\t\ttype: \"json_schema\",\n\t\t\t\t\tname: format.name ?? \"response\",\n\t\t\t\t\tschema: format.schema,\n\t\t\t\t\tstrict: format.strict ?? true,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tif (inferenceRequest.streaming) {\n\t\t\trequest.stream = inferenceRequest.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceRequest: InferenceRequest): any[] {\n\t\tconst input: any[] = []\n\n\t\tfor (const item of inferenceRequest.context.items) {\n\t\t\tif (item.type === \"developer_message\" || item.type === \"system_message\" || item.type === \"user_message\") {\n\t\t\t\tconst role =\n\t\t\t\t\titem.type === \"developer_message\" ? \"developer\" : item.type === \"system_message\" ? \"system\" : \"user\"\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: \"message\",\n\t\t\t\t\trole,\n\t\t\t\t\tcontent: [{ type: \"input_text\", text: item.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"model_message\") {\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: \"message\",\n\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\tcontent: [{ type: \"output_text\", text: item.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_request\") {\n\t\t\t\tconst toolUseRequest = item as ToolUseRequest\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: \"function_call\",\n\t\t\t\t\tcall_id: toolUseRequest.requestId,\n\t\t\t\t\tname: toolUseRequest.toolName,\n\t\t\t\t\targuments: toolUseRequest.toolArguments,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_result\") {\n\t\t\t\tconst toolUseResult = item as ToolUseResult\n\t\t\t\tinput.push({\n\t\t\t\t\ttype: \"function_call_output\",\n\t\t\t\t\tcall_id: toolUseResult.requestId,\n\t\t\t\t\toutput: [{ type: \"input_text\", text: toolUseResult.result.text }],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\tconst reasoning = item as ReasoningItem\n\t\t\t\tconst reasoningInput: Record<string, unknown> = {\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\tsummary: reasoning.summary.map((summary) => ({ type: \"summary_text\", text: summary.text })),\n\t\t\t\t}\n\t\t\t\tif (reasoning.encryptedContent !== undefined) {\n\t\t\t\t\treasoningInput.encrypted_content = reasoning.encryptedContent\n\t\t\t\t}\n\t\t\t\tinput.push(reasoningInput)\n\t\t\t}\n\t\t}\n\n\t\treturn input\n\t}\n\n\textractTokenUsage(response: OpenAI.Responses.Response): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.input_tokens,\n\t\t\tresponse.usage.output_tokens,\n\t\t\tresponse.usage.total_tokens,\n\t\t\tnew InputTokenDetails(response.usage.input_tokens_details?.cached_tokens ?? 0),\n\t\t\tnew OutputTokenDetails(response.usage.output_tokens_details?.reasoning_tokens ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceResult {\n\t\tconst items: ModelOutputItem[] = []\n\n\t\tfor (const item of response.output ?? []) {\n\t\t\tif (item.type === \"message\" && item.role === \"assistant\") {\n\t\t\t\tconst firstContent = item.content?.[0]\n\t\t\t\tif (firstContent) {\n\t\t\t\t\titems.push({\n\t\t\t\t\t\ttype: \"model_message\",\n\t\t\t\t\t\ttext: firstContent.text,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.type === \"function_call\") {\n\t\t\t\tconst toolUseRequest: ToolUseRequest = {\n\t\t\t\t\ttype: \"tool_use_request\",\n\t\t\t\t\trequestId: item.call_id,\n\t\t\t\t\ttoolName: item.name,\n\t\t\t\t\ttoolArguments: item.arguments,\n\t\t\t\t}\n\t\t\t\titems.push(toolUseRequest)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\tcontent: undefined,\n\t\t\t\t\tencryptedContent: item.encrypted_content,\n\t\t\t\t\tsummary: (item.summary ?? []).map((summary: { text: string }) => ({\n\t\t\t\t\t\ttype: \"summary_text\" as const,\n\t\t\t\t\t\ttext: summary.text,\n\t\t\t\t\t})),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\titems,\n\t\t\ttokenUsage: this.extractTokenUsage(response),\n\t\t\trowResponse: response,\n\t\t}\n\t}\n}\n","import { SpaceEvent } from \"@domain/space/event\"\nimport { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { Endpoint } from \"@domain/inference/endpoint\"\nimport { OpenAIResponsesMapper } from \"@infrastructure/providers/openai/openai-responses-mapper\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport OpenAI from \"openai\"\n\n/**\n * Optional connection config. When omitted, the `openai` SDK reads\n * `OPENAI_API_KEY` and `OPENAI_BASE_URL` from the environment.\n */\nexport interface OpenAIResponsesConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\nexport class OpenAIResponses implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: OpenAI\n\tprivate readonly clientConfig: OpenAIResponsesConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new OpenAIResponsesMapper(),\n\t\tconfig: OpenAIResponsesConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): OpenAI {\n\t\t// Passing `undefined` for baseURL/apiKey lets the SDK fall back\n\t\t// to OPENAI_BASE_URL / OPENAI_API_KEY from the environment.\n\t\treturn (this._client ??= new OpenAI({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResult> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst response = await this.client.responses.create(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceRequest: InferenceRequest): AsyncIterable<SpaceEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst stream: any = await this.client.responses.create({ ...request, stream: true })\n\n\t\t// Only the terminal `response.completed` event carries the assembled\n\t\t// response; the deltas before it cannot be mapped to an InferenceResult.\n\t\tlet completedResponse: any = undefined\n\t\tfor await (const event of stream) {\n\t\t\tif (event.type === \"response.completed\") {\n\t\t\t\tcompletedResponse = event.response\n\t\t\t}\n\n\t\t\tyield event\n\t\t}\n\n\t\tif (!completedResponse) {\n\t\t\tthrow new Error(\"Stream ended without a completed response\")\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(completedResponse)\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tpayload: output,\n\t\t\toccurredAt: new Date(),\n\t\t\tproducerId: inferenceRequest.model,\n\t\t}\n\t}\n}\n","import { SpaceEvent } from \"@domain/space/event\"\nimport { GoogleGenAI } from \"@google/genai\"\nimport type { Endpoint } from \"@domain/inference/endpoint\"\nimport type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport { GeminiGenerateContentMapper } from \"@infrastructure/providers/gemini/gemini-generate-content-mapper\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\n\nexport interface GeminiConnectionConfig {\n\tbaseURL?: string\n\tapiKey?: string\n}\n\n/**\n * Native Gemini adapter on the `@google/genai` SDK (`generateContent` /\n * `generateContentStream`). Unlike an OpenAI-compat shim this maps our\n * domain context to Gemini's native `contents`/`parts` shape, system\n * instruction, `functionDeclarations`, and `thinkingConfig`, and reads\n * thought parts + native usage metadata back out. Another `ModelRuntime`\n * — no runner or port changes.\n */\nexport class GeminiGenerateContent implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: GoogleGenAI\n\tprivate readonly clientConfig: GeminiConnectionConfig\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new GeminiGenerateContentMapper(),\n\t\tconfig: GeminiConnectionConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t}\n\n\tprivate get client(): GoogleGenAI {\n\t\treturn (this._client ??= new GoogleGenAI({\n\t\t\tapiKey: this.clientConfig.apiKey ?? process.env.GEMINI_API_KEY,\n\t\t\t...(this.clientConfig.baseURL ? { httpOptions: { baseUrl: this.clientConfig.baseURL } } : {}),\n\t\t}))\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResult> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst response = await this.client.models.generateContent(request)\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceRequest: InferenceRequest): AsyncIterable<SpaceEvent> {\n\t\tconst request = this.endpointMapper.toRequest(inferenceRequest)\n\t\tconst stream: any = await this.client.models.generateContentStream(request)\n\n\t\tlet lastEvent: SpaceEvent | undefined = undefined\n\t\tfor await (const chunk of stream) {\n\t\t\tlastEvent = chunk\n\t\t\tyield chunk\n\t\t}\n\n\t\tif (!lastEvent) {\n\t\t\tthrow new Error(\"Last event not found\")\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(lastEvent)\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tproducerId: request.model,\n\t\t\toccurredAt: new Date(),\n\t\t\tpayload: output,\n\t\t}\n\t}\n}\n","import type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/inference/token-usage\"\nimport type { ModelOutputItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\n\nexport class GeminiGenerateContentMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceRequest: InferenceRequest) {\n\t\tconst { contents, systemInstruction } = this.mapContextItems(inferenceRequest)\n\t\tconst config: any = {}\n\n\t\tif (systemInstruction) {\n\t\t\tconfig.systemInstruction = systemInstruction\n\t\t}\n\n\t\tif (inferenceRequest.tools && inferenceRequest.tools.length > 0) {\n\t\t\tconfig.tools = [\n\t\t\t\t{\n\t\t\t\t\tfunctionDeclarations: inferenceRequest.tools.map((tool) => ({\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\t\tparametersJsonSchema: tool.parameters,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tif (inferenceRequest.structuredOutput) {\n\t\t\tconfig.responseMimeType = \"application/json\"\n\t\t\tconfig.responseSchema = inferenceRequest.structuredOutput.schema\n\t\t}\n\n\t\tif (inferenceRequest.reasoningEffort) {\n\t\t\tconfig.thinkingConfig = {\n\t\t\t\tthinkingLevel: inferenceRequest.reasoningEffort,\n\t\t\t\tincludeThoughts: true,\n\t\t\t}\n\t\t}\n\n\t\tconst request: any = {\n\t\t\tmodel: inferenceRequest.model,\n\t\t\tcontents,\n\t\t\tconfig,\n\t\t}\n\n\t\tif (inferenceRequest.streaming) {\n\t\t\trequest.stream = inferenceRequest.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceRequest: InferenceRequest): { contents: any[]; systemInstruction?: string } {\n\t\tconst context = inferenceRequest.context\n\t\tconst contents: any[] = []\n\t\tconst system: string[] = []\n\t\tconst callNames = new Map<string, string>()\n\n\t\tfor (const item of context.items) {\n\t\t\tif (item.type === \"developer_message\" || item.type === \"system_message\") {\n\t\t\t\tsystem.push(item.text)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"user_message\") {\n\t\t\t\tthis.addPart(contents, \"user\", { text: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"model_message\") {\n\t\t\t\tthis.addPart(contents, \"model\", { text: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_request\") {\n\t\t\t\tconst toolUseRequest = item as ToolUseRequest\n\t\t\t\tcallNames.set(toolUseRequest.requestId, toolUseRequest.toolName)\n\t\t\t\tlet args: any\n\t\t\t\ttry {\n\t\t\t\t\targs = JSON.parse(toolUseRequest.toolArguments)\n\t\t\t\t} catch {\n\t\t\t\t\targs = {}\n\t\t\t\t}\n\t\t\t\tthis.addPart(contents, \"model\", {\n\t\t\t\t\tfunctionCall: { id: toolUseRequest.requestId, name: toolUseRequest.toolName, args },\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_result\") {\n\t\t\t\tconst toolUseResult = item as ToolUseResult\n\t\t\t\tthis.addPart(contents, \"user\", {\n\t\t\t\t\tfunctionResponse: {\n\t\t\t\t\t\tid: toolUseResult.requestId,\n\t\t\t\t\t\tname: callNames.get(toolUseResult.requestId) ?? \"\",\n\t\t\t\t\t\tresponse: this.parseResponse(toolUseResult.result.text),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontents,\n\t\t\tsystemInstruction: system.length > 0 ? system.join(\"\\n\\n\") : undefined,\n\t\t}\n\t}\n\n\tprivate addPart(contents: any[], role: \"user\" | \"model\", part: any): void {\n\t\tconst last = contents[contents.length - 1]\n\t\tif (last?.role === role) {\n\t\t\tlast.parts.push(part)\n\t\t\treturn\n\t\t}\n\n\t\tcontents.push({ role, parts: [part] })\n\t}\n\n\tprivate parseResponse(output: string): any {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(output)\n\t\t\treturn parsed && typeof parsed === \"object\" ? parsed : { output }\n\t\t} catch {\n\t\t\treturn { output }\n\t\t}\n\t}\n\n\textractTokenUsage(response: any): TokenUsage | undefined {\n\t\tconst usage = response.usageMetadata\n\t\tif (!usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tusage.promptTokenCount ?? 0,\n\t\t\tusage.candidatesTokenCount ?? 0,\n\t\t\tusage.totalTokenCount ?? 0,\n\t\t\tnew InputTokenDetails(usage.cachedContentTokenCount ?? 0),\n\t\t\tnew OutputTokenDetails(usage.thoughtsTokenCount ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceResult {\n\t\tconst items: ModelOutputItem[] = []\n\t\tconst parts = response.candidates?.[0]?.content?.parts ?? []\n\n\t\tfor (const part of parts) {\n\t\t\tif (part.thought && part.text) {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\tcontent: { type: \"input_text\", text: part.text },\n\t\t\t\t\tencryptedContent: undefined,\n\t\t\t\t\tsummary: [],\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (part.text) {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"model_message\",\n\t\t\t\t\ttext: part.text,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (part.functionCall) {\n\t\t\t\titems.push({\n\t\t\t\t\ttype: \"tool_use_request\",\n\t\t\t\t\trequestId: part.functionCall.id ?? \"\",\n\t\t\t\t\ttoolName: part.functionCall.name,\n\t\t\t\t\ttoolArguments: JSON.stringify(part.functionCall.args ?? {}),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import type { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport type { ModelOutputItem, ToolUseRequest, ToolUseResult } from \"@domain/inference/context\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/inference/token-usage\"\n\nexport class OpenAIChatCompletionsMapper implements InferenceEndpointMapper {\n\ttoRequest(inferenceRequest: InferenceRequest) {\n\t\tconst request: any = {\n\t\t\tmodel: inferenceRequest.model,\n\t\t\tmessages: this.mapContextItems(inferenceRequest),\n\t\t}\n\n\t\tif (inferenceRequest.tools && inferenceRequest.tools.length > 0) {\n\t\t\trequest.tools = inferenceRequest.tools.map((tool) => ({\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.name,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.parameters,\n\t\t\t\t},\n\t\t\t}))\n\t\t}\n\n\t\tif (inferenceRequest.reasoningEffort) {\n\t\t\trequest.reasoning_effort = inferenceRequest.reasoningEffort\n\t\t}\n\n\t\tif (inferenceRequest.streaming) {\n\t\t\trequest.stream = inferenceRequest.streaming\n\t\t}\n\n\t\treturn request\n\t}\n\n\tmapContextItems(inferenceRequest: InferenceRequest): any[] {\n\t\tconst messages: any[] = []\n\n\t\tfor (const item of inferenceRequest.context.items) {\n\t\t\tif (item.type === \"developer_message\" || item.type === \"system_message\") {\n\t\t\t\tmessages.push({ role: \"system\", content: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"user_message\") {\n\t\t\t\tmessages.push({ role: \"user\", content: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"model_message\") {\n\t\t\t\tmessages.push({ role: \"assistant\", content: item.text })\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_request\") {\n\t\t\t\tconst toolUseRequest = item as ToolUseRequest\n\t\t\t\tconst toolCall = {\n\t\t\t\t\tid: toolUseRequest.requestId,\n\t\t\t\t\ttype: \"function\",\n\t\t\t\t\tfunction: { name: toolUseRequest.toolName, arguments: toolUseRequest.toolArguments },\n\t\t\t\t}\n\t\t\t\tconst last = messages[messages.length - 1]\n\t\t\t\tif (last?.role === \"assistant\") {\n\t\t\t\t\tlast.tool_calls = last.tool_calls ?? []\n\t\t\t\t\tlast.tool_calls.push(toolCall)\n\t\t\t\t} else {\n\t\t\t\t\tmessages.push({ role: \"assistant\", content: null, tool_calls: [toolCall] })\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (item.type === \"tool_use_result\") {\n\t\t\t\tconst toolUseResult = item as ToolUseResult\n\t\t\t\tmessages.push({\n\t\t\t\t\trole: \"tool\",\n\t\t\t\t\ttool_call_id: toolUseResult.requestId,\n\t\t\t\t\tcontent: toolUseResult.result.text,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn messages\n\t}\n\n\textractTokenUsage(response: any): TokenUsage | undefined {\n\t\tif (!response.usage) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn new TokenUsage(\n\t\t\tresponse.usage.prompt_tokens,\n\t\t\tresponse.usage.completion_tokens,\n\t\t\tresponse.usage.total_tokens,\n\t\t\tnew InputTokenDetails(response.usage.prompt_tokens_details?.cached_tokens ?? 0),\n\t\t\tnew OutputTokenDetails(response.usage.completion_tokens_details?.reasoning_tokens ?? 0),\n\t\t)\n\t}\n\n\ttoResponse(response: any): InferenceResult {\n\t\tconst items: ModelOutputItem[] = []\n\t\tconst message = response.choices?.[0]?.message\n\t\tif (!message) {\n\t\t\treturn { items: [], tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t\t}\n\n\t\tif (message.reasoning_content) {\n\t\t\titems.push({\n\t\t\t\ttype: \"reasoning\",\n\t\t\t\tcontent: { type: \"input_text\", text: message.reasoning_content },\n\t\t\t\tencryptedContent: undefined,\n\t\t\t\tsummary: [],\n\t\t\t})\n\t\t}\n\n\t\tif (message.content) {\n\t\t\titems.push({\n\t\t\t\ttype: \"model_message\",\n\t\t\t\ttext: message.content,\n\t\t\t})\n\t\t}\n\n\t\tfor (const toolCall of message.tool_calls ?? []) {\n\t\t\titems.push({\n\t\t\t\ttype: \"tool_use_request\",\n\t\t\t\trequestId: toolCall.id,\n\t\t\t\ttoolName: toolCall.function.name,\n\t\t\t\ttoolArguments: toolCall.function.arguments,\n\t\t\t})\n\t\t}\n\n\t\treturn { items, tokenUsage: this.extractTokenUsage(response), rowResponse: response }\n\t}\n}\n","import { InferenceRequest, InferenceResult } from \"@domain/inference/inference-runner\"\nimport { SpaceEvent } from \"@domain/space/event\"\nimport type { Endpoint } from \"@domain/inference/endpoint\"\nimport type { InferenceEndpointMapper } from \"@domain/inference/inference-endpoint-mapper\"\nimport { OpenAIChatCompletionsMapper } from \"@infrastructure/providers/openai/openai-chat-completions-mapper\"\nimport OpenAI from \"openai\"\n\n/**\n * Optional connection config. When omitted, the `openai` SDK reads\n * `OPENAI_API_KEY` and `OPENAI_BASE_URL` from the environment, so the\n * default-constructed runtime targets whatever `OPENAI_BASE_URL` points\n * at (real OpenAI when unset). Provider presets (e.g. DeepSeek) pass an\n * explicit base URL + credential.\n */\nexport interface OpenAICompatibleConfig {\n\tbaseURL?: string\n\tapiKey?: string\n\t/**\n\t * Extra request-body fields merged into every `chat.completions`\n\t * call. This is how provider-specific quirks are handled **without\n\t * a per-provider subclass in mozaik** — the consumer supplies the\n\t * vendor-only fields (e.g. DeepSeek's `{ thinking: { type } }`,\n\t * safety flags, routing hints). Standard fields the runtime already\n\t * sets (`model`, `messages`, `tools`, `reasoning_effort`) take\n\t * precedence and are not overwritten.\n\t */\n\textraBody?: Record<string, unknown>\n}\n\n/**\n * Generic adapter for any **OpenAI Chat Completions**-compatible\n * endpoint — real OpenAI, DeepSeek, Xiaomi MiMo, OpenRouter, vLLM,\n * Ollama, etc. It speaks `/chat/completions` (not the Responses API),\n * which is the dialect third-party OpenAI-compatible providers expose.\n *\n * The base URL and credential are configurable; everything else (the\n * `Context` ⇄ chat-message conversion, tool-call round-trip, token\n * usage extraction) is provider-agnostic. Provider-specific request\n * shaping (e.g. DeepSeek's `thinking` field) is supplied by the\n * consumer via {@link OpenAICompatibleConfig.extraBody} — mozaik stays\n * generic and gains no per-provider subclasses.\n *\n * Was `DeepSeekChatCompletions`; generalized so consumers can point it\n * at any OpenAI-compatible endpoint.\n */\nexport class OpenAIChatCompletions implements Endpoint {\n\tendpointMapper: InferenceEndpointMapper\n\tprivate _client?: OpenAI\n\tprivate readonly clientConfig: OpenAICompatibleConfig\n\tprivate readonly extraBody: Record<string, unknown>\n\n\tconstructor(\n\t\tendpointMapper: InferenceEndpointMapper = new OpenAIChatCompletionsMapper(),\n\t\tconfig: OpenAICompatibleConfig = {},\n\t) {\n\t\tthis.endpointMapper = endpointMapper\n\t\tthis.clientConfig = config\n\t\tthis.extraBody = config.extraBody ?? {}\n\t}\n\n\tprivate get client(): OpenAI {\n\t\t// Passing `undefined` for baseURL/apiKey lets the SDK fall back\n\t\t// to OPENAI_BASE_URL / OPENAI_API_KEY from the environment.\n\t\treturn (this._client ??= new OpenAI({\n\t\t\tbaseURL: this.clientConfig.baseURL,\n\t\t\tapiKey: this.clientConfig.apiKey,\n\t\t}))\n\t}\n\n\tprivate buildRequest(inferenceRequest: InferenceRequest): any {\n\t\treturn {\n\t\t\t...this.extraBody,\n\t\t\t...this.endpointMapper.toRequest(inferenceRequest),\n\t\t}\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResult> {\n\t\tconst response = await this.client.chat.completions.create(this.buildRequest(inferenceRequest))\n\n\t\treturn this.endpointMapper.toResponse(response)\n\t}\n\n\tasync *stream(inferenceRequest: InferenceRequest): AsyncIterable<SpaceEvent> {\n\t\tconst stream = this.client.chat.completions.stream(this.buildRequest(inferenceRequest))\n\n\t\tfor await (const chunk of stream) {\n\t\t\tyield chunk as unknown as SpaceEvent\n\t\t}\n\n\t\tconst output = this.endpointMapper.toResponse(await stream.finalChatCompletion())\n\n\t\tyield {\n\t\t\ttype: \"inference.output\",\n\t\t\tpayload: output,\n\t\t\toccurredAt: new Date(),\n\t\t\tproducerId: inferenceRequest.model,\n\t\t}\n\t}\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeSonnet46Specification: ModelSpecification = {\n\tname: \"claude-sonnet-4-6\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeOpus48Specification: ModelSpecification = {\n\tname: \"claude-opus-4-8\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 32_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeOpus47Specification: ModelSpecification = {\n\tname: \"claude-opus-4-7\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 32_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gemini35FlashSpecification: ModelSpecification = {\n\tname: \"gemini-3.5-flash\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gemini31ProSpecification: ModelSpecification = {\n\tname: \"gemini-3.1-pro-preview\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const deepSeekV4FlashSpecification: ModelSpecification = {\n\tname: \"deepseek-v4-flash\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const deepSeekV4ProSpecification: ModelSpecification = {\n\tname: \"deepseek-v4-pro\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt54Specification: ModelSpecification = {\n\tname: \"gpt-5.4\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt54MiniSpecification: ModelSpecification = {\n\tname: \"gpt-5.4-mini\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 400_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt54NanoSpecification: ModelSpecification = {\n\tname: \"gpt-5.4-nano\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 400_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt55Specification: ModelSpecification = {\n\tname: \"gpt-5.5\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeHaiku45Specification: ModelSpecification = {\n\tname: \"claude-haiku-4-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"tool_use_request\",\n\t\t\"tool_use_result\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 200_000,\n\tmaxOutputTokens: 64_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt6LunaSpecification: ModelSpecification = {\n\tname: \"gpt-6-luna\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt6SolSpecification: ModelSpecification = {\n\tname: \"gpt-6-sol\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt61SolSpecification: ModelSpecification = {\n\tname: \"gpt-6.1-sol\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gpt6AstraSpecification: ModelSpecification = {\n\tname: \"gpt-6-astra\",\n\tprovider: \"openai\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_050_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeSonnet5Specification: ModelSpecification = {\n\tname: \"claude-sonnet-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeSonnet55Specification: ModelSpecification = {\n\tname: \"claude-sonnet-5-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeOpus55Specification: ModelSpecification = {\n\tname: \"claude-opus-5-5\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const claudeFable51Specification: ModelSpecification = {\n\tname: \"claude-fable-5-1\",\n\tprovider: \"anthropic\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"xhigh\", \"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 128_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gemini35FlashLiteSpecification: ModelSpecification = {\n\tname: \"gemini-3.5-flash-lite\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\", \"minimal\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 65_536,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const gemini38FlashSpecification: ModelSpecification = {\n\tname: \"gemini-3.8-flash\",\n\tprovider: \"google\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"high\", \"medium\", \"low\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_048_576,\n\tmaxOutputTokens: 65_536,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: true,\n}\n","import type { ModelSpecification } from \"@domain/inference/generative-model\"\n\nexport const deepSeekFlashSpecification: ModelSpecification = {\n\tname: \"deepseek-flash\",\n\tprovider: \"deepseek\",\n\tsupportsReasoningEffort: true,\n\tsupportedReasoningEfforts: [\"max\", \"high\", \"medium\", \"low\", \"none\"],\n\tsupportedContextItemTypes: [\n\t\t\"user_message\",\n\t\t\"system_message\",\n\t\t\"developer_message\",\n\t\t\"reasoning\",\n\t\t\"function_call\",\n\t\t\"function_call_output\",\n\t\t\"model_message\",\n\t],\n\tsupportsStreaming: true,\n\tcontextWindowSize: 1_000_000,\n\tmaxOutputTokens: 384_000,\n\tsupportsFunctionCalling: true,\n\tsupportsStructuredOutput: false,\n}\n","import { AnthropicMessages } from \"@infrastructure/providers/anthropic/anthropic-messages\"\nimport { OpenAIResponses } from \"@infrastructure/providers/openai/openai-responses\"\nimport { GeminiGenerateContent } from \"@infrastructure/providers/gemini/gemini-generate-content\"\nimport { OpenAIChatCompletions } from \"@infrastructure/providers/openai/openai-chat-completions\"\nimport { claudeSonnet46Specification } from \"@infrastructure/providers/anthropic/models/claude-4-6-sonnet\"\nimport { claudeOpus48Specification } from \"@infrastructure/providers/anthropic/models/claude-4-8-opus\"\nimport { claudeOpus47Specification } from \"@infrastructure/providers/anthropic/models/claude-4-7-opus\"\nimport { gemini35FlashSpecification } from \"@infrastructure/providers/gemini/models/gemini-3-5-flash\"\nimport { gemini31ProSpecification } from \"@infrastructure/providers/gemini/models/gemini-3-1-pro\"\nimport { deepSeekV4FlashSpecification } from \"@infrastructure/providers/deepseek/models/deepseek-v4-flash\"\nimport { deepSeekV4ProSpecification } from \"@infrastructure/providers/deepseek/models/deepseek-v4-pro\"\nimport { gpt54Specification } from \"@infrastructure/providers/openai/models/gpt-5-4\"\nimport { gpt54MiniSpecification } from \"@infrastructure/providers/openai/models/gpt-5-4-mini\"\nimport { gpt54NanoSpecification } from \"@infrastructure/providers/openai/models/gpt-5-4-nano\"\nimport { gpt55Specification } from \"@infrastructure/providers/openai/models/gpt-5-5\"\nimport { claudeHaiku45Specification } from \"@infrastructure/providers/anthropic/models/claude-4-5-haiku\"\nimport { gpt6LunaSpecification } from \"@infrastructure/providers/openai/models/gpt-6-luna\"\nimport { gpt6SolSpecification } from \"@infrastructure/providers/openai/models/gpt-6-sol\"\nimport { gpt61SolSpecification } from \"@infrastructure/providers/openai/models/gpt-6-1-sol\"\nimport { gpt6AstraSpecification } from \"@infrastructure/providers/openai/models/gpt-6-astra\"\nimport { claudeSonnet5Specification } from \"@infrastructure/providers/anthropic/models/claude-5-sonnet\"\nimport { claudeSonnet55Specification } from \"@infrastructure/providers/anthropic/models/claude-5-5-sonnet\"\nimport { claudeOpus55Specification } from \"@infrastructure/providers/anthropic/models/claude-5-5-opus\"\nimport { claudeFable51Specification } from \"@infrastructure/providers/anthropic/models/claude-5-1-fable\"\nimport { gemini35FlashLiteSpecification } from \"@infrastructure/providers/gemini/models/gemini-3-5-flash-lite\"\nimport { gemini38FlashSpecification } from \"@infrastructure/providers/gemini/models/gemini-3-8-flash\"\nimport { deepSeekFlashSpecification } from \"@infrastructure/providers/deepseek/models/deepseek-flash\"\nimport type { GenerativeModel } from \"@domain/inference/generative-model\"\n\nexport const supportedModels: GenerativeModel[] = [\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54Specification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54MiniSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt54NanoSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt55Specification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt6LunaSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt6SolSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt61SolSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIResponses(),\n\t\tspecification: gpt6AstraSpecification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeHaiku45Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeSonnet46Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus47Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus48Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeSonnet5Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeSonnet55Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeOpus55Specification,\n\t},\n\t{\n\t\tendpoint: new AnthropicMessages(),\n\t\tspecification: claudeFable51Specification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini35FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini31ProSpecification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini35FlashLiteSpecification,\n\t},\n\t{\n\t\tendpoint: new GeminiGenerateContent(),\n\t\tspecification: gemini38FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekV4FlashSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekV4ProSpecification,\n\t},\n\t{\n\t\tendpoint: new OpenAIChatCompletions(),\n\t\tspecification: deepSeekFlashSpecification,\n\t},\n]\n","import { Loop } from \"@domain/agent/loop/loop\"\nimport { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { AgentLoop } from \"./specification\"\nimport { Agent } from \"@domain/agent/agent\"\n\nexport class RuleEngine {\n\tdecide(agent: Agent, loop: Loop): LoopControlDirective | undefined {\n\t\tconst agentLoop: AgentLoop = { agent, loop }\n\t\tconst satisfiedRules = loop.ruleBook.getRules().filter((rule) => rule.condition.isSatisfiedBy(agentLoop))\n\t\tif (satisfiedRules.length === 0) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst highestPriorityRule = satisfiedRules.reduce((highest, current) => {\n\t\t\treturn highest.priority > current.priority ? highest : current\n\t\t})\n\n\t\treturn highestPriorityRule.action.execute(agentLoop)\n\t}\n}\n","import { AgentRepository } from \"@domain/agent/agent-repository\"\nimport { Loop } from \"@domain/agent/loop/loop\"\nimport { RuleEngine } from \"@domain/agent/loop/rule-engine\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\nimport { DirectiveExecutionStrategyResolver } from \"@application/directive-execution/directive-execution-strategy-resolver\"\n\nexport class RunLoopUseCase {\n\tprivate readonly ruleEngine: RuleEngine\n\n\tconstructor(\n\t\tprivate readonly agentRepository: AgentRepository,\n\t\tprivate readonly loopRepository: LoopRepository,\n\t\tprivate readonly directiveExecutionStrategyResolver: DirectiveExecutionStrategyResolver,\n\t) {\n\t\tthis.ruleEngine = new RuleEngine()\n\t}\n\n\tasync execute(loopId: string): Promise<Loop> {\n\t\tconst loop = await this.loopRepository.findById(loopId)\n\t\tif (!loop) {\n\t\t\tthrow new Error(\"Loop not found\")\n\t\t}\n\n\t\tconst agent = await this.agentRepository.findById(loop.getAgentId())\n\t\tif (!agent) {\n\t\t\tthrow new Error(\"Agent not found\")\n\t\t}\n\n\t\twhile (loop.stateId !== \"completed\") {\n\t\t\tconst directive = this.ruleEngine.decide(agent, loop)\n\n\t\t\tif (!directive) return loop\n\n\t\t\tconst strategy = this.directiveExecutionStrategyResolver.resolve(directive)\n\t\t\tawait strategy.execute(directive, agent, loop)\n\t\t}\n\n\t\tawait this.loopRepository.save(loop)\n\n\t\treturn loop\n\t}\n}\n","import { Memory } from \"@domain/agent/memory\"\nimport { Context, ContextItem } from \"@domain/inference/context\"\n\nexport class RuntimeMemory implements Memory {\n\tprivate readonly context: Context\n\n\tconstructor(context: Context) {\n\t\tthis.context = context\n\t}\n\tremember(items: ContextItem[], participantId: string): void {\n\t\tthrow new Error(\"Method not implemented.\")\n\t}\n\trecall(topic: string, participantId: string): ContextItem[] {\n\t\tthrow new Error(\"Method not implemented.\")\n\t}\n}\n","import { Memory, MemoryFactory } from \"@domain/agent/memory\"\nimport { RuntimeMemory } from \"@infrastructure/memory/runtime-memory\"\nimport { Context } from \"@domain/inference/context\"\n\nexport class RuntimeMemoryFactory implements MemoryFactory {\n\tcreate(): Memory {\n\t\tconst context: Context = {\n\t\t\titems: [],\n\t\t}\n\t\treturn new RuntimeMemory(context)\n\t}\n}\n","import { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\n\nexport class DirectiveExecutionStrategyResolver {\n\tconstructor(private readonly strategies: Record<LoopControlDirective[\"type\"], DirectiveExecutionStrategy>) {}\n\n\tresolve(directive: LoopControlDirective): DirectiveExecutionStrategy {\n\t\treturn this.strategies[directive.type]\n\t}\n}\n","import { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\nimport { Loop } from \"@domain/agent/loop/loop\"\nimport { Agent } from \"@domain/agent/agent\"\n\nexport class CompleteExecutionStrategy implements DirectiveExecutionStrategy {\n\tasync execute(directive: LoopControlDirective, agent: Agent, loop: Loop) {\n\t\tif (directive.type !== \"complete\") {\n\t\t\tthrow new Error(\"Expected a completion directive\")\n\t\t}\n\n\t\tloop.complete(directive.reason)\n\t}\n}\n","import { Agent } from \"@domain/agent/agent\"\nimport { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { InferenceRunner } from \"@domain/inference/inference-runner\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\nimport { Loop } from \"@domain/agent/loop/loop\"\n\nexport class InferenceExecutionStrategy implements DirectiveExecutionStrategy {\n\tconstructor(private readonly inferenceRunner: InferenceRunner) {}\n\n\tasync execute(directive: LoopControlDirective, agent: Agent, loop: Loop) {\n\t\tif (directive.type !== \"inference\") {\n\t\t\tthrow new Error(\"Expected an inference directive\")\n\t\t}\n\n\t\tconst pending = loop.requestInference(directive.request)\n\t\tconst result = await this.inferenceRunner.run(directive.request)\n\n\t\tloop.receiveInferenceResult(pending.id, result)\n\t}\n}\n","import { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\nimport { ToolUseRunner } from \"@domain/inference/tool-use-runner\"\nimport { Agent } from \"@domain/agent/agent\"\nimport { Loop } from \"@domain/agent/loop/loop\"\n\nexport class ToolUseExecutionStrategy implements DirectiveExecutionStrategy {\n\tconstructor(private readonly toolRunner: ToolUseRunner) {}\n\n\tasync execute(directive: LoopControlDirective, agent: Agent, loop: Loop) {\n\t\tif (directive.type !== \"tool_use\") {\n\t\t\tthrow new Error(\"Expected a tool-use directive\")\n\t\t}\n\n\t\tconst pending = loop.pending\n\t\tif (pending?.type !== \"tool_execution\") {\n\t\t\tthrow new Error(\"The loop has no pending tool execution\")\n\t\t}\n\n\t\tconst tool = agent.getTools().find((tool) => tool.name === directive.call.toolName)\n\n\t\tif (!tool) {\n\t\t\tthrow new Error(`Tool \"${directive.call.toolName}\" not found`)\n\t\t}\n\n\t\tconst result = await this.toolRunner.run(directive.call, tool)\n\n\t\tloop.receiveToolUseResult(pending.id, result)\n\t}\n}\n","import { LoopControlDirective } from \"@domain/agent/loop/directive\"\nimport { DirectiveExecutionStrategy } from \"./directive-execution-strategy\"\nimport { Agent } from \"@domain/agent/agent\"\nimport { Loop } from \"@domain/agent/loop/loop\"\n\nexport class WaitExecutionStrategy implements DirectiveExecutionStrategy {\n\tasync execute(directive: LoopControlDirective, agent: Agent, loop: Loop) {\n\t\tif (directive.type !== \"wait\") {\n\t\t\tthrow new Error(\"Expected a wait directive\")\n\t\t}\n\n\t\tloop.wait(directive.reason)\n\t}\n}\n","import { CreateAgentUseCase } from \"@application/use-cases/create-agent\"\nimport { InMemoryAgentRepository } from \"@infrastructure/repositories/in-memory-agent-repository\"\nimport { Tool } from \"@domain/inference/tool\"\nimport { SituationHandler } from \"@domain/space/situation-handler\"\nimport { CreateAgentLoopUseCase } from \"@application/use-cases/create-loop\"\nimport { InMemoryLoopRepository } from \"@infrastructure/repositories/in-memory-loop-repository\"\nimport { InferenceRequest, InferenceRunner } from \"@domain/inference/inference-runner\"\nimport { AgentRepository } from \"@domain/agent/agent-repository\"\nimport { LoopRepository } from \"@domain/agent/loop/repository\"\nimport { ToolUseRunner } from \"@domain/inference/tool-use-runner\"\nimport { LocalToolRunner } from \"@application/runners/local-tool-runner\"\nimport { DefaultInferenceRunner } from \"@application/runners/inference-runner\"\nimport { GenerativeModel } from \"@domain/inference/generative-model\"\nimport { InferenceRequestValidator } from \"@domain/inference/request-validation/inference-request-validator\"\nimport { supportedModels } from \"@infrastructure/providers/supported-models\"\nimport { AgentRecord } from \"./domain/agent/record\"\nimport { CreateLoopParams, Loop, LoopStateId } from \"./domain/agent/loop/loop\"\nimport { RunLoopUseCase } from \"@application/use-cases/run-loop\"\nimport { LoopSpecification, ModelAnswered } from \"./domain/agent/loop/specification\"\nimport { CompleteAction, InferenceAction, LoopAction, ToolUseAction, WaitAction } from \"./domain/agent/loop/action\"\nimport { CreateLoopRuleParams, LoopRule, RuleBook } from \"./domain/agent/loop/rule\"\nimport { RuntimeMemoryFactory } from \"@infrastructure/memory/runtime-memory-factory\"\nimport { DirectiveExecutionStrategyResolver } from \"@application/directive-execution/directive-execution-strategy-resolver\"\nimport { CompleteExecutionStrategy } from \"@application/directive-execution/complete-execution-strategy\"\nimport { InferenceExecutionStrategy } from \"@application/directive-execution/inference-execution-strategy\"\nimport { ToolUseExecutionStrategy } from \"@application/directive-execution/tool-use-execution-strategy\"\nimport { WaitExecutionStrategy } from \"@application/directive-execution/wait-execution-strategy\"\n\nexport type InferenceRunnerConfig = {\n\tsupportedModels?: GenerativeModel[]\n\trunner?: InferenceRunner\n}\n\nexport type AgentModuleConfig = {\n\tagentRepository?: AgentRepository\n\tagentLoopRepository?: LoopRepository\n\tinferenceRunnerConfig?: InferenceRunnerConfig\n\ttoolRunner?: ToolUseRunner\n}\n\nexport function defineAgentModule(config: AgentModuleConfig) {\n\t// Dependencies\n\tconst agentRepository = config.agentRepository ?? new InMemoryAgentRepository()\n\tconst agentLoopRepository = config.agentLoopRepository ?? new InMemoryLoopRepository()\n\n\tconst inferenceRunner =\n\t\tconfig.inferenceRunnerConfig?.runner ??\n\t\tnew DefaultInferenceRunner(\n\t\t\tconfig.inferenceRunnerConfig?.supportedModels ?? supportedModels,\n\t\t\tnew InferenceRequestValidator(),\n\t\t)\n\n\tconst toolRunner = config.toolRunner ?? new LocalToolRunner()\n\n\tconst memoryFactory = new RuntimeMemoryFactory()\n\t// Use cases\n\tconst createAgentUseCase = new CreateAgentUseCase(agentRepository, memoryFactory)\n\tconst createLoopUseCase = new CreateAgentLoopUseCase(agentLoopRepository)\n\n\ttype CreateAgentParams = {\n\t\tname: string\n\t\tinstruction: string\n\t\ttools: Tool[]\n\t\thandlers: SituationHandler[]\n\t}\n\t// Interfaces\n\tasync function createAgent(config: CreateAgentParams): Promise<AgentRecord> {\n\t\treturn await createAgentUseCase.execute(config.name, config.instruction, config.tools, config.handlers)\n\t}\n\n\tasync function createLoop(params: CreateLoopParams): Promise<Loop> {\n\t\treturn await createLoopUseCase.execute(params)\n\t}\n\n\tconst directiveExecutionStrategyResolver = new DirectiveExecutionStrategyResolver({\n\t\tinference: new InferenceExecutionStrategy(inferenceRunner),\n\t\ttool_use: new ToolUseExecutionStrategy(toolRunner),\n\t\tcomplete: new CompleteExecutionStrategy(),\n\t\twait: new WaitExecutionStrategy(),\n\t})\n\n\tconst runLoopUseCase = new RunLoopUseCase(agentRepository, agentLoopRepository, directiveExecutionStrategyResolver)\n\n\tasync function runLoop(loopId: string): Promise<Loop> {\n\t\treturn await runLoopUseCase.execute(loopId)\n\t}\n\n\treturn {\n\t\tcreateAgent,\n\t\tcreateLoop,\n\t\trunLoop,\n\t}\n}\n"],"mappings":"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","names":["sendMessageUseCase","supportedModels","Anthropic","OpenAI","import_openai","OpenAI","tool","config"]}
|