@rigkit/engine 0.2.2 → 0.2.4
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/package.json +1 -1
- package/src/authoring.ts +108 -61
- package/src/authoring.typecheck.ts +87 -0
- package/src/db/schema/core.ts +3 -7
- package/src/engine.test.ts +270 -131
- package/src/engine.ts +566 -503
- package/src/host-storage.ts +128 -0
- package/src/index.ts +5 -0
- package/src/provider/types.ts +4 -30
- package/src/state.ts +46 -14
- package/src/types.ts +347 -140
- package/src/version.ts +1 -1
package/src/types.ts
CHANGED
|
@@ -52,18 +52,25 @@ export type CommandOptions = ExecOptions & {
|
|
|
52
52
|
name?: string;
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
export type ProviderWorkspaceContext = object;
|
|
56
|
-
|
|
57
55
|
export type LocalWorkspaceRuntime = {
|
|
58
56
|
open(target: string): MaybePromise<void>;
|
|
59
57
|
command?(input: LocalCommandRequest): MaybePromise<LocalCommandResult>;
|
|
60
|
-
requestCapability?<Result = unknown>(
|
|
58
|
+
requestCapability?<Result = unknown>(
|
|
59
|
+
capability: string,
|
|
60
|
+
params: unknown,
|
|
61
|
+
options?: LocalHostCapabilityRequestOptions,
|
|
62
|
+
): MaybePromise<Result>;
|
|
61
63
|
requestCapabilitySession?<Result = unknown>(
|
|
62
64
|
capability: string,
|
|
63
65
|
params: unknown,
|
|
66
|
+
options?: LocalHostCapabilityRequestOptions,
|
|
64
67
|
): MaybePromise<HostCapabilitySession<Result>>;
|
|
65
68
|
};
|
|
66
69
|
|
|
70
|
+
export type LocalHostCapabilityRequestOptions = {
|
|
71
|
+
nodePath?: string;
|
|
72
|
+
};
|
|
73
|
+
|
|
67
74
|
export type HostCapabilitySession<Result = unknown> = {
|
|
68
75
|
result: Result;
|
|
69
76
|
closed: Promise<void>;
|
|
@@ -94,22 +101,19 @@ export type WorkflowProviderDefinition<
|
|
|
94
101
|
ProviderId extends string = string,
|
|
95
102
|
Config extends object = Record<string, unknown>,
|
|
96
103
|
Runtime = unknown,
|
|
97
|
-
WorkspaceContext extends ProviderWorkspaceContext = ProviderWorkspaceContext,
|
|
98
104
|
> = {
|
|
99
105
|
readonly kind: "rigkit.provider";
|
|
100
106
|
readonly providerId: ProviderId;
|
|
101
107
|
readonly config: ResolvableObject<Config>;
|
|
102
108
|
readonly plugin?: unknown;
|
|
103
109
|
readonly __runtime?: Runtime;
|
|
104
|
-
readonly __workspaceContext?: WorkspaceContext;
|
|
105
110
|
};
|
|
106
111
|
|
|
107
112
|
export type DevProviderDefinition<
|
|
108
113
|
ProviderId extends string = string,
|
|
109
114
|
Config extends object = Record<string, unknown>,
|
|
110
115
|
Runtime = unknown,
|
|
111
|
-
|
|
112
|
-
> = WorkflowProviderDefinition<ProviderId, Config, Runtime, WorkspaceContext>;
|
|
116
|
+
> = WorkflowProviderDefinition<ProviderId, Config, Runtime>;
|
|
113
117
|
|
|
114
118
|
export type LoadedProviderDefinition<
|
|
115
119
|
ProviderId extends string = string,
|
|
@@ -120,18 +124,13 @@ export type LoadedProviderDefinition<
|
|
|
120
124
|
plugin?: unknown;
|
|
121
125
|
};
|
|
122
126
|
|
|
123
|
-
export type WorkflowProviderMap = Record<string, WorkflowProviderDefinition<string, any, any
|
|
127
|
+
export type WorkflowProviderMap = Record<string, WorkflowProviderDefinition<string, any, any>>;
|
|
124
128
|
|
|
125
129
|
export type ProviderRuntimeOf<Provider> =
|
|
126
|
-
Provider extends WorkflowProviderDefinition<any, any, infer Runtime
|
|
130
|
+
Provider extends WorkflowProviderDefinition<any, any, infer Runtime>
|
|
127
131
|
? Runtime
|
|
128
132
|
: never;
|
|
129
133
|
|
|
130
|
-
export type ProviderWorkspaceContextOf<Provider> =
|
|
131
|
-
Provider extends WorkflowProviderDefinition<any, any, any, infer WorkspaceContext extends ProviderWorkspaceContext>
|
|
132
|
-
? WorkspaceContext
|
|
133
|
-
: ProviderWorkspaceContext;
|
|
134
|
-
|
|
135
134
|
export type ProviderRuntimeMap<Providers extends WorkflowProviderMap> = {
|
|
136
135
|
readonly [Key in keyof Providers]: ProviderRuntimeOf<Providers[Key]>;
|
|
137
136
|
};
|
|
@@ -143,48 +142,47 @@ export type WorkflowRuntimeHelpers = {
|
|
|
143
142
|
log(data: string, options?: { stream?: WorkflowLogStream; label?: string }): void;
|
|
144
143
|
};
|
|
145
144
|
|
|
146
|
-
export
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
readonly
|
|
151
|
-
readonly
|
|
152
|
-
readonly runtime: WorkflowRuntimeHelpers;
|
|
145
|
+
export const STEP_INVALIDATION_KIND = "rigkit.step.invalidate" as const;
|
|
146
|
+
|
|
147
|
+
export type WorkflowStepInvalidation<Target extends string = string> = {
|
|
148
|
+
readonly kind: typeof STEP_INVALIDATION_KIND;
|
|
149
|
+
readonly target: Target;
|
|
150
|
+
readonly targetNodePath: string;
|
|
153
151
|
};
|
|
154
152
|
|
|
155
|
-
export type
|
|
153
|
+
export type WorkflowStepRuntime<
|
|
154
|
+
Context extends JsonObject = JsonObject,
|
|
155
|
+
PreviousTaskIds extends string = string,
|
|
156
|
+
> = WorkflowRuntimeHelpers & {
|
|
157
|
+
readonly ctx: Readonly<Context>;
|
|
158
|
+
invalidate<const Target extends PreviousTaskIds>(target: Target): WorkflowStepInvalidation<Target>;
|
|
159
|
+
};
|
|
156
160
|
|
|
157
|
-
export type
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
Result extends WorkflowTaskResult = WorkflowTaskResult,
|
|
161
|
-
> = (context: WorkflowTaskRuntime<Providers, Context>) => MaybePromise<Result>;
|
|
161
|
+
export type WorkflowTaskContextResult<Context extends JsonObject = JsonObject> = {
|
|
162
|
+
readonly ctx: Context;
|
|
163
|
+
};
|
|
162
164
|
|
|
163
|
-
export type
|
|
165
|
+
export type WorkflowTaskRuntime<
|
|
164
166
|
Providers extends WorkflowProviderMap,
|
|
165
167
|
Context extends JsonObject,
|
|
168
|
+
PreviousTaskIds extends string = string,
|
|
166
169
|
> = ProviderRuntimeMap<Providers> & {
|
|
167
|
-
readonly ctx: Readonly<Context>;
|
|
168
|
-
readonly name: string;
|
|
169
170
|
readonly providers: ProviderRuntimeMap<Providers>;
|
|
170
|
-
readonly
|
|
171
|
-
readonly workflow: string;
|
|
171
|
+
readonly step: WorkflowStepRuntime<Context, PreviousTaskIds>;
|
|
172
172
|
};
|
|
173
173
|
|
|
174
|
-
export type
|
|
174
|
+
export type WorkflowTaskResult =
|
|
175
|
+
| void
|
|
176
|
+
| undefined
|
|
177
|
+
| WorkflowTaskContextResult<JsonObject>
|
|
178
|
+
| WorkflowStepInvalidation<string>;
|
|
175
179
|
|
|
176
|
-
export type
|
|
180
|
+
export type WorkflowTaskHandler<
|
|
177
181
|
Providers extends WorkflowProviderMap,
|
|
178
182
|
Context extends JsonObject,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
export type WorkflowCreateDefinition<
|
|
183
|
-
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
184
|
-
Context extends JsonObject = JsonObject,
|
|
185
|
-
> = {
|
|
186
|
-
readonly handler: WorkflowCreateHandler<Providers, Context, any>;
|
|
187
|
-
};
|
|
183
|
+
PreviousTaskIds extends string = string,
|
|
184
|
+
Result extends WorkflowTaskResult = WorkflowTaskResult,
|
|
185
|
+
> = (context: WorkflowTaskRuntime<Providers, Context, PreviousTaskIds>) => MaybePromise<Result>;
|
|
188
186
|
|
|
189
187
|
export type WorkflowInputFieldKind = "workspace" | "string" | "boolean" | "number";
|
|
190
188
|
|
|
@@ -199,9 +197,7 @@ export type WorkflowInputFieldDefinition<Value = unknown> = {
|
|
|
199
197
|
};
|
|
200
198
|
|
|
201
199
|
export type WorkflowOperationWorkspaceInput<Name extends string> = {
|
|
202
|
-
[Key in Name]: WorkspaceRuntimeRecord
|
|
203
|
-
data: Record<string, JsonValue>;
|
|
204
|
-
};
|
|
200
|
+
[Key in Name]: WorkspaceRuntimeRecord;
|
|
205
201
|
};
|
|
206
202
|
|
|
207
203
|
export type WorkflowInputShape = Record<string, WorkflowInputFieldDefinition<any>>;
|
|
@@ -262,6 +258,7 @@ export type WorkflowOperationRuntime<
|
|
|
262
258
|
readonly providers: ProviderRuntimeMap<Providers>;
|
|
263
259
|
readonly local: LocalWorkspaceRuntime;
|
|
264
260
|
readonly workflow: string;
|
|
261
|
+
readonly step: WorkflowStepRuntime;
|
|
265
262
|
};
|
|
266
263
|
|
|
267
264
|
export type WorkflowOperationResult = void | undefined | JsonValue;
|
|
@@ -272,25 +269,87 @@ export type WorkflowOperationHandler<
|
|
|
272
269
|
Result extends WorkflowOperationResult = WorkflowOperationResult,
|
|
273
270
|
> = (context: WorkflowOperationRuntime<Providers, Input>) => MaybePromise<Result>;
|
|
274
271
|
|
|
275
|
-
export type
|
|
276
|
-
readonly
|
|
277
|
-
readonly
|
|
272
|
+
export type WorkflowRuntimeContext<Context extends JsonObject> = {
|
|
273
|
+
readonly name: string;
|
|
274
|
+
readonly ctx: Readonly<Context>;
|
|
278
275
|
};
|
|
279
276
|
|
|
280
|
-
export type
|
|
281
|
-
readonly
|
|
282
|
-
|
|
277
|
+
export type ReadonlyWorkspaceContext<Context extends JsonObject> = {
|
|
278
|
+
readonly [Key in keyof Context]: Context[Key];
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
export type WorkspaceCreateRuntimeRecord = {
|
|
282
|
+
readonly name: string;
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
export type WorkspaceRuntimeRecord<Context extends object = JsonObject> = {
|
|
286
|
+
readonly name: string;
|
|
287
|
+
readonly ctx: Context;
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
export type WorkflowWorkspaceCreateRuntime<
|
|
291
|
+
Providers extends WorkflowProviderMap,
|
|
292
|
+
Context extends JsonObject,
|
|
293
|
+
> = ProviderRuntimeMap<Providers> & {
|
|
294
|
+
readonly workflow: WorkflowRuntimeContext<Context>;
|
|
295
|
+
readonly workspace: WorkspaceCreateRuntimeRecord;
|
|
296
|
+
readonly providers: ProviderRuntimeMap<Providers>;
|
|
297
|
+
readonly local: LocalWorkspaceRuntime;
|
|
298
|
+
readonly step: WorkflowStepRuntime;
|
|
283
299
|
};
|
|
284
300
|
|
|
301
|
+
export type WorkflowWorkspaceCreateHandler<
|
|
302
|
+
Providers extends WorkflowProviderMap,
|
|
303
|
+
Context extends JsonObject,
|
|
304
|
+
Data extends JsonObject,
|
|
305
|
+
> = (context: WorkflowWorkspaceCreateRuntime<Providers, Context>) => MaybePromise<Data>;
|
|
306
|
+
|
|
307
|
+
export type WorkflowWorkspaceRemoveRuntime<
|
|
308
|
+
Providers extends WorkflowProviderMap,
|
|
309
|
+
Context extends JsonObject,
|
|
310
|
+
Data extends JsonObject,
|
|
311
|
+
> = ProviderRuntimeMap<Providers> & {
|
|
312
|
+
readonly workflow: WorkflowRuntimeContext<Context>;
|
|
313
|
+
readonly workspace: WorkspaceRuntimeRecord<ReadonlyWorkspaceContext<Data>>;
|
|
314
|
+
readonly providers: ProviderRuntimeMap<Providers>;
|
|
315
|
+
readonly local: LocalWorkspaceRuntime;
|
|
316
|
+
readonly step: WorkflowStepRuntime;
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
export type WorkflowWorkspaceRemoveHandler<
|
|
320
|
+
Providers extends WorkflowProviderMap,
|
|
321
|
+
Context extends JsonObject,
|
|
322
|
+
Data extends JsonObject,
|
|
323
|
+
> = (context: WorkflowWorkspaceRemoveRuntime<Providers, Context, Data>) => MaybePromise<void>;
|
|
324
|
+
|
|
325
|
+
export type WorkflowWorkspaceOperationRuntime<
|
|
326
|
+
Providers extends WorkflowProviderMap,
|
|
327
|
+
Context extends JsonObject,
|
|
328
|
+
Data extends object,
|
|
329
|
+
Input extends object,
|
|
330
|
+
> = ProviderRuntimeMap<Providers> & {
|
|
331
|
+
readonly workflow: WorkflowRuntimeContext<Context>;
|
|
332
|
+
readonly input: Readonly<Input>;
|
|
333
|
+
readonly workspace: WorkspaceRuntimeRecord<Data>;
|
|
334
|
+
readonly providers: ProviderRuntimeMap<Providers>;
|
|
335
|
+
readonly local: LocalWorkspaceRuntime;
|
|
336
|
+
readonly step: WorkflowStepRuntime;
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
export type WorkflowWorkspaceOperationHandler<
|
|
340
|
+
Providers extends WorkflowProviderMap,
|
|
341
|
+
Context extends JsonObject,
|
|
342
|
+
Data extends object,
|
|
343
|
+
Input extends object,
|
|
344
|
+
Result extends WorkflowOperationResult = WorkflowOperationResult,
|
|
345
|
+
> = (context: WorkflowWorkspaceOperationRuntime<Providers, Context, Data, Input>) => MaybePromise<Result>;
|
|
346
|
+
|
|
285
347
|
export type WorkflowOperationOptions<
|
|
286
348
|
Providers extends WorkflowProviderMap,
|
|
287
349
|
Input extends object = {},
|
|
288
350
|
> = {
|
|
289
351
|
title?: string;
|
|
290
352
|
description?: string;
|
|
291
|
-
createsWorkspace?: boolean;
|
|
292
|
-
requiredHostMethods?: readonly WorkflowHostMethodRequirement[];
|
|
293
|
-
requiredHostCapabilities?: readonly WorkflowHostCapabilityRequirement[];
|
|
294
353
|
input?: WorkflowOperationInputBuilder<Input> | ((workflow: WorkflowOperationInputHelpers) => WorkflowOperationInputBuilder<Input>);
|
|
295
354
|
run: WorkflowOperationHandler<Providers, Input>;
|
|
296
355
|
};
|
|
@@ -302,13 +361,35 @@ export type WorkflowOperationDefinition<
|
|
|
302
361
|
readonly id: string;
|
|
303
362
|
readonly title?: string;
|
|
304
363
|
readonly description?: string;
|
|
305
|
-
readonly createsWorkspace?: boolean;
|
|
306
|
-
readonly requiredHostMethods?: readonly WorkflowHostMethodRequirement[];
|
|
307
|
-
readonly requiredHostCapabilities?: readonly WorkflowHostCapabilityRequirement[];
|
|
308
364
|
readonly input?: WorkflowOperationInputBuilder<Input>;
|
|
309
365
|
readonly run: WorkflowOperationHandler<Providers, Input>;
|
|
310
366
|
};
|
|
311
367
|
|
|
368
|
+
export type WorkflowWorkspaceOperationOptions<
|
|
369
|
+
Providers extends WorkflowProviderMap,
|
|
370
|
+
Context extends JsonObject,
|
|
371
|
+
Data extends object,
|
|
372
|
+
Input extends object = {},
|
|
373
|
+
> = {
|
|
374
|
+
title?: string;
|
|
375
|
+
description?: string;
|
|
376
|
+
input?: WorkflowOperationInputBuilder<Input> | ((workflow: WorkflowOperationInputHelpers) => WorkflowOperationInputBuilder<Input>);
|
|
377
|
+
run: WorkflowWorkspaceOperationHandler<Providers, Context, Data, Input>;
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
export type WorkflowWorkspaceOperationDefinition<
|
|
381
|
+
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
382
|
+
Context extends JsonObject = JsonObject,
|
|
383
|
+
Data extends object = JsonObject,
|
|
384
|
+
Input extends object = object,
|
|
385
|
+
> = {
|
|
386
|
+
readonly id: string;
|
|
387
|
+
readonly title?: string;
|
|
388
|
+
readonly description?: string;
|
|
389
|
+
readonly input?: WorkflowOperationInputBuilder<Input>;
|
|
390
|
+
readonly run: WorkflowWorkspaceOperationHandler<Providers, Context, Data, Input>;
|
|
391
|
+
};
|
|
392
|
+
|
|
312
393
|
export type OutputSchema<Output extends JsonObject = JsonObject> =
|
|
313
394
|
| { parse(value: unknown): Output }
|
|
314
395
|
| {
|
|
@@ -329,8 +410,19 @@ export type OutputSchemaValue<Schema> =
|
|
|
329
410
|
export type WorkflowTaskOptions<Output extends JsonObject = JsonObject> = {
|
|
330
411
|
output?: OutputSchema<Output>;
|
|
331
412
|
version?: string;
|
|
413
|
+
cacheTTL?: WorkflowTaskCacheTTL;
|
|
332
414
|
};
|
|
333
415
|
|
|
416
|
+
export type WorkflowTaskCacheTTL =
|
|
417
|
+
| number
|
|
418
|
+
| string
|
|
419
|
+
| {
|
|
420
|
+
seconds?: number;
|
|
421
|
+
minutes?: number;
|
|
422
|
+
hours?: number;
|
|
423
|
+
days?: number;
|
|
424
|
+
};
|
|
425
|
+
|
|
334
426
|
export type WorkflowNodeKind = "task" | "sequence" | "parallel";
|
|
335
427
|
|
|
336
428
|
export type WorkflowDefinition<
|
|
@@ -344,29 +436,39 @@ export type WorkflowDefinition<
|
|
|
344
436
|
sequence<InputContext extends JsonObject = {}>(name: string): WorkflowSequenceBuilder<
|
|
345
437
|
Providers,
|
|
346
438
|
InputContext,
|
|
347
|
-
InputContext
|
|
439
|
+
InputContext,
|
|
440
|
+
JsonObject,
|
|
441
|
+
never,
|
|
442
|
+
never,
|
|
443
|
+
never
|
|
348
444
|
>;
|
|
349
445
|
|
|
350
446
|
task<Result extends WorkflowTaskResult>(
|
|
351
447
|
name: string,
|
|
352
|
-
handler: WorkflowTaskHandler<Providers, {}, Result>,
|
|
448
|
+
handler: WorkflowTaskHandler<Providers, {}, never, Result>,
|
|
353
449
|
): WorkflowTaskNode<Providers, {}, TaskReturnContext<Result>>;
|
|
354
450
|
|
|
355
|
-
task<
|
|
451
|
+
task<
|
|
452
|
+
Schema extends OutputSchema<JsonObject>,
|
|
453
|
+
Result extends MaybePromise<WorkflowTaskContextResult<OutputSchemaValue<Schema>> | WorkflowStepInvalidation<string> | void>,
|
|
454
|
+
>(
|
|
356
455
|
name: string,
|
|
357
456
|
options: WorkflowTaskOptions<OutputSchemaValue<Schema>>,
|
|
358
|
-
handler: WorkflowTaskHandler<Providers, {}, Awaited<Result> & WorkflowTaskResult>,
|
|
457
|
+
handler: WorkflowTaskHandler<Providers, {}, never, Awaited<Result> & WorkflowTaskResult>,
|
|
359
458
|
): WorkflowTaskNode<Providers, {}, TaskReturnContext<Result>>;
|
|
360
459
|
|
|
361
460
|
step<Result extends WorkflowTaskResult>(
|
|
362
461
|
name: string,
|
|
363
|
-
handler: WorkflowTaskHandler<Providers, {}, Result>,
|
|
462
|
+
handler: WorkflowTaskHandler<Providers, {}, never, Result>,
|
|
364
463
|
): WorkflowTaskNode<Providers, {}, TaskReturnContext<Result>>;
|
|
365
464
|
|
|
366
|
-
step<
|
|
465
|
+
step<
|
|
466
|
+
Schema extends OutputSchema<JsonObject>,
|
|
467
|
+
Result extends MaybePromise<WorkflowTaskContextResult<OutputSchemaValue<Schema>> | WorkflowStepInvalidation<string> | void>,
|
|
468
|
+
>(
|
|
367
469
|
name: string,
|
|
368
470
|
options: WorkflowTaskOptions<OutputSchemaValue<Schema>>,
|
|
369
|
-
handler: WorkflowTaskHandler<Providers, {}, Awaited<Result> & WorkflowTaskResult>,
|
|
471
|
+
handler: WorkflowTaskHandler<Providers, {}, never, Awaited<Result> & WorkflowTaskResult>,
|
|
370
472
|
): WorkflowTaskNode<Providers, {}, TaskReturnContext<Result>>;
|
|
371
473
|
};
|
|
372
474
|
|
|
@@ -389,8 +491,8 @@ export type WorkflowNodeDefinition<
|
|
|
389
491
|
readonly name: string;
|
|
390
492
|
readonly workflow: WorkflowDefinition<string, Providers>;
|
|
391
493
|
readonly workspaceDefinition?: WorkflowWorkspaceDefinition<Providers, OutputContext>;
|
|
392
|
-
readonly createDefinition?: WorkflowCreateDefinition<Providers, OutputContext>;
|
|
393
494
|
readonly operations?: readonly WorkflowOperationDefinition<Providers, any>[];
|
|
495
|
+
readonly workspaceOperations?: readonly WorkflowWorkspaceOperationDefinition<Providers, OutputContext, any, any>[];
|
|
394
496
|
readonly __providers?: Providers;
|
|
395
497
|
readonly __input?: InputContext;
|
|
396
498
|
readonly __output?: OutputContext;
|
|
@@ -403,42 +505,94 @@ export type WorkflowTaskNode<
|
|
|
403
505
|
> = WorkflowNodeDefinition<Providers, InputContext, OutputContext> & {
|
|
404
506
|
readonly nodeKind: "task";
|
|
405
507
|
readonly options?: WorkflowTaskOptions;
|
|
406
|
-
readonly handler: WorkflowTaskHandler<Providers, InputContext, any>;
|
|
508
|
+
readonly handler: WorkflowTaskHandler<Providers, InputContext, string, any>;
|
|
407
509
|
};
|
|
408
510
|
|
|
409
511
|
export type WorkflowSequenceBuilder<
|
|
410
512
|
Providers extends WorkflowProviderMap,
|
|
411
513
|
InputContext extends JsonObject,
|
|
412
514
|
OutputContext extends JsonObject,
|
|
515
|
+
WorkspaceData extends object = JsonObject,
|
|
516
|
+
OperationIds extends string = never,
|
|
517
|
+
WorkspaceOperationIds extends string = never,
|
|
518
|
+
PreviousTaskIds extends string = never,
|
|
413
519
|
> = WorkflowNodeDefinition<Providers, InputContext, OutputContext> & {
|
|
414
520
|
readonly nodeKind: "sequence";
|
|
415
521
|
readonly children: readonly WorkflowNodeDefinition<Providers, any, any>[];
|
|
416
522
|
|
|
417
|
-
task<Result extends WorkflowTaskResult>(
|
|
418
|
-
name:
|
|
419
|
-
handler: WorkflowTaskHandler<Providers, OutputContext, Result>,
|
|
420
|
-
): WorkflowSequenceBuilder<
|
|
523
|
+
task<const Id extends string, Result extends WorkflowTaskResult>(
|
|
524
|
+
name: Id & WorkflowTaskIdConstraint<Id, PreviousTaskIds>,
|
|
525
|
+
handler: WorkflowTaskHandler<Providers, OutputContext, PreviousTaskIds, Result>,
|
|
526
|
+
): WorkflowSequenceBuilder<
|
|
527
|
+
Providers,
|
|
528
|
+
InputContext,
|
|
529
|
+
TaskReturnContext<Result>,
|
|
530
|
+
WorkspaceData,
|
|
531
|
+
OperationIds,
|
|
532
|
+
WorkspaceOperationIds,
|
|
533
|
+
PreviousTaskIds | Id
|
|
534
|
+
>;
|
|
421
535
|
|
|
422
|
-
task<
|
|
423
|
-
|
|
536
|
+
task<
|
|
537
|
+
const Id extends string,
|
|
538
|
+
Schema extends OutputSchema<JsonObject>,
|
|
539
|
+
Result extends MaybePromise<WorkflowTaskContextResult<OutputSchemaValue<Schema>> | WorkflowStepInvalidation<string> | void>,
|
|
540
|
+
>(
|
|
541
|
+
name: Id & WorkflowTaskIdConstraint<Id, PreviousTaskIds>,
|
|
424
542
|
options: WorkflowTaskOptions<OutputSchemaValue<Schema>>,
|
|
425
|
-
handler: WorkflowTaskHandler<Providers, OutputContext, Awaited<Result> & WorkflowTaskResult>,
|
|
426
|
-
): WorkflowSequenceBuilder<
|
|
543
|
+
handler: WorkflowTaskHandler<Providers, OutputContext, PreviousTaskIds, Awaited<Result> & WorkflowTaskResult>,
|
|
544
|
+
): WorkflowSequenceBuilder<
|
|
545
|
+
Providers,
|
|
546
|
+
InputContext,
|
|
547
|
+
TaskReturnContext<Result>,
|
|
548
|
+
WorkspaceData,
|
|
549
|
+
OperationIds,
|
|
550
|
+
WorkspaceOperationIds,
|
|
551
|
+
PreviousTaskIds | Id
|
|
552
|
+
>;
|
|
427
553
|
|
|
428
|
-
step<Result extends WorkflowTaskResult>(
|
|
429
|
-
name:
|
|
430
|
-
handler: WorkflowTaskHandler<Providers, OutputContext, Result>,
|
|
431
|
-
): WorkflowSequenceBuilder<
|
|
554
|
+
step<const Id extends string, Result extends WorkflowTaskResult>(
|
|
555
|
+
name: Id & WorkflowTaskIdConstraint<Id, PreviousTaskIds>,
|
|
556
|
+
handler: WorkflowTaskHandler<Providers, OutputContext, PreviousTaskIds, Result>,
|
|
557
|
+
): WorkflowSequenceBuilder<
|
|
558
|
+
Providers,
|
|
559
|
+
InputContext,
|
|
560
|
+
TaskReturnContext<Result>,
|
|
561
|
+
WorkspaceData,
|
|
562
|
+
OperationIds,
|
|
563
|
+
WorkspaceOperationIds,
|
|
564
|
+
PreviousTaskIds | Id
|
|
565
|
+
>;
|
|
432
566
|
|
|
433
|
-
step<
|
|
434
|
-
|
|
567
|
+
step<
|
|
568
|
+
const Id extends string,
|
|
569
|
+
Schema extends OutputSchema<JsonObject>,
|
|
570
|
+
Result extends MaybePromise<WorkflowTaskContextResult<OutputSchemaValue<Schema>> | WorkflowStepInvalidation<string> | void>,
|
|
571
|
+
>(
|
|
572
|
+
name: Id & WorkflowTaskIdConstraint<Id, PreviousTaskIds>,
|
|
435
573
|
options: WorkflowTaskOptions<OutputSchemaValue<Schema>>,
|
|
436
|
-
handler: WorkflowTaskHandler<Providers, OutputContext, Awaited<Result> & WorkflowTaskResult>,
|
|
437
|
-
): WorkflowSequenceBuilder<
|
|
574
|
+
handler: WorkflowTaskHandler<Providers, OutputContext, PreviousTaskIds, Awaited<Result> & WorkflowTaskResult>,
|
|
575
|
+
): WorkflowSequenceBuilder<
|
|
576
|
+
Providers,
|
|
577
|
+
InputContext,
|
|
578
|
+
TaskReturnContext<Result>,
|
|
579
|
+
WorkspaceData,
|
|
580
|
+
OperationIds,
|
|
581
|
+
WorkspaceOperationIds,
|
|
582
|
+
PreviousTaskIds | Id
|
|
583
|
+
>;
|
|
438
584
|
|
|
439
585
|
add<Node extends WorkflowNodeDefinition<Providers, any, any>>(
|
|
440
586
|
node: OutputContext extends WorkflowNodeInput<Node> ? Node : never,
|
|
441
|
-
): WorkflowSequenceBuilder<
|
|
587
|
+
): WorkflowSequenceBuilder<
|
|
588
|
+
Providers,
|
|
589
|
+
InputContext,
|
|
590
|
+
WorkflowNodeOutput<Node>,
|
|
591
|
+
WorkspaceData,
|
|
592
|
+
OperationIds,
|
|
593
|
+
WorkspaceOperationIds,
|
|
594
|
+
PreviousTaskIds
|
|
595
|
+
>;
|
|
442
596
|
|
|
443
597
|
parallel<const Branches extends Record<string, WorkflowNodeDefinition<Providers, any, any>>>(
|
|
444
598
|
branches: {
|
|
@@ -446,22 +600,105 @@ export type WorkflowSequenceBuilder<
|
|
|
446
600
|
? Branches[Key]
|
|
447
601
|
: never;
|
|
448
602
|
},
|
|
449
|
-
): WorkflowSequenceBuilder<
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
603
|
+
): WorkflowSequenceBuilder<
|
|
604
|
+
Providers,
|
|
605
|
+
InputContext,
|
|
606
|
+
Merge<OutputContext, ParallelOutput<Branches>>,
|
|
607
|
+
WorkspaceData,
|
|
608
|
+
OperationIds,
|
|
609
|
+
WorkspaceOperationIds,
|
|
610
|
+
PreviousTaskIds
|
|
611
|
+
>;
|
|
454
612
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
): WorkflowSequenceBuilder<
|
|
613
|
+
workspace<Data extends JsonObject>(
|
|
614
|
+
definition: WorkflowWorkspaceDefinition<Providers, OutputContext, Data>,
|
|
615
|
+
): WorkflowSequenceBuilder<
|
|
616
|
+
Providers,
|
|
617
|
+
InputContext,
|
|
618
|
+
OutputContext,
|
|
619
|
+
ReadonlyWorkspaceContext<Data>,
|
|
620
|
+
OperationIds,
|
|
621
|
+
WorkspaceOperationIds,
|
|
622
|
+
PreviousTaskIds
|
|
623
|
+
>;
|
|
458
624
|
|
|
459
625
|
operation<const Id extends string, Input extends object = {}>(
|
|
460
|
-
id: Id,
|
|
626
|
+
id: Id & WorkflowOperationIdConstraint<Id, OperationIds>,
|
|
461
627
|
options: WorkflowOperationOptions<Providers, Input>,
|
|
462
|
-
): WorkflowSequenceBuilder<
|
|
628
|
+
): WorkflowSequenceBuilder<
|
|
629
|
+
Providers,
|
|
630
|
+
InputContext,
|
|
631
|
+
OutputContext,
|
|
632
|
+
WorkspaceData,
|
|
633
|
+
OperationIds | Id,
|
|
634
|
+
WorkspaceOperationIds,
|
|
635
|
+
PreviousTaskIds
|
|
636
|
+
>;
|
|
637
|
+
|
|
638
|
+
workspaceOperation<const Id extends string, Input extends object = {}>(
|
|
639
|
+
id: Id & WorkflowOperationIdConstraint<Id, WorkspaceOperationIds>,
|
|
640
|
+
options: WorkflowWorkspaceOperationOptions<Providers, OutputContext, WorkspaceData, Input>,
|
|
641
|
+
): WorkflowSequenceBuilder<
|
|
642
|
+
Providers,
|
|
643
|
+
InputContext,
|
|
644
|
+
OutputContext,
|
|
645
|
+
WorkspaceData,
|
|
646
|
+
OperationIds,
|
|
647
|
+
WorkspaceOperationIds | Id,
|
|
648
|
+
PreviousTaskIds
|
|
649
|
+
>;
|
|
463
650
|
};
|
|
464
651
|
|
|
652
|
+
export const RESERVED_WORKFLOW_OPERATION_IDS = [
|
|
653
|
+
"apply",
|
|
654
|
+
"completion",
|
|
655
|
+
"create",
|
|
656
|
+
"doctor",
|
|
657
|
+
"fork",
|
|
658
|
+
"help",
|
|
659
|
+
"init",
|
|
660
|
+
"ls",
|
|
661
|
+
"plan",
|
|
662
|
+
"projects",
|
|
663
|
+
"remove",
|
|
664
|
+
"run",
|
|
665
|
+
"version",
|
|
666
|
+
] as const;
|
|
667
|
+
|
|
668
|
+
export type ReservedWorkflowOperationId = typeof RESERVED_WORKFLOW_OPERATION_IDS[number];
|
|
669
|
+
|
|
670
|
+
type WorkflowOperationIdError<Message extends string> = {
|
|
671
|
+
readonly __rigkitOperationIdError: Message;
|
|
672
|
+
};
|
|
673
|
+
|
|
674
|
+
export type WorkflowOperationIdConstraint<
|
|
675
|
+
Id extends string,
|
|
676
|
+
Existing extends string,
|
|
677
|
+
> = string extends Id
|
|
678
|
+
? unknown
|
|
679
|
+
: Id extends Existing
|
|
680
|
+
? WorkflowOperationIdError<`Operation id "${Id}" is already defined`>
|
|
681
|
+
: Id extends ReservedWorkflowOperationId
|
|
682
|
+
? WorkflowOperationIdError<`Operation id "${Id}" is reserved by Rigkit`>
|
|
683
|
+
: Id extends `${string}/${string}`
|
|
684
|
+
? WorkflowOperationIdError<`Operation id "${Id}" cannot contain "/"`>
|
|
685
|
+
: unknown;
|
|
686
|
+
|
|
687
|
+
type WorkflowTaskIdError<Message extends string> = {
|
|
688
|
+
readonly __rigkitTaskIdError: Message;
|
|
689
|
+
};
|
|
690
|
+
|
|
691
|
+
export type WorkflowTaskIdConstraint<
|
|
692
|
+
Id extends string,
|
|
693
|
+
Existing extends string,
|
|
694
|
+
> = string extends Id
|
|
695
|
+
? unknown
|
|
696
|
+
: Id extends Existing
|
|
697
|
+
? WorkflowTaskIdError<`Task id "${Id}" is already defined`>
|
|
698
|
+
: Id extends ""
|
|
699
|
+
? WorkflowTaskIdError<"Task ids must be non-empty">
|
|
700
|
+
: unknown;
|
|
701
|
+
|
|
465
702
|
export type WorkflowNodeInput<Node> =
|
|
466
703
|
Node extends WorkflowNodeDefinition<any, infer Input extends JsonObject, any>
|
|
467
704
|
? Input
|
|
@@ -476,13 +713,14 @@ export type ParallelOutput<Branches extends Record<string, WorkflowNodeDefinitio
|
|
|
476
713
|
[Key in keyof Branches & string]: WorkflowNodeOutput<Branches[Key]>;
|
|
477
714
|
};
|
|
478
715
|
|
|
479
|
-
export type TaskReturnContext<Return> =
|
|
480
|
-
|
|
481
|
-
?
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
716
|
+
export type TaskReturnContext<Return> =
|
|
717
|
+
Exclude<Awaited<Return>, void | undefined | WorkflowStepInvalidation<string>> extends infer Result
|
|
718
|
+
? [Result] extends [never]
|
|
719
|
+
? {}
|
|
720
|
+
: Result extends { ctx: infer Context extends JsonObject }
|
|
721
|
+
? Simplify<Context>
|
|
722
|
+
: never
|
|
723
|
+
: {};
|
|
486
724
|
|
|
487
725
|
export type Merge<Left extends JsonObject, Right extends JsonObject> =
|
|
488
726
|
Simplify<Omit<Left, keyof Right> & Right>;
|
|
@@ -492,42 +730,19 @@ export type Simplify<Value> = { [Key in keyof Value]: Value[Key] } & {};
|
|
|
492
730
|
export type WorkflowWorkspaceDefinition<
|
|
493
731
|
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
494
732
|
Context extends JsonObject = JsonObject,
|
|
733
|
+
Data extends JsonObject = JsonObject,
|
|
495
734
|
> = {
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
ports?: readonly number[];
|
|
499
|
-
onCreated?: (context: WorkflowWorkspaceCreatedContext<Providers, Context>) => MaybePromise<void>;
|
|
500
|
-
onOpen?: (context: WorkflowWorkspaceOpenContext<Providers, Context>) => MaybePromise<void>;
|
|
501
|
-
};
|
|
502
|
-
|
|
503
|
-
export type WorkflowWorkspaceCreatedContext<
|
|
504
|
-
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
505
|
-
Context extends JsonObject = JsonObject,
|
|
506
|
-
> = WorkflowWorkspaceLifecycleContext<Providers, Context>;
|
|
507
|
-
|
|
508
|
-
export type WorkflowWorkspaceOpenContext<
|
|
509
|
-
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
510
|
-
Context extends JsonObject = JsonObject,
|
|
511
|
-
> = WorkflowWorkspaceLifecycleContext<Providers, Context>;
|
|
512
|
-
|
|
513
|
-
export type WorkflowWorkspaceLifecycleContext<
|
|
514
|
-
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
515
|
-
Context extends JsonObject = JsonObject,
|
|
516
|
-
> = {
|
|
517
|
-
workspace: WorkspaceRuntimeRecord;
|
|
518
|
-
ctx: Readonly<Context>;
|
|
519
|
-
providers: ProviderRuntimeMap<Providers>;
|
|
520
|
-
providerContext: ProviderWorkspaceContext;
|
|
521
|
-
local: LocalWorkspaceRuntime;
|
|
735
|
+
create: WorkflowWorkspaceCreateHandler<Providers, Context, Data>;
|
|
736
|
+
remove: WorkflowWorkspaceRemoveHandler<Providers, Context, Data>;
|
|
522
737
|
};
|
|
523
738
|
|
|
524
739
|
export type LoadedWorkflow = {
|
|
525
740
|
name: string;
|
|
526
741
|
providers: Record<string, LoadedProviderDefinition>;
|
|
527
742
|
root: WorkflowNodeDefinition<any, any, any>;
|
|
528
|
-
workspace?: WorkflowWorkspaceDefinition<any, any>;
|
|
529
|
-
create?: WorkflowCreateDefinition<any, any>;
|
|
743
|
+
workspace?: WorkflowWorkspaceDefinition<any, any, any>;
|
|
530
744
|
operations: readonly WorkflowOperationDefinition<any, any>[];
|
|
745
|
+
workspaceOperations: readonly WorkflowWorkspaceOperationDefinition<any, any, any, any>[];
|
|
531
746
|
};
|
|
532
747
|
|
|
533
748
|
export type WorkflowPlanNode = {
|
|
@@ -554,19 +769,11 @@ export type MachinePlan = WorkflowPlan;
|
|
|
554
769
|
export type WorkspaceRecord = {
|
|
555
770
|
id: string;
|
|
556
771
|
name: string;
|
|
557
|
-
providerId: string;
|
|
558
772
|
workflow: string;
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
sourceRef: JsonValue;
|
|
562
|
-
context: Record<string, JsonValue>;
|
|
773
|
+
workflowCtx: Record<string, JsonValue>;
|
|
774
|
+
ctx: Record<string, JsonValue>;
|
|
563
775
|
createdAt: string;
|
|
564
776
|
updatedAt: string;
|
|
565
|
-
metadata: Record<string, JsonValue>;
|
|
566
|
-
};
|
|
567
|
-
|
|
568
|
-
export type WorkspaceRuntimeRecord = WorkspaceRecord & {
|
|
569
|
-
cwd?: string;
|
|
570
777
|
};
|
|
571
778
|
|
|
572
779
|
export type WorkflowEvent =
|
|
@@ -597,7 +804,7 @@ export type WorkflowEvent =
|
|
|
597
804
|
title: string;
|
|
598
805
|
}
|
|
599
806
|
| { type: "artifact.created"; nodePath: string; providerId: string; kind: string; ref: JsonValue }
|
|
600
|
-
| { type: "workspace.ready"; workspaceId: string
|
|
807
|
+
| { type: "workspace.ready"; workspaceId: string };
|
|
601
808
|
|
|
602
809
|
export type DevMachineEvent = WorkflowEvent;
|
|
603
810
|
|