@viewportai/daemon 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +10 -7
  2. package/dist/adapters/claude.js +1 -1
  3. package/dist/adapters/claude.js.map +1 -1
  4. package/dist/adapters/codex.d.ts +1 -0
  5. package/dist/adapters/codex.d.ts.map +1 -1
  6. package/dist/adapters/codex.js +13 -0
  7. package/dist/adapters/codex.js.map +1 -1
  8. package/dist/cli/lifecycle-commands.js +1 -1
  9. package/dist/cli/lifecycle-commands.js.map +1 -1
  10. package/dist/cli/lifecycle-pair-command.js +1 -1
  11. package/dist/cli/lifecycle-pair-command.js.map +1 -1
  12. package/dist/cli/org-binding.d.ts +1 -0
  13. package/dist/cli/org-binding.d.ts.map +1 -1
  14. package/dist/cli/org-binding.js +2 -2
  15. package/dist/cli/org-binding.js.map +1 -1
  16. package/dist/cli/workflow-commands.d.ts.map +1 -1
  17. package/dist/cli/workflow-commands.js +6 -1
  18. package/dist/cli/workflow-commands.js.map +1 -1
  19. package/dist/cli/workflow-managed-worker-format.d.ts +10 -0
  20. package/dist/cli/workflow-managed-worker-format.d.ts.map +1 -0
  21. package/dist/cli/workflow-managed-worker-format.js +120 -0
  22. package/dist/cli/workflow-managed-worker-format.js.map +1 -0
  23. package/dist/cli/workflow-managed-worker-types.d.ts +55 -0
  24. package/dist/cli/workflow-managed-worker-types.d.ts.map +1 -0
  25. package/dist/cli/workflow-managed-worker-types.js +2 -0
  26. package/dist/cli/workflow-managed-worker-types.js.map +1 -0
  27. package/dist/cli/workflow-managed-worker-util.d.ts +5 -0
  28. package/dist/cli/workflow-managed-worker-util.d.ts.map +1 -0
  29. package/dist/cli/workflow-managed-worker-util.js +28 -0
  30. package/dist/cli/workflow-managed-worker-util.js.map +1 -0
  31. package/dist/cli/workflow-managed-worker.d.ts +2 -0
  32. package/dist/cli/workflow-managed-worker.d.ts.map +1 -0
  33. package/dist/cli/workflow-managed-worker.js +240 -0
  34. package/dist/cli/workflow-managed-worker.js.map +1 -0
  35. package/dist/core/session-context-prompt.d.ts.map +1 -1
  36. package/dist/core/session-context-prompt.js +70 -13
  37. package/dist/core/session-context-prompt.js.map +1 -1
  38. package/dist/discovery/jsonl-entry-parser.js +82 -0
  39. package/dist/discovery/jsonl-entry-parser.js.map +1 -1
  40. package/dist/relay/bridge-daemon-key-registration.d.ts +2 -0
  41. package/dist/relay/bridge-daemon-key-registration.d.ts.map +1 -1
  42. package/dist/relay/bridge-daemon-key-registration.js +6 -2
  43. package/dist/relay/bridge-daemon-key-registration.js.map +1 -1
  44. package/dist/relay/bridge-org-routing-filter.d.ts +1 -0
  45. package/dist/relay/bridge-org-routing-filter.d.ts.map +1 -1
  46. package/dist/relay/bridge-org-routing-filter.js +1 -0
  47. package/dist/relay/bridge-org-routing-filter.js.map +1 -1
  48. package/dist/server/ws-protocol.d.ts +1 -0
  49. package/dist/server/ws-protocol.d.ts.map +1 -1
  50. package/dist/server/ws-protocol.js +1 -1
  51. package/dist/server/ws-protocol.js.map +1 -1
  52. package/dist/server/ws-session-command-handlers.d.ts +1 -1
  53. package/dist/server/ws-session-command-handlers.d.ts.map +1 -1
  54. package/dist/server/ws-session-command-handlers.js +2 -1
  55. package/dist/server/ws-session-command-handlers.js.map +1 -1
  56. package/dist/startup.d.ts.map +1 -1
  57. package/dist/startup.js +3 -0
  58. package/dist/startup.js.map +1 -1
  59. package/dist/workflows/action-adapters.d.ts +7 -0
  60. package/dist/workflows/action-adapters.d.ts.map +1 -0
  61. package/dist/workflows/action-adapters.js +138 -0
  62. package/dist/workflows/action-adapters.js.map +1 -0
  63. package/dist/workflows/action-provider-adapters.d.ts +13 -0
  64. package/dist/workflows/action-provider-adapters.d.ts.map +1 -0
  65. package/dist/workflows/action-provider-adapters.js +260 -0
  66. package/dist/workflows/action-provider-adapters.js.map +1 -0
  67. package/dist/workflows/context-node-resolver.d.ts +3 -0
  68. package/dist/workflows/context-node-resolver.d.ts.map +1 -0
  69. package/dist/workflows/context-node-resolver.js +122 -0
  70. package/dist/workflows/context-node-resolver.js.map +1 -0
  71. package/dist/workflows/event-types.d.ts +1 -1
  72. package/dist/workflows/event-types.d.ts.map +1 -1
  73. package/dist/workflows/node-registry.d.ts.map +1 -1
  74. package/dist/workflows/node-registry.js +115 -1
  75. package/dist/workflows/node-registry.js.map +1 -1
  76. package/dist/workflows/parser.js +30 -0
  77. package/dist/workflows/parser.js.map +1 -1
  78. package/dist/workflows/plugin-loader.d.ts.map +1 -1
  79. package/dist/workflows/plugin-loader.js +6 -0
  80. package/dist/workflows/plugin-loader.js.map +1 -1
  81. package/dist/workflows/preflight.d.ts.map +1 -1
  82. package/dist/workflows/preflight.js +6 -2
  83. package/dist/workflows/preflight.js.map +1 -1
  84. package/dist/workflows/runner-hook-events.d.ts +19 -0
  85. package/dist/workflows/runner-hook-events.d.ts.map +1 -0
  86. package/dist/workflows/runner-hook-events.js +16 -0
  87. package/dist/workflows/runner-hook-events.js.map +1 -0
  88. package/dist/workflows/runner-shared.d.ts.map +1 -1
  89. package/dist/workflows/runner-shared.js +26 -2
  90. package/dist/workflows/runner-shared.js.map +1 -1
  91. package/dist/workflows/runner.d.ts +0 -1
  92. package/dist/workflows/runner.d.ts.map +1 -1
  93. package/dist/workflows/runner.js +21 -17
  94. package/dist/workflows/runner.js.map +1 -1
  95. package/dist/workflows/types.d.ts +54 -13
  96. package/dist/workflows/types.d.ts.map +1 -1
  97. package/dist/workflows/workflow-production-schema.d.ts +100 -0
  98. package/dist/workflows/workflow-production-schema.d.ts.map +1 -0
  99. package/dist/workflows/workflow-production-schema.js +107 -0
  100. package/dist/workflows/workflow-production-schema.js.map +1 -0
  101. package/dist/workflows/workflow-production-types.d.ts +71 -0
  102. package/dist/workflows/workflow-production-types.d.ts.map +1 -0
  103. package/dist/workflows/workflow-production-types.js +2 -0
  104. package/dist/workflows/workflow-production-types.js.map +1 -0
  105. package/dist/workflows/workflow-schema-common.d.ts +85 -0
  106. package/dist/workflows/workflow-schema-common.d.ts.map +1 -0
  107. package/dist/workflows/workflow-schema-common.js +78 -0
  108. package/dist/workflows/workflow-schema-common.js.map +1 -0
  109. package/dist/workflows/workflow-schema.d.ts +442 -3
  110. package/dist/workflows/workflow-schema.d.ts.map +1 -1
  111. package/dist/workflows/workflow-schema.js +63 -77
  112. package/dist/workflows/workflow-schema.js.map +1 -1
  113. package/docs/configuration.md +6 -3
  114. package/package.json +1 -1
  115. package/schemas/workflow-v1.schema.json +262 -1
