@rigkit/engine 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/authoring.ts +82 -50
- package/src/authoring.typecheck.ts +67 -0
- package/src/db/schema/core.ts +3 -7
- package/src/engine.test.ts +77 -103
- package/src/engine.ts +285 -474
- package/src/provider/types.ts +2 -30
- package/src/state.ts +6 -14
- package/src/types.ts +223 -109
- package/src/version.ts +1 -1
package/src/provider/types.ts
CHANGED
|
@@ -7,8 +7,6 @@ import type {
|
|
|
7
7
|
LoadedProviderDefinition,
|
|
8
8
|
LocalWorkspaceRuntime,
|
|
9
9
|
MaybePromise,
|
|
10
|
-
ProviderWorkspaceContext,
|
|
11
|
-
WorkspaceRecord,
|
|
12
10
|
} from "../types.ts";
|
|
13
11
|
|
|
14
12
|
export type VmHandle = {
|
|
@@ -33,9 +31,7 @@ export type SshConnection = {
|
|
|
33
31
|
command: string;
|
|
34
32
|
};
|
|
35
33
|
|
|
36
|
-
export interface BaseDevMachineProvider
|
|
37
|
-
WorkspaceContext extends ProviderWorkspaceContext = ProviderWorkspaceContext,
|
|
38
|
-
> {
|
|
34
|
+
export interface BaseDevMachineProvider {
|
|
39
35
|
readonly providerId: string;
|
|
40
36
|
createVm(): Promise<VmHandle>;
|
|
41
37
|
createVmFromSnapshot(input: { snapshotId: string }): Promise<VmHandle>;
|
|
@@ -44,7 +40,6 @@ export interface BaseDevMachineProvider<
|
|
|
44
40
|
writeFile(vm: VmHandle, path: string, content: string): Promise<void>;
|
|
45
41
|
snapshot(vm: VmHandle): Promise<SnapshotHandle>;
|
|
46
42
|
ssh(vm: VmHandle, options?: SshOptions): Promise<SshConnection>;
|
|
47
|
-
workspaceContext?(vm: VmHandle, input: { workspace: WorkspaceRecord }): MaybePromise<WorkspaceContext>;
|
|
48
43
|
deleteVm(vm: VmHandle): Promise<void>;
|
|
49
44
|
}
|
|
50
45
|
|
|
@@ -78,33 +73,10 @@ export type ProviderRuntimeContext = {
|
|
|
78
73
|
metadata(metadata: JsonObject): void;
|
|
79
74
|
};
|
|
80
75
|
|
|
81
|
-
export
|
|
82
|
-
providerId?: string;
|
|
83
|
-
resourceId: string;
|
|
84
|
-
snapshotId?: string;
|
|
85
|
-
sourceRef?: JsonValue;
|
|
86
|
-
metadata?: JsonObject;
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
export interface WorkflowWorkspaceProvider<
|
|
90
|
-
WorkspaceContext extends ProviderWorkspaceContext = ProviderWorkspaceContext,
|
|
91
|
-
> {
|
|
92
|
-
canUse(sourceRef: JsonValue): boolean;
|
|
93
|
-
createWorkspace(sourceRef: JsonValue, input: { name: string }): Promise<WorkflowWorkspaceCreateResult>;
|
|
94
|
-
deleteWorkspace(workspace: WorkspaceRecord): Promise<void>;
|
|
95
|
-
snapshotWorkspace(workspace: WorkspaceRecord): Promise<WorkflowWorkspaceCreateResult>;
|
|
96
|
-
ssh(workspaceOrResourceId: string, options?: SshOptions): Promise<SshConnection>;
|
|
97
|
-
workspaceContext?(workspace: WorkspaceRecord): MaybePromise<WorkspaceContext>;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export interface WorkflowProviderController<
|
|
101
|
-
Runtime = unknown,
|
|
102
|
-
WorkspaceContext extends ProviderWorkspaceContext = ProviderWorkspaceContext,
|
|
103
|
-
> {
|
|
76
|
+
export interface WorkflowProviderController<Runtime = unknown> {
|
|
104
77
|
readonly providerId: string;
|
|
105
78
|
runtime(context: ProviderRuntimeContext): MaybePromise<Runtime>;
|
|
106
79
|
validateArtifact?(ref: JsonValue): MaybePromise<boolean>;
|
|
107
|
-
workspace?: WorkflowWorkspaceProvider<WorkspaceContext>;
|
|
108
80
|
}
|
|
109
81
|
|
|
110
82
|
export type ProviderFactoryInput = {
|
package/src/state.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import { and, asc, desc, eq
|
|
2
|
+
import { and, asc, desc, eq } from "drizzle-orm";
|
|
3
3
|
import type { ProviderStorage, ProviderStorageRecord } from "./provider/types.ts";
|
|
4
4
|
import type { JsonValue, WorkspaceRecord } from "./types.ts";
|
|
5
5
|
import {
|
|
@@ -96,7 +96,7 @@ export class StateStore implements StateService {
|
|
|
96
96
|
const row = this.db
|
|
97
97
|
.select()
|
|
98
98
|
.from(workspaces)
|
|
99
|
-
.where(
|
|
99
|
+
.where(eq(workspaces.name, nameOrResourceId))
|
|
100
100
|
.get();
|
|
101
101
|
return row ? toWorkspaceRecord(row) : undefined;
|
|
102
102
|
}
|
|
@@ -114,14 +114,10 @@ export class StateStore implements StateService {
|
|
|
114
114
|
target: workspaces.name,
|
|
115
115
|
set: {
|
|
116
116
|
id: workspace.id,
|
|
117
|
-
providerId: workspace.providerId,
|
|
118
117
|
workflow: workspace.workflow,
|
|
119
|
-
|
|
120
|
-
snapshotId: workspace.snapshotId,
|
|
121
|
-
sourceRef: workspace.sourceRef,
|
|
122
|
-
context: workspace.context,
|
|
118
|
+
workflowCtx: workspace.workflowCtx,
|
|
123
119
|
updatedAt: workspace.updatedAt,
|
|
124
|
-
|
|
120
|
+
ctx: workspace.ctx,
|
|
125
121
|
},
|
|
126
122
|
})
|
|
127
123
|
.run();
|
|
@@ -218,15 +214,11 @@ function toWorkspaceRecord(row: typeof workspaces.$inferSelect): WorkspaceRecord
|
|
|
218
214
|
return {
|
|
219
215
|
id: row.id,
|
|
220
216
|
name: row.name,
|
|
221
|
-
providerId: row.providerId,
|
|
222
217
|
workflow: row.workflow,
|
|
223
|
-
|
|
224
|
-
snapshotId: row.snapshotId ?? undefined,
|
|
225
|
-
sourceRef: row.sourceRef,
|
|
226
|
-
context: row.context,
|
|
218
|
+
workflowCtx: row.workflowCtx,
|
|
227
219
|
createdAt: row.createdAt,
|
|
228
220
|
updatedAt: row.updatedAt,
|
|
229
|
-
|
|
221
|
+
ctx: row.ctx,
|
|
230
222
|
};
|
|
231
223
|
}
|
|
232
224
|
|
package/src/types.ts
CHANGED
|
@@ -52,8 +52,6 @@ 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>;
|
|
@@ -94,22 +92,19 @@ export type WorkflowProviderDefinition<
|
|
|
94
92
|
ProviderId extends string = string,
|
|
95
93
|
Config extends object = Record<string, unknown>,
|
|
96
94
|
Runtime = unknown,
|
|
97
|
-
WorkspaceContext extends ProviderWorkspaceContext = ProviderWorkspaceContext,
|
|
98
95
|
> = {
|
|
99
96
|
readonly kind: "rigkit.provider";
|
|
100
97
|
readonly providerId: ProviderId;
|
|
101
98
|
readonly config: ResolvableObject<Config>;
|
|
102
99
|
readonly plugin?: unknown;
|
|
103
100
|
readonly __runtime?: Runtime;
|
|
104
|
-
readonly __workspaceContext?: WorkspaceContext;
|
|
105
101
|
};
|
|
106
102
|
|
|
107
103
|
export type DevProviderDefinition<
|
|
108
104
|
ProviderId extends string = string,
|
|
109
105
|
Config extends object = Record<string, unknown>,
|
|
110
106
|
Runtime = unknown,
|
|
111
|
-
|
|
112
|
-
> = WorkflowProviderDefinition<ProviderId, Config, Runtime, WorkspaceContext>;
|
|
107
|
+
> = WorkflowProviderDefinition<ProviderId, Config, Runtime>;
|
|
113
108
|
|
|
114
109
|
export type LoadedProviderDefinition<
|
|
115
110
|
ProviderId extends string = string,
|
|
@@ -120,18 +115,13 @@ export type LoadedProviderDefinition<
|
|
|
120
115
|
plugin?: unknown;
|
|
121
116
|
};
|
|
122
117
|
|
|
123
|
-
export type WorkflowProviderMap = Record<string, WorkflowProviderDefinition<string, any, any
|
|
118
|
+
export type WorkflowProviderMap = Record<string, WorkflowProviderDefinition<string, any, any>>;
|
|
124
119
|
|
|
125
120
|
export type ProviderRuntimeOf<Provider> =
|
|
126
|
-
Provider extends WorkflowProviderDefinition<any, any, infer Runtime
|
|
121
|
+
Provider extends WorkflowProviderDefinition<any, any, infer Runtime>
|
|
127
122
|
? Runtime
|
|
128
123
|
: never;
|
|
129
124
|
|
|
130
|
-
export type ProviderWorkspaceContextOf<Provider> =
|
|
131
|
-
Provider extends WorkflowProviderDefinition<any, any, any, infer WorkspaceContext extends ProviderWorkspaceContext>
|
|
132
|
-
? WorkspaceContext
|
|
133
|
-
: ProviderWorkspaceContext;
|
|
134
|
-
|
|
135
125
|
export type ProviderRuntimeMap<Providers extends WorkflowProviderMap> = {
|
|
136
126
|
readonly [Key in keyof Providers]: ProviderRuntimeOf<Providers[Key]>;
|
|
137
127
|
};
|
|
@@ -160,32 +150,6 @@ export type WorkflowTaskHandler<
|
|
|
160
150
|
Result extends WorkflowTaskResult = WorkflowTaskResult,
|
|
161
151
|
> = (context: WorkflowTaskRuntime<Providers, Context>) => MaybePromise<Result>;
|
|
162
152
|
|
|
163
|
-
export type WorkflowCreateRuntime<
|
|
164
|
-
Providers extends WorkflowProviderMap,
|
|
165
|
-
Context extends JsonObject,
|
|
166
|
-
> = ProviderRuntimeMap<Providers> & {
|
|
167
|
-
readonly ctx: Readonly<Context>;
|
|
168
|
-
readonly name: string;
|
|
169
|
-
readonly providers: ProviderRuntimeMap<Providers>;
|
|
170
|
-
readonly local: LocalWorkspaceRuntime;
|
|
171
|
-
readonly workflow: string;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
export type WorkflowCreateResult = JsonObject;
|
|
175
|
-
|
|
176
|
-
export type WorkflowCreateHandler<
|
|
177
|
-
Providers extends WorkflowProviderMap,
|
|
178
|
-
Context extends JsonObject,
|
|
179
|
-
Result extends WorkflowCreateResult = WorkflowCreateResult,
|
|
180
|
-
> = (context: WorkflowCreateRuntime<Providers, Context>) => MaybePromise<Result>;
|
|
181
|
-
|
|
182
|
-
export type WorkflowCreateDefinition<
|
|
183
|
-
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
184
|
-
Context extends JsonObject = JsonObject,
|
|
185
|
-
> = {
|
|
186
|
-
readonly handler: WorkflowCreateHandler<Providers, Context, any>;
|
|
187
|
-
};
|
|
188
|
-
|
|
189
153
|
export type WorkflowInputFieldKind = "workspace" | "string" | "boolean" | "number";
|
|
190
154
|
|
|
191
155
|
export type WorkflowInputFieldDefinition<Value = unknown> = {
|
|
@@ -199,9 +163,7 @@ export type WorkflowInputFieldDefinition<Value = unknown> = {
|
|
|
199
163
|
};
|
|
200
164
|
|
|
201
165
|
export type WorkflowOperationWorkspaceInput<Name extends string> = {
|
|
202
|
-
[Key in Name]: WorkspaceRuntimeRecord
|
|
203
|
-
data: Record<string, JsonValue>;
|
|
204
|
-
};
|
|
166
|
+
[Key in Name]: WorkspaceRuntimeRecord;
|
|
205
167
|
};
|
|
206
168
|
|
|
207
169
|
export type WorkflowInputShape = Record<string, WorkflowInputFieldDefinition<any>>;
|
|
@@ -272,25 +234,84 @@ export type WorkflowOperationHandler<
|
|
|
272
234
|
Result extends WorkflowOperationResult = WorkflowOperationResult,
|
|
273
235
|
> = (context: WorkflowOperationRuntime<Providers, Input>) => MaybePromise<Result>;
|
|
274
236
|
|
|
275
|
-
export type
|
|
276
|
-
readonly
|
|
277
|
-
readonly
|
|
237
|
+
export type WorkflowRuntimeContext<Context extends JsonObject> = {
|
|
238
|
+
readonly name: string;
|
|
239
|
+
readonly ctx: Readonly<Context>;
|
|
278
240
|
};
|
|
279
241
|
|
|
280
|
-
export type
|
|
281
|
-
readonly
|
|
282
|
-
|
|
242
|
+
export type ReadonlyWorkspaceContext<Context extends JsonObject> = {
|
|
243
|
+
readonly [Key in keyof Context]: Context[Key];
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
export type WorkspaceCreateRuntimeRecord = {
|
|
247
|
+
readonly name: string;
|
|
283
248
|
};
|
|
284
249
|
|
|
250
|
+
export type WorkspaceRuntimeRecord<Context extends object = JsonObject> = {
|
|
251
|
+
readonly name: string;
|
|
252
|
+
readonly ctx: Context;
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
export type WorkflowWorkspaceCreateRuntime<
|
|
256
|
+
Providers extends WorkflowProviderMap,
|
|
257
|
+
Context extends JsonObject,
|
|
258
|
+
> = ProviderRuntimeMap<Providers> & {
|
|
259
|
+
readonly workflow: WorkflowRuntimeContext<Context>;
|
|
260
|
+
readonly workspace: WorkspaceCreateRuntimeRecord;
|
|
261
|
+
readonly providers: ProviderRuntimeMap<Providers>;
|
|
262
|
+
readonly local: LocalWorkspaceRuntime;
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
export type WorkflowWorkspaceCreateHandler<
|
|
266
|
+
Providers extends WorkflowProviderMap,
|
|
267
|
+
Context extends JsonObject,
|
|
268
|
+
Data extends JsonObject,
|
|
269
|
+
> = (context: WorkflowWorkspaceCreateRuntime<Providers, Context>) => MaybePromise<Data>;
|
|
270
|
+
|
|
271
|
+
export type WorkflowWorkspaceRemoveRuntime<
|
|
272
|
+
Providers extends WorkflowProviderMap,
|
|
273
|
+
Context extends JsonObject,
|
|
274
|
+
Data extends JsonObject,
|
|
275
|
+
> = ProviderRuntimeMap<Providers> & {
|
|
276
|
+
readonly workflow: WorkflowRuntimeContext<Context>;
|
|
277
|
+
readonly workspace: WorkspaceRuntimeRecord<ReadonlyWorkspaceContext<Data>>;
|
|
278
|
+
readonly providers: ProviderRuntimeMap<Providers>;
|
|
279
|
+
readonly local: LocalWorkspaceRuntime;
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
export type WorkflowWorkspaceRemoveHandler<
|
|
283
|
+
Providers extends WorkflowProviderMap,
|
|
284
|
+
Context extends JsonObject,
|
|
285
|
+
Data extends JsonObject,
|
|
286
|
+
> = (context: WorkflowWorkspaceRemoveRuntime<Providers, Context, Data>) => MaybePromise<void>;
|
|
287
|
+
|
|
288
|
+
export type WorkflowWorkspaceOperationRuntime<
|
|
289
|
+
Providers extends WorkflowProviderMap,
|
|
290
|
+
Context extends JsonObject,
|
|
291
|
+
Data extends object,
|
|
292
|
+
Input extends object,
|
|
293
|
+
> = ProviderRuntimeMap<Providers> & {
|
|
294
|
+
readonly workflow: WorkflowRuntimeContext<Context>;
|
|
295
|
+
readonly input: Readonly<Input>;
|
|
296
|
+
readonly workspace: WorkspaceRuntimeRecord<Data>;
|
|
297
|
+
readonly providers: ProviderRuntimeMap<Providers>;
|
|
298
|
+
readonly local: LocalWorkspaceRuntime;
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
export type WorkflowWorkspaceOperationHandler<
|
|
302
|
+
Providers extends WorkflowProviderMap,
|
|
303
|
+
Context extends JsonObject,
|
|
304
|
+
Data extends object,
|
|
305
|
+
Input extends object,
|
|
306
|
+
Result extends WorkflowOperationResult = WorkflowOperationResult,
|
|
307
|
+
> = (context: WorkflowWorkspaceOperationRuntime<Providers, Context, Data, Input>) => MaybePromise<Result>;
|
|
308
|
+
|
|
285
309
|
export type WorkflowOperationOptions<
|
|
286
310
|
Providers extends WorkflowProviderMap,
|
|
287
311
|
Input extends object = {},
|
|
288
312
|
> = {
|
|
289
313
|
title?: string;
|
|
290
314
|
description?: string;
|
|
291
|
-
createsWorkspace?: boolean;
|
|
292
|
-
requiredHostMethods?: readonly WorkflowHostMethodRequirement[];
|
|
293
|
-
requiredHostCapabilities?: readonly WorkflowHostCapabilityRequirement[];
|
|
294
315
|
input?: WorkflowOperationInputBuilder<Input> | ((workflow: WorkflowOperationInputHelpers) => WorkflowOperationInputBuilder<Input>);
|
|
295
316
|
run: WorkflowOperationHandler<Providers, Input>;
|
|
296
317
|
};
|
|
@@ -302,13 +323,35 @@ export type WorkflowOperationDefinition<
|
|
|
302
323
|
readonly id: string;
|
|
303
324
|
readonly title?: string;
|
|
304
325
|
readonly description?: string;
|
|
305
|
-
readonly createsWorkspace?: boolean;
|
|
306
|
-
readonly requiredHostMethods?: readonly WorkflowHostMethodRequirement[];
|
|
307
|
-
readonly requiredHostCapabilities?: readonly WorkflowHostCapabilityRequirement[];
|
|
308
326
|
readonly input?: WorkflowOperationInputBuilder<Input>;
|
|
309
327
|
readonly run: WorkflowOperationHandler<Providers, Input>;
|
|
310
328
|
};
|
|
311
329
|
|
|
330
|
+
export type WorkflowWorkspaceOperationOptions<
|
|
331
|
+
Providers extends WorkflowProviderMap,
|
|
332
|
+
Context extends JsonObject,
|
|
333
|
+
Data extends object,
|
|
334
|
+
Input extends object = {},
|
|
335
|
+
> = {
|
|
336
|
+
title?: string;
|
|
337
|
+
description?: string;
|
|
338
|
+
input?: WorkflowOperationInputBuilder<Input> | ((workflow: WorkflowOperationInputHelpers) => WorkflowOperationInputBuilder<Input>);
|
|
339
|
+
run: WorkflowWorkspaceOperationHandler<Providers, Context, Data, Input>;
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
export type WorkflowWorkspaceOperationDefinition<
|
|
343
|
+
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
344
|
+
Context extends JsonObject = JsonObject,
|
|
345
|
+
Data extends object = JsonObject,
|
|
346
|
+
Input extends object = object,
|
|
347
|
+
> = {
|
|
348
|
+
readonly id: string;
|
|
349
|
+
readonly title?: string;
|
|
350
|
+
readonly description?: string;
|
|
351
|
+
readonly input?: WorkflowOperationInputBuilder<Input>;
|
|
352
|
+
readonly run: WorkflowWorkspaceOperationHandler<Providers, Context, Data, Input>;
|
|
353
|
+
};
|
|
354
|
+
|
|
312
355
|
export type OutputSchema<Output extends JsonObject = JsonObject> =
|
|
313
356
|
| { parse(value: unknown): Output }
|
|
314
357
|
| {
|
|
@@ -389,8 +432,8 @@ export type WorkflowNodeDefinition<
|
|
|
389
432
|
readonly name: string;
|
|
390
433
|
readonly workflow: WorkflowDefinition<string, Providers>;
|
|
391
434
|
readonly workspaceDefinition?: WorkflowWorkspaceDefinition<Providers, OutputContext>;
|
|
392
|
-
readonly createDefinition?: WorkflowCreateDefinition<Providers, OutputContext>;
|
|
393
435
|
readonly operations?: readonly WorkflowOperationDefinition<Providers, any>[];
|
|
436
|
+
readonly workspaceOperations?: readonly WorkflowWorkspaceOperationDefinition<Providers, OutputContext, any, any>[];
|
|
394
437
|
readonly __providers?: Providers;
|
|
395
438
|
readonly __input?: InputContext;
|
|
396
439
|
readonly __output?: OutputContext;
|
|
@@ -410,6 +453,9 @@ export type WorkflowSequenceBuilder<
|
|
|
410
453
|
Providers extends WorkflowProviderMap,
|
|
411
454
|
InputContext extends JsonObject,
|
|
412
455
|
OutputContext extends JsonObject,
|
|
456
|
+
WorkspaceData extends object = JsonObject,
|
|
457
|
+
OperationIds extends string = never,
|
|
458
|
+
WorkspaceOperationIds extends string = never,
|
|
413
459
|
> = WorkflowNodeDefinition<Providers, InputContext, OutputContext> & {
|
|
414
460
|
readonly nodeKind: "sequence";
|
|
415
461
|
readonly children: readonly WorkflowNodeDefinition<Providers, any, any>[];
|
|
@@ -417,28 +463,63 @@ export type WorkflowSequenceBuilder<
|
|
|
417
463
|
task<Result extends WorkflowTaskResult>(
|
|
418
464
|
name: string,
|
|
419
465
|
handler: WorkflowTaskHandler<Providers, OutputContext, Result>,
|
|
420
|
-
): WorkflowSequenceBuilder<
|
|
466
|
+
): WorkflowSequenceBuilder<
|
|
467
|
+
Providers,
|
|
468
|
+
InputContext,
|
|
469
|
+
Merge<OutputContext, TaskReturnContext<Result>>,
|
|
470
|
+
WorkspaceData,
|
|
471
|
+
OperationIds,
|
|
472
|
+
WorkspaceOperationIds
|
|
473
|
+
>;
|
|
421
474
|
|
|
422
475
|
task<Schema extends OutputSchema<JsonObject>, Result extends MaybePromise<OutputSchemaValue<Schema> | void>>(
|
|
423
476
|
name: string,
|
|
424
477
|
options: WorkflowTaskOptions<OutputSchemaValue<Schema>>,
|
|
425
478
|
handler: WorkflowTaskHandler<Providers, OutputContext, Awaited<Result> & WorkflowTaskResult>,
|
|
426
|
-
): WorkflowSequenceBuilder<
|
|
479
|
+
): WorkflowSequenceBuilder<
|
|
480
|
+
Providers,
|
|
481
|
+
InputContext,
|
|
482
|
+
Merge<OutputContext, TaskReturnContext<Result>>,
|
|
483
|
+
WorkspaceData,
|
|
484
|
+
OperationIds,
|
|
485
|
+
WorkspaceOperationIds
|
|
486
|
+
>;
|
|
427
487
|
|
|
428
488
|
step<Result extends WorkflowTaskResult>(
|
|
429
489
|
name: string,
|
|
430
490
|
handler: WorkflowTaskHandler<Providers, OutputContext, Result>,
|
|
431
|
-
): WorkflowSequenceBuilder<
|
|
491
|
+
): WorkflowSequenceBuilder<
|
|
492
|
+
Providers,
|
|
493
|
+
InputContext,
|
|
494
|
+
Merge<OutputContext, TaskReturnContext<Result>>,
|
|
495
|
+
WorkspaceData,
|
|
496
|
+
OperationIds,
|
|
497
|
+
WorkspaceOperationIds
|
|
498
|
+
>;
|
|
432
499
|
|
|
433
500
|
step<Schema extends OutputSchema<JsonObject>, Result extends MaybePromise<OutputSchemaValue<Schema> | void>>(
|
|
434
501
|
name: string,
|
|
435
502
|
options: WorkflowTaskOptions<OutputSchemaValue<Schema>>,
|
|
436
503
|
handler: WorkflowTaskHandler<Providers, OutputContext, Awaited<Result> & WorkflowTaskResult>,
|
|
437
|
-
): WorkflowSequenceBuilder<
|
|
504
|
+
): WorkflowSequenceBuilder<
|
|
505
|
+
Providers,
|
|
506
|
+
InputContext,
|
|
507
|
+
Merge<OutputContext, TaskReturnContext<Result>>,
|
|
508
|
+
WorkspaceData,
|
|
509
|
+
OperationIds,
|
|
510
|
+
WorkspaceOperationIds
|
|
511
|
+
>;
|
|
438
512
|
|
|
439
513
|
add<Node extends WorkflowNodeDefinition<Providers, any, any>>(
|
|
440
514
|
node: OutputContext extends WorkflowNodeInput<Node> ? Node : never,
|
|
441
|
-
): WorkflowSequenceBuilder<
|
|
515
|
+
): WorkflowSequenceBuilder<
|
|
516
|
+
Providers,
|
|
517
|
+
InputContext,
|
|
518
|
+
Merge<OutputContext, WorkflowNodeOutput<Node>>,
|
|
519
|
+
WorkspaceData,
|
|
520
|
+
OperationIds,
|
|
521
|
+
WorkspaceOperationIds
|
|
522
|
+
>;
|
|
442
523
|
|
|
443
524
|
parallel<const Branches extends Record<string, WorkflowNodeDefinition<Providers, any, any>>>(
|
|
444
525
|
branches: {
|
|
@@ -446,22 +527,86 @@ export type WorkflowSequenceBuilder<
|
|
|
446
527
|
? Branches[Key]
|
|
447
528
|
: never;
|
|
448
529
|
},
|
|
449
|
-
): WorkflowSequenceBuilder<
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
530
|
+
): WorkflowSequenceBuilder<
|
|
531
|
+
Providers,
|
|
532
|
+
InputContext,
|
|
533
|
+
Merge<OutputContext, ParallelOutput<Branches>>,
|
|
534
|
+
WorkspaceData,
|
|
535
|
+
OperationIds,
|
|
536
|
+
WorkspaceOperationIds
|
|
537
|
+
>;
|
|
454
538
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
): WorkflowSequenceBuilder<
|
|
539
|
+
workspace<Data extends JsonObject>(
|
|
540
|
+
definition: WorkflowWorkspaceDefinition<Providers, OutputContext, Data>,
|
|
541
|
+
): WorkflowSequenceBuilder<
|
|
542
|
+
Providers,
|
|
543
|
+
InputContext,
|
|
544
|
+
OutputContext,
|
|
545
|
+
ReadonlyWorkspaceContext<Data>,
|
|
546
|
+
OperationIds,
|
|
547
|
+
WorkspaceOperationIds
|
|
548
|
+
>;
|
|
458
549
|
|
|
459
550
|
operation<const Id extends string, Input extends object = {}>(
|
|
460
|
-
id: Id,
|
|
551
|
+
id: Id & WorkflowOperationIdConstraint<Id, OperationIds>,
|
|
461
552
|
options: WorkflowOperationOptions<Providers, Input>,
|
|
462
|
-
): WorkflowSequenceBuilder<
|
|
553
|
+
): WorkflowSequenceBuilder<
|
|
554
|
+
Providers,
|
|
555
|
+
InputContext,
|
|
556
|
+
OutputContext,
|
|
557
|
+
WorkspaceData,
|
|
558
|
+
OperationIds | Id,
|
|
559
|
+
WorkspaceOperationIds
|
|
560
|
+
>;
|
|
561
|
+
|
|
562
|
+
workspaceOperation<const Id extends string, Input extends object = {}>(
|
|
563
|
+
id: Id & WorkflowOperationIdConstraint<Id, WorkspaceOperationIds>,
|
|
564
|
+
options: WorkflowWorkspaceOperationOptions<Providers, OutputContext, WorkspaceData, Input>,
|
|
565
|
+
): WorkflowSequenceBuilder<
|
|
566
|
+
Providers,
|
|
567
|
+
InputContext,
|
|
568
|
+
OutputContext,
|
|
569
|
+
WorkspaceData,
|
|
570
|
+
OperationIds,
|
|
571
|
+
WorkspaceOperationIds | Id
|
|
572
|
+
>;
|
|
463
573
|
};
|
|
464
574
|
|
|
575
|
+
export const RESERVED_WORKFLOW_OPERATION_IDS = [
|
|
576
|
+
"apply",
|
|
577
|
+
"completion",
|
|
578
|
+
"create",
|
|
579
|
+
"doctor",
|
|
580
|
+
"fork",
|
|
581
|
+
"help",
|
|
582
|
+
"init",
|
|
583
|
+
"ls",
|
|
584
|
+
"plan",
|
|
585
|
+
"projects",
|
|
586
|
+
"remove",
|
|
587
|
+
"run",
|
|
588
|
+
"version",
|
|
589
|
+
] as const;
|
|
590
|
+
|
|
591
|
+
export type ReservedWorkflowOperationId = typeof RESERVED_WORKFLOW_OPERATION_IDS[number];
|
|
592
|
+
|
|
593
|
+
type WorkflowOperationIdError<Message extends string> = {
|
|
594
|
+
readonly __rigkitOperationIdError: Message;
|
|
595
|
+
};
|
|
596
|
+
|
|
597
|
+
export type WorkflowOperationIdConstraint<
|
|
598
|
+
Id extends string,
|
|
599
|
+
Existing extends string,
|
|
600
|
+
> = string extends Id
|
|
601
|
+
? unknown
|
|
602
|
+
: Id extends Existing
|
|
603
|
+
? WorkflowOperationIdError<`Operation id "${Id}" is already defined`>
|
|
604
|
+
: Id extends ReservedWorkflowOperationId
|
|
605
|
+
? WorkflowOperationIdError<`Operation id "${Id}" is reserved by Rigkit`>
|
|
606
|
+
: Id extends `${string}/${string}`
|
|
607
|
+
? WorkflowOperationIdError<`Operation id "${Id}" cannot contain "/"`>
|
|
608
|
+
: unknown;
|
|
609
|
+
|
|
465
610
|
export type WorkflowNodeInput<Node> =
|
|
466
611
|
Node extends WorkflowNodeDefinition<any, infer Input extends JsonObject, any>
|
|
467
612
|
? Input
|
|
@@ -492,42 +637,19 @@ export type Simplify<Value> = { [Key in keyof Value]: Value[Key] } & {};
|
|
|
492
637
|
export type WorkflowWorkspaceDefinition<
|
|
493
638
|
Providers extends WorkflowProviderMap = WorkflowProviderMap,
|
|
494
639
|
Context extends JsonObject = JsonObject,
|
|
640
|
+
Data extends JsonObject = JsonObject,
|
|
495
641
|
> = {
|
|
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;
|
|
642
|
+
create: WorkflowWorkspaceCreateHandler<Providers, Context, Data>;
|
|
643
|
+
remove: WorkflowWorkspaceRemoveHandler<Providers, Context, Data>;
|
|
522
644
|
};
|
|
523
645
|
|
|
524
646
|
export type LoadedWorkflow = {
|
|
525
647
|
name: string;
|
|
526
648
|
providers: Record<string, LoadedProviderDefinition>;
|
|
527
649
|
root: WorkflowNodeDefinition<any, any, any>;
|
|
528
|
-
workspace?: WorkflowWorkspaceDefinition<any, any>;
|
|
529
|
-
create?: WorkflowCreateDefinition<any, any>;
|
|
650
|
+
workspace?: WorkflowWorkspaceDefinition<any, any, any>;
|
|
530
651
|
operations: readonly WorkflowOperationDefinition<any, any>[];
|
|
652
|
+
workspaceOperations: readonly WorkflowWorkspaceOperationDefinition<any, any, any, any>[];
|
|
531
653
|
};
|
|
532
654
|
|
|
533
655
|
export type WorkflowPlanNode = {
|
|
@@ -554,19 +676,11 @@ export type MachinePlan = WorkflowPlan;
|
|
|
554
676
|
export type WorkspaceRecord = {
|
|
555
677
|
id: string;
|
|
556
678
|
name: string;
|
|
557
|
-
providerId: string;
|
|
558
679
|
workflow: string;
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
sourceRef: JsonValue;
|
|
562
|
-
context: Record<string, JsonValue>;
|
|
680
|
+
workflowCtx: Record<string, JsonValue>;
|
|
681
|
+
ctx: Record<string, JsonValue>;
|
|
563
682
|
createdAt: string;
|
|
564
683
|
updatedAt: string;
|
|
565
|
-
metadata: Record<string, JsonValue>;
|
|
566
|
-
};
|
|
567
|
-
|
|
568
|
-
export type WorkspaceRuntimeRecord = WorkspaceRecord & {
|
|
569
|
-
cwd?: string;
|
|
570
684
|
};
|
|
571
685
|
|
|
572
686
|
export type WorkflowEvent =
|
|
@@ -597,7 +711,7 @@ export type WorkflowEvent =
|
|
|
597
711
|
title: string;
|
|
598
712
|
}
|
|
599
713
|
| { type: "artifact.created"; nodePath: string; providerId: string; kind: string; ref: JsonValue }
|
|
600
|
-
| { type: "workspace.ready"; workspaceId: string
|
|
714
|
+
| { type: "workspace.ready"; workspaceId: string };
|
|
601
715
|
|
|
602
716
|
export type DevMachineEvent = WorkflowEvent;
|
|
603
717
|
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const RIGKIT_ENGINE_VERSION = "0.2.
|
|
1
|
+
export const RIGKIT_ENGINE_VERSION = "0.2.3";
|