agent-relay 3.1.14 → 3.1.16
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/dist/index.cjs +126 -11
- package/dist/src/cli/commands/core.d.ts +3 -0
- package/dist/src/cli/commands/core.d.ts.map +1 -1
- package/dist/src/cli/commands/core.js +17 -0
- package/dist/src/cli/commands/core.js.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.js +47 -81
- package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
- package/dist/src/cli/lib/core-maintenance.js +1 -1
- package/dist/src/cli/lib/core-maintenance.js.map +1 -1
- package/package.json +8 -8
- package/packages/acp-bridge/package.json +2 -2
- package/packages/config/package.json +1 -1
- package/packages/hooks/package.json +4 -4
- package/packages/memory/package.json +2 -2
- package/packages/openclaw/README.md +4 -7
- package/packages/openclaw/dist/setup.d.ts.map +1 -1
- package/packages/openclaw/dist/setup.js +10 -3
- package/packages/openclaw/dist/setup.js.map +1 -1
- package/packages/openclaw/package.json +2 -2
- package/packages/openclaw/skill/SKILL.md +27 -5
- package/packages/openclaw/src/setup.ts +10 -3
- package/packages/policy/package.json +2 -2
- package/packages/sdk/dist/client.d.ts +1 -0
- package/packages/sdk/dist/client.d.ts.map +1 -1
- package/packages/sdk/dist/client.js +9 -1
- package/packages/sdk/dist/client.js.map +1 -1
- package/packages/sdk/dist/workflows/runner.d.ts +20 -0
- package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/runner.js +130 -11
- package/packages/sdk/dist/workflows/runner.js.map +1 -1
- package/packages/sdk/dist/workflows/types.d.ts +26 -0
- package/packages/sdk/dist/workflows/types.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/types.js.map +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/sdk/src/client.ts +10 -1
- package/packages/sdk/src/workflows/runner.ts +158 -11
- package/packages/sdk/src/workflows/schema.json +219 -40
- package/packages/sdk/src/workflows/types.ts +29 -0
- package/packages/sdk-py/pyproject.toml +1 -1
- package/packages/sdk-py/src/agent_relay/__init__.py +2 -0
- package/packages/sdk-py/src/agent_relay/types.py +33 -0
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
- package/bin/agent-relay-broker-linux-arm64 +0 -0
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
Added workdir to AgentWorkflowStep
|
|
2
|
+
Added workdir to DeterministicWorkflowStep
|
|
3
|
+
Added workdir to WorktreeWorkflowStep
|
|
1
4
|
{
|
|
2
5
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
6
|
"$id": "RelayYamlConfig",
|
|
4
7
|
"title": "Relay YAML Configuration",
|
|
5
8
|
"description": "Schema for relay.yaml workflow configuration files",
|
|
6
9
|
"type": "object",
|
|
7
|
-
"required": [
|
|
10
|
+
"required": [
|
|
11
|
+
"version",
|
|
12
|
+
"name",
|
|
13
|
+
"swarm"
|
|
14
|
+
],
|
|
8
15
|
"additionalProperties": false,
|
|
9
16
|
"properties": {
|
|
10
17
|
"version": {
|
|
@@ -19,6 +26,13 @@
|
|
|
19
26
|
"type": "string",
|
|
20
27
|
"description": "Optional description of the configuration"
|
|
21
28
|
},
|
|
29
|
+
"paths": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"description": "Named paths to external directories. The primary working directory defaults to cwd. Use this to declare additional directories so the runner can validate them in preflight and agents can reference them via workdir.",
|
|
32
|
+
"items": {
|
|
33
|
+
"$ref": "#/definitions/PathDefinition"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
22
36
|
"swarm": {
|
|
23
37
|
"$ref": "#/definitions/SwarmConfig"
|
|
24
38
|
},
|
|
@@ -51,15 +65,46 @@
|
|
|
51
65
|
},
|
|
52
66
|
{
|
|
53
67
|
"type": "boolean",
|
|
54
|
-
"enum": [
|
|
68
|
+
"enum": [
|
|
69
|
+
false
|
|
70
|
+
]
|
|
55
71
|
}
|
|
56
72
|
]
|
|
57
73
|
}
|
|
58
74
|
},
|
|
59
75
|
"definitions": {
|
|
76
|
+
"PathDefinition": {
|
|
77
|
+
"type": "object",
|
|
78
|
+
"required": [
|
|
79
|
+
"name",
|
|
80
|
+
"path"
|
|
81
|
+
],
|
|
82
|
+
"additionalProperties": false,
|
|
83
|
+
"properties": {
|
|
84
|
+
"name": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"description": "Unique name used to reference this project (e.g. 'relaycast', 'relay')"
|
|
87
|
+
},
|
|
88
|
+
"path": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"description": "Path to the project root, resolved relative to the YAML file. Supports env vars: $HOME/.openclaw"
|
|
91
|
+
},
|
|
92
|
+
"description": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"description": "Human-readable description of this project's role in the workflow"
|
|
95
|
+
},
|
|
96
|
+
"required": {
|
|
97
|
+
"type": "boolean",
|
|
98
|
+
"default": true,
|
|
99
|
+
"description": "Whether this project is required. If true (default), preflight fails if path doesn't exist."
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
60
103
|
"SwarmConfig": {
|
|
61
104
|
"type": "object",
|
|
62
|
-
"required": [
|
|
105
|
+
"required": [
|
|
106
|
+
"pattern"
|
|
107
|
+
],
|
|
63
108
|
"additionalProperties": false,
|
|
64
109
|
"properties": {
|
|
65
110
|
"pattern": {
|
|
@@ -136,7 +181,10 @@
|
|
|
136
181
|
},
|
|
137
182
|
"AgentDefinition": {
|
|
138
183
|
"type": "object",
|
|
139
|
-
"required": [
|
|
184
|
+
"required": [
|
|
185
|
+
"name",
|
|
186
|
+
"cli"
|
|
187
|
+
],
|
|
140
188
|
"additionalProperties": false,
|
|
141
189
|
"properties": {
|
|
142
190
|
"name": {
|
|
@@ -156,7 +204,9 @@
|
|
|
156
204
|
},
|
|
157
205
|
"channels": {
|
|
158
206
|
"type": "array",
|
|
159
|
-
"items": {
|
|
207
|
+
"items": {
|
|
208
|
+
"type": "string"
|
|
209
|
+
},
|
|
160
210
|
"description": "Relay channels the agent should join"
|
|
161
211
|
},
|
|
162
212
|
"constraints": {
|
|
@@ -167,16 +217,47 @@
|
|
|
167
217
|
"default": true,
|
|
168
218
|
"description": "When false, the agent runs as a non-interactive subprocess (no PTY, no relay messaging). It receives its task as a CLI prompt argument and returns stdout as output. Default: true."
|
|
169
219
|
},
|
|
220
|
+
"cwd": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"description": "Working directory for this agent, resolved relative to the YAML file."
|
|
223
|
+
},
|
|
224
|
+
"workdir": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"description": "Sets this agent's working directory to a named entry from the top-level paths array. Mutually exclusive with cwd."
|
|
227
|
+
},
|
|
228
|
+
"additionalPaths": {
|
|
229
|
+
"type": "array",
|
|
230
|
+
"items": {
|
|
231
|
+
"type": "string"
|
|
232
|
+
},
|
|
233
|
+
"description": "Additional paths the agent needs read/write access to."
|
|
234
|
+
},
|
|
170
235
|
"preset": {
|
|
171
236
|
"type": "string",
|
|
172
|
-
"enum": [
|
|
237
|
+
"enum": [
|
|
238
|
+
"lead",
|
|
239
|
+
"worker",
|
|
240
|
+
"reviewer",
|
|
241
|
+
"analyst"
|
|
242
|
+
],
|
|
173
243
|
"description": "Role preset that automatically configures interactive mode and injects appropriate task guardrails. lead: interactive PTY, relay-aware. worker/reviewer/analyst: interactive: false, no sub-agents."
|
|
174
244
|
}
|
|
175
245
|
}
|
|
176
246
|
},
|
|
177
247
|
"AgentCli": {
|
|
178
248
|
"type": "string",
|
|
179
|
-
"enum": [
|
|
249
|
+
"enum": [
|
|
250
|
+
"claude",
|
|
251
|
+
"codex",
|
|
252
|
+
"gemini",
|
|
253
|
+
"aider",
|
|
254
|
+
"goose",
|
|
255
|
+
"opencode",
|
|
256
|
+
"droid",
|
|
257
|
+
"cursor",
|
|
258
|
+
"cursor-agent",
|
|
259
|
+
"agent"
|
|
260
|
+
]
|
|
180
261
|
},
|
|
181
262
|
"AgentConstraints": {
|
|
182
263
|
"type": "object",
|
|
@@ -232,7 +313,10 @@
|
|
|
232
313
|
},
|
|
233
314
|
"WorkflowDefinition": {
|
|
234
315
|
"type": "object",
|
|
235
|
-
"required": [
|
|
316
|
+
"required": [
|
|
317
|
+
"name",
|
|
318
|
+
"steps"
|
|
319
|
+
],
|
|
236
320
|
"additionalProperties": false,
|
|
237
321
|
"properties": {
|
|
238
322
|
"name": {
|
|
@@ -258,14 +342,20 @@
|
|
|
258
342
|
},
|
|
259
343
|
"onError": {
|
|
260
344
|
"type": "string",
|
|
261
|
-
"enum": [
|
|
345
|
+
"enum": [
|
|
346
|
+
"fail",
|
|
347
|
+
"skip",
|
|
348
|
+
"retry"
|
|
349
|
+
],
|
|
262
350
|
"description": "Error handling strategy for this workflow"
|
|
263
351
|
}
|
|
264
352
|
}
|
|
265
353
|
},
|
|
266
354
|
"PreflightCheck": {
|
|
267
355
|
"type": "object",
|
|
268
|
-
"required": [
|
|
356
|
+
"required": [
|
|
357
|
+
"command"
|
|
358
|
+
],
|
|
269
359
|
"additionalProperties": false,
|
|
270
360
|
"properties": {
|
|
271
361
|
"command": {
|
|
@@ -288,20 +378,34 @@
|
|
|
288
378
|
},
|
|
289
379
|
"WorkflowStep": {
|
|
290
380
|
"oneOf": [
|
|
291
|
-
{
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
{
|
|
381
|
+
{
|
|
382
|
+
"$ref": "#/definitions/AgentWorkflowStep"
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"$ref": "#/definitions/DeterministicWorkflowStep"
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
"$ref": "#/definitions/WorktreeWorkflowStep"
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"$ref": "#/definitions/CustomWorkflowStep"
|
|
392
|
+
}
|
|
295
393
|
]
|
|
296
394
|
},
|
|
297
395
|
"AgentWorkflowStep": {
|
|
298
396
|
"type": "object",
|
|
299
|
-
"required": [
|
|
397
|
+
"required": [
|
|
398
|
+
"name",
|
|
399
|
+
"agent",
|
|
400
|
+
"task"
|
|
401
|
+
],
|
|
300
402
|
"additionalProperties": false,
|
|
301
403
|
"properties": {
|
|
302
404
|
"type": {
|
|
303
405
|
"type": "string",
|
|
304
|
-
"enum": [
|
|
406
|
+
"enum": [
|
|
407
|
+
"agent"
|
|
408
|
+
],
|
|
305
409
|
"description": "Step type (optional for agent steps, defaults to 'agent')"
|
|
306
410
|
},
|
|
307
411
|
"name": {
|
|
@@ -318,7 +422,9 @@
|
|
|
318
422
|
},
|
|
319
423
|
"dependsOn": {
|
|
320
424
|
"type": "array",
|
|
321
|
-
"items": {
|
|
425
|
+
"items": {
|
|
426
|
+
"type": "string"
|
|
427
|
+
},
|
|
322
428
|
"description": "Step names that must complete before this step runs"
|
|
323
429
|
},
|
|
324
430
|
"verification": {
|
|
@@ -336,17 +442,27 @@
|
|
|
336
442
|
"type": "integer",
|
|
337
443
|
"minimum": 1,
|
|
338
444
|
"description": "Maximum iterations for steps that may need to retry"
|
|
445
|
+
},
|
|
446
|
+
"workdir": {
|
|
447
|
+
"type": "string",
|
|
448
|
+
"description": "Sets this step's working directory to a named entry from the top-level paths array."
|
|
339
449
|
}
|
|
340
450
|
}
|
|
341
451
|
},
|
|
342
452
|
"DeterministicWorkflowStep": {
|
|
343
453
|
"type": "object",
|
|
344
|
-
"required": [
|
|
454
|
+
"required": [
|
|
455
|
+
"name",
|
|
456
|
+
"type",
|
|
457
|
+
"command"
|
|
458
|
+
],
|
|
345
459
|
"additionalProperties": false,
|
|
346
460
|
"properties": {
|
|
347
461
|
"type": {
|
|
348
462
|
"type": "string",
|
|
349
|
-
"enum": [
|
|
463
|
+
"enum": [
|
|
464
|
+
"deterministic"
|
|
465
|
+
],
|
|
350
466
|
"description": "Step type - must be 'deterministic' for shell command steps"
|
|
351
467
|
},
|
|
352
468
|
"name": {
|
|
@@ -359,7 +475,9 @@
|
|
|
359
475
|
},
|
|
360
476
|
"dependsOn": {
|
|
361
477
|
"type": "array",
|
|
362
|
-
"items": {
|
|
478
|
+
"items": {
|
|
479
|
+
"type": "string"
|
|
480
|
+
},
|
|
363
481
|
"description": "Step names that must complete before this step runs"
|
|
364
482
|
},
|
|
365
483
|
"timeoutMs": {
|
|
@@ -375,17 +493,27 @@
|
|
|
375
493
|
"type": "boolean",
|
|
376
494
|
"default": true,
|
|
377
495
|
"description": "Capture stdout as step output for downstream steps"
|
|
496
|
+
},
|
|
497
|
+
"workdir": {
|
|
498
|
+
"type": "string",
|
|
499
|
+
"description": "Sets this step's working directory to a named entry from the top-level paths array."
|
|
378
500
|
}
|
|
379
501
|
}
|
|
380
502
|
},
|
|
381
503
|
"WorktreeWorkflowStep": {
|
|
382
504
|
"type": "object",
|
|
383
|
-
"required": [
|
|
505
|
+
"required": [
|
|
506
|
+
"name",
|
|
507
|
+
"type",
|
|
508
|
+
"branch"
|
|
509
|
+
],
|
|
384
510
|
"additionalProperties": false,
|
|
385
511
|
"properties": {
|
|
386
512
|
"type": {
|
|
387
513
|
"type": "string",
|
|
388
|
-
"enum": [
|
|
514
|
+
"enum": [
|
|
515
|
+
"worktree"
|
|
516
|
+
],
|
|
389
517
|
"description": "Step type - must be 'worktree' for git worktree setup steps"
|
|
390
518
|
},
|
|
391
519
|
"name": {
|
|
@@ -411,18 +539,27 @@
|
|
|
411
539
|
},
|
|
412
540
|
"dependsOn": {
|
|
413
541
|
"type": "array",
|
|
414
|
-
"items": {
|
|
542
|
+
"items": {
|
|
543
|
+
"type": "string"
|
|
544
|
+
},
|
|
415
545
|
"description": "Step names that must complete before this step runs"
|
|
416
546
|
},
|
|
417
547
|
"timeoutMs": {
|
|
418
548
|
"type": "integer",
|
|
419
549
|
"minimum": 0
|
|
550
|
+
},
|
|
551
|
+
"workdir": {
|
|
552
|
+
"type": "string",
|
|
553
|
+
"description": "Sets this step's working directory to a named entry from the top-level paths array."
|
|
420
554
|
}
|
|
421
555
|
}
|
|
422
556
|
},
|
|
423
557
|
"CustomWorkflowStep": {
|
|
424
558
|
"type": "object",
|
|
425
|
-
"required": [
|
|
559
|
+
"required": [
|
|
560
|
+
"name",
|
|
561
|
+
"use"
|
|
562
|
+
],
|
|
426
563
|
"additionalProperties": true,
|
|
427
564
|
"properties": {
|
|
428
565
|
"name": {
|
|
@@ -435,7 +572,9 @@
|
|
|
435
572
|
},
|
|
436
573
|
"dependsOn": {
|
|
437
574
|
"type": "array",
|
|
438
|
-
"items": {
|
|
575
|
+
"items": {
|
|
576
|
+
"type": "string"
|
|
577
|
+
},
|
|
439
578
|
"description": "Step names that must complete before this step runs"
|
|
440
579
|
},
|
|
441
580
|
"timeoutMs": {
|
|
@@ -446,7 +585,9 @@
|
|
|
446
585
|
},
|
|
447
586
|
"CustomStepParam": {
|
|
448
587
|
"type": "object",
|
|
449
|
-
"required": [
|
|
588
|
+
"required": [
|
|
589
|
+
"name"
|
|
590
|
+
],
|
|
450
591
|
"additionalProperties": false,
|
|
451
592
|
"properties": {
|
|
452
593
|
"name": {
|
|
@@ -474,12 +615,17 @@
|
|
|
474
615
|
"properties": {
|
|
475
616
|
"params": {
|
|
476
617
|
"type": "array",
|
|
477
|
-
"items": {
|
|
618
|
+
"items": {
|
|
619
|
+
"$ref": "#/definitions/CustomStepParam"
|
|
620
|
+
},
|
|
478
621
|
"description": "Parameters that can be passed when using this step"
|
|
479
622
|
},
|
|
480
623
|
"type": {
|
|
481
624
|
"type": "string",
|
|
482
|
-
"enum": [
|
|
625
|
+
"enum": [
|
|
626
|
+
"deterministic",
|
|
627
|
+
"worktree"
|
|
628
|
+
],
|
|
483
629
|
"description": "Step type"
|
|
484
630
|
},
|
|
485
631
|
"command": {
|
|
@@ -525,24 +671,36 @@
|
|
|
525
671
|
},
|
|
526
672
|
"CustomStepsConfig": {
|
|
527
673
|
"type": "object",
|
|
528
|
-
"required": [
|
|
674
|
+
"required": [
|
|
675
|
+
"steps"
|
|
676
|
+
],
|
|
529
677
|
"additionalProperties": false,
|
|
530
678
|
"properties": {
|
|
531
679
|
"steps": {
|
|
532
680
|
"type": "object",
|
|
533
|
-
"additionalProperties": {
|
|
681
|
+
"additionalProperties": {
|
|
682
|
+
"$ref": "#/definitions/CustomStepDefinition"
|
|
683
|
+
},
|
|
534
684
|
"description": "Map of step name to step definition"
|
|
535
685
|
}
|
|
536
686
|
}
|
|
537
687
|
},
|
|
538
688
|
"VerificationCheck": {
|
|
539
689
|
"type": "object",
|
|
540
|
-
"required": [
|
|
690
|
+
"required": [
|
|
691
|
+
"type",
|
|
692
|
+
"value"
|
|
693
|
+
],
|
|
541
694
|
"additionalProperties": false,
|
|
542
695
|
"properties": {
|
|
543
696
|
"type": {
|
|
544
697
|
"type": "string",
|
|
545
|
-
"enum": [
|
|
698
|
+
"enum": [
|
|
699
|
+
"output_contains",
|
|
700
|
+
"exit_code",
|
|
701
|
+
"file_exists",
|
|
702
|
+
"custom"
|
|
703
|
+
],
|
|
546
704
|
"description": "Type of verification to perform"
|
|
547
705
|
},
|
|
548
706
|
"value": {
|
|
@@ -573,14 +731,21 @@
|
|
|
573
731
|
},
|
|
574
732
|
"consensusStrategy": {
|
|
575
733
|
"type": "string",
|
|
576
|
-
"enum": [
|
|
734
|
+
"enum": [
|
|
735
|
+
"majority",
|
|
736
|
+
"unanimous",
|
|
737
|
+
"quorum"
|
|
738
|
+
],
|
|
577
739
|
"description": "Strategy for reaching consensus among agents"
|
|
578
740
|
}
|
|
579
741
|
}
|
|
580
742
|
},
|
|
581
743
|
"Barrier": {
|
|
582
744
|
"type": "object",
|
|
583
|
-
"required": [
|
|
745
|
+
"required": [
|
|
746
|
+
"name",
|
|
747
|
+
"waitFor"
|
|
748
|
+
],
|
|
584
749
|
"additionalProperties": false,
|
|
585
750
|
"properties": {
|
|
586
751
|
"name": {
|
|
@@ -589,7 +754,9 @@
|
|
|
589
754
|
},
|
|
590
755
|
"waitFor": {
|
|
591
756
|
"type": "array",
|
|
592
|
-
"items": {
|
|
757
|
+
"items": {
|
|
758
|
+
"type": "string"
|
|
759
|
+
},
|
|
593
760
|
"minItems": 1,
|
|
594
761
|
"description": "Agent or step names to wait for before proceeding"
|
|
595
762
|
},
|
|
@@ -602,12 +769,18 @@
|
|
|
602
769
|
},
|
|
603
770
|
"StateConfig": {
|
|
604
771
|
"type": "object",
|
|
605
|
-
"required": [
|
|
772
|
+
"required": [
|
|
773
|
+
"backend"
|
|
774
|
+
],
|
|
606
775
|
"additionalProperties": false,
|
|
607
776
|
"properties": {
|
|
608
777
|
"backend": {
|
|
609
778
|
"type": "string",
|
|
610
|
-
"enum": [
|
|
779
|
+
"enum": [
|
|
780
|
+
"memory",
|
|
781
|
+
"redis",
|
|
782
|
+
"database"
|
|
783
|
+
],
|
|
611
784
|
"description": "State storage backend"
|
|
612
785
|
},
|
|
613
786
|
"ttlMs": {
|
|
@@ -623,12 +796,18 @@
|
|
|
623
796
|
},
|
|
624
797
|
"ErrorHandlingConfig": {
|
|
625
798
|
"type": "object",
|
|
626
|
-
"required": [
|
|
799
|
+
"required": [
|
|
800
|
+
"strategy"
|
|
801
|
+
],
|
|
627
802
|
"additionalProperties": false,
|
|
628
803
|
"properties": {
|
|
629
804
|
"strategy": {
|
|
630
805
|
"type": "string",
|
|
631
|
-
"enum": [
|
|
806
|
+
"enum": [
|
|
807
|
+
"fail-fast",
|
|
808
|
+
"continue",
|
|
809
|
+
"retry"
|
|
810
|
+
],
|
|
632
811
|
"description": "Global error handling strategy"
|
|
633
812
|
},
|
|
634
813
|
"maxRetries": {
|
|
@@ -648,4 +827,4 @@
|
|
|
648
827
|
}
|
|
649
828
|
}
|
|
650
829
|
}
|
|
651
|
-
}
|
|
830
|
+
}
|
|
@@ -12,6 +12,11 @@ export interface RelayYamlConfig {
|
|
|
12
12
|
version: string;
|
|
13
13
|
name: string;
|
|
14
14
|
description?: string;
|
|
15
|
+
/** Named paths to external directories used by this workflow.
|
|
16
|
+
* The primary working directory defaults to cwd and does not need to be declared.
|
|
17
|
+
* Use this to declare additional directories so the runner can validate them
|
|
18
|
+
* in preflight and agents can reference them via `workdir`. */
|
|
19
|
+
paths?: PathDefinition[];
|
|
15
20
|
swarm: SwarmConfig;
|
|
16
21
|
agents: AgentDefinition[];
|
|
17
22
|
workflows?: WorkflowDefinition[];
|
|
@@ -21,6 +26,22 @@ export interface RelayYamlConfig {
|
|
|
21
26
|
trajectories?: TrajectoryConfig | false;
|
|
22
27
|
}
|
|
23
28
|
|
|
29
|
+
// ── Path definitions ────────────────────────────────────────────────────────
|
|
30
|
+
|
|
31
|
+
/** A named path to an external directory for cross-repo workflows.
|
|
32
|
+
* Only needed for directories outside the default working directory. */
|
|
33
|
+
export interface PathDefinition {
|
|
34
|
+
/** Unique name used to reference this path (e.g. "relaycast"). */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Directory path, resolved relative to the YAML file.
|
|
37
|
+
* Supports environment variables: "$HOME/.openclaw", "$RELAY_ROOT/packages/sdk". */
|
|
38
|
+
path: string;
|
|
39
|
+
/** Human-readable description of this path's role in the workflow. */
|
|
40
|
+
description?: string;
|
|
41
|
+
/** Whether this path is required. If true (default), preflight fails if it doesn't exist. */
|
|
42
|
+
required?: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
24
45
|
// ── Trajectory configuration ─────────────────────────────────────────────────
|
|
25
46
|
|
|
26
47
|
/** Configuration for workflow trajectory recording. */
|
|
@@ -102,6 +123,10 @@ export interface AgentDefinition {
|
|
|
102
123
|
interactive?: boolean;
|
|
103
124
|
/** Working directory for this agent, resolved relative to the YAML file. */
|
|
104
125
|
cwd?: string;
|
|
126
|
+
/** Sets this agent's working directory to a named entry from the top-level `paths` array.
|
|
127
|
+
* Mutually exclusive with `cwd`. If omitted, the agent runs in the runner's
|
|
128
|
+
* working directory (the directory containing the workflow YAML file). */
|
|
129
|
+
workdir?: string;
|
|
105
130
|
/** Additional paths the agent needs read/write access to. */
|
|
106
131
|
additionalPaths?: string[];
|
|
107
132
|
/**
|
|
@@ -234,6 +259,10 @@ export interface WorkflowStep {
|
|
|
234
259
|
// ── Deterministic step fields ──────────────────────────────────────────────
|
|
235
260
|
/** Shell command to execute (required for deterministic steps). */
|
|
236
261
|
command?: string;
|
|
262
|
+
/** Sets this step's working directory to a named entry from the top-level `paths` array.
|
|
263
|
+
* If omitted, the step inherits the agent's workdir, or falls back to the runner's
|
|
264
|
+
* working directory. */
|
|
265
|
+
workdir?: string;
|
|
237
266
|
/** Fail if command exit code is non-zero. Default: true. */
|
|
238
267
|
failOnError?: boolean;
|
|
239
268
|
/** Capture stdout as step output for downstream steps. Default: true. */
|
|
@@ -59,6 +59,7 @@ from .types import (
|
|
|
59
59
|
SwarmPattern,
|
|
60
60
|
AgentDefinition,
|
|
61
61
|
AgentConstraints,
|
|
62
|
+
PathDefinition,
|
|
62
63
|
RelayYamlConfig,
|
|
63
64
|
AgentCli,
|
|
64
65
|
IdleNudgeConfig,
|
|
@@ -128,6 +129,7 @@ __all__ = [
|
|
|
128
129
|
"SwarmPattern",
|
|
129
130
|
"AgentDefinition",
|
|
130
131
|
"AgentConstraints",
|
|
132
|
+
"PathDefinition",
|
|
131
133
|
"RelayYamlConfig",
|
|
132
134
|
"AgentCli",
|
|
133
135
|
"IdleNudgeConfig",
|
|
@@ -123,6 +123,24 @@ class AgentConstraints:
|
|
|
123
123
|
return result
|
|
124
124
|
|
|
125
125
|
|
|
126
|
+
@dataclass
|
|
127
|
+
class PathDefinition:
|
|
128
|
+
"""A named path to an external directory for cross-repo workflows."""
|
|
129
|
+
|
|
130
|
+
name: str
|
|
131
|
+
path: str
|
|
132
|
+
description: str | None = None
|
|
133
|
+
required: bool | None = None
|
|
134
|
+
|
|
135
|
+
def to_dict(self) -> dict[str, Any]:
|
|
136
|
+
result: dict[str, Any] = {"name": self.name, "path": self.path}
|
|
137
|
+
if self.description is not None:
|
|
138
|
+
result["description"] = self.description
|
|
139
|
+
if self.required is not None:
|
|
140
|
+
result["required"] = self.required
|
|
141
|
+
return result
|
|
142
|
+
|
|
143
|
+
|
|
126
144
|
@dataclass
|
|
127
145
|
class AgentDefinition:
|
|
128
146
|
name: str
|
|
@@ -132,6 +150,9 @@ class AgentDefinition:
|
|
|
132
150
|
channels: list[str] | None = None
|
|
133
151
|
constraints: AgentConstraints | None = None
|
|
134
152
|
interactive: bool | None = None
|
|
153
|
+
cwd: str | None = None
|
|
154
|
+
workdir: str | None = None
|
|
155
|
+
additional_paths: list[str] | None = None
|
|
135
156
|
|
|
136
157
|
def to_dict(self) -> dict[str, Any]:
|
|
137
158
|
result: dict[str, Any] = {
|
|
@@ -150,6 +171,12 @@ class AgentDefinition:
|
|
|
150
171
|
result["constraints"] = constraints
|
|
151
172
|
if self.interactive is not None:
|
|
152
173
|
result["interactive"] = self.interactive
|
|
174
|
+
if self.cwd is not None:
|
|
175
|
+
result["cwd"] = self.cwd
|
|
176
|
+
if self.workdir is not None:
|
|
177
|
+
result["workdir"] = self.workdir
|
|
178
|
+
if self.additional_paths is not None:
|
|
179
|
+
result["additionalPaths"] = self.additional_paths
|
|
153
180
|
return result
|
|
154
181
|
|
|
155
182
|
|
|
@@ -175,6 +202,7 @@ class WorkflowStep:
|
|
|
175
202
|
verification: VerificationCheck | None = None
|
|
176
203
|
timeout_ms: int | None = None
|
|
177
204
|
retries: int | None = None
|
|
205
|
+
workdir: str | None = None
|
|
178
206
|
|
|
179
207
|
def to_dict(self) -> dict[str, Any]:
|
|
180
208
|
result: dict[str, Any] = {
|
|
@@ -190,6 +218,8 @@ class WorkflowStep:
|
|
|
190
218
|
result["timeoutMs"] = self.timeout_ms
|
|
191
219
|
if self.retries is not None:
|
|
192
220
|
result["retries"] = self.retries
|
|
221
|
+
if self.workdir is not None:
|
|
222
|
+
result["workdir"] = self.workdir
|
|
193
223
|
return result
|
|
194
224
|
|
|
195
225
|
|
|
@@ -285,6 +315,7 @@ class RelayYamlConfig:
|
|
|
285
315
|
agents: list[AgentDefinition]
|
|
286
316
|
version: str = "1.0"
|
|
287
317
|
description: str | None = None
|
|
318
|
+
paths: list[PathDefinition] | None = None
|
|
288
319
|
workflows: list[WorkflowDefinition] | None = None
|
|
289
320
|
coordination: CoordinationConfig | None = None
|
|
290
321
|
state: StateConfig | None = None
|
|
@@ -300,6 +331,8 @@ class RelayYamlConfig:
|
|
|
300
331
|
}
|
|
301
332
|
if self.description is not None:
|
|
302
333
|
result["description"] = self.description
|
|
334
|
+
if self.paths is not None:
|
|
335
|
+
result["paths"] = [p.to_dict() for p in self.paths]
|
|
303
336
|
if self.workflows is not None:
|
|
304
337
|
result["workflows"] = [workflow.to_dict() for workflow in self.workflows]
|
|
305
338
|
if self.coordination is not None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/trajectory",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.16",
|
|
4
4
|
"description": "Trajectory integration utilities (trail/PDERO) for Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"test:watch": "vitest"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@agent-relay/config": "3.1.
|
|
25
|
+
"@agent-relay/config": "3.1.16"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^22.19.3",
|