@agntk/core 0.1.0 → 0.1.2

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 (38) hide show
  1. package/LICENSE +22 -0
  2. package/package.json +13 -13
  3. package/dist/memory/engine.d.ts +0 -130
  4. package/dist/memory/engine.d.ts.map +0 -1
  5. package/dist/memory/engine.js +0 -227
  6. package/dist/memory/engine.js.map +0 -1
  7. package/dist/memory/vectra-store.d.ts +0 -31
  8. package/dist/memory/vectra-store.d.ts.map +0 -1
  9. package/dist/memory/vectra-store.js +0 -122
  10. package/dist/memory/vectra-store.js.map +0 -1
  11. package/dist/prompts/templates.d.ts +0 -11
  12. package/dist/prompts/templates.d.ts.map +0 -1
  13. package/dist/prompts/templates.js +0 -115
  14. package/dist/prompts/templates.js.map +0 -1
  15. package/dist/streaming/data-parts.d.ts +0 -163
  16. package/dist/streaming/data-parts.d.ts.map +0 -1
  17. package/dist/streaming/data-parts.js +0 -14
  18. package/dist/streaming/data-parts.js.map +0 -1
  19. package/dist/streaming/index.d.ts +0 -8
  20. package/dist/streaming/index.d.ts.map +0 -1
  21. package/dist/streaming/index.js +0 -10
  22. package/dist/streaming/index.js.map +0 -1
  23. package/dist/streaming/transient.d.ts +0 -136
  24. package/dist/streaming/transient.d.ts.map +0 -1
  25. package/dist/streaming/transient.js +0 -201
  26. package/dist/streaming/transient.js.map +0 -1
  27. package/dist/tools/provider.d.ts +0 -97
  28. package/dist/tools/provider.d.ts.map +0 -1
  29. package/dist/tools/provider.js +0 -178
  30. package/dist/tools/provider.js.map +0 -1
  31. package/dist/utils/logger.d.ts +0 -35
  32. package/dist/utils/logger.d.ts.map +0 -1
  33. package/dist/utils/logger.js +0 -149
  34. package/dist/utils/logger.js.map +0 -1
  35. package/dist/workflow/durable-agent.d.ts +0 -128
  36. package/dist/workflow/durable-agent.d.ts.map +0 -1
  37. package/dist/workflow/durable-agent.js +0 -323
  38. package/dist/workflow/durable-agent.js.map +0 -1
