@alvera-ai/platform-sdk 0.10.0-rc.23 → 0.10.0-rc.25
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/.agent/AGENTS.md +67 -8
- package/.agent/account_management.md +5 -4
- package/.agent/action_status_updaters.md +7 -5
- package/.agent/ai_agents.md +28 -24
- package/.agent/async.md +9 -8
- package/.agent/connected_apps.md +13 -12
- package/.agent/cookbook/_fixtures/README.md +12 -5
- package/.agent/cookbook/_fixtures/accounts_receivable/stripe_customers_batch1.csv +5 -0
- package/.agent/cookbook/_fixtures/healthcare/memorandum-of-association-01.png +0 -0
- package/.agent/cookbook/_fixtures/healthcare/sample_two_page.pdf +43 -0
- package/.agent/cookbook/action-status-updaters.md +212 -0
- package/.agent/cookbook/ai-agent-invoke.md +243 -0
- package/.agent/cookbook/appointment-review-sms-workflow.md +2 -2
- package/.agent/cookbook/birthday-greeting-sms-trigger.md +1 -1
- package/.agent/cookbook/bulk-ingest.md +254 -0
- package/.agent/cookbook/contact-us-triage-with-llm.md +36 -16
- package/.agent/cookbook/custom-tables.md +201 -0
- package/.agent/cookbook/dunning-sms-for-delinquent.md +2 -2
- package/.agent/cookbook/invite-team.md +194 -0
- package/.agent/cookbook/kyc-notification-on-account-activation.md +2 -2
- package/.agent/cookbook/rest-fetch.md +246 -0
- package/.agent/cookbook/sanctions-screening-with-agent-review.md +36 -14
- package/.agent/cookbook/score-leads-with-llm-categorization.md +36 -14
- package/.agent/cookbook/system-templates.md +129 -0
- package/.agent/cookbook/triage-prospects-by-priority.md +533 -0
- package/.agent/cookbook/welcome-sms-for-customers.md +2 -2
- package/.agent/data_activation_clients.md +29 -27
- package/.agent/data_sources.md +6 -5
- package/.agent/datalakes.md +23 -21
- package/.agent/errors.md +10 -16
- package/.agent/generic_tables.md +7 -7
- package/.agent/interoperability_contracts.md +18 -17
- package/.agent/mutations.md +74 -100
- package/.agent/tool-call-configs.md +2 -2
- package/.agent/tools.md +19 -18
- package/.agent/type_naming.md +6 -8
- package/.agent/workflows.md +21 -20
- package/README.md +151 -19
- package/dist/bin/platform-sdk.mjs +2 -2
- package/dist/bin/platform-sdk.mjs.map +1 -1
- package/dist/index.d.mts +33 -26
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +27 -21
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/.agent/AGENTS.md
CHANGED
|
@@ -135,6 +135,26 @@ rather than the singleton `createPlatformApi`. The singleton
|
|
|
135
135
|
mutates a shared client; the most-recent construction call
|
|
136
136
|
clobbers earlier instances' auth.
|
|
137
137
|
|
|
138
|
+
## Using this corpus: building an app vs. writing a test
|
|
139
|
+
|
|
140
|
+
The `api.*` call sequences in this corpus are framework-agnostic — the
|
|
141
|
+
**same** code powers all of these:
|
|
142
|
+
|
|
143
|
+
- **A React / CopilotKit app** — call `api.workflows.create(...)`,
|
|
144
|
+
`api.dataActivationClients.ingest(...)`, etc. from an event handler, a
|
|
145
|
+
server action, or a CopilotKit action; render the typed response.
|
|
146
|
+
- **A backend / Bun / Node script** — drive the client straight through.
|
|
147
|
+
- **A vitest / integration test** — thread the same calls through a test
|
|
148
|
+
closure, asserting on each typed response.
|
|
149
|
+
|
|
150
|
+
What changes between them is only *where you put the calls* (a component
|
|
151
|
+
handler vs. a test body), never the calls themselves. The cookbooks under
|
|
152
|
+
`cookbook/` read as test-style sequences because that is how they are
|
|
153
|
+
validated, but every step is a plain `api.*` call you can lift into an app
|
|
154
|
+
unchanged. The per-capability docs (e.g. `bulk-ingest.md`, `ai-agent-invoke.md`)
|
|
155
|
+
show one capability at a time; the cookbooks weave capabilities into a
|
|
156
|
+
business outcome.
|
|
157
|
+
|
|
138
158
|
## Resources
|
|
139
159
|
|
|
140
160
|
```
|
|
@@ -326,15 +346,27 @@ repo's own integration tests use.
|
|
|
326
346
|
template plus the cookbooks that depend on it. No need to
|
|
327
347
|
read cookbook code first to know what fixtures exist.
|
|
328
348
|
|
|
349
|
+
### Two kinds of doc here: business cookbooks vs. capability docs
|
|
350
|
+
|
|
351
|
+
The `cookbook/` directory holds two kinds of recipe, both validated by
|
|
352
|
+
`make validate-cookbook`:
|
|
353
|
+
|
|
354
|
+
- **Business cookbooks** (`<use-case>.md`) — one real business outcome each,
|
|
355
|
+
told as a numbered API-call sequence (e.g. `welcome-sms-for-customers`,
|
|
356
|
+
`dunning-sms-for-delinquent`). Read these to see how resources compose into
|
|
357
|
+
an outcome.
|
|
358
|
+
- **Capability docs** (`<capability>.md`) — one platform capability each,
|
|
359
|
+
shown as the minimal call sequence that proves it (e.g. `bulk-ingest`,
|
|
360
|
+
`ai-agent-invoke`, `custom-tables`, `invite-team`). Read these to learn one
|
|
361
|
+
capability in isolation; cookbooks weave them into outcomes.
|
|
362
|
+
|
|
329
363
|
### Available cookbooks
|
|
330
364
|
|
|
331
|
-
The
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
what Milestone 12's `alvera-sdk-init` lifts into consumer
|
|
337
|
-
`<cwd>/AGENTS.md` files as a managed block.
|
|
365
|
+
The nine business-cookbook scenarios. Each is anchored to a green
|
|
366
|
+
end-to-end vitest scenario in the platform's integration-tests suite and is
|
|
367
|
+
verified at dev time by `make validate-cookbook` at the platform-sdk repo root.
|
|
368
|
+
The entries between the managed markers below are what `alvera-sdk-init` lifts
|
|
369
|
+
into consumer `<cwd>/AGENTS.md` files as a managed block.
|
|
338
370
|
|
|
339
371
|
<!-- BEGIN:cookbook-index -->
|
|
340
372
|
|
|
@@ -357,6 +389,10 @@ what Milestone 12's `alvera-sdk-init` lifts into consumer
|
|
|
357
389
|
— Send a payment-reminder SMS to delinquent customers
|
|
358
390
|
(filtered on phone-on-file and tax-id-verified) with a
|
|
359
391
|
pay-invoice link.
|
|
392
|
+
- [triage-prospects-by-priority](./cookbook/triage-prospects-by-priority.md)
|
|
393
|
+
— Triage inbound AR customers into priority bands
|
|
394
|
+
(high / medium / low) via an LLM agent, route each band to a
|
|
395
|
+
tailored SMS action.
|
|
360
396
|
|
|
361
397
|
**Payment Risk**
|
|
362
398
|
|
|
@@ -380,6 +416,29 @@ what Milestone 12's `alvera-sdk-init` lifts into consumer
|
|
|
380
416
|
|
|
381
417
|
<!-- END:cookbook-index -->
|
|
382
418
|
|
|
419
|
+
### Capability docs
|
|
420
|
+
|
|
421
|
+
One platform capability each — the minimal call sequence that proves it,
|
|
422
|
+
anchored to a green vitest scenario. Read the matching reference MD for the
|
|
423
|
+
full wire shape.
|
|
424
|
+
|
|
425
|
+
- [bulk-ingest](./cookbook/bulk-ingest.md) — load a whole file of records in
|
|
426
|
+
one upload (presigned link → PUT → `ingestFile` → search by batch).
|
|
427
|
+
- [rest-fetch](./cookbook/rest-fetch.md) — pull records from a third-party REST
|
|
428
|
+
API on demand (Bearer + OAuth2), no file upload.
|
|
429
|
+
- [ai-agent-invoke](./cookbook/ai-agent-invoke.md) — read an uploaded
|
|
430
|
+
document/image and pull structured JSON out of it (`aiAgents.invoke` with
|
|
431
|
+
files). The correct file-vision path — the agent reads the file; the DAC
|
|
432
|
+
ingests it.
|
|
433
|
+
- [custom-tables](./cookbook/custom-tables.md) — stand up a custom table the
|
|
434
|
+
built-in datasets don't model; deploy → ingest → search.
|
|
435
|
+
- [action-status-updaters](./cookbook/action-status-updaters.md) — reconcile
|
|
436
|
+
the delivery status of messages you send, on a schedule.
|
|
437
|
+
- [system-templates](./cookbook/system-templates.md) — discover the platform's
|
|
438
|
+
built-in row-mapping Liquid templates.
|
|
439
|
+
- [invite-team](./cookbook/invite-team.md) — invite a teammate into your tenant
|
|
440
|
+
(root / tenantless / tenant-scoped sessions in one flow).
|
|
441
|
+
|
|
383
442
|
## Utility namespaces
|
|
384
443
|
|
|
385
444
|
Cross-resource utilities not documented in this corpus:
|
|
@@ -407,7 +466,7 @@ of restating:
|
|
|
407
466
|
| Topic | File |
|
|
408
467
|
|-----------------------------------------------|------------------|
|
|
409
468
|
| Error envelope shape | `errors.md` |
|
|
410
|
-
| Mutations (
|
|
469
|
+
| Mutations (`update()` replaces whole; exceptions) | `mutations.md` |
|
|
411
470
|
| Async + readiness | `async.md` |
|
|
412
471
|
| Debugging (HTTP interceptor + safe redaction) | `debugging.md` |
|
|
413
472
|
| Type naming + server-derived fields | `type_naming.md` |
|
|
@@ -293,7 +293,7 @@ carry through unchanged.
|
|
|
293
293
|
The Invitation/Membership schema (Vocabulary A) is the
|
|
294
294
|
coarse-grained role assignment surfaced at invite time. The
|
|
295
295
|
Role-record system (Vocabulary B) is the fine-grained policy
|
|
296
|
-
entity that drives
|
|
296
|
+
entity that drives row-level access and permission checks at every
|
|
297
297
|
request. They co-exist because the invitation captures the
|
|
298
298
|
caller's intent ("admin-tier user"), while the role record
|
|
299
299
|
captures the platform's enforcement vocabulary
|
|
@@ -307,9 +307,10 @@ sessions appear in console-mediated flows and are uncommon in
|
|
|
307
307
|
SDK-consumer code.
|
|
308
308
|
|
|
309
309
|
Reserved roles (`platform_admin`, `system`, `system_api`,
|
|
310
|
-
`bot_*`) bypass tenant-based
|
|
311
|
-
|
|
312
|
-
invitations and are out of scope
|
|
310
|
+
`bot_*`) bypass tenant-based access isolation and are
|
|
311
|
+
provisioned only by the platform itself — they never appear on
|
|
312
|
+
consumer-minted sessions or invitations and are out of scope
|
|
313
|
+
for SDK consumers.
|
|
313
314
|
|
|
314
315
|
### Inviting humans into a tenant
|
|
315
316
|
|
|
@@ -15,7 +15,7 @@ SDK namespace: `api.actionStatusUpdaters`.
|
|
|
15
15
|
|
|
16
16
|
Action status updaters are **Datalake-DB-resident** — the
|
|
17
17
|
parent datalake must be `status: 'ready'` and every
|
|
18
|
-
referenced tool must exist before
|
|
18
|
+
referenced tool must exist before you `create()`.
|
|
19
19
|
|
|
20
20
|
## 1. Wire shape
|
|
21
21
|
|
|
@@ -213,13 +213,15 @@ branch.
|
|
|
213
213
|
|
|
214
214
|
### Update
|
|
215
215
|
|
|
216
|
-
`
|
|
217
|
-
|
|
218
|
-
the
|
|
216
|
+
`update()` replaces the whole resource — resupply the full
|
|
217
|
+
body; there's no partial update. The polymorphic `updater_body`
|
|
218
|
+
must keep the same `updater_body_type` on update — the
|
|
219
|
+
discriminator can't change on `update()`; to change body type,
|
|
220
|
+
`delete()` and `create()` fresh.
|
|
219
221
|
|
|
220
222
|
### Delete
|
|
221
223
|
|
|
222
|
-
`
|
|
224
|
+
`delete()` removes the row and cancels future scheduled polls.
|
|
223
225
|
In-flight polls complete; their writebacks land normally.
|
|
224
226
|
|
|
225
227
|
The delete is **graceful** with respect to scheduler state: if
|
package/.agent/ai_agents.md
CHANGED
|
@@ -11,7 +11,7 @@ SDK namespace: `api.aiAgents`.
|
|
|
11
11
|
|
|
12
12
|
AI agents are **Datalake-DB-resident** — the parent datalake
|
|
13
13
|
must be `status: 'ready'` and the bound tool must exist before
|
|
14
|
-
|
|
14
|
+
you `create()`.
|
|
15
15
|
|
|
16
16
|
## 1. Wire shape
|
|
17
17
|
|
|
@@ -188,9 +188,9 @@ namespace clean.
|
|
|
188
188
|
|
|
189
189
|
An agent runs as an **enrichment** step on a workflow or an
|
|
190
190
|
interoperability contract. The agent is **nested directly on the
|
|
191
|
-
parent body** —
|
|
192
|
-
create/
|
|
193
|
-
`interoperability_contract_ai_agents` array
|
|
191
|
+
parent body** — workflow and interoperability-contract
|
|
192
|
+
create/update bodies accept a `workflow_ai_agents` /
|
|
193
|
+
`interoperability_contract_ai_agents` array. There is
|
|
194
194
|
no separate attach/detach endpoint, and **no per-join checksum**: the
|
|
195
195
|
nested agents fold into the parent's own checksum.
|
|
196
196
|
|
|
@@ -225,24 +225,26 @@ workflow.checksum // the PARENT checksum — the nested agents fold into it
|
|
|
225
225
|
```
|
|
226
226
|
|
|
227
227
|
Interoperability contracts nest the same way, via the
|
|
228
|
-
`interoperability_contract_ai_agents` array on the contract
|
|
229
|
-
body. The one difference: a contract join's
|
|
230
|
-
**does** carry `output_schema` (the server
|
|
228
|
+
`interoperability_contract_ai_agents` array on the contract
|
|
229
|
+
create/update body. The one difference: a contract join's
|
|
230
|
+
`context_mapping_config` **does** carry `output_schema` (the server
|
|
231
|
+
does not pin it there).
|
|
231
232
|
|
|
232
|
-
Adding, repositioning, and removing agents are all expressed
|
|
233
|
-
|
|
233
|
+
Adding, repositioning, and removing agents are all expressed by
|
|
234
|
+
re-supplying the full set on the parent's `update()` — `update()`
|
|
235
|
+
replaces the whole array, and any item you omit is removed:
|
|
234
236
|
|
|
235
237
|
| Operation | How | Result |
|
|
236
238
|
|------------|------------------------------------------------------|--------|
|
|
237
|
-
| add / nest | include in `*_ai_agents` on create or
|
|
238
|
-
| reposition |
|
|
239
|
-
| detach |
|
|
239
|
+
| add / nest | include in `*_ai_agents` on create or update | parent checksum reflects the agents |
|
|
240
|
+
| reposition | `update()` with the same agent at a new `position` | full-set replace |
|
|
241
|
+
| detach | `update()` omitting that agent (or `[]` to clear all)| the omitted agent is removed |
|
|
240
242
|
| drift | parent `checksum()` endpoint over the full body | the would-be parent checksum (no persist) |
|
|
241
243
|
|
|
242
|
-
The parent surfaces its nested agents on
|
|
243
|
-
`workflow_ai_agents: [...]` and a contract
|
|
244
|
+
The parent surfaces its nested agents on read: a workflow `get()`
|
|
245
|
+
returns `workflow_ai_agents: [...]` and a contract `get()` returns
|
|
244
246
|
`interoperability_contract_ai_agents: [...]`. Both arrays are writable
|
|
245
|
-
on the parent body (create +
|
|
247
|
+
on the parent body (create + update).
|
|
246
248
|
|
|
247
249
|
The workflow's own `decision_config` reads the agent's parsed output
|
|
248
250
|
at `additional_context.<agent_slug>.<field>` (property paths match the
|
|
@@ -344,14 +346,15 @@ templates).
|
|
|
344
346
|
|
|
345
347
|
### Update
|
|
346
348
|
|
|
347
|
-
`
|
|
348
|
-
|
|
349
|
+
`update()` replaces the whole resource — resupply the full
|
|
350
|
+
body; there's no partial update. That means all required
|
|
351
|
+
fields must be re-supplied verbatim, including
|
|
349
352
|
`input_schema`, `llm_response_schema`, and `prompt_config`.
|
|
350
353
|
Omitting any returns a 422.
|
|
351
354
|
|
|
352
355
|
### Delete
|
|
353
356
|
|
|
354
|
-
`
|
|
357
|
+
`delete()` removes the row. Workflows that still reference the
|
|
355
358
|
agent in their `ai_agents` array fail at run time with
|
|
356
359
|
`error_code: 'ai_agent_not_found'`; clean up workflow
|
|
357
360
|
references first.
|
|
@@ -436,13 +439,14 @@ with `{ status: 'skipped' }` and no per-agent entries.
|
|
|
436
439
|
workflow decision and action templates reference. Capture it
|
|
437
440
|
from the create response — don't pre-compute.
|
|
438
441
|
|
|
439
|
-
4. **`.get` takes UUID `id`, not slug.** The
|
|
440
|
-
`/ai-agents/:id`. The slug is only a runtime template key.
|
|
442
|
+
4. **`.get` takes UUID `id`, not slug.** The single-row read
|
|
443
|
+
route is `/ai-agents/:id`. The slug is only a runtime template key.
|
|
441
444
|
|
|
442
|
-
5.
|
|
443
|
-
`input_schema`, `llm_response_schema`,
|
|
444
|
-
verbatim
|
|
445
|
-
422 on the
|
|
445
|
+
5. **`update()` replaces the whole resource.** Update bodies
|
|
446
|
+
must re-supply `input_schema`, `llm_response_schema`,
|
|
447
|
+
`prompt_config` verbatim — there's no partial update. A
|
|
448
|
+
partial body silently drops fields and returns 422 on the
|
|
449
|
+
missing required field.
|
|
446
450
|
|
|
447
451
|
6. **`data_access` is immutable post-create.** Flipping the
|
|
448
452
|
compliance tier requires delete + recreate.
|
package/.agent/async.md
CHANGED
|
@@ -70,7 +70,7 @@ the table above, its MD is authoritative.
|
|
|
70
70
|
|
|
71
71
|
Downstream operations (creating child resources, running
|
|
72
72
|
workflows, invoking tools) MUST NOT proceed until the parent
|
|
73
|
-
resource is in a terminal-success status.
|
|
73
|
+
resource is in a terminal-success status. Creating a child
|
|
74
74
|
resource against an unready parent typically surfaces as a
|
|
75
75
|
500 (server-internal) or a 422 with a "parent not ready"
|
|
76
76
|
detail — both are recoverable but indicate a missing wait in
|
|
@@ -78,11 +78,12 @@ the caller.
|
|
|
78
78
|
|
|
79
79
|
## Idempotency on create
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
with the same body yields a 422 on uniqueness fields
|
|
83
|
-
the name within scope). Consumers handling retry
|
|
81
|
+
`create()` calls are NOT idempotent by default. Repeating a
|
|
82
|
+
`create()` with the same body yields a 422 on uniqueness fields
|
|
83
|
+
(typically the name within scope). Consumers handling retry
|
|
84
|
+
should:
|
|
84
85
|
|
|
85
|
-
1. Catch the
|
|
86
|
+
1. Catch the thrown error after the call returns (see `errors.md`).
|
|
86
87
|
2. Inspect for a uniqueness `detail` on a `source.pointer`
|
|
87
88
|
that names the uniqueness key (usually `/name` or `/slug`).
|
|
88
89
|
3. Treat as "already created" and fetch the existing row.
|
|
@@ -94,8 +95,8 @@ to the server but failed to capture the response locally).
|
|
|
94
95
|
|
|
95
96
|
## Polling cost
|
|
96
97
|
|
|
97
|
-
Polling at 1s intervals
|
|
98
|
-
|
|
98
|
+
Polling at 1s intervals via `get()` on the resource is cheap
|
|
99
|
+
for most resources but
|
|
99
100
|
becomes expensive at high concurrency. For long-running
|
|
100
101
|
operations (lambda deployments, large data-activation-client
|
|
101
102
|
runs), back off the interval (e.g. 2s → 5s → 10s) after the
|
|
@@ -103,7 +104,7 @@ first ~30s of waiting.
|
|
|
103
104
|
|
|
104
105
|
## What the SDK does NOT auto-poll
|
|
105
106
|
|
|
106
|
-
The typed client returns the immediate
|
|
107
|
+
The typed client returns the immediate `create()` response — it
|
|
107
108
|
does NOT block until the resource reaches terminal status.
|
|
108
109
|
Consumers explicitly write the wait loop above where it
|
|
109
110
|
matters. This is intentional: not every caller wants to
|
package/.agent/connected_apps.md
CHANGED
|
@@ -28,7 +28,7 @@ The namespace splits into **two roles**:
|
|
|
28
28
|
`slug` as the path key.
|
|
29
29
|
|
|
30
30
|
Connected apps are **Datalake-DB-resident** — the parent datalake
|
|
31
|
-
must be `status: 'ready'` before
|
|
31
|
+
must be `status: 'ready'` before you `create()`.
|
|
32
32
|
|
|
33
33
|
## 1. Wire shape
|
|
34
34
|
|
|
@@ -241,9 +241,9 @@ const { data: ack } = await api.connectedApps.syncRoutes(
|
|
|
241
241
|
|
|
242
242
|
This is the explicit "re-fetch and save" verb — asynchronous. The
|
|
243
243
|
202 acknowledgement proves the app id resolved and a sync job was
|
|
244
|
-
accepted; the
|
|
245
|
-
lands `status: 'synced'` (or `'error'`) on the app row.
|
|
246
|
-
`.get()` for the outcome. Use it after deploying a new manifest,
|
|
244
|
+
accepted; the platform then refreshes `routes` + `last_synced_at` and
|
|
245
|
+
lands `status: 'synced'` (or `'error'`) on the app row asynchronously.
|
|
246
|
+
Poll `.get()` for the outcome. Use it after deploying a new manifest,
|
|
247
247
|
fixing a primary URL outage, or recovering from `status: 'error'`.
|
|
248
248
|
|
|
249
249
|
Discovery failure modes the platform handles explicitly — each
|
|
@@ -270,13 +270,14 @@ and `https://app.example.com/` produce the same fetch URL.
|
|
|
270
270
|
|
|
271
271
|
### Update
|
|
272
272
|
|
|
273
|
-
`
|
|
274
|
-
|
|
275
|
-
|
|
273
|
+
`update()` replaces the whole resource — resupply the full
|
|
274
|
+
body; there's no partial update. Mutating the primary URL does
|
|
275
|
+
NOT auto-trigger a route sync — call `.syncRoutes` after the
|
|
276
|
+
update if the new primary URL serves a different manifest.
|
|
276
277
|
|
|
277
278
|
### Delete
|
|
278
279
|
|
|
279
|
-
`
|
|
280
|
+
`delete()` removes the connected app AND the auto-provisioned API
|
|
280
281
|
key. Workflows that still reference the app's id in action
|
|
281
282
|
`connected_app_id` fields fail at run time with the action's
|
|
282
283
|
template-render step erroring on the missing relation. Detach
|
|
@@ -285,11 +286,11 @@ workflow actions first.
|
|
|
285
286
|
Delete latency depends on the app's `mode`:
|
|
286
287
|
|
|
287
288
|
- `mode: 'self_hosted'` — synchronous. The row is gone when
|
|
288
|
-
the
|
|
289
|
-
- `mode: 'managed'` — async. The
|
|
289
|
+
the `delete()` call returns.
|
|
290
|
+
- `mode: 'managed'` — async. The `delete()` response returns
|
|
290
291
|
immediately, but the actual teardown (Cloudflare Pages
|
|
291
|
-
project deletion + DNS unregistration) runs in
|
|
292
|
-
|
|
292
|
+
project deletion + DNS unregistration) runs in the background.
|
|
293
|
+
The row's `status` transitions through
|
|
293
294
|
`'deploying'` (during teardown) before disappearing. Poll
|
|
294
295
|
`.get()` until 404 to confirm removal.
|
|
295
296
|
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
# Cookbook fixtures
|
|
2
2
|
|
|
3
|
-
Vendored Liquid templates and
|
|
4
|
-
[cookbook recipes](../) load at runtime via
|
|
3
|
+
Vendored Liquid templates, CSV bodies, and sample documents the
|
|
4
|
+
[cookbook recipes](../) and [capability docs](../) load at runtime via
|
|
5
5
|
`fs.readFileSync`. Organized by industry so the corpus stays
|
|
6
6
|
self-describing — an agent crawling this directory can list
|
|
7
|
-
every
|
|
7
|
+
every fixture available to every recipe in a given industry
|
|
8
8
|
by reading one path.
|
|
9
9
|
|
|
10
|
+
Two kinds of fixture live here: **Liquid templates** (row-mapping
|
|
11
|
+
templates an interoperability contract loads) and **data fixtures**
|
|
12
|
+
(CSV bodies and sample PDFs/images a capability walk uploads or ingests).
|
|
13
|
+
|
|
10
14
|
## Convention
|
|
11
15
|
|
|
12
16
|
Cookbook code reads fixtures via the
|
|
@@ -77,6 +81,8 @@ passes against the new template shape.
|
|
|
77
81
|
| `_cahps_appointments_healthcare_patient.liquid` | `appointment-review-sms-workflow` | `priv/liquid_templates/data_activation/interoperability/healthcare/fhir4/athena/_cahps_appointments_healthcare_patient.liquid` |
|
|
78
82
|
| `_cahps_appointments_healthcare_appointment.liquid` | `appointment-review-sms-workflow` | `priv/liquid_templates/data_activation/interoperability/healthcare/fhir4/athena/_cahps_appointments_healthcare_appointment.liquid` |
|
|
79
83
|
| `_cahps_appointments_healthcare_mdm.liquid` | `appointment-review-sms-workflow` | `priv/liquid_templates/data_activation/interoperability/healthcare/fhir4/athena/_cahps_appointments_healthcare_mdm.liquid` |
|
|
84
|
+
| `sample_two_page.pdf` (data) | `ai-agent-invoke` | `integration-tests/tests/healthcare/fixtures/documents/sample_two_page.pdf` |
|
|
85
|
+
| `memorandum-of-association-01.png` (data) | `ai-agent-invoke` | `integration-tests/tests/healthcare/fixtures/documents/memorandum-of-association-01.png` |
|
|
80
86
|
|
|
81
87
|
The `contact-us-triage-with-llm` cookbook ingests into a generic
|
|
82
88
|
table via the auto-provisioned identity contract, so it loads no
|
|
@@ -86,8 +92,9 @@ vendored template.
|
|
|
86
92
|
|
|
87
93
|
| File | Consumed by cookbook(s) | Source-of-truth |
|
|
88
94
|
|---|---|---|
|
|
89
|
-
| `_customers_accounts_receivable_customer.liquid` | `welcome-sms-for-customers`, `dunning-sms-for-delinquent` | `priv/liquid_templates/data_activation/interoperability/accounts_receivable/stripe/_customers_accounts_receivable_customer.liquid` |
|
|
90
|
-
| `_customers_accounts_receivable_mdm.liquid` | `welcome-sms-for-customers`, `dunning-sms-for-delinquent` | `priv/liquid_templates/data_activation/interoperability/accounts_receivable/stripe/_customers_accounts_receivable_mdm.liquid` |
|
|
95
|
+
| `_customers_accounts_receivable_customer.liquid` | `welcome-sms-for-customers`, `dunning-sms-for-delinquent`, `bulk-ingest`, `rest-fetch` | `priv/liquid_templates/data_activation/interoperability/accounts_receivable/stripe/_customers_accounts_receivable_customer.liquid` |
|
|
96
|
+
| `_customers_accounts_receivable_mdm.liquid` | `welcome-sms-for-customers`, `dunning-sms-for-delinquent`, `bulk-ingest`, `rest-fetch` | `priv/liquid_templates/data_activation/interoperability/accounts_receivable/stripe/_customers_accounts_receivable_mdm.liquid` |
|
|
97
|
+
| `stripe_customers_batch1.csv` (data) | `bulk-ingest` | `integration-tests/tests/accounts_receivable/fixtures/csv/stripe_customers_batch1.csv` |
|
|
91
98
|
|
|
92
99
|
### `payment_risk/`
|
|
93
100
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
customer_number,customer_type,status,name,email,phone,tax_id,currency,delinquent,tax_exempt,preferred_locales,address_line1,address_line2,address_city,address_state,address_postal_code,address_country,shipping_name,shipping_phone,shipping_address_line1,shipping_address_line2,shipping_address_city,shipping_address_state,shipping_address_postal_code,shipping_address_country
|
|
2
|
+
CUS-10001,individual,contracted,James Whitfield,james.whitfield@gmail.com,+12025551001,123-45-6789,USD,false,none,en,742 Evergreen Terrace,,Springfield,IL,62704,US,James Whitfield,+12025551001,742 Evergreen Terrace,,Springfield,IL,62704,US
|
|
3
|
+
CUS-10002,individual,contracted,Maria Garcia,maria.garcia@outlook.com,+12025551002,,EUR,false,none,en|es,89 Elm Street,Apt 4B,Miami,FL,33101,US,Maria Garcia,+12025551002,89 Elm Street,Apt 4B,Miami,FL,33101,US
|
|
4
|
+
CUS-10003,enterprise,contracted,Pinnacle Financial Group,info@pinnaclefg.com,+12125559000,84-2156789,USD,false,exempt,en,1 Wall Street,Floor 42,New York,NY,10005,US,,,,,,,,,
|
|
5
|
+
CUS-10004,individual,prospect,Chen Wei,chen.wei@protonmail.com,+14155551004,,USD,false,none,en|zh,350 Mission Street,,San Francisco,CA,94105,US,,,,,,,,,
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
%PDF-1.4
|
|
2
|
+
1 0 obj
|
|
3
|
+
<< /Type /Catalog /Pages 2 0 R >>
|
|
4
|
+
endobj
|
|
5
|
+
2 0 obj
|
|
6
|
+
<< /Type /Pages /Kids [3 0 R 5 0 R] /Count 2 >>
|
|
7
|
+
endobj
|
|
8
|
+
3 0 obj
|
|
9
|
+
<< /Type /Page /Parent 2 0 R /MediaBox [0 0 300 200] /Resources << /Font << /F1 7 0 R >> >> /Contents 4 0 R >>
|
|
10
|
+
endobj
|
|
11
|
+
4 0 obj
|
|
12
|
+
<< /Length 45 >>
|
|
13
|
+
stream
|
|
14
|
+
BT /F1 24 Tf 40 110 Td (Page One Hello) Tj ET
|
|
15
|
+
endstream
|
|
16
|
+
endobj
|
|
17
|
+
5 0 obj
|
|
18
|
+
<< /Type /Page /Parent 2 0 R /MediaBox [0 0 300 200] /Resources << /Font << /F1 7 0 R >> >> /Contents 6 0 R >>
|
|
19
|
+
endobj
|
|
20
|
+
6 0 obj
|
|
21
|
+
<< /Length 45 >>
|
|
22
|
+
stream
|
|
23
|
+
BT /F1 24 Tf 40 110 Td (Page Two World) Tj ET
|
|
24
|
+
endstream
|
|
25
|
+
endobj
|
|
26
|
+
7 0 obj
|
|
27
|
+
<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>
|
|
28
|
+
endobj
|
|
29
|
+
xref
|
|
30
|
+
0 8
|
|
31
|
+
0000000000 65535 f
|
|
32
|
+
0000000009 00000 n
|
|
33
|
+
0000000058 00000 n
|
|
34
|
+
0000000121 00000 n
|
|
35
|
+
0000000247 00000 n
|
|
36
|
+
0000000342 00000 n
|
|
37
|
+
0000000468 00000 n
|
|
38
|
+
0000000563 00000 n
|
|
39
|
+
trailer
|
|
40
|
+
<< /Size 8 /Root 1 0 R >>
|
|
41
|
+
startxref
|
|
42
|
+
633
|
|
43
|
+
%%EOF
|