groundswell 0.0.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.
- package/.claude/settings.local.json +9 -0
- package/.claude/system_prompts/task-breakdown.md +100 -0
- package/PRPs/001-hierarchical-workflow-engine.md +2438 -0
- package/PRPs/PRDs/001-hierarchical-workflow-engine.md +543 -0
- package/PRPs/PRDs/002-agent-prompt.md +390 -0
- package/PRPs/PRDs/003-agent-prompt.md +943 -0
- package/PRPs/PRDs/004-agent-prompt.md +1136 -0
- package/PRPs/PRDs/tasks-001.json +492 -0
- package/PRPs/README.md +83 -0
- package/PRPs/templates/prp_base.md +222 -0
- package/README.md +218 -0
- package/docs/agent.md +422 -0
- package/docs/prompt.md +419 -0
- package/docs/workflow.md +600 -0
- package/examples/README.md +244 -0
- package/examples/examples/01-basic-workflow.ts +100 -0
- package/examples/examples/02-decorator-options.ts +217 -0
- package/examples/examples/03-parent-child.ts +241 -0
- package/examples/examples/04-observers-debugger.ts +340 -0
- package/examples/examples/05-error-handling.ts +387 -0
- package/examples/examples/06-concurrent-tasks.ts +352 -0
- package/examples/examples/07-agent-loops.ts +432 -0
- package/examples/examples/08-sdk-features.ts +667 -0
- package/examples/examples/09-reflection.ts +573 -0
- package/examples/examples/10-introspection.ts +550 -0
- package/examples/index.ts +143 -0
- package/examples/utils/helpers.ts +57 -0
- package/llms_full.txt +5890 -0
- package/package.json +63 -0
- package/plan/P1P2/PRP.md +527 -0
- package/plan/P1P2/research/LRU_CACHE_BEST_PRACTICES.md +1929 -0
- package/plan/P1P2/research/LRU_CACHE_CODE_PATTERNS.md +857 -0
- package/plan/P1P2/research/LRU_CACHE_INTEGRATION_GUIDE.md +738 -0
- package/plan/P1P2/research/LRU_CACHE_RESEARCH_INDEX.md +424 -0
- package/plan/P1P2/research/REFLECTION_INDEX.md +291 -0
- package/plan/P1P2/research/REFLECTION_RESEARCH_REPORT.md +1342 -0
- package/plan/P1P2/research/RESEARCH_SUMMARY.md +342 -0
- package/plan/P1P2/research/anthropic-sdk.md +174 -0
- package/plan/P1P2/research/async-local-storage.md +200 -0
- package/plan/P1P2/research/reflection-code-patterns.md +1205 -0
- package/plan/P1P2/research/reflection-decision-matrix.md +421 -0
- package/plan/P1P2/research/reflection-implementation-guide.md +1341 -0
- package/plan/P1P2/research/reflection-integration-guide.md +834 -0
- package/plan/P1P2/research/reflection-patterns.md +1468 -0
- package/plan/P1P2/research/reflection-quick-reference.md +558 -0
- package/plan/P1P2/research/zod-schema.md +152 -0
- package/plan/P3P4/PRP.md +1388 -0
- package/plan/P3P4/research/caching-lru.md +116 -0
- package/plan/P3P4/research/introspection-tools.md +177 -0
- package/plan/P3P4/research/reflection-patterns.md +117 -0
- package/plan/P4P5/PRP.md +1136 -0
- package/plan/P4P5/research/RESEARCH_SUMMARY.md +151 -0
- package/plan/architecture/external_deps.md +358 -0
- package/plan/architecture/system_context.md +242 -0
- package/plan/backlog.json +867 -0
- package/plan/research/INTROSPECTION_RESEARCH_SUMMARY.md +378 -0
- package/plan/research/README-INTROSPECTION.md +352 -0
- package/plan/research/agent-introspection-patterns.md +1085 -0
- package/plan/research/introspection-security-guide.md +928 -0
- package/plan/research/introspection-tool-examples.md +875 -0
- package/scripts/generate-llms-full.ts +206 -0
- package/src/__tests__/integration/agent-workflow.test.ts +256 -0
- package/src/__tests__/integration/tree-mirroring.test.ts +114 -0
- package/src/__tests__/unit/agent.test.ts +169 -0
- package/src/__tests__/unit/cache-key.test.ts +182 -0
- package/src/__tests__/unit/cache.test.ts +172 -0
- package/src/__tests__/unit/context.test.ts +138 -0
- package/src/__tests__/unit/decorators.test.ts +100 -0
- package/src/__tests__/unit/introspection-tools.test.ts +277 -0
- package/src/__tests__/unit/prompt.test.ts +135 -0
- package/src/__tests__/unit/reflection.test.ts +210 -0
- package/src/__tests__/unit/tree-debugger.test.ts +85 -0
- package/src/__tests__/unit/workflow.test.ts +81 -0
- package/src/cache/cache-key.ts +244 -0
- package/src/cache/cache.ts +236 -0
- package/src/cache/index.ts +8 -0
- package/src/core/agent.ts +573 -0
- package/src/core/context.ts +119 -0
- package/src/core/event-tree.ts +260 -0
- package/src/core/factory.ts +123 -0
- package/src/core/index.ts +17 -0
- package/src/core/logger.ts +87 -0
- package/src/core/mcp-handler.ts +184 -0
- package/src/core/prompt.ts +150 -0
- package/src/core/workflow-context.ts +349 -0
- package/src/core/workflow.ts +302 -0
- package/src/debugger/index.ts +1 -0
- package/src/debugger/tree-debugger.ts +210 -0
- package/src/decorators/index.ts +3 -0
- package/src/decorators/observed-state.ts +95 -0
- package/src/decorators/step.ts +139 -0
- package/src/decorators/task.ts +96 -0
- package/src/examples/index.ts +2 -0
- package/src/examples/tdd-orchestrator.ts +65 -0
- package/src/examples/test-cycle-workflow.ts +64 -0
- package/src/index.ts +140 -0
- package/src/reflection/index.ts +5 -0
- package/src/reflection/reflection.ts +407 -0
- package/src/tools/index.ts +36 -0
- package/src/tools/introspection.ts +464 -0
- package/src/types/agent.ts +90 -0
- package/src/types/decorators.ts +25 -0
- package/src/types/error-strategy.ts +13 -0
- package/src/types/error.ts +20 -0
- package/src/types/events.ts +74 -0
- package/src/types/index.ts +55 -0
- package/src/types/logging.ts +24 -0
- package/src/types/observer.ts +18 -0
- package/src/types/prompt.ts +40 -0
- package/src/types/reflection.ts +117 -0
- package/src/types/sdk-primitives.ts +128 -0
- package/src/types/snapshot.ts +14 -0
- package/src/types/workflow-context.ts +163 -0
- package/src/types/workflow.ts +37 -0
- package/src/utils/id.ts +11 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/observable.ts +77 -0
- package/tasks.json +0 -0
- package/tsconfig.json +22 -0
- package/vitest.config.ts +16 -0
|
@@ -0,0 +1,875 @@
|
|
|
1
|
+
# Agent Introspection Tools: Complete Implementation Examples
|
|
2
|
+
|
|
3
|
+
**Status:** Ready-to-implement code patterns for Groundswell
|
|
4
|
+
**Target:** Anthropic Tool Format (JSON Schema)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Quick Reference: All Tool Definitions
|
|
9
|
+
|
|
10
|
+
### 1. Workflow Hierarchy Inspector
|
|
11
|
+
|
|
12
|
+
**Use Case:** Agent discovers its position in execution tree
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"name": "workflow_inspect_hierarchy",
|
|
17
|
+
"description": "Inspect the current workflow's position in the execution hierarchy including ancestors, siblings, and tree depth. Returns structured hierarchy information that helps agents understand their context within the larger workflow orchestration.",
|
|
18
|
+
"input_schema": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {
|
|
21
|
+
"node_id": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "The workflow node ID to inspect. If omitted, introspects the current workflow context."
|
|
24
|
+
},
|
|
25
|
+
"depth_mode": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"enum": ["current_only", "parent_only", "ancestors_only", "full_tree"],
|
|
28
|
+
"description": "Controls what hierarchy information is returned. 'current_only' returns just the current node. 'parent_only' adds immediate parent. 'ancestors_only' returns full path to root. 'full_tree' includes siblings and full tree structure.",
|
|
29
|
+
"default": "full_tree"
|
|
30
|
+
},
|
|
31
|
+
"include_metadata": {
|
|
32
|
+
"type": "boolean",
|
|
33
|
+
"description": "Include execution metadata like elapsed time and status for each node",
|
|
34
|
+
"default": true
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"required": []
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Example Invocation:**
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"node_id": "wf-789-data-processor",
|
|
47
|
+
"depth_mode": "full_tree",
|
|
48
|
+
"include_metadata": true
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Example Response:**
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"current": {
|
|
57
|
+
"id": "wf-789-data-processor",
|
|
58
|
+
"name": "DataProcessingStep",
|
|
59
|
+
"status": "running",
|
|
60
|
+
"created_at": 1702080000000,
|
|
61
|
+
"elapsed_ms": 5432,
|
|
62
|
+
"completion_percentage": 45
|
|
63
|
+
},
|
|
64
|
+
"parent": {
|
|
65
|
+
"id": "wf-123-main-orchestrator",
|
|
66
|
+
"name": "MainOrchestrator",
|
|
67
|
+
"status": "running",
|
|
68
|
+
"depth_in_tree": 1
|
|
69
|
+
},
|
|
70
|
+
"ancestors": [
|
|
71
|
+
{
|
|
72
|
+
"id": "wf-123-main-orchestrator",
|
|
73
|
+
"name": "MainOrchestrator",
|
|
74
|
+
"status": "running",
|
|
75
|
+
"created_at": 1702079900000,
|
|
76
|
+
"depth_in_tree": 1
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "wf-001-root",
|
|
80
|
+
"name": "RootWorkflow",
|
|
81
|
+
"status": "running",
|
|
82
|
+
"created_at": 1702079800000,
|
|
83
|
+
"depth_in_tree": 2
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"siblings": [
|
|
87
|
+
{
|
|
88
|
+
"id": "wf-456-validation",
|
|
89
|
+
"name": "DataValidationStep",
|
|
90
|
+
"status": "completed",
|
|
91
|
+
"completion_percentage": 100
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "wf-999-transform",
|
|
95
|
+
"name": "DataTransformStep",
|
|
96
|
+
"status": "pending",
|
|
97
|
+
"completion_percentage": 0
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"tree_metrics": {
|
|
101
|
+
"max_depth": 2,
|
|
102
|
+
"total_nodes": 5,
|
|
103
|
+
"siblings_count": 2,
|
|
104
|
+
"leaf_nodes": 2
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Agent Usage Example:**
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
User: "What's your execution context?"
|
|
113
|
+
|
|
114
|
+
Agent Analysis:
|
|
115
|
+
- Inspects hierarchy to understand position
|
|
116
|
+
- Tool call: workflow_inspect_hierarchy with depth_mode="ancestors_only"
|
|
117
|
+
- Receives ancestors up to root
|
|
118
|
+
- Analyzes: "I'm 2 levels deep in a tree rooted at RootWorkflow, currently processing data as part of MainOrchestrator"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### 2. Ancestor Output Reader
|
|
124
|
+
|
|
125
|
+
**Use Case:** Agent reads results from parent/ancestor workflows to inform decisions
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"name": "workflow_read_ancestor_outputs",
|
|
130
|
+
"description": "Read execution results and output data from ancestor workflows. Supports reading specific ancestors or all ancestors in hierarchy order. Returns structured output data that helps agents understand what prior workflow steps have accomplished.",
|
|
131
|
+
"input_schema": {
|
|
132
|
+
"type": "object",
|
|
133
|
+
"properties": {
|
|
134
|
+
"ancestor_id": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"description": "Specific ancestor workflow ID to read from. If omitted, reads from all ancestors."
|
|
137
|
+
},
|
|
138
|
+
"ancestor_name": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"description": "Filter by ancestor workflow name (e.g., 'DataValidationStep'). Useful if you don't know the ID."
|
|
141
|
+
},
|
|
142
|
+
"max_ancestry_depth": {
|
|
143
|
+
"type": "integer",
|
|
144
|
+
"description": "Only read from ancestors this many levels up. Set to 1 for immediate parent only, 2 for grandparent, etc.",
|
|
145
|
+
"minimum": 1
|
|
146
|
+
},
|
|
147
|
+
"include_execution_metadata": {
|
|
148
|
+
"type": "boolean",
|
|
149
|
+
"description": "Include timing and status information alongside the output",
|
|
150
|
+
"default": true
|
|
151
|
+
},
|
|
152
|
+
"include_error_details": {
|
|
153
|
+
"type": "boolean",
|
|
154
|
+
"description": "If ancestor failed, include error details for debugging",
|
|
155
|
+
"default": false
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"required": []
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Example Invocation:**
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"ancestor_name": "DataValidationStep",
|
|
168
|
+
"include_execution_metadata": true
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Example Response:**
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"outputs": [
|
|
177
|
+
{
|
|
178
|
+
"ancestor_id": "wf-456-validation",
|
|
179
|
+
"ancestor_name": "DataValidationStep",
|
|
180
|
+
"hierarchy_depth": 1,
|
|
181
|
+
"status": "completed",
|
|
182
|
+
"execution_summary": {
|
|
183
|
+
"started_at": 1702080100000,
|
|
184
|
+
"completed_at": 1702080150000,
|
|
185
|
+
"duration_ms": 50000
|
|
186
|
+
},
|
|
187
|
+
"output_data": {
|
|
188
|
+
"records_validated": 15000,
|
|
189
|
+
"validation_pass_rate": 0.987,
|
|
190
|
+
"validation_rules_applied": 23,
|
|
191
|
+
"error_records": 195,
|
|
192
|
+
"warnings": [
|
|
193
|
+
"High cardinality in field 'user_id'",
|
|
194
|
+
"Null values detected in 'timestamp' field (0.3%)"
|
|
195
|
+
]
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"ancestor_id": "wf-123-main-orchestrator",
|
|
200
|
+
"ancestor_name": "MainOrchestrator",
|
|
201
|
+
"hierarchy_depth": 2,
|
|
202
|
+
"status": "running",
|
|
203
|
+
"execution_summary": {
|
|
204
|
+
"started_at": 1702080000000,
|
|
205
|
+
"elapsed_ms": 175000
|
|
206
|
+
},
|
|
207
|
+
"output_data": {
|
|
208
|
+
"stage": "data_processing",
|
|
209
|
+
"input_file_size_mb": 487.2,
|
|
210
|
+
"data_schema": "validated",
|
|
211
|
+
"schema_version": "1.2.3"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Agent Usage Example:**
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
Agent thinks: "I need to understand what validation rules were applied before processing this data."
|
|
222
|
+
- Tool call: workflow_read_ancestor_outputs with ancestor_name="DataValidationStep"
|
|
223
|
+
- Receives: 987 validation pass rate, specific warnings about null values
|
|
224
|
+
- Decision: "I'll use conservative defaults for null value handling given the warnings"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
### 3. Cache Status Inspector
|
|
230
|
+
|
|
231
|
+
**Use Case:** Agent checks if results have been cached to avoid redundant computation
|
|
232
|
+
|
|
233
|
+
```json
|
|
234
|
+
{
|
|
235
|
+
"name": "workflow_inspect_cache",
|
|
236
|
+
"description": "Inspect caching status for current and ancestor workflows. Shows which results have been cached, how stale they are, and whether recomputation occurred. Helps agents understand data freshness and optimize for cost vs accuracy.",
|
|
237
|
+
"input_schema": {
|
|
238
|
+
"type": "object",
|
|
239
|
+
"properties": {
|
|
240
|
+
"node_id": {
|
|
241
|
+
"type": "string",
|
|
242
|
+
"description": "Workflow node to check cache for. If omitted, checks current node."
|
|
243
|
+
},
|
|
244
|
+
"check_ancestors": {
|
|
245
|
+
"type": "boolean",
|
|
246
|
+
"description": "Also return cache status for ancestor workflows",
|
|
247
|
+
"default": true
|
|
248
|
+
},
|
|
249
|
+
"cache_key_pattern": {
|
|
250
|
+
"type": "string",
|
|
251
|
+
"description": "Filter to cache entries matching this pattern (supports * wildcards, e.g., 'validation_*')"
|
|
252
|
+
},
|
|
253
|
+
"include_statistics": {
|
|
254
|
+
"type": "boolean",
|
|
255
|
+
"description": "Include cache hit rates and performance metrics",
|
|
256
|
+
"default": true
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
"required": []
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Example Invocation:**
|
|
265
|
+
|
|
266
|
+
```json
|
|
267
|
+
{
|
|
268
|
+
"check_ancestors": true,
|
|
269
|
+
"cache_key_pattern": "schema_*",
|
|
270
|
+
"include_statistics": true
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
**Example Response:**
|
|
275
|
+
|
|
276
|
+
```json
|
|
277
|
+
{
|
|
278
|
+
"workflow_id": "wf-789-data-processor",
|
|
279
|
+
"cache_configuration": {
|
|
280
|
+
"enabled": true,
|
|
281
|
+
"strategy": "persistent",
|
|
282
|
+
"ttl_seconds": 86400
|
|
283
|
+
},
|
|
284
|
+
"cache_entries": [
|
|
285
|
+
{
|
|
286
|
+
"cache_key": "schema_analysis_result",
|
|
287
|
+
"is_cached": true,
|
|
288
|
+
"cached_at": 1702080050000,
|
|
289
|
+
"age_seconds": 382,
|
|
290
|
+
"hit_count": 3,
|
|
291
|
+
"size_bytes": 2048,
|
|
292
|
+
"source_workflow_id": "wf-456-validation"
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"cache_key": "schema_validation_rules",
|
|
296
|
+
"is_cached": true,
|
|
297
|
+
"cached_at": 1702079950000,
|
|
298
|
+
"age_seconds": 482,
|
|
299
|
+
"hit_count": 5,
|
|
300
|
+
"size_bytes": 4096,
|
|
301
|
+
"stale_after_minutes": 60,
|
|
302
|
+
"stale": false
|
|
303
|
+
}
|
|
304
|
+
],
|
|
305
|
+
"cache_statistics": {
|
|
306
|
+
"total_entries": 2,
|
|
307
|
+
"total_size_bytes": 6144,
|
|
308
|
+
"cache_hit_rate": 0.889,
|
|
309
|
+
"average_hit_count": 4,
|
|
310
|
+
"recent_misses": 1
|
|
311
|
+
},
|
|
312
|
+
"ancestor_cache_summary": [
|
|
313
|
+
{
|
|
314
|
+
"ancestor_id": "wf-456-validation",
|
|
315
|
+
"cache_hit_rate": 0.95,
|
|
316
|
+
"size_bytes": 15360
|
|
317
|
+
}
|
|
318
|
+
]
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**Agent Usage Example:**
|
|
323
|
+
|
|
324
|
+
```
|
|
325
|
+
Agent: "Should I recompute the schema analysis?"
|
|
326
|
+
- Checks cache: schema_analysis_result was cached 6 minutes ago
|
|
327
|
+
- TTL is 60 minutes, so still fresh
|
|
328
|
+
- Decision: "Use cached result to save computation time"
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
### 4. Event History Reader
|
|
334
|
+
|
|
335
|
+
**Use Case:** Agent reviews what happened during execution to understand workflow behavior
|
|
336
|
+
|
|
337
|
+
```json
|
|
338
|
+
{
|
|
339
|
+
"name": "workflow_read_event_history",
|
|
340
|
+
"description": "Read detailed event history from workflow execution tree. Supports filtering by event type, workflow, and time range. Helps agents understand workflow execution flow, errors, and performance characteristics.",
|
|
341
|
+
"input_schema": {
|
|
342
|
+
"type": "object",
|
|
343
|
+
"properties": {
|
|
344
|
+
"workflow_id": {
|
|
345
|
+
"type": "string",
|
|
346
|
+
"description": "Filter to events from specific workflow. If omitted, returns events from all workflows in tree."
|
|
347
|
+
},
|
|
348
|
+
"event_types": {
|
|
349
|
+
"type": "array",
|
|
350
|
+
"items": {
|
|
351
|
+
"type": "string",
|
|
352
|
+
"enum": [
|
|
353
|
+
"stepStart",
|
|
354
|
+
"stepEnd",
|
|
355
|
+
"toolInvocation",
|
|
356
|
+
"toolCompletion",
|
|
357
|
+
"error",
|
|
358
|
+
"warning",
|
|
359
|
+
"stateSnapshot",
|
|
360
|
+
"childAttached",
|
|
361
|
+
"completionMilestone"
|
|
362
|
+
]
|
|
363
|
+
},
|
|
364
|
+
"description": "Filter to only these event types"
|
|
365
|
+
},
|
|
366
|
+
"time_range_start": {
|
|
367
|
+
"type": "integer",
|
|
368
|
+
"description": "Only return events after this Unix timestamp (ms)"
|
|
369
|
+
},
|
|
370
|
+
"time_range_end": {
|
|
371
|
+
"type": "integer",
|
|
372
|
+
"description": "Only return events before this Unix timestamp (ms)"
|
|
373
|
+
},
|
|
374
|
+
"limit": {
|
|
375
|
+
"type": "integer",
|
|
376
|
+
"description": "Maximum number of events to return",
|
|
377
|
+
"default": 100,
|
|
378
|
+
"maximum": 1000
|
|
379
|
+
},
|
|
380
|
+
"sort_order": {
|
|
381
|
+
"type": "string",
|
|
382
|
+
"enum": ["ascending", "descending"],
|
|
383
|
+
"description": "Sort by timestamp",
|
|
384
|
+
"default": "ascending"
|
|
385
|
+
},
|
|
386
|
+
"include_full_context": {
|
|
387
|
+
"type": "boolean",
|
|
388
|
+
"description": "Include complete event details and payloads (may be verbose)",
|
|
389
|
+
"default": false
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
"required": []
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Example Invocation:**
|
|
398
|
+
|
|
399
|
+
```json
|
|
400
|
+
{
|
|
401
|
+
"event_types": ["error", "warning"],
|
|
402
|
+
"include_full_context": true,
|
|
403
|
+
"limit": 50
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
**Example Response:**
|
|
408
|
+
|
|
409
|
+
```json
|
|
410
|
+
{
|
|
411
|
+
"events": [
|
|
412
|
+
{
|
|
413
|
+
"id": "event-001",
|
|
414
|
+
"timestamp": 1702080150000,
|
|
415
|
+
"workflow_id": "wf-456-validation",
|
|
416
|
+
"workflow_name": "DataValidationStep",
|
|
417
|
+
"event_type": "toolInvocation",
|
|
418
|
+
"tool_name": "validate_schema",
|
|
419
|
+
"duration_ms": 2341,
|
|
420
|
+
"status": "success",
|
|
421
|
+
"context": {
|
|
422
|
+
"input_records": 15000,
|
|
423
|
+
"output_status": "validation_passed"
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"id": "event-002",
|
|
428
|
+
"timestamp": 1702080152000,
|
|
429
|
+
"workflow_id": "wf-456-validation",
|
|
430
|
+
"workflow_name": "DataValidationStep",
|
|
431
|
+
"event_type": "warning",
|
|
432
|
+
"severity": "medium",
|
|
433
|
+
"message": "195 records failed validation (1.3% error rate)",
|
|
434
|
+
"affected_field": "timestamp",
|
|
435
|
+
"context": {
|
|
436
|
+
"error_type": "null_value",
|
|
437
|
+
"count": 195,
|
|
438
|
+
"recommendation": "Consider handling nulls in downstream processing"
|
|
439
|
+
}
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"id": "event-003",
|
|
443
|
+
"timestamp": 1702080175000,
|
|
444
|
+
"workflow_id": "wf-789-data-processor",
|
|
445
|
+
"workflow_name": "DataProcessingStep",
|
|
446
|
+
"event_type": "error",
|
|
447
|
+
"severity": "high",
|
|
448
|
+
"message": "Memory usage exceeded threshold",
|
|
449
|
+
"error_code": "ERR_OUT_OF_MEMORY",
|
|
450
|
+
"context": {
|
|
451
|
+
"memory_limit_mb": 2048,
|
|
452
|
+
"memory_used_mb": 2156,
|
|
453
|
+
"memory_required_mb": 2500,
|
|
454
|
+
"recommendation": "Consider partitioning input data"
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
],
|
|
458
|
+
"summary": {
|
|
459
|
+
"total_events": 3,
|
|
460
|
+
"event_types_found": ["toolInvocation", "warning", "error"],
|
|
461
|
+
"time_span_ms": 25000,
|
|
462
|
+
"errors_count": 1,
|
|
463
|
+
"warnings_count": 1,
|
|
464
|
+
"successful_tools": 1
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
**Agent Usage Example:**
|
|
470
|
+
|
|
471
|
+
```
|
|
472
|
+
Agent: "What went wrong?"
|
|
473
|
+
- Queries event history for errors
|
|
474
|
+
- Receives: Memory exceeded threshold event with recommendation
|
|
475
|
+
- Action: "I'll implement data partitioning to process in smaller batches"
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
### 5. State Snapshot Reader
|
|
481
|
+
|
|
482
|
+
**Use Case:** Agent reads captured state from decision points to understand workflow's internal reasoning
|
|
483
|
+
|
|
484
|
+
```json
|
|
485
|
+
{
|
|
486
|
+
"name": "workflow_inspect_state_snapshot",
|
|
487
|
+
"description": "Read captured state snapshots from specified workflows. State snapshots are captured at key decision points using @ObservedState decorators and contain workflow internal state at that point in time.",
|
|
488
|
+
"input_schema": {
|
|
489
|
+
"type": "object",
|
|
490
|
+
"properties": {
|
|
491
|
+
"workflow_id": {
|
|
492
|
+
"type": "string",
|
|
493
|
+
"description": "Workflow to read state from"
|
|
494
|
+
},
|
|
495
|
+
"snapshot_timestamp": {
|
|
496
|
+
"type": "integer",
|
|
497
|
+
"description": "Specific snapshot timestamp. If omitted, returns latest snapshot."
|
|
498
|
+
},
|
|
499
|
+
"property_filter": {
|
|
500
|
+
"type": "string",
|
|
501
|
+
"description": "Return only state properties matching this filter (supports * wildcards)"
|
|
502
|
+
},
|
|
503
|
+
"include_change_history": {
|
|
504
|
+
"type": "boolean",
|
|
505
|
+
"description": "Show how state changed over time (multiple snapshots)",
|
|
506
|
+
"default": false
|
|
507
|
+
},
|
|
508
|
+
"max_snapshots": {
|
|
509
|
+
"type": "integer",
|
|
510
|
+
"description": "Maximum number of snapshots to return",
|
|
511
|
+
"default": 1,
|
|
512
|
+
"maximum": 10
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
"required": ["workflow_id"]
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
**Example Invocation:**
|
|
521
|
+
|
|
522
|
+
```json
|
|
523
|
+
{
|
|
524
|
+
"workflow_id": "wf-456-validation",
|
|
525
|
+
"property_filter": "validation_*",
|
|
526
|
+
"include_change_history": true
|
|
527
|
+
}
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
**Example Response:**
|
|
531
|
+
|
|
532
|
+
```json
|
|
533
|
+
{
|
|
534
|
+
"workflow_id": "wf-456-validation",
|
|
535
|
+
"workflow_name": "DataValidationStep",
|
|
536
|
+
"snapshots": [
|
|
537
|
+
{
|
|
538
|
+
"timestamp": 1702080140000,
|
|
539
|
+
"sequence_number": 1,
|
|
540
|
+
"state": {
|
|
541
|
+
"validation_rules_loaded": 23,
|
|
542
|
+
"validation_stage": "schema_check",
|
|
543
|
+
"records_processed": 0,
|
|
544
|
+
"errors_found": 0,
|
|
545
|
+
"current_rule": "schema_type_mismatch"
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"timestamp": 1702080150000,
|
|
550
|
+
"sequence_number": 2,
|
|
551
|
+
"state": {
|
|
552
|
+
"validation_rules_loaded": 23,
|
|
553
|
+
"validation_stage": "data_validation",
|
|
554
|
+
"records_processed": 15000,
|
|
555
|
+
"errors_found": 195,
|
|
556
|
+
"current_rule": "null_value_check",
|
|
557
|
+
"validation_pass_rate": 0.987
|
|
558
|
+
},
|
|
559
|
+
"changes_from_previous": {
|
|
560
|
+
"records_processed": { "from": 0, "to": 15000 },
|
|
561
|
+
"errors_found": { "from": 0, "to": 195 },
|
|
562
|
+
"validation_stage": { "from": "schema_check", "to": "data_validation" }
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
],
|
|
566
|
+
"state_summary": {
|
|
567
|
+
"property_count": 5,
|
|
568
|
+
"snapshot_count": 2,
|
|
569
|
+
"time_span_ms": 10000,
|
|
570
|
+
"state_volatility": "medium"
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
**Agent Usage Example:**
|
|
576
|
+
|
|
577
|
+
```
|
|
578
|
+
Agent: "How was validation progressing?"
|
|
579
|
+
- Reads state snapshots from validation workflow
|
|
580
|
+
- Sees: 0 errors after schema check, then 195 errors after data validation
|
|
581
|
+
- Analysis: "Data validation is stricter than schema validation; nulls are the main issue"
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
---
|
|
585
|
+
|
|
586
|
+
### 6. Workflow Spawn Request (Self-Modification)
|
|
587
|
+
|
|
588
|
+
**Use Case:** Agent requests to spawn a child workflow for parallel processing
|
|
589
|
+
|
|
590
|
+
```json
|
|
591
|
+
{
|
|
592
|
+
"name": "workflow_spawn_child",
|
|
593
|
+
"description": "Request to spawn a child workflow. Child workflow executes under current workflow context and can access ancestor state via introspection tools. Requires a pre-approved workflow template.",
|
|
594
|
+
"input_schema": {
|
|
595
|
+
"type": "object",
|
|
596
|
+
"properties": {
|
|
597
|
+
"child_workflow_name": {
|
|
598
|
+
"type": "string",
|
|
599
|
+
"description": "Human-readable name for the child workflow instance"
|
|
600
|
+
},
|
|
601
|
+
"workflow_template_id": {
|
|
602
|
+
"type": "string",
|
|
603
|
+
"description": "ID of pre-approved workflow template. Agents cannot define arbitrary workflows - only use pre-approved templates.",
|
|
604
|
+
"enum": [
|
|
605
|
+
"template_data_validation",
|
|
606
|
+
"template_data_transformation",
|
|
607
|
+
"template_data_analysis",
|
|
608
|
+
"template_data_aggregation",
|
|
609
|
+
"template_error_handling"
|
|
610
|
+
]
|
|
611
|
+
},
|
|
612
|
+
"input_data": {
|
|
613
|
+
"type": "object",
|
|
614
|
+
"description": "Data to pass to child workflow. Must match template input schema."
|
|
615
|
+
},
|
|
616
|
+
"parallel_execution": {
|
|
617
|
+
"type": "boolean",
|
|
618
|
+
"description": "If true, run in parallel with siblings. If false, wait for completion before returning.",
|
|
619
|
+
"default": true
|
|
620
|
+
},
|
|
621
|
+
"timeout_seconds": {
|
|
622
|
+
"type": "integer",
|
|
623
|
+
"description": "Maximum execution time before child is terminated",
|
|
624
|
+
"minimum": 1,
|
|
625
|
+
"maximum": 3600
|
|
626
|
+
},
|
|
627
|
+
"resource_allocation": {
|
|
628
|
+
"type": "object",
|
|
629
|
+
"properties": {
|
|
630
|
+
"memory_mb": {
|
|
631
|
+
"type": "integer",
|
|
632
|
+
"description": "Memory limit for child",
|
|
633
|
+
"minimum": 128,
|
|
634
|
+
"maximum": 4096
|
|
635
|
+
},
|
|
636
|
+
"cpu_shares": {
|
|
637
|
+
"type": "integer",
|
|
638
|
+
"description": "CPU allocation (relative to parent)",
|
|
639
|
+
"minimum": 1,
|
|
640
|
+
"maximum": 100
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
},
|
|
645
|
+
"required": ["child_workflow_name", "workflow_template_id", "input_data"]
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
**Example Invocation:**
|
|
651
|
+
|
|
652
|
+
```json
|
|
653
|
+
{
|
|
654
|
+
"child_workflow_name": "process_partition_001",
|
|
655
|
+
"workflow_template_id": "template_data_transformation",
|
|
656
|
+
"input_data": {
|
|
657
|
+
"partition_id": "part-001",
|
|
658
|
+
"data_slice": { "records": 5000 },
|
|
659
|
+
"transformation_rules": ["uppercase_names", "normalize_dates"]
|
|
660
|
+
},
|
|
661
|
+
"parallel_execution": true,
|
|
662
|
+
"timeout_seconds": 300
|
|
663
|
+
}
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
**Example Response:**
|
|
667
|
+
|
|
668
|
+
```json
|
|
669
|
+
{
|
|
670
|
+
"status": "spawned",
|
|
671
|
+
"child_workflow_id": "wf-spawn-001-partition",
|
|
672
|
+
"child_workflow_name": "process_partition_001",
|
|
673
|
+
"parent_workflow_id": "wf-789-data-processor",
|
|
674
|
+
"template_used": "template_data_transformation",
|
|
675
|
+
"execution_mode": "parallel",
|
|
676
|
+
"resource_limits": {
|
|
677
|
+
"memory_mb": 512,
|
|
678
|
+
"cpu_shares": 25,
|
|
679
|
+
"timeout_seconds": 300
|
|
680
|
+
},
|
|
681
|
+
"estimated_completion_time_ms": 45000,
|
|
682
|
+
"can_be_inspected_via": [
|
|
683
|
+
"workflow_inspect_hierarchy",
|
|
684
|
+
"workflow_read_ancestor_outputs",
|
|
685
|
+
"workflow_read_event_history"
|
|
686
|
+
]
|
|
687
|
+
}
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
**Agent Usage Example:**
|
|
691
|
+
|
|
692
|
+
```
|
|
693
|
+
Agent: "This dataset is too large to process at once. Let me partition it."
|
|
694
|
+
- Spawns 3 child workflows using template_data_transformation
|
|
695
|
+
- Each processes 1/3 of the data in parallel
|
|
696
|
+
- Uses workflow_read_ancestor_outputs to collect results from all children
|
|
697
|
+
- Aggregates results from completed children
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
---
|
|
701
|
+
|
|
702
|
+
### 7. Dynamic Prompt Generation
|
|
703
|
+
|
|
704
|
+
**Use Case:** Agent creates context-aware prompt for child workflow based on current analysis
|
|
705
|
+
|
|
706
|
+
```json
|
|
707
|
+
{
|
|
708
|
+
"name": "workflow_generate_dynamic_prompt",
|
|
709
|
+
"description": "Generate a system prompt for a child workflow based on current analysis. Generated prompt is validated against template before execution. Supports templating variables from current context.",
|
|
710
|
+
"input_schema": {
|
|
711
|
+
"type": "object",
|
|
712
|
+
"properties": {
|
|
713
|
+
"target_workflow_id": {
|
|
714
|
+
"type": "string",
|
|
715
|
+
"description": "Child workflow to generate prompt for"
|
|
716
|
+
},
|
|
717
|
+
"prompt_template": {
|
|
718
|
+
"type": "string",
|
|
719
|
+
"enum": [
|
|
720
|
+
"analysis_guided",
|
|
721
|
+
"error_recovery",
|
|
722
|
+
"optimization",
|
|
723
|
+
"quality_checking",
|
|
724
|
+
"decision_making"
|
|
725
|
+
],
|
|
726
|
+
"description": "Template type constrains what kind of prompt is generated"
|
|
727
|
+
},
|
|
728
|
+
"context_variables": {
|
|
729
|
+
"type": "object",
|
|
730
|
+
"description": "Context from current workflow to inject into template (e.g., {error_count}, {data_quality})"
|
|
731
|
+
},
|
|
732
|
+
"additional_constraints": {
|
|
733
|
+
"type": "object",
|
|
734
|
+
"properties": {
|
|
735
|
+
"max_iterations": {
|
|
736
|
+
"type": "integer",
|
|
737
|
+
"description": "Maximum tool invocations"
|
|
738
|
+
},
|
|
739
|
+
"focus_area": {
|
|
740
|
+
"type": "string",
|
|
741
|
+
"description": "What to prioritize (e.g., 'speed' or 'accuracy')"
|
|
742
|
+
},
|
|
743
|
+
"error_handling_strategy": {
|
|
744
|
+
"type": "string",
|
|
745
|
+
"enum": ["fail_fast", "collect_and_continue", "best_effort"],
|
|
746
|
+
"description": "How to handle errors"
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
"dry_run": {
|
|
751
|
+
"type": "boolean",
|
|
752
|
+
"description": "If true, return generated prompt without executing it",
|
|
753
|
+
"default": false
|
|
754
|
+
}
|
|
755
|
+
},
|
|
756
|
+
"required": ["target_workflow_id", "prompt_template"]
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
**Example Invocation:**
|
|
762
|
+
|
|
763
|
+
```json
|
|
764
|
+
{
|
|
765
|
+
"target_workflow_id": "wf-spawn-001",
|
|
766
|
+
"prompt_template": "error_recovery",
|
|
767
|
+
"context_variables": {
|
|
768
|
+
"error_count": 195,
|
|
769
|
+
"error_type": "null_value",
|
|
770
|
+
"error_percentage": 1.3
|
|
771
|
+
},
|
|
772
|
+
"additional_constraints": {
|
|
773
|
+
"focus_area": "accuracy",
|
|
774
|
+
"error_handling_strategy": "collect_and_continue",
|
|
775
|
+
"max_iterations": 5
|
|
776
|
+
},
|
|
777
|
+
"dry_run": true
|
|
778
|
+
}
|
|
779
|
+
```
|
|
780
|
+
|
|
781
|
+
**Example Response:**
|
|
782
|
+
|
|
783
|
+
```json
|
|
784
|
+
{
|
|
785
|
+
"status": "validated",
|
|
786
|
+
"target_workflow_id": "wf-spawn-001",
|
|
787
|
+
"generated_prompt": "You are processing data with known issues: 195 null values detected (1.3%). Focus on accuracy and collect errors for later review. Use conservative defaults for null handling. Maximum 5 iterations. If you encounter errors, collect them and continue processing the remaining data.",
|
|
788
|
+
"prompt_token_count": 67,
|
|
789
|
+
"safety_check": {
|
|
790
|
+
"passed": true,
|
|
791
|
+
"issues_found": [],
|
|
792
|
+
"validation_rules_applied": [
|
|
793
|
+
"no_code_injection",
|
|
794
|
+
"no_escaping_template",
|
|
795
|
+
"no_disabling_safety_features"
|
|
796
|
+
]
|
|
797
|
+
},
|
|
798
|
+
"execution_parameters": {
|
|
799
|
+
"will_override": ["system_prompt"],
|
|
800
|
+
"will_preserve": ["model", "max_tokens", "temperature"]
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
**Agent Usage Example:**
|
|
806
|
+
|
|
807
|
+
```
|
|
808
|
+
Agent thinks: "Child workflow needs to know about the 1.3% error rate"
|
|
809
|
+
- Generates dynamic prompt using error_recovery template
|
|
810
|
+
- Includes context: error_count=195, error_type=null_value
|
|
811
|
+
- Sets error_handling_strategy to collect_and_continue
|
|
812
|
+
- Verification: Prompt passes safety checks
|
|
813
|
+
- Executes with generated prompt
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
---
|
|
817
|
+
|
|
818
|
+
## Integration Patterns
|
|
819
|
+
|
|
820
|
+
### Pattern 1: Context-Aware Decision Making
|
|
821
|
+
|
|
822
|
+
```
|
|
823
|
+
Agent receives task → Inspects hierarchy to understand context
|
|
824
|
+
→ Reads ancestor outputs to see what's been done
|
|
825
|
+
→ Checks cache status for data freshness
|
|
826
|
+
→ Makes decision based on integrated context
|
|
827
|
+
→ Executes action
|
|
828
|
+
```
|
|
829
|
+
|
|
830
|
+
### Pattern 2: Adaptive Parallel Processing
|
|
831
|
+
|
|
832
|
+
```
|
|
833
|
+
Agent receives large dataset → Estimates partition count
|
|
834
|
+
→ Spawns child workflows for each partition
|
|
835
|
+
→ Monitors via event history
|
|
836
|
+
→ Reads ancestor outputs from children as they complete
|
|
837
|
+
→ Aggregates results
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
### Pattern 3: Error Recovery
|
|
841
|
+
|
|
842
|
+
```
|
|
843
|
+
Agent encounters error → Reads event history to find root cause
|
|
844
|
+
→ Checks state snapshots at failure point
|
|
845
|
+
→ Generates recovery prompt for new child workflow
|
|
846
|
+
→ Spawns recovery workflow with learned context
|
|
847
|
+
→ Compares results
|
|
848
|
+
```
|
|
849
|
+
|
|
850
|
+
### Pattern 4: Self-Improvement Loop
|
|
851
|
+
|
|
852
|
+
```
|
|
853
|
+
Agent completes task → Reads own event history
|
|
854
|
+
→ Analyzes performance via state snapshots
|
|
855
|
+
→ Identifies bottlenecks from metrics
|
|
856
|
+
→ Spawns optimized child workflow with refined approach
|
|
857
|
+
→ Compares performance
|
|
858
|
+
→ Uses better approach going forward
|
|
859
|
+
```
|
|
860
|
+
|
|
861
|
+
---
|
|
862
|
+
|
|
863
|
+
## Security Checklist for Implementation
|
|
864
|
+
|
|
865
|
+
- [ ] All introspection tools are read-only (no state modification)
|
|
866
|
+
- [ ] Cache tool never returns credentials or secrets
|
|
867
|
+
- [ ] State snapshots are filtered for sensitive fields
|
|
868
|
+
- [ ] Event history excludes internal system events
|
|
869
|
+
- [ ] Hierarchy inspection respects tenant boundaries
|
|
870
|
+
- [ ] Child spawning requires template approval
|
|
871
|
+
- [ ] Dynamic prompts are validated before execution
|
|
872
|
+
- [ ] All queries have result limits and timeouts
|
|
873
|
+
- [ ] Ancestor depth traversal is limited
|
|
874
|
+
- [ ] Introspection queries are audit logged
|
|
875
|
+
|