@@ -1,5 +1,4 @@
1
1
  import { z } from 'zod';
2
- import type { WorkflowInputValue } from './run-types.js';
3
2
  export declare const WORKFLOW_SCHEMA_VERSION: "viewport.workflow/v1";
4
3
  export declare const WorkflowDefinitionSchema: z.ZodObject<{
5
4
  schema: z.ZodLiteral<"viewport.workflow/v1">;
@@ -14,9 +13,40 @@ export declare const WorkflowDefinitionSchema: z.ZodObject<{
14
13
  json: "json";
15
14
  }>;
16
15
  required: z.ZodOptional<z.ZodBoolean>;
17
- default: z.ZodOptional<z.ZodType<WorkflowInputValue, unknown, z.core.$ZodTypeInternals<WorkflowInputValue, unknown>>>;
16
+ default: z.ZodOptional<z.ZodType<import("./run-types.js").WorkflowInputValue, unknown, z.core.$ZodTypeInternals<import("./run-types.js").WorkflowInputValue, unknown>>>;
18
17
  description: z.ZodOptional<z.ZodString>;
19
18
  }, z.core.$strict>>>;
19
+ triggers: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
20
+ type: z.ZodLiteral<"manual">;
21
+ title: z.ZodOptional<z.ZodString>;
22
+ description: z.ZodOptional<z.ZodString>;
23
+ inputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<import("./run-types.js").WorkflowInputValue, unknown, z.core.$ZodTypeInternals<import("./run-types.js").WorkflowInputValue, unknown>>>>;
24
+ }, z.core.$strict>, z.ZodObject<{
25
+ type: z.ZodLiteral<"webhook">;
26
+ title: z.ZodOptional<z.ZodString>;
27
+ provider: z.ZodOptional<z.ZodString>;
28
+ route: z.ZodOptional<z.ZodString>;
29
+ eventTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
30
+ signature: z.ZodOptional<z.ZodObject<{
31
+ algorithm: z.ZodEnum<{
32
+ "hmac-sha256": "hmac-sha256";
33
+ }>;
34
+ header: z.ZodString;
35
+ timestampHeader: z.ZodOptional<z.ZodString>;
36
+ toleranceSeconds: z.ZodOptional<z.ZodNumber>;
37
+ }, z.core.$strict>>;
38
+ map: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
39
+ }, z.core.$strict>, z.ZodObject<{
40
+ type: z.ZodLiteral<"schedule">;
41
+ title: z.ZodOptional<z.ZodString>;
42
+ cron: z.ZodString;
43
+ timezone: z.ZodOptional<z.ZodString>;
44
+ missedRun: z.ZodOptional<z.ZodEnum<{
45
+ skip: "skip";
46
+ catch_up_once: "catch_up_once";
47
+ route_to_inbox: "route_to_inbox";
48
+ }>>;
49
+ }, z.core.$strict>], "type">>>;
20
50
  context: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
