@falai/agent 1.1.2 → 1.2.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 (173) hide show
  1. package/README.md +9 -0
  2. package/dist/cjs/core/Agent.d.ts +17 -1
  3. package/dist/cjs/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/core/Agent.js +47 -0
  5. package/dist/cjs/core/Agent.js.map +1 -1
  6. package/dist/cjs/core/BatchPromptBuilder.d.ts +3 -0
  7. package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -1
  8. package/dist/cjs/core/BatchPromptBuilder.js +14 -11
  9. package/dist/cjs/core/BatchPromptBuilder.js.map +1 -1
  10. package/dist/cjs/core/CompactionEngine.d.ts +65 -0
  11. package/dist/cjs/core/CompactionEngine.d.ts.map +1 -0
  12. package/dist/cjs/core/CompactionEngine.js +251 -0
  13. package/dist/cjs/core/CompactionEngine.js.map +1 -0
  14. package/dist/cjs/core/PromptComposer.d.ts +8 -1
  15. package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
  16. package/dist/cjs/core/PromptComposer.js +238 -118
  17. package/dist/cjs/core/PromptComposer.js.map +1 -1
  18. package/dist/cjs/core/PromptSectionCache.d.ts +57 -0
  19. package/dist/cjs/core/PromptSectionCache.d.ts.map +1 -0
  20. package/dist/cjs/core/PromptSectionCache.js +108 -0
  21. package/dist/cjs/core/PromptSectionCache.js.map +1 -0
  22. package/dist/cjs/core/ResponseEngine.d.ts +3 -0
  23. package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
  24. package/dist/cjs/core/ResponseEngine.js +10 -6
  25. package/dist/cjs/core/ResponseEngine.js.map +1 -1
  26. package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
  27. package/dist/cjs/core/ResponseModal.js +79 -20
  28. package/dist/cjs/core/ResponseModal.js.map +1 -1
  29. package/dist/cjs/core/RoutingEngine.d.ts +10 -0
  30. package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
  31. package/dist/cjs/core/RoutingEngine.js +3 -2
  32. package/dist/cjs/core/RoutingEngine.js.map +1 -1
  33. package/dist/cjs/core/SessionManager.d.ts.map +1 -1
  34. package/dist/cjs/core/SessionManager.js +20 -0
  35. package/dist/cjs/core/SessionManager.js.map +1 -1
  36. package/dist/cjs/core/StreamingToolExecutor.d.ts +142 -0
  37. package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -0
  38. package/dist/cjs/core/StreamingToolExecutor.js +455 -0
  39. package/dist/cjs/core/StreamingToolExecutor.js.map +1 -0
  40. package/dist/cjs/core/ToolManager.d.ts +18 -1
  41. package/dist/cjs/core/ToolManager.d.ts.map +1 -1
  42. package/dist/cjs/core/ToolManager.js +91 -0
  43. package/dist/cjs/core/ToolManager.js.map +1 -1
  44. package/dist/cjs/index.d.ts +5 -1
  45. package/dist/cjs/index.d.ts.map +1 -1
  46. package/dist/cjs/index.js +8 -2
  47. package/dist/cjs/index.js.map +1 -1
  48. package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
  49. package/dist/cjs/providers/AnthropicProvider.js +8 -7
  50. package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
  51. package/dist/cjs/providers/GeminiProvider.d.ts +25 -0
  52. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  53. package/dist/cjs/providers/GeminiProvider.js +79 -51
  54. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  55. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  56. package/dist/cjs/providers/OpenAIProvider.js +14 -6
  57. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  58. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  59. package/dist/cjs/providers/OpenRouterProvider.js +7 -6
  60. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  61. package/dist/cjs/types/agent.d.ts +44 -0
  62. package/dist/cjs/types/agent.d.ts.map +1 -1
  63. package/dist/cjs/types/agent.js.map +1 -1
  64. package/dist/cjs/types/compaction.d.ts +50 -0
  65. package/dist/cjs/types/compaction.d.ts.map +1 -0
  66. package/dist/cjs/types/compaction.js +6 -0
  67. package/dist/cjs/types/compaction.js.map +1 -0
  68. package/dist/cjs/types/index.d.ts +4 -2
  69. package/dist/cjs/types/index.d.ts.map +1 -1
  70. package/dist/cjs/types/index.js.map +1 -1
  71. package/dist/cjs/types/tool.d.ts +84 -0
  72. package/dist/cjs/types/tool.d.ts.map +1 -1
  73. package/dist/core/Agent.d.ts +17 -1
  74. package/dist/core/Agent.d.ts.map +1 -1
  75. package/dist/core/Agent.js +47 -0
  76. package/dist/core/Agent.js.map +1 -1
  77. package/dist/core/BatchPromptBuilder.d.ts +3 -0
  78. package/dist/core/BatchPromptBuilder.d.ts.map +1 -1
  79. package/dist/core/BatchPromptBuilder.js +14 -11
  80. package/dist/core/BatchPromptBuilder.js.map +1 -1
  81. package/dist/core/CompactionEngine.d.ts +65 -0
  82. package/dist/core/CompactionEngine.d.ts.map +1 -0
  83. package/dist/core/CompactionEngine.js +244 -0
  84. package/dist/core/CompactionEngine.js.map +1 -0
  85. package/dist/core/PromptComposer.d.ts +8 -1
  86. package/dist/core/PromptComposer.d.ts.map +1 -1
  87. package/dist/core/PromptComposer.js +238 -118
  88. package/dist/core/PromptComposer.js.map +1 -1
  89. package/dist/core/PromptSectionCache.d.ts +57 -0
  90. package/dist/core/PromptSectionCache.d.ts.map +1 -0
  91. package/dist/core/PromptSectionCache.js +104 -0
  92. package/dist/core/PromptSectionCache.js.map +1 -0
  93. package/dist/core/ResponseEngine.d.ts +3 -0
  94. package/dist/core/ResponseEngine.d.ts.map +1 -1
  95. package/dist/core/ResponseEngine.js +10 -6
  96. package/dist/core/ResponseEngine.js.map +1 -1
  97. package/dist/core/ResponseModal.d.ts.map +1 -1
  98. package/dist/core/ResponseModal.js +79 -20
  99. package/dist/core/ResponseModal.js.map +1 -1
  100. package/dist/core/RoutingEngine.d.ts +10 -0
  101. package/dist/core/RoutingEngine.d.ts.map +1 -1
  102. package/dist/core/RoutingEngine.js +3 -2
  103. package/dist/core/RoutingEngine.js.map +1 -1
  104. package/dist/core/SessionManager.d.ts.map +1 -1
  105. package/dist/core/SessionManager.js +17 -0
  106. package/dist/core/SessionManager.js.map +1 -1
  107. package/dist/core/StreamingToolExecutor.d.ts +142 -0
  108. package/dist/core/StreamingToolExecutor.d.ts.map +1 -0
  109. package/dist/core/StreamingToolExecutor.js +448 -0
  110. package/dist/core/StreamingToolExecutor.js.map +1 -0
  111. package/dist/core/ToolManager.d.ts +18 -1
  112. package/dist/core/ToolManager.d.ts.map +1 -1
  113. package/dist/core/ToolManager.js +91 -0
  114. package/dist/core/ToolManager.js.map +1 -1
  115. package/dist/index.d.ts +5 -1
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +3 -0
  118. package/dist/index.js.map +1 -1
  119. package/dist/providers/AnthropicProvider.d.ts.map +1 -1
  120. package/dist/providers/AnthropicProvider.js +8 -7
  121. package/dist/providers/AnthropicProvider.js.map +1 -1
  122. package/dist/providers/GeminiProvider.d.ts +25 -0
  123. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  124. package/dist/providers/GeminiProvider.js +79 -51
  125. package/dist/providers/GeminiProvider.js.map +1 -1
  126. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  127. package/dist/providers/OpenAIProvider.js +14 -6
  128. package/dist/providers/OpenAIProvider.js.map +1 -1
  129. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  130. package/dist/providers/OpenRouterProvider.js +7 -6
  131. package/dist/providers/OpenRouterProvider.js.map +1 -1
  132. package/dist/types/agent.d.ts +44 -0
  133. package/dist/types/agent.d.ts.map +1 -1
  134. package/dist/types/agent.js.map +1 -1
  135. package/dist/types/compaction.d.ts +50 -0
  136. package/dist/types/compaction.d.ts.map +1 -0
  137. package/dist/types/compaction.js +5 -0
  138. package/dist/types/compaction.js.map +1 -0
  139. package/dist/types/index.d.ts +4 -2
  140. package/dist/types/index.d.ts.map +1 -1
  141. package/dist/types/index.js.map +1 -1
  142. package/dist/types/tool.d.ts +84 -0
  143. package/dist/types/tool.d.ts.map +1 -1
  144. package/docs/api/overview.md +140 -0
  145. package/docs/core/tools/enhanced-tool.md +186 -0
  146. package/docs/core/tools/streaming-execution.md +161 -0
  147. package/docs/guides/context-compaction.md +96 -0
  148. package/docs/guides/prompt-optimization.md +164 -0
  149. package/examples/advanced-patterns/context-compaction.ts +223 -0
  150. package/examples/advanced-patterns/streaming-responses.ts +85 -7
  151. package/examples/tools/enhanced-tool-metadata.ts +268 -0
  152. package/examples/tools/streaming-tool-execution.ts +283 -0
  153. package/package.json +1 -1
  154. package/src/core/Agent.ts +58 -2
  155. package/src/core/BatchPromptBuilder.ts +14 -11
  156. package/src/core/CompactionEngine.ts +318 -0
  157. package/src/core/PromptComposer.ts +261 -141
  158. package/src/core/PromptSectionCache.ts +136 -0
  159. package/src/core/ResponseEngine.ts +9 -6
  160. package/src/core/ResponseModal.ts +81 -20
  161. package/src/core/RoutingEngine.ts +13 -2
  162. package/src/core/SessionManager.ts +19 -0
  163. package/src/core/StreamingToolExecutor.ts +572 -0
  164. package/src/core/ToolManager.ts +151 -41
  165. package/src/index.ts +14 -0
  166. package/src/providers/AnthropicProvider.ts +11 -12
  167. package/src/providers/GeminiProvider.ts +83 -52
  168. package/src/providers/OpenAIProvider.ts +21 -13
  169. package/src/providers/OpenRouterProvider.ts +13 -13
  170. package/src/types/agent.ts +45 -0
  171. package/src/types/compaction.ts +52 -0
  172. package/src/types/index.ts +35 -14
  173. package/src/types/tool.ts +108 -0
