praisonai 1.3.6 → 1.4.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 (138) hide show
  1. package/dist/ai/agent-loop.d.ts +177 -0
  2. package/dist/ai/agent-loop.js +313 -0
  3. package/dist/ai/devtools.d.ts +74 -0
  4. package/dist/ai/devtools.js +216 -0
  5. package/dist/ai/embed.d.ts +71 -0
  6. package/dist/ai/embed.js +154 -0
  7. package/dist/ai/generate-image.d.ts +66 -0
  8. package/dist/ai/generate-image.js +138 -0
  9. package/dist/ai/generate-object.d.ts +132 -0
  10. package/dist/ai/generate-object.js +206 -0
  11. package/dist/ai/generate-text.d.ts +201 -0
  12. package/dist/ai/generate-text.js +253 -0
  13. package/dist/ai/index.d.ts +27 -0
  14. package/dist/ai/index.js +140 -0
  15. package/dist/ai/mcp.d.ts +181 -0
  16. package/dist/ai/mcp.js +234 -0
  17. package/dist/ai/middleware.d.ts +110 -0
  18. package/dist/ai/middleware.js +186 -0
  19. package/dist/ai/models.d.ts +67 -0
  20. package/dist/ai/models.js +249 -0
  21. package/dist/ai/multimodal.d.ts +125 -0
  22. package/dist/ai/multimodal.js +270 -0
  23. package/dist/ai/nextjs.d.ts +122 -0
  24. package/dist/ai/nextjs.js +218 -0
  25. package/dist/ai/server.d.ts +126 -0
  26. package/dist/ai/server.js +336 -0
  27. package/dist/ai/speech.d.ts +135 -0
  28. package/dist/ai/speech.js +296 -0
  29. package/dist/ai/telemetry.d.ts +162 -0
  30. package/dist/ai/telemetry.js +311 -0
  31. package/dist/ai/tool-approval.d.ts +225 -0
  32. package/dist/ai/tool-approval.js +407 -0
  33. package/dist/ai/tools.d.ts +93 -0
  34. package/dist/ai/tools.js +89 -0
  35. package/dist/ai/types.d.ts +47 -0
  36. package/dist/ai/types.js +5 -0
  37. package/dist/ai/ui-message.d.ts +218 -0
  38. package/dist/ai/ui-message.js +291 -0
  39. package/dist/cli/commands/approval.d.ts +10 -0
  40. package/dist/cli/commands/approval.js +274 -0
  41. package/dist/cli/commands/observability.d.ts +7 -0
  42. package/dist/cli/commands/observability.js +202 -12
  43. package/dist/cli/commands/providers.d.ts +5 -2
  44. package/dist/cli/commands/providers.js +204 -5
  45. package/dist/cli/commands/tools.d.ts +11 -1
  46. package/dist/cli/commands/tools.js +450 -64
  47. package/dist/cli/output/errors.d.ts +1 -0
  48. package/dist/cli/output/errors.js +1 -0
  49. package/dist/cli/spec/cli-spec.js +17 -0
  50. package/dist/index.d.ts +12 -1
  51. package/dist/index.js +233 -19
  52. package/dist/integrations/computer-use.d.ts +182 -0
  53. package/dist/integrations/computer-use.js +356 -0
  54. package/dist/integrations/postgres.d.ts +162 -0
  55. package/dist/integrations/postgres.js +396 -0
  56. package/dist/integrations/slack.d.ts +145 -0
  57. package/dist/integrations/slack.js +270 -0
  58. package/dist/llm/providers/ai-sdk/types.d.ts +49 -3
  59. package/dist/llm/providers/ai-sdk/types.js +169 -15
  60. package/dist/observability/adapters/console.d.ts +33 -0
  61. package/dist/observability/adapters/console.js +71 -0
  62. package/dist/observability/adapters/external/arize.d.ts +20 -0
  63. package/dist/observability/adapters/external/arize.js +22 -0
  64. package/dist/observability/adapters/external/axiom.d.ts +20 -0
  65. package/dist/observability/adapters/external/axiom.js +22 -0
  66. package/dist/observability/adapters/external/braintrust.d.ts +20 -0
  67. package/dist/observability/adapters/external/braintrust.js +22 -0
  68. package/dist/observability/adapters/external/helicone.d.ts +20 -0
  69. package/dist/observability/adapters/external/helicone.js +22 -0
  70. package/dist/observability/adapters/external/laminar.d.ts +20 -0
  71. package/dist/observability/adapters/external/laminar.js +22 -0
  72. package/dist/observability/adapters/external/langfuse.d.ts +28 -0
  73. package/dist/observability/adapters/external/langfuse.js +186 -0
  74. package/dist/observability/adapters/external/langsmith.d.ts +21 -0
  75. package/dist/observability/adapters/external/langsmith.js +83 -0
  76. package/dist/observability/adapters/external/langwatch.d.ts +20 -0
  77. package/dist/observability/adapters/external/langwatch.js +22 -0
  78. package/dist/observability/adapters/external/maxim.d.ts +20 -0
  79. package/dist/observability/adapters/external/maxim.js +22 -0
  80. package/dist/observability/adapters/external/patronus.d.ts +20 -0
  81. package/dist/observability/adapters/external/patronus.js +22 -0
  82. package/dist/observability/adapters/external/scorecard.d.ts +20 -0
  83. package/dist/observability/adapters/external/scorecard.js +22 -0
  84. package/dist/observability/adapters/external/signoz.d.ts +20 -0
  85. package/dist/observability/adapters/external/signoz.js +22 -0
  86. package/dist/observability/adapters/external/traceloop.d.ts +20 -0
  87. package/dist/observability/adapters/external/traceloop.js +22 -0
  88. package/dist/observability/adapters/external/weave.d.ts +20 -0
  89. package/dist/observability/adapters/external/weave.js +22 -0
  90. package/dist/observability/adapters/index.d.ts +19 -0
  91. package/dist/observability/adapters/index.js +289 -0
  92. package/dist/observability/adapters/memory.d.ts +41 -0
  93. package/dist/observability/adapters/memory.js +190 -0
  94. package/dist/observability/adapters/noop.d.ts +25 -0
  95. package/dist/observability/adapters/noop.js +64 -0
  96. package/dist/observability/index.d.ts +39 -78
  97. package/dist/observability/index.js +99 -150
  98. package/dist/observability/types.d.ts +165 -0
  99. package/dist/observability/types.js +165 -0
  100. package/dist/tools/builtins/airweave.d.ts +32 -0
  101. package/dist/tools/builtins/airweave.js +119 -0
  102. package/dist/tools/builtins/bedrock-agentcore.d.ts +62 -0
  103. package/dist/tools/builtins/bedrock-agentcore.js +233 -0
  104. package/dist/tools/builtins/code-execution.d.ts +36 -0
  105. package/dist/tools/builtins/code-execution.js +136 -0
  106. package/dist/tools/builtins/code-mode.d.ts +54 -0
  107. package/dist/tools/builtins/code-mode.js +167 -0
  108. package/dist/tools/builtins/custom.d.ts +42 -0
  109. package/dist/tools/builtins/custom.js +195 -0
  110. package/dist/tools/builtins/exa.d.ts +53 -0
  111. package/dist/tools/builtins/exa.js +112 -0
  112. package/dist/tools/builtins/firecrawl.d.ts +56 -0
  113. package/dist/tools/builtins/firecrawl.js +158 -0
  114. package/dist/tools/builtins/index.d.ts +45 -0
  115. package/dist/tools/builtins/index.js +180 -0
  116. package/dist/tools/builtins/parallel.d.ts +30 -0
  117. package/dist/tools/builtins/parallel.js +113 -0
  118. package/dist/tools/builtins/perplexity.d.ts +32 -0
  119. package/dist/tools/builtins/perplexity.js +113 -0
  120. package/dist/tools/builtins/superagent.d.ts +66 -0
  121. package/dist/tools/builtins/superagent.js +187 -0
  122. package/dist/tools/builtins/tavily.d.ts +99 -0
  123. package/dist/tools/builtins/tavily.js +285 -0
  124. package/dist/tools/builtins/valyu.d.ts +65 -0
  125. package/dist/tools/builtins/valyu.js +193 -0
  126. package/dist/tools/index.d.ts +4 -0
  127. package/dist/tools/index.js +10 -2
  128. package/dist/tools/registry/index.d.ts +9 -0
  129. package/dist/tools/registry/index.js +28 -0
  130. package/dist/tools/registry/middleware.d.ts +43 -0
  131. package/dist/tools/registry/middleware.js +220 -0
  132. package/dist/tools/registry/registry.d.ts +92 -0
  133. package/dist/tools/registry/registry.js +280 -0
  134. package/dist/tools/registry/types.d.ts +217 -0
  135. package/dist/tools/registry/types.js +49 -0
  136. package/dist/tools/tools.d.ts +74 -0
  137. package/dist/tools/tools.js +133 -0
  138. package/package.json +4 -1
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Agent Loop - Manual Agent Loop Control
3
+ *
4
+ * Provides utilities for manual control of agent execution loops.
5
+ */
6
+ import type { Message } from './types';
7
+ export interface AgentLoopConfig {
8
+ /** Model to use */
9
+ model: string;
10
+ /** System prompt */
11
+ system?: string;
12
+ /** Available tools */
13
+ tools?: Record<string, AgentTool>;
14
+ /** Maximum steps (default: 10) */
15
+ maxSteps?: number;
16
+ /** Stop condition */
17
+ stopWhen?: StopCondition;
18
+ /** On step finish callback */
19
+ onStepFinish?: (step: AgentStep) => void | Promise<void>;
20
+ /** On tool call callback (for approval) */
21
+ onToolCall?: (toolCall: ToolCallInfo) => Promise<boolean>;
22
+ }
23
+ export interface AgentTool {
24
+ description: string;
25
+ parameters: any;
26
+ execute: (args: any) => Promise<any>;
27
+ }
28
+ export interface AgentStep {
29
+ stepNumber: number;
30
+ text: string;
31
+ toolCalls: ToolCallInfo[];
32
+ toolResults: ToolResultInfo[];
33
+ usage: {
34
+ promptTokens: number;
35
+ completionTokens: number;
36
+ totalTokens: number;
37
+ };
38
+ finishReason: string;
39
+ }
40
+ export interface ToolCallInfo {
41
+ toolCallId: string;
42
+ toolName: string;
43
+ args: any;
44
+ }
45
+ export interface ToolResultInfo {
46
+ toolCallId: string;
47
+ toolName: string;
48
+ result: any;
49
+ isError?: boolean;
50
+ }
51
+ export type StopCondition = {
52
+ type: 'stepCount';
53
+ count: number;
54
+ } | {
55
+ type: 'noToolCalls';
56
+ } | {
57
+ type: 'custom';
58
+ check: (step: AgentStep) => boolean;
59
+ };
60
+ export interface AgentLoopResult {
61
+ text: string;
62
+ steps: AgentStep[];
63
+ totalUsage: {
64
+ promptTokens: number;
65
+ completionTokens: number;
66
+ totalTokens: number;
67
+ };
68
+ finishReason: string;
69
+ }
70
+ /**
71
+ * Create a manual agent loop for fine-grained control.
72
+ *
73
+ * @example Basic usage
74
+ * ```typescript
75
+ * const loop = createAgentLoop({
76
+ * model: 'gpt-4o',
77
+ * system: 'You are a helpful assistant',
78
+ * tools: {
79
+ * search: {
80
+ * description: 'Search the web',
81
+ * parameters: z.object({ query: z.string() }),
82
+ * execute: async ({ query }) => searchWeb(query)
83
+ * }
84
+ * },
85
+ * maxSteps: 5
86
+ * });
87
+ *
88
+ * const result = await loop.run('Find information about AI');
89
+ * ```
90
+ *
91
+ * @example With approval
92
+ * ```typescript
93
+ * const loop = createAgentLoop({
94
+ * model: 'gpt-4o',
95
+ * tools: { ... },
96
+ * onToolCall: async (toolCall) => {
97
+ * const approved = await askUserForApproval(toolCall);
98
+ * return approved;
99
+ * }
100
+ * });
101
+ * ```
102
+ *
103
+ * @example Step-by-step control
104
+ * ```typescript
105
+ * const loop = createAgentLoop({ model: 'gpt-4o', tools: { ... } });
106
+ *
107
+ * // Initialize with a prompt
108
+ * loop.addMessage({ role: 'user', content: 'Hello' });
109
+ *
110
+ * // Run one step at a time
111
+ * while (!loop.isComplete()) {
112
+ * const step = await loop.step();
113
+ * console.log('Step:', step);
114
+ *
115
+ * // Optionally modify messages or tools between steps
116
+ * if (needsMoreContext) {
117
+ * loop.addMessage({ role: 'user', content: 'Additional context...' });
118
+ * }
119
+ * }
120
+ *
121
+ * const result = loop.getResult();
122
+ * ```
123
+ */
124
+ export declare function createAgentLoop(config: AgentLoopConfig): AgentLoop;
125
+ export declare class AgentLoop {
126
+ private config;
127
+ private messages;
128
+ private steps;
129
+ private currentStep;
130
+ private complete;
131
+ private totalUsage;
132
+ constructor(config: AgentLoopConfig);
133
+ /**
134
+ * Add a message to the conversation.
135
+ */
136
+ addMessage(message: Message): void;
137
+ /**
138
+ * Get all messages in the conversation.
139
+ */
140
+ getMessages(): Message[];
141
+ /**
142
+ * Check if the loop is complete.
143
+ */
144
+ isComplete(): boolean;
145
+ /**
146
+ * Run a single step of the agent loop.
147
+ */
148
+ step(): Promise<AgentStep>;
149
+ /**
150
+ * Run the full agent loop until completion.
151
+ */
152
+ run(prompt: string): Promise<AgentLoopResult>;
153
+ /**
154
+ * Get the final result.
155
+ */
156
+ getResult(): AgentLoopResult;
157
+ /**
158
+ * Check if the loop should stop.
159
+ */
160
+ private shouldStop;
161
+ /**
162
+ * Reset the agent loop.
163
+ */
164
+ reset(): void;
165
+ }
166
+ /**
167
+ * Create a stop condition that stops after N steps.
168
+ */
169
+ export declare function stopAfterSteps(count: number): StopCondition;
170
+ /**
171
+ * Create a stop condition that stops when no tool calls are made.
172
+ */
173
+ export declare function stopWhenNoToolCalls(): StopCondition;
174
+ /**
175
+ * Create a custom stop condition.
176
+ */
177
+ export declare function stopWhen(check: (step: AgentStep) => boolean): StopCondition;
@@ -0,0 +1,313 @@
1
+ "use strict";
2
+ /**
3
+ * Agent Loop - Manual Agent Loop Control
4
+ *
5
+ * Provides utilities for manual control of agent execution loops.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.AgentLoop = void 0;
42
+ exports.createAgentLoop = createAgentLoop;
43
+ exports.stopAfterSteps = stopAfterSteps;
44
+ exports.stopWhenNoToolCalls = stopWhenNoToolCalls;
45
+ exports.stopWhen = stopWhen;
46
+ /**
47
+ * Create a manual agent loop for fine-grained control.
48
+ *
49
+ * @example Basic usage
50
+ * ```typescript
51
+ * const loop = createAgentLoop({
52
+ * model: 'gpt-4o',
53
+ * system: 'You are a helpful assistant',
54
+ * tools: {
55
+ * search: {
56
+ * description: 'Search the web',
57
+ * parameters: z.object({ query: z.string() }),
58
+ * execute: async ({ query }) => searchWeb(query)
59
+ * }
60
+ * },
61
+ * maxSteps: 5
62
+ * });
63
+ *
64
+ * const result = await loop.run('Find information about AI');
65
+ * ```
66
+ *
67
+ * @example With approval
68
+ * ```typescript
69
+ * const loop = createAgentLoop({
70
+ * model: 'gpt-4o',
71
+ * tools: { ... },
72
+ * onToolCall: async (toolCall) => {
73
+ * const approved = await askUserForApproval(toolCall);
74
+ * return approved;
75
+ * }
76
+ * });
77
+ * ```
78
+ *
79
+ * @example Step-by-step control
80
+ * ```typescript
81
+ * const loop = createAgentLoop({ model: 'gpt-4o', tools: { ... } });
82
+ *
83
+ * // Initialize with a prompt
84
+ * loop.addMessage({ role: 'user', content: 'Hello' });
85
+ *
86
+ * // Run one step at a time
87
+ * while (!loop.isComplete()) {
88
+ * const step = await loop.step();
89
+ * console.log('Step:', step);
90
+ *
91
+ * // Optionally modify messages or tools between steps
92
+ * if (needsMoreContext) {
93
+ * loop.addMessage({ role: 'user', content: 'Additional context...' });
94
+ * }
95
+ * }
96
+ *
97
+ * const result = loop.getResult();
98
+ * ```
99
+ */
100
+ function createAgentLoop(config) {
101
+ return new AgentLoop(config);
102
+ }
103
+ class AgentLoop {
104
+ constructor(config) {
105
+ this.messages = [];
106
+ this.steps = [];
107
+ this.currentStep = 0;
108
+ this.complete = false;
109
+ this.totalUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
110
+ this.config = {
111
+ maxSteps: 10,
112
+ ...config,
113
+ };
114
+ // Add system message if provided
115
+ if (config.system) {
116
+ this.messages.push({ role: 'system', content: config.system });
117
+ }
118
+ }
119
+ /**
120
+ * Add a message to the conversation.
121
+ */
122
+ addMessage(message) {
123
+ this.messages.push(message);
124
+ }
125
+ /**
126
+ * Get all messages in the conversation.
127
+ */
128
+ getMessages() {
129
+ return [...this.messages];
130
+ }
131
+ /**
132
+ * Check if the loop is complete.
133
+ */
134
+ isComplete() {
135
+ return this.complete;
136
+ }
137
+ /**
138
+ * Run a single step of the agent loop.
139
+ */
140
+ async step() {
141
+ if (this.complete) {
142
+ throw new Error('Agent loop is already complete');
143
+ }
144
+ this.currentStep++;
145
+ // Check max steps
146
+ if (this.currentStep > (this.config.maxSteps || 10)) {
147
+ this.complete = true;
148
+ throw new Error(`Maximum steps (${this.config.maxSteps}) reached`);
149
+ }
150
+ // Import and call generateText
151
+ const { generateText } = await Promise.resolve().then(() => __importStar(require('./generate-text')));
152
+ const result = await generateText({
153
+ model: this.config.model,
154
+ messages: this.messages,
155
+ tools: this.config.tools,
156
+ maxSteps: 1, // Single step
157
+ });
158
+ // Build step result
159
+ const step = {
160
+ stepNumber: this.currentStep,
161
+ text: result.text,
162
+ toolCalls: result.toolCalls.map(tc => ({
163
+ toolCallId: tc.toolCallId,
164
+ toolName: tc.toolName,
165
+ args: tc.args,
166
+ })),
167
+ toolResults: result.toolResults.map(tr => ({
168
+ toolCallId: tr.toolCallId,
169
+ toolName: tr.toolName,
170
+ result: tr.result,
171
+ })),
172
+ usage: result.usage,
173
+ finishReason: result.finishReason,
174
+ };
175
+ // Update total usage
176
+ this.totalUsage.promptTokens += result.usage.promptTokens;
177
+ this.totalUsage.completionTokens += result.usage.completionTokens;
178
+ this.totalUsage.totalTokens += result.usage.totalTokens;
179
+ // Add assistant message
180
+ if (result.text) {
181
+ this.messages.push({ role: 'assistant', content: result.text });
182
+ }
183
+ // Handle tool calls
184
+ if (step.toolCalls.length > 0) {
185
+ // Check for approval if callback provided
186
+ if (this.config.onToolCall) {
187
+ for (const toolCall of step.toolCalls) {
188
+ const approved = await this.config.onToolCall(toolCall);
189
+ if (!approved) {
190
+ this.complete = true;
191
+ step.finishReason = 'tool_rejected';
192
+ break;
193
+ }
194
+ }
195
+ }
196
+ // Add tool call message
197
+ const toolCallParts = step.toolCalls.map(tc => ({
198
+ type: 'tool-call',
199
+ toolCallId: tc.toolCallId,
200
+ toolName: tc.toolName,
201
+ args: tc.args,
202
+ }));
203
+ this.messages.push({ role: 'assistant', content: '', toolCalls: toolCallParts });
204
+ // Add tool results
205
+ for (const tr of step.toolResults) {
206
+ const toolResultPart = {
207
+ type: 'tool-result',
208
+ toolCallId: tr.toolCallId,
209
+ toolName: tr.toolName,
210
+ result: tr.result,
211
+ };
212
+ this.messages.push({
213
+ role: 'tool',
214
+ content: [toolResultPart],
215
+ toolCallId: tr.toolCallId,
216
+ });
217
+ }
218
+ }
219
+ // Store step
220
+ this.steps.push(step);
221
+ // Call step finish callback
222
+ if (this.config.onStepFinish) {
223
+ await this.config.onStepFinish(step);
224
+ }
225
+ // Check stop conditions
226
+ if (this.shouldStop(step)) {
227
+ this.complete = true;
228
+ }
229
+ return step;
230
+ }
231
+ /**
232
+ * Run the full agent loop until completion.
233
+ */
234
+ async run(prompt) {
235
+ // Add user message
236
+ this.addMessage({ role: 'user', content: prompt });
237
+ // Run steps until complete
238
+ while (!this.isComplete()) {
239
+ try {
240
+ await this.step();
241
+ }
242
+ catch (error) {
243
+ if (error.message.includes('Maximum steps')) {
244
+ break;
245
+ }
246
+ throw error;
247
+ }
248
+ }
249
+ return this.getResult();
250
+ }
251
+ /**
252
+ * Get the final result.
253
+ */
254
+ getResult() {
255
+ const lastStep = this.steps[this.steps.length - 1];
256
+ return {
257
+ text: lastStep?.text || '',
258
+ steps: this.steps,
259
+ totalUsage: this.totalUsage,
260
+ finishReason: lastStep?.finishReason || 'unknown',
261
+ };
262
+ }
263
+ /**
264
+ * Check if the loop should stop.
265
+ */
266
+ shouldStop(step) {
267
+ // Check custom stop condition
268
+ if (this.config.stopWhen) {
269
+ switch (this.config.stopWhen.type) {
270
+ case 'stepCount':
271
+ return this.currentStep >= this.config.stopWhen.count;
272
+ case 'noToolCalls':
273
+ return step.toolCalls.length === 0;
274
+ case 'custom':
275
+ return this.config.stopWhen.check(step);
276
+ }
277
+ }
278
+ // Default: stop when no tool calls
279
+ return step.toolCalls.length === 0 && step.finishReason === 'stop';
280
+ }
281
+ /**
282
+ * Reset the agent loop.
283
+ */
284
+ reset() {
285
+ this.messages = [];
286
+ this.steps = [];
287
+ this.currentStep = 0;
288
+ this.complete = false;
289
+ this.totalUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
290
+ if (this.config.system) {
291
+ this.messages.push({ role: 'system', content: this.config.system });
292
+ }
293
+ }
294
+ }
295
+ exports.AgentLoop = AgentLoop;
296
+ /**
297
+ * Create a stop condition that stops after N steps.
298
+ */
299
+ function stopAfterSteps(count) {
300
+ return { type: 'stepCount', count };
301
+ }
302
+ /**
303
+ * Create a stop condition that stops when no tool calls are made.
304
+ */
305
+ function stopWhenNoToolCalls() {
306
+ return { type: 'noToolCalls' };
307
+ }
308
+ /**
309
+ * Create a custom stop condition.
310
+ */
311
+ function stopWhen(check) {
312
+ return { type: 'custom', check };
313
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * DevTools - AI SDK v6 DevTools Integration
3
+ *
4
+ * Provides optional DevTools integration for debugging AI SDK calls.
5
+ * This is an optional dependency that provides visibility into LLM calls.
6
+ */
7
+ export interface DevToolsConfig {
8
+ /** Enable DevTools (default: auto-detect from NODE_ENV) */
9
+ enabled?: boolean;
10
+ /** DevTools server port (default: 3001) */
11
+ port?: number;
12
+ /** DevTools server host (default: localhost) */
13
+ host?: string;
14
+ /** Project name for DevTools UI */
15
+ projectName?: string;
16
+ /** Custom metadata to include */
17
+ metadata?: Record<string, unknown>;
18
+ }
19
+ export interface DevToolsState {
20
+ enabled: boolean;
21
+ initialized: boolean;
22
+ port?: number;
23
+ host?: string;
24
+ }
25
+ /**
26
+ * Enable AI SDK DevTools for debugging.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * // Enable in development
31
+ * if (process.env.NODE_ENV === 'development') {
32
+ * await enableDevTools();
33
+ * }
34
+ * ```
35
+ *
36
+ * @example With configuration
37
+ * ```typescript
38
+ * await enableDevTools({
39
+ * port: 3001,
40
+ * projectName: 'My AI App'
41
+ * });
42
+ * ```
43
+ */
44
+ export declare function enableDevTools(config?: DevToolsConfig): Promise<void>;
45
+ /**
46
+ * Disable DevTools.
47
+ */
48
+ export declare function disableDevTools(): Promise<void>;
49
+ /**
50
+ * Check if DevTools is enabled.
51
+ */
52
+ export declare function isDevToolsEnabled(): boolean;
53
+ /**
54
+ * Get DevTools state.
55
+ */
56
+ export declare function getDevToolsState(): DevToolsState;
57
+ /**
58
+ * Get DevTools URL.
59
+ */
60
+ export declare function getDevToolsUrl(): string | null;
61
+ /**
62
+ * Create middleware that logs to DevTools.
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const model = wrapModel(openai('gpt-4o'), createDevToolsMiddleware());
67
+ * ```
68
+ */
69
+ export declare function createDevToolsMiddleware(): any;
70
+ /**
71
+ * Auto-enable DevTools if in development mode.
72
+ * Call this at app startup.
73
+ */
74
+ export declare function autoEnableDevTools(): Promise<void>;