@deepraxis/cli 0.1.0-dev.45dc412 → 0.1.0-dev.67c7f3b

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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Generated by `bun run commands`. DO NOT EDIT.
4
4
 
5
- 346 HTTP operations; 348 commands including aliases.
5
+ 365 HTTP operations; 367 commands including aliases.
6
6
 
7
7
  Environment: `PRAXIS_ENV=develop|production` (dev package defaults to `develop`; stable package defaults to `production`). No `--env` option.
8
8
 
@@ -27,6 +27,8 @@ Handwritten commands: `login`, `logout`, `whoami`, `org list`, `org switch <orga
27
27
  | `praxis agent computer file get-content` | `agent.computers.files.retrieveContent` | GET `/agent/v1/computers/{computer_id}/files/content` | `--computer`, `--path` |
28
28
  | `praxis agent computer file list` | `agent.computers.files.list` | GET `/agent/v1/computers/{computer_id}/files` | `--computer`, `--path` |
29
29
  | `praxis agent computer get <computer_id>` | `agent.computers.retrieve` | GET `/agent/v1/computers/{computer_id}` | |
30
+ | `praxis agent computer lease delete <lease_id>` | `agent.computers.leases.delete` | DELETE `/agent/v1/computers/{computer_id}/leases/{lease_id}` | `--computer` |
31
+ | `praxis agent computer lease renew create` | `agent.computers.leases.renew.create` | POST `/agent/v1/computers/{computer_id}/leases/{lease_id}/renew` | `--computer`, `--lease` |
30
32
  | `praxis agent computer list` | `agent.computers.list` | GET `/agent/v1/computers` | `--param-limit`, `--page` |
31
33
  | `praxis agent computer update <computer_id>` | `agent.computers.update` | POST `/agent/v1/computers/{computer_id}` | `--name` |
32
34
  | `praxis agent create` | `agent.agents.create` | POST `/agent/v1/agents` | `--name`, `--description`, `--system`, `--kind`, `--computer-id`, `--subagent-model` |
@@ -40,9 +42,19 @@ Handwritten commands: `login`, `logout`, `whoami`, `org list`, `org switch <orga
40
42
  | `praxis agent deployment update <deployment_id>` | `agent.deployments.update` | POST `/agent/v1/deployments/{deployment_id}` | `--description`, `--environment-id`, `--name`, `--vault-ids` |
41
43
  | `praxis agent deployment-run get <deployment_run_id>` | `agent.deploymentRuns.retrieve` | GET `/agent/v1/deployment_runs/{deployment_run_id}` | |
42
44
  | `praxis agent deployment-run list` | `agent.deploymentRuns.list` | GET `/agent/v1/deployment_runs` | `--created-at-gt`, `--created-at-gte`, `--created-at-lt`, `--created-at-lte`, `--deployment-id`, `--has-error`, `--trigger-type`, `--param-limit`, `--page` |
43
- | `praxis agent embed-token create` | `agent.embedTokens.create` | POST `/agent/v1/embed_tokens` | `--agent`, `--param-version`, `--external-user-id`, `--ttl-seconds`, `--budget-cents`, `--allowed-origins` |
45
+ | `praxis agent embed exchange create` | `agent.embed.exchange.create` | POST `/agent/v1/embed/exchange` | `--code` |
46
+ | `praxis agent embed get-appearance` | `agent.embed.retrieveAppearance` | GET `/agent/v1/embed/appearance` | |
47
+ | `praxis agent embed-token anonymous create` | `agent.embedTokens.anonymous.create` | POST `/agent/v1/embed_tokens/anonymous` | `--publishable-key`, `--visitor-secret` |
48
+ | `praxis agent embed-token create` | `agent.embedTokens.create` | POST `/agent/v1/embed_tokens` | `--hosted`, `--agent`, `--param-version`, `--external-user-id`, `--ttl-seconds`, `--budget-cents`, `--allowed-origins` |
44
49
  | `praxis agent embed-token list` | `agent.embedTokens.list` | GET `/agent/v1/embed_tokens` | `--agent-id`, `--external-user-id`, `--param-limit`, `--page` |
45
50
  | `praxis agent embed-token revoke create` | `agent.embedTokens.revoke.create` | POST `/agent/v1/embed_tokens/{id}/revoke` | `--embed-token` |
51
+ | `praxis agent end-user block create` | `agent.agents.endUsers.block.create` | POST `/agent/v1/agents/{agent_id}/end_users/{external_user_id}/block` | `--agent`, `--end-user` |
52
+ | `praxis agent end-user delete <external_user_id>` | `agent.agents.endUsers.delete` | DELETE `/agent/v1/agents/{agent_id}/end_users/{external_user_id}` | `--agent`, `--confirm` |
53
+ | `praxis agent end-user get <external_user_id>` | `agent.agents.endUsers.retrieve` | GET `/agent/v1/agents/{agent_id}/end_users/{external_user_id}` | `--agent` |
54
+ | `praxis agent end-user get-deletion <external_user_id>` | `agent.agents.endUsers.retrieveDeletion` | GET `/agent/v1/agents/{agent_id}/end_users/{external_user_id}/deletion` | `--agent` |
55
+ | `praxis agent end-user list` | `agent.agents.endUsers.list` | GET `/agent/v1/agents/{agent_id}/end_users` | `--agent`, `--param-limit`, `--page`, `--q` |
56
+ | `praxis agent end-user revoke-token create` | `agent.agents.endUsers.revokeTokens.create` | POST `/agent/v1/agents/{agent_id}/end_users/{external_user_id}/revoke_tokens` | `--agent`, `--end-user` |
57
+ | `praxis agent end-user unblock create` | `agent.agents.endUsers.unblock.create` | POST `/agent/v1/agents/{agent_id}/end_users/{external_user_id}/unblock` | `--agent`, `--end-user` |
46
58
  | `praxis agent environment archive <environment_id>` | `agent.environments.archive` | POST `/agent/v1/environments/{environment_id}/archive` | |
47
59
  | `praxis agent environment create` | `agent.environments.create` | POST `/agent/v1/environments` | `--name`, `--description`, `--scope` |
48
60
  | `praxis agent environment get <environment_id>` | `agent.environments.retrieve` | GET `/agent/v1/environments/{environment_id}` | |
