@mozaik-ai/core 3.0.1 → 3.0.3
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 +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +19 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -329,7 +329,8 @@ declare enum HookId {
|
|
|
329
329
|
BEFORE_FUNCTION_CALL = "BEFORE_FUNCTION_CALL",
|
|
330
330
|
AFTER_FUNCTION_CALL = "AFTER_FUNCTION_CALL",
|
|
331
331
|
BEFORE_MODEL_MESSAGE = "BEFORE_MODEL_MESSAGE",
|
|
332
|
-
AFTER_MODEL_MESSAGE = "AFTER_MODEL_MESSAGE"
|
|
332
|
+
AFTER_MODEL_MESSAGE = "AFTER_MODEL_MESSAGE",
|
|
333
|
+
ON_ERROR = "ON_ERROR"
|
|
333
334
|
}
|
|
334
335
|
|
|
335
336
|
interface TransitionRecord {
|
|
@@ -373,6 +374,7 @@ interface RuntimeContext {
|
|
|
373
374
|
inferenceResponse?: InferenceResponse;
|
|
374
375
|
functionCallOutput?: FunctionCallOutput;
|
|
375
376
|
modelMessage?: ModelMessage;
|
|
377
|
+
error?: Error;
|
|
376
378
|
}
|
|
377
379
|
|
|
378
380
|
declare class AgentRuntime {
|
|
@@ -381,6 +383,7 @@ declare class AgentRuntime {
|
|
|
381
383
|
constructor();
|
|
382
384
|
onInferencePending(context: RuntimeContext): Promise<void>;
|
|
383
385
|
onFunctionCallPending(context: RuntimeContext): Promise<void>;
|
|
386
|
+
onError(context: RuntimeContext): Promise<void>;
|
|
384
387
|
onModelMessageReceived(context: RuntimeContext): Promise<void>;
|
|
385
388
|
on(hookId: HookId, callback: (data: any) => Promise<void>): Promise<void>;
|
|
386
389
|
start(userMessage: UserMessage, model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability, context: Context): Promise<void>;
|
|
@@ -401,6 +404,7 @@ declare class Agent {
|
|
|
401
404
|
afterFunctionCall(context: RuntimeContext): Promise<void>;
|
|
402
405
|
beforeModelMessage(context: RuntimeContext): Promise<void>;
|
|
403
406
|
afterModelMessage(context: RuntimeContext): Promise<void>;
|
|
407
|
+
onError(context: RuntimeContext): Promise<void>;
|
|
404
408
|
onStart(context: RuntimeContext): Promise<void>;
|
|
405
409
|
setInferenceVisitor(visitor: InferenceVisitor): void;
|
|
406
410
|
run(userMessage: string, model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability, context: Context): Promise<void>;
|
package/dist/index.d.ts
CHANGED
|
@@ -329,7 +329,8 @@ declare enum HookId {
|
|
|
329
329
|
BEFORE_FUNCTION_CALL = "BEFORE_FUNCTION_CALL",
|
|
330
330
|
AFTER_FUNCTION_CALL = "AFTER_FUNCTION_CALL",
|
|
331
331
|
BEFORE_MODEL_MESSAGE = "BEFORE_MODEL_MESSAGE",
|
|
332
|
-
AFTER_MODEL_MESSAGE = "AFTER_MODEL_MESSAGE"
|
|
332
|
+
AFTER_MODEL_MESSAGE = "AFTER_MODEL_MESSAGE",
|
|
333
|
+
ON_ERROR = "ON_ERROR"
|
|
333
334
|
}
|
|
334
335
|
|
|
335
336
|
interface TransitionRecord {
|
|
@@ -373,6 +374,7 @@ interface RuntimeContext {
|
|
|
373
374
|
inferenceResponse?: InferenceResponse;
|
|
374
375
|
functionCallOutput?: FunctionCallOutput;
|
|
375
376
|
modelMessage?: ModelMessage;
|
|
377
|
+
error?: Error;
|
|
376
378
|
}
|
|
377
379
|
|
|
378
380
|
declare class AgentRuntime {
|
|
@@ -381,6 +383,7 @@ declare class AgentRuntime {
|
|
|
381
383
|
constructor();
|
|
382
384
|
onInferencePending(context: RuntimeContext): Promise<void>;
|
|
383
385
|
onFunctionCallPending(context: RuntimeContext): Promise<void>;
|
|
386
|
+
onError(context: RuntimeContext): Promise<void>;
|
|
384
387
|
onModelMessageReceived(context: RuntimeContext): Promise<void>;
|
|
385
388
|
on(hookId: HookId, callback: (data: any) => Promise<void>): Promise<void>;
|
|
386
389
|
start(userMessage: UserMessage, model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability, context: Context): Promise<void>;
|
|
@@ -401,6 +404,7 @@ declare class Agent {
|
|
|
401
404
|
afterFunctionCall(context: RuntimeContext): Promise<void>;
|
|
402
405
|
beforeModelMessage(context: RuntimeContext): Promise<void>;
|
|
403
406
|
afterModelMessage(context: RuntimeContext): Promise<void>;
|
|
407
|
+
onError(context: RuntimeContext): Promise<void>;
|
|
404
408
|
onStart(context: RuntimeContext): Promise<void>;
|
|
405
409
|
setInferenceVisitor(visitor: InferenceVisitor): void;
|
|
406
410
|
run(userMessage: string, model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability, context: Context): Promise<void>;
|
package/dist/index.js
CHANGED
|
@@ -849,6 +849,7 @@ var AgentRuntime = class {
|
|
|
849
849
|
this.stateHandlerRegistry.registerHandler("INFERENCE_PENDING" /* INFERENCE_PENDING */, this.onInferencePending);
|
|
850
850
|
this.stateHandlerRegistry.registerHandler("FUNCTION_CALL_PENDING" /* FUNCTION_CALL_PENDING */, this.onFunctionCallPending);
|
|
851
851
|
this.stateHandlerRegistry.registerHandler("MODEL_MESSAGE_RECEIVED" /* MODEL_MESSAGE_RECEIVED */, this.onModelMessageReceived);
|
|
852
|
+
this.hooksRegistry.registerHandler("ON_ERROR" /* ON_ERROR */, this.onError);
|
|
852
853
|
}
|
|
853
854
|
async onInferencePending(context) {
|
|
854
855
|
const openaiResponses = new OpenAIResponses();
|
|
@@ -871,6 +872,14 @@ var AgentRuntime = class {
|
|
|
871
872
|
context.functionCallOutput = FunctionCallOutput.create(functionCall.callId, functionCallOutput);
|
|
872
873
|
return Promise.resolve();
|
|
873
874
|
}
|
|
875
|
+
async onError(context) {
|
|
876
|
+
const error = context.error;
|
|
877
|
+
if (!error) {
|
|
878
|
+
throw new Error("Error not found");
|
|
879
|
+
}
|
|
880
|
+
console.error(error);
|
|
881
|
+
return Promise.resolve();
|
|
882
|
+
}
|
|
874
883
|
async onModelMessageReceived(context) {
|
|
875
884
|
return Promise.resolve();
|
|
876
885
|
}
|
|
@@ -878,6 +887,7 @@ var AgentRuntime = class {
|
|
|
878
887
|
this.hooksRegistry.registerHandler(hookId, callback);
|
|
879
888
|
}
|
|
880
889
|
async start(userMessage, model, context) {
|
|
890
|
+
console.log("Starting agent runtime");
|
|
881
891
|
const execution = Execution.create();
|
|
882
892
|
const loop = new AgentLoop();
|
|
883
893
|
const runtimeContext = {
|
|
@@ -887,6 +897,7 @@ var AgentRuntime = class {
|
|
|
887
897
|
context
|
|
888
898
|
};
|
|
889
899
|
while (!execution.isTerminal()) {
|
|
900
|
+
console.log("Executing state", execution.currentStateId);
|
|
890
901
|
const transition = loop.next(runtimeContext);
|
|
891
902
|
await transition.apply(runtimeContext);
|
|
892
903
|
try {
|
|
@@ -901,6 +912,9 @@ var AgentRuntime = class {
|
|
|
901
912
|
}
|
|
902
913
|
} catch (error) {
|
|
903
914
|
execution.status = 2 /* FAILED */;
|
|
915
|
+
const handler = this.hooksRegistry.getHandler("ON_ERROR" /* ON_ERROR */);
|
|
916
|
+
runtimeContext.error = error;
|
|
917
|
+
await handler(runtimeContext);
|
|
904
918
|
break;
|
|
905
919
|
}
|
|
906
920
|
}
|
|
@@ -917,6 +931,7 @@ var Agent = class {
|
|
|
917
931
|
this.runtime.on("AFTER_FUNCTION_CALL" /* AFTER_FUNCTION_CALL */, this.afterFunctionCall);
|
|
918
932
|
this.runtime.on("BEFORE_MODEL_MESSAGE" /* BEFORE_MODEL_MESSAGE */, this.beforeModelMessage);
|
|
919
933
|
this.runtime.on("AFTER_MODEL_MESSAGE" /* AFTER_MODEL_MESSAGE */, this.afterModelMessage);
|
|
934
|
+
this.runtime.on("ON_ERROR" /* ON_ERROR */, this.onError);
|
|
920
935
|
}
|
|
921
936
|
async beforeInference(context) {
|
|
922
937
|
return Promise.resolve();
|
|
@@ -940,6 +955,10 @@ var Agent = class {
|
|
|
940
955
|
async afterModelMessage(context) {
|
|
941
956
|
return Promise.resolve();
|
|
942
957
|
}
|
|
958
|
+
async onError(context) {
|
|
959
|
+
console.log("Error occurred", context.error);
|
|
960
|
+
return Promise.resolve();
|
|
961
|
+
}
|
|
943
962
|
async onStart(context) {
|
|
944
963
|
var _a;
|
|
945
964
|
await ((_a = this.visitor) == null ? void 0 : _a.onStart(context));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/domain/model-context/context.ts","../src/domain/model-context/context-item/context-item.ts","../src/domain/model-context/context-item/item-content/item-content.ts","../src/domain/model-context/context-item/item-content/input-text.ts","../src/domain/model-context/context-item/client-item/user-message.ts","../src/domain/model-context/context-item/client-item/developer-message.ts","../src/domain/model-context/context-item/item-content/output-text.ts","../src/domain/model-context/context-item/model-item/model-message.ts","../src/domain/model-context/context-item/model-item/function-call.ts","../src/domain/model-context/context-item/model-item/reasoning.ts","../src/domain/model-context/context-item/client-item/function-call-output.ts","../src/domain/generative-model/inference-response.ts","../src/domain/generative-model/token-usage.ts","../src/infrastructure/providers/openai/runtime/openai-responses.ts","../src/domain/generative-model/inference-request.ts","../src/infrastructure/providers/openai/reasoning-effort.ts","../src/infrastructure/providers/openai/models/gpt-5-4-nano.ts","../src/infrastructure/providers/openai/models/gpt-5-4.ts","../src/infrastructure/providers/openai/models/gpt-5-4-mini.ts","../src/domain/agent-loop/rules/condition/condition.ts","../src/domain/agent-loop/rules/rule/rule.ts","../src/infrastructure/repository/in-memory-context-repository.ts","../src/domain/agent-loop/execution.ts","../src/domain/agent-loop/transition/go-to.ts","../src/domain/agent-loop/transition/fail.ts","../src/domain/agent-loop/state/function-call.ts","../src/domain/agent-loop/transition/complete.ts","../src/domain/agent-loop/state/model-message.ts","../src/domain/agent-loop/state/inference-pending.ts","../src/domain/agent-loop/loop.ts","../src/domain/agent-loop/hooks/hooks-registry.ts","../src/domain/agent-loop/state/state-registry.ts","../src/application/agent-runtime.ts","../src/application/agent.ts"],"sourcesContent":["import { Context } from \"@domain/model-context/context\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { DeveloperMessage } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { Reasoning } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { ContextRepository } from \"@domain/model-context/context-repository\"\nimport { OpenAIResponses } from \"@infra/providers/openai/runtime/openai-responses\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\nimport { Gpt54Nano } from \"@infra/providers/openai/models/gpt-5-4-nano\"\nimport { Gpt54 } from \"@infra/providers/openai/models/gpt-5-4\"\nimport { Gpt54Mini } from \"@infra/providers/openai/models/gpt-5-4-mini\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { BaseCondition, Condition } from \"@domain/agent-loop/rules/condition/condition\"\nimport { Action, If, Loop, AsyncAction, AsyncRule } from \"@domain/agent-loop/rules/rule/rule\"\nimport { InMemoryContextRepository } from \"@infra/repository/in-memory-context-repository\"\nimport { AgentRuntime } from \"@app/agent-runtime\"\nimport { Agent } from \"@app/agent\"\nimport { InferenceVisitor } from \"@app/inference-visitor\"\n\nexport {\n\tContext,\n\tContextItem,\n\tUserMessage,\n\tDeveloperMessage,\n\tModelMessage,\n\tFunctionCall,\n\tFunctionCallOutput,\n\tReasoning,\n\tGenerativeModel,\n\tContextRepository,\n\tInMemoryContextRepository,\n\tOpenAIResponses,\n\tGpt54,\n\tGpt54Mini,\n\tGpt54Nano,\n\tInferenceRequest,\n\tInferenceResponse,\n\tTokenUsage,\n\tInputTokenDetails,\n\tOutputTokenDetails,\n\tTool,\n\tCondition,\n\tBaseCondition,\n\tAction,\n\tAsyncAction,\n\tAsyncRule,\n\tIf,\n\tLoop,\n\tAgent,\n\tAgentRuntime,\n\tInferenceVisitor,\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class Context {\n\treadonly id: string\n\treadonly projectId: string\n\treadonly items: ContextItem[]\n\n\tconstructor(id: string, projectId: string, items: ContextItem[]) {\n\t\tthis.projectId = projectId\n\t\tthis.id = id\n\t\tthis.items = items\n\t}\n\n\taddItem(item: ContextItem): Context {\n\t\tthis.items.push(item)\n\t\treturn this\n\t}\n\n\tapplyModelOutput(items: ContextItem[]): Context {\n\t\tfor (const item of items) {\n\t\t\tconst itemType = item.getType()\n\t\t\tif (itemType !== \"function_call\" && itemType !== \"message\" && itemType !== \"reasoning\") {\n\t\t\t\tthrow new Error(`Invalid item type: ${itemType}`)\n\t\t\t}\n\t\t}\n\t\tthis.items.push(...items)\n\t\treturn this\n\t}\n\n\tgetItems(): ContextItem[] {\n\t\treturn this.items\n\t}\n\n\tstatic create(projectId: string): Context {\n\t\tconst id = crypto.randomUUID()\n\t\treturn new Context(id, projectId, [])\n\t}\n\n\tstatic rehydrate(data: { id: string; projectId: string; items: ContextItem[] }): Context {\n\t\treturn new Context(data.id, data.projectId, data.items)\n\t}\n\n\ttoJSON(): any {\n\t\treturn this.items.map((item) => item.toJSON())\n\t}\n}\n","export abstract class ContextItem {\n\tabstract readonly type: string\n\n\tgetType(): string {\n\t\treturn this.type\n\t}\n\n\tabstract toJSON(): any\n}\n","export abstract class ItemContent {\n\tabstract readonly type: string\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class InputText extends ItemContent {\n\treadonly type = \"input_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic create(text: string): InputText {\n\t\treturn new InputText(text)\n\t}\n\n\tstatic rehydrate(data: { text: string }): InputText {\n\t\treturn new InputText(data.text)\n\t}\n\n\ttoJSON(): any[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: this.type,\n\t\t\t\ttext: this.text,\n\t\t\t},\n\t\t]\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class UserMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"user\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): UserMessage {\n\t\tconst content = InputText.create(text)\n\t\treturn new UserMessage(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): UserMessage {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new UserMessage(content)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class DeveloperMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"developer\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n\n\tstatic create(text: string): DeveloperMessage {\n\t\tconst content = InputText.create(text)\n\t\treturn new DeveloperMessage(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): DeveloperMessage {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new DeveloperMessage(content)\n\t}\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class OutputText extends ItemContent {\n\treadonly type = \"output_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic rehydrate(data: { text: string }): OutputText {\n\t\treturn new OutputText(data.text)\n\t}\n\n\ttoJSON(): any[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: this.type,\n\t\t\t\ttext: this.text,\n\t\t\t},\n\t\t]\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { OutputText } from \"@domain/model-context/context-item/item-content/output-text\"\n\nexport class ModelMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"assistant\"\n\treadonly content: OutputText\n\n\tprivate constructor(content: OutputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic rehydrate(data: { text: string }): ModelMessage {\n\t\tconst content = OutputText.rehydrate(data)\n\t\treturn new ModelMessage(content)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class FunctionCall extends ContextItem {\n\treadonly type = \"function_call\"\n\treadonly callId: string\n\treadonly name: string\n\treadonly args: string\n\n\tprivate constructor(callId: string, name: string, args: string) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.name = name\n\t\tthis.args = args\n\t}\n\n\tstatic rehydrate(data: { callId: string; name: string; args: string }): FunctionCall {\n\t\treturn new FunctionCall(data.callId, data.name, data.args)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcall_id: this.callId,\n\t\t\tname: this.name,\n\t\t\targuments: this.args,\n\t\t}\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { SummaryText } from \"@domain/model-context/context-item/item-content/summary-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class Reasoning extends ContextItem {\n\treadonly type = \"reasoning\"\n\treadonly content: InputText | undefined\n\treadonly encryptedContent: string | undefined\n\treadonly summary: SummaryText[]\n\n\tprivate constructor(\n\t\tcontent: InputText | undefined,\n\t\tencryptedContent?: string | undefined,\n\t\tsummary: SummaryText[] = [],\n\t) {\n\t\tsuper()\n\t\tthis.content = content\n\t\tthis.encryptedContent = encryptedContent\n\t\tthis.summary = summary\n\t}\n\n\tstatic rehydrate(data: {\n\t\tcontent: InputText | undefined\n\t\tencryptedContent: string | undefined\n\t\tsummary: SummaryText[]\n\t}): Reasoning {\n\t\treturn new Reasoning(data.content, data.encryptedContent, data.summary)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcontent: this.content?.toJSON(),\n\t\t\tencryptedContent: this.encryptedContent,\n\t\t\tsummary: this.summary.map((s) => s.toJSON()),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class FunctionCallOutput extends ContextItem {\n\treadonly type = \"function_call_output\"\n\treadonly callId: string\n\treadonly output: InputText\n\n\tprivate constructor(callId: string, output: InputText) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.output = output\n\t}\n\n\tstatic create(callId: string, output: string): FunctionCallOutput {\n\t\tconst outputText = InputText.create(output)\n\t\treturn new FunctionCallOutput(callId, outputText)\n\t}\n\n\tstatic rehydrate(data: { callId: string; output: InputText }): FunctionCallOutput {\n\t\treturn new FunctionCallOutput(data.callId, data.output)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcall_id: this.callId,\n\t\t\toutput: this.output.toJSON(),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { TokenUsage } from \"@domain/generative-model/token-usage\"\n\nexport class InferenceResponse {\n\treadonly contextItems: ContextItem[]\n\treadonly tokenUsage?: TokenUsage\n\n\tconstructor(contextItems: ContextItem[], tokenUsage: TokenUsage | undefined) {\n\t\tthis.contextItems = contextItems\n\t\tthis.tokenUsage = tokenUsage\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 { Context } from \"@domain/model-context/context\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { Reasoning } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { ModelRuntime } from \"@domain/generative-model/runtime/model-runtime\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport OpenAI from \"openai\"\n\nexport class OpenAIResponses implements ModelRuntime {\n\tprivate readonly client: OpenAI\n\tconstructor() {\n\t\tthis.client = new OpenAI()\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResponse> {\n\t\tconst input = this.mapContextToRequest(inferenceRequest.context)\n\n\t\tconst specification = inferenceRequest.model.specification\n\n\t\tlet request: any = {\n\t\t\tmodel: specification.name,\n\t\t\tinput: input,\n\t\t}\n\n\t\tif (specification.supportFunctionCalling && inferenceRequest.model.getTools().length > 0) {\n\t\t\trequest.tools = inferenceRequest.model.getTools().map((tool) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: tool.type,\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 (specification.supportReasoningEffort) {\n\t\t\trequest.reasoning = {\n\t\t\t\teffort: inferenceRequest.model.getReasoningEffort(),\n\t\t\t}\n\t\t}\n\n\t\tconst response = await this.client.responses.create(request)\n\n\t\tconst contextItems = this.extractContextItems(response)\n\t\tconst tokenUsage = this.extractTokenUsage(response)\n\t\treturn new InferenceResponse(contextItems, tokenUsage)\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),\n\t\t\tnew OutputTokenDetails(response.usage.output_tokens_details.reasoning_tokens),\n\t\t)\n\t}\n\n\tmapContextToRequest(context: Context): any[] {\n\t\treturn context.getItems().map((item) => item.toJSON())\n\t}\n\n\textractContextItems(response: any): ContextItem[] {\n\t\treturn response.output.map((item: any) => {\n\t\t\tif (item.type === \"message\" && item.role === \"assistant\") {\n\t\t\t\treturn ModelMessage.rehydrate(item.content[0] as { text: string })\n\t\t\t}\n\t\t\tif (item.type === \"function_call\") {\n\t\t\t\treturn FunctionCall.rehydrate({\n\t\t\t\t\tcallId: item.call_id,\n\t\t\t\t\tname: item.name,\n\t\t\t\t\targs: item.arguments,\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\treturn Reasoning.rehydrate(item)\n\t\t\t}\n\t\t})\n\t}\n}\n","import { Context } from \"@domain/model-context/context\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\n\nexport class InferenceRequest {\n\treadonly model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability\n\treadonly context: Context\n\n\tconstructor(model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability, context: Context) {\n\t\tthis.model = model\n\t\tthis.context = context\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\n\nexport type OpenAIReasoningEffortType = \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"\n\nexport class OpenAIReasoningEffort implements ReasoningEffort<OpenAIReasoningEffortType> {\n\treasoningEffort: OpenAIReasoningEffortType\n\n\tconstructor(reasoningEffort: OpenAIReasoningEffortType) {\n\t\tthis.reasoningEffort = reasoningEffort\n\t}\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.reasoningEffort = effort\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\tif (!this.reasoningEffort) {\n\t\t\tthrow new Error(\"Reasoning effort not supported\")\n\t\t}\n\t\treturn this.reasoningEffort\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54Nano implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4-nano\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 400_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54 implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 1_050_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54Mini implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4-mini\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 400_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n}\n","export interface Condition<T> {\n\tisSatisfiedBy(candidate: T): boolean\n\tand(other: Condition<T>): Condition<T>\n\tor(other: Condition<T>): Condition<T>\n\tnot(): Condition<T>\n}\n\nexport abstract class BaseCondition<T> implements Condition<T> {\n\tabstract isSatisfiedBy(candidate: T): boolean\n\n\tand(other: Condition<T>): Condition<T> {\n\t\treturn new AndCondition(this, other)\n\t}\n\n\tor(other: Condition<T>): Condition<T> {\n\t\treturn new OrCondition(this, other)\n\t}\n\n\tnot(): Condition<T> {\n\t\treturn new NotCondition(this)\n\t}\n}\n\nexport class AndCondition<T> extends BaseCondition<T> {\n\tconstructor(\n\t\tprivate readonly left: Condition<T>,\n\t\tprivate readonly right: Condition<T>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn this.left.isSatisfiedBy(candidate) && this.right.isSatisfiedBy(candidate)\n\t}\n}\n\nexport class NotCondition<T> extends BaseCondition<T> {\n\tconstructor(private readonly condition: Condition<T>) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn !this.condition.isSatisfiedBy(candidate)\n\t}\n}\n\nexport class OrCondition<T> extends BaseCondition<T> {\n\tconstructor(\n\t\tprivate readonly left: Condition<T>,\n\t\tprivate readonly right: Condition<T>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn this.left.isSatisfiedBy(candidate) || this.right.isSatisfiedBy(candidate)\n\t}\n}\n","import { Condition } from \"@domain/agent-loop/rules/condition/condition\"\n\nexport interface Action<T> {\n\tapply(candidate: T): T\n}\n\nexport interface AsyncAction<T> {\n\tapply(candidate: T): Promise<T>\n}\n\nexport interface AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\tapply(candidate: T): Promise<T>\n}\n\nexport class If<T> implements AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\n\tconstructor({ condition, action }: { condition: Condition<T>; action: AsyncAction<T> }) {\n\t\tthis.condition = condition\n\t\tthis.action = action\n\t}\n\n\tasync apply(candidate: T): Promise<T> {\n\t\tif (this.condition.isSatisfiedBy(candidate)) {\n\t\t\treturn await this.action.apply(candidate)\n\t\t}\n\t\treturn candidate\n\t}\n}\n\nexport class Loop<T> implements AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\n\tconstructor({ condition, action }: { condition: Condition<T>; action: AsyncAction<T> }) {\n\t\tthis.condition = condition\n\t\tthis.action = action\n\t}\n\n\tasync apply(candidate: T): Promise<T> {\n\t\twhile (this.condition.isSatisfiedBy(candidate)) {\n\t\t\tcandidate = await this.action.apply(candidate)\n\t\t}\n\t\treturn candidate\n\t}\n}\n","import { Context } from \"@domain/model-context/context\"\nimport { ContextRepository } from \"@domain/model-context/context-repository\"\n\nexport class InMemoryContextRepository implements ContextRepository {\n\tprivate readonly store = new Map<string, Context>()\n\tprivate readonly projectIndex = new Map<string, Set<string>>()\n\n\tasync save(context: Context): Promise<void> {\n\t\tconst existing = this.store.get(context.id)\n\t\tif (existing && existing.projectId !== context.projectId) {\n\t\t\tconst prevSet = this.projectIndex.get(existing.projectId)\n\t\t\tprevSet?.delete(existing.id)\n\t\t\tif (prevSet && prevSet.size === 0) this.projectIndex.delete(existing.projectId)\n\t\t}\n\n\t\tthis.store.set(context.id, this.clone(context))\n\n\t\tlet set = this.projectIndex.get(context.projectId)\n\t\tif (!set) {\n\t\t\tset = new Set<string>()\n\t\t\tthis.projectIndex.set(context.projectId, set)\n\t\t}\n\t\tset.add(context.id)\n\t}\n\n\tasync get(id: string): Promise<Context> {\n\t\tconst context = this.store.get(id)\n\t\tif (!context) {\n\t\t\tthrow new Error(`Context not found: ${id}`)\n\t\t}\n\t\treturn this.clone(context)\n\t}\n\n\tasync getByProjectId(projectId: string): Promise<Context[]> {\n\t\tconst ids = this.projectIndex.get(projectId)\n\t\tif (!ids || ids.size === 0) return []\n\t\treturn [...ids]\n\t\t\t.map((id) => this.store.get(id))\n\t\t\t.filter((c): c is Context => Boolean(c))\n\t\t\t.map((c) => this.clone(c))\n\t}\n\n\tprivate clone(context: Context): Context {\n\t\treturn Context.rehydrate({\n\t\t\tid: context.id,\n\t\t\tprojectId: context.projectId,\n\t\t\titems: [...context.getItems()],\n\t\t})\n\t}\n}\n","import { StateId } from \"@domain/agent-loop/state/state\"\nimport { TransitionRecord } from \"@domain/agent-loop/transition/transition\"\n\nexport enum ExecutionStatus {\n\tRUNNING,\n\tCOMPLETED,\n\tFAILED,\n}\n\nexport class Execution {\n\texecutionId: string\n\tcurrentStateId: StateId\n\tpreviousStateId: StateId | null\n\tstatus: ExecutionStatus\n\tstepCount: number\n\tretryCounts: Map<StateId, number>\n\thistory: TransitionRecord[]\n\n\tconstructor(\n\t\texecutionId: string,\n\t\tcurrentStateId: StateId,\n\t\tpreviousStateId: StateId | null,\n\t\tstatus: ExecutionStatus,\n\t\tstepCount: number,\n\t\tretryCounts: Map<StateId, number>,\n\t\thistory: TransitionRecord[],\n\t) {\n\t\tthis.executionId = executionId\n\t\tthis.currentStateId = currentStateId\n\t\tthis.previousStateId = previousStateId\n\t\tthis.status = status\n\t\tthis.stepCount = stepCount\n\t\tthis.retryCounts = retryCounts\n\t\tthis.history = history\n\t}\n\n\tisTerminal(): boolean {\n\t\treturn this.status == ExecutionStatus.COMPLETED || this.status == ExecutionStatus.FAILED\n\t}\n\n\tstatic create(): Execution {\n\t\tconst executionId = crypto.randomUUID()\n\t\tconst currentStateId = StateId.INFERENCE_PENDING\n\t\tconst previousStateId = null\n\t\tconst status = ExecutionStatus.RUNNING\n\t\tconst stepCount = 0\n\t\tconst retryCounts = new Map<StateId, number>()\n\t\tconst history: TransitionRecord[] = []\n\t\treturn new Execution(executionId, currentStateId, previousStateId, status, stepCount, retryCounts, history)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { StateId } from \"@domain/agent-loop/state/state\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class GoTo implements Transition {\n\tnext: StateId\n\n\tconstructor(next: StateId) {\n\t\tthis.next = next\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.previousStateId = execution.currentStateId\n\t\texecution.currentStateId = this.next\n\t\texecution.stepCount++\n\t\texecution.history.push({\n\t\t\tfromState: execution.previousStateId,\n\t\t\ttoState: execution.currentStateId,\n\t\t\ttimestamp: new Date(),\n\t\t\tduration: 0,\n\t\t\terror: null,\n\t\t})\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class Fail implements Transition {\n\terror: string\n\n\tconstructor(error: string) {\n\t\tthis.error = error\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.status = ExecutionStatus.FAILED\n\t}\n}\n","import { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { GoTo } from \"@domain/agent-loop/transition/go-to\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\n\nexport class FunctionCallState implements State {\n\tid: StateId = StateId.FUNCTION_CALL_PENDING\n\tbeforeHookId: HookId = HookId.BEFORE_FUNCTION_CALL\n\tafterHookId: HookId = HookId.AFTER_FUNCTION_CALL\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst functionCall = runtime.inferenceResponse?.contextItems.find((item) => item.getType() === \"function_call\")\n\t\tif (!functionCall || !(functionCall instanceof FunctionCall)) {\n\t\t\tthrow new Error(\"Function call not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst functionCallOutput = runtime.functionCallOutput\n\t\tif (!functionCallOutput) {\n\t\t\treturn new Fail(\"Function call output not found\")\n\t\t}\n\t\truntime.context.addItem(functionCallOutput)\n\t\treturn new GoTo(StateId.INFERENCE_PENDING)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class Complete implements Transition {\n\tresult: string\n\tconstructor(result: string) {\n\t\tthis.result = result\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.status = ExecutionStatus.COMPLETED\n\t}\n}\n","import { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { Complete } from \"@domain/agent-loop/transition/complete\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class ModelMessageState implements State {\n\tid: StateId = StateId.MODEL_MESSAGE_RECEIVED\n\tbeforeHookId: HookId = HookId.BEFORE_MODEL_MESSAGE\n\tafterHookId: HookId = HookId.AFTER_MODEL_MESSAGE\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tif (!runtime.modelMessage) {\n\t\t\tthrow new Error(\"Model message not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tif (!runtime.modelMessage) {\n\t\t\treturn new Fail(\"Model message not found\")\n\t\t}\n\t\treturn new Complete(runtime.modelMessage.content.text)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { GoTo } from \"@domain/agent-loop/transition/go-to\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\n\nexport class InferencePendingState implements State {\n\tid: StateId = StateId.INFERENCE_PENDING\n\tbeforeHookId: HookId = HookId.BEFORE_INFERENCE\n\tafterHookId: HookId = HookId.AFTER_INFERENCE\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst inferenceRequest = runtime.inferenceRequest\n\t\tif (!inferenceRequest) {\n\t\t\tthrow new Error(\"Inference request not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst inferenceResponse = runtime.inferenceResponse\n\t\tif (!inferenceResponse) {\n\t\t\treturn new Fail(\"Inference response not found\")\n\t\t}\n\t\tif (inferenceResponse instanceof FunctionCall) {\n\t\t\treturn new GoTo(StateId.FUNCTION_CALL_PENDING)\n\t\t}\n\t\tif (inferenceResponse instanceof ModelMessage) {\n\t\t\treturn new GoTo(StateId.MODEL_MESSAGE_RECEIVED)\n\t\t}\n\t\treturn new Fail(\"Invalid response type\")\n\t}\n}\n","import { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { FunctionCallState } from \"@domain/agent-loop/state/function-call\"\nimport { ModelMessageState } from \"@domain/agent-loop/state/model-message\"\nimport { InferencePendingState } from \"@domain/agent-loop/state/inference-pending\"\nimport { State } from \"@domain/agent-loop/state/state\"\nimport { Execution } from \"@domain/agent-loop/execution\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { Context } from \"@domain/model-context/context\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\n\nexport interface RuntimeContext {\n\texecution: Execution\n\tuserMessage: UserMessage\n\tinferenceRequest?: InferenceRequest\n\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability\n\tcontext: Context\n\tinferenceResponse?: InferenceResponse\n\tfunctionCallOutput?: FunctionCallOutput\n\tmodelMessage?: ModelMessage\n}\n\nexport class AgentLoop {\n\tprivate states: Map<StateId, State> = new Map<StateId, State>()\n\n\tconstructor() {\n\t\tthis.states.set(StateId.INFERENCE_PENDING, new InferencePendingState())\n\t\tthis.states.set(StateId.FUNCTION_CALL_PENDING, new FunctionCallState())\n\t\tthis.states.set(StateId.MODEL_MESSAGE_RECEIVED, new ModelMessageState())\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\tstate.validateEntry(runtime)\n\t}\n\n\tgetStateDetails(runtime: RuntimeContext): StateDetails {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\treturn state.getDetails()\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\treturn state.next(runtime)\n\t}\n}\n","import { HookId } from \"./hook\"\n\nexport class HooksRegistry {\n\tprivate handlers: Map<HookId, (data: any) => Promise<void>> = new Map<HookId, (data: any) => Promise<void>>()\n\n\tgetHandler(hookId: HookId): (data: any) => Promise<void> {\n\t\tconst handler = this.handlers.get(hookId)\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Hook handler for hook ${hookId} not found`)\n\t\t}\n\t\treturn handler\n\t}\n\n\tregisterHandler(hookId: HookId, handler: (data: any) => Promise<void>): void {\n\t\tthis.handlers.set(hookId, handler)\n\t}\n\n\tunregisterHandler(hookId: HookId): void {\n\t\tthis.handlers.delete(hookId)\n\t}\n}\n","import { RuntimeContext } from \"../loop\"\nimport { StateId } from \"./state\"\n\nexport class StateHandlerRegistry {\n\tprivate handlers: Map<StateId, (context: RuntimeContext) => Promise<void>> = new Map<\n\t\tStateId,\n\t\t(context: RuntimeContext) => Promise<void>\n\t>()\n\n\tgetHandler(stateId: StateId): (context: RuntimeContext) => Promise<void> {\n\t\tconst handler = this.handlers.get(stateId)\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Handler for state ${stateId} not found`)\n\t\t}\n\t\treturn handler\n\t}\n\n\tregisterHandler(stateId: StateId, handler: (context: RuntimeContext) => Promise<void>): void {\n\t\tthis.handlers.set(stateId, handler)\n\t}\n\n\tunregisterHandler(stateId: StateId): void {\n\t\tthis.handlers.delete(stateId)\n\t}\n}\n","import { Execution, ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { AgentLoop, RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { Context } from \"@domain/model-context/context\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { HooksRegistry } from \"@domain/agent-loop/hooks/hooks-registry\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { StateHandlerRegistry } from \"@domain/agent-loop/state/state-registry\"\nimport { StateId } from \"@domain/agent-loop/state/state\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { OpenAIResponses } from \"@infra/providers/openai/runtime/openai-responses\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\n\nexport class AgentRuntime {\n\tprivate hooksRegistry: HooksRegistry = new HooksRegistry()\n\tprivate stateHandlerRegistry: StateHandlerRegistry = new StateHandlerRegistry()\n\n\tconstructor() {\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.INFERENCE_PENDING, this.onInferencePending)\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.FUNCTION_CALL_PENDING, this.onFunctionCallPending)\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.MODEL_MESSAGE_RECEIVED, this.onModelMessageReceived)\n\t}\n\n\tasync onInferencePending(context: RuntimeContext): Promise<void> {\n\t\tconst openaiResponses = new OpenAIResponses()\n\t\tconst inferenceRequest = new InferenceRequest(context.model, context.context)\n\t\tconst inferenceResponse = await openaiResponses.infer(inferenceRequest)\n\t\tcontext.inferenceResponse = inferenceResponse\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onFunctionCallPending(context: RuntimeContext): Promise<void> {\n\t\tconst functionCall = context.inferenceResponse?.contextItems.find((item) => item.getType() === \"function_call\")\n\t\tif (!functionCall || !(functionCall instanceof FunctionCall)) {\n\t\t\tthrow new Error(\"Function call not found\")\n\t\t}\n\n\t\tconst tool = context.model.getTools().find((tool) => tool.name === functionCall.name)\n\t\tif (!tool) {\n\t\t\tthrow new Error(\"Function not found\")\n\t\t}\n\n\t\tconst functionCallOutput = await tool.invoke(functionCall.args)\n\t\tcontext.functionCallOutput = FunctionCallOutput.create(functionCall.callId, functionCallOutput)\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onModelMessageReceived(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync on(hookId: HookId, callback: (data: any) => Promise<void>): Promise<void> {\n\t\tthis.hooksRegistry.registerHandler(hookId, callback)\n\t}\n\n\tasync start(\n\t\tuserMessage: UserMessage,\n\t\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tconst execution = Execution.create()\n\n\t\tconst loop = new AgentLoop()\n\t\tconst runtimeContext: RuntimeContext = {\n\t\t\texecution,\n\t\t\tuserMessage,\n\t\t\tmodel,\n\t\t\tcontext,\n\t\t}\n\t\twhile (!execution.isTerminal()) {\n\t\t\tconst transition = loop.next(runtimeContext)\n\t\t\tawait transition.apply(runtimeContext)\n\n\t\t\ttry {\n\t\t\t\tconst stateDetails = loop.getStateDetails(runtimeContext)\n\t\t\t\tif (stateDetails.before) {\n\t\t\t\t\tconst handler = this.hooksRegistry.getHandler(stateDetails.before)\n\t\t\t\t\tawait handler(runtimeContext)\n\t\t\t\t}\n\n\t\t\t\tif (stateDetails.after) {\n\t\t\t\t\tconst handler = this.hooksRegistry.getHandler(stateDetails.after)\n\t\t\t\t\tawait handler(runtimeContext)\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\texecution.status = ExecutionStatus.FAILED\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n","import { AgentRuntime } from \"@app/agent-runtime\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { Context } from \"@domain/model-context/context\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { InferenceVisitor } from \"./inference-visitor\"\n\nexport class Agent {\n\tprivate visitor: InferenceVisitor | undefined\n\n\tconstructor(private readonly runtime: AgentRuntime) {\n\t\tthis.runtime.on(HookId.BEFORE_INFERENCE, this.beforeInference)\n\t\tthis.runtime.on(HookId.AFTER_INFERENCE, this.afterInference)\n\t\tthis.runtime.on(HookId.BEFORE_FUNCTION_CALL, this.beforeFunctionCall)\n\t\tthis.runtime.on(HookId.AFTER_FUNCTION_CALL, this.afterFunctionCall)\n\t\tthis.runtime.on(HookId.BEFORE_MODEL_MESSAGE, this.beforeModelMessage)\n\t\tthis.runtime.on(HookId.AFTER_MODEL_MESSAGE, this.afterModelMessage)\n\t}\n\n\tasync beforeInference(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterInference(context: RuntimeContext): Promise<void> {\n\t\tconst inferenceResponse = context.inferenceResponse\n\t\tif (inferenceResponse && this.visitor) {\n\t\t\tawait this.visitor.afterInference(inferenceResponse)\n\t\t}\n\t\treturn Promise.resolve()\n\t}\n\n\tasync beforeFunctionCall(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterFunctionCall(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync beforeModelMessage(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterModelMessage(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onStart(context: RuntimeContext): Promise<void> {\n\t\tawait this.visitor?.onStart(context)\n\t\treturn Promise.resolve()\n\t}\n\n\tsetInferenceVisitor(visitor: InferenceVisitor): void {\n\t\tthis.visitor = visitor\n\t}\n\n\tasync run(\n\t\tuserMessage: string,\n\t\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tconst userMessageItem = UserMessage.create(userMessage)\n\t\treturn this.runtime.start(userMessageItem, model, context)\n\t}\n}\n"],"mappings":"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","names":["OpenAI","tool"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/domain/model-context/context.ts","../src/domain/model-context/context-item/context-item.ts","../src/domain/model-context/context-item/item-content/item-content.ts","../src/domain/model-context/context-item/item-content/input-text.ts","../src/domain/model-context/context-item/client-item/user-message.ts","../src/domain/model-context/context-item/client-item/developer-message.ts","../src/domain/model-context/context-item/item-content/output-text.ts","../src/domain/model-context/context-item/model-item/model-message.ts","../src/domain/model-context/context-item/model-item/function-call.ts","../src/domain/model-context/context-item/model-item/reasoning.ts","../src/domain/model-context/context-item/client-item/function-call-output.ts","../src/domain/generative-model/inference-response.ts","../src/domain/generative-model/token-usage.ts","../src/infrastructure/providers/openai/runtime/openai-responses.ts","../src/domain/generative-model/inference-request.ts","../src/infrastructure/providers/openai/reasoning-effort.ts","../src/infrastructure/providers/openai/models/gpt-5-4-nano.ts","../src/infrastructure/providers/openai/models/gpt-5-4.ts","../src/infrastructure/providers/openai/models/gpt-5-4-mini.ts","../src/domain/agent-loop/rules/condition/condition.ts","../src/domain/agent-loop/rules/rule/rule.ts","../src/infrastructure/repository/in-memory-context-repository.ts","../src/domain/agent-loop/execution.ts","../src/domain/agent-loop/transition/go-to.ts","../src/domain/agent-loop/transition/fail.ts","../src/domain/agent-loop/state/function-call.ts","../src/domain/agent-loop/transition/complete.ts","../src/domain/agent-loop/state/model-message.ts","../src/domain/agent-loop/state/inference-pending.ts","../src/domain/agent-loop/loop.ts","../src/domain/agent-loop/hooks/hooks-registry.ts","../src/domain/agent-loop/state/state-registry.ts","../src/application/agent-runtime.ts","../src/application/agent.ts"],"sourcesContent":["import { Context } from \"@domain/model-context/context\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { DeveloperMessage } from \"@domain/model-context/context-item/client-item/developer-message\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { Reasoning } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { ContextRepository } from \"@domain/model-context/context-repository\"\nimport { OpenAIResponses } from \"@infra/providers/openai/runtime/openai-responses\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\nimport { Gpt54Nano } from \"@infra/providers/openai/models/gpt-5-4-nano\"\nimport { Gpt54 } from \"@infra/providers/openai/models/gpt-5-4\"\nimport { Gpt54Mini } from \"@infra/providers/openai/models/gpt-5-4-mini\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { BaseCondition, Condition } from \"@domain/agent-loop/rules/condition/condition\"\nimport { Action, If, Loop, AsyncAction, AsyncRule } from \"@domain/agent-loop/rules/rule/rule\"\nimport { InMemoryContextRepository } from \"@infra/repository/in-memory-context-repository\"\nimport { AgentRuntime } from \"@app/agent-runtime\"\nimport { Agent } from \"@app/agent\"\nimport { InferenceVisitor } from \"@app/inference-visitor\"\n\nexport {\n\tContext,\n\tContextItem,\n\tUserMessage,\n\tDeveloperMessage,\n\tModelMessage,\n\tFunctionCall,\n\tFunctionCallOutput,\n\tReasoning,\n\tGenerativeModel,\n\tContextRepository,\n\tInMemoryContextRepository,\n\tOpenAIResponses,\n\tGpt54,\n\tGpt54Mini,\n\tGpt54Nano,\n\tInferenceRequest,\n\tInferenceResponse,\n\tTokenUsage,\n\tInputTokenDetails,\n\tOutputTokenDetails,\n\tTool,\n\tCondition,\n\tBaseCondition,\n\tAction,\n\tAsyncAction,\n\tAsyncRule,\n\tIf,\n\tLoop,\n\tAgent,\n\tAgentRuntime,\n\tInferenceVisitor,\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class Context {\n\treadonly id: string\n\treadonly projectId: string\n\treadonly items: ContextItem[]\n\n\tconstructor(id: string, projectId: string, items: ContextItem[]) {\n\t\tthis.projectId = projectId\n\t\tthis.id = id\n\t\tthis.items = items\n\t}\n\n\taddItem(item: ContextItem): Context {\n\t\tthis.items.push(item)\n\t\treturn this\n\t}\n\n\tapplyModelOutput(items: ContextItem[]): Context {\n\t\tfor (const item of items) {\n\t\t\tconst itemType = item.getType()\n\t\t\tif (itemType !== \"function_call\" && itemType !== \"message\" && itemType !== \"reasoning\") {\n\t\t\t\tthrow new Error(`Invalid item type: ${itemType}`)\n\t\t\t}\n\t\t}\n\t\tthis.items.push(...items)\n\t\treturn this\n\t}\n\n\tgetItems(): ContextItem[] {\n\t\treturn this.items\n\t}\n\n\tstatic create(projectId: string): Context {\n\t\tconst id = crypto.randomUUID()\n\t\treturn new Context(id, projectId, [])\n\t}\n\n\tstatic rehydrate(data: { id: string; projectId: string; items: ContextItem[] }): Context {\n\t\treturn new Context(data.id, data.projectId, data.items)\n\t}\n\n\ttoJSON(): any {\n\t\treturn this.items.map((item) => item.toJSON())\n\t}\n}\n","export abstract class ContextItem {\n\tabstract readonly type: string\n\n\tgetType(): string {\n\t\treturn this.type\n\t}\n\n\tabstract toJSON(): any\n}\n","export abstract class ItemContent {\n\tabstract readonly type: string\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class InputText extends ItemContent {\n\treadonly type = \"input_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic create(text: string): InputText {\n\t\treturn new InputText(text)\n\t}\n\n\tstatic rehydrate(data: { text: string }): InputText {\n\t\treturn new InputText(data.text)\n\t}\n\n\ttoJSON(): any[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: this.type,\n\t\t\t\ttext: this.text,\n\t\t\t},\n\t\t]\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class UserMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"user\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): UserMessage {\n\t\tconst content = InputText.create(text)\n\t\treturn new UserMessage(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): UserMessage {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new UserMessage(content)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class DeveloperMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"developer\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n\n\tstatic create(text: string): DeveloperMessage {\n\t\tconst content = InputText.create(text)\n\t\treturn new DeveloperMessage(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): DeveloperMessage {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new DeveloperMessage(content)\n\t}\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class OutputText extends ItemContent {\n\treadonly type = \"output_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic rehydrate(data: { text: string }): OutputText {\n\t\treturn new OutputText(data.text)\n\t}\n\n\ttoJSON(): any[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: this.type,\n\t\t\t\ttext: this.text,\n\t\t\t},\n\t\t]\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { OutputText } from \"@domain/model-context/context-item/item-content/output-text\"\n\nexport class ModelMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"assistant\"\n\treadonly content: OutputText\n\n\tprivate constructor(content: OutputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic rehydrate(data: { text: string }): ModelMessage {\n\t\tconst content = OutputText.rehydrate(data)\n\t\treturn new ModelMessage(content)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class FunctionCall extends ContextItem {\n\treadonly type = \"function_call\"\n\treadonly callId: string\n\treadonly name: string\n\treadonly args: string\n\n\tprivate constructor(callId: string, name: string, args: string) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.name = name\n\t\tthis.args = args\n\t}\n\n\tstatic rehydrate(data: { callId: string; name: string; args: string }): FunctionCall {\n\t\treturn new FunctionCall(data.callId, data.name, data.args)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcall_id: this.callId,\n\t\t\tname: this.name,\n\t\t\targuments: this.args,\n\t\t}\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { SummaryText } from \"@domain/model-context/context-item/item-content/summary-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class Reasoning extends ContextItem {\n\treadonly type = \"reasoning\"\n\treadonly content: InputText | undefined\n\treadonly encryptedContent: string | undefined\n\treadonly summary: SummaryText[]\n\n\tprivate constructor(\n\t\tcontent: InputText | undefined,\n\t\tencryptedContent?: string | undefined,\n\t\tsummary: SummaryText[] = [],\n\t) {\n\t\tsuper()\n\t\tthis.content = content\n\t\tthis.encryptedContent = encryptedContent\n\t\tthis.summary = summary\n\t}\n\n\tstatic rehydrate(data: {\n\t\tcontent: InputText | undefined\n\t\tencryptedContent: string | undefined\n\t\tsummary: SummaryText[]\n\t}): Reasoning {\n\t\treturn new Reasoning(data.content, data.encryptedContent, data.summary)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcontent: this.content?.toJSON(),\n\t\t\tencryptedContent: this.encryptedContent,\n\t\t\tsummary: this.summary.map((s) => s.toJSON()),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class FunctionCallOutput extends ContextItem {\n\treadonly type = \"function_call_output\"\n\treadonly callId: string\n\treadonly output: InputText\n\n\tprivate constructor(callId: string, output: InputText) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.output = output\n\t}\n\n\tstatic create(callId: string, output: string): FunctionCallOutput {\n\t\tconst outputText = InputText.create(output)\n\t\treturn new FunctionCallOutput(callId, outputText)\n\t}\n\n\tstatic rehydrate(data: { callId: string; output: InputText }): FunctionCallOutput {\n\t\treturn new FunctionCallOutput(data.callId, data.output)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcall_id: this.callId,\n\t\t\toutput: this.output.toJSON(),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { TokenUsage } from \"@domain/generative-model/token-usage\"\n\nexport class InferenceResponse {\n\treadonly contextItems: ContextItem[]\n\treadonly tokenUsage?: TokenUsage\n\n\tconstructor(contextItems: ContextItem[], tokenUsage: TokenUsage | undefined) {\n\t\tthis.contextItems = contextItems\n\t\tthis.tokenUsage = tokenUsage\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 { Context } from \"@domain/model-context/context\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { Reasoning } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { ModelRuntime } from \"@domain/generative-model/runtime/model-runtime\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport OpenAI from \"openai\"\n\nexport class OpenAIResponses implements ModelRuntime {\n\tprivate readonly client: OpenAI\n\tconstructor() {\n\t\tthis.client = new OpenAI()\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResponse> {\n\t\tconst input = this.mapContextToRequest(inferenceRequest.context)\n\n\t\tconst specification = inferenceRequest.model.specification\n\n\t\tlet request: any = {\n\t\t\tmodel: specification.name,\n\t\t\tinput: input,\n\t\t}\n\n\t\tif (specification.supportFunctionCalling && inferenceRequest.model.getTools().length > 0) {\n\t\t\trequest.tools = inferenceRequest.model.getTools().map((tool) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: tool.type,\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 (specification.supportReasoningEffort) {\n\t\t\trequest.reasoning = {\n\t\t\t\teffort: inferenceRequest.model.getReasoningEffort(),\n\t\t\t}\n\t\t}\n\n\t\tconst response = await this.client.responses.create(request)\n\n\t\tconst contextItems = this.extractContextItems(response)\n\t\tconst tokenUsage = this.extractTokenUsage(response)\n\t\treturn new InferenceResponse(contextItems, tokenUsage)\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),\n\t\t\tnew OutputTokenDetails(response.usage.output_tokens_details.reasoning_tokens),\n\t\t)\n\t}\n\n\tmapContextToRequest(context: Context): any[] {\n\t\treturn context.getItems().map((item) => item.toJSON())\n\t}\n\n\textractContextItems(response: any): ContextItem[] {\n\t\treturn response.output.map((item: any) => {\n\t\t\tif (item.type === \"message\" && item.role === \"assistant\") {\n\t\t\t\treturn ModelMessage.rehydrate(item.content[0] as { text: string })\n\t\t\t}\n\t\t\tif (item.type === \"function_call\") {\n\t\t\t\treturn FunctionCall.rehydrate({\n\t\t\t\t\tcallId: item.call_id,\n\t\t\t\t\tname: item.name,\n\t\t\t\t\targs: item.arguments,\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\treturn Reasoning.rehydrate(item)\n\t\t\t}\n\t\t})\n\t}\n}\n","import { Context } from \"@domain/model-context/context\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\n\nexport class InferenceRequest {\n\treadonly model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability\n\treadonly context: Context\n\n\tconstructor(model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability, context: Context) {\n\t\tthis.model = model\n\t\tthis.context = context\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\n\nexport type OpenAIReasoningEffortType = \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"\n\nexport class OpenAIReasoningEffort implements ReasoningEffort<OpenAIReasoningEffortType> {\n\treasoningEffort: OpenAIReasoningEffortType\n\n\tconstructor(reasoningEffort: OpenAIReasoningEffortType) {\n\t\tthis.reasoningEffort = reasoningEffort\n\t}\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.reasoningEffort = effort\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\tif (!this.reasoningEffort) {\n\t\t\tthrow new Error(\"Reasoning effort not supported\")\n\t\t}\n\t\treturn this.reasoningEffort\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54Nano implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4-nano\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 400_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54 implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 1_050_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54Mini implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4-mini\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 400_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n}\n","export interface Condition<T> {\n\tisSatisfiedBy(candidate: T): boolean\n\tand(other: Condition<T>): Condition<T>\n\tor(other: Condition<T>): Condition<T>\n\tnot(): Condition<T>\n}\n\nexport abstract class BaseCondition<T> implements Condition<T> {\n\tabstract isSatisfiedBy(candidate: T): boolean\n\n\tand(other: Condition<T>): Condition<T> {\n\t\treturn new AndCondition(this, other)\n\t}\n\n\tor(other: Condition<T>): Condition<T> {\n\t\treturn new OrCondition(this, other)\n\t}\n\n\tnot(): Condition<T> {\n\t\treturn new NotCondition(this)\n\t}\n}\n\nexport class AndCondition<T> extends BaseCondition<T> {\n\tconstructor(\n\t\tprivate readonly left: Condition<T>,\n\t\tprivate readonly right: Condition<T>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn this.left.isSatisfiedBy(candidate) && this.right.isSatisfiedBy(candidate)\n\t}\n}\n\nexport class NotCondition<T> extends BaseCondition<T> {\n\tconstructor(private readonly condition: Condition<T>) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn !this.condition.isSatisfiedBy(candidate)\n\t}\n}\n\nexport class OrCondition<T> extends BaseCondition<T> {\n\tconstructor(\n\t\tprivate readonly left: Condition<T>,\n\t\tprivate readonly right: Condition<T>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn this.left.isSatisfiedBy(candidate) || this.right.isSatisfiedBy(candidate)\n\t}\n}\n","import { Condition } from \"@domain/agent-loop/rules/condition/condition\"\n\nexport interface Action<T> {\n\tapply(candidate: T): T\n}\n\nexport interface AsyncAction<T> {\n\tapply(candidate: T): Promise<T>\n}\n\nexport interface AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\tapply(candidate: T): Promise<T>\n}\n\nexport class If<T> implements AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\n\tconstructor({ condition, action }: { condition: Condition<T>; action: AsyncAction<T> }) {\n\t\tthis.condition = condition\n\t\tthis.action = action\n\t}\n\n\tasync apply(candidate: T): Promise<T> {\n\t\tif (this.condition.isSatisfiedBy(candidate)) {\n\t\t\treturn await this.action.apply(candidate)\n\t\t}\n\t\treturn candidate\n\t}\n}\n\nexport class Loop<T> implements AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\n\tconstructor({ condition, action }: { condition: Condition<T>; action: AsyncAction<T> }) {\n\t\tthis.condition = condition\n\t\tthis.action = action\n\t}\n\n\tasync apply(candidate: T): Promise<T> {\n\t\twhile (this.condition.isSatisfiedBy(candidate)) {\n\t\t\tcandidate = await this.action.apply(candidate)\n\t\t}\n\t\treturn candidate\n\t}\n}\n","import { Context } from \"@domain/model-context/context\"\nimport { ContextRepository } from \"@domain/model-context/context-repository\"\n\nexport class InMemoryContextRepository implements ContextRepository {\n\tprivate readonly store = new Map<string, Context>()\n\tprivate readonly projectIndex = new Map<string, Set<string>>()\n\n\tasync save(context: Context): Promise<void> {\n\t\tconst existing = this.store.get(context.id)\n\t\tif (existing && existing.projectId !== context.projectId) {\n\t\t\tconst prevSet = this.projectIndex.get(existing.projectId)\n\t\t\tprevSet?.delete(existing.id)\n\t\t\tif (prevSet && prevSet.size === 0) this.projectIndex.delete(existing.projectId)\n\t\t}\n\n\t\tthis.store.set(context.id, this.clone(context))\n\n\t\tlet set = this.projectIndex.get(context.projectId)\n\t\tif (!set) {\n\t\t\tset = new Set<string>()\n\t\t\tthis.projectIndex.set(context.projectId, set)\n\t\t}\n\t\tset.add(context.id)\n\t}\n\n\tasync get(id: string): Promise<Context> {\n\t\tconst context = this.store.get(id)\n\t\tif (!context) {\n\t\t\tthrow new Error(`Context not found: ${id}`)\n\t\t}\n\t\treturn this.clone(context)\n\t}\n\n\tasync getByProjectId(projectId: string): Promise<Context[]> {\n\t\tconst ids = this.projectIndex.get(projectId)\n\t\tif (!ids || ids.size === 0) return []\n\t\treturn [...ids]\n\t\t\t.map((id) => this.store.get(id))\n\t\t\t.filter((c): c is Context => Boolean(c))\n\t\t\t.map((c) => this.clone(c))\n\t}\n\n\tprivate clone(context: Context): Context {\n\t\treturn Context.rehydrate({\n\t\t\tid: context.id,\n\t\t\tprojectId: context.projectId,\n\t\t\titems: [...context.getItems()],\n\t\t})\n\t}\n}\n","import { StateId } from \"@domain/agent-loop/state/state\"\nimport { TransitionRecord } from \"@domain/agent-loop/transition/transition\"\n\nexport enum ExecutionStatus {\n\tRUNNING,\n\tCOMPLETED,\n\tFAILED,\n}\n\nexport class Execution {\n\texecutionId: string\n\tcurrentStateId: StateId\n\tpreviousStateId: StateId | null\n\tstatus: ExecutionStatus\n\tstepCount: number\n\tretryCounts: Map<StateId, number>\n\thistory: TransitionRecord[]\n\n\tconstructor(\n\t\texecutionId: string,\n\t\tcurrentStateId: StateId,\n\t\tpreviousStateId: StateId | null,\n\t\tstatus: ExecutionStatus,\n\t\tstepCount: number,\n\t\tretryCounts: Map<StateId, number>,\n\t\thistory: TransitionRecord[],\n\t) {\n\t\tthis.executionId = executionId\n\t\tthis.currentStateId = currentStateId\n\t\tthis.previousStateId = previousStateId\n\t\tthis.status = status\n\t\tthis.stepCount = stepCount\n\t\tthis.retryCounts = retryCounts\n\t\tthis.history = history\n\t}\n\n\tisTerminal(): boolean {\n\t\treturn this.status == ExecutionStatus.COMPLETED || this.status == ExecutionStatus.FAILED\n\t}\n\n\tstatic create(): Execution {\n\t\tconst executionId = crypto.randomUUID()\n\t\tconst currentStateId = StateId.INFERENCE_PENDING\n\t\tconst previousStateId = null\n\t\tconst status = ExecutionStatus.RUNNING\n\t\tconst stepCount = 0\n\t\tconst retryCounts = new Map<StateId, number>()\n\t\tconst history: TransitionRecord[] = []\n\t\treturn new Execution(executionId, currentStateId, previousStateId, status, stepCount, retryCounts, history)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { StateId } from \"@domain/agent-loop/state/state\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class GoTo implements Transition {\n\tnext: StateId\n\n\tconstructor(next: StateId) {\n\t\tthis.next = next\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.previousStateId = execution.currentStateId\n\t\texecution.currentStateId = this.next\n\t\texecution.stepCount++\n\t\texecution.history.push({\n\t\t\tfromState: execution.previousStateId,\n\t\t\ttoState: execution.currentStateId,\n\t\t\ttimestamp: new Date(),\n\t\t\tduration: 0,\n\t\t\terror: null,\n\t\t})\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class Fail implements Transition {\n\terror: string\n\n\tconstructor(error: string) {\n\t\tthis.error = error\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.status = ExecutionStatus.FAILED\n\t}\n}\n","import { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { GoTo } from \"@domain/agent-loop/transition/go-to\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\n\nexport class FunctionCallState implements State {\n\tid: StateId = StateId.FUNCTION_CALL_PENDING\n\tbeforeHookId: HookId = HookId.BEFORE_FUNCTION_CALL\n\tafterHookId: HookId = HookId.AFTER_FUNCTION_CALL\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst functionCall = runtime.inferenceResponse?.contextItems.find((item) => item.getType() === \"function_call\")\n\t\tif (!functionCall || !(functionCall instanceof FunctionCall)) {\n\t\t\tthrow new Error(\"Function call not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst functionCallOutput = runtime.functionCallOutput\n\t\tif (!functionCallOutput) {\n\t\t\treturn new Fail(\"Function call output not found\")\n\t\t}\n\t\truntime.context.addItem(functionCallOutput)\n\t\treturn new GoTo(StateId.INFERENCE_PENDING)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class Complete implements Transition {\n\tresult: string\n\tconstructor(result: string) {\n\t\tthis.result = result\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.status = ExecutionStatus.COMPLETED\n\t}\n}\n","import { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { Complete } from \"@domain/agent-loop/transition/complete\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class ModelMessageState implements State {\n\tid: StateId = StateId.MODEL_MESSAGE_RECEIVED\n\tbeforeHookId: HookId = HookId.BEFORE_MODEL_MESSAGE\n\tafterHookId: HookId = HookId.AFTER_MODEL_MESSAGE\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tif (!runtime.modelMessage) {\n\t\t\tthrow new Error(\"Model message not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tif (!runtime.modelMessage) {\n\t\t\treturn new Fail(\"Model message not found\")\n\t\t}\n\t\treturn new Complete(runtime.modelMessage.content.text)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { GoTo } from \"@domain/agent-loop/transition/go-to\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\n\nexport class InferencePendingState implements State {\n\tid: StateId = StateId.INFERENCE_PENDING\n\tbeforeHookId: HookId = HookId.BEFORE_INFERENCE\n\tafterHookId: HookId = HookId.AFTER_INFERENCE\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst inferenceRequest = runtime.inferenceRequest\n\t\tif (!inferenceRequest) {\n\t\t\tthrow new Error(\"Inference request not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst inferenceResponse = runtime.inferenceResponse\n\t\tif (!inferenceResponse) {\n\t\t\treturn new Fail(\"Inference response not found\")\n\t\t}\n\t\tif (inferenceResponse instanceof FunctionCall) {\n\t\t\treturn new GoTo(StateId.FUNCTION_CALL_PENDING)\n\t\t}\n\t\tif (inferenceResponse instanceof ModelMessage) {\n\t\t\treturn new GoTo(StateId.MODEL_MESSAGE_RECEIVED)\n\t\t}\n\t\treturn new Fail(\"Invalid response type\")\n\t}\n}\n","import { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { FunctionCallState } from \"@domain/agent-loop/state/function-call\"\nimport { ModelMessageState } from \"@domain/agent-loop/state/model-message\"\nimport { InferencePendingState } from \"@domain/agent-loop/state/inference-pending\"\nimport { State } from \"@domain/agent-loop/state/state\"\nimport { Execution } from \"@domain/agent-loop/execution\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { Context } from \"@domain/model-context/context\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\n\nexport interface RuntimeContext {\n\texecution: Execution\n\tuserMessage: UserMessage\n\tinferenceRequest?: InferenceRequest\n\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability\n\tcontext: Context\n\tinferenceResponse?: InferenceResponse\n\tfunctionCallOutput?: FunctionCallOutput\n\tmodelMessage?: ModelMessage\n\terror?: Error\n}\n\nexport class AgentLoop {\n\tprivate states: Map<StateId, State> = new Map<StateId, State>()\n\n\tconstructor() {\n\t\tthis.states.set(StateId.INFERENCE_PENDING, new InferencePendingState())\n\t\tthis.states.set(StateId.FUNCTION_CALL_PENDING, new FunctionCallState())\n\t\tthis.states.set(StateId.MODEL_MESSAGE_RECEIVED, new ModelMessageState())\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\tstate.validateEntry(runtime)\n\t}\n\n\tgetStateDetails(runtime: RuntimeContext): StateDetails {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\treturn state.getDetails()\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\treturn state.next(runtime)\n\t}\n}\n","import { HookId } from \"./hook\"\n\nexport class HooksRegistry {\n\tprivate handlers: Map<HookId, (data: any) => Promise<void>> = new Map<HookId, (data: any) => Promise<void>>()\n\n\tgetHandler(hookId: HookId): (data: any) => Promise<void> {\n\t\tconst handler = this.handlers.get(hookId)\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Hook handler for hook ${hookId} not found`)\n\t\t}\n\t\treturn handler\n\t}\n\n\tregisterHandler(hookId: HookId, handler: (data: any) => Promise<void>): void {\n\t\tthis.handlers.set(hookId, handler)\n\t}\n\n\tunregisterHandler(hookId: HookId): void {\n\t\tthis.handlers.delete(hookId)\n\t}\n}\n","import { RuntimeContext } from \"../loop\"\nimport { StateId } from \"./state\"\n\nexport class StateHandlerRegistry {\n\tprivate handlers: Map<StateId, (context: RuntimeContext) => Promise<void>> = new Map<\n\t\tStateId,\n\t\t(context: RuntimeContext) => Promise<void>\n\t>()\n\n\tgetHandler(stateId: StateId): (context: RuntimeContext) => Promise<void> {\n\t\tconst handler = this.handlers.get(stateId)\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Handler for state ${stateId} not found`)\n\t\t}\n\t\treturn handler\n\t}\n\n\tregisterHandler(stateId: StateId, handler: (context: RuntimeContext) => Promise<void>): void {\n\t\tthis.handlers.set(stateId, handler)\n\t}\n\n\tunregisterHandler(stateId: StateId): void {\n\t\tthis.handlers.delete(stateId)\n\t}\n}\n","import { Execution, ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { AgentLoop, RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { Context } from \"@domain/model-context/context\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { HooksRegistry } from \"@domain/agent-loop/hooks/hooks-registry\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { StateHandlerRegistry } from \"@domain/agent-loop/state/state-registry\"\nimport { StateId } from \"@domain/agent-loop/state/state\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { OpenAIResponses } from \"@infra/providers/openai/runtime/openai-responses\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\n\nexport class AgentRuntime {\n\tprivate hooksRegistry: HooksRegistry = new HooksRegistry()\n\tprivate stateHandlerRegistry: StateHandlerRegistry = new StateHandlerRegistry()\n\n\tconstructor() {\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.INFERENCE_PENDING, this.onInferencePending)\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.FUNCTION_CALL_PENDING, this.onFunctionCallPending)\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.MODEL_MESSAGE_RECEIVED, this.onModelMessageReceived)\n\t\tthis.hooksRegistry.registerHandler(HookId.ON_ERROR, this.onError)\n\t}\n\n\tasync onInferencePending(context: RuntimeContext): Promise<void> {\n\t\tconst openaiResponses = new OpenAIResponses()\n\t\tconst inferenceRequest = new InferenceRequest(context.model, context.context)\n\t\tconst inferenceResponse = await openaiResponses.infer(inferenceRequest)\n\t\tcontext.inferenceResponse = inferenceResponse\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onFunctionCallPending(context: RuntimeContext): Promise<void> {\n\t\tconst functionCall = context.inferenceResponse?.contextItems.find((item) => item.getType() === \"function_call\")\n\t\tif (!functionCall || !(functionCall instanceof FunctionCall)) {\n\t\t\tthrow new Error(\"Function call not found\")\n\t\t}\n\n\t\tconst tool = context.model.getTools().find((tool) => tool.name === functionCall.name)\n\t\tif (!tool) {\n\t\t\tthrow new Error(\"Function not found\")\n\t\t}\n\n\t\tconst functionCallOutput = await tool.invoke(functionCall.args)\n\t\tcontext.functionCallOutput = FunctionCallOutput.create(functionCall.callId, functionCallOutput)\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onError(context: RuntimeContext): Promise<void> {\n\t\tconst error = context.error\n\t\tif (!error) {\n\t\t\tthrow new Error(\"Error not found\")\n\t\t}\n\t\tconsole.error(error)\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onModelMessageReceived(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync on(hookId: HookId, callback: (data: any) => Promise<void>): Promise<void> {\n\t\tthis.hooksRegistry.registerHandler(hookId, callback)\n\t}\n\n\tasync start(\n\t\tuserMessage: UserMessage,\n\t\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tconsole.log(\"Starting agent runtime\")\n\t\tconst execution = Execution.create()\n\n\t\tconst loop = new AgentLoop()\n\t\tconst runtimeContext: RuntimeContext = {\n\t\t\texecution,\n\t\t\tuserMessage,\n\t\t\tmodel,\n\t\t\tcontext,\n\t\t}\n\t\twhile (!execution.isTerminal()) {\n\t\t\tconsole.log(\"Executing state\", execution.currentStateId)\n\t\t\tconst transition = loop.next(runtimeContext)\n\t\t\tawait transition.apply(runtimeContext)\n\n\t\t\ttry {\n\t\t\t\tconst stateDetails = loop.getStateDetails(runtimeContext)\n\t\t\t\tif (stateDetails.before) {\n\t\t\t\t\tconst handler = this.hooksRegistry.getHandler(stateDetails.before)\n\t\t\t\t\tawait handler(runtimeContext)\n\t\t\t\t}\n\n\t\t\t\tif (stateDetails.after) {\n\t\t\t\t\tconst handler = this.hooksRegistry.getHandler(stateDetails.after)\n\t\t\t\t\tawait handler(runtimeContext)\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\texecution.status = ExecutionStatus.FAILED\n\t\t\t\tconst handler = this.hooksRegistry.getHandler(HookId.ON_ERROR)\n\t\t\t\truntimeContext.error = error as Error\n\t\t\t\tawait handler(runtimeContext)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n","import { AgentRuntime } from \"@app/agent-runtime\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { Context } from \"@domain/model-context/context\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { InferenceVisitor } from \"./inference-visitor\"\n\nexport class Agent {\n\tprivate visitor: InferenceVisitor | undefined\n\n\tconstructor(private readonly runtime: AgentRuntime) {\n\t\tthis.runtime.on(HookId.BEFORE_INFERENCE, this.beforeInference)\n\t\tthis.runtime.on(HookId.AFTER_INFERENCE, this.afterInference)\n\t\tthis.runtime.on(HookId.BEFORE_FUNCTION_CALL, this.beforeFunctionCall)\n\t\tthis.runtime.on(HookId.AFTER_FUNCTION_CALL, this.afterFunctionCall)\n\t\tthis.runtime.on(HookId.BEFORE_MODEL_MESSAGE, this.beforeModelMessage)\n\t\tthis.runtime.on(HookId.AFTER_MODEL_MESSAGE, this.afterModelMessage)\n\t\tthis.runtime.on(HookId.ON_ERROR, this.onError)\n\t}\n\n\tasync beforeInference(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterInference(context: RuntimeContext): Promise<void> {\n\t\tconst inferenceResponse = context.inferenceResponse\n\t\tif (inferenceResponse && this.visitor) {\n\t\t\tawait this.visitor.afterInference(inferenceResponse)\n\t\t}\n\t\treturn Promise.resolve()\n\t}\n\n\tasync beforeFunctionCall(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterFunctionCall(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync beforeModelMessage(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterModelMessage(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onError(context: RuntimeContext): Promise<void> {\n\t\tconsole.log(\"Error occurred\", context.error)\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onStart(context: RuntimeContext): Promise<void> {\n\t\tawait this.visitor?.onStart(context)\n\t\treturn Promise.resolve()\n\t}\n\n\tsetInferenceVisitor(visitor: InferenceVisitor): void {\n\t\tthis.visitor = visitor\n\t}\n\n\tasync run(\n\t\tuserMessage: string,\n\t\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tconst userMessageItem = UserMessage.create(userMessage)\n\t\treturn this.runtime.start(userMessageItem, model, context)\n\t}\n}\n"],"mappings":"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","names":["OpenAI","tool"]}
|
package/dist/index.mjs
CHANGED
|
@@ -791,6 +791,7 @@ var AgentRuntime = class {
|
|
|
791
791
|
this.stateHandlerRegistry.registerHandler("INFERENCE_PENDING" /* INFERENCE_PENDING */, this.onInferencePending);
|
|
792
792
|
this.stateHandlerRegistry.registerHandler("FUNCTION_CALL_PENDING" /* FUNCTION_CALL_PENDING */, this.onFunctionCallPending);
|
|
793
793
|
this.stateHandlerRegistry.registerHandler("MODEL_MESSAGE_RECEIVED" /* MODEL_MESSAGE_RECEIVED */, this.onModelMessageReceived);
|
|
794
|
+
this.hooksRegistry.registerHandler("ON_ERROR" /* ON_ERROR */, this.onError);
|
|
794
795
|
}
|
|
795
796
|
async onInferencePending(context) {
|
|
796
797
|
const openaiResponses = new OpenAIResponses();
|
|
@@ -813,6 +814,14 @@ var AgentRuntime = class {
|
|
|
813
814
|
context.functionCallOutput = FunctionCallOutput.create(functionCall.callId, functionCallOutput);
|
|
814
815
|
return Promise.resolve();
|
|
815
816
|
}
|
|
817
|
+
async onError(context) {
|
|
818
|
+
const error = context.error;
|
|
819
|
+
if (!error) {
|
|
820
|
+
throw new Error("Error not found");
|
|
821
|
+
}
|
|
822
|
+
console.error(error);
|
|
823
|
+
return Promise.resolve();
|
|
824
|
+
}
|
|
816
825
|
async onModelMessageReceived(context) {
|
|
817
826
|
return Promise.resolve();
|
|
818
827
|
}
|
|
@@ -820,6 +829,7 @@ var AgentRuntime = class {
|
|
|
820
829
|
this.hooksRegistry.registerHandler(hookId, callback);
|
|
821
830
|
}
|
|
822
831
|
async start(userMessage, model, context) {
|
|
832
|
+
console.log("Starting agent runtime");
|
|
823
833
|
const execution = Execution.create();
|
|
824
834
|
const loop = new AgentLoop();
|
|
825
835
|
const runtimeContext = {
|
|
@@ -829,6 +839,7 @@ var AgentRuntime = class {
|
|
|
829
839
|
context
|
|
830
840
|
};
|
|
831
841
|
while (!execution.isTerminal()) {
|
|
842
|
+
console.log("Executing state", execution.currentStateId);
|
|
832
843
|
const transition = loop.next(runtimeContext);
|
|
833
844
|
await transition.apply(runtimeContext);
|
|
834
845
|
try {
|
|
@@ -843,6 +854,9 @@ var AgentRuntime = class {
|
|
|
843
854
|
}
|
|
844
855
|
} catch (error) {
|
|
845
856
|
execution.status = 2 /* FAILED */;
|
|
857
|
+
const handler = this.hooksRegistry.getHandler("ON_ERROR" /* ON_ERROR */);
|
|
858
|
+
runtimeContext.error = error;
|
|
859
|
+
await handler(runtimeContext);
|
|
846
860
|
break;
|
|
847
861
|
}
|
|
848
862
|
}
|
|
@@ -859,6 +873,7 @@ var Agent = class {
|
|
|
859
873
|
this.runtime.on("AFTER_FUNCTION_CALL" /* AFTER_FUNCTION_CALL */, this.afterFunctionCall);
|
|
860
874
|
this.runtime.on("BEFORE_MODEL_MESSAGE" /* BEFORE_MODEL_MESSAGE */, this.beforeModelMessage);
|
|
861
875
|
this.runtime.on("AFTER_MODEL_MESSAGE" /* AFTER_MODEL_MESSAGE */, this.afterModelMessage);
|
|
876
|
+
this.runtime.on("ON_ERROR" /* ON_ERROR */, this.onError);
|
|
862
877
|
}
|
|
863
878
|
async beforeInference(context) {
|
|
864
879
|
return Promise.resolve();
|
|
@@ -882,6 +897,10 @@ var Agent = class {
|
|
|
882
897
|
async afterModelMessage(context) {
|
|
883
898
|
return Promise.resolve();
|
|
884
899
|
}
|
|
900
|
+
async onError(context) {
|
|
901
|
+
console.log("Error occurred", context.error);
|
|
902
|
+
return Promise.resolve();
|
|
903
|
+
}
|
|
885
904
|
async onStart(context) {
|
|
886
905
|
var _a;
|
|
887
906
|
await ((_a = this.visitor) == null ? void 0 : _a.onStart(context));
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/domain/model-context/context.ts","../src/domain/model-context/context-item/context-item.ts","../src/domain/model-context/context-item/item-content/item-content.ts","../src/domain/model-context/context-item/item-content/input-text.ts","../src/domain/model-context/context-item/client-item/user-message.ts","../src/domain/model-context/context-item/client-item/developer-message.ts","../src/domain/model-context/context-item/item-content/output-text.ts","../src/domain/model-context/context-item/model-item/model-message.ts","../src/domain/model-context/context-item/model-item/function-call.ts","../src/domain/model-context/context-item/model-item/reasoning.ts","../src/domain/model-context/context-item/client-item/function-call-output.ts","../src/domain/generative-model/inference-response.ts","../src/domain/generative-model/token-usage.ts","../src/infrastructure/providers/openai/runtime/openai-responses.ts","../src/domain/generative-model/inference-request.ts","../src/infrastructure/providers/openai/reasoning-effort.ts","../src/infrastructure/providers/openai/models/gpt-5-4-nano.ts","../src/infrastructure/providers/openai/models/gpt-5-4.ts","../src/infrastructure/providers/openai/models/gpt-5-4-mini.ts","../src/domain/agent-loop/rules/condition/condition.ts","../src/domain/agent-loop/rules/rule/rule.ts","../src/infrastructure/repository/in-memory-context-repository.ts","../src/domain/agent-loop/execution.ts","../src/domain/agent-loop/transition/go-to.ts","../src/domain/agent-loop/transition/fail.ts","../src/domain/agent-loop/state/function-call.ts","../src/domain/agent-loop/transition/complete.ts","../src/domain/agent-loop/state/model-message.ts","../src/domain/agent-loop/state/inference-pending.ts","../src/domain/agent-loop/loop.ts","../src/domain/agent-loop/hooks/hooks-registry.ts","../src/domain/agent-loop/state/state-registry.ts","../src/application/agent-runtime.ts","../src/application/agent.ts"],"sourcesContent":["import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class Context {\n\treadonly id: string\n\treadonly projectId: string\n\treadonly items: ContextItem[]\n\n\tconstructor(id: string, projectId: string, items: ContextItem[]) {\n\t\tthis.projectId = projectId\n\t\tthis.id = id\n\t\tthis.items = items\n\t}\n\n\taddItem(item: ContextItem): Context {\n\t\tthis.items.push(item)\n\t\treturn this\n\t}\n\n\tapplyModelOutput(items: ContextItem[]): Context {\n\t\tfor (const item of items) {\n\t\t\tconst itemType = item.getType()\n\t\t\tif (itemType !== \"function_call\" && itemType !== \"message\" && itemType !== \"reasoning\") {\n\t\t\t\tthrow new Error(`Invalid item type: ${itemType}`)\n\t\t\t}\n\t\t}\n\t\tthis.items.push(...items)\n\t\treturn this\n\t}\n\n\tgetItems(): ContextItem[] {\n\t\treturn this.items\n\t}\n\n\tstatic create(projectId: string): Context {\n\t\tconst id = crypto.randomUUID()\n\t\treturn new Context(id, projectId, [])\n\t}\n\n\tstatic rehydrate(data: { id: string; projectId: string; items: ContextItem[] }): Context {\n\t\treturn new Context(data.id, data.projectId, data.items)\n\t}\n\n\ttoJSON(): any {\n\t\treturn this.items.map((item) => item.toJSON())\n\t}\n}\n","export abstract class ContextItem {\n\tabstract readonly type: string\n\n\tgetType(): string {\n\t\treturn this.type\n\t}\n\n\tabstract toJSON(): any\n}\n","export abstract class ItemContent {\n\tabstract readonly type: string\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class InputText extends ItemContent {\n\treadonly type = \"input_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic create(text: string): InputText {\n\t\treturn new InputText(text)\n\t}\n\n\tstatic rehydrate(data: { text: string }): InputText {\n\t\treturn new InputText(data.text)\n\t}\n\n\ttoJSON(): any[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: this.type,\n\t\t\t\ttext: this.text,\n\t\t\t},\n\t\t]\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class UserMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"user\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): UserMessage {\n\t\tconst content = InputText.create(text)\n\t\treturn new UserMessage(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): UserMessage {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new UserMessage(content)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class DeveloperMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"developer\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n\n\tstatic create(text: string): DeveloperMessage {\n\t\tconst content = InputText.create(text)\n\t\treturn new DeveloperMessage(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): DeveloperMessage {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new DeveloperMessage(content)\n\t}\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class OutputText extends ItemContent {\n\treadonly type = \"output_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic rehydrate(data: { text: string }): OutputText {\n\t\treturn new OutputText(data.text)\n\t}\n\n\ttoJSON(): any[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: this.type,\n\t\t\t\ttext: this.text,\n\t\t\t},\n\t\t]\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { OutputText } from \"@domain/model-context/context-item/item-content/output-text\"\n\nexport class ModelMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"assistant\"\n\treadonly content: OutputText\n\n\tprivate constructor(content: OutputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic rehydrate(data: { text: string }): ModelMessage {\n\t\tconst content = OutputText.rehydrate(data)\n\t\treturn new ModelMessage(content)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class FunctionCall extends ContextItem {\n\treadonly type = \"function_call\"\n\treadonly callId: string\n\treadonly name: string\n\treadonly args: string\n\n\tprivate constructor(callId: string, name: string, args: string) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.name = name\n\t\tthis.args = args\n\t}\n\n\tstatic rehydrate(data: { callId: string; name: string; args: string }): FunctionCall {\n\t\treturn new FunctionCall(data.callId, data.name, data.args)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcall_id: this.callId,\n\t\t\tname: this.name,\n\t\t\targuments: this.args,\n\t\t}\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { SummaryText } from \"@domain/model-context/context-item/item-content/summary-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class Reasoning extends ContextItem {\n\treadonly type = \"reasoning\"\n\treadonly content: InputText | undefined\n\treadonly encryptedContent: string | undefined\n\treadonly summary: SummaryText[]\n\n\tprivate constructor(\n\t\tcontent: InputText | undefined,\n\t\tencryptedContent?: string | undefined,\n\t\tsummary: SummaryText[] = [],\n\t) {\n\t\tsuper()\n\t\tthis.content = content\n\t\tthis.encryptedContent = encryptedContent\n\t\tthis.summary = summary\n\t}\n\n\tstatic rehydrate(data: {\n\t\tcontent: InputText | undefined\n\t\tencryptedContent: string | undefined\n\t\tsummary: SummaryText[]\n\t}): Reasoning {\n\t\treturn new Reasoning(data.content, data.encryptedContent, data.summary)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcontent: this.content?.toJSON(),\n\t\t\tencryptedContent: this.encryptedContent,\n\t\t\tsummary: this.summary.map((s) => s.toJSON()),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class FunctionCallOutput extends ContextItem {\n\treadonly type = \"function_call_output\"\n\treadonly callId: string\n\treadonly output: InputText\n\n\tprivate constructor(callId: string, output: InputText) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.output = output\n\t}\n\n\tstatic create(callId: string, output: string): FunctionCallOutput {\n\t\tconst outputText = InputText.create(output)\n\t\treturn new FunctionCallOutput(callId, outputText)\n\t}\n\n\tstatic rehydrate(data: { callId: string; output: InputText }): FunctionCallOutput {\n\t\treturn new FunctionCallOutput(data.callId, data.output)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcall_id: this.callId,\n\t\t\toutput: this.output.toJSON(),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { TokenUsage } from \"@domain/generative-model/token-usage\"\n\nexport class InferenceResponse {\n\treadonly contextItems: ContextItem[]\n\treadonly tokenUsage?: TokenUsage\n\n\tconstructor(contextItems: ContextItem[], tokenUsage: TokenUsage | undefined) {\n\t\tthis.contextItems = contextItems\n\t\tthis.tokenUsage = tokenUsage\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 { Context } from \"@domain/model-context/context\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { Reasoning } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { ModelRuntime } from \"@domain/generative-model/runtime/model-runtime\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport OpenAI from \"openai\"\n\nexport class OpenAIResponses implements ModelRuntime {\n\tprivate readonly client: OpenAI\n\tconstructor() {\n\t\tthis.client = new OpenAI()\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResponse> {\n\t\tconst input = this.mapContextToRequest(inferenceRequest.context)\n\n\t\tconst specification = inferenceRequest.model.specification\n\n\t\tlet request: any = {\n\t\t\tmodel: specification.name,\n\t\t\tinput: input,\n\t\t}\n\n\t\tif (specification.supportFunctionCalling && inferenceRequest.model.getTools().length > 0) {\n\t\t\trequest.tools = inferenceRequest.model.getTools().map((tool) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: tool.type,\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 (specification.supportReasoningEffort) {\n\t\t\trequest.reasoning = {\n\t\t\t\teffort: inferenceRequest.model.getReasoningEffort(),\n\t\t\t}\n\t\t}\n\n\t\tconst response = await this.client.responses.create(request)\n\n\t\tconst contextItems = this.extractContextItems(response)\n\t\tconst tokenUsage = this.extractTokenUsage(response)\n\t\treturn new InferenceResponse(contextItems, tokenUsage)\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),\n\t\t\tnew OutputTokenDetails(response.usage.output_tokens_details.reasoning_tokens),\n\t\t)\n\t}\n\n\tmapContextToRequest(context: Context): any[] {\n\t\treturn context.getItems().map((item) => item.toJSON())\n\t}\n\n\textractContextItems(response: any): ContextItem[] {\n\t\treturn response.output.map((item: any) => {\n\t\t\tif (item.type === \"message\" && item.role === \"assistant\") {\n\t\t\t\treturn ModelMessage.rehydrate(item.content[0] as { text: string })\n\t\t\t}\n\t\t\tif (item.type === \"function_call\") {\n\t\t\t\treturn FunctionCall.rehydrate({\n\t\t\t\t\tcallId: item.call_id,\n\t\t\t\t\tname: item.name,\n\t\t\t\t\targs: item.arguments,\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\treturn Reasoning.rehydrate(item)\n\t\t\t}\n\t\t})\n\t}\n}\n","import { Context } from \"@domain/model-context/context\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\n\nexport class InferenceRequest {\n\treadonly model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability\n\treadonly context: Context\n\n\tconstructor(model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability, context: Context) {\n\t\tthis.model = model\n\t\tthis.context = context\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\n\nexport type OpenAIReasoningEffortType = \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"\n\nexport class OpenAIReasoningEffort implements ReasoningEffort<OpenAIReasoningEffortType> {\n\treasoningEffort: OpenAIReasoningEffortType\n\n\tconstructor(reasoningEffort: OpenAIReasoningEffortType) {\n\t\tthis.reasoningEffort = reasoningEffort\n\t}\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.reasoningEffort = effort\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\tif (!this.reasoningEffort) {\n\t\t\tthrow new Error(\"Reasoning effort not supported\")\n\t\t}\n\t\treturn this.reasoningEffort\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54Nano implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4-nano\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 400_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54 implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 1_050_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54Mini implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4-mini\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 400_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n}\n","export interface Condition<T> {\n\tisSatisfiedBy(candidate: T): boolean\n\tand(other: Condition<T>): Condition<T>\n\tor(other: Condition<T>): Condition<T>\n\tnot(): Condition<T>\n}\n\nexport abstract class BaseCondition<T> implements Condition<T> {\n\tabstract isSatisfiedBy(candidate: T): boolean\n\n\tand(other: Condition<T>): Condition<T> {\n\t\treturn new AndCondition(this, other)\n\t}\n\n\tor(other: Condition<T>): Condition<T> {\n\t\treturn new OrCondition(this, other)\n\t}\n\n\tnot(): Condition<T> {\n\t\treturn new NotCondition(this)\n\t}\n}\n\nexport class AndCondition<T> extends BaseCondition<T> {\n\tconstructor(\n\t\tprivate readonly left: Condition<T>,\n\t\tprivate readonly right: Condition<T>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn this.left.isSatisfiedBy(candidate) && this.right.isSatisfiedBy(candidate)\n\t}\n}\n\nexport class NotCondition<T> extends BaseCondition<T> {\n\tconstructor(private readonly condition: Condition<T>) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn !this.condition.isSatisfiedBy(candidate)\n\t}\n}\n\nexport class OrCondition<T> extends BaseCondition<T> {\n\tconstructor(\n\t\tprivate readonly left: Condition<T>,\n\t\tprivate readonly right: Condition<T>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn this.left.isSatisfiedBy(candidate) || this.right.isSatisfiedBy(candidate)\n\t}\n}\n","import { Condition } from \"@domain/agent-loop/rules/condition/condition\"\n\nexport interface Action<T> {\n\tapply(candidate: T): T\n}\n\nexport interface AsyncAction<T> {\n\tapply(candidate: T): Promise<T>\n}\n\nexport interface AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\tapply(candidate: T): Promise<T>\n}\n\nexport class If<T> implements AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\n\tconstructor({ condition, action }: { condition: Condition<T>; action: AsyncAction<T> }) {\n\t\tthis.condition = condition\n\t\tthis.action = action\n\t}\n\n\tasync apply(candidate: T): Promise<T> {\n\t\tif (this.condition.isSatisfiedBy(candidate)) {\n\t\t\treturn await this.action.apply(candidate)\n\t\t}\n\t\treturn candidate\n\t}\n}\n\nexport class Loop<T> implements AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\n\tconstructor({ condition, action }: { condition: Condition<T>; action: AsyncAction<T> }) {\n\t\tthis.condition = condition\n\t\tthis.action = action\n\t}\n\n\tasync apply(candidate: T): Promise<T> {\n\t\twhile (this.condition.isSatisfiedBy(candidate)) {\n\t\t\tcandidate = await this.action.apply(candidate)\n\t\t}\n\t\treturn candidate\n\t}\n}\n","import { Context } from \"@domain/model-context/context\"\nimport { ContextRepository } from \"@domain/model-context/context-repository\"\n\nexport class InMemoryContextRepository implements ContextRepository {\n\tprivate readonly store = new Map<string, Context>()\n\tprivate readonly projectIndex = new Map<string, Set<string>>()\n\n\tasync save(context: Context): Promise<void> {\n\t\tconst existing = this.store.get(context.id)\n\t\tif (existing && existing.projectId !== context.projectId) {\n\t\t\tconst prevSet = this.projectIndex.get(existing.projectId)\n\t\t\tprevSet?.delete(existing.id)\n\t\t\tif (prevSet && prevSet.size === 0) this.projectIndex.delete(existing.projectId)\n\t\t}\n\n\t\tthis.store.set(context.id, this.clone(context))\n\n\t\tlet set = this.projectIndex.get(context.projectId)\n\t\tif (!set) {\n\t\t\tset = new Set<string>()\n\t\t\tthis.projectIndex.set(context.projectId, set)\n\t\t}\n\t\tset.add(context.id)\n\t}\n\n\tasync get(id: string): Promise<Context> {\n\t\tconst context = this.store.get(id)\n\t\tif (!context) {\n\t\t\tthrow new Error(`Context not found: ${id}`)\n\t\t}\n\t\treturn this.clone(context)\n\t}\n\n\tasync getByProjectId(projectId: string): Promise<Context[]> {\n\t\tconst ids = this.projectIndex.get(projectId)\n\t\tif (!ids || ids.size === 0) return []\n\t\treturn [...ids]\n\t\t\t.map((id) => this.store.get(id))\n\t\t\t.filter((c): c is Context => Boolean(c))\n\t\t\t.map((c) => this.clone(c))\n\t}\n\n\tprivate clone(context: Context): Context {\n\t\treturn Context.rehydrate({\n\t\t\tid: context.id,\n\t\t\tprojectId: context.projectId,\n\t\t\titems: [...context.getItems()],\n\t\t})\n\t}\n}\n","import { StateId } from \"@domain/agent-loop/state/state\"\nimport { TransitionRecord } from \"@domain/agent-loop/transition/transition\"\n\nexport enum ExecutionStatus {\n\tRUNNING,\n\tCOMPLETED,\n\tFAILED,\n}\n\nexport class Execution {\n\texecutionId: string\n\tcurrentStateId: StateId\n\tpreviousStateId: StateId | null\n\tstatus: ExecutionStatus\n\tstepCount: number\n\tretryCounts: Map<StateId, number>\n\thistory: TransitionRecord[]\n\n\tconstructor(\n\t\texecutionId: string,\n\t\tcurrentStateId: StateId,\n\t\tpreviousStateId: StateId | null,\n\t\tstatus: ExecutionStatus,\n\t\tstepCount: number,\n\t\tretryCounts: Map<StateId, number>,\n\t\thistory: TransitionRecord[],\n\t) {\n\t\tthis.executionId = executionId\n\t\tthis.currentStateId = currentStateId\n\t\tthis.previousStateId = previousStateId\n\t\tthis.status = status\n\t\tthis.stepCount = stepCount\n\t\tthis.retryCounts = retryCounts\n\t\tthis.history = history\n\t}\n\n\tisTerminal(): boolean {\n\t\treturn this.status == ExecutionStatus.COMPLETED || this.status == ExecutionStatus.FAILED\n\t}\n\n\tstatic create(): Execution {\n\t\tconst executionId = crypto.randomUUID()\n\t\tconst currentStateId = StateId.INFERENCE_PENDING\n\t\tconst previousStateId = null\n\t\tconst status = ExecutionStatus.RUNNING\n\t\tconst stepCount = 0\n\t\tconst retryCounts = new Map<StateId, number>()\n\t\tconst history: TransitionRecord[] = []\n\t\treturn new Execution(executionId, currentStateId, previousStateId, status, stepCount, retryCounts, history)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { StateId } from \"@domain/agent-loop/state/state\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class GoTo implements Transition {\n\tnext: StateId\n\n\tconstructor(next: StateId) {\n\t\tthis.next = next\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.previousStateId = execution.currentStateId\n\t\texecution.currentStateId = this.next\n\t\texecution.stepCount++\n\t\texecution.history.push({\n\t\t\tfromState: execution.previousStateId,\n\t\t\ttoState: execution.currentStateId,\n\t\t\ttimestamp: new Date(),\n\t\t\tduration: 0,\n\t\t\terror: null,\n\t\t})\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class Fail implements Transition {\n\terror: string\n\n\tconstructor(error: string) {\n\t\tthis.error = error\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.status = ExecutionStatus.FAILED\n\t}\n}\n","import { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { GoTo } from \"@domain/agent-loop/transition/go-to\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\n\nexport class FunctionCallState implements State {\n\tid: StateId = StateId.FUNCTION_CALL_PENDING\n\tbeforeHookId: HookId = HookId.BEFORE_FUNCTION_CALL\n\tafterHookId: HookId = HookId.AFTER_FUNCTION_CALL\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst functionCall = runtime.inferenceResponse?.contextItems.find((item) => item.getType() === \"function_call\")\n\t\tif (!functionCall || !(functionCall instanceof FunctionCall)) {\n\t\t\tthrow new Error(\"Function call not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst functionCallOutput = runtime.functionCallOutput\n\t\tif (!functionCallOutput) {\n\t\t\treturn new Fail(\"Function call output not found\")\n\t\t}\n\t\truntime.context.addItem(functionCallOutput)\n\t\treturn new GoTo(StateId.INFERENCE_PENDING)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class Complete implements Transition {\n\tresult: string\n\tconstructor(result: string) {\n\t\tthis.result = result\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.status = ExecutionStatus.COMPLETED\n\t}\n}\n","import { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { Complete } from \"@domain/agent-loop/transition/complete\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class ModelMessageState implements State {\n\tid: StateId = StateId.MODEL_MESSAGE_RECEIVED\n\tbeforeHookId: HookId = HookId.BEFORE_MODEL_MESSAGE\n\tafterHookId: HookId = HookId.AFTER_MODEL_MESSAGE\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tif (!runtime.modelMessage) {\n\t\t\tthrow new Error(\"Model message not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tif (!runtime.modelMessage) {\n\t\t\treturn new Fail(\"Model message not found\")\n\t\t}\n\t\treturn new Complete(runtime.modelMessage.content.text)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { GoTo } from \"@domain/agent-loop/transition/go-to\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\n\nexport class InferencePendingState implements State {\n\tid: StateId = StateId.INFERENCE_PENDING\n\tbeforeHookId: HookId = HookId.BEFORE_INFERENCE\n\tafterHookId: HookId = HookId.AFTER_INFERENCE\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst inferenceRequest = runtime.inferenceRequest\n\t\tif (!inferenceRequest) {\n\t\t\tthrow new Error(\"Inference request not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst inferenceResponse = runtime.inferenceResponse\n\t\tif (!inferenceResponse) {\n\t\t\treturn new Fail(\"Inference response not found\")\n\t\t}\n\t\tif (inferenceResponse instanceof FunctionCall) {\n\t\t\treturn new GoTo(StateId.FUNCTION_CALL_PENDING)\n\t\t}\n\t\tif (inferenceResponse instanceof ModelMessage) {\n\t\t\treturn new GoTo(StateId.MODEL_MESSAGE_RECEIVED)\n\t\t}\n\t\treturn new Fail(\"Invalid response type\")\n\t}\n}\n","import { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { FunctionCallState } from \"@domain/agent-loop/state/function-call\"\nimport { ModelMessageState } from \"@domain/agent-loop/state/model-message\"\nimport { InferencePendingState } from \"@domain/agent-loop/state/inference-pending\"\nimport { State } from \"@domain/agent-loop/state/state\"\nimport { Execution } from \"@domain/agent-loop/execution\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { Context } from \"@domain/model-context/context\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\n\nexport interface RuntimeContext {\n\texecution: Execution\n\tuserMessage: UserMessage\n\tinferenceRequest?: InferenceRequest\n\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability\n\tcontext: Context\n\tinferenceResponse?: InferenceResponse\n\tfunctionCallOutput?: FunctionCallOutput\n\tmodelMessage?: ModelMessage\n}\n\nexport class AgentLoop {\n\tprivate states: Map<StateId, State> = new Map<StateId, State>()\n\n\tconstructor() {\n\t\tthis.states.set(StateId.INFERENCE_PENDING, new InferencePendingState())\n\t\tthis.states.set(StateId.FUNCTION_CALL_PENDING, new FunctionCallState())\n\t\tthis.states.set(StateId.MODEL_MESSAGE_RECEIVED, new ModelMessageState())\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\tstate.validateEntry(runtime)\n\t}\n\n\tgetStateDetails(runtime: RuntimeContext): StateDetails {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\treturn state.getDetails()\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\treturn state.next(runtime)\n\t}\n}\n","import { HookId } from \"./hook\"\n\nexport class HooksRegistry {\n\tprivate handlers: Map<HookId, (data: any) => Promise<void>> = new Map<HookId, (data: any) => Promise<void>>()\n\n\tgetHandler(hookId: HookId): (data: any) => Promise<void> {\n\t\tconst handler = this.handlers.get(hookId)\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Hook handler for hook ${hookId} not found`)\n\t\t}\n\t\treturn handler\n\t}\n\n\tregisterHandler(hookId: HookId, handler: (data: any) => Promise<void>): void {\n\t\tthis.handlers.set(hookId, handler)\n\t}\n\n\tunregisterHandler(hookId: HookId): void {\n\t\tthis.handlers.delete(hookId)\n\t}\n}\n","import { RuntimeContext } from \"../loop\"\nimport { StateId } from \"./state\"\n\nexport class StateHandlerRegistry {\n\tprivate handlers: Map<StateId, (context: RuntimeContext) => Promise<void>> = new Map<\n\t\tStateId,\n\t\t(context: RuntimeContext) => Promise<void>\n\t>()\n\n\tgetHandler(stateId: StateId): (context: RuntimeContext) => Promise<void> {\n\t\tconst handler = this.handlers.get(stateId)\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Handler for state ${stateId} not found`)\n\t\t}\n\t\treturn handler\n\t}\n\n\tregisterHandler(stateId: StateId, handler: (context: RuntimeContext) => Promise<void>): void {\n\t\tthis.handlers.set(stateId, handler)\n\t}\n\n\tunregisterHandler(stateId: StateId): void {\n\t\tthis.handlers.delete(stateId)\n\t}\n}\n","import { Execution, ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { AgentLoop, RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { Context } from \"@domain/model-context/context\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { HooksRegistry } from \"@domain/agent-loop/hooks/hooks-registry\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { StateHandlerRegistry } from \"@domain/agent-loop/state/state-registry\"\nimport { StateId } from \"@domain/agent-loop/state/state\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { OpenAIResponses } from \"@infra/providers/openai/runtime/openai-responses\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\n\nexport class AgentRuntime {\n\tprivate hooksRegistry: HooksRegistry = new HooksRegistry()\n\tprivate stateHandlerRegistry: StateHandlerRegistry = new StateHandlerRegistry()\n\n\tconstructor() {\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.INFERENCE_PENDING, this.onInferencePending)\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.FUNCTION_CALL_PENDING, this.onFunctionCallPending)\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.MODEL_MESSAGE_RECEIVED, this.onModelMessageReceived)\n\t}\n\n\tasync onInferencePending(context: RuntimeContext): Promise<void> {\n\t\tconst openaiResponses = new OpenAIResponses()\n\t\tconst inferenceRequest = new InferenceRequest(context.model, context.context)\n\t\tconst inferenceResponse = await openaiResponses.infer(inferenceRequest)\n\t\tcontext.inferenceResponse = inferenceResponse\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onFunctionCallPending(context: RuntimeContext): Promise<void> {\n\t\tconst functionCall = context.inferenceResponse?.contextItems.find((item) => item.getType() === \"function_call\")\n\t\tif (!functionCall || !(functionCall instanceof FunctionCall)) {\n\t\t\tthrow new Error(\"Function call not found\")\n\t\t}\n\n\t\tconst tool = context.model.getTools().find((tool) => tool.name === functionCall.name)\n\t\tif (!tool) {\n\t\t\tthrow new Error(\"Function not found\")\n\t\t}\n\n\t\tconst functionCallOutput = await tool.invoke(functionCall.args)\n\t\tcontext.functionCallOutput = FunctionCallOutput.create(functionCall.callId, functionCallOutput)\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onModelMessageReceived(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync on(hookId: HookId, callback: (data: any) => Promise<void>): Promise<void> {\n\t\tthis.hooksRegistry.registerHandler(hookId, callback)\n\t}\n\n\tasync start(\n\t\tuserMessage: UserMessage,\n\t\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tconst execution = Execution.create()\n\n\t\tconst loop = new AgentLoop()\n\t\tconst runtimeContext: RuntimeContext = {\n\t\t\texecution,\n\t\t\tuserMessage,\n\t\t\tmodel,\n\t\t\tcontext,\n\t\t}\n\t\twhile (!execution.isTerminal()) {\n\t\t\tconst transition = loop.next(runtimeContext)\n\t\t\tawait transition.apply(runtimeContext)\n\n\t\t\ttry {\n\t\t\t\tconst stateDetails = loop.getStateDetails(runtimeContext)\n\t\t\t\tif (stateDetails.before) {\n\t\t\t\t\tconst handler = this.hooksRegistry.getHandler(stateDetails.before)\n\t\t\t\t\tawait handler(runtimeContext)\n\t\t\t\t}\n\n\t\t\t\tif (stateDetails.after) {\n\t\t\t\t\tconst handler = this.hooksRegistry.getHandler(stateDetails.after)\n\t\t\t\t\tawait handler(runtimeContext)\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\texecution.status = ExecutionStatus.FAILED\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n","import { AgentRuntime } from \"@app/agent-runtime\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { Context } from \"@domain/model-context/context\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { InferenceVisitor } from \"./inference-visitor\"\n\nexport class Agent {\n\tprivate visitor: InferenceVisitor | undefined\n\n\tconstructor(private readonly runtime: AgentRuntime) {\n\t\tthis.runtime.on(HookId.BEFORE_INFERENCE, this.beforeInference)\n\t\tthis.runtime.on(HookId.AFTER_INFERENCE, this.afterInference)\n\t\tthis.runtime.on(HookId.BEFORE_FUNCTION_CALL, this.beforeFunctionCall)\n\t\tthis.runtime.on(HookId.AFTER_FUNCTION_CALL, this.afterFunctionCall)\n\t\tthis.runtime.on(HookId.BEFORE_MODEL_MESSAGE, this.beforeModelMessage)\n\t\tthis.runtime.on(HookId.AFTER_MODEL_MESSAGE, this.afterModelMessage)\n\t}\n\n\tasync beforeInference(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterInference(context: RuntimeContext): Promise<void> {\n\t\tconst inferenceResponse = context.inferenceResponse\n\t\tif (inferenceResponse && this.visitor) {\n\t\t\tawait this.visitor.afterInference(inferenceResponse)\n\t\t}\n\t\treturn Promise.resolve()\n\t}\n\n\tasync beforeFunctionCall(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterFunctionCall(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync beforeModelMessage(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterModelMessage(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onStart(context: RuntimeContext): Promise<void> {\n\t\tawait this.visitor?.onStart(context)\n\t\treturn Promise.resolve()\n\t}\n\n\tsetInferenceVisitor(visitor: InferenceVisitor): void {\n\t\tthis.visitor = visitor\n\t}\n\n\tasync run(\n\t\tuserMessage: string,\n\t\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tconst userMessageItem = UserMessage.create(userMessage)\n\t\treturn this.runtime.start(userMessageItem, model, context)\n\t}\n}\n"],"mappings":"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","names":["tool"]}
|
|
1
|
+
{"version":3,"sources":["../src/domain/model-context/context.ts","../src/domain/model-context/context-item/context-item.ts","../src/domain/model-context/context-item/item-content/item-content.ts","../src/domain/model-context/context-item/item-content/input-text.ts","../src/domain/model-context/context-item/client-item/user-message.ts","../src/domain/model-context/context-item/client-item/developer-message.ts","../src/domain/model-context/context-item/item-content/output-text.ts","../src/domain/model-context/context-item/model-item/model-message.ts","../src/domain/model-context/context-item/model-item/function-call.ts","../src/domain/model-context/context-item/model-item/reasoning.ts","../src/domain/model-context/context-item/client-item/function-call-output.ts","../src/domain/generative-model/inference-response.ts","../src/domain/generative-model/token-usage.ts","../src/infrastructure/providers/openai/runtime/openai-responses.ts","../src/domain/generative-model/inference-request.ts","../src/infrastructure/providers/openai/reasoning-effort.ts","../src/infrastructure/providers/openai/models/gpt-5-4-nano.ts","../src/infrastructure/providers/openai/models/gpt-5-4.ts","../src/infrastructure/providers/openai/models/gpt-5-4-mini.ts","../src/domain/agent-loop/rules/condition/condition.ts","../src/domain/agent-loop/rules/rule/rule.ts","../src/infrastructure/repository/in-memory-context-repository.ts","../src/domain/agent-loop/execution.ts","../src/domain/agent-loop/transition/go-to.ts","../src/domain/agent-loop/transition/fail.ts","../src/domain/agent-loop/state/function-call.ts","../src/domain/agent-loop/transition/complete.ts","../src/domain/agent-loop/state/model-message.ts","../src/domain/agent-loop/state/inference-pending.ts","../src/domain/agent-loop/loop.ts","../src/domain/agent-loop/hooks/hooks-registry.ts","../src/domain/agent-loop/state/state-registry.ts","../src/application/agent-runtime.ts","../src/application/agent.ts"],"sourcesContent":["import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class Context {\n\treadonly id: string\n\treadonly projectId: string\n\treadonly items: ContextItem[]\n\n\tconstructor(id: string, projectId: string, items: ContextItem[]) {\n\t\tthis.projectId = projectId\n\t\tthis.id = id\n\t\tthis.items = items\n\t}\n\n\taddItem(item: ContextItem): Context {\n\t\tthis.items.push(item)\n\t\treturn this\n\t}\n\n\tapplyModelOutput(items: ContextItem[]): Context {\n\t\tfor (const item of items) {\n\t\t\tconst itemType = item.getType()\n\t\t\tif (itemType !== \"function_call\" && itemType !== \"message\" && itemType !== \"reasoning\") {\n\t\t\t\tthrow new Error(`Invalid item type: ${itemType}`)\n\t\t\t}\n\t\t}\n\t\tthis.items.push(...items)\n\t\treturn this\n\t}\n\n\tgetItems(): ContextItem[] {\n\t\treturn this.items\n\t}\n\n\tstatic create(projectId: string): Context {\n\t\tconst id = crypto.randomUUID()\n\t\treturn new Context(id, projectId, [])\n\t}\n\n\tstatic rehydrate(data: { id: string; projectId: string; items: ContextItem[] }): Context {\n\t\treturn new Context(data.id, data.projectId, data.items)\n\t}\n\n\ttoJSON(): any {\n\t\treturn this.items.map((item) => item.toJSON())\n\t}\n}\n","export abstract class ContextItem {\n\tabstract readonly type: string\n\n\tgetType(): string {\n\t\treturn this.type\n\t}\n\n\tabstract toJSON(): any\n}\n","export abstract class ItemContent {\n\tabstract readonly type: string\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class InputText extends ItemContent {\n\treadonly type = \"input_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic create(text: string): InputText {\n\t\treturn new InputText(text)\n\t}\n\n\tstatic rehydrate(data: { text: string }): InputText {\n\t\treturn new InputText(data.text)\n\t}\n\n\ttoJSON(): any[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: this.type,\n\t\t\t\ttext: this.text,\n\t\t\t},\n\t\t]\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class UserMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"user\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic create(text: string): UserMessage {\n\t\tconst content = InputText.create(text)\n\t\treturn new UserMessage(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): UserMessage {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new UserMessage(content)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class DeveloperMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"developer\"\n\treadonly content: InputText\n\n\tprivate constructor(content: InputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n\n\tstatic create(text: string): DeveloperMessage {\n\t\tconst content = InputText.create(text)\n\t\treturn new DeveloperMessage(content)\n\t}\n\n\tstatic rehydrate(data: { text: string }): DeveloperMessage {\n\t\tconst content = InputText.rehydrate(data)\n\t\treturn new DeveloperMessage(content)\n\t}\n}\n","import { ItemContent } from \"@domain/model-context/context-item/item-content/item-content\"\n\nexport class OutputText extends ItemContent {\n\treadonly type = \"output_text\"\n\n\tprivate constructor(public readonly text: string) {\n\t\tsuper()\n\t}\n\n\tstatic rehydrate(data: { text: string }): OutputText {\n\t\treturn new OutputText(data.text)\n\t}\n\n\ttoJSON(): any[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: this.type,\n\t\t\t\ttext: this.text,\n\t\t\t},\n\t\t]\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { OutputText } from \"@domain/model-context/context-item/item-content/output-text\"\n\nexport class ModelMessage extends ContextItem {\n\treadonly type = \"message\"\n\treadonly role = \"assistant\"\n\treadonly content: OutputText\n\n\tprivate constructor(content: OutputText) {\n\t\tsuper()\n\t\tthis.content = content\n\t}\n\n\tstatic rehydrate(data: { text: string }): ModelMessage {\n\t\tconst content = OutputText.rehydrate(data)\n\t\treturn new ModelMessage(content)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\trole: this.role,\n\t\t\tcontent: this.content.toJSON(),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class FunctionCall extends ContextItem {\n\treadonly type = \"function_call\"\n\treadonly callId: string\n\treadonly name: string\n\treadonly args: string\n\n\tprivate constructor(callId: string, name: string, args: string) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.name = name\n\t\tthis.args = args\n\t}\n\n\tstatic rehydrate(data: { callId: string; name: string; args: string }): FunctionCall {\n\t\treturn new FunctionCall(data.callId, data.name, data.args)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcall_id: this.callId,\n\t\t\tname: this.name,\n\t\t\targuments: this.args,\n\t\t}\n\t}\n}\n","import { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\nimport { SummaryText } from \"@domain/model-context/context-item/item-content/summary-text\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\n\nexport class Reasoning extends ContextItem {\n\treadonly type = \"reasoning\"\n\treadonly content: InputText | undefined\n\treadonly encryptedContent: string | undefined\n\treadonly summary: SummaryText[]\n\n\tprivate constructor(\n\t\tcontent: InputText | undefined,\n\t\tencryptedContent?: string | undefined,\n\t\tsummary: SummaryText[] = [],\n\t) {\n\t\tsuper()\n\t\tthis.content = content\n\t\tthis.encryptedContent = encryptedContent\n\t\tthis.summary = summary\n\t}\n\n\tstatic rehydrate(data: {\n\t\tcontent: InputText | undefined\n\t\tencryptedContent: string | undefined\n\t\tsummary: SummaryText[]\n\t}): Reasoning {\n\t\treturn new Reasoning(data.content, data.encryptedContent, data.summary)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcontent: this.content?.toJSON(),\n\t\t\tencryptedContent: this.encryptedContent,\n\t\t\tsummary: this.summary.map((s) => s.toJSON()),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { InputText } from \"@domain/model-context/context-item/item-content/input-text\"\n\nexport class FunctionCallOutput extends ContextItem {\n\treadonly type = \"function_call_output\"\n\treadonly callId: string\n\treadonly output: InputText\n\n\tprivate constructor(callId: string, output: InputText) {\n\t\tsuper()\n\t\tthis.callId = callId\n\t\tthis.output = output\n\t}\n\n\tstatic create(callId: string, output: string): FunctionCallOutput {\n\t\tconst outputText = InputText.create(output)\n\t\treturn new FunctionCallOutput(callId, outputText)\n\t}\n\n\tstatic rehydrate(data: { callId: string; output: InputText }): FunctionCallOutput {\n\t\treturn new FunctionCallOutput(data.callId, data.output)\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcall_id: this.callId,\n\t\t\toutput: this.output.toJSON(),\n\t\t}\n\t}\n}\n","import { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { TokenUsage } from \"@domain/generative-model/token-usage\"\n\nexport class InferenceResponse {\n\treadonly contextItems: ContextItem[]\n\treadonly tokenUsage?: TokenUsage\n\n\tconstructor(contextItems: ContextItem[], tokenUsage: TokenUsage | undefined) {\n\t\tthis.contextItems = contextItems\n\t\tthis.tokenUsage = tokenUsage\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 { Context } from \"@domain/model-context/context\"\nimport { ContextItem } from \"@domain/model-context/context-item/context-item\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { Reasoning } from \"@domain/model-context/context-item/model-item/reasoning\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { ModelRuntime } from \"@domain/generative-model/runtime/model-runtime\"\nimport { InputTokenDetails, OutputTokenDetails, TokenUsage } from \"@domain/generative-model/token-usage\"\nimport OpenAI from \"openai\"\n\nexport class OpenAIResponses implements ModelRuntime {\n\tprivate readonly client: OpenAI\n\tconstructor() {\n\t\tthis.client = new OpenAI()\n\t}\n\n\tasync infer(inferenceRequest: InferenceRequest): Promise<InferenceResponse> {\n\t\tconst input = this.mapContextToRequest(inferenceRequest.context)\n\n\t\tconst specification = inferenceRequest.model.specification\n\n\t\tlet request: any = {\n\t\t\tmodel: specification.name,\n\t\t\tinput: input,\n\t\t}\n\n\t\tif (specification.supportFunctionCalling && inferenceRequest.model.getTools().length > 0) {\n\t\t\trequest.tools = inferenceRequest.model.getTools().map((tool) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: tool.type,\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 (specification.supportReasoningEffort) {\n\t\t\trequest.reasoning = {\n\t\t\t\teffort: inferenceRequest.model.getReasoningEffort(),\n\t\t\t}\n\t\t}\n\n\t\tconst response = await this.client.responses.create(request)\n\n\t\tconst contextItems = this.extractContextItems(response)\n\t\tconst tokenUsage = this.extractTokenUsage(response)\n\t\treturn new InferenceResponse(contextItems, tokenUsage)\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),\n\t\t\tnew OutputTokenDetails(response.usage.output_tokens_details.reasoning_tokens),\n\t\t)\n\t}\n\n\tmapContextToRequest(context: Context): any[] {\n\t\treturn context.getItems().map((item) => item.toJSON())\n\t}\n\n\textractContextItems(response: any): ContextItem[] {\n\t\treturn response.output.map((item: any) => {\n\t\t\tif (item.type === \"message\" && item.role === \"assistant\") {\n\t\t\t\treturn ModelMessage.rehydrate(item.content[0] as { text: string })\n\t\t\t}\n\t\t\tif (item.type === \"function_call\") {\n\t\t\t\treturn FunctionCall.rehydrate({\n\t\t\t\t\tcallId: item.call_id,\n\t\t\t\t\tname: item.name,\n\t\t\t\t\targs: item.arguments,\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (item.type === \"reasoning\") {\n\t\t\t\treturn Reasoning.rehydrate(item)\n\t\t\t}\n\t\t})\n\t}\n}\n","import { Context } from \"@domain/model-context/context\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\n\nexport class InferenceRequest {\n\treadonly model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability\n\treadonly context: Context\n\n\tconstructor(model: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability, context: Context) {\n\t\tthis.model = model\n\t\tthis.context = context\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\n\nexport type OpenAIReasoningEffortType = \"xhigh\" | \"high\" | \"medium\" | \"low\" | \"none\"\n\nexport class OpenAIReasoningEffort implements ReasoningEffort<OpenAIReasoningEffortType> {\n\treasoningEffort: OpenAIReasoningEffortType\n\n\tconstructor(reasoningEffort: OpenAIReasoningEffortType) {\n\t\tthis.reasoningEffort = reasoningEffort\n\t}\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.reasoningEffort = effort\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\tif (!this.reasoningEffort) {\n\t\t\tthrow new Error(\"Reasoning effort not supported\")\n\t\t}\n\t\treturn this.reasoningEffort\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54Nano implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4-nano\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 400_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54 implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 1_050_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n}\n","import { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { Tool } from \"@domain/generative-model/tool\"\nimport { OpenAIReasoningEffort, OpenAIReasoningEffortType } from \"@infra/providers/openai/reasoning-effort\"\n\nexport class Gpt54Mini implements GenerativeModel, ReasoningEffort<OpenAIReasoningEffortType>, ToolCallingCapability {\n\treadonly specification = {\n\t\tname: \"gpt-5.4-mini\",\n\t\tsupportReasoningEffort: true,\n\t\tdefaultReasoningEffort: \"none\" as OpenAIReasoningEffortType,\n\t\tsupportStreaming: true,\n\t\tcontextWindowSize: 400_000,\n\t\tmaxOutputTokens: 128_000,\n\t\tsupportFunctionCalling: true,\n\t}\n\n\tprivate tools: Tool[] = []\n\n\tprivate readonly effort: OpenAIReasoningEffort = new OpenAIReasoningEffort(\n\t\tthis.specification.defaultReasoningEffort,\n\t)\n\n\tsetReasoningEffort(effort: OpenAIReasoningEffortType): void {\n\t\tthis.effort.setReasoningEffort(effort)\n\t}\n\tgetReasoningEffort(): OpenAIReasoningEffortType {\n\t\treturn this.effort.getReasoningEffort()\n\t}\n\n\tsetTools(tools: Tool[]): void {\n\t\tthis.tools = tools\n\t}\n\n\tgetTools(): Tool[] {\n\t\treturn this.tools\n\t}\n}\n","export interface Condition<T> {\n\tisSatisfiedBy(candidate: T): boolean\n\tand(other: Condition<T>): Condition<T>\n\tor(other: Condition<T>): Condition<T>\n\tnot(): Condition<T>\n}\n\nexport abstract class BaseCondition<T> implements Condition<T> {\n\tabstract isSatisfiedBy(candidate: T): boolean\n\n\tand(other: Condition<T>): Condition<T> {\n\t\treturn new AndCondition(this, other)\n\t}\n\n\tor(other: Condition<T>): Condition<T> {\n\t\treturn new OrCondition(this, other)\n\t}\n\n\tnot(): Condition<T> {\n\t\treturn new NotCondition(this)\n\t}\n}\n\nexport class AndCondition<T> extends BaseCondition<T> {\n\tconstructor(\n\t\tprivate readonly left: Condition<T>,\n\t\tprivate readonly right: Condition<T>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn this.left.isSatisfiedBy(candidate) && this.right.isSatisfiedBy(candidate)\n\t}\n}\n\nexport class NotCondition<T> extends BaseCondition<T> {\n\tconstructor(private readonly condition: Condition<T>) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn !this.condition.isSatisfiedBy(candidate)\n\t}\n}\n\nexport class OrCondition<T> extends BaseCondition<T> {\n\tconstructor(\n\t\tprivate readonly left: Condition<T>,\n\t\tprivate readonly right: Condition<T>,\n\t) {\n\t\tsuper()\n\t}\n\n\tisSatisfiedBy(candidate: T): boolean {\n\t\treturn this.left.isSatisfiedBy(candidate) || this.right.isSatisfiedBy(candidate)\n\t}\n}\n","import { Condition } from \"@domain/agent-loop/rules/condition/condition\"\n\nexport interface Action<T> {\n\tapply(candidate: T): T\n}\n\nexport interface AsyncAction<T> {\n\tapply(candidate: T): Promise<T>\n}\n\nexport interface AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\tapply(candidate: T): Promise<T>\n}\n\nexport class If<T> implements AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\n\tconstructor({ condition, action }: { condition: Condition<T>; action: AsyncAction<T> }) {\n\t\tthis.condition = condition\n\t\tthis.action = action\n\t}\n\n\tasync apply(candidate: T): Promise<T> {\n\t\tif (this.condition.isSatisfiedBy(candidate)) {\n\t\t\treturn await this.action.apply(candidate)\n\t\t}\n\t\treturn candidate\n\t}\n}\n\nexport class Loop<T> implements AsyncRule<T> {\n\tcondition: Condition<T>\n\taction: AsyncAction<T>\n\n\tconstructor({ condition, action }: { condition: Condition<T>; action: AsyncAction<T> }) {\n\t\tthis.condition = condition\n\t\tthis.action = action\n\t}\n\n\tasync apply(candidate: T): Promise<T> {\n\t\twhile (this.condition.isSatisfiedBy(candidate)) {\n\t\t\tcandidate = await this.action.apply(candidate)\n\t\t}\n\t\treturn candidate\n\t}\n}\n","import { Context } from \"@domain/model-context/context\"\nimport { ContextRepository } from \"@domain/model-context/context-repository\"\n\nexport class InMemoryContextRepository implements ContextRepository {\n\tprivate readonly store = new Map<string, Context>()\n\tprivate readonly projectIndex = new Map<string, Set<string>>()\n\n\tasync save(context: Context): Promise<void> {\n\t\tconst existing = this.store.get(context.id)\n\t\tif (existing && existing.projectId !== context.projectId) {\n\t\t\tconst prevSet = this.projectIndex.get(existing.projectId)\n\t\t\tprevSet?.delete(existing.id)\n\t\t\tif (prevSet && prevSet.size === 0) this.projectIndex.delete(existing.projectId)\n\t\t}\n\n\t\tthis.store.set(context.id, this.clone(context))\n\n\t\tlet set = this.projectIndex.get(context.projectId)\n\t\tif (!set) {\n\t\t\tset = new Set<string>()\n\t\t\tthis.projectIndex.set(context.projectId, set)\n\t\t}\n\t\tset.add(context.id)\n\t}\n\n\tasync get(id: string): Promise<Context> {\n\t\tconst context = this.store.get(id)\n\t\tif (!context) {\n\t\t\tthrow new Error(`Context not found: ${id}`)\n\t\t}\n\t\treturn this.clone(context)\n\t}\n\n\tasync getByProjectId(projectId: string): Promise<Context[]> {\n\t\tconst ids = this.projectIndex.get(projectId)\n\t\tif (!ids || ids.size === 0) return []\n\t\treturn [...ids]\n\t\t\t.map((id) => this.store.get(id))\n\t\t\t.filter((c): c is Context => Boolean(c))\n\t\t\t.map((c) => this.clone(c))\n\t}\n\n\tprivate clone(context: Context): Context {\n\t\treturn Context.rehydrate({\n\t\t\tid: context.id,\n\t\t\tprojectId: context.projectId,\n\t\t\titems: [...context.getItems()],\n\t\t})\n\t}\n}\n","import { StateId } from \"@domain/agent-loop/state/state\"\nimport { TransitionRecord } from \"@domain/agent-loop/transition/transition\"\n\nexport enum ExecutionStatus {\n\tRUNNING,\n\tCOMPLETED,\n\tFAILED,\n}\n\nexport class Execution {\n\texecutionId: string\n\tcurrentStateId: StateId\n\tpreviousStateId: StateId | null\n\tstatus: ExecutionStatus\n\tstepCount: number\n\tretryCounts: Map<StateId, number>\n\thistory: TransitionRecord[]\n\n\tconstructor(\n\t\texecutionId: string,\n\t\tcurrentStateId: StateId,\n\t\tpreviousStateId: StateId | null,\n\t\tstatus: ExecutionStatus,\n\t\tstepCount: number,\n\t\tretryCounts: Map<StateId, number>,\n\t\thistory: TransitionRecord[],\n\t) {\n\t\tthis.executionId = executionId\n\t\tthis.currentStateId = currentStateId\n\t\tthis.previousStateId = previousStateId\n\t\tthis.status = status\n\t\tthis.stepCount = stepCount\n\t\tthis.retryCounts = retryCounts\n\t\tthis.history = history\n\t}\n\n\tisTerminal(): boolean {\n\t\treturn this.status == ExecutionStatus.COMPLETED || this.status == ExecutionStatus.FAILED\n\t}\n\n\tstatic create(): Execution {\n\t\tconst executionId = crypto.randomUUID()\n\t\tconst currentStateId = StateId.INFERENCE_PENDING\n\t\tconst previousStateId = null\n\t\tconst status = ExecutionStatus.RUNNING\n\t\tconst stepCount = 0\n\t\tconst retryCounts = new Map<StateId, number>()\n\t\tconst history: TransitionRecord[] = []\n\t\treturn new Execution(executionId, currentStateId, previousStateId, status, stepCount, retryCounts, history)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { StateId } from \"@domain/agent-loop/state/state\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class GoTo implements Transition {\n\tnext: StateId\n\n\tconstructor(next: StateId) {\n\t\tthis.next = next\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.previousStateId = execution.currentStateId\n\t\texecution.currentStateId = this.next\n\t\texecution.stepCount++\n\t\texecution.history.push({\n\t\t\tfromState: execution.previousStateId,\n\t\t\ttoState: execution.currentStateId,\n\t\t\ttimestamp: new Date(),\n\t\t\tduration: 0,\n\t\t\terror: null,\n\t\t})\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class Fail implements Transition {\n\terror: string\n\n\tconstructor(error: string) {\n\t\tthis.error = error\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.status = ExecutionStatus.FAILED\n\t}\n}\n","import { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { GoTo } from \"@domain/agent-loop/transition/go-to\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\n\nexport class FunctionCallState implements State {\n\tid: StateId = StateId.FUNCTION_CALL_PENDING\n\tbeforeHookId: HookId = HookId.BEFORE_FUNCTION_CALL\n\tafterHookId: HookId = HookId.AFTER_FUNCTION_CALL\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst functionCall = runtime.inferenceResponse?.contextItems.find((item) => item.getType() === \"function_call\")\n\t\tif (!functionCall || !(functionCall instanceof FunctionCall)) {\n\t\t\tthrow new Error(\"Function call not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst functionCallOutput = runtime.functionCallOutput\n\t\tif (!functionCallOutput) {\n\t\t\treturn new Fail(\"Function call output not found\")\n\t\t}\n\t\truntime.context.addItem(functionCallOutput)\n\t\treturn new GoTo(StateId.INFERENCE_PENDING)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class Complete implements Transition {\n\tresult: string\n\tconstructor(result: string) {\n\t\tthis.result = result\n\t}\n\n\tasync apply(context: RuntimeContext): Promise<void> {\n\t\tconst execution = context.execution\n\t\texecution.status = ExecutionStatus.COMPLETED\n\t}\n}\n","import { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { Complete } from \"@domain/agent-loop/transition/complete\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\n\nexport class ModelMessageState implements State {\n\tid: StateId = StateId.MODEL_MESSAGE_RECEIVED\n\tbeforeHookId: HookId = HookId.BEFORE_MODEL_MESSAGE\n\tafterHookId: HookId = HookId.AFTER_MODEL_MESSAGE\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tif (!runtime.modelMessage) {\n\t\t\tthrow new Error(\"Model message not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tif (!runtime.modelMessage) {\n\t\t\treturn new Fail(\"Model message not found\")\n\t\t}\n\t\treturn new Complete(runtime.modelMessage.content.text)\n\t}\n}\n","import { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { State, StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { GoTo } from \"@domain/agent-loop/transition/go-to\"\nimport { Fail } from \"@domain/agent-loop/transition/fail\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\n\nexport class InferencePendingState implements State {\n\tid: StateId = StateId.INFERENCE_PENDING\n\tbeforeHookId: HookId = HookId.BEFORE_INFERENCE\n\tafterHookId: HookId = HookId.AFTER_INFERENCE\n\n\tgetDetails(): StateDetails {\n\t\treturn {\n\t\t\tbefore: this.beforeHookId,\n\t\t\tstateId: this.id,\n\t\t\tafter: this.afterHookId,\n\t\t}\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst inferenceRequest = runtime.inferenceRequest\n\t\tif (!inferenceRequest) {\n\t\t\tthrow new Error(\"Inference request not found\")\n\t\t}\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst inferenceResponse = runtime.inferenceResponse\n\t\tif (!inferenceResponse) {\n\t\t\treturn new Fail(\"Inference response not found\")\n\t\t}\n\t\tif (inferenceResponse instanceof FunctionCall) {\n\t\t\treturn new GoTo(StateId.FUNCTION_CALL_PENDING)\n\t\t}\n\t\tif (inferenceResponse instanceof ModelMessage) {\n\t\t\treturn new GoTo(StateId.MODEL_MESSAGE_RECEIVED)\n\t\t}\n\t\treturn new Fail(\"Invalid response type\")\n\t}\n}\n","import { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { StateDetails, StateId } from \"@domain/agent-loop/state/state\"\nimport { FunctionCallState } from \"@domain/agent-loop/state/function-call\"\nimport { ModelMessageState } from \"@domain/agent-loop/state/model-message\"\nimport { InferencePendingState } from \"@domain/agent-loop/state/inference-pending\"\nimport { State } from \"@domain/agent-loop/state/state\"\nimport { Execution } from \"@domain/agent-loop/execution\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { Context } from \"@domain/model-context/context\"\nimport { InferenceResponse } from \"@domain/generative-model/inference-response\"\nimport { ModelMessage } from \"@domain/model-context/context-item/model-item/model-message\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { Transition } from \"@domain/agent-loop/transition/transition\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\n\nexport interface RuntimeContext {\n\texecution: Execution\n\tuserMessage: UserMessage\n\tinferenceRequest?: InferenceRequest\n\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability\n\tcontext: Context\n\tinferenceResponse?: InferenceResponse\n\tfunctionCallOutput?: FunctionCallOutput\n\tmodelMessage?: ModelMessage\n\terror?: Error\n}\n\nexport class AgentLoop {\n\tprivate states: Map<StateId, State> = new Map<StateId, State>()\n\n\tconstructor() {\n\t\tthis.states.set(StateId.INFERENCE_PENDING, new InferencePendingState())\n\t\tthis.states.set(StateId.FUNCTION_CALL_PENDING, new FunctionCallState())\n\t\tthis.states.set(StateId.MODEL_MESSAGE_RECEIVED, new ModelMessageState())\n\t}\n\n\tvalidateEntry(runtime: RuntimeContext): void {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\tstate.validateEntry(runtime)\n\t}\n\n\tgetStateDetails(runtime: RuntimeContext): StateDetails {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\treturn state.getDetails()\n\t}\n\n\tnext(runtime: RuntimeContext): Transition {\n\t\tconst state = this.states.get(runtime.execution.currentStateId)\n\t\tif (!state) {\n\t\t\tthrow new Error(`State ${runtime.execution.currentStateId} not found`)\n\t\t}\n\t\treturn state.next(runtime)\n\t}\n}\n","import { HookId } from \"./hook\"\n\nexport class HooksRegistry {\n\tprivate handlers: Map<HookId, (data: any) => Promise<void>> = new Map<HookId, (data: any) => Promise<void>>()\n\n\tgetHandler(hookId: HookId): (data: any) => Promise<void> {\n\t\tconst handler = this.handlers.get(hookId)\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Hook handler for hook ${hookId} not found`)\n\t\t}\n\t\treturn handler\n\t}\n\n\tregisterHandler(hookId: HookId, handler: (data: any) => Promise<void>): void {\n\t\tthis.handlers.set(hookId, handler)\n\t}\n\n\tunregisterHandler(hookId: HookId): void {\n\t\tthis.handlers.delete(hookId)\n\t}\n}\n","import { RuntimeContext } from \"../loop\"\nimport { StateId } from \"./state\"\n\nexport class StateHandlerRegistry {\n\tprivate handlers: Map<StateId, (context: RuntimeContext) => Promise<void>> = new Map<\n\t\tStateId,\n\t\t(context: RuntimeContext) => Promise<void>\n\t>()\n\n\tgetHandler(stateId: StateId): (context: RuntimeContext) => Promise<void> {\n\t\tconst handler = this.handlers.get(stateId)\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Handler for state ${stateId} not found`)\n\t\t}\n\t\treturn handler\n\t}\n\n\tregisterHandler(stateId: StateId, handler: (context: RuntimeContext) => Promise<void>): void {\n\t\tthis.handlers.set(stateId, handler)\n\t}\n\n\tunregisterHandler(stateId: StateId): void {\n\t\tthis.handlers.delete(stateId)\n\t}\n}\n","import { Execution, ExecutionStatus } from \"@domain/agent-loop/execution\"\nimport { AgentLoop, RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { Context } from \"@domain/model-context/context\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { HooksRegistry } from \"@domain/agent-loop/hooks/hooks-registry\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { StateHandlerRegistry } from \"@domain/agent-loop/state/state-registry\"\nimport { StateId } from \"@domain/agent-loop/state/state\"\nimport { FunctionCall } from \"@domain/model-context/context-item/model-item/function-call\"\nimport { FunctionCallOutput } from \"@domain/model-context/context-item/client-item/function-call-output\"\nimport { OpenAIResponses } from \"@infra/providers/openai/runtime/openai-responses\"\nimport { InferenceRequest } from \"@domain/generative-model/inference-request\"\n\nexport class AgentRuntime {\n\tprivate hooksRegistry: HooksRegistry = new HooksRegistry()\n\tprivate stateHandlerRegistry: StateHandlerRegistry = new StateHandlerRegistry()\n\n\tconstructor() {\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.INFERENCE_PENDING, this.onInferencePending)\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.FUNCTION_CALL_PENDING, this.onFunctionCallPending)\n\t\tthis.stateHandlerRegistry.registerHandler(StateId.MODEL_MESSAGE_RECEIVED, this.onModelMessageReceived)\n\t\tthis.hooksRegistry.registerHandler(HookId.ON_ERROR, this.onError)\n\t}\n\n\tasync onInferencePending(context: RuntimeContext): Promise<void> {\n\t\tconst openaiResponses = new OpenAIResponses()\n\t\tconst inferenceRequest = new InferenceRequest(context.model, context.context)\n\t\tconst inferenceResponse = await openaiResponses.infer(inferenceRequest)\n\t\tcontext.inferenceResponse = inferenceResponse\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onFunctionCallPending(context: RuntimeContext): Promise<void> {\n\t\tconst functionCall = context.inferenceResponse?.contextItems.find((item) => item.getType() === \"function_call\")\n\t\tif (!functionCall || !(functionCall instanceof FunctionCall)) {\n\t\t\tthrow new Error(\"Function call not found\")\n\t\t}\n\n\t\tconst tool = context.model.getTools().find((tool) => tool.name === functionCall.name)\n\t\tif (!tool) {\n\t\t\tthrow new Error(\"Function not found\")\n\t\t}\n\n\t\tconst functionCallOutput = await tool.invoke(functionCall.args)\n\t\tcontext.functionCallOutput = FunctionCallOutput.create(functionCall.callId, functionCallOutput)\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onError(context: RuntimeContext): Promise<void> {\n\t\tconst error = context.error\n\t\tif (!error) {\n\t\t\tthrow new Error(\"Error not found\")\n\t\t}\n\t\tconsole.error(error)\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onModelMessageReceived(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync on(hookId: HookId, callback: (data: any) => Promise<void>): Promise<void> {\n\t\tthis.hooksRegistry.registerHandler(hookId, callback)\n\t}\n\n\tasync start(\n\t\tuserMessage: UserMessage,\n\t\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tconsole.log(\"Starting agent runtime\")\n\t\tconst execution = Execution.create()\n\n\t\tconst loop = new AgentLoop()\n\t\tconst runtimeContext: RuntimeContext = {\n\t\t\texecution,\n\t\t\tuserMessage,\n\t\t\tmodel,\n\t\t\tcontext,\n\t\t}\n\t\twhile (!execution.isTerminal()) {\n\t\t\tconsole.log(\"Executing state\", execution.currentStateId)\n\t\t\tconst transition = loop.next(runtimeContext)\n\t\t\tawait transition.apply(runtimeContext)\n\n\t\t\ttry {\n\t\t\t\tconst stateDetails = loop.getStateDetails(runtimeContext)\n\t\t\t\tif (stateDetails.before) {\n\t\t\t\t\tconst handler = this.hooksRegistry.getHandler(stateDetails.before)\n\t\t\t\t\tawait handler(runtimeContext)\n\t\t\t\t}\n\n\t\t\t\tif (stateDetails.after) {\n\t\t\t\t\tconst handler = this.hooksRegistry.getHandler(stateDetails.after)\n\t\t\t\t\tawait handler(runtimeContext)\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\texecution.status = ExecutionStatus.FAILED\n\t\t\t\tconst handler = this.hooksRegistry.getHandler(HookId.ON_ERROR)\n\t\t\t\truntimeContext.error = error as Error\n\t\t\t\tawait handler(runtimeContext)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n","import { AgentRuntime } from \"@app/agent-runtime\"\nimport { UserMessage } from \"@domain/model-context/context-item/client-item/user-message\"\nimport { Context } from \"@domain/model-context/context\"\nimport { GenerativeModel } from \"@domain/generative-model/generative-model\"\nimport { ReasoningEffort } from \"@domain/generative-model/capabilities/reasoning-effort\"\nimport { ToolCallingCapability } from \"@domain/generative-model/capabilities/tool-calling\"\nimport { HookId } from \"@domain/agent-loop/hooks/hook\"\nimport { RuntimeContext } from \"@domain/agent-loop/loop\"\nimport { InferenceVisitor } from \"./inference-visitor\"\n\nexport class Agent {\n\tprivate visitor: InferenceVisitor | undefined\n\n\tconstructor(private readonly runtime: AgentRuntime) {\n\t\tthis.runtime.on(HookId.BEFORE_INFERENCE, this.beforeInference)\n\t\tthis.runtime.on(HookId.AFTER_INFERENCE, this.afterInference)\n\t\tthis.runtime.on(HookId.BEFORE_FUNCTION_CALL, this.beforeFunctionCall)\n\t\tthis.runtime.on(HookId.AFTER_FUNCTION_CALL, this.afterFunctionCall)\n\t\tthis.runtime.on(HookId.BEFORE_MODEL_MESSAGE, this.beforeModelMessage)\n\t\tthis.runtime.on(HookId.AFTER_MODEL_MESSAGE, this.afterModelMessage)\n\t\tthis.runtime.on(HookId.ON_ERROR, this.onError)\n\t}\n\n\tasync beforeInference(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterInference(context: RuntimeContext): Promise<void> {\n\t\tconst inferenceResponse = context.inferenceResponse\n\t\tif (inferenceResponse && this.visitor) {\n\t\t\tawait this.visitor.afterInference(inferenceResponse)\n\t\t}\n\t\treturn Promise.resolve()\n\t}\n\n\tasync beforeFunctionCall(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterFunctionCall(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync beforeModelMessage(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync afterModelMessage(context: RuntimeContext): Promise<void> {\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onError(context: RuntimeContext): Promise<void> {\n\t\tconsole.log(\"Error occurred\", context.error)\n\t\treturn Promise.resolve()\n\t}\n\n\tasync onStart(context: RuntimeContext): Promise<void> {\n\t\tawait this.visitor?.onStart(context)\n\t\treturn Promise.resolve()\n\t}\n\n\tsetInferenceVisitor(visitor: InferenceVisitor): void {\n\t\tthis.visitor = visitor\n\t}\n\n\tasync run(\n\t\tuserMessage: string,\n\t\tmodel: GenerativeModel & ReasoningEffort<string> & ToolCallingCapability,\n\t\tcontext: Context,\n\t): Promise<void> {\n\t\tconst userMessageItem = UserMessage.create(userMessage)\n\t\treturn this.runtime.start(userMessageItem, model, context)\n\t}\n}\n"],"mappings":"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","names":["tool"]}
|