@memgrafter/flatagents 0.8.1 → 0.8.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.
package/MACHINES.md ADDED
@@ -0,0 +1,103 @@
1
+ # FlatAgents + FlatMachines Reference
2
+
3
+ > **Target: <1000 tokens.** LLM-optimized. See `flatagent.d.ts`, `flatmachine.d.ts`, `profiles.d.ts` for schemas.
4
+ >
5
+ > **Versioning:** All specs and SDKs use lockstep versioning.
6
+
7
+ ## Concepts
8
+
9
+ **FlatAgent**: Single LLM call. Model + prompts + output schema. No orchestration.
10
+ **FlatMachine**: State machine orchestrating agents. States, transitions, conditions, loops, error handling.
11
+
12
+ | Need | Use |
13
+ |------|-----|
14
+ | Single LLM call | FlatAgent |
15
+ | Multi-step/branching/retry/errors | FlatMachine |
16
+ | Parallel execution | `machine: [a, b, c]` |
17
+ | Dynamic parallelism | `foreach` |
18
+ | Background tasks | `launch` |
19
+
20
+ ## Model Profiles
21
+
22
+ ```yaml
23
+ # profiles.yml — agents reference by name
24
+ spec: flatprofiles
25
+ spec_version: "0.8.3"
26
+ data:
27
+ model_profiles:
28
+ fast: { provider: cerebras, name: zai-glm-4.6, temperature: 0.6 }
29
+ smart: { provider: anthropic, name: claude-3-opus-20240229 }
30
+ default: fast # Fallback
31
+ # override: smart # Force all
32
+ ```
33
+
34
+ Agent model field: `"fast"` | `{ profile: "fast", temperature: 0.9 }` | `{ provider: x, name: y }`
35
+ Resolution: default → profile → overrides → override
36
+
37
+ ## State Fields
38
+
39
+ | Field | Purpose |
40
+ |-------|---------|
41
+ | `type` | `initial` (entry) / `final` (exit+output) |
42
+ | `agent` | Agent to call |
43
+ | `machine` | Machine(s) — string or `[array]` for parallel |
44
+ | `foreach` | Array expr for dynamic parallelism (`as`: item var, `key`: result key) |
45
+ | `launch` / `launch_input` | Fire-and-forget machine(s) |
46
+ | `input` | Map input to agent/machine |
47
+ | `output_to_context` | Map `output.*` to `context.*` |
48
+ | `execution` | `{ type: retry, backoffs: [2,8,16], jitter: 0.1 }` |
49
+ | `on_error` | State name or `{ default: x, ErrorType: y }` |
50
+ | `transitions` | `[{ condition: "expr", to: state }, { to: default }]` |
51
+ | `mode` | `settled` (all) / `any` (first) for parallel |
52
+ | `timeout` | Seconds (0=forever) |
53
+
54
+ ## Patterns
55
+
56
+ **Execution types**: `default` | `retry` (backoffs, jitter) | `parallel` (n_samples) | `mdap_voting` (k_margin, max_candidates)
57
+
58
+ **Transitions**: `condition: "context.score >= 8"` with `to: state`. Last without condition = default.
59
+
60
+ **Loops**: Transition `to: same_state`. Machine has `max_steps` safety.
61
+
62
+ **Errors**: `on_error: state` or per-type. Context gets `last_error`, `last_error_type`.
63
+
64
+ **Parallel machines**:
65
+ ```yaml
66
+ machine: [review_a, review_b] # Results keyed by name
67
+ mode: settled # or "any"
68
+ ```
69
+
70
+ **Foreach**:
71
+ ```yaml
72
+ foreach: "{{ context.items }}"
73
+ as: item
74
+ machine: processor
75
+ ```
76
+
77
+ **Launch** (fire-and-forget):
78
+ ```yaml
79
+ launch: background_task
80
+ launch_input: { data: "{{ context.data }}" }
81
+ ```
82
+
83
+ ## Context Variables
84
+
85
+ `context.*` (all states), `input.*` (initial), `output.*` (in output_to_context), `item`/`as` (foreach)
86
+
87
+ ## Hooks
88
+
89
+ `on_machine_start`, `on_machine_end`, `on_state_enter`, `on_state_exit`, `on_transition`, `on_error`, `on_action`
90
+
91
+ ```python
92
+ class MyHooks(MachineHooks):
93
+ def on_action(self, action: str, context: dict) -> dict:
94
+ if action == "fetch": context["data"] = api_call()
95
+ return context
96
+ ```
97
+
98
+ ## Persistence
99
+
100
+ ```yaml
101
+ persistence: { enabled: true, backend: local } # local | memory
102
+ ```
103
+ Resume: `machine.execute(resume_from=execution_id)`
package/README.md CHANGED
@@ -1,221 +1,323 @@
1
- # FlatAgents TypeScript SDK
1
+ # FlatAgents
2
2
 
