@naturali/cli 0.164.1 → 0.166.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.mjs +770 -52
  2. 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.164.1";
20
+ var version = "0.166.0";
21
21
  //#endregion
22
22
  //#region ../sdk/src/generated/core/bodySerializer.gen.ts
23
23
  const serializeFormDataPair = (data, key, value) => {
@@ -1187,6 +1187,34 @@ var Admin = class {
1187
1187
  ...options
1188
1188
  });
1189
1189
  }
1190
+ /**
1191
+ * List listings for review
1192
+ *
1193
+ * Every listing in one state, newest first — `in_review` by default, the queue an operator works through.
1194
+ *
1195
+ */
1196
+ static listAdminListings(options) {
1197
+ return (options?.client ?? client).get({
1198
+ url: "/v1/admin/listings",
1199
+ ...options
1200
+ });
1201
+ }
1202
+ /**
1203
+ * Review a listing
1204
+ *
1205
+ * 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`.
1206
+ *
1207
+ */
1208
+ static setAdminListingState(options) {
1209
+ return (options.client ?? client).put({
1210
+ url: "/v1/admin/listings/{listing_id}/state",
1211
+ ...options,
1212
+ headers: {
1213
+ "Content-Type": "application/json",
1214
+ ...options.headers
1215
+ }
1216
+ });
1217
+ }
1190
1218
  };