21
51
  ref: z.ZodString;
22
52
  as: z.ZodOptional<z.ZodString>;
@@ -62,6 +92,73 @@ export declare const WorkflowDefinitionSchema: z.ZodObject<{
62
92
  worktree: "worktree";
63
93
  }>>>;
64
94
  }, z.core.$strict>>;
95
+ runner: z.ZodOptional<z.ZodObject<{
96
+ kind: z.ZodOptional<z.ZodEnum<{
97
+ paired_daemon: "paired_daemon";
98
+ self_hosted_runner: "self_hosted_runner";
99
+ }>>;
100
+ target: z.ZodOptional<z.ZodEnum<{
101
+ local_private: "local_private";
102
+ local_sandbox: "local_sandbox";
103
+ managed: "managed";
104
+ self_hosted: "self_hosted";
105
+ ci: "ci";
106
+ }>>;
107
+ capabilities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
108
+ shell: "shell";
109
+ resume: "resume";
110
+ "agent.prompt": "agent.prompt";
111
+ artifacts: "artifacts";
112
+ cancel: "cancel";
113
+ "files.read": "files.read";
114
+ "files.write": "files.write";
115
+ "network.egress": "network.egress";
116
+ secrets: "secrets";
117
+ worktree: "worktree";
118
+ }>>>;
119
+ labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
120
+ profile: z.ZodOptional<z.ZodString>;
121
+ leaseSeconds: z.ZodOptional<z.ZodNumber>;
122
+ }, z.core.$strict>>;
123
+ policies: z.ZodOptional<z.ZodObject<{
124
+ run: z.ZodOptional<z.ZodObject<{
125
+ allowed: z.ZodOptional<z.ZodArray<z.ZodString>>;
126
+ requireOnlineRunner: z.ZodOptional<z.ZodBoolean>;
127
+ }, z.core.$strict>>;
128
+ approve: z.ZodOptional<z.ZodObject<{
129
+ allowed: z.ZodOptional<z.ZodArray<z.ZodString>>;
130
+ minApprovals: z.ZodOptional<z.ZodNumber>;
131
+ }, z.core.$strict>>;
132
+ sideEffects: z.ZodOptional<z.ZodObject<{
133
+ requireApproval: z.ZodOptional<z.ZodBoolean>;
134
+ allowedAdapters: z.ZodOptional<z.ZodArray<z.ZodString>>;
135
+ }, z.core.$strict>>;
136
+ maxDurationSeconds: z.ZodOptional<z.ZodNumber>;
137
+ }, z.core.$strict>>;
138
+ notifications: z.ZodOptional<z.ZodObject<{
139
+ inbox: z.ZodOptional<z.ZodArray<z.ZodEnum<{
140
+ approval_requested: "approval_requested";
141
+ run_failed: "run_failed";
142
+ runner_offline: "runner_offline";
143
+ action_failed: "action_failed";
144
+ }>>>;
145
+ email: z.ZodOptional<z.ZodArray<z.ZodEnum<{
146
+ approval_requested: "approval_requested";
147
+ run_failed: "run_failed";
148
+ run_completed: "run_completed";
149
+ }>>>;
150
+ webhook: z.ZodOptional<z.ZodArray<z.ZodString>>;
151
+ }, z.core.$strict>>;
152
+ dataCapture: z.ZodOptional<z.ZodObject<{
153
+ logs: z.ZodOptional<z.ZodEnum<{
154
+ compact: "compact";
155
+ full: "full";
156
+ off: "off";
157
+ }>>;
158
+ artifacts: z.ZodOptional<z.ZodBoolean>;
159
+ contextEvidence: z.ZodOptional<z.ZodBoolean>;
160
+ approvalPackets: z.ZodOptional<z.ZodBoolean>;
161
+ }, z.core.$strict>>;
65
162
  capabilityRequests: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
66
163
  type: z.ZodLiteral<"secret">;
67
164
  ref: z.ZodString;
@@ -84,6 +181,103 @@ export declare const WorkflowDefinitionSchema: z.ZodObject<{
84
181
  reason: z.ZodString;
85
182
  }, z.core.$strict>], "type">>>;
86
183
  nodes: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
