@naturali/cli 0.73.2 → 0.75.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 +1617 -161
  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.73.2";
17
+ var version = "0.75.0";
18
18
  //#endregion
19
19
  //#region ../sdk/src/generated/core/bodySerializer.gen.ts
20
20
  const serializeFormDataPair = (data, key, value) => {
@@ -1402,6 +1402,71 @@ var ApiKeys = class {
1402
1402
  });
1403
1403
  }
1404
1404
  };
1405
+ var Approvals = class {
1406
+ /**
1407
+ * List approval items
1408
+ *
1409
+ * Returns approval items for a project, filterable by status, origin, and expiry.
1410
+ */
1411
+ static listApprovals(options) {
1412
+ return (options.client ?? client).get({
1413
+ url: "/v1/projects/{project_id}/approvals",
1414
+ ...options
1415
+ });
1416
+ }
1417
+ /**
1418
+ * List recurring approval groups
1419
+ *
1420
+ * Read-only rollup answering "what keeps coming back?" — groups items by `dedup_key` and returns those recurring at least `min_count` times, most-recurrent first. Each group carries the ordered item chain (via `previous_item_id`) and the resolution reasons in order, so a human can read recurring rejections side by side and graduate the pattern into a guardrail `deny`. Exact-key grouping only; no cluster state is stored.
1421
+ */
1422
+ static listApprovalRecurrences(options) {
1423
+ return (options.client ?? client).get({
1424
+ url: "/v1/projects/{project_id}/approvals/recurrences",
1425
+ ...options
1426
+ });
1427
+ }
1428
+ /**
1429
+ * Get an approval item
1430
+ *
1431
+ * Returns a single approval item with its full evidence.
1432
+ */
1433
+ static getApproval(options) {
1434
+ return (options.client ?? client).get({
1435
+ url: "/v1/projects/{project_id}/approvals/{approval_id}",
1436
+ ...options
1437
+ });
1438
+ }
1439
+ /**
1440
+ * Approve an approval item
1441
+ *
1442
+ * Approves the item. Optionally supply edited `arguments` to replace the proposed arguments (edit-then-approve); the original is preserved on the item. Expiry is re-checked at decision time — an expired item can never be approved.
1443
+ */
1444
+ static approveApproval(options) {
1445
+ return (options.client ?? client).post({
1446
+ url: "/v1/projects/{project_id}/approvals/{approval_id}/approve",
1447
+ ...options,
1448
+ headers: {
1449
+ "Content-Type": "application/json",
1450
+ ...options.headers
1451
+ }
1452
+ });
1453
+ }
1454
+ /**
1455
+ * Reject an approval item
1456
+ *
1457
+ * Rejects the item. A reason is required and preserved on the item.
1458
+ */
1459
+ static rejectApproval(options) {
1460
+ return (options.client ?? client).post({
1461
+ url: "/v1/projects/{project_id}/approvals/{approval_id}/reject",
1462
+ ...options,
1463
+ headers: {
1464
+ "Content-Type": "application/json",
1465
+ ...options.headers
1466
+ }
1467
+ });
1468
+ }
1469
+ };
1405
1470
  var Assistant = class {
1406
1471
  /**
1407
1472
  * List linked identities
@@ -2157,6 +2222,56 @@ var Evaluations = class {
2157
2222
  });
2158
2223
  }
2159
2224
  };
2225
+ var Exceptions = class {
2226
+ /**
2227
+ * List exception items
2228
+ *
2229
+ * Returns exception items for a project, filterable by status, severity, and kind.
2230
+ */
2231
+ static listExceptions(options) {
2232
+ return (options.client ?? client).get({
2233
+ url: "/v1/projects/{project_id}/exceptions",
2234
+ ...options
2235
+ });
2236
+ }
2237
+ /**
2238
+ * Get an exception item
2239
+ *
2240
+ * Returns a single exception item with its full detail.
2241
+ */
2242
+ static getException(options) {
2243
+ return (options.client ?? client).get({
2244
+ url: "/v1/projects/{project_id}/exceptions/{exception_id}",
2245
+ ...options
2246
+ });
2247
+ }
2248
+ /**
2249
+ * Acknowledge an exception item
2250
+ *
2251
+ * Moves the item to `acknowledged` ("someone is on it"), recording who. A no-op that returns the item unchanged when already acknowledged; rejected when already resolved.
2252
+ */
2253
+ static acknowledgeException(options) {
2254
+ return (options.client ?? client).post({
2255
+ url: "/v1/projects/{project_id}/exceptions/{exception_id}/acknowledge",
2256
+ ...options
2257
+ });
2258
+ }
2259
+ /**
2260
+ * Resolve an exception item
2261
+ *
2262
+ * Moves the item to `resolved` ("fixed"), recording who and an optional note.
2263
+ */
2264
+ static resolveException(options) {
2265
+ return (options.client ?? client).post({
2266
+ url: "/v1/projects/{project_id}/exceptions/{exception_id}/resolve",
2267
+ ...options,
2268
+ headers: {
2269
+ "Content-Type": "application/json",
2270
+ ...options.headers
2271
+ }
2272
+ });
2273
+ }
2274
+ };
2160
2275
  var Files = class {
2161
2276
  /**
2162
2277
  * List all files
@@ -2392,6 +2507,131 @@ var Generations = class {
2392
2507
  });
2393
2508
  }
2394
2509
  };
2510
+ var Guardrails = class {
2511
+ /**
2512
+ * List guardrails
2513
+ *
2514
+ * Returns all guardrails in the project.
2515
+ */
2516
+ static listGuardrails(options) {
2517
+ return (options.client ?? client).get({
2518
+ url: "/v1/projects/{project_id}/guardrails",
2519
+ ...options
2520
+ });
2521
+ }
2522
+ /**
2523
+ * Create a guardrail
2524
+ *
2525
+ * Creates a new guardrail in the project, archiving its document as version 1. The `document` is validated on write: `class` must be a literal (A/B/C/D) or a JSON Logic expression, and every variable it (and `guard`) reference must resolve to the `args.*` / `context.*` / `runtime.*` namespaces — an out-of-catalog `runtime.*` key is rejected with 400.
2526
+ *
2527
+ */
2528
+ static createGuardrail(options) {
2529
+ return (options.client ?? client).post({
2530
+ url: "/v1/projects/{project_id}/guardrails",
2531
+ ...options,
2532
+ headers: {
2533
+ "Content-Type": "application/json",
2534
+ ...options.headers
2535
+ }
2536
+ });
2537
+ }
2538
+ /**
2539
+ * Delete a guardrail
2540
+ *
2541
+ * Deletes a guardrail and its archived versions by ID.
2542
+ */
2543
+ static deleteGuardrail(options) {
2544
+ return (options.client ?? client).delete({
2545
+ url: "/v1/projects/{project_id}/guardrails/{guardrail_id}",
2546
+ ...options
2547
+ });
2548
+ }
2549
+ /**
2550
+ * Get a guardrail
2551
+ *
2552
+ * Returns a single guardrail by ID.
2553
+ */
2554
+ static getGuardrail(options) {
2555
+ return (options.client ?? client).get({
2556
+ url: "/v1/projects/{project_id}/guardrails/{guardrail_id}",
2557
+ ...options
2558
+ });
2559
+ }
2560
+ /**
2561
+ * Update a guardrail
2562
+ *
2563
+ * Updates an existing guardrail. A `document` write that actually changes the policy increments `version` and archives the new document as a GuardrailVersion; metadata-only edits (name / description / context), and re-writing the document the guardrail already holds, leave the version untouched.
2564
+ *
2565
+ */
2566
+ static updateGuardrail(options) {
2567
+ return (options.client ?? client).patch({
2568
+ url: "/v1/projects/{project_id}/guardrails/{guardrail_id}",
2569
+ ...options,
2570
+ headers: {
2571
+ "Content-Type": "application/json",
2572
+ ...options.headers
2573
+ }
2574
+ });
2575
+ }
2576
+ /**
2577
+ * List a guardrail's config versions
2578
+ *
2579
+ * Returns the guardrail's archived configurations, newest first. A version is written on create and on every subsequent write that changes the policy `document` — through the REST API or a formation apply alike. Metadata-only edits (name, description, context binding) do not archive a version. See [Versioning](/docs/modules/guardrails#versioning).
2580
+ *
2581
+ */
2582
+ static listGuardrailVersions(options) {
2583
+ return (options.client ?? client).get({
2584
+ url: "/v1/projects/{project_id}/guardrails/{guardrail_id}/versions",
2585
+ ...options
2586
+ });
2587
+ }
2588
+ /**
2589
+ * Fetch an archived guardrail version
2590
+ *
2591
+ * Returns the exact configuration — and so the exact `document` — that governed at a given version. Approval items, activity entries, and exceptions record the version that governed them, so the audit chain survives edits.
2592
+ *
2593
+ */
2594
+ static getGuardrailVersion(options) {
2595
+ return (options.client ?? client).get({
2596
+ url: "/v1/projects/{project_id}/guardrails/{guardrail_id}/versions/{version}",
2597
+ ...options
2598
+ });
2599
+ }
2600
+ /**
2601
+ * Restore an archived guardrail config
2602
+ *
2603
+ * Writes an archived version's `document` back as the guardrail's live policy, which archives it again as a **new** version rather than rewinding the counter — so an approval item or exception citing any version in between still resolves.
2604
+ *
2605
+ * The restore runs through the ordinary update path, so the archived document is re-validated; restoring the policy the guardrail already holds is a no-op and archives nothing.
2606
+ *
2607
+ */
2608
+ static restoreGuardrailVersion(options) {
2609
+ return (options.client ?? client).post({
2610
+ url: "/v1/projects/{project_id}/guardrails/{guardrail_id}/versions/{version}/restore",
2611
+ ...options,
2612
+ headers: {
2613
+ "Content-Type": "application/json",
2614
+ ...options.headers
2615
+ }
2616
+ });
2617
+ }
2618
+ /**
2619
+ * Dry-run evaluate a guardrail
2620
+ *
2621
+ * Runs the full evaluation pipeline — the `class` expression, the guard, the context tool per `context_mode`, live `runtime.*` resolution — against caller-supplied `args` and `guardrail_context`, and returns the exact `guardrail_evaluation` record a real call would produce. Nothing executes, no approval item is filed, and no activity entry is written. This is the adoption path: preview a document's decisions against production-shaped calls before attaching it — or before editing a widely-attached one. Pass an optional `tool_id` to resolve `runtime.tool.*`.
2622
+ *
2623
+ */
2624
+ static evaluateGuardrail(options) {
2625
+ return (options.client ?? client).post({
2626
+ url: "/v1/projects/{project_id}/guardrails/{guardrail_id}/evaluate",
2627
+ ...options,
2628
+ headers: {
2629
+ "Content-Type": "application/json",
2630
+ ...options.headers
2631
+ }
2632
+ });
2633
+ }
2634
+ };
2395
2635
  var IngestionRules = class {
2396
2636
  /**
2397
2637
  * List ingestion rules
@@ -2474,6 +2714,136 @@ var Knowledge = class {
2474
2714
  });
2475
2715
  }
2476
2716
  };
2717
+ var Memories = class {
2718
+ /**
2719
+ * List memories
2720
+ *
2721
+ * Returns a list of memory configurations for a project
2722
+ */
2723
+ static listMemories(options) {
2724
+ return (options.client ?? client).get({
2725
+ url: "/v1/projects/{project_id}/memories",
2726
+ ...options
2727
+ });
2728
+ }
2729
+ /**
2730
+ * Create a memory
2731
+ *
2732
+ * Creates a new memory configuration in a project
2733
+ */
2734
+ static createMemory(options) {
2735
+ return (options.client ?? client).post({
2736
+ url: "/v1/projects/{project_id}/memories",
2737
+ ...options,
2738
+ headers: {
2739
+ "Content-Type": "application/json",
2740
+ ...options.headers
2741
+ }
2742
+ });
2743
+ }
2744
+ /**
2745
+ * Delete a memory
2746
+ *
2747
+ * Deletes a memory configuration
2748
+ */
2749
+ static deleteMemory(options) {
2750
+ return (options.client ?? client).delete({
2751
+ url: "/v1/projects/{project_id}/memories/{memory_id}",
2752
+ ...options
2753
+ });
2754
+ }
2755
+ /**
2756
+ * Get a memory
2757
+ *
2758
+ * Returns a single memory configuration by ID
2759
+ */
2760
+ static getMemory(options) {
2761
+ return (options.client ?? client).get({
2762
+ url: "/v1/projects/{project_id}/memories/{memory_id}",
2763
+ ...options
2764
+ });
2765
+ }
2766
+ /**
2767
+ * Update a memory
2768
+ *
2769
+ * Updates an existing memory configuration
2770
+ */
2771
+ static updateMemory(options) {
2772
+ return (options.client ?? client).put({
2773
+ url: "/v1/projects/{project_id}/memories/{memory_id}",
2774
+ ...options,
2775
+ headers: {
2776
+ "Content-Type": "application/json",
2777
+ ...options.headers
2778
+ }
2779
+ });
2780
+ }
2781
+ };
2782
+ var MemoryEntries = class {
2783
+ /**
2784
+ * List memory entries
2785
+ *
2786
+ * Returns all entries in a memory container
2787
+ */
2788
+ static listMemoryEntries(options) {
2789
+ return (options.client ?? client).get({
2790
+ url: "/v1/projects/{project_id}/memory-entries",
2791
+ ...options
2792
+ });
2793
+ }
2794
+ /**
2795
+ * Create a memory entry
2796
+ *
2797
+ * 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.
2798
+ */
2799
+ static createMemoryEntry(options) {
2800
+ return (options.client ?? client).post({
2801
+ url: "/v1/projects/{project_id}/memory-entries",
2802
+ ...options,
2803
+ headers: {
2804
+ "Content-Type": "application/json",
2805
+ ...options.headers
2806
+ }
2807
+ });
2808
+ }
2809
+ /**
2810
+ * Delete a memory entry
2811
+ *
2812
+ * Deletes a memory entry
2813
+ */
2814
+ static deleteMemoryEntry(options) {
2815
+ return (options.client ?? client).delete({
2816
+ url: "/v1/projects/{project_id}/memory-entries/{entry_id}",
2817
+ ...options
2818
+ });
2819
+ }
2820
+ /**
2821
+ * Get a memory entry
2822
+ *
2823
+ * Returns a single memory entry by ID
2824
+ */
2825
+ static getMemoryEntry(options) {
2826
+ return (options.client ?? client).get({
2827
+ url: "/v1/projects/{project_id}/memory-entries/{entry_id}",
2828
+ ...options
2829
+ });
2830
+ }
2831
+ /**
2832
+ * Update a memory entry
2833
+ *
2834
+ * Updates an existing memory entry. Regenerates the embedding if content changes.
2835
+ */
2836
+ static updateMemoryEntry(options) {
2837
+ return (options.client ?? client).put({
2838
+ url: "/v1/projects/{project_id}/memory-entries/{entry_id}",
2839
+ ...options,
2840
+ headers: {
2841
+ "Content-Type": "application/json",
2842
+ ...options.headers
2843
+ }
2844
+ });
2845
+ }
2846
+ };
2477
2847
  var ModelRoutes = class {
2478
2848
  /**
2479
2849
  * List model routes
@@ -3802,6 +4172,7 @@ var NaturaliClient = class {
3802
4172
  agentVersions;
3803
4173
  aiProviders;
3804
4174
  apiKeys;
4175
+ approvals;
3805
4176
  assistant;
3806
4177
  channels;
3807
4178
  auth;
@@ -3809,10 +4180,14 @@ var NaturaliClient = class {
3809
4180
  documents;
3810
4181
  embeddings;
3811
4182
  evaluations;
4183
+ exceptions;
3812
4184
  files;
3813
4185
  generations;
4186
+ guardrails;
3814
4187
  ingestionRules;
3815
4188
  knowledge;
4189
+ memories;
4190
+ memoryEntries;
3816
4191
  modelRoutes;
3817
4192
  models;
3818
4193
  orchestrations;
@@ -3841,6 +4216,7 @@ var NaturaliClient = class {
3841
4216
  this.agentVersions = bindResource(AgentVersions, this.http);
3842
4217
  this.aiProviders = bindResource(AiProviders, this.http);
3843
4218
  this.apiKeys = bindResource(ApiKeys, this.http);
4219
+ this.approvals = bindResource(Approvals, this.http);
3844
4220
  this.assistant = bindResource(Assistant, this.http);
3845
4221
  this.channels = bindResource(Channels, this.http);
3846
4222
  this.auth = bindResource(Auth, this.http);
@@ -3848,10 +4224,14 @@ var NaturaliClient = class {
3848
4224
  this.documents = bindResource(Documents, this.http);
3849
4225
  this.embeddings = bindResource(Embeddings, this.http);
3850
4226
  this.evaluations = bindResource(Evaluations, this.http);
4227
+ this.exceptions = bindResource(Exceptions, this.http);
3851
4228
  this.files = bindResource(Files, this.http);
3852
4229
  this.generations = bindResource(Generations, this.http);
4230
+ this.guardrails = bindResource(Guardrails, this.http);
3853
4231
  this.ingestionRules = bindResource(IngestionRules, this.http);
3854
4232
  this.knowledge = bindResource(Knowledge, this.http);
4233
+ this.memories = bindResource(Memories, this.http);
4234
+ this.memoryEntries = bindResource(MemoryEntries, this.http);
3855
4235
  this.modelRoutes = bindResource(ModelRoutes, this.http);
3856
4236
  this.models = bindResource(Models, this.http);
3857
4237
  this.orchestrations = bindResource(Orchestrations, this.http);
@@ -3875,6 +4255,7 @@ var src_exports = /* @__PURE__ */ __exportAll({
3875
4255
  Agents: () => Agents,
3876
4256
  AiProviders: () => AiProviders,
3877
4257
  ApiKeys: () => ApiKeys,
4258
+ Approvals: () => Approvals,
3878
4259
  Assistant: () => Assistant,
3879
4260
  Auth: () => Auth,
3880
4261
  Channels: () => Channels,
@@ -3882,10 +4263,14 @@ var src_exports = /* @__PURE__ */ __exportAll({
3882
4263
  Documents: () => Documents,
3883
4264
  Embeddings: () => Embeddings,
3884
4265
  Evaluations: () => Evaluations,
4266
+ Exceptions: () => Exceptions,
3885
4267
  Files: () => Files,
3886
4268
  Generations: () => Generations,
4269
+ Guardrails: () => Guardrails,
3887
4270
  IngestionRules: () => IngestionRules,
3888
4271
  Knowledge: () => Knowledge,
4272
+ Memories: () => Memories,
4273
+ MemoryEntries: () => MemoryEntries,
3889
4274
  ModelRoutes: () => ModelRoutes,
3890
4275
  Models: () => Models,
3891
4276
  NaturaliClient: () => NaturaliClient,
@@ -6125,10 +6510,206 @@ const routes = {
6125
6510
  "in": "path"
6126
6511
  }]
6127
6512
  },
6128
- "list-assistant-grants": {
6129
- serviceClass: "Assistant",
6130
- operationId: "listAssistantGrants",
6131
- description: "Lists the caller's assistant grants one per channel identity that may operate their account. Grants belong to the account, so this is the caller's own set regardless of which projects they own.",
6513
+ "list-approvals": {
6514
+ serviceClass: "Approvals",
6515
+ operationId: "listApprovals",
6516
+ description: "Returns approval items for a project, filterable by status, origin, and expiry.",
6517
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/approvals",
6518
+ httpMethod: "get",
6519
+ pathParams: ["project_id"],
6520
+ queryParams: [
6521
+ "status",
6522
+ "origin",
6523
+ "expires_before",
6524
+ "limit",
6525
+ "offset"
6526
+ ],
6527
+ flags: [
6528
+ {
6529
+ "name": "project_id",
6530
+ "description": "Project public ID (proj_ prefix).",
6531
+ "required": true,
6532
+ "type": "string",
6533
+ "in": "path"
6534
+ },
6535
+ {
6536
+ "name": "status",
6537
+ "description": "Filter by lifecycle status",
6538
+ "required": false,
6539
+ "type": "string",
6540
+ "in": "query"
6541
+ },
6542
+ {
6543
+ "name": "origin",
6544
+ "description": "Filter by producer origin",
6545
+ "required": false,
6546
+ "type": "string",
6547
+ "in": "query"
6548
+ },
6549
+ {
6550
+ "name": "expires_before",
6551
+ "description": "Return only items expiring at or before this timestamp",
6552
+ "required": false,
6553
+ "type": "string",
6554
+ "in": "query"
6555
+ },
6556
+ {
6557
+ "name": "limit",
6558
+ "description": "Maximum number of results to return",
6559
+ "required": false,
6560
+ "type": "integer",
6561
+ "in": "query"
6562
+ },
6563
+ {
6564
+ "name": "offset",
6565
+ "description": "Number of results to skip",
6566
+ "required": false,
6567
+ "type": "integer",
6568
+ "in": "query"
6569
+ }
6570
+ ]
6571
+ },
6572
+ "list-approval-recurrences": {
6573
+ serviceClass: "Approvals",
6574
+ operationId: "listApprovalRecurrences",
6575
+ description: "Read-only rollup answering \"what keeps coming back?\" — groups items by `dedup_key` and returns those recurring at least `min_count` times, most-recurrent first. Each group carries the ordered item chain (via `previous_item_id`) and the resolution reasons in order, so a human can read recurring rejections side by side and graduate the pattern into a guardrail `deny`. Exact-key grouping only; no cluster state is stored.",
6576
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/approvals",
6577
+ httpMethod: "get",
6578
+ pathParams: ["project_id"],
6579
+ queryParams: [
6580
+ "status",
6581
+ "min_count",
6582
+ "limit",
6583
+ "offset"
6584
+ ],
6585
+ flags: [
6586
+ {
6587
+ "name": "project_id",
6588
+ "description": "Project public ID (proj_ prefix).",
6589
+ "required": true,
6590
+ "type": "string",
6591
+ "in": "path"
6592
+ },
6593
+ {
6594
+ "name": "status",
6595
+ "description": "Lifecycle status the groups are built from (default `rejected`)",
6596
+ "required": false,
6597
+ "type": "string",
6598
+ "in": "query"
6599
+ },
6600
+ {
6601
+ "name": "min_count",
6602
+ "description": "Minimum items in a group for it to be returned",
6603
+ "required": false,
6604
+ "type": "integer",
6605
+ "in": "query"
6606
+ },
6607
+ {
6608
+ "name": "limit",
6609
+ "description": "Maximum number of groups to return",
6610
+ "required": false,
6611
+ "type": "integer",
6612
+ "in": "query"
6613
+ },
6614
+ {
6615
+ "name": "offset",
6616
+ "description": "Number of groups to skip",
6617
+ "required": false,
6618
+ "type": "integer",
6619
+ "in": "query"
6620
+ }
6621
+ ]
6622
+ },
6623
+ "get-approval": {
6624
+ serviceClass: "Approvals",
6625
+ operationId: "getApproval",
6626
+ description: "Returns a single approval item with its full evidence.",
6627
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/approvals",
6628
+ httpMethod: "get",
6629
+ pathParams: ["project_id", "approval_id"],
6630
+ queryParams: [],
6631
+ flags: [{
6632
+ "name": "project_id",
6633
+ "description": "Project public ID (proj_ prefix).",
6634
+ "required": true,
6635
+ "type": "string",
6636
+ "in": "path"
6637
+ }, {
6638
+ "name": "approval_id",
6639
+ "description": "Approval item ID",
6640
+ "required": true,
6641
+ "type": "string",
6642
+ "in": "path"
6643
+ }]
6644
+ },
6645
+ "approve-approval": {
6646
+ serviceClass: "Approvals",
6647
+ operationId: "approveApproval",
6648
+ description: "Approves the item. Optionally supply edited `arguments` to replace the proposed arguments (edit-then-approve); the original is preserved on the item. Expiry is re-checked at decision time — an expired item can never be approved.",
6649
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/approvals",
6650
+ httpMethod: "post",
6651
+ pathParams: ["project_id", "approval_id"],
6652
+ queryParams: [],
6653
+ flags: [
6654
+ {
6655
+ "name": "project_id",
6656
+ "description": "Project public ID (proj_ prefix).",
6657
+ "required": true,
6658
+ "type": "string",
6659
+ "in": "path"
6660
+ },
6661
+ {
6662
+ "name": "approval_id",
6663
+ "description": "Approval item ID",
6664
+ "required": true,
6665
+ "type": "string",
6666
+ "in": "path"
6667
+ },
6668
+ {
6669
+ "name": "arguments",
6670
+ "description": "Edited arguments to execute instead of the proposed ones",
6671
+ "required": false,
6672
+ "type": "object",
6673
+ "in": "body"
6674
+ }
6675
+ ]
6676
+ },
6677
+ "reject-approval": {
6678
+ serviceClass: "Approvals",
6679
+ operationId: "rejectApproval",
6680
+ description: "Rejects the item. A reason is required and preserved on the item.",
6681
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/approvals",
6682
+ httpMethod: "post",
6683
+ pathParams: ["project_id", "approval_id"],
6684
+ queryParams: [],
6685
+ flags: [
6686
+ {
6687
+ "name": "project_id",
6688
+ "description": "Project public ID (proj_ prefix).",
6689
+ "required": true,
6690
+ "type": "string",
6691
+ "in": "path"
6692
+ },
6693
+ {
6694
+ "name": "approval_id",
6695
+ "description": "Approval item ID",
6696
+ "required": true,
6697
+ "type": "string",
6698
+ "in": "path"
6699
+ },
6700
+ {
6701
+ "name": "reason",
6702
+ "description": "Why the item is being rejected (required)",
6703
+ "required": true,
6704
+ "type": "string",
6705
+ "in": "body"
6706
+ }
6707
+ ]
6708
+ },
6709
+ "list-assistant-grants": {
6710
+ serviceClass: "Assistant",
6711
+ operationId: "listAssistantGrants",
6712
+ description: "Lists the caller's assistant grants — one per channel identity that may operate their account. Grants belong to the account, so this is the caller's own set regardless of which projects they own.",
6132
6713
  moduleDocsUrl: "https://docs.naturali.ai/docs/modules/assistant",
6133
6714
  httpMethod: "get",
6134
6715
  pathParams: [],
@@ -8683,6 +9264,141 @@ const routes = {
8683
9264
  }
8684
9265
  ]
8685
9266
  },
9267
+ "list-exceptions": {
9268
+ serviceClass: "Exceptions",
9269
+ operationId: "listExceptions",
9270
+ description: "Returns exception items for a project, filterable by status, severity, and kind.",
9271
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/exceptions",
9272
+ httpMethod: "get",
9273
+ pathParams: ["project_id"],
9274
+ queryParams: [
9275
+ "status",
9276
+ "severity",
9277
+ "kind",
9278
+ "limit",
9279
+ "offset"
9280
+ ],
9281
+ flags: [
9282
+ {
9283
+ "name": "project_id",
9284
+ "description": "Project public ID (proj_ prefix).",
9285
+ "required": true,
9286
+ "type": "string",
9287
+ "in": "path"
9288
+ },
9289
+ {
9290
+ "name": "status",
9291
+ "description": "Filter by triage status",
9292
+ "required": false,
9293
+ "type": "string",
9294
+ "in": "query"
9295
+ },
9296
+ {
9297
+ "name": "severity",
9298
+ "description": "Filter by severity",
9299
+ "required": false,
9300
+ "type": "string",
9301
+ "in": "query"
9302
+ },
9303
+ {
9304
+ "name": "kind",
9305
+ "description": "Filter by how the exception was filed",
9306
+ "required": false,
9307
+ "type": "string",
9308
+ "in": "query"
9309
+ },
9310
+ {
9311
+ "name": "limit",
9312
+ "description": "Maximum number of results to return",
9313
+ "required": false,
9314
+ "type": "integer",
9315
+ "in": "query"
9316
+ },
9317
+ {
9318
+ "name": "offset",
9319
+ "description": "Number of results to skip",
9320
+ "required": false,
9321
+ "type": "integer",
9322
+ "in": "query"
9323
+ }
9324
+ ]
9325
+ },
9326
+ "get-exception": {
9327
+ serviceClass: "Exceptions",
9328
+ operationId: "getException",
9329
+ description: "Returns a single exception item with its full detail.",
9330
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/exceptions",
9331
+ httpMethod: "get",
9332
+ pathParams: ["project_id", "exception_id"],
9333
+ queryParams: [],
9334
+ flags: [{
9335
+ "name": "project_id",
9336
+ "description": "Project public ID (proj_ prefix).",
9337
+ "required": true,
9338
+ "type": "string",
9339
+ "in": "path"
9340
+ }, {
9341
+ "name": "exception_id",
9342
+ "description": "Exception item ID",
9343
+ "required": true,
9344
+ "type": "string",
9345
+ "in": "path"
9346
+ }]
9347
+ },
9348
+ "acknowledge-exception": {
9349
+ serviceClass: "Exceptions",
9350
+ operationId: "acknowledgeException",
9351
+ description: "Moves the item to `acknowledged` (\"someone is on it\"), recording who. A no-op that returns the item unchanged when already acknowledged; rejected when already resolved.",
9352
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/exceptions",
9353
+ httpMethod: "post",
9354
+ pathParams: ["project_id", "exception_id"],
9355
+ queryParams: [],
9356
+ flags: [{
9357
+ "name": "project_id",
9358
+ "description": "Project public ID (proj_ prefix).",
9359
+ "required": true,
9360
+ "type": "string",
9361
+ "in": "path"
9362
+ }, {
9363
+ "name": "exception_id",
9364
+ "description": "Exception item ID",
9365
+ "required": true,
9366
+ "type": "string",
9367
+ "in": "path"
9368
+ }]
9369
+ },
9370
+ "resolve-exception": {
9371
+ serviceClass: "Exceptions",
9372
+ operationId: "resolveException",
9373
+ description: "Moves the item to `resolved` (\"fixed\"), recording who and an optional note.",
9374
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/exceptions",
9375
+ httpMethod: "post",
9376
+ pathParams: ["project_id", "exception_id"],
9377
+ queryParams: [],
9378
+ flags: [
9379
+ {
9380
+ "name": "project_id",
9381
+ "description": "Project public ID (proj_ prefix).",
9382
+ "required": true,
9383
+ "type": "string",
9384
+ "in": "path"
9385
+ },
9386
+ {
9387
+ "name": "exception_id",
9388
+ "description": "Exception item ID",
9389
+ "required": true,
9390
+ "type": "string",
9391
+ "in": "path"
9392
+ },
9393
+ {
9394
+ "name": "note",
9395
+ "description": "Optional resolution note",
9396
+ "required": false,
9397
+ "type": "string",
9398
+ "in": "body"
9399
+ }
9400
+ ]
9401
+ },
8686
9402
  "list-files": {
8687
9403
  serviceClass: "Files",
8688
9404
  operationId: "listFiles",
@@ -9202,11 +9918,11 @@ const routes = {
9202
9918
  "in": "path"
9203
9919
  }]
9204
9920
  },
9205
- "list-ingestion-rules": {
9206
- serviceClass: "IngestionRules",
9207
- operationId: "listIngestionRules",
9208
- description: "Returns the ingestion rules for a project",
9209
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
9921
+ "list-guardrails": {
9922
+ serviceClass: "Guardrails",
9923
+ operationId: "listGuardrails",
9924
+ description: "Returns all guardrails in the project.",
9925
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
9210
9926
  httpMethod: "get",
9211
9927
  pathParams: ["project_id"],
9212
9928
  queryParams: ["limit", "offset"],
@@ -9220,7 +9936,7 @@ const routes = {
9220
9936
  },
9221
9937
  {
9222
9938
  "name": "limit",
9223
- "description": "Number of results per page",
9939
+ "description": "Maximum number of results to return",
9224
9940
  "required": false,
9225
9941
  "type": "integer",
9226
9942
  "in": "query"
@@ -9234,11 +9950,11 @@ const routes = {
9234
9950
  }
9235
9951
  ]
9236
9952
  },
9237
- "create-ingestion-rule": {
9238
- serviceClass: "IngestionRules",
9239
- operationId: "createIngestionRule",
9240
- description: "Creates a rule mapping a content_type glob to a converter. Exactly one of tool_id or agent_id must be set.",
9241
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
9953
+ "create-guardrail": {
9954
+ serviceClass: "Guardrails",
9955
+ operationId: "createGuardrail",
9956
+ description: "Creates a new guardrail in the project, archiving its document as version 1. The `document` is validated on write: `class` must be a literal (A/B/C/D) or a JSON Logic expression, and every variable it (and `guard`) reference must resolve to the `args.*` / `context.*` / `runtime.*` namespaces — an out-of-catalog `runtime.*` key is rejected with 400.",
9957
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
9242
9958
  httpMethod: "post",
9243
9959
  pathParams: ["project_id"],
9244
9960
  queryParams: [],
@@ -9251,91 +9967,56 @@ const routes = {
9251
9967
  "in": "path"
9252
9968
  },
9253
9969
  {
9254
- "name": "content_type_glob",
9255
- "description": "MIME type glob matched against a file's content_type",
9970
+ "name": "name",
9971
+ "description": "Human-readable name",
9256
9972
  "required": true,
9257
9973
  "type": "string",
9258
9974
  "in": "body"
9259
9975
  },
9260
9976
  {
9261
- "name": "tool_id",
9262
- "description": "Converter tool id (mutually exclusive with agent_id)",
9263
- "required": false,
9264
- "type": "string",
9265
- "in": "body"
9266
- },
9267
- {
9268
- "name": "agent_id",
9269
- "description": "Converter agent id (mutually exclusive with tool_id)",
9270
- "required": false,
9271
- "type": "string",
9272
- "in": "body"
9273
- },
9274
- {
9275
- "name": "action",
9276
- "description": "Operation id, required for mcp tool converters",
9977
+ "name": "description",
9978
+ "description": "",
9277
9979
  "required": false,
9278
9980
  "type": "string",
9279
9981
  "in": "body"
9280
9982
  },
9281
9983
  {
9282
- "name": "preset_parameters",
9283
- "description": "Merged into the tool input before invocation (tool converters only)",
9284
- "required": false,
9984
+ "name": "document",
9985
+ "description": "The action-class document. `class` maps a call to an action class; `guard` gates class-B autonomy. Both are single JSON Logic expressions over the `args.*` / `context.*` / `runtime.*` namespaces.\n",
9986
+ "required": true,
9285
9987
  "type": "object",
9286
9988
  "in": "body"
9287
9989
  },
9288
9990
  {
9289
- "name": "native_extraction",
9290
- "description": "For native types (PDF/text): `first` (default) converts only when native extraction yields no text; `skip` always converts.",
9991
+ "name": "context_tool_id",
9992
+ "description": "",
9291
9993
  "required": false,
9292
9994
  "type": "string",
9293
9995
  "in": "body"
9294
9996
  },
9295
9997
  {
9296
- "name": "file_delivery",
9297
- "description": "How the file reaches a tool converter (default base64)",
9998
+ "name": "context_mode",
9999
+ "description": "",
9298
10000
  "required": false,
9299
10001
  "type": "string",
9300
10002
  "in": "body"
9301
10003
  },
9302
10004
  {
9303
- "name": "chunk_strategy",
9304
- "description": "Default chunk strategy, overridable per ingest request",
10005
+ "name": "version_label",
10006
+ "description": "Optional tag for the config version this write archives (e.g. `initial`). Annotates the version only — it is not stored on the guardrail and is not part of the config, so labelling a change is never itself a change.",
9305
10007
  "required": false,
9306
10008
  "type": "string",
9307
10009
  "in": "body"
9308
- },
9309
- {
9310
- "name": "chunk_size",
9311
- "description": "Default window size in characters for the size strategy",
9312
- "required": false,
9313
- "type": "integer",
9314
- "in": "body"
9315
- },
9316
- {
9317
- "name": "chunk_overlap",
9318
- "description": "Default overlap in characters for the size strategy",
9319
- "required": false,
9320
- "type": "integer",
9321
- "in": "body"
9322
- },
9323
- {
9324
- "name": "metadata",
9325
- "description": "Arbitrary JSON metadata",
9326
- "required": false,
9327
- "type": "object",
9328
- "in": "body"
9329
10010
  }
9330
10011
  ]
9331
10012
  },
9332
- "get-ingestion-rule": {
9333
- serviceClass: "IngestionRules",
9334
- operationId: "getIngestionRule",
9335
- description: "Returns a specific ingestion rule",
9336
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
10013
+ "get-guardrail": {
10014
+ serviceClass: "Guardrails",
10015
+ operationId: "getGuardrail",
10016
+ description: "Returns a single guardrail by ID.",
10017
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
9337
10018
  httpMethod: "get",
9338
- pathParams: ["project_id", "ingestion_rule_id"],
10019
+ pathParams: ["project_id", "guardrail_id"],
9339
10020
  queryParams: [],
9340
10021
  flags: [{
9341
10022
  "name": "project_id",
@@ -9344,20 +10025,20 @@ const routes = {
9344
10025
  "type": "string",
9345
10026
  "in": "path"
9346
10027
  }, {
9347
- "name": "ingestion_rule_id",
9348
- "description": "Ingestion rule ID",
10028
+ "name": "guardrail_id",
10029
+ "description": "",
9349
10030
  "required": true,
9350
10031
  "type": "string",
9351
10032
  "in": "path"
9352
10033
  }]
9353
10034
  },
9354
- "update-ingestion-rule": {
9355
- serviceClass: "IngestionRules",
9356
- operationId: "updateIngestionRule",
9357
- description: "Updates fields of an ingestion rule",
9358
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
10035
+ "update-guardrail": {
10036
+ serviceClass: "Guardrails",
10037
+ operationId: "updateGuardrail",
10038
+ description: "Updates an existing guardrail. A `document` write that actually changes the policy increments `version` and archives the new document as a GuardrailVersion; metadata-only edits (name / description / context), and re-writing the document the guardrail already holds, leave the version untouched.",
10039
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
9359
10040
  httpMethod: "patch",
9360
- pathParams: ["project_id", "ingestion_rule_id"],
10041
+ pathParams: ["project_id", "guardrail_id"],
9361
10042
  queryParams: [],
9362
10043
  flags: [
9363
10044
  {
@@ -9368,98 +10049,63 @@ const routes = {
9368
10049
  "in": "path"
9369
10050
  },
9370
10051
  {
9371
- "name": "ingestion_rule_id",
9372
- "description": "Ingestion rule ID",
10052
+ "name": "guardrail_id",
10053
+ "description": "",
9373
10054
  "required": true,
9374
10055
  "type": "string",
9375
10056
  "in": "path"
9376
10057
  },
9377
10058
  {
9378
- "name": "content_type_glob",
9379
- "description": "",
9380
- "required": false,
9381
- "type": "string",
9382
- "in": "body"
9383
- },
9384
- {
9385
- "name": "tool_id",
9386
- "description": "",
9387
- "required": false,
9388
- "type": "string",
9389
- "in": "body"
9390
- },
9391
- {
9392
- "name": "agent_id",
10059
+ "name": "name",
9393
10060
  "description": "",
9394
10061
  "required": false,
9395
10062
  "type": "string",
9396
10063
  "in": "body"
9397
10064
  },
9398
10065
  {
9399
- "name": "action",
10066
+ "name": "description",
9400
10067
  "description": "",
9401
10068
  "required": false,
9402
10069
  "type": "string",
9403
10070
  "in": "body"
9404
10071
  },
9405
10072
  {
9406
- "name": "preset_parameters",
9407
- "description": "",
10073
+ "name": "document",
10074
+ "description": "The action-class document. `class` maps a call to an action class; `guard` gates class-B autonomy. Both are single JSON Logic expressions over the `args.*` / `context.*` / `runtime.*` namespaces.\n",
9408
10075
  "required": false,
9409
10076
  "type": "object",
9410
10077
  "in": "body"
9411
10078
  },
9412
10079
  {
9413
- "name": "native_extraction",
10080
+ "name": "context_tool_id",
9414
10081
  "description": "",
9415
10082
  "required": false,
9416
10083
  "type": "string",
9417
10084
  "in": "body"
9418
10085
  },
9419
10086
  {
9420
- "name": "file_delivery",
10087
+ "name": "context_mode",
9421
10088
  "description": "",
9422
10089
  "required": false,
9423
10090
  "type": "string",
9424
10091
  "in": "body"
9425
10092
  },
9426
10093
  {
9427
- "name": "chunk_strategy",
9428
- "description": "Send `null` to clear the rule's override and fall back to the per-request default.",
10094
+ "name": "version_label",
10095
+ "description": "Optional tag for the config version this write archives (e.g. `pre-tightening`). Annotates the version only — it is not stored on the guardrail and is not part of the config, so labelling a change is never itself a change. Ignored when the write changes no policy, since no version is created.",
9429
10096
  "required": false,
9430
10097
  "type": "string",
9431
10098
  "in": "body"
9432
- },
9433
- {
9434
- "name": "chunk_size",
9435
- "description": "",
9436
- "required": false,
9437
- "type": "integer",
9438
- "in": "body"
9439
- },
9440
- {
9441
- "name": "chunk_overlap",
9442
- "description": "",
9443
- "required": false,
9444
- "type": "integer",
9445
- "in": "body"
9446
- },
9447
- {
9448
- "name": "metadata",
9449
- "description": "",
9450
- "required": false,
9451
- "type": "object",
9452
- "in": "body"
9453
10099
  }
9454
10100
  ]
9455
10101
  },
9456
- "delete-ingestion-rule": {
9457
- serviceClass: "IngestionRules",
9458
- operationId: "deleteIngestionRule",
9459
- description: "Deletes an ingestion rule",
9460
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
10102
+ "delete-guardrail": {
10103
+ serviceClass: "Guardrails",
10104
+ operationId: "deleteGuardrail",
10105
+ description: "Deletes a guardrail and its archived versions by ID.",
10106
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
9461
10107
  httpMethod: "delete",
9462
- pathParams: ["project_id", "ingestion_rule_id"],
10108
+ pathParams: ["project_id", "guardrail_id"],
9463
10109
  queryParams: [],
9464
10110
  flags: [{
9465
10111
  "name": "project_id",
@@ -9468,21 +10114,21 @@ const routes = {
9468
10114
  "type": "string",
9469
10115
  "in": "path"
9470
10116
  }, {
9471
- "name": "ingestion_rule_id",
9472
- "description": "Ingestion rule ID",
10117
+ "name": "guardrail_id",
10118
+ "description": "",
9473
10119
  "required": true,
9474
10120
  "type": "string",
9475
10121
  "in": "path"
9476
10122
  }]
9477
10123
  },
9478
- "search-knowledge": {
9479
- serviceClass: "Knowledge",
9480
- operationId: "searchKnowledge",
9481
- description: "Searches across documents and memory entries using semantic search, file paths, document IDs, or memory IDs/tags. At least one of `query`, `document_paths`, `document_ids`, `memory_ids`, or `memory_tags` must be provided.",
9482
- moduleDocsUrl: "https://docs.naturali.ai/docs/modules/knowledge",
9483
- httpMethod: "post",
9484
- pathParams: ["project_id"],
9485
- queryParams: [],
10124
+ "list-guardrail-versions": {
10125
+ serviceClass: "Guardrails",
10126
+ operationId: "listGuardrailVersions",
10127
+ description: "Returns the guardrail's archived configurations, newest first. A version is written on create and on every subsequent write that changes the policy `document` through the REST API or a formation apply alike. Metadata-only edits (name, description, context binding) do not archive a version. See [Versioning](/docs/modules/guardrails#versioning).",
10128
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
10129
+ httpMethod: "get",
10130
+ pathParams: ["project_id", "guardrail_id"],
10131
+ queryParams: ["limit", "offset"],
9486
10132
  flags: [
9487
10133
  {
9488
10134
  "name": "project_id",
@@ -9492,56 +10138,866 @@ const routes = {
9492
10138
  "in": "path"
9493
10139
  },
9494
10140
  {
9495
- "name": "query",
9496
- "description": "Semantic search query text",
9497
- "required": false,
10141
+ "name": "guardrail_id",
10142
+ "description": "",
10143
+ "required": true,
9498
10144
  "type": "string",
9499
- "in": "body"
10145
+ "in": "path"
9500
10146
  },
9501
10147
  {
9502
- "name": "min_score",
9503
- "description": "Minimum `score` a result must reach to be returned. Filters on the implementation-defined `score`, not on `similarity_score`, so the cutoff follows the ranking. Only applies when `query` is provided. Because the scale behind `score` is not part of the contract, treat a tuned value as tied to the deployment rather than portable.",
10148
+ "name": "limit",
10149
+ "description": "Maximum number of results to return",
9504
10150
  "required": false,
9505
- "type": "number",
9506
- "in": "body"
10151
+ "type": "integer",
10152
+ "in": "query"
9507
10153
  },
9508
10154
  {
9509
- "name": "limit",
9510
- "description": "Maximum number of results to return (default 10)",
10155
+ "name": "offset",
10156
+ "description": "Number of results to skip",
9511
10157
  "required": false,
9512
10158
  "type": "integer",
9513
- "in": "body"
10159
+ "in": "query"
10160
+ }
10161
+ ]
10162
+ },
10163
+ "get-guardrail-version": {
10164
+ serviceClass: "Guardrails",
10165
+ operationId: "getGuardrailVersion",
10166
+ description: "Returns the exact configuration — and so the exact `document` — that governed at a given version. Approval items, activity entries, and exceptions record the version that governed them, so the audit chain survives edits.",
10167
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
10168
+ httpMethod: "get",
10169
+ pathParams: [
10170
+ "project_id",
10171
+ "guardrail_id",
10172
+ "version"
10173
+ ],
10174
+ queryParams: [],
10175
+ flags: [
10176
+ {
10177
+ "name": "project_id",
10178
+ "description": "Project public ID (proj_ prefix).",
10179
+ "required": true,
10180
+ "type": "string",
10181
+ "in": "path"
9514
10182
  },
9515
10183
  {
9516
- "name": "memory_ids",
9517
- "description": "Search entries within these specific memories",
10184
+ "name": "guardrail_id",
10185
+ "description": "",
10186
+ "required": true,
10187
+ "type": "string",
10188
+ "in": "path"
10189
+ },
10190
+ {
10191
+ "name": "version",
10192
+ "description": "",
10193
+ "required": true,
10194
+ "type": "integer",
10195
+ "in": "path"
10196
+ }
10197
+ ]
10198
+ },
10199
+ "restore-guardrail-version": {
10200
+ serviceClass: "Guardrails",
10201
+ operationId: "restoreGuardrailVersion",
10202
+ description: "Writes an archived version's `document` back as the guardrail's live policy, which archives it again as a **new** version rather than rewinding the counter — so an approval item or exception citing any version in between still resolves. The restore runs through the ordinary update path, so the archived document is re-validated; restoring the policy the guardrail already holds is a no-op and archives nothing.",
10203
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
10204
+ httpMethod: "post",
10205
+ pathParams: [
10206
+ "project_id",
10207
+ "guardrail_id",
10208
+ "version"
10209
+ ],
10210
+ queryParams: [],
10211
+ flags: [
10212
+ {
10213
+ "name": "project_id",
10214
+ "description": "Project public ID (proj_ prefix).",
10215
+ "required": true,
10216
+ "type": "string",
10217
+ "in": "path"
10218
+ },
10219
+ {
10220
+ "name": "guardrail_id",
10221
+ "description": "",
10222
+ "required": true,
10223
+ "type": "string",
10224
+ "in": "path"
10225
+ },
10226
+ {
10227
+ "name": "version",
10228
+ "description": "",
10229
+ "required": true,
10230
+ "type": "integer",
10231
+ "in": "path"
10232
+ },
10233
+ {
10234
+ "name": "label",
10235
+ "description": "Optional tag for the version the restore creates. Defaults to `restored from v<version>`.",
9518
10236
  "required": false,
9519
- "type": "array",
10237
+ "type": "string",
9520
10238
  "in": "body"
10239
+ }
10240
+ ]
10241
+ },
10242
+ "evaluate-guardrail": {
10243
+ serviceClass: "Guardrails",
10244
+ operationId: "evaluateGuardrail",
10245
+ description: "Runs the full evaluation pipeline — the `class` expression, the guard, the context tool per `context_mode`, live `runtime.*` resolution — against caller-supplied `args` and `guardrail_context`, and returns the exact `guardrail_evaluation` record a real call would produce. Nothing executes, no approval item is filed, and no activity entry is written. This is the adoption path: preview a document's decisions against production-shaped calls before attaching it — or before editing a widely-attached one. Pass an optional `tool_id` to resolve `runtime.tool.*`.",
10246
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/guardrails",
10247
+ httpMethod: "post",
10248
+ pathParams: ["project_id", "guardrail_id"],
10249
+ queryParams: [],
10250
+ flags: [
10251
+ {
10252
+ "name": "project_id",
10253
+ "description": "Project public ID (proj_ prefix).",
10254
+ "required": true,
10255
+ "type": "string",
10256
+ "in": "path"
9521
10257
  },
9522
10258
  {
9523
- "name": "memory_tags",
9524
- "description": "Search entries in memories whose tags match any of these patterns (glob supported)",
10259
+ "name": "guardrail_id",
10260
+ "description": "",
10261
+ "required": true,
10262
+ "type": "string",
10263
+ "in": "path"
10264
+ },
10265
+ {
10266
+ "name": "args",
10267
+ "description": "The proposed call's arguments (the `args.*` namespace).",
9525
10268
  "required": false,
9526
- "type": "array",
10269
+ "type": "object",
9527
10270
  "in": "body"
9528
10271
  },
9529
10272
  {
9530
- "name": "document_paths",
9531
- "description": "Filter results to documents whose file path starts with one of these prefixes",
10273
+ "name": "guardrail_context",
10274
+ "description": "The caller-supplied guardrail context (the `context.*` namespace), combined with the context tool per `context_mode`.\n",
9532
10275
  "required": false,
9533
- "type": "array",
10276
+ "type": "object",
9534
10277
  "in": "body"
9535
10278
  },
9536
10279
  {
9537
- "name": "document_ids",
9538
- "description": "Filter results to specific document IDs",
10280
+ "name": "tool_id",
10281
+ "description": "Optional tool to resolve `runtime.tool.*` against.",
10282
+ "required": false,
10283
+ "type": "string",
10284
+ "in": "body"
10285
+ }
10286
+ ]
10287
+ },
10288
+ "list-ingestion-rules": {
10289
+ serviceClass: "IngestionRules",
10290
+ operationId: "listIngestionRules",
10291
+ description: "Returns the ingestion rules for a project",
10292
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
10293
+ httpMethod: "get",
10294
+ pathParams: ["project_id"],
10295
+ queryParams: ["limit", "offset"],
10296
+ flags: [
10297
+ {
10298
+ "name": "project_id",
10299
+ "description": "Project public ID (proj_ prefix).",
10300
+ "required": true,
10301
+ "type": "string",
10302
+ "in": "path"
10303
+ },
10304
+ {
10305
+ "name": "limit",
10306
+ "description": "Number of results per page",
10307
+ "required": false,
10308
+ "type": "integer",
10309
+ "in": "query"
10310
+ },
10311
+ {
10312
+ "name": "offset",
10313
+ "description": "Number of results to skip",
10314
+ "required": false,
10315
+ "type": "integer",
10316
+ "in": "query"
10317
+ }
10318
+ ]
10319
+ },
10320
+ "create-ingestion-rule": {
10321
+ serviceClass: "IngestionRules",
10322
+ operationId: "createIngestionRule",
10323
+ description: "Creates a rule mapping a content_type glob to a converter. Exactly one of tool_id or agent_id must be set.",
10324
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
10325
+ httpMethod: "post",
10326
+ pathParams: ["project_id"],
10327
+ queryParams: [],
10328
+ flags: [
10329
+ {
10330
+ "name": "project_id",
10331
+ "description": "Project public ID (proj_ prefix).",
10332
+ "required": true,
10333
+ "type": "string",
10334
+ "in": "path"
10335
+ },
10336
+ {
10337
+ "name": "content_type_glob",
10338
+ "description": "MIME type glob matched against a file's content_type",
10339
+ "required": true,
10340
+ "type": "string",
10341
+ "in": "body"
10342
+ },
10343
+ {
10344
+ "name": "tool_id",
10345
+ "description": "Converter tool id (mutually exclusive with agent_id)",
10346
+ "required": false,
10347
+ "type": "string",
10348
+ "in": "body"
10349
+ },
10350
+ {
10351
+ "name": "agent_id",
10352
+ "description": "Converter agent id (mutually exclusive with tool_id)",
10353
+ "required": false,
10354
+ "type": "string",
10355
+ "in": "body"
10356
+ },
10357
+ {
10358
+ "name": "action",
10359
+ "description": "Operation id, required for mcp tool converters",
10360
+ "required": false,
10361
+ "type": "string",
10362
+ "in": "body"
10363
+ },
10364
+ {
10365
+ "name": "preset_parameters",
10366
+ "description": "Merged into the tool input before invocation (tool converters only)",
10367
+ "required": false,
10368
+ "type": "object",
10369
+ "in": "body"
10370
+ },
10371
+ {
10372
+ "name": "native_extraction",
10373
+ "description": "For native types (PDF/text): `first` (default) converts only when native extraction yields no text; `skip` always converts.",
10374
+ "required": false,
10375
+ "type": "string",
10376
+ "in": "body"
10377
+ },
10378
+ {
10379
+ "name": "file_delivery",
10380
+ "description": "How the file reaches a tool converter (default base64)",
10381
+ "required": false,
10382
+ "type": "string",
10383
+ "in": "body"
10384
+ },
10385
+ {
10386
+ "name": "chunk_strategy",
10387
+ "description": "Default chunk strategy, overridable per ingest request",
10388
+ "required": false,
10389
+ "type": "string",
10390
+ "in": "body"
10391
+ },
10392
+ {
10393
+ "name": "chunk_size",
10394
+ "description": "Default window size in characters for the size strategy",
10395
+ "required": false,
10396
+ "type": "integer",
10397
+ "in": "body"
10398
+ },
10399
+ {
10400
+ "name": "chunk_overlap",
10401
+ "description": "Default overlap in characters for the size strategy",
10402
+ "required": false,
10403
+ "type": "integer",
10404
+ "in": "body"
10405
+ },
10406
+ {
10407
+ "name": "metadata",
10408
+ "description": "Arbitrary JSON metadata",
10409
+ "required": false,
10410
+ "type": "object",
10411
+ "in": "body"
10412
+ }
10413
+ ]
10414
+ },
10415
+ "get-ingestion-rule": {
10416
+ serviceClass: "IngestionRules",
10417
+ operationId: "getIngestionRule",
10418
+ description: "Returns a specific ingestion rule",
10419
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
10420
+ httpMethod: "get",
10421
+ pathParams: ["project_id", "ingestion_rule_id"],
10422
+ queryParams: [],
10423
+ flags: [{
10424
+ "name": "project_id",
10425
+ "description": "Project public ID (proj_ prefix).",
10426
+ "required": true,
10427
+ "type": "string",
10428
+ "in": "path"
10429
+ }, {
10430
+ "name": "ingestion_rule_id",
10431
+ "description": "Ingestion rule ID",
10432
+ "required": true,
10433
+ "type": "string",
10434
+ "in": "path"
10435
+ }]
10436
+ },
10437
+ "update-ingestion-rule": {
10438
+ serviceClass: "IngestionRules",
10439
+ operationId: "updateIngestionRule",
10440
+ description: "Updates fields of an ingestion rule",
10441
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
10442
+ httpMethod: "patch",
10443
+ pathParams: ["project_id", "ingestion_rule_id"],
10444
+ queryParams: [],
10445
+ flags: [
10446
+ {
10447
+ "name": "project_id",
10448
+ "description": "Project public ID (proj_ prefix).",
10449
+ "required": true,
10450
+ "type": "string",
10451
+ "in": "path"
10452
+ },
10453
+ {
10454
+ "name": "ingestion_rule_id",
10455
+ "description": "Ingestion rule ID",
10456
+ "required": true,
10457
+ "type": "string",
10458
+ "in": "path"
10459
+ },
10460
+ {
10461
+ "name": "content_type_glob",
10462
+ "description": "",
10463
+ "required": false,
10464
+ "type": "string",
10465
+ "in": "body"
10466
+ },
10467
+ {
10468
+ "name": "tool_id",
10469
+ "description": "",
10470
+ "required": false,
10471
+ "type": "string",
10472
+ "in": "body"
10473
+ },
10474
+ {
10475
+ "name": "agent_id",
10476
+ "description": "",
10477
+ "required": false,
10478
+ "type": "string",
10479
+ "in": "body"
10480
+ },
10481
+ {
10482
+ "name": "action",
10483
+ "description": "",
10484
+ "required": false,
10485
+ "type": "string",
10486
+ "in": "body"
10487
+ },
10488
+ {
10489
+ "name": "preset_parameters",
10490
+ "description": "",
10491
+ "required": false,
10492
+ "type": "object",
10493
+ "in": "body"
10494
+ },
10495
+ {
10496
+ "name": "native_extraction",
10497
+ "description": "",
10498
+ "required": false,
10499
+ "type": "string",
10500
+ "in": "body"
10501
+ },
10502
+ {
10503
+ "name": "file_delivery",
10504
+ "description": "",
10505
+ "required": false,
10506
+ "type": "string",
10507
+ "in": "body"
10508
+ },
10509
+ {
10510
+ "name": "chunk_strategy",
10511
+ "description": "Send `null` to clear the rule's override and fall back to the per-request default.",
10512
+ "required": false,
10513
+ "type": "string",
10514
+ "in": "body"
10515
+ },
10516
+ {
10517
+ "name": "chunk_size",
10518
+ "description": "",
10519
+ "required": false,
10520
+ "type": "integer",
10521
+ "in": "body"
10522
+ },
10523
+ {
10524
+ "name": "chunk_overlap",
10525
+ "description": "",
10526
+ "required": false,
10527
+ "type": "integer",
10528
+ "in": "body"
10529
+ },
10530
+ {
10531
+ "name": "metadata",
10532
+ "description": "",
10533
+ "required": false,
10534
+ "type": "object",
10535
+ "in": "body"
10536
+ }
10537
+ ]
10538
+ },
10539
+ "delete-ingestion-rule": {
10540
+ serviceClass: "IngestionRules",
10541
+ operationId: "deleteIngestionRule",
10542
+ description: "Deletes an ingestion rule",
10543
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/ingestion-rules",
10544
+ httpMethod: "delete",
10545
+ pathParams: ["project_id", "ingestion_rule_id"],
10546
+ queryParams: [],
10547
+ flags: [{
10548
+ "name": "project_id",
10549
+ "description": "Project public ID (proj_ prefix).",
10550
+ "required": true,
10551
+ "type": "string",
10552
+ "in": "path"
10553
+ }, {
10554
+ "name": "ingestion_rule_id",
10555
+ "description": "Ingestion rule ID",
10556
+ "required": true,
10557
+ "type": "string",
10558
+ "in": "path"
10559
+ }]
10560
+ },
10561
+ "search-knowledge": {
10562
+ serviceClass: "Knowledge",
10563
+ operationId: "searchKnowledge",
10564
+ description: "Searches across documents and memory entries using semantic search, file paths, document IDs, or memory IDs/tags. At least one of `query`, `document_paths`, `document_ids`, `memory_ids`, or `memory_tags` must be provided.",
10565
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/knowledge",
10566
+ httpMethod: "post",
10567
+ pathParams: ["project_id"],
10568
+ queryParams: [],
10569
+ flags: [
10570
+ {
10571
+ "name": "project_id",
10572
+ "description": "Project public ID (proj_ prefix).",
10573
+ "required": true,
10574
+ "type": "string",
10575
+ "in": "path"
10576
+ },
10577
+ {
10578
+ "name": "query",
10579
+ "description": "Semantic search query text",
10580
+ "required": false,
10581
+ "type": "string",
10582
+ "in": "body"
10583
+ },
10584
+ {
10585
+ "name": "min_score",
10586
+ "description": "Minimum `score` a result must reach to be returned. Filters on the implementation-defined `score`, not on `similarity_score`, so the cutoff follows the ranking. Only applies when `query` is provided. Because the scale behind `score` is not part of the contract, treat a tuned value as tied to the deployment rather than portable.",
10587
+ "required": false,
10588
+ "type": "number",
10589
+ "in": "body"
10590
+ },
10591
+ {
10592
+ "name": "limit",
10593
+ "description": "Maximum number of results to return (default 10)",
10594
+ "required": false,
10595
+ "type": "integer",
10596
+ "in": "body"
10597
+ },
10598
+ {
10599
+ "name": "memory_ids",
10600
+ "description": "Search entries within these specific memories",
10601
+ "required": false,
10602
+ "type": "array",
10603
+ "in": "body"
10604
+ },
10605
+ {
10606
+ "name": "memory_tags",
10607
+ "description": "Search entries in memories whose tags match any of these patterns (glob supported)",
10608
+ "required": false,
10609
+ "type": "array",
10610
+ "in": "body"
10611
+ },
10612
+ {
10613
+ "name": "document_paths",
10614
+ "description": "Filter results to documents whose file path starts with one of these prefixes",
10615
+ "required": false,
10616
+ "type": "array",
10617
+ "in": "body"
10618
+ },
10619
+ {
10620
+ "name": "document_ids",
10621
+ "description": "Filter results to specific document IDs",
10622
+ "required": false,
10623
+ "type": "array",
10624
+ "in": "body"
10625
+ }
10626
+ ]
10627
+ },
10628
+ "list-memories": {
10629
+ serviceClass: "Memories",
10630
+ operationId: "listMemories",
10631
+ description: "Returns a list of memory configurations for a project",
10632
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
10633
+ httpMethod: "get",
10634
+ pathParams: ["project_id"],
10635
+ queryParams: [
10636
+ "tags",
10637
+ "limit",
10638
+ "offset"
10639
+ ],
10640
+ flags: [
10641
+ {
10642
+ "name": "project_id",
10643
+ "description": "Project public ID (proj_ prefix).",
10644
+ "required": true,
10645
+ "type": "string",
10646
+ "in": "path"
10647
+ },
10648
+ {
10649
+ "name": "tags",
10650
+ "description": "Filter memories by tag patterns. Supports glob syntax (`*` matches any substring, `?` matches any single character). Multiple values are ORed — a memory is returned if any of its tags match any of the provided patterns. Omit to return all memories.\n",
10651
+ "required": false,
10652
+ "type": "array",
10653
+ "in": "query"
10654
+ },
10655
+ {
10656
+ "name": "limit",
10657
+ "description": "Maximum number of results to return",
10658
+ "required": false,
10659
+ "type": "integer",
10660
+ "in": "query"
10661
+ },
10662
+ {
10663
+ "name": "offset",
10664
+ "description": "Number of results to skip",
10665
+ "required": false,
10666
+ "type": "integer",
10667
+ "in": "query"
10668
+ }
10669
+ ]
10670
+ },
10671
+ "create-memory": {
10672
+ serviceClass: "Memories",
10673
+ operationId: "createMemory",
10674
+ description: "Creates a new memory configuration in a project",
10675
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
10676
+ httpMethod: "post",
10677
+ pathParams: ["project_id"],
10678
+ queryParams: [],
10679
+ flags: [
10680
+ {
10681
+ "name": "project_id",
10682
+ "description": "Project public ID (proj_ prefix).",
10683
+ "required": true,
10684
+ "type": "string",
10685
+ "in": "path"
10686
+ },
10687
+ {
10688
+ "name": "name",
10689
+ "description": "Memory name",
10690
+ "required": true,
10691
+ "type": "string",
10692
+ "in": "body"
10693
+ },
10694
+ {
10695
+ "name": "description",
10696
+ "description": "Optional description",
10697
+ "required": false,
10698
+ "type": "string",
10699
+ "in": "body"
10700
+ },
10701
+ {
10702
+ "name": "tags",
10703
+ "description": "Optional list of tags for filtering in knowledge search",
10704
+ "required": false,
10705
+ "type": "array",
10706
+ "in": "body"
10707
+ }
10708
+ ]
10709
+ },
10710
+ "get-memory": {
10711
+ serviceClass: "Memories",
10712
+ operationId: "getMemory",
10713
+ description: "Returns a single memory configuration by ID",
10714
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
10715
+ httpMethod: "get",
10716
+ pathParams: ["project_id", "memory_id"],
10717
+ queryParams: [],
10718
+ flags: [{
10719
+ "name": "project_id",
10720
+ "description": "Project public ID (proj_ prefix).",
10721
+ "required": true,
10722
+ "type": "string",
10723
+ "in": "path"
10724
+ }, {
10725
+ "name": "memory_id",
10726
+ "description": "",
10727
+ "required": true,
10728
+ "type": "string",
10729
+ "in": "path"
10730
+ }]
10731
+ },
10732
+ "update-memory": {
10733
+ serviceClass: "Memories",
10734
+ operationId: "updateMemory",
10735
+ description: "Updates an existing memory configuration",
10736
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
10737
+ httpMethod: "put",
10738
+ pathParams: ["project_id", "memory_id"],
10739
+ queryParams: [],
10740
+ flags: [
10741
+ {
10742
+ "name": "project_id",
10743
+ "description": "Project public ID (proj_ prefix).",
10744
+ "required": true,
10745
+ "type": "string",
10746
+ "in": "path"
10747
+ },
10748
+ {
10749
+ "name": "memory_id",
10750
+ "description": "",
10751
+ "required": true,
10752
+ "type": "string",
10753
+ "in": "path"
10754
+ },
10755
+ {
10756
+ "name": "name",
10757
+ "description": "Memory name",
10758
+ "required": false,
10759
+ "type": "string",
10760
+ "in": "body"
10761
+ },
10762
+ {
10763
+ "name": "description",
10764
+ "description": "Optional description",
10765
+ "required": false,
10766
+ "type": "string",
10767
+ "in": "body"
10768
+ },
10769
+ {
10770
+ "name": "tags",
10771
+ "description": "Optional list of tags for filtering in knowledge search",
10772
+ "required": false,
10773
+ "type": "array",
10774
+ "in": "body"
10775
+ }
10776
+ ]
10777
+ },
10778
+ "delete-memory": {
10779
+ serviceClass: "Memories",
10780
+ operationId: "deleteMemory",
10781
+ description: "Deletes a memory configuration",
10782
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memories",
10783
+ httpMethod: "delete",
10784
+ pathParams: ["project_id", "memory_id"],
10785
+ queryParams: [],
10786
+ flags: [{
10787
+ "name": "project_id",
10788
+ "description": "Project public ID (proj_ prefix).",
10789
+ "required": true,
10790
+ "type": "string",
10791
+ "in": "path"
10792
+ }, {
10793
+ "name": "memory_id",
10794
+ "description": "",
10795
+ "required": true,
10796
+ "type": "string",
10797
+ "in": "path"
10798
+ }]
10799
+ },
10800
+ "list-memory-entries": {
10801
+ serviceClass: "MemoryEntries",
10802
+ operationId: "listMemoryEntries",
10803
+ description: "Returns all entries in a memory container",
10804
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
10805
+ httpMethod: "get",
10806
+ pathParams: ["project_id"],
10807
+ queryParams: [
10808
+ "memory_id",
10809
+ "limit",
10810
+ "offset",
10811
+ "include_invalidated"
10812
+ ],
10813
+ flags: [
10814
+ {
10815
+ "name": "project_id",
10816
+ "description": "Project public ID (proj_ prefix).",
10817
+ "required": true,
10818
+ "type": "string",
10819
+ "in": "path"
10820
+ },
10821
+ {
10822
+ "name": "memory_id",
10823
+ "description": "Memory container to list entries from (mem_...)",
10824
+ "required": true,
10825
+ "type": "string",
10826
+ "in": "query"
10827
+ },
10828
+ {
10829
+ "name": "limit",
10830
+ "description": "Maximum number of results to return",
10831
+ "required": false,
10832
+ "type": "integer",
10833
+ "in": "query"
10834
+ },
10835
+ {
10836
+ "name": "offset",
10837
+ "description": "Number of results to skip",
10838
+ "required": false,
10839
+ "type": "integer",
10840
+ "in": "query"
10841
+ },
10842
+ {
10843
+ "name": "include_invalidated",
10844
+ "description": "Include invalidated (superseded) entries. They are excluded by default; set this to audit the supersede history.",
10845
+ "required": false,
10846
+ "type": "boolean",
10847
+ "in": "query"
10848
+ }
10849
+ ]
10850
+ },
10851
+ "create-memory-entry": {
10852
+ serviceClass: "MemoryEntries",
10853
+ operationId: "createMemoryEntry",
10854
+ 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.",
10855
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
10856
+ httpMethod: "post",
10857
+ pathParams: ["project_id"],
10858
+ queryParams: [],
10859
+ flags: [
10860
+ {
10861
+ "name": "project_id",
10862
+ "description": "Project public ID (proj_ prefix).",
10863
+ "required": true,
10864
+ "type": "string",
10865
+ "in": "path"
10866
+ },
10867
+ {
10868
+ "name": "memory_id",
10869
+ "description": "Memory container to add the entry to (mem_...)",
10870
+ "required": true,
10871
+ "type": "string",
10872
+ "in": "body"
10873
+ },
10874
+ {
10875
+ "name": "content",
10876
+ "description": "The text content of the memory entry",
10877
+ "required": true,
10878
+ "type": "string",
10879
+ "in": "body"
10880
+ },
10881
+ {
10882
+ "name": "source_type",
10883
+ "description": "How this entry was created",
10884
+ "required": false,
10885
+ "type": "string",
10886
+ "in": "body"
10887
+ },
10888
+ {
10889
+ "name": "tags",
10890
+ "description": "Per-entry tag strings, used for entry-granularity filtering in search-knowledge (memory_tags)",
10891
+ "required": false,
10892
+ "type": "array",
10893
+ "in": "body"
10894
+ },
10895
+ {
10896
+ "name": "metadata",
10897
+ "description": "Arbitrary structured metadata attached to the entry",
10898
+ "required": false,
10899
+ "type": "object",
10900
+ "in": "body"
10901
+ },
10902
+ {
10903
+ "name": "duplicate_threshold",
10904
+ "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.",
10905
+ "required": false,
10906
+ "type": "number",
10907
+ "in": "body"
10908
+ }
10909
+ ]
10910
+ },
10911
+ "get-memory-entry": {
10912
+ serviceClass: "MemoryEntries",
10913
+ operationId: "getMemoryEntry",
10914
+ description: "Returns a single memory entry by ID",
10915
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
10916
+ httpMethod: "get",
10917
+ pathParams: ["project_id", "entry_id"],
10918
+ queryParams: [],
10919
+ flags: [{
10920
+ "name": "project_id",
10921
+ "description": "Project public ID (proj_ prefix).",
10922
+ "required": true,
10923
+ "type": "string",
10924
+ "in": "path"
10925
+ }, {
10926
+ "name": "entry_id",
10927
+ "description": "",
10928
+ "required": true,
10929
+ "type": "string",
10930
+ "in": "path"
10931
+ }]
10932
+ },
10933
+ "update-memory-entry": {
10934
+ serviceClass: "MemoryEntries",
10935
+ operationId: "updateMemoryEntry",
10936
+ description: "Updates an existing memory entry. Regenerates the embedding if content changes.",
10937
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
10938
+ httpMethod: "put",
10939
+ pathParams: ["project_id", "entry_id"],
10940
+ queryParams: [],
10941
+ flags: [
10942
+ {
10943
+ "name": "project_id",
10944
+ "description": "Project public ID (proj_ prefix).",
10945
+ "required": true,
10946
+ "type": "string",
10947
+ "in": "path"
10948
+ },
10949
+ {
10950
+ "name": "entry_id",
10951
+ "description": "",
10952
+ "required": true,
10953
+ "type": "string",
10954
+ "in": "path"
10955
+ },
10956
+ {
10957
+ "name": "content",
10958
+ "description": "Updated text content",
10959
+ "required": false,
10960
+ "type": "string",
10961
+ "in": "body"
10962
+ },
10963
+ {
10964
+ "name": "tags",
10965
+ "description": "Replaces the entry's tags. Pass null or an empty array to clear.",
9539
10966
  "required": false,
9540
10967
  "type": "array",
9541
10968
  "in": "body"
10969
+ },
10970
+ {
10971
+ "name": "metadata",
10972
+ "description": "Replaces the entry's metadata. Pass null to clear.",
10973
+ "required": false,
10974
+ "type": "object",
10975
+ "in": "body"
9542
10976
  }
9543
10977
  ]
9544
10978
  },
10979
+ "delete-memory-entry": {
10980
+ serviceClass: "MemoryEntries",
10981
+ operationId: "deleteMemoryEntry",
10982
+ description: "Deletes a memory entry",
10983
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/memory-entries",
10984
+ httpMethod: "delete",
10985
+ pathParams: ["project_id", "entry_id"],
10986
+ queryParams: [],
10987
+ flags: [{
10988
+ "name": "project_id",
10989
+ "description": "Project public ID (proj_ prefix).",
10990
+ "required": true,
10991
+ "type": "string",
10992
+ "in": "path"
10993
+ }, {
10994
+ "name": "entry_id",
10995
+ "description": "",
10996
+ "required": true,
10997
+ "type": "string",
10998
+ "in": "path"
10999
+ }]
11000
+ },
9545
11001
  "list-model-routes": {
9546
11002
  serviceClass: "ModelRoutes",
9547
11003
  operationId: "listModelRoutes",