nylorun 0.20.0-beta → 0.21.0-beta

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/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # nylorun
2
2
 
3
+ ## 0.21.0-beta
4
+
5
+ ### Minor Changes
6
+
7
+ - 95f98f1: A model can use the Host's own identity (ADR-71, Host feature `model-host-identity`). `PUT /v1/tenant/model` takes `auth: { type: "host_identity", project, location }` for `google-vertex`. It keeps no secret, and the model gate calls Agent Platform with the Host's Google Application Default Credentials: on Google Cloud, the attached service account from the metadata server. It's off unless the operator lists the provider in `NYLORUN_MODEL_HOST_IDENTITY` on the process that runs the gates, which `nylorun start` passes from its shell to the `gateway` container. Every Tenant on that Host may use it. `nylorun tenant models set --provider google-vertex --model <id> --host-identity --project <id> --location <location>` sets it with no key.
8
+
9
+ ### Patch Changes
10
+
11
+ - 683de1a: The model catalog comes from pi-ai 1.3.0, which adds Gemini 4 Argon: `google-vertex/gemini-4-argon` on Google's Agent Platform (Vertex AI) and `google/gemini-4-argon` on the Gemini API, with a 1,048,576-token context and thinking. `nylorun tenant models set --provider google-vertex --model gemini-4-argon` takes a Google Cloud API key for the Agent Platform API; the Runtime still reads no ambient Google credentials.
12
+ - Pin core to the tested release.
13
+ - Pin agents to the tested release.
14
+ - Pin admin to the tested release.
15
+ - Pin runtime to the tested release.
16
+ - Pin studio to the tested release.
17
+ - Updated dependencies [95f98f1]
18
+ - Updated dependencies [d99b3ac]
19
+ - Updated dependencies
20
+ - Updated dependencies
21
+ - @nylorun/core@0.29.0-beta
22
+ - @nylorun/agents@0.29.0-beta
23
+ - @nylorun/admin@0.19.5-beta
24
+
3
25
  ## 0.20.0-beta
4
26
 
5
27
  ### Minor Changes
package/README.md CHANGED
@@ -102,6 +102,7 @@ nylorun tenant signing-keys list|rotate [--force]|revoke <kid> [--tenant <name>]
102
102
  nylorun tenant models catalog|providers|get [--tenant <name>] [--json] # the models the Runtime knows, the providers with a credential, the Tenant's model
103
103
  nylorun tenant models set [--tenant <name>] # sign in to a model provider and set the Tenant's model
104
104
  nylorun tenant models set --provider <id> --model <id> [--base-url <url>] [--tenant <name>] # the same, with an API key piped in on stdin (CI)
105
+ nylorun tenant models set --provider google-vertex --model <id> --host-identity --project <id> --location <location> # the Host's Google identity, no key
105
106
  nylorun tenant models select <provider> [--model <id>] [--tenant <name>] # use another provider that has a credential
106
107
  nylorun tenant usage [--scope tenant|manifest|turn] [--id <id>] [--period day|month|total] [--tenant <name>] # calls, tokens and cost (JSON); manifest: the Agents made from agent manifest <id>
107
108
  nylorun tenant calls [--after <cursor>] [--limit <n>] [--tenant <name>] # every recorded model call as NDJSON, until caught up
@@ -717,6 +718,15 @@ providers need the prompts.
717
718
  printenv OPENAI_API_KEY | nylorun tenant models set --provider openai --model gpt-5
