@naturali/sdk 0.141.5 → 0.141.7

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.cjs CHANGED
@@ -875,7 +875,8 @@ var Channels = class {
875
875
  /**
876
876
  * Replace a route
877
877
  *
878
- * Full replace, the same validation as create.
878
+ * Full replace, the same validation as create: an omitted field takes its create default. Where that default would widen a value the route sets, omission is `400 replace_omits_fields`, naming the fields in `details.fields`, and nothing is written: a set `surface` (the default is any surface), a non-empty `match` (every message), a non-empty `config` (it carries the Discord allowlist), and `status` on a `disabled` route (the default re-activates it). Send the value to keep it, or `"surface": null`, `"match": {}`, `"config": null`, `"status": "active"` to clear it.
879
+ *
879
880
  */
880
881
  static updateChannelRoute(options) {
881
882
  return (options.client ?? client).patch({
@@ -1238,7 +1239,7 @@ var Agents = class {
1238
1239
  /**
1239
1240
  * Run an agent generation
1240
1241
  *
1241
- * Sends messages to the agent, resolves its tools, and runs the AI model loop. Background by default: returns `202 Accepted` with a `generation_id` to poll via `GET /v1/projects/{project_id}/generations/{generation_id}`. Pass `?wait=true` to block and receive the result inline, where client tools pause the generation and return `requires_action`. Streaming (`stream: true`) implies waiting.
1242
+ * Sends messages to the agent, resolves its tools, and runs the AI model loop. Background by default: returns `202 Accepted` with a `generation_id` to poll via `GET /v1/projects/{project_id}/generations/{generation_id}`. Pass `?wait=true` to block and receive the result inline, where client tools pause the generation and return `requires_action`. Streaming (`stream: true`) implies waiting. Pass `idempotency_key` to make a retry safe: a request whose key is already claimed runs nothing and answers `202` with the generation the key names.
1242
1243
  *
1243
1244
  */
1244
1245
  static createAgentGeneration(options) {
package/dist/index.d.cts CHANGED
@@ -1225,6 +1225,12 @@ type CreateAgentGenerationRequest = {
1225
1225
  * Caller-supplied key/value metadata attached to the generation record for per-run audit attribution (e.g. the knowledge-corpus version that produced this action). Round-trips verbatim when the generation is fetched via the generations API. The bag is caller-owned and no key is reserved: server-owned state (usage attribution, the served agent version, the model route's record, the extraction summary) lives in its own top-level generation fields and cannot be written from here. Use the request's own `action_id` field to set the usage-attribution label.
1226
1226
  */
1227
1227
  metadata?: NullableMetadataBag;
1228
+ /**
1229
+ * Deduplication key, unique within the project, that makes a retry of an at-least-once delivery or an ambiguous failure safe. The first request under a key runs the generation; any later request carrying it runs nothing and answers `202` with the generation the key names, whatever state it has reached — including a retry that arrives while the original is still running. The key is claimed by the generation record for as long as the record exists.
1230
+ *
1231
+ * Every other body field except `stream` is the request the key names: reusing a key with any of them changed, or on another agent of the project, is `409 IDEMPOTENCY_KEY_REUSED`. `stream` and `wait` say how the caller receives the generation, not what it is, so a retry may flip them.
1232
+ */
1233
+ idempotency_key?: string;
1228
1234
  /**
1229
1235
  * Per-generation knowledge retrieval override. Array filters (memory_store_ids, document_ids, document_paths) are unioned with the agent's stored knowledge_config; `tags` pairs are merged with the override winning per key; scalar fields (min_score, rrf_k, recency_half_life_days, limit) use the per-generation value when present.
1230
1236
  */
@@ -2210,7 +2216,7 @@ type ChannelRouteWrite = {
2210
2216
  */
2211
2217
  config?: {
2212
2218
  [key: string]: unknown;
2213
- };
2219
+ } | null;
2214
2220
  status?: 'active' | 'disabled';
2215
2221
  };
2216
2222
  type ChannelRouteList = {
@@ -3836,7 +3842,7 @@ type TriggerResourceProperties = {
3836
3842
  [key: string]: unknown;
3837
3843
  } | null;
3838
3844
  /**
3839
- * Caller context every firing forwards to the run it starts, so an agent whose tools authorize through `{{context:<key>}}` can be scheduled. Write-only. A value may be a `{{secret:...}}` reference, which is what a template should carry — the credential stays in the secret store and only its name is checked in
3845
+ * Caller context every firing forwards to the run it starts, so an agent whose tools authorize through `{{context:<key>}}` can be scheduled. Write-only. A value may be a `{{secret:sec_...}}` reference, which is what a template should carry — the credential stays in the secret store and only its id is checked in (a `sub` such as `{{secret:${MySecret}}}` for a template secret); a secret's name does not resolve and is refused
3840
3846
  */
3841
3847
  tool_context?: {
3842
3848
  [key: string]: string;
@@ -4586,6 +4592,10 @@ type Generation = {
4586
4592
  */
4587
4593
  estimated_tokens?: number;
4588
4594
  } | null;
4595
+ /**
4596
+ * The deduplication key the generation was started under, unique within the project and claimed for as long as the generation record exists. Null for a generation started without one.
4597
+ */
4598
+ idempotency_key?: string | null;
4589
4599
  /**
4590
4600
  * What the turn cost: token counts and `cost_usd` for every event metered against this generation. Present on the single-generation read; omitted from the listing, where it would be a query per row.
4591
4601
  *
@@ -5557,6 +5567,10 @@ type OrchestrationNode = {
5557
5567
  * For loop nodes — number of items to process in parallel.
5558
5568
  */
5559
5569
  parallelism?: number;
5570
+ /**
5571
+ * For loop nodes — what a failed item does. `fail` (the default) fails the node on the first item whose child run settles `failed`, `cancelled` or `expired`. `collect` keeps going: that item's entry in `results` becomes `{ "error": { "code", "message" }, "orchestration_run_id" }`, in its original position. Either way the artifact carries `failed_count`. A child run that could not be started (for example past the nesting depth bound) fails the node in both modes.
5572
+ */
5573
+ on_item_error?: 'fail' | 'collect';
5560
5574
  /**
5561
5575
  * For loop and sub_orchestration nodes — allowlist of the run's `tool_context` keys the child run inherits. When `null` (the default), the child inherits the parent's whole bag. When set, only the listed keys are handed down, so a run holding a broad credential can delegate one step to a shared sub-graph without passing on what that sub-graph does not need; `[]` hands down nothing. Matching is case-insensitive, since an entry names a key that becomes an HTTP header name; an entry outside that grammar is rejected at write time with `INVALID_TOOL_CONTEXT_KEY`. The server-derived identity keys (`session_id`, `actor_id`, `actor_external_id`) are unaffected — they are re-derived per generation in the child regardless of this list. Ignored for other node types.
5562
5576
  */
@@ -7352,7 +7366,7 @@ type CreateTriggerRequest = {
7352
7366
  *
7353
7367
  * **Write-only.** It is accepted here and never returned on a read, so the record cannot be used to recover a value.
7354
7368
  *
7355
- * A value may be a `{{secret:...}}` reference, which keeps the credential in the [secret](/docs/modules/secrets) store and leaves only its name on the trigger; it is resolved at fire time, so rotating the secret changes the next firing without touching the trigger. A reference naming a secret that does not exist in this project is refused here rather than at fire time.
7369
+ * A value may be a `{{secret:sec_...}}` reference, which keeps the credential in the [secret](/docs/modules/secrets) store and leaves only its id on the trigger; it is resolved at fire time, so rotating the secret changes the next firing without touching the trigger. A reference is refused here rather than at fire time when it is not in that id form (a secret's name does not resolve) or names a secret that does not exist in this project.
7356
7370
  *
7357
7371
  */
7358
7372
  tool_context?: {
@@ -9288,7 +9302,7 @@ type CreateAgentGenerationData = {
9288
9302
  };
9289
9303
  type CreateAgentGenerationErrors = {
9290
9304
  /**
9291
- * Bad Request
9305
+ * Bad Request (e.g. an `idempotency_key` that is not a non-empty string of at most 255 characters)
9292
9306
  */
9293
9307
  400: ErrorResponse;
9294
9308
  /**
@@ -9303,6 +9317,10 @@ type CreateAgentGenerationErrors = {
9303
9317
  * Agent or AI provider not found
9304
9318
  */
9305
9319
  404: ErrorResponse;
9320
+ /**
9321
+ * `IDEMPOTENCY_KEY_REUSED` — the key is already claimed by a generation started from a different request. Nothing runs.
9322
+ */
9323
+ 409: ErrorResponse;
9306
9324
  /**
9307
9325
  * Upstream AI provider error (AI_PROVIDER_ERROR); model output that does not satisfy the agent's `output_schema` (OUTPUT_SCHEMA_VALIDATION_FAILED — the violated field is named in the message); or a model that wrote a tool invocation out as plain assistant text instead of calling the tool, so the tool never ran (TEXT_ENCODED_TOOL_CALL — `meta.tool_name` names the tool). The error `meta` includes the `generation_id` and `trace_id` of the failed generation for post-mortem debugging via GET /v1/projects/{project_id}/generations/{generation_id}. Streaming requests report the provider error in a terminal SSE frame instead, since their status line is already on the wire.
9308
9326
  *
@@ -9316,7 +9334,7 @@ type CreateAgentGenerationResponses = {
9316
9334
  */
9317
9335
  200: AgentGenerationResponse;
9318
9336
  /**
9319
- * Generation accepted and running in the background (default, when `wait` is omitted or `false`). Poll `GET /v1/projects/{project_id}/generations/{generation_id}` for the result.
9337
+ * Generation accepted and running in the background (default, when `wait` is omitted or `false`), or — in every mode, streamed included — a duplicate request: the generation the `idempotency_key` already names is returned in whatever state it has reached and nothing runs. Poll `GET /v1/projects/{project_id}/generations/{generation_id}` for the result.
9320
9338
  */
9321
9339
  202: AcceptedGenerationResponse;
9322
9340
  };
@@ -22472,7 +22490,8 @@ export declare class Channels {
22472
22490
  /**
22473
22491
  * Replace a route
22474
22492
  *
22475
- * Full replace, the same validation as create.
22493
+ * Full replace, the same validation as create: an omitted field takes its create default. Where that default would widen a value the route sets, omission is `400 replace_omits_fields`, naming the fields in `details.fields`, and nothing is written: a set `surface` (the default is any surface), a non-empty `match` (every message), a non-empty `config` (it carries the Discord allowlist), and `status` on a `disabled` route (the default re-activates it). Send the value to keep it, or `"surface": null`, `"match": {}`, `"config": null`, `"status": "active"` to clear it.
22494
+ *
22476
22495
  */
22477
22496
  static updateChannelRoute<ThrowOnError extends boolean = false>(options: Options<UpdateChannelRouteData, ThrowOnError>): RequestResult<UpdateChannelRouteResponses, UpdateChannelRouteErrors, ThrowOnError>;
22478
22497
  /**
@@ -22670,7 +22689,7 @@ export declare class Agents {
22670
22689
  /**
22671
22690
  * Run an agent generation
22672
22691
  *
22673
- * Sends messages to the agent, resolves its tools, and runs the AI model loop. Background by default: returns `202 Accepted` with a `generation_id` to poll via `GET /v1/projects/{project_id}/generations/{generation_id}`. Pass `?wait=true` to block and receive the result inline, where client tools pause the generation and return `requires_action`. Streaming (`stream: true`) implies waiting.
22692
+ * Sends messages to the agent, resolves its tools, and runs the AI model loop. Background by default: returns `202 Accepted` with a `generation_id` to poll via `GET /v1/projects/{project_id}/generations/{generation_id}`. Pass `?wait=true` to block and receive the result inline, where client tools pause the generation and return `requires_action`. Streaming (`stream: true`) implies waiting. Pass `idempotency_key` to make a retry safe: a request whose key is already claimed runs nothing and answers `202` with the generation the key names.
22674
22693
  *
22675
22694
  */
22676
22695
  static createAgentGeneration<ThrowOnError extends boolean = false>(options: Options<CreateAgentGenerationData, ThrowOnError>): RequestResult<CreateAgentGenerationResponses, CreateAgentGenerationErrors, ThrowOnError>;
package/dist/index.d.mts CHANGED
@@ -1225,6 +1225,12 @@ type CreateAgentGenerationRequest = {
1225
1225
  * Caller-supplied key/value metadata attached to the generation record for per-run audit attribution (e.g. the knowledge-corpus version that produced this action). Round-trips verbatim when the generation is fetched via the generations API. The bag is caller-owned and no key is reserved: server-owned state (usage attribution, the served agent version, the model route's record, the extraction summary) lives in its own top-level generation fields and cannot be written from here. Use the request's own `action_id` field to set the usage-attribution label.
1226
1226
  */
1227
1227
  metadata?: NullableMetadataBag;
1228
+ /**
1229
+ * Deduplication key, unique within the project, that makes a retry of an at-least-once delivery or an ambiguous failure safe. The first request under a key runs the generation; any later request carrying it runs nothing and answers `202` with the generation the key names, whatever state it has reached — including a retry that arrives while the original is still running. The key is claimed by the generation record for as long as the record exists.
1230
+ *
1231
+ * Every other body field except `stream` is the request the key names: reusing a key with any of them changed, or on another agent of the project, is `409 IDEMPOTENCY_KEY_REUSED`. `stream` and `wait` say how the caller receives the generation, not what it is, so a retry may flip them.
1232
+ */
1233
+ idempotency_key?: string;
1228
1234
  /**
1229
1235
  * Per-generation knowledge retrieval override. Array filters (memory_store_ids, document_ids, document_paths) are unioned with the agent's stored knowledge_config; `tags` pairs are merged with the override winning per key; scalar fields (min_score, rrf_k, recency_half_life_days, limit) use the per-generation value when present.
1230
1236
  */
@@ -2210,7 +2216,7 @@ type ChannelRouteWrite = {
2210
2216
  */
2211
2217
  config?: {
2212
2218
  [key: string]: unknown;
2213
- };
2219
+ } | null;
2214
2220
  status?: 'active' | 'disabled';
2215
2221
  };
2216
2222
  type ChannelRouteList = {
@@ -3836,7 +3842,7 @@ type TriggerResourceProperties = {
3836
3842
  [key: string]: unknown;
3837
3843
  } | null;
3838
3844
  /**
3839
- * Caller context every firing forwards to the run it starts, so an agent whose tools authorize through `{{context:<key>}}` can be scheduled. Write-only. A value may be a `{{secret:...}}` reference, which is what a template should carry — the credential stays in the secret store and only its name is checked in
3845
+ * Caller context every firing forwards to the run it starts, so an agent whose tools authorize through `{{context:<key>}}` can be scheduled. Write-only. A value may be a `{{secret:sec_...}}` reference, which is what a template should carry — the credential stays in the secret store and only its id is checked in (a `sub` such as `{{secret:${MySecret}}}` for a template secret); a secret's name does not resolve and is refused
3840
3846
  */
3841
3847
  tool_context?: {
3842
3848
  [key: string]: string;
@@ -4586,6 +4592,10 @@ type Generation = {
4586
4592
  */
4587
4593
  estimated_tokens?: number;
4588
4594
  } | null;
4595
+ /**
4596
+ * The deduplication key the generation was started under, unique within the project and claimed for as long as the generation record exists. Null for a generation started without one.
4597
+ */
4598
+ idempotency_key?: string | null;
4589
4599
  /**
4590
4600
  * What the turn cost: token counts and `cost_usd` for every event metered against this generation. Present on the single-generation read; omitted from the listing, where it would be a query per row.
4591
4601
  *
@@ -5557,6 +5567,10 @@ type OrchestrationNode = {
5557
5567
  * For loop nodes — number of items to process in parallel.
5558
5568
  */
5559
5569
  parallelism?: number;
5570
+ /**
5571
+ * For loop nodes — what a failed item does. `fail` (the default) fails the node on the first item whose child run settles `failed`, `cancelled` or `expired`. `collect` keeps going: that item's entry in `results` becomes `{ "error": { "code", "message" }, "orchestration_run_id" }`, in its original position. Either way the artifact carries `failed_count`. A child run that could not be started (for example past the nesting depth bound) fails the node in both modes.
5572
+ */
5573
+ on_item_error?: 'fail' | 'collect';
5560
5574
  /**
5561
5575
  * For loop and sub_orchestration nodes — allowlist of the run's `tool_context` keys the child run inherits. When `null` (the default), the child inherits the parent's whole bag. When set, only the listed keys are handed down, so a run holding a broad credential can delegate one step to a shared sub-graph without passing on what that sub-graph does not need; `[]` hands down nothing. Matching is case-insensitive, since an entry names a key that becomes an HTTP header name; an entry outside that grammar is rejected at write time with `INVALID_TOOL_CONTEXT_KEY`. The server-derived identity keys (`session_id`, `actor_id`, `actor_external_id`) are unaffected — they are re-derived per generation in the child regardless of this list. Ignored for other node types.
5562
5576
  */
@@ -7352,7 +7366,7 @@ type CreateTriggerRequest = {
7352
7366
  *
7353
7367
  * **Write-only.** It is accepted here and never returned on a read, so the record cannot be used to recover a value.
7354
7368
  *
7355
- * A value may be a `{{secret:...}}` reference, which keeps the credential in the [secret](/docs/modules/secrets) store and leaves only its name on the trigger; it is resolved at fire time, so rotating the secret changes the next firing without touching the trigger. A reference naming a secret that does not exist in this project is refused here rather than at fire time.
7369
+ * A value may be a `{{secret:sec_...}}` reference, which keeps the credential in the [secret](/docs/modules/secrets) store and leaves only its id on the trigger; it is resolved at fire time, so rotating the secret changes the next firing without touching the trigger. A reference is refused here rather than at fire time when it is not in that id form (a secret's name does not resolve) or names a secret that does not exist in this project.
7356
7370
  *
7357
7371
  */
7358
7372
  tool_context?: {
@@ -9288,7 +9302,7 @@ type CreateAgentGenerationData = {
9288
9302
  };
9289
9303
  type CreateAgentGenerationErrors = {
9290
9304
  /**
9291
- * Bad Request
9305
+ * Bad Request (e.g. an `idempotency_key` that is not a non-empty string of at most 255 characters)
9292
9306
  */
9293
9307
  400: ErrorResponse;
9294
9308
  /**
@@ -9303,6 +9317,10 @@ type CreateAgentGenerationErrors = {
9303
9317
  * Agent or AI provider not found
9304
9318
  */
9305
9319
  404: ErrorResponse;
9320
+ /**
9321
+ * `IDEMPOTENCY_KEY_REUSED` — the key is already claimed by a generation started from a different request. Nothing runs.
9322
+ */
9323
+ 409: ErrorResponse;
9306
9324
  /**
9307
9325
  * Upstream AI provider error (AI_PROVIDER_ERROR); model output that does not satisfy the agent's `output_schema` (OUTPUT_SCHEMA_VALIDATION_FAILED — the violated field is named in the message); or a model that wrote a tool invocation out as plain assistant text instead of calling the tool, so the tool never ran (TEXT_ENCODED_TOOL_CALL — `meta.tool_name` names the tool). The error `meta` includes the `generation_id` and `trace_id` of the failed generation for post-mortem debugging via GET /v1/projects/{project_id}/generations/{generation_id}. Streaming requests report the provider error in a terminal SSE frame instead, since their status line is already on the wire.
9308
9326
  *
@@ -9316,7 +9334,7 @@ type CreateAgentGenerationResponses = {
9316
9334
  */
9317
9335
  200: AgentGenerationResponse;
9318
9336
  /**
9319
- * Generation accepted and running in the background (default, when `wait` is omitted or `false`). Poll `GET /v1/projects/{project_id}/generations/{generation_id}` for the result.
9337
+ * Generation accepted and running in the background (default, when `wait` is omitted or `false`), or — in every mode, streamed included — a duplicate request: the generation the `idempotency_key` already names is returned in whatever state it has reached and nothing runs. Poll `GET /v1/projects/{project_id}/generations/{generation_id}` for the result.
9320
9338
  */
9321
9339
  202: AcceptedGenerationResponse;
9322
9340
  };
@@ -22472,7 +22490,8 @@ export declare class Channels {
22472
22490
  /**
22473
22491
  * Replace a route
22474
22492
  *
22475
- * Full replace, the same validation as create.
22493
+ * Full replace, the same validation as create: an omitted field takes its create default. Where that default would widen a value the route sets, omission is `400 replace_omits_fields`, naming the fields in `details.fields`, and nothing is written: a set `surface` (the default is any surface), a non-empty `match` (every message), a non-empty `config` (it carries the Discord allowlist), and `status` on a `disabled` route (the default re-activates it). Send the value to keep it, or `"surface": null`, `"match": {}`, `"config": null`, `"status": "active"` to clear it.
22494
+ *
22476
22495
  */
22477
22496
  static updateChannelRoute<ThrowOnError extends boolean = false>(options: Options<UpdateChannelRouteData, ThrowOnError>): RequestResult<UpdateChannelRouteResponses, UpdateChannelRouteErrors, ThrowOnError>;
22478
22497
  /**
@@ -22670,7 +22689,7 @@ export declare class Agents {
22670
22689
  /**
22671
22690
  * Run an agent generation
22672
22691
  *
22673
- * Sends messages to the agent, resolves its tools, and runs the AI model loop. Background by default: returns `202 Accepted` with a `generation_id` to poll via `GET /v1/projects/{project_id}/generations/{generation_id}`. Pass `?wait=true` to block and receive the result inline, where client tools pause the generation and return `requires_action`. Streaming (`stream: true`) implies waiting.
22692
+ * Sends messages to the agent, resolves its tools, and runs the AI model loop. Background by default: returns `202 Accepted` with a `generation_id` to poll via `GET /v1/projects/{project_id}/generations/{generation_id}`. Pass `?wait=true` to block and receive the result inline, where client tools pause the generation and return `requires_action`. Streaming (`stream: true`) implies waiting. Pass `idempotency_key` to make a retry safe: a request whose key is already claimed runs nothing and answers `202` with the generation the key names.
22674
22693
  *
22675
22694
  */
22676
22695
  static createAgentGeneration<ThrowOnError extends boolean = false>(options: Options<CreateAgentGenerationData, ThrowOnError>): RequestResult<CreateAgentGenerationResponses, CreateAgentGenerationErrors, ThrowOnError>;
package/dist/index.mjs CHANGED
@@ -874,7 +874,8 @@ var Channels = class {
874
874
  /**
875
875
  * Replace a route
876
876
  *
877
- * Full replace, the same validation as create.
877
+ * Full replace, the same validation as create: an omitted field takes its create default. Where that default would widen a value the route sets, omission is `400 replace_omits_fields`, naming the fields in `details.fields`, and nothing is written: a set `surface` (the default is any surface), a non-empty `match` (every message), a non-empty `config` (it carries the Discord allowlist), and `status` on a `disabled` route (the default re-activates it). Send the value to keep it, or `"surface": null`, `"match": {}`, `"config": null`, `"status": "active"` to clear it.
878
+ *
878
879
  */
879
880
  static updateChannelRoute(options) {
880
881
  return (options.client ?? client).patch({
@@ -1237,7 +1238,7 @@ var Agents = class {
1237
1238
  /**
1238
1239
  * Run an agent generation
1239
1240
  *
1240
- * Sends messages to the agent, resolves its tools, and runs the AI model loop. Background by default: returns `202 Accepted` with a `generation_id` to poll via `GET /v1/projects/{project_id}/generations/{generation_id}`. Pass `?wait=true` to block and receive the result inline, where client tools pause the generation and return `requires_action`. Streaming (`stream: true`) implies waiting.
1241
+ * Sends messages to the agent, resolves its tools, and runs the AI model loop. Background by default: returns `202 Accepted` with a `generation_id` to poll via `GET /v1/projects/{project_id}/generations/{generation_id}`. Pass `?wait=true` to block and receive the result inline, where client tools pause the generation and return `requires_action`. Streaming (`stream: true`) implies waiting. Pass `idempotency_key` to make a retry safe: a request whose key is already claimed runs nothing and answers `202` with the generation the key names.
1241
1242
  *
1242
1243
  */
1243
1244
  static createAgentGeneration(options) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturali/sdk",
3
- "version": "0.141.5",
3
+ "version": "0.141.7",
4
4
  "description": "TypeScript SDK for the naturali.ai API, generated from its OpenAPI specs",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "devDependencies": {
33
33
  "@hey-api/openapi-ts": "^0.99.0",
34
- "@naturali/api": "0.141.5",
34
+ "@naturali/api": "0.141.7",
35
35
  "@ttoss/openapi-codegen": "^0.3.1",
36
36
  "@types/node": "^26.5.1",
37
37
  "tsdown": "^0.23.0",