184
+ title: z.ZodOptional<z.ZodString>;
185
+ needs: z.ZodOptional<z.ZodArray<z.ZodString>>;
186
+ when: z.ZodOptional<z.ZodString>;
187
+ triggerRule: z.ZodOptional<z.ZodEnum<{
188
+ all_success: "all_success";
189
+ all_done: "all_done";
190
+ one_success: "one_success";
191
+ }>>;
192
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
193
+ retry: z.ZodOptional<z.ZodObject<{
194
+ maxAttempts: z.ZodNumber;
195
+ backoffSeconds: z.ZodOptional<z.ZodNumber>;
196
+ transient: z.ZodOptional<z.ZodArray<z.ZodString>>;
197
+ fatal: z.ZodOptional<z.ZodArray<z.ZodString>>;
198
+ }, z.core.$strict>>;
199
+ policy: z.ZodOptional<z.ZodObject<{
200
+ onFailure: z.ZodOptional<z.ZodEnum<{
201
+ continue: "continue";
202
+ halt: "halt";
203
+ skip_dependents: "skip_dependents";
204
+ }>>;
205
+ approvalRequired: z.ZodOptional<z.ZodBoolean>;
206
+ }, z.core.$strict>>;
207
+ outputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
208
+ type: z.ZodEnum<{
209
+ string: "string";
210
+ number: "number";
211
+ boolean: "boolean";
212
+ file: "file";
213
+ json: "json";
214
+ artifact: "artifact";
215
+ }>;
216
+ description: z.ZodOptional<z.ZodString>;
217
+ extract: z.ZodOptional<z.ZodString>;
218
+ }, z.core.$strict>>>;
219
+ artifacts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
220
+ path: z.ZodString;
221
+ type: z.ZodOptional<z.ZodEnum<{
222
+ file: "file";
223
+ directory: "directory";
224
+ patch: "patch";
225
+ report: "report";
226
+ log: "log";
227
+ }>>;
228
+ description: z.ZodOptional<z.ZodString>;
229
+ }, z.core.$strict>>>;
230
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
231
+ value: z.ZodOptional<z.ZodString>;
232
+ secret: z.ZodOptional<z.ZodString>;
233
+ }, z.core.$strict>>>;
234
+ type: z.ZodLiteral<"agent">;
235
+ prompt: z.ZodString;
236
+ agent: z.ZodString;
237
+ provider: z.ZodOptional<z.ZodString>;
238
+ model: z.ZodOptional<z.ZodString>;
239
+ session: z.ZodOptional<z.ZodObject<{
240
+ resume: z.ZodOptional<z.ZodBoolean>;
241
+ title: z.ZodOptional<z.ZodString>;
242
+ }, z.core.$strict>>;
243
+ handoff: z.ZodOptional<z.ZodObject<{
244
+ artifact: z.ZodOptional<z.ZodString>;
245
+ summary: z.ZodOptional<z.ZodString>;
246
+ }, z.core.$strict>>;
247
+ hooks: z.ZodOptional<z.ZodObject<{
248
+ PreToolUse: z.ZodOptional<z.ZodObject<{
249
+ record: z.ZodOptional<z.ZodBoolean>;
250
+ }, z.core.$strict>>;
251
+ PostToolUse: z.ZodOptional<z.ZodObject<{
252
+ record: z.ZodOptional<z.ZodBoolean>;
253
+ }, z.core.$strict>>;
254
+ PostToolUseFailure: z.ZodOptional<z.ZodObject<{
255
+ record: z.ZodOptional<z.ZodBoolean>;
256
+ }, z.core.$strict>>;
257
+ PermissionRequest: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
258
+ behavior: z.ZodEnum<{
259
+ allow: "allow";
260
+ deny: "deny";
261
+ }>;
262
+ message: z.ZodOptional<z.ZodString>;
263
+ }, z.core.$strict>, z.ZodObject<{
264
+ default: z.ZodOptional<z.ZodObject<{
265
+ behavior: z.ZodEnum<{
266
+ allow: "allow";
267
+ deny: "deny";
268
+ }>;
269
+ message: z.ZodOptional<z.ZodString>;
270
+ }, z.core.$strict>>;
271
+ tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
272
+ behavior: z.ZodEnum<{
273
+ allow: "allow";
274
+ deny: "deny";
275
+ }>;
276
+ message: z.ZodOptional<z.ZodString>;
277
+ }, z.core.$strict>>>;
278
+ }, z.core.$strict>]>>;
279
+ }, z.core.$strict>>;
280
+ }, z.core.$strict>, z.ZodObject<{
87
281
  title: z.ZodOptional<z.ZodString>;
88
282
  needs: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
283
  when: z.ZodOptional<z.ZodString>;
@@ -350,7 +544,7 @@ export declare const WorkflowDefinitionSchema: z.ZodObject<{
350
544
  secret: z.ZodOptional<z.ZodString>;
351
545
  }, z.core.$strict>>>;
352
546
  type: z.ZodLiteral<"plan">;
353
- title: z.ZodString;
547
+ title: z.ZodOptional<z.ZodString>;
354
548
  body: z.ZodString;
355
549
  summary: z.ZodOptional<z.ZodString>;
356
550
  source: z.ZodOptional<z.ZodString>;
@@ -425,6 +619,251 @@ export declare const WorkflowDefinitionSchema: z.ZodObject<{
425
619
  waitUntil: z.ZodString;
426
620
  description: z.ZodOptional<z.ZodString>;
427
621
  }, z.core.$strict>], "type">;
