@naturali/cli 0.79.0 → 0.80.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.mjs +402 -1
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -14,7 +14,7 @@ var __exportAll = (all, no_symbols) => {
14
14
  };
15
15
  //#endregion
16
16
  //#region package.json
17
- var version = "0.79.0";
17
+ var version = "0.80.1";
18
18
  //#endregion
19
19
  //#region ../sdk/src/generated/core/bodySerializer.gen.ts
20
20
  const serializeFormDataPair = (data, key, value) => {
@@ -2479,6 +2479,126 @@ var Files = class {
2479
2479
  });
2480
2480
  }
2481
2481
  };
2482
+ var Formations = class {
2483
+ /**
2484
+ * Validate a formation template
2485
+ *
2486
+ * Validates a formation template without creating any resources. Returns a list of errors and warnings. Accepts the template as a JSON object or as a YAML/JSON string.
2487
+ *
2488
+ */
2489
+ static validateFormation(options) {
2490
+ return (options.client ?? client).post({
2491
+ url: "/v1/projects/{project_id}/formations/validate",
2492
+ ...options,
2493
+ headers: {
2494
+ "Content-Type": "application/json",
2495
+ ...options.headers
2496
+ }
2497
+ });
2498
+ }
2499
+ /**
2500
+ * Plan a formation deployment
2501
+ *
2502
+ * Computes a diff between the desired template and the current stack state without making any changes. Returns the list of planned actions.
2503
+ *
2504
+ */
2505
+ static planFormation(options) {
2506
+ return (options.client ?? client).post({
2507
+ url: "/v1/projects/{project_id}/formations/plan",
2508
+ ...options,
2509
+ headers: {
2510
+ "Content-Type": "application/json",
2511
+ ...options.headers
2512
+ }
2513
+ });
2514
+ }
2515
+ /**
2516
+ * List formations
2517
+ *
2518
+ * Returns all formation stacks for a project
2519
+ */
2520
+ static listFormations(options) {
2521
+ return (options.client ?? client).get({
2522
+ url: "/v1/projects/{project_id}/formations",
2523
+ ...options
2524
+ });
2525
+ }
2526
+ /**
2527
+ * Create a new formation
2528
+ *
2529
+ * Validates the template, creates the formation record, then provisions all declared resources in dependency order.
2530
+ *
2531
+ * A **template-shape** error is refused with `400`. A **deploy** failure is not: the operation ran, so the formation is returned with `201` and `status: "failed"`, and `error` explains why (the resources created before the failure are rolled back). Read `status` — a `2xx` here means the deploy was attempted, not that it worked. The `builtin` CLI exits non-zero on that body so `create-formation && …` does not lie.
2532
+ *
2533
+ */
2534
+ static createFormation(options) {
2535
+ return (options.client ?? client).post({
2536
+ url: "/v1/projects/{project_id}/formations",
2537
+ ...options,
2538
+ headers: {
2539
+ "Content-Type": "application/json",
2540
+ ...options.headers
2541
+ }
2542
+ });
2543
+ }
2544
+ /**
2545
+ * Delete an formation
2546
+ *
2547
+ * Deletes the formation stack and all its managed resources in reverse dependency order.
2548
+ *
2549
+ * A resource the platform refuses to delete on its own — most often an agent that has generation or trace history — fails the teardown with `409 FORMATION_DELETE_FAILED`, naming every blocking resource in `error.meta.failures`. Resolve the blockers (for an agent, `DELETE /v1/projects/{project_id}/agents/{agent_id}?force=true` also removes its generations and traces, and `deletion_policy: retain` exempts it from teardown entirely) and delete the formation again.
2550
+ *
2551
+ * A refusal the platform can foresee is found by a pre-flight, before the first delete: nothing is removed, and the formation stays `active` and intact for the retry. An unforeseeable error surfaces mid-teardown instead, where resources deleted before the blocker stay deleted and the formation is left in `delete_failed`. The error message states which happened.
2552
+ *
2553
+ */
2554
+ static deleteFormation(options) {
2555
+ return (options.client ?? client).delete({
2556
+ url: "/v1/projects/{project_id}/formations/{formation_id}",
2557
+ ...options
2558
+ });
2559
+ }
2560
+ /**
2561
+ * Get a specific formation
2562
+ *
2563
+ * Returns the formation stack including its current resources.
2564
+ */
2565
+ static getFormation(options) {
2566
+ return (options.client ?? client).get({
2567
+ url: "/v1/projects/{project_id}/formations/{formation_id}",
2568
+ ...options
2569
+ });
2570
+ }
2571
+ /**
2572
+ * Update an formation
2573
+ *
2574
+ * Applies a new template to the formation. Resources are created, updated, or deleted to reconcile the current state with the desired state.
2575
+ *
2576
+ * A **template-shape** error is refused with `400`. A **deploy** failure is not: the operation ran, so the formation is returned with `200` and `status: "failed"`, and `error` explains why. Read `status` — a `2xx` here means the deploy was attempted, not that it worked. The `builtin` CLI exits non-zero on that body so `update-formation && …` does not lie.
2577
+ *
2578
+ */
2579
+ static updateFormation(options) {
2580
+ return (options.client ?? client).put({
2581
+ url: "/v1/projects/{project_id}/formations/{formation_id}",
2582
+ ...options,
2583
+ headers: {
2584
+ "Content-Type": "application/json",
2585
+ ...options.headers
2586
+ }
2587
+ });
2588
+ }
2589
+ /**
2590
+ * List formation operation events
2591
+ *
2592
+ * Returns all operations (create, update, delete) with their event logs for the formation, ordered chronologically.
2593
+ *
2594
+ */
2595
+ static listFormationEvents(options) {
2596
+ return (options.client ?? client).get({
2597
+ url: "/v1/projects/{project_id}/formations/{formation_id}/events",
2598
+ ...options
2599
+ });
2600
+ }
2601
+ };
2482
2602
  var Generations = class {
2483
2603
  /**
2484
2604
  * List generations
@@ -4301,6 +4421,7 @@ var NaturaliClient = class {
4301
4421
  evaluations;
4302
4422
  exceptions;
4303
4423
  files;
4424
+ formations;
4304
4425
  generations;
4305
4426
  guardrails;
4306
4427
  ingestionRules;
@@ -4348,6 +4469,7 @@ var NaturaliClient = class {
4348
4469
  this.evaluations = bindResource(Evaluations, this.http);
4349
4470
  this.exceptions = bindResource(Exceptions, this.http);
4350
4471
  this.files = bindResource(Files, this.http);
4472
+ this.formations = bindResource(Formations, this.http);
4351
4473
  this.generations = bindResource(Generations, this.http);
4352
4474
  this.guardrails = bindResource(Guardrails, this.http);
4353
4475
  this.ingestionRules = bindResource(IngestionRules, this.http);
@@ -4390,6 +4512,7 @@ var src_exports = /* @__PURE__ */ __exportAll({
4390
4512
  Evaluations: () => Evaluations,
4391
4513
  Exceptions: () => Exceptions,
4392
4514
  Files: () => Files,
4515
+ Formations: () => Formations,
4393
4516
  Generations: () => Generations,
4394
4517
  Guardrails: () => Guardrails,
4395
4518
  IngestionRules: () => IngestionRules,
@@ -10109,6 +10232,284 @@ const routes = {
10109
10232
  "in": "path"
10110
10233
  }]
10111
10234
  },
10235
+ "validate-formation": {
10236
+ serviceClass: "Formations",
10237
+ operationId: "validateFormation",
10238
+ description: "Validates a formation template without creating any resources. Returns a list of errors and warnings. Accepts the template as a JSON object or as a YAML/JSON string.",
10239
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/formations",
10240
+ httpMethod: "post",
10241
+ pathParams: ["project_id"],
10242
+ queryParams: [],
10243
+ flags: [
10244
+ {
10245
+ "name": "project_id",
10246
+ "description": "Project public ID (proj_ prefix).",
10247
+ "required": true,
10248
+ "type": "string",
10249
+ "in": "path"
10250
+ },
10251
+ {
10252
+ "name": "template",
10253
+ "description": "A formation template supplied as either a JSON object or a YAML/JSON string. When a string is provided the server parses it with a YAML parser (JSON is valid YAML) before processing.\n",
10254
+ "required": false,
10255
+ "type": "string",
10256
+ "in": "body"
10257
+ },
10258
+ {
10259
+ "name": "parameters",
10260
+ "description": "Runtime parameter values that override or supply template parameter defaults. Keys must match parameter names declared in `template.parameters`. When provided, the validation result also reports required parameters that are still missing after applying these values.\n",
10261
+ "required": false,
10262
+ "type": "object",
10263
+ "in": "body"
10264
+ }
10265
+ ]
10266
+ },
10267
+ "plan-formation": {
10268
+ serviceClass: "Formations",
10269
+ operationId: "planFormation",
10270
+ description: "Computes a diff between the desired template and the current stack state without making any changes. Returns the list of planned actions.",
10271
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/formations",
10272
+ httpMethod: "post",
10273
+ pathParams: ["project_id"],
10274
+ queryParams: [],
10275
+ flags: [
10276
+ {
10277
+ "name": "project_id",
10278
+ "description": "Project public ID (proj_ prefix).",
10279
+ "required": true,
10280
+ "type": "string",
10281
+ "in": "path"
10282
+ },
10283
+ {
10284
+ "name": "formation_id",
10285
+ "description": "Existing formation ID to compare against. Omit for new formation planning.",
10286
+ "required": false,
10287
+ "type": "string",
10288
+ "in": "body"
10289
+ },
10290
+ {
10291
+ "name": "template",
10292
+ "description": "A formation template supplied as either a JSON object or a YAML/JSON string. When a string is provided the server parses it with a YAML parser (JSON is valid YAML) before processing.\n",
10293
+ "required": true,
10294
+ "type": "string",
10295
+ "in": "body"
10296
+ },
10297
+ {
10298
+ "name": "parameters",
10299
+ "description": "Runtime parameter values that override or supply template parameter defaults. Keys must match parameter names declared in `template.parameters`. A parameter declared with `use_previous_value: true` may be omitted to reuse its stored value.\n",
10300
+ "required": false,
10301
+ "type": "object",
10302
+ "in": "body"
10303
+ }
10304
+ ]
10305
+ },
10306
+ "list-formations": {
10307
+ serviceClass: "Formations",
10308
+ operationId: "listFormations",
10309
+ description: "Returns all formation stacks for a project",
10310
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/formations",
10311
+ httpMethod: "get",
10312
+ pathParams: ["project_id"],
10313
+ queryParams: ["limit", "offset"],
10314
+ flags: [
10315
+ {
10316
+ "name": "project_id",
10317
+ "description": "Project public ID (proj_ prefix).",
10318
+ "required": true,
10319
+ "type": "string",
10320
+ "in": "path"
10321
+ },
10322
+ {
10323
+ "name": "limit",
10324
+ "description": "Maximum number of results to return",
10325
+ "required": false,
10326
+ "type": "integer",
10327
+ "in": "query"
10328
+ },
10329
+ {
10330
+ "name": "offset",
10331
+ "description": "Number of results to skip",
10332
+ "required": false,
10333
+ "type": "integer",
10334
+ "in": "query"
10335
+ }
10336
+ ]
10337
+ },
10338
+ "create-formation": {
10339
+ serviceClass: "Formations",
10340
+ operationId: "createFormation",
10341
+ description: "Validates the template, creates the formation record, then provisions all declared resources in dependency order. A **template-shape** error is refused with `400`. A **deploy** failure is not: the operation ran, so the formation is returned with `201` and `status: \"failed\"`, and `error` explains why (the resources created before the failure are rolled back). Read `status` — a `2xx` here means the deploy was attempted, not that it worked. The `builtin` CLI exits non-zero on that body so `create-formation && …` does not lie.",
10342
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/formations",
10343
+ httpMethod: "post",
10344
+ pathParams: ["project_id"],
10345
+ queryParams: [],
10346
+ flags: [
10347
+ {
10348
+ "name": "project_id",
10349
+ "description": "Project public ID (proj_ prefix).",
10350
+ "required": true,
10351
+ "type": "string",
10352
+ "in": "path"
10353
+ },
10354
+ {
10355
+ "name": "name",
10356
+ "description": "Human-readable name for the formation stack",
10357
+ "required": true,
10358
+ "type": "string",
10359
+ "in": "body"
10360
+ },
10361
+ {
10362
+ "name": "template",
10363
+ "description": "A formation template supplied as either a JSON object or a YAML/JSON string. When a string is provided the server parses it with a YAML parser (JSON is valid YAML) before processing.\n",
10364
+ "required": true,
10365
+ "type": "string",
10366
+ "in": "body"
10367
+ },
10368
+ {
10369
+ "name": "parameters",
10370
+ "description": "Runtime parameter values that override or supply template parameter defaults. Keys must match parameter names declared in `template.parameters`. Required parameters (those without a default) must be provided here.\n",
10371
+ "required": false,
10372
+ "type": "object",
10373
+ "in": "body"
10374
+ },
10375
+ {
10376
+ "name": "metadata",
10377
+ "description": "Static annotations stored on the formation record. This field is NOT a substitution site: `sub`/`param`/`ref` expressions are rejected with 400 (`FORMATION_INVALID_METADATA`). For deploy-time substitution use the template's top-level `metadata` block, which is resolved into `resolved_metadata`.\n",
10378
+ "required": false,
10379
+ "type": "object",
10380
+ "in": "body"
10381
+ }
10382
+ ]
10383
+ },
10384
+ "get-formation": {
10385
+ serviceClass: "Formations",
10386
+ operationId: "getFormation",
10387
+ description: "Returns the formation stack including its current resources.",
10388
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/formations",
10389
+ httpMethod: "get",
10390
+ pathParams: ["project_id", "formation_id"],
10391
+ queryParams: [],
10392
+ flags: [{
10393
+ "name": "project_id",
10394
+ "description": "Project public ID (proj_ prefix).",
10395
+ "required": true,
10396
+ "type": "string",
10397
+ "in": "path"
10398
+ }, {
10399
+ "name": "formation_id",
10400
+ "description": "",
10401
+ "required": true,
10402
+ "type": "string",
10403
+ "in": "path"
10404
+ }]
10405
+ },
10406
+ "update-formation": {
10407
+ serviceClass: "Formations",
10408
+ operationId: "updateFormation",
10409
+ description: "Applies a new template to the formation. Resources are created, updated, or deleted to reconcile the current state with the desired state. A **template-shape** error is refused with `400`. A **deploy** failure is not: the operation ran, so the formation is returned with `200` and `status: \"failed\"`, and `error` explains why. Read `status` — a `2xx` here means the deploy was attempted, not that it worked. The `builtin` CLI exits non-zero on that body so `update-formation && …` does not lie.",
10410
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/formations",
10411
+ httpMethod: "put",
10412
+ pathParams: ["project_id", "formation_id"],
10413
+ queryParams: [],
10414
+ flags: [
10415
+ {
10416
+ "name": "project_id",
10417
+ "description": "Project public ID (proj_ prefix).",
10418
+ "required": true,
10419
+ "type": "string",
10420
+ "in": "path"
10421
+ },
10422
+ {
10423
+ "name": "formation_id",
10424
+ "description": "",
10425
+ "required": true,
10426
+ "type": "string",
10427
+ "in": "path"
10428
+ },
10429
+ {
10430
+ "name": "template",
10431
+ "description": "A formation template supplied as either a JSON object or a YAML/JSON string. When a string is provided the server parses it with a YAML parser (JSON is valid YAML) before processing.\n",
10432
+ "required": false,
10433
+ "type": "string",
10434
+ "in": "body"
10435
+ },
10436
+ {
10437
+ "name": "parameters",
10438
+ "description": "Runtime parameter values that override or supply template parameter defaults. Keys must match parameter names declared in `template.parameters`. Required parameters (those without a default) must be provided here, unless the parameter is declared with `use_previous_value: true`, in which case omitting it reuses the previously stored value.\n",
10439
+ "required": false,
10440
+ "type": "object",
10441
+ "in": "body"
10442
+ },
10443
+ {
10444
+ "name": "metadata",
10445
+ "description": "Static annotations stored on the formation record. This field is NOT a substitution site: `sub`/`param`/`ref` expressions are rejected with 400 (`FORMATION_INVALID_METADATA`). For deploy-time substitution use the template's top-level `metadata` block, which is resolved into `resolved_metadata`.\n",
10446
+ "required": false,
10447
+ "type": "object",
10448
+ "in": "body"
10449
+ }
10450
+ ]
10451
+ },
10452
+ "delete-formation": {
10453
+ serviceClass: "Formations",
10454
+ operationId: "deleteFormation",
10455
+ description: "Deletes the formation stack and all its managed resources in reverse dependency order. A resource the platform refuses to delete on its own — most often an agent that has generation or trace history — fails the teardown with `409 FORMATION_DELETE_FAILED`, naming every blocking resource in `error.meta.failures`. Resolve the blockers (for an agent, `DELETE /v1/projects/{project_id}/agents/{agent_id}?force=true` also removes its generations and traces, and `deletion_policy: retain` exempts it from teardown entirely) and delete the formation again. A refusal the platform can foresee is found by a pre-flight, before the first delete: nothing is removed, and the formation stays `active` and intact for the retry. An unforeseeable error surfaces mid-teardown instead, where resources deleted before the blocker stay deleted and the formation is left in `delete_failed`. The error message states which happened.",
10456
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/formations",
10457
+ httpMethod: "delete",
10458
+ pathParams: ["project_id", "formation_id"],
10459
+ queryParams: [],
10460
+ flags: [{
10461
+ "name": "project_id",
10462
+ "description": "Project public ID (proj_ prefix).",
10463
+ "required": true,
10464
+ "type": "string",
10465
+ "in": "path"
10466
+ }, {
10467
+ "name": "formation_id",
10468
+ "description": "",
10469
+ "required": true,
10470
+ "type": "string",
10471
+ "in": "path"
10472
+ }]
10473
+ },
10474
+ "list-formation-events": {
10475
+ serviceClass: "Formations",
10476
+ operationId: "listFormationEvents",
10477
+ description: "Returns all operations (create, update, delete) with their event logs for the formation, ordered chronologically.",
10478
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/formations",
10479
+ httpMethod: "get",
10480
+ pathParams: ["project_id", "formation_id"],
10481
+ queryParams: ["limit", "offset"],
10482
+ flags: [
10483
+ {
10484
+ "name": "project_id",
10485
+ "description": "Project public ID (proj_ prefix).",
10486
+ "required": true,
10487
+ "type": "string",
10488
+ "in": "path"
10489
+ },
10490
+ {
10491
+ "name": "formation_id",
10492
+ "description": "",
10493
+ "required": true,
10494
+ "type": "string",
10495
+ "in": "path"
10496
+ },
10497
+ {
10498
+ "name": "limit",
10499
+ "description": "Maximum number of results to return",
10500
+ "required": false,
10501
+ "type": "integer",
10502
+ "in": "query"
10503
+ },
10504
+ {
10505
+ "name": "offset",
10506
+ "description": "Number of results to skip",
10507
+ "required": false,
10508
+ "type": "integer",
10509
+ "in": "query"
10510
+ }
10511
+ ]
10512
+ },
10112
10513
  "list-generations": {
10113
10514
  serviceClass: "Generations",
10114
10515
  operationId: "listGenerations",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturali/cli",
3
- "version": "0.79.0",
3
+ "version": "0.80.1",
4
4
  "description": "Command-line interface for the naturali.ai API, generated from its OpenAPI specs",
5
5
  "type": "module",
6
6
  "bin": {
@@ -30,7 +30,7 @@
30
30
  "tsx": "^4.23.1",
31
31
  "typescript": "~6.0.3",
32
32
  "vitest": "^4.1.10",
33
- "@naturali/sdk": "0.79.0"
33
+ "@naturali/sdk": "0.80.1"
34
34
  },
35
35
  "scripts": {
36
36
  "generate": "tsx scripts/generate.ts",