@agntk/core 0.3.0 → 0.3.1

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 (132) hide show
  1. package/dist/agent-v2.d.ts +48 -0
  2. package/dist/agent-v2.d.ts.map +1 -0
  3. package/dist/agent-v2.js +365 -0
  4. package/dist/agent-v2.js.map +1 -0
  5. package/dist/memory/engine.d.ts +130 -0
  6. package/dist/memory/engine.d.ts.map +1 -0
  7. package/dist/memory/engine.js +227 -0
  8. package/dist/memory/engine.js.map +1 -0
  9. package/dist/memory/vectra-store.d.ts +31 -0
  10. package/dist/memory/vectra-store.d.ts.map +1 -0
  11. package/dist/memory/vectra-store.js +122 -0
  12. package/dist/memory/vectra-store.js.map +1 -0
  13. package/dist/models.js +1 -1
  14. package/dist/models.js.map +1 -1
  15. package/dist/pool/index.d.ts +7 -0
  16. package/dist/pool/index.d.ts.map +1 -0
  17. package/dist/pool/index.js +6 -0
  18. package/dist/pool/index.js.map +1 -0
  19. package/dist/pool/specialist-pool.d.ts +59 -0
  20. package/dist/pool/specialist-pool.d.ts.map +1 -0
  21. package/dist/pool/specialist-pool.js +224 -0
  22. package/dist/pool/specialist-pool.js.map +1 -0
  23. package/dist/pool/tools.d.ts +63 -0
  24. package/dist/pool/tools.d.ts.map +1 -0
  25. package/dist/pool/tools.js +83 -0
  26. package/dist/pool/tools.js.map +1 -0
  27. package/dist/pool/types.d.ts +79 -0
  28. package/dist/pool/types.d.ts.map +1 -0
  29. package/dist/pool/types.js +5 -0
  30. package/dist/pool/types.js.map +1 -0
  31. package/dist/presets/index.d.ts +5 -0
  32. package/dist/presets/index.d.ts.map +1 -0
  33. package/dist/presets/index.js +5 -0
  34. package/dist/presets/index.js.map +1 -0
  35. package/dist/presets/role-registry.d.ts +41 -0
  36. package/dist/presets/role-registry.d.ts.map +1 -0
  37. package/dist/presets/role-registry.js +213 -0
  38. package/dist/presets/role-registry.js.map +1 -0
  39. package/dist/presets/roles.d.ts +105 -0
  40. package/dist/presets/roles.d.ts.map +1 -0
  41. package/dist/presets/roles.js +207 -0
  42. package/dist/presets/roles.js.map +1 -0
  43. package/dist/prompts/templates.d.ts +11 -0
  44. package/dist/prompts/templates.d.ts.map +1 -0
  45. package/dist/prompts/templates.js +115 -0
  46. package/dist/prompts/templates.js.map +1 -0
  47. package/dist/streaming/data-parts.d.ts +163 -0
  48. package/dist/streaming/data-parts.d.ts.map +1 -0
  49. package/dist/streaming/data-parts.js +14 -0
  50. package/dist/streaming/data-parts.js.map +1 -0
  51. package/dist/streaming/index.d.ts +8 -0
  52. package/dist/streaming/index.d.ts.map +1 -0
  53. package/dist/streaming/index.js +10 -0
  54. package/dist/streaming/index.js.map +1 -0
  55. package/dist/streaming/transient.d.ts +136 -0
  56. package/dist/streaming/transient.d.ts.map +1 -0
  57. package/dist/streaming/transient.js +201 -0
  58. package/dist/streaming/transient.js.map +1 -0
  59. package/dist/tools/factory.d.ts +109 -0
  60. package/dist/tools/factory.d.ts.map +1 -0
  61. package/dist/tools/factory.js +166 -0
  62. package/dist/tools/factory.js.map +1 -0
  63. package/dist/tools/provider.d.ts +97 -0
  64. package/dist/tools/provider.d.ts.map +1 -0
  65. package/dist/tools/provider.js +178 -0
  66. package/dist/tools/provider.js.map +1 -0
  67. package/dist/types/agent-v2.d.ts +83 -0
  68. package/dist/types/agent-v2.d.ts.map +1 -0
  69. package/dist/types/agent-v2.js +8 -0
  70. package/dist/types/agent-v2.js.map +1 -0
  71. package/dist/utils/logger.d.ts +35 -0
  72. package/dist/utils/logger.d.ts.map +1 -0
  73. package/dist/utils/logger.js +149 -0
  74. package/dist/utils/logger.js.map +1 -0
  75. package/dist/workflow/builders/adapt.d.ts +20 -0
  76. package/dist/workflow/builders/adapt.d.ts.map +1 -0
  77. package/dist/workflow/builders/adapt.js +33 -0
  78. package/dist/workflow/builders/adapt.js.map +1 -0
  79. package/dist/workflow/builders/index.d.ts +8 -0
  80. package/dist/workflow/builders/index.d.ts.map +1 -0
  81. package/dist/workflow/builders/index.js +7 -0
  82. package/dist/workflow/builders/index.js.map +1 -0
  83. package/dist/workflow/builders/parallel.d.ts +25 -0
  84. package/dist/workflow/builders/parallel.d.ts.map +1 -0
  85. package/dist/workflow/builders/parallel.js +60 -0
  86. package/dist/workflow/builders/parallel.js.map +1 -0
  87. package/dist/workflow/builders/pipeline.d.ts +22 -0
  88. package/dist/workflow/builders/pipeline.d.ts.map +1 -0
  89. package/dist/workflow/builders/pipeline.js +48 -0
  90. package/dist/workflow/builders/pipeline.js.map +1 -0
  91. package/dist/workflow/builders/types.d.ts +54 -0
  92. package/dist/workflow/builders/types.d.ts.map +1 -0
  93. package/dist/workflow/builders/types.js +5 -0
  94. package/dist/workflow/builders/types.js.map +1 -0
  95. package/dist/workflow/durable-agent.d.ts +128 -0
  96. package/dist/workflow/durable-agent.d.ts.map +1 -0
  97. package/dist/workflow/durable-agent.js +323 -0
  98. package/dist/workflow/durable-agent.js.map +1 -0
  99. package/dist/workflow/schedulers.d.ts +231 -0
  100. package/dist/workflow/schedulers.d.ts.map +1 -0
  101. package/dist/workflow/schedulers.js +250 -0
  102. package/dist/workflow/schedulers.js.map +1 -0
  103. package/dist/workflow/team/create-team.d.ts +34 -0
  104. package/dist/workflow/team/create-team.d.ts.map +1 -0
  105. package/dist/workflow/team/create-team.js +242 -0
  106. package/dist/workflow/team/create-team.js.map +1 -0
  107. package/dist/workflow/team/index.d.ts +9 -0
  108. package/dist/workflow/team/index.d.ts.map +1 -0
  109. package/dist/workflow/team/index.js +8 -0
  110. package/dist/workflow/team/index.js.map +1 -0
  111. package/dist/workflow/team/machines.d.ts +152 -0
  112. package/dist/workflow/team/machines.d.ts.map +1 -0
  113. package/dist/workflow/team/machines.js +197 -0
  114. package/dist/workflow/team/machines.js.map +1 -0
  115. package/dist/workflow/team/task-board.d.ts +47 -0
  116. package/dist/workflow/team/task-board.d.ts.map +1 -0
  117. package/dist/workflow/team/task-board.js +111 -0
  118. package/dist/workflow/team/task-board.js.map +1 -0
  119. package/dist/workflow/team/tools.d.ts +66 -0
  120. package/dist/workflow/team/tools.d.ts.map +1 -0
  121. package/dist/workflow/team/tools.js +100 -0
  122. package/dist/workflow/team/tools.js.map +1 -0
  123. package/dist/workflow/team/types.d.ts +109 -0
  124. package/dist/workflow/team/types.d.ts.map +1 -0
  125. package/dist/workflow/team/types.js +5 -0
  126. package/dist/workflow/team/types.js.map +1 -0
  127. package/dist/workflow/templates.d.ts +71 -0
  128. package/dist/workflow/templates.d.ts.map +1 -0
  129. package/dist/workflow/templates.js +132 -0
  130. package/dist/workflow/templates.js.map +1 -0
  131. package/package.json +13 -13
  132. package/LICENSE +0 -22