3
- TypeScript SDK for FlatAgents - Declarative LLM orchestration with YAML.
3
+ Define LLM agents in YAML. Run them anywhere.
4
4
 
5
- ## Installation
5
+ **For LLM/machine readers:** see [MACHINES.md](./MACHINES.md) for comprehensive reference.
6
6
 
7
- ```bash
8
- npm install flatagents
9
- ```
7
+ ## Why?
10
8
 
11
- ## Quick Start
9
+ - **Composition over inheritance** — compose stateless agents and checkpointable machines
10
+ - **Compact structure** — easy for LLMs to read and generate
11
+ - **Simple hook interfaces** — escape hatches without complexity; webhook ready
12
+ - **Inspectable** — every agent and machine is readable config
13
+ - **Language-agnostic** — reduce code in any particular runtime
14
+ - **Common TypeScript interface** — single schema for agents, single schema for machines
15
+ - **Limitations** — machine topologies can get complex at scale
12
16
 
13
- ### Single Agent Call
17
+ *Inspired by Kubernetes manifests and character card specifications.*
14
18
 
15
- ```typescript
16
- import { FlatAgent } from 'flatagents';
19
+ ## Versioning
17
20
 
18
- const agent = new FlatAgent('agent.yml');
19
- const result = await agent.call({ query: "Hello World" });
20
- console.log(result.output);
21
- ```
21
+ All specs (`flatagent.d.ts`, `flatmachine.d.ts`, `profiles.d.ts`) and SDKs (Python, JS) use **lockstep versioning**. A single version number applies across the entire repository.
22
22
 
23
- ### State Machine Execution
23
+ ## Core Concepts
24
+
25
+ Use machines to write flatagents and flatmachines, they are designed for LLMs.
24
26
 
25
- ```typescript
26
- import { FlatMachine } from 'flatagents';
27
+ | Term | What it is |
28
+ |------|------------|
29
+ | **FlatAgent** | A single LLM call: model + prompts + output schema |
30
+ | **FlatMachine** | A state machine that orchestrates multiple agents, actions, and state machines |
27
31
 
28
- const machine = new FlatMachine({
29
- config: 'machine.yml',
30
- hooks: customHooks,
31
- persistence: new MemoryBackend()
32
- });
32
+ Use FlatAgent alone for simple tasks. Use FlatMachine when you need multi-step workflows, branching, or error handling.
33
+
34
+ ## Examples
33
35
 
34
- const result = await machine.execute({ input: "Hello" });
35
- console.log(result);
36
+ | Example | What it demonstrates |
37
+ |---------|---------------------|
38
+ | [helloworld](./sdk/examples/helloworld/python) | Minimal setup — single agent, single state machine |
39
+ | [writer_critic](./sdk/examples/writer_critic/python) | Multi-agent loop — writer drafts, critic reviews, iterates |
40
+ | [story_writer](./sdk/examples/story_writer/python) | Multi-step creative workflow with chapter generation |
41
+ | [human-in-the-loop](./sdk/examples/human-in-the-loop/python) | Pause execution for human approval via hooks |
42
+ | [error_handling](./sdk/examples/error_handling/python) | Error recovery and retry patterns at state machine level |
43
+ | [dynamic_agent](./sdk/examples/dynamic_agent/python) | On-the-fly agent generation from runtime context |
44
+ | [character_card](./sdk/examples/character_card/python) | Loading agent config from character card format |
45
+ | [mdap](./sdk/examples/mdap/python) | MDAP voting execution — multi-sample consensus |
46
+ | [gepa_self_optimizer](./sdk/examples/gepa_self_optimizer/python) | Self-optimizing prompts via reflection and critique |
47
+ | [research_paper_analysis](./sdk/examples/research_paper_analysis/python) | Document analysis with structured extraction |
48
+ | [multi_paper_synthesizer](./sdk/examples/multi_paper_synthesizer/python) | Cross-document synthesis with dynamic machine launching |
49
+ | [support_triage_json](./sdk/examples/support_triage_json/python) | JSON input/output with classification pipeline |
50
+ | [parallelism](./sdk/examples/parallelism/python) | Parallel machines, dynamic foreach, fire-and-forget launches |
51
+
52
+ ## Quick Start
53
+
54
+ ```bash
55
+ pip install flatagents[all]
36
56
  ```
37
57
 
38
- ## Core Concepts
58
+ ```python
59
+ from flatagents import FlatAgent
60
+
61
+ agent = FlatAgent(config_file="reviewer.yml")
62
+ result = await agent.call(query="Review this code...")
63
+ print(result.output)
64
+ ```
39
65
 
40
- ### FlatAgent
41
- A single LLM call configured in YAML:
66
+ ## Example Agent
42
67
 
68
+ **reviewer.yml**
43
69
  ```yaml