718
719
  ```
719
720
 
721
+ On a Host whose operator lends its identity (`NYLORUN_MODEL_HOST_IDENTITY=google-vertex`),
722
+ `--host-identity` with `--project` and `--location` sets a `google-vertex` model with no key: the
723
+ Runtime calls Agent Platform with the Host's Google Application Default Credentials.
724
+
725
+ ```sh
726
+ nylorun tenant models set --provider google-vertex --model gemini-4-argon \
727
+ --host-identity --project my-project --location global
728
+ ```
729
+
720
730
  `nylorun tenant models select <provider>` switches to another provider that
721
731
  already has a credential, keeping its model (or `--model`) and endpoint.
722
732
 
@@ -2,7 +2,7 @@
2
2
  * The pi-ai `nylorun tenant models set` loads; nylorun's devDependency has the same version
3
3
  * (scripts/check-package.mjs).
4
4
  */
5
- export declare const PI_AI_VERSION = "1.2.0";
5
+ export declare const PI_AI_VERSION = "1.3.0";
6
6
  /** What `nylorun tenant models set` uses of pi-ai: its provider registry and login flows. */
7
7
  export interface PiAi {
8
8
  createProvider: typeof import("@earendil-works/pi-ai").createProvider;
@@ -10,7 +10,7 @@ import { CliError } from "../../errors.js";
10
10
  * The pi-ai `nylorun tenant models set` loads; nylorun's devDependency has the same version
11
11
  * (scripts/check-package.mjs).
12
12
  */
13
- export const PI_AI_VERSION = "1.2.0";
13
+ export const PI_AI_VERSION = "1.3.0";
14
14
  const PI_AI = "@earendil-works/pi-ai";
15
15
  /** The module written beside an on-demand install, which resolves pi-ai from there. */
16
16
  const ENTRY = "pi-ai.js";
@@ -1,5 +1,5 @@
1
1
  import { type StackDeps } from "../stack/commands.js";
2
- export declare const modelsUsage = " models catalog [--tenant <name>] [--json]\n every provider and model the Runtime knows\n models providers [--tenant <name>] [--json]\n the providers with a credential, and the one in use\n models get [--tenant <name>] [--json]\n the Tenant's model\n models set [--tenant <name>] sign in to a model provider and set the Tenant's model\n models set --provider <id> --model <id> [--base-url <url>] [--tenant <name>]\n the same with an API key piped in on stdin (CI)\n models select <provider> [--model <id>] [--tenant <name>]\n use a provider that has a credential (default: its model)";
2
+ export declare const modelsUsage = " models catalog [--tenant <name>] [--json]\n every provider and model the Runtime knows\n models providers [--tenant <name>] [--json]\n the providers with a credential, and the one in use\n models get [--tenant <name>] [--json]\n the Tenant's model\n models set [--tenant <name>] sign in to a model provider and set the Tenant's model\n models set --provider <id> --model <id> [--base-url <url>] [--tenant <name>]\n the same with an API key piped in on stdin (CI)\n models set --provider google-vertex --model <id> --host-identity --project <id> --location <location> [--tenant <name>]\n the same with the Host's Google identity, no key: on a Host\n whose operator sets NYLORUN_MODEL_HOST_IDENTITY\n models select <provider> [--model <id>] [--tenant <name>]\n use a provider that has a credential (default: its model)";
3
3
  export declare const usageUsage = " usage [--scope tenant|manifest|turn] [--id <id>] [--period day|month|total] [--tenant <name>]\n what the model calls used and cost (JSON); --scope\n manifest: the Agents made from agent manifest <id>\n calls [--after <cursor>] [--limit <n>] [--tenant <name>]\n every recorded model call, one JSON line each, until\n caught up; prints the cursor to resume from on stderr";
4
4
  /** `nylorun tenant models <verb> ...` */
5
5
  export declare function modelsCommand(deps: StackDeps, args: readonly string[]): Promise<number>;
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * `nylorun tenant models | usage | calls`: the Tenant's model, what its model calls used, and the
3
3
  * calls themselves, through the Management API. `models set` signs in with pi-ai (loaded only
4
- * there) at a terminal; with `--provider` and `--model` it takes an API key piped in instead,
4
+ * there) at a terminal; with `--provider` and `--model` it takes an API key piped in instead, or
5
+ * with `--host-identity` the Host's own Google identity (ADR-71),
5
6
  * for CI. A key is never an argument.
6
7
  */
7
8
  import { randomUUID } from "node:crypto";
@@ -18,6 +19,9 @@ export const modelsUsage = ` models catalog [--tenant <name>] [--json]
18
19
  models set [--tenant <name>] sign in to a model provider and set the Tenant's model
19
20
  models set --provider <id> --model <id> [--base-url <url>] [--tenant <name>]
20
21
  the same with an API key piped in on stdin (CI)
22
+ models set --provider google-vertex --model <id> --host-identity --project <id> --location <location> [--tenant <name>]
23
+ the same with the Host's Google identity, no key: on a Host
24
+ whose operator sets NYLORUN_MODEL_HOST_IDENTITY
21
25
  models select <provider> [--model <id>] [--tenant <name>]
22
26
  use a provider that has a credential (default: its model)`;
23
27
  export const usageUsage = ` usage [--scope tenant|manifest|turn] [--id <id>] [--period day|month|total] [--tenant <name>]
@@ -75,18 +79,40 @@ async function read(deps, verb, args) {
75
79
  }
