typed-agents 1.0.0

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.
Files changed (127) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +201 -0
  3. package/dist/agents/agent.decorator.d.ts +19 -0
  4. package/dist/agents/agent.decorator.d.ts.map +1 -0
  5. package/dist/agents/agent.decorator.js +38 -0
  6. package/dist/agents/agent.decorator.js.map +1 -0
  7. package/dist/agents/agent.runtime.d.ts +133 -0
  8. package/dist/agents/agent.runtime.d.ts.map +1 -0
  9. package/dist/agents/agent.runtime.js +593 -0
  10. package/dist/agents/agent.runtime.js.map +1 -0
  11. package/dist/agents/agent.types.d.ts +245 -0
  12. package/dist/agents/agent.types.d.ts.map +1 -0
  13. package/dist/agents/agent.types.js +27 -0
  14. package/dist/agents/agent.types.js.map +1 -0
  15. package/dist/agents/behavior-engine/behavior.types.d.ts +23 -0
  16. package/dist/agents/behavior-engine/behavior.types.d.ts.map +1 -0
  17. package/dist/agents/behavior-engine/behavior.types.js +3 -0
  18. package/dist/agents/behavior-engine/behavior.types.js.map +1 -0
  19. package/dist/agents/behavior-engine/build-system-prompt.d.ts +12 -0
  20. package/dist/agents/behavior-engine/build-system-prompt.d.ts.map +1 -0
  21. package/dist/agents/behavior-engine/build-system-prompt.js +29 -0
  22. package/dist/agents/behavior-engine/build-system-prompt.js.map +1 -0
  23. package/dist/agents/behavior-engine/index.d.ts +7 -0
  24. package/dist/agents/behavior-engine/index.d.ts.map +1 -0
  25. package/dist/agents/behavior-engine/index.js +23 -0
  26. package/dist/agents/behavior-engine/index.js.map +1 -0
  27. package/dist/agents/behavior-engine/load-behavior.d.ts +16 -0
  28. package/dist/agents/behavior-engine/load-behavior.d.ts.map +1 -0
  29. package/dist/agents/behavior-engine/load-behavior.js +36 -0
  30. package/dist/agents/behavior-engine/load-behavior.js.map +1 -0
  31. package/dist/agents/behavior-engine/merge-behavior.d.ts +12 -0
  32. package/dist/agents/behavior-engine/merge-behavior.d.ts.map +1 -0
  33. package/dist/agents/behavior-engine/merge-behavior.js +33 -0
  34. package/dist/agents/behavior-engine/merge-behavior.js.map +1 -0
  35. package/dist/agents/behavior-engine/parse-behavior.d.ts +10 -0
  36. package/dist/agents/behavior-engine/parse-behavior.d.ts.map +1 -0
  37. package/dist/agents/behavior-engine/parse-behavior.js +66 -0
  38. package/dist/agents/behavior-engine/parse-behavior.js.map +1 -0
  39. package/dist/agents/behavior-engine/watch-behavior.d.ts +10 -0
  40. package/dist/agents/behavior-engine/watch-behavior.d.ts.map +1 -0
  41. package/dist/agents/behavior-engine/watch-behavior.js +34 -0
  42. package/dist/agents/behavior-engine/watch-behavior.js.map +1 -0
  43. package/dist/agents/compose.d.ts +41 -0
  44. package/dist/agents/compose.d.ts.map +1 -0
  45. package/dist/agents/compose.js +29 -0
  46. package/dist/agents/compose.js.map +1 -0
  47. package/dist/agents/index.d.ts +7 -0
  48. package/dist/agents/index.d.ts.map +1 -0
  49. package/dist/agents/index.js +25 -0
  50. package/dist/agents/index.js.map +1 -0
  51. package/dist/agents/runtime-engine/build-tool-map.d.ts +16 -0
  52. package/dist/agents/runtime-engine/build-tool-map.d.ts.map +1 -0
  53. package/dist/agents/runtime-engine/build-tool-map.js +88 -0
  54. package/dist/agents/runtime-engine/build-tool-map.js.map +1 -0
  55. package/dist/agents/runtime-engine/convert-zod-to-tool-schema.d.ts +13 -0
  56. package/dist/agents/runtime-engine/convert-zod-to-tool-schema.d.ts.map +1 -0
  57. package/dist/agents/runtime-engine/convert-zod-to-tool-schema.js +26 -0
  58. package/dist/agents/runtime-engine/convert-zod-to-tool-schema.js.map +1 -0
  59. package/dist/agents/runtime-engine/execute-tool.d.ts +19 -0
  60. package/dist/agents/runtime-engine/execute-tool.d.ts.map +1 -0
  61. package/dist/agents/runtime-engine/execute-tool.js +100 -0
  62. package/dist/agents/runtime-engine/execute-tool.js.map +1 -0
  63. package/dist/agents/runtime-engine/index.d.ts +7 -0
  64. package/dist/agents/runtime-engine/index.d.ts.map +1 -0
  65. package/dist/agents/runtime-engine/index.js +23 -0
  66. package/dist/agents/runtime-engine/index.js.map +1 -0
  67. package/dist/agents/runtime-engine/parse-tool-arguments.d.ts +12 -0
  68. package/dist/agents/runtime-engine/parse-tool-arguments.d.ts.map +1 -0
  69. package/dist/agents/runtime-engine/parse-tool-arguments.js +42 -0
  70. package/dist/agents/runtime-engine/parse-tool-arguments.js.map +1 -0
  71. package/dist/agents/runtime-engine/retry.utils.d.ts +26 -0
  72. package/dist/agents/runtime-engine/retry.utils.d.ts.map +1 -0
  73. package/dist/agents/runtime-engine/retry.utils.js +55 -0
  74. package/dist/agents/runtime-engine/retry.utils.js.map +1 -0
  75. package/dist/agents/runtime-engine/state-persistence.d.ts +56 -0
  76. package/dist/agents/runtime-engine/state-persistence.d.ts.map +1 -0
  77. package/dist/agents/runtime-engine/state-persistence.js +70 -0
  78. package/dist/agents/runtime-engine/state-persistence.js.map +1 -0
  79. package/dist/clients/index.d.ts +3 -0
  80. package/dist/clients/index.d.ts.map +1 -0
  81. package/dist/clients/index.js +19 -0
  82. package/dist/clients/index.js.map +1 -0
  83. package/dist/clients/llm.client.d.ts +48 -0
  84. package/dist/clients/llm.client.d.ts.map +1 -0
  85. package/dist/clients/llm.client.js +3 -0
  86. package/dist/clients/llm.client.js.map +1 -0
  87. package/dist/clients/ollama.client.d.ts +20 -0
  88. package/dist/clients/ollama.client.d.ts.map +1 -0
  89. package/dist/clients/ollama.client.js +85 -0
  90. package/dist/clients/ollama.client.js.map +1 -0
  91. package/dist/core/logger/index.d.ts +2 -0
  92. package/dist/core/logger/index.d.ts.map +1 -0
  93. package/dist/core/logger/index.js +18 -0
  94. package/dist/core/logger/index.js.map +1 -0
  95. package/dist/core/logger/logger.d.ts +7 -0
  96. package/dist/core/logger/logger.d.ts.map +1 -0
  97. package/dist/core/logger/logger.js +19 -0
  98. package/dist/core/logger/logger.js.map +1 -0
  99. package/dist/index.d.ts +6 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +22 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/runtime/agent.runner.d.ts +29 -0
  104. package/dist/runtime/agent.runner.d.ts.map +1 -0
  105. package/dist/runtime/agent.runner.js +39 -0
  106. package/dist/runtime/agent.runner.js.map +1 -0
  107. package/dist/runtime/index.d.ts +2 -0
  108. package/dist/runtime/index.d.ts.map +1 -0
  109. package/dist/runtime/index.js +18 -0
  110. package/dist/runtime/index.js.map +1 -0
  111. package/dist/tools/index.d.ts +4 -0
  112. package/dist/tools/index.d.ts.map +1 -0
  113. package/dist/tools/index.js +20 -0
  114. package/dist/tools/index.js.map +1 -0
  115. package/dist/tools/registry.d.ts +128 -0
  116. package/dist/tools/registry.d.ts.map +1 -0
  117. package/dist/tools/registry.js +140 -0
  118. package/dist/tools/registry.js.map +1 -0
  119. package/dist/tools/tool.decorator.d.ts +71 -0
  120. package/dist/tools/tool.decorator.d.ts.map +1 -0
  121. package/dist/tools/tool.decorator.js +98 -0
  122. package/dist/tools/tool.decorator.js.map +1 -0
  123. package/dist/tools/tool.types.d.ts +231 -0
  124. package/dist/tools/tool.types.d.ts.map +1 -0
  125. package/dist/tools/tool.types.js +3 -0
  126. package/dist/tools/tool.types.js.map +1 -0
  127. package/package.json +45 -0