622
+ }, z.core.$strict>, z.ZodObject<{
623
+ title: z.ZodOptional<z.ZodString>;
624
+ needs: z.ZodOptional<z.ZodArray<z.ZodString>>;
625
+ when: z.ZodOptional<z.ZodString>;
626
+ triggerRule: z.ZodOptional<z.ZodEnum<{
627
+ all_success: "all_success";
628
+ all_done: "all_done";
629
+ one_success: "one_success";
630
+ }>>;
631
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
632
+ retry: z.ZodOptional<z.ZodObject<{
633
+ maxAttempts: z.ZodNumber;
634
+ backoffSeconds: z.ZodOptional<z.ZodNumber>;
635
+ transient: z.ZodOptional<z.ZodArray<z.ZodString>>;
636
+ fatal: z.ZodOptional<z.ZodArray<z.ZodString>>;
637
+ }, z.core.$strict>>;
638
+ policy: z.ZodOptional<z.ZodObject<{
639
+ onFailure: z.ZodOptional<z.ZodEnum<{
640
+ continue: "continue";
641
+ halt: "halt";
642
+ skip_dependents: "skip_dependents";
643
+ }>>;
644
+ approvalRequired: z.ZodOptional<z.ZodBoolean>;
645
+ }, z.core.$strict>>;
646
+ outputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
647
+ type: z.ZodEnum<{
648
+ string: "string";
649
+ number: "number";
650
+ boolean: "boolean";
651
+ file: "file";
652
+ json: "json";
653
+ artifact: "artifact";
654
+ }>;
655
+ description: z.ZodOptional<z.ZodString>;
656
+ extract: z.ZodOptional<z.ZodString>;
657
+ }, z.core.$strict>>>;
658
+ artifacts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
659
+ path: z.ZodString;
660
+ type: z.ZodOptional<z.ZodEnum<{
661
+ file: "file";
662
+ directory: "directory";
663
+ patch: "patch";
664
+ report: "report";
665
+ log: "log";
666
+ }>>;
667
+ description: z.ZodOptional<z.ZodString>;
668
+ }, z.core.$strict>>>;
669
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
670
+ value: z.ZodOptional<z.ZodString>;
671
+ secret: z.ZodOptional<z.ZodString>;
672
+ }, z.core.$strict>>>;
673
+ type: z.ZodLiteral<"context">;
674
+ refs: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
675
+ ref: z.ZodString;
676
+ as: z.ZodOptional<z.ZodString>;
677
+ required: z.ZodOptional<z.ZodBoolean>;
678
+ description: z.ZodOptional<z.ZodString>;
679
+ refresh: z.ZodOptional<z.ZodEnum<{
680
+ manual: "manual";
681
+ before_run: "before_run";
682
+ on_demand: "on_demand";
683
+ }>>;
684
+ }, z.core.$strict>]>>>;
685
+ query: z.ZodOptional<z.ZodString>;
686
+ refresh: z.ZodOptional<z.ZodEnum<{
687
+ manual: "manual";
688
+ before_run: "before_run";
689
+ on_demand: "on_demand";
690
+ }>>;
691
+ }, z.core.$strict>, z.ZodObject<{
692
+ title: z.ZodOptional<z.ZodString>;
693
+ needs: z.ZodOptional<z.ZodArray<z.ZodString>>;
694
+ when: z.ZodOptional<z.ZodString>;
695
+ triggerRule: z.ZodOptional<z.ZodEnum<{
696
+ all_success: "all_success";
697
+ all_done: "all_done";
698
+ one_success: "one_success";
699
+ }>>;
700
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
701
+ retry: z.ZodOptional<z.ZodObject<{
702
+ maxAttempts: z.ZodNumber;
703
+ backoffSeconds: z.ZodOptional<z.ZodNumber>;
704
+ transient: z.ZodOptional<z.ZodArray<z.ZodString>>;
705
+ fatal: z.ZodOptional<z.ZodArray<z.ZodString>>;
706
+ }, z.core.$strict>>;
707
+ policy: z.ZodOptional<z.ZodObject<{
708
+ onFailure: z.ZodOptional<z.ZodEnum<{
709
+ continue: "continue";
710
+ halt: "halt";
711
+ skip_dependents: "skip_dependents";
712
+ }>>;
713
+ approvalRequired: z.ZodOptional<z.ZodBoolean>;
714
+ }, z.core.$strict>>;
715
+ outputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
716
+ type: z.ZodEnum<{
717
+ string: "string";
718
+ number: "number";
719
+ boolean: "boolean";
720
+ file: "file";
721
+ json: "json";
722
+ artifact: "artifact";
723
+ }>;
724
+ description: z.ZodOptional<z.ZodString>;
725
+ extract: z.ZodOptional<z.ZodString>;
726
+ }, z.core.$strict>>>;
727
+ artifacts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
728
+ path: z.ZodString;
729
+ type: z.ZodOptional<z.ZodEnum<{
730
+ file: "file";
731
+ directory: "directory";
732
+ patch: "patch";
733
+ report: "report";
734
+ log: "log";
735
+ }>>;
736
+ description: z.ZodOptional<z.ZodString>;
737
+ }, z.core.$strict>>>;
738
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
739
+ value: z.ZodOptional<z.ZodString>;
740
+ secret: z.ZodOptional<z.ZodString>;
741
+ }, z.core.$strict>>>;
742
+ type: z.ZodLiteral<"condition">;
743
+ expression: z.ZodString;
744
+ then: z.ZodOptional<z.ZodArray<z.ZodString>>;
745
+ else: z.ZodOptional<z.ZodArray<z.ZodString>>;
746
+ }, z.core.$strict>, z.ZodObject<{
747
+ title: z.ZodOptional<z.ZodString>;
748
+ needs: z.ZodOptional<z.ZodArray<z.ZodString>>;
749
+ when: z.ZodOptional<z.ZodString>;
750
+ triggerRule: z.ZodOptional<z.ZodEnum<{
751
+ all_success: "all_success";
752
+ all_done: "all_done";
753
+ one_success: "one_success";
754
+ }>>;
755
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
756
+ retry: z.ZodOptional<z.ZodObject<{
757
+ maxAttempts: z.ZodNumber;
758
+ backoffSeconds: z.ZodOptional<z.ZodNumber>;
759
+ transient: z.ZodOptional<z.ZodArray<z.ZodString>>;
760
+ fatal: z.ZodOptional<z.ZodArray<z.ZodString>>;
761
+ }, z.core.$strict>>;
762
+ policy: z.ZodOptional<z.ZodObject<{
763
+ onFailure: z.ZodOptional<z.ZodEnum<{
764
+ continue: "continue";
765
+ halt: "halt";
766
+ skip_dependents: "skip_dependents";
767
+ }>>;
768
+ approvalRequired: z.ZodOptional<z.ZodBoolean>;
769
+ }, z.core.$strict>>;
770
+ outputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
771
+ type: z.ZodEnum<{
772
+ string: "string";
773
+ number: "number";
774
+ boolean: "boolean";
775
+ file: "file";
776
+ json: "json";
777
+ artifact: "artifact";
778
+ }>;
779
+ description: z.ZodOptional<z.ZodString>;
780
+ extract: z.ZodOptional<z.ZodString>;
781
+ }, z.core.$strict>>>;
782
+ artifacts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
783
+ path: z.ZodString;
784
+ type: z.ZodOptional<z.ZodEnum<{
785
+ file: "file";
786
+ directory: "directory";
787
+ patch: "patch";
788
+ report: "report";
789
+ log: "log";
790
+ }>>;
791
+ description: z.ZodOptional<z.ZodString>;
792
+ }, z.core.$strict>>>;
793
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
794
+ value: z.ZodOptional<z.ZodString>;
795
+ secret: z.ZodOptional<z.ZodString>;
796
+ }, z.core.$strict>>>;
797
+ type: z.ZodLiteral<"artifact">;
798
+ name: z.ZodString;
799
+ from: z.ZodOptional<z.ZodString>;
800
+ path: z.ZodOptional<z.ZodString>;
801
+ kind: z.ZodOptional<z.ZodEnum<{
802
+ url: "url";
803
+ file: "file";
804
+ directory: "directory";
805
+ patch: "patch";
806
+ report: "report";
807
+ log: "log";
808
+ }>>;
809
+ description: z.ZodOptional<z.ZodString>;
810
+ }, z.core.$strict>, z.ZodObject<{
811
+ title: z.ZodOptional<z.ZodString>;
812
+ needs: z.ZodOptional<z.ZodArray<z.ZodString>>;
813
+ when: z.ZodOptional<z.ZodString>;
814
+ triggerRule: z.ZodOptional<z.ZodEnum<{
815
+ all_success: "all_success";
816
+ all_done: "all_done";
817
+ one_success: "one_success";
818
+ }>>;
819
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
820
+ retry: z.ZodOptional<z.ZodObject<{
821
+ maxAttempts: z.ZodNumber;
822
+ backoffSeconds: z.ZodOptional<z.ZodNumber>;
823
+ transient: z.ZodOptional<z.ZodArray<z.ZodString>>;
824
+ fatal: z.ZodOptional<z.ZodArray<z.ZodString>>;
825
+ }, z.core.$strict>>;
826
+ policy: z.ZodOptional<z.ZodObject<{
827
+ onFailure: z.ZodOptional<z.ZodEnum<{
828
+ continue: "continue";
829
+ halt: "halt";
830
+ skip_dependents: "skip_dependents";
831
+ }>>;
832
+ approvalRequired: z.ZodOptional<z.ZodBoolean>;
833
+ }, z.core.$strict>>;
834
+ outputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
835
+ type: z.ZodEnum<{
836
+ string: "string";
837
+ number: "number";
838
+ boolean: "boolean";
839
+ file: "file";
840
+ json: "json";
841
+ artifact: "artifact";
842
+ }>;
843
+ description: z.ZodOptional<z.ZodString>;
844
+ extract: z.ZodOptional<z.ZodString>;
845
+ }, z.core.$strict>>>;
846
+ artifacts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
847
+ path: z.ZodString;
848
+ type: z.ZodOptional<z.ZodEnum<{
849
+ file: "file";
850
+ directory: "directory";
851
+ patch: "patch";
852
+ report: "report";
853
+ log: "log";
854
+ }>>;
855
+ description: z.ZodOptional<z.ZodString>;
856
+ }, z.core.$strict>>>;
857
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
858
+ value: z.ZodOptional<z.ZodString>;
859
+ secret: z.ZodOptional<z.ZodString>;
860
+ }, z.core.$strict>>>;
861
+ type: z.ZodLiteral<"action">;
862
+ adapter: z.ZodString;
863
+ action: z.ZodString;
864
+ with: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<import("./run-types.js").WorkflowInputValue, unknown, z.core.$ZodTypeInternals<import("./run-types.js").WorkflowInputValue, unknown>>>>;
865
+ idempotencyKey: z.ZodOptional<z.ZodString>;
866
+ requiresApproval: z.ZodOptional<z.ZodBoolean>;
428
867
  }, z.core.$strict>, z.ZodObject<{
429
868
  title: z.ZodOptional<z.ZodString>;
430
869
  needs: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-schema.d.ts","sourceRoot":"","sources":["../../src/workflows/workflow-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,eAAO,MAAM,uBAAuB,EAAG,sBAA+B,CAAC;AAuTvE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAa1B,CAAC"}
1
+ {"version":3,"file":"workflow-schema.d.ts","sourceRoot":"","sources":["../../src/workflows/workflow-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,eAAO,MAAM,uBAAuB,EAAG,sBAA+B,CAAC;AA0RvE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkB1B,CAAC"}
@@ -1,55 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import { CapabilityRequestSchema, ExecutorRequirementSchema } from './workflow-executor-schema.js';
3
+ import { ArtifactDefinitionSchema, ContextSchema, EnvValueSchema, identifierSchema, InputDefinitionSchema, InputValueSchema, NodePolicySchema, OutputDefinitionSchema, RequiresSchema, RetryPolicySchema, } from './workflow-schema-common.js';
4
+ import { WorkflowDataCaptureDefinitionSchema, WorkflowNotificationDefinitionSchema, WorkflowPolicyDefinitionSchema, WorkflowRunnerRequirementSchema, WorkflowTriggerDefinitionSchema, } from './workflow-production-schema.js';
3
5
  export const WORKFLOW_SCHEMA_VERSION = 'viewport.workflow/v1';
4
- const InputValueSchema = z.lazy(() => z.union([
5
- z.string(),
6
- z.number(),
7
- z.boolean(),
8
- z.null(),
9
- z.array(InputValueSchema),
10
- z.record(z.string(), InputValueSchema),
11
- ]));
12
- const InputDefinitionSchema = z
13
- .object({
14
- type: z.enum(['string', 'number', 'boolean', 'json']),
15
- required: z.boolean().optional(),
16
- default: InputValueSchema.optional(),
17
- description: z.string().optional(),
18
- })
19
- .strict();
20
- const identifierSchema = z
21
- .string()
22
- .trim()
23
- .min(1)
24
- .regex(/^[a-zA-Z0-9._/-]+$/);
25
- const OutputDefinitionSchema = z
26
- .object({
27
- type: z.enum(['string', 'number', 'boolean', 'json', 'file', 'artifact']),
28
- description: z.string().optional(),
29
- extract: z.string().trim().min(1).optional(),
30
- })
31
- .strict();
32
- const ArtifactDefinitionSchema = z
33
- .object({
34
- path: z.string().trim().min(1),
35
- type: z.enum(['file', 'directory', 'patch', 'report', 'log']).optional(),
36
- description: z.string().optional(),
37
- })
38
- .strict();
39
- const RetryPolicySchema = z
40
- .object({
41
- maxAttempts: z.number().int().min(1).max(10),
42
- backoffSeconds: z.number().int().min(0).max(86_400).optional(),
43
- transient: z.array(z.string().min(1)).optional(),
44
- fatal: z.array(z.string().min(1)).optional(),
45
- })
46
- .strict();
47
- const NodePolicySchema = z
48
- .object({
49
- onFailure: z.enum(['halt', 'continue', 'skip_dependents']).optional(),
50
- approvalRequired: z.boolean().optional(),
51
- })
52
- .strict();
53
6
  const HookRecordSchema = z
54
7
  .object({
55
8
  record: z.boolean().optional(),
@@ -119,33 +72,6 @@ const GateDefinitionSchema = z.discriminatedUnion('type', [
119
72
  })
120
73
  .strict(),
121
74
  ]);
122
- const EnvValueSchema = z
123
- .object({
124
- value: z.string().optional(),
125
- secret: identifierSchema.optional(),
126
- })
127
- .strict()
128
- .refine((entry) => Boolean(entry.value) !== Boolean(entry.secret), {
129
- message: 'Set exactly one of value or secret.',
130
- });
131
- const RequiresSchema = z
132
- .object({
133
- agents: z.array(z.string().trim().min(1)).optional(),
134
- tools: z.array(z.string().trim().min(1)).optional(),
135
- integrations: z.array(z.string().trim().min(1)).optional(),
136
- secrets: z.array(identifierSchema).optional(),
137
- })
138
- .strict();
139
- const ContextReferenceSchema = z
140
- .object({
141
- ref: z.string().trim().min(1),
142
- as: identifierSchema.optional(),
143
- required: z.boolean().optional(),
144
- description: z.string().optional(),
145
- refresh: z.enum(['manual', 'before_run', 'on_demand']).optional(),
146
- })
147
- .strict();
148
- const ContextSchema = z.array(z.union([z.string().trim().min(1), ContextReferenceSchema]));
149
75
  const TriggerRuleSchema = z.enum(['all_success', 'all_done', 'one_success']);
150
76
  const NodeBaseSchema = z.object({
151
77
  title: z.string().trim().min(1).optional(),
@@ -169,6 +95,28 @@ const PromptNodeSchema = NodeBaseSchema.extend({
169
95
  agents: z.record(identifierSchema, InlineAgentDefinitionSchema).optional(),
170
96
  inlineAgentFailurePolicy: z.enum(['fail', 'continue']).optional(),
171
97
  }).strict();
98
+ const AgentNodeSchema = NodeBaseSchema.extend({
99
+ type: z.literal('agent'),
100
+ prompt: z.string().trim().min(1),
101
+ agent: z.string().trim().min(1),
102
+ provider: z.string().trim().min(1).optional(),
103
+ model: z.string().trim().min(1).optional(),
104
+ session: z
105
+ .object({
106
+ resume: z.boolean().optional(),
107
+ title: z.string().trim().min(1).optional(),
108
+ })
109
+ .strict()
110
+ .optional(),
111
+ handoff: z
112
+ .object({
113
+ artifact: identifierSchema.optional(),
114
+ summary: z.string().trim().min(1).optional(),
115
+ })
116
+ .strict()
117
+ .optional(),
118
+ hooks: HookRulesSchema.optional(),
119
+ }).strict();
172
120
  const ShellNodeSchema = NodeBaseSchema.extend({
173
121
  type: z.literal('shell'),
174
122
  command: z.string().trim().min(1),
@@ -198,7 +146,7 @@ const ApprovalNodeSchema = NodeBaseSchema.extend({
198
146
  }).strict();
199
147
  const PlanNodeSchema = NodeBaseSchema.extend({
200
148
  type: z.literal('plan'),
201
- title: z.string().trim().min(1),
149
+ title: z.string().trim().min(1).optional(),
202
150
  body: z.string().trim().min(1),
203
151
  summary: z.string().trim().min(1).optional(),
204
152
  source: z.string().trim().min(1).optional(),
@@ -209,6 +157,34 @@ const GateNodeSchema = NodeBaseSchema.extend({
209
157
  type: z.literal('gate'),
210
158
  gate: GateDefinitionSchema,
211
159
  }).strict();
160
+ const ContextNodeSchema = NodeBaseSchema.extend({
161
+ type: z.literal('context'),
162
+ refs: ContextSchema.optional(),
163
+ query: z.string().trim().min(1).optional(),
164
+ refresh: z.enum(['manual', 'before_run', 'on_demand']).optional(),
165
+ }).strict();
166
+ const ConditionNodeSchema = NodeBaseSchema.extend({
167
+ type: z.literal('condition'),
168
+ expression: z.string().trim().min(1),
169
+ then: z.array(identifierSchema).optional(),
170
+ else: z.array(identifierSchema).optional(),
171
+ }).strict();
172
+ const ArtifactNodeSchema = NodeBaseSchema.extend({
173
+ type: z.literal('artifact'),
174
+ name: identifierSchema,
175
+ from: z.string().trim().min(1).optional(),
176
+ path: z.string().trim().min(1).optional(),
177
+ kind: z.enum(['file', 'directory', 'patch', 'report', 'log', 'url']).optional(),
178
+ description: z.string().optional(),
179
+ }).strict();
180
+ const ActionNodeSchema = NodeBaseSchema.extend({
181
+ type: z.literal('action'),
182
+ adapter: identifierSchema,
183
+ action: identifierSchema,
184
+ with: z.record(identifierSchema, InputValueSchema).optional(),
185
+ idempotencyKey: z.string().trim().min(1).optional(),
186
+ requiresApproval: z.boolean().optional(),
187
+ }).strict();
212
188
  const LoopBodySchema = z.discriminatedUnion('type', [
213
189
  z
214
190
  .object({
@@ -269,11 +245,16 @@ const SubflowNodeSchema = NodeBaseSchema.extend({
269
245
  inputs: z.record(identifierSchema, z.string().trim().min(1)).optional(),
270
246
  }).strict();
271
247
  const WorkflowNodeSchema = z.discriminatedUnion('type', [
248
+ AgentNodeSchema,
272
249
  PromptNodeSchema,
273
250
  ShellNodeSchema,
274
251
  ApprovalNodeSchema,
275
252
  PlanNodeSchema,
276
253
  GateNodeSchema,
254
+ ContextNodeSchema,
255
+ ConditionNodeSchema,
256
+ ArtifactNodeSchema,
257
+ ActionNodeSchema,
277
258
  LoopNodeSchema,
278
259
  SubflowNodeSchema,
279
260
  ]);
@@ -284,9 +265,14 @@ export const WorkflowDefinitionSchema = z
284
265
  title: z.string().trim().min(1).optional(),
285
266
  description: z.string().optional(),
286
267
  inputs: z.record(z.string(), InputDefinitionSchema).optional(),
268
+ triggers: z.array(WorkflowTriggerDefinitionSchema).optional(),
287
269
  context: ContextSchema.optional(),
288
270
  requires: RequiresSchema.optional(),
289
271
  executor: ExecutorRequirementSchema.optional(),
272
+ runner: WorkflowRunnerRequirementSchema.optional(),
273
+ policies: WorkflowPolicyDefinitionSchema.optional(),
274
+ notifications: WorkflowNotificationDefinitionSchema.optional(),
275
+ dataCapture: WorkflowDataCaptureDefinitionSchema.optional(),
290
276
  capabilityRequests: z.array(CapabilityRequestSchema).optional(),
291
277
  nodes: z.record(z.string().trim().min(1), WorkflowNodeSchema),
292
278
  })