76
80
  return 0;
77
81
  }
78
- const SET_USAGE = "nylorun tenant models set [--tenant <name>] | nylorun tenant models set --provider <id> --model <id> [--base-url <url>] [--tenant <name>]";
82
+ const SET_USAGE = "nylorun tenant models set [--tenant <name>] | nylorun tenant models set --provider <id> --model <id> [--base-url <url>] [--tenant <name>] | nylorun tenant models set --provider google-vertex --model <id> --host-identity --project <id> --location <location> [--tenant <name>]";
79
83
  /**
80
84
  * `models set`: at a terminal, the sign-in prompts; with `--provider` and `--model`, the API key
81
- * on stdin, set as `PUT /v1/tenant/model` with an `api_key` credential (OAuth needs the prompts).
85
+ * on stdin, set as `PUT /v1/tenant/model` with an `api_key` credential (OAuth needs the prompts),
86
+ * or with `--host-identity` a `host_identity` credential: no key, only `--project` and `--location`.
82
87
  */
83
88
  async function set(deps, args) {
84
- const flags = parseStackFlags(args, { values: ["--tenant", "--provider", "--model", "--base-url"] }, SET_USAGE);
89
+ const flags = parseStackFlags(args, {
90
+ values: ["--tenant", "--provider", "--model", "--base-url", "--project", "--location"],
91
+ booleans: ["--host-identity"],
92
+ }, SET_USAGE);
85
93
  if (flags.rest.length)
86
94
  throw usageError(`Usage: ${SET_USAGE}`);
87
95
  const provider = flags.values.get("--provider");
88
96
  const model = flags.values.get("--model");
89
97
  const baseUrl = flags.values.get("--base-url");
98
+ const project = flags.values.get("--project");
99
+ const location = flags.values.get("--location");
100
+ const hostIdentity = flags.booleans.has("--host-identity");
101
+ if (hostIdentity || project !== undefined || location !== undefined) {
102
+ if (!hostIdentity || provider === undefined || model === undefined || !project || !location)
103
+ throw usageError(`Pass --host-identity with --provider, --model, --project and --location. Usage: ${SET_USAGE}`);
104
+ if (baseUrl !== undefined)
105
+ throw usageError("--host-identity takes no --base-url");
106
+ const admin = await client(deps, flags.values.get("--tenant"));
107
+ const view = await admin.models.put({
108
+ idempotencyKey: randomUUID(),
109
+ provider,
110
+ model,
111
+ auth: { type: "host_identity", project, location },
112
+ });
113
+ deps.out(describe(view));
114
+ return 0;
115
+ }
90
116
  if (provider !== undefined || model !== undefined || baseUrl !== undefined) {
91
117
  if (provider === undefined || model === undefined)
92
118
  throw usageError(`Pass both --provider and --model. Usage: ${SET_USAGE}`);
@@ -6,7 +6,7 @@
6
6
  import type { ManagementClient } from "@nylorun/admin";
7
7
  import { type StackDeps } from "../stack/commands.js";
8
8
  import { type Connection } from "./target.js";
9
- export declare const tenantUsage = "nylorun tenant <command>\n\nThe Management API of the installation's one Tenant, with a management key: the local Tenant\n--tenant names (else the linked project's, else the default one), or the installation that\nNYLORUN_RUNTIME_URL and NYLORUN_MANAGEMENT_KEY name.\n\n reset [--sessions|--agents|--all] [--yes] [--tenant <name>]\n clear the Tenant's sessions, its Agents (their vaults,\n disks and sessions) or all its data (the Project link and\n keys stay)\n keys put <id> [--management] [--tenant <name>]\n create the Tenant's application key <id> (--management: a\n management key, on the Runtime's machine only), or rotate it\n (the old key stops working); prints the key once\n keys list [--tenant <name>] [--json]\n the Tenant's keys: id, role, when issued (never the keys)\n keys rm <id> [--tenant <name>] delete key <id>: it stops working at once\n signing-keys list [--tenant <name>]\n the Tenant's token signing keys\n signing-keys rotate [--force] [--tenant <name>]\n rotate; --force ends outstanding links and run tokens\n signing-keys revoke <kid> [--tenant <name>]\n revoke a previous or standby key\n models catalog [--tenant <name>] [--json]\n every provider and model the Runtime knows\n models providers [--tenant <name>] [--json]\n the providers with a credential, and the one in use\n models get [--tenant <name>] [--json]\n the Tenant's model\n models set [--tenant <name>] sign in to a model provider and set the Tenant's model\n models set --provider <id> --model <id> [--base-url <url>] [--tenant <name>]\n the same with an API key piped in on stdin (CI)\n models select <provider> [--model <id>] [--tenant <name>]\n use a provider that has a credential (default: its model)\n usage [--scope tenant|manifest|turn] [--id <id>] [--period day|month|total] [--tenant <name>]\n what the model calls used and cost (JSON); --scope\n manifest: the Agents made from agent manifest <id>\n calls [--after <cursor>] [--limit <n>] [--tenant <name>]\n every recorded model call, one JSON line each, until\n caught up; prints the cursor to resume from on stderr\n budgets [get | put <file|->] [--tenant <name>]\n the model spend caps (scope tenant, manifest with id an\n agent manifest's name, or turn); put replaces them all\n tool-policy [get | put <file|->] [--tenant <name>]\n the Tool Gate's rules; put replaces them all\n settings sandbox [get | put <file|->] [--tenant <name>]\n the Agents' environments: limits, stop grace, placement\n settings artifacts [get | put <file|->] [--tenant <name>]\n the artifact store's limits\n settings skills [get | put <file|->] [--tenant <name>]\n the most bytes one skill may hold\n settings limits [get | put <file|->] [--tenant <name>]\n the Runtime limits: sizes, counts and deadlines (record\n entries, request bodies, Agents, model calls, tools)\n coverage --agent <id> [--tenant <name>] [--json]\n which secret of Agent <id>'s vault each MCP server and\n HTTP tool of its manifest would get\n mcp inspect <url> [--server <name>] [--agent <id>] [--sse] [--tenant <name>] [--json]\n list a remote MCP server's tools, with Agent <id>'s\n credential for <url> (none without it): model names, schema\n sizes, renames, or that it needs a person's sign-in (the\n Runtime calls no tool)\n\nA put reads a JSON body from a file, or from stdin for -, and replaces the whole document; what\nbudgets, tool-policy, settings artifacts, settings skills and settings limits get print, put takes back. An API key is read from\nstdin, never from the arguments.";
9
+ export declare const tenantUsage = "nylorun tenant <command>\n\nThe Management API of the installation's one Tenant, with a management key: the local Tenant\n--tenant names (else the linked project's, else the default one), or the installation that\nNYLORUN_RUNTIME_URL and NYLORUN_MANAGEMENT_KEY name.\n\n reset [--sessions|--agents|--all] [--yes] [--tenant <name>]\n clear the Tenant's sessions, its Agents (their vaults,\n disks and sessions) or all its data (the Project link and\n keys stay)\n keys put <id> [--management] [--tenant <name>]\n create the Tenant's application key <id> (--management: a\n management key, on the Runtime's machine only), or rotate it\n (the old key stops working); prints the key once\n keys list [--tenant <name>] [--json]\n the Tenant's keys: id, role, when issued (never the keys)\n keys rm <id> [--tenant <name>] delete key <id>: it stops working at once\n signing-keys list [--tenant <name>]\n the Tenant's token signing keys\n signing-keys rotate [--force] [--tenant <name>]\n rotate; --force ends outstanding links and run tokens\n signing-keys revoke <kid> [--tenant <name>]\n revoke a previous or standby key\n models catalog [--tenant <name>] [--json]\n every provider and model the Runtime knows\n models providers [--tenant <name>] [--json]\n the providers with a credential, and the one in use\n models get [--tenant <name>] [--json]\n the Tenant's model\n models set [--tenant <name>] sign in to a model provider and set the Tenant's model\n models set --provider <id> --model <id> [--base-url <url>] [--tenant <name>]\n the same with an API key piped in on stdin (CI)\n models set --provider google-vertex --model <id> --host-identity --project <id> --location <location> [--tenant <name>]\n the same with the Host's Google identity, no key: on a Host\n whose operator sets NYLORUN_MODEL_HOST_IDENTITY\n models select <provider> [--model <id>] [--tenant <name>]\n use a provider that has a credential (default: its model)\n usage [--scope tenant|manifest|turn] [--id <id>] [--period day|month|total] [--tenant <name>]\n what the model calls used and cost (JSON); --scope\n manifest: the Agents made from agent manifest <id>\n calls [--after <cursor>] [--limit <n>] [--tenant <name>]\n every recorded model call, one JSON line each, until\n caught up; prints the cursor to resume from on stderr\n budgets [get | put <file|->] [--tenant <name>]\n the model spend caps (scope tenant, manifest with id an\n agent manifest's name, or turn); put replaces them all\n tool-policy [get | put <file|->] [--tenant <name>]\n the Tool Gate's rules; put replaces them all\n settings sandbox [get | put <file|->] [--tenant <name>]\n the Agents' environments: limits, stop grace, placement\n settings artifacts [get | put <file|->] [--tenant <name>]\n the artifact store's limits\n settings skills [get | put <file|->] [--tenant <name>]\n the most bytes one skill may hold\n settings limits [get | put <file|->] [--tenant <name>]\n the Runtime limits: sizes, counts and deadlines (record\n entries, request bodies, Agents, model calls, tools)\n coverage --agent <id> [--tenant <name>] [--json]\n which secret of Agent <id>'s vault each MCP server and\n HTTP tool of its manifest would get\n mcp inspect <url> [--server <name>] [--agent <id>] [--sse] [--tenant <name>] [--json]\n list a remote MCP server's tools, with Agent <id>'s\n credential for <url> (none without it): model names, schema\n sizes, renames, or that it needs a person's sign-in (the\n Runtime calls no tool)\n\nA put reads a JSON body from a file, or from stdin for -, and replaces the whole document; what\nbudgets, tool-policy, settings artifacts, settings skills and settings limits get print, put takes back. An API key is read from\nstdin, never from the arguments.";
10
10
  /** The Management API client of the installation `--tenant` (or the environment) names. */
11
11
  export declare function tenantClient(deps: StackDeps, tenant: string | undefined): Promise<{
12
12
  connection: Connection;
@@ -182,7 +182,11 @@ ${healthcheck("rustfs")} restart: unless-stopped
182
182
  # MCP servers and HTTP tools on this machine: \`localhost\` in their URLs means the Docker host.
183
183
  NYLORUN_ENDPOINT_LOOPBACK: docker-host
184
184
  # Host tuning (timings, retries, internal sizes; JSON): from the shell that runs \`nylorun start\`.
185
- NYLORUN_TUNING: \${NYLORUN_TUNING:-}${sandboxes ? SANDBOXES_GATEWAY_ENV : ""}
185
+ NYLORUN_TUNING: \${NYLORUN_TUNING:-}
186
+ # Providers whose models may call with this machine's own identity, such as google-vertex
187
+ # with Google's Application Default Credentials (ADR-71): from the shell that runs
188
+ # \`nylorun start\`. Empty: none. Every Tenant on this Host may use it.
189
+ NYLORUN_MODEL_HOST_IDENTITY: \${NYLORUN_MODEL_HOST_IDENTITY:-}${sandboxes ? SANDBOXES_GATEWAY_ENV : ""}
186
190
  extra_hosts:
187
191
  host.docker.internal: host-gateway # model servers, MCP servers and HTTP tools on this machine
188
192
  volumes:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nylorun",
3
- "version": "0.20.0-beta",
3
+ "version": "0.21.0-beta",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "description": "Set up and run local Nylorun Tenants (Runtime and Studio) with Docker Compose, and act on a Tenant through its Runtime and Management APIs",
@@ -30,12 +30,12 @@
30
30
  "prepack": "npm run build"
31
31
  },
32
32
  "dependencies": {
33
- "@nylorun/admin": "0.19.4-beta",
34
- "@nylorun/agents": "0.28.0-beta",
35
- "@nylorun/core": "0.28.0-beta"
33
+ "@nylorun/admin": "0.19.5-beta",
34
+ "@nylorun/agents": "0.29.0-beta",
35
+ "@nylorun/core": "0.29.0-beta"
36
36
  },
37
37
  "devDependencies": {
38
- "@earendil-works/pi-ai": "1.2.0",
38
+ "@earendil-works/pi-ai": "1.3.0",
39
39
  "@nylorun/agents": "file:../../sdks/agents",
40
40
  "typescript": "npm:@typescript/typescript6@^6.0.2",
41
41
  "@types/node": "^26.6.5",
@@ -46,7 +46,7 @@
46
46
  "nylo": "dist/nylo.js"
47
47
  },
48
48
  "nylorun": {
49
- "runtime": "0.32.0-beta",
50
- "studio": "0.32.0-beta"
49
+ "runtime": "0.33.0-beta",
50
+ "studio": "0.33.0-beta"
51
51
  }
52
52
  }