@@ -64,11 +76,13 @@ Handwritten commands: `login`, `logout`, `whoami`, `org list`, `org switch <orga
64
76
  | `praxis agent session get <session_id>` | `agent.sessions.retrieve` | GET `/agent/v1/sessions/{session_id}` | |
65
77
  | `praxis agent session get-compact <operation_id>` | `agent.sessions.retrieveCompact` | GET `/agent/v1/sessions/{session_id}/compact/{operation_id}` | `--session` |
66
78
  | `praxis agent session get-context <session_id>` | `agent.sessions.retrieveContext` | GET `/agent/v1/sessions/{session_id}/context` | |
67
- | `praxis agent session list` | `agent.sessions.list` | GET `/agent/v1/sessions` | `--agent-id`, `--agent-version`, `--created-at-gt`, `--created-at-gte`, `--created-at-lt`, `--created-at-lte`, `--deployment-id`, `--include-archived`, `--memory-store-id`, `--order`, `--statuses`, `--param-limit`, `--page` |
79
+ | `praxis agent session list` | `agent.sessions.list` | GET `/agent/v1/sessions` | `--agent-id`, `--agent-version`, `--created-at-gt`, `--created-at-gte`, `--created-at-lt`, `--created-at-lte`, `--deployment-id`, `--include-archived`, `--memory-store-id`, `--order`, `--statuses`, `--param-limit`, `--page`, `--external-user-id`, `--source` |
68
80
  | `praxis agent session resource create` | `agent.sessions.resources.create` | POST `/agent/v1/sessions/{session_id}/resources` | `--session`, `--type`, `--file-id`, `--mount-path` |
69
81
  | `praxis agent session resource delete <resource_id>` | `agent.sessions.resources.delete` | DELETE `/agent/v1/sessions/{session_id}/resources/{resource_id}` | `--session`, `--query-session-id` |
70
82
  | `praxis agent session resource get <resource_id>` | `agent.sessions.resources.retrieve` | GET `/agent/v1/sessions/{session_id}/resources/{resource_id}` | `--session`, `--query-session-id` |
71
83
  | `praxis agent session resource list` | `agent.sessions.resources.list` | GET `/agent/v1/sessions/{session_id}/resources` | `--session`, `--param-limit`, `--page` |
84
+ | `praxis agent session run delete-feedback <run_id>` | `agent.sessions.runs.deleteFeedback` | DELETE `/agent/v1/sessions/{session_id}/runs/{run_id}/feedback` | `--session` |
85
+ | `praxis agent session run feedback create` | `agent.sessions.runs.feedback.create` | POST `/agent/v1/sessions/{session_id}/runs/{run_id}/feedback` | `--session`, `--run`, `--rating`, `--comment` |
72
86
  | `praxis agent session thread archive <thread_id>` | `agent.sessions.threads.archive` | POST `/agent/v1/sessions/{session_id}/threads/{thread_id}/archive` | `--session`, `--query-session-id` |
73
87
  | `praxis agent session thread event list` | `agent.sessions.threads.events.list` | GET `/agent/v1/sessions/{session_id}/threads/{thread_id}/events` | `--session`, `--thread`, `--query-session-id`, `--param-limit`, `--page` |
74
88
  | `praxis agent session thread get <thread_id>` | `agent.sessions.threads.retrieve` | GET `/agent/v1/sessions/{session_id}/threads/{thread_id}` | `--session`, `--query-session-id` |
@@ -303,7 +317,12 @@ Handwritten commands: `login`, `logout`, `whoami`, `org list`, `org switch <orga
303
317
  | `praxis organization cost list` | `organization.costs.list` | GET `/organization/v1/costs` | `--starting-at`, `--ending-at`, `--bucket-width`, `--time-zone`, `--group-by`, `--page` |
304
318
  | `praxis organization event get <id>` | `organization.events.retrieve` | GET `/organization/v1/events/{id}` | |
305
319
  | `praxis organization event list` | `organization.events.list` | GET `/organization/v1/events` | `--starting-at`, `--ending-at`, `--param-limit`, `--page` |
306
- | `praxis organization feedback create` | `organization.feedback.create` | POST `/organization/v1/feedback` | `--message`, `--contact-email`, `--name`, `--url`, `--associated-event-id`, `--source` |
320
+ | `praxis organization feedback count list` | `organization.feedback.counts.list` | GET `/organization/v1/feedback/counts` | |
321
+ | `praxis organization feedback create` | `organization.feedback.create` | POST `/organization/v1/feedback` | `--message`, `--contact-email`, `--name`, `--url`, `--associated-event-id`, `--title`, `--type`, `--source` |
322
+ | `praxis organization feedback get <id>` | `organization.feedback.retrieve` | GET `/organization/v1/feedback/{id}` | |
323
+ | `praxis organization feedback list` | `organization.feedback.list` | GET `/organization/v1/feedback` | `--phase`, `--query`, `--param-limit`, `--page` |
324
+ | `praxis organization feedback message create` | `organization.feedback.messages.create` | POST `/organization/v1/feedback/{id}/messages` | `--feedback`, `--body` |
325
+ | `praxis organization feedback message list` | `organization.feedback.messages.list` | GET `/organization/v1/feedback/{id}/messages` | `--feedback`, `--param-limit`, `--page` |
307
326
  | `praxis organization usage list` | `organization.usage.list` | GET `/organization/v1/usage` | `--starting-at`, `--ending-at`, `--bucket-width`, `--time-zone`, `--group-by`, `--page` |
308
327
  | `praxis sandbox command run <sandbox_id>` | `sandbox.sandboxes.commands.run` | POST `/sandbox/v1/sandboxes/{sandbox_id}/commands` | `--cmd`, `--cwd`, `--timeout-ms` |
309
328
  | `praxis sandbox connect <sandboxID>` | `sandbox.sandboxes.connect` | POST `/sandbox/v1/sandboxes/{sandboxID}/connect` | `--timeout`, `--memory` |
