@rigkit/engine 0.2.1 → 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.
@@ -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 type WorkflowWorkspaceCreateResult = {
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, or } from "drizzle-orm";
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(or(eq(workspaces.name, nameOrResourceId), eq(workspaces.resourceId, nameOrResourceId)))
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
- resourceId: workspace.resourceId,
120
- snapshotId: workspace.snapshotId,
121
- sourceRef: workspace.sourceRef,
122
- context: workspace.context,
118
+ workflowCtx: workspace.workflowCtx,
123
119
  updatedAt: workspace.updatedAt,
124
- metadata: workspace.metadata,
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
- resourceId: row.resourceId,
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
- metadata: row.metadata,
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
- WorkspaceContext extends ProviderWorkspaceContext = ProviderWorkspaceContext,
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, 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, any>
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 WorkflowHostMethodRequirement = {
276
- readonly id: string;
277
- readonly modes?: readonly string[];
237
+ export type WorkflowRuntimeContext<Context extends JsonObject> = {
238
+ readonly name: string;
239
+ readonly ctx: Readonly<Context>;
278
240
  };
279
241
 
280
- export type WorkflowHostCapabilityRequirement = {
281
- readonly id: string;
282
- readonly schemaHash?: string;
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<Providers, InputContext, Merge<OutputContext, TaskReturnContext<Result>>>;
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<Providers, InputContext, Merge<OutputContext, TaskReturnContext<Result>>>;
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<Providers, InputContext, Merge<OutputContext, TaskReturnContext<Result>>>;
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<Providers, InputContext, Merge<OutputContext, TaskReturnContext<Result>>>;
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<Providers, InputContext, Merge<OutputContext, WorkflowNodeOutput<Node>>>;
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<Providers, InputContext, Merge<OutputContext, ParallelOutput<Branches>>>;
450
-
451
- workspace(
452
- definition: WorkflowWorkspaceDefinition<Providers, OutputContext>,
453
- ): WorkflowSequenceBuilder<Providers, InputContext, OutputContext>;
530
+ ): WorkflowSequenceBuilder<
531
+ Providers,
532
+ InputContext,
533
+ Merge<OutputContext, ParallelOutput<Branches>>,
534
+ WorkspaceData,
535
+ OperationIds,
536
+ WorkspaceOperationIds
537
+ >;
454
538
 
455
- create<Result extends WorkflowCreateResult>(
456
- handler: WorkflowCreateHandler<Providers, OutputContext, Result>,
457
- ): WorkflowSequenceBuilder<Providers, InputContext, OutputContext>;
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<Providers, InputContext, OutputContext>;
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
- source?: (ctx: Readonly<Context>) => JsonValue;
497
- cwd?: string | ((ctx: Readonly<Context>) => string | undefined);
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
- resourceId: string;
560
- snapshotId?: string;
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; providerId: string; resourceId: string; snapshotId?: 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";
1
+ export const RIGKIT_ENGINE_VERSION = "0.2.3";