44
70
  spec: flatagent
45
- spec_version: "1.0"
71
+ spec_version: "0.8.2"
72
+
46
73
  data:
47
- name: my_agent
48
- model:
49
- name: gpt-4o-mini
50
- provider: openai
51
- system: "You are a helpful assistant."
52
- user: "{{ input.query }}"
74
+ name: code-reviewer
75
+
76
+ model: "smart-expensive" # Reference profile from profiles.yml
77
+
78
+ system: |
79
+ You are a senior code reviewer. Analyze code for bugs,
80
+ style issues, and potential improvements.
81
+
82
+ user: |
83
+ Review this code:
84
+ {{ input.code }}
85
+
53
86
  output:
54
- response:
87
+ issues:
88
+ type: list
89
+ items:
90
+ type: str
91
+ description: "List of issues found"
92
+ rating:
55
93
  type: str
56
- description: "The response"
94
+ enum: ["good", "needs_work", "critical"]
95
+ description: "Overall code quality"
57
96
  ```
58
97
 
59
- ### FlatMachine
60
- A state machine that orchestrates agents:
98
+ **What the fields mean:**
61
99
 
62
- ```yaml
63
- spec: flatmachine
64
- spec_version: "1.0"
65
- data:
66
- name: my_workflow
67
- context:
68
- result: ""
69
- states:
70
- initial:
71
- type: initial
72
- agent: agent.yml
73
- transitions:
74
- - to: final
75
- final:
76
- type: final
77
- output:
78
- result: "{{ context.result }}"
79
- ```
100
+ - **spec/spec_version** — Format identifier and version
101
+ - **data.name** — Agent identifier
102
+ - **data.model** — Profile name, inline config, or profile with overrides
103
+ - **data.system** — System prompt (sets behavior)
104
+ - **data.user** — User prompt template (uses Jinja2, `{{ input.* }}` for runtime values)
105
+ - **data.output** — Structured output schema (the runtime extracts these fields)
80
106
 
81
- ## Key Features
107
+ ## Model Profiles
82
108
 
83
- ### Parallel Execution
109
+ Centralize model configurations in `profiles.yml` and reference them by name:
110
+
111
+ **profiles.yml**
84
112
  ```yaml
85
- states:
86
- parallel_review:
87
- machine: [legal_review, tech_review, finance_review]
88
- transitions:
89
- - to: synthesize
113
+ spec: flatprofiles
114
+ spec_version: "0.8.2"
115
+
116
+ data:
117
+ model_profiles:
118
+ fast-cheap:
119
+ provider: cerebras
120
+ name: zai-glm-4.6
121
+ temperature: 0.6
122
+ max_tokens: 2048
123
+
124
+ smart-expensive:
125
+ provider: anthropic
126
+ name: claude-3-opus-20240229
127
+ temperature: 0.3
128
+ max_tokens: 4096
129
+
130
+ default: fast-cheap # Fallback when agent has no model
131
+ # override: smart-expensive # Uncomment to force all agents
90
132
  ```
91
133
 
92
- ### Dynamic Parallelism (Foreach)
134
+ **Agent usage:**
93
135
  ```yaml
94
- states:
95
- process_all:
96
- foreach: "{{ context.documents }}"
97
- as: doc
98
- machine: processor.yml
99
- transitions:
100
- - to: aggregate
136
+ # String shorthand — profile lookup
137
+ model: "fast-cheap"
138
+
139
+ # Profile with overrides
140
+ model:
141
+ profile: "fast-cheap"
142
+ temperature: 0.9
143
+
144
+ # Inline config (no profile)
145
+ model:
146
+ provider: openai
147
+ name: gpt-4
148
+ temperature: 0.3
101
149
  ```
102
150
 
103
- ### Retry with Backoff
151
+ Resolution order (low → high): default profile → named profile → inline overrides → override profile
152
+
153
+ ## Output Types
154
+
104
155
  ```yaml