@@ -0,0 +1,245 @@
1
+ import { LLMClient, LLMMessage, LLMResponse } from "../clients/llm.client";
2
+ import { ToolClass, ToolDefinition, ToolMapEntry } from "../tools/tool.types";
3
+ /**
4
+ * Represents a tool dependency registered with an agent.
5
+ * Can be a decorated class, an instantiated tool object, or the "auto" string
6
+ * to allow automatic tool resolution.
7
+ */
8
+ export type ToolDependency = ToolClass | object | "auto";
9
+ /**
10
+ * Agent initial configuration options as provided by the user.
11
+ * These are the settings used when creating a new agent instance.
12
+ */
13
+ export interface AgentOptions {
14
+ /** Unique symbolic name for the agent (e.g. "assistant", "research_agent"). */
15
+ name: string;
16
+ /** LLM model name to use (optional if `llmClient` is already provided). */
17
+ model?: string;
18
+ /** LLM client instance to use for API calls. */
19
+ llmClient?: LLMClient;
20
+ /** List of tools available for this agent. */
21
+ tools?: ToolDependency[];
22
+ /** Maximum number of reasoning steps before terminating. */
23
+ maxSteps?: number;
24
+ /** Optional system prompt to include at the start of the context. */
25
+ systemPrompt?: string;
26
+ /** Behavior directives, either a string or an array of strings. */
27
+ behavior?: string | string[];
28
+ }
29
+ /**
30
+ * Agent metadata after option normalization.
31
+ * Used at runtime for validation and direct value access.
32
+ */
33
+ export interface AgentMetadata {
34
+ name: string;
35
+ model?: string;
36
+ llmClient?: LLMClient;
37
+ tools: ToolDependency[];
38
+ maxSteps?: number;
39
+ systemPrompt?: string;
40
+ behavior?: string | string[];
41
+ }
42
+ /**
43
+ * Runtime state tracked during agent execution.
44
+ */
45
+ export interface AgentState {
46
+ steps: number;
47
+ toolCalls: number;
48
+ startTime: number;
49
+ }
50
+ /**
51
+ * Logging level used by execution trace events.
52
+ */
53
+ export type LogLevel = "info" | "warn" | "error";
54
+ /**
55
+ * Basic log metadata emitted by the agent.
56
+ */
57
+ export interface LogMeta {
58
+ level: LogLevel;
59
+ message: string;
60
+ }
61
+ /**
62
+ * Persistence layer configuration.
63
+ * - none: no persistence
64
+ * - memory: only in-memory persistence
65
+ * - file: persistence on filesystem
66
+ */
67
+ export interface PersistConfig {
68
+ mode: "none" | "memory" | "file";
69
+ dir?: string;
70
+ maxHistory?: number;
71
+ persistCache?: boolean;
72
+ }
73
+ /**
74
+ * Agent planning mode.
75
+ * - none: standard ReAct loop
76
+ * - basic: adds a PLAN step before execution
77
+ * - reflect: adds a PLAN step and a REFLECTION step after each tool call
78
+ */
79
+ export type PlanningMode = "none" | "basic" | "reflect";
80
+ /**
81
+ * Runtime options for `agent.run()`.
82
+ */
83
+ export interface RunOptions {
84
+ maxSteps?: number;
85
+ temperature?: number;
86
+ silent?: boolean;
87
+ maxRetries?: number;
88
+ retryDelayMs?: number;
89
+ backoff?: boolean;
90
+ persist?: PersistConfig | boolean;
91
+ resumeId?: string;
92
+ persistCache?: boolean;
93
+ planning?: PlanningMode;
94
+ }
95
+ /**
96
+ * Serialized snapshot of an agent run for resume and audit.
97
+ */
98
+ export interface SerializedState {
99
+ runId: string;
100
+ agentName: string;
101
+ messages: LLMMessage[];
102
+ state: AgentState;
103
+ step: number;
104
+ timestamp: number;
105
+ isFinished: boolean;
106
+ }
107
+ /**
108
+ * Typed result for a tool called during execution.
109
+ */
110
+ export type ToolResult = {
111
+ ok: true;
112
+ value: string;
113
+ } | {
114
+ ok: false;
115
+ error: string;
116
+ toolName: string;
117
+ };
118
+ /**
119
+ * Constructs a successful ToolResult.
120
+ */
121
+ export declare function toolSuccess(value: string): ToolResult;
122
+ /**
123
+ * Constructs a failed ToolResult.
124
+ */
125
+ export declare function toolFailure(toolName: string, error: string): ToolResult;
126
+ /**
127
+ * Events emitted by the agent during the lifecycle of a run.
128
+ */
129
+ export type AgentEvent = {
130
+ type: "agent:start";
131
+ log: LogMeta;
132
+ payload: {
133
+ agent: string;
134
+ input: string;
135
+ };
136
+ } | {
137
+ type: "agent:step";
138
+ log: LogMeta;
139
+ payload: {
140
+ step: number;
141
+ };
142
+ } | {
143
+ type: "agent:plan";
144
+ log: LogMeta;
145
+ payload: {
146
+ plan: string;
147
+ };
148
+ } | {
149
+ type: "agent:reflect";
150
+ log: LogMeta;
151
+ payload: {
152
+ reflection: string;
153
+ };
154
+ } | {
155
+ type: "agent:finish";
156
+ log: LogMeta;
157
+ payload: {
158
+ output: string;
159
+ };
160
+ } | {
161
+ type: "agent:max_steps";
162
+ log: LogMeta;
163
+ } | {
164
+ type: "agent:resume";
165
+ log: LogMeta;
166
+ payload: {
167
+ runId: string;
168
+ };
169
+ } | {
170
+ type: "llm:response";
171
+ log: LogMeta;
172
+ payload: LLMResponse;
173
+ } | {
174
+ type: "llm:stream_chunk";
175
+ log: LogMeta;
176
+ payload: {
177
+ delta: string;
178
+ };
179
+ } | {
180
+ type: "tool:call";
181
+ log: LogMeta;
182
+ payload: {
183
+ name: string;
184
+ args: unknown;
185
+ };
186
+ } | {
187
+ type: "tool:result";
188
+ log: LogMeta;
189
+ payload: {
190
+ name: string;
191
+ result: string;
192
+ };
193
+ } | {
194
+ type: "tool:error";
195
+ log: LogMeta;
196
+ payload: {
197
+ name: string;
198
+ error: string;
199
+ };
200
+ } | {
201
+ type: "retry:attempt";
202
+ log: LogMeta;
203
+ payload: {
204
+ name: string;
205
+ attempt: number;
206
+ error: string;
207
+ };
208
+ } | {
209
+ type: "state:saved";
210
+ log: LogMeta;
211
+ payload: {
212
+ runId: string;
213
+ };
214
+ };
215
+ /**
216
+ * Context passed to every agent execution callback.
217
+ */
218
+ export interface AgentContext {
219
+ agentName: string;
220
+ input: string;
221
+ messages: LLMMessage[];
222
+ state: AgentState;
223
+ step: number;
224
+ toolMap: Map<string, ToolMapEntry>;
225
+ tools: ToolDefinition[];
226
+ startTime: number;
227
+ emit: <E extends AgentEvent>(event: E) => void;
228
+ runId: string;
229
+ }
230
+ /**
231
+ * Type guard to identify a composable sub-agent tool.
232
+ */
233
+ export declare function isComposableTool(t: ToolDependency): t is ComposableTool;
234
+ /**
235
+ * Data structure representing a composable tool that wraps a dedicated agent.
236
+ */
237
+ export interface ComposableTool {
238
+ __isComposable: true;
239
+ AgentClass: new () => object;
240
+ name?: string;
241
+ description?: string;
242
+ inputKey: string;
243
+ maxSteps?: number;
244
+ }
245
+ //# sourceMappingURL=agent.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.types.d.ts","sourceRoot":"","sources":["../../src/agents/agent.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toolSuccess = toolSuccess;
4
+ exports.toolFailure = toolFailure;
5
+ exports.isComposableTool = isComposableTool;
6
+ /**
7
+ * Constructs a successful ToolResult.
8
+ */
9
+ function toolSuccess(value) {
10
+ return { ok: true, value };
11
+ }
12
+ /**
13
+ * Constructs a failed ToolResult.
14
+ */
15
+ function toolFailure(toolName, error) {
16
+ return { ok: false, error, toolName };
17
+ }
18
+ /**
19
+ * Type guard to identify a composable sub-agent tool.
20
+ */
21
+ function isComposableTool(t) {
22
+ return (typeof t === "object" &&
23
+ t !== null &&
24
+ "__isComposable" in t &&
25
+ t.__isComposable === true);
26
+ }
27
+ //# sourceMappingURL=agent.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.types.js","sourceRoot":"","sources":["../../src/agents/agent.types.ts"],"names":[],"mappings":";;AAoIA,kCAEC;AAKD,kCAEC;AA4CD,4CAOC;AA/DD;;GAEG;AACH,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,QAAgB,EAAE,KAAa;IACzD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAyCD;;GAEG;AACH,SAAgB,gBAAgB,CAAC,CAAiB;IAChD,OAAO,CACL,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI;QACV,gBAAgB,IAAI,CAAC;QACpB,CAAoB,CAAC,cAAc,KAAK,IAAI,CAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Defines the structure of an agent behavior configuration.
3
+ * Behaviors can specify role, rules, planning instructions, and answer formatting,
4
+ * and can extend other behaviors.
5
+ */
6
+ export interface AgentBehavior {
7
+ /** Optional role description for the agent (e.g., "You are a helpful assistant"). */
8
+ role?: string;
9
+ /** Optional rules or guidelines the agent must follow. */
10
+ rules?: string;
11
+ /** Optional planning instructions for multi-step reasoning. */
12
+ planning?: string;
13
+ /** Optional formatting instructions for answers. */
14
+ answer?: string;
15
+ /** Optional name of another behavior to extend/inherit from. */
16
+ extends?: string;
17
+ }
18
+ /**
19
+ * Union type for the keys of AgentBehavior sections.
20
+ * Used for dynamic access and validation of behavior properties.
21
+ */
22
+ export type BehaviorSection = "role" | "rules" | "planning" | "answer" | "extends";
23
+ //# sourceMappingURL=behavior.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior.types.d.ts","sourceRoot":"","sources":["../../../src/agents/behavior-engine/behavior.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=behavior.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior.types.js","sourceRoot":"","sources":["../../../src/agents/behavior-engine/behavior.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { AgentBehavior } from "./behavior.types";
2
+ /**
3
+ * Builds a formatted system prompt string from an AgentBehavior configuration.
4
+ *
5
+ * Concatenates each defined behavior section (role, rules, planning, answer)
6
+ * into a structured prompt with section headers. Sections are joined with double newlines.
7
+ *
8
+ * @param behavior - The behavior configuration to build the prompt from.
9
+ * @returns A formatted system prompt string.
10
+ */
11
+ export declare function buildSystemPrompt(behavior: AgentBehavior): string;
12
+ //# sourceMappingURL=build-system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-system-prompt.d.ts","sourceRoot":"","sources":["../../../src/agents/behavior-engine/build-system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAoBjE"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSystemPrompt = buildSystemPrompt;
4
+ /**
5
+ * Builds a formatted system prompt string from an AgentBehavior configuration.
6
+ *
7
+ * Concatenates each defined behavior section (role, rules, planning, answer)
8
+ * into a structured prompt with section headers. Sections are joined with double newlines.
9
+ *
10
+ * @param behavior - The behavior configuration to build the prompt from.
11
+ * @returns A formatted system prompt string.
12
+ */
13
+ function buildSystemPrompt(behavior) {
14
+ const parts = [];
15
+ if (behavior.role) {
16
+ parts.push(`## ROLE\n${behavior.role}`);
17
+ }
18
+ if (behavior.rules) {
19
+ parts.push(`## RULES\n${behavior.rules}`);
20
+ }
21
+ if (behavior.planning) {
22
+ parts.push(`## PLANNING\n${behavior.planning}`);
23
+ }
24
+ if (behavior.answer) {
25
+ parts.push(`## ANSWER STYLE\n${behavior.answer}`);
26
+ }
27
+ return parts.join("\n\n");
28
+ }
29
+ //# sourceMappingURL=build-system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-system-prompt.js","sourceRoot":"","sources":["../../../src/agents/behavior-engine/build-system-prompt.ts"],"names":[],"mappings":";;AAWA,8CAoBC;AA7BD;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAAC,QAAuB;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './behavior.types';
2
+ export * from './build-system-prompt';
3
+ export * from './load-behavior';
4
+ export * from './merge-behavior';
5
+ export * from './parse-behavior';
6
+ export * from './watch-behavior';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/behavior-engine/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./behavior.types"), exports);
18
+ __exportStar(require("./build-system-prompt"), exports);
19
+ __exportStar(require("./load-behavior"), exports);
20
+ __exportStar(require("./merge-behavior"), exports);
21
+ __exportStar(require("./parse-behavior"), exports);
22
+ __exportStar(require("./watch-behavior"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/behavior-engine/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,wDAAsC;AACtC,kDAAgC;AAChC,mDAAiC;AACjC,mDAAiC;AACjC,mDAAiC"}
@@ -0,0 +1,16 @@
1
+ import { AgentBehavior } from "./behavior.types";
2
+ /**
3
+ * Loads and merges behavior configurations from file paths or names.
4
+ *
5
+ * Parses each behavior file, merges them into a single AgentBehavior,
6
+ * and caches the result to avoid re-parsing. Supports single string or array of strings.
7
+ *
8
+ * @param input - Single behavior file path/name or array of them.
9
+ * @returns The merged AgentBehavior configuration.
10
+ */
11
+ export declare function loadBehavior(input: string | string[]): AgentBehavior;
12
+ /**
13
+ * Clears the in-memory cache. Called by watchBehavior and in tests.
14
+ */
15
+ export declare function clearLoadBehaviorCache(): void;
16
+ //# sourceMappingURL=load-behavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-behavior.d.ts","sourceRoot":"","sources":["../../../src/agents/behavior-engine/load-behavior.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,CASpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadBehavior = loadBehavior;
4
+ exports.clearLoadBehaviorCache = clearLoadBehaviorCache;
5
+ const parse_behavior_1 = require("./parse-behavior");
6
+ const merge_behavior_1 = require("./merge-behavior");
7
+ /**
8
+ * Module-level cache is acceptable here since behavior files are read-only at runtime.
9
+ * We expose a clear function for unit tests and hot-reload via watchBehavior.
10
+ */
11
+ const cache = new Map();
12
+ /**
13
+ * Loads and merges behavior configurations from file paths or names.
14
+ *
15
+ * Parses each behavior file, merges them into a single AgentBehavior,
16
+ * and caches the result to avoid re-parsing. Supports single string or array of strings.
17
+ *
18
+ * @param input - Single behavior file path/name or array of them.
19
+ * @returns The merged AgentBehavior configuration.
20
+ */
21
+ function loadBehavior(input) {
22
+ const key = JSON.stringify(input);
23
+ if (cache.has(key))
24
+ return cache.get(key);
25
+ const files = Array.isArray(input) ? input : [input];
26
+ const merged = (0, merge_behavior_1.mergeBehaviors)(files.map((f) => (0, parse_behavior_1.parseBehavior)(f)));
27
+ cache.set(key, merged);
28
+ return merged;
29
+ }
30
+ /**
31
+ * Clears the in-memory cache. Called by watchBehavior and in tests.
32
+ */
33
+ function clearLoadBehaviorCache() {
34
+ cache.clear();
35
+ }
36
+ //# sourceMappingURL=load-behavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-behavior.js","sourceRoot":"","sources":["../../../src/agents/behavior-engine/load-behavior.ts"],"names":[],"mappings":";;AAmBA,oCASC;AAKD,wDAEC;AAnCD,qDAAiD;AAEjD,qDAAkD;AAElD;;;GAGG;AACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;AAE/C;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAAC,KAAwB;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAE3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,8BAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB;IACpC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { AgentBehavior } from "./behavior.types";
2
+ /**
3
+ * Merges multiple AgentBehavior configurations into a single one.
4
+ *
5
+ * For most fields (role, answer, extends), later behaviors override earlier ones.
6
+ * For "rules" and "planning", values are concatenated with newlines to accumulate.
7
+ *
8
+ * @param behaviors - Array of behaviors to merge, in order of precedence.
9
+ * @returns A single merged AgentBehavior.
10
+ */
11
+ export declare function mergeBehaviors(behaviors: AgentBehavior[]): AgentBehavior;
12
+ //# sourceMappingURL=merge-behavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-behavior.d.ts","sourceRoot":"","sources":["../../../src/agents/behavior-engine/merge-behavior.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,aAAa,EAAE,GACzB,aAAa,CAmBf"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeBehaviors = mergeBehaviors;
4
+ /**
5
+ * Merges multiple AgentBehavior configurations into a single one.
6
+ *
7
+ * For most fields (role, answer, extends), later behaviors override earlier ones.
8
+ * For "rules" and "planning", values are concatenated with newlines to accumulate.
9
+ *
10
+ * @param behaviors - Array of behaviors to merge, in order of precedence.
11
+ * @returns A single merged AgentBehavior.
12
+ */
13
+ function mergeBehaviors(behaviors) {
14
+ const result = {};
15
+ for (const behavior of behaviors) {
16
+ for (const key of Object.keys(behavior)) {
17
+ const value = behavior[key];
18
+ if (!value)
19
+ continue;
20
+ if (key === "rules") {
21
+ result.rules = [result.rules, value].filter(Boolean).join("\n");
22
+ }
23
+ else if (key === "planning") {
24
+ result.planning = [result.planning, value].filter(Boolean).join("\n");
25
+ }
26
+ else {
27
+ result[key] = value;
28
+ }
29
+ }
30
+ }
31
+ return result;
32
+ }
33
+ //# sourceMappingURL=merge-behavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-behavior.js","sourceRoot":"","sources":["../../../src/agents/behavior-engine/merge-behavior.ts"],"names":[],"mappings":";;AAWA,wCAqBC;AA9BD;;;;;;;;GAQG;AACH,SAAgB,cAAc,CAC5B,SAA0B;IAE1B,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAA4B,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClE,CAAC;iBAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC9B,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { AgentBehavior } from "./behavior.types";
2
+ /**
3
+ * Parses a behavior file into an AgentBehavior object, resolving extends.
4
+ *
5
+ * @param filePath - Path to the behavior file to parse.
6
+ * @returns The parsed and extended AgentBehavior.
7
+ */
8
+ export declare function parseBehavior(filePath: string): AgentBehavior;
9
+ export declare function clearBehaviorCache(): void;
10
+ //# sourceMappingURL=parse-behavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-behavior.d.ts","sourceRoot":"","sources":["../../../src/agents/behavior-engine/parse-behavior.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAE7D;AAgED,wBAAgB,kBAAkB,SAEjC"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseBehavior = parseBehavior;
7
+ exports.clearBehaviorCache = clearBehaviorCache;
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const fileCache = new Map();
11
+ /**
12
+ * Parses a behavior file into an AgentBehavior object, resolving extends.
13
+ *
14
+ * @param filePath - Path to the behavior file to parse.
15
+ * @returns The parsed and extended AgentBehavior.
16
+ */
17
+ function parseBehavior(filePath) {
18
+ return parseBehaviorInternal(filePath, new Set());
19
+ }
20
+ /**
21
+ * Internal recursive function to parse behavior files with cycle detection.
22
+ *
23
+ * Parses markdown-like sections (# ROLE, # RULES, etc.) and handles extends.
24
+ *
25
+ * @param filePath - Path to the behavior file.
26
+ * @param visited - Set of visited paths to detect cycles.
27
+ * @returns The parsed AgentBehavior.
28
+ * @throws Error on circular extends.
29
+ */
30
+ function parseBehaviorInternal(filePath, visited) {
31
+ const fullPath = path_1.default.resolve(filePath);
32
+ if (fileCache.has(fullPath)) {
33
+ return fileCache.get(fullPath);
34
+ }
35
+ if (visited.has(fullPath)) {
36
+ throw new Error(`Circular behavior extends detected: ${fullPath}`);
37
+ }
38
+ visited.add(fullPath);
39
+ const content = fs_1.default.readFileSync(fullPath, "utf-8");
40
+ const sections = {};
41
+ const regex = /^#\s*(\w+)\s*\n([\s\S]*?)(?=^#|$)/gm;
42
+ let match;
43
+ while ((match = regex.exec(content)) !== null) {
44
+ const [, rawKey, rawValue] = match;
45
+ if (!rawKey || !rawValue)
46
+ continue;
47
+ const key = rawKey.trim().toLowerCase();
48
+ const value = rawValue.trim();
49
+ sections[key] = value;
50
+ }
51
+ let result = sections;
52
+ if (sections.extends) {
53
+ const parentPath = path_1.default.resolve(path_1.default.dirname(fullPath), sections.extends);
54
+ const parent = parseBehaviorInternal(parentPath, visited);
55
+ result = {
56
+ ...parent,
57
+ ...sections,
58
+ };
59
+ }
60
+ fileCache.set(fullPath, result);
61
+ return result;
62
+ }
63
+ function clearBehaviorCache() {
64
+ fileCache.clear();
65
+ }
66
+ //# sourceMappingURL=parse-behavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-behavior.js","sourceRoot":"","sources":["../../../src/agents/behavior-engine/parse-behavior.ts"],"names":[],"mappings":";;;;;AAYA,sCAEC;AAgED,gDAEC;AAhFD,4CAAoB;AACpB,gDAAwB;AAGxB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEnD;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,qBAAqB,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAC5B,QAAgB,EAChB,OAAoB;IAEpB,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,MAAM,KAAK,GAAG,qCAAqC,CAAC;IACpD,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;QAEnC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;YAAE,SAAS;QAEnC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAyB,CAAC;QAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7B,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,IAAI,MAAM,GAAkB,QAAQ,CAAC;IAErC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,GAAG;YACP,GAAG,MAAM;YACT,GAAG,QAAQ;SACZ,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEhC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,kBAAkB;IAChC,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Sets up file watching for behavior files in a directory.
3
+ *
4
+ * Watches for changes to .md files and clears the behavior cache on changes,
5
+ * enabling hot-reload of behaviors during development.
6
+ *
7
+ * @param dir - Directory path to watch for behavior files.
8
+ */
9
+ export declare function watchBehaviors(dir: string): void;
10
+ //# sourceMappingURL=watch-behavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-behavior.d.ts","sourceRoot":"","sources":["../../../src/agents/behavior-engine/watch-behavior.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,QAmBzC"}