@naturali/cli 0.209.2 → 0.209.4
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/dist/index.mjs +67 -68
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -17,7 +17,7 @@ var __exportAll = (all, no_symbols) => {
|
|
|
17
17
|
};
|
|
18
18
|
//#endregion
|
|
19
19
|
//#region package.json
|
|
20
|
-
var version = "0.209.
|
|
20
|
+
var version = "0.209.4";
|
|
21
21
|
//#endregion
|
|
22
22
|
//#region ../sdk/src/generated/core/bodySerializer.gen.ts
|
|
23
23
|
const serializeFormDataPair = (data, key, value) => {
|
|
@@ -807,6 +807,8 @@ var Channels = class {
|
|
|
807
807
|
*
|
|
808
808
|
* `actor_id` binds an actor of this project, so the address speaks as the same actor your own sessions use. A changed actor deletes the address's conversations and their sessions — a session's actor is fixed — and the next message opens a fresh one; the actor naturali created for the address is deleted with them. An actor you bind is never deleted here.
|
|
809
809
|
*
|
|
810
|
+
* An identifier no channel kind produces is `400`.
|
|
811
|
+
*
|
|
810
812
|
*/
|
|
811
813
|
static setAddress(options) {
|
|
812
814
|
return (options.client ?? client).put({
|
|
@@ -913,7 +915,7 @@ var Channels = class {
|
|
|
913
915
|
/**
|
|
914
916
|
* Read the whole route table
|
|
915
917
|
*
|
|
916
|
-
* Every route across every channel in the project, one read — the table is small by construction
|
|
918
|
+
* Every route across every channel in the project, one read — the table is small by construction, so this is unpaginated.
|
|
917
919
|
*
|
|
918
920
|
*/
|
|
919
921
|
static listProjectChannelRoutes(options) {
|
|
@@ -937,7 +939,7 @@ var Channels = class {
|
|
|
937
939
|
* Connect a channel
|
|
938
940
|
*
|
|
939
941
|
* Connect a channel. The required fields depend on `channel`; no credential is ever returned.
|
|
940
|
-
* **Discord** (`channel: discord`) — supply `application_id` and `bot_token`, plus the `modes` selecting which Gateway flows to serve (direct messages, and/or @mention-opens-a-thread). The token is checked with Discord first: `400 invalid_bot_token` when Discord rejects it, `400 application_mismatch` when it belongs to another application. Returns `501` when
|
|
942
|
+
* **Discord** (`channel: discord`) — supply `application_id` and `bot_token`, plus the `modes` selecting which Gateway flows to serve (direct messages, and/or @mention-opens-a-thread). The token is checked with Discord first: `400 invalid_bot_token` when Discord rejects it, `400 application_mismatch` when it belongs to another application. Returns `501` when this deployment does not enable Discord channels.
|
|
941
943
|
* **WhatsApp** (default) — one of two credential paths, both filling the same write-only secret:
|
|
942
944
|
* * **BYOT** (`credential_source: byot`, default) — supply
|
|
943
945
|
* `phone_number_id` and `access_token` from your own Meta app.
|
|
@@ -1508,7 +1510,7 @@ var AiProviders = class {
|
|
|
1508
1510
|
*
|
|
1509
1511
|
* Deletes an AI provider configuration.
|
|
1510
1512
|
*
|
|
1511
|
-
* Live references —
|
|
1513
|
+
* Live references — agents and model routes whose targets name this provider — always block deletion with `409 AI_PROVIDER_HAS_DEPENDENTS`; `force` does not override them, so delete or repoint those resources first. Soft dependents — price overrides and usage/generation records — also block with `409` unless `force=true`, which deletes the provider's price overrides and unlinks its usage history, preserving those rows: each usage event keeps the provider's id as its `ai_provider_id`. The `409` body's `error.meta` reports the counts, a sample of offending IDs, and a `forcible` flag that is `true` when a `force=true` retry would succeed.
|
|
1512
1514
|
*
|
|
1513
1515
|
*/
|
|
1514
1516
|
static deleteAiProvider(options) {
|
|
@@ -1970,7 +1972,7 @@ var Auth = class {
|
|
|
1970
1972
|
/**
|
|
1971
1973
|
* Refresh a session
|
|
1972
1974
|
*
|
|
1973
|
-
* Exchanges a valid refresh token for a new access JWT and a rotated refresh token, taken from the body or from the `refresh_token` cookie set at sign-in — a browser sends an empty body and the cookie carries the credential. Refresh tokens are single-use; presenting a previously-rotated token is treated as reuse and revokes the whole session family
|
|
1975
|
+
* Exchanges a valid refresh token for a new access JWT and a rotated refresh token, taken from the body or from the `refresh_token` cookie set at sign-in — a browser sends an empty body and the cookie carries the credential. Refresh tokens are single-use; presenting a previously-rotated token is treated as reuse and revokes the whole session family, except within a few seconds of the rotation, where it is treated as two tabs racing on one cookie and rotated again.
|
|
1974
1976
|
*
|
|
1975
1977
|
*/
|
|
1976
1978
|
static refreshSession(options) {
|
|
@@ -2645,10 +2647,7 @@ var Embeddings = class {
|
|
|
2645
2647
|
* Provide `input` for a single text or `inputs` for a batch. At least one is required.
|
|
2646
2648
|
* Returns `embedding` when `input` is used, and `embeddings` when `inputs` is used.
|
|
2647
2649
|
*
|
|
2648
|
-
*
|
|
2649
|
-
* embedding spend reaches the usage rollup and the project's `cost_usd` / `tokens`
|
|
2650
|
-
* quotas. A project-scoped credential supplies its own project; a call that names
|
|
2651
|
-
* none and is bound to none is `400 VALIDATION_FAILED`.
|
|
2650
|
+
* The call's token usage is metered against the project in the path, so embedding spend reaches the usage rollup and the project's `cost_usd` / `tokens` quotas. A body `project_id` is ignored.
|
|
2652
2651
|
*
|
|
2653
2652
|
*/
|
|
2654
2653
|
static createEmbeddings(options) {
|
|
@@ -3699,7 +3698,7 @@ var Listings = class {
|
|
|
3699
3698
|
* Update a listing
|
|
3700
3699
|
*
|
|
3701
3700
|
* Change the title or description, or pause and resume the listing.
|
|
3702
|
-
* `state: suspended` stops
|
|
3701
|
+
* `state: suspended` stops a `listed` listing for every installing project at once; their installs are kept. `state: listed` resumes a listing you suspended, provided naturali had listed it; nobody reinstalls. A listing naturali suspended cannot be resumed here, and an invalid move answers `409 invalid_listing_state`.
|
|
3703
3702
|
*
|
|
3704
3703
|
*/
|
|
3705
3704
|
static updateListing(options) {
|
|
@@ -4303,8 +4302,8 @@ var Orchestrations = class {
|
|
|
4303
4302
|
/**
|
|
4304
4303
|
* Get orchestration queue stats
|
|
4305
4304
|
*
|
|
4306
|
-
* Returns a point-in-time snapshot of the orchestration run queue: how many tasks are waiting to be claimed (`queue_depth`), how many are currently claimed with a valid lease (`claimed_tasks`), the age of the oldest waiting task, recent claim-latency percentiles over a rolling in-process window. The per-project breakdown is listed by `GET /v1/projects/{project_id}/orchestrations/queue/stats/projects`.
|
|
4307
|
-
* Every figure is scoped to what the caller may see. A project-scoped caller gets `queue_depth` and `claimed_tasks` summed over their own projects, and `null` for `oldest_queued_age_seconds` and the `claim_latency_ms` percentiles — both describe the whole deployment and cannot be narrowed, so they are withheld rather than approximated.
|
|
4305
|
+
* Returns a point-in-time snapshot of the orchestration run queue: how many tasks are waiting to be claimed (`queue_depth`), how many are currently claimed with a valid lease (`claimed_tasks`), the age of the oldest waiting task, recent claim-latency percentiles over a rolling in-process window. The per-project breakdown is listed by `GET /v1/projects/{project_id}/orchestrations/queue/stats/projects`.
|
|
4306
|
+
* Every figure is scoped to what the caller may see. A project-scoped caller gets `queue_depth` and `claimed_tasks` summed over their own projects, and `null` for `oldest_queued_age_seconds` and the `claim_latency_ms` percentiles — both describe the whole deployment and cannot be narrowed, so they are withheld rather than approximated.
|
|
4308
4307
|
*
|
|
4309
4308
|
*/
|
|
4310
4309
|
static getQueueStats(options) {
|
|
@@ -4325,7 +4324,7 @@ var Orchestrations = class {
|
|
|
4325
4324
|
/**
|
|
4326
4325
|
* List the projects with queued orchestration work
|
|
4327
4326
|
*
|
|
4328
|
-
* One row per project with any queued or claimed task, ordered by project ID: the per-project breakdown of `GET /v1/projects/{project_id}/orchestrations/queue/stats`. A project-scoped caller sees its own projects only.
|
|
4327
|
+
* One row per project with any queued or claimed task, ordered by project ID: the per-project breakdown of `GET /v1/projects/{project_id}/orchestrations/queue/stats`. A project-scoped caller sees its own projects only.
|
|
4329
4328
|
*
|
|
4330
4329
|
*/
|
|
4331
4330
|
static listQueueStatsProjects(options) {
|
|
@@ -5894,7 +5893,7 @@ var Triggers = class {
|
|
|
5894
5893
|
/**
|
|
5895
5894
|
* Update a trigger
|
|
5896
5895
|
*
|
|
5897
|
-
* Updates an existing trigger's configuration. The type is immutable. Changing `target_type` or `target_id` re-checks the
|
|
5896
|
+
* Updates an existing trigger's configuration. The type is immutable. Changing `target_type` or `target_id` re-checks that the caller may start the resulting target, because a firing runs with the trigger creator's authority rather than the updater's. A caller who could not start the new target is answered `403` and the trigger keeps the target it had.
|
|
5898
5897
|
*
|
|
5899
5898
|
*/
|
|
5900
5899
|
static updateTrigger(options) {
|
|
@@ -7886,7 +7885,7 @@ const routes = {
|
|
|
7886
7885
|
"set-address": {
|
|
7887
7886
|
serviceClass: "Channels",
|
|
7888
7887
|
operationId: "setAddress",
|
|
7889
|
-
description: "Upserts the address with its `action`, the actor it speaks as, or both; a field left out is left alone. `action: null` forgets the exception and defers back to the route table; any other `action` requires the same fields a route or channel default would (`agent_id` for `agent`, `text` for `message`). `actor_id` binds an actor of this project, so the address speaks as the same actor your own sessions use. A changed actor deletes the address's conversations and their sessions — a session's actor is fixed — and the next message opens a fresh one; the actor naturali created for the address is deleted with them. An actor you bind is never deleted here.",
|
|
7888
|
+
description: "Upserts the address with its `action`, the actor it speaks as, or both; a field left out is left alone. `action: null` forgets the exception and defers back to the route table; any other `action` requires the same fields a route or channel default would (`agent_id` for `agent`, `text` for `message`). `actor_id` binds an actor of this project, so the address speaks as the same actor your own sessions use. A changed actor deletes the address's conversations and their sessions — a session's actor is fixed — and the next message opens a fresh one; the actor naturali created for the address is deleted with them. An actor you bind is never deleted here. An identifier no channel kind produces is `400`.",
|
|
7890
7889
|
moduleDocsUrl: "https://naturali.ai/docs/modules/addresses",
|
|
7891
7890
|
httpMethod: "put",
|
|
7892
7891
|
pathParams: ["project_id", "identifier"],
|
|
@@ -8035,7 +8034,7 @@ const routes = {
|
|
|
8035
8034
|
serviceClass: "Admin",
|
|
8036
8035
|
operationId: "listUsers",
|
|
8037
8036
|
description: "A cursor page of every account, newest first, each with the plan it is on and the balance of its credit ledger. Needs the `admin` role. `email` narrows the page to one account. It matches the whole address case-insensitively and takes no wildcards: an operator looking for `Ana@Acme.com` finds a row stored as `ana@acme.com`, and there is no substring search across customers' addresses. An account with no subscription reads as `free` with a balance of `0`: the absence of a row is the free plan, and the least-privileged rung is also what any unresolvable lookup should answer.",
|
|
8038
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8037
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8039
8038
|
httpMethod: "get",
|
|
8040
8039
|
pathParams: [],
|
|
8041
8040
|
queryParams: [
|
|
@@ -8073,7 +8072,7 @@ const routes = {
|
|
|
8073
8072
|
serviceClass: "Admin",
|
|
8074
8073
|
operationId: "setUserRoles",
|
|
8075
8074
|
description: "Replaces the platform roles of any user. Needs the `admin` role, and each role that changes needs the caller to hold the role that grants it (today `admin` grants `admin`). Values outside the catalog are rejected with a 400, and a caller cannot remove their own `admin` role.",
|
|
8076
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8075
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8077
8076
|
httpMethod: "put",
|
|
8078
8077
|
pathParams: ["user_id"],
|
|
8079
8078
|
queryParams: [],
|
|
@@ -8097,7 +8096,7 @@ const routes = {
|
|
|
8097
8096
|
serviceClass: "Admin",
|
|
8098
8097
|
operationId: "listUserPlanHistory",
|
|
8099
8098
|
description: "A cursor page of the account's plan history, newest first, and the rung it is on now. Needs the `admin` role. The history is append-only, so this is the record of who put the account where and why — nothing edits or removes a line. `plan` at the top level is the same value every entitlement check resolves, so one response answers both \"what plan is this?\" and \"how did it get there?\".",
|
|
8100
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8099
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8101
8100
|
httpMethod: "get",
|
|
8102
8101
|
pathParams: ["user_id"],
|
|
8103
8102
|
queryParams: ["limit", "cursor"],
|
|
@@ -8131,7 +8130,7 @@ const routes = {
|
|
|
8131
8130
|
serviceClass: "Admin",
|
|
8132
8131
|
operationId: "grantUserPlan",
|
|
8133
8132
|
description: "Puts the account on a rung of the infra ladder. Needs the `admin` role. `PUT` because an account is on exactly one rung at a time, but the change is **recorded rather than overwritten**: the plan history is append-only and the newest line is the account's plan. Setting the rung it already holds still writes a line — a re-confirmation is an act worth a record, and the `reason` given with it would otherwise have nowhere to go. Read the history back with `GET` on this path. An upgrade takes effect at once. A downgrade is the same call with a lower rung and takes effect when the month turns: until then `plan` stays the rung held and `next_plan` names the new one. At the turn, active channels past the new rung's allowance are disabled, oldest first; an upgrade re-enables them. A rung whose content-retention window a contract sets — `enterprise` — **requires `retention_days`**, since nothing else can answer what that window is and an unanswered one bounds nothing. Every other rung sets its own and refuses the field.",
|
|
8134
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8133
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8135
8134
|
httpMethod: "put",
|
|
8136
8135
|
pathParams: ["user_id"],
|
|
8137
8136
|
queryParams: [],
|
|
@@ -8172,7 +8171,7 @@ const routes = {
|
|
|
8172
8171
|
serviceClass: "Admin",
|
|
8173
8172
|
operationId: "listUserCredits",
|
|
8174
8173
|
description: "A cursor page of the account's credit lines, newest first, with the balance they sum to. Needs the `admin` role — including for the account's own owner, who reads their own balance at `GET /v1/users/me/billing` rather than here. That answers what is left; this is the line-by-line record behind it. What an operator reads it for is writing a correction: the line that was wrong stays on the record, so it has to be legible before it can be compensated for.",
|
|
8175
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8174
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8176
8175
|
httpMethod: "get",
|
|
8177
8176
|
pathParams: ["user_id"],
|
|
8178
8177
|
queryParams: [
|
|
@@ -8217,7 +8216,7 @@ const routes = {
|
|
|
8217
8216
|
serviceClass: "Admin",
|
|
8218
8217
|
operationId: "grantUserCredit",
|
|
8219
8218
|
description: "Writes one line to the account's credit ledger and answers with the balance it produced. Needs the `admin` role. The ledger is append-only and the balance is its sum — there is no balance to set and no line to edit or delete. A mistake is corrected by writing a **negative** `amount_usd`, which leaves the wrong line on the record beside the one that compensates for it. `kind` is required. Money received and credit given away report differently — one is revenue, the other customer-acquisition cost — so the line says which it is rather than defaulting to one of them. The balance this moves is not yet a ceiling anything enforces; turning it into one is a separate mechanism.",
|
|
8220
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8219
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8221
8220
|
httpMethod: "post",
|
|
8222
8221
|
pathParams: ["user_id"],
|
|
8223
8222
|
queryParams: [],
|
|
@@ -8258,7 +8257,7 @@ const routes = {
|
|
|
8258
8257
|
serviceClass: "Admin",
|
|
8259
8258
|
operationId: "getUserUsage",
|
|
8260
8259
|
description: "The same answer `GET /v1/users/me/usage` gives the account itself: runs, indexed storage and the plan-capped counts, per project and against the rung. Needs the `admin` role.",
|
|
8261
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8260
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8262
8261
|
httpMethod: "get",
|
|
8263
8262
|
pathParams: ["user_id"],
|
|
8264
8263
|
queryParams: [],
|
|
@@ -8276,7 +8275,7 @@ const routes = {
|
|
|
8276
8275
|
serviceClass: "Admin",
|
|
8277
8276
|
operationId: "getAdminPriceBook",
|
|
8278
8277
|
description: "The upstream runtime's global default prices — the rows carrying neither a provider nor a project, which is all the upstream listing returns, so no tenant's own rates appear here. These are a cost basis, not a tariff: what a customer pays is the plan they bought plus the multiplier in PRICING.md section 3, applied when spend is reconciled. This is the read behind the storage-rate assertion at boot and the pinned embedding rate.",
|
|
8279
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8278
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8280
8279
|
httpMethod: "get",
|
|
8281
8280
|
pathParams: [],
|
|
8282
8281
|
queryParams: [],
|
|
@@ -8288,7 +8287,7 @@ const routes = {
|
|
|
8288
8287
|
serviceClass: "Admin",
|
|
8289
8288
|
operationId: "listUserStatements",
|
|
8290
8289
|
description: "The same statements the account reads at `GET /v1/users/me/statements`, for an operator to bill from. Needs the `admin` role.",
|
|
8291
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8290
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8292
8291
|
httpMethod: "get",
|
|
8293
8292
|
pathParams: ["user_id"],
|
|
8294
8293
|
queryParams: ["limit", "cursor"],
|
|
@@ -8322,7 +8321,7 @@ const routes = {
|
|
|
8322
8321
|
serviceClass: "Admin",
|
|
8323
8322
|
operationId: "listAdminListings",
|
|
8324
8323
|
description: "Every listing in one state, newest first — `in_review` by default, the queue an operator works through.",
|
|
8325
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8324
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8326
8325
|
httpMethod: "get",
|
|
8327
8326
|
pathParams: [],
|
|
8328
8327
|
queryParams: [
|
|
@@ -8360,7 +8359,7 @@ const routes = {
|
|
|
8360
8359
|
serviceClass: "Admin",
|
|
8361
8360
|
operationId: "setAdminListingState",
|
|
8362
8361
|
description: "List a listing in review or one that is suspended, send one in review back to `draft`, or suspend any listing. A listing an operator suspends cannot be resumed by its publisher. An invalid move answers `409 invalid_listing_state`.",
|
|
8363
|
-
moduleDocsUrl: "https://naturali.ai/docs
|
|
8362
|
+
moduleDocsUrl: "https://naturali.ai/docs",
|
|
8364
8363
|
httpMethod: "put",
|
|
8365
8364
|
pathParams: ["listing_id"],
|
|
8366
8365
|
queryParams: [],
|
|
@@ -8595,7 +8594,7 @@ const routes = {
|
|
|
8595
8594
|
},
|
|
8596
8595
|
{
|
|
8597
8596
|
"name": "version_label",
|
|
8598
|
-
"description": "Optional tag for the config version this write
|
|
8597
|
+
"description": "Optional tag for the config version this write creates (e.g. `initial`). Annotates the version only — it is not stored on the agent and is not part of the config, so labelling a change is never itself a change.",
|
|
8599
8598
|
"required": false,
|
|
8600
8599
|
"type": "string",
|
|
8601
8600
|
"in": "body"
|
|
@@ -8821,7 +8820,7 @@ const routes = {
|
|
|
8821
8820
|
},
|
|
8822
8821
|
{
|
|
8823
8822
|
"name": "version_label",
|
|
8824
|
-
"description": "Optional tag for the config version this write
|
|
8823
|
+
"description": "Optional tag for the config version this write creates (e.g. `tone-change`). Annotates the version only — it is not stored on the agent and is not part of the config, so labelling a change is never itself a change. Ignored when the write changes nothing, since no version is created.",
|
|
8825
8824
|
"required": false,
|
|
8826
8825
|
"type": "string",
|
|
8827
8826
|
"in": "body"
|
|
@@ -9030,7 +9029,7 @@ const routes = {
|
|
|
9030
9029
|
},
|
|
9031
9030
|
{
|
|
9032
9031
|
"name": "version_label",
|
|
9033
|
-
"description": "Optional tag for the config version this write
|
|
9032
|
+
"description": "Optional tag for the config version this write creates (e.g. `tone-change`). Annotates the version only — it is not stored on the agent and is not part of the config, so labelling a change is never itself a change. Ignored when the write changes nothing, since no version is created.",
|
|
9034
9033
|
"required": false,
|
|
9035
9034
|
"type": "string",
|
|
9036
9035
|
"in": "body"
|
|
@@ -9667,7 +9666,7 @@ const routes = {
|
|
|
9667
9666
|
"delete-ai-provider": {
|
|
9668
9667
|
serviceClass: "AIProviders",
|
|
9669
9668
|
operationId: "deleteAiProvider",
|
|
9670
|
-
description: "Deletes an AI provider configuration. Live references —
|
|
9669
|
+
description: "Deletes an AI provider configuration. Live references — agents and model routes whose targets name this provider — always block deletion with `409 AI_PROVIDER_HAS_DEPENDENTS`; `force` does not override them, so delete or repoint those resources first. Soft dependents — price overrides and usage/generation records — also block with `409` unless `force=true`, which deletes the provider's price overrides and unlinks its usage history, preserving those rows: each usage event keeps the provider's id as its `ai_provider_id`. The `409` body's `error.meta` reports the counts, a sample of offending IDs, and a `forcible` flag that is `true` when a `force=true` retry would succeed.",
|
|
9671
9670
|
moduleDocsUrl: "https://naturali.ai/docs/modules/ai-providers",
|
|
9672
9671
|
httpMethod: "delete",
|
|
9673
9672
|
pathParams: ["project_id", "ai_provider_id"],
|
|
@@ -9691,7 +9690,7 @@ const routes = {
|
|
|
9691
9690
|
},
|
|
9692
9691
|
{
|
|
9693
9692
|
"name": "force",
|
|
9694
|
-
"description": "When `true`, delete the provider's price overrides and unlink its usage history so a provider with only soft dependents can be removed. Has no effect on live references (
|
|
9693
|
+
"description": "When `true`, delete the provider's price overrides and unlink its usage history so a provider with only soft dependents can be removed. Has no effect on live references (agents, model routes), which always block deletion.\n",
|
|
9695
9694
|
"required": false,
|
|
9696
9695
|
"type": "boolean",
|
|
9697
9696
|
"in": "query"
|
|
@@ -10127,7 +10126,7 @@ const routes = {
|
|
|
10127
10126
|
},
|
|
10128
10127
|
{
|
|
10129
10128
|
"name": "arguments",
|
|
10130
|
-
"description": "Edited arguments to execute instead of the proposed ones. Editing composes a new call
|
|
10129
|
+
"description": "Edited arguments to execute instead of the proposed ones. Editing composes a new call to the tool. Refused on an item with no `proposed_action`.",
|
|
10131
10130
|
"required": false,
|
|
10132
10131
|
"type": "object",
|
|
10133
10132
|
"in": "body"
|
|
@@ -10641,7 +10640,7 @@ const routes = {
|
|
|
10641
10640
|
"refresh-session": {
|
|
10642
10641
|
serviceClass: "Auth",
|
|
10643
10642
|
operationId: "refreshSession",
|
|
10644
|
-
description: "Exchanges a valid refresh token for a new access JWT and a rotated refresh token, taken from the body or from the `refresh_token` cookie set at sign-in — a browser sends an empty body and the cookie carries the credential. Refresh tokens are single-use; presenting a previously-rotated token is treated as reuse and revokes the whole session family
|
|
10643
|
+
description: "Exchanges a valid refresh token for a new access JWT and a rotated refresh token, taken from the body or from the `refresh_token` cookie set at sign-in — a browser sends an empty body and the cookie carries the credential. Refresh tokens are single-use; presenting a previously-rotated token is treated as reuse and revokes the whole session family, except within a few seconds of the rotation, where it is treated as two tabs racing on one cookie and rotated again.",
|
|
10645
10644
|
moduleDocsUrl: "https://naturali.ai/docs/modules/auth",
|
|
10646
10645
|
httpMethod: "post",
|
|
10647
10646
|
pathParams: [],
|
|
@@ -11094,7 +11093,7 @@ const routes = {
|
|
|
11094
11093
|
"list-project-channel-routes": {
|
|
11095
11094
|
serviceClass: "Channels",
|
|
11096
11095
|
operationId: "listProjectChannelRoutes",
|
|
11097
|
-
description: "Every route across every channel in the project, one read — the table is small by construction
|
|
11096
|
+
description: "Every route across every channel in the project, one read — the table is small by construction, so this is unpaginated.",
|
|
11098
11097
|
moduleDocsUrl: "https://naturali.ai/docs/modules/channel-routes",
|
|
11099
11098
|
httpMethod: "get",
|
|
11100
11099
|
pathParams: ["project_id"],
|
|
@@ -11146,7 +11145,7 @@ const routes = {
|
|
|
11146
11145
|
"create-channel": {
|
|
11147
11146
|
serviceClass: "Channels",
|
|
11148
11147
|
operationId: "createChannel",
|
|
11149
|
-
description: "Connect a channel. The required fields depend on `channel`; no credential is ever returned. **Discord** (`channel: discord`) — supply `application_id` and `bot_token`, plus the `modes` selecting which Gateway flows to serve (direct messages, and/or @mention-opens-a-thread). The token is checked with Discord first: `400 invalid_bot_token` when Discord rejects it, `400 application_mismatch` when it belongs to another application. Returns `501` when
|
|
11148
|
+
description: "Connect a channel. The required fields depend on `channel`; no credential is ever returned. **Discord** (`channel: discord`) — supply `application_id` and `bot_token`, plus the `modes` selecting which Gateway flows to serve (direct messages, and/or @mention-opens-a-thread). The token is checked with Discord first: `400 invalid_bot_token` when Discord rejects it, `400 application_mismatch` when it belongs to another application. Returns `501` when this deployment does not enable Discord channels. **WhatsApp** (default) — one of two credential paths, both filling the same write-only secret: * **BYOT** (`credential_source: byot`, default) — supply `phone_number_id` and `access_token` from your own Meta app. * **Embedded signup** (`credential_source: embedded_signup`) — supply `code` and `waba_id` from the Meta popup; naturali exchanges the `code` for the token, subscribes its app to the WABA and registers the number for sending when it is not yet, so the customer never hands over a token. Returns `501` on deployments where Meta App credentials are not configured. The project's plan limits how many channels it may hold. At the limit this responds `403` with `plan_limit_reached`, whose `details` carry the `plan` and the `limit`, before any credential is acquired. Only `active` channels count, so disabling one frees allowance without deleting it.",
|
|
11150
11149
|
moduleDocsUrl: "https://naturali.ai/docs/modules/channels",
|
|
11151
11150
|
httpMethod: "post",
|
|
11152
11151
|
pathParams: ["project_id"],
|
|
@@ -11212,7 +11211,7 @@ const routes = {
|
|
|
11212
11211
|
},
|
|
11213
11212
|
{
|
|
11214
11213
|
"name": "code",
|
|
11215
|
-
"description": "Required for `embedded_signup`. The short-lived authorization code from the Meta popup; naturali exchanges it for the access token server-side. Never stored or returned
|
|
11214
|
+
"description": "Required for `embedded_signup`. The short-lived authorization code from the Meta popup; naturali exchanges it for the access token server-side. Never stored or returned. A code Meta rejects (malformed, expired or already used) is `400 invalid_signup_code`.\n",
|
|
11216
11215
|
"required": false,
|
|
11217
11216
|
"type": "string",
|
|
11218
11217
|
"in": "body"
|
|
@@ -12333,7 +12332,7 @@ const routes = {
|
|
|
12333
12332
|
},
|
|
12334
12333
|
{
|
|
12335
12334
|
"name": "version_label",
|
|
12336
|
-
"description": "Optional tag for the version this write
|
|
12335
|
+
"description": "Optional tag for the version this write creates. Ignored when the write changes no question, since no version is archived.",
|
|
12337
12336
|
"required": false,
|
|
12338
12337
|
"type": "string",
|
|
12339
12338
|
"in": "body"
|
|
@@ -12793,7 +12792,7 @@ const routes = {
|
|
|
12793
12792
|
},
|
|
12794
12793
|
{
|
|
12795
12794
|
"name": "filename",
|
|
12796
|
-
"description": "",
|
|
12795
|
+
"description": "Download name. Defaults to the leaf of `path`.",
|
|
12797
12796
|
"required": false,
|
|
12798
12797
|
"type": "string",
|
|
12799
12798
|
"in": "body"
|
|
@@ -13251,7 +13250,7 @@ const routes = {
|
|
|
13251
13250
|
},
|
|
13252
13251
|
{
|
|
13253
13252
|
"name": "version_label",
|
|
13254
|
-
"description": "Optional tag for the tombstone version this write
|
|
13253
|
+
"description": "Optional tag for the tombstone version this write creates.",
|
|
13255
13254
|
"required": false,
|
|
13256
13255
|
"type": "string",
|
|
13257
13256
|
"in": "body"
|
|
@@ -13553,7 +13552,7 @@ const routes = {
|
|
|
13553
13552
|
"create-embeddings": {
|
|
13554
13553
|
serviceClass: "Embeddings",
|
|
13555
13554
|
operationId: "createEmbeddings",
|
|
13556
|
-
description: "Generates embedding vectors for one or more text inputs using the server's configured embedding model. Provide `input` for a single text or `inputs` for a batch. At least one is required. Returns `embedding` when `input` is used, and `embeddings` when `inputs` is used.
|
|
13555
|
+
description: "Generates embedding vectors for one or more text inputs using the server's configured embedding model. Provide `input` for a single text or `inputs` for a batch. At least one is required. Returns `embedding` when `input` is used, and `embeddings` when `inputs` is used. The call's token usage is metered against the project in the path, so embedding spend reaches the usage rollup and the project's `cost_usd` / `tokens` quotas. A body `project_id` is ignored.",
|
|
13557
13556
|
moduleDocsUrl: "https://naturali.ai/docs/modules/embeddings",
|
|
13558
13557
|
httpMethod: "post",
|
|
13559
13558
|
pathParams: ["project_id"],
|
|
@@ -13570,7 +13569,7 @@ const routes = {
|
|
|
13570
13569
|
},
|
|
13571
13570
|
{
|
|
13572
13571
|
"name": "input",
|
|
13573
|
-
"description": "Single text to embed.",
|
|
13572
|
+
"description": "Single text to embed. An empty string is `400 VALIDATION_FAILED`.",
|
|
13574
13573
|
"required": false,
|
|
13575
13574
|
"type": "string",
|
|
13576
13575
|
"in": "body"
|
|
@@ -15638,7 +15637,7 @@ const routes = {
|
|
|
15638
15637
|
},
|
|
15639
15638
|
{
|
|
15640
15639
|
"name": "version_label",
|
|
15641
|
-
"description": "Optional tag for the config version this write
|
|
15640
|
+
"description": "Optional tag for the config version this write creates (e.g. `initial`). Annotates the version only — it is not stored on the guardrail and is not part of the config, so labelling a change is never itself a change.",
|
|
15642
15641
|
"required": false,
|
|
15643
15642
|
"type": "string",
|
|
15644
15643
|
"in": "body"
|
|
@@ -15738,7 +15737,7 @@ const routes = {
|
|
|
15738
15737
|
},
|
|
15739
15738
|
{
|
|
15740
15739
|
"name": "version_label",
|
|
15741
|
-
"description": "Optional tag for the config version this write
|
|
15740
|
+
"description": "Optional tag for the config version this write creates (e.g. `tightened`). Annotates the version only — it is not stored on the guardrail and is not part of the config, so labelling a change is never itself a change. Ignored when the write changes no policy, since no version is created.",
|
|
15742
15741
|
"required": false,
|
|
15743
15742
|
"type": "string",
|
|
15744
15743
|
"in": "body"
|
|
@@ -16235,7 +16234,7 @@ const routes = {
|
|
|
16235
16234
|
serviceClass: "Installs",
|
|
16236
16235
|
operationId: "listInstalls",
|
|
16237
16236
|
description: "The listings the project installed, newest first.",
|
|
16238
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16237
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16239
16238
|
httpMethod: "get",
|
|
16240
16239
|
pathParams: ["project_id"],
|
|
16241
16240
|
queryParams: ["limit", "cursor"],
|
|
@@ -16269,7 +16268,7 @@ const routes = {
|
|
|
16269
16268
|
serviceClass: "Installs",
|
|
16270
16269
|
operationId: "createInstall",
|
|
16271
16270
|
description: "Install a listing by its id. A listed entry, a draft and a listing in review all install; a suspended one answers `409 listing_suspended`. Installing again answers the existing install. After the publisher removed this project's access, installing answers `403 install_blocked`.",
|
|
16272
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16271
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16273
16272
|
httpMethod: "post",
|
|
16274
16273
|
pathParams: ["project_id"],
|
|
16275
16274
|
queryParams: [],
|
|
@@ -16293,7 +16292,7 @@ const routes = {
|
|
|
16293
16292
|
serviceClass: "Installs",
|
|
16294
16293
|
operationId: "getInstall",
|
|
16295
16294
|
description: "One of the project's installs.",
|
|
16296
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16295
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16297
16296
|
httpMethod: "get",
|
|
16298
16297
|
pathParams: ["project_id", "install_id"],
|
|
16299
16298
|
queryParams: [],
|
|
@@ -16317,7 +16316,7 @@ const routes = {
|
|
|
16317
16316
|
serviceClass: "Installs",
|
|
16318
16317
|
operationId: "deleteInstall",
|
|
16319
16318
|
description: "Remove the install. While the project's agents, ingestion rules or other resources still name the installed resource, this answers `409 install_in_use` with them in `details.references`; `force=true` uninstalls anyway and those resources stop reaching it. A `blocked` install, and the install managed conversion uses, answer `403`.",
|
|
16320
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16319
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16321
16320
|
httpMethod: "delete",
|
|
16322
16321
|
pathParams: ["project_id", "install_id"],
|
|
16323
16322
|
queryParams: ["force"],
|
|
@@ -16381,14 +16380,14 @@ const routes = {
|
|
|
16381
16380
|
},
|
|
16382
16381
|
{
|
|
16383
16382
|
"name": "rrf_k",
|
|
16384
|
-
"description": "The `k` in the reciprocal rank fusion term `1 / (k + rank)`, which sets how steeply a result's contribution decays with its position in each ranked list. A smaller value weights the very top of each list more heavily. Defaults to
|
|
16383
|
+
"description": "The `k` in the reciprocal rank fusion term `1 / (k + rank)`, which sets how steeply a result's contribution decays with its position in each ranked list. A smaller value weights the very top of each list more heavily. Defaults to 60. Only applies when `query` is provided.",
|
|
16385
16384
|
"required": false,
|
|
16386
16385
|
"type": "integer",
|
|
16387
16386
|
"in": "body"
|
|
16388
16387
|
},
|
|
16389
16388
|
{
|
|
16390
16389
|
"name": "recency_half_life_days",
|
|
16391
|
-
"description": "Half-life, in days, of a recency decay applied to **memory store** results after fusion: a result's `score` is multiplied by `2 ^ (-age_in_days / recency_half_life_days)`, where age is measured from its `updated_at`. Document results are never decayed. `0
|
|
16390
|
+
"description": "Half-life, in days, of a recency decay applied to **memory store** results after fusion: a result's `score` is multiplied by `2 ^ (-age_in_days / recency_half_life_days)`, where age is measured from its `updated_at`. Document results are never decayed. `0`, the default, disables the blend entirely. Accepts fractions (`0.5` is twelve hours). How many ranks a given half-life costs depends on `rrf_k`. Only applies when `query` is provided. **No value is known to be safe in general**: every half-life measured against the reference corpus that lifted recency-sensitive queries also cost relevance-sensitive ones, which is why this ships disabled. Measure against your own corpus before setting it.",
|
|
16392
16391
|
"required": false,
|
|
16393
16392
|
"type": "number",
|
|
16394
16393
|
"in": "body"
|
|
@@ -16455,7 +16454,7 @@ const routes = {
|
|
|
16455
16454
|
serviceClass: "Listings",
|
|
16456
16455
|
operationId: "listPublicListings",
|
|
16457
16456
|
description: "Every listed entry, newest first. `interface` is what an installing project sees of the resource, read live from the publisher.",
|
|
16458
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16457
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16459
16458
|
httpMethod: "get",
|
|
16460
16459
|
pathParams: [],
|
|
16461
16460
|
queryParams: ["limit", "cursor"],
|
|
@@ -16479,7 +16478,7 @@ const routes = {
|
|
|
16479
16478
|
serviceClass: "Listings",
|
|
16480
16479
|
operationId: "getPublicListing",
|
|
16481
16480
|
description: "One listed entry. A listing that is not listed answers `404`.",
|
|
16482
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16481
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16483
16482
|
httpMethod: "get",
|
|
16484
16483
|
pathParams: ["listing_id"],
|
|
16485
16484
|
queryParams: [],
|
|
@@ -16497,7 +16496,7 @@ const routes = {
|
|
|
16497
16496
|
serviceClass: "Listings",
|
|
16498
16497
|
operationId: "listListings",
|
|
16499
16498
|
description: "The listings the project publishes, newest first.",
|
|
16500
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16499
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16501
16500
|
httpMethod: "get",
|
|
16502
16501
|
pathParams: ["project_id"],
|
|
16503
16502
|
queryParams: ["limit", "cursor"],
|
|
@@ -16531,7 +16530,7 @@ const routes = {
|
|
|
16531
16530
|
serviceClass: "Listings",
|
|
16532
16531
|
operationId: "createListing",
|
|
16533
16532
|
description: "Publish one of the project's tools or agents as a `draft`. Any project member may publish. An agent on a naturali model whose model has no price answers `503 model_not_priced`. A resource that does not exist in the project answers `400 resource_not_found`, and one that already has a listing `409 listing_exists`.",
|
|
16534
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16533
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16535
16534
|
httpMethod: "post",
|
|
16536
16535
|
pathParams: ["project_id"],
|
|
16537
16536
|
queryParams: [],
|
|
@@ -16586,7 +16585,7 @@ const routes = {
|
|
|
16586
16585
|
serviceClass: "Listings",
|
|
16587
16586
|
operationId: "getListing",
|
|
16588
16587
|
description: "One of the project's listings.",
|
|
16589
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16588
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16590
16589
|
httpMethod: "get",
|
|
16591
16590
|
pathParams: ["project_id", "listing_id"],
|
|
16592
16591
|
queryParams: [],
|
|
@@ -16609,8 +16608,8 @@ const routes = {
|
|
|
16609
16608
|
"update-listing": {
|
|
16610
16609
|
serviceClass: "Listings",
|
|
16611
16610
|
operationId: "updateListing",
|
|
16612
|
-
description: "Change the title or description, or pause and resume the listing. `state: suspended` stops
|
|
16613
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16611
|
+
description: "Change the title or description, or pause and resume the listing. `state: suspended` stops a `listed` listing for every installing project at once; their installs are kept. `state: listed` resumes a listing you suspended, provided naturali had listed it; nobody reinstalls. A listing naturali suspended cannot be resumed here, and an invalid move answers `409 invalid_listing_state`.",
|
|
16612
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16614
16613
|
httpMethod: "patch",
|
|
16615
16614
|
pathParams: ["project_id", "listing_id"],
|
|
16616
16615
|
queryParams: [],
|
|
@@ -16665,7 +16664,7 @@ const routes = {
|
|
|
16665
16664
|
serviceClass: "Listings",
|
|
16666
16665
|
operationId: "deleteListing",
|
|
16667
16666
|
description: "Remove a listing and stop sharing its resource. Refused with `409 listing_has_installs` while any project holds an install, in any state: remove each one first, which takes two deletes of `/installs/{install_id}` for an `active` or `suspended` install. The listing's price stops applying from the next minute, and a later listing of the same resource starts from no price. The tool or agent itself is not touched.",
|
|
16668
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16667
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16669
16668
|
httpMethod: "delete",
|
|
16670
16669
|
pathParams: ["project_id", "listing_id"],
|
|
16671
16670
|
queryParams: [],
|
|
@@ -16689,7 +16688,7 @@ const routes = {
|
|
|
16689
16688
|
serviceClass: "Listings",
|
|
16690
16689
|
operationId: "submitListing",
|
|
16691
16690
|
description: "Move a `draft` listing to `in_review`. naturali lists it in the marketplace or sends it back to `draft`. Any other state answers `409 invalid_listing_state`.",
|
|
16692
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16691
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16693
16692
|
httpMethod: "post",
|
|
16694
16693
|
pathParams: ["project_id", "listing_id"],
|
|
16695
16694
|
queryParams: [],
|
|
@@ -16713,7 +16712,7 @@ const routes = {
|
|
|
16713
16712
|
serviceClass: "Listings",
|
|
16714
16713
|
operationId: "listListingInstalls",
|
|
16715
16714
|
description: "Each project that installed the listing, with its usage this billing cycle as last sampled. Never the content of a call.",
|
|
16716
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16715
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16717
16716
|
httpMethod: "get",
|
|
16718
16717
|
pathParams: ["project_id", "listing_id"],
|
|
16719
16718
|
queryParams: ["limit", "cursor"],
|
|
@@ -16754,7 +16753,7 @@ const routes = {
|
|
|
16754
16753
|
serviceClass: "Listings",
|
|
16755
16754
|
operationId: "deleteListingInstall",
|
|
16756
16755
|
description: "Cut one installing project off. An `active` or `suspended` install becomes `blocked`, and that project cannot install the listing again. Deleting a `blocked` install removes it, which lets that project install again.",
|
|
16757
|
-
moduleDocsUrl: "https://naturali.ai/docs/modules/
|
|
16756
|
+
moduleDocsUrl: "https://naturali.ai/docs/modules/marketplace",
|
|
16758
16757
|
httpMethod: "delete",
|
|
16759
16758
|
pathParams: [
|
|
16760
16759
|
"project_id",
|
|
@@ -18564,7 +18563,7 @@ const routes = {
|
|
|
18564
18563
|
"get-queue-stats": {
|
|
18565
18564
|
serviceClass: "Orchestrations",
|
|
18566
18565
|
operationId: "getQueueStats",
|
|
18567
|
-
description: "Returns a point-in-time snapshot of the orchestration run queue: how many tasks are waiting to be claimed (`queue_depth`), how many are currently claimed with a valid lease (`claimed_tasks`), the age of the oldest waiting task, recent claim-latency percentiles over a rolling in-process window. The per-project breakdown is listed by `GET /v1/projects/{project_id}/orchestrations/queue/stats/projects`.
|
|
18566
|
+
description: "Returns a point-in-time snapshot of the orchestration run queue: how many tasks are waiting to be claimed (`queue_depth`), how many are currently claimed with a valid lease (`claimed_tasks`), the age of the oldest waiting task, recent claim-latency percentiles over a rolling in-process window. The per-project breakdown is listed by `GET /v1/projects/{project_id}/orchestrations/queue/stats/projects`. Every figure is scoped to what the caller may see. A project-scoped caller gets `queue_depth` and `claimed_tasks` summed over their own projects, and `null` for `oldest_queued_age_seconds` and the `claim_latency_ms` percentiles — both describe the whole deployment and cannot be narrowed, so they are withheld rather than approximated.",
|
|
18568
18567
|
moduleDocsUrl: "https://naturali.ai/docs/modules/orchestrations",
|
|
18569
18568
|
httpMethod: "get",
|
|
18570
18569
|
pathParams: ["project_id"],
|
|
@@ -18582,7 +18581,7 @@ const routes = {
|
|
|
18582
18581
|
"list-queue-stats-projects": {
|
|
18583
18582
|
serviceClass: "Orchestrations",
|
|
18584
18583
|
operationId: "listQueueStatsProjects",
|
|
18585
|
-
description: "One row per project with any queued or claimed task, ordered by project ID: the per-project breakdown of `GET /v1/projects/{project_id}/orchestrations/queue/stats`. A project-scoped caller sees its own projects only.
|
|
18584
|
+
description: "One row per project with any queued or claimed task, ordered by project ID: the per-project breakdown of `GET /v1/projects/{project_id}/orchestrations/queue/stats`. A project-scoped caller sees its own projects only.",
|
|
18586
18585
|
moduleDocsUrl: "https://naturali.ai/docs/modules/orchestrations",
|
|
18587
18586
|
httpMethod: "get",
|
|
18588
18587
|
pathParams: ["project_id"],
|
|
@@ -18720,7 +18719,7 @@ const routes = {
|
|
|
18720
18719
|
},
|
|
18721
18720
|
{
|
|
18722
18721
|
"name": "version_label",
|
|
18723
|
-
"description": "Optional tag for the version this write
|
|
18722
|
+
"description": "Optional tag for the version this write creates, e.g. `rewired`. Ignored when the write changes no graph field, since no version is archived.",
|
|
18724
18723
|
"required": false,
|
|
18725
18724
|
"type": "string",
|
|
18726
18725
|
"in": "body"
|
|
@@ -19403,7 +19402,7 @@ const routes = {
|
|
|
19403
19402
|
},
|
|
19404
19403
|
{
|
|
19405
19404
|
"name": "version_label",
|
|
19406
|
-
"description": "Optional tag for the version this write
|
|
19405
|
+
"description": "Optional tag for the version this write creates. Ignored when the write changes no definition, since no version is archived.",
|
|
19407
19406
|
"required": false,
|
|
19408
19407
|
"type": "string",
|
|
19409
19408
|
"in": "body"
|
|
@@ -22915,7 +22914,7 @@ const routes = {
|
|
|
22915
22914
|
},
|
|
22916
22915
|
{
|
|
22917
22916
|
"name": "execute",
|
|
22918
|
-
"description": "Execution config for http tools. Supported fields: `url` (required), `method` (default `POST`), `headers`, `body_mode` and `response_mode`. The `url` may contain `{paramName}` placeholders (e.g. `/users/{userId}`) that are replaced at call time with the corresponding tool argument value (URL-encoded). Arguments consumed as path parameters are excluded from the query string and request body. `body_mode` is `json` (default) or `multipart`. In `multipart` mode the merged tool arguments are sent as a `multipart/form-data` body: scalar fields become plain form fields and a field shaped like `{ content_type, filename, data_base64 }` is decoded from base64 and attached as a file part (the hardcoded `Content-Type: application/json` is dropped so `fetch` sets the multipart boundary itself). `response_mode` is `json` (default: the body parsed as JSON, else returned as text) or `base64`, which returns a 2xx body as `{ content_type, filename, data_base64 }` — the same file shape `multipart` accepts, so a pipeline step can relay a downloaded file. `filename` comes from `Content-Disposition` and is omitted when the target names none; a body over `TOOL_RESPONSE_MAX_BYTES` is `502 TOOL_RESPONSE_TOO_LARGE`.\n\n`auth` adds a computed request credential, for targets whose `Authorization` value cannot be expressed as a static header. Supported `auth.type` values:\n\n- `aws_sigv4` — signs the request with AWS Signature Version 4. Requires `region`, `service`, `access_key_id` and `secret_access_key`; `session_token` is optional (temporary credentials). Incompatible with `body_mode: multipart`, whose body bytes are not known at signing time.\n- `gcp_service_account` — mints a Google OAuth 2.0 access token from a signed service account assertion and sends it as a bearer token. Requires `credentials` (the service account key file JSON, as a string) and `scopes` (a non-empty array). Tokens are cached per service account and scope set until shortly before they expire.\n\nCredential fields accept `{{secret:...}}` references and should use them — a tool is readable by anyone who can `GET /tools`, and the stored reference is what is echoed back, never the resolved value.\n\nA credential slot takes a reference, never a literal: a literal `secret_access_key`, `session_token` or `credentials` under `auth`, a literal credential-named `headers` value (`Authorization`, `Cookie`, or a name containing `api-key`/`token`/`secret`/`password`), or a `url` carrying a password or a literal credential-named query parameter (those names, plus `key` and `sig`/`signature`) is refused with `400 LITERAL_CREDENTIAL`, `meta.paths` naming each one. A stored literal reads back as `{\"no_echo\": true}` (a `url` holding one is masked whole), an object rather than a string so a read-edit-write round trip fails the schema check instead of writing the placeholder in as the credential. A value carrying a `{{secret:...}}` reference is the wiring, not the credential, and stays readable.\n\n`headers` values additionally accept `{{context:<key>}}` references, resolved per call from the caller's `tool_context`, so a per-user credential can be placed in the real header the target expects (`Authorization: Bearer {{context:ocaToken}}`) instead of only in an `X-Naturali-Context-<key>` header. Valid **only** inside `headers` — a context value is caller-supplied, so it may not steer the `url` — and a key missing from the `tool_context` at call time fails the tool call with `MISSING_TOOL_CONTEXT_KEY` rather than sending an empty credential. See the Tool Context reference.\n",
|
|
22917
|
+
"description": "Execution config for http tools. An `http` tool without a non-empty `url` is `400 VALIDATION_FAILED`, on create and on an update that would leave it without one. Supported fields: `url` (required), `method` (default `POST`), `headers`, `body_mode` and `response_mode`. The `url` may contain `{paramName}` placeholders (e.g. `/users/{userId}`) that are replaced at call time with the corresponding tool argument value (URL-encoded). Arguments consumed as path parameters are excluded from the query string and request body. `body_mode` is `json` (default) or `multipart`. In `multipart` mode the merged tool arguments are sent as a `multipart/form-data` body: scalar fields become plain form fields and a field shaped like `{ content_type, filename, data_base64 }` is decoded from base64 and attached as a file part (the hardcoded `Content-Type: application/json` is dropped so `fetch` sets the multipart boundary itself). `response_mode` is `json` (default: the body parsed as JSON, else returned as text) or `base64`, which returns a 2xx body as `{ content_type, filename, data_base64 }` — the same file shape `multipart` accepts, so a pipeline step can relay a downloaded file. `filename` comes from `Content-Disposition` and is omitted when the target names none; a body over `TOOL_RESPONSE_MAX_BYTES` is `502 TOOL_RESPONSE_TOO_LARGE`.\n\n`auth` adds a computed request credential, for targets whose `Authorization` value cannot be expressed as a static header. Supported `auth.type` values:\n\n- `aws_sigv4` — signs the request with AWS Signature Version 4. Requires `region`, `service`, `access_key_id` and `secret_access_key`; `session_token` is optional (temporary credentials). Incompatible with `body_mode: multipart`, whose body bytes are not known at signing time.\n- `gcp_service_account` — mints a Google OAuth 2.0 access token from a signed service account assertion and sends it as a bearer token. Requires `credentials` (the service account key file JSON, as a string) and `scopes` (a non-empty array). Tokens are cached per service account and scope set until shortly before they expire.\n\nCredential fields accept `{{secret:...}}` references and should use them — a tool is readable by anyone who can `GET /tools`, and the stored reference is what is echoed back, never the resolved value.\n\nA credential slot takes a reference, never a literal: a literal `secret_access_key`, `session_token` or `credentials` under `auth`, a literal credential-named `headers` value (`Authorization`, `Cookie`, or a name containing `api-key`/`token`/`secret`/`password`), or a `url` carrying a password or a literal credential-named query parameter (those names, plus `key` and `sig`/`signature`) is refused with `400 LITERAL_CREDENTIAL`, `meta.paths` naming each one. A stored literal reads back as `{\"no_echo\": true}` (a `url` holding one is masked whole), an object rather than a string so a read-edit-write round trip fails the schema check instead of writing the placeholder in as the credential. A value carrying a `{{secret:...}}` reference is the wiring, not the credential, and stays readable.\n\n`headers` values additionally accept `{{context:<key>}}` references, resolved per call from the caller's `tool_context`, so a per-user credential can be placed in the real header the target expects (`Authorization: Bearer {{context:ocaToken}}`) instead of only in an `X-Naturali-Context-<key>` header. Valid **only** inside `headers` — a context value is caller-supplied, so it may not steer the `url` — and a key missing from the `tool_context` at call time fails the tool call with `MISSING_TOOL_CONTEXT_KEY` rather than sending an empty credential. See the Tool Context reference.\n",
|
|
22919
22918
|
"required": false,
|
|
22920
22919
|
"type": "object",
|
|
22921
22920
|
"in": "body"
|
|
@@ -23057,7 +23056,7 @@ const routes = {
|
|
|
23057
23056
|
},
|
|
23058
23057
|
{
|
|
23059
23058
|
"name": "execute",
|
|
23060
|
-
"description": "Execution config for http tools. Supported fields: `url` (required), `method` (default `POST`), `headers`, `body_mode` and `response_mode`. The `url` may contain `{paramName}` placeholders (e.g. `/users/{userId}`) that are replaced at call time with the corresponding tool argument value (URL-encoded). Arguments consumed as path parameters are excluded from the query string and request body. `body_mode` is `json` (default) or `multipart`. In `multipart` mode the merged tool arguments are sent as a `multipart/form-data` body: scalar fields become plain form fields and a field shaped like `{ content_type, filename, data_base64 }` is decoded from base64 and attached as a file part (the hardcoded `Content-Type: application/json` is dropped so `fetch` sets the multipart boundary itself). `response_mode` is `json` (default: the body parsed as JSON, else returned as text) or `base64`, which returns a 2xx body as `{ content_type, filename, data_base64 }` — the same file shape `multipart` accepts, so a pipeline step can relay a downloaded file. `filename` comes from `Content-Disposition` and is omitted when the target names none; a body over `TOOL_RESPONSE_MAX_BYTES` is `502 TOOL_RESPONSE_TOO_LARGE`.\n\n`auth` adds a computed request credential, for targets whose `Authorization` value cannot be expressed as a static header. Supported `auth.type` values:\n\n- `aws_sigv4` — signs the request with AWS Signature Version 4. Requires `region`, `service`, `access_key_id` and `secret_access_key`; `session_token` is optional (temporary credentials). Incompatible with `body_mode: multipart`, whose body bytes are not known at signing time.\n- `gcp_service_account` — mints a Google OAuth 2.0 access token from a signed service account assertion and sends it as a bearer token. Requires `credentials` (the service account key file JSON, as a string) and `scopes` (a non-empty array). Tokens are cached per service account and scope set until shortly before they expire.\n\nCredential fields accept `{{secret:...}}` references and should use them — a tool is readable by anyone who can `GET /tools`, and the stored reference is what is echoed back, never the resolved value.\n\nA credential slot takes a reference, never a literal: a literal `secret_access_key`, `session_token` or `credentials` under `auth`, a literal credential-named `headers` value (`Authorization`, `Cookie`, or a name containing `api-key`/`token`/`secret`/`password`), or a `url` carrying a password or a literal credential-named query parameter (those names, plus `key` and `sig`/`signature`) is refused with `400 LITERAL_CREDENTIAL`, `meta.paths` naming each one. A stored literal reads back as `{\"no_echo\": true}` (a `url` holding one is masked whole), an object rather than a string so a read-edit-write round trip fails the schema check instead of writing the placeholder in as the credential. A value carrying a `{{secret:...}}` reference is the wiring, not the credential, and stays readable.\n\n`headers` values additionally accept `{{context:<key>}}` references, resolved per call from the caller's `tool_context`, so a per-user credential can be placed in the real header the target expects (`Authorization: Bearer {{context:ocaToken}}`) instead of only in an `X-Naturali-Context-<key>` header. Valid **only** inside `headers` — a context value is caller-supplied, so it may not steer the `url` — and a key missing from the `tool_context` at call time fails the tool call with `MISSING_TOOL_CONTEXT_KEY` rather than sending an empty credential. See the Tool Context reference.\n",
|
|
23059
|
+
"description": "Execution config for http tools. An `http` tool without a non-empty `url` is `400 VALIDATION_FAILED`, on create and on an update that would leave it without one. Supported fields: `url` (required), `method` (default `POST`), `headers`, `body_mode` and `response_mode`. The `url` may contain `{paramName}` placeholders (e.g. `/users/{userId}`) that are replaced at call time with the corresponding tool argument value (URL-encoded). Arguments consumed as path parameters are excluded from the query string and request body. `body_mode` is `json` (default) or `multipart`. In `multipart` mode the merged tool arguments are sent as a `multipart/form-data` body: scalar fields become plain form fields and a field shaped like `{ content_type, filename, data_base64 }` is decoded from base64 and attached as a file part (the hardcoded `Content-Type: application/json` is dropped so `fetch` sets the multipart boundary itself). `response_mode` is `json` (default: the body parsed as JSON, else returned as text) or `base64`, which returns a 2xx body as `{ content_type, filename, data_base64 }` — the same file shape `multipart` accepts, so a pipeline step can relay a downloaded file. `filename` comes from `Content-Disposition` and is omitted when the target names none; a body over `TOOL_RESPONSE_MAX_BYTES` is `502 TOOL_RESPONSE_TOO_LARGE`.\n\n`auth` adds a computed request credential, for targets whose `Authorization` value cannot be expressed as a static header. Supported `auth.type` values:\n\n- `aws_sigv4` — signs the request with AWS Signature Version 4. Requires `region`, `service`, `access_key_id` and `secret_access_key`; `session_token` is optional (temporary credentials). Incompatible with `body_mode: multipart`, whose body bytes are not known at signing time.\n- `gcp_service_account` — mints a Google OAuth 2.0 access token from a signed service account assertion and sends it as a bearer token. Requires `credentials` (the service account key file JSON, as a string) and `scopes` (a non-empty array). Tokens are cached per service account and scope set until shortly before they expire.\n\nCredential fields accept `{{secret:...}}` references and should use them — a tool is readable by anyone who can `GET /tools`, and the stored reference is what is echoed back, never the resolved value.\n\nA credential slot takes a reference, never a literal: a literal `secret_access_key`, `session_token` or `credentials` under `auth`, a literal credential-named `headers` value (`Authorization`, `Cookie`, or a name containing `api-key`/`token`/`secret`/`password`), or a `url` carrying a password or a literal credential-named query parameter (those names, plus `key` and `sig`/`signature`) is refused with `400 LITERAL_CREDENTIAL`, `meta.paths` naming each one. A stored literal reads back as `{\"no_echo\": true}` (a `url` holding one is masked whole), an object rather than a string so a read-edit-write round trip fails the schema check instead of writing the placeholder in as the credential. A value carrying a `{{secret:...}}` reference is the wiring, not the credential, and stays readable.\n\n`headers` values additionally accept `{{context:<key>}}` references, resolved per call from the caller's `tool_context`, so a per-user credential can be placed in the real header the target expects (`Authorization: Bearer {{context:ocaToken}}`) instead of only in an `X-Naturali-Context-<key>` header. Valid **only** inside `headers` — a context value is caller-supplied, so it may not steer the `url` — and a key missing from the `tool_context` at call time fails the tool call with `MISSING_TOOL_CONTEXT_KEY` rather than sending an empty credential. See the Tool Context reference.\n",
|
|
23061
23060
|
"required": false,
|
|
23062
23061
|
"type": "object",
|
|
23063
23062
|
"in": "body"
|
|
@@ -23537,7 +23536,7 @@ const routes = {
|
|
|
23537
23536
|
"update-trigger": {
|
|
23538
23537
|
serviceClass: "Triggers",
|
|
23539
23538
|
operationId: "updateTrigger",
|
|
23540
|
-
description: "Updates an existing trigger's configuration. The type is immutable. Changing `target_type` or `target_id` re-checks the
|
|
23539
|
+
description: "Updates an existing trigger's configuration. The type is immutable. Changing `target_type` or `target_id` re-checks that the caller may start the resulting target, because a firing runs with the trigger creator's authority rather than the updater's. A caller who could not start the new target is answered `403` and the trigger keeps the target it had.",
|
|
23541
23540
|
moduleDocsUrl: "https://naturali.ai/docs/modules/triggers",
|
|
23542
23541
|
httpMethod: "patch",
|
|
23543
23542
|
pathParams: ["project_id", "trigger_id"],
|
|
@@ -24685,7 +24684,7 @@ const routes = {
|
|
|
24685
24684
|
},
|
|
24686
24685
|
{
|
|
24687
24686
|
"name": "version_label",
|
|
24688
|
-
"description": "Optional tag for the version this write
|
|
24687
|
+
"description": "Optional tag for the version this write creates, e.g. `rewired`. Ignored when the write changes no definition field, since no version is archived.",
|
|
24689
24688
|
"required": false,
|
|
24690
24689
|
"type": "string",
|
|
24691
24690
|
"in": "body"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naturali/cli",
|
|
3
|
-
"version": "0.209.
|
|
3
|
+
"version": "0.209.4",
|
|
4
4
|
"description": "Command-line interface for the naturali.ai API, generated from its OpenAPI specs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"naturali",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"yaml": "^2.9.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@naturali/sdk": "0.209.
|
|
34
|
+
"@naturali/sdk": "0.209.4",
|
|
35
35
|
"@ttoss/openapi-codegen": "^0.10.0",
|
|
36
36
|
"@types/node": "^26.5.1",
|
|
37
37
|
"tsdown": "^0.23.0",
|