105
- states:
106
- robust_call:
107
- agent: agent.yml
108
- execution:
109
- type: retry
110
- backoffs: [2, 8, 16, 35]
111
- jitter: 0.1
156
+ output:
157
+ answer: { type: str }
158
+ count: { type: int }
159
+ score: { type: float }
160
+ valid: { type: bool }
161
+ raw: { type: json }
162
+ items: { type: list, items: { type: str } }
163
+ metadata: { type: object, properties: { key: { type: str } } }
112
164
  ```
113
165
 
114
- ### Conditional Transitions
115
- ```yaml
116
- states:
117
- check_result:
118
- agent: evaluator.yml
119
- transitions:
120
- - condition: "context.score >= 8"
121
- to: success
122
- - to: retry
166
+ Use `enum: [...]` to constrain string values.
167
+
168
+ ## Multi-Agent Workflows
169
+
170
+ For orchestration, use FlatMachine ([full docs in MACHINES.md](./MACHINES.md)):
171
+
172
+ ```python
173
+ from flatagents import FlatMachine
174
+
175
+ machine = FlatMachine(config_file="workflow.yml")
176
+ result = await machine.execute(input={"query": "..."})
123
177
  ```
124
178
 
125
- ### Error Handling
126
- ```yaml
127
- states:
128
- risky_state:
129
- agent: agent.yml
130
- on_error: error_handler
179
+ FlatMachine provides: state transitions, conditional branching, loops, retry with backoff, and error recovery—all in YAML.
180
+
181
+ ## Features
182
+
183
+ - Checkpoint and restore
184
+ - Python SDK (TypeScript SDK in progress)
185
+ - [MACHINES.md](./MACHINES.md) — LLM-optimized reference docs
186
+ - Decider agents and machines
187
+ - On-the-fly agent and machine definitions
188
+ - Webhook hooks for remote state machine handling
189
+ - Metrics and logging
190
+ - Error recovery and exception handling at the state machine level
191
+ - Parallel machine execution (`machine: [a, b, c]`)
192
+ - Dynamic parallelism with `foreach`
193
+ - Fire-and-forget launches for background tasks
194
+
195
+ ## Planned
196
+
197
+ - Distributed execution — cross-network machine peering, inter-machine strategies
198
+ - SQL persistence backend
199
+ - TypeScript SDK
200
+ - `max_depth` config to limit machine launch nesting
201
+ - Checkpoint pruning to prevent storage explosion
202
+ - `$root/` path prefix — resolve agent/machine refs from workspace root, not config dir
203
+ - Input size validation — warn when prompt exceeds model context window
204
+ - Serialization warnings — flag non-JSON-serializable context values before checkpoint
205
+
206
+ ## Specs
207
+
208
+ TypeScript definitions are the source of truth:
209
+ - [`flatagent.d.ts`](./flatagent.d.ts)
210
+ - [`flatmachine.d.ts`](./flatmachine.d.ts)
211
+ - [`profiles.d.ts`](./profiles.d.ts)
212
+
213
+ ## Python SDK
214
+
215
+ ```bash
216
+ pip install flatagents[litellm]
131
217
  ```
132
218
 
133
- ### Persistence & Checkpointing
134
- ```yaml
135
- persistence:
136
- enabled: true
137
- backend: local # or memory
219
+ ### LLM Backends
220
+
221
+ ```python
222
+ from flatagents import LiteLLMBackend, AISuiteBackend
223
+
224
+ # LiteLLM (default)
225
+ agent = FlatAgent(config_file="agent.yml")
226
+
227
+ # AISuite
228
+ backend = AISuiteBackend(model="openai:gpt-4o")
229
+ agent = FlatAgent(config_file="agent.yml", backend=backend)
138
230
  ```
139
231
 