1191
1219
  var Agents = class {
1192
1220
  /**
@@ -3348,6 +3376,60 @@ var IngestionRules = class {
3348
3376
  });
3349
3377
  }
3350
3378
  };
3379
+ var Installs = class {
3380
+ /**
3381
+ * List installs
3382
+ *
3383
+ * The listings the project installed, newest first.
3384
+ */
3385
+ static listInstalls(options) {
3386
+ return (options.client ?? client).get({
3387
+ url: "/v1/projects/{project_id}/installs",
3388
+ ...options
3389
+ });
3390
+ }
3391
+ /**
3392
+ * Install a listing
3393
+ *
3394
+ * 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.
3395
+ * After the publisher removed this project's access, installing answers `403 install_blocked`.
3396
+ *
3397
+ */
3398
+ static createInstall(options) {
3399
+ return (options.client ?? client).post({
3400
+ url: "/v1/projects/{project_id}/installs",
3401
+ ...options,
3402
+ headers: {
3403
+ "Content-Type": "application/json",
3404
+ ...options.headers
3405
+ }
3406
+ });
3407
+ }
3408
+ /**
3409
+ * Uninstall a listing
3410
+ *
3411
+ * 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.
3412
+ * A `blocked` install, and the install managed conversion uses, answer `403`.
3413
+ *
3414
+ */
3415
+ static deleteInstall(options) {
3416
+ return (options.client ?? client).delete({
3417
+ url: "/v1/projects/{project_id}/installs/{install_id}",
3418
+ ...options
3419
+ });
3420
+ }
3421
+ /**
3422
+ * Get an install
3423
+ *
3424
+ * One of the project's installs.
3425
+ */
3426
+ static getInstall(options) {
3427
+ return (options.client ?? client).get({
3428
+ url: "/v1/projects/{project_id}/installs/{install_id}",
3429
+ ...options
3430
+ });
3431
+ }
3432
+ };
3351
3433
  var Knowledge = class {
3352
3434
  /**
3353
3435
  * Search knowledge
@@ -3365,6 +3447,123 @@ var Knowledge = class {
3365
3447
  });
3366
3448
  }
3367
3449
  };
3450
+ var Listings = class {
3451
+ /**
3452
+ * Browse the marketplace
3453
+ *
3454
+ * Every listed entry, newest first. `interface` is what an installing project sees of the resource, read live from the publisher.
3455
+ *
3456
+ */
3457
+ static listPublicListings(options) {
3458
+ return (options?.client ?? client).get({
3459
+ url: "/v1/listings",
3460
+ ...options
3461
+ });
3462
+ }
3463
+ /**
3464
+ * Get a public listing
3465
+ *
3466
+ * One listed entry. A listing that is not listed answers `404`.
3467
+ */
3468
+ static getPublicListing(options) {
3469
+ return (options.client ?? client).get({
3470
+ url: "/v1/listings/{listing_id}",
3471
+ ...options
3472
+ });
3473
+ }
3474
+ /**
3475
+ * List a project's listings
3476
+ *
3477
+ * The listings the project publishes, newest first.
3478
+ */
3479
+ static listListings(options) {
3480
+ return (options.client ?? client).get({
3481
+ url: "/v1/projects/{project_id}/listings",
3482
+ ...options
3483
+ });
3484
+ }
3485
+ /**
3486
+ * Create a listing
3487
+ *
3488
+ * Publish one of the project's tools or agents as a `draft`. Any project member may publish.
3489
+ * 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`.
3490
+ *
3491
+ */
3492
+ static createListing(options) {
3493
+ return (options.client ?? client).post({
3494
+ url: "/v1/projects/{project_id}/listings",
3495
+ ...options,
3496
+ headers: {
3497
+ "Content-Type": "application/json",
3498
+ ...options.headers
3499
+ }
3500
+ });
3501
+ }
3502
+ /**
3503
+ * Get a listing
3504
+ *
3505
+ * One of the project's listings.
3506
+ */
3507
+ static getListing(options) {
3508
+ return (options.client ?? client).get({
3509
+ url: "/v1/projects/{project_id}/listings/{listing_id}",
3510
+ ...options
3511
+ });
3512
+ }
3513
+ /**
3514
+ * Update a listing
3515
+ *
3516
+ * Change the title or description, or pause and resume the listing.
3517
+ * `state: suspended` stops the 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`.
3518
+ *
3519
+ */
3520
+ static updateListing(options) {
3521
+ return (options.client ?? client).patch({
3522
+ url: "/v1/projects/{project_id}/listings/{listing_id}",
3523
+ ...options,
3524
+ headers: {
3525
+ "Content-Type": "application/json",
3526
+ ...options.headers
3527
+ }
3528
+ });
3529
+ }
3530
+ /**
3531
+ * Submit a listing for review
3532
+ *
3533
+ * 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`.
3534
+ *
3535
+ */
3536
+ static submitListing(options) {
3537
+ return (options.client ?? client).post({
3538
+ url: "/v1/projects/{project_id}/listings/{listing_id}:submit",
3539
+ ...options
3540
+ });
3541
+ }
3542
+ /**
3543
+ * List a listing's installs
3544
+ *
3545
+ * Each project that installed the listing, with its usage this billing cycle as last sampled. Never the content of a call.
3546
+ *
3547
+ */
3548
+ static listListingInstalls(options) {
3549
+ return (options.client ?? client).get({
3550
+ url: "/v1/projects/{project_id}/listings/{listing_id}/installs",
3551
+ ...options
3552
+ });
3553
+ }
3554
+ /**
3555
+ * Remove a project's install
3556
+ *
3557
+ * 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.
3558
+ *
3559
+ */
3560
+ static deleteListingInstall(options) {
3561
+ return (options.client ?? client).delete({
3562
+ url: "/v1/projects/{project_id}/listings/{listing_id}/installs/{install_id}",
3563
+ ...options
3564
+ });
3565
+ }
3566
+ };
3368
3567
  var Memories = class {
3369
3568
  /**
3370
3569
  * List memories
@@ -5220,6 +5419,24 @@ var Users = class {
5220
5419
  ...options
5221
5420
  });
5222
5421
  }
5422
+ /**
5423
+ * Start a credit top-up
5424
+ *
5425
+ * A hosted card checkout that buys model credit for the caller's account. Send the caller to `checkout_url`; once the card is charged the full amount is added to `credit_balance_usd` as purchased credit, which never expires. The card fee is not deducted.
5426
+ *
5427
+ * Charged in US dollars. Creating a top-up charges nothing, and one left unpaid lapses at `expires_at`. After paying, the browser returns to the console's billing page.
5428
+ *
5429
+ */
5430
+ static createCurrentUserTopUp(options) {
5431
+ return (options.client ?? client).post({
5432
+ url: "/v1/users/me/top-ups",
5433
+ ...options,
5434
+ headers: {
5435
+ "Content-Type": "application/json",
5436
+ ...options.headers
5437
+ }
5438
+ });
5439
+ }
5223
5440
  };
