@loxtep/sdk 0.3.0 → 0.4.0

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.
Files changed (95) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +114 -4
  3. package/dist/authoring/compiler.d.ts +5 -0
  4. package/dist/authoring/compiler.d.ts.map +1 -1
  5. package/dist/authoring/compiler.js +149 -0
  6. package/dist/authoring/compiler.js.map +1 -1
  7. package/dist/authoring/index.d.ts +1 -1
  8. package/dist/authoring/index.d.ts.map +1 -1
  9. package/dist/authoring/index.js.map +1 -1
  10. package/dist/authoring/types.d.ts +47 -0
  11. package/dist/authoring/types.d.ts.map +1 -1
  12. package/dist/cli/commands/data-contracts-cmd.d.ts +8 -0
  13. package/dist/cli/commands/data-contracts-cmd.d.ts.map +1 -1
  14. package/dist/cli/commands/data-contracts-cmd.js +11 -0
  15. package/dist/cli/commands/data-contracts-cmd.js.map +1 -1
  16. package/dist/cli/commands/data-products-cmd.d.ts +2 -0
  17. package/dist/cli/commands/data-products-cmd.d.ts.map +1 -1
  18. package/dist/cli/commands/data-products-cmd.js +35 -0
  19. package/dist/cli/commands/data-products-cmd.js.map +1 -1
  20. package/dist/cli/commands/instances-cmd.d.ts +37 -0
  21. package/dist/cli/commands/instances-cmd.d.ts.map +1 -0
  22. package/dist/cli/commands/instances-cmd.js +150 -0
  23. package/dist/cli/commands/instances-cmd.js.map +1 -0
  24. package/dist/cli/index.d.ts +4 -1
  25. package/dist/cli/index.d.ts.map +1 -1
  26. package/dist/cli/index.js +94 -4
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/client/data-products-types.d.ts +23 -0
  29. package/dist/client/data-products-types.d.ts.map +1 -1
  30. package/dist/client/data-products.d.ts +3 -1
  31. package/dist/client/data-products.d.ts.map +1 -1
  32. package/dist/client/data-products.js +16 -0
  33. package/dist/client/data-products.js.map +1 -1
  34. package/dist/client/{consumptions-types.d.ts → delivery-types.d.ts} +25 -8
  35. package/dist/client/delivery-types.d.ts.map +1 -0
  36. package/dist/client/delivery-types.js +10 -0
  37. package/dist/client/delivery-types.js.map +1 -0
  38. package/dist/client/delivery.d.ts +23 -0
  39. package/dist/client/delivery.d.ts.map +1 -0
  40. package/dist/client/delivery.js +105 -0
  41. package/dist/client/delivery.js.map +1 -0
  42. package/dist/client/index.d.ts +2 -1
  43. package/dist/client/index.d.ts.map +1 -1
  44. package/dist/client/index.js.map +1 -1
  45. package/dist/client/instances-types.d.ts +92 -0
  46. package/dist/client/instances-types.d.ts.map +1 -1
  47. package/dist/client/instances.d.ts +26 -4
  48. package/dist/client/instances.d.ts.map +1 -1
  49. package/dist/client/instances.js +94 -3
  50. package/dist/client/instances.js.map +1 -1
  51. package/dist/client/loxtep-client.d.ts +3 -3
  52. package/dist/client/loxtep-client.d.ts.map +1 -1
  53. package/dist/client/loxtep-client.js +5 -5
  54. package/dist/client/loxtep-client.js.map +1 -1
  55. package/dist/client/promises.d.ts +11 -0
  56. package/dist/client/promises.d.ts.map +1 -1
  57. package/dist/client/promises.js +11 -0
  58. package/dist/client/promises.js.map +1 -1
  59. package/dist/client/schemas.d.ts +1 -0
  60. package/dist/client/schemas.d.ts.map +1 -1
  61. package/dist/client/schemas.js +4 -0
  62. package/dist/client/schemas.js.map +1 -1
  63. package/dist/client/thesaurus.d.ts +5 -0
  64. package/dist/client/thesaurus.d.ts.map +1 -1
  65. package/dist/client/thesaurus.js +12 -0
  66. package/dist/client/thesaurus.js.map +1 -1
  67. package/docs/getting-started.md +7 -0
  68. package/package.json +3 -3
  69. package/dist/cli/commands/data-assets-cmd.d.ts +0 -12
  70. package/dist/cli/commands/data-assets-cmd.d.ts.map +0 -1
  71. package/dist/cli/commands/data-assets-cmd.js +0 -75
  72. package/dist/cli/commands/data-assets-cmd.js.map +0 -1
  73. package/dist/cli/commands/pipelines-cmd.d.ts +0 -17
  74. package/dist/cli/commands/pipelines-cmd.d.ts.map +0 -1
  75. package/dist/cli/commands/pipelines-cmd.js +0 -52
  76. package/dist/cli/commands/pipelines-cmd.js.map +0 -1
  77. package/dist/cli/commands/promises-cmd.d.ts +0 -11
  78. package/dist/cli/commands/promises-cmd.d.ts.map +0 -1
  79. package/dist/cli/commands/promises-cmd.js +0 -53
  80. package/dist/cli/commands/promises-cmd.js.map +0 -1
  81. package/dist/client/consumptions-types.d.ts.map +0 -1
  82. package/dist/client/consumptions-types.js +0 -5
  83. package/dist/client/consumptions-types.js.map +0 -1
  84. package/dist/client/consumptions.d.ts +0 -14
  85. package/dist/client/consumptions.d.ts.map +0 -1
  86. package/dist/client/consumptions.js +0 -47
  87. package/dist/client/consumptions.js.map +0 -1
  88. package/dist/client/data-assets-types.d.ts +0 -150
  89. package/dist/client/data-assets-types.d.ts.map +0 -1
  90. package/dist/client/data-assets-types.js +0 -5
  91. package/dist/client/data-assets-types.js.map +0 -1
  92. package/dist/client/data-assets.d.ts +0 -31
  93. package/dist/client/data-assets.d.ts.map +0 -1
  94. package/dist/client/data-assets.js +0 -182
  95. package/dist/client/data-assets.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,74 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to