@@ -0,0 +1,231 @@
1
+ /**
2
+ * @agntk/core - Scheduled Workflows
3
+ *
4
+ * Implements recurring task execution using Workflow DevKit's `sleep()`.
5
+ * Each scheduled workflow is a durable loop: execute → sleep → repeat.
6
+ * Zero compute cost during sleep — the workflow runtime suspends the process.
7
+ *
8
+ * @see ADV-SCHEDULER-018
9
+ * @see https://useworkflow.dev
10
+ */
11
+ import { parseDuration, formatDuration } from './utils.js';
12
+ /**
13
+ * Configuration for a scheduled workflow.
14
+ *
15
+ * @typeParam T - The return type of the task function
16
+ */
17
+ export interface ScheduledWorkflowConfig<T = void> {
18
+ /** Human-readable name for this schedule. */
19
+ name: string;
20
+ /** Description of what the scheduled task does. */
21
+ description?: string;
22
+ /**
23
+ * Interval between executions.
24
+ * Duration string (e.g., "1h", "1d", "7d").
25
+ */
26
+ interval: string;
27
+ /**
28
+ * The task to execute on each tick.
29
+ * Receives the current iteration number (0-indexed) and returns a result.
30
+ */
31
+ task: (iteration: number) => Promise<T> | T;
32
+ /**
33
+ * Maximum number of iterations before the workflow stops.
34
+ * Omit or set to `Infinity` for an infinite loop.
35
+ * @default Infinity
36
+ */
37
+ maxIterations?: number;
38
+ /**
39
+ * Whether to run the task immediately on start, or wait for the first interval.
40
+ * @default true
41
+ */
42
+ immediate?: boolean;
43
+ /**
44
+ * Called after each successful task execution.
45
+ */
46
+ onTick?: (result: T, iteration: number) => void | Promise<void>;
47
+ /**
48
+ * Called when a task execution throws an error.
49
+ * Return `true` to continue the schedule despite the error (default).
50
+ * Return `false` to stop the schedule.
51
+ * @default continue
52
+ */
53
+ onError?: (error: Error, iteration: number) => boolean | Promise<boolean>;
54
+ }
55
+ /**
56
+ * A running scheduled workflow instance.
57
+ *
58
+ * @typeParam T - The return type of the task function
59
+ */
60
+ export interface ScheduledWorkflow<T = void> {
61
+ /** The schedule configuration name. */
62
+ readonly name: string;
63
+ /** The schedule configuration description. */
64
+ readonly description?: string;
65
+ /** The interval between executions. */
66
+ readonly interval: string;
67
+ /**
68
+ * Start the schedule loop. Returns a promise that resolves
69
+ * when the schedule completes (hits maxIterations or is cancelled).
70
+ */
71
+ start: () => Promise<ScheduleResult<T>>;
72
+ /**
73
+ * Cancel the schedule. The current sleep will be interrupted,
74
+ * and the loop will exit after the current tick completes.
75
+ */
76
+ cancel: () => void;
77
+ /** Whether the schedule is currently running. */
78
+ readonly isRunning: boolean;
79
+ /** Number of completed iterations. */
80
+ readonly completedIterations: number;
81
+ /** Results from completed iterations. */
82
+ readonly results: ScheduleTickResult<T>[];
83
+ }
84
+ /**
85
+ * Result from a single scheduled tick.
86
+ */
87
+ export interface ScheduleTickResult<T = void> {
88
+ /** 0-indexed iteration number. */
89
+ iteration: number;
90
+ /** Whether the tick succeeded. */
91
+ success: boolean;
92
+ /** The result value (if success). */
93
+ result?: T;
94
+ /** The error message (if failed). */
95
+ error?: string;
96
+ /** Timestamp when the tick completed. */
97
+ completedAt: Date;
98
+ }
99
+ /**
100
+ * Final result from a completed schedule.
101
+ */
102
+ export interface ScheduleResult<T = void> {
103
+ /** Schedule name. */
104
+ name: string;
105
+ /** Total completed iterations. */
106
+ totalIterations: number;
107
+ /** Whether the schedule was cancelled. */
108
+ cancelled: boolean;
109
+ /** All tick results. */
110
+ ticks: ScheduleTickResult<T>[];
111
+ }
112
+ /**
113
+ * Create a scheduled workflow that loops with durable sleep.
114
+ *
115
+ * The workflow executes a task, sleeps for the configured interval,
116
+ * and repeats. Under the Workflow runtime, sleep is zero-compute.
117
+ *
118
+ * @param config - Schedule configuration
119
+ * @returns A `ScheduledWorkflow` instance (call `.start()` to begin)
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * const daily = createScheduledWorkflow({
124
+ * name: 'daily-briefing',
125
+ * interval: '1d',
126
+ * task: async (iteration) => {
127
+ * const agent = createAgent({ role: 'analyst' });
128
+ * const result = await agent.generate({
129
+ * prompt: 'Generate a daily briefing summary.',
130
+ * });
131
+ * return result.text;
132
+ * },
133
+ * onTick: (text, i) => console.log(`Briefing #${i}:`, text),
134
+ * });
135
+ *
136
+ * await daily.start(); // Loops forever with 1d sleep between ticks
137
+ * ```
138
+ */
139
+ export declare function createScheduledWorkflow<T = void>(config: ScheduledWorkflowConfig<T>): ScheduledWorkflow<T>;
140
+ /**
141
+ * Options for the daily briefing schedule preset.
142
+ */
143
+ export interface DailyBriefingOptions {
144
+ /**
145
+ * The task that generates the briefing content.
146
+ * Receives the iteration number.
147
+ */
148
+ generateBriefing: (iteration: number) => Promise<string>;
149
+ /**
150
+ * Called with each briefing (e.g., send email, post to Slack).
151
+ */
152
+ deliver: (briefing: string, iteration: number) => void | Promise<void>;
153
+ /**
154
+ * Override the default interval. Default: "1d"
155
+ */
156
+ interval?: string;
157
+ /**
158
+ * Maximum number of briefings. Default: Infinity
159
+ */
160
+ maxIterations?: number;
161
+ }
162
+ /**
163
+ * Create a daily briefing scheduled workflow.
164
+ *
165
+ * Runs a briefing generation task once per day (configurable),
166
+ * delivering the result via a callback.
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * const briefing = createDailyBriefing({
171
+ * generateBriefing: async () => {
172
+ * const agent = createAgent({ role: 'analyst' });
173
+ * const result = await agent.generate({
174
+ * prompt: 'Summarize today\'s calendar, emails, and tasks.',
175
+ * });
176
+ * return result.text;
177
+ * },
178
+ * deliver: (text) => sendSlackMessage('#daily', text),
179
+ * });
180
+ *
181
+ * await briefing.start();
182
+ * ```
183
+ */
184
+ export declare function createDailyBriefing(options: DailyBriefingOptions): ScheduledWorkflow<string>;
185
+ /**
186
+ * Options for the weekly report schedule preset.
187
+ */
188
+ export interface WeeklyReportOptions {
189
+ /**
190
+ * The task that generates the weekly report.
191
+ * Receives the iteration (week) number.
192
+ */
193
+ generateReport: (week: number) => Promise<string>;
194
+ /**
195
+ * Called with each report (e.g., send email, save to file).
196
+ */
197
+ deliver: (report: string, week: number) => void | Promise<void>;
198
+ /**
199
+ * Override the default interval. Default: "7d"
200
+ */
201
+ interval?: string;
202
+ /**
203
+ * Maximum number of reports. Default: Infinity
204
+ */
205
+ maxIterations?: number;
206
+ }
207
+ /**
208
+ * Create a weekly report scheduled workflow.
209
+ *
210
+ * Runs a report generation task once per week (configurable),
211
+ * delivering the result via a callback.
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * const report = createWeeklyReport({
216
+ * generateReport: async (week) => {
217
+ * const agent = createAgent({ role: 'analyst' });
218
+ * const result = await agent.generate({
219
+ * prompt: `Generate weekly report #${week + 1}.`,
220
+ * });
221
+ * return result.text;
222
+ * },
223
+ * deliver: (text) => sendEmail('team@company.com', 'Weekly Report', text),
224
+ * });
225
+ *
226
+ * await report.start();
227
+ * ```
228
+ */
229
+ export declare function createWeeklyReport(options: WeeklyReportOptions): ScheduledWorkflow<string>;
230
+ export { parseDuration, formatDuration };
231
+ //# sourceMappingURL=schedulers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedulers.d.ts","sourceRoot":"","sources":["../../src/workflow/schedulers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * @agntk/core - Scheduled Workflows
3
+ *
4
+ * Implements recurring task execution using Workflow DevKit's `sleep()`.
5
+ * Each scheduled workflow is a durable loop: execute → sleep → repeat.
6
+ * Zero compute cost during sleep — the workflow runtime suspends the process.
7
+ *
8
+ * @see ADV-SCHEDULER-018
9
+ * @see https://useworkflow.dev
10
+ */
11
+ import { createLogger } from '@agntk/logger';
12
+ import { sleep } from './hooks.js';
13
+ import { parseDuration, formatDuration } from './utils.js';
14
+ const log = createLogger('@agntk/core:workflow:scheduler');
15
+ // ============================================================================
16
+ // Scheduled Workflow Factory
17
+ // ============================================================================
18
+ /**
19
+ * Create a scheduled workflow that loops with durable sleep.
20
+ *
21
+ * The workflow executes a task, sleeps for the configured interval,
22
+ * and repeats. Under the Workflow runtime, sleep is zero-compute.
23
+ *
24
+ * @param config - Schedule configuration
25
+ * @returns A `ScheduledWorkflow` instance (call `.start()` to begin)
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const daily = createScheduledWorkflow({
30
+ * name: 'daily-briefing',
31
+ * interval: '1d',
32
+ * task: async (iteration) => {
33
+ * const agent = createAgent({ role: 'analyst' });
34
+ * const result = await agent.generate({
35
+ * prompt: 'Generate a daily briefing summary.',
36
+ * });
37
+ * return result.text;
38
+ * },
39
+ * onTick: (text, i) => console.log(`Briefing #${i}:`, text),
40
+ * });
41
+ *
42
+ * await daily.start(); // Loops forever with 1d sleep between ticks
43
+ * ```
44
+ */
45
+ export function createScheduledWorkflow(config) {
46
+ const { name, description, interval, task, maxIterations = Infinity, immediate = true, onTick, onError, } = config;
47
+ // Validate interval eagerly
48
+ const intervalMs = parseDuration(interval);
49
+ let _running = false;
50
+ let _cancelled = false;
51
+ let _iteration = 0;
52
+ const _results = [];
53
+ log.info('Scheduled workflow created', {
54
+ name,
55
+ interval,
56
+ intervalMs,
57
+ maxIterations: maxIterations === Infinity ? 'infinite' : maxIterations,
58
+ immediate,
59
+ });
60
+ async function executeTick(iteration) {
61
+ log.debug('Executing tick', { name, iteration });
62
+ try {
63
+ const result = await task(iteration);
64
+ const tickResult = {
65
+ iteration,
66
+ success: true,
67
+ result,
68
+ completedAt: new Date(),
69
+ };
70
+ if (onTick) {
71
+ await onTick(result, iteration);
72
+ }
73
+ log.info('Tick completed', { name, iteration });
74
+ return tickResult;
75
+ }
76
+ catch (err) {
77
+ const error = err instanceof Error ? err : new Error(String(err));
78
+ log.error('Tick failed', { name, iteration, error: error.message });
79
+ const tickResult = {
80
+ iteration,
81
+ success: false,
82
+ error: error.message,
83
+ completedAt: new Date(),
84
+ };
85
+ if (onError) {
86
+ const shouldContinue = await onError(error, iteration);
87
+ if (!shouldContinue) {
88
+ log.info('onError returned false — stopping schedule', { name });
89
+ _cancelled = true;
90
+ }
91
+ }
92
+ return tickResult;
93
+ }
94
+ }
95
+ async function start() {
96
+ if (_running) {
97
+ throw new Error(`Schedule "${name}" is already running`);
98
+ }
99
+ _running = true;
100
+ _cancelled = false;
101
+ _iteration = 0;
102
+ _results.length = 0;
103
+ log.info('Schedule started', { name, interval, maxIterations: maxIterations === Infinity ? 'infinite' : maxIterations });
104
+ try {
105
+ while (_iteration < maxIterations && !_cancelled) {
106
+ // Sleep before first tick if not immediate
107
+ if (_iteration === 0 && !immediate) {
108
+ log.debug('Waiting for first interval before executing', { name, interval });
109
+ await sleep(interval, { reason: `${name}: waiting for first interval` });
110
+ if (_cancelled)
111
+ break;
112
+ }
113
+ // Execute the tick
114
+ const tickResult = await executeTick(_iteration);
115
+ _results.push(tickResult);
116
+ _iteration++;
117
+ if (_cancelled)
118
+ break;
119
+ // Sleep between iterations (skip after last)
120
+ if (_iteration < maxIterations) {
121
+ log.debug('Sleeping between ticks', {
122
+ name,
123
+ iteration: _iteration,
124
+ interval,
125
+ intervalMs,
126
+ });
127
+ await sleep(interval, {
128
+ reason: `${name}: interval sleep (iteration ${_iteration})`,
129
+ });
130
+ }
131
+ }
132
+ }
133
+ finally {
134
+ _running = false;
135
+ }
136
+ const result = {
137
+ name,
138
+ totalIterations: _results.length,
139
+ cancelled: _cancelled,
140
+ ticks: [..._results],
141
+ };
142
+ log.info('Schedule completed', {
143
+ name,
144
+ totalIterations: result.totalIterations,
145
+ cancelled: result.cancelled,
146
+ });
147
+ return result;
148
+ }
149
+ function cancel() {
150
+ if (!_running) {
151
+ log.warn('cancel() called but schedule is not running', { name });
152
+ return;
153
+ }
154
+ log.info('Schedule cancelled', { name, iteration: _iteration });
155
+ _cancelled = true;
156
+ }
157
+ return {
158
+ name,
159
+ description,
160
+ interval,
161
+ start,
162
+ cancel,
163
+ get isRunning() {
164
+ return _running;
165
+ },
166
+ get completedIterations() {
167
+ return _results.length;
168
+ },
169
+ get results() {
170
+ return [..._results];
171
+ },
172
+ };
173
+ }
174
+ /**
175
+ * Create a daily briefing scheduled workflow.
176
+ *
177
+ * Runs a briefing generation task once per day (configurable),
178
+ * delivering the result via a callback.
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * const briefing = createDailyBriefing({
183
+ * generateBriefing: async () => {
184
+ * const agent = createAgent({ role: 'analyst' });
185
+ * const result = await agent.generate({
186
+ * prompt: 'Summarize today\'s calendar, emails, and tasks.',
187
+ * });
188
+ * return result.text;
189
+ * },
190
+ * deliver: (text) => sendSlackMessage('#daily', text),
191
+ * });
192
+ *
193
+ * await briefing.start();
194
+ * ```
195
+ */
196
+ export function createDailyBriefing(options) {
197
+ const { generateBriefing, deliver, interval = '1d', maxIterations, } = options;
198
+ return createScheduledWorkflow({
199
+ name: 'daily-briefing',
200
+ description: 'Generate and deliver a daily briefing summary',
201
+ interval,
202
+ maxIterations,
203
+ task: generateBriefing,
204
+ onTick: deliver,
205
+ onError: async (error, iteration) => {
206
+ log.error('Daily briefing failed', { iteration, error: error.message });
207
+ return true; // Continue schedule despite error
208
+ },
209
+ });
210
+ }
211
+ /**
212
+ * Create a weekly report scheduled workflow.
213
+ *
214
+ * Runs a report generation task once per week (configurable),
215
+ * delivering the result via a callback.
216
+ *
217
+ * @example
218
+ * ```typescript
219
+ * const report = createWeeklyReport({
220
+ * generateReport: async (week) => {
221
+ * const agent = createAgent({ role: 'analyst' });
222
+ * const result = await agent.generate({
223
+ * prompt: `Generate weekly report #${week + 1}.`,
224
+ * });
225
+ * return result.text;
226
+ * },
227
+ * deliver: (text) => sendEmail('team@company.com', 'Weekly Report', text),
228
+ * });
229
+ *
230
+ * await report.start();
231
+ * ```
232
+ */
233
+ export function createWeeklyReport(options) {
234
+ const { generateReport, deliver, interval = '7d', maxIterations, } = options;
235
+ return createScheduledWorkflow({
236
+ name: 'weekly-report',
237
+ description: 'Generate and deliver a weekly report',
238
+ interval,
239
+ maxIterations,
240
+ task: generateReport,
241
+ onTick: deliver,
242
+ onError: async (error, iteration) => {
243
+ log.error('Weekly report failed', { week: iteration, error: error.message });
244
+ return true; // Continue schedule despite error
245
+ },
246
+ });
247
+ }
248
+ // Re-export used helpers for convenience
249
+ export { parseDuration, formatDuration };
250
+ //# sourceMappingURL=schedulers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedulers.js","sourceRoot":"","sources":["../../src/workflow/schedulers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,GAAG,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;AAmI3D,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAkC;IAElC,MAAM,EACJ,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,aAAa,GAAG,QAAQ,EACxB,SAAS,GAAG,IAAI,EAChB,MAAM,EACN,OAAO,GACR,GAAG,MAAM,CAAC;IAEX,4BAA4B;IAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE;QACrC,IAAI;QACJ,QAAQ;QACR,UAAU;QACV,aAAa,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;QACtE,SAAS;KACV,CAAC,CAAC;IAEH,KAAK,UAAU,WAAW,CAAC,SAAiB;QAC1C,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;YAErC,MAAM,UAAU,GAA0B;gBACxC,SAAS;gBACT,OAAO,EAAE,IAAI;gBACb,MAAM;gBACN,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC;YAEF,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClC,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAChD,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAEpE,MAAM,UAAU,GAA0B;gBACxC,SAAS;gBACT,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACvD,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,GAAG,CAAC,IAAI,CAAC,4CAA4C,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjE,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,KAAK;QAClB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,sBAAsB,CAAC,CAAC;QAC3D,CAAC;QAED,QAAQ,GAAG,IAAI,CAAC;QAChB,UAAU,GAAG,KAAK,CAAC;QACnB,UAAU,GAAG,CAAC,CAAC;QACf,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAEpB,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAEzH,IAAI,CAAC;YACH,OAAO,UAAU,GAAG,aAAa,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjD,2CAA2C;gBAC3C,IAAI,UAAU,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnC,GAAG,CAAC,KAAK,CAAC,6CAA6C,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC7E,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,8BAA8B,EAAE,CAAC,CAAC;oBAEzE,IAAI,UAAU;wBAAE,MAAM;gBACxB,CAAC;gBAED,mBAAmB;gBACnB,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;gBACjD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1B,UAAU,EAAE,CAAC;gBAEb,IAAI,UAAU;oBAAE,MAAM;gBAEtB,6CAA6C;gBAC7C,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;oBAC/B,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE;wBAClC,IAAI;wBACJ,SAAS,EAAE,UAAU;wBACrB,QAAQ;wBACR,UAAU;qBACX,CAAC,CAAC;oBAEH,MAAM,KAAK,CAAC,QAAQ,EAAE;wBACpB,MAAM,EAAE,GAAG,IAAI,+BAA+B,UAAU,GAAG;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAsB;YAChC,IAAI;YACJ,eAAe,EAAE,QAAQ,CAAC,MAAM;YAChC,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC;SACrB,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI;YACJ,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,MAAM;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,6CAA6C,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAChE,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,WAAW;QACX,QAAQ;QACR,KAAK;QACL,MAAM;QAEN,IAAI,SAAS;YACX,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,mBAAmB;YACrB,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;QAED,IAAI,OAAO;YACT,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAgCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA6B;IAE7B,MAAM,EACJ,gBAAgB,EAChB,OAAO,EACP,QAAQ,GAAG,IAAI,EACf,aAAa,GACd,GAAG,OAAO,CAAC;IAEZ,OAAO,uBAAuB,CAAS;QACrC,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,+CAA+C;QAC5D,QAAQ;QACR,aAAa;QACb,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAClC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC,CAAC,kCAAkC;QACjD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AA4BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA4B;IAE5B,MAAM,EACJ,cAAc,EACd,OAAO,EACP,QAAQ,GAAG,IAAI,EACf,aAAa,GACd,GAAG,OAAO,CAAC;IAEZ,OAAO,uBAAuB,CAAS;QACrC,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,sCAAsC;QACnD,QAAQ;QACR,aAAa;QACb,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAClC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC,CAAC,kCAAkC;QACjD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,yCAAyC;AACzC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @fileoverview createTeam — public API for team coordination.
3
+ *
4
+ * Creates a Team that satisfies the Workflow interface, enabling
5
+ * composition with createPipeline and createParallel.
6
+ */
7
+ import type { TeamConfig, Team } from './types.js';
8
+ /**
9
+ * Create a team of agents that coordinate via messaging, claim tasks
10
+ * from a shared board, and produce synthesized results.
11
+ *
12
+ * Satisfies the Workflow interface so it can be used inside createPipeline
13
+ * or createParallel.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const team = createTeam({
18
+ * name: 'research-team',
19
+ * lead: { name: 'lead', agent: leadAgent },
20
+ * members: [
21
+ * { name: 'researcher', agent: researchAgent },
22
+ * { name: 'writer', agent: writerAgent },
23
+ * ],
24
+ * tasks: [
25
+ * { id: 'research', description: 'Research the topic' },
26
+ * { id: 'write', description: 'Write the report', dependsOn: ['research'] },
27
+ * ],
28
+ * });
29
+ *
30
+ * const result = await team.execute({ prompt: 'quantum computing' });
31
+ * ```
32
+ */
33
+ export declare function createTeam(config: TeamConfig): Team;
34
+ //# sourceMappingURL=create-team.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-team.d.ts","sourceRoot":"","sources":["../../../src/workflow/team/create-team.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,UAAU,EAEV,IAAI,EAOL,MAAM,SAAS,CAAC;AAOjB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CA4JnD"}