5224
5441
  var Webhooks = class {
5225
5442
  /**
@@ -5524,7 +5741,9 @@ var NaturaliClient = class {
5524
5741
  generations;
5525
5742
  guardrails;
5526
5743
  ingestionRules;
5744
+ installs;
5527
5745
  knowledge;
5746
+ listings;
5528
5747
  memories;
5529
5748
  memoryRules;
5530
5749
  memoryStores;
@@ -5577,7 +5796,9 @@ var NaturaliClient = class {
5577
5796
  this.generations = bindResource(Generations, this.http);
5578
5797
  this.guardrails = bindResource(Guardrails, this.http);
5579
5798
  this.ingestionRules = bindResource(IngestionRules, this.http);
5799
+ this.installs = bindResource(Installs, this.http);
5580
5800
  this.knowledge = bindResource(Knowledge, this.http);
5801
+ this.listings = bindResource(Listings, this.http);
5581
5802
  this.memories = bindResource(Memories, this.http);
5582
5803
  this.memoryRules = bindResource(MemoryRules, this.http);
5583
5804
  this.memoryStores = bindResource(MemoryStores, this.http);
@@ -5625,7 +5846,9 @@ var src_exports = /* @__PURE__ */ __exportAll({
5625
5846
  Generations: () => Generations,
5626
5847
  Guardrails: () => Guardrails,
5627
5848
  IngestionRules: () => IngestionRules,
5849
+ Installs: () => Installs,
5628
5850
  Knowledge: () => Knowledge,
5851
+ Listings: () => Listings,
5629
5852
  Memories: () => Memories,
5630
5853
  MemoryRules: () => MemoryRules,
5631
5854
  MemoryStores: () => MemoryStores,
@@ -7208,6 +7431,68 @@ const routes = {
7208
7431
  }
7209
7432
  ]
7210
7433
  },
7434
+ "list-admin-listings": {
7435
+ serviceClass: "Admin",
7436
+ operationId: "listAdminListings",
7437
+ description: "Every listing in one state, newest first — `in_review` by default, the queue an operator works through.",
7438
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/admin",
7439
+ httpMethod: "get",
7440
+ pathParams: [],
7441
+ queryParams: [
7442
+ "state",
7443
+ "limit",
7444
+ "cursor"
7445
+ ],
7446
+ headerParams: [],
7447
+ cookieParams: [],
7448
+ flags: [
7449
+ {
7450
+ "name": "state",
7451
+ "description": "",
7452
+ "required": false,
7453
+ "type": "string",
7454
+ "in": "query"
7455
+ },
7456
+ {
7457
+ "name": "limit",
7458
+ "description": "Maximum items per page — an integer from 1 to 100 (default 20).",
7459
+ "required": false,
7460
+ "type": "integer",
7461
+ "in": "query"
7462
+ },
7463
+ {
7464
+ "name": "cursor",
7465
+ "description": "The `next_cursor` of the previous page.",
7466
+ "required": false,
7467
+ "type": "string",
7468
+ "in": "query"
7469
+ }
7470
+ ]
7471
+ },
7472
+ "set-admin-listing-state": {
7473
+ serviceClass: "Admin",
7474
+ operationId: "setAdminListingState",
7475
+ 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`.",
7476
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/admin",
7477
+ httpMethod: "put",
7478
+ pathParams: ["listing_id"],
7479
+ queryParams: [],
7480
+ headerParams: [],
7481
+ cookieParams: [],
7482
+ flags: [{
7483
+ "name": "listing_id",
7484
+ "description": "",
7485
+ "required": true,
7486
+ "type": "string",
7487
+ "in": "path"
7488
+ }, {
7489
+ "name": "state",
7490
+ "description": "",
7491
+ "required": true,
7492
+ "type": "string",
7493
+ "in": "body"
7494
+ }]
7495
+ },
7211
7496
  "list-agents": {
7212
7497
  serviceClass: "Agents",
7213
7498
  operationId: "listAgents",
@@ -14594,14 +14879,14 @@ const routes = {
14594
14879
  "in": "path"
14595
14880
  }]
14596
14881
  },
14597
- "search-knowledge": {
14598
- serviceClass: "Knowledge",
14599
- operationId: "searchKnowledge",
14600
- description: "Searches across documents and memories using hybrid retrieval — a vector query and a full-text query per source, fused by reciprocal rank — or by file paths, document IDs, memory store IDs, or tags. At least one of `query`, `tags`, `document_paths`, `document_ids`, or `memory_store_ids` must be provided.",
14601
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/knowledge",
14602
- httpMethod: "post",
14882
+ "list-installs": {
14883
+ serviceClass: "Installs",
14884
+ operationId: "listInstalls",
14885
+ description: "The listings the project installed, newest first.",
14886
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/installs",
14887
+ httpMethod: "get",
14603
14888
  pathParams: ["project_id"],
14604
- queryParams: [],
14889
+ queryParams: ["limit", "cursor"],
14605
14890
  headerParams: [],
14606
14891
  cookieParams: [],
14607
14892
  flags: [
@@ -14612,57 +14897,173 @@ const routes = {
14612
14897
  "type": "string",
14613
14898
  "in": "path"
14614
14899
  },
14615
- {
14616
- "name": "query",
14617
- "description": "Search query text. Runs a vector query and a full-text query over each store and fuses the rankings; the full-text channel matches exact tokens and phrases, the vector channel everything else.",
14618
- "required": false,
14619
- "type": "string",
14620
- "in": "body"
14621
- },
14622
- {
14623
- "name": "min_similarity",
14624
- "description": "Minimum raw cosine `similarity_score` a **vector** candidate must reach to take part in ranking, applied before fusion. Only applies when `query` is provided. Lexical candidates are deliberately exempt: a result that literally contains the searched token is the evidence, and dropping it for a low cosine is the failure hybrid search exists to prevent. Not a floor on `score`, whose fused value encodes rank position rather than similarity.",
14625
- "required": false,
14626
- "type": "number",
14627
- "in": "body"
14628
- },
14629
- {
14630
- "name": "rrf_k",
14631
- "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 the deployment's `KNOWLEDGE_RRF_K`, itself 60 by default. Only applies when `query` is provided.",
14632
- "required": false,
14633
- "type": "integer",
14634
- "in": "body"
14635
- },
14636
- {
14637
- "name": "recency_half_life_days",
14638
- "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, and the default of the deployment's `KNOWLEDGE_RECENCY_HALF_LIFE_DAYS` — disables the blend entirely; it is a switch, not a lower bound, and sending `0` turns off a deployment-wide decay for this one request. 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 — see the Retrieval Quality guide.",
14639
- "required": false,
14640
- "type": "number",
14641
- "in": "body"
14642
- },
14643
14900
  {
14644
14901
  "name": "limit",
14645
- "description": "Maximum number of results to return (default 10). A value above 100 is clamped to 100 — the ceiling bounds the vector scan this one request performs, so a larger `limit` returns everything there is up to that many rows rather than being refused.",
14902
+ "description": "Maximum items per page — an integer from 1 to 100 (default 20).",
14646
14903
  "required": false,
14647
14904
  "type": "integer",
14648
- "in": "body"
14649
- },
14650
- {
14651
- "name": "include_documents",
14652
- "description": "Set `false` to leave the document store out of this search. A `query` names no store, so it reaches both; the store-specific filters narrow *within* a store rather than choosing between them. This is the switch, and a filter naming the other store never overrides it. `false` for both stores is `400`.",
14653
- "required": false,
14654
- "type": "boolean",
14655
- "in": "body"
14905
+ "in": "query"
14656
14906
  },
14657
14907
  {
14658
- "name": "include_memories",
14659
- "description": "Set `false` to leave the memory store out of this search. The mirror of `include_documents`, for a caller that wants documents alone.",
14908
+ "name": "cursor",
14909
+ "description": "Opaque pagination cursor from a previous response's next_cursor.",
14660
14910
  "required": false,
14661
- "type": "boolean",
14662
- "in": "body"
14663
- },
14664
- {
14665
- "name": "memory_store_ids",
14911
+ "type": "string",
14912
+ "in": "query"
14913
+ }
14914
+ ]
14915
+ },
14916
+ "create-install": {
14917
+ serviceClass: "Installs",
14918
+ operationId: "createInstall",
14919
+ 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`.",
14920
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/installs",
14921
+ httpMethod: "post",
14922
+ pathParams: ["project_id"],
14923
+ queryParams: [],
14924
+ headerParams: [],
14925
+ cookieParams: [],
14926
+ flags: [{
14927
+ "name": "project_id",
14928
+ "description": "Project public ID (proj_ prefix).",
14929
+ "required": true,
14930
+ "type": "string",
14931
+ "in": "path"
14932
+ }, {
14933
+ "name": "listing_id",
14934
+ "description": "",
14935
+ "required": true,
14936
+ "type": "string",
14937
+ "in": "body"
14938
+ }]
14939
+ },
14940
+ "get-install": {
14941
+ serviceClass: "Installs",
14942
+ operationId: "getInstall",
14943
+ description: "One of the project's installs.",
14944
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/installs",
14945
+ httpMethod: "get",
14946
+ pathParams: ["project_id", "install_id"],
14947
+ queryParams: [],
14948
+ headerParams: [],
14949
+ cookieParams: [],
14950
+ flags: [{
14951
+ "name": "project_id",
14952
+ "description": "Project public ID (proj_ prefix).",
14953
+ "required": true,
14954
+ "type": "string",
14955
+ "in": "path"
14956
+ }, {
14957
+ "name": "install_id",
14958
+ "description": "Install public ID (ins_ prefix).",
14959
+ "required": true,
14960
+ "type": "string",
14961
+ "in": "path"
14962
+ }]
14963
+ },
14964
+ "delete-install": {
14965
+ serviceClass: "Installs",
14966
+ operationId: "deleteInstall",
14967
+ 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`.",
14968
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/installs",
14969
+ httpMethod: "delete",
14970
+ pathParams: ["project_id", "install_id"],
14971
+ queryParams: ["force"],
14972
+ headerParams: [],
14973
+ cookieParams: [],
14974
+ flags: [
14975
+ {
14976
+ "name": "project_id",
14977
+ "description": "Project public ID (proj_ prefix).",
14978
+ "required": true,
14979
+ "type": "string",
14980
+ "in": "path"
14981
+ },
14982
+ {
14983
+ "name": "install_id",
14984
+ "description": "Install public ID (ins_ prefix).",
14985
+ "required": true,
14986
+ "type": "string",
14987
+ "in": "path"
14988
+ },
14989
+ {
14990
+ "name": "force",
14991
+ "description": "Uninstall even while resources still use it.",
14992
+ "required": false,
14993
+ "type": "boolean",
14994
+ "in": "query"
14995
+ }
14996
+ ]
14997
+ },
14998
+ "search-knowledge": {
14999
+ serviceClass: "Knowledge",
15000
+ operationId: "searchKnowledge",
15001
+ description: "Searches across documents and memories using hybrid retrieval — a vector query and a full-text query per source, fused by reciprocal rank — or by file paths, document IDs, memory store IDs, or tags. At least one of `query`, `tags`, `document_paths`, `document_ids`, or `memory_store_ids` must be provided.",
15002
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/knowledge",
15003
+ httpMethod: "post",
15004
+ pathParams: ["project_id"],
15005
+ queryParams: [],
15006
+ headerParams: [],
15007
+ cookieParams: [],
15008
+ flags: [
15009
+ {
15010
+ "name": "project_id",
15011
+ "description": "Project public ID (proj_ prefix).",
15012
+ "required": true,
15013
+ "type": "string",
15014
+ "in": "path"
15015
+ },
15016
+ {
15017
+ "name": "query",
15018
+ "description": "Search query text. Runs a vector query and a full-text query over each store and fuses the rankings; the full-text channel matches exact tokens and phrases, the vector channel everything else.",
15019
+ "required": false,
15020
+ "type": "string",
15021
+ "in": "body"
15022
+ },
15023
+ {
15024
+ "name": "min_similarity",
15025
+ "description": "Minimum raw cosine `similarity_score` a **vector** candidate must reach to take part in ranking, applied before fusion. Only applies when `query` is provided. Lexical candidates are deliberately exempt: a result that literally contains the searched token is the evidence, and dropping it for a low cosine is the failure hybrid search exists to prevent. Not a floor on `score`, whose fused value encodes rank position rather than similarity.",
15026
+ "required": false,
15027
+ "type": "number",
15028
+ "in": "body"
15029
+ },
15030
+ {
15031
+ "name": "rrf_k",
15032
+ "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 the deployment's `KNOWLEDGE_RRF_K`, itself 60 by default. Only applies when `query` is provided.",
15033
+ "required": false,
15034
+ "type": "integer",
15035
+ "in": "body"
15036
+ },
15037
+ {
15038
+ "name": "recency_half_life_days",
15039
+ "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, and the default of the deployment's `KNOWLEDGE_RECENCY_HALF_LIFE_DAYS` — disables the blend entirely; it is a switch, not a lower bound, and sending `0` turns off a deployment-wide decay for this one request. 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 — see the Retrieval Quality guide.",
15040
+ "required": false,
15041
+ "type": "number",
15042
+ "in": "body"
15043
+ },
15044
+ {
15045
+ "name": "limit",
15046
+ "description": "Maximum number of results to return (default 10). A value above 100 is clamped to 100 — the ceiling bounds the vector scan this one request performs, so a larger `limit` returns everything there is up to that many rows rather than being refused.",
15047
+ "required": false,
15048
+ "type": "integer",
15049
+ "in": "body"
15050
+ },
15051
+ {
15052
+ "name": "include_documents",
15053
+ "description": "Set `false` to leave the document store out of this search. A `query` names no store, so it reaches both; the store-specific filters narrow *within* a store rather than choosing between them. This is the switch, and a filter naming the other store never overrides it. `false` for both stores is `400`.",
15054
+ "required": false,
15055
+ "type": "boolean",
15056
+ "in": "body"
15057
+ },
15058
+ {
15059
+ "name": "include_memories",
15060
+ "description": "Set `false` to leave the memory store out of this search. The mirror of `include_documents`, for a caller that wants documents alone.",
15061
+ "required": false,
15062
+ "type": "boolean",
15063
+ "in": "body"
15064
+ },
15065
+ {
15066
+ "name": "memory_store_ids",
14666
15067
  "description": "Search memories within these specific memory stores",
14667
15068
  "required": false,
14668
15069
  "type": "array",
@@ -14698,6 +15099,305 @@ const routes = {
14698
15099
  }
14699
15100
  ]
14700
15101
  },
15102
+ "list-public-listings": {
15103
+ serviceClass: "Listings",
15104
+ operationId: "listPublicListings",
15105
+ description: "Every listed entry, newest first. `interface` is what an installing project sees of the resource, read live from the publisher.",
15106
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15107
+ httpMethod: "get",
15108
+ pathParams: [],
15109
+ queryParams: ["limit", "cursor"],
15110
+ headerParams: [],
15111
+ cookieParams: [],
15112
+ flags: [{
15113
+ "name": "limit",
15114
+ "description": "Maximum items per page — an integer from 1 to 100 (default 20).",
15115
+ "required": false,
15116
+ "type": "integer",
15117
+ "in": "query"
15118
+ }, {
15119
+ "name": "cursor",
15120
+ "description": "Opaque pagination cursor from a previous response's next_cursor.",
15121
+ "required": false,
15122
+ "type": "string",
15123
+ "in": "query"
15124
+ }]
15125
+ },
15126
+ "get-public-listing": {
15127
+ serviceClass: "Listings",
15128
+ operationId: "getPublicListing",
15129
+ description: "One listed entry. A listing that is not listed answers `404`.",
15130
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15131
+ httpMethod: "get",
15132
+ pathParams: ["listing_id"],
15133
+ queryParams: [],
15134
+ headerParams: [],
15135
+ cookieParams: [],
15136
+ flags: [{
15137
+ "name": "listing_id",
15138
+ "description": "Listing public ID (lst_ prefix).",
15139
+ "required": true,
15140
+ "type": "string",
15141
+ "in": "path"
15142
+ }]
15143
+ },
15144
+ "list-listings": {
15145
+ serviceClass: "Listings",
15146
+ operationId: "listListings",
15147
+ description: "The listings the project publishes, newest first.",
15148
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15149
+ httpMethod: "get",
15150
+ pathParams: ["project_id"],
15151
+ queryParams: ["limit", "cursor"],
15152
+ headerParams: [],
15153
+ cookieParams: [],
15154
+ flags: [
15155
+ {
15156
+ "name": "project_id",
15157
+ "description": "Project public ID (proj_ prefix).",
15158
+ "required": true,
15159
+ "type": "string",
15160
+ "in": "path"
15161
+ },
15162
+ {
15163
+ "name": "limit",
15164
+ "description": "Maximum items per page — an integer from 1 to 100 (default 20).",
15165
+ "required": false,
15166
+ "type": "integer",
15167
+ "in": "query"
15168
+ },
15169
+ {
15170
+ "name": "cursor",
15171
+ "description": "Opaque pagination cursor from a previous response's next_cursor.",
15172
+ "required": false,
15173
+ "type": "string",
15174
+ "in": "query"
15175
+ }
15176
+ ]
15177
+ },
15178
+ "create-listing": {
15179
+ serviceClass: "Listings",
15180
+ operationId: "createListing",
15181
+ 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`.",
15182
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15183
+ httpMethod: "post",
15184
+ pathParams: ["project_id"],
15185
+ queryParams: [],
15186
+ headerParams: [],
15187
+ cookieParams: [],
15188
+ flags: [
15189
+ {
15190
+ "name": "project_id",
15191
+ "description": "Project public ID (proj_ prefix).",
15192
+ "required": true,
15193
+ "type": "string",
15194
+ "in": "path"
15195
+ },
15196
+ {
15197
+ "name": "resource_type",
15198
+ "description": "What the listing publishes.",
15199
+ "required": true,
15200
+ "type": "string",
15201
+ "in": "body"
15202
+ },
15203
+ {
15204
+ "name": "resource_id",
15205
+ "description": "A tool or agent in this project.",
15206
+ "required": true,
15207
+ "type": "string",
15208
+ "in": "body"
15209
+ },
15210
+ {
15211
+ "name": "title",
15212
+ "description": "",
15213
+ "required": true,
15214
+ "type": "string",
15215
+ "in": "body"
15216
+ },
15217
+ {
15218
+ "name": "description",
15219
+ "description": "",
15220
+ "required": false,
15221
+ "type": "string",
15222
+ "in": "body"
15223
+ }
15224
+ ]
15225
+ },
15226
+ "get-listing": {
15227
+ serviceClass: "Listings",
15228
+ operationId: "getListing",
15229
+ description: "One of the project's listings.",
15230
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15231
+ httpMethod: "get",
15232
+ pathParams: ["project_id", "listing_id"],
15233
+ queryParams: [],
15234
+ headerParams: [],
15235
+ cookieParams: [],
15236
+ flags: [{
15237
+ "name": "project_id",
15238
+ "description": "Project public ID (proj_ prefix).",
15239
+ "required": true,
15240
+ "type": "string",
15241
+ "in": "path"
15242
+ }, {
15243
+ "name": "listing_id",
15244
+ "description": "Listing public ID (lst_ prefix).",
15245
+ "required": true,
15246
+ "type": "string",
15247
+ "in": "path"
15248
+ }]
15249
+ },
15250
+ "update-listing": {
15251
+ serviceClass: "Listings",
15252
+ operationId: "updateListing",
15253
+ description: "Change the title or description, or pause and resume the listing. `state: suspended` stops the 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`.",
15254
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15255
+ httpMethod: "patch",
15256
+ pathParams: ["project_id", "listing_id"],
15257
+ queryParams: [],
15258
+ headerParams: [],
15259
+ cookieParams: [],
15260
+ flags: [
15261
+ {
15262
+ "name": "project_id",
15263
+ "description": "Project public ID (proj_ prefix).",
15264
+ "required": true,
15265
+ "type": "string",
15266
+ "in": "path"
15267
+ },
15268
+ {
15269
+ "name": "listing_id",
15270
+ "description": "Listing public ID (lst_ prefix).",
15271
+ "required": true,
15272
+ "type": "string",
15273
+ "in": "path"
15274
+ },
15275
+ {
15276
+ "name": "title",
15277
+ "description": "",
15278
+ "required": false,
15279
+ "type": "string",
15280
+ "in": "body"
15281
+ },
15282
+ {
15283
+ "name": "description",
15284
+ "description": "",
15285
+ "required": false,
15286
+ "type": "string",
15287
+ "in": "body"
15288
+ },
15289
+ {
15290
+ "name": "state",
15291
+ "description": "Pause the listing, or resume one you paused.",
15292
+ "required": false,
15293
+ "type": "string",
15294
+ "in": "body"
15295
+ }
15296
+ ]
15297
+ },
15298
+ "submit-listing": {
15299
+ serviceClass: "Listings",
15300
+ operationId: "submitListing",
15301
+ 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`.",
15302
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15303
+ httpMethod: "post",
15304
+ pathParams: ["project_id", "listing_id"],
15305
+ queryParams: [],
15306
+ headerParams: [],
15307
+ cookieParams: [],
15308
+ flags: [{
15309
+ "name": "project_id",
15310
+ "description": "Project public ID (proj_ prefix).",
15311
+ "required": true,
15312
+ "type": "string",
15313
+ "in": "path"
15314
+ }, {
15315
+ "name": "listing_id",
15316
+ "description": "Listing public ID (lst_ prefix).",
15317
+ "required": true,
15318
+ "type": "string",
15319
+ "in": "path"
15320
+ }]
15321
+ },
15322
+ "list-listing-installs": {
15323
+ serviceClass: "Listings",
15324
+ operationId: "listListingInstalls",
15325
+ description: "Each project that installed the listing, with its usage this billing cycle as last sampled. Never the content of a call.",
15326
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15327
+ httpMethod: "get",
15328
+ pathParams: ["project_id", "listing_id"],
15329
+ queryParams: ["limit", "cursor"],
15330
+ headerParams: [],
15331
+ cookieParams: [],
15332
+ flags: [
15333
+ {
15334
+ "name": "project_id",
15335
+ "description": "Project public ID (proj_ prefix).",
15336
+ "required": true,
15337
+ "type": "string",
15338
+ "in": "path"
15339
+ },
15340
+ {
15341
+ "name": "listing_id",
15342
+ "description": "Listing public ID (lst_ prefix).",
15343
+ "required": true,
15344
+ "type": "string",
15345
+ "in": "path"
15346
+ },
15347
+ {
15348
+ "name": "limit",
15349
+ "description": "Maximum items per page — an integer from 1 to 100 (default 20).",
15350
+ "required": false,
15351
+ "type": "integer",
15352
+ "in": "query"
15353
+ },
15354
+ {
15355
+ "name": "cursor",
15356
+ "description": "Opaque pagination cursor from a previous response's next_cursor.",
15357
+ "required": false,
15358
+ "type": "string",
15359
+ "in": "query"
15360
+ }
15361
+ ]
15362
+ },
15363
+ "delete-listing-install": {
15364
+ serviceClass: "Listings",
15365
+ operationId: "deleteListingInstall",
15366
+ 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.",
15367
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/listings",
15368
+ httpMethod: "delete",
15369
+ pathParams: [
15370
+ "project_id",
15371
+ "listing_id",
15372
+ "install_id"
15373
+ ],
15374
+ queryParams: [],
15375
+ headerParams: [],
15376
+ cookieParams: [],
15377
+ flags: [
15378
+ {
15379
+ "name": "project_id",
15380
+ "description": "Project public ID (proj_ prefix).",
15381
+ "required": true,
15382
+ "type": "string",
15383
+ "in": "path"
15384
+ },
15385
+ {
15386
+ "name": "listing_id",
15387
+ "description": "Listing public ID (lst_ prefix).",
15388
+ "required": true,
15389
+ "type": "string",
15390
+ "in": "path"
15391
+ },
15392
+ {
15393
+ "name": "install_id",
15394
+ "description": "Install public ID (ins_ prefix).",
15395
+ "required": true,
15396
+ "type": "string",
15397
+ "in": "path"
15398
+ }
15399
+ ]
15400
+ },
14701
15401
  "list-memories": {
14702
15402
  serviceClass: "Memories",
14703
15403
  operationId: "listMemories",
@@ -20244,6 +20944,24 @@ const routes = {
20244
20944
  "in": "path"
20245
20945
  }]
20246
20946
  },
20947
+ "create-current-user-top-up": {
20948
+ serviceClass: "Users",
20949
+ operationId: "createCurrentUserTopUp",
20950
+ description: "A hosted card checkout that buys model credit for the caller's account. Send the caller to `checkout_url`; once the card is charged the full amount is added to `credit_balance_usd` as purchased credit, which never expires. The card fee is not deducted. Charged in US dollars. Creating a top-up charges nothing, and one left unpaid lapses at `expires_at`. After paying, the browser returns to the console's billing page.",
20951
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/users",
20952
+ httpMethod: "post",
20953
+ pathParams: [],
20954
+ queryParams: [],
20955
+ headerParams: [],
20956
+ cookieParams: [],
20957
+ flags: [{
20958
+ "name": "amount_usd",
20959
+ "description": "US dollars to buy, in whole cents.",
20960
+ "required": true,
20961
+ "type": "number",
20962
+ "in": "body"
20963
+ }]
20964
+ },
20247
20965
  "list-webhooks": {
20248
20966
  serviceClass: "Webhooks",
20249
20967
  operationId: "listWebhooks",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturali/cli",
3
- "version": "0.164.1",
3
+ "version": "0.166.0",
4
4
  "description": "Command-line interface for the naturali.ai API, generated from its OpenAPI specs",
5
5
  "type": "module",
6
6
  "bin": {
@@ -25,7 +25,7 @@
25
25
  "yaml": "^2.9.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@naturali/sdk": "0.164.1",
28
+ "@naturali/sdk": "0.166.0",
29
29
  "@ttoss/openapi-codegen": "^0.5.0",
30
30
  "@types/node": "^26.5.1",
31
31
  "tsdown": "^0.23.0",