140
- ## Hooks
232
+ ### Hooks
233
+
234
+ Extend machine behavior with Python hooks:
235
+
236
+ ```python
237
+ from flatagents import FlatMachine, MachineHooks
141
238
 
142
- Extend with custom logic:
239
+ class CustomHooks(MachineHooks):
240
+ def on_state_enter(self, state: str, context: dict) -> dict:
241
+ context["entered_at"] = time.time()
242
+ return context
143
243
 
144
- ```typescript
145
- class CustomHooks implements MachineHooks {
146
- async onStateEnter(state: string, context: any) {
147
- console.log(`Entering ${state}`);
148
- return context;
149
- }
244
+ def on_action(self, action: str, context: dict) -> dict:
245
+ if action == "fetch_data":
246
+ context["data"] = fetch_from_api()
247
+ return context
150
248
 
151
- async onError(state: string, error: Error, context: any) {
152
- console.error(`Error in ${state}:`, error);
153
- return "recovery_state";
154
- }
155
- }
249
+ machine = FlatMachine(config_file="machine.yml", hooks=CustomHooks())
156
250
  ```
157
251
 
158
- ## MCP Integration
252
+ **Available hooks**: `on_machine_start`, `on_machine_end`, `on_state_enter`, `on_state_exit`, `on_transition`, `on_error`, `on_action`
253
+
254
+ ### Execution Types
159
255
 
160
256
  ```yaml
161
- data:
162
- mcp:
163
- servers:
164
- filesystem:
165
- command: "npx"
166
- args: ["@modelcontextprotocol/server-filesystem", "/path/to/files"]
167
- tool_filter:
168
- allow: ["filesystem:*"]
257
+ execution:
258
+ type: retry # retry | parallel | mdap_voting
259
+ backoffs: [2, 8, 16, 35] # Seconds between retries
260
+ jitter: 0.1 # ±10% random variation
169
261
  ```
170
262
 
171
- ## Examples
263
+ | Type | Use Case |
264
+ |------|----------|
265
+ | `default` | Single call |
266
+ | `retry` | Rate limit handling with backoff |
267
+ | `parallel` | Multiple samples (`n_samples`) |
268
+ | `mdap_voting` | Consensus voting (`k_margin`, `max_candidates`) |
172
269
 
173
- - **Helloworld**: Simple agent that builds "Hello World" one character at a time
174
- - **Parallelism**: Machine arrays, foreach loops, and fire-and-forget patterns
175
- - **Human-in-the-loop**: Custom hooks for interactive approval flows
176
- - **Peering**: Parent-child machine communication with result backends
270
+ ### Schema Validation
177
271
 
178
- ## API Reference
272
+ ```python
273
+ from flatagents import validate_flatagent_config, validate_flatmachine_config
179
274
 
180
- ### FlatAgent
181
- ```typescript
182
- class FlatAgent {
183
- constructor(config: AgentConfig | string);
184
- async call(input: Record<string, any>): Promise<{content: string, output: any}>;
185
- }
275
+ warnings = validate_flatagent_config(config)
276
+ warnings = validate_flatmachine_config(config)
186
277
  ```
187
278
 
188
- ### FlatMachine
189
- ```typescript
190
- class FlatMachine {
191
- constructor(options: MachineOptions);
192
- async execute(input?: Record<string, any>): Promise<any>;
193
- async resume(executionId: string): Promise<any>;
194
- }
195
- ```
279
+ ### Logging & Metrics
196
280
 
197
- ### Execution Types
198
- - `DefaultExecution`: Simple single execution
199
- - `RetryExecution`: Retry with exponential backoff
281
+ ```python
282
+ from flatagents import setup_logging, get_logger
283
+
284
+ setup_logging(level="INFO") # Respects FLATAGENTS_LOG_LEVEL env var
285
+ logger = get_logger(__name__)
286
+ ```
200
287
 
201
- ### Persistence Backends
202
- - `MemoryBackend`: In-memory storage
203
- - `LocalFileBackend`: File-based with atomic writes
288
+ **Env vars**: `FLATAGENTS_LOG_LEVEL` (`DEBUG`/`INFO`/`WARNING`/`ERROR`), `FLATAGENTS_LOG_FORMAT` (`standard`/`json`/`simple`)
204
289
 
205
- ## Testing
290
+ For OpenTelemetry metrics:
206
291
 
207
292
  ```bash
208
- npm test
209
- npm run typecheck
293
+ pip install flatagents[metrics]
294
+ export FLATAGENTS_METRICS_ENABLED=true
210
295
  ```
211
296
 
212
- ## Building
297
+ Metrics are enabled by default and print to stdout every 5s. Redirect to file or use OTLP for production:
213
298
 
214
299
  ```bash
215
- npm run build
216
- npm run dev # watch mode
300
+ # Metrics print to stdout by default
301
+ python your_script.py
302
+
303
+ # Save to file
304
+ python your_script.py >> metrics.log 2>&1
305
+
306
+ # Disable if needed
307
+ FLATAGENTS_METRICS_ENABLED=false python your_script.py
308
+
309
+ # Send to OTLP collector for production
310
+ OTEL_METRICS_EXPORTER=otlp \
311
+ OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 \
312
+ python your_script.py
217
313
  ```
