@hazeljs/cli 0.7.9 → 0.8.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.
@@ -1,481 +1,505 @@
1
1
  {
2
- "info": {
3
- "_postman_id": "hazeljs-ai-native-template",
4
- "name": "HazelJS AI-Native API",
5
- "description": "Postman collection for HazelJS AI-Native application with AI chat, agents, and RAG endpoints",
6
- "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
7
- },
8
- "item": [
9
- {
10
- "name": "Health & Status",
11
- "item": [
12
- {
13
- "name": "Health Check",
14
- "request": {
15
- "method": "GET",
16
- "header": [],
17
- "url": {
18
- "raw": "{{baseUrl}}/health",
19
- "host": ["{{baseUrl}}"],
20
- "path": ["health"]
21
- }
22
- },
23
- "response": []
24
- },
25
- {
26
- "name": "App Root",
27
- "request": {
28
- "method": "GET",
29
- "header": [],
30
- "url": {
31
- "raw": "{{baseUrl}}/",
32
- "host": ["{{baseUrl}}"],
33
- "path": [""]
34
- }
35
- },
36
- "response": []
37
- }
38
- ]
39
- },
40
- {
41
- "name": "AI Chat",
42
- "item": [
43
- {
44
- "name": "Send Chat Message",
45
- "request": {
46
- "method": "POST",
47
- "header": [
48
- {
49
- "key": "Content-Type",
50
- "value": "application/json"
51
- }
52
- ],
53
- "body": {
54
- "mode": "raw",
55
- "raw": "{\n \"message\": \"What is HazelJS and how does it work?\"\n}"
56
- },
57
- "url": {
58
- "raw": "{{baseUrl}}/chat",
59
- "host": ["{{baseUrl}}"],
60
- "path": ["chat"]
61
- }
62
- },
63
- "response": []
64
- },
65
- {
66
- "name": "Chat with System Prompt",
67
- "request": {
68
- "method": "POST",
69
- "header": [
70
- {
71
- "key": "Content-Type",
72
- "value": "application/json"
73
- }
74
- ],
75
- "body": {
76
- "mode": "raw",
77
- "raw": "{\n \"message\": \"Explain TypeScript decorators in simple terms\",\n \"system\": \"You are a TypeScript expert who explains concepts clearly to beginners.\"\n}"
78
- },
79
- "url": {
80
- "raw": "{{baseUrl}}/chat",
81
- "host": ["{{baseUrl}}"],
82
- "path": ["chat"]
83
- }
84
- },
85
- "response": []
86
- }
87
- ]
88
- },
89
- {
90
- "name": "AI Agent",
91
- "description": "WeatherAgent with 3 tools: getWeather, getForecast, convertTemperature. The agent autonomously picks the right tool(s) at runtime based on the request.",
92
- "item": [
93
- {
94
- "name": "Get Current Weather (getWeather)",
95
- "request": {
96
- "method": "POST",
97
- "header": [
98
- {
99
- "key": "Content-Type",
100
- "value": "application/json"
101
- }
102
- ],
103
- "body": {
104
- "mode": "raw",
105
- "raw": "{\n \"message\": \"What's the weather like in Tokyo?\"\n}"
106
- },
107
- "url": {
108
- "raw": "{{baseUrl}}/agent",
109
- "host": ["{{baseUrl}}"],
110
- "path": ["agent"]
111
- }
112
- },
113
- "response": []
114
- },
115
- {
116
- "name": "Get Multi-Day Forecast (getForecast)",
117
- "request": {
118
- "method": "POST",
119
- "header": [
120
- {
121
- "key": "Content-Type",
122
- "value": "application/json"
123
- }
124
- ],
125
- "body": {
126
- "mode": "raw",
127
- "raw": "{\n \"message\": \"What's the 5-day forecast for London?\"\n}"
128
- },
129
- "url": {
130
- "raw": "{{baseUrl}}/agent",
131
- "host": ["{{baseUrl}}"],
132
- "path": ["agent"]
133
- }
134
- },
135
- "response": []
136
- },
137
- {
138
- "name": "Convert Temperature (convertTemperature)",
139
- "request": {
140
- "method": "POST",
141
- "header": [
142
- {
143
- "key": "Content-Type",
144
- "value": "application/json"
145
- }
146
- ],
147
- "body": {
148
- "mode": "raw",
149
- "raw": "{\n \"message\": \"Convert 100°F to Celsius\"\n}"
150
- },
151
- "url": {
152
- "raw": "{{baseUrl}}/agent",
153
- "host": ["{{baseUrl}}"],
154
- "path": ["agent"]
155
- }
156
- },
157
- "response": []
158
- },
159
- {
160
- "name": "Weather + Convert Temperature (multi-tool)",
161
- "request": {
162
- "method": "POST",
163
- "header": [
164
- {
165
- "key": "Content-Type",
166
- "value": "application/json"
167
- }
168
- ],
169
- "body": {
170
- "mode": "raw",
171
- "raw": "{\n \"message\": \"What's the weather in Paris and convert the temperature to Celsius?\"\n}"
172
- },
173
- "url": {
174
- "raw": "{{baseUrl}}/agent",
175
- "host": ["{{baseUrl}}"],
176
- "path": ["agent"]
177
- }
178
- },
179
- "response": []
180
- },
181
- {
182
- "name": "Multiple Cities (parallel tool calls)",
183
- "request": {
184
- "method": "POST",
185
- "header": [
186
- {
187
- "key": "Content-Type",
188
- "value": "application/json"
189
- }
190
- ],
191
- "body": {
192
- "mode": "raw",
193
- "raw": "{\n \"message\": \"What's the weather in New York, London, and Tokyo?\"\n}"
194
- },
195
- "url": {
196
- "raw": "{{baseUrl}}/agent",
197
- "host": ["{{baseUrl}}"],
198
- "path": ["agent"]
199
- }
200
- },
201
- "response": []
202
- }
203
- ]
204
- },
205
- {
206
- "name": "AI Agent - Execution Trace",
207
- "description": "POST /agent/trace — Returns the full reasoning trace: every step, which tool was called, with what input, what it returned, and timing. Great for understanding agent reasoning.",
208
- "item": [
209
- {
210
- "name": "Single Tool Trace",
211
- "request": {
212
- "method": "POST",
213
- "header": [{"key": "Content-Type", "value": "application/json"}],
214
- "body": {
215
- "mode": "raw",
216
- "raw": "{\n \"message\": \"What's the weather in New York?\"\n}"
217
- },
218
- "url": {"raw": "{{baseUrl}}/agent/trace", "host": ["{{baseUrl}}"], "path": ["agent", "trace"]}
219
- },
220
- "response": []
221
- },
222
- {
223
- "name": "Multi-Tool Trace",
224
- "request": {
225
- "method": "POST",
226
- "header": [{"key": "Content-Type", "value": "application/json"}],
227
- "body": {
228
- "mode": "raw",
229
- "raw": "{\n \"message\": \"What's the weather in Tokyo and convert it to Celsius?\"\n}"
230
- },
231
- "url": {"raw": "{{baseUrl}}/agent/trace", "host": ["{{baseUrl}}"], "path": ["agent", "trace"]}
232
- },
233
- "response": []
234
- }
235
- ]
236
- },
237
- {
238
- "name": "AI Agent - Streaming (SSE)",
239
- "description": "POST /agent/stream — Token-by-token SSE stream. Set 'Accept: text/event-stream' in your client. Each event is a JSON object with type='token'|'step'|'done'.",
240
- "item": [
241
- {
242
- "name": "Stream Weather Response",
243
- "request": {
244
- "method": "POST",
245
- "header": [
246
- {"key": "Content-Type", "value": "application/json"},
247
- {"key": "Accept", "value": "text/event-stream"}
248
- ],
249
- "body": {
250
- "mode": "raw",
251
- "raw": "{\n \"message\": \"What's the weather forecast for London this week?\"\n}"
252
- },
253
- "url": {"raw": "{{baseUrl}}/agent/stream", "host": ["{{baseUrl}}"], "path": ["agent", "stream"]}
254
- },
255
- "response": []
256
- }
257
- ]
258
- },
259
- {
260
- "name": "Travel Agent (@Delegate)",
261
- "description": "POST /travel — TravelAgent delegates to WeatherAgent (via @Delegate) for weather and to FactsAgent for city facts. Agent-to-agent calls are transparent to the LLM.",
262
- "item": [
263
- {
264
- "name": "Plan a Trip (delegates to both agents)",
265
- "request": {
266
- "method": "POST",
267
- "header": [{"key": "Content-Type", "value": "application/json"}],
268
- "body": {
269
- "mode": "raw",
270
- "raw": "{\n \"message\": \"Plan a trip to Tokyo. Get the current weather there and also tell me some interesting facts about Tokyo.\"\n}"
271
- },
272
- "url": {"raw": "{{baseUrl}}/travel", "host": ["{{baseUrl}}"], "path": ["travel"]}
273
- },
274
- "response": []
275
- },
276
- {
277
- "name": "Weather-focused Trip (delegates to WeatherAgent)",
278
- "request": {
279
- "method": "POST",
280
- "header": [{"key": "Content-Type", "value": "application/json"}],
281
- "body": {
282
- "mode": "raw",
283
- "raw": "{\n \"message\": \"Is the weather in Paris good for sightseeing this week?\"\n}"
284
- },
285
- "url": {"raw": "{{baseUrl}}/travel", "host": ["{{baseUrl}}"], "path": ["travel"]}
286
- },
287
- "response": []
288
- },
289
- {
290
- "name": "Facts-focused Trip (delegates to FactsAgent)",
291
- "request": {
292
- "method": "POST",
293
- "header": [{"key": "Content-Type", "value": "application/json"}],
294
- "body": {
295
- "mode": "raw",
296
- "raw": "{\n \"message\": \"Tell me interesting facts and travel tips for London.\"\n}"
297
- },
298
- "url": {"raw": "{{baseUrl}}/travel", "host": ["{{baseUrl}}"], "path": ["travel"]}
299
- },
300
- "response": []
301
- }
302
- ]
303
- },
304
- {
305
- "name": "Supervisor Multi-Agent",
306
- "description": "POST /travel/supervisor — An LLM supervisor routes requests to WeatherAgent or FactsAgent based on what's most relevant, then synthesises a combined answer.",
307
- "item": [
308
- {
309
- "name": "What to Pack (routes to both agents)",
310
- "request": {
311
- "method": "POST",
312
- "header": [{"key": "Content-Type", "value": "application/json"}],
313
- "body": {
314
- "mode": "raw",
315
- "raw": "{\n \"message\": \"What should I pack for a trip to Paris? Tell me about the weather and the local culture.\"\n}"
316
- },
317
- "url": {"raw": "{{baseUrl}}/travel/supervisor", "host": ["{{baseUrl}}"], "path": ["travel", "supervisor"]}
318
- },
319
- "response": []
320
- },
321
- {
322
- "name": "Weather Query (routes to WeatherAgent)",
323
- "request": {
324
- "method": "POST",
325
- "header": [{"key": "Content-Type", "value": "application/json"}],
326
- "body": {
327
- "mode": "raw",
328
- "raw": "{\n \"message\": \"What is the 3-day weather forecast for Tokyo?\"\n}"
329
- },
330
- "url": {"raw": "{{baseUrl}}/travel/supervisor", "host": ["{{baseUrl}}"], "path": ["travel", "supervisor"]}
331
- },
332
- "response": []
333
- },
334
- {
335
- "name": "City Facts Query (routes to FactsAgent)",
336
- "request": {
337
- "method": "POST",
338
- "header": [{"key": "Content-Type", "value": "application/json"}],
339
- "body": {
340
- "mode": "raw",
341
- "raw": "{\n \"message\": \"Tell me interesting things to do and see in New York City.\"\n}"
342
- },
343
- "url": {"raw": "{{baseUrl}}/travel/supervisor", "host": ["{{baseUrl}}"], "path": ["travel", "supervisor"]}
344
- },
345
- "response": []
346
- }
347
- ]
348
- },
349
- {
350
- "name": "RAG (Document Search)",
351
- "item": [
352
- {
353
- "name": "Get RAG Status",
354
- "request": {
355
- "method": "GET",
356
- "header": [],
357
- "url": {
358
- "raw": "{{baseUrl}}/rag/documents",
359
- "host": ["{{baseUrl}}"],
360
- "path": ["rag", "documents"]
361
- }
362
- },
363
- "response": []
364
- },
365
- {
366
- "name": "Ingest Document",
367
- "request": {
368
- "method": "POST",
369
- "header": [
370
- {
371
- "key": "Content-Type",
372
- "value": "application/json"
373
- }
374
- ],
375
- "body": {
376
- "mode": "raw",
377
- "raw": "{\n \"content\": \"HazelJS is a TypeScript framework for building AI-native backend applications. It provides built-in support for AI agents, RAG (Retrieval-Augmented Generation), and seamless integration with LLM providers like OpenAI, Anthropic, and Ollama.\",\n \"metadata\": {\n \"source\": \"documentation\",\n \"type\": \"introduction\"\n }\n}"
378
- },
379
- "url": {
380
- "raw": "{{baseUrl}}/rag/ingest",
381
- "host": ["{{baseUrl}}"],
382
- "path": ["rag", "ingest"]
383
- }
384
- },
385
- "response": []
386
- },
387
- {
388
- "name": "Ingest Multiple Documents",
389
- "request": {
390
- "method": "POST",
391
- "header": [
392
- {
393
- "key": "Content-Type",
394
- "value": "application/json"
395
- }
396
- ],
397
- "body": {
398
- "mode": "raw",
399
- "raw": "{\n \"content\": \"TypeScript decorators provide a way to add metadata and modify the behavior of classes, methods, and properties. In HazelJS, decorators like @Controller, @Get, @Post, @Service, and @Agent are used to define the application structure and routing.\",\n \"metadata\": {\n \"source\": \"typescript-guide\",\n \"type\": \"tutorial\"\n }\n}"
400
- },
401
- "url": {
402
- "raw": "{{baseUrl}}/rag/ingest",
403
- "host": ["{{baseUrl}}"],
404
- "path": ["rag", "ingest"]
405
- }
406
- },
407
- "response": []
408
- },
409
- {
410
- "name": "Search Documents",
411
- "request": {
412
- "method": "POST",
413
- "header": [
414
- {
415
- "key": "Content-Type",
416
- "value": "application/json"
417
- }
418
- ],
419
- "body": {
420
- "mode": "raw",
421
- "raw": "{\n \"query\": \"What is HazelJS?\"\n}"
422
- },
423
- "url": {
424
- "raw": "{{baseUrl}}/rag/search",
425
- "host": ["{{baseUrl}}"],
426
- "path": ["rag", "search"]
427
- }
428
- },
429
- "response": []
430
- },
431
- {
432
- "name": "Search for TypeScript Info",
433
- "request": {
434
- "method": "POST",
435
- "header": [
436
- {
437
- "key": "Content-Type",
438
- "value": "application/json"
439
- }
440
- ],
441
- "body": {
442
- "mode": "raw",
443
- "raw": "{\n \"query\": \"TypeScript decorators in HazelJS\"\n}"
444
- },
445
- "url": {
446
- "raw": "{{baseUrl}}/rag/search",
447
- "host": ["{{baseUrl}}"],
448
- "path": ["rag", "search"]
449
- }
450
- },
451
- "response": []
452
- }
453
- ]
454
- },
455
- {
456
- "name": "Development Tools",
457
- "item": [
458
- {
459
- "name": "Inspector Dashboard",
460
- "request": {
461
- "method": "GET",
462
- "header": [],
463
- "url": {
464
- "raw": "{{baseUrl}}/__hazel",
465
- "host": ["{{baseUrl}}"],
466
- "path": ["__hazel"]
467
- }
468
- },
469
- "response": []
470
- }
471
- ]
472
- }
473
- ],
474
- "variable": [
475
- {
476
- "key": "baseUrl",
477
- "value": "http://localhost:3000",
478
- "type": "string"
479
- }
480
- ]
2
+ "info": {
3
+ "_postman_id": "hazeljs-ai-native-template",
4
+ "name": "HazelJS AI-Native API",
5
+ "description": "Postman collection for HazelJS AI-Native application with AI chat, agents, and RAG endpoints",
6
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
7
+ },
8
+ "item": [
9
+ {
10
+ "name": "Health & Status",
11
+ "item": [
12
+ {
13
+ "name": "Health Check",
14
+ "request": {
15
+ "method": "GET",
16
+ "header": [],
17
+ "url": {
18
+ "raw": "{{baseUrl}}/health",
19
+ "host": ["{{baseUrl}}"],
20
+ "path": ["health"]
21
+ }
22
+ },
23
+ "response": []
24
+ },
25
+ {
26
+ "name": "App Root",
27
+ "request": {
28
+ "method": "GET",
29
+ "header": [],
30
+ "url": {
31
+ "raw": "{{baseUrl}}/",
32
+ "host": ["{{baseUrl}}"],
33
+ "path": [""]
34
+ }
35
+ },
36
+ "response": []
37
+ }
38
+ ]
39
+ },
40
+ {
41
+ "name": "AI Chat",
42
+ "item": [
43
+ {
44
+ "name": "Send Chat Message",
45
+ "request": {
46
+ "method": "POST",
47
+ "header": [
48
+ {
49
+ "key": "Content-Type",
50
+ "value": "application/json"
51
+ }
52
+ ],
53
+ "body": {
54
+ "mode": "raw",
55
+ "raw": "{\n \"message\": \"What is HazelJS and how does it work?\"\n}"
56
+ },
57
+ "url": {
58
+ "raw": "{{baseUrl}}/chat",
59
+ "host": ["{{baseUrl}}"],
60
+ "path": ["chat"]
61
+ }
62
+ },
63
+ "response": []
64
+ },
65
+ {
66
+ "name": "Chat with System Prompt",
67
+ "request": {
68
+ "method": "POST",
69
+ "header": [
70
+ {
71
+ "key": "Content-Type",
72
+ "value": "application/json"
73
+ }
74
+ ],
75
+ "body": {
76
+ "mode": "raw",
77
+ "raw": "{\n \"message\": \"Explain TypeScript decorators in simple terms\",\n \"system\": \"You are a TypeScript expert who explains concepts clearly to beginners.\"\n}"
78
+ },
79
+ "url": {
80
+ "raw": "{{baseUrl}}/chat",
81
+ "host": ["{{baseUrl}}"],
82
+ "path": ["chat"]
83
+ }
84
+ },
85
+ "response": []
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "name": "AI Agent",
91
+ "description": "WeatherAgent with 3 tools: getWeather, getForecast, convertTemperature. The agent autonomously picks the right tool(s) at runtime based on the request.",
92
+ "item": [
93
+ {
94
+ "name": "Get Current Weather (getWeather)",
95
+ "request": {
96
+ "method": "POST",
97
+ "header": [
98
+ {
99
+ "key": "Content-Type",
100
+ "value": "application/json"
101
+ }
102
+ ],
103
+ "body": {
104
+ "mode": "raw",
105
+ "raw": "{\n \"message\": \"What's the weather like in Tokyo?\"\n}"
106
+ },
107
+ "url": {
108
+ "raw": "{{baseUrl}}/agent",
109
+ "host": ["{{baseUrl}}"],
110
+ "path": ["agent"]
111
+ }
112
+ },
113
+ "response": []
114
+ },
115
+ {
116
+ "name": "Get Multi-Day Forecast (getForecast)",
117
+ "request": {
118
+ "method": "POST",
119
+ "header": [
120
+ {
121
+ "key": "Content-Type",
122
+ "value": "application/json"
123
+ }
124
+ ],
125
+ "body": {
126
+ "mode": "raw",
127
+ "raw": "{\n \"message\": \"What's the 5-day forecast for London?\"\n}"
128
+ },
129
+ "url": {
130
+ "raw": "{{baseUrl}}/agent",
131
+ "host": ["{{baseUrl}}"],
132
+ "path": ["agent"]
133
+ }
134
+ },
135
+ "response": []
136
+ },
137
+ {
138
+ "name": "Convert Temperature (convertTemperature)",
139
+ "request": {
140
+ "method": "POST",
141
+ "header": [
142
+ {
143
+ "key": "Content-Type",
144
+ "value": "application/json"
145
+ }
146
+ ],
147
+ "body": {
148
+ "mode": "raw",
149
+ "raw": "{\n \"message\": \"Convert 100°F to Celsius\"\n}"
150
+ },
151
+ "url": {
152
+ "raw": "{{baseUrl}}/agent",
153
+ "host": ["{{baseUrl}}"],
154
+ "path": ["agent"]
155
+ }
156
+ },
157
+ "response": []
158
+ },
159
+ {
160
+ "name": "Weather + Convert Temperature (multi-tool)",
161
+ "request": {
162
+ "method": "POST",
163
+ "header": [
164
+ {
165
+ "key": "Content-Type",
166
+ "value": "application/json"
167
+ }
168
+ ],
169
+ "body": {
170
+ "mode": "raw",
171
+ "raw": "{\n \"message\": \"What's the weather in Paris and convert the temperature to Celsius?\"\n}"
172
+ },
173
+ "url": {
174
+ "raw": "{{baseUrl}}/agent",
175
+ "host": ["{{baseUrl}}"],
176
+ "path": ["agent"]
177
+ }
178
+ },
179
+ "response": []
180
+ },
181
+ {
182
+ "name": "Multiple Cities (parallel tool calls)",
183
+ "request": {
184
+ "method": "POST",
185
+ "header": [
186
+ {
187
+ "key": "Content-Type",
188
+ "value": "application/json"
189
+ }
190
+ ],
191
+ "body": {
192
+ "mode": "raw",
193
+ "raw": "{\n \"message\": \"What's the weather in New York, London, and Tokyo?\"\n}"
194
+ },
195
+ "url": {
196
+ "raw": "{{baseUrl}}/agent",
197
+ "host": ["{{baseUrl}}"],
198
+ "path": ["agent"]
199
+ }
200
+ },
201
+ "response": []
202
+ }
203
+ ]
204
+ },
205
+ {
206
+ "name": "AI Agent - Execution Trace",
207
+ "description": "POST /agent/trace — Returns the full reasoning trace: every step, which tool was called, with what input, what it returned, and timing. Great for understanding agent reasoning.",
208
+ "item": [
209
+ {
210
+ "name": "Single Tool Trace",
211
+ "request": {
212
+ "method": "POST",
213
+ "header": [{ "key": "Content-Type", "value": "application/json" }],
214
+ "body": {
215
+ "mode": "raw",
216
+ "raw": "{\n \"message\": \"What's the weather in New York?\"\n}"
217
+ },
218
+ "url": {
219
+ "raw": "{{baseUrl}}/agent/trace",
220
+ "host": ["{{baseUrl}}"],
221
+ "path": ["agent", "trace"]
222
+ }
223
+ },
224
+ "response": []
225
+ },
226
+ {
227
+ "name": "Multi-Tool Trace",
228
+ "request": {
229
+ "method": "POST",
230
+ "header": [{ "key": "Content-Type", "value": "application/json" }],
231
+ "body": {
232
+ "mode": "raw",
233
+ "raw": "{\n \"message\": \"What's the weather in Tokyo and convert it to Celsius?\"\n}"
234
+ },
235
+ "url": {
236
+ "raw": "{{baseUrl}}/agent/trace",
237
+ "host": ["{{baseUrl}}"],
238
+ "path": ["agent", "trace"]
239
+ }
240
+ },
241
+ "response": []
242
+ }
243
+ ]
244
+ },
245
+ {
246
+ "name": "AI Agent - Streaming (SSE)",
247
+ "description": "POST /agent/stream — Token-by-token SSE stream. Set 'Accept: text/event-stream' in your client. Each event is a JSON object with type='token'|'step'|'done'.",
248
+ "item": [
249
+ {
250
+ "name": "Stream Weather Response",
251
+ "request": {
252
+ "method": "POST",
253
+ "header": [
254
+ { "key": "Content-Type", "value": "application/json" },
255
+ { "key": "Accept", "value": "text/event-stream" }
256
+ ],
257
+ "body": {
258
+ "mode": "raw",
259
+ "raw": "{\n \"message\": \"What's the weather forecast for London this week?\"\n}"
260
+ },
261
+ "url": {
262
+ "raw": "{{baseUrl}}/agent/stream",
263
+ "host": ["{{baseUrl}}"],
264
+ "path": ["agent", "stream"]
265
+ }
266
+ },
267
+ "response": []
268
+ }
269
+ ]
270
+ },
271
+ {
272
+ "name": "Travel Agent (@Delegate)",
273
+ "description": "POST /travel — TravelAgent delegates to WeatherAgent (via @Delegate) for weather and to FactsAgent for city facts. Agent-to-agent calls are transparent to the LLM.",
274
+ "item": [
275
+ {
276
+ "name": "Plan a Trip (delegates to both agents)",
277
+ "request": {
278
+ "method": "POST",
279
+ "header": [{ "key": "Content-Type", "value": "application/json" }],
280
+ "body": {
281
+ "mode": "raw",
282
+ "raw": "{\n \"message\": \"Plan a trip to Tokyo. Get the current weather there and also tell me some interesting facts about Tokyo.\"\n}"
283
+ },
284
+ "url": { "raw": "{{baseUrl}}/travel", "host": ["{{baseUrl}}"], "path": ["travel"] }
285
+ },
286
+ "response": []
287
+ },
288
+ {
289
+ "name": "Weather-focused Trip (delegates to WeatherAgent)",
290
+ "request": {
291
+ "method": "POST",
292
+ "header": [{ "key": "Content-Type", "value": "application/json" }],
293
+ "body": {
294
+ "mode": "raw",
295
+ "raw": "{\n \"message\": \"Is the weather in Paris good for sightseeing this week?\"\n}"
296
+ },
297
+ "url": { "raw": "{{baseUrl}}/travel", "host": ["{{baseUrl}}"], "path": ["travel"] }
298
+ },
299
+ "response": []
300
+ },
301
+ {
302
+ "name": "Facts-focused Trip (delegates to FactsAgent)",
303
+ "request": {
304
+ "method": "POST",
305
+ "header": [{ "key": "Content-Type", "value": "application/json" }],
306
+ "body": {
307
+ "mode": "raw",
308
+ "raw": "{\n \"message\": \"Tell me interesting facts and travel tips for London.\"\n}"
309
+ },
310
+ "url": { "raw": "{{baseUrl}}/travel", "host": ["{{baseUrl}}"], "path": ["travel"] }
311
+ },
312
+ "response": []
313
+ }
314
+ ]
315
+ },
316
+ {
317
+ "name": "Supervisor Multi-Agent",
318
+ "description": "POST /travel/supervisor — An LLM supervisor routes requests to WeatherAgent or FactsAgent based on what's most relevant, then synthesises a combined answer.",
319
+ "item": [
320
+ {
321
+ "name": "What to Pack (routes to both agents)",
322
+ "request": {
323
+ "method": "POST",
324
+ "header": [{ "key": "Content-Type", "value": "application/json" }],
325
+ "body": {
326
+ "mode": "raw",
327
+ "raw": "{\n \"message\": \"What should I pack for a trip to Paris? Tell me about the weather and the local culture.\"\n}"
328
+ },
329
+ "url": {
330
+ "raw": "{{baseUrl}}/travel/supervisor",
331
+ "host": ["{{baseUrl}}"],
332
+ "path": ["travel", "supervisor"]
333
+ }
334
+ },
335
+ "response": []
336
+ },
337
+ {
338
+ "name": "Weather Query (routes to WeatherAgent)",
339
+ "request": {
340
+ "method": "POST",
341
+ "header": [{ "key": "Content-Type", "value": "application/json" }],
342
+ "body": {
343
+ "mode": "raw",
344
+ "raw": "{\n \"message\": \"What is the 3-day weather forecast for Tokyo?\"\n}"
345
+ },
346
+ "url": {
347
+ "raw": "{{baseUrl}}/travel/supervisor",
348
+ "host": ["{{baseUrl}}"],
349
+ "path": ["travel", "supervisor"]
350
+ }
351
+ },
352
+ "response": []
353
+ },
354
+ {
355
+ "name": "City Facts Query (routes to FactsAgent)",
356
+ "request": {
357
+ "method": "POST",
358
+ "header": [{ "key": "Content-Type", "value": "application/json" }],
359
+ "body": {
360
+ "mode": "raw",
361
+ "raw": "{\n \"message\": \"Tell me interesting things to do and see in New York City.\"\n}"
362
+ },
363
+ "url": {
364
+ "raw": "{{baseUrl}}/travel/supervisor",
365
+ "host": ["{{baseUrl}}"],
366
+ "path": ["travel", "supervisor"]
367
+ }
368
+ },
369
+ "response": []
370
+ }
371
+ ]
372
+ },
373
+ {
374
+ "name": "RAG (Document Search)",
375
+ "item": [
376
+ {
377
+ "name": "Get RAG Status",
378
+ "request": {
379
+ "method": "GET",
380
+ "header": [],
381
+ "url": {
382
+ "raw": "{{baseUrl}}/rag/documents",
383
+ "host": ["{{baseUrl}}"],
384
+ "path": ["rag", "documents"]
385
+ }
386
+ },
387
+ "response": []
388
+ },
389
+ {
390
+ "name": "Ingest Document",
391
+ "request": {
392
+ "method": "POST",
393
+ "header": [
394
+ {
395
+ "key": "Content-Type",
396
+ "value": "application/json"
397
+ }
398
+ ],
399
+ "body": {
400
+ "mode": "raw",
401
+ "raw": "{\n \"content\": \"HazelJS is a TypeScript framework for building AI-native backend applications. It provides built-in support for AI agents, RAG (Retrieval-Augmented Generation), and seamless integration with LLM providers like OpenAI, Anthropic, and Ollama.\",\n \"metadata\": {\n \"source\": \"documentation\",\n \"type\": \"introduction\"\n }\n}"
402
+ },
403
+ "url": {
404
+ "raw": "{{baseUrl}}/rag/ingest",
405
+ "host": ["{{baseUrl}}"],
406
+ "path": ["rag", "ingest"]
407
+ }
408
+ },
409
+ "response": []
410
+ },
411
+ {
412
+ "name": "Ingest Multiple Documents",
413
+ "request": {
414
+ "method": "POST",
415
+ "header": [
416
+ {
417
+ "key": "Content-Type",
418
+ "value": "application/json"
419
+ }
420
+ ],
421
+ "body": {
422
+ "mode": "raw",
423
+ "raw": "{\n \"content\": \"TypeScript decorators provide a way to add metadata and modify the behavior of classes, methods, and properties. In HazelJS, decorators like @Controller, @Get, @Post, @Service, and @Agent are used to define the application structure and routing.\",\n \"metadata\": {\n \"source\": \"typescript-guide\",\n \"type\": \"tutorial\"\n }\n}"
424
+ },
425
+ "url": {
426
+ "raw": "{{baseUrl}}/rag/ingest",
427
+ "host": ["{{baseUrl}}"],
428
+ "path": ["rag", "ingest"]
429
+ }
430
+ },
431
+ "response": []
432
+ },
433
+ {
434
+ "name": "Search Documents",
435
+ "request": {
436
+ "method": "POST",
437
+ "header": [
438
+ {
439
+ "key": "Content-Type",
440
+ "value": "application/json"
441
+ }
442
+ ],
443
+ "body": {
444
+ "mode": "raw",
445
+ "raw": "{\n \"query\": \"What is HazelJS?\"\n}"
446
+ },
447
+ "url": {
448
+ "raw": "{{baseUrl}}/rag/search",
449
+ "host": ["{{baseUrl}}"],
450
+ "path": ["rag", "search"]
451
+ }
452
+ },
453
+ "response": []
454
+ },
455
+ {
456
+ "name": "Search for TypeScript Info",
457
+ "request": {
458
+ "method": "POST",
459
+ "header": [
460
+ {
461
+ "key": "Content-Type",
462
+ "value": "application/json"
463
+ }
464
+ ],
465
+ "body": {
466
+ "mode": "raw",
467
+ "raw": "{\n \"query\": \"TypeScript decorators in HazelJS\"\n}"
468
+ },
469
+ "url": {
470
+ "raw": "{{baseUrl}}/rag/search",
471
+ "host": ["{{baseUrl}}"],
472
+ "path": ["rag", "search"]
473
+ }
474
+ },
475
+ "response": []
476
+ }
477
+ ]
478
+ },
479
+ {
480
+ "name": "Development Tools",
481
+ "item": [
482
+ {
483
+ "name": "Inspector Dashboard",
484
+ "request": {
485
+ "method": "GET",
486
+ "header": [],
487
+ "url": {
488
+ "raw": "{{baseUrl}}/__hazel",
489
+ "host": ["{{baseUrl}}"],
490
+ "path": ["__hazel"]
491
+ }
492
+ },
493
+ "response": []
494
+ }
495
+ ]
496
+ }
497
+ ],
498
+ "variable": [
499
+ {
500
+ "key": "baseUrl",
501
+ "value": "http://localhost:3000",
502
+ "type": "string"
503
+ }
504
+ ]
481
505
  }