coreason-manifest 0.7.0__py3-none-any.whl → 0.10.0__py3-none-any.whl

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.
@@ -0,0 +1,813 @@
1
+ {
2
+ "$defs": {
3
+ "AgentNode": {
4
+ "additionalProperties": false,
5
+ "description": "A node that calls a specific atomic agent.\n\nAttributes:\n type: The type of the node (must be 'agent').\n agent_name: The name of the atomic agent to call.\n system_prompt: Overrides the registry default prompt. Required for ad-hoc/optimized agents.\n config: Runtime-specific configuration (e.g., model parameters, temperature). Merged with registry defaults.\n overrides: Runtime overrides for the agent (e.g., temperature, prompt_template_vars).",
6
+ "properties": {
7
+ "id": {
8
+ "description": "Unique identifier for the node.",
9
+ "title": "Id",
10
+ "type": "string"
11
+ },
12
+ "council_config": {
13
+ "anyOf": [
14
+ {
15
+ "$ref": "#/$defs/CouncilConfig"
16
+ },
17
+ {
18
+ "type": "null"
19
+ }
20
+ ],
21
+ "default": null,
22
+ "description": "Optional configuration for architectural triangulation."
23
+ },
24
+ "visual": {
25
+ "anyOf": [
26
+ {
27
+ "$ref": "#/$defs/VisualMetadata"
28
+ },
29
+ {
30
+ "type": "null"
31
+ }
32
+ ],
33
+ "default": null,
34
+ "description": "Visual metadata for the UI."
35
+ },
36
+ "metadata": {
37
+ "additionalProperties": true,
38
+ "description": "Generic metadata for operational context (e.g. cost tracking, SLAs).",
39
+ "title": "Metadata",
40
+ "type": "object"
41
+ },
42
+ "type": {
43
+ "const": "agent",
44
+ "default": "agent",
45
+ "description": "Discriminator for AgentNode.",
46
+ "title": "Type",
47
+ "type": "string"
48
+ },
49
+ "agent_name": {
50
+ "description": "The name of the atomic agent to call.",
51
+ "title": "Agent Name",
52
+ "type": "string"
53
+ },
54
+ "system_prompt": {
55
+ "anyOf": [
56
+ {
57
+ "type": "string"
58
+ },
59
+ {
60
+ "type": "null"
61
+ }
62
+ ],
63
+ "default": null,
64
+ "description": "Overrides the registry default prompt. Required for ad-hoc/optimized agents.",
65
+ "title": "System Prompt"
66
+ },
67
+ "config": {
68
+ "anyOf": [
69
+ {
70
+ "additionalProperties": true,
71
+ "type": "object"
72
+ },
73
+ {
74
+ "type": "null"
75
+ }
76
+ ],
77
+ "default": null,
78
+ "description": "Runtime-specific configuration (e.g., model parameters, temperature). Merged with registry defaults.",
79
+ "title": "Config"
80
+ },
81
+ "overrides": {
82
+ "anyOf": [
83
+ {
84
+ "additionalProperties": true,
85
+ "type": "object"
86
+ },
87
+ {
88
+ "type": "null"
89
+ }
90
+ ],
91
+ "default": null,
92
+ "description": "Runtime overrides for the agent (e.g., temperature, prompt_template_vars).",
93
+ "title": "Overrides"
94
+ }
95
+ },
96
+ "required": [
97
+ "id",
98
+ "agent_name"
99
+ ],
100
+ "title": "AgentNode",
101
+ "type": "object"
102
+ },
103
+ "ConditionalEdge": {
104
+ "additionalProperties": false,
105
+ "description": "Represents a dynamic routing connection from one node to multiple potential targets.\n\nAttributes:\n source_node_id: The ID of the source node.\n router_logic: A reference to a python function or a logic expression that returns the next node ID.\n mapping: A dictionary mapping the router's output (e.g., \"approve\", \"reject\") to target Node IDs.",
106
+ "properties": {
107
+ "source_node_id": {
108
+ "description": "The ID of the source node.",
109
+ "title": "Source Node Id",
110
+ "type": "string"
111
+ },
112
+ "router_logic": {
113
+ "anyOf": [
114
+ {
115
+ "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z_][a-zA-Z0-9_]*)*$",
116
+ "type": "string"
117
+ },
118
+ {
119
+ "$ref": "#/$defs/RouterExpression"
120
+ }
121
+ ],
122
+ "description": "A reference to a python function or logic expression that determines the path.",
123
+ "title": "Router Logic"
124
+ },
125
+ "mapping": {
126
+ "additionalProperties": {
127
+ "type": "string"
128
+ },
129
+ "description": "Map of router output values to target node IDs.",
130
+ "title": "Mapping",
131
+ "type": "object"
132
+ }
133
+ },
134
+ "required": [
135
+ "source_node_id",
136
+ "router_logic",
137
+ "mapping"
138
+ ],
139
+ "title": "ConditionalEdge",
140
+ "type": "object"
141
+ },
142
+ "CouncilConfig": {
143
+ "additionalProperties": false,
144
+ "description": "Configuration for 'Architectural Triangulation'.\n\nAttributes:\n strategy: The strategy for the council (e.g., 'consensus').\n voters: List of agents or models that vote.",
145
+ "properties": {
146
+ "strategy": {
147
+ "default": "consensus",
148
+ "description": "The strategy for the council, e.g., 'consensus'.",
149
+ "title": "Strategy",
150
+ "type": "string"
151
+ },
152
+ "voters": {
153
+ "description": "List of agents or models that vote.",
154
+ "items": {
155
+ "type": "string"
156
+ },
157
+ "title": "Voters",
158
+ "type": "array"
159
+ }
160
+ },
161
+ "required": [
162
+ "voters"
163
+ ],
164
+ "title": "CouncilConfig",
165
+ "type": "object"
166
+ },
167
+ "DataMapping": {
168
+ "additionalProperties": false,
169
+ "description": "Defines how to transform data between parent and child.",
170
+ "properties": {
171
+ "source": {
172
+ "description": "The path/key source.",
173
+ "title": "Source",
174
+ "type": "string"
175
+ },
176
+ "strategy": {
177
+ "$ref": "#/$defs/DataMappingStrategy",
178
+ "default": "direct",
179
+ "description": "The mapping strategy."
180
+ }
181
+ },
182
+ "required": [
183
+ "source"
184
+ ],
185
+ "title": "DataMapping",
186
+ "type": "object"
187
+ },
188
+ "DataMappingStrategy": {
189
+ "description": "Strategy for mapping data.",
190
+ "enum": [
191
+ "direct",
192
+ "jsonpath",
193
+ "literal"
194
+ ],
195
+ "title": "DataMappingStrategy",
196
+ "type": "string"
197
+ },
198
+ "Edge": {
199
+ "additionalProperties": false,
200
+ "description": "Represents a connection between two nodes.\n\nAttributes:\n source_node_id: The ID of the source node.\n target_node_id: The ID of the target node.\n condition: Optional Python expression for conditional branching.",
201
+ "properties": {
202
+ "source_node_id": {
203
+ "description": "The ID of the source node.",
204
+ "title": "Source Node Id",
205
+ "type": "string"
206
+ },
207
+ "target_node_id": {
208
+ "description": "The ID of the target node.",
209
+ "title": "Target Node Id",
210
+ "type": "string"
211
+ },
212
+ "condition": {
213
+ "anyOf": [
214
+ {
215
+ "type": "string"
216
+ },
217
+ {
218
+ "type": "null"
219
+ }
220
+ ],
221
+ "default": null,
222
+ "description": "Optional Python expression for conditional branching.",
223
+ "title": "Condition"
224
+ }
225
+ },
226
+ "required": [
227
+ "source_node_id",
228
+ "target_node_id"
229
+ ],
230
+ "title": "Edge",
231
+ "type": "object"
232
+ },
233
+ "GraphTopology": {
234
+ "additionalProperties": false,
235
+ "description": "The topology definition of the recipe.\n\nAttributes:\n nodes: List of nodes in the graph.\n edges: List of edges connecting the nodes.\n state_schema: Optional schema definition for the graph state.",
236
+ "properties": {
237
+ "nodes": {
238
+ "description": "List of nodes in the graph.",
239
+ "items": {
240
+ "description": "Polymorphic node definition.",
241
+ "discriminator": {
242
+ "mapping": {
243
+ "agent": "#/$defs/AgentNode",
244
+ "human": "#/$defs/HumanNode",
245
+ "logic": "#/$defs/LogicNode",
246
+ "map": "#/$defs/MapNode",
247
+ "recipe": "#/$defs/RecipeNode"
248
+ },
249
+ "propertyName": "type"
250
+ },
251
+ "oneOf": [
252
+ {
253
+ "$ref": "#/$defs/AgentNode"
254
+ },
255
+ {
256
+ "$ref": "#/$defs/HumanNode"
257
+ },
258
+ {
259
+ "$ref": "#/$defs/LogicNode"
260
+ },
261
+ {
262
+ "$ref": "#/$defs/RecipeNode"
263
+ },
264
+ {
265
+ "$ref": "#/$defs/MapNode"
266
+ }
267
+ ]
268
+ },
269
+ "title": "Nodes",
270
+ "type": "array"
271
+ },
272
+ "edges": {
273
+ "description": "List of edges connecting the nodes.",
274
+ "items": {
275
+ "anyOf": [
276
+ {
277
+ "$ref": "#/$defs/Edge"
278
+ },
279
+ {
280
+ "$ref": "#/$defs/ConditionalEdge"
281
+ }
282
+ ]
283
+ },
284
+ "title": "Edges",
285
+ "type": "array"
286
+ },
287
+ "state_schema": {
288
+ "anyOf": [
289
+ {
290
+ "$ref": "#/$defs/StateDefinition"
291
+ },
292
+ {
293
+ "type": "null"
294
+ }
295
+ ],
296
+ "default": null,
297
+ "description": "Schema definition for the graph state."
298
+ }
299
+ },
300
+ "required": [
301
+ "nodes",
302
+ "edges"
303
+ ],
304
+ "title": "GraphTopology",
305
+ "type": "object"
306
+ },
307
+ "HumanNode": {
308
+ "additionalProperties": false,
309
+ "description": "A node that pauses execution for user input/approval.\n\nAttributes:\n type: The type of the node (must be 'human').\n timeout_seconds: Optional timeout in seconds for the user interaction.",
310
+ "properties": {
311
+ "id": {
312
+ "description": "Unique identifier for the node.",
313
+ "title": "Id",
314
+ "type": "string"
315
+ },
316
+ "council_config": {
317
+ "anyOf": [
318
+ {
319
+ "$ref": "#/$defs/CouncilConfig"
320
+ },
321
+ {
322
+ "type": "null"
323
+ }
324
+ ],
325
+ "default": null,
326
+ "description": "Optional configuration for architectural triangulation."
327
+ },
328
+ "visual": {
329
+ "anyOf": [
330
+ {
331
+ "$ref": "#/$defs/VisualMetadata"
332
+ },
333
+ {
334
+ "type": "null"
335
+ }
336
+ ],
337
+ "default": null,
338
+ "description": "Visual metadata for the UI."
339
+ },
340
+ "metadata": {
341
+ "additionalProperties": true,
342
+ "description": "Generic metadata for operational context (e.g. cost tracking, SLAs).",
343
+ "title": "Metadata",
344
+ "type": "object"
345
+ },
346
+ "type": {
347
+ "const": "human",
348
+ "default": "human",
349
+ "description": "Discriminator for HumanNode.",
350
+ "title": "Type",
351
+ "type": "string"
352
+ },
353
+ "timeout_seconds": {
354
+ "anyOf": [
355
+ {
356
+ "type": "integer"
357
+ },
358
+ {
359
+ "type": "null"
360
+ }
361
+ ],
362
+ "default": null,
363
+ "description": "Optional timeout in seconds for the user interaction.",
364
+ "title": "Timeout Seconds"
365
+ }
366
+ },
367
+ "required": [
368
+ "id"
369
+ ],
370
+ "title": "HumanNode",
371
+ "type": "object"
372
+ },
373
+ "LogicNode": {
374
+ "additionalProperties": false,
375
+ "description": "A node that executes pure Python logic.\n\nAttributes:\n type: The type of the node (must be 'logic').\n code: The Python logic code to execute.",
376
+ "properties": {
377
+ "id": {
378
+ "description": "Unique identifier for the node.",
379
+ "title": "Id",
380
+ "type": "string"
381
+ },
382
+ "council_config": {
383
+ "anyOf": [
384
+ {
385
+ "$ref": "#/$defs/CouncilConfig"
386
+ },
387
+ {
388
+ "type": "null"
389
+ }
390
+ ],
391
+ "default": null,
392
+ "description": "Optional configuration for architectural triangulation."
393
+ },
394
+ "visual": {
395
+ "anyOf": [
396
+ {
397
+ "$ref": "#/$defs/VisualMetadata"
398
+ },
399
+ {
400
+ "type": "null"
401
+ }
402
+ ],
403
+ "default": null,
404
+ "description": "Visual metadata for the UI."
405
+ },
406
+ "metadata": {
407
+ "additionalProperties": true,
408
+ "description": "Generic metadata for operational context (e.g. cost tracking, SLAs).",
409
+ "title": "Metadata",
410
+ "type": "object"
411
+ },
412
+ "type": {
413
+ "const": "logic",
414
+ "default": "logic",
415
+ "description": "Discriminator for LogicNode.",
416
+ "title": "Type",
417
+ "type": "string"
418
+ },
419
+ "code": {
420
+ "description": "The Python logic code to execute.",
421
+ "title": "Code",
422
+ "type": "string"
423
+ }
424
+ },
425
+ "required": [
426
+ "id",
427
+ "code"
428
+ ],
429
+ "title": "LogicNode",
430
+ "type": "object"
431
+ },
432
+ "MapNode": {
433
+ "additionalProperties": false,
434
+ "description": "A node that spawns multiple parallel executions of a sub-branch.\n\nAttributes:\n type: The type of the node (must be 'map').\n items_path: Dot-notation path to the list in the state.\n processor_node_id: The node (or subgraph) to run for each item.\n concurrency_limit: Max parallel executions.",
435
+ "properties": {
436
+ "id": {
437
+ "description": "Unique identifier for the node.",
438
+ "title": "Id",
439
+ "type": "string"
440
+ },
441
+ "council_config": {
442
+ "anyOf": [
443
+ {
444
+ "$ref": "#/$defs/CouncilConfig"
445
+ },
446
+ {
447
+ "type": "null"
448
+ }
449
+ ],
450
+ "default": null,
451
+ "description": "Optional configuration for architectural triangulation."
452
+ },
453
+ "visual": {
454
+ "anyOf": [
455
+ {
456
+ "$ref": "#/$defs/VisualMetadata"
457
+ },
458
+ {
459
+ "type": "null"
460
+ }
461
+ ],
462
+ "default": null,
463
+ "description": "Visual metadata for the UI."
464
+ },
465
+ "metadata": {
466
+ "additionalProperties": true,
467
+ "description": "Generic metadata for operational context (e.g. cost tracking, SLAs).",
468
+ "title": "Metadata",
469
+ "type": "object"
470
+ },
471
+ "type": {
472
+ "const": "map",
473
+ "default": "map",
474
+ "description": "Discriminator for MapNode.",
475
+ "title": "Type",
476
+ "type": "string"
477
+ },
478
+ "items_path": {
479
+ "description": "Dot-notation path to the list in the state.",
480
+ "title": "Items Path",
481
+ "type": "string"
482
+ },
483
+ "processor_node_id": {
484
+ "description": "The node (or subgraph) to run for each item.",
485
+ "title": "Processor Node Id",
486
+ "type": "string"
487
+ },
488
+ "concurrency_limit": {
489
+ "description": "Max parallel executions.",
490
+ "title": "Concurrency Limit",
491
+ "type": "integer"
492
+ }
493
+ },
494
+ "required": [
495
+ "id",
496
+ "items_path",
497
+ "processor_node_id",
498
+ "concurrency_limit"
499
+ ],
500
+ "title": "MapNode",
501
+ "type": "object"
502
+ },
503
+ "RecipeInterface": {
504
+ "additionalProperties": false,
505
+ "description": "Defines the input/output contract for a Recipe.\n\nAttributes:\n inputs: JSON Schema defining valid entry arguments.\n outputs: JSON Schema defining the guaranteed structure of the final result.",
506
+ "properties": {
507
+ "inputs": {
508
+ "additionalProperties": true,
509
+ "description": "JSON Schema defining valid entry arguments.",
510
+ "title": "Inputs",
511
+ "type": "object"
512
+ },
513
+ "outputs": {
514
+ "additionalProperties": true,
515
+ "description": "JSON Schema defining the guaranteed structure of the final result.",
516
+ "title": "Outputs",
517
+ "type": "object"
518
+ }
519
+ },
520
+ "required": [
521
+ "inputs",
522
+ "outputs"
523
+ ],
524
+ "title": "RecipeInterface",
525
+ "type": "object"
526
+ },
527
+ "RecipeNode": {
528
+ "additionalProperties": false,
529
+ "description": "A node that executes another Recipe as a sub-graph.\n\nAttributes:\n type: The type of the node (must be 'recipe').\n recipe_id: The ID of the recipe to execute.\n input_mapping: How parent state maps to child inputs (parent_key -> child_key).\n output_mapping: How child result maps back to parent state (child_key -> parent_key).",
530
+ "properties": {
531
+ "id": {
532
+ "description": "Unique identifier for the node.",
533
+ "title": "Id",
534
+ "type": "string"
535
+ },
536
+ "council_config": {
537
+ "anyOf": [
538
+ {
539
+ "$ref": "#/$defs/CouncilConfig"
540
+ },
541
+ {
542
+ "type": "null"
543
+ }
544
+ ],
545
+ "default": null,
546
+ "description": "Optional configuration for architectural triangulation."
547
+ },
548
+ "visual": {
549
+ "anyOf": [
550
+ {
551
+ "$ref": "#/$defs/VisualMetadata"
552
+ },
553
+ {
554
+ "type": "null"
555
+ }
556
+ ],
557
+ "default": null,
558
+ "description": "Visual metadata for the UI."
559
+ },
560
+ "metadata": {
561
+ "additionalProperties": true,
562
+ "description": "Generic metadata for operational context (e.g. cost tracking, SLAs).",
563
+ "title": "Metadata",
564
+ "type": "object"
565
+ },
566
+ "type": {
567
+ "const": "recipe",
568
+ "default": "recipe",
569
+ "description": "Discriminator for RecipeNode.",
570
+ "title": "Type",
571
+ "type": "string"
572
+ },
573
+ "recipe_id": {
574
+ "description": "The ID of the recipe to execute.",
575
+ "title": "Recipe Id",
576
+ "type": "string"
577
+ },
578
+ "input_mapping": {
579
+ "additionalProperties": {
580
+ "anyOf": [
581
+ {
582
+ "type": "string"
583
+ },
584
+ {
585
+ "$ref": "#/$defs/DataMapping"
586
+ }
587
+ ]
588
+ },
589
+ "description": "Mapping of parent state keys to child input keys.",
590
+ "title": "Input Mapping",
591
+ "type": "object"
592
+ },
593
+ "output_mapping": {
594
+ "additionalProperties": {
595
+ "anyOf": [
596
+ {
597
+ "type": "string"
598
+ },
599
+ {
600
+ "$ref": "#/$defs/DataMapping"
601
+ }
602
+ ]
603
+ },
604
+ "description": "Mapping of child output keys to parent state keys.",
605
+ "title": "Output Mapping",
606
+ "type": "object"
607
+ }
608
+ },
609
+ "required": [
610
+ "id",
611
+ "recipe_id",
612
+ "input_mapping",
613
+ "output_mapping"
614
+ ],
615
+ "title": "RecipeNode",
616
+ "type": "object"
617
+ },
618
+ "RouterExpression": {
619
+ "additionalProperties": false,
620
+ "description": "A structured expression for routing logic (e.g., CEL or JSONLogic).",
621
+ "properties": {
622
+ "operator": {
623
+ "description": "The operator (e.g., 'eq', 'gt').",
624
+ "title": "Operator",
625
+ "type": "string"
626
+ },
627
+ "args": {
628
+ "description": "Arguments for the expression.",
629
+ "items": {},
630
+ "title": "Args",
631
+ "type": "array"
632
+ }
633
+ },
634
+ "required": [
635
+ "operator",
636
+ "args"
637
+ ],
638
+ "title": "RouterExpression",
639
+ "type": "object"
640
+ },
641
+ "StateDefinition": {
642
+ "additionalProperties": false,
643
+ "description": "Defines the internal state (memory) of the Recipe.\n\nAttributes:\n schema: JSON Schema of the keys available in the shared memory.\n persistence: Configuration for state durability.",
644
+ "properties": {
645
+ "schema": {
646
+ "additionalProperties": true,
647
+ "description": "JSON Schema of the keys available in the shared memory.",
648
+ "title": "Schema",
649
+ "type": "object"
650
+ },
651
+ "persistence": {
652
+ "default": "ephemeral",
653
+ "description": "Configuration for state durability.",
654
+ "enum": [
655
+ "ephemeral",
656
+ "persistent"
657
+ ],
658
+ "title": "Persistence",
659
+ "type": "string"
660
+ }
661
+ },
662
+ "required": [
663
+ "schema"
664
+ ],
665
+ "title": "StateDefinition",
666
+ "type": "object"
667
+ },
668
+ "VisualMetadata": {
669
+ "additionalProperties": false,
670
+ "description": "Data explicitly for the UI.\n\nAttributes:\n label: The label to display for the node.\n x_y_coordinates: The X and Y coordinates for the node on the canvas.\n icon: The icon to represent the node.\n animation_style: The animation style for the node.",
671
+ "properties": {
672
+ "label": {
673
+ "anyOf": [
674
+ {
675
+ "type": "string"
676
+ },
677
+ {
678
+ "type": "null"
679
+ }
680
+ ],
681
+ "default": null,
682
+ "description": "The label to display for the node.",
683
+ "title": "Label"
684
+ },
685
+ "x_y_coordinates": {
686
+ "anyOf": [
687
+ {
688
+ "items": {
689
+ "type": "number"
690
+ },
691
+ "type": "array"
692
+ },
693
+ {
694
+ "type": "null"
695
+ }
696
+ ],
697
+ "default": null,
698
+ "description": "The X and Y coordinates for the node on the canvas.",
699
+ "title": "X Y Coordinates"
700
+ },
701
+ "icon": {
702
+ "anyOf": [
703
+ {
704
+ "type": "string"
705
+ },
706
+ {
707
+ "type": "null"
708
+ }
709
+ ],
710
+ "default": null,
711
+ "description": "The icon to represent the node.",
712
+ "title": "Icon"
713
+ },
714
+ "animation_style": {
715
+ "anyOf": [
716
+ {
717
+ "type": "string"
718
+ },
719
+ {
720
+ "type": "null"
721
+ }
722
+ ],
723
+ "default": null,
724
+ "description": "The animation style for the node.",
725
+ "title": "Animation Style"
726
+ }
727
+ },
728
+ "title": "VisualMetadata",
729
+ "type": "object"
730
+ }
731
+ },
732
+ "additionalProperties": false,
733
+ "description": "The executable specification for the MACO engine.\n\nAttributes:\n id: Unique identifier for the recipe.\n version: Version of the recipe.\n name: Human-readable name of the recipe.\n description: Detailed description of the recipe.\n interface: Defines the input/output contract for the Recipe.\n state: Defines the internal state (memory) of the Recipe.\n parameters: Dictionary of build-time constants.\n topology: The topology definition of the workflow.\n integrity_hash: SHA256 hash of the canonical JSON representation of the topology.\n metadata: Container for design-time data.",
734
+ "properties": {
735
+ "id": {
736
+ "description": "Unique identifier for the recipe.",
737
+ "title": "Id",
738
+ "type": "string"
739
+ },
740
+ "version": {
741
+ "description": "Version of the recipe.",
742
+ "pattern": "^[vV]*(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
743
+ "title": "Version",
744
+ "type": "string"
745
+ },
746
+ "name": {
747
+ "description": "Human-readable name of the recipe.",
748
+ "title": "Name",
749
+ "type": "string"
750
+ },
751
+ "description": {
752
+ "anyOf": [
753
+ {
754
+ "type": "string"
755
+ },
756
+ {
757
+ "type": "null"
758
+ }
759
+ ],
760
+ "default": null,
761
+ "description": "Detailed description of the recipe.",
762
+ "title": "Description"
763
+ },
764
+ "interface": {
765
+ "$ref": "#/$defs/RecipeInterface",
766
+ "description": "Defines the input/output contract for the Recipe."
767
+ },
768
+ "state": {
769
+ "$ref": "#/$defs/StateDefinition",
770
+ "description": "Defines the internal state (memory) of the Recipe."
771
+ },
772
+ "parameters": {
773
+ "additionalProperties": true,
774
+ "description": "Dictionary of build-time constants.",
775
+ "title": "Parameters",
776
+ "type": "object"
777
+ },
778
+ "topology": {
779
+ "$ref": "#/$defs/GraphTopology",
780
+ "description": "The topology definition of the workflow."
781
+ },
782
+ "integrity_hash": {
783
+ "anyOf": [
784
+ {
785
+ "type": "string"
786
+ },
787
+ {
788
+ "type": "null"
789
+ }
790
+ ],
791
+ "default": null,
792
+ "description": "SHA256 hash of the canonical JSON representation of the topology. Enforced by Builder, verified by Runtime.",
793
+ "title": "Integrity Hash"
794
+ },
795
+ "metadata": {
796
+ "additionalProperties": true,
797
+ "description": "Container for design-time data (UI coordinates, resolution logs, draft status) to support re-hydration.",
798
+ "title": "Metadata",
799
+ "type": "object"
800
+ }
801
+ },
802
+ "required": [
803
+ "id",
804
+ "version",
805
+ "name",
806
+ "interface",
807
+ "state",
808
+ "parameters",
809
+ "topology"
810
+ ],
811
+ "title": "RecipeManifest",
812
+ "type": "object"
813
+ }