218
314
 
219
- ## License
315
+ **Env vars for metrics**:
220
316
 
221
- MIT
317
+ | Variable | Default | Purpose |
318
+ |----------|---------|---------|
319
+ | `FLATAGENTS_METRICS_ENABLED` | `true` | Enable OpenTelemetry metrics |
320
+ | `OTEL_METRICS_EXPORTER` | `console` | `console` (stdout) or `otlp` (production) |
321
+ | `OTEL_EXPORTER_OTLP_ENDPOINT` | — | OTLP collector endpoint |
322
+ | `OTEL_METRIC_EXPORT_INTERVAL` | `5000` / `60000` | Export interval in ms (5s for console, 60s for otlp) |
323
+ | `OTEL_SERVICE_NAME` | `flatagents` | Service name in metrics |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memgrafter/flatagents",
3
- "version": "0.8.1",
3
+ "version": "0.8.3",
4
4
  "description": "TypeScript SDK for FlatAgents - Declarative LLM orchestration with YAML",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -17,7 +17,10 @@
17
17
  },
18
18
  "files": [
19
19
  "dist",
20
- "schemas"
20
+ "schemas",
21
+ "MACHINES.md",
22
+ "AGENTS.md",
23
+ "CLAUDE.md"
21
24
  ],
22
25
  "scripts": {
23
26
  "build": "tsup",
@@ -149,7 +149,7 @@
149
149
  * The profile field specifies which profile name to use as base.
150
150
  */
151
151
 
152
- export const SPEC_VERSION = "0.8.1";
152
+ export const SPEC_VERSION = "0.8.3";
153
153
 
154
154
  export interface AgentWrapper {
155
155
  spec: "flatagent";
@@ -1,4 +1,4 @@
1
- export const SPEC_VERSION = "0.8.1";
1
+ export const SPEC_VERSION = "0.8.3";
2
2
  export interface AgentWrapper {
3
3
  spec: "flatagent";
4
4
  spec_version: string;
@@ -325,7 +325,7 @@ export interface BackendConfig {
325
325
  results?: "memory" | "redis";
326
326
  }
327
327
 
328
- export const SPEC_VERSION = "0.8.1";
328
+ export const SPEC_VERSION = "0.8.3";
329
329
 
330
330
  /**
331
331
  * Wrapper interface for JSON schema generation.
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "spec_version": {
13
13
  "type": "string",
14
- "const": "0.8.1"
14
+ "const": "0.8.3"
15
15
  },
16
16
  "execution_lock": {
17
17
  "$ref": "#/definitions/ExecutionLock"
@@ -107,7 +107,7 @@ export interface BackendConfig {
107
107
  locking?: "none" | "local" | "redis" | "consul";
108
108
  results?: "memory" | "redis";
109
109
  }
110
- export const SPEC_VERSION = "0.8.1";
110
+ export const SPEC_VERSION = "0.8.3";
111
111
  export interface SDKRuntimeWrapper {
112
112
  spec: "flatagents-runtime";
113
113
  spec_version: typeof SPEC_VERSION;
@@ -256,7 +256,7 @@
256
256
  * pending_launches - Outbox pattern (v0.4.0)
257
257
  */
258
258
 
259
- export const SPEC_VERSION = "0.8.1";
259
+ export const SPEC_VERSION = "0.8.3";
260
260
 
261
261
  export interface MachineWrapper {
262
262
  spec: "flatmachine";
@@ -1,4 +1,4 @@
1
- export const SPEC_VERSION = "0.8.1";
1
+ export const SPEC_VERSION = "0.8.3";
2
2
  export interface MachineWrapper {
3
3
  spec: "flatmachine";
4
4
  spec_version: string;
@@ -107,7 +107,7 @@
107
107
  * base_url - Custom base URL for the API (e.g., for local models or proxies)
108
108
  */
109
109
 
110
- export const SPEC_VERSION = "0.8.1";
110
+ export const SPEC_VERSION = "0.8.3";
111
111
 
112
112
  export interface ProfilesWrapper {
113
113
  spec: "flatprofiles";
@@ -1,4 +1,4 @@
1
- export const SPEC_VERSION = "0.8.1";
1
+ export const SPEC_VERSION = "0.8.3";
2
2
  export interface ProfilesWrapper {
3
3
  spec: "flatprofiles";
4
4
  spec_version: string;