@tagma/sdk 0.7.42 → 0.7.43
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 +89 -95
- package/dist/bootstrap.d.ts +1 -59
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +5 -55
- package/dist/bootstrap.js.map +1 -1
- package/dist/compatibility.d.ts +0 -1
- package/dist/compatibility.d.ts.map +1 -1
- package/dist/compatibility.js +0 -4
- package/dist/compatibility.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +0 -2
- package/dist/schema.js.map +1 -1
- package/dist/validate-raw.d.ts.map +1 -1
- package/dist/validate-raw.js +0 -8
- package/dist/validate-raw.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -32,7 +32,6 @@ bun add @tagma/sdk
|
|
|
32
32
|
```yaml
|
|
33
33
|
pipeline:
|
|
34
34
|
name: build-and-test
|
|
35
|
-
mode: trusted # required for shell command tasks
|
|
36
35
|
tracks:
|
|
37
36
|
- id: backend
|
|
38
37
|
name: Backend
|
|
@@ -89,7 +88,6 @@ pipeline:
|
|
|
89
88
|
requires:
|
|
90
89
|
sdk: '>=0.7.40'
|
|
91
90
|
name: my-pipeline
|
|
92
|
-
mode: trusted
|
|
93
91
|
driver: opencode
|
|
94
92
|
timeout: 30m
|
|
95
93
|
plugins:
|
|
@@ -155,7 +153,6 @@ pipeline:
|
|
|
155
153
|
| ------------- | ------------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
156
154
|
| `requires` | `{ sdk?: string }` | No | SDK-owned compatibility gate. `serializePipeline()` adds or raises `requires.sdk` when the YAML uses features that need a newer SDK |
|
|
157
155
|
| `name` | `string` | Yes | Pipeline name, used in logs and run IDs |
|
|
158
|
-
| `mode` | `trusted \| safe` | No | Execution boundary. Defaults to `safe`; `safe` blocks shell tasks, hooks, automatic plugins, execute permissions, and non-allowlisted capabilities |
|
|
159
156
|
| `driver` | `string` | No | Default driver for all tracks/tasks (inherited). Built-in: `opencode` |
|
|
160
157
|
| `model` | `string` | No | Default model for all tracks/tasks (inherited). Exact model name, e.g. `claude-sonnet-4-6` |
|
|
161
158
|
| `permissions` | `Permissions` | No | Default permissions inherited by all tracks/tasks (see Permissions) |
|
|
@@ -185,59 +182,58 @@ Each hook value can be a single command string or an array of commands.
|
|
|
185
182
|
|
|
186
183
|
| Field | Type | Required | Default | Description |
|
|
187
184
|
| --------------- | -------------------- | -------- | ----------------------- | -------------------------------------------------------------------- |
|
|
188
|
-
| `id` | `string` | Yes |
|
|
189
|
-
| `name` | `string` | Yes |
|
|
190
|
-
| `color` | `string` | No |
|
|
185
|
+
| `id` | `string` | Yes | - | Unique track identifier |
|
|
186
|
+
| `name` | `string` | Yes | - | Display name |
|
|
187
|
+
| `color` | `string` | No | - | Color hint for UI rendering (e.g. `"#3b82f6"`) |
|
|
191
188
|
| `driver` | `string` | No | Inherited from pipeline | Driver for all tasks in this track |
|
|
192
189
|
| `model` | `string` | No | Inherited from pipeline | Exact model name passed to the driver CLI (e.g. `claude-sonnet-4-6`) |
|
|
193
|
-
| `agent_profile` | `string` | No |
|
|
190
|
+
| `agent_profile` | `string` | No | - | Named agent configuration profile |
|
|
194
191
|
| `cwd` | `string` | No | Pipeline workDir | Working directory for tasks in this track (relative path) |
|
|
195
192
|
| `permissions` | `Permissions` | No | Inherited from pipeline | Default permissions for tasks (see Permissions) |
|
|
196
193
|
| `on_failure` | `OnFailure` | No | `skip_downstream` | Failure strategy: `skip_downstream`, `stop_all`, `ignore` |
|
|
197
|
-
| `middlewares` | `MiddlewareConfig[]` | No |
|
|
198
|
-
| `tasks` | `TaskConfig[]` | Yes |
|
|
194
|
+
| `middlewares` | `MiddlewareConfig[]` | No | - | Middlewares applied to all tasks (task-level overrides track-level) |
|
|
195
|
+
| `tasks` | `TaskConfig[]` | Yes | - | Ordered list of tasks in this track |
|
|
199
196
|
|
|
200
197
|
### Task Fields
|
|
201
198
|
|
|
202
199
|
| Field | Type | Required | Default | Description |
|
|
203
200
|
| --------------- | -------------------- | -------- | -------------------- | ------------------------------------------------------------------------------------------------------ |
|
|
204
|
-
| `id` | `string` | Yes |
|
|
205
|
-
| `name` | `string` | No |
|
|
206
|
-
| `prompt` | `string` | No\* |
|
|
207
|
-
| `command` | `string` | No\* |
|
|
208
|
-
| `depends_on` | `string[]` | No |
|
|
209
|
-
| `continue_from` | `string` | No |
|
|
201
|
+
| `id` | `string` | Yes | - | Unique task identifier within its track. Cross-track refs use `trackId.taskId` |
|
|
202
|
+
| `name` | `string` | No | - | Display name |
|
|
203
|
+
| `prompt` | `string` | No\* | - | AI prompt to send to the driver. \*Mutually exclusive with `command` |
|
|
204
|
+
| `command` | `string` | No\* | - | Shell command to execute directly. \*Mutually exclusive with `prompt` |
|
|
205
|
+
| `depends_on` | `string[]` | No | - | Task IDs that must complete before this task runs. Cross-track refs use `trackId.taskId` |
|
|
206
|
+
| `continue_from` | `string` | No | - | Task ID whose output/session to continue from (session handoff). Cross-track refs use `trackId.taskId` |
|
|
210
207
|
| `driver` | `string` | No | Inherited from track | Driver override for this task |
|
|
211
208
|
| `model` | `string` | No | Inherited from track | Model name override for this task |
|
|
212
209
|
| `agent_profile` | `string` | No | Inherited from track | Agent profile override |
|
|
213
210
|
| `cwd` | `string` | No | Inherited from track | Working directory override (relative path) |
|
|
214
|
-
| `timeout` | `string` | No |
|
|
211
|
+
| `timeout` | `string` | No | - | Task-level timeout. Format: `"30s"`, `"5m"`, `"2h"` |
|
|
215
212
|
| `permissions` | `Permissions` | No | Inherited from track | Permission override (see Permissions) |
|
|
216
213
|
| `middlewares` | `MiddlewareConfig[]` | No | Inherited from track | Middleware override. Set `[]` to disable inherited middlewares |
|
|
217
|
-
| `trigger` | `TriggerConfig` | No |
|
|
218
|
-
| `completion` | `CompletionConfig` | No |
|
|
219
|
-
| `inputs` | `TaskInputBindings` | No |
|
|
220
|
-
| `outputs` | `TaskOutputBindings` | No |
|
|
214
|
+
| `trigger` | `TriggerConfig` | No | - | Gate that must resolve before the task runs (see Triggers) |
|
|
215
|
+
| `completion` | `CompletionConfig` | No | - | Post-execution check to validate task output (see Completions) |
|
|
216
|
+
| `inputs` | `TaskInputBindings` | No | - | Task input bindings for `{{inputs.<name>}}`; optional `type` enables coercion/validation |
|
|
217
|
+
| `outputs` | `TaskOutputBindings` | No | - | Named outputs published after success; optional `type` enables coercion/validation |
|
|
221
218
|
|
|
222
219
|
### Permissions
|
|
223
220
|
|
|
224
221
|
| Field | Type | Default | Description |
|
|
225
222
|
| --------- | --------- | ------- | -------------------------------------------------- |
|
|
226
|
-
| `read` | `boolean` |
|
|
227
|
-
| `write` | `boolean` |
|
|
228
|
-
| `execute` | `boolean` |
|
|
223
|
+
| `read` | `boolean` | - | Allow the AI driver/agent to read files |
|
|
224
|
+
| `write` | `boolean` | - | Allow the AI driver/agent to write files |
|
|
225
|
+
| `execute` | `boolean` | - | Allow the AI driver/agent to execute tool commands |
|
|
229
226
|
|
|
230
227
|
`permissions` are passed to AI drivers that support them. They do not sandbox
|
|
231
|
-
YAML `command` tasks; command tasks
|
|
232
|
-
by `mode: safe` / `mode: trusted`.
|
|
228
|
+
YAML `command` tasks; command tasks execute through the host shell.
|
|
233
229
|
|
|
234
230
|
### Inheritance
|
|
235
231
|
|
|
236
|
-
Fields are inherited top-down: **pipeline
|
|
232
|
+
Fields are inherited top-down: **pipeline -> track -> task**. A value set at a lower level overrides the inherited value.
|
|
237
233
|
|
|
238
|
-
Inherited from pipeline
|
|
234
|
+
Inherited from pipeline -> track -> task: `driver`, `model`, `reasoning_effort`, `permissions`. `cwd` is inherited track -> task only (the pipeline's cwd is the workDir argument passed to `tagma.run` / `loadPipeline`, not a YAML field).
|
|
239
235
|
|
|
240
|
-
`middlewares` is **track
|
|
236
|
+
`middlewares` is **track -> task only** - there is no `pipeline.middlewares` field. Track-level `middlewares` apply to all tasks in the track. Setting task-level `middlewares` **replaces** (not appends) the track-level list. Use `middlewares: []` to disable all inherited middlewares for a task.
|
|
241
237
|
|
|
242
238
|
---
|
|
243
239
|
|
|
@@ -346,69 +342,69 @@ Tasks can declare named, typed `inputs` / `outputs`. Inputs flow in from upstrea
|
|
|
346
342
|
|
|
347
343
|
File and directory trigger watch paths may be relative to `workDir`, absolute, or external. This exception is only for trigger watch paths; other path fields remain workspace-bound.
|
|
348
344
|
|
|
349
|
-
#### `manual`
|
|
345
|
+
#### `manual` - Human approval gate
|
|
350
346
|
|
|
351
347
|
| Field | Type | Required | Default | Description |
|
|
352
348
|
| ---------- | ---------- | -------- | ------------------------------------------------------ | ------------------------------------------------- |
|
|
353
|
-
| `type` | `"manual"` | Yes |
|
|
349
|
+
| `type` | `"manual"` | Yes | - | Trigger type |
|
|
354
350
|
| `message` | `string` | No | `"Manual confirmation required for task \"{taskId}\""` | Message shown to the approver |
|
|
355
|
-
| `timeout` | `string` | No |
|
|
356
|
-
| `metadata` | `object` | No |
|
|
351
|
+
| `timeout` | `string` | No | - | How long to wait for a decision before timing out |
|
|
352
|
+
| `metadata` | `object` | No | - | Arbitrary metadata passed to the approval gateway |
|
|
357
353
|
|
|
358
|
-
#### `file`
|
|
354
|
+
#### `file` - File watcher gate
|
|
359
355
|
|
|
360
356
|
| Field | Type | Required | Default | Description |
|
|
361
357
|
| --------- | -------- | -------- | ------- | ---------------------------------------------- |
|
|
362
|
-
| `type` | `"file"` | Yes |
|
|
363
|
-
| `path` | `string` | Yes |
|
|
364
|
-
| `timeout` | `string` | No |
|
|
358
|
+
| `type` | `"file"` | Yes | - | Trigger type |
|
|
359
|
+
| `path` | `string` | Yes | - | File path to watch (relative to workDir) |
|
|
360
|
+
| `timeout` | `string` | No | - | How long to wait for the file to appear/change |
|
|
365
361
|
|
|
366
362
|
#### `directory` - Directory watcher gate
|
|
367
363
|
|
|
368
364
|
| Field | Type | Required | Default | Description |
|
|
369
365
|
| --------- | ------------- | -------- | ------- | ------------------------------------------------ |
|
|
370
|
-
| `type` | `"directory"` | Yes |
|
|
371
|
-
| `path` | `string` | Yes |
|
|
372
|
-
| `timeout` | `string` | No |
|
|
366
|
+
| `type` | `"directory"` | Yes | - | Trigger type |
|
|
367
|
+
| `path` | `string` | Yes | - | Directory path to watch (relative to workDir) |
|
|
368
|
+
| `timeout` | `string` | No | - | How long to wait for the directory to be created |
|
|
373
369
|
|
|
374
370
|
---
|
|
375
371
|
|
|
376
372
|
### Built-in Completions
|
|
377
373
|
|
|
378
|
-
#### `exit_code`
|
|
374
|
+
#### `exit_code` - Exit code check
|
|
379
375
|
|
|
380
376
|
| Field | Type | Required | Default | Description |
|
|
381
377
|
| -------- | -------------------- | -------- | ------- | ------------------------------------------------------------------ |
|
|
382
|
-
| `type` | `"exit_code"` | Yes |
|
|
378
|
+
| `type` | `"exit_code"` | Yes | - | Completion type |
|
|
383
379
|
| `expect` | `number \| number[]` | No | `0` | Expected exit code(s). Pass an array for multiple acceptable codes |
|
|
384
380
|
|
|
385
|
-
#### `file_exists`
|
|
381
|
+
#### `file_exists` - File existence check
|
|
386
382
|
|
|
387
383
|
| Field | Type | Required | Default | Description |
|
|
388
384
|
| ---------- | -------------------------- | -------- | ------- | ----------------------------------------------------- |
|
|
389
|
-
| `type` | `"file_exists"` | Yes |
|
|
390
|
-
| `path` | `string` | Yes |
|
|
385
|
+
| `type` | `"file_exists"` | Yes | - | Completion type |
|
|
386
|
+
| `path` | `string` | Yes | - | File or directory path to check (relative to workDir) |
|
|
391
387
|
| `kind` | `"file" \| "dir" \| "any"` | No | `"any"` | Entity type constraint |
|
|
392
|
-
| `min_size` | `number` | No |
|
|
388
|
+
| `min_size` | `number` | No | - | Minimum file size in bytes (files only) |
|
|
393
389
|
|
|
394
|
-
#### `output_check`
|
|
390
|
+
#### `output_check` - Command-based output validation
|
|
395
391
|
|
|
396
392
|
| Field | Type | Required | Default | Description |
|
|
397
393
|
| --------- | ---------------- | -------- | ------- | ----------------------------------------------------------------------- |
|
|
398
|
-
| `type` | `"output_check"` | Yes |
|
|
399
|
-
| `check` | `string` | Yes |
|
|
394
|
+
| `type` | `"output_check"` | Yes | - | Completion type |
|
|
395
|
+
| `check` | `string` | Yes | - | Shell command to run. Task stdout is piped to its stdin; exits 0 = pass |
|
|
400
396
|
| `timeout` | `string` | No | `"30s"` | Max time to wait for the check command |
|
|
401
397
|
|
|
402
398
|
---
|
|
403
399
|
|
|
404
400
|
### Built-in Middlewares
|
|
405
401
|
|
|
406
|
-
#### `static_context`
|
|
402
|
+
#### `static_context` - Prepend file content to prompt
|
|
407
403
|
|
|
408
404
|
| Field | Type | Required | Default | Description |
|
|
409
405
|
| ------- | ------------------ | -------- | ------------------------- | ---------------------------------------------- |
|
|
410
|
-
| `type` | `"static_context"` | Yes |
|
|
411
|
-
| `file` | `string` | Yes |
|
|
406
|
+
| `type` | `"static_context"` | Yes | - | Middleware type |
|
|
407
|
+
| `file` | `string` | Yes | - | Path to the context file (relative to workDir) |
|
|
412
408
|
| `label` | `string` | No | `"Reference: {filename}"` | Label for the injected context section |
|
|
413
409
|
|
|
414
410
|
## API
|
|
@@ -454,7 +450,7 @@ File and directory trigger watch paths may be relative to `workDir`, absolute, o
|
|
|
454
450
|
### Config: `@tagma/sdk/config`
|
|
455
451
|
|
|
456
452
|
- immutable config editing helpers
|
|
457
|
-
- raw validation helpers (`validateRaw`, plus `validateConfig` for the resolved-config counterpart
|
|
453
|
+
- raw validation helpers (`validateRaw`, plus `validateConfig` for the resolved-config counterpart - same function as `@tagma/sdk/yaml`'s `validateConfig`, re-exported here so config-editor code paths stay on `./config` without dipping into `./yaml`)
|
|
458
454
|
- resolved and raw DAG helpers
|
|
459
455
|
- task reference helpers
|
|
460
456
|
|
|
@@ -469,16 +465,16 @@ File and directory trigger watch paths may be relative to `workDir`, absolute, o
|
|
|
469
465
|
|
|
470
466
|
### Approval: `@tagma/sdk/approval`
|
|
471
467
|
|
|
472
|
-
- `InMemoryApprovalGateway`
|
|
468
|
+
- `InMemoryApprovalGateway` - default in-memory approval gateway implementation
|
|
473
469
|
- type re-exports: `ApprovalDecision`, `ApprovalEvent`, `ApprovalGateway`, `ApprovalListener`, `ApprovalOutcome`, `ApprovalRequest`, `ApprovalRequestHandle`
|
|
474
470
|
|
|
475
471
|
### Utils: `@tagma/sdk/utils`
|
|
476
472
|
|
|
477
|
-
- `parseDuration`, `validatePath`, `generateRunId`, `nowISO`, `truncateForName`
|
|
473
|
+
- `parseDuration`, `validatePath`, `generateRunId`, `nowISO`, `truncateForName` - small framework-free helpers re-exported from `@tagma/core`. See the Utilities table at the bottom of this README
|
|
478
474
|
|
|
479
475
|
### Runtime approval adapters
|
|
480
476
|
|
|
481
|
-
These ship in `@tagma/runtime-bun`, not `@tagma/sdk`
|
|
477
|
+
These ship in `@tagma/runtime-bun`, not `@tagma/sdk` - when you `bun add @tagma/sdk`, runtime-bun comes along as a transitive dep, but you import the adapters from runtime-bun directly:
|
|
482
478
|
|
|
483
479
|
- `@tagma/runtime-bun/adapters/stdin-approval`
|
|
484
480
|
- `@tagma/runtime-bun/adapters/websocket-approval`
|
|
@@ -522,21 +518,19 @@ Options:
|
|
|
522
518
|
- `approvalGateway` -- custom `ApprovalGateway` instance (defaults to `InMemoryApprovalGateway`)
|
|
523
519
|
- `signal` -- `AbortSignal` to cancel the run externally
|
|
524
520
|
- `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:
|
|
525
|
-
- `run_start`
|
|
526
|
-
- `task_update`
|
|
527
|
-
- `task_log`
|
|
528
|
-
- `run_end`
|
|
529
|
-
- `run_error`
|
|
530
|
-
- `approval_request` / `approval_resolved`
|
|
521
|
+
- `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.
|
|
522
|
+
- `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.
|
|
523
|
+
- `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.
|
|
524
|
+
- `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).
|
|
525
|
+
- `run_error` - reserved for fatal engine errors surfaced over the wire.
|
|
526
|
+
- `approval_request` / `approval_resolved` - bridged from the approval gateway so hosts see approvals on the same channel as task updates, without separately subscribing to the gateway.
|
|
531
527
|
- `runId` -- caller-supplied run ID. Must match `run_[A-Za-z0-9_-]{1,128}`. When provided the engine uses this instead of generating its own, keeping the caller and the SDK log directories aligned on the same ID
|
|
532
528
|
- `maxLogRuns` -- number of per-run log directories to keep under `<workDir>/.tagma/logs/` (default: 20)
|
|
533
529
|
- `skipPluginLoading` -- skip the engine's built-in `loadPlugins(config.plugins)` call. Set this when the host has already pre-loaded plugins from a custom resolution path (e.g. the editor loading from the user's workspace `node_modules`) so the engine doesn't re-resolve them via Node's default cwd-based import.
|
|
534
|
-
- `mode` -- override `config.mode` for this run. `safe` is the default. `safe` blocks `command` tasks, lifecycle hooks, automatic `pipeline.plugins` loading, execute permissions, and non-allowlisted driver/trigger/completion/middleware types.
|
|
535
|
-
- `safeModeAllowlist` -- extends the built-in safe-mode allowlist for trusted host integrations.
|
|
536
530
|
- `envPolicy` -- controls child process environment inheritance. Defaults to a minimal environment (`PATH`, home/user/temp/system keys). Use `{ mode: 'allowlist', keys: [...] }` or `{ mode: 'inherit' }` only when the host deliberately wants to expose more env vars.
|
|
537
531
|
- `logPrompt` -- when `true`, writes the final middleware-expanded prompt to the run log. Defaults to `false`.
|
|
538
532
|
|
|
539
|
-
> **stdout / stderr persistence.** With the default Bun runtime, the engine streams every task's stdout and stderr to disk under `<workDir>/.tagma/logs/<runId>/<taskId>.stdout` and `.stderr`. Custom runtimes can relocate those artifacts by implementing `runtime.logStore.taskOutputPath()`. The `TaskResult.stdout` / `stderr` strings are bounded tails (8 MB / 4 MB by default)
|
|
533
|
+
> **stdout / stderr persistence.** With the default Bun runtime, the engine streams every task's stdout and stderr to disk under `<workDir>/.tagma/logs/<runId>/<taskId>.stdout` and `.stderr`. Custom runtimes can relocate those artifacts by implementing `runtime.logStore.taskOutputPath()`. The `TaskResult.stdout` / `stderr` strings are bounded tails (8 MB / 4 MB by default) - long outputs are truncated from the head with a marker, and consumers that need the full bytes should read `TaskResult.stdoutPath` / `stderrPath`. Use `TaskResult.stdoutBytes` / `stderrBytes` to display "32 MB (truncated)" without re-stat'ing the file.
|
|
540
534
|
|
|
541
535
|
### Workflow graph YAML
|
|
542
536
|
|
|
@@ -569,14 +563,14 @@ Per-pipeline `lifecycle.max_runs` defaults to `1`. `lifecycle.stop_when` default
|
|
|
569
563
|
|
|
570
564
|
### `PipelineRunner`
|
|
571
565
|
|
|
572
|
-
Higher-level wrapper for managing multiple concurrent pipeline runs
|
|
566
|
+
Higher-level wrapper for managing multiple concurrent pipeline runs - designed for sidecar / Tauri IPC scenarios where the frontend controls pipeline lifecycle by ID.
|
|
573
567
|
|
|
574
568
|
```ts
|
|
575
569
|
import { PipelineRunner } from '@tagma/sdk/pipeline-runner';
|
|
576
570
|
|
|
577
571
|
const runner = new PipelineRunner(config, workDir, options?); // options: Omit<RunPipelineOptions, 'signal' | 'onEvent'>
|
|
578
572
|
|
|
579
|
-
// Subscribe before start
|
|
573
|
+
// Subscribe before start - handler is called for every RunEventPayload
|
|
580
574
|
const unsubscribe = runner.subscribe((event) => {
|
|
581
575
|
tauriEmit('run_event', { id: runner.instanceId, event });
|
|
582
576
|
});
|
|
@@ -593,7 +587,7 @@ runner.abort();
|
|
|
593
587
|
// per-task view without having to buffer the event stream themselves.
|
|
594
588
|
// task_output chunks are folded into RunTaskState.stdout/stderr while a task
|
|
595
589
|
// is running; the terminal task_update replaces them with the final bounded tail.
|
|
596
|
-
// Pipeline-wide log lines (taskId: null
|
|
590
|
+
// Pipeline-wide log lines (taskId: null - config dump, DAG topology,
|
|
597
591
|
// hook output without a [task:<id>] prefix) are NOT folded into any task's
|
|
598
592
|
// log buffer; subscribe at the event stream level if you need them.
|
|
599
593
|
const tasks = runner.getTasks(); // ReadonlyMap<taskId, RunTaskState>
|
|
@@ -601,9 +595,9 @@ const tasks = runner.getTasks(); // ReadonlyMap<taskId, RunTaskState>
|
|
|
601
595
|
|
|
602
596
|
Properties:
|
|
603
597
|
|
|
604
|
-
- `instanceId`
|
|
605
|
-
- `runId`
|
|
606
|
-
- `status`
|
|
598
|
+
- `instanceId` - stable ID assigned at construction, safe to use as a Map key before `start()`
|
|
599
|
+
- `runId` - engine-assigned run ID, available after the first `run_start` event (`null` until then)
|
|
600
|
+
- `status` - `'idle' | 'running' | 'done' | 'aborted' | 'failed'` (see `PipelineRunnerStatus`). `aborted` covers caller-initiated `abort()`; `failed` covers thrown engine errors and completed runs whose `EngineResult.success` is `false`.
|
|
607
601
|
|
|
608
602
|
### `TriggerBlockedError` / `TriggerTimeoutError`
|
|
609
603
|
|
|
@@ -676,7 +670,7 @@ export const HttpTrigger: TriggerPlugin = {
|
|
|
676
670
|
|
|
677
671
|
Trigger `watch()` methods must return `{ fired, dispose }`: the engine awaits
|
|
678
672
|
`fired` and calls `dispose()` on success, failure, task timeout, and pipeline
|
|
679
|
-
abort. The schema is purely descriptive
|
|
673
|
+
abort. The schema is purely descriptive - plugins still perform their own runtime validation. Supported field types: `string`, `number`, `boolean`, `enum`, `path`, `duration`, `number-or-list`, `command`, `json`. Each field can declare `required`, `default`, `description`, `enum`, `min`/`max`, `placeholder`. Built-in plugins (`file`/`manual` triggers; `exit_code`/`file_exists`/`output_check` completions; `static_context` middleware) all ship with schemas so editors can generate forms out of the box.
|
|
680
674
|
|
|
681
675
|
### `PluginRegistry.getHandler(category, type): PluginType`
|
|
682
676
|
|
|
@@ -692,7 +686,7 @@ Lists all registered handler type names for a plugin category (`'drivers'`, `'tr
|
|
|
692
686
|
|
|
693
687
|
### `resolveConfig(raw: RawPipelineConfig, workDir: string): PipelineConfig`
|
|
694
688
|
|
|
695
|
-
Resolves a raw pipeline config into a fully resolved `PipelineConfig`
|
|
689
|
+
Resolves a raw pipeline config into a fully resolved `PipelineConfig` - applies inheritance (pipeline -> track -> task) for driver, model, permissions, and cwd. Validates and resolves all file paths against `workDir`.
|
|
696
690
|
|
|
697
691
|
Use `loadPipeline` for the common parse-and-resolve flow. Use `resolveConfig` directly when you need to manipulate the raw config between parsing and resolution.
|
|
698
692
|
|
|
@@ -706,7 +700,7 @@ Starts a WebSocket server for remote approval decisions.
|
|
|
706
700
|
|
|
707
701
|
### Config CRUD (`config-ops`)
|
|
708
702
|
|
|
709
|
-
Pure, immutable helper functions for building and editing `RawPipelineConfig` in a visual editor. No runtime dependencies
|
|
703
|
+
Pure, immutable helper functions for building and editing `RawPipelineConfig` in a visual editor. No runtime dependencies - safe to use in renderer processes.
|
|
710
704
|
|
|
711
705
|
```ts
|
|
712
706
|
import {
|
|
@@ -741,11 +735,11 @@ const yaml = serializePipeline(config);
|
|
|
741
735
|
| `moveTrack(config, trackId, toIndex)` | Reorder a track |
|
|
742
736
|
| `updateTrack(config, trackId, fields)` | Patch track fields (not tasks) |
|
|
743
737
|
| `upsertTask(config, trackId, task)` | Insert or replace a task |
|
|
744
|
-
| `removeTask(config, trackId, taskId, cleanRefs?)` | Remove a task; pass `cleanRefs: true` to also strip dangling `depends_on` / `continue_from` / `inputs.from` references. Only refs that resolve to the deleted task are removed
|
|
738
|
+
| `removeTask(config, trackId, taskId, cleanRefs?)` | Remove a task; pass `cleanRefs: true` to also strip dangling `depends_on` / `continue_from` / `inputs.from` references. Only refs that resolve to the deleted task are removed - same-named tasks in other tracks are unaffected |
|
|
745
739
|
| `moveTask(config, trackId, taskId, toIndex)` | Reorder a task within its track |
|
|
746
740
|
| `transferTask(config, fromTrackId, taskId, toTrackId, qualifyRefs?)` | Move a task across tracks (see invariants below) |
|
|
747
741
|
|
|
748
|
-
`transferTask` invariants
|
|
742
|
+
`transferTask` invariants - the call is a **no-op** (returns the input config unchanged) when:
|
|
749
743
|
|
|
750
744
|
- the target track doesn't exist, **or**
|
|
751
745
|
- the target track already contains a task with the same id
|
|
@@ -757,11 +751,11 @@ When `qualifyRefs` is `true` (default), reference rewriting runs in two passes s
|
|
|
757
751
|
- the **moved task's own** bare `depends_on`, `continue_from`, and `inputs.from` entries that pointed at siblings in the source track are rewritten to `fromTrackId.<dep>` (so they keep pointing at the original peers, not at coincidental same-named tasks in the destination track)
|
|
758
752
|
- bare references **from other tasks** that resolved to the moved task are rewritten to `toTrackId.taskId` when same-track resolution would otherwise break (i.e. no shadow task exists in the referencing track and no other track still holds the bare id globally); this includes `depends_on`, `continue_from`, and `inputs.from`
|
|
759
753
|
|
|
760
|
-
Pass `qualifyRefs: false` to skip both passes
|
|
754
|
+
Pass `qualifyRefs: false` to skip both passes - useful when the caller is doing a batch move and will requalify everything itself.
|
|
761
755
|
|
|
762
756
|
### `parseYaml(content: string): RawPipelineConfig`
|
|
763
757
|
|
|
764
|
-
Parses a YAML string and returns the raw (unresolved) pipeline config. Use this when you need to edit and re-save YAML without losing relative paths or user-authored formatting
|
|
758
|
+
Parses a YAML string and returns the raw (unresolved) pipeline config. Use this when you need to edit and re-save YAML without losing relative paths or user-authored formatting - pass the result to `serializePipeline()` rather than going through `loadPipeline()`.
|
|
765
759
|
|
|
766
760
|
### `deresolvePipeline(config: PipelineConfig, workDir: string): RawPipelineConfig`
|
|
767
761
|
|
|
@@ -770,7 +764,7 @@ Converts a resolved `PipelineConfig` back to a `RawPipelineConfig` suitable for
|
|
|
770
764
|
Use this when you have a programmatically modified resolved config and need to save it back to YAML:
|
|
771
765
|
|
|
772
766
|
```ts
|
|
773
|
-
// Correct: load
|
|
767
|
+
// Correct: load -> modify resolved config -> deresolve -> save
|
|
774
768
|
const config = await loadPipeline(yaml, workDir);
|
|
775
769
|
const modified = { ...config, name: 'renamed' };
|
|
776
770
|
const savedYaml = serializePipeline(deresolvePipeline(modified, workDir));
|
|
@@ -783,13 +777,13 @@ const savedYaml = serializePipeline(updatedRaw);
|
|
|
783
777
|
|
|
784
778
|
### `validateConfig(config: PipelineConfig, workDir?: string): string[]`
|
|
785
779
|
|
|
786
|
-
Validates a resolved pipeline config without executing it. Checks DAG structure (cycles, missing dependencies). When `workDir` is supplied, also validates that every track / task `cwd` resolves inside it (no `..` traversal, no absolute paths escaping the root); without `workDir`, cwd paths are not checked offline (the engine still rejects unsafe cwds at run time, but you do not get an offline diagnostic). Returns an array of error message strings
|
|
780
|
+
Validates a resolved pipeline config without executing it. Checks DAG structure (cycles, missing dependencies). When `workDir` is supplied, also validates that every track / task `cwd` resolves inside it (no `..` traversal, no absolute paths escaping the root); without `workDir`, cwd paths are not checked offline (the engine still rejects unsafe cwds at run time, but you do not get an offline diagnostic). Returns an array of error message strings - empty means valid.
|
|
787
781
|
|
|
788
782
|
Use `validateRaw` for editing raw configs in a UI; pass `workDir` to `validateConfig` after `resolveConfig` for a final pre-run check that also covers cwd safety.
|
|
789
783
|
|
|
790
784
|
### Bindings API
|
|
791
785
|
|
|
792
|
-
Pure helpers backing typed task bindings and internal prompt-contract inference. Safe to use in editors, simulators, and custom drivers
|
|
786
|
+
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. Imported from `@tagma/sdk/dataflow`:
|
|
793
787
|
|
|
794
788
|
| Function | Description |
|
|
795
789
|
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -802,15 +796,15 @@ Pure helpers backing typed task bindings and internal prompt-contract inference.
|
|
|
802
796
|
|
|
803
797
|
Prompt-document helpers (`prependContext`, `renderInputsBlock`, `renderOutputSchemaBlock`) live in `@tagma/core` and are not re-exported through any `@tagma/sdk` subpath. Custom drivers / engines that need them should `import { prependContext, renderInputsBlock, renderOutputSchemaBlock } from '@tagma/core'` directly.
|
|
804
798
|
|
|
805
|
-
Custom drivers that wrap the prompt in their own envelope can read `DriverContext.inputs` (resolved + coerced map keyed by port name) and call `substituteInputs` themselves
|
|
799
|
+
Custom drivers that wrap the prompt in their own envelope can read `DriverContext.inputs` (resolved + coerced map keyed by port name) and call `substituteInputs` themselves - the engine has already substituted into `task.prompt` upstream, so most drivers can ignore this.
|
|
806
800
|
|
|
807
801
|
### `validateRaw(config: RawPipelineConfig, knownTypes?: KnownPluginTypes): ValidationError[]`
|
|
808
802
|
|
|
809
|
-
Validates a raw pipeline config without resolving inheritance or executing anything. Returns a flat list of `{ path, message, severity? }` objects
|
|
803
|
+
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).
|
|
810
804
|
|
|
811
|
-
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
|
|
805
|
+
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), `{{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.
|
|
812
806
|
|
|
813
|
-
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
|
|
807
|
+
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.
|
|
814
808
|
|
|
815
809
|
Plugin **schemas** elevate the check from "type exists" to "type exists AND every config field matches the declared schema". Supply `knownTypes.schemas` (a `{ triggers, completions, middlewares }` map of `Record<typeName, PluginSchema | undefined>`) and `validateRaw` runs the same per-field guard core preflight runs at engine startup: a `timeout: "garbage"` on a `manual` trigger is reported at edit time, an out-of-enum `kind: "symlink"` on `file_exists` lights up before save, etc. Schema errors are returned as plain `error` (not `warning`) so editors block save on them just like other structural errors. Hosts collect schemas from the registry via `registry.getHandler(category, type).schema`.
|
|
816
810
|
|
|
@@ -833,7 +827,7 @@ errors.forEach((e) => highlightNode(e.path, e.message, e.severity ?? 'error'));
|
|
|
833
827
|
|
|
834
828
|
### `compileYamlContent(content: string, opts?: CompileYamlOptions): YamlCompileResult`
|
|
835
829
|
|
|
836
|
-
One-shot YAML
|
|
830
|
+
One-shot YAML -> diagnostics for editor compile flows. Distinguishes **YAML syntax errors** (`parseOk: false`, `validation.errors` empty, `summary` starts with `"YAML parse error:"`) from **schema / structure errors** (`parseOk: true`, errors land in `validation.errors`). Half-built configs - missing top-level `pipeline`, non-object `pipeline`, non-array `tracks` / `tasks`, malformed `permissions` - surface as ordinary validation errors rather than parse failures or `"Validation crashed"` messages, so the editor never crashes on in-progress YAML.
|
|
837
831
|
|
|
838
832
|
```ts
|
|
839
833
|
const result = compileYamlContent(yaml, {
|
|
@@ -854,27 +848,27 @@ if (!result.parseOk) {
|
|
|
854
848
|
}
|
|
855
849
|
```
|
|
856
850
|
|
|
857
|
-
`opts.knownTypes` is forwarded to `validateRaw` (see above)
|
|
851
|
+
`opts.knownTypes` is forwarded to `validateRaw` (see above) - pass it when the host has loaded its plugin registry so unregistered plugin types light up as warnings; omit it for offline validation.
|
|
858
852
|
|
|
859
853
|
`YamlCompileResult` shape: `{ timestamp, sourceName, success, parseOk, validation: { errors, warnings }, summary }`. `success` is `true` only when there are zero errors (warnings don't count). `validation.errors` and `validation.warnings` carry `{ path, message }` projections of the underlying `ValidationError` list.
|
|
860
854
|
|
|
861
855
|
### `buildRawDag(config: RawPipelineConfig): RawDag`
|
|
862
856
|
|
|
863
|
-
Extracts the topology of a raw (unresolved) pipeline config as a graph
|
|
857
|
+
Extracts the topology of a raw (unresolved) pipeline config as a graph - no `workDir` or plugin registration required. Intended for the visual editor to render the flow graph during editing.
|
|
864
858
|
|
|
865
859
|
Returns `{ nodes: ReadonlyMap<taskId, RawDagNode>, edges: { from, to }[] }` where each edge represents a dependency (from must complete before to). Unresolvable refs are silently skipped.
|
|
866
860
|
|
|
867
861
|
```ts
|
|
868
862
|
const { nodes, edges } = buildRawDag(draftConfig);
|
|
869
|
-
// nodes
|
|
870
|
-
// edges
|
|
863
|
+
// nodes - keyed by "trackId.taskId"
|
|
864
|
+
// edges - [{ from: "track.taskA", to: "track.taskB" }, ...]
|
|
871
865
|
```
|
|
872
866
|
|
|
873
867
|
Use `buildDag` instead when you have a fully resolved `PipelineConfig` and need topological sort order.
|
|
874
868
|
|
|
875
869
|
### `Logger`
|
|
876
870
|
|
|
877
|
-
Dual-channel logger
|
|
871
|
+
Dual-channel logger - console + file. Creates a per-run log file at `<workDir>/.tagma/logs/<runId>/pipeline.log`. `Logger` itself is exported from `@tagma/core` (not re-exported through `@tagma/sdk`); the Bun runtime's `logStore` provides the filesystem backing.
|
|
878
872
|
|
|
879
873
|
```ts
|
|
880
874
|
import { bunRuntime } from '@tagma/sdk';
|
|
@@ -885,8 +879,8 @@ logger.info('[track]', 'message'); // console + file
|
|
|
885
879
|
logger.warn('[track]', 'message'); // console + file
|
|
886
880
|
logger.error('[track]', 'message'); // console + file
|
|
887
881
|
logger.debug('[track]', 'message'); // file only
|
|
888
|
-
logger.section('Title'); // file only
|
|
889
|
-
logger.quiet(bulkText); // file only
|
|
882
|
+
logger.section('Title'); // file only - visual separator
|
|
883
|
+
logger.quiet(bulkText); // file only - bulk payload
|
|
890
884
|
logger.path; // log file path
|
|
891
885
|
logger.dir; // run artifact directory
|
|
892
886
|
logger.close(); // close the persistent file handle (called automatically when Tagma.run completes)
|
|
@@ -908,7 +902,7 @@ const logger = new Logger(workDir, runId, bunRuntime().logStore, (record: LogRec
|
|
|
908
902
|
```
|
|
909
903
|
|
|
910
904
|
`section` and `quiet` carry no prefix, so pass an explicit `taskId` when the
|
|
911
|
-
line logically belongs to a task
|
|
905
|
+
line logically belongs to a task - the extractor cannot infer one otherwise:
|
|
912
906
|
|
|
913
907
|
```ts
|
|
914
908
|
logger.section(`Task ${taskId}`, taskId);
|
|
@@ -921,7 +915,7 @@ Returns the last `n` non-empty lines of `text`, joined with newlines. Imported f
|
|
|
921
915
|
|
|
922
916
|
### `clip(text: string, maxBytes?: number): string`
|
|
923
917
|
|
|
924
|
-
Truncates `text` to at most `maxBytes` UTF-8 bytes (default 16 KB), appending a
|
|
918
|
+
Truncates `text` to at most `maxBytes` UTF-8 bytes (default 16 KB), appending a `...truncated N bytes]` marker when truncation occurs. Multi-byte characters (CJK, emoji) are counted correctly. Imported from `@tagma/core` (not re-exported through `@tagma/sdk`).
|
|
925
919
|
|
|
926
920
|
### Utilities
|
|
927
921
|
|
|
@@ -929,7 +923,7 @@ Imported from `@tagma/sdk/utils`:
|
|
|
929
923
|
|
|
930
924
|
| Function | Description |
|
|
931
925
|
| ------------------------------------- | --------------------------------------------------------- |
|
|
932
|
-
| `parseDuration(input)` | Parses `"30s"`, `"5m"`, `"2h"`
|
|
926
|
+
| `parseDuration(input)` | Parses `"30s"`, `"5m"`, `"2h"` -> milliseconds |
|
|
933
927
|
| `validatePath(filePath, projectRoot)` | Resolves path, throws if it escapes project root |
|
|
934
928
|
| `generateRunId()` | Generates a unique run ID (`run_<ts>_<seq>_<rand>`) |
|
|
935
929
|
| `nowISO()` | Returns `new Date().toISOString()` |
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,51 +1,4 @@
|
|
|
1
1
|
import type { PluginRegistry } from '@tagma/core';
|
|
2
|
-
/**
|
|
3
|
-
* Safe-mode built-ins: plugins that do not execute arbitrary code or shell
|
|
4
|
-
* commands. These are registered with `{ safeMode: true }` and are available
|
|
5
|
-
* under `mode: 'safe'` pipelines without explicit allowlist entries.
|
|
6
|
-
*/
|
|
7
|
-
export declare const SafeBuiltinTagmaPlugin: {
|
|
8
|
-
name: string;
|
|
9
|
-
capabilities: {
|
|
10
|
-
drivers: {
|
|
11
|
-
opencode: import("@tagma/types").DriverPlugin;
|
|
12
|
-
};
|
|
13
|
-
triggers: {
|
|
14
|
-
directory: import("@tagma/types").TriggerPlugin;
|
|
15
|
-
file: import("@tagma/types").TriggerPlugin;
|
|
16
|
-
manual: import("@tagma/types").TriggerPlugin;
|
|
17
|
-
};
|
|
18
|
-
completions: {
|
|
19
|
-
exit_code: import("@tagma/types").CompletionPlugin;
|
|
20
|
-
file_exists: import("@tagma/types").CompletionPlugin;
|
|
21
|
-
};
|
|
22
|
-
middlewares: {
|
|
23
|
-
static_context: import("@tagma/types").MiddlewarePlugin;
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Unsafe built-ins: plugins that execute arbitrary shell commands and must
|
|
29
|
-
* NOT be in the safe-mode allowlist. These require explicit caller opt-in
|
|
30
|
-
* via `safeModeAllowlist` or `mode: 'trusted'`.
|
|
31
|
-
*
|
|
32
|
-
* `output_check` pipes task output into a user-specified shell command,
|
|
33
|
-
* which is a direct command-execution vector. Including it in safe mode
|
|
34
|
-
* would bypass the safe-mode intent that blocks command execution.
|
|
35
|
-
*/
|
|
36
|
-
export declare const UnsafeBuiltinTagmaPlugin: {
|
|
37
|
-
name: string;
|
|
38
|
-
capabilities: {
|
|
39
|
-
completions: {
|
|
40
|
-
output_check: import("@tagma/types").CompletionPlugin;
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Combined built-in plugin bundle for backward compatibility. Includes both
|
|
46
|
-
* safe and unsafe plugins. Use `bootstrapBuiltins()` to register with
|
|
47
|
-
* proper safe-mode scoping.
|
|
48
|
-
*/
|
|
49
2
|
export declare const BuiltinTagmaPlugin: {
|
|
50
3
|
name: string;
|
|
51
4
|
capabilities: {
|
|
@@ -58,9 +11,9 @@ export declare const BuiltinTagmaPlugin: {
|
|
|
58
11
|
manual: import("@tagma/types").TriggerPlugin;
|
|
59
12
|
};
|
|
60
13
|
completions: {
|
|
61
|
-
output_check: import("@tagma/types").CompletionPlugin;
|
|
62
14
|
exit_code: import("@tagma/types").CompletionPlugin;
|
|
63
15
|
file_exists: import("@tagma/types").CompletionPlugin;
|
|
16
|
+
output_check: import("@tagma/types").CompletionPlugin;
|
|
64
17
|
};
|
|
65
18
|
middlewares: {
|
|
66
19
|
static_context: import("@tagma/types").MiddlewarePlugin;
|
|
@@ -72,17 +25,6 @@ export declare const BuiltinTagmaPlugin: {
|
|
|
72
25
|
* PluginRegistry per workspace or SDK instance and call this once per
|
|
73
26
|
* instance so each workspace sees the same built-ins without sharing
|
|
74
27
|
* registration state.
|
|
75
|
-
*
|
|
76
|
-
* Built-in handlers are stateless module singletons — registering the same
|
|
77
|
-
* handler object into N registries is cheap and safe; no cloning is needed.
|
|
78
|
-
*
|
|
79
|
-
* Safe built-ins register with `{ safeMode: true }` so they are automatically
|
|
80
|
-
* available under `mode: 'safe'` pipelines without explicit allowlist entries.
|
|
81
|
-
* Unsafe built-ins (output_check, which executes arbitrary shell commands)
|
|
82
|
-
* register WITHOUT safeMode, requiring explicit caller opt-in.
|
|
83
|
-
*
|
|
84
|
-
* The registry's `getSafeModeDefaults()` surfaces these to the engine's 3-way
|
|
85
|
-
* safe-mode merge (hardcoded defaults ∪ registry-declared ∪ caller-supplied).
|
|
86
28
|
*/
|
|
87
29
|
export declare function bootstrapBuiltins(target: PluginRegistry): void;
|
|
88
30
|
//# sourceMappingURL=bootstrap.d.ts.map
|
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,aAAa,CAAC;AAuBlD
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuBlD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;CAoBR,CAAC;AAExB;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAE9D"}
|