@deepraxis/cli 0.1.0-dev.ea77ce8 → 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.
- package/COMMANDS.md +27 -7
- package/dist/praxis.js +991 -64
- package/package.json +1 -1
package/dist/praxis.js
CHANGED
|
@@ -68,7 +68,7 @@ var operations = [
|
|
|
68
68
|
resource: "agent.agents",
|
|
69
69
|
method: "create",
|
|
70
70
|
summary: "Create agent",
|
|
71
|
-
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
|
|
71
|
+
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"}]}.',
|
|
72
72
|
http: "POST",
|
|
73
73
|
path: "/agent/v1/agents",
|
|
74
74
|
streaming: "no",
|
|
@@ -101,7 +101,7 @@ var operations = [
|
|
|
101
101
|
type: "array",
|
|
102
102
|
itemType: "object",
|
|
103
103
|
required: false,
|
|
104
|
-
description: "
|
|
104
|
+
description: "Praxis extension: HTTP, SSE or trusted stdio MCP servers paired with mcp_toolset entries and saved with the agent version."
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
name: "metadata",
|
|
@@ -183,6 +183,17 @@ across all toolsets allowed.`
|
|
|
183
183
|
type: "object",
|
|
184
184
|
required: false,
|
|
185
185
|
description: "Praxis extension: switchable model ids on /agent/v1 only. The default model must be included. When omitted, only the default model is selectable."
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: "preset",
|
|
189
|
+
type: "string",
|
|
190
|
+
enum: [
|
|
191
|
+
"minimal",
|
|
192
|
+
"data-editor",
|
|
193
|
+
"full"
|
|
194
|
+
],
|
|
195
|
+
required: false,
|
|
196
|
+
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."
|
|
186
197
|
}
|
|
187
198
|
]
|
|
188
199
|
}
|
|
@@ -215,7 +226,7 @@ across all toolsets allowed.`
|
|
|
215
226
|
resource: "agent.agents",
|
|
216
227
|
method: "update",
|
|
217
228
|
summary: "Update agent",
|
|
218
|
-
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
|
|
229
|
+
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.",
|
|
219
230
|
http: "POST",
|
|
220
231
|
path: "/agent/v1/agents/{agent_id}",
|
|
221
232
|
streaming: "no",
|
|
@@ -241,7 +252,7 @@ across all toolsets allowed.`
|
|
|
241
252
|
type: "array",
|
|
242
253
|
itemType: "object",
|
|
243
254
|
required: false,
|
|
244
|
-
description: "
|
|
255
|
+
description: "Praxis extension: HTTP, SSE or trusted stdio MCP servers paired with mcp_toolset entries and saved with the agent version."
|
|
245
256
|
},
|
|
246
257
|
{
|
|
247
258
|
name: "metadata",
|
|
@@ -348,6 +359,17 @@ current version; omit to apply the update unconditionally.`
|
|
|
348
359
|
type: "object",
|
|
349
360
|
required: false,
|
|
350
361
|
description: "Praxis extension: switchable model ids on /agent/v1 only. The default model must be included. When omitted, only the default model is selectable."
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
name: "preset",
|
|
365
|
+
type: "string",
|
|
366
|
+
enum: [
|
|
367
|
+
"minimal",
|
|
368
|
+
"data-editor",
|
|
369
|
+
"full"
|
|
370
|
+
],
|
|
371
|
+
required: false,
|
|
372
|
+
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."
|
|
351
373
|
}
|
|
352
374
|
]
|
|
353
375
|
}
|
|
@@ -369,6 +391,206 @@ current version; omit to apply the update unconditionally.`
|
|
|
369
391
|
],
|
|
370
392
|
query: []
|
|
371
393
|
},
|
|
394
|
+
{
|
|
395
|
+
resource: "agent.agents.endUsers",
|
|
396
|
+
method: "list",
|
|
397
|
+
summary: "List End Users",
|
|
398
|
+
description: `List users who have sessions or token issuance history on a service agent.
|
|
399
|
+
|
|
400
|
+
Ordered by last_active_at and external_user_id descending. q is a case-sensitive literal prefix, including underscores. limit is 1–100, default 20. Reuse next_page with the same organization, agent, q and limit. Preemptively blocked users without history do not appear. End-user credentials and inaccessible or personal agents return 404.`,
|
|
401
|
+
http: "GET",
|
|
402
|
+
path: "/agent/v1/agents/{agent_id}/end_users",
|
|
403
|
+
streaming: "no",
|
|
404
|
+
pagination: false,
|
|
405
|
+
pathParams: [
|
|
406
|
+
{
|
|
407
|
+
name: "agent_id",
|
|
408
|
+
sdkName: "agent_id"
|
|
409
|
+
}
|
|
410
|
+
],
|
|
411
|
+
query: [
|
|
412
|
+
{
|
|
413
|
+
name: "limit",
|
|
414
|
+
type: "integer",
|
|
415
|
+
required: false,
|
|
416
|
+
description: "Maximum users per page; defaults to 20."
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
name: "page",
|
|
420
|
+
type: "string",
|
|
421
|
+
required: false,
|
|
422
|
+
description: "next_page from the previous response with the same agent, q and limit."
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
name: "q",
|
|
426
|
+
type: "string",
|
|
427
|
+
required: false,
|
|
428
|
+
description: "Case-sensitive literal prefix of external_user_id; omit or use an empty string for all users."
|
|
429
|
+
}
|
|
430
|
+
]
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
resource: "agent.agents.endUsers",
|
|
434
|
+
method: "delete",
|
|
435
|
+
summary: "Delete end-user data",
|
|
436
|
+
description: `Delete a host application's end-user data from one service agent after explicit confirmation.
|
|
437
|
+
|
|
438
|
+
Develop 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.`,
|
|
439
|
+
http: "DELETE",
|
|
440
|
+
path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
|
|
441
|
+
streaming: "no",
|
|
442
|
+
pagination: false,
|
|
443
|
+
pathParams: [
|
|
444
|
+
{
|
|
445
|
+
name: "agent_id",
|
|
446
|
+
sdkName: "agent_id"
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
name: "external_user_id",
|
|
450
|
+
sdkName: "external_user_id"
|
|
451
|
+
}
|
|
452
|
+
],
|
|
453
|
+
query: [
|
|
454
|
+
{
|
|
455
|
+
name: "confirm",
|
|
456
|
+
type: "string",
|
|
457
|
+
required: true,
|
|
458
|
+
description: "Must exactly equal the external_user_id path parameter to confirm destructive deletion."
|
|
459
|
+
}
|
|
460
|
+
]
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
resource: "agent.agents.endUsers",
|
|
464
|
+
method: "retrieve",
|
|
465
|
+
summary: "Get End User",
|
|
466
|
+
description: `Inspect one end user and their twenty most recently updated sessions.
|
|
467
|
+
|
|
468
|
+
Use external_user_id from listing or your host application. Users without session or issuance history return 404, including preemptively blocked users. End-user credentials and inaccessible or personal agents return 404.`,
|
|
469
|
+
http: "GET",
|
|
470
|
+
path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
|
|
471
|
+
streaming: "no",
|
|
472
|
+
pagination: false,
|
|
473
|
+
pathParams: [
|
|
474
|
+
{
|
|
475
|
+
name: "agent_id",
|
|
476
|
+
sdkName: "agent_id"
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
name: "external_user_id",
|
|
480
|
+
sdkName: "external_user_id"
|
|
481
|
+
}
|
|
482
|
+
],
|
|
483
|
+
query: []
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
resource: "agent.agents.endUsers.block",
|
|
487
|
+
method: "create",
|
|
488
|
+
summary: "Block End User",
|
|
489
|
+
description: `Block token issuance and session creation, then revoke existing tokens for an end user.
|
|
490
|
+
|
|
491
|
+
May block a user before any history exists; timestamps are then null and counts and cost are zero. Requires an embed policy, otherwise returns 409 with setup guidance. Deduplicates the policy blocklist and retains its 1000-user maximum. If revocation returns 502, the user remains blocked; retry to finish revocation. Repeats keep the user blocked and revoke any remaining grants. End-user credentials and inaccessible or personal agents return 404.`,
|
|
492
|
+
http: "POST",
|
|
493
|
+
path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/block",
|
|
494
|
+
streaming: "no",
|
|
495
|
+
pagination: false,
|
|
496
|
+
pathParams: [
|
|
497
|
+
{
|
|
498
|
+
name: "agent_id",
|
|
499
|
+
sdkName: "agent_id"
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
name: "external_user_id",
|
|
503
|
+
sdkName: "external_user_id"
|
|
504
|
+
}
|
|
505
|
+
],
|
|
506
|
+
query: []
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
resource: "agent.agents.endUsers",
|
|
510
|
+
method: "retrieveDeletion",
|
|
511
|
+
summary: "Get end-user deletion",
|
|
512
|
+
description: `Poll the latest deletion task for an end user, including after the user data has been removed.
|
|
513
|
+
|
|
514
|
+
Use 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.`,
|
|
515
|
+
http: "GET",
|
|
516
|
+
path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/deletion",
|
|
517
|
+
streaming: "no",
|
|
518
|
+
pagination: false,
|
|
519
|
+
pathParams: [
|
|
520
|
+
{
|
|
521
|
+
name: "agent_id",
|
|
522
|
+
sdkName: "agent_id"
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
name: "external_user_id",
|
|
526
|
+
sdkName: "external_user_id"
|
|
527
|
+
}
|
|
528
|
+
],
|
|
529
|
+
query: []
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
resource: "agent.agents.endUsers.revokeTokens",
|
|
533
|
+
method: "create",
|
|
534
|
+
summary: "Revoke End User Tokens",
|
|
535
|
+
description: `Revoke all issued tokens for an end user and terminate their open embed streams.
|
|
536
|
+
|
|
537
|
+
Revokes credentials before marking grants revoked. Upstream failure returns 502 without changing grant revocation timestamps. Returns the count of newly revoked grants; a repeat without new grants returns zero. Does not block future issuance. End-user credentials and inaccessible or personal agents return 404.`,
|
|
538
|
+
http: "POST",
|
|
539
|
+
path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/revoke_tokens",
|
|
540
|
+
streaming: "no",
|
|
541
|
+
pagination: false,
|
|
542
|
+
pathParams: [
|
|
543
|
+
{
|
|
544
|
+
name: "agent_id",
|
|
545
|
+
sdkName: "agent_id"
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
name: "external_user_id",
|
|
549
|
+
sdkName: "external_user_id"
|
|
550
|
+
}
|
|
551
|
+
],
|
|
552
|
+
query: []
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
resource: "agent.agents.endUsers.unblock",
|
|
556
|
+
method: "create",
|
|
557
|
+
summary: "Unblock End User",
|
|
558
|
+
description: `Allow an end user to receive new tokens and create new sessions again.
|
|
559
|
+
|
|
560
|
+
Removes the user from the blocklist; previously revoked tokens stay revoked. Idempotent. Requires an embed policy, otherwise returns 409 with setup guidance. Returns null timestamps and zero counts and cost when no session or issuance history exists. End-user credentials and inaccessible or personal agents return 404.`,
|
|
561
|
+
http: "POST",
|
|
562
|
+
path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/unblock",
|
|
563
|
+
streaming: "no",
|
|
564
|
+
pagination: false,
|
|
565
|
+
pathParams: [
|
|
566
|
+
{
|
|
567
|
+
name: "agent_id",
|
|
568
|
+
sdkName: "agent_id"
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
name: "external_user_id",
|
|
572
|
+
sdkName: "external_user_id"
|
|
573
|
+
}
|
|
574
|
+
],
|
|
575
|
+
query: []
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
resource: "agent.agents.unarchive",
|
|
579
|
+
method: "create",
|
|
580
|
+
summary: "Unarchive Agent",
|
|
581
|
+
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.",
|
|
582
|
+
http: "POST",
|
|
583
|
+
path: "/agent/v1/agents/{agent_id}/unarchive",
|
|
584
|
+
streaming: "no",
|
|
585
|
+
pagination: false,
|
|
586
|
+
pathParams: [
|
|
587
|
+
{
|
|
588
|
+
name: "agent_id",
|
|
589
|
+
sdkName: "agent_id"
|
|
590
|
+
}
|
|
591
|
+
],
|
|
592
|
+
query: []
|
|
593
|
+
},
|
|
372
594
|
{
|
|
373
595
|
resource: "agent.agents.versions",
|
|
374
596
|
method: "list",
|
|
@@ -580,7 +802,9 @@ Own-face superset: Managed Agents has no persistent Computer attachment director
|
|
|
580
802
|
summary: "Connect computer",
|
|
581
803
|
description: `Resume the computer and issue a sandbox connection.
|
|
582
804
|
|
|
583
|
-
Own-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
|
|
805
|
+
Own-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.
|
|
806
|
+
|
|
807
|
+
Connect 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.`,
|
|
584
808
|
http: "POST",
|
|
585
809
|
path: "/agent/v1/computers/{computer_id}/connect",
|
|
586
810
|
streaming: "no",
|
|
@@ -591,7 +815,22 @@ Own-face extension: Managed Agents has no persistent Computer connection. Return
|
|
|
591
815
|
sdkName: "computer_id"
|
|
592
816
|
}
|
|
593
817
|
],
|
|
594
|
-
query: []
|
|
818
|
+
query: [],
|
|
819
|
+
body: {
|
|
820
|
+
required: false,
|
|
821
|
+
fields: [
|
|
822
|
+
{
|
|
823
|
+
name: "need",
|
|
824
|
+
type: "string",
|
|
825
|
+
enum: [
|
|
826
|
+
"light",
|
|
827
|
+
"heavy"
|
|
828
|
+
],
|
|
829
|
+
required: false,
|
|
830
|
+
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."
|
|
831
|
+
}
|
|
832
|
+
]
|
|
833
|
+
}
|
|
595
834
|
},
|
|
596
835
|
{
|
|
597
836
|
resource: "agent.computers.files",
|
|
@@ -645,6 +884,52 @@ Praxis extension: MA only has session-scoped temporary containers and memory_sto
|
|
|
645
884
|
}
|
|
646
885
|
]
|
|
647
886
|
},
|
|
887
|
+
{
|
|
888
|
+
resource: "agent.computers.leases",
|
|
889
|
+
method: "delete",
|
|
890
|
+
summary: "Release computer lease",
|
|
891
|
+
description: `Give the lease back when a connection closes so the full machine can be reclaimed without waiting for it to expire.
|
|
892
|
+
|
|
893
|
+
Own-face extension. Idempotent: an unknown or already released lease succeeds as well. Foreign or absent computers return 404.`,
|
|
894
|
+
http: "DELETE",
|
|
895
|
+
path: "/agent/v1/computers/{computer_id}/leases/{lease_id}",
|
|
896
|
+
streaming: "no",
|
|
897
|
+
pagination: false,
|
|
898
|
+
pathParams: [
|
|
899
|
+
{
|
|
900
|
+
name: "computer_id",
|
|
901
|
+
sdkName: "computer_id"
|
|
902
|
+
},
|
|
903
|
+
{
|
|
904
|
+
name: "lease_id",
|
|
905
|
+
sdkName: "lease_id"
|
|
906
|
+
}
|
|
907
|
+
],
|
|
908
|
+
query: []
|
|
909
|
+
},
|
|
910
|
+
{
|
|
911
|
+
resource: "agent.computers.leases.renew",
|
|
912
|
+
method: "create",
|
|
913
|
+
summary: "Renew computer lease",
|
|
914
|
+
description: `Extend the lease a connection holds so the full machine stays in service while the connection is open.
|
|
915
|
+
|
|
916
|
+
Own-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.`,
|
|
917
|
+
http: "POST",
|
|
918
|
+
path: "/agent/v1/computers/{computer_id}/leases/{lease_id}/renew",
|
|
919
|
+
streaming: "no",
|
|
920
|
+
pagination: false,
|
|
921
|
+
pathParams: [
|
|
922
|
+
{
|
|
923
|
+
name: "computer_id",
|
|
924
|
+
sdkName: "computer_id"
|
|
925
|
+
},
|
|
926
|
+
{
|
|
927
|
+
name: "lease_id",
|
|
928
|
+
sdkName: "lease_id"
|
|
929
|
+
}
|
|
930
|
+
],
|
|
931
|
+
query: []
|
|
932
|
+
},
|
|
648
933
|
{
|
|
649
934
|
resource: "agent.deploymentRuns",
|
|
650
935
|
method: "list",
|
|
@@ -1074,6 +1359,43 @@ null to clear. Maximum 50.`
|
|
|
1074
1359
|
],
|
|
1075
1360
|
query: []
|
|
1076
1361
|
},
|
|
1362
|
+
{
|
|
1363
|
+
resource: "agent.embed",
|
|
1364
|
+
method: "retrieveAppearance",
|
|
1365
|
+
summary: "Read chat appearance",
|
|
1366
|
+
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.",
|
|
1367
|
+
http: "GET",
|
|
1368
|
+
path: "/agent/v1/embed/appearance",
|
|
1369
|
+
streaming: "no",
|
|
1370
|
+
pagination: false,
|
|
1371
|
+
pathParams: [],
|
|
1372
|
+
query: []
|
|
1373
|
+
},
|
|
1374
|
+
{
|
|
1375
|
+
resource: "agent.embed.exchange",
|
|
1376
|
+
method: "create",
|
|
1377
|
+
summary: "Exchange Hosted Code",
|
|
1378
|
+
description: `Redeem a single-use hosted link credential for an end-user token.
|
|
1379
|
+
|
|
1380
|
+
Read 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>"}.`,
|
|
1381
|
+
http: "POST",
|
|
1382
|
+
path: "/agent/v1/embed/exchange",
|
|
1383
|
+
streaming: "no",
|
|
1384
|
+
pagination: false,
|
|
1385
|
+
pathParams: [],
|
|
1386
|
+
query: [],
|
|
1387
|
+
body: {
|
|
1388
|
+
required: true,
|
|
1389
|
+
fields: [
|
|
1390
|
+
{
|
|
1391
|
+
name: "code",
|
|
1392
|
+
type: "string",
|
|
1393
|
+
required: true,
|
|
1394
|
+
description: "Single-use credential from the c fragment parameter of hosted_url returned by embed token creation. Valid for 60 seconds."
|
|
1395
|
+
}
|
|
1396
|
+
]
|
|
1397
|
+
}
|
|
1398
|
+
},
|
|
1077
1399
|
{
|
|
1078
1400
|
resource: "agent.embedTokens",
|
|
1079
1401
|
method: "list",
|
|
@@ -1119,7 +1441,7 @@ Includes expired and revoked grants; returns neither token nor token_id. Sorts b
|
|
|
1119
1441
|
summary: "Create Embed Token",
|
|
1120
1442
|
description: `Issue a short-lived credential on your backend for an end user of a service agent.
|
|
1121
1443
|
|
|
1122
|
-
Requires 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.
|
|
1444
|
+
Requires 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.`,
|
|
1123
1445
|
http: "POST",
|
|
1124
1446
|
path: "/agent/v1/embed_tokens",
|
|
1125
1447
|
streaming: "no",
|
|
@@ -1129,6 +1451,12 @@ Requires an active service agent in your organization with an embed policy. Pins
|
|
|
1129
1451
|
body: {
|
|
1130
1452
|
required: true,
|
|
1131
1453
|
fields: [
|
|
1454
|
+
{
|
|
1455
|
+
name: "hosted",
|
|
1456
|
+
type: "boolean",
|
|
1457
|
+
required: false,
|
|
1458
|
+
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."
|
|
1459
|
+
},
|
|
1132
1460
|
{
|
|
1133
1461
|
name: "agent",
|
|
1134
1462
|
type: "string",
|
|
@@ -1188,6 +1516,37 @@ Requires an active service agent in your organization with an embed policy. Pins
|
|
|
1188
1516
|
]
|
|
1189
1517
|
}
|
|
1190
1518
|
},
|
|
1519
|
+
{
|
|
1520
|
+
resource: "agent.embedTokens.anonymous",
|
|
1521
|
+
method: "create",
|
|
1522
|
+
summary: "Issue anonymous visitor token",
|
|
1523
|
+
description: `Obtain a short-lived embedding token for a visitor without an account using the agent owner's publishable key.
|
|
1524
|
+
|
|
1525
|
+
No 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"}.`,
|
|
1526
|
+
http: "POST",
|
|
1527
|
+
path: "/agent/v1/embed_tokens/anonymous",
|
|
1528
|
+
streaming: "no",
|
|
1529
|
+
pagination: false,
|
|
1530
|
+
pathParams: [],
|
|
1531
|
+
query: [],
|
|
1532
|
+
body: {
|
|
1533
|
+
required: true,
|
|
1534
|
+
fields: [
|
|
1535
|
+
{
|
|
1536
|
+
name: "publishable_key",
|
|
1537
|
+
type: "string",
|
|
1538
|
+
required: true,
|
|
1539
|
+
description: "Public key created by the service agent owner; safe to include in browser code."
|
|
1540
|
+
},
|
|
1541
|
+
{
|
|
1542
|
+
name: "visitor_secret",
|
|
1543
|
+
type: "string",
|
|
1544
|
+
required: false,
|
|
1545
|
+
description: "Secret returned by a previous anonymous issuance for this key. Omit for a new visitor; an unknown secret creates a new visitor."
|
|
1546
|
+
}
|
|
1547
|
+
]
|
|
1548
|
+
}
|
|
1549
|
+
},
|
|
1191
1550
|
{
|
|
1192
1551
|
resource: "agent.embedTokens.revoke",
|
|
1193
1552
|
method: "create",
|
|
@@ -1492,6 +1851,25 @@ owning account only.`
|
|
|
1492
1851
|
type: "string",
|
|
1493
1852
|
required: false,
|
|
1494
1853
|
description: "Opaque pagination cursor: pass the next_page value of the previous response unchanged. Omit it for the first page. A cursor from a different query or a malformed one returns 400."
|
|
1854
|
+
},
|
|
1855
|
+
{
|
|
1856
|
+
name: "external_user_id",
|
|
1857
|
+
type: "string",
|
|
1858
|
+
required: false,
|
|
1859
|
+
description: "Filter by an exact end-user identifier (1–128 characters: A-Z, a-z, 0-9, underscore, dot, colon, at sign or hyphen). Keep this filter unchanged when following page."
|
|
1860
|
+
},
|
|
1861
|
+
{
|
|
1862
|
+
name: "source",
|
|
1863
|
+
type: "string",
|
|
1864
|
+
enum: [
|
|
1865
|
+
"kit",
|
|
1866
|
+
"iframe",
|
|
1867
|
+
"hosted",
|
|
1868
|
+
"api",
|
|
1869
|
+
"automation"
|
|
1870
|
+
],
|
|
1871
|
+
required: false,
|
|
1872
|
+
description: "Filter by session origin: kit, iframe, hosted, api or automation. Keep this filter unchanged when following page."
|
|
1495
1873
|
}
|
|
1496
1874
|
]
|
|
1497
1875
|
},
|
|
@@ -1499,7 +1877,7 @@ owning account only.`
|
|
|
1499
1877
|
resource: "agent.sessions",
|
|
1500
1878
|
method: "create",
|
|
1501
1879
|
summary: "Create session",
|
|
1502
|
-
description: `Create a session: one conversation with an agent, running on a machine. Pass agent as an agent id (latest version) or {id, version, type:"agent"}. Unlike Anthropic Managed Agents, omit environment_id to get a light machine, unless computer_id (explicit, or the agent's default) selects a Computer; pass environment_id for a sandbox recipe. Optional model must be one of the agent's allowed models; optional thinking is {effort: low|medium|high|xhigh|none} or null, where null inherits the agent default and then the model default (none requires the model to allow disabling thinking). Selections are saved before initial_events run; invalid ones return 400 invalid_request_error. Inline agent overrides are not supported. Supports vault_ids, up to 50, owned by the current organization and not archived; credential injection is deferred to a later version. Omitted budget defaults to USD 20; null removes the limit, and a limit object uses a positive integer string of USD cents. Up to 500 file resources can be attached. Use initial_events to send a first user.message in this request, or send messages afterwards with sessions.events.send. The returned status can still be idle before initial events run; read agent.message and the subsequent session.status_idle event to confirm completion.`,
|
|
1880
|
+
description: `Create a session: one conversation with an agent, running on a machine. Pass agent as an agent id (latest version) or {id, version, type:"agent"}. Unlike Anthropic Managed Agents, omit environment_id to get a light machine, unless computer_id (explicit, or the agent's default) selects a Computer; pass environment_id for a sandbox recipe. Optional model must be one of the agent's allowed models; optional thinking is {effort: low|medium|high|xhigh|max|none} or null, where null inherits the agent default and then the model default (none requires the model to allow disabling thinking). Selections are saved before initial_events run; invalid ones return 400 invalid_request_error. Inline agent overrides are not supported. Supports vault_ids, up to 50, owned by the current organization and not archived; credential injection is deferred to a later version. Omitted budget defaults to USD 20; null removes the limit, and a limit object uses a positive integer string of USD cents. Up to 500 file resources can be attached. Use initial_events to send a first user.message in this request, or send messages afterwards with sessions.events.send. The returned status can still be idle before initial events run; read agent.message and the subsequent session.status_idle event to confirm completion.`,
|
|
1503
1881
|
http: "POST",
|
|
1504
1882
|
path: "/agent/v1/sessions",
|
|
1505
1883
|
streaming: "no",
|
|
@@ -1599,6 +1977,23 @@ offsets ("+08:00") and unknown names return 400. Never stored in
|
|
|
1599
1977
|
]
|
|
1600
1978
|
}
|
|
1601
1979
|
},
|
|
1980
|
+
{
|
|
1981
|
+
resource: "agent.sessions",
|
|
1982
|
+
method: "delete",
|
|
1983
|
+
summary: "Delete session",
|
|
1984
|
+
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.",
|
|
1985
|
+
http: "DELETE",
|
|
1986
|
+
path: "/agent/v1/sessions/{session_id}",
|
|
1987
|
+
streaming: "no",
|
|
1988
|
+
pagination: false,
|
|
1989
|
+
pathParams: [
|
|
1990
|
+
{
|
|
1991
|
+
name: "session_id",
|
|
1992
|
+
sdkName: "session_id"
|
|
1993
|
+
}
|
|
1994
|
+
],
|
|
1995
|
+
query: []
|
|
1996
|
+
},
|
|
1602
1997
|
{
|
|
1603
1998
|
resource: "agent.sessions",
|
|
1604
1999
|
method: "retrieve",
|
|
@@ -1872,7 +2267,7 @@ Praxis extension available only on /agent/v1, following Claude Agent SDK getCont
|
|
|
1872
2267
|
resource: "agent.sessions.events",
|
|
1873
2268
|
method: "list",
|
|
1874
2269
|
summary: "List session events",
|
|
1875
|
-
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.",
|
|
2270
|
+
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.",
|
|
1876
2271
|
http: "GET",
|
|
1877
2272
|
path: "/agent/v1/sessions/{session_id}/events",
|
|
1878
2273
|
streaming: "no",
|
|
@@ -1943,7 +2338,7 @@ Praxis extension available only on /agent/v1, following Claude Agent SDK getCont
|
|
|
1943
2338
|
resource: "agent.sessions.events",
|
|
1944
2339
|
method: "send",
|
|
1945
2340
|
summary: "Send session events",
|
|
1946
|
-
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.',
|
|
2341
|
+
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.',
|
|
1947
2342
|
http: "POST",
|
|
1948
2343
|
path: "/agent/v1/sessions/{session_id}/events",
|
|
1949
2344
|
streaming: "no",
|
|
@@ -3113,6 +3508,27 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
3113
3508
|
],
|
|
3114
3509
|
query: []
|
|
3115
3510
|
},
|
|
3511
|
+
{
|
|
3512
|
+
resource: "application.workers.versions.assets",
|
|
3513
|
+
method: "retrieveManifest",
|
|
3514
|
+
summary: "Get version asset manifest",
|
|
3515
|
+
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.",
|
|
3516
|
+
http: "GET",
|
|
3517
|
+
path: "/application/v1/workers/{worker_id}/versions/{version_id}/assets/manifest",
|
|
3518
|
+
streaming: "no",
|
|
3519
|
+
pagination: false,
|
|
3520
|
+
pathParams: [
|
|
3521
|
+
{
|
|
3522
|
+
name: "worker_id",
|
|
3523
|
+
sdkName: "worker_id"
|
|
3524
|
+
},
|
|
3525
|
+
{
|
|
3526
|
+
name: "version_id",
|
|
3527
|
+
sdkName: "version_id"
|
|
3528
|
+
}
|
|
3529
|
+
],
|
|
3530
|
+
query: []
|
|
3531
|
+
},
|
|
3116
3532
|
{
|
|
3117
3533
|
resource: "automation.actions",
|
|
3118
3534
|
method: "list",
|
|
@@ -6536,7 +6952,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6536
6952
|
name: "{column}",
|
|
6537
6953
|
type: "string",
|
|
6538
6954
|
required: false,
|
|
6539
|
-
description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns.
|
|
6955
|
+
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."
|
|
6540
6956
|
},
|
|
6541
6957
|
{
|
|
6542
6958
|
name: "and",
|
|
@@ -6584,7 +7000,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6584
7000
|
name: "on_conflict",
|
|
6585
7001
|
type: "string",
|
|
6586
7002
|
required: false,
|
|
6587
|
-
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."
|
|
7003
|
+
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."
|
|
6588
7004
|
},
|
|
6589
7005
|
{
|
|
6590
7006
|
name: "columns",
|
|
@@ -6598,7 +7014,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6598
7014
|
resource: "database.databases.rest",
|
|
6599
7015
|
method: "retrieve",
|
|
6600
7016
|
summary: "Select rows",
|
|
6601
|
-
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.
|
|
7017
|
+
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.",
|
|
6602
7018
|
http: "GET",
|
|
6603
7019
|
path: "/database/v1/databases/{database_id}/rest/{table}",
|
|
6604
7020
|
streaming: "no",
|
|
@@ -6624,7 +7040,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6624
7040
|
name: "{column}",
|
|
6625
7041
|
type: "string",
|
|
6626
7042
|
required: false,
|
|
6627
|
-
description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns.
|
|
7043
|
+
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."
|
|
6628
7044
|
},
|
|
6629
7045
|
{
|
|
6630
7046
|
name: "and",
|
|
@@ -6672,7 +7088,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6672
7088
|
name: "on_conflict",
|
|
6673
7089
|
type: "string",
|
|
6674
7090
|
required: false,
|
|
6675
|
-
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."
|
|
7091
|
+
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."
|
|
6676
7092
|
},
|
|
6677
7093
|
{
|
|
6678
7094
|
name: "columns",
|
|
@@ -6686,7 +7102,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6686
7102
|
resource: "database.databases.rest",
|
|
6687
7103
|
method: "head",
|
|
6688
7104
|
summary: "Count rows",
|
|
6689
|
-
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.
|
|
7105
|
+
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.",
|
|
6690
7106
|
http: "HEAD",
|
|
6691
7107
|
path: "/database/v1/databases/{database_id}/rest/{table}",
|
|
6692
7108
|
streaming: "no",
|
|
@@ -6712,7 +7128,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6712
7128
|
name: "{column}",
|
|
6713
7129
|
type: "string",
|
|
6714
7130
|
required: false,
|
|
6715
|
-
description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns.
|
|
7131
|
+
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."
|
|
6716
7132
|
},
|
|
6717
7133
|
{
|
|
6718
7134
|
name: "and",
|
|
@@ -6760,7 +7176,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6760
7176
|
name: "on_conflict",
|
|
6761
7177
|
type: "string",
|
|
6762
7178
|
required: false,
|
|
6763
|
-
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."
|
|
7179
|
+
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."
|
|
6764
7180
|
},
|
|
6765
7181
|
{
|
|
6766
7182
|
name: "columns",
|
|
@@ -6800,7 +7216,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6800
7216
|
name: "{column}",
|
|
6801
7217
|
type: "string",
|
|
6802
7218
|
required: false,
|
|
6803
|
-
description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns.
|
|
7219
|
+
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."
|
|
6804
7220
|
},
|
|
6805
7221
|
{
|
|
6806
7222
|
name: "and",
|
|
@@ -6848,7 +7264,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6848
7264
|
name: "on_conflict",
|
|
6849
7265
|
type: "string",
|
|
6850
7266
|
required: false,
|
|
6851
|
-
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."
|
|
7267
|
+
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."
|
|
6852
7268
|
},
|
|
6853
7269
|
{
|
|
6854
7270
|
name: "columns",
|
|
@@ -6868,7 +7284,7 @@ Own-face extension. Use a readable session and a run_id from its events. Each su
|
|
|
6868
7284
|
summary: "Insert rows",
|
|
6869
7285
|
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.
|
|
6870
7286
|
Rows are filled to the union of their keys with null; send Prefer: missing=default to use field defaults for missing keys.
|
|
6871
|
-
The 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.`,
|
|
7287
|
+
The 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.`,
|
|
6872
7288
|
http: "POST",
|
|
6873
7289
|
path: "/database/v1/databases/{database_id}/rest/{table}",
|
|
6874
7290
|
streaming: "no",
|
|
@@ -6894,7 +7310,7 @@ The default is return=minimal: success returns HTTP 201 with an empty body. Send
|
|
|
6894
7310
|
name: "{column}",
|
|
6895
7311
|
type: "string",
|
|
6896
7312
|
required: false,
|
|
6897
|
-
description: "Horizontal filter: replace {column} with a field name or JSON path, e.g. title=eq.summary. Repeat for more columns.
|
|
7313
|
+
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."
|
|
6898
7314
|
},
|
|
6899
7315
|
{
|
|
6900
7316
|
name: "and",
|
|
@@ -6942,7 +7358,7 @@ The default is return=minimal: success returns HTTP 201 with an empty body. Send
|
|
|
6942
7358
|
name: "on_conflict",
|
|
6943
7359
|
type: "string",
|
|
6944
7360
|
required: false,
|
|
6945
|
-
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."
|
|
7361
|
+
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."
|
|
6946
7362
|
},
|
|
6947
7363
|
{
|
|
6948
7364
|
name: "columns",
|
|
@@ -6994,7 +7410,7 @@ The default is return=minimal: success returns HTTP 201 with an empty body. Send
|
|
|
6994
7410
|
resource: "database.databases.tables",
|
|
6995
7411
|
method: "create",
|
|
6996
7412
|
summary: "Create table",
|
|
6997
|
-
description:
|
|
7413
|
+
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.',
|
|
6998
7414
|
http: "POST",
|
|
6999
7415
|
path: "/database/v1/databases/{database_id}/tables",
|
|
7000
7416
|
streaming: "no",
|
|
@@ -7115,7 +7531,7 @@ The default is return=minimal: success returns HTTP 201 with an empty body. Send
|
|
|
7115
7531
|
resource: "database.databases.tables.fields",
|
|
7116
7532
|
method: "create",
|
|
7117
7533
|
summary: "Add field",
|
|
7118
|
-
description:
|
|
7534
|
+
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.',
|
|
7119
7535
|
http: "POST",
|
|
7120
7536
|
path: "/database/v1/databases/{database_id}/tables/{table}/fields",
|
|
7121
7537
|
streaming: "no",
|
|
@@ -11666,6 +12082,43 @@ for more details.`
|
|
|
11666
12082
|
],
|
|
11667
12083
|
query: []
|
|
11668
12084
|
},
|
|
12085
|
+
{
|
|
12086
|
+
resource: "organization.feedback",
|
|
12087
|
+
method: "list",
|
|
12088
|
+
summary: "List your organization's feedback",
|
|
12089
|
+
description: "Feedback submitted by your organization, newest first, with phase and unread state. Filter by phase and search titles and message text (case-insensitive). Page with next_page. Requires a valid API key, Console session, or machine token of the organization.",
|
|
12090
|
+
http: "GET",
|
|
12091
|
+
path: "/organization/v1/feedback",
|
|
12092
|
+
streaming: "no",
|
|
12093
|
+
pagination: false,
|
|
12094
|
+
pathParams: [],
|
|
12095
|
+
query: [
|
|
12096
|
+
{
|
|
12097
|
+
name: "phase",
|
|
12098
|
+
type: "string",
|
|
12099
|
+
required: false,
|
|
12100
|
+
description: "Only feedback in these phases: a comma-separated list of open, awaiting_customer, in_progress, resolved or closed, for example open,in_progress; see the phase field of a feedback for what each means."
|
|
12101
|
+
},
|
|
12102
|
+
{
|
|
12103
|
+
name: "query",
|
|
12104
|
+
type: "string",
|
|
12105
|
+
required: false,
|
|
12106
|
+
description: "Case-insensitive text matched against titles and message bodies."
|
|
12107
|
+
},
|
|
12108
|
+
{
|
|
12109
|
+
name: "limit",
|
|
12110
|
+
type: "integer",
|
|
12111
|
+
required: false,
|
|
12112
|
+
description: "Items per page, 1 to 100."
|
|
12113
|
+
},
|
|
12114
|
+
{
|
|
12115
|
+
name: "page",
|
|
12116
|
+
type: "string",
|
|
12117
|
+
required: false,
|
|
12118
|
+
description: "Opaque cursor from next_page of the previous response."
|
|
12119
|
+
}
|
|
12120
|
+
]
|
|
12121
|
+
},
|
|
11669
12122
|
{
|
|
11670
12123
|
resource: "organization.feedback",
|
|
11671
12124
|
method: "create",
|
|
@@ -11710,6 +12163,18 @@ for more details.`
|
|
|
11710
12163
|
required: false,
|
|
11711
12164
|
description: "X-Request-Id from the failed response or the related error event ID."
|
|
11712
12165
|
},
|
|
12166
|
+
{
|
|
12167
|
+
name: "title",
|
|
12168
|
+
type: "string",
|
|
12169
|
+
required: false,
|
|
12170
|
+
description: "Short summary shown in the feedback list; at most 200 Unicode code points."
|
|
12171
|
+
},
|
|
12172
|
+
{
|
|
12173
|
+
name: "type",
|
|
12174
|
+
type: "string",
|
|
12175
|
+
required: false,
|
|
12176
|
+
description: "Feedback type key enabled in the help settings, such as issue, suggestion, billing or other. Unknown or disabled keys are rejected with INVALID_PARAMS."
|
|
12177
|
+
},
|
|
11713
12178
|
{
|
|
11714
12179
|
name: "tags",
|
|
11715
12180
|
type: "object",
|
|
@@ -11742,6 +12207,100 @@ for more details.`
|
|
|
11742
12207
|
]
|
|
11743
12208
|
}
|
|
11744
12209
|
},
|
|
12210
|
+
{
|
|
12211
|
+
resource: "organization.feedback.counts",
|
|
12212
|
+
method: "list",
|
|
12213
|
+
summary: "Count your organization's feedback by phase",
|
|
12214
|
+
description: "How many of your organization's feedback are in each phase, for status tabs. Counts never include another organization's feedback.",
|
|
12215
|
+
http: "GET",
|
|
12216
|
+
path: "/organization/v1/feedback/counts",
|
|
12217
|
+
streaming: "no",
|
|
12218
|
+
pagination: false,
|
|
12219
|
+
pathParams: [],
|
|
12220
|
+
query: []
|
|
12221
|
+
},
|
|
12222
|
+
{
|
|
12223
|
+
resource: "organization.feedback",
|
|
12224
|
+
method: "retrieve",
|
|
12225
|
+
summary: "Get one of your organization's feedback",
|
|
12226
|
+
description: "Read one feedback submitted by your organization with its current phase and first-response timing. Another organization's feedback answers 404 FEEDBACK_NOT_FOUND exactly like a missing one.",
|
|
12227
|
+
http: "GET",
|
|
12228
|
+
path: "/organization/v1/feedback/{id}",
|
|
12229
|
+
streaming: "no",
|
|
12230
|
+
pagination: false,
|
|
12231
|
+
pathParams: [
|
|
12232
|
+
{
|
|
12233
|
+
name: "id",
|
|
12234
|
+
sdkName: "id"
|
|
12235
|
+
}
|
|
12236
|
+
],
|
|
12237
|
+
query: []
|
|
12238
|
+
},
|
|
12239
|
+
{
|
|
12240
|
+
resource: "organization.feedback.messages",
|
|
12241
|
+
method: "list",
|
|
12242
|
+
summary: "List the messages of a feedback",
|
|
12243
|
+
description: "The conversation of one feedback in time order: your messages, support replies and system events. Internal support notes are never returned. Page with next_page.",
|
|
12244
|
+
http: "GET",
|
|
12245
|
+
path: "/organization/v1/feedback/{id}/messages",
|
|
12246
|
+
streaming: "no",
|
|
12247
|
+
pagination: false,
|
|
12248
|
+
pathParams: [
|
|
12249
|
+
{
|
|
12250
|
+
name: "id",
|
|
12251
|
+
sdkName: "id"
|
|
12252
|
+
}
|
|
12253
|
+
],
|
|
12254
|
+
query: [
|
|
12255
|
+
{
|
|
12256
|
+
name: "limit",
|
|
12257
|
+
type: "integer",
|
|
12258
|
+
required: false,
|
|
12259
|
+
description: "Items per page, 1 to 100."
|
|
12260
|
+
},
|
|
12261
|
+
{
|
|
12262
|
+
name: "page",
|
|
12263
|
+
type: "string",
|
|
12264
|
+
required: false,
|
|
12265
|
+
description: "Opaque cursor from next_page of the previous response."
|
|
12266
|
+
}
|
|
12267
|
+
]
|
|
12268
|
+
},
|
|
12269
|
+
{
|
|
12270
|
+
resource: "organization.feedback.messages",
|
|
12271
|
+
method: "create",
|
|
12272
|
+
summary: "Reply on a feedback",
|
|
12273
|
+
description: "Add your message to a feedback conversation, for example to answer a question from support. A reply while the phase is awaiting_customer moves it to in_progress and notifies support.",
|
|
12274
|
+
http: "POST",
|
|
12275
|
+
path: "/organization/v1/feedback/{id}/messages",
|
|
12276
|
+
streaming: "no",
|
|
12277
|
+
pagination: false,
|
|
12278
|
+
pathParams: [
|
|
12279
|
+
{
|
|
12280
|
+
name: "id",
|
|
12281
|
+
sdkName: "id"
|
|
12282
|
+
}
|
|
12283
|
+
],
|
|
12284
|
+
query: [],
|
|
12285
|
+
body: {
|
|
12286
|
+
required: true,
|
|
12287
|
+
fields: [
|
|
12288
|
+
{
|
|
12289
|
+
name: "body",
|
|
12290
|
+
type: "string",
|
|
12291
|
+
required: true,
|
|
12292
|
+
description: "Markdown text; at most 4096 Unicode code points."
|
|
12293
|
+
},
|
|
12294
|
+
{
|
|
12295
|
+
name: "attachments",
|
|
12296
|
+
type: "array",
|
|
12297
|
+
itemType: "object",
|
|
12298
|
+
required: false,
|
|
12299
|
+
description: "Up to five attachments; decoded bytes must not exceed 10 MiB each or 20 MiB in total."
|
|
12300
|
+
}
|
|
12301
|
+
]
|
|
12302
|
+
}
|
|
12303
|
+
},
|
|
11745
12304
|
{
|
|
11746
12305
|
resource: "organization.usage",
|
|
11747
12306
|
method: "list",
|
|
@@ -14964,6 +15523,19 @@ var createClient = (config = {}) => {
|
|
|
14964
15523
|
var client = createClient(createConfig({ baseUrl: "https://api.deepraxis.com" }));
|
|
14965
15524
|
|
|
14966
15525
|
// ../../packages/sdk/typescript/src/generated/sdk.gen.ts
|
|
15526
|
+
var unarchiveAgent = (options) => (options.client ?? client).post({
|
|
15527
|
+
security: [{
|
|
15528
|
+
key: "BearerAuth",
|
|
15529
|
+
scheme: "bearer",
|
|
15530
|
+
type: "http"
|
|
15531
|
+
}, {
|
|
15532
|
+
key: "ApiKeyAuth",
|
|
15533
|
+
name: "X-API-Key",
|
|
15534
|
+
type: "apiKey"
|
|
15535
|
+
}],
|
|
15536
|
+
url: "/agent/v1/agents/{agent_id}/unarchive",
|
|
15537
|
+
...options
|
|
15538
|
+
});
|
|
14967
15539
|
var deleteRunFeedback = (options) => (options.client ?? client).delete({
|
|
14968
15540
|
security: [{
|
|
14969
15541
|
key: "BearerAuth",
|
|
@@ -14974,10 +15546,40 @@ var deleteRunFeedback = (options) => (options.client ?? client).delete({
|
|
|
14974
15546
|
name: "X-API-Key",
|
|
14975
15547
|
type: "apiKey"
|
|
14976
15548
|
}],
|
|
14977
|
-
url: "/agent/v1/sessions/{session_id}/runs/{run_id}/feedback",
|
|
15549
|
+
url: "/agent/v1/sessions/{session_id}/runs/{run_id}/feedback",
|
|
15550
|
+
...options
|
|
15551
|
+
});
|
|
15552
|
+
var setRunFeedback = (options) => (options.client ?? client).post({
|
|
15553
|
+
security: [{
|
|
15554
|
+
key: "BearerAuth",
|
|
15555
|
+
scheme: "bearer",
|
|
15556
|
+
type: "http"
|
|
15557
|
+
}, {
|
|
15558
|
+
key: "ApiKeyAuth",
|
|
15559
|
+
name: "X-API-Key",
|
|
15560
|
+
type: "apiKey"
|
|
15561
|
+
}],
|
|
15562
|
+
url: "/agent/v1/sessions/{session_id}/runs/{run_id}/feedback",
|
|
15563
|
+
...options,
|
|
15564
|
+
headers: {
|
|
15565
|
+
"Content-Type": "application/json",
|
|
15566
|
+
...options.headers
|
|
15567
|
+
}
|
|
15568
|
+
});
|
|
15569
|
+
var listEndUsers = (options) => (options.client ?? client).get({
|
|
15570
|
+
security: [{
|
|
15571
|
+
key: "BearerAuth",
|
|
15572
|
+
scheme: "bearer",
|
|
15573
|
+
type: "http"
|
|
15574
|
+
}, {
|
|
15575
|
+
key: "ApiKeyAuth",
|
|
15576
|
+
name: "X-API-Key",
|
|
15577
|
+
type: "apiKey"
|
|
15578
|
+
}],
|
|
15579
|
+
url: "/agent/v1/agents/{agent_id}/end_users",
|
|
14978
15580
|
...options
|
|
14979
15581
|
});
|
|
14980
|
-
var
|
|
15582
|
+
var deleteEndUser = (options) => (options.client ?? client).delete({
|
|
14981
15583
|
security: [{
|
|
14982
15584
|
key: "BearerAuth",
|
|
14983
15585
|
scheme: "bearer",
|
|
@@ -14987,7 +15589,84 @@ var setRunFeedback = (options) => (options.client ?? client).post({
|
|
|
14987
15589
|
name: "X-API-Key",
|
|
14988
15590
|
type: "apiKey"
|
|
14989
15591
|
}],
|
|
14990
|
-
url: "/agent/v1/
|
|
15592
|
+
url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
|
|
15593
|
+
...options
|
|
15594
|
+
});
|
|
15595
|
+
var getEndUser = (options) => (options.client ?? client).get({
|
|
15596
|
+
security: [{
|
|
15597
|
+
key: "BearerAuth",
|
|
15598
|
+
scheme: "bearer",
|
|
15599
|
+
type: "http"
|
|
15600
|
+
}, {
|
|
15601
|
+
key: "ApiKeyAuth",
|
|
15602
|
+
name: "X-API-Key",
|
|
15603
|
+
type: "apiKey"
|
|
15604
|
+
}],
|
|
15605
|
+
url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
|
|
15606
|
+
...options
|
|
15607
|
+
});
|
|
15608
|
+
var getEndUserDeletion = (options) => (options.client ?? client).get({
|
|
15609
|
+
security: [{
|
|
15610
|
+
key: "BearerAuth",
|
|
15611
|
+
scheme: "bearer",
|
|
15612
|
+
type: "http"
|
|
15613
|
+
}, {
|
|
15614
|
+
key: "ApiKeyAuth",
|
|
15615
|
+
name: "X-API-Key",
|
|
15616
|
+
type: "apiKey"
|
|
15617
|
+
}],
|
|
15618
|
+
url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/deletion",
|
|
15619
|
+
...options
|
|
15620
|
+
});
|
|
15621
|
+
var revokeEndUserTokens = (options) => (options.client ?? client).post({
|
|
15622
|
+
security: [{
|
|
15623
|
+
key: "BearerAuth",
|
|
15624
|
+
scheme: "bearer",
|
|
15625
|
+
type: "http"
|
|
15626
|
+
}, {
|
|
15627
|
+
key: "ApiKeyAuth",
|
|
15628
|
+
name: "X-API-Key",
|
|
15629
|
+
type: "apiKey"
|
|
15630
|
+
}],
|
|
15631
|
+
url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/revoke_tokens",
|
|
15632
|
+
...options
|
|
15633
|
+
});
|
|
15634
|
+
var blockEndUser = (options) => (options.client ?? client).post({
|
|
15635
|
+
security: [{
|
|
15636
|
+
key: "BearerAuth",
|
|
15637
|
+
scheme: "bearer",
|
|
15638
|
+
type: "http"
|
|
15639
|
+
}, {
|
|
15640
|
+
key: "ApiKeyAuth",
|
|
15641
|
+
name: "X-API-Key",
|
|
15642
|
+
type: "apiKey"
|
|
15643
|
+
}],
|
|
15644
|
+
url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/block",
|
|
15645
|
+
...options
|
|
15646
|
+
});
|
|
15647
|
+
var unblockEndUser = (options) => (options.client ?? client).post({
|
|
15648
|
+
security: [{
|
|
15649
|
+
key: "BearerAuth",
|
|
15650
|
+
scheme: "bearer",
|
|
15651
|
+
type: "http"
|
|
15652
|
+
}, {
|
|
15653
|
+
key: "ApiKeyAuth",
|
|
15654
|
+
name: "X-API-Key",
|
|
15655
|
+
type: "apiKey"
|
|
15656
|
+
}],
|
|
15657
|
+
url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/unblock",
|
|
15658
|
+
...options
|
|
15659
|
+
});
|
|
15660
|
+
var exchangeEmbedCode = (options) => (options.client ?? client).post({
|
|
15661
|
+
url: "/agent/v1/embed/exchange",
|
|
15662
|
+
...options,
|
|
15663
|
+
headers: {
|
|
15664
|
+
"Content-Type": "application/json",
|
|
15665
|
+
...options.headers
|
|
15666
|
+
}
|
|
15667
|
+
});
|
|
15668
|
+
var createAnonymousEmbedToken = (options) => (options.client ?? client).post({
|
|
15669
|
+
url: "/agent/v1/embed_tokens/anonymous",
|
|
14991
15670
|
...options,
|
|
14992
15671
|
headers: {
|
|
14993
15672
|
"Content-Type": "application/json",
|
|
@@ -15178,6 +15857,36 @@ var connectComputer = (options) => (options.client ?? client).post({
|
|
|
15178
15857
|
type: "apiKey"
|
|
15179
15858
|
}],
|
|
15180
15859
|
url: "/agent/v1/computers/{computer_id}/connect",
|
|
15860
|
+
...options,
|
|
15861
|
+
headers: {
|
|
15862
|
+
"Content-Type": "application/json",
|
|
15863
|
+
...options.headers
|
|
15864
|
+
}
|
|
15865
|
+
});
|
|
15866
|
+
var renewComputerLease = (options) => (options.client ?? client).post({
|
|
15867
|
+
security: [{
|
|
15868
|
+
key: "BearerAuth",
|
|
15869
|
+
scheme: "bearer",
|
|
15870
|
+
type: "http"
|
|
15871
|
+
}, {
|
|
15872
|
+
key: "ApiKeyAuth",
|
|
15873
|
+
name: "X-API-Key",
|
|
15874
|
+
type: "apiKey"
|
|
15875
|
+
}],
|
|
15876
|
+
url: "/agent/v1/computers/{computer_id}/leases/{lease_id}/renew",
|
|
15877
|
+
...options
|
|
15878
|
+
});
|
|
15879
|
+
var releaseComputerLease = (options) => (options.client ?? client).delete({
|
|
15880
|
+
security: [{
|
|
15881
|
+
key: "BearerAuth",
|
|
15882
|
+
scheme: "bearer",
|
|
15883
|
+
type: "http"
|
|
15884
|
+
}, {
|
|
15885
|
+
key: "ApiKeyAuth",
|
|
15886
|
+
name: "X-API-Key",
|
|
15887
|
+
type: "apiKey"
|
|
15888
|
+
}],
|
|
15889
|
+
url: "/agent/v1/computers/{computer_id}/leases/{lease_id}",
|
|
15181
15890
|
...options
|
|
15182
15891
|
});
|
|
15183
15892
|
var listToolsets = (options) => (options?.client ?? client).get({
|
|
@@ -15305,6 +16014,15 @@ var listSessionCompactions = (options) => (options.client ?? client).get({
|
|
|
15305
16014
|
url: "/agent/v1/sessions/{session_id}/compactions",
|
|
15306
16015
|
...options
|
|
15307
16016
|
});
|
|
16017
|
+
var getEmbedAppearance = (options) => (options?.client ?? client).get({
|
|
16018
|
+
security: [{
|
|
16019
|
+
key: "BearerAuth",
|
|
16020
|
+
scheme: "bearer",
|
|
16021
|
+
type: "http"
|
|
16022
|
+
}, { name: "Praxis-Publishable-Key", type: "apiKey" }],
|
|
16023
|
+
url: "/agent/v1/embed/appearance",
|
|
16024
|
+
...options
|
|
16025
|
+
});
|
|
15308
16026
|
var createAudioSpeech = (options) => (options.client ?? client).post({
|
|
15309
16027
|
security: [{
|
|
15310
16028
|
key: "BearerAuth",
|
|
@@ -16043,6 +16761,19 @@ var countResponseInputTokens = (options) => (options.client ?? client).post({
|
|
|
16043
16761
|
...options.headers
|
|
16044
16762
|
}
|
|
16045
16763
|
});
|
|
16764
|
+
var listOrganizationFeedback = (options) => (options?.client ?? client).get({
|
|
16765
|
+
security: [{
|
|
16766
|
+
key: "BearerAuth",
|
|
16767
|
+
scheme: "bearer",
|
|
16768
|
+
type: "http"
|
|
16769
|
+
}, {
|
|
16770
|
+
key: "ApiKeyAuth",
|
|
16771
|
+
name: "X-API-Key",
|
|
16772
|
+
type: "apiKey"
|
|
16773
|
+
}],
|
|
16774
|
+
url: "/organization/v1/feedback",
|
|
16775
|
+
...options
|
|
16776
|
+
});
|
|
16046
16777
|
var createOrganizationFeedback = (options) => (options.client ?? client).post({
|
|
16047
16778
|
security: [{
|
|
16048
16779
|
key: "BearerAuth",
|
|
@@ -16060,6 +16791,62 @@ var createOrganizationFeedback = (options) => (options.client ?? client).post({
|
|
|
16060
16791
|
...options.headers
|
|
16061
16792
|
}
|
|
16062
16793
|
});
|
|
16794
|
+
var getOrganizationFeedbackCounts = (options) => (options?.client ?? client).get({
|
|
16795
|
+
security: [{
|
|
16796
|
+
key: "BearerAuth",
|
|
16797
|
+
scheme: "bearer",
|
|
16798
|
+
type: "http"
|
|
16799
|
+
}, {
|
|
16800
|
+
key: "ApiKeyAuth",
|
|
16801
|
+
name: "X-API-Key",
|
|
16802
|
+
type: "apiKey"
|
|
16803
|
+
}],
|
|
16804
|
+
url: "/organization/v1/feedback/counts",
|
|
16805
|
+
...options
|
|
16806
|
+
});
|
|
16807
|
+
var getOrganizationFeedback = (options) => (options.client ?? client).get({
|
|
16808
|
+
security: [{
|
|
16809
|
+
key: "BearerAuth",
|
|
16810
|
+
scheme: "bearer",
|
|
16811
|
+
type: "http"
|
|
16812
|
+
}, {
|
|
16813
|
+
key: "ApiKeyAuth",
|
|
16814
|
+
name: "X-API-Key",
|
|
16815
|
+
type: "apiKey"
|
|
16816
|
+
}],
|
|
16817
|
+
url: "/organization/v1/feedback/{id}",
|
|
16818
|
+
...options
|
|
16819
|
+
});
|
|
16820
|
+
var listOrganizationFeedbackMessages = (options) => (options.client ?? client).get({
|
|
16821
|
+
security: [{
|
|
16822
|
+
key: "BearerAuth",
|
|
16823
|
+
scheme: "bearer",
|
|
16824
|
+
type: "http"
|
|
16825
|
+
}, {
|
|
16826
|
+
key: "ApiKeyAuth",
|
|
16827
|
+
name: "X-API-Key",
|
|
16828
|
+
type: "apiKey"
|
|
16829
|
+
}],
|
|
16830
|
+
url: "/organization/v1/feedback/{id}/messages",
|
|
16831
|
+
...options
|
|
16832
|
+
});
|
|
16833
|
+
var createOrganizationFeedbackMessage = (options) => (options.client ?? client).post({
|
|
16834
|
+
security: [{
|
|
16835
|
+
key: "BearerAuth",
|
|
16836
|
+
scheme: "bearer",
|
|
16837
|
+
type: "http"
|
|
16838
|
+
}, {
|
|
16839
|
+
key: "ApiKeyAuth",
|
|
16840
|
+
name: "X-API-Key",
|
|
16841
|
+
type: "apiKey"
|
|
16842
|
+
}],
|
|
16843
|
+
url: "/organization/v1/feedback/{id}/messages",
|
|
16844
|
+
...options,
|
|
16845
|
+
headers: {
|
|
16846
|
+
"Content-Type": "application/json",
|
|
16847
|
+
...options.headers
|
|
16848
|
+
}
|
|
16849
|
+
});
|
|
16063
16850
|
var listOrganizationCosts = (options) => (options.client ?? client).get({
|
|
16064
16851
|
security: [{
|
|
16065
16852
|
key: "BearerAuth",
|
|
@@ -16352,7 +17139,7 @@ var runSandboxCommand = (options) => (options.client ?? client).post({
|
|
|
16352
17139
|
...options.headers
|
|
16353
17140
|
}
|
|
16354
17141
|
});
|
|
16355
|
-
var
|
|
17142
|
+
var sessionsDelete = (options) => (options.client ?? client).delete({
|
|
16356
17143
|
security: [{
|
|
16357
17144
|
key: "BearerAuth",
|
|
16358
17145
|
scheme: "bearer",
|
|
@@ -16362,10 +17149,10 @@ var agentsList = (options) => (options?.client ?? client).get({
|
|
|
16362
17149
|
name: "X-API-Key",
|
|
16363
17150
|
type: "apiKey"
|
|
16364
17151
|
}],
|
|
16365
|
-
url: "/agent/v1/
|
|
17152
|
+
url: "/agent/v1/sessions/{session_id}",
|
|
16366
17153
|
...options
|
|
16367
17154
|
});
|
|
16368
|
-
var
|
|
17155
|
+
var sessionsRetrieve = (options) => (options.client ?? client).get({
|
|
16369
17156
|
security: [{
|
|
16370
17157
|
key: "BearerAuth",
|
|
16371
17158
|
scheme: "bearer",
|
|
@@ -16375,14 +17162,27 @@ var agentsCreate = (options) => (options.client ?? client).post({
|
|
|
16375
17162
|
name: "X-API-Key",
|
|
16376
17163
|
type: "apiKey"
|
|
16377
17164
|
}],
|
|
16378
|
-
url: "/agent/v1/
|
|
17165
|
+
url: "/agent/v1/sessions/{session_id}",
|
|
17166
|
+
...options
|
|
17167
|
+
});
|
|
17168
|
+
var sessionsUpdate = (options) => (options.client ?? client).post({
|
|
17169
|
+
security: [{
|
|
17170
|
+
key: "BearerAuth",
|
|
17171
|
+
scheme: "bearer",
|
|
17172
|
+
type: "http"
|
|
17173
|
+
}, {
|
|
17174
|
+
key: "ApiKeyAuth",
|
|
17175
|
+
name: "X-API-Key",
|
|
17176
|
+
type: "apiKey"
|
|
17177
|
+
}],
|
|
17178
|
+
url: "/agent/v1/sessions/{session_id}",
|
|
16379
17179
|
...options,
|
|
16380
17180
|
headers: {
|
|
16381
17181
|
"Content-Type": "application/json",
|
|
16382
17182
|
...options.headers
|
|
16383
17183
|
}
|
|
16384
17184
|
});
|
|
16385
|
-
var
|
|
17185
|
+
var agentsList = (options) => (options?.client ?? client).get({
|
|
16386
17186
|
security: [{
|
|
16387
17187
|
key: "BearerAuth",
|
|
16388
17188
|
scheme: "bearer",
|
|
@@ -16392,10 +17192,10 @@ var agentsRetrieve = (options) => (options.client ?? client).get({
|
|
|
16392
17192
|
name: "X-API-Key",
|
|
16393
17193
|
type: "apiKey"
|
|
16394
17194
|
}],
|
|
16395
|
-
url: "/agent/v1/agents
|
|
17195
|
+
url: "/agent/v1/agents",
|
|
16396
17196
|
...options
|
|
16397
17197
|
});
|
|
16398
|
-
var
|
|
17198
|
+
var agentsCreate = (options) => (options.client ?? client).post({
|
|
16399
17199
|
security: [{
|
|
16400
17200
|
key: "BearerAuth",
|
|
16401
17201
|
scheme: "bearer",
|
|
@@ -16405,14 +17205,14 @@ var agentsUpdate = (options) => (options.client ?? client).post({
|
|
|
16405
17205
|
name: "X-API-Key",
|
|
16406
17206
|
type: "apiKey"
|
|
16407
17207
|
}],
|
|
16408
|
-
url: "/agent/v1/agents
|
|
17208
|
+
url: "/agent/v1/agents",
|
|
16409
17209
|
...options,
|
|
16410
17210
|
headers: {
|
|
16411
17211
|
"Content-Type": "application/json",
|
|
16412
17212
|
...options.headers
|
|
16413
17213
|
}
|
|
16414
17214
|
});
|
|
16415
|
-
var
|
|
17215
|
+
var agentsRetrieve = (options) => (options.client ?? client).get({
|
|
16416
17216
|
security: [{
|
|
16417
17217
|
key: "BearerAuth",
|
|
16418
17218
|
scheme: "bearer",
|
|
@@ -16422,10 +17222,10 @@ var agentsArchive = (options) => (options.client ?? client).post({
|
|
|
16422
17222
|
name: "X-API-Key",
|
|
16423
17223
|
type: "apiKey"
|
|
16424
17224
|
}],
|
|
16425
|
-
url: "/agent/v1/agents/{agent_id}
|
|
17225
|
+
url: "/agent/v1/agents/{agent_id}",
|
|
16426
17226
|
...options
|
|
16427
17227
|
});
|
|
16428
|
-
var
|
|
17228
|
+
var agentsUpdate = (options) => (options.client ?? client).post({
|
|
16429
17229
|
security: [{
|
|
16430
17230
|
key: "BearerAuth",
|
|
16431
17231
|
scheme: "bearer",
|
|
@@ -16435,10 +17235,14 @@ var agentsVersionsList = (options) => (options.client ?? client).get({
|
|
|
16435
17235
|
name: "X-API-Key",
|
|
16436
17236
|
type: "apiKey"
|
|
16437
17237
|
}],
|
|
16438
|
-
url: "/agent/v1/agents/{agent_id}
|
|
16439
|
-
...options
|
|
17238
|
+
url: "/agent/v1/agents/{agent_id}",
|
|
17239
|
+
...options,
|
|
17240
|
+
headers: {
|
|
17241
|
+
"Content-Type": "application/json",
|
|
17242
|
+
...options.headers
|
|
17243
|
+
}
|
|
16440
17244
|
});
|
|
16441
|
-
var
|
|
17245
|
+
var agentsArchive = (options) => (options.client ?? client).post({
|
|
16442
17246
|
security: [{
|
|
16443
17247
|
key: "BearerAuth",
|
|
16444
17248
|
scheme: "bearer",
|
|
@@ -16448,10 +17252,10 @@ var sessionsList = (options) => (options?.client ?? client).get({
|
|
|
16448
17252
|
name: "X-API-Key",
|
|
16449
17253
|
type: "apiKey"
|
|
16450
17254
|
}],
|
|
16451
|
-
url: "/agent/v1/
|
|
17255
|
+
url: "/agent/v1/agents/{agent_id}/archive",
|
|
16452
17256
|
...options
|
|
16453
17257
|
});
|
|
16454
|
-
var
|
|
17258
|
+
var agentsVersionsList = (options) => (options.client ?? client).get({
|
|
16455
17259
|
security: [{
|
|
16456
17260
|
key: "BearerAuth",
|
|
16457
17261
|
scheme: "bearer",
|
|
@@ -16461,14 +17265,10 @@ var sessionsCreate = (options) => (options.client ?? client).post({
|
|
|
16461
17265
|
name: "X-API-Key",
|
|
16462
17266
|
type: "apiKey"
|
|
16463
17267
|
}],
|
|
16464
|
-
url: "/agent/v1/
|
|
16465
|
-
...options
|
|
16466
|
-
headers: {
|
|
16467
|
-
"Content-Type": "application/json",
|
|
16468
|
-
...options.headers
|
|
16469
|
-
}
|
|
17268
|
+
url: "/agent/v1/agents/{agent_id}/versions",
|
|
17269
|
+
...options
|
|
16470
17270
|
});
|
|
16471
|
-
var
|
|
17271
|
+
var sessionsList = (options) => (options?.client ?? client).get({
|
|
16472
17272
|
security: [{
|
|
16473
17273
|
key: "BearerAuth",
|
|
16474
17274
|
scheme: "bearer",
|
|
@@ -16478,10 +17278,10 @@ var sessionsRetrieve = (options) => (options.client ?? client).get({
|
|
|
16478
17278
|
name: "X-API-Key",
|
|
16479
17279
|
type: "apiKey"
|
|
16480
17280
|
}],
|
|
16481
|
-
url: "/agent/v1/sessions
|
|
17281
|
+
url: "/agent/v1/sessions",
|
|
16482
17282
|
...options
|
|
16483
17283
|
});
|
|
16484
|
-
var
|
|
17284
|
+
var sessionsCreate = (options) => (options.client ?? client).post({
|
|
16485
17285
|
security: [{
|
|
16486
17286
|
key: "BearerAuth",
|
|
16487
17287
|
scheme: "bearer",
|
|
@@ -16491,7 +17291,7 @@ var sessionsUpdate = (options) => (options.client ?? client).post({
|
|
|
16491
17291
|
name: "X-API-Key",
|
|
16492
17292
|
type: "apiKey"
|
|
16493
17293
|
}],
|
|
16494
|
-
url: "/agent/v1/sessions
|
|
17294
|
+
url: "/agent/v1/sessions",
|
|
16495
17295
|
...options,
|
|
16496
17296
|
headers: {
|
|
16497
17297
|
"Content-Type": "application/json",
|
|
@@ -16992,6 +17792,15 @@ var applicationCreateVersion = (options) => (options.client ?? client).post({
|
|
|
16992
17792
|
...options.headers
|
|
16993
17793
|
}
|
|
16994
17794
|
});
|
|
17795
|
+
var applicationGetVersionAssetManifest = (options) => (options.client ?? client).get({
|
|
17796
|
+
security: [{
|
|
17797
|
+
key: "application-bearerAuth",
|
|
17798
|
+
scheme: "bearer",
|
|
17799
|
+
type: "http"
|
|
17800
|
+
}],
|
|
17801
|
+
url: "/application/v1/workers/{worker_id}/versions/{version_id}/assets/manifest",
|
|
17802
|
+
...options
|
|
17803
|
+
});
|
|
16995
17804
|
var applicationGetVersion = (options) => (options.client ?? client).get({
|
|
16996
17805
|
security: [{
|
|
16997
17806
|
key: "application-bearerAuth",
|
|
@@ -19812,8 +20621,26 @@ function createAgent(transport) {
|
|
|
19812
20621
|
agents: {
|
|
19813
20622
|
archive: bind(transport, agentsArchive),
|
|
19814
20623
|
create: bind(transport, agentsCreate),
|
|
20624
|
+
endUsers: {
|
|
20625
|
+
block: {
|
|
20626
|
+
create: bind(transport, blockEndUser)
|
|
20627
|
+
},
|
|
20628
|
+
delete: bind(transport, deleteEndUser),
|
|
20629
|
+
list: bind(transport, listEndUsers),
|
|
20630
|
+
retrieve: bind(transport, getEndUser),
|
|
20631
|
+
retrieveDeletion: bind(transport, getEndUserDeletion),
|
|
20632
|
+
revokeTokens: {
|
|
20633
|
+
create: bind(transport, revokeEndUserTokens)
|
|
20634
|
+
},
|
|
20635
|
+
unblock: {
|
|
20636
|
+
create: bind(transport, unblockEndUser)
|
|
20637
|
+
}
|
|
20638
|
+
},
|
|
19815
20639
|
list: bind(transport, agentsList),
|
|
19816
20640
|
retrieve: bind(transport, agentsRetrieve),
|
|
20641
|
+
unarchive: {
|
|
20642
|
+
create: bind(transport, unarchiveAgent)
|
|
20643
|
+
},
|
|
19817
20644
|
update: bind(transport, agentsUpdate),
|
|
19818
20645
|
versions: {
|
|
19819
20646
|
list: bind(transport, agentsVersionsList)
|
|
@@ -19831,6 +20658,12 @@ function createAgent(transport) {
|
|
|
19831
20658
|
list: bind(transport, computersFilesList),
|
|
19832
20659
|
retrieveContent: bind(transport, computersFilesContent)
|
|
19833
20660
|
},
|
|
20661
|
+
leases: {
|
|
20662
|
+
delete: bind(transport, releaseComputerLease),
|
|
20663
|
+
renew: {
|
|
20664
|
+
create: bind(transport, renewComputerLease)
|
|
20665
|
+
}
|
|
20666
|
+
},
|
|
19834
20667
|
list: bind(transport, computersList),
|
|
19835
20668
|
retrieve: bind(transport, computersRetrieve),
|
|
19836
20669
|
update: bind(transport, computersUpdate)
|
|
@@ -19853,7 +20686,16 @@ function createAgent(transport) {
|
|
|
19853
20686
|
},
|
|
19854
20687
|
update: bind(transport, deploymentsUpdate)
|
|
19855
20688
|
},
|
|
20689
|
+
embed: {
|
|
20690
|
+
exchange: {
|
|
20691
|
+
create: bind(transport, exchangeEmbedCode)
|
|
20692
|
+
},
|
|
20693
|
+
retrieveAppearance: bind(transport, getEmbedAppearance)
|
|
20694
|
+
},
|
|
19856
20695
|
embedTokens: {
|
|
20696
|
+
anonymous: {
|
|
20697
|
+
create: bind(transport, createAnonymousEmbedToken)
|
|
20698
|
+
},
|
|
19857
20699
|
create: bind(transport, createEmbedToken),
|
|
19858
20700
|
list: bind(transport, listEmbedTokens),
|
|
19859
20701
|
revoke: {
|
|
@@ -19879,6 +20721,7 @@ function createAgent(transport) {
|
|
|
19879
20721
|
list: bind(transport, listSessionCompactions)
|
|
19880
20722
|
},
|
|
19881
20723
|
create: bind(transport, sessionsCreate),
|
|
20724
|
+
delete: bind(transport, sessionsDelete),
|
|
19882
20725
|
events: {
|
|
19883
20726
|
list: bind(transport, sessionsEventsList),
|
|
19884
20727
|
send: bind(transport, sessionsEventsSend),
|
|
@@ -19960,6 +20803,9 @@ function createApplication(transport) {
|
|
|
19960
20803
|
},
|
|
19961
20804
|
update: bind(transport, applicationUpdateWorker),
|
|
19962
20805
|
versions: {
|
|
20806
|
+
assets: {
|
|
20807
|
+
retrieveManifest: bind(transport, applicationGetVersionAssetManifest)
|
|
20808
|
+
},
|
|
19963
20809
|
create: bind(transport, applicationCreateVersion),
|
|
19964
20810
|
list: bindPage(transport, applicationListVersions),
|
|
19965
20811
|
retrieve: bind(transport, applicationGetVersion)
|
|
@@ -20375,7 +21221,16 @@ function createOrganization(transport) {
|
|
|
20375
21221
|
retrieve: bind(transport, getOrganizationEvent)
|
|
20376
21222
|
},
|
|
20377
21223
|
feedback: {
|
|
20378
|
-
|
|
21224
|
+
counts: {
|
|
21225
|
+
list: bind(transport, getOrganizationFeedbackCounts)
|
|
21226
|
+
},
|
|
21227
|
+
create: bind(transport, createOrganizationFeedback),
|
|
21228
|
+
list: bind(transport, listOrganizationFeedback),
|
|
21229
|
+
messages: {
|
|
21230
|
+
create: bind(transport, createOrganizationFeedbackMessage),
|
|
21231
|
+
list: bind(transport, listOrganizationFeedbackMessages)
|
|
21232
|
+
},
|
|
21233
|
+
retrieve: bind(transport, getOrganizationFeedback)
|
|
20379
21234
|
},
|
|
20380
21235
|
usage: {
|
|
20381
21236
|
list: bind(transport, listOrganizationUsage)
|
|
@@ -20867,9 +21722,13 @@ class Transport {
|
|
|
20867
21722
|
};
|
|
20868
21723
|
}
|
|
20869
21724
|
async request(operation, options = {}) {
|
|
21725
|
+
return (await this.requestWithResponse(operation, options)).data;
|
|
21726
|
+
}
|
|
21727
|
+
async requestWithResponse(operation, options = {}) {
|
|
20870
21728
|
const scope = this.scope(options, false);
|
|
20871
21729
|
try {
|
|
20872
|
-
|
|
21730
|
+
const result = await abortable(operation(scope.options), scope.signal);
|
|
21731
|
+
return { data: result.data, response: result.response };
|
|
20873
21732
|
} finally {
|
|
20874
21733
|
scope.close();
|
|
20875
21734
|
}
|
|
@@ -20901,6 +21760,10 @@ function base64(bytes) {
|
|
|
20901
21760
|
return btoa(chunks.join(""));
|
|
20902
21761
|
}
|
|
20903
21762
|
async function publish(client2, input) {
|
|
21763
|
+
const rolloutFields = ["gradual", "gradualRollout", "gradual_rollout", "canary", "rollout", "percentage", "percent", "traffic", "traffic_percentage", "strategy", "versions"];
|
|
21764
|
+
if (Object.keys(input).some((key) => rolloutFields.includes(key) || /percentage|percent|canary|gradual|rollout|灰度/i.test(key))) {
|
|
21765
|
+
throw new PraxisError({ code: "INVALID_PARAMS", message: '平台不支持灰度 (gradual rollout is not supported). Roll back with praxis.application.workers.deployments.create({ path: { worker_id }, body: { strategy: "percentage", versions: [{ version_id: previousVersionId, percentage: 100 }] } }); the previous version artifacts must still be retained.' });
|
|
21766
|
+
}
|
|
20904
21767
|
const timeout = input.timeout_ms ?? 120000;
|
|
20905
21768
|
if (!Number.isFinite(timeout) || timeout < 0)
|
|
20906
21769
|
throw new RangeError("timeout_ms must be non-negative and finite");
|
|
@@ -20919,7 +21782,7 @@ async function publish(client2, input) {
|
|
|
20919
21782
|
const files = Object.entries(input.files);
|
|
20920
21783
|
if (files.length > 1e5)
|
|
20921
21784
|
throw new PraxisError({ code: "LIMIT_EXCEEDED", message: "At most 100000 asset paths can be published" });
|
|
20922
|
-
|
|
21785
|
+
let manifest = {};
|
|
20923
21786
|
const contents = new Map;
|
|
20924
21787
|
for (const [path2, content] of files) {
|
|
20925
21788
|
const normalized = path2.startsWith("/") ? path2 : `/${path2}`;
|
|
@@ -20928,8 +21791,8 @@ async function publish(client2, input) {
|
|
|
20928
21791
|
const bytes = typeof content === "string" ? new TextEncoder().encode(content) : new Uint8Array(content);
|
|
20929
21792
|
if (bytes.length > FILE_BYTES)
|
|
20930
21793
|
throw new PraxisError({ code: "LIMIT_EXCEEDED", message: `Asset ${normalized} exceeds 25 MiB` });
|
|
20931
|
-
const
|
|
20932
|
-
const hash = Array.from(
|
|
21794
|
+
const digest2 = new Uint8Array(await crypto.subtle.digest("SHA-256", bytes));
|
|
21795
|
+
const hash = Array.from(digest2.subarray(0, 16), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
20933
21796
|
manifest[normalized] = { hash, size: bytes.length };
|
|
20934
21797
|
contents.set(hash, bytes);
|
|
20935
21798
|
}
|
|
@@ -20942,9 +21805,60 @@ async function publish(client2, input) {
|
|
|
20942
21805
|
}
|
|
20943
21806
|
}
|
|
20944
21807
|
const created = !worker;
|
|
21808
|
+
if (!worker && input.dryRun)
|
|
21809
|
+
throw new PraxisError({ code: "NOT_FOUND", message: "请先创建应用 (create the application before dryRun)" });
|
|
20945
21810
|
worker ??= await workers.create({ body: { name: input.name, subdomain: { enabled: true } } });
|
|
20946
21811
|
const path = { worker_id: worker.id };
|
|
21812
|
+
let currentVersion;
|
|
21813
|
+
let currentDeployment;
|
|
21814
|
+
let previous = {};
|
|
21815
|
+
if (worker.praxis?.current_deployment_id) {
|
|
21816
|
+
currentDeployment = await workers.deployments.retrieve({ path: { ...path, deployment_id: worker.praxis.current_deployment_id } });
|
|
21817
|
+
const active = currentDeployment.versions[0];
|
|
21818
|
+
if (!active)
|
|
21819
|
+
throw new PraxisError({ code: "INVALID_RESPONSE", message: "Current deployment has no version" });
|
|
21820
|
+
currentVersion = await workers.versions.retrieve({ path: { ...path, version_id: active.version_id } });
|
|
21821
|
+
previous = (await workers.versions.assets.retrieveManifest({ path: { ...path, version_id: active.version_id } })).manifest;
|
|
21822
|
+
}
|
|
21823
|
+
manifest = {
|
|
21824
|
+
...Object.fromEntries(Object.entries(previous).filter(([key]) => input.keepExisting || Object.hasOwn(manifest, key))),
|
|
21825
|
+
...manifest
|
|
21826
|
+
};
|
|
21827
|
+
if (Object.keys(manifest).length > 1e5)
|
|
21828
|
+
throw new PraxisError({ code: "LIMIT_EXCEEDED", message: "At most 100000 asset paths can be published" });
|
|
21829
|
+
const added = Object.keys(manifest).filter((key) => !Object.hasOwn(previous, key));
|
|
21830
|
+
const changed = Object.keys(manifest).filter((key) => previous[key] && (previous[key].hash !== manifest[key].hash || previous[key].size !== manifest[key].size));
|
|
21831
|
+
const removed = Object.keys(previous).filter((key) => !Object.hasOwn(manifest, key));
|
|
21832
|
+
const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(JSON.stringify(manifest))));
|
|
21833
|
+
const manifestHash = Array.from(digest, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
21834
|
+
const staticOnly = !["main", "bindings", "compatibility_date", "compatibility_flags", "assets_config"].some((key) => Object.hasOwn(input, key));
|
|
21835
|
+
const unchanged = staticOnly && !!currentVersion && manifestHash === currentVersion.praxis.assets_manifest?.manifest_hash;
|
|
21836
|
+
const hashes = new Set(Object.values(manifest).map((entry) => entry.hash));
|
|
21837
|
+
const currentResult = {
|
|
21838
|
+
url: worker.subdomain.url,
|
|
21839
|
+
worker_id: worker.id,
|
|
21840
|
+
version_id: currentVersion?.id ?? null,
|
|
21841
|
+
deployment_id: currentDeployment?.id ?? null,
|
|
21842
|
+
status: currentDeployment?.praxis.status ?? "draft",
|
|
21843
|
+
created,
|
|
21844
|
+
...currentVersion ? { version: currentVersion } : {},
|
|
21845
|
+
unchanged,
|
|
21846
|
+
uploaded: 0,
|
|
21847
|
+
reused: hashes.size
|
|
21848
|
+
};
|
|
21849
|
+
if (unchanged && !input.dryRun)
|
|
21850
|
+
return currentResult;
|
|
20947
21851
|
const session = await workers.assetsUploadSession.create({ path, body: { manifest } });
|
|
21852
|
+
if (input.dryRun) {
|
|
21853
|
+
const missing = new Set(session.buckets.flat());
|
|
21854
|
+
if ([...missing].some((hash) => !hashes.has(hash)))
|
|
21855
|
+
throw new PraxisError({ code: "INVALID_RESPONSE", message: "Upload session requested an unknown hash" });
|
|
21856
|
+
return {
|
|
21857
|
+
...currentResult,
|
|
21858
|
+
reused: hashes.size - missing.size,
|
|
21859
|
+
plan: { added, changed, removed, upload_hashes: missing.size, existing_hashes: hashes.size - missing.size }
|
|
21860
|
+
};
|
|
21861
|
+
}
|
|
20948
21862
|
let jwt = session.buckets.length ? null : session.jwt;
|
|
20949
21863
|
const uploaded = new Set;
|
|
20950
21864
|
for (const bucket of session.buckets) {
|
|
@@ -21015,16 +21929,29 @@ async function publish(client2, input) {
|
|
|
21015
21929
|
status: deployment.praxis.status,
|
|
21016
21930
|
created,
|
|
21017
21931
|
uploaded: uploaded.size,
|
|
21018
|
-
reused:
|
|
21932
|
+
reused: hashes.size - uploaded.size
|
|
21019
21933
|
};
|
|
21020
21934
|
}
|
|
21021
21935
|
|
|
21936
|
+
// ../../packages/sdk/typescript/src/helpers/database-count.ts
|
|
21937
|
+
async function count(transport, input) {
|
|
21938
|
+
const { response } = await transport.requestWithResponse(databaseHead, {
|
|
21939
|
+
path: { database_id: input.database_id, table: input.table },
|
|
21940
|
+
query: input.filters,
|
|
21941
|
+
headers: { Prefer: `count=${input.count ?? "exact"}` }
|
|
21942
|
+
});
|
|
21943
|
+
const total = response.headers.get("Content-Range")?.split("/")[1];
|
|
21944
|
+
return { count: total === undefined || total === "*" ? null : Number(total) };
|
|
21945
|
+
}
|
|
21946
|
+
|
|
21022
21947
|
// ../../packages/sdk/typescript/src/core/client.ts
|
|
21023
21948
|
class Praxis {
|
|
21024
21949
|
constructor(options) {
|
|
21025
21950
|
const transport = new Transport(options);
|
|
21026
21951
|
for (const [name, create] of Object.entries(resourceFactories)) {
|
|
21027
21952
|
const resource = create(transport);
|
|
21953
|
+
if (name === "database")
|
|
21954
|
+
Object.assign(resource, { count: (input) => count(transport, input) });
|
|
21028
21955
|
if (name === "application")
|
|
21029
21956
|
Object.assign(resource, { publish: (input) => publish(this, input) });
|
|
21030
21957
|
Object.defineProperty(this, name, { value: resource, enumerable: true });
|
|
@@ -22156,7 +23083,7 @@ function plain(value) {
|
|
|
22156
23083
|
}
|
|
22157
23084
|
|
|
22158
23085
|
// src/output/human.ts
|
|
22159
|
-
var
|
|
23086
|
+
var count3 = (n, noun) => `${n} ${noun}${n === 1 ? "" : "s"}`;
|
|
22160
23087
|
function identity(result, ctx) {
|
|
22161
23088
|
const op = "op" in result ? result.op : undefined;
|
|
22162
23089
|
const split = op?.lastIndexOf(".") ?? -1;
|
|
@@ -22244,7 +23171,7 @@ function objectView(data, resource, id, ctx, paint) {
|
|
|
22244
23171
|
return v.map(scalar).map(plain).join(", ");
|
|
22245
23172
|
folded = true;
|
|
22246
23173
|
const preview = v.slice(0, 3).map((item) => record(item).id ?? record(item).name).filter((x) => x !== undefined).map((x) => plain(scalar(x)));
|
|
22247
|
-
return `${
|
|
23174
|
+
return `${count3(v.length, "item")}${preview.length ? ` (${preview.join(", ")})` : ""}`;
|
|
22248
23175
|
}
|
|
22249
23176
|
if (v !== null && typeof v === "object") {
|
|
22250
23177
|
if (depth >= 1) {
|
|
@@ -22285,7 +23212,7 @@ function renderHuman(result, ctx) {
|
|
|
22285
23212
|
return {
|
|
22286
23213
|
stdout: result.items.length ? table(result.items, ctx, out) : out.dim(`No ${plain(resource)}${/(s|x|ch|sh)$/.test(resource) ? "es" : "s"}.`) + `
|
|
22287
23214
|
`,
|
|
22288
|
-
stderr: err.dim(`${result.total !== undefined ? `${result.items.length} of ${result.total} items` :
|
|
23215
|
+
stderr: err.dim(`${result.total !== undefined ? `${result.items.length} of ${result.total} items` : count3(result.items.length, "item")}${result.nextCursor ? ` · next: ${ctx.nextCommand ?? "praxis --help"}` : ""}`) + `
|
|
22289
23216
|
`
|
|
22290
23217
|
};
|
|
22291
23218
|
case "object": {
|
|
@@ -22565,7 +23492,7 @@ function startProgress(ctx, write = (text) => writeOutput({ stderr: text })) {
|
|
|
22565
23492
|
}
|
|
22566
23493
|
|
|
22567
23494
|
// src/main.ts
|
|
22568
|
-
var version = "0.1.0-dev.
|
|
23495
|
+
var version = "0.1.0-dev.ed6ad1b";
|
|
22569
23496
|
var commands = commandTree(operations);
|
|
22570
23497
|
var manual = [["login"], ["logout"], ["whoami"], ["org", "list"], ["org", "switch"], ["api"], ["skill"]];
|
|
22571
23498
|
function route(argv) {
|