7
7
  [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
8
 
9
+ ## [0.4.0] - 2026-07-13
10
+
11
+ ### Breaking changes
12
+
13
+ - **`consumptions` namespace removed** — use `data_products.delivery` and `DeliveryInterface` instead.
14
+
15
+ ### Added
16
+
17
+ - **`data_products.delivery` namespace** — `list`, `create`, `update`, and `delete` for delivery interfaces.
18
+ - **`data_products.readiness` / `data_products.promote`** — medallion tier promotion APIs.
19
+ - **`instances` client namespace** and **`loxtep instances` CLI** — list, get, create, and update runtime instances.
20
+ - **Data product promotion CLI** — `loxtep data-products readiness` and `loxtep data-products promote`.
21
+ - **Data contracts CLI** — `loxtep data-contracts create`.
22
+
23
+ ### Changed
24
+
25
+ - Flow and data-product writers now delegate buffering/batching to the rstreams `load` stream via `createQueueWriter`.
26
+
27
+ ---
28
+
29
+ ## [0.3.0] - 2026-06-08
30
+
31
+ ### Terminology Migration
32
+
33
+ The SDK now uses "delivery" terminology as the primary interface, replacing the
34
+ overloaded "consumption" vocabulary. This aligns the SDK with the platform UI,
35
+ documentation, and MCP tool names.
36
+
37
+ **Namespace rename:** `consumptions` → `delivery`
38
+
39
+ ```ts
40
+ const interfaces = await client.dataProducts.delivery.list(dpId);
41
+ ```
42
+
43
+ **Type:** `DeliveryInterface`
44
+
45
+ ```ts
46
+ import type { DeliveryInterface } from '@loxtep/sdk';
47
+ ```
48
+
49
+ **`deliveryType` field on `DeliveryInterface`:**
50
+
51
+ ```ts
52
+ const webhook: DeliveryInterface = {
53
+ id: 'di_...',
54
+ deliveryType: 'webhook',
55
+ endpointUrl: 'https://example.com/hook',
56
+ method: 'POST',
57
+ // ...
58
+ };
59
+ ```
60
+
61
+ The old `consumptions` namespace and `Consumption` type have been removed.
62
+
63
+ ### New features
64
+
65
+ - **`dataProducts.delivery` namespace** — Primary namespace for managing delivery
66
+ interfaces with `list()`, `create()`, `update()`, and `delete()` methods.
67
+ - **`DeliveryInterface` type** — Includes a `deliveryType` discriminator field
68
+ (`'webhook' | 'api_endpoint' | 'export' | 'database_sync' | 'bi_connect' | 'event_stream'`).
69
+
70
+ ### Removed
71
+
72
+ - `dataProducts.consumptions` namespace — removed. Use `dataProducts.delivery`.
73
+ - `Consumption` type — removed. Use `DeliveryInterface`.
74
+
75
+ ---
76
+
9
77
  ## [0.2.0] - Unreleased
10
78
 
11
79
  ### Breaking changes
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Client for the Loxtep API. Customer-facing surface: **data_products**,
4
4
  **flows**, **connections**, **queues**, **quality**, **catalog**, **discovery**,
5
5
  **schemas**, **projects**, **domains**, **standards**, **data_contracts**,
6
- **workflows**, **templates**, **connectors**, **instances**, **consumptions**,
6
+ **workflows**, **templates**, **connectors**, **instances**, **delivery**,
7
7
  **thesaurus**, **procedures**, **metrics**.
8
8
 
9
9
  **Node.js 22+** is the supported runtime (`engines` in `package.json`). **Live**
@@ -11,7 +11,24 @@ queue/flow writes use the **Loxtep stream** data plane; configure stream bus
11
11
  resources (`streams` on `LoxtepClient` and instance env from your stack) and AWS
12
12
  credentials for SigV4 on both REST and the bus.
13
13
 
14
- ## Quick start (< 5 min to first stream)
14
+ ## Ways to get started
15
+
16
+ This SDK supports two developer workflows:
17
+
18
+ | Path | Use case | Entry point |
19
+ |------|----------|-------------|
20
+ | **Programmatic** | Write/read events from application code (microservices, lambdas, scripts) | `LoxtepClient` → `data_products.get_writer` / `get_reader` |
21
+ | **Code-first CLI** | Author workflows as TypeScript, test locally, deploy via CI | `loxtep init → attach → generate → test → deploy` |
22
+
23
+ There are also two additional paths that don't require this SDK:
24
+ - **Agent-first (MCP)** — drive Loxtep conversationally from Cursor, Kiro, Claude, etc. See [loxtep-plugins-skills](https://github.com/LoxtepInc/loxtep-plugins-skills).
25
+ - **Web UI** — visual project setup and management at [app.loxtep.io](https://app.loxtep.io).
26
+
27
+ All paths are documented in the [Loxtep Quickstart](https://docs.loxtep.io/quickstart).
28
+
29
+ ---
30
+
31
+ ## Quick start — Programmatic (< 5 min to first stream)
15
32
 
16
33
  1. **Install**
17
34
 
@@ -85,6 +102,60 @@ credentials for SigV4 on both REST and the bus.
85
102
  JWT-backed client. Note: `data_products.get_writer` and `get_reader` resolve
86
103
  stream config automatically — this is only needed for manual bus access.
87
104
 
105
+ ---
106
+
107
+ ## Quick start — Code-first CLI (init → deploy)
108
+
109
+ For developers who author workflows as TypeScript and want the full local-dev-to-production lifecycle:
110
+
111
+ ```bash
112
+ # 1. Install
113
+ npm install @loxtep/sdk
114
+
115
+ # 2. Authenticate
116
+ npx loxtep login
117
+
118
+ # 3. Scaffold a project from a template
119
+ npx loxtep init --template shopify-orders
120
+
121
+ # 4. Bind to a runtime instance
122
+ npx loxtep attach --instance prod
123
+
124
+ # 5. Generate typed workspace constants
125
+ npx loxtep generate
126
+
127
+ # 6. Author a workflow (see authoring module docs below)
128
+
129
+ # 7. Test locally with a sample event
130
+ npx loxtep test orders-enricher --event ./events/order-created.json
131
+
132
+ # 8. Deploy to the workflow engine
133
+ npx loxtep deploy
134
+ ```
135
+
136
+ The `generate` step produces `.loxtep/generated/index.ts` with typed constants for every data product, connector, domain, and queue in your workspace. Import them in your workflow modules for compile-time safety:
137
+
138
+ ```ts
139
+ import { defineDataWorkflow, on } from '@loxtep/sdk/authoring'
140
+ import { workspace } from './.loxtep/generated'
141
+
142
+ export default defineDataWorkflow({
143
+ name: 'orders-enricher',
144
+ triggers: [on.queueEvent(workspace.queues.orders_raw)],
145
+ async handler(ctx, event) {
146
+ await ctx.toolbox.dataProducts.upsert({
147
+ dataProduct: workspace.dataProducts.orders_enriched,
148
+ domain: workspace.domains.commerce,
149
+ record: event,
150
+ })
151
+ },
152
+ })
153
+ ```
154
+
155
+ See `loxtep init --help`, `loxtep attach --help`, etc. for all flags. The full CLI reference is in the [CLI reference](#cli-reference) section below.
156
+
157
+ ---
158
+
88
159
  ## API surface
89
160
 
90
161
  - **data_products** – get, get_lexicon, list, search, query, list_tables,
@@ -108,7 +179,7 @@ credentials for SigV4 on both REST and the bus.
108
179
  - **standards** – list, get
109
180
  - **data_contracts** – list, get
110
181
  - **thesaurus** – listTerms, resolveCanonicalKey
111
- - **consumptions** – list, get, create, update, delete
182
+ - **delivery** – list, get, create, update, delete
112
183
  - **instances** – list, get, get_stream_config
113
184
  - **procedures** – list
114
185
  - **metrics** – log, get_reporter
@@ -184,6 +255,39 @@ for await (const event of filterStream(
184
255
  }
185
256
  ```
186
257
 
258
+ ## Delivery interfaces
259
+
260
+ Configure how a data product delivers data to external systems.
261
+
262
+ ```ts
263
+ import { LoxtepClient } from '@loxtep/sdk';
264
+ import type { DeliveryInterface, DeliveryCreateInput } from '@loxtep/sdk';
265
+
266
+ const client = new LoxtepClient({
267
+ api_url: 'https://api.loxtep.com',
268
+ auth: { type: 'jwt', token: process.env.LOXTEP_AUTH_TOKEN! },
269
+ });
270
+
271
+ // List delivery interfaces for a data product
272
+ const { items, pagination } = await client.delivery.list('dp_abc123');
273
+
274
+ // Create a webhook delivery interface
275
+ const webhook = await client.delivery.create('dp_abc123', {
276
+ deliveryType: 'webhook',
277
+ name: 'Order notifications',
278
+ endpoint_url: 'https://example.com/webhooks/orders',
279
+ method: 'POST',
280
+ });
281
+
282
+ // Update a delivery interface
283
+ await client.delivery.update('dp_abc123', webhook.consumption_id, {
284
+ is_active: false,
285
+ });
286
+
287
+ // Delete a delivery interface
288
+ await client.delivery.delete('dp_abc123', webhook.consumption_id);
289
+ ```
290
+
187
291
  ## Documentation
188
292
 
189
293
  - **Getting started** – Zero to first event in under 5 minutes.
@@ -203,7 +307,13 @@ for await (const event of filterStream(
203
307
  | `login --email <e> --password <p>` | Headless login for CI (optional `--mfa-code`) |
204
308
  | `logout` | Remove stored credentials |
205
309
  | `whoami` | Print current user and organization |
206
- | `init` | Setup checklist + doc pointers |
310
+ | `init [--template <slug>]` | Scaffold project structure, AGENTS.md, and default skill |
311
+ | `init --create-repo [name]` | Scaffold + create a new GitHub repo (private default) |
312
+ | `init --from-repo <url>` | Scaffold + import from an existing repo |
313
+ | `attach --instance <name-or-id>` | Bind project to a runtime instance |
314
+ | `generate` | Codegen typed workspace constants to `.loxtep/generated/index.ts` |
315
+ | `test <module> --event <file>` | Run a workflow module locally with sample event(s) |
316
+ | `deploy` | Compile modules, validate resources, deploy to workflow engine |
207
317
  | `config list` | Show api_url, organization_id, project_id, instance_id |
208
318
  | `config paths` | Show resolved URLs for auth and SDK path matrix |
209
319
  | `config set <key> <value>` | Set api_url \| organization_id \| project_id \| instance_id |
@@ -31,6 +31,11 @@ export type GraphPatchOp = {
31
31
  op: 'connect_nodes';
32
32
  from_entity_id: string;
33
33
  to_entity_id: string;
34
+ } | {
35
+ op: 'connect_nodes_labeled';
36
+ from_entity_id: string;
37
+ to_entity_id: string;
38
+ label: 'approved' | 'rejected' | 'error';
34
39
  } | {
35
40
  op: 'disconnect_nodes';
36
41
  from_entity_id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/authoring/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM7D,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,eAAe,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,EAAE,EAAE,kBAAkB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,mFAAmF;IACnF,mBAAmB,EAAE,WAAW,EAAE,CAAC;CACpC;AA+FD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,EACvB,GAAG,EAAE,iBAAiB,GACrB,gBAAgB,CAoClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC/B,GAAG,EAAE,iBAAiB,GACrB;IAAE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,GAAG,EAAE,YAAY,EAAE,CAAA;CAAE,CAYjF"}
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/authoring/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAgD,MAAM,YAAY,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM7D,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,eAAe,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,EAAE,EAAE,uBAAuB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAA;CAAE,GACvH;IAAE,EAAE,EAAE,kBAAkB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,mFAAmF;IACnF,mBAAmB,EAAE,WAAW,EAAE,CAAC;CACpC;AA8PD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,EACvB,GAAG,EAAE,iBAAiB,GACrB,gBAAgB,CAwDlB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC/B,GAAG,EAAE,iBAAiB,GACrB;IAAE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,GAAG,EAAE,YAAY,EAAE,CAAA;CAAE,CAYjF"}
@@ -82,6 +82,140 @@ function resolveWorkflowId(workflowName, ctx) {
82
82
  return match?.data.id;
83
83
  }
84
84
  // ────────────────────────────────────────────────────────────────────────────
85
+ // Node compile-time validation (R10.3)
86
+ // ────────────────────────────────────────────────────────────────────────────
87
+ /**
88
+ * Validate declared nodes before lowering. Fail fast if:
89
+ * 1. Any node has an `upstream` that cannot be resolved to a known node name
90
+ * 2. Any ApprovalNodeSpec lacks at least one labeled downstream connection
91
+ *
92
+ * The `knownNames` map is seeded with trigger/handler names before this runs,
93
+ * and we also consider other declared node names as valid references.
94
+ */
95
+ function validateNodes(nodes, seedNames) {
96
+ // Build the full set of known names: seed names (triggers, handler) + all declared node names
97
+ const knownNames = new Set(seedNames.keys());
98
+ for (const node of nodes) {
99
+ knownNames.add(node.name);
100
+ }
101
+ for (const node of nodes) {
102
+ // Validate upstream is resolvable
103
+ if (!knownNames.has(node.upstream)) {
104
+ throw new Error(`Node "${node.name}" has upstream "${node.upstream}" which does not resolve to any known node.`);
105
+ }
106
+ // Validate ApprovalNodeSpec has at least one labeled downstream
107
+ if (node.kind === 'approval') {
108
+ if (!node.approved && !node.rejected) {
109
+ throw new Error(`Approval node "${node.name}" must have at least one labeled downstream connection (approved or rejected).`);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ // ────────────────────────────────────────────────────────────────────────────
115
+ // Node lowering helpers
116
+ // ────────────────────────────────────────────────────────────────────────────
117
+ /**
118
+ * Lower the `nodes` array from a DataWorkflowModule into graph patch ops.
119
+ *
120
+ * For each declared node:
121
+ * - Emits an `add_node` op with the correct entity_type and config
122
+ * - Emits a `connect_nodes` op from the resolved upstream node
123
+ * - For ApprovalNodeSpec: emits `connect_nodes_labeled` for approved/rejected paths
124
+ * - For AgentNodeSpec: emits `connect_nodes_labeled` for error path
125
+ *
126
+ * The `nameToEntityId` map provides resolution of node names to entity_ids,
127
+ * seeded with trigger and handler entity ids before processing nodes.
128
+ */
129
+ function lowerNodes(nodes, workflowName, nameToEntityId) {
130
+ const ops = [];
131
+ // First pass: assign entity_ids for all declared nodes so cross-references resolve
132
+ for (const node of nodes) {
133
+ const entityId = nodeId(workflowName, `node_${node.name}`);
134
+ nameToEntityId.set(node.name, entityId);
135
+ }
136
+ // Second pass: emit ops for each node
137
+ for (const node of nodes) {
138
+ const entityId = nameToEntityId.get(node.name);
139
+ if (node.kind === 'approval') {
140
+ // Emit add_node for approval
141
+ const entity = {
142
+ approval_node_id: entityId,
143
+ name: node.name,
144
+ approval_channel: node.approvalChannel,
145
+ timeout_hours: node.timeoutHours,
146
+ };
147
+ if (node.description !== undefined) {
148
+ entity.description = node.description;
149
+ }
150
+ ops.push({ op: 'add_node', entity_type: 'approvals', entity });
151
+ // Emit connect_nodes from upstream
152
+ const upstreamId = nameToEntityId.get(node.upstream);
153
+ if (upstreamId) {
154
+ ops.push({ op: 'connect_nodes', from_entity_id: upstreamId, to_entity_id: entityId });
155
+ }
156
+ // Emit connect_nodes_labeled for approved path
157
+ if (node.approved) {
158
+ const approvedId = nameToEntityId.get(node.approved);
159
+ if (approvedId) {
160
+ ops.push({
161
+ op: 'connect_nodes_labeled',
162
+ from_entity_id: entityId,
163
+ to_entity_id: approvedId,
164
+ label: 'approved',
165
+ });
166
+ }
167
+ }
168
+ // Emit connect_nodes_labeled for rejected path
169
+ if (node.rejected) {
170
+ const rejectedId = nameToEntityId.get(node.rejected);
171
+ if (rejectedId) {
172
+ ops.push({
173
+ op: 'connect_nodes_labeled',
174
+ from_entity_id: entityId,
175
+ to_entity_id: rejectedId,
176
+ label: 'rejected',
177
+ });
178
+ }
179
+ }
180
+ }
181
+ else if (node.kind === 'agent') {
182
+ // Emit add_node for agent
183
+ const entity = {
184
+ agent_node_id: entityId,
185
+ name: node.name,
186
+ model_id: node.modelId,
187
+ prompt_template: node.promptTemplate,
188
+ timeout_seconds: node.timeoutSeconds ?? 30,
189
+ };
190
+ if (node.outputSchema !== undefined) {
191
+ entity.output_schema = node.outputSchema;
192
+ }
193
+ if (node.description !== undefined) {
194
+ entity.description = node.description;
195
+ }
196
+ ops.push({ op: 'add_node', entity_type: 'agents', entity });
197
+ // Emit connect_nodes from upstream
198
+ const upstreamId = nameToEntityId.get(node.upstream);
199
+ if (upstreamId) {
200
+ ops.push({ op: 'connect_nodes', from_entity_id: upstreamId, to_entity_id: entityId });
201
+ }
202
+ // Emit connect_nodes_labeled for error path
203
+ if (node.error) {
204
+ const errorId = nameToEntityId.get(node.error);
205
+ if (errorId) {
206
+ ops.push({
207
+ op: 'connect_nodes_labeled',
208
+ from_entity_id: entityId,
209
+ to_entity_id: errorId,
210
+ label: 'error',
211
+ });
212
+ }
213
+ }
214
+ }
215
+ }
216
+ return { ops };
217
+ }
218
+ // ────────────────────────────────────────────────────────────────────────────
85
219
  // Public API
86
220
  // ────────────────────────────────────────────────────────────────────────────
87
221
  /**
@@ -124,6 +258,21 @@ export function compileModule(mod, ctx) {
124
258
  to_entity_id: handler.entityId,
125
259
  });
126
260
  }
261
+ // Lower declarative nodes (approval gates, agent invocations) if present (R9.3, R9.4, R10.1, R10.2)
262
+ if (mod.nodes && mod.nodes.length > 0) {
263
+ // Build name-to-entityId map seeded with trigger/handler nodes
264
+ const nameToEntityId = new Map();
265
+ // Register trigger nodes by their constructed names (trigger_0, trigger_1, ...)
266
+ for (let i = 0; i < triggerEntityIds.length; i++) {
267
+ nameToEntityId.set(`trigger_${i}`, triggerEntityIds[i]);
268
+ }
269
+ // Register the handler node
270
+ nameToEntityId.set('handler', handler.entityId);
271
+ // Compile-time validation (R10.3): fail fast before emitting ops
272
+ validateNodes(mod.nodes, nameToEntityId);
273
+ const nodeResult = lowerNodes(mod.nodes, mod.name, nameToEntityId);
274
+ ops.push(...nodeResult.ops);
275
+ }
127
276
  return {
128
277
  name: mod.name,
129
278
  ...(workflow_id !== undefined ? { workflow_id } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/authoring/compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAyCH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,oEAAoE;AACpE,SAAS,MAAM,CAAC,YAAoB,EAAE,MAAc;IAClD,OAAO,GAAG,YAAY,KAAK,MAAM,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CACnB,OAAoB,EACpB,YAAoB,EACpB,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,WAAW,KAAK,EAAE,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAkB,EAAE,CAAC;IAE/B,MAAM,MAAM,GAA4B;QACtC,aAAa,EAAE,QAAQ;QACvB,IAAI,EAAE,GAAG,YAAY,YAAY,KAAK,EAAE;QACxC,YAAY,EAAE,OAAO,CAAC,IAAI;KAC3B,CAAC;IAEF,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAEtC,iCAAiC;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,MAAM,GAAG,GAAmB;QAC1B,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE;KACvD,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CACnB,YAAoB;IAEpB,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAEjD,MAAM,MAAM,GAA4B;QACtC,iBAAiB,EAAE,QAAQ;QAC3B,IAAI,EAAE,GAAG,YAAY,UAAU;QAC/B,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,YAAY;KAC1B,CAAC;IAEF,MAAM,GAAG,GAAmB;QAC1B,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE;KAC3D,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CACxB,YAAoB,EACpB,GAAsB;IAEtB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACtE,OAAO,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AACxB,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAuB,EACvB,GAAsB;IAEtB,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,MAAM,mBAAmB,GAAkB,EAAE,CAAC;IAE9C,uDAAuD;IACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAErD,sDAAsD;IACtD,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,mBAAmB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,sCAAsC;IACtC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEzB,gDAAgD;IAChD,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,eAAe;YACnB,cAAc,EAAE,SAAS;YACzB,YAAY,EAAE,OAAO,CAAC,QAAQ;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG;QACH,mBAAmB;KACpB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,kBAA+B,EAC/B,GAAsB;IAEtB,MAAM,QAAQ,GAAiD,EAAE,CAAC;IAClE,MAAM,GAAG,GAAmB,EAAE,CAAC;IAE/B,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/authoring/compiler.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export { defineDataWorkflow } from './define-data-workflow.js';
11
11
  export { on } from './triggers.js';
12
12
  export { createToolbox, ToolboxOperationError } from './toolbox.js';
13
13
  export { agent, validateAgentOptions, computeReachableScope, enforceAgentScope, createScopeGuardedToolbox, ActionTrace, AgentScopeError, } from './agent.js';
14
- export type { DataWorkflowModule, TriggerSpec, QueueRef, ConnectorRef, HandlerContext, } from './types.js';
14
+ export type { DataWorkflowModule, TriggerSpec, QueueRef, ConnectorRef, HandlerContext, ApprovalNodeSpec, AgentNodeSpec, } from './types.js';
15
15
  export { compileModule, computeRemovalSet } from './compiler.js';
16
16
  export type { GraphPatchOp, ResourceRef, CompiledWorkflow, } from './compiler.js';
17
17
  export type { Toolbox, ToolboxDataProducts, ToolboxQueues, ToolboxConnections, ToolboxWorkflows, CreateToolboxOptions, DataProductRef, WorkflowRef, WriteResult, QueryRows, } from './toolbox.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authoring/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,KAAK,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,OAAO,EACP,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authoring/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,KAAK,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,OAAO,EACP,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authoring/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,KAAK,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAQpB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authoring/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,KAAK,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAUpB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -45,6 +45,51 @@ export interface HandlerContext {
45
45
  /** The project ID. */
46
46
  projectId: string;
47
47
  }
48
+ /**
49
+ * Spec for a Human Approval Node in the workflow graph.
50
+ * Events pause at this node pending a human decision, then route to
51
+ * an approved or rejected downstream path.
52
+ */
53
+ export interface ApprovalNodeSpec {
54
+ kind: 'approval';
55
+ /** Node name, 1–128 characters. */
56
+ name: string;
57
+ /** Approval channel identifier, 1–256 characters. */
58
+ approvalChannel: string;
59
+ /** Hours before the approval request expires, 1–168. */
60
+ timeoutHours: number;
61
+ /** Optional human-readable description. */
62
+ description?: string;
63
+ /** Name of the upstream node feeding events into this node. */
64
+ upstream: string;
65
+ /** Name of the downstream node receiving approved events. */
66
+ approved?: string;
67
+ /** Name of the downstream node receiving rejected/expired events. */
68
+ rejected?: string;
69
+ }
70
+ /**
71
+ * Spec for an Agent Node in the workflow graph.
72
+ * Each event is processed by an AI model; the structured result flows downstream.
73
+ */
74
+ export interface AgentNodeSpec {
75
+ kind: 'agent';
76
+ /** Node name, 1–128 characters. */
77
+ name: string;
78
+ /** Model identifier, 1–256 characters. */
79
+ modelId: string;
80
+ /** Prompt template rendered with event data, 1–10000 characters. */
81
+ promptTemplate: string;
82
+ /** Maximum seconds to wait for model response, 1–300. Defaults to 30. */
83
+ timeoutSeconds?: number;
84
+ /** JSON Schema describing expected model output structure, ≤50KB. */
85
+ outputSchema?: object;
86
+ /** Optional human-readable description. */
87
+ description?: string;
88
+ /** Name of the upstream node feeding events into this node. */
89
+ upstream: string;
90
+ /** Name of the downstream node receiving failed invocation events. */
91
+ error?: string;
92
+ }
48
93
  /**
49
94
  * A code-first data workflow module declaration.
50
95
  * Created via `defineDataWorkflow()`.
@@ -60,5 +105,7 @@ export interface DataWorkflowModule {
60
105
  handler: (ctx: HandlerContext, event: unknown) => Promise<void> | void;
61
106
  /** Operation names requiring human approval, ≤100 entries, each 1–256 chars (R6.1). */
62
107
  requireApproval?: string[];
108
+ /** Declarative graph nodes (approval gates, agent invocations) compiled to graph ops on deploy (R9.3). */
109
+ nodes?: Array<ApprovalNodeSpec | AgentNodeSpec>;
63
110
  }
64
111
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/authoring/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IACrD,iFAAiF;IACjF,GAAG,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,uCAAuC;IACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,qCAAqC;IACrC,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvE,uFAAuF;IACvF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/authoring/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IACrD,iFAAiF;IACjF,GAAG,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,uCAAuC;IACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,qCAAqC;IACrC,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvE,uFAAuF;IACvF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,0GAA0G;IAC1G,KAAK,CAAC,EAAE,KAAK,CAAC,gBAAgB,GAAG,aAAa,CAAC,CAAC;CACjD"}
@@ -9,4 +9,12 @@ export interface DataContractsCmdOptions {
9
9
  }
10
10
  export declare function runDataContractsList(options?: DataContractsCmdOptions): Promise<void>;
11
11
  export declare function runDataContractsGet(contractId: string, options?: DataContractsCmdOptions): Promise<void>;
12
+ export declare function runDataContractsCreate(payload: {
13
+ data_product_id: string;
14
+ name: string;
15
+ description?: string;
16
+ version?: string;
17
+ status?: string;
18
+ terms?: Record<string, unknown>;
19
+ }, options?: DataContractsCmdOptions): Promise<void>;
12
20
  //# sourceMappingURL=data-contracts-cmd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-contracts-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/data-contracts-cmd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/F;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CASf"}
1
+ {"version":3,"file":"data-contracts-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/data-contracts-cmd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/F;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE;IACP,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,EACD,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -25,4 +25,15 @@ export async function runDataContractsGet(contractId, options = {}) {
25
25
  process.exitCode = 1;
26
26
  }
27
27
  }
28
+ export async function runDataContractsCreate(payload, options = {}) {
29
+ const { client } = await requireCliClient(options);
30
+ try {
31
+ const created = await client.data_contracts.create(payload);
32
+ console.log(JSON.stringify(created, null, 2));
33
+ }
34
+ catch (err) {
35
+ console.error(err.message);
36
+ process.exitCode = 1;
37
+ }
38
+ }
28
39
  //# sourceMappingURL=data-contracts-cmd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-contracts-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/data-contracts-cmd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQ3D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAmC,EAAE;IAC9E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,UAAmC,EAAE;IAErC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"data-contracts-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/data-contracts-cmd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQ3D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAmC,EAAE;IAC9E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,UAAmC,EAAE;IAErC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAOC,EACD,UAAmC,EAAE;IAErC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -12,4 +12,6 @@ export declare function runDataProductsGet(dataProductId: string, options?: Data
12
12
  export declare function runDataProductsQuery(dataProductId: string, sql: string, options?: DataProductsCmdOptions): Promise<void>;
13
13
  export declare function runDataProductsTables(dataProductId: string, options?: DataProductsCmdOptions): Promise<void>;
14
14
  export declare function runDataProductsCreate(body: DataProductCreateInput, options?: DataProductsCmdOptions): Promise<void>;
15
+ export declare function runDataProductsReadiness(dataProductId: string, options?: DataProductsCmdOptions): Promise<void>;
16
+ export declare function runDataProductsPromote(dataProductId: string, targetTier: 'silver' | 'gold', options?: DataProductsCmdOptions): Promise<void>;
15
17
  //# sourceMappingURL=data-products-cmd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-products-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/data-products-cmd.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7F;AAED,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,sBAAsB,EAC5B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf"}
1
+ {"version":3,"file":"data-products-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/data-products-cmd.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7F;AAED,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,sBAAsB,EAC5B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,QAAQ,GAAG,MAAM,EAC7B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -27,4 +27,39 @@ export async function runDataProductsCreate(body, options = {}) {
27
27
  const created = await client.data_products.create(body);
28
28
  console.log(JSON.stringify(created, null, 2));
29
29
  }
30
+ export async function runDataProductsReadiness(dataProductId, options = {}) {
31
+ const { client } = await requireCliClient(options);
32
+ try {
33
+ const result = await client.data_products.readiness(dataProductId);
34
+ console.log(JSON.stringify(result, null, 2));
35
+ }
36
+ catch (err) {
37
+ console.error(err.message);
38
+ process.exitCode = 1;
39
+ }
40
+ }
41
+ export async function runDataProductsPromote(dataProductId, targetTier, options = {}) {
42
+ const { client } = await requireCliClient(options);
43
+ try {
44
+ const result = await client.data_products.promote(dataProductId, targetTier);
45
+ if (result.success) {
46
+ console.log(`✅ Promoted to ${result.new_tier}`);
47
+ if (result.entity_iris?.length) {
48
+ console.log(` Minted ${result.entity_iris.length} entity IRI(s)`);
49
+ }
50
+ }
51
+ else {
52
+ console.error('❌ Promotion rejected:');
53
+ for (const d of result.diagnostics ?? []) {
54
+ const icon = d.satisfied ? '✓' : '✗';
55
+ console.error(` ${icon} ${d.name}${d.remediation ? ` — ${d.remediation}` : ''}`);
56
+ }
57
+ process.exitCode = 1;
58
+ }
59
+ }
60
+ catch (err) {
61
+ console.error(err.message);
62
+ process.exitCode = 1;
63
+ }
64
+ }
30
65
  //# sourceMappingURL=data-products-cmd.js.map