@naturali/cli 0.127.10 → 0.128.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 +199 -176
  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.127.10";
17
+ var version = "0.128.0";
18
18
  //#endregion
19
19
  //#region ../sdk/src/generated/core/bodySerializer.gen.ts
20
20
  const serializeFormDataPair = (data, key, value) => {
@@ -3041,7 +3041,7 @@ var Knowledge = class {
3041
3041
  /**
3042
3042
  * Search knowledge
3043
3043
  *
3044
- * Searches across documents and memory entries using hybrid retrieval — a vector query and a full-text query per source, fused by reciprocal rank — or by file paths, document IDs, memory IDs, or tags. At least one of `query`, `tags`, `document_paths`, `document_ids`, or `memory_ids` must be provided.
3044
+ * 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.
3045
3045
  */
3046
3046
  static searchKnowledge(options) {
3047
3047
  return (options.client ?? client).post({
@@ -3058,7 +3058,7 @@ var Memories = class {
3058
3058
  /**
3059
3059
  * List memories
3060
3060
  *
3061
- * Returns a list of memory configurations for a project
3061
+ * Returns all memories in a memory store
3062
3062
  */
3063
3063
  static listMemories(options) {
3064
3064
  return (options.client ?? client).get({
@@ -3069,7 +3069,7 @@ var Memories = class {
3069
3069
  /**
3070
3070
  * Create a memory
3071
3071
  *
3072
- * Creates a new memory configuration in a project
3072
+ * Creates a new memory in the specified memory store. Automatically generates an embedding for semantic search, and skips the write when an existing memory is a near-duplicate (see `duplicate_threshold`). A merely similar fact is stored as its own memory: this path has no agent context and therefore no model to consolidate two facts into one.
3073
3073
  */
3074
3074
  static createMemory(options) {
3075
3075
  return (options.client ?? client).post({
@@ -3084,7 +3084,7 @@ var Memories = class {
3084
3084
  /**
3085
3085
  * Delete a memory
3086
3086
  *
3087
- * Deletes a memory configuration
3087
+ * Deletes a memory
3088
3088
  */
3089
3089
  static deleteMemory(options) {
3090
3090
  return (options.client ?? client).delete({
@@ -3095,7 +3095,7 @@ var Memories = class {
3095
3095
  /**
3096
3096
  * Get a memory
3097
3097
  *
3098
- * Returns a single memory configuration by ID
3098
+ * Returns a single memory by ID
3099
3099
  */
3100
3100
  static getMemory(options) {
3101
3101
  return (options.client ?? client).get({
@@ -3106,7 +3106,7 @@ var Memories = class {
3106
3106
  /**
3107
3107
  * Update a memory
3108
3108
  *
3109
- * Updates an existing memory configuration
3109
+ * Updates an existing memory. Regenerates the embedding if content changes.
3110
3110
  */
3111
3111
  static updateMemory(options) {
3112
3112
  return (options.client ?? client).put({
@@ -3160,26 +3160,26 @@ var Memories = class {
3160
3160
  });
3161
3161
  }
3162
3162
  };
3163
- var MemoryEntries = class {
3163
+ var MemoryStores = class {
3164
3164
  /**
3165
- * List memory entries
3165
+ * List memory stores
3166
3166
  *
3167
- * Returns all entries in a memory container
3167
+ * Returns a list of memory store configurations for a project
3168
3168
  */
3169
- static listMemoryEntries(options) {
3169
+ static listMemoryStores(options) {
3170
3170
  return (options.client ?? client).get({
3171
- url: "/v1/projects/{project_id}/memory-entries",
3171
+ url: "/v1/projects/{project_id}/memory-stores",
3172
3172
  ...options
3173
3173
  });
3174
3174
  }
3175
3175
  /**
3176
- * Create a memory entry
3176
+ * Create a memory store
3177
3177
  *
3178
- * Creates a new entry in the specified memory container. Automatically generates an embedding for semantic search, and skips the write when an existing entry is a near-duplicate (see `duplicate_threshold`). A merely similar fact is stored as its own entry: this path has no agent context and therefore no model to consolidate two facts into one.
3178
+ * Creates a new memory store configuration in a project
3179
3179
  */
3180
- static createMemoryEntry(options) {
3180
+ static createMemoryStore(options) {
3181
3181
  return (options.client ?? client).post({
3182
- url: "/v1/projects/{project_id}/memory-entries",
3182
+ url: "/v1/projects/{project_id}/memory-stores",
3183
3183
  ...options,
3184
3184
  headers: {
3185
3185
  "Content-Type": "application/json",
@@ -3188,35 +3188,35 @@ var MemoryEntries = class {
3188
3188
  });
3189
3189
  }
3190
3190
  /**
3191
- * Delete a memory entry
3191
+ * Delete a memory store
3192
3192
  *
3193
- * Deletes a memory entry
3193
+ * Deletes a memory store configuration
3194
3194
  */
3195
- static deleteMemoryEntry(options) {
3195
+ static deleteMemoryStore(options) {
3196
3196
  return (options.client ?? client).delete({
3197
- url: "/v1/projects/{project_id}/memory-entries/{entry_id}",
3197
+ url: "/v1/projects/{project_id}/memory-stores/{memory_store_id}",
3198
3198
  ...options
3199
3199
  });
3200
3200
  }
3201
3201
  /**
3202
- * Get a memory entry
3202
+ * Get a memory store
3203
3203
  *
3204
- * Returns a single memory entry by ID
3204
+ * Returns a single memory store configuration by ID
3205
3205
  */
3206
- static getMemoryEntry(options) {
3206
+ static getMemoryStore(options) {
3207
3207
  return (options.client ?? client).get({
3208
- url: "/v1/projects/{project_id}/memory-entries/{entry_id}",
3208
+ url: "/v1/projects/{project_id}/memory-stores/{memory_store_id}",
3209
3209
  ...options
3210
3210
  });
3211
3211
  }
3212
3212
  /**
3213
- * Update a memory entry
3213
+ * Update a memory store
3214
3214
  *
3215
- * Updates an existing memory entry. Regenerates the embedding if content changes.
3215
+ * Updates an existing memory store configuration
3216
3216
  */
3217
- static updateMemoryEntry(options) {
3217
+ static updateMemoryStore(options) {
3218
3218
  return (options.client ?? client).put({
3219
- url: "/v1/projects/{project_id}/memory-entries/{entry_id}",
3219
+ url: "/v1/projects/{project_id}/memory-stores/{memory_store_id}",
3220
3220
  ...options,
3221
3221
  headers: {
3222
3222
  "Content-Type": "application/json",
@@ -3225,24 +3225,24 @@ var MemoryEntries = class {
3225
3225
  });
3226
3226
  }
3227
3227
  /**
3228
- * Get memory entry tags
3228
+ * Get memory store tags
3229
3229
  *
3230
- * Returns all tags attached to the memory entry
3230
+ * Returns all tags attached to the memory store
3231
3231
  */
3232
- static getMemoryEntryTags(options) {
3232
+ static getMemoryStoreTags(options) {
3233
3233
  return (options.client ?? client).get({
3234
- url: "/v1/projects/{project_id}/memory-entries/{entry_id}/tags",
3234
+ url: "/v1/projects/{project_id}/memory-stores/{memory_store_id}/tags",
3235
3235
  ...options
3236
3236
  });
3237
3237
  }
3238
3238
  /**
3239
- * Merge memory entry tags
3239
+ * Merge memory store tags
3240
3240
  *
3241
- * Merges provided tags into the memory entry's existing tags (existing tags are preserved unless overridden)
3241
+ * Merges provided tags into the memory store's existing tags (existing tags are preserved unless overridden)
3242
3242
  */
3243
- static mergeMemoryEntryTags(options) {
3243
+ static mergeMemoryStoreTags(options) {
3244
3244
  return (options.client ?? client).patch({
3245
- url: "/v1/projects/{project_id}/memory-entries/{entry_id}/tags",
3245
+ url: "/v1/projects/{project_id}/memory-stores/{memory_store_id}/tags",
3246
3246
  ...options,
3247
3247
  headers: {
3248
3248
  "Content-Type": "application/json",
@@ -3251,13 +3251,13 @@ var MemoryEntries = class {
3251
3251
  });
3252
3252
  }
3253
3253
  /**
3254
- * Replace memory entry tags
3254
+ * Replace memory store tags
3255
3255
  *
3256
- * Replaces all tags on the memory entry with the provided tags (not merged)
3256
+ * Replaces all tags on the memory store with the provided tags (not merged)
3257
3257
  */
3258
- static replaceMemoryEntryTags(options) {
3258
+ static replaceMemoryStoreTags(options) {
3259
3259
  return (options.client ?? client).put({
3260
- url: "/v1/projects/{project_id}/memory-entries/{entry_id}/tags",
3260
+ url: "/v1/projects/{project_id}/memory-stores/{memory_store_id}/tags",
3261
3261
  ...options,
3262
3262
  headers: {
3263
3263
  "Content-Type": "application/json",
@@ -3844,7 +3844,7 @@ var Quotas = class {
3844
3844
  *
3845
3845
  * Creates a project-scoped quota. `requests` is valid for `scope: project`/`api_key`; `tokens` and `cost_usd` are valid for `scope: project`/`agent`/`actor`; `storage_bytes` is valid for `scope: project` only. Any other scope/metric pair is rejected with 400 (no attribution exists to enforce it). An `actor` quota caps one end user's spend, matched from the generation's session; a null `scope_ref` means one budget *per* actor rather than a pooled project total. A `cost_usd` quota may name one `meter_type` to cap; omitting it caps every priced meter. A duplicate quota (same project, scope, scope_ref, metric, window, meter_type) is rejected with 409.
3846
3846
  *
3847
- * `storage_bytes` caps a stored total rather than a windowed one, so it takes `window: current` and every other metric refuses that value (400 either way). It is enforced at the corpus write paths — file upload and create, document create, document ingest and re-ingest, memory-entry create — with `409 QUOTA_STORAGE_EXCEEDED` and no `Retry-After`, since no window reset clears a footprint.
3847
+ * `storage_bytes` caps a stored total rather than a windowed one, so it takes `window: current` and every other metric refuses that value (400 either way). It is enforced at the corpus write paths — file upload and create, document create, document ingest and re-ingest, memory create — with `409 QUOTA_STORAGE_EXCEEDED` and no `Retry-After`, since no window reset clears a footprint.
3848
3848
  */
3849
3849
  static createQuota(options) {
3850
3850
  return (options.client ?? client).post({
@@ -4900,7 +4900,7 @@ var NaturaliClient = class {
4900
4900
  ingestionRules;
4901
4901
  knowledge;
4902
4902
  memories;
4903
- memoryEntries;
4903
+ memoryStores;
4904
4904
  modelRoutes;
4905
4905
  quotas;
4906
4906
  models;
@@ -4950,7 +4950,7 @@ var NaturaliClient = class {
4950
4950
  this.ingestionRules = bindResource(IngestionRules, this.http);
4951
4951
  this.knowledge = bindResource(Knowledge, this.http);
4952
4952
  this.memories = bindResource(Memories, this.http);
4953
- this.memoryEntries = bindResource(MemoryEntries, this.http);
4953
+ this.memoryStores = bindResource(MemoryStores, this.http);
4954
4954
  this.modelRoutes = bindResource(ModelRoutes, this.http);
4955
4955
  this.quotas = bindResource(Quotas, this.http);
4956
4956
  this.models = bindResource(Models, this.http);
@@ -4995,7 +4995,7 @@ var src_exports = /* @__PURE__ */ __exportAll({
4995
4995
  IngestionRules: () => IngestionRules,
4996
4996
  Knowledge: () => Knowledge,
4997
4997
  Memories: () => Memories,
4998
- MemoryEntries: () => MemoryEntries,
4998
+ MemoryStores: () => MemoryStores,
4999
4999
  ModelRoutes: () => ModelRoutes,
5000
5000
  Models: () => Models,
5001
5001
  NaturaliClient: () => NaturaliClient,
@@ -5103,6 +5103,21 @@ const parseFlagValue = (value) => {
5103
5103
  return value;
5104
5104
  };
5105
5105
  /**
5106
+ * Parses a value for a flag the manifest declares `string`.
5107
+ *
5108
+ * `@ttoss/openapi-codegen` reports a schema with no `type` as `string`, so the
5109
+ * manifest cannot tell a real string from a union — `tool_choice` takes
5110
+ * `"auto"` or `{ "type": "tool", … }` and arrives here as `string`. An object
5111
+ * or array literal is therefore still parsed, while a scalar is left as
5112
+ * written: a digit-only phone number or external id must not become a number.
5113
+ * TriangulosTecnologia/naturali.ai#214
5114
+ */
5115
+ const parseStringFlagValue = (value) => {
5116
+ const trimmed = value.trim();
5117
+ if (trimmed.startsWith("{") || trimmed.startsWith("[")) return parseFlagValue(value);
5118
+ return value;
5119
+ };
5120
+ /**
5106
5121
  * Builds the value for an array-typed flag. Repeated occurrences
5107
5122
  * (`--capabilities a --capabilities b`) collect into a list; a single JSON
5108
5123
  * array literal (`--capabilities '["a","b"]'`) passes through unwrapped; a
@@ -5182,7 +5197,8 @@ const placeFlags = (args) => {
5182
5197
  }));
5183
5198
  for (const [flagKey, rawValue] of Object.entries(parsedFlags.single)) {
5184
5199
  const canonical = toCanonical(flagKey);
5185
- const value = typeByCanonical.get(canonical) === "array" ? buildArrayFlagValue(parsedFlags.repeated[flagKey] ?? [rawValue]) : parseFlagValue(rawValue);
5200
+ const declaredType = typeByCanonical.get(canonical);
5201
+ const value = declaredType === "array" ? buildArrayFlagValue(parsedFlags.repeated[flagKey] ?? [rawValue]) : declaredType === "string" ? parseStringFlagValue(rawValue) : parseFlagValue(rawValue);
5186
5202
  const pathParam = route.pathParams.find((param) => {
5187
5203
  return toCanonical(param) === canonical;
5188
5204
  });
@@ -6900,14 +6916,14 @@ const routes = {
6900
6916
  },
6901
6917
  {
6902
6918
  "name": "extract",
6903
- "description": "Per-turn override of the agent's `knowledge_config.extraction` default. Omit to follow the agent's stored config. Set `false` to suppress automatic memory extraction for this turn (e.g. an operational or tool-listing turn that would only add noise to a curated memory). Set `true` to force extraction on for this turn even when the agent does not enable it by default, provided the agent has a `write_memory_id`. Has no effect on streaming or `requires_action` turns, which never extract.",
6919
+ "description": "Per-turn override of the agent's `knowledge_config.extraction` default. Omit to follow the agent's stored config. Set `false` to suppress automatic memory store extraction for this turn (e.g. an operational or tool-listing turn that would only add noise to a curated memory store). Set `true` to force extraction on for this turn even when the agent does not enable it by default, provided the agent has a `write_memory_store_id`. Has no effect on streaming or `requires_action` turns, which never extract.",
6904
6920
  "required": false,
6905
6921
  "type": "boolean",
6906
6922
  "in": "body"
6907
6923
  },
6908
6924
  {
6909
6925
  "name": "knowledge_config",
6910
- "description": "Per-generation knowledge retrieval override. Array filters (memory_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, limit) use the per-generation value when present.",
6926
+ "description": "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, limit) use the per-generation value when present.",
6911
6927
  "required": false,
6912
6928
  "type": "object",
6913
6929
  "in": "body"
@@ -12270,7 +12286,7 @@ const routes = {
12270
12286
  "search-knowledge": {
12271
12287
  serviceClass: "Knowledge",
12272
12288
  operationId: "searchKnowledge",
12273
- description: "Searches across documents and memory entries using hybrid retrieval — a vector query and a full-text query per source, fused by reciprocal rank — or by file paths, document IDs, memory IDs, or tags. At least one of `query`, `tags`, `document_paths`, `document_ids`, or `memory_ids` must be provided.",
12289
+ 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.",
12274
12290
  moduleDocsUrl: "https://docs.naturali.ai/docs/modules/knowledge",
12275
12291
  httpMethod: "post",
12276
12292
  pathParams: ["project_id"],
@@ -12313,7 +12329,7 @@ const routes = {
12313
12329
  },
12314
12330
  {
12315
12331
  "name": "recency_half_life_days",
12316
- "description": "Half-life, in days, of a recency decay applied to **memory** 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.",
12332
+ "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.",
12317
12333
  "required": false,
12318
12334
  "type": "number",
12319
12335
  "in": "body"
@@ -12326,8 +12342,8 @@ const routes = {
12326
12342
  "in": "body"
12327
12343
  },
12328
12344
  {
12329
- "name": "memory_ids",
12330
- "description": "Search entries within these specific memories",
12345
+ "name": "memory_store_ids",
12346
+ "description": "Search memories within these specific memory stores",
12331
12347
  "required": false,
12332
12348
  "type": "array",
12333
12349
  "in": "body"
@@ -12348,7 +12364,7 @@ const routes = {
12348
12364
  },
12349
12365
  {
12350
12366
  "name": "tags",
12351
- "description": "Filter results to documents and memory entries whose `tags` contain every one of these key-value pairs (exact, case-sensitive match). The only filter that scopes both stores, so passing it alone searches both. For memory it matches at entry granularity: an entry is returned when its parent memory's tags match or its own do.",
12367
+ "description": "Filter results to documents and memories whose `tags` contain every one of these key-value pairs (exact, case-sensitive match). The only filter that scopes both stores, so passing it alone searches both. For memories it matches at memory granularity: a memory is returned when its parent memory store's tags match or its own do.",
12352
12368
  "required": false,
12353
12369
  "type": "string",
12354
12370
  "in": "body"
@@ -12358,14 +12374,16 @@ const routes = {
12358
12374
  "list-memories": {
12359
12375
  serviceClass: "Memories",
12360
12376
  operationId: "listMemories",
12361
- description: "Returns a list of memory configurations for a project",
12377
+ description: "Returns all memories in a memory store",
12362
12378
  moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
12363
12379
  httpMethod: "get",
12364
12380
  pathParams: ["project_id"],
12365
12381
  queryParams: [
12382
+ "memory_store_id",
12366
12383
  "tags",
12367
12384
  "limit",
12368
- "offset"
12385
+ "offset",
12386
+ "include_invalidated"
12369
12387
  ],
12370
12388
  flags: [
12371
12389
  {
@@ -12375,6 +12393,13 @@ const routes = {
12375
12393
  "type": "string",
12376
12394
  "in": "path"
12377
12395
  },
12396
+ {
12397
+ "name": "memory_store_id",
12398
+ "description": "Memory store to list memories from (mstore_...)",
12399
+ "required": true,
12400
+ "type": "string",
12401
+ "in": "query"
12402
+ },
12378
12403
  {
12379
12404
  "name": "tags",
12380
12405
  "description": "Filter by tag pairs, written `key:value` (split on the first colon, so a value may contain colons). Repeat the parameter for several pairs; **all** must be present with exactly that value.\n",
@@ -12395,13 +12420,20 @@ const routes = {
12395
12420
  "required": false,
12396
12421
  "type": "integer",
12397
12422
  "in": "query"
12423
+ },
12424
+ {
12425
+ "name": "include_invalidated",
12426
+ "description": "Include invalidated (superseded) memories. They are excluded by default; set this to audit the supersede history.",
12427
+ "required": false,
12428
+ "type": "boolean",
12429
+ "in": "query"
12398
12430
  }
12399
12431
  ]
12400
12432
  },
12401
12433
  "create-memory": {
12402
12434
  serviceClass: "Memories",
12403
12435
  operationId: "createMemory",
12404
- description: "Creates a new memory configuration in a project",
12436
+ description: "Creates a new memory in the specified memory store. Automatically generates an embedding for semantic search, and skips the write when an existing memory is a near-duplicate (see `duplicate_threshold`). A merely similar fact is stored as its own memory: this path has no agent context and therefore no model to consolidate two facts into one.",
12405
12437
  moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
12406
12438
  httpMethod: "post",
12407
12439
  pathParams: ["project_id"],
@@ -12415,32 +12447,60 @@ const routes = {
12415
12447
  "in": "path"
12416
12448
  },
12417
12449
  {
12418
- "name": "name",
12419
- "description": "Memory name",
12450
+ "name": "memory_store_id",
12451
+ "description": "Memory store to add the memory to (mstore_...)",
12420
12452
  "required": true,
12421
12453
  "type": "string",
12422
12454
  "in": "body"
12423
12455
  },
12424
12456
  {
12425
- "name": "description",
12426
- "description": "Optional description",
12457
+ "name": "content",
12458
+ "description": "The text content of the memory",
12459
+ "required": true,
12460
+ "type": "string",
12461
+ "in": "body"
12462
+ },
12463
+ {
12464
+ "name": "source_type",
12465
+ "description": "Whether there is a source to point at. `conversation` requires `source_id`; `manual` rejects it.",
12466
+ "required": false,
12467
+ "type": "string",
12468
+ "in": "body"
12469
+ },
12470
+ {
12471
+ "name": "source_id",
12472
+ "description": "The conversation this fact was learned in. Required when `source_type` is `conversation`, and rejected otherwise.",
12427
12473
  "required": false,
12428
12474
  "type": "string",
12429
12475
  "in": "body"
12430
12476
  },
12431
12477
  {
12432
12478
  "name": "tags",
12433
- "description": "Optional key-value tags. Scopes the memory in knowledge search, where every requested pair must match exactly.",
12479
+ "description": "Per-memory key-value tags, used for memory-granularity filtering by `tags` in search-knowledge.",
12434
12480
  "required": false,
12435
12481
  "type": "string",
12436
12482
  "in": "body"
12483
+ },
12484
+ {
12485
+ "name": "metadata",
12486
+ "description": "Arbitrary structured metadata attached to the memory",
12487
+ "required": false,
12488
+ "type": "object",
12489
+ "in": "body"
12490
+ },
12491
+ {
12492
+ "name": "duplicate_threshold",
12493
+ "description": "Cosine similarity score at or above which the incoming content is considered a duplicate of an existing memory and skipped (default 0.95). Below it the memory is always created.",
12494
+ "required": false,
12495
+ "type": "number",
12496
+ "in": "body"
12437
12497
  }
12438
12498
  ]
12439
12499
  },
12440
12500
  "get-memory": {
12441
12501
  serviceClass: "Memories",
12442
12502
  operationId: "getMemory",
12443
- description: "Returns a single memory configuration by ID",
12503
+ description: "Returns a single memory by ID",
12444
12504
  moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
12445
12505
  httpMethod: "get",
12446
12506
  pathParams: ["project_id", "memory_id"],
@@ -12462,7 +12522,7 @@ const routes = {
12462
12522
  "update-memory": {
12463
12523
  serviceClass: "Memories",
12464
12524
  operationId: "updateMemory",
12465
- description: "Updates an existing memory configuration",
12525
+ description: "Updates an existing memory. Regenerates the embedding if content changes.",
12466
12526
  moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
12467
12527
  httpMethod: "put",
12468
12528
  pathParams: ["project_id", "memory_id"],
@@ -12483,24 +12543,24 @@ const routes = {
12483
12543
  "in": "path"
12484
12544
  },
12485
12545
  {
12486
- "name": "name",
12487
- "description": "Memory name",
12546
+ "name": "content",
12547
+ "description": "Updated text content",
12488
12548
  "required": false,
12489
12549
  "type": "string",
12490
12550
  "in": "body"
12491
12551
  },
12492
12552
  {
12493
- "name": "description",
12494
- "description": "Optional description",
12553
+ "name": "tags",
12554
+ "description": "Replaces the memory's tags. Pass null or an empty object to clear.",
12495
12555
  "required": false,
12496
12556
  "type": "string",
12497
12557
  "in": "body"
12498
12558
  },
12499
12559
  {
12500
- "name": "tags",
12501
- "description": "Optional key-value tags. Replaces the stored bag; `null` clears it.",
12560
+ "name": "metadata",
12561
+ "description": "Replaces the memory's metadata. Pass null to clear.",
12502
12562
  "required": false,
12503
- "type": "string",
12563
+ "type": "object",
12504
12564
  "in": "body"
12505
12565
  }
12506
12566
  ]
@@ -12508,7 +12568,7 @@ const routes = {
12508
12568
  "delete-memory": {
12509
12569
  serviceClass: "Memories",
12510
12570
  operationId: "deleteMemory",
12511
- description: "Deletes a memory configuration",
12571
+ description: "Deletes a memory",
12512
12572
  moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
12513
12573
  httpMethod: "delete",
12514
12574
  pathParams: ["project_id", "memory_id"],
@@ -12593,19 +12653,17 @@ const routes = {
12593
12653
  "in": "path"
12594
12654
  }]
12595
12655
  },
12596
- "list-memory-entries": {
12597
- serviceClass: "MemoryEntries",
12598
- operationId: "listMemoryEntries",
12599
- description: "Returns all entries in a memory container",
12600
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
12656
+ "list-memory-stores": {
12657
+ serviceClass: "MemoryStores",
12658
+ operationId: "listMemoryStores",
12659
+ description: "Returns a list of memory store configurations for a project",
12660
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-stores",
12601
12661
  httpMethod: "get",
12602
12662
  pathParams: ["project_id"],
12603
12663
  queryParams: [
12604
- "memory_id",
12605
12664
  "tags",
12606
12665
  "limit",
12607
- "offset",
12608
- "include_invalidated"
12666
+ "offset"
12609
12667
  ],
12610
12668
  flags: [
12611
12669
  {
@@ -12615,13 +12673,6 @@ const routes = {
12615
12673
  "type": "string",
12616
12674
  "in": "path"
12617
12675
  },
12618
- {
12619
- "name": "memory_id",
12620
- "description": "Memory container to list entries from (mem_...)",
12621
- "required": true,
12622
- "type": "string",
12623
- "in": "query"
12624
- },
12625
12676
  {
12626
12677
  "name": "tags",
12627
12678
  "description": "Filter by tag pairs, written `key:value` (split on the first colon, so a value may contain colons). Repeat the parameter for several pairs; **all** must be present with exactly that value.\n",
@@ -12642,21 +12693,14 @@ const routes = {
12642
12693
  "required": false,
12643
12694
  "type": "integer",
12644
12695
  "in": "query"
12645
- },
12646
- {
12647
- "name": "include_invalidated",
12648
- "description": "Include invalidated (superseded) entries. They are excluded by default; set this to audit the supersede history.",
12649
- "required": false,
12650
- "type": "boolean",
12651
- "in": "query"
12652
12696
  }
12653
12697
  ]
12654
12698
  },
12655
- "create-memory-entry": {
12656
- serviceClass: "MemoryEntries",
12657
- operationId: "createMemoryEntry",
12658
- description: "Creates a new entry in the specified memory container. Automatically generates an embedding for semantic search, and skips the write when an existing entry is a near-duplicate (see `duplicate_threshold`). A merely similar fact is stored as its own entry: this path has no agent context and therefore no model to consolidate two facts into one.",
12659
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
12699
+ "create-memory-store": {
12700
+ serviceClass: "MemoryStores",
12701
+ operationId: "createMemoryStore",
12702
+ description: "Creates a new memory store configuration in a project",
12703
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-stores",
12660
12704
  httpMethod: "post",
12661
12705
  pathParams: ["project_id"],
12662
12706
  queryParams: [],
@@ -12669,56 +12713,35 @@ const routes = {
12669
12713
  "in": "path"
12670
12714
  },
12671
12715
  {
12672
- "name": "memory_id",
12673
- "description": "Memory container to add the entry to (mem_...)",
12674
- "required": true,
12675
- "type": "string",
12676
- "in": "body"
12677
- },
12678
- {
12679
- "name": "content",
12680
- "description": "The text content of the memory entry",
12716
+ "name": "name",
12717
+ "description": "Memory store name",
12681
12718
  "required": true,
12682
12719
  "type": "string",
12683
12720
  "in": "body"
12684
12721
  },
12685
12722
  {
12686
- "name": "source_type",
12687
- "description": "How this entry was created",
12723
+ "name": "description",
12724
+ "description": "Optional description",
12688
12725
  "required": false,
12689
12726
  "type": "string",
12690
12727
  "in": "body"
12691
12728
  },
12692
12729
  {
12693
12730
  "name": "tags",
12694
- "description": "Per-entry key-value tags, used for entry-granularity filtering by `tags` in search-knowledge.",
12731
+ "description": "Optional key-value tags. Scopes the memory store in knowledge search, where every requested pair must match exactly.",
12695
12732
  "required": false,
12696
12733
  "type": "string",
12697
12734
  "in": "body"
12698
- },
12699
- {
12700
- "name": "metadata",
12701
- "description": "Arbitrary structured metadata attached to the entry",
12702
- "required": false,
12703
- "type": "object",
12704
- "in": "body"
12705
- },
12706
- {
12707
- "name": "duplicate_threshold",
12708
- "description": "Cosine similarity score at or above which the incoming content is considered a duplicate of an existing entry and skipped (default 0.95). Below it the entry is always created.",
12709
- "required": false,
12710
- "type": "number",
12711
- "in": "body"
12712
12735
  }
12713
12736
  ]
12714
12737
  },
12715
- "get-memory-entry": {
12716
- serviceClass: "MemoryEntries",
12717
- operationId: "getMemoryEntry",
12718
- description: "Returns a single memory entry by ID",
12719
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
12738
+ "get-memory-store": {
12739
+ serviceClass: "MemoryStores",
12740
+ operationId: "getMemoryStore",
12741
+ description: "Returns a single memory store configuration by ID",
12742
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-stores",
12720
12743
  httpMethod: "get",
12721
- pathParams: ["project_id", "entry_id"],
12744
+ pathParams: ["project_id", "memory_store_id"],
12722
12745
  queryParams: [],
12723
12746
  flags: [{
12724
12747
  "name": "project_id",
@@ -12727,20 +12750,20 @@ const routes = {
12727
12750
  "type": "string",
12728
12751
  "in": "path"
12729
12752
  }, {
12730
- "name": "entry_id",
12753
+ "name": "memory_store_id",
12731
12754
  "description": "",
12732
12755
  "required": true,
12733
12756
  "type": "string",
12734
12757
  "in": "path"
12735
12758
  }]
12736
12759
  },
12737
- "update-memory-entry": {
12738
- serviceClass: "MemoryEntries",
12739
- operationId: "updateMemoryEntry",
12740
- description: "Updates an existing memory entry. Regenerates the embedding if content changes.",
12741
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
12760
+ "update-memory-store": {
12761
+ serviceClass: "MemoryStores",
12762
+ operationId: "updateMemoryStore",
12763
+ description: "Updates an existing memory store configuration",
12764
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-stores",
12742
12765
  httpMethod: "put",
12743
- pathParams: ["project_id", "entry_id"],
12766
+ pathParams: ["project_id", "memory_store_id"],
12744
12767
  queryParams: [],
12745
12768
  flags: [
12746
12769
  {
@@ -12751,42 +12774,42 @@ const routes = {
12751
12774
  "in": "path"
12752
12775
  },
12753
12776
  {
12754
- "name": "entry_id",
12777
+ "name": "memory_store_id",
12755
12778
  "description": "",
12756
12779
  "required": true,
12757
12780
  "type": "string",
12758
12781
  "in": "path"
12759
12782
  },
12760
12783
  {
12761
- "name": "content",
12762
- "description": "Updated text content",
12784
+ "name": "name",
12785
+ "description": "Memory store name",
12763
12786
  "required": false,
12764
12787
  "type": "string",
12765
12788
  "in": "body"
12766
12789
  },
12767
12790
  {
12768
- "name": "tags",
12769
- "description": "Replaces the entry's tags. Pass null or an empty object to clear.",
12791
+ "name": "description",
12792
+ "description": "Optional description",
12770
12793
  "required": false,
12771
12794
  "type": "string",
12772
12795
  "in": "body"
12773
12796
  },
12774
12797
  {
12775
- "name": "metadata",
12776
- "description": "Replaces the entry's metadata. Pass null to clear.",
12798
+ "name": "tags",
12799
+ "description": "Optional key-value tags. Replaces the stored bag; `null` clears it.",
12777
12800
  "required": false,
12778
- "type": "object",
12801
+ "type": "string",
12779
12802
  "in": "body"
12780
12803
  }
12781
12804
  ]
12782
12805
  },
12783
- "delete-memory-entry": {
12784
- serviceClass: "MemoryEntries",
12785
- operationId: "deleteMemoryEntry",
12786
- description: "Deletes a memory entry",
12787
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
12806
+ "delete-memory-store": {
12807
+ serviceClass: "MemoryStores",
12808
+ operationId: "deleteMemoryStore",
12809
+ description: "Deletes a memory store configuration",
12810
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-stores",
12788
12811
  httpMethod: "delete",
12789
- pathParams: ["project_id", "entry_id"],
12812
+ pathParams: ["project_id", "memory_store_id"],
12790
12813
  queryParams: [],
12791
12814
  flags: [{
12792
12815
  "name": "project_id",
@@ -12795,20 +12818,20 @@ const routes = {
12795
12818
  "type": "string",
12796
12819
  "in": "path"
12797
12820
  }, {
12798
- "name": "entry_id",
12821
+ "name": "memory_store_id",
12799
12822
  "description": "",
12800
12823
  "required": true,
12801
12824
  "type": "string",
12802
12825
  "in": "path"
12803
12826
  }]
12804
12827
  },
12805
- "get-memory-entry-tags": {
12806
- serviceClass: "MemoryEntries",
12807
- operationId: "getMemoryEntryTags",
12808
- description: "Returns all tags attached to the memory entry",
12809
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
12828
+ "get-memory-store-tags": {
12829
+ serviceClass: "MemoryStores",
12830
+ operationId: "getMemoryStoreTags",
12831
+ description: "Returns all tags attached to the memory store",
12832
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-stores",
12810
12833
  httpMethod: "get",
12811
- pathParams: ["project_id", "entry_id"],
12834
+ pathParams: ["project_id", "memory_store_id"],
12812
12835
  queryParams: [],
12813
12836
  flags: [{
12814
12837
  "name": "project_id",
@@ -12817,20 +12840,20 @@ const routes = {
12817
12840
  "type": "string",
12818
12841
  "in": "path"
12819
12842
  }, {
12820
- "name": "entry_id",
12821
- "description": "Memory entry ID",
12843
+ "name": "memory_store_id",
12844
+ "description": "Memory store ID",
12822
12845
  "required": true,
12823
12846
  "type": "string",
12824
12847
  "in": "path"
12825
12848
  }]
12826
12849
  },
12827
- "replace-memory-entry-tags": {
12828
- serviceClass: "MemoryEntries",
12829
- operationId: "replaceMemoryEntryTags",
12830
- description: "Replaces all tags on the memory entry with the provided tags (not merged)",
12831
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
12850
+ "replace-memory-store-tags": {
12851
+ serviceClass: "MemoryStores",
12852
+ operationId: "replaceMemoryStoreTags",
12853
+ description: "Replaces all tags on the memory store with the provided tags (not merged)",
12854
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-stores",
12832
12855
  httpMethod: "put",
12833
- pathParams: ["project_id", "entry_id"],
12856
+ pathParams: ["project_id", "memory_store_id"],
12834
12857
  queryParams: [],
12835
12858
  flags: [{
12836
12859
  "name": "project_id",
@@ -12839,20 +12862,20 @@ const routes = {
12839
12862
  "type": "string",
12840
12863
  "in": "path"
12841
12864
  }, {
12842
- "name": "entry_id",
12843
- "description": "Memory entry ID",
12865
+ "name": "memory_store_id",
12866
+ "description": "Memory store ID",
12844
12867
  "required": true,
12845
12868
  "type": "string",
12846
12869
  "in": "path"
12847
12870
  }]
12848
12871
  },
12849
- "merge-memory-entry-tags": {
12850
- serviceClass: "MemoryEntries",
12851
- operationId: "mergeMemoryEntryTags",
12852
- description: "Merges provided tags into the memory entry's existing tags (existing tags are preserved unless overridden)",
12853
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
12872
+ "merge-memory-store-tags": {
12873
+ serviceClass: "MemoryStores",
12874
+ operationId: "mergeMemoryStoreTags",
12875
+ description: "Merges provided tags into the memory store's existing tags (existing tags are preserved unless overridden)",
12876
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-stores",
12854
12877
  httpMethod: "patch",
12855
- pathParams: ["project_id", "entry_id"],
12878
+ pathParams: ["project_id", "memory_store_id"],
12856
12879
  queryParams: [],
12857
12880
  flags: [{
12858
12881
  "name": "project_id",
@@ -12861,8 +12884,8 @@ const routes = {
12861
12884
  "type": "string",
12862
12885
  "in": "path"
12863
12886
  }, {
12864
- "name": "entry_id",
12865
- "description": "Memory entry ID",
12887
+ "name": "memory_store_id",
12888
+ "description": "Memory store ID",
12866
12889
  "required": true,
12867
12890
  "type": "string",
12868
12891
  "in": "path"
@@ -14450,7 +14473,7 @@ const routes = {
14450
14473
  "create-quota": {
14451
14474
  serviceClass: "Quotas",
14452
14475
  operationId: "createQuota",
14453
- description: "Creates a project-scoped quota. `requests` is valid for `scope: project`/`api_key`; `tokens` and `cost_usd` are valid for `scope: project`/`agent`/`actor`; `storage_bytes` is valid for `scope: project` only. Any other scope/metric pair is rejected with 400 (no attribution exists to enforce it). An `actor` quota caps one end user's spend, matched from the generation's session; a null `scope_ref` means one budget *per* actor rather than a pooled project total. A `cost_usd` quota may name one `meter_type` to cap; omitting it caps every priced meter. A duplicate quota (same project, scope, scope_ref, metric, window, meter_type) is rejected with 409. `storage_bytes` caps a stored total rather than a windowed one, so it takes `window: current` and every other metric refuses that value (400 either way). It is enforced at the corpus write paths — file upload and create, document create, document ingest and re-ingest, memory-entry create — with `409 QUOTA_STORAGE_EXCEEDED` and no `Retry-After`, since no window reset clears a footprint.",
14476
+ description: "Creates a project-scoped quota. `requests` is valid for `scope: project`/`api_key`; `tokens` and `cost_usd` are valid for `scope: project`/`agent`/`actor`; `storage_bytes` is valid for `scope: project` only. Any other scope/metric pair is rejected with 400 (no attribution exists to enforce it). An `actor` quota caps one end user's spend, matched from the generation's session; a null `scope_ref` means one budget *per* actor rather than a pooled project total. A `cost_usd` quota may name one `meter_type` to cap; omitting it caps every priced meter. A duplicate quota (same project, scope, scope_ref, metric, window, meter_type) is rejected with 409. `storage_bytes` caps a stored total rather than a windowed one, so it takes `window: current` and every other metric refuses that value (400 either way). It is enforced at the corpus write paths — file upload and create, document create, document ingest and re-ingest, memory create — with `409 QUOTA_STORAGE_EXCEEDED` and no `Retry-After`, since no window reset clears a footprint.",
14454
14477
  moduleDocsUrl: "https://docs.naturali.ai/docs/modules/quotas",
14455
14478
  httpMethod: "post",
14456
14479
  pathParams: ["project_id"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturali/cli",
3
- "version": "0.127.10",
3
+ "version": "0.128.0",
4
4
  "description": "Command-line interface for the naturali.ai API, generated from its OpenAPI specs",
5
5
  "type": "module",
6
6
  "bin": {
@@ -24,7 +24,7 @@
24
24
  "commander": "^15.0.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@naturali/sdk": "0.127.10",
27
+ "@naturali/sdk": "0.128.0",
28
28
  "@ttoss/openapi-codegen": "^0.3.0",
29
29
  "@types/node": "^26.5.1",
30
30
  "tsdown": "^0.23.0",