@tagma/sdk 0.7.0 → 0.7.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/README.md +84 -44
- package/dist/bootstrap.d.ts +20 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +21 -11
- package/dist/bootstrap.js.map +1 -1
- package/dist/core/dataflow.d.ts.map +1 -1
- package/dist/core/dataflow.js +45 -9
- package/dist/core/dataflow.js.map +1 -1
- package/dist/core/run-context.d.ts +3 -0
- package/dist/core/run-context.d.ts.map +1 -1
- package/dist/core/run-context.js +2 -0
- package/dist/core/run-context.js.map +1 -1
- package/dist/core/task-executor.d.ts.map +1 -1
- package/dist/core/task-executor.js +46 -84
- package/dist/core/task-executor.js.map +1 -1
- package/dist/engine.d.ts +6 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +3 -0
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins.d.ts +2 -2
- package/dist/plugins.d.ts.map +1 -1
- package/dist/ports.d.ts +4 -0
- package/dist/ports.d.ts.map +1 -1
- package/dist/ports.js +27 -4
- package/dist/ports.js.map +1 -1
- package/dist/registry.d.ts +10 -4
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +64 -25
- package/dist/registry.js.map +1 -1
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +8 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +1 -7
- package/dist/schema.js.map +1 -1
- package/dist/tagma.d.ts +11 -1
- package/dist/tagma.d.ts.map +1 -1
- package/dist/tagma.js +6 -0
- package/dist/tagma.js.map +1 -1
- package/dist/validate-raw.d.ts +4 -4
- package/dist/validate-raw.d.ts.map +1 -1
- package/dist/validate-raw.js +89 -230
- package/dist/validate-raw.js.map +1 -1
- package/package.json +2 -2
- package/src/bootstrap.ts +23 -14
- package/src/core/dataflow.test.ts +8 -9
- package/src/core/dataflow.ts +57 -14
- package/src/core/run-context.test.ts +12 -0
- package/src/core/run-context.ts +4 -0
- package/src/core/task-executor.ts +75 -135
- package/src/engine-ports-mixed.test.ts +68 -411
- package/src/engine-ports.test.ts +37 -341
- package/src/engine.ts +8 -0
- package/src/index.ts +5 -0
- package/src/pipeline-runner.test.ts +5 -9
- package/src/plugin-registry.test.ts +138 -1
- package/src/plugins.ts +5 -2
- package/src/ports.test.ts +80 -0
- package/src/ports.ts +36 -4
- package/src/registry.ts +81 -26
- package/src/runtime.ts +20 -0
- package/src/schema-ports.test.ts +47 -197
- package/src/schema.ts +1 -7
- package/src/tagma.test.ts +72 -1
- package/src/tagma.ts +16 -1
- package/src/validate-raw-ports.test.ts +80 -393
- package/src/validate-raw.ts +90 -250
package/README.md
CHANGED
|
@@ -75,8 +75,7 @@ config editing, plugin registry helpers, and low-level dataflow utilities.
|
|
|
75
75
|
- **Middleware** -- enrich prompts before execution (e.g. inject static context)
|
|
76
76
|
- **Completion checks** -- validate task output with `exit_code`, `file_exists`, or `output_check` plugins
|
|
77
77
|
- **Plugin schemas** -- triggers/completions/middlewares can declare a `PluginSchema` so visual editors render typed forms for their config
|
|
78
|
-
- **
|
|
79
|
-
- **Typed task ports** -- declare named, typed `ports.inputs` / `ports.outputs` when a task needs a strict, validated I/O contract
|
|
78
|
+
- **Unified task bindings** -- pass dynamic values with task-level `inputs` / `outputs`; add optional `type` metadata when a binding needs validation
|
|
80
79
|
|
|
81
80
|
## Pipeline YAML Reference
|
|
82
81
|
|
|
@@ -205,9 +204,8 @@ Each hook value can be a single command string or an array of commands.
|
|
|
205
204
|
| `middlewares` | `MiddlewareConfig[]` | No | Inherited from track | Middleware override. Set `[]` to disable inherited middlewares |
|
|
206
205
|
| `trigger` | `TriggerConfig` | No | — | Gate that must resolve before the task runs (see Triggers) |
|
|
207
206
|
| `completion` | `CompletionConfig` | No | — | Post-execution check to validate task output (see Completions) |
|
|
208
|
-
| `inputs` | `TaskInputBindings` | No | — |
|
|
209
|
-
| `outputs` | `TaskOutputBindings` | No | — |
|
|
210
|
-
| `ports` | `TaskPorts` | No | — | Typed input/output ports — see Typed Ports below |
|
|
207
|
+
| `inputs` | `TaskInputBindings` | No | — | Task input bindings for `{{inputs.<name>}}`; optional `type` enables coercion/validation |
|
|
208
|
+
| `outputs` | `TaskOutputBindings` | No | — | Named outputs published after success; optional `type` enables coercion/validation |
|
|
211
209
|
|
|
212
210
|
### Permissions
|
|
213
211
|
|
|
@@ -227,15 +225,17 @@ Track-level `middlewares` apply to all tasks in the track. Setting task-level `m
|
|
|
227
225
|
|
|
228
226
|
---
|
|
229
227
|
|
|
230
|
-
###
|
|
228
|
+
### Unified Task Bindings
|
|
231
229
|
|
|
232
|
-
Use task-level `inputs` / `outputs` for
|
|
230
|
+
Use task-level `inputs` / `outputs` for parameter passing. They are task-level only, do not inherit, and can stay lightweight by omitting `type`. Add `type`, `required`, `enum`, and `description` when a binding should be strict and editor-visible.
|
|
233
231
|
|
|
234
232
|
```yaml
|
|
235
233
|
- id: build
|
|
236
234
|
command: bun run build
|
|
237
235
|
outputs:
|
|
238
|
-
bundlePath:
|
|
236
|
+
bundlePath:
|
|
237
|
+
from: json.bundlePath
|
|
238
|
+
type: string
|
|
239
239
|
|
|
240
240
|
- id: test
|
|
241
241
|
depends_on: [build]
|
|
@@ -244,17 +244,18 @@ Use task-level `inputs` / `outputs` for ordinary parameter passing. They are tas
|
|
|
244
244
|
bundlePath:
|
|
245
245
|
from: t.build.outputs.bundlePath
|
|
246
246
|
required: true
|
|
247
|
+
type: string
|
|
247
248
|
```
|
|
248
249
|
|
|
249
|
-
Input bindings support `value`, `from`, `default`, and `
|
|
250
|
+
Input bindings support `value`, `from`, `default`, `required`, optional `type`, `enum`, and `description`. `from` accepts `taskId.outputs.name`, `taskId.stdout`, `taskId.stderr`, `taskId.normalizedOutput`, `taskId.exitCode`, or `outputs.name` to name-match direct upstream outputs.
|
|
250
251
|
|
|
251
|
-
Output bindings support `value`, `from`, and `
|
|
252
|
+
Output bindings support `value`, `from`, `default`, optional `type`, `enum`, and `description`. `from` defaults to `json.<outputName>` and also accepts `stdout`, `stderr`, or `normalizedOutput`.
|
|
252
253
|
|
|
253
|
-
|
|
254
|
+
Prompt tasks infer their structured input/output contract from neighboring command tasks that use typed `outputs` / `inputs`. The engine renders `[Inputs]` and `[Output Format]` blocks from that inferred contract.
|
|
254
255
|
|
|
255
256
|
---
|
|
256
257
|
|
|
257
|
-
### Typed
|
|
258
|
+
### Typed Binding Example
|
|
258
259
|
|
|
259
260
|
Tasks can declare named, typed `inputs` / `outputs`. Inputs flow in from upstream task outputs; outputs are extracted from a task's stdout (or the AI driver's `normalizedOutput`) on success.
|
|
260
261
|
|
|
@@ -262,40 +263,50 @@ Tasks can declare named, typed `inputs` / `outputs`. Inputs flow in from upstrea
|
|
|
262
263
|
- id: lookup-weather
|
|
263
264
|
name: Lookup weather
|
|
264
265
|
command: weather.sh --city "{{inputs.city}}"
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
266
|
+
inputs:
|
|
267
|
+
city:
|
|
268
|
+
type: string
|
|
269
|
+
required: true
|
|
270
|
+
description: Target city
|
|
271
|
+
outputs:
|
|
272
|
+
temperature:
|
|
273
|
+
type: number
|
|
274
|
+
description: Current temperature in Celsius
|
|
275
|
+
conditions:
|
|
276
|
+
type: enum
|
|
277
|
+
enum: [sunny, cloudy, rain, snow]
|
|
271
278
|
|
|
272
279
|
- id: write-report
|
|
273
280
|
depends_on: [lookup-weather]
|
|
274
281
|
prompt: 'Write a brief weather report for {{inputs.city}}.'
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
282
|
+
inputs:
|
|
283
|
+
city: { from: t.lookup-weather.outputs.city, type: string, required: true }
|
|
284
|
+
temperature: { from: t.lookup-weather.outputs.temperature, type: number, required: true }
|
|
285
|
+
conditions:
|
|
286
|
+
from: t.lookup-weather.outputs.conditions
|
|
287
|
+
type: enum
|
|
288
|
+
enum: [sunny, cloudy, rain, snow]
|
|
280
289
|
```
|
|
281
290
|
|
|
282
|
-
####
|
|
291
|
+
#### Binding fields
|
|
283
292
|
|
|
284
293
|
| Field | Type | Required | Description |
|
|
285
294
|
| ------------- | ----------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
286
|
-
| `
|
|
287
|
-
| `
|
|
295
|
+
| `value` | `unknown` | No | Literal value. For inputs, this wins over `from` |
|
|
296
|
+
| `from` | `string` | No | Inputs: upstream source such as `taskId.outputs.name`, `taskId.stdout`, or `outputs.name`. Outputs: `json.<key>`, `stdout`, `stderr`, or `normalizedOutput` |
|
|
297
|
+
| `default` | `unknown` | No | Fallback value when the source is missing |
|
|
298
|
+
| `required` | `boolean` | Inputs only | When `true`, missing upstream value and no `default` blocks the task |
|
|
299
|
+
| `type` | `'string' \| 'number' \| 'boolean' \| 'enum' \| 'json'` | No | Optional coercion type. Omit it for pass-through values |
|
|
288
300
|
| `description` | `string` | No | Free-text description; rendered into the `[Inputs]` / `[Output Format]` blocks |
|
|
289
|
-
| `required` | `boolean` | No | Inputs only. When `true`, missing upstream value (and no `default`) blocks the task |
|
|
290
|
-
| `default` | `unknown` | No | Inputs only. Fallback value when no upstream produces the port |
|
|
291
301
|
| `enum` | `string[]` | When `type: enum` | Allowed values |
|
|
292
|
-
| `from` | `string` | No | Inputs only. Explicit upstream binding — bare `portName` (match by name) or `taskId.portName` (fully qualified). Unset = match by name across all direct upstreams; ambiguous matches block |
|
|
293
302
|
|
|
294
303
|
#### Substitution and AI prompt blocks
|
|
295
304
|
|
|
296
305
|
- `{{inputs.<name>}}` is expanded verbatim in `command` and `prompt` strings before execution. Quote your placeholders in command lines (`--city "{{inputs.city}}"`) — the engine does not shell-escape.
|
|
297
|
-
- AI tasks
|
|
298
|
-
- Output extraction strategy: prefer `normalizedOutput` (AI tasks), fall back to stdout (command tasks). Find the last non-empty line that parses as a JSON object, then read each declared output key. Failures append a diagnostic to stderr; the
|
|
306
|
+
- AI tasks get `[Output Format]` and `[Inputs]` blocks when typed bindings can be inferred from neighboring command tasks.
|
|
307
|
+
- Output extraction strategy: prefer `normalizedOutput` (AI tasks), fall back to stdout (command tasks). Find the last non-empty line that parses as a JSON object, then read each declared output key. Failures append a diagnostic to stderr; the binding is absent from `outputs` and downstream tasks see it as missing.
|
|
308
|
+
|
|
309
|
+
YAML `ports` has been replaced by typed `inputs` / `outputs`. `validateRaw` reports any `ports` field as a migration error.
|
|
299
310
|
|
|
300
311
|
---
|
|
301
312
|
|
|
@@ -363,9 +374,10 @@ Tasks can declare named, typed `inputs` / `outputs`. Inputs flow in from upstrea
|
|
|
363
374
|
### Root: `@tagma/sdk`
|
|
364
375
|
|
|
365
376
|
- `createTagma(options?)`
|
|
377
|
+
- `bunRuntime()`
|
|
366
378
|
- `definePipeline(pipeline)`
|
|
367
379
|
- `PluginRegistry`
|
|
368
|
-
- stable pipeline/result/event types
|
|
380
|
+
- stable pipeline/result/event/plugin/runtime types, including `TagmaPlugin` and `TagmaRuntime`
|
|
369
381
|
- trigger error classes
|
|
370
382
|
|
|
371
383
|
### YAML: `@tagma/sdk/yaml`
|
|
@@ -391,10 +403,10 @@ Tasks can declare named, typed `inputs` / `outputs`. Inputs flow in from upstrea
|
|
|
391
403
|
- raw validation helpers
|
|
392
404
|
- task reference helpers
|
|
393
405
|
|
|
394
|
-
###
|
|
406
|
+
### Dataflow helpers: `@tagma/sdk/ports`
|
|
395
407
|
|
|
396
|
-
-
|
|
397
|
-
|
|
408
|
+
- placeholder substitution, binding resolution, output extraction, and internal prompt-contract inference
|
|
409
|
+
- the subpath name is historical; YAML `ports` is rejected by validation
|
|
398
410
|
|
|
399
411
|
### `bootstrapBuiltins(registry)`
|
|
400
412
|
|
|
@@ -404,6 +416,17 @@ Registers all built-in plugins (opencode driver, file/manual triggers, completio
|
|
|
404
416
|
|
|
405
417
|
Parses YAML, resolves inheritance, and validates the configuration.
|
|
406
418
|
|
|
419
|
+
### `createTagma(options?)`
|
|
420
|
+
|
|
421
|
+
Creates an isolated SDK instance with its own plugin registry.
|
|
422
|
+
|
|
423
|
+
Options:
|
|
424
|
+
|
|
425
|
+
- `registry` -- use an existing `PluginRegistry` instance
|
|
426
|
+
- `builtins` -- register built-in plugins into the instance registry; defaults to `true`
|
|
427
|
+
- `plugins` -- register package-level `TagmaPlugin` capability objects into the instance registry
|
|
428
|
+
- `runtime` -- override command/driver process execution; defaults to `bunRuntime()`
|
|
429
|
+
|
|
407
430
|
### `createTagma().run(config, options): Promise<EngineResult>`
|
|
408
431
|
|
|
409
432
|
Executes the pipeline. Returns `{ success, runId, logPath, summary, states }`.
|
|
@@ -414,7 +437,7 @@ Options:
|
|
|
414
437
|
- `signal` -- `AbortSignal` to cancel the run externally
|
|
415
438
|
- `onEvent` -- callback for real-time `RunEventPayload` updates. Every payload carries `runId`. The editor server stamps a per-run `seq` on top of this payload before broadcasting over SSE (producing a `WireRunEvent`); the SDK itself does not stamp `seq`. Event variants:
|
|
416
439
|
- `run_start` — pipeline approved and all tasks transitioned to `waiting`; includes `tasks: RunTaskState[]` (wire-shape snapshot of every task). Fires only when the `pipeline_start` hook allows the run — blocked pipelines emit no wire events at all.
|
|
417
|
-
- `task_update` — a task's status or result changed; flat fields (`status`, `startedAt?`, `finishedAt?`, `durationMs?`, `exitCode?`, `stdout?`, `stderr?`, `stdoutPath?`, `stderrPath?`, `stdoutBytes?`, `stderrBytes?`, `sessionId?`, `normalizedOutput?`, `outputs?`, `inputs?`, `resolvedDriver?`, `resolvedModel?`, `resolvedPermissions?`) so clients can fold partial updates with `??` semantics. `inputs` carries the resolved
|
|
440
|
+
- `task_update` — a task's status or result changed; flat fields (`status`, `startedAt?`, `finishedAt?`, `durationMs?`, `exitCode?`, `stdout?`, `stderr?`, `stdoutPath?`, `stderrPath?`, `stdoutBytes?`, `stderrBytes?`, `sessionId?`, `normalizedOutput?`, `outputs?`, `inputs?`, `resolvedDriver?`, `resolvedModel?`, `resolvedPermissions?`) so clients can fold partial updates with `??` semantics. `inputs` carries the resolved task input map (set once just before the task transitions to `running`); `outputs` carries the extracted binding output map after a successful terminal transition. `startedAt` is populated before the `running` transition; `finishedAt` and result fields are populated before any terminal-status transition. Terminal-state locking in the engine guarantees at most one terminal event per task.
|
|
418
441
|
- `task_log` — a structured log line was written to `pipeline.log`. Mirrors every `Logger` call (info/warn/error/debug/section/quiet) and carries `{ taskId: string | null, level, timestamp, text }`. `taskId` is non-null for lines tagged with a `[task:<id>]` prefix (or passed explicitly to `section`/`quiet`) and `null` for pipeline-wide messages such as the configuration dump and DAG topology. Use this to stream the full run process into UIs without tailing the log file.
|
|
419
442
|
- `run_end` — pipeline finished; includes `success: boolean` and `abortReason: 'timeout' | 'stop_all' | 'external' | null`. `null` means the run completed on its own steam (success may still be `false` if tasks failed).
|
|
420
443
|
- `run_error` — reserved for fatal engine errors surfaced over the wire.
|
|
@@ -460,7 +483,7 @@ Properties:
|
|
|
460
483
|
|
|
461
484
|
Typed error classes for trigger plugin error classification. The engine uses `instanceof` checks on these to set the correct task status (`blocked` or `timeout`) instead of matching on error message substrings.
|
|
462
485
|
|
|
463
|
-
Built-in triggers (`manual`, `file`) throw these automatically.
|
|
486
|
+
Built-in triggers (`manual`, `file`) throw these automatically. Trigger plugins should throw `TriggerBlockedError` for user/policy rejections and `TriggerTimeoutError` for genuine wait timeouts.
|
|
464
487
|
|
|
465
488
|
```ts
|
|
466
489
|
import { TriggerBlockedError, TriggerTimeoutError } from '@tagma/sdk';
|
|
@@ -470,13 +493,30 @@ throw new TriggerBlockedError('Access denied by policy');
|
|
|
470
493
|
throw new TriggerTimeoutError('File did not appear within 30s');
|
|
471
494
|
```
|
|
472
495
|
|
|
473
|
-
### `PluginRegistry.loadPlugins(names): Promise<void>`
|
|
496
|
+
### `PluginRegistry.loadPlugins(names, resolveFrom?): Promise<void>`
|
|
497
|
+
|
|
498
|
+
Dynamically loads and registers external plugin packages. Each package must default-export a `TagmaPlugin` with capability maps.
|
|
499
|
+
|
|
500
|
+
```ts
|
|
501
|
+
export default {
|
|
502
|
+
name: '@tagma/trigger-http',
|
|
503
|
+
capabilities: {
|
|
504
|
+
triggers: {
|
|
505
|
+
http: HttpTrigger,
|
|
506
|
+
},
|
|
507
|
+
},
|
|
508
|
+
} satisfies TagmaPlugin;
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
Pass `resolveFrom` when plugins are installed in a workspace-local `node_modules`.
|
|
512
|
+
|
|
513
|
+
### `PluginRegistry.registerTagmaPlugin(plugin): RegisteredCapability[]`
|
|
474
514
|
|
|
475
|
-
|
|
515
|
+
Registers every supported capability from a `TagmaPlugin` default export.
|
|
476
516
|
|
|
477
517
|
### `PluginRegistry.registerPlugin(category, type, handler): void`
|
|
478
518
|
|
|
479
|
-
Registers
|
|
519
|
+
Registers one capability handler manually. Prefer `registerTagmaPlugin()` for package-level plugins.
|
|
480
520
|
|
|
481
521
|
Plugin handlers (`TriggerPlugin`, `CompletionPlugin`, `MiddlewarePlugin`) may optionally expose a declarative `schema: PluginSchema` field so visual editors can render a typed form for the plugin's config instead of a raw key/value editor:
|
|
482
522
|
|
|
@@ -612,9 +652,9 @@ Validates a resolved pipeline config without executing it. Checks DAG structure
|
|
|
612
652
|
|
|
613
653
|
Use `validateRaw` for editing raw configs in a UI; use `validateConfig` after `resolveConfig` for a final pre-run check.
|
|
614
654
|
|
|
615
|
-
### Bindings
|
|
655
|
+
### Bindings API
|
|
616
656
|
|
|
617
|
-
Pure helpers backing
|
|
657
|
+
Pure helpers backing typed task bindings and internal prompt-contract inference. Safe to use in editors, simulators, and custom drivers — no I/O, no side effects.
|
|
618
658
|
|
|
619
659
|
| Function | Description |
|
|
620
660
|
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
@@ -623,7 +663,7 @@ Pure helpers backing lightweight bindings and `task.ports`. Safe to use in edito
|
|
|
623
663
|
| `resolveTaskBindingInputs(task, upstreamData, dependsOn)` | Resolve lightweight task-level `inputs` from literal values, upstream outputs, stdout/stderr, normalized output, defaults, and required flags |
|
|
624
664
|
| `resolveTaskInputs(task, upstreamOutputs, dependsOn)` | Gather the input values a task will consume from its direct upstreams. Applies `from` bindings, defaults, and type coercion. Returns `{ kind: 'ready', inputs, missingOptional }` or `{ kind: 'blocked', missingRequired, ambiguous, typeErrors, reason }` |
|
|
625
665
|
| `extractTaskBindingOutputs(outputs, stdout, stderr, normalizedOutput)` | Publish lightweight task-level `outputs` from final-line JSON, stdout/stderr, normalized output, literal values, or defaults |
|
|
626
|
-
| `extractTaskOutputs(ports, stdout, normalizedOutput)` |
|
|
666
|
+
| `extractTaskOutputs(ports, stdout, normalizedOutput)` | Internal helper for inferred prompt contracts. Strategy: prefer `normalizedOutput`; find the last non-empty line that parses as a JSON object; coerce each declared key. Returns `{ outputs, diagnostic }` |
|
|
627
667
|
| `prependContext(doc, block)` | Same shape as `appendContext` but prepends; the engine uses this to place `[Output Format]` and `[Inputs]` blocks before middleware-added context |
|
|
628
668
|
| `renderInputsBlock(inputsDecl, values)` | Build the `[Inputs]` `PromptContextBlock` rendered into AI prompts (`name: value # description` lines). Returns `null` when no inputs to render |
|
|
629
669
|
| `renderOutputSchemaBlock(outputsDecl)` | Build the `[Output Format]` `PromptContextBlock` instructing the model to emit a final-line JSON object matching the declared outputs. Returns `null` when no outputs declared |
|
|
@@ -634,7 +674,7 @@ Custom drivers that wrap the prompt in their own envelope can read `DriverContex
|
|
|
634
674
|
|
|
635
675
|
Validates a raw pipeline config without resolving inheritance or executing anything. Returns a flat list of `{ path, message, severity? }` objects — empty array means valid. `severity` is `'error'` (default, fatal) or `'warning'` (soft hint; non-blocking).
|
|
636
676
|
|
|
637
|
-
Checks: required fields, `prompt`/`command` exclusivity, duplicate task IDs within a track, `depends_on`/`continue_from` reference integrity (including ambiguous bare refs that exist in multiple tracks — use `trackId.taskId` to disambiguate), circular dependency detection,
|
|
677
|
+
Checks: required fields, `prompt`/`command` exclusivity, duplicate task IDs within a track, `depends_on`/`continue_from` reference integrity (including ambiguous bare refs that exist in multiple tracks — use `trackId.taskId` to disambiguate), circular dependency detection, binding shape (name format, valid `type`, duplicate names, `enum` requires non-empty `enum` array), `ports` migration errors, `{{inputs.<name>}}` references resolving to a declared or inferred input binding, and `permissions` shape (must be an object with boolean `read`/`write`/`execute`). Tolerant of half-built configs — non-array `tracks` or `tasks` produce a structured error instead of throwing.
|
|
638
678
|
|
|
639
679
|
Plugin-type checks are opt-in via `knownTypes`: when provided, references to trigger/completion/middleware/driver types that are neither built-in nor in the supplied set produce a **warning** (`severity: 'warning'`) so editors can light up uninstalled plugins without blocking save / run. Omit `knownTypes` for offline / pre-load validation — no plugin warnings are emitted in that case.
|
|
640
680
|
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import type { PluginRegistry } from './registry';
|
|
2
|
+
export declare const BuiltinTagmaPlugin: {
|
|
3
|
+
name: string;
|
|
4
|
+
capabilities: {
|
|
5
|
+
drivers: {
|
|
6
|
+
opencode: import("@tagma/types").DriverPlugin;
|
|
7
|
+
};
|
|
8
|
+
triggers: {
|
|
9
|
+
file: import("@tagma/types").TriggerPlugin;
|
|
10
|
+
manual: import("@tagma/types").TriggerPlugin;
|
|
11
|
+
};
|
|
12
|
+
completions: {
|
|
13
|
+
exit_code: import("@tagma/types").CompletionPlugin;
|
|
14
|
+
file_exists: import("@tagma/types").CompletionPlugin;
|
|
15
|
+
output_check: import("@tagma/types").CompletionPlugin;
|
|
16
|
+
};
|
|
17
|
+
middlewares: {
|
|
18
|
+
static_context: import("@tagma/types").MiddlewarePlugin;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
2
22
|
/**
|
|
3
23
|
* Register every built-in plugin into `target`. Hosts instantiate one
|
|
4
24
|
* PluginRegistry per workspace or SDK instance and call this once per
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAsBjD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;CAmBR,CAAC;AAExB;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAE9D"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -13,6 +13,26 @@ import { FileExistsCompletion } from './completions/file-exists';
|
|
|
13
13
|
import { OutputCheckCompletion } from './completions/output-check';
|
|
14
14
|
// Built-in Middleware
|
|
15
15
|
import { StaticContextMiddleware } from './middlewares/static-context';
|
|
16
|
+
export const BuiltinTagmaPlugin = {
|
|
17
|
+
name: '@tagma/sdk/builtins',
|
|
18
|
+
capabilities: {
|
|
19
|
+
drivers: {
|
|
20
|
+
opencode: OpenCodeDriver,
|
|
21
|
+
},
|
|
22
|
+
triggers: {
|
|
23
|
+
file: FileTrigger,
|
|
24
|
+
manual: ManualTrigger,
|
|
25
|
+
},
|
|
26
|
+
completions: {
|
|
27
|
+
exit_code: ExitCodeCompletion,
|
|
28
|
+
file_exists: FileExistsCompletion,
|
|
29
|
+
output_check: OutputCheckCompletion,
|
|
30
|
+
},
|
|
31
|
+
middlewares: {
|
|
32
|
+
static_context: StaticContextMiddleware,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
16
36
|
/**
|
|
17
37
|
* Register every built-in plugin into `target`. Hosts instantiate one
|
|
18
38
|
* PluginRegistry per workspace or SDK instance and call this once per
|
|
@@ -23,16 +43,6 @@ import { StaticContextMiddleware } from './middlewares/static-context';
|
|
|
23
43
|
* handler object into N registries is cheap and safe; no cloning is needed.
|
|
24
44
|
*/
|
|
25
45
|
export function bootstrapBuiltins(target) {
|
|
26
|
-
|
|
27
|
-
target.registerPlugin('drivers', 'opencode', OpenCodeDriver);
|
|
28
|
-
// Triggers
|
|
29
|
-
target.registerPlugin('triggers', 'file', FileTrigger);
|
|
30
|
-
target.registerPlugin('triggers', 'manual', ManualTrigger);
|
|
31
|
-
// Completions
|
|
32
|
-
target.registerPlugin('completions', 'exit_code', ExitCodeCompletion);
|
|
33
|
-
target.registerPlugin('completions', 'file_exists', FileExistsCompletion);
|
|
34
|
-
target.registerPlugin('completions', 'output_check', OutputCheckCompletion);
|
|
35
|
-
// Middlewares
|
|
36
|
-
target.registerPlugin('middlewares', 'static_context', StaticContextMiddleware);
|
|
46
|
+
target.registerTagmaPlugin(BuiltinTagmaPlugin);
|
|
37
47
|
}
|
|
38
48
|
//# sourceMappingURL=bootstrap.js.map
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAGA,mBAAmB;AACnB,wEAAwE;AACxE,0EAA0E;AAC1E,iCAAiC;AACjC,kEAAkE;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,oBAAoB;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,uBAAuB;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,sBAAsB;AACtB,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,qBAAqB;IAC3B,YAAY,EAAE;QACZ,OAAO,EAAE;YACP,QAAQ,EAAE,cAAc;SACzB;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,aAAa;SACtB;QACD,WAAW,EAAE;YACX,SAAS,EAAE,kBAAkB;YAC7B,WAAW,EAAE,oBAAoB;YACjC,YAAY,EAAE,qBAAqB;SACpC;QACD,WAAW,EAAE;YACX,cAAc,EAAE,uBAAuB;SACxC;KACF;CACoB,CAAC;AAExB;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataflow.d.ts","sourceRoot":"","sources":["../../src/core/dataflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"dataflow.d.ts","sourceRoot":"","sources":["../../src/core/dataflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,UAAU,EAGV,SAAS,EACT,UAAU,EACX,MAAM,UAAU,CAAC;AAMlB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAgDhD,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC;CAChD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,GACb,oBAAoB,CAoCtB;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,+BAA+B,GACvC,8BAA8B,CAiChC"}
|
package/dist/core/dataflow.js
CHANGED
|
@@ -5,12 +5,46 @@ function isPromptTaskConfig(task) {
|
|
|
5
5
|
function isCommandTaskConfig(task) {
|
|
6
6
|
return task.command !== undefined && task.prompt === undefined;
|
|
7
7
|
}
|
|
8
|
+
function inputBindingsToPorts(bindings) {
|
|
9
|
+
if (!bindings || Object.keys(bindings).length === 0)
|
|
10
|
+
return undefined;
|
|
11
|
+
return Object.entries(bindings).map(([name, binding]) => ({
|
|
12
|
+
name,
|
|
13
|
+
type: binding.type ?? 'json',
|
|
14
|
+
...(binding.description ? { description: binding.description } : {}),
|
|
15
|
+
...(binding.required !== undefined ? { required: binding.required } : {}),
|
|
16
|
+
...(binding.default !== undefined ? { default: binding.default } : {}),
|
|
17
|
+
...(binding.enum ? { enum: [...binding.enum] } : {}),
|
|
18
|
+
...(binding.from ? { from: binding.from } : {}),
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
function outputBindingsToPorts(bindings) {
|
|
22
|
+
if (!bindings || Object.keys(bindings).length === 0)
|
|
23
|
+
return undefined;
|
|
24
|
+
return Object.entries(bindings).map(([name, binding]) => ({
|
|
25
|
+
name,
|
|
26
|
+
type: binding.type ?? 'json',
|
|
27
|
+
...(binding.description ? { description: binding.description } : {}),
|
|
28
|
+
...(binding.default !== undefined ? { default: binding.default } : {}),
|
|
29
|
+
...(binding.enum ? { enum: [...binding.enum] } : {}),
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
function taskBindingsAsPorts(task) {
|
|
33
|
+
const inputs = inputBindingsToPorts(task.inputs);
|
|
34
|
+
const outputs = outputBindingsToPorts(task.outputs);
|
|
35
|
+
if (!inputs && !outputs)
|
|
36
|
+
return undefined;
|
|
37
|
+
return {
|
|
38
|
+
...(inputs ? { inputs } : {}),
|
|
39
|
+
...(outputs ? { outputs } : {}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
8
42
|
export function inferEffectivePorts(ctx, taskId) {
|
|
9
43
|
const node = ctx.dag.nodes.get(taskId);
|
|
10
44
|
const task = node.task;
|
|
11
45
|
const isPromptTask = isPromptTaskConfig(task);
|
|
12
46
|
if (!isPromptTask) {
|
|
13
|
-
return { kind: 'ready', isPromptTask: false, effectivePorts: task
|
|
47
|
+
return { kind: 'ready', isPromptTask: false, effectivePorts: taskBindingsAsPorts(task) };
|
|
14
48
|
}
|
|
15
49
|
const inference = inferPromptPorts({
|
|
16
50
|
upstreams: node.dependsOn.map((upstreamId) => {
|
|
@@ -18,7 +52,7 @@ export function inferEffectivePorts(ctx, taskId) {
|
|
|
18
52
|
const isUpstreamCommand = upstream ? isCommandTaskConfig(upstream.task) : false;
|
|
19
53
|
return {
|
|
20
54
|
taskId: upstreamId,
|
|
21
|
-
outputs: isUpstreamCommand ? upstream?.task.
|
|
55
|
+
outputs: isUpstreamCommand ? outputBindingsToPorts(upstream?.task.outputs) : undefined,
|
|
22
56
|
};
|
|
23
57
|
}),
|
|
24
58
|
downstreams: (ctx.directDownstreams.get(taskId) ?? []).map((downstreamId) => {
|
|
@@ -26,7 +60,7 @@ export function inferEffectivePorts(ctx, taskId) {
|
|
|
26
60
|
const isDownstreamCommand = downstream ? isCommandTaskConfig(downstream.task) : false;
|
|
27
61
|
return {
|
|
28
62
|
taskId: downstreamId,
|
|
29
|
-
inputs: isDownstreamCommand ? downstream?.task.
|
|
63
|
+
inputs: isDownstreamCommand ? inputBindingsToPorts(downstream?.task.inputs) : undefined,
|
|
30
64
|
};
|
|
31
65
|
}),
|
|
32
66
|
});
|
|
@@ -47,17 +81,19 @@ export function extractSuccessfulOutputs(options) {
|
|
|
47
81
|
if (task.outputs && Object.keys(task.outputs).length > 0) {
|
|
48
82
|
extractedOutputs = bindingExtraction.outputs;
|
|
49
83
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
extractedOutputs =
|
|
53
|
-
|
|
54
|
-
|
|
84
|
+
if ((!task.outputs || Object.keys(task.outputs).length === 0) && effectivePorts?.outputs?.length) {
|
|
85
|
+
const portExtraction = extractTaskOutputs(effectivePorts, result.stdout, result.normalizedOutput);
|
|
86
|
+
extractedOutputs = portExtraction.outputs;
|
|
87
|
+
return {
|
|
88
|
+
outputs: extractedOutputs,
|
|
89
|
+
bindingDiagnostic: bindingExtraction.diagnostic,
|
|
90
|
+
portDiagnostic: portExtraction.diagnostic,
|
|
55
91
|
};
|
|
56
92
|
}
|
|
57
93
|
return {
|
|
58
94
|
outputs: extractedOutputs,
|
|
59
95
|
bindingDiagnostic: bindingExtraction.diagnostic,
|
|
60
|
-
portDiagnostic:
|
|
96
|
+
portDiagnostic: null,
|
|
61
97
|
};
|
|
62
98
|
}
|
|
63
99
|
//# sourceMappingURL=dataflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../src/core/dataflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../src/core/dataflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { AbortReason, OnFailure, PipelineConfig, RunEventPayload, TaskState
|
|
|
2
2
|
import type { Dag } from '../dag';
|
|
3
3
|
import type { UpstreamBindingData } from '../ports';
|
|
4
4
|
import { type PipelineInfo, type TaskInfo, type TrackInfo } from '../hooks';
|
|
5
|
+
import type { TagmaRuntime } from '../runtime';
|
|
5
6
|
export interface RunContextOptions {
|
|
6
7
|
readonly runId: string;
|
|
7
8
|
readonly dag: Dag;
|
|
@@ -9,6 +10,7 @@ export interface RunContextOptions {
|
|
|
9
10
|
readonly workDir: string;
|
|
10
11
|
readonly pipelineInfo: PipelineInfo;
|
|
11
12
|
readonly onEvent?: (event: RunEventPayload) => void;
|
|
13
|
+
readonly runtime: TagmaRuntime;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Per-run state container. Owns the maps and abort tracking that
|
|
@@ -24,6 +26,7 @@ export declare class RunContext {
|
|
|
24
26
|
readonly workDir: string;
|
|
25
27
|
readonly pipelineInfo: PipelineInfo;
|
|
26
28
|
readonly onEvent?: (event: RunEventPayload) => void;
|
|
29
|
+
readonly runtime: TagmaRuntime;
|
|
27
30
|
readonly states: Map<string, TaskState>;
|
|
28
31
|
readonly sessionMap: Map<string, string>;
|
|
29
32
|
readonly normalizedMap: Map<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-context.d.ts","sourceRoot":"","sources":["../../src/core/run-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,cAAc,EACd,eAAe,EAEf,SAAS,EACT,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"run-context.d.ts","sourceRoot":"","sources":["../../src/core/run-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,cAAc,EACd,eAAe,EAEf,SAAS,EACT,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAE/B,QAAQ,CAAC,MAAM,yBAAgC;IAC/C,QAAQ,CAAC,UAAU,sBAA6B;IAChD,QAAQ,CAAC,aAAa,sBAA6B;IACnD,QAAQ,CAAC,eAAe,iDAAwD;IAChF,QAAQ,CAAC,cAAc,mCAA0C;IACjE,QAAQ,CAAC,iBAAiB,iDAAwD;IAClF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,QAAQ,CAAC,eAAe,kBAAyB;IACjD,WAAW,EAAE,WAAW,GAAG,IAAI,CAAQ;gBAE3B,OAAO,EAAE,iBAAiB;IA8BtC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAIlC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI;IAmC1D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIvC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,MAAM;IAiB1E;;;;;OAKG;IACH,YAAY,IAAI,IAAI;IAWpB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAgB1C,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAKhC,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,GAAG,cAAc,GACrC,OAAO,CAAC,IAAI,CAAC;CAcjB"}
|
package/dist/core/run-context.js
CHANGED
|
@@ -18,6 +18,7 @@ export class RunContext {
|
|
|
18
18
|
workDir;
|
|
19
19
|
pipelineInfo;
|
|
20
20
|
onEvent;
|
|
21
|
+
runtime;
|
|
21
22
|
states = new Map();
|
|
22
23
|
sessionMap = new Map();
|
|
23
24
|
normalizedMap = new Map();
|
|
@@ -34,6 +35,7 @@ export class RunContext {
|
|
|
34
35
|
this.workDir = options.workDir;
|
|
35
36
|
this.pipelineInfo = options.pipelineInfo;
|
|
36
37
|
this.onEvent = options.onEvent;
|
|
38
|
+
this.runtime = options.runtime;
|
|
37
39
|
for (const [id, node] of this.dag.nodes) {
|
|
38
40
|
this.states.set(id, {
|
|
39
41
|
config: node.task,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-context.js","sourceRoot":"","sources":["../../src/core/run-context.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,WAAW,EACX,gBAAgB,GAIjB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"run-context.js","sourceRoot":"","sources":["../../src/core/run-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/core/task-executor.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/core/task-executor.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWlD,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAoBhD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgrB5E"}
|