@@ -1,323 +0,0 @@
1
- /**
2
- * @agntk/core - Durable Agent Factory
3
- *
4
- * Creates agents with workflow durability features.
5
- * Uses the Workflow DevKit ("use workflow" / "use step" directives)
6
- * for crash recovery, auto-retry, and step-level observability.
7
- *
8
- * When the `workflow` package is installed and the app runs under the
9
- * Workflow runtime, every LLM call and tool execution becomes a
10
- * discrete, checkpointed step. Without the runtime, the directives
11
- * are inert string literals and the agent operates normally.
12
- *
13
- * @see https://useworkflow.dev
14
- */
15
- import { createLogger } from '@agntk/logger';
16
- const log = createLogger('@agntk/core:workflow:durable');
17
- // ============================================================================
18
- // Workflow Runtime Detection
19
- // ============================================================================
20
- /** Cached availability result */
21
- let _workflowAvailable = null;
22
- let _workflowModule = null;
23
- /**
24
- * Check if the Workflow DevKit runtime is available.
25
- * Result is cached after first check.
26
- */
27
- export async function checkWorkflowAvailability() {
28
- if (_workflowAvailable !== null)
29
- return _workflowAvailable;
30
- try {
31
- _workflowModule = await import('workflow');
32
- _workflowAvailable = true;
33
- log.info('Workflow runtime detected');
34
- return true;
35
- }
36
- catch (_e) {
37
- _workflowAvailable = false;
38
- log.debug('Workflow runtime not available — durable features disabled');
39
- return false;
40
- }
41
- }
42
- /**
43
- * Get the workflow module (throws if not available).
44
- */
45
- function getWorkflowModule() {
46
- if (!_workflowModule) {
47
- throw new Error('Workflow package is not installed. Install it with: npm install workflow\n' +
48
- 'See https://useworkflow.dev for documentation.');
49
- }
50
- return _workflowModule;
51
- }
52
- /**
53
- * Reset workflow availability cache (for testing).
54
- * @internal
55
- */
56
- export function _resetWorkflowCache() {
57
- _workflowAvailable = null;
58
- _workflowModule = null;
59
- }
60
- // ============================================================================
61
- // Durable Execution Wrappers
62
- // ============================================================================
63
- /**
64
- * Wrap an agent's generate call as a workflow.
65
- * The "use workflow" directive marks the entire function as a durable workflow.
66
- * Named step functions give the workflow inspector descriptive labels.
67
- *
68
- * Inspector view: durableGenerateWorkflow → llmGenerate
69
- */
70
- async function durableGenerateWorkflow(agent, prompt) {
71
- "use workflow";
72
- log.info('durableGenerateWorkflow started', { promptLength: prompt.length });
73
- // Named step function — inspector displays "llmGenerate"
74
- async function llmGenerate() {
75
- "use step";
76
- log.debug('step:llmGenerate — executing LLM call');
77
- return agent.generate({ prompt });
78
- }
79
- const result = await llmGenerate();
80
- const text = await result.text;
81
- const totalUsage = result.totalUsage;
82
- log.info('durableGenerateWorkflow completed', { textLength: text?.length ?? 0 });
83
- return {
84
- text: text ?? '',
85
- steps: [{
86
- name: 'llm-generate',
87
- status: 'completed',
88
- }],
89
- usage: totalUsage ? {
90
- promptTokens: totalUsage.inputTokens ?? 0,
91
- completionTokens: totalUsage.outputTokens ?? 0,
92
- totalTokens: totalUsage.totalTokens ?? 0,
93
- } : undefined,
94
- };
95
- }
96
- /**
97
- * Wrap an agent's generate call with approval workflow.
98
- * The function suspends (zero compute) while waiting for webhook approval.
99
- *
100
- * Inspector view: durableWithApprovalWorkflow → llmDraft → webhookApproval → llmFinalize
101
- */
102
- async function durableWithApprovalWorkflow(agent, prompt, _webhookPath) {
103
- "use workflow";
104
- log.info('durableWithApprovalWorkflow started', { prompt: prompt.slice(0, 100) });
105
- // Step 1: Generate draft — inspector displays "llmDraft"
106
- async function llmDraft() {
107
- "use step";
108
- log.debug('step:llmDraft — generating draft');
109
- return agent.generate({ prompt });
110
- }
111
- const draftResult = await llmDraft();
112
- const draftText = await draftResult.text;
113
- // Step 2: Wait for approval — inspector displays "webhookApproval"
114
- log.info('Waiting for approval webhook');
115
- async function webhookApproval() {
116
- "use step";
117
- log.debug('step:webhookApproval — suspending for webhook');
118
- // The workflow runtime handles webhook suspension here.
119
- // This stub returns approved=true when not running under the runtime.
120
- return { approved: true };
121
- }
122
- const approval = await webhookApproval();
123
- if (!approval.approved) {
124
- log.warn('Approval rejected', { feedback: approval.feedback });
125
- throw new Error(`Approval rejected: ${approval.feedback || 'No reason provided'}`);
126
- }
127
- // Step 3: Finalize — inspector displays "llmFinalize"
128
- const finalPrompt = approval.modifiedContent
129
- ? `Finalize with modifications: ${approval.modifiedContent}. Original: ${draftText}`
130
- : prompt;
131
- async function llmFinalize() {
132
- "use step";
133
- log.debug('step:llmFinalize — finalizing after approval');
134
- return agent.generate({ prompt: finalPrompt });
135
- }
136
- const finalResult = await llmFinalize();
137
- const finalText = await finalResult.text;
138
- return {
139
- text: finalText ?? '',
140
- steps: [
141
- { name: 'llm-draft', status: 'completed' },
142
- { name: 'webhook-approval', status: 'completed' },
143
- { name: 'llm-finalize', status: 'completed' },
144
- ],
145
- };
146
- }
147
- /**
148
- * Wrap an agent's generate call with a durable delay.
149
- * Uses workflow sleep() — doesn't hold compute during the delay.
150
- *
151
- * Inspector view: durableScheduledWorkflow → durableSleep → llmGenerate
152
- */
153
- async function durableScheduledWorkflow(agent, prompt, delay) {
154
- "use workflow";
155
- log.info('durableScheduledWorkflow started', { delay });
156
- // Step 1: Sleep (zero compute) — inspector displays "durableSleep"
157
- async function durableSleep() {
158
- "use step";
159
- log.debug('step:durableSleep — sleeping', { delay });
160
- try {
161
- const wf = getWorkflowModule();
162
- await wf.sleep(delay);
163
- }
164
- catch (_e) {
165
- // If workflow not available, use regular setTimeout as fallback
166
- const ms = parseDuration(delay);
167
- log.warn('Workflow sleep unavailable, using setTimeout fallback', { ms });
168
- await new Promise(resolve => setTimeout(resolve, ms));
169
- }
170
- }
171
- await durableSleep();
172
- log.info('Sleep completed, executing prompt');
173
- // Step 2: Generate — inspector displays "llmGenerate"
174
- async function llmGenerate() {
175
- "use step";
176
- log.debug('step:llmGenerate — executing LLM call after sleep');
177
- return agent.generate({ prompt });
178
- }
179
- const result = await llmGenerate();
180
- const text = await result.text;
181
- return {
182
- text: text ?? '',
183
- steps: [
184
- { name: 'sleep', status: 'completed' },
185
- { name: 'llm-generate', status: 'completed' },
186
- ],
187
- };
188
- }
189
- // ============================================================================
190
- // Durable Agent Factory
191
- // ============================================================================
192
- /**
193
- * Create a durable agent with workflow integration.
194
- *
195
- * The durable agent wraps a standard Agent with workflow directives
196
- * that make every LLM call and tool execution a recoverable step.
197
- *
198
- * @param baseAgent - The base agent to wrap with durability
199
- * @param options - Durable agent options
200
- * @returns DurableAgent instance with both standard and durable methods
201
- *
202
- * @example
203
- * ```typescript
204
- * import { createAgent } from '@agntk/core';
205
- * import { createDurableAgent } from '@agntk/core/workflow';
206
- *
207
- * const base = createAgent({ role: 'coder', toolPreset: 'standard' });
208
- * const agent = createDurableAgent(base);
209
- *
210
- * // Standard generation (no durability)
211
- * const result = await agent.generate({ prompt: 'Hello' });
212
- *
213
- * // Durable generation (survives crashes)
214
- * const durable = await agent.durableGenerate('Create a component');
215
- *
216
- * // With approval workflow
217
- * const approved = await agent.withApproval('Draft email', '/api/approve');
218
- *
219
- * // Scheduled generation
220
- * const delayed = await agent.scheduled('Send reminder', '1h');
221
- * ```
222
- */
223
- export function createDurableAgent(baseAgent, options = {}) {
224
- log.info('Creating durable agent', {
225
- agentId: baseAgent.agentId,
226
- role: baseAgent.role,
227
- workflowOptions: options.workflowOptions,
228
- });
229
- let workflowRunId = options.workflowOptions?.workflowRunId;
230
- /**
231
- * Guard: ensure workflow is available before executing a durable method.
232
- * Throws a clear, actionable error if the workflow package isn't installed.
233
- * Standard Agent methods (generate, stream) still work without workflow.
234
- */
235
- async function ensureWorkflowAvailable() {
236
- const available = await checkWorkflowAvailability();
237
- if (!available) {
238
- throw new Error('Workflow package is not installed. Durable agent features require the workflow package.\n' +
239
- 'Install with: npm install workflow\n' +
240
- 'See https://useworkflow.dev for documentation.');
241
- }
242
- }
243
- const durableAgent = {
244
- // Delegate standard Agent interface to the base agent
245
- agentId: baseAgent.agentId,
246
- role: baseAgent.role,
247
- init: () => baseAgent.init(),
248
- getToolLoopAgent: () => baseAgent.getToolLoopAgent(),
249
- getSystemPrompt: () => baseAgent.getSystemPrompt(),
250
- // Standard methods — pass through to base agent (work without workflow)
251
- stream: (input) => baseAgent.stream(input),
252
- generate: (input) => baseAgent.generate(input),
253
- // Durable methods — require workflow package
254
- durableGenerate: async (prompt) => {
255
- await ensureWorkflowAvailable();
256
- log.info('durableGenerate() called', { promptLength: prompt.length });
257
- const result = await durableGenerateWorkflow(baseAgent, prompt);
258
- if (result.workflowRunId)
259
- workflowRunId = result.workflowRunId;
260
- return result;
261
- },
262
- withApproval: async (prompt, webhookPath) => {
263
- await ensureWorkflowAvailable();
264
- log.info('withApproval() called', { promptLength: prompt.length, webhookPath });
265
- return durableWithApprovalWorkflow(baseAgent, prompt, webhookPath);
266
- },
267
- scheduled: async (prompt, delay) => {
268
- await ensureWorkflowAvailable();
269
- log.info('scheduled() called', { promptLength: prompt.length, delay });
270
- return durableScheduledWorkflow(baseAgent, prompt, delay);
271
- },
272
- get isWorkflowActive() {
273
- return _workflowAvailable === true;
274
- },
275
- get workflowRunId() {
276
- return workflowRunId;
277
- },
278
- };
279
- log.info('Durable agent created', { agentId: baseAgent.agentId });
280
- return durableAgent;
281
- }
282
- // ============================================================================
283
- // Workflow Helpers
284
- // ============================================================================
285
- /**
286
- * Parse a duration string into milliseconds.
287
- * Supports: 30s, 5m, 1h, 1d
288
- */
289
- export function parseDuration(duration) {
290
- const match = duration.match(/^(\d+)(s|m|h|d)$/);
291
- if (!match) {
292
- throw new Error(`Invalid duration format: ${duration}. Use format like '30s', '5m', '1h', '1d'`);
293
- }
294
- const value = parseInt(match[1], 10);
295
- const unit = match[2];
296
- switch (unit) {
297
- case 's':
298
- return value * 1000;
299
- case 'm':
300
- return value * 60 * 1000;
301
- case 'h':
302
- return value * 60 * 60 * 1000;
303
- case 'd':
304
- return value * 24 * 60 * 60 * 1000;
305
- default:
306
- throw new Error(`Unknown duration unit: ${unit}`);
307
- }
308
- }
309
- /**
310
- * Format milliseconds as a human-readable duration.
311
- */
312
- export function formatDuration(ms) {
313
- if (ms < 1000)
314
- return `${ms}ms`;
315
- if (ms < 60000)
316
- return `${Math.round(ms / 1000)}s`;
317
- if (ms < 3600000)
318
- return `${Math.round(ms / 60000)}m`;
319
- if (ms < 86400000)
320
- return `${Math.round(ms / 3600000)}h`;
321
- return `${Math.round(ms / 86400000)}d`;
322
- }
323
- //# sourceMappingURL=durable-agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"durable-agent.js","sourceRoot":"","sources":["../../src/workflow/durable-agent.ts"],"names":[],"mappings":"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"}