@@ -1,188 +1,308 @@
1
1
  import { render, renderMany, formatKnowledgeBase, createTemplateContext } from "../utils/template";
2
2
  import { extractAIContextStrings, ConditionEvaluator } from "../utils/condition";
3
3
  export class PromptComposer {
4
- constructor(context = createTemplateContext({})) {
4
+ constructor(context = createTemplateContext({}), cache) {
5
5
  this.parts = [];
6
+ this.instructionCounter = 0;
6
7
  this.renderContext = context;
8
+ this.cache = cache ?? null;
7
9
  }
8
10
  // Specific, typed sections tailored to the framework
9
11
  async addAgentMeta(agent) {
10
- const lines = [];
11
- lines.push("## Agent");
12
- lines.push(`**Name:** ${agent.name}`);
13
- if (agent.goal) {
14
- lines.push(`**Goal:** ${agent.goal}`);
15
- }
16
- if (agent.description) {
17
- lines.push(`**Description:** ${agent.description}`);
18
- }
19
- if (agent.identity) {
20
- lines.push(`**Identity:** ${await render(agent.identity, this.renderContext)}`);
12
+ const compute = async () => {
13
+ const lines = [];
14
+ lines.push("## Agent Identity");
15
+ lines.push(`You are "${agent.name}". Always refer to yourself by this name.`);
16
+ if (agent.identity) {
17
+ lines.push(await render(agent.identity, this.renderContext));
18
+ }
19
+ if (agent.personality) {
20
+ lines.push(`Communicate in the following style: ${await render(agent.personality, this.renderContext)}`);
21
+ }
22
+ if (agent.goal) {
23
+ lines.push(`Your primary goal: ${agent.goal}`);
24
+ }
25
+ if (agent.description) {
26
+ lines.push(`About you: ${agent.description}`);
27
+ }
28
+ if (agent.rules?.length) {
29
+ const renderedRules = await renderMany(agent.rules, this.renderContext);
30
+ lines.push(`You MUST always follow these rules:\n- ${renderedRules.join("\n- ")}`);
31
+ }
32
+ if (agent.prohibitions?.length) {
33
+ const renderedProhibitions = await renderMany(agent.prohibitions, this.renderContext);
34
+ lines.push(`You MUST NEVER do the following:\n- ${renderedProhibitions.join("\n- ")}`);
35
+ }
36
+ return lines.join("\n");
37
+ };
38
+ if (this.cache) {
39
+ this.cache.register("agentMeta", "static", compute);
21
40
  }
22
- if (agent.personality) {
23
- lines.push(`**Personality:** ${await render(agent.personality, this.renderContext)}`);
41
+ else {
42
+ const result = await compute();
43
+ if (result)
44
+ this.parts.push(result);
24
45
  }
25
- this.parts.push(lines.join("\n"));
26
46
  return this;
27
47
  }
28
48
  async addRoutingOverview(routes) {
29
49
  return this.addActiveRoutes(routes);
30
50
  }
31
51
  async addScoringRules() {
32
- this.parts.push(`## Scoring Rules\n\n${[
33
- "- 90-100: explicit keywords + clear intent",
34
- "- 70-89: strong contextual evidence + relevant keywords",
35
- "- 50-69: moderate relevance",
36
- "- 30-49: weak connection or ambiguous",
37
- "- 0-29: minimal/none",
38
- "Return ONLY JSON matching the provided schema. Include scores for ALL routes.",
39
- ].join("\n")}`);
52
+ const compute = () => {
53
+ return `## Scoring Rules\n\n${[
54
+ "- 90-100: explicit keywords + clear intent",
55
+ "- 70-89: strong contextual evidence + relevant keywords",
56
+ "- 50-69: moderate relevance",
57
+ "- 30-49: weak connection or ambiguous",
58
+ "- 0-29: minimal/none",
59
+ "Return ONLY JSON matching the provided schema. Include scores for ALL routes.",
60
+ ].join("\n")}`;
61
+ };
62
+ if (this.cache) {
63
+ this.cache.register("scoringRules", "static", compute);
64
+ }
65
+ else {
66
+ this.parts.push(compute());
67
+ }
40
68
  return Promise.resolve(this);
41
69
  }
42
70
  async addInstruction(text) {
43
- if (text)
44
- this.parts.push(`## Instruction\n\n${text}`);
71
+ if (!text)
72
+ return Promise.resolve(this);
73
+ const content = `## Instruction\n\n${text}`;
74
+ if (this.cache) {
75
+ const key = `instruction-${this.instructionCounter++}`;
76
+ this.cache.register(key, "dynamic", () => content);
77
+ }
78
+ else {
79
+ this.parts.push(content);
80
+ }
45
81
  return Promise.resolve(this);
46
82
  }
83
+ /**
84
+ * @deprecated History should flow through `GenerateMessageInput.history` natively.
85
+ * This method is kept for backward compatibility but will be removed in a future version.
86
+ */
47
87
  async addInteractionHistory(history, note) {
48
- const recent = history
49
- .slice(-10)
50
- .map((e) => `- ${JSON.stringify(e)}`)
51
- .join("\n");
52
- const header = note ? `${note}\n\n` : "";
53
- this.parts.push(`## Interaction History\n\n${header}Recent conversation events:\n\n${recent}`);
88
+ const compute = () => {
89
+ const recent = history
90
+ .slice(-10)
91
+ .map((e) => `- ${JSON.stringify(e)}`)
92
+ .join("\n");
93
+ const header = note ? `${note}\n\n` : "";
94
+ return `## Interaction History\n\n${header}Recent conversation events:\n\n${recent}`;
95
+ };
96
+ if (this.cache) {
97
+ this.cache.register("interactionHistory", "dynamic", compute);
98
+ }
99
+ else {
100
+ this.parts.push(compute());
101
+ }
54
102
  return Promise.resolve(this);
55
103
  }
56
104
  async addLastMessage(message) {
57
- this.parts.push(`## Last Message\n\n${message}`);
105
+ const compute = () => {
106
+ return `## Last Message\n\n${message}`;
107
+ };
108
+ if (this.cache) {
109
+ this.cache.register("lastMessage", "dynamic", compute);
110
+ }
111
+ else {
112
+ this.parts.push(compute());
113
+ }
58
114
  return Promise.resolve(this);
59
115
  }
60
116
  async addGlossary(terms) {
61
117
  if (!terms.length)
62
118
  return this;
63
- const renderedTerms = await Promise.all(terms.map(async (t) => {
64
- const name = await render(t.name, this.renderContext);
65
- const description = await render(t.description, this.renderContext);
66
- const synonyms = t.synonyms
67
- ? await renderMany(t.synonyms, this.renderContext)
68
- : [];
69
- const synonymText = synonyms.length > 0 ? ` (synonyms: ${synonyms.join(", ")})` : "";
70
- return `- **${name}**${synonymText}: ${description}`;
71
- }));
72
- this.parts.push(`## Glossary\n\n${renderedTerms.join("\n")}`);
119
+ const compute = async () => {
120
+ const renderedTerms = await Promise.all(terms.map(async (t) => {
121
+ const name = await render(t.name, this.renderContext);
122
+ const description = await render(t.description, this.renderContext);
123
+ const synonyms = t.synonyms
124
+ ? await renderMany(t.synonyms, this.renderContext)
125
+ : [];
126
+ const synonymText = synonyms.length > 0 ? ` (synonyms: ${synonyms.join(", ")})` : "";
127
+ return `- **${name}**${synonymText}: ${description}`;
128
+ }));
129
+ return `## Glossary\n\n${renderedTerms.join("\n")}`;
130
+ };
131
+ if (this.cache) {
132
+ this.cache.register("glossary", "static", compute);
133
+ }
134
+ else {
135
+ const result = await compute();
136
+ if (result)
137
+ this.parts.push(result);
138
+ }
73
139
  return this;
74
140
  }
75
141
  async addGuidelines(guidelines) {
76
142
  const enabled = guidelines.filter((g) => g.enabled !== false);
77
143
  if (!enabled.length)
78
144
  return this;
79
- const evaluator = new ConditionEvaluator(this.renderContext);
80
- const activeGuidelines = [];
81
- const allAIContextStrings = [];
82
- // Evaluate guideline conditions to determine which are active
83
- for (const guideline of enabled) {
84
- if (guideline.condition) {
85
- const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
86
- // Collect AI context strings for prompt
87
- allAIContextStrings.push(...evaluation.aiContextStrings);
88
- // Include guideline if:
89
- // 1. No programmatic conditions (only strings) - always active
90
- // 2. Programmatic conditions evaluate to true
91
- if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
145
+ const compute = async () => {
146
+ const evaluator = new ConditionEvaluator(this.renderContext);
147
+ const activeGuidelines = [];
148
+ const allAIContextStrings = [];
149
+ // Evaluate guideline conditions to determine which are active
150
+ for (const guideline of enabled) {
151
+ if (guideline.condition) {
152
+ const evaluation = await evaluator.evaluateCondition(guideline.condition, 'AND');
153
+ // Collect AI context strings for prompt
154
+ allAIContextStrings.push(...evaluation.aiContextStrings);
155
+ // Include guideline if:
156
+ // 1. No programmatic conditions (only strings) - always active
157
+ // 2. Programmatic conditions evaluate to true
158
+ if (!evaluation.hasProgrammaticConditions || evaluation.programmaticResult) {
159
+ activeGuidelines.push(guideline);
160
+ }
161
+ }
162
+ else {
163
+ // No condition means always active
92
164
  activeGuidelines.push(guideline);
93
165
  }
94
166
  }
95
- else {
96
- // No condition means always active
97
- activeGuidelines.push(guideline);
98
- }
99
- }
100
- if (!activeGuidelines.length && !allAIContextStrings.length)
101
- return this;
102
- const renderedGuidelines = await Promise.all(activeGuidelines.map(async (g, i) => {
103
- const action = await render(g.action, this.renderContext);
104
- if (g.condition) {
105
- // Use AI context strings if available, otherwise render the condition
106
- const conditionStrings = extractAIContextStrings(g.condition);
107
- if (conditionStrings.length > 0) {
108
- const conditionText = conditionStrings.join(" AND ");
109
- return `- Guideline #${i + 1}: When ${conditionText}, then ${action}`;
167
+ if (!activeGuidelines.length && !allAIContextStrings.length)
168
+ return null;
169
+ const renderedGuidelines = await Promise.all(activeGuidelines.map(async (g, i) => {
170
+ const action = await render(g.action, this.renderContext);
171
+ if (g.condition) {
172
+ // Use AI context strings if available, otherwise render the condition
173
+ const conditionStrings = extractAIContextStrings(g.condition);
174
+ if (conditionStrings.length > 0) {
175
+ const conditionText = conditionStrings.join(" AND ");
176
+ return `- Guideline #${i + 1}: When ${conditionText}, then ${action}`;
177
+ }
110
178
  }
179
+ return `- Guideline #${i + 1}: ${action}`;
180
+ }));
181
+ // Add any additional AI context from inactive guidelines
182
+ if (allAIContextStrings.length > 0) {
183
+ const uniqueContextStrings = Array.from(new Set(allAIContextStrings));
184
+ const contextSection = `\n\n**Additional Context:** ${uniqueContextStrings.join(", ")}`;
185
+ return `## Guidelines\n\n${renderedGuidelines.join("\n")}${contextSection}`;
111
186
  }
112
- return `- Guideline #${i + 1}: ${action}`;
113
- }));
114
- // Add any additional AI context from inactive guidelines
115
- if (allAIContextStrings.length > 0) {
116
- const uniqueContextStrings = Array.from(new Set(allAIContextStrings));
117
- const contextSection = `\n\n**Additional Context:** ${uniqueContextStrings.join(", ")}`;
118
- this.parts.push(`## Guidelines\n\n${renderedGuidelines.join("\n")}${contextSection}`);
187
+ else {
188
+ return `## Guidelines\n\n${renderedGuidelines.join("\n")}`;
189
+ }
190
+ };
191
+ if (this.cache) {
192
+ this.cache.register("guidelines", "dynamic", compute);
119
193
  }
120
194
  else {
121
- this.parts.push(`## Guidelines\n\n${renderedGuidelines.join("\n")}`);
195
+ const result = await compute();
196
+ if (result)
197
+ this.parts.push(result);
122
198
  }
123
199
  return this;
124
200
  }
125
201
  async addKnowledgeBase(agentKnowledgeBase, routeKnowledgeBase) {
126
- // Merge agent and route knowledge bases (route takes precedence for conflicts)
127
- const mergedKnowledge = {
128
- ...(agentKnowledgeBase || {}),
129
- ...(routeKnowledgeBase || {}),
202
+ const compute = () => {
203
+ // Merge agent and route knowledge bases (route takes precedence for conflicts)
204
+ const mergedKnowledge = {
205
+ ...(agentKnowledgeBase || {}),
206
+ ...(routeKnowledgeBase || {}),
207
+ };
208
+ // Only add section if there's knowledge data
209
+ if (Object.keys(mergedKnowledge).length > 0) {
210
+ return formatKnowledgeBase(mergedKnowledge, "Knowledge Base");
211
+ }
212
+ return null;
130
213
  };
131
- // Only add section if there's knowledge data
132
- if (Object.keys(mergedKnowledge).length > 0) {
133
- const formatted = formatKnowledgeBase(mergedKnowledge, "Knowledge Base");
134
- this.parts.push(formatted);
214
+ if (this.cache) {
215
+ this.cache.register("knowledgeBase", "static", compute);
216
+ }
217
+ else {
218
+ const result = compute();
219
+ if (result)
220
+ this.parts.push(result);
135
221
  }
136
222
  return Promise.resolve(this);
137
223
  }
138
224
  async addActiveRoutes(routes) {
139
225
  if (!routes.length)
140
226
  return this;
141
- const renderedRoutes = await Promise.all(routes.map(async (r, i) => {
142
- const whenContextStrings = r.when ? extractAIContextStrings(r.when) : [];
143
- const conditions = whenContextStrings.length > 0
144
- ? `\n\n **Triggered when:** ${whenContextStrings.join(" OR ")}`
145
- : "";
146
- const desc = r.description
147
- ? `\n\n **Description:** ${r.description}`
148
- : "";
149
- const rules = await renderMany(r.getRules(), this.renderContext);
150
- const prohibitions = await renderMany(r.getProhibitions(), this.renderContext);
151
- const rulesInfo = rules.length > 0
152
- ? `\n\n **Rules:**\n ${rules.map((x) => ` - ${x}`).join("\n ")}`
153
- : "";
154
- const prohibitionsInfo = prohibitions.length > 0
155
- ? `\n\n **Prohibitions:**\n ${prohibitions
156
- .map((x) => ` - ${x}`)
157
- .join("\n ")}`
158
- : "";
159
- return `### Route ${i + 1}: ${r.title}${desc}${conditions}${rulesInfo}${prohibitionsInfo}`;
160
- }));
161
- this.parts.push(`## Available Routes\n\n${renderedRoutes.join("\n\n")}`);
227
+ const compute = async () => {
228
+ const renderedRoutes = await Promise.all(routes.map(async (r, i) => {
229
+ const whenContextStrings = r.when ? extractAIContextStrings(r.when) : [];
230
+ const conditions = whenContextStrings.length > 0
231
+ ? `\n\n **Triggered when:** ${whenContextStrings.join(" OR ")}`
232
+ : "";
233
+ const desc = r.description
234
+ ? `\n\n **Description:** ${r.description}`
235
+ : "";
236
+ const rules = await renderMany(r.getRules(), this.renderContext);
237
+ const prohibitions = await renderMany(r.getProhibitions(), this.renderContext);
238
+ const rulesInfo = rules.length > 0
239
+ ? `\n\n **Rules:**\n ${rules.map((x) => ` - ${x}`).join("\n ")}`
240
+ : "";
241
+ const prohibitionsInfo = prohibitions.length > 0
242
+ ? `\n\n **Prohibitions:**\n ${prohibitions
243
+ .map((x) => ` - ${x}`)
244
+ .join("\n ")}`
245
+ : "";
246
+ return `### Route ${i + 1}: ${r.title}${desc}${conditions}${rulesInfo}${prohibitionsInfo}`;
247
+ }));
248
+ return `## Available Routes\n\n${renderedRoutes.join("\n\n")}`;
249
+ };
250
+ if (this.cache) {
251
+ this.cache.register("activeRoutes", "static", compute);
252
+ }
253
+ else {
254
+ const result = await compute();
255
+ if (result)
256
+ this.parts.push(result);
257
+ }
162
258
  return this;
163
259
  }
164
260
  async addDirectives(directives) {
165
261
  if (!directives?.length)
166
262
  return this;
167
- this.parts.push(`## Directives\n\nAddress concisely:\n\n${directives
168
- .map((d) => `- ${d}`)
169
- .join("\n")}`);
263
+ const compute = () => {
264
+ return `## Directives\n\nAddress concisely:\n\n${directives
265
+ .map((d) => `- ${d}`)
266
+ .join("\n")}`;
267
+ };
268
+ if (this.cache) {
269
+ this.cache.register("directives", "dynamic", compute);
270
+ }
271
+ else {
272
+ this.parts.push(compute());
273
+ }
170
274
  return Promise.resolve(this);
171
275
  }
172
276
  async addAvailableTools(tools) {
173
277
  if (!tools?.length)
174
278
  return this;
175
- const renderedTools = tools.map((tool, i) => {
176
- const toolName = tool.name || tool.id;
177
- const desc = tool.description
178
- ? `\n Description: ${tool.description}`
179
- : "";
180
- return `### Tool ${i + 1}: ${toolName}${desc}`;
181
- });
182
- this.parts.push(`## Available Tools\n\n${renderedTools.join("\n\n")}`);
279
+ const compute = () => {
280
+ const renderedTools = tools.map((tool, i) => {
281
+ const toolName = tool.name || tool.id;
282
+ const desc = tool.description
283
+ ? `\n Description: ${tool.description}`
284
+ : "";
285
+ return `### Tool ${i + 1}: ${toolName}${desc}`;
286
+ });
287
+ return `## Available Tools\n\n${renderedTools.join("\n\n")}`;
288
+ };
289
+ if (this.cache) {
290
+ this.cache.register("availableTools", "dynamic", compute);
291
+ }
292
+ else {
293
+ this.parts.push(compute());
294
+ }
183
295
  return Promise.resolve(this);
184
296
  }
185
297
  async build() {
298
+ if (this.cache) {
299
+ const sections = await this.cache.resolveAll();
300
+ const prompt = sections
301
+ .filter((s) => s != null && s !== "")
302
+ .join("\n\n")
303
+ .trim();
304
+ return prompt;
305
+ }
186
306
  const prompt = this.parts.filter(Boolean).join("\n\n").trim();
187
307
  return Promise.resolve(prompt);
188
308
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PromptComposer.js","sourceRoot":"","sources":["../../src/core/PromptComposer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PromptComposer.js","sourceRoot":"","sources":["../../src/core/PromptComposer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * PromptSectionCache - Memoizes static prompt sections across turns,
3
+ * recomputing only dynamic sections per-turn.
4
+ *
5
+ * Static sections (agent identity, glossary, knowledge base, route descriptions)
6
+ * are cached after first computation. Dynamic sections (current step context,
7
+ * directives, available tools) are recomputed on every resolveAll() call.
8
+ */
9
+ /** Section type: static sections are cached, dynamic sections recompute every turn */
10
+ export type PromptSectionType = "static" | "dynamic";
11
+ /** Configuration for prompt section caching behavior */
12
+ export interface PromptCacheConfig {
13
+ /** Whether to enable section memoization (default: true) */
14
+ enabled?: boolean;
15
+ /** Keys of sections that should always recompute every turn, even if registered as static */
16
+ volatileKeys?: string[];
17
+ }
18
+ /** Compute function that produces a section's content */
19
+ export type SectionCompute = () => string | null | Promise<string | null>;
20
+ export declare class PromptSectionCache {
21
+ private sections;
22
+ private insertionOrder;
23
+ private config;
24
+ constructor(config?: PromptCacheConfig);
25
+ /**
26
+ * Register a section with its compute function and type.
27
+ * Sections are resolved in registration order during resolveAll().
28
+ */
29
+ register(key: string, type: PromptSectionType, compute: SectionCompute): void;
30
+ /**
31
+ * Get a section's value. Static sections return cached value if available;
32
+ * dynamic sections always recompute.
33
+ */
34
+ get(key: string): Promise<string | null>;
35
+ /**
36
+ * Resolve all registered sections in registration order.
37
+ * Static sections use cache when available; dynamic sections always recompute.
38
+ */
39
+ resolveAll(): Promise<(string | null)[]>;
40
+ /**
41
+ * Invalidate a specific section's cache, forcing recomputation on next resolve.
42
+ */
43
+ invalidate(key: string): void;
44
+ /**
45
+ * Invalidate all cached sections (e.g., on session change or /clear).
46
+ */
47
+ invalidateAll(): void;
48
+ /**
49
+ * Check whether a section has a cached value.
50
+ */
51
+ has(key: string): boolean;
52
+ /**
53
+ * Determine if a section needs recomputation.
54
+ */
55
+ private shouldRecompute;
56
+ }
57
+ //# sourceMappingURL=PromptSectionCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptSectionCache.d.ts","sourceRoot":"","sources":["../../src/core/PromptSectionCache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,sFAAsF;AACtF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErD,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAC9B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,yDAAyD;AACzD,MAAM,MAAM,cAAc,GAAG,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAW1E,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,MAAM,CAA8B;gBAEhC,MAAM,CAAC,EAAE,iBAAiB;IAOtC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAQ7E;;;OAGG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAc9C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAQ9C;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAO7B;;OAEG;IACH,aAAa,IAAI,IAAI;IAMrB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAoB1B"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * PromptSectionCache - Memoizes static prompt sections across turns,
3
+ * recomputing only dynamic sections per-turn.
4
+ *
5
+ * Static sections (agent identity, glossary, knowledge base, route descriptions)
6
+ * are cached after first computation. Dynamic sections (current step context,
7
+ * directives, available tools) are recomputed on every resolveAll() call.
8
+ */
9
+ export class PromptSectionCache {
10
+ constructor(config) {
11
+ this.sections = new Map();
12
+ this.insertionOrder = [];
13
+ this.config = {
14
+ enabled: config?.enabled ?? true,
15
+ volatileKeys: config?.volatileKeys ?? [],
16
+ };
17
+ }
18
+ /**
19
+ * Register a section with its compute function and type.
20
+ * Sections are resolved in registration order during resolveAll().
21
+ */
22
+ register(key, type, compute) {
23
+ const existing = this.sections.has(key);
24
+ this.sections.set(key, { key, type, compute, cachedValue: undefined });
25
+ if (!existing) {
26
+ this.insertionOrder.push(key);
27
+ }
28
+ }
29
+ /**
30
+ * Get a section's value. Static sections return cached value if available;
31
+ * dynamic sections always recompute.
32
+ */
33
+ async get(key) {
34
+ const entry = this.sections.get(key);
35
+ if (!entry) {
36
+ return null;
37
+ }
38
+ if (this.shouldRecompute(entry)) {
39
+ const value = await entry.compute();
40
+ entry.cachedValue = value;
41
+ return value;
42
+ }
43
+ // cachedValue is defined (string or null) — return it
44
+ return entry.cachedValue;
45
+ }
46
+ /**
47
+ * Resolve all registered sections in registration order.
48
+ * Static sections use cache when available; dynamic sections always recompute.
49
+ */
50
+ async resolveAll() {
51
+ const results = [];
52
+ for (const key of this.insertionOrder) {
53
+ results.push(await this.get(key));
54
+ }
55
+ return results;
56
+ }
57
+ /**
58
+ * Invalidate a specific section's cache, forcing recomputation on next resolve.
59
+ */
60
+ invalidate(key) {
61
+ const entry = this.sections.get(key);
62
+ if (entry) {
63
+ entry.cachedValue = undefined;
64
+ }
65
+ }
66
+ /**
67
+ * Invalidate all cached sections (e.g., on session change or /clear).
68
+ */
69
+ invalidateAll() {
70
+ for (const entry of this.sections.values()) {
71
+ entry.cachedValue = undefined;
72
+ }
73
+ }
74
+ /**
75
+ * Check whether a section has a cached value.
76
+ */
77
+ has(key) {
78
+ return this.sections.has(key);
79
+ }
80
+ /**
81
+ * Determine if a section needs recomputation.
82
+ */
83
+ shouldRecompute(entry) {
84
+ // Caching disabled — always recompute
85
+ if (!this.config.enabled) {
86
+ return true;
87
+ }
88
+ // Dynamic sections always recompute
89
+ if (entry.type === "dynamic") {
90
+ return true;
91
+ }
92
+ // Volatile keys always recompute
93
+ if (this.config.volatileKeys.includes(entry.key)) {
94
+ return true;
95
+ }
96
+ // Static section not yet computed
97
+ if (entry.cachedValue === undefined) {
98
+ return true;
99
+ }
100
+ // Static section with cached value — use cache
101
+ return false;
102
+ }
103
+ }
104
+ //# sourceMappingURL=PromptSectionCache.js.map