@deepraxis/sdk 0.1.0-dev.d939e0f → 0.1.0-dev.ed6ad1b

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.
@@ -45,7 +45,7 @@ export declare const operations: readonly [{
45
45
  readonly resource: "agent.agents";
46
46
  readonly method: "create";
47
47
  readonly summary: "Create agent";
48
- readonly description: "Create a reusable agent definition, then pass its returned id to sessions.create to start a conversation. The definition includes model, system prompt, tools, MCP servers and an optional multiagent roster. It is saved as version 1; real updates create new versions. Unlike Anthropic Managed Agents, nonempty skills attachments and custom tool entries return 400; the native skill tool is separate from the skills field. Use tools: [{type: \"agent_toolset_20260401\"}] for built-in tools including codemode, skill and agent; inspect toolsets.list for names and schemas, and keep bash enabled for native additions. To offer only some tools, set default_config: {enabled: false} and list the tools to keep in configs, e.g. tools: [{type: \"agent_toolset_20260401\", default_config: {enabled: false}, configs: [{name: \"codemode\", enabled: true}, {name: \"bash\", enabled: true, permission_policy: {type: \"always_ask\"}}]}]; every tool not listed, including todo_write, enter_plan_mode, ask_user_question and goal_read, follows default_config, and the response echoes it. codemode runs through bash, so enabling codemode while bash is disabled returns 400. Optional mcp_toolset entries pair with mcp_servers. model accepts platform model IDs such as deepseek-flash, not only the Claude IDs in the protocol examples. model.settings.reasoning sets default thinking; other extra model controls return 400. Example: {\"name\":\"helper\",\"model\":{\"id\":\"deepseek-flash\"},\"tools\":[{\"type\":\"agent_toolset_20260401\"}]}.";
48
+ readonly description: "Create a reusable agent definition, then pass its returned id to sessions.create to start a conversation. The definition includes model, system prompt, tools, MCP servers and an optional multiagent roster. It is saved as version 1; real updates create new versions. Unlike Anthropic Managed Agents, nonempty skills attachments return 400; the native skill tool is separate from the skills field. Use tools: [{type: \"agent_toolset_20260401\"}] for built-in tools including codemode, skill and agent; inspect toolsets.list for names and schemas, and keep bash enabled for native additions. To offer only some tools, set default_config: {enabled: false} and list the tools to keep in configs, e.g. tools: [{type: \"agent_toolset_20260401\", default_config: {enabled: false}, configs: [{name: \"codemode\", enabled: true}, {name: \"bash\", enabled: true, permission_policy: {type: \"always_ask\"}}]}]; every tool not listed, including todo_write, enter_plan_mode, ask_user_question and goal_read, follows default_config, and the response echoes it. codemode runs through bash, so enabling codemode while bash is disabled returns 400. Optional mcp_toolset entries pair with mcp_servers. model accepts platform model IDs such as deepseek-flash, not only the Claude IDs in the protocol examples. model.settings.reasoning sets default thinking; other extra model controls return 400. Example: {\"name\":\"helper\",\"model\":{\"id\":\"deepseek-flash\"},\"tools\":[{\"type\":\"agent_toolset_20260401\"}]}.";
49
49
  readonly http: "POST";
50
50
  readonly path: "/agent/v1/agents";
51
51
  readonly streaming: "no";
@@ -140,6 +140,12 @@ export declare const operations: readonly [{
140
140
  readonly type: "object";
141
141
  readonly required: false;
142
142
  readonly description: "Praxis extension: switchable model ids on /agent/v1 only. The default model must be included. When omitted, only the default model is selectable.";
143
+ }, {
144
+ readonly name: "preset";
145
+ readonly type: "string";
146
+ readonly enum: readonly ["minimal", "data-editor", "full"];
147
+ readonly required: false;
148
+ readonly description: "Optional tool preset. minimal enables read, glob, grep and ask_user_question; data-editor also enables write and edit; full uses the default toolset with always_allow. Explicit tools override matching preset entries. codemode requires bash and is absent from data-editor.";
143
149
  }];
144
150
  };
145
151
  }, {
@@ -165,7 +171,7 @@ export declare const operations: readonly [{
165
171
  readonly resource: "agent.agents";
166
172
  readonly method: "update";
167
173
  readonly summary: "Update agent";
168
- readonly description: "Update an agent. Send the current version in the body for optimistic concurrency: a stale version returns 409, and an update that changes nothing keeps the version number. Any real change saves a new version; existing sessions keep the version they were created with. Omitted fields keep their value. multiagent takes null or a coordinator roster; subagent_model keeps its value when omitted and is cleared by null. Archived agents cannot be updated. Unlike Anthropic Managed Agents, nonempty skills attachments and custom tools return 400; use the native skill tool for available runtime skills.";
174
+ readonly description: "Update an agent. Send the current version in the body for optimistic concurrency: a stale version returns 409, and an update that changes nothing keeps the version number. Any real change saves a new version; existing sessions keep the version they were created with. Omitted fields keep their value. multiagent takes null or a coordinator roster; subagent_model keeps its value when omitted and is cleared by null. Archived agents cannot be updated. Unlike Anthropic Managed Agents, nonempty skills attachments return 400; use the native skill tool for available runtime skills.";
169
175
  readonly http: "POST";
170
176
  readonly path: "/agent/v1/agents/{agent_id}";
171
177
  readonly streaming: "no";
@@ -268,6 +274,12 @@ export declare const operations: readonly [{
268
274
  readonly type: "object";
269
275
  readonly required: false;
270
276
  readonly description: "Praxis extension: switchable model ids on /agent/v1 only. The default model must be included. When omitted, only the default model is selectable.";
277
+ }, {
278
+ readonly name: "preset";
279
+ readonly type: "string";
280
+ readonly enum: readonly ["minimal", "data-editor", "full"];
281
+ readonly required: false;
282
+ readonly description: "Optional tool preset. minimal enables read, glob, grep and ask_user_question; data-editor also enables write and edit; full uses the default toolset with always_allow. Explicit tools override matching preset entries. codemode requires bash and is absent from data-editor.";
271
283
  }];
272
284
  };
273
285
  }, {
@@ -313,6 +325,28 @@ export declare const operations: readonly [{
313
325
  readonly required: false;
314
326
  readonly description: "Case-sensitive literal prefix of external_user_id; omit or use an empty string for all users.";
315
327
  }];
328
+ }, {
329
+ readonly resource: "agent.agents.endUsers";
330
+ readonly method: "delete";
331
+ readonly summary: "Delete end-user data";
332
+ readonly description: "Delete a host application's end-user data from one service agent after explicit confirmation.\n\nDevelop only. Set confirm to the exact external_user_id; missing or mismatched confirmation returns 400. Returns 202 with a pending task id, not completion. Poll the deletion endpoint. Concurrent requests reuse the unfinished task; retry DELETE after failure to resume it. Tokens are revoked and the user is blocked before a seven-day recovery snapshot is verified. Sessions including child sessions, conversation data, grants and feedback are then removed. A pre-existing block remains; a temporary block is removed on success. Attachment metadata is recorded and File attachments are retained. No charge is introduced by this operation. Example: DELETE /agent/v1/agents/agent_example/end_users/customer_123?confirm=customer_123.";
333
+ readonly http: "DELETE";
334
+ readonly path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}";
335
+ readonly streaming: "no";
336
+ readonly pagination: false;
337
+ readonly pathParams: readonly [{
338
+ readonly name: "agent_id";
339
+ readonly sdkName: "agent_id";
340
+ }, {
341
+ readonly name: "external_user_id";
342
+ readonly sdkName: "external_user_id";
343
+ }];
344
+ readonly query: readonly [{
345
+ readonly name: "confirm";
346
+ readonly type: "string";
347
+ readonly required: true;
348
+ readonly description: "Must exactly equal the external_user_id path parameter to confirm destructive deletion.";
349
+ }];
316
350
  }, {
317
351
  readonly resource: "agent.agents.endUsers";
318
352
  readonly method: "retrieve";
@@ -347,6 +381,23 @@ export declare const operations: readonly [{
347
381
  readonly sdkName: "external_user_id";
348
382
  }];
349
383
  readonly query: readonly [];
384
+ }, {
385
+ readonly resource: "agent.agents.endUsers";
386
+ readonly method: "retrieveDeletion";
387
+ readonly summary: "Get end-user deletion";
388
+ readonly description: "Poll the latest deletion task for an end user, including after the user data has been removed.\n\nUse the same agent_id and external_user_id as the confirmed DELETE. Status is pending, snapshotting, deleting, done or failed. Counts are empty until a verified snapshot exists. A failed task remains blocked and resumes when DELETE is retried with matching confirmation. snapshot_key is an operator recovery reference retained for seven days, not a public download URL. End-user credentials, inaccessible or personal agents, and missing tasks return 404. This read does not create a task or charge usage.";
389
+ readonly http: "GET";
390
+ readonly path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/deletion";
391
+ readonly streaming: "no";
392
+ readonly pagination: false;
393
+ readonly pathParams: readonly [{
394
+ readonly name: "agent_id";
395
+ readonly sdkName: "agent_id";
396
+ }, {
397
+ readonly name: "external_user_id";
398
+ readonly sdkName: "external_user_id";
399
+ }];
400
+ readonly query: readonly [];
350
401
  }, {
351
402
  readonly resource: "agent.agents.endUsers.revokeTokens";
352
403
  readonly method: "create";
@@ -381,6 +432,20 @@ export declare const operations: readonly [{
381
432
  readonly sdkName: "external_user_id";
382
433
  }];
383
434
  readonly query: readonly [];
435
+ }, {
436
+ readonly resource: "agent.agents.unarchive";
437
+ readonly method: "create";
438
+ readonly summary: "Unarchive Agent";
439
+ readonly description: "Restore an archived agent without creating a configuration version. Already active agents are unchanged. Missing or inaccessible agents return 404. Use the returned agent id to create new sessions.";
440
+ readonly http: "POST";
441
+ readonly path: "/agent/v1/agents/{agent_id}/unarchive";
442
+ readonly streaming: "no";
443
+ readonly pagination: false;
444
+ readonly pathParams: readonly [{
445
+ readonly name: "agent_id";
446
+ readonly sdkName: "agent_id";
447
+ }];
448
+ readonly query: readonly [];
384
449
  }, {
385
450
  readonly resource: "agent.agents.versions";
386
451
  readonly method: "list";
@@ -543,7 +608,7 @@ export declare const operations: readonly [{
543
608
  readonly resource: "agent.computers";
544
609
  readonly method: "connect";
545
610
  readonly summary: "Connect computer";
546
- readonly description: "Resume the computer and issue a sandbox connection.\n\nOwn-face extension: Managed Agents has no persistent Computer connection. Returns the public SDK sandbox_id, envd_access_token and template_id. Archived computers remain accessible; foreign or absent computers return 404. Never cache credentials.";
611
+ readonly description: "Resume the computer and issue a sandbox connection.\n\nOwn-face extension: Managed Agents has no persistent Computer connection. Returns the public SDK sandbox_id, envd_access_token and template_id, plus the machine tier the computer is on now (light or heavy) and the lease that keeps it there (lease_id, lease_expires_at; lease_id is null when no lease exists). Keep the lease while the connection stays open: renew it about every 20 seconds (POST .../leases/{lease_id}/renew) and release it on close (DELETE .../leases/{lease_id}). An unrenewed lease simply expires, and the full machine is reclaimed only after that. Archived computers remain accessible; foreign or absent computers return 404. Never cache credentials.\n\nConnect to a computer with a caller-held lease. Omit the body or send {} to request light: the lightweight shell, or the heavy instance while it is running. Send {\"need\":\"heavy\"} to request full Linux for interactive programs; files are synchronized before the heavy connection is returned with tier heavy. Renew the lease while using the connection and release it with DELETE when finished.";
547
612
  readonly http: "POST";
548
613
  readonly path: "/agent/v1/computers/{computer_id}/connect";
549
614
  readonly streaming: "no";
@@ -553,6 +618,16 @@ export declare const operations: readonly [{
553
618
  readonly sdkName: "computer_id";
554
619
  }];
555
620
  readonly query: readonly [];
621
+ readonly body: {
622
+ readonly required: false;
623
+ readonly fields: readonly [{
624
+ readonly name: "need";
625
+ readonly type: "string";
626
+ readonly enum: readonly ["light", "heavy"];
627
+ readonly required: false;
628
+ readonly description: "Defaults to light. light uses the lightweight shell, or the heavy instance while it is running. heavy requests a full Linux computer for interactive programs; heavy running time counts toward the daily budget in seconds.";
629
+ }];
630
+ };
556
631
  }, {
557
632
  readonly resource: "agent.computers.files";
558
633
  readonly method: "list";
@@ -591,6 +666,40 @@ export declare const operations: readonly [{
591
666
  readonly required: true;
592
667
  readonly description: "Absolute path of the file whose content to download, as returned in the path field of computers.files.list.";
593
668
  }];
669
+ }, {
670
+ readonly resource: "agent.computers.leases";
671
+ readonly method: "delete";
672
+ readonly summary: "Release computer lease";
673
+ readonly description: "Give the lease back when a connection closes so the full machine can be reclaimed without waiting for it to expire.\n\nOwn-face extension. Idempotent: an unknown or already released lease succeeds as well. Foreign or absent computers return 404.";
674
+ readonly http: "DELETE";
675
+ readonly path: "/agent/v1/computers/{computer_id}/leases/{lease_id}";
676
+ readonly streaming: "no";
677
+ readonly pagination: false;
678
+ readonly pathParams: readonly [{
679
+ readonly name: "computer_id";
680
+ readonly sdkName: "computer_id";
681
+ }, {
682
+ readonly name: "lease_id";
683
+ readonly sdkName: "lease_id";
684
+ }];
685
+ readonly query: readonly [];
686
+ }, {
687
+ readonly resource: "agent.computers.leases.renew";
688
+ readonly method: "create";
689
+ readonly summary: "Renew computer lease";
690
+ readonly description: "Extend the lease a connection holds so the full machine stays in service while the connection is open.\n\nOwn-face extension. A lease that is no longer valid (released, expired, or the computer moved to another machine) returns 409 LEASE_STALE; call connect again for a new connection and lease. Foreign or absent computers return 404.";
691
+ readonly http: "POST";
692
+ readonly path: "/agent/v1/computers/{computer_id}/leases/{lease_id}/renew";
693
+ readonly streaming: "no";
694
+ readonly pagination: false;
695
+ readonly pathParams: readonly [{
696
+ readonly name: "computer_id";
697
+ readonly sdkName: "computer_id";
698
+ }, {
699
+ readonly name: "lease_id";
700
+ readonly sdkName: "lease_id";
701
+ }];
702
+ readonly query: readonly [];
594
703
  }, {
595
704
  readonly resource: "agent.deploymentRuns";
596
705
  readonly method: "list";
@@ -930,6 +1039,37 @@ export declare const operations: readonly [{
930
1039
  readonly sdkName: "deployment_id";
931
1040
  }];
932
1041
  readonly query: readonly [];
1042
+ }, {
1043
+ readonly resource: "agent.embed";
1044
+ readonly method: "retrieveAppearance";
1045
+ readonly summary: "Read chat appearance";
1046
+ readonly description: "Load saved appearance for an iframe or Hosted chat page. Supply an end-user embed token as Bearer authorization, or a console-issued publishable key in Praxis-Publishable-Key before anonymous token issuance. The credential selects the agent; identity_number and agent_id query parameters are rejected with 400. Missing appearance returns an empty object. Kit option names retain camelCase. Responses are private and cacheable for 60 seconds. Component hosts configure Kit in their own code instead.";
1047
+ readonly http: "GET";
1048
+ readonly path: "/agent/v1/embed/appearance";
1049
+ readonly streaming: "no";
1050
+ readonly pagination: false;
1051
+ readonly pathParams: readonly [];
1052
+ readonly query: readonly [];
1053
+ }, {
1054
+ readonly resource: "agent.embed.exchange";
1055
+ readonly method: "create";
1056
+ readonly summary: "Exchange Hosted Code";
1057
+ readonly description: "Redeem a single-use hosted link credential for an end-user token.\n\nRead code from the c fragment parameter of hosted_url returned by embed token creation with hosted true, then remove the fragment before exchanging. No Authorization header is required; the code authenticates this request. The code expires after 60 seconds and is consumed atomically on exchange, so concurrent attempts have only one winner. Expired, used and unknown codes return the same 404 body. Keep the token in memory and return to the host website for a fresh link when it expires; exchange cannot refresh it. Requests are IP limited per minute using the anonymous entrypoint budget (default 20). Example body is {\"code\":\"<code from hosted_url>\"}.";
1058
+ readonly http: "POST";
1059
+ readonly path: "/agent/v1/embed/exchange";
1060
+ readonly streaming: "no";
1061
+ readonly pagination: false;
1062
+ readonly pathParams: readonly [];
1063
+ readonly query: readonly [];
1064
+ readonly body: {
1065
+ readonly required: true;
1066
+ readonly fields: readonly [{
1067
+ readonly name: "code";
1068
+ readonly type: "string";
1069
+ readonly required: true;
1070
+ readonly description: "Single-use credential from the c fragment parameter of hosted_url returned by embed token creation. Valid for 60 seconds.";
1071
+ }];
1072
+ };
933
1073
  }, {
934
1074
  readonly resource: "agent.embedTokens";
935
1075
  readonly method: "list";
@@ -965,7 +1105,7 @@ export declare const operations: readonly [{
965
1105
  readonly resource: "agent.embedTokens";
966
1106
  readonly method: "create";
967
1107
  readonly summary: "Create Embed Token";
968
- readonly description: "Issue a short-lived credential on your backend for an end user of a service agent.\n\nRequires an active service agent in your organization with an embed policy. Pins the requested version or the latest version and snapshots the policy environment, vaults and resources; metadata comes from the request. Blocked users cannot receive tokens. Keep your API key on the backend and pass only the returned token to the frontend. Every call creates a new grant; issuance is not idempotent. The hosted field is not supported.";
1108
+ readonly description: "Issue a short-lived credential on your backend for an end user of a service agent.\n\nRequires an active service agent in your organization with an embed policy. Pins the requested version or the latest version and snapshots the policy environment, vaults and resources; metadata comes from the request. Blocked users cannot receive tokens. Keep your API key on the backend and pass only the returned token to the frontend. Every call creates a new grant; issuance is not idempotent. Set hosted to true to also receive hosted_url; redirect the user there within 60 seconds. The agent must have an identity_number. The URL fragment contains a single-use exchange credential, not the token. Omit hosted or set false for ordinary token issuance.";
969
1109
  readonly http: "POST";
970
1110
  readonly path: "/agent/v1/embed_tokens";
971
1111
  readonly streaming: "no";
@@ -975,6 +1115,11 @@ export declare const operations: readonly [{
975
1115
  readonly body: {
976
1116
  readonly required: true;
977
1117
  readonly fields: readonly [{
1118
+ readonly name: "hosted";
1119
+ readonly type: "boolean";
1120
+ readonly required: false;
1121
+ readonly description: "Set true to also return a hosted chat URL with a single-use credential valid for 60 seconds. Defaults to false; the agent must have an identity_number.";
1122
+ }, {
978
1123
  readonly name: "agent";
979
1124
  readonly type: "string";
980
1125
  readonly required: true;
@@ -1023,6 +1168,31 @@ export declare const operations: readonly [{
1023
1168
  readonly description: "Host metadata preserved verbatim; at most 16 keys of 1–64 characters and string values of at most 512 characters. Defaults to an empty object.";
1024
1169
  }];
1025
1170
  };
1171
+ }, {
1172
+ readonly resource: "agent.embedTokens.anonymous";
1173
+ readonly method: "create";
1174
+ readonly summary: "Issue anonymous visitor token";
1175
+ readonly description: "Obtain a short-lived embedding token for a visitor without an account using the agent owner's publishable key.\n\nNo Authorization header is required. Send the browser Origin allowed by the agent policy. Save a returned visitor_secret and reuse it for refreshes; only new visitors receive one. Unknown secrets create new visitors, and extra fields including visitor_id return 400. Issuance uses the key creator's organization membership, the key session budget and the smaller of the policy TTL maximum and 3600 seconds. IP requests are limited per minute (default 20); UTC daily session and spending caps are checked across the key's primary sessions created that day. Token issuance itself does not create a session or charge usage; subsequent sessions bill the host organization. Example body: {\"publishable_key\":\"pk_praxis_example\"}.";
1176
+ readonly http: "POST";
1177
+ readonly path: "/agent/v1/embed_tokens/anonymous";
1178
+ readonly streaming: "no";
1179
+ readonly pagination: false;
1180
+ readonly pathParams: readonly [];
1181
+ readonly query: readonly [];
1182
+ readonly body: {
1183
+ readonly required: true;
1184
+ readonly fields: readonly [{
1185
+ readonly name: "publishable_key";
1186
+ readonly type: "string";
1187
+ readonly required: true;
1188
+ readonly description: "Public key created by the service agent owner; safe to include in browser code.";
1189
+ }, {
1190
+ readonly name: "visitor_secret";
1191
+ readonly type: "string";
1192
+ readonly required: false;
1193
+ readonly description: "Secret returned by a previous anonymous issuance for this key. Omit for a new visitor; an unknown secret creates a new visitor.";
1194
+ }];
1195
+ };
1026
1196
  }, {
1027
1197
  readonly resource: "agent.embedTokens.revoke";
1028
1198
  readonly method: "create";
@@ -1351,6 +1521,20 @@ export declare const operations: readonly [{
1351
1521
  readonly description: "Praxis extension: explicit session thinking effort; null inherits the pinned agent default, then the model default. none disables thinking only when model.thinking.can_disable is true. Unsupported efforts return 400 invalid_request_error.";
1352
1522
  }];
1353
1523
  };
1524
+ }, {
1525
+ readonly resource: "agent.sessions";
1526
+ readonly method: "delete";
1527
+ readonly summary: "Delete session";
1528
+ readonly description: "Delete an idle or terminated session and its event history after saving a deletion snapshot. Supply the session id from creation or listing. Running sessions return 409 INVALID_STATE: interrupt first or wait until idle or terminated. Afterwards retrieval and event listing return 404 and lists omit the session. Example: DELETE /agent/v1/sessions/sesn_example.";
1529
+ readonly http: "DELETE";
1530
+ readonly path: "/agent/v1/sessions/{session_id}";
1531
+ readonly streaming: "no";
1532
+ readonly pagination: false;
1533
+ readonly pathParams: readonly [{
1534
+ readonly name: "session_id";
1535
+ readonly sdkName: "session_id";
1536
+ }];
1537
+ readonly query: readonly [];
1354
1538
  }, {
1355
1539
  readonly resource: "agent.sessions";
1356
1540
  readonly method: "retrieve";
@@ -1563,7 +1747,7 @@ export declare const operations: readonly [{
1563
1747
  readonly resource: "agent.sessions.events";
1564
1748
  readonly method: "list";
1565
1749
  readonly summary: "List session events";
1566
- readonly description: "Read the event history of a session as a page of events, oldest first by default (order=desc for newest first). Use it after sending a message to collect the reply, to find tool calls that wait for approval (session.status_idle with stop_reason requires_action lists their event_ids), or to audit a run; to follow a running session live use sessions.events.stream instead. Filter by types and by a created_at range on processed_at; pages hold at most 100 events (default 20) and next_page continues. A failed run emits session.error before session.status_terminated. Native history also includes user.steer, user.withdraw, system.notification, session.forked, session.goal_changed and session.goal_verification; these are not accepted by the /anthropic/v1 event-type filter.";
1750
+ readonly description: "Read the event history of a session as a page of events, oldest first by default (order=desc for newest first). Use it after sending a message to collect the reply, to find tool calls that wait for approval or client custom tool results (session.status_idle with stop_reason requires_action lists their event_ids), or to audit a run; to follow a running session live use sessions.events.stream instead. Filter by types and by a created_at range on processed_at; pages hold at most 100 events (default 20) and next_page continues. A failed run emits session.error before session.status_terminated. Native history also includes user.steer, user.withdraw, system.notification, session.forked, session.goal_changed and session.goal_verification; these are not accepted by the /anthropic/v1 event-type filter.";
1567
1751
  readonly http: "GET";
1568
1752
  readonly path: "/agent/v1/sessions/{session_id}/events";
1569
1753
  readonly streaming: "no";
@@ -1619,7 +1803,7 @@ export declare const operations: readonly [{
1619
1803
  readonly resource: "agent.sessions.events";
1620
1804
  readonly method: "send";
1621
1805
  readonly summary: "Send session events";
1622
- readonly description: "Send events to a session: user.message (exactly one nonempty text block), user.interrupt, user.tool_confirmation to allow or deny a pending tool call, user.steer to inject a queued user.message into a turn that is still running, and user.withdraw to retract a queued message. The response only acknowledges the inputs; read replies with sessions.events.list or sessions.events.stream. A message sent while the session waits for tool approval is queued (processed_at null) and runs in order after the approval is resolved. Archived sessions reject new messages. To approve, read a pending agent.tool_use or agent.mcp_tool_use event and send {type: \"user.tool_confirmation\", tool_use_id: <that event id>, result: \"allow\"} (or deny); include session_thread_id for a child approval. Native confirmations also accept updated_permissions, answers and annotations, which /anthropic/v1 rejects.";
1806
+ readonly description: "Attach optional praxis_context={items:[{name,value}]} to user.message for untrusted page context on this turn only (maximum 32 items, 4096 UTF-8 JSON bytes). /anthropic/v1 rejects this field. Send events to a session: user.message (exactly one nonempty text block), user.interrupt, user.tool_confirmation to allow or deny a pending tool call, user.custom_tool_result to return a custom tool result, user.steer to inject a queued user.message into a turn that is still running, and user.withdraw to retract a queued message. The response only acknowledges the inputs; read replies with sessions.events.list or sessions.events.stream. A message sent while the session waits for tool approval is queued (processed_at null) and runs in order after the approval is resolved. Archived sessions reject new messages. To approve, read a pending agent.tool_use or agent.mcp_tool_use event and send {type: \"user.tool_confirmation\", tool_use_id: <that event id>, result: \"allow\"} (or deny); include session_thread_id for a child approval. Native confirmations also accept updated_permissions, answers and annotations, which /anthropic/v1 rejects. Both faces accept user.custom_tool_result with custom_tool_use_id from agent.custom_tool_use.id or the requires_action stop_reason.event_ids. Unlike Anthropic, result content accepts only text blocks (omit it for an empty array). Omitted or null is_error means false. The server routes child calls by id; session_thread_id is rejected in this input. Unknown call ids return 400; duplicate results or calls no longer waiting return 409.";
1623
1807
  readonly http: "POST";
1624
1808
  readonly path: "/agent/v1/sessions/{session_id}/events";
1625
1809
  readonly streaming: "no";
@@ -2560,6 +2744,23 @@ export declare const operations: readonly [{
2560
2744
  readonly sdkName: "version_id";
2561
2745
  }];
2562
2746
  readonly query: readonly [];
2747
+ }, {
2748
+ readonly resource: "application.workers.versions.assets";
2749
+ readonly method: "retrieveManifest";
2750
+ readonly summary: "Get version asset manifest";
2751
+ readonly description: "Read the retained asset paths, content hashes and byte sizes of a version for publication planning. This read creates no session or version. A version without assets returns an empty manifest; unavailable artifacts and foreign resources return 404.";
2752
+ readonly http: "GET";
2753
+ readonly path: "/application/v1/workers/{worker_id}/versions/{version_id}/assets/manifest";
2754
+ readonly streaming: "no";
2755
+ readonly pagination: false;
2756
+ readonly pathParams: readonly [{
2757
+ readonly name: "worker_id";
2758
+ readonly sdkName: "worker_id";
2759
+ }, {
2760
+ readonly name: "version_id";
2761
+ readonly sdkName: "version_id";
2762
+ }];
2763
+ readonly query: readonly [];
2563
2764
  }, {
2564
2765
  readonly resource: "automation.actions";
2565
2766
  readonly method: "list";
@@ -5301,7 +5502,7 @@ export declare const operations: readonly [{
5301
5502
  readonly name: "{column}";
5302
5503
  readonly type: "string";
5303
5504
  readonly required: false;
5304
- readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix.";
5505
+ readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported.";
5305
5506
  }, {
5306
5507
  readonly name: "and";
5307
5508
  readonly type: "string";
@@ -5341,7 +5542,7 @@ export declare const operations: readonly [{
5341
5542
  readonly name: "on_conflict";
5342
5543
  readonly type: "string";
5343
5544
  readonly required: false;
5344
- readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5545
+ readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5345
5546
  }, {
5346
5547
  readonly name: "columns";
5347
5548
  readonly type: "string";
@@ -5352,7 +5553,7 @@ export declare const operations: readonly [{
5352
5553
  readonly resource: "database.databases.rest";
5353
5554
  readonly method: "retrieve";
5354
5555
  readonly summary: "Select rows";
5355
- readonly description: "Read matching rows with filters, selected columns and ordering. Returns at most 1000 rows per request, including when limit is omitted. Content-Range reports the actual returned interval and the total when count is requested. PATCH and DELETE are not subject to this read cap. Unlike Supabase, casts, aggregates, spread and join modifiers are unsupported. Each table supports up to 1,000,000 rows. Query budget: 8,000 ms with a shared 3,000,000-row safety ceiling. Create indexes on filtered or sorted fields, or narrow the request when it exceeds its budget. Synchronous SQLite aggregates use candidate-row throughput estimates before execution; deployed Workers freeze clocks during synchronous CPU work, so the timer is not a guaranteed server-side interrupt. Count preferences: without filters, exact, planned and estimated all use SQLite's exact b-tree count. With filters, exact counts within budget; planned skips counting and reports an unknown total (Content-Range: 0-24/*); estimated attempts exact counting only when the preflight budget allows it, otherwise reports an unknown total. Preference-Applied echoes the requested count mode. Error table: QUERY_CANCELED / PostgREST 57014 is HTTP 500, retryable=false: Query timed out: index filtered or sorted fields, or narrow the range. DATABASE_INVALID_STATE is HTTP 409 for operations on a deleting database. Cleared or nonexistent databases return DATABASE_NOT_FOUND / HTTP 404. The count is an HTTP Content-Range response header, not a JSON property. Praxis SDK/codemode methods return the body only; a page length is not a total unless you know all matches fit in that page.";
5556
+ readonly description: "Read matching rows with filters, selected columns and ordering. Returns at most 1000 rows per request, including when limit is omitted. Content-Range reports the actual returned interval and the total when count is requested. PATCH and DELETE are not subject to this read cap. Unlike Supabase, casts, aggregates, spread and join modifiers are unsupported. Each table supports up to 1,000,000 rows. Query budget: 8,000 ms with a shared 3,000,000-row safety ceiling. Create indexes on filtered or sorted fields, or narrow the request when it exceeds its budget. Synchronous SQLite aggregates use candidate-row throughput estimates before execution; deployed Workers freeze clocks during synchronous CPU work, so the timer is not a guaranteed server-side interrupt. Count preferences: without filters, exact, planned and estimated all use SQLite's exact b-tree count. With filters, exact counts within budget; planned skips counting and reports an unknown total (Content-Range: 0-24/*); estimated attempts exact counting only when the preflight budget allows it, otherwise reports an unknown total. Preference-Applied echoes the requested count mode. Error table: QUERY_CANCELED / PostgREST 57014 is HTTP 500, retryable=false: Query timed out: index filtered or sorted fields, or narrow the range. DATABASE_INVALID_STATE is HTTP 409 for operations on a deleting database. Cleared or nonexistent databases return DATABASE_NOT_FOUND / HTTP 404. The count is an HTTP Content-Range response header, not a JSON property. Use praxis.database.count in the SDK or codemode to return { count: number | null }; a page length is not a total unless you know all matches fit in that page.";
5356
5557
  readonly http: "GET";
5357
5558
  readonly path: "/database/v1/databases/{database_id}/rest/{table}";
5358
5559
  readonly streaming: "no";
@@ -5373,7 +5574,7 @@ export declare const operations: readonly [{
5373
5574
  readonly name: "{column}";
5374
5575
  readonly type: "string";
5375
5576
  readonly required: false;
5376
- readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix.";
5577
+ readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported.";
5377
5578
  }, {
5378
5579
  readonly name: "and";
5379
5580
  readonly type: "string";
@@ -5413,7 +5614,7 @@ export declare const operations: readonly [{
5413
5614
  readonly name: "on_conflict";
5414
5615
  readonly type: "string";
5415
5616
  readonly required: false;
5416
- readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5617
+ readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5417
5618
  }, {
5418
5619
  readonly name: "columns";
5419
5620
  readonly type: "string";
@@ -5424,7 +5625,7 @@ export declare const operations: readonly [{
5424
5625
  readonly resource: "database.databases.rest";
5425
5626
  readonly method: "head";
5426
5627
  readonly summary: "Count rows";
5427
- readonly description: "Inspect the HTTP row count and range without retrieving row data; send Prefer: count=exact for a filtered count. Returns no body and does not fetch or serialize row data. A known count determines the interval using limit/offset or Range with a default and maximum page size of 1000. Without a count preference, or when the selected count mode cannot supply a total, Content-Range is */*. Singular Accept still validates page cardinality. Unlike Supabase, planned and estimated counts do not use PostgreSQL planner estimates. Count preferences: without filters, exact, planned and estimated all use SQLite's exact b-tree count. With filters, exact counts within budget; planned skips counting and reports an unknown total (Content-Range: 0-24/*); estimated attempts exact counting only when the preflight budget allows it, otherwise reports an unknown total. Preference-Applied echoes the requested count mode. Praxis SDK/codemode methods return only the empty body, not the Content-Range response header; use an HTTP client when you need that header.";
5628
+ readonly description: "Inspect the HTTP row count and range without retrieving row data; send Prefer: count=exact for a filtered count. Returns no body and does not fetch or serialize row data. A known count determines the interval using limit/offset or Range with a default and maximum page size of 1000. Without a count preference, or when the selected count mode cannot supply a total, Content-Range is */*. Singular Accept still validates page cardinality. Unlike Supabase, planned and estimated counts do not use PostgreSQL planner estimates. Count preferences: without filters, exact, planned and estimated all use SQLite's exact b-tree count. With filters, exact counts within budget; planned skips counting and reports an unknown total (Content-Range: 0-24/*); estimated attempts exact counting only when the preflight budget allows it, otherwise reports an unknown total. Preference-Applied echoes the requested count mode. Use praxis.database.count in the SDK or codemode to return { count: number | null } from this header without retrieving rows.";
5428
5629
  readonly http: "HEAD";
5429
5630
  readonly path: "/database/v1/databases/{database_id}/rest/{table}";
5430
5631
  readonly streaming: "no";
@@ -5445,7 +5646,7 @@ export declare const operations: readonly [{
5445
5646
  readonly name: "{column}";
5446
5647
  readonly type: "string";
5447
5648
  readonly required: false;
5448
- readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix.";
5649
+ readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported.";
5449
5650
  }, {
5450
5651
  readonly name: "and";
5451
5652
  readonly type: "string";
@@ -5485,7 +5686,7 @@ export declare const operations: readonly [{
5485
5686
  readonly name: "on_conflict";
5486
5687
  readonly type: "string";
5487
5688
  readonly required: false;
5488
- readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5689
+ readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5489
5690
  }, {
5490
5691
  readonly name: "columns";
5491
5692
  readonly type: "string";
@@ -5517,7 +5718,7 @@ export declare const operations: readonly [{
5517
5718
  readonly name: "{column}";
5518
5719
  readonly type: "string";
5519
5720
  readonly required: false;
5520
- readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix.";
5721
+ readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported.";
5521
5722
  }, {
5522
5723
  readonly name: "and";
5523
5724
  readonly type: "string";
@@ -5557,7 +5758,7 @@ export declare const operations: readonly [{
5557
5758
  readonly name: "on_conflict";
5558
5759
  readonly type: "string";
5559
5760
  readonly required: false;
5560
- readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5761
+ readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5561
5762
  }, {
5562
5763
  readonly name: "columns";
5563
5764
  readonly type: "string";
@@ -5572,7 +5773,7 @@ export declare const operations: readonly [{
5572
5773
  readonly resource: "database.databases.rest";
5573
5774
  readonly method: "create";
5574
5775
  readonly summary: "Insert rows";
5575
- readonly description: "Insert rows into an existing table after defining its fields; at most 500 rows per request. Each request is atomic: any failure rolls back the entire batch. There are no transactions across requests.\nRows are filled to the union of their keys with null; send Prefer: missing=default to use field defaults for missing keys.\nThe default is return=minimal: success returns HTTP 201 with an empty body. Send Prefer: return=representation to return the inserted rows. Unlike Supabase, upsert conflicts can target only id or one unique field, not a composite key. Each table supports up to 1,000,000 rows.";
5776
+ readonly description: "Insert rows into an existing table after defining its fields; at most 500 rows per request. Each request is atomic: any failure rolls back the entire batch. There are no transactions across requests.\nRows are filled to the union of their keys with null; send Prefer: missing=default to use field defaults for missing keys.\nThe default is return=minimal: success returns HTTP 201 with an empty body. Send Prefer: return=representation to return the inserted rows. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. Unlike Supabase, upsert conflicts can target only id or one unique field, not a composite key. Each table supports up to 1,000,000 rows.";
5576
5777
  readonly http: "POST";
5577
5778
  readonly path: "/database/v1/databases/{database_id}/rest/{table}";
5578
5779
  readonly streaming: "no";
@@ -5593,7 +5794,7 @@ export declare const operations: readonly [{
5593
5794
  readonly name: "{column}";
5594
5795
  readonly type: "string";
5595
5796
  readonly required: false;
5596
- readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. See the filter operator matrix.";
5797
+ readonly description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns. Supported operators: eq (equal), neq (not equal; ne is not supported), gt/gte/lt/lte (comparisons), like (case-sensitive text pattern), ilike (case-insensitive text pattern), in (membership), is (null/boolean test), cs (contains), cd (contained by), and ov (array overlap). For like/ilike, * or % matches any sequence and _ matches one character, e.g. title=ilike.*spring*; URL-encode a literal % as %25. Use days=in.(1,2,3), title=is.null, active=is.true or active=is.false; is.not_null and is.unknown are also accepted (unknown means null). Negate a condition with not., e.g. title=not.eq.draft. Multiple filters are ANDed; use or=(title.eq.a,title.eq.b), and=(days.gte.1,days.lte.3), not.or=(...) or not.and=(...), with nested and(...) and or(...) groups as needed. cs/cd accept JSON objects or arrays on JSON fields; cs also accepts a JSON scalar. For array values or multi-link fields, use cs.{a,b}, cd.{a,b} or ov.{a,b}. JSON paths use -> for JSON and ->> for text, e.g. attributes->>has_onsen=eq.true or attributes->tags=cs.[1,2]; chain -> segments and end with ->> for text. Dot paths such as attributes.has_onsen are unsupported. Full-text, regex, range operators and any/all modifiers are unsupported.";
5597
5798
  }, {
5598
5799
  readonly name: "and";
5599
5800
  readonly type: "string";
@@ -5633,7 +5834,7 @@ export declare const operations: readonly [{
5633
5834
  readonly name: "on_conflict";
5634
5835
  readonly type: "string";
5635
5836
  readonly required: false;
5636
- readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5837
+ readonly description: "POST upsert: id or one unique field with resolution=merge-duplicates|ignore-duplicates. With resolution=merge-duplicates, a conflicting row keeps columns omitted from the request; supplied values replace the whole field value (including JSON objects), and explicit null clears a nullable field. With resolution=ignore-duplicates, a conflicting row is left unchanged. Without a conflict, both modes insert a new row using field defaults for omitted fields. In a batch, a key present in another row is filled with null when omitted in this row unless missing=default is set; that null can overwrite a value during merge. With missing=default, omitted keys stay omitted for conflict merges (existing values are preserved); new rows use defaults, or null when no default exists. Explicit null never invokes a default. POST accepts an optional client id matching [A-Za-z0-9_-]{1,64}; omitted ids are generated. PATCH cannot change id.";
5637
5838
  }, {
5638
5839
  readonly name: "columns";
5639
5840
  readonly type: "string";
@@ -5676,7 +5877,7 @@ export declare const operations: readonly [{
5676
5877
  readonly resource: "database.databases.tables";
5677
5878
  readonly method: "create";
5678
5879
  readonly summary: "Create table";
5679
- readonly description: "Creates a table together with its initial fields in one call and returns it (HTTP 201) with generated tbl_ and fld_ ids. name must match ^[a-z_][a-z0-9_]{0,62}$ and be unused in this database (duplicate: 409 UNIQUE_VIOLATION). fields is required and may be an empty array; fields can also be added later with databaseAddField. Limits: 50 tables per database, 64 fields per table, and 16 indexed or unique fields per table; exceeding one returns 400 LIMIT_EXCEEDED. Every row also has a system id column, which is not declared as a field. Insert data afterwards with databaseInsert. Unlike Supabase, define schema with this table API and the field APIs; PostgreSQL DDL and SQL migration files cannot be submitted. Each table supports up to 1,000,000 rows.";
5880
+ readonly description: "Creates a table together with its initial fields in one call and returns it (HTTP 201) with generated tbl_ and fld_ ids. name must match ^[a-z_][a-z0-9_]{0,62}$ and be unused in this database (duplicate: 409 UNIQUE_VIOLATION). fields is required and may be an empty array; fields can also be added later with databaseAddField. Limits: 50 tables per database, 64 fields per table, and 16 indexed or unique fields per table; exceeding one returns 400 LIMIT_EXCEEDED. Fields default to indexed:false. Set indexed:true explicitly for fields used in filters or ordering. Only indexed:true or unique:true consumes one of the 16 indexed-or-unique field slots; a field with both consumes one slot. Unique fields still consume a slot even with indexed:false. Existing fields are unchanged. Minimal field example: {\"name\":\"notes\",\"type\":\"string\",\"indexed\":false}. Every row also has a system id column, which is not declared as a field. Insert data afterwards with databaseInsert. Unlike Supabase, define schema with this table API and the field APIs; PostgreSQL DDL and SQL migration files cannot be submitted. Each table supports up to 1,000,000 rows.";
5680
5881
  readonly http: "POST";
5681
5882
  readonly path: "/database/v1/databases/{database_id}/tables";
5682
5883
  readonly streaming: "no";
@@ -5775,7 +5976,7 @@ export declare const operations: readonly [{
5775
5976
  readonly resource: "database.databases.tables.fields";
5776
5977
  readonly method: "create";
5777
5978
  readonly summary: "Add field";
5778
- readonly description: "Adds one field to an existing table and returns the updated table (HTTP 201). Required inputs are name (lowercase letters, digits and underscores; id and names starting with _ are reserved) and type (string, integer, number, boolean, datetime, json or link); json needs options.schema and link needs options.linked_table_id and options.multiple. Adding a required field to a table that already has rows needs a default, otherwise the call fails with 400 VALIDATION_FAILED; a default is written into every existing row. Scalar fields are indexed by default, while json and link fields cannot be indexed. Limits: 64 fields and 16 indexed or unique fields per table (400 LIMIT_EXCEEDED). Unlike Supabase, schema evolution uses field definitions rather than ALTER TABLE statements or SQL migrations.";
5979
+ readonly description: "Adds one field to an existing table and returns the updated table (HTTP 201). Required inputs are name (lowercase letters, digits and underscores; id and names starting with _ are reserved) and type (string, integer, number, boolean, datetime, json or link); json needs options.schema and link needs options.linked_table_id and options.multiple. Adding a required field to a table that already has rows needs a default, otherwise the call fails with 400 VALIDATION_FAILED; a default is written into every existing row. Fields default to indexed:false. Set indexed:true explicitly for fields used in filters or ordering. Only indexed:true or unique:true consumes one of the 16 indexed-or-unique field slots; a field with both consumes one slot. Unique fields still consume a slot even with indexed:false. Existing fields are unchanged. Minimal field example: {\"name\":\"notes\",\"type\":\"string\",\"indexed\":false}. JSON and link fields cannot be indexed. Limits: 64 fields and 16 indexed or unique fields per table (400 LIMIT_EXCEEDED). Unlike Supabase, schema evolution uses field definitions rather than ALTER TABLE statements or SQL migrations.";
5779
5980
  readonly http: "POST";
5780
5981
  readonly path: "/database/v1/databases/{database_id}/tables/{table}/fields";
5781
5982
  readonly streaming: "no";