@providerprotocol/agents 0.0.2 → 0.0.3

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 (73) hide show
  1. package/dist/checkpoint/index.d.ts +43 -0
  2. package/dist/checkpoint/index.js +64 -0
  3. package/dist/checkpoint/index.js.map +1 -0
  4. package/{src/execution/loop.ts → dist/chunk-4ESYN66B.js} +54 -162
  5. package/dist/chunk-4ESYN66B.js.map +1 -0
  6. package/dist/chunk-EKRXMSDX.js +8 -0
  7. package/dist/chunk-EKRXMSDX.js.map +1 -0
  8. package/dist/chunk-PHI5ULBV.js +427 -0
  9. package/dist/chunk-PHI5ULBV.js.map +1 -0
  10. package/dist/execution/index.d.ts +105 -0
  11. package/dist/execution/index.js +679 -0
  12. package/dist/execution/index.js.map +1 -0
  13. package/dist/index-qsPwbY86.d.ts +65 -0
  14. package/dist/index.d.ts +101 -0
  15. package/dist/index.js +218 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/middleware/index.d.ts +23 -0
  18. package/dist/middleware/index.js +82 -0
  19. package/dist/middleware/index.js.map +1 -0
  20. package/dist/thread-tree/index.d.ts +115 -0
  21. package/dist/thread-tree/index.js +4 -0
  22. package/dist/thread-tree/index.js.map +1 -0
  23. package/dist/types-2Vsthzyu.d.ts +163 -0
  24. package/dist/types-BhX9uD_d.d.ts +91 -0
  25. package/dist/types-DR02gtFv.d.ts +270 -0
  26. package/dist/types-NGQMdnaD.d.ts +65 -0
  27. package/package.json +40 -8
  28. package/.claude/settings.local.json +0 -29
  29. package/AGENTS.md +0 -681
  30. package/CLAUDE.md +0 -681
  31. package/bun.lock +0 -472
  32. package/eslint.config.js +0 -75
  33. package/index.ts +0 -1
  34. package/llms.md +0 -796
  35. package/specs/UAP-1.0.md +0 -2355
  36. package/src/agent/index.ts +0 -384
  37. package/src/agent/types.ts +0 -91
  38. package/src/checkpoint/file.ts +0 -126
  39. package/src/checkpoint/index.ts +0 -40
  40. package/src/checkpoint/types.ts +0 -95
  41. package/src/execution/index.ts +0 -37
  42. package/src/execution/plan.ts +0 -497
  43. package/src/execution/react.ts +0 -340
  44. package/src/execution/tool-ordering.ts +0 -186
  45. package/src/execution/types.ts +0 -315
  46. package/src/index.ts +0 -80
  47. package/src/middleware/index.ts +0 -7
  48. package/src/middleware/logging.ts +0 -123
  49. package/src/middleware/types.ts +0 -69
  50. package/src/state/index.ts +0 -301
  51. package/src/state/types.ts +0 -173
  52. package/src/thread-tree/index.ts +0 -249
  53. package/src/thread-tree/types.ts +0 -29
  54. package/src/utils/uuid.ts +0 -7
  55. package/tests/live/agent-anthropic.test.ts +0 -288
  56. package/tests/live/agent-strategy-hooks.test.ts +0 -268
  57. package/tests/live/checkpoint.test.ts +0 -243
  58. package/tests/live/execution-strategies.test.ts +0 -255
  59. package/tests/live/plan-strategy.test.ts +0 -160
  60. package/tests/live/subagent-events.live.test.ts +0 -249
  61. package/tests/live/thread-tree.test.ts +0 -186
  62. package/tests/unit/agent.test.ts +0 -703
  63. package/tests/unit/checkpoint.test.ts +0 -232
  64. package/tests/unit/execution/equivalence.test.ts +0 -402
  65. package/tests/unit/execution/loop.test.ts +0 -437
  66. package/tests/unit/execution/plan.test.ts +0 -590
  67. package/tests/unit/execution/react.test.ts +0 -604
  68. package/tests/unit/execution/subagent-events.test.ts +0 -235
  69. package/tests/unit/execution/tool-ordering.test.ts +0 -310
  70. package/tests/unit/middleware/logging.test.ts +0 -276
  71. package/tests/unit/state.test.ts +0 -573
  72. package/tests/unit/thread-tree.test.ts +0 -249
  73. package/tsconfig.json +0 -29
