@providerprotocol/agents 0.0.2 → 0.0.4

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 (74) hide show
  1. package/LICENSE +21 -0
  2. package/dist/checkpoint/index.d.ts +43 -0
  3. package/dist/checkpoint/index.js +73 -0
  4. package/dist/checkpoint/index.js.map +1 -0
  5. package/{src/execution/loop.ts → dist/chunk-4ESYN66B.js} +54 -162
  6. package/dist/chunk-4ESYN66B.js.map +1 -0
  7. package/dist/chunk-EKRXMSDX.js +8 -0
  8. package/dist/chunk-EKRXMSDX.js.map +1 -0
  9. package/dist/chunk-T47B3VAF.js +427 -0
  10. package/dist/chunk-T47B3VAF.js.map +1 -0
  11. package/dist/execution/index.d.ts +105 -0
  12. package/dist/execution/index.js +679 -0
  13. package/dist/execution/index.js.map +1 -0
  14. package/dist/index-qsPwbY86.d.ts +65 -0
  15. package/dist/index.d.ts +101 -0
  16. package/dist/index.js +218 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/middleware/index.d.ts +23 -0
  19. package/dist/middleware/index.js +82 -0
  20. package/dist/middleware/index.js.map +1 -0
  21. package/dist/thread-tree/index.d.ts +115 -0
  22. package/dist/thread-tree/index.js +4 -0
  23. package/dist/thread-tree/index.js.map +1 -0
  24. package/dist/types-2Vsthzyu.d.ts +163 -0
  25. package/dist/types-BiyEVOnf.d.ts +65 -0
  26. package/dist/types-D1egxttz.d.ts +270 -0
  27. package/dist/types-DChRdQoX.d.ts +98 -0
  28. package/package.json +41 -9
  29. package/.claude/settings.local.json +0 -29
  30. package/AGENTS.md +0 -681
  31. package/CLAUDE.md +0 -681
  32. package/bun.lock +0 -472
  33. package/eslint.config.js +0 -75
  34. package/index.ts +0 -1
  35. package/llms.md +0 -796
  36. package/specs/UAP-1.0.md +0 -2355
  37. package/src/agent/index.ts +0 -384
  38. package/src/agent/types.ts +0 -91
  39. package/src/checkpoint/file.ts +0 -126
  40. package/src/checkpoint/index.ts +0 -40
  41. package/src/checkpoint/types.ts +0 -95
  42. package/src/execution/index.ts +0 -37
  43. package/src/execution/plan.ts +0 -497
  44. package/src/execution/react.ts +0 -340
  45. package/src/execution/tool-ordering.ts +0 -186
  46. package/src/execution/types.ts +0 -315
  47. package/src/index.ts +0 -80
  48. package/src/middleware/index.ts +0 -7
  49. package/src/middleware/logging.ts +0 -123
  50. package/src/middleware/types.ts +0 -69
  51. package/src/state/index.ts +0 -301
  52. package/src/state/types.ts +0 -173
  53. package/src/thread-tree/index.ts +0 -249
  54. package/src/thread-tree/types.ts +0 -29
  55. package/src/utils/uuid.ts +0 -7
  56. package/tests/live/agent-anthropic.test.ts +0 -288
  57. package/tests/live/agent-strategy-hooks.test.ts +0 -268
  58. package/tests/live/checkpoint.test.ts +0 -243
  59. package/tests/live/execution-strategies.test.ts +0 -255
  60. package/tests/live/plan-strategy.test.ts +0 -160
  61. package/tests/live/subagent-events.live.test.ts +0 -249
  62. package/tests/live/thread-tree.test.ts +0 -186
  63. package/tests/unit/agent.test.ts +0 -703
  64. package/tests/unit/checkpoint.test.ts +0 -232
  65. package/tests/unit/execution/equivalence.test.ts +0 -402
  66. package/tests/unit/execution/loop.test.ts +0 -437
  67. package/tests/unit/execution/plan.test.ts +0 -590
  68. package/tests/unit/execution/react.test.ts +0 -604
  69. package/tests/unit/execution/subagent-events.test.ts +0 -235
  70. package/tests/unit/execution/tool-ordering.test.ts +0 -310
  71. package/tests/unit/middleware/logging.test.ts +0 -276
  72. package/tests/unit/state.test.ts +0 -573
  73. package/tests/unit/thread-tree.test.ts +0 -249
  74. 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
- });