package/README.md CHANGED
@@ -7,8 +7,8 @@
7
7
  The official command line for [知行云 Praxis](https://deepraxis.com), the cloud where AI agents are built, run and hosted.
8
8
 
9
9
  [![npm](https://img.shields.io/npm/v/@deepraxis/cli?label=npm&color=2e8555)](https://www.npmjs.com/package/@deepraxis/cli)
10
- [![Node.js](https://img.shields.io/node/v/@deepraxis/cli?color=2e8555)](https://nodejs.org)
11
- [![License](https://img.shields.io/badge/license-Apache--2.0-2e8555)](./LICENSE)
10
+ [![Node.js](https://img.shields.io/badge/node-%E2%89%A520-2e8555)](https://nodejs.org)
11
+ [![License](https://img.shields.io/badge/license-Apache--2.0-2e8555)](https://www.apache.org/licenses/LICENSE-2.0)
12
12
 
13
13
  [Website](https://deepraxis.com) · [Documentation](https://docs.deepraxis.com) · [API reference](https://docs.deepraxis.com/docs/api) · [Console](https://console.deepraxis.com)
14
14
 
@@ -20,7 +20,7 @@ The official command line for [知行云 Praxis](https://deepraxis.com), the clo
20
20
  npm install -g @deepraxis/cli
21
21
  praxis login
22
22
  praxis model chat completion create --model deepseek-flash \
23
- --data '{"messages":[{"role":"user","content":"Say hello in three languages"}]}'
23
+ --data '{"messages":[{"role":"user","content":"Hello!"}]}'
24
24
  ```
25
25
 
26
26
  Every operation of the Praxis API is a command: about 350 of them across models, agents,
@@ -57,8 +57,8 @@ npx @deepraxis/cli model list
57
57
  ## Sign in
58
58
 
59
59
  ```sh
60
- praxis login # opens the device page; type the code shown in your terminal
61
- praxis whoami # who you are, which organization, where the credential is stored
60
+ praxis login # approve in the browser with the code shown
61
+ praxis whoami # account, organization, credential storage
62
62
  ```
63
63
 
64
64
  You need a Praxis account; sign up at [deepraxis.com](https://deepraxis.com).
@@ -68,7 +68,7 @@ Belong to several organizations? Every call runs in the active one:
68
68
  ```sh
69
69
  praxis org list
70
70
  praxis org switch <organization_id>
71
- praxis model list --org <organization_id> # one call in another organization
71
+ praxis model list --org <organization_id> # just this call
72
72
  ```
73
73
 
74
74
  For CI and other headless environments, create an API key in the
@@ -86,9 +86,11 @@ export PRAXIS_API_KEY=<your-api-key>
86
86
  ```sh
87
87
  praxis model list
88
88
  praxis model chat completion create --model deepseek-flash \
89
- --data '{"messages":[{"role":"user","content":"Write a haiku about the sea"}]}'
90
- praxis model embedding create --model <embedding-model> --data '{"input":"hello world"}'
91
- praxis model image generation create --model <image-model> --prompt "a lighthouse at dawn"
89
+ --data '{"messages":[{"role":"user","content":"A haiku"}]}'
90
+ praxis model embedding create --model <embedding_model> \
91
+ --data '{"input":"hello world"}'
92
+ praxis model image generation create --model <image_model> \
93
+ --prompt "a lighthouse at dawn"
92
94
  ```
93
95
 
94
96
  ### Agents
@@ -103,7 +105,10 @@ praxis agent create --data '{
103
105
  }'
104
106
  praxis agent session create --data '{"agent": "<agent_id>"}'
105
107
  praxis agent session event send <session_id> --data '{
106
- "events": [{"type": "user.message", "content": [{"type": "text", "text": "List the files in your home directory"}]}]
108
+ "events": [{
109
+ "type": "user.message",
110
+ "content": [{"type": "text", "text": "What can you do?"}]
111
+ }]
107
112
  }'
108
113
  praxis agent session event stream --session <session_id>
109
114
  ```
@@ -112,23 +117,24 @@ praxis agent session event stream --session <session_id>
112
117
 
113
118
  ```sh
114
119
  praxis sandbox create --template-id base
115
- praxis sandbox command run <sandbox_id> --cmd "python3 -c 'print(6 * 7)'"
120
+ praxis sandbox command run <sandbox_id> \
121
+ --cmd "python3 -c 'print(6 * 7)'"
116
122
  praxis sandbox delete <sandbox_id> --yes
117
123
  ```
118
124
 
119
125
  ### Search, data and automation
120
126
 
121
127
  ```sh
122
- praxis search create --query "latest Cloudflare Workers announcements" --max-results 5
128
+ praxis search create --query "AI agent frameworks" --max-results 5
123
129
  praxis database create --name notes
124
130
  praxis automation run create --data '{
125
- "source": "export default async (input: { n: number }) => ({ answer: input.n + 1 })",
131
+ "source": "export default async (i) => ({ answer: i.n + 1 })",
126
132
  "language": "ts", "input": {"n": 41}, "wait": 30
127
133
  }'
128
134
  ```
129
135
 
130
136
  Browse everything with `praxis --help`, `praxis <domain> --help`, or the full
131
- [command reference](./COMMANDS.md) in the package.
137
+ [command reference](https://unpkg.com/@deepraxis/cli/COMMANDS.md) that ships in the package.
132
138
 
133
139
  ## How commands work
134
140
 
@@ -170,8 +176,8 @@ The CLI writes its own skill file: the general rules plus one line per command,
170
176
  the API contract.
171
177
 
172
178
  ```sh
173
- praxis skill --install ~/.claude/skills # writes praxis-cli/SKILL.md
174
- praxis skill > SKILL.md # or print it anywhere
179
+ praxis skill --install ~/.claude/skills # praxis-cli/SKILL.md
180
+ praxis skill > SKILL.md # or print it
175
181
  ```
176
182
 
177
183
  After that, an agent such as Claude Code can drive every Praxis capability through the CLI and
@@ -200,7 +206,7 @@ Linux. Without a keychain they are written to `~/.praxis/cli/<env>.json` with mo
200
206
  ## Resources
201
207
 
202
208
  - [Documentation](https://docs.deepraxis.com) and [API reference](https://docs.deepraxis.com/docs/api)
203
- - [Command reference](./COMMANDS.md)
209
+ - [Command reference](https://unpkg.com/@deepraxis/cli/COMMANDS.md)
204
210
  - TypeScript SDK: [`@deepraxis/sdk`](https://www.npmjs.com/package/@deepraxis/sdk), the same API as code
205
211
  - Already using the OpenAI or Anthropic SDK? Point its `baseURL` at
206
212
  `https://api.deepraxis.com/openai/v1` or the Anthropic-compatible endpoint, as the
@@ -208,7 +214,7 @@ Linux. Without a keychain they are written to `~/.praxis/cli/<env>.json` with mo
208
214
 
209
215
  ## License
210
216
 
211
- [Apache-2.0](./LICENSE). Copyright 2026 南京深度实践人工智能科技有限公司 (Deepractice).
217
+ [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0). Copyright 2026 南京深度实践人工智能科技有限公司 (Deepractice).
212
218
 
213
219
  "Praxis", "知行云" and "Deepraxis" are trademarks of Deepractice; the license does not grant
214
220
  rights to use them.
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 and custom tool entries return 400; the native skill tool is separate from the skills field. Use tools: [{type: "agent_toolset_20260401"}] for built-in tools including codemode, skill and agent; inspect toolsets.list for names and schemas, and keep bash enabled for native additions. To offer only some tools, set default_config: {enabled: false} and list the tools to keep in configs, e.g. tools: [{type: "agent_toolset_20260401", default_config: {enabled: false}, configs: [{name: "codemode", enabled: true}, {name: "bash", enabled: true, permission_policy: {type: "always_ask"}}]}]; every tool not listed, including todo_write, enter_plan_mode, ask_user_question and goal_read, follows default_config, and the response echoes it. codemode runs through bash, so enabling codemode while bash is disabled returns 400. Optional mcp_toolset entries pair with mcp_servers. model accepts platform model IDs such as deepseek-flash, not only the Claude IDs in the protocol examples. model.settings.reasoning sets default thinking; other extra model controls return 400. Example: {"name":"helper","model":{"id":"deepseek-flash"},"tools":[{"type":"agent_toolset_20260401"}]}.',
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: "MCP servers this agent connects to. Maximum 20. Names must be unique\nwithin the array. Every server must be referenced by an `mcp_toolset` in\n`tools`; unreferenced servers are rejected. See the\n[MCP connector guide](https://platform.claude.com/docs/en/managed-agents/mcp-connector)."
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",
@@ -215,7 +215,7 @@ across all toolsets allowed.`
215
215
  resource: "agent.agents",
216
216
  method: "update",
217
217
  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 and custom tools return 400; use the native skill tool for available runtime skills.",
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 return 400; use the native skill tool for available runtime skills.",
219
219
  http: "POST",
220
220
  path: "/agent/v1/agents/{agent_id}",
221
221
  streaming: "no",
@@ -241,7 +241,7 @@ across all toolsets allowed.`
241
241
  type: "array",
242
242
  itemType: "object",
243
243
  required: false,
244
- description: "MCP servers. Full replacement. Omit to preserve; send empty array or\n`null` to clear. Names must be unique. Maximum 20. Every server must be\nreferenced by an `mcp_toolset` in the agent's resulting `tools`; unreferenced\nservers are rejected. See the\n[MCP connector guide](https://platform.claude.com/docs/en/managed-agents/mcp-connector)."
244
+ description: "Praxis extension: HTTP, SSE or trusted stdio MCP servers paired with mcp_toolset entries and saved with the agent version."
245
245
  },
246
246
  {
247
247
  name: "metadata",
@@ -369,6 +369,189 @@ current version; omit to apply the update unconditionally.`
369
369
  ],
370
370
  query: []
371
371
  },
372
+ {
373
+ resource: "agent.agents.endUsers",
374
+ method: "list",
375
+ summary: "List End Users",
376
+ description: `List users who have sessions or token issuance history on a service agent.
377
+
378
+ 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.`,
379
+ http: "GET",
380
+ path: "/agent/v1/agents/{agent_id}/end_users",
381
+ streaming: "no",
382
+ pagination: false,
383
+ pathParams: [
384
+ {
385
+ name: "agent_id",
386
+ sdkName: "agent_id"
387
+ }
388
+ ],
389
+ query: [
390
+ {
391
+ name: "limit",
392
+ type: "integer",
393
+ required: false,
394
+ description: "Maximum users per page; defaults to 20."
395
+ },
396
+ {
397
+ name: "page",
398
+ type: "string",
399
+ required: false,
400
+ description: "next_page from the previous response with the same agent, q and limit."
401
+ },
402
+ {
403
+ name: "q",
404
+ type: "string",
405
+ required: false,
406
+ description: "Case-sensitive literal prefix of external_user_id; omit or use an empty string for all users."
407
+ }
408
+ ]
409
+ },
410
+ {
411
+ resource: "agent.agents.endUsers",
412
+ method: "delete",
413
+ summary: "Delete end-user data",
414
+ description: `Delete a host application's end-user data from one service agent after explicit confirmation.
415
+
416
+ 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.`,
417
+ http: "DELETE",
418
+ path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
419
+ streaming: "no",
420
+ pagination: false,
421
+ pathParams: [
422
+ {
423
+ name: "agent_id",
424
+ sdkName: "agent_id"
425
+ },
426
+ {
427
+ name: "external_user_id",
428
+ sdkName: "external_user_id"
429
+ }
430
+ ],
431
+ query: [
432
+ {
433
+ name: "confirm",
434
+ type: "string",
435
+ required: true,
436
+ description: "Must exactly equal the external_user_id path parameter to confirm destructive deletion."
437
+ }
438
+ ]
439
+ },
440
+ {
441
+ resource: "agent.agents.endUsers",
442
+ method: "retrieve",
443
+ summary: "Get End User",
444
+ description: `Inspect one end user and their twenty most recently updated sessions.
445
+
446
+ 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.`,
447
+ http: "GET",
448
+ path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
449
+ streaming: "no",
450
+ pagination: false,
451
+ pathParams: [
452
+ {
453
+ name: "agent_id",
454
+ sdkName: "agent_id"
455
+ },
456
+ {
457
+ name: "external_user_id",
458
+ sdkName: "external_user_id"
459
+ }
460
+ ],
461
+ query: []
462
+ },
463
+ {
464
+ resource: "agent.agents.endUsers.block",
465
+ method: "create",
466
+ summary: "Block End User",
467
+ description: `Block token issuance and session creation, then revoke existing tokens for an end user.
468
+
469
+ 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.`,
470
+ http: "POST",
471
+ path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/block",
472
+ streaming: "no",
473
+ pagination: false,
474
+ pathParams: [
475
+ {
476
+ name: "agent_id",
477
+ sdkName: "agent_id"
478
+ },
479
+ {
480
+ name: "external_user_id",
481
+ sdkName: "external_user_id"
482
+ }
483
+ ],
484
+ query: []
485
+ },
486
+ {
487
+ resource: "agent.agents.endUsers",
488
+ method: "retrieveDeletion",
489
+ summary: "Get end-user deletion",
490
+ description: `Poll the latest deletion task for an end user, including after the user data has been removed.
491
+
492
+ 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.`,
493
+ http: "GET",
494
+ path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/deletion",
495
+ streaming: "no",
496
+ pagination: false,
497
+ pathParams: [
498
+ {
499
+ name: "agent_id",
500
+ sdkName: "agent_id"
501
+ },
502
+ {
503
+ name: "external_user_id",
504
+ sdkName: "external_user_id"
505
+ }
506
+ ],
507
+ query: []
508
+ },
509
+ {
510
+ resource: "agent.agents.endUsers.revokeTokens",
511
+ method: "create",
512
+ summary: "Revoke End User Tokens",
513
+ description: `Revoke all issued tokens for an end user and terminate their open embed streams.
514
+
515
+ 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.`,
516
+ http: "POST",
517
+ path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/revoke_tokens",
518
+ streaming: "no",
519
+ pagination: false,
520
+ pathParams: [
521
+ {
522
+ name: "agent_id",
523
+ sdkName: "agent_id"
524
+ },
525
+ {
526
+ name: "external_user_id",
527
+ sdkName: "external_user_id"
528
+ }
529
+ ],
530
+ query: []
531
+ },
532
+ {
533
+ resource: "agent.agents.endUsers.unblock",
534
+ method: "create",
535
+ summary: "Unblock End User",
536
+ description: `Allow an end user to receive new tokens and create new sessions again.
537
+
538
+ 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.`,
539
+ http: "POST",
540
+ path: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/unblock",
541
+ streaming: "no",
542
+ pagination: false,
543
+ pathParams: [
544
+ {
545
+ name: "agent_id",
546
+ sdkName: "agent_id"
547
+ },
548
+ {
549
+ name: "external_user_id",
550
+ sdkName: "external_user_id"
551
+ }
552
+ ],
553
+ query: []
554
+ },
372
555
  {
373
556
  resource: "agent.agents.versions",
374
557
  method: "list",
@@ -580,7 +763,7 @@ Own-face superset: Managed Agents has no persistent Computer attachment director
580
763
  summary: "Connect computer",
581
764
  description: `Resume the computer and issue a sandbox connection.
582
765
 
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.`,
766
+ 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.`,
584
767
  http: "POST",
585
768
  path: "/agent/v1/computers/{computer_id}/connect",
586
769
  streaming: "no",
@@ -645,6 +828,52 @@ Praxis extension: MA only has session-scoped temporary containers and memory_sto
645
828
  }
646
829
  ]
647
830
  },
831
+ {
832
+ resource: "agent.computers.leases",
833
+ method: "delete",
834
+ summary: "Release computer lease",
835
+ description: `Give the lease back when a connection closes so the full machine can be reclaimed without waiting for it to expire.
836
+
837
+ Own-face extension. Idempotent: an unknown or already released lease succeeds as well. Foreign or absent computers return 404.`,
838
+ http: "DELETE",
839
+ path: "/agent/v1/computers/{computer_id}/leases/{lease_id}",
840
+ streaming: "no",
841
+ pagination: false,
842
+ pathParams: [
843
+ {
844
+ name: "computer_id",
845
+ sdkName: "computer_id"
846
+ },
847
+ {
848
+ name: "lease_id",
849
+ sdkName: "lease_id"
850
+ }
851
+ ],
852
+ query: []
853
+ },
854
+ {
855
+ resource: "agent.computers.leases.renew",
856
+ method: "create",
857
+ summary: "Renew computer lease",
858
+ description: `Extend the lease a connection holds so the full machine stays in service while the connection is open.
859
+
860
+ 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.`,
861
+ http: "POST",
862
+ path: "/agent/v1/computers/{computer_id}/leases/{lease_id}/renew",
863
+ streaming: "no",
864
+ pagination: false,
865
+ pathParams: [
866
+ {
867
+ name: "computer_id",
868
+ sdkName: "computer_id"
869
+ },
870
+ {
871
+ name: "lease_id",
872
+ sdkName: "lease_id"
873
+ }
874
+ ],
875
+ query: []
876
+ },
648
877
  {
649
878
  resource: "agent.deploymentRuns",
650
879
  method: "list",
@@ -1074,6 +1303,43 @@ null to clear. Maximum 50.`
1074
1303
  ],
1075
1304
  query: []
1076
1305
  },
1306
+ {
1307
+ resource: "agent.embed",
1308
+ method: "retrieveAppearance",
1309
+ summary: "Read chat appearance",
1310
+ 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.",
1311
+ http: "GET",
1312
+ path: "/agent/v1/embed/appearance",
1313
+ streaming: "no",
1314
+ pagination: false,
1315
+ pathParams: [],
1316
+ query: []
1317
+ },
1318
+ {
1319
+ resource: "agent.embed.exchange",
1320
+ method: "create",
1321
+ summary: "Exchange Hosted Code",
1322
+ description: `Redeem a single-use hosted link credential for an end-user token.
1323
+
1324
+ 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>"}.`,
1325
+ http: "POST",
1326
+ path: "/agent/v1/embed/exchange",
1327
+ streaming: "no",
1328
+ pagination: false,
1329
+ pathParams: [],
1330
+ query: [],
1331
+ body: {
1332
+ required: true,
1333
+ fields: [
1334
+ {
1335
+ name: "code",
1336
+ type: "string",
1337
+ required: true,
1338
+ description: "Single-use credential from the c fragment parameter of hosted_url returned by embed token creation. Valid for 60 seconds."
1339
+ }
1340
+ ]
1341
+ }
1342
+ },
1077
1343
  {
1078
1344
  resource: "agent.embedTokens",
1079
1345
  method: "list",
@@ -1119,7 +1385,7 @@ Includes expired and revoked grants; returns neither token nor token_id. Sorts b
1119
1385
  summary: "Create Embed Token",
1120
1386
  description: `Issue a short-lived credential on your backend for an end user of a service agent.
1121
1387
 
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. The hosted field is not supported.`,
1388
+ 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
1389
  http: "POST",
1124
1390
  path: "/agent/v1/embed_tokens",
1125
1391
  streaming: "no",
@@ -1129,6 +1395,12 @@ Requires an active service agent in your organization with an embed policy. Pins
1129
1395
  body: {
1130
1396
  required: true,
1131
1397
  fields: [
1398
+ {
1399
+ name: "hosted",
1400
+ type: "boolean",
1401
+ required: false,
1402
+ 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."
1403
+ },
1132
1404
  {
1133
1405
  name: "agent",
1134
1406
  type: "string",
@@ -1188,6 +1460,37 @@ Requires an active service agent in your organization with an embed policy. Pins
1188
1460
  ]
1189
1461
  }
1190
1462
  },
1463
+ {
1464
+ resource: "agent.embedTokens.anonymous",
1465
+ method: "create",
1466
+ summary: "Issue anonymous visitor token",
1467
+ description: `Obtain a short-lived embedding token for a visitor without an account using the agent owner's publishable key.
1468
+
1469
+ 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"}.`,
1470
+ http: "POST",
1471
+ path: "/agent/v1/embed_tokens/anonymous",
1472
+ streaming: "no",
1473
+ pagination: false,
1474
+ pathParams: [],
1475
+ query: [],
1476
+ body: {
1477
+ required: true,
1478
+ fields: [
1479
+ {
1480
+ name: "publishable_key",
1481
+ type: "string",
1482
+ required: true,
1483
+ description: "Public key created by the service agent owner; safe to include in browser code."
1484
+ },
1485
+ {
1486
+ name: "visitor_secret",
1487
+ type: "string",
1488
+ required: false,
1489
+ description: "Secret returned by a previous anonymous issuance for this key. Omit for a new visitor; an unknown secret creates a new visitor."
1490
+ }
1491
+ ]
1492
+ }
1493
+ },
1191
1494
  {
1192
1495
  resource: "agent.embedTokens.revoke",
1193
1496
  method: "create",
@@ -1492,6 +1795,25 @@ owning account only.`
1492
1795
  type: "string",
1493
1796
  required: false,
1494
1797
  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."
1798
+ },
1799
+ {
1800
+ name: "external_user_id",
1801
+ type: "string",
1802
+ required: false,
1803
+ 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."
1804
+ },
1805
+ {
1806
+ name: "source",
1807
+ type: "string",
1808
+ enum: [
1809
+ "kit",
1810
+ "iframe",
1811
+ "hosted",
1812
+ "api",
1813
+ "automation"
1814
+ ],
1815
+ required: false,
1816
+ description: "Filter by session origin: kit, iframe, hosted, api or automation. Keep this filter unchanged when following page."
1495
1817
  }
1496
1818
  ]
1497
1819
  },
@@ -1499,7 +1821,7 @@ owning account only.`
1499
1821
  resource: "agent.sessions",
1500
1822
  method: "create",
1501
1823
  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.`,
1824
+ 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
1825
  http: "POST",
1504
1826
  path: "/agent/v1/sessions",
1505
1827
  streaming: "no",
@@ -1872,7 +2194,7 @@ Praxis extension available only on /agent/v1, following Claude Agent SDK getCont
1872
2194
  resource: "agent.sessions.events",
1873
2195
  method: "list",
1874
2196
  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.",
2197
+ 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
2198
  http: "GET",
1877
2199
  path: "/agent/v1/sessions/{session_id}/events",
1878
2200
  streaming: "no",
@@ -1943,7 +2265,7 @@ Praxis extension available only on /agent/v1, following Claude Agent SDK getCont
1943
2265
  resource: "agent.sessions.events",
1944
2266
  method: "send",
1945
2267
  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.',
2268
+ 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
2269
  http: "POST",
1948
2270
  path: "/agent/v1/sessions/{session_id}/events",
1949
2271
  streaming: "no",
@@ -2159,6 +2481,73 @@ Available only on /agent/v1. Use the message_id field from own-face events, not
2159
2481
  }
2160
2482
  ]
2161
2483
  },
2484
+ {
2485
+ resource: "agent.sessions.runs",
2486
+ method: "deleteFeedback",
2487
+ summary: "Delete Run Feedback",
2488
+ description: `Remove the rating and comment for a run.
2489
+
2490
+ Own-face extension. Use the session id from session creation or listing and the run_id from its events. Requires a readable session and a run belonging to it. Idempotent; returns 204 even when no feedback exists. End users can delete feedback only for their own sessions. Does not delete the run or messages, enter model context, or start another run.`,
2491
+ http: "DELETE",
2492
+ path: "/agent/v1/sessions/{session_id}/runs/{run_id}/feedback",
2493
+ streaming: "no",
2494
+ pagination: false,
2495
+ pathParams: [
2496
+ {
2497
+ name: "session_id",
2498
+ sdkName: "session_id"
2499
+ },
2500
+ {
2501
+ name: "run_id",
2502
+ sdkName: "run_id"
2503
+ }
2504
+ ],
2505
+ query: []
2506
+ },
2507
+ {
2508
+ resource: "agent.sessions.runs.feedback",
2509
+ method: "create",
2510
+ summary: "Set Run Feedback",
2511
+ description: `Submit thumbs up or thumbs down for a run, with an optional comment.
2512
+
2513
+ Own-face extension. Use a readable session and a run_id from its events. Each submission replaces the previous rating and comment; omitted or null comment clears it, while created_at is preserved. Comments allow at most 2000 Unicode characters. End users can submit only for their own sessions. Feedback never enters model context or starts a run. For example, submit {"rating":"positive","comment":"Helpful"}. POST follows Managed Agents resource update conventions; the resource remains unique per session and run.`,
2514
+ http: "POST",
2515
+ path: "/agent/v1/sessions/{session_id}/runs/{run_id}/feedback",
2516
+ streaming: "no",
2517
+ pagination: false,
2518
+ pathParams: [
2519
+ {
2520
+ name: "session_id",
2521
+ sdkName: "session_id"
2522
+ },
2523
+ {
2524
+ name: "run_id",
2525
+ sdkName: "run_id"
2526
+ }
2527
+ ],
2528
+ query: [],
2529
+ body: {
2530
+ required: true,
2531
+ fields: [
2532
+ {
2533
+ name: "rating",
2534
+ type: "string",
2535
+ enum: [
2536
+ "positive",
2537
+ "negative"
2538
+ ],
2539
+ required: true,
2540
+ description: "positive means thumbs up; negative means thumbs down for this run."
2541
+ },
2542
+ {
2543
+ name: "comment",
2544
+ type: "string",
2545
+ required: false,
2546
+ description: "Optional comment, at most 2000 Unicode characters. Omit or send null to clear the previous comment."
2547
+ }
2548
+ ]
2549
+ }
2550
+ },
2162
2551
  {
2163
2552
  resource: "agent.sessions.threads",
2164
2553
  method: "list",
@@ -11599,6 +11988,43 @@ for more details.`
11599
11988
  ],
11600
11989
  query: []
11601
11990
  },
11991
+ {
11992
+ resource: "organization.feedback",
11993
+ method: "list",
11994
+ summary: "List your organization's feedback",
11995
+ 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.",
11996
+ http: "GET",
11997
+ path: "/organization/v1/feedback",
11998
+ streaming: "no",
11999
+ pagination: false,
12000
+ pathParams: [],
12001
+ query: [
12002
+ {
12003
+ name: "phase",
12004
+ type: "string",
12005
+ required: false,
12006
+ 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."
12007
+ },
12008
+ {
12009
+ name: "query",
12010
+ type: "string",
12011
+ required: false,
12012
+ description: "Case-insensitive text matched against titles and message bodies."
12013
+ },
12014
+ {
12015
+ name: "limit",
12016
+ type: "integer",
12017
+ required: false,
12018
+ description: "Items per page, 1 to 100."
12019
+ },
12020
+ {
12021
+ name: "page",
12022
+ type: "string",
12023
+ required: false,
12024
+ description: "Opaque cursor from next_page of the previous response."
12025
+ }
12026
+ ]
12027
+ },
11602
12028
  {
11603
12029
  resource: "organization.feedback",
11604
12030
  method: "create",
@@ -11643,6 +12069,18 @@ for more details.`
11643
12069
  required: false,
11644
12070
  description: "X-Request-Id from the failed response or the related error event ID."
11645
12071
  },
12072
+ {
12073
+ name: "title",
12074
+ type: "string",
12075
+ required: false,
12076
+ description: "Short summary shown in the feedback list; at most 200 Unicode code points."
12077
+ },
12078
+ {
12079
+ name: "type",
12080
+ type: "string",
12081
+ required: false,
12082
+ 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."
12083
+ },
11646
12084
  {
11647
12085
  name: "tags",
11648
12086
  type: "object",
@@ -11656,21 +12094,115 @@ for more details.`
11656
12094
  description: "Structured diagnostic context; contexts.praxis can contain session_id, agent_id, model, and request_ids."
11657
12095
  },
11658
12096
  {
11659
- name: "source",
12097
+ name: "source",
12098
+ type: "string",
12099
+ enum: [
12100
+ "console",
12101
+ "api"
12102
+ ],
12103
+ required: false,
12104
+ description: "Use console for Console reports or api for API callers (default); machine tokens always store codemode regardless of this value."
12105
+ },
12106
+ {
12107
+ name: "attachments",
12108
+ type: "array",
12109
+ itemType: "object",
12110
+ required: false,
12111
+ description: "Up to five attachments; decoded bytes must not exceed 10 MiB per attachment or 20 MiB in total."
12112
+ }
12113
+ ]
12114
+ }
12115
+ },
12116
+ {
12117
+ resource: "organization.feedback.counts",
12118
+ method: "list",
12119
+ summary: "Count your organization's feedback by phase",
12120
+ description: "How many of your organization's feedback are in each phase, for status tabs. Counts never include another organization's feedback.",
12121
+ http: "GET",
12122
+ path: "/organization/v1/feedback/counts",
12123
+ streaming: "no",
12124
+ pagination: false,
12125
+ pathParams: [],
12126
+ query: []
12127
+ },
12128
+ {
12129
+ resource: "organization.feedback",
12130
+ method: "retrieve",
12131
+ summary: "Get one of your organization's feedback",
12132
+ 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.",
12133
+ http: "GET",
12134
+ path: "/organization/v1/feedback/{id}",
12135
+ streaming: "no",
12136
+ pagination: false,
12137
+ pathParams: [
12138
+ {
12139
+ name: "id",
12140
+ sdkName: "id"
12141
+ }
12142
+ ],
12143
+ query: []
12144
+ },
12145
+ {
12146
+ resource: "organization.feedback.messages",
12147
+ method: "list",
12148
+ summary: "List the messages of a feedback",
12149
+ 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.",
12150
+ http: "GET",
12151
+ path: "/organization/v1/feedback/{id}/messages",
12152
+ streaming: "no",
12153
+ pagination: false,
12154
+ pathParams: [
12155
+ {
12156
+ name: "id",
12157
+ sdkName: "id"
12158
+ }
12159
+ ],
12160
+ query: [
12161
+ {
12162
+ name: "limit",
12163
+ type: "integer",
12164
+ required: false,
12165
+ description: "Items per page, 1 to 100."
12166
+ },
12167
+ {
12168
+ name: "page",
12169
+ type: "string",
12170
+ required: false,
12171
+ description: "Opaque cursor from next_page of the previous response."
12172
+ }
12173
+ ]
12174
+ },
12175
+ {
12176
+ resource: "organization.feedback.messages",
12177
+ method: "create",
12178
+ summary: "Reply on a feedback",
12179
+ 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.",
12180
+ http: "POST",
12181
+ path: "/organization/v1/feedback/{id}/messages",
12182
+ streaming: "no",
12183
+ pagination: false,
12184
+ pathParams: [
12185
+ {
12186
+ name: "id",
12187
+ sdkName: "id"
12188
+ }
12189
+ ],
12190
+ query: [],
12191
+ body: {
12192
+ required: true,
12193
+ fields: [
12194
+ {
12195
+ name: "body",
11660
12196
  type: "string",
11661
- enum: [
11662
- "console",
11663
- "api"
11664
- ],
11665
- required: false,
11666
- description: "Use console for Console reports or api for API callers (default); machine tokens always store codemode regardless of this value."
12197
+ required: true,
12198
+ description: "Markdown text; at most 4096 Unicode code points."
11667
12199
  },
11668
12200
  {
11669
12201
  name: "attachments",
11670
12202
  type: "array",
11671
12203
  itemType: "object",
11672
12204
  required: false,
11673
- description: "Up to five attachments; decoded bytes must not exceed 10 MiB per attachment or 20 MiB in total."
12205
+ description: "Up to five attachments; decoded bytes must not exceed 10 MiB each or 20 MiB in total."
11674
12206
  }
11675
12207
  ]
11676
12208
  }
@@ -14897,6 +15429,143 @@ var createClient = (config = {}) => {
14897
15429
  var client = createClient(createConfig({ baseUrl: "https://api.deepraxis.com" }));
14898
15430
 
14899
15431
  // ../../packages/sdk/typescript/src/generated/sdk.gen.ts
15432
+ var deleteRunFeedback = (options) => (options.client ?? client).delete({
15433
+ security: [{
15434
+ key: "BearerAuth",
15435
+ scheme: "bearer",
15436
+ type: "http"
15437
+ }, {
15438
+ key: "ApiKeyAuth",
15439
+ name: "X-API-Key",
15440
+ type: "apiKey"
15441
+ }],
15442
+ url: "/agent/v1/sessions/{session_id}/runs/{run_id}/feedback",
15443
+ ...options
15444
+ });
15445
+ var setRunFeedback = (options) => (options.client ?? client).post({
15446
+ security: [{
15447
+ key: "BearerAuth",
15448
+ scheme: "bearer",
15449
+ type: "http"
15450
+ }, {
15451
+ key: "ApiKeyAuth",
15452
+ name: "X-API-Key",
15453
+ type: "apiKey"
15454
+ }],
15455
+ url: "/agent/v1/sessions/{session_id}/runs/{run_id}/feedback",
15456
+ ...options,
15457
+ headers: {
15458
+ "Content-Type": "application/json",
15459
+ ...options.headers
15460
+ }
15461
+ });
15462
+ var listEndUsers = (options) => (options.client ?? client).get({
15463
+ security: [{
15464
+ key: "BearerAuth",
15465
+ scheme: "bearer",
15466
+ type: "http"
15467
+ }, {
15468
+ key: "ApiKeyAuth",
15469
+ name: "X-API-Key",
15470
+ type: "apiKey"
15471
+ }],
15472
+ url: "/agent/v1/agents/{agent_id}/end_users",
15473
+ ...options
15474
+ });
15475
+ var deleteEndUser = (options) => (options.client ?? client).delete({
15476
+ security: [{
15477
+ key: "BearerAuth",
15478
+ scheme: "bearer",
15479
+ type: "http"
15480
+ }, {
15481
+ key: "ApiKeyAuth",
15482
+ name: "X-API-Key",
15483
+ type: "apiKey"
15484
+ }],
15485
+ url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
15486
+ ...options
15487
+ });
15488
+ var getEndUser = (options) => (options.client ?? client).get({
15489
+ security: [{
15490
+ key: "BearerAuth",
15491
+ scheme: "bearer",
15492
+ type: "http"
15493
+ }, {
15494
+ key: "ApiKeyAuth",
15495
+ name: "X-API-Key",
15496
+ type: "apiKey"
15497
+ }],
15498
+ url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}",
15499
+ ...options
15500
+ });
15501
+ var getEndUserDeletion = (options) => (options.client ?? client).get({
15502
+ security: [{
15503
+ key: "BearerAuth",
15504
+ scheme: "bearer",
15505
+ type: "http"
15506
+ }, {
15507
+ key: "ApiKeyAuth",
15508
+ name: "X-API-Key",
15509
+ type: "apiKey"
15510
+ }],
15511
+ url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/deletion",
15512
+ ...options
15513
+ });
15514
+ var revokeEndUserTokens = (options) => (options.client ?? client).post({
15515
+ security: [{
15516
+ key: "BearerAuth",
15517
+ scheme: "bearer",
15518
+ type: "http"
15519
+ }, {
15520
+ key: "ApiKeyAuth",
15521
+ name: "X-API-Key",
15522
+ type: "apiKey"
15523
+ }],
15524
+ url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/revoke_tokens",
15525
+ ...options
15526
+ });
15527
+ var blockEndUser = (options) => (options.client ?? client).post({
15528
+ security: [{
15529
+ key: "BearerAuth",
15530
+ scheme: "bearer",
15531
+ type: "http"
15532
+ }, {
15533
+ key: "ApiKeyAuth",
15534
+ name: "X-API-Key",
15535
+ type: "apiKey"
15536
+ }],
15537
+ url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/block",
15538
+ ...options
15539
+ });
15540
+ var unblockEndUser = (options) => (options.client ?? client).post({
15541
+ security: [{
15542
+ key: "BearerAuth",
15543
+ scheme: "bearer",
15544
+ type: "http"
15545
+ }, {
15546
+ key: "ApiKeyAuth",
15547
+ name: "X-API-Key",
15548
+ type: "apiKey"
15549
+ }],
15550
+ url: "/agent/v1/agents/{agent_id}/end_users/{external_user_id}/unblock",
15551
+ ...options
15552
+ });
15553
+ var exchangeEmbedCode = (options) => (options.client ?? client).post({
15554
+ url: "/agent/v1/embed/exchange",
15555
+ ...options,
15556
+ headers: {
15557
+ "Content-Type": "application/json",
15558
+ ...options.headers
15559
+ }
15560
+ });
15561
+ var createAnonymousEmbedToken = (options) => (options.client ?? client).post({
15562
+ url: "/agent/v1/embed_tokens/anonymous",
15563
+ ...options,
15564
+ headers: {
15565
+ "Content-Type": "application/json",
15566
+ ...options.headers
15567
+ }
15568
+ });
14900
15569
  var listEmbedTokens = (options) => (options?.client ?? client).get({
14901
15570
  security: [{
14902
15571
  key: "BearerAuth",
@@ -15083,6 +15752,32 @@ var connectComputer = (options) => (options.client ?? client).post({
15083
15752
  url: "/agent/v1/computers/{computer_id}/connect",
15084
15753
  ...options
15085
15754
  });
15755
+ var renewComputerLease = (options) => (options.client ?? client).post({
15756
+ security: [{
15757
+ key: "BearerAuth",
15758
+ scheme: "bearer",
15759
+ type: "http"
15760
+ }, {
15761
+ key: "ApiKeyAuth",
15762
+ name: "X-API-Key",
15763
+ type: "apiKey"
15764
+ }],
15765
+ url: "/agent/v1/computers/{computer_id}/leases/{lease_id}/renew",
15766
+ ...options
15767
+ });
15768
+ var releaseComputerLease = (options) => (options.client ?? client).delete({
15769
+ security: [{
15770
+ key: "BearerAuth",
15771
+ scheme: "bearer",
15772
+ type: "http"
15773
+ }, {
15774
+ key: "ApiKeyAuth",
15775
+ name: "X-API-Key",
15776
+ type: "apiKey"
15777
+ }],
15778
+ url: "/agent/v1/computers/{computer_id}/leases/{lease_id}",
15779
+ ...options
15780
+ });
15086
15781
  var listToolsets = (options) => (options?.client ?? client).get({
15087
15782
  security: [{
15088
15783
  key: "BearerAuth",
@@ -15208,6 +15903,15 @@ var listSessionCompactions = (options) => (options.client ?? client).get({
15208
15903
  url: "/agent/v1/sessions/{session_id}/compactions",
15209
15904
  ...options
15210
15905
  });
15906
+ var getEmbedAppearance = (options) => (options?.client ?? client).get({
15907
+ security: [{
15908
+ key: "BearerAuth",
15909
+ scheme: "bearer",
15910
+ type: "http"
15911
+ }, { name: "Praxis-Publishable-Key", type: "apiKey" }],
15912
+ url: "/agent/v1/embed/appearance",
15913
+ ...options
15914
+ });
15211
15915
  var createAudioSpeech = (options) => (options.client ?? client).post({
15212
15916
  security: [{
15213
15917
  key: "BearerAuth",
@@ -15946,6 +16650,19 @@ var countResponseInputTokens = (options) => (options.client ?? client).post({
15946
16650
  ...options.headers
15947
16651
  }
15948
16652
  });
16653
+ var listOrganizationFeedback = (options) => (options?.client ?? client).get({
16654
+ security: [{
16655
+ key: "BearerAuth",
16656
+ scheme: "bearer",
16657
+ type: "http"
16658
+ }, {
16659
+ key: "ApiKeyAuth",
16660
+ name: "X-API-Key",
16661
+ type: "apiKey"
16662
+ }],
16663
+ url: "/organization/v1/feedback",
16664
+ ...options
16665
+ });
15949
16666
  var createOrganizationFeedback = (options) => (options.client ?? client).post({
15950
16667
  security: [{
15951
16668
  key: "BearerAuth",
@@ -15963,6 +16680,62 @@ var createOrganizationFeedback = (options) => (options.client ?? client).post({
15963
16680
  ...options.headers
15964
16681
  }
15965
16682
  });
16683
+ var getOrganizationFeedbackCounts = (options) => (options?.client ?? client).get({
16684
+ security: [{
16685
+ key: "BearerAuth",
16686
+ scheme: "bearer",
16687
+ type: "http"
16688
+ }, {
16689
+ key: "ApiKeyAuth",
16690
+ name: "X-API-Key",
16691
+ type: "apiKey"
16692
+ }],
16693
+ url: "/organization/v1/feedback/counts",
16694
+ ...options
16695
+ });
16696
+ var getOrganizationFeedback = (options) => (options.client ?? client).get({
16697
+ security: [{
16698
+ key: "BearerAuth",
16699
+ scheme: "bearer",
16700
+ type: "http"
16701
+ }, {
16702
+ key: "ApiKeyAuth",
16703
+ name: "X-API-Key",
16704
+ type: "apiKey"
16705
+ }],
16706
+ url: "/organization/v1/feedback/{id}",
16707
+ ...options
16708
+ });
16709
+ var listOrganizationFeedbackMessages = (options) => (options.client ?? client).get({
16710
+ security: [{
16711
+ key: "BearerAuth",
16712
+ scheme: "bearer",
16713
+ type: "http"
16714
+ }, {
16715
+ key: "ApiKeyAuth",
16716
+ name: "X-API-Key",
16717
+ type: "apiKey"
16718
+ }],
16719
+ url: "/organization/v1/feedback/{id}/messages",
16720
+ ...options
16721
+ });
16722
+ var createOrganizationFeedbackMessage = (options) => (options.client ?? client).post({
16723
+ security: [{
16724
+ key: "BearerAuth",
16725
+ scheme: "bearer",
16726
+ type: "http"
16727
+ }, {
16728
+ key: "ApiKeyAuth",
16729
+ name: "X-API-Key",
16730
+ type: "apiKey"
16731
+ }],
16732
+ url: "/organization/v1/feedback/{id}/messages",
16733
+ ...options,
16734
+ headers: {
16735
+ "Content-Type": "application/json",
16736
+ ...options.headers
16737
+ }
16738
+ });
15966
16739
  var listOrganizationCosts = (options) => (options.client ?? client).get({
15967
16740
  security: [{
15968
16741
  key: "BearerAuth",
@@ -19715,6 +20488,21 @@ function createAgent(transport) {
19715
20488
  agents: {
19716
20489
  archive: bind(transport, agentsArchive),
19717
20490
  create: bind(transport, agentsCreate),
20491
+ endUsers: {
20492
+ block: {
20493
+ create: bind(transport, blockEndUser)
20494
+ },
20495
+ delete: bind(transport, deleteEndUser),
20496
+ list: bind(transport, listEndUsers),
20497
+ retrieve: bind(transport, getEndUser),
20498
+ retrieveDeletion: bind(transport, getEndUserDeletion),
20499
+ revokeTokens: {
20500
+ create: bind(transport, revokeEndUserTokens)
20501
+ },
20502
+ unblock: {
20503
+ create: bind(transport, unblockEndUser)
20504
+ }
20505
+ },
19718
20506
  list: bind(transport, agentsList),
19719
20507
  retrieve: bind(transport, agentsRetrieve),
19720
20508
  update: bind(transport, agentsUpdate),
@@ -19734,6 +20522,12 @@ function createAgent(transport) {
19734
20522
  list: bind(transport, computersFilesList),
19735
20523
  retrieveContent: bind(transport, computersFilesContent)
19736
20524
  },
20525
+ leases: {
20526
+ delete: bind(transport, releaseComputerLease),
20527
+ renew: {
20528
+ create: bind(transport, renewComputerLease)
20529
+ }
20530
+ },
19737
20531
  list: bind(transport, computersList),
19738
20532
  retrieve: bind(transport, computersRetrieve),
19739
20533
  update: bind(transport, computersUpdate)
@@ -19756,7 +20550,16 @@ function createAgent(transport) {
19756
20550
  },
19757
20551
  update: bind(transport, deploymentsUpdate)
19758
20552
  },
20553
+ embed: {
20554
+ exchange: {
20555
+ create: bind(transport, exchangeEmbedCode)
20556
+ },
20557
+ retrieveAppearance: bind(transport, getEmbedAppearance)
20558
+ },
19759
20559
  embedTokens: {
20560
+ anonymous: {
20561
+ create: bind(transport, createAnonymousEmbedToken)
20562
+ },
19760
20563
  create: bind(transport, createEmbedToken),
19761
20564
  list: bind(transport, listEmbedTokens),
19762
20565
  revoke: {
@@ -19798,6 +20601,12 @@ function createAgent(transport) {
19798
20601
  retrieve: bind(transport, sessionsRetrieve),
19799
20602
  retrieveCompact: bind(transport, getSessionCompaction),
19800
20603
  retrieveContext: bind(transport, getSessionContext),
20604
+ runs: {
20605
+ deleteFeedback: bind(transport, deleteRunFeedback),
20606
+ feedback: {
20607
+ create: bind(transport, setRunFeedback)
20608
+ }
20609
+ },
19801
20610
  threads: {
19802
20611
  archive: bind(transport, aliasOperation(sessionsThreadsArchive, { query: { session_id: "query_session_id" } })),
19803
20612
  events: {
@@ -20272,7 +21081,16 @@ function createOrganization(transport) {
20272
21081
  retrieve: bind(transport, getOrganizationEvent)
20273
21082
  },
20274
21083
  feedback: {
20275
- create: bind(transport, createOrganizationFeedback)
21084
+ counts: {
21085
+ list: bind(transport, getOrganizationFeedbackCounts)
21086
+ },
21087
+ create: bind(transport, createOrganizationFeedback),
21088
+ list: bind(transport, listOrganizationFeedback),
21089
+ messages: {
21090
+ create: bind(transport, createOrganizationFeedbackMessage),
21091
+ list: bind(transport, listOrganizationFeedbackMessages)
21092
+ },
21093
+ retrieve: bind(transport, getOrganizationFeedback)
20276
21094
  },
20277
21095
  usage: {
20278
21096
  list: bind(transport, listOrganizationUsage)
@@ -22462,7 +23280,7 @@ function startProgress(ctx, write = (text) => writeOutput({ stderr: text })) {
22462
23280
  }
22463
23281
 
22464
23282
  // src/main.ts
22465
- var version = "0.1.0-dev.45dc412";
23283
+ var version = "0.1.0-dev.67c7f3b";
22466
23284
  var commands = commandTree(operations);
22467
23285
  var manual = [["login"], ["logout"], ["whoami"], ["org", "list"], ["org", "switch"], ["api"], ["skill"]];
22468
23286
  function route(argv) {
package/package.json CHANGED
@@ -1,23 +1,15 @@
1
1
  {
2
2
  "name": "@deepraxis/cli",
3
- "version": "0.1.0-dev.45dc412",
3
+ "version": "0.1.0-dev.67c7f3b",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "praxis": "dist/praxis.js"
7
7
  },
8
8
  "description": "The official command line for Praxis (知行云): models, agents, sandboxes, search and data from one terminal.",
9
9
  "license": "Apache-2.0",
10
- "repository": {
11
- "type": "git",
12
- "url": "git+https://github.com/Deepraxis/Praxis.git",
13
- "directory": "apps/cli"
14
- },
15
10
  "engines": {
16
11
  "node": ">=20"
17
12
  },
18
- "publishConfig": {
19
- "access": "public"
20
- },
21
13
  "files": [
22
14
  "dist",
23
15
  "README.md",
@@ -36,5 +28,8 @@
36
28
  "ai-agents",
37
29
  "claude-code"
38
30
  ],
39
- "author": "Deepractice"
31
+ "author": "Deepractice",
32
+ "publishConfig": {
33
+ "access": "public"
34
+ }
40
35
  }