@naturali/cli 0.134.0 → 0.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +15 -15
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -17,7 +17,7 @@ var __exportAll = (all, no_symbols) => {
|
|
|
17
17
|
};
|
|
18
18
|
//#endregion
|
|
19
19
|
//#region package.json
|
|
20
|
-
var version = "0.
|
|
20
|
+
var version = "0.136.0";
|
|
21
21
|
//#endregion
|
|
22
22
|
//#region ../sdk/src/generated/core/bodySerializer.gen.ts
|
|
23
23
|
const serializeFormDataPair = (data, key, value) => {
|
|
@@ -1492,7 +1492,7 @@ var ApiKeys = class {
|
|
|
1492
1492
|
* Create an API key
|
|
1493
1493
|
*
|
|
1494
1494
|
* Creates an API key. When `project_id` is set the key is scoped to that project (the default and recommended stance); omit it for an account-scoped key. `capabilities` narrows what the key may do; when omitted the key inherits the creator's capabilities. The raw `key` (nat_sk_…) is returned only in this response.
|
|
1495
|
-
* A project-scoped key requires
|
|
1495
|
+
* A project-scoped key requires membership of that project. The key carries no role of its own — every request it makes resolves its holder's membership again — so it can never reach past what its minter already had. An account-scoped key requires a credential that is not itself confined to one project.
|
|
1496
1496
|
* A connected app cannot create keys at all: a grant is revocable and a key is not, so a key minted under a grant would still work after the app was disconnected. Reading and revoking keys stay available.
|
|
1497
1497
|
*
|
|
1498
1498
|
*/
|
|
@@ -3746,7 +3746,7 @@ var Projects = class {
|
|
|
3746
3746
|
* Update a project
|
|
3747
3747
|
*
|
|
3748
3748
|
* Rename or archive a project, and/or change its content-retention settings (`trace_content_retention_days`, `trace_content_mode`), its execution ceilings (`max_concurrent_runs`, `max_chain_generations`, `max_orchestration_run_depth`) and its priced-model gate (`require_priced_model`). Archiving is reversible; resources are retained.
|
|
3749
|
-
* Requires the `admin` role in the project (an `owner` has it too).
|
|
3749
|
+
* Requires the `admin` role in the project (an `owner` has it too). These are the terms every member works under, which is why setting them sits above the role that works under them.
|
|
3750
3750
|
* The ceilings and the priced-model gate are uncapped by plan: each one only ever narrows what the project may spend, so setting one takes on a restriction rather than claiming an entitlement. On the three ceilings `null` clears the project's own bound and omission leaves it alone — they are different instructions.
|
|
3751
3751
|
* The two retention controls answer different questions. The window bounds how long content *stays* — a daily sweep purges anything past it, leaving auditable skeletons behind. `trace_content_mode: none` means content is never *written*, which is the stronger guarantee: it cannot be missed by a sweep or survive in a backup.
|
|
3752
3752
|
*
|
|
@@ -3766,7 +3766,7 @@ var Projects = class {
|
|
|
3766
3766
|
/**
|
|
3767
3767
|
* List project members
|
|
3768
3768
|
*
|
|
3769
|
-
* Lists who may act in the project, and with what role. Readable by every member,
|
|
3769
|
+
* Lists who may act in the project, and with what role. Readable by every member, whatever their role: who else is in the project is not a privileged fact, and hiding it makes "why can that person see my agents?" unanswerable.
|
|
3770
3770
|
* Somebody invited who has never signed in is listed too, with status `pending` — the invitation is already a grant, so hiding it until they arrive would hide access that exists.
|
|
3771
3771
|
*
|
|
3772
3772
|
*/
|
|
@@ -3803,7 +3803,7 @@ var Projects = class {
|
|
|
3803
3803
|
*
|
|
3804
3804
|
* Removes a member, or leaves the project yourself.
|
|
3805
3805
|
*
|
|
3806
|
-
* **Anyone may remove themselves**, whatever their role: a colleague who no longer wants access should not have to ask for it, and leaving takes nothing from anybody else. Removing *somebody else* needs authority — an `owner` may remove anyone, an `admin` may remove a
|
|
3806
|
+
* **Anyone may remove themselves**, whatever their role: a colleague who no longer wants access should not have to ask for it, and leaving takes nothing from anybody else. Removing *somebody else* needs authority — an `owner` may remove anyone, an `admin` may remove a `member` and not another `admin`.
|
|
3807
3807
|
*
|
|
3808
3808
|
* The owner's own row is refused: a project with no owner is unreachable, and the row names who pays.
|
|
3809
3809
|
*
|
|
@@ -6189,7 +6189,7 @@ const routes = {
|
|
|
6189
6189
|
},
|
|
6190
6190
|
{
|
|
6191
6191
|
"name": "action",
|
|
6192
|
-
"description": "",
|
|
6192
|
+
"description": "What an inbound message becomes.\n\n`agent` is a dialogue: the identity behind the message gets a session, and every later message on it continues the same one. `oneshot` runs the agent once and keeps nothing — no address, no actor, no session, no conversation — so each message is answered on its own. Choose it for work that is filed rather than discussed; choose `agent` when the answer depends on what came before.\n\n`message` delivers fixed text without running an agent, and `silence` answers nothing.\n",
|
|
6193
6193
|
"required": true,
|
|
6194
6194
|
"type": "string",
|
|
6195
6195
|
"in": "body"
|
|
@@ -6224,7 +6224,7 @@ const routes = {
|
|
|
6224
6224
|
},
|
|
6225
6225
|
{
|
|
6226
6226
|
"name": "config",
|
|
6227
|
-
"description": "",
|
|
6227
|
+
"description": "Conversation config bag — media handling, persona overrides, the Discord allowlist, and how a `oneshot` answers.\n\n`discord.reply` picks the delivery: `react` (the default) adds `discord.reaction` — `\\u2705` unless named — to the message that triggered the run, `mention` answers beside it addressing whoever asked, `thread` opens a thread and answers inside it, and `none` delivers nothing at all. A run that fails delivers nothing in every mode, so a reaction always means the work was done; there is no failure marker.\n\nRead only for `oneshot`. A conversational `agent` in a guild *is* its thread — that is what its session is keyed on — so it always opens one.\n",
|
|
6228
6228
|
"required": false,
|
|
6229
6229
|
"type": "object",
|
|
6230
6230
|
"in": "body"
|
|
@@ -7870,7 +7870,7 @@ const routes = {
|
|
|
7870
7870
|
"create-api-key": {
|
|
7871
7871
|
serviceClass: "APIKeys",
|
|
7872
7872
|
operationId: "createApiKey",
|
|
7873
|
-
description: "Creates an API key. When `project_id` is set the key is scoped to that project (the default and recommended stance); omit it for an account-scoped key. `capabilities` narrows what the key may do; when omitted the key inherits the creator's capabilities. The raw `key` (nat_sk_…) is returned only in this response. A project-scoped key requires
|
|
7873
|
+
description: "Creates an API key. When `project_id` is set the key is scoped to that project (the default and recommended stance); omit it for an account-scoped key. `capabilities` narrows what the key may do; when omitted the key inherits the creator's capabilities. The raw `key` (nat_sk_…) is returned only in this response. A project-scoped key requires membership of that project. The key carries no role of its own — every request it makes resolves its holder's membership again — so it can never reach past what its minter already had. An account-scoped key requires a credential that is not itself confined to one project. A connected app cannot create keys at all: a grant is revocable and a key is not, so a key minted under a grant would still work after the app was disconnected. Reading and revoking keys stay available.",
|
|
7874
7874
|
moduleDocsUrl: "https://docs.naturali.ai/docs/modules/api-keys",
|
|
7875
7875
|
httpMethod: "post",
|
|
7876
7876
|
pathParams: [],
|
|
@@ -8713,7 +8713,7 @@ const routes = {
|
|
|
8713
8713
|
},
|
|
8714
8714
|
{
|
|
8715
8715
|
"name": "action",
|
|
8716
|
-
"description": "",
|
|
8716
|
+
"description": "What an inbound message becomes.\n\n`agent` is a dialogue: the identity behind the message gets a session, and every later message on it continues the same one. `oneshot` runs the agent once and keeps nothing — no address, no actor, no session, no conversation — so each message is answered on its own. Choose it for work that is filed rather than discussed; choose `agent` when the answer depends on what came before.\n\n`message` delivers fixed text without running an agent, and `silence` answers nothing.\n",
|
|
8717
8717
|
"required": true,
|
|
8718
8718
|
"type": "string",
|
|
8719
8719
|
"in": "body"
|
|
@@ -8748,7 +8748,7 @@ const routes = {
|
|
|
8748
8748
|
},
|
|
8749
8749
|
{
|
|
8750
8750
|
"name": "config",
|
|
8751
|
-
"description": "",
|
|
8751
|
+
"description": "Conversation config bag — media handling, persona overrides, the Discord allowlist, and how a `oneshot` answers.\n\n`discord.reply` picks the delivery: `react` (the default) adds `discord.reaction` — `\\u2705` unless named — to the message that triggered the run, `mention` answers beside it addressing whoever asked, `thread` opens a thread and answers inside it, and `none` delivers nothing at all. A run that fails delivers nothing in every mode, so a reaction always means the work was done; there is no failure marker.\n\nRead only for `oneshot`. A conversational `agent` in a guild *is* its thread — that is what its session is keyed on — so it always opens one.\n",
|
|
8752
8752
|
"required": false,
|
|
8753
8753
|
"type": "object",
|
|
8754
8754
|
"in": "body"
|
|
@@ -8859,7 +8859,7 @@ const routes = {
|
|
|
8859
8859
|
},
|
|
8860
8860
|
{
|
|
8861
8861
|
"name": "action",
|
|
8862
|
-
"description": "",
|
|
8862
|
+
"description": "What an inbound message becomes.\n\n`agent` is a dialogue: the identity behind the message gets a session, and every later message on it continues the same one. `oneshot` runs the agent once and keeps nothing — no address, no actor, no session, no conversation — so each message is answered on its own. Choose it for work that is filed rather than discussed; choose `agent` when the answer depends on what came before.\n\n`message` delivers fixed text without running an agent, and `silence` answers nothing.\n",
|
|
8863
8863
|
"required": true,
|
|
8864
8864
|
"type": "string",
|
|
8865
8865
|
"in": "body"
|
|
@@ -8894,7 +8894,7 @@ const routes = {
|
|
|
8894
8894
|
},
|
|
8895
8895
|
{
|
|
8896
8896
|
"name": "config",
|
|
8897
|
-
"description": "",
|
|
8897
|
+
"description": "Conversation config bag — media handling, persona overrides, the Discord allowlist, and how a `oneshot` answers.\n\n`discord.reply` picks the delivery: `react` (the default) adds `discord.reaction` — `\\u2705` unless named — to the message that triggered the run, `mention` answers beside it addressing whoever asked, `thread` opens a thread and answers inside it, and `none` delivers nothing at all. A run that fails delivers nothing in every mode, so a reaction always means the work was done; there is no failure marker.\n\nRead only for `oneshot`. A conversational `agent` in a guild *is* its thread — that is what its session is keyed on — so it always opens one.\n",
|
|
8898
8898
|
"required": false,
|
|
8899
8899
|
"type": "object",
|
|
8900
8900
|
"in": "body"
|
|
@@ -15055,7 +15055,7 @@ const routes = {
|
|
|
15055
15055
|
"update-project": {
|
|
15056
15056
|
serviceClass: "Projects",
|
|
15057
15057
|
operationId: "updateProject",
|
|
15058
|
-
description: "Rename or archive a project, and/or change its content-retention settings (`trace_content_retention_days`, `trace_content_mode`), its execution ceilings (`max_concurrent_runs`, `max_chain_generations`, `max_orchestration_run_depth`) and its priced-model gate (`require_priced_model`). Archiving is reversible; resources are retained. Requires the `admin` role in the project (an `owner` has it too). The ceilings and the priced-model gate are uncapped by plan: each one only ever narrows what the project may spend, so setting one takes on a restriction rather than claiming an entitlement. On the three ceilings `null` clears the project's own bound and omission leaves it alone — they are different instructions. The two retention controls answer different questions. The window bounds how long content *stays* — a daily sweep purges anything past it, leaving auditable skeletons behind. `trace_content_mode: none` means content is never *written*, which is the stronger guarantee: it cannot be missed by a sweep or survive in a backup. Your plan sets the longest window you may keep content for. A wider one — `null` included, which keeps content indefinitely — responds `403` with `plan_limit_reached`, whose `details` carry the `plan` and the `limit` in days. Anything shorter is always allowed. Moving to a plan with a shorter window takes effect at the end of the billing cycle, and content already stored is then purged by age like everything else.",
|
|
15058
|
+
description: "Rename or archive a project, and/or change its content-retention settings (`trace_content_retention_days`, `trace_content_mode`), its execution ceilings (`max_concurrent_runs`, `max_chain_generations`, `max_orchestration_run_depth`) and its priced-model gate (`require_priced_model`). Archiving is reversible; resources are retained. Requires the `admin` role in the project (an `owner` has it too). These are the terms every member works under, which is why setting them sits above the role that works under them. The ceilings and the priced-model gate are uncapped by plan: each one only ever narrows what the project may spend, so setting one takes on a restriction rather than claiming an entitlement. On the three ceilings `null` clears the project's own bound and omission leaves it alone — they are different instructions. The two retention controls answer different questions. The window bounds how long content *stays* — a daily sweep purges anything past it, leaving auditable skeletons behind. `trace_content_mode: none` means content is never *written*, which is the stronger guarantee: it cannot be missed by a sweep or survive in a backup. Your plan sets the longest window you may keep content for. A wider one — `null` included, which keeps content indefinitely — responds `403` with `plan_limit_reached`, whose `details` carry the `plan` and the `limit` in days. Anything shorter is always allowed. Moving to a plan with a shorter window takes effect at the end of the billing cycle, and content already stored is then purged by age like everything else.",
|
|
15059
15059
|
moduleDocsUrl: "https://docs.naturali.ai/docs/modules/projects",
|
|
15060
15060
|
httpMethod: "patch",
|
|
15061
15061
|
pathParams: ["project_id"],
|
|
@@ -15155,7 +15155,7 @@ const routes = {
|
|
|
15155
15155
|
"list-project-members": {
|
|
15156
15156
|
serviceClass: "Projects",
|
|
15157
15157
|
operationId: "listProjectMembers",
|
|
15158
|
-
description: "Lists who may act in the project, and with what role. Readable by every member,
|
|
15158
|
+
description: "Lists who may act in the project, and with what role. Readable by every member, whatever their role: who else is in the project is not a privileged fact, and hiding it makes \"why can that person see my agents?\" unanswerable. Somebody invited who has never signed in is listed too, with status `pending` — the invitation is already a grant, so hiding it until they arrive would hide access that exists.",
|
|
15159
15159
|
moduleDocsUrl: "https://docs.naturali.ai/docs/modules/projects",
|
|
15160
15160
|
httpMethod: "get",
|
|
15161
15161
|
pathParams: ["project_id"],
|
|
@@ -15241,7 +15241,7 @@ const routes = {
|
|
|
15241
15241
|
"remove-project-member": {
|
|
15242
15242
|
serviceClass: "Projects",
|
|
15243
15243
|
operationId: "removeProjectMember",
|
|
15244
|
-
description: "Removes a member, or leaves the project yourself. **Anyone may remove themselves**, whatever their role: a colleague who no longer wants access should not have to ask for it, and leaving takes nothing from anybody else. Removing *somebody else* needs authority — an `owner` may remove anyone, an `admin` may remove a
|
|
15244
|
+
description: "Removes a member, or leaves the project yourself. **Anyone may remove themselves**, whatever their role: a colleague who no longer wants access should not have to ask for it, and leaving takes nothing from anybody else. Removing *somebody else* needs authority — an `owner` may remove anyone, an `admin` may remove a `member` and not another `admin`. The owner's own row is refused: a project with no owner is unreachable, and the row names who pays.",
|
|
15245
15245
|
moduleDocsUrl: "https://docs.naturali.ai/docs/modules/projects",
|
|
15246
15246
|
httpMethod: "delete",
|
|
15247
15247
|
pathParams: ["project_id", "member_id"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naturali/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.136.0",
|
|
4
4
|
"description": "Command-line interface for the naturali.ai API, generated from its OpenAPI specs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"yaml": "^2.9.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@naturali/sdk": "0.
|
|
28
|
+
"@naturali/sdk": "0.136.0",
|
|
29
29
|
"@ttoss/openapi-codegen": "^0.3.1",
|
|
30
30
|
"@types/node": "^26.5.1",
|
|
31
31
|
"tsdown": "^0.23.0",
|