@@ -1,276 +0,0 @@
1
- import { describe, test, expect, mock } from 'bun:test';
2
- import { UserMessage, AssistantMessage } from '@providerprotocol/ai';
3
- import type { Turn } from '@providerprotocol/ai';
4
- import { logging } from '../../../src/middleware/logging.ts';
5
- import type { MiddlewareContext } from '../../../src/middleware/types.ts';
6
- import type { GenerateResult } from '../../../src/execution/types.ts';
7
- import { AgentState } from '../../../src/state/index.ts';
8
-
9
- function createMockContext(): MiddlewareContext {
10
- return {
11
- agent: { id: 'test-agent', system: 'Test system' },
12
- input: new UserMessage('Hello'),
13
- state: AgentState.initial(),
14
- metadata: new Map(),
15
- };
16
- }
17
-
18
- function createMockResult(): GenerateResult {
19
- const response = new AssistantMessage('Hello back!');
20
- return {
21
- turn: {
22
- response,
23
- messages: [response],
24
- toolExecutions: [],
25
- usage: {
26
- inputTokens: 10,
27
- outputTokens: 20,
28
- totalTokens: 30,
29
- },
30
- cycles: 1,
31
- } as unknown as Turn,
32
- state: AgentState.initial(),
33
- };
34
- }
35
-
36
- describe('logging() middleware', () => {
37
- describe('configuration', () => {
38
- test('uses default options', () => {
39
- const mw = logging();
40
- expect(mw.name).toBe('logging');
41
- });
42
-
43
- test('accepts custom log level', () => {
44
- const mw = logging({ level: 'debug' });
45
- expect(mw.name).toBe('logging');
46
- });
47
-
48
- test('accepts custom logger', () => {
49
- const customLogger = mock(() => {});
50
- const mw = logging({ logger: customLogger });
51
- expect(mw.name).toBe('logging');
52
- });
53
- });
54
-
55
- describe('before()', () => {
56
- test('logs execution started', async () => {
57
- const logs: string[] = [];
58
- const mw = logging({
59
- logger: (msg) => logs.push(msg),
60
- });
61
-
62
- const context = createMockContext();
63
- await mw.before?.(context);
64
-
65
- expect(logs.some((l) => l.includes('Execution started'))).toBe(true);
66
- });
67
-
68
- test('includes agent ID in log', async () => {
69
- const logs: string[] = [];
70
- const mw = logging({
71
- logger: (msg) => logs.push(msg),
72
- });
73
-
74
- const context = createMockContext();
75
- await mw.before?.(context);
76
-
77
- expect(logs.some((l) => l.includes('test-agent'))).toBe(true);
78
- });
79
-
80
- test('sets start time in metadata when timing enabled', async () => {
81
- const mw = logging({ includeTiming: true });
82
- const context = createMockContext();
83
-
84
- await mw.before?.(context);
85
-
86
- expect(context.metadata.has('_logging_startTime')).toBe(true);
87
- expect(typeof context.metadata.get('_logging_startTime')).toBe('number');
88
- });
89
-
90
- test('returns context', async () => {
91
- const mw = logging();
92
- const context = createMockContext();
93
-
94
- const result = await mw.before?.(context);
95
-
96
- expect(result).toBe(context);
97
- });
98
-
99
- test('logs input when includeMessages is true', async () => {
100
- const logs: string[] = [];
101
- const mw = logging({
102
- logger: (msg) => logs.push(msg),
103
- includeMessages: true,
104
- level: 'debug',
105
- });
106
-
107
- const context = createMockContext();
108
- await mw.before?.(context);
109
-
110
- expect(logs.some((l) => l.includes('Input'))).toBe(true);
111
- });
112
- });
113
-
114
- describe('after()', () => {
115
- test('logs execution completed', async () => {
116
- const logs: string[] = [];
117
- const mw = logging({
118
- logger: (msg) => logs.push(msg),
119
- });
120
-
121
- const context = createMockContext();
122
- const result = createMockResult();
123
-
124
- await mw.after?.(context, result);
125
-
126
- expect(logs.some((l) => l.includes('Execution completed'))).toBe(true);
127
- });
128
-
129
- test('includes timing when enabled', async () => {
130
- const logs: string[] = [];
131
- const mw = logging({
132
- logger: (msg) => logs.push(msg),
133
- includeTiming: true,
134
- });
135
-
136
- const context = createMockContext();
137
- context.metadata.set('_logging_startTime', Date.now() - 100);
138
- const result = createMockResult();
139
-
140
- await mw.after?.(context, result);
141
-
142
- expect(logs.some((l) => l.includes('ms'))).toBe(true);
143
- });
144
-
145
- test('includes token count', async () => {
146
- const logs: string[] = [];
147
- const mw = logging({
148
- logger: (msg) => logs.push(msg),
149
- });
150
-
151
- const context = createMockContext();
152
- const result = createMockResult();
153
-
154
- await mw.after?.(context, result);
155
-
156
- expect(logs.some((l) => l.includes('tokens=30'))).toBe(true);
157
- });
158
-
159
- test('returns result unchanged', async () => {
160
- const mw = logging();
161
- const context = createMockContext();
162
- const result = createMockResult();
163
-
164
- const returned = await mw.after?.(context, result);
165
-
166
- expect(returned).toBe(result);
167
- });
168
-
169
- test('logs response when includeMessages is true', async () => {
170
- const logs: string[] = [];
171
- const mw = logging({
172
- logger: (msg) => logs.push(msg),
173
- includeMessages: true,
174
- level: 'debug',
175
- });
176
-
177
- const context = createMockContext();
178
- const result = createMockResult();
179
-
180
- await mw.after?.(context, result);
181
-
182
- expect(logs.some((l) => l.includes('Response'))).toBe(true);
183
- });
184
- });
185
-
186
- describe('onError()', () => {
187
- test('logs error message', async () => {
188
- const logs: string[] = [];
189
- const mw = logging({
190
- logger: (msg) => logs.push(msg),
191
- });
192
-
193
- const context = createMockContext();
194
- const error = new Error('Something went wrong');
195
-
196
- await mw.onError?.(context, error);
197
-
198
- expect(logs.some((l) => l.includes('Execution failed'))).toBe(true);
199
- expect(logs.some((l) => l.includes('Something went wrong'))).toBe(true);
200
- });
201
-
202
- test('includes timing when enabled', async () => {
203
- const logs: string[] = [];
204
- const mw = logging({
205
- logger: (msg) => logs.push(msg),
206
- includeTiming: true,
207
- });
208
-
209
- const context = createMockContext();
210
- context.metadata.set('_logging_startTime', Date.now() - 50);
211
- const error = new Error('Failed');
212
-
213
- await mw.onError?.(context, error);
214
-
215
- expect(logs.some((l) => l.includes('after') && l.includes('ms'))).toBe(true);
216
- });
217
-
218
- test('returns undefined to let error propagate', async () => {
219
- const mw = logging();
220
- const context = createMockContext();
221
- const error = new Error('Error');
222
-
223
- const result = await mw.onError?.(context, error);
224
-
225
- expect(result).toBeUndefined();
226
- });
227
-
228
- test('uses error log level', async () => {
229
- const logs: string[] = [];
230
- const mw = logging({
231
- logger: (msg) => logs.push(msg),
232
- level: 'error',
233
- });
234
-
235
- const context = createMockContext();
236
- const error = new Error('Failed');
237
-
238
- await mw.onError?.(context, error);
239
-
240
- expect(logs.some((l) => l.includes('[UAP:ERROR]'))).toBe(true);
241
- });
242
- });
243
-
244
- describe('log levels', () => {
245
- test('debug level logs everything', async () => {
246
- const logs: string[] = [];
247
- const mw = logging({
248
- logger: (msg) => logs.push(msg),
249
- level: 'debug',
250
- includeMessages: true,
251
- });
252
-
253
- const context = createMockContext();
254
- await mw.before?.(context);
255
-
256
- expect(logs.length).toBeGreaterThan(0);
257
- });
258
-
259
- test('error level only logs errors', async () => {
260
- const logs: string[] = [];
261
- const mw = logging({
262
- logger: (msg) => logs.push(msg),
263
- level: 'error',
264
- });
265
-
266
- const context = createMockContext();
267
- const result = createMockResult();
268
-
269
- await mw.before?.(context);
270
- await mw.after?.(context, result);
271
-
272
- // Info messages should not be logged at error level
273
- expect(logs.filter((l) => l.includes('[UAP:INFO]'))).toHaveLength(0);
274
- });
275
- });
276
- });