@north-light/cli 0.3.469 → 0.3.471
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/README.md
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="https://www.npmjs.com/package/@north-light/cli"><img alt="npm" src="https://img.shields.io/npm/v/@north-light/cli?label=npm"></a>
|
|
7
7
|
<a href="https://nodejs.org"><img alt="node" src="https://img.shields.io/badge/node-%3E%3D22.19-339933"></a>
|
|
8
|
-
<a href="https://discord.gg/
|
|
8
|
+
<a href="https://discord.gg/txKS3swtWY"><img alt="discord" src="https://img.shields.io/badge/discord-join-5865F2?logo=discord&logoColor=white"></a>
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
crouter is an agent runtime for Node.js. Each agent is a **node**: a record with a goal, a context directory, and a detached process (its *broker*) that hosts the model session. A daemon, `crtrd`, owns every node's state and lifecycle. You drive it with the `crtr` command line, a terminal viewer, or a typed TypeScript SDK — all three are clients of the same local API. Each model session runs on [pi](https://github.com/earendil-works/pi), the open-source coding-agent harness; crouter adds the daemon, the node graph, the context system and the CLI around it.
|
|
12
12
|
|
|
13
13
|
Closing a terminal does not stop an agent, and an agent that is waiting on something has no process at all. Nodes can spawn children, report to whoever subscribes to them, and share markdown documents that other agents are shown when they become relevant. crouter is not a model and does not bundle one: you sign in to a model provider during setup. It is also not a hosted service; it runs on your machine, or in a container you start.
|
|
14
14
|
|
|
15
|
-
[Docs](https://docs.northlight.ai) · [Getting started](https://docs.northlight.ai/docs/cli/first-session) · [Concepts](https://docs.northlight.ai/docs/concepts) · [SDK](https://docs.northlight.ai/docs/sdk) · [Plugins](https://docs.northlight.ai/docs/plugin) · [Marketplace](https://github.com/crouton-labs/crouter-official-marketplace) · [Discord](https://discord.gg/
|
|
15
|
+
[Docs](https://crouter.docs.northlight.ai) · [Getting started](https://crouter.docs.northlight.ai/docs/cli/first-session) · [Concepts](https://crouter.docs.northlight.ai/docs/concepts) · [SDK](https://crouter.docs.northlight.ai/docs/sdk) · [Plugins](https://crouter.docs.northlight.ai/docs/plugin) · [Marketplace](https://github.com/crouton-labs/crouter-official-marketplace) · [Discord](https://discord.gg/txKS3swtWY)
|
|
16
16
|
|
|
17
17
|
## Install
|
|
18
18
|
|
|
@@ -62,7 +62,7 @@ crtr canvas browse # interactive navigator with tabs and search
|
|
|
62
62
|
crtr canvas attention list # nodes waiting on you
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
The [first-session guide](https://docs.northlight.ai/docs/cli/first-session) walks through this in order.
|
|
65
|
+
The [first-session guide](https://crouter.docs.northlight.ai/docs/cli/first-session) walks through this in order.
|
|
66
66
|
|
|
67
67
|
## What it does
|
|
68
68
|
|
|
@@ -99,7 +99,7 @@ flowchart LR
|
|
|
99
99
|
|
|
100
100
|
`crtrd` is the only writer of canvas state and the only launcher of brokers. The CLI, the viewer and SDK applications call its `/v1` API; none of them opens the canvas database or starts an engine of its own. On one machine they use an owner-only Unix socket. A browser or a remote process uses a TCP listener and a bearer token (`crtr sys connect`).
|
|
101
101
|
|
|
102
|
-
What this costs: a daemon has to be running (the CLI and SDK start it on first use), and a network failure on a remote client fails a request loudly rather than replaying it. What it buys is one owner for state, so a node outlives the terminal, the viewer, or the application that created it. [Why a daemon](https://docs.northlight.ai/docs/concepts/why-a-daemon) covers the reasoning.
|
|
102
|
+
What this costs: a daemon has to be running (the CLI and SDK start it on first use), and a network failure on a remote client fails a request loudly rather than replaying it. What it buys is one owner for state, so a node outlives the terminal, the viewer, or the application that created it. [Why a daemon](https://crouter.docs.northlight.ai/docs/concepts/why-a-daemon) covers the reasoning.
|
|
103
103
|
|
|
104
104
|
## Use crouter from an application
|
|
105
105
|
|
|
@@ -123,7 +123,7 @@ if (run.kind === 'result') console.log(run.output_parsed.name, run.output_parsed
|
|
|
123
123
|
else console.error(run.reason, run.detail);
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
`nodes.parse` returns a typed result or an explicit failure; it never hands back text you have to parse. `nodes.stream` pipes a run's text and tool calls to a UI. See the [SDK docs](https://docs.northlight.ai/docs/sdk) and the [recipes](https://docs.northlight.ai/docs/sdk/guides).
|
|
126
|
+
`nodes.parse` returns a typed result or an explicit failure; it never hands back text you have to parse. `nodes.stream` pipes a run's text and tool calls to a UI. See the [SDK docs](https://crouter.docs.northlight.ai/docs/sdk) and the [recipes](https://crouter.docs.northlight.ai/docs/sdk/guides).
|
|
127
127
|
|
|
128
128
|
## Run it in a container
|
|
129
129
|
|
|
@@ -137,7 +137,7 @@ The image runs `crtrd` headless behind TCP; every request needs the bearer token
|
|
|
137
137
|
|
|
138
138
|
## Extend crouter
|
|
139
139
|
|
|
140
|
-
An application exposes typed operations as native `crtr` commands with [`@north-light/plugin`](https://github.com/Northlight-Systems/crouter/tree/main/packages/crouter-plugin): define a command tree once and it produces the HTTP handler and the archive that `crtr pkg plugin install --endpoint <url> --name <name>` reads. The [plugin docs](https://docs.northlight.ai/docs/plugin) cover commands, parameters, output, errors and deployment.
|
|
140
|
+
An application exposes typed operations as native `crtr` commands with [`@north-light/plugin`](https://github.com/Northlight-Systems/crouter/tree/main/packages/crouter-plugin): define a command tree once and it produces the HTTP handler and the archive that `crtr pkg plugin install --endpoint <url> --name <name>` reads. The [plugin docs](https://crouter.docs.northlight.ai/docs/plugin) cover commands, parameters, output, errors and deployment.
|
|
141
141
|
|
|
142
142
|
Ready-made plugins live in the [official marketplace](https://github.com/crouton-labs/crouter-official-marketplace): `exa-search`, `capture`, `tsym`, `bird`, `github-asset`, `dev`, `vercel`, `fly`, `railway`, `cloudflare`, and others. The first-run installer offers to register it.
|
|
143
143
|
|
|
@@ -152,7 +152,7 @@ Ready-made plugins live in the [official marketplace](https://github.com/crouton
|
|
|
152
152
|
| [`@north-light/env-docker`](https://www.npmjs.com/package/@north-light/env-docker) | Start or attach to a `crtrd` container | [`packages/crouter-env-docker`](https://github.com/Northlight-Systems/crouter/tree/main/packages/crouter-env-docker) |
|
|
153
153
|
| [`@north-light/identity`](https://www.npmjs.com/package/@north-light/identity) | Verify access tokens and evaluate scopes | [`packages/crouter-identity`](https://github.com/Northlight-Systems/crouter/tree/main/packages/crouter-identity) |
|
|
154
154
|
|
|
155
|
-
Most applications need only `@north-light/sdk`. The other repository contents: [`docs/`](https://github.com/Northlight-Systems/crouter/tree/main/docs) is the documentation source, [`apps/docs`](https://github.com/Northlight-Systems/crouter/tree/main/apps/docs) is the TanStack Start site that publishes it at docs.northlight.ai, [`docker/`](https://github.com/Northlight-Systems/crouter/tree/main/docker) builds the `crtrd` image, and [`examples/`](https://github.com/Northlight-Systems/crouter/tree/main/examples) holds the SDK recipes and a localhost demo.
|
|
155
|
+
Most applications need only `@north-light/sdk`. The other repository contents: [`docs/`](https://github.com/Northlight-Systems/crouter/tree/main/docs) is the documentation source, [`apps/docs`](https://github.com/Northlight-Systems/crouter/tree/main/apps/docs) is the TanStack Start site that publishes it at crouter.docs.northlight.ai, [`docker/`](https://github.com/Northlight-Systems/crouter/tree/main/docker) builds the `crtrd` image, and [`examples/`](https://github.com/Northlight-Systems/crouter/tree/main/examples) holds the SDK recipes and a localhost demo.
|
|
156
156
|
|
|
157
157
|
## Develop
|
|
158
158
|
|
|
@@ -69,14 +69,14 @@ Not breaking: no type or wire shape an app reads is removed or changed.
|
|
|
69
69
|
|
|
70
70
|
### Monthly spend cap enforced; `usage.get` (additive; one behavior change)
|
|
71
71
|
|
|
72
|
-
- **Behavior change:** user-paid model calls (`/v1/llm`) and provider calls now count against the grant's `spend_cap` (from `grant.get()`;
|
|
72
|
+
- **Behavior change:** user-paid model calls (`/v1/llm`) and provider calls now count against the grant's `spend_cap` (from `grant.get()`; Northlight sets $50) for the current UTC month. Once the month reaches it, the next call answers 402 `cap_exhausted` (a `RateLimitError`, `retryable: false`, `userAction: 'raise_cap'`, `resetAt` the first instant of next month) before any model or provider is called. A run whose model call is refused this way ends with outcome reason `cap_exhausted`. The check runs before each call, so the call that crosses the cap still completes. App-paid usage never counts. A grant with `spend_cap: null` is not capped.
|
|
73
73
|
- New `client.usage.get({month?})` (`month` is `YYYY-MM`, UTC; default the current month) answers `SpendUsageDTO`: `usd_equivalent` (user-paid spend, provider receipts included), `by_model`, `app_paid`, `spend_cap` and `reset_at`. See [[crouter-sdk/client]].
|
|
74
74
|
- A completion's `usage.usd_equivalent` is now the served model's list-price cost; before it was always `null`. It stays `null` for a model with no list price, and that usage adds nothing to the month.
|
|
75
75
|
|
|
76
76
|
### `npx @north-light/sdk env` (additive); keygen on an unjoined machine exits 2
|
|
77
77
|
|
|
78
78
|
- New `npx @north-light/sdk env --app <client id> [--out <path>]` writes `CROUTER_ISSUER`, `CROUTER_CLIENT_ID` and `APP_ORIGIN` from `crtr cloud apps get` into `local/app.env`, keeping every other line. See [[crouter-sdk/getting-started]].
|
|
79
|
-
- `keygen --app` on a machine whose `crtr` isn't joined to a
|
|
79
|
+
- `keygen --app` on a machine whose `crtr` isn't joined to a Northlight account now prints the join step and the manual steps and exits 2. A missing `crtr` keeps its message and exit 0.
|
|
80
80
|
|
|
81
81
|
### One deadline per SDK call, and a deadline on every OAuth/JWKS fetch (additive, with one behaviour change)
|
|
82
82
|
|
|
@@ -92,7 +92,7 @@ Not breaking: no type or wire shape an app reads is removed or changed. Apps pin
|
|
|
92
92
|
|
|
93
93
|
### `@north-light/sdk/testing`: isolated runs start, `FakeCall.runId`, one `runs` shape (one breaking change)
|
|
94
94
|
|
|
95
|
-
- `runs.start({isolated: true})` now starts a run on `FakeCloud`, as it does on a
|
|
95
|
+
- `runs.start({isolated: true})` now starts a run on `FakeCloud`, as it does on a Northlight guest; it used to answer 503 `isolated_unavailable`. `run.params.isolated` records it, and a `cwd` outside the run's root folder is 400 `param: cwd`, as the runtime checks it. The new option `isolatedRuns: 'unavailable'` restores the 503 for testing that path. If you worked around the refusal by deleting `body.isolated` in an intercept, remove the intercept.
|
|
96
96
|
- `FakeCall` gains `runId` and `questionId` (the ids the path addresses, else `null`), so tests no longer split `path`.
|
|
97
97
|
- `FakeCall.userId` is now the bearer's person whenever the cloud knows them, including a person with no refresh token; it is `null` only for a missing or unknown bearer.
|
|
98
98
|
- **Breaking:** `cloud.user(id).runs` is now `{all, respond}`, the same shape as `cloud.runs`, instead of an array carrying `respond`. Replace `user.runs[i]`, `user.runs.find(...)` and `[...user.runs]` with `user.runs.all…`.
|
|
@@ -106,7 +106,7 @@ New `@north-light/sdk/testing`: `FakeCloud`, a fake directory and runtime your r
|
|
|
106
106
|
|
|
107
107
|
### `oauth.accountAppUrl()` (additive), and a failed discovery read is retried (behaviour fix)
|
|
108
108
|
|
|
109
|
-
- New `OAuth2Client.accountAppUrl()` returns the app's page on the signed-in person's
|
|
109
|
+
- New `OAuth2Client.accountAppUrl()` returns the app's page on the signed-in person's Northlight account, as the directory's discovery document advertises it (`account_app_uri_template`). Use it instead of building `<issuer>/account/apps/<client id>` yourself. It needs no user or connection and throws `CrouterError` naming the fault when the directory advertises no template or an invalid one. See [[crouter-sdk/client]].
|
|
110
110
|
- **Behaviour fix:** `OAuth2Client`'s discovery read now times out after 10 seconds, and a read that failed or timed out is retried by the next call that needs it. Before, one failed read was kept for the client's life, so every later `authorizeUrl`, `exchangeCode`, refresh and `verifyIdToken` failed until the process restarted, and a hung directory stalled them indefinitely. A successful read is still kept for the client's life.
|
|
111
111
|
|
|
112
112
|
## 0.3.405
|
|
@@ -199,7 +199,7 @@ The SDK now sends `Crouter-Minimum-Runtime-Version: <SDK_VERSION>` on every requ
|
|
|
199
199
|
- `refusalOf` returns a `Refusal` only for an error the SDK raised while refreshing a stored connection, not for every directory-origin `AuthenticationError`.
|
|
200
200
|
- Concurrent refreshes in one process are shared per user and refresh token, so a client holding a newer token never joins an older refusal.
|
|
201
201
|
|
|
202
|
-
**Callers to update:**
|
|
202
|
+
**Callers to update:** Northlight's chat app (`first-party-apps/chat/src/directory-client.ts`, which builds `oauth.client(connection, store)`) and the context app (`first-party-apps/context/req-run.mjs`). Any app that called `refreshIdleConnections(store, …)`, read `RefreshFailure.reason`, or imported `refreshRefusal` must move to the shapes above.
|
|
203
203
|
|
|
204
204
|
### `RunWatcher`: learn when a background run ends (additive)
|
|
205
205
|
|
|
@@ -67,14 +67,14 @@ Not breaking: no type or wire shape an app reads is removed or changed.
|
|
|
67
67
|
|
|
68
68
|
### Monthly spend cap enforced; `usage.get` (additive; one behavior change)
|
|
69
69
|
|
|
70
|
-
- **Behavior change:** user-paid model calls (`/v1/llm`) and provider calls now count against the grant's `spend_cap` (from `grant.get()`;
|
|
70
|
+
- **Behavior change:** user-paid model calls (`/v1/llm`) and provider calls now count against the grant's `spend_cap` (from `grant.get()`; Northlight sets $50) for the current UTC month. Once the month reaches it, the next call answers 402 `cap_exhausted` (a `RateLimitError`, `retryable: false`, `userAction: 'raise_cap'`, `resetAt` the first instant of next month) before any model or provider is called. A run whose model call is refused this way ends with outcome reason `cap_exhausted`. The check runs before each call, so the call that crosses the cap still completes. App-paid usage never counts. A grant with `spend_cap: null` is not capped.
|
|
71
71
|
- New `client.usage.get({month?})` (`month` is `YYYY-MM`, UTC; default the current month) answers `SpendUsageDTO`: `usd_equivalent` (user-paid spend, provider receipts included), `by_model`, `app_paid`, `spend_cap` and `reset_at`. See [Show what a person's month has cost](./client.md#show-what-a-persons-month-has-cost).
|
|
72
72
|
- A completion's `usage.usd_equivalent` is now the served model's list-price cost; before it was always `null`. It stays `null` for a model with no list price, and that usage adds nothing to the month.
|
|
73
73
|
|
|
74
74
|
### `npx @north-light/sdk env` (additive); keygen on an unjoined machine exits 2
|
|
75
75
|
|
|
76
76
|
- New `npx @north-light/sdk env --app <client id> [--out <path>]` writes `CROUTER_ISSUER`, `CROUTER_CLIENT_ID` and `APP_ORIGIN` from `crtr cloud apps get` into `local/app.env`, keeping every other line. See [Go live with an app key](./getting-started.md#go-live-with-an-app-key).
|
|
77
|
-
- `keygen --app` on a machine whose `crtr` isn't joined to a
|
|
77
|
+
- `keygen --app` on a machine whose `crtr` isn't joined to a Northlight account now prints the join step and the manual steps and exits 2. A missing `crtr` keeps its message and exit 0.
|
|
78
78
|
|
|
79
79
|
### One deadline per SDK call, and a deadline on every OAuth/JWKS fetch (additive, with one behaviour change)
|
|
80
80
|
|
|
@@ -90,7 +90,7 @@ Not breaking: no type or wire shape an app reads is removed or changed. Apps pin
|
|
|
90
90
|
|
|
91
91
|
### `@north-light/sdk/testing`: isolated runs start, `FakeCall.runId`, one `runs` shape (one breaking change)
|
|
92
92
|
|
|
93
|
-
- `runs.start({isolated: true})` now starts a run on `FakeCloud`, as it does on a
|
|
93
|
+
- `runs.start({isolated: true})` now starts a run on `FakeCloud`, as it does on a Northlight guest; it used to answer 503 `isolated_unavailable`. `run.params.isolated` records it, and a `cwd` outside the run's root folder is 400 `param: cwd`, as the runtime checks it. The new option `isolatedRuns: 'unavailable'` restores the 503 for testing that path. If you worked around the refusal by deleting `body.isolated` in an intercept, remove the intercept.
|
|
94
94
|
- `FakeCall` gains `runId` and `questionId` (the ids the path addresses, else `null`), so tests no longer split `path`.
|
|
95
95
|
- `FakeCall.userId` is now the bearer's person whenever the cloud knows them, including a person with no refresh token; it is `null` only for a missing or unknown bearer.
|
|
96
96
|
- **Breaking:** `cloud.user(id).runs` is now `{all, respond}`, the same shape as `cloud.runs`, instead of an array carrying `respond`. Replace `user.runs[i]`, `user.runs.find(...)` and `[...user.runs]` with `user.runs.all…`.
|
|
@@ -104,7 +104,7 @@ New `@north-light/sdk/testing`: `FakeCloud`, a fake directory and runtime your r
|
|
|
104
104
|
|
|
105
105
|
### `oauth.accountAppUrl()` (additive), and a failed discovery read is retried (behaviour fix)
|
|
106
106
|
|
|
107
|
-
- New `OAuth2Client.accountAppUrl()` returns the app's page on the signed-in person's
|
|
107
|
+
- New `OAuth2Client.accountAppUrl()` returns the app's page on the signed-in person's Northlight account, as the directory's discovery document advertises it (`account_app_uri_template`). Use it instead of building `<issuer>/account/apps/<client id>` yourself. It needs no user or connection and throws `CrouterError` naming the fault when the directory advertises no template or an invalid one. See [Link to the app's settings on Northlight](./client.md#link-to-the-apps-settings-on-northlight).
|
|
108
108
|
- **Behaviour fix:** `OAuth2Client`'s discovery read now times out after 10 seconds, and a read that failed or timed out is retried by the next call that needs it. Before, one failed read was kept for the client's life, so every later `authorizeUrl`, `exchangeCode`, refresh and `verifyIdToken` failed until the process restarted, and a hung directory stalled them indefinitely. A successful read is still kept for the client's life.
|
|
109
109
|
|
|
110
110
|
## 0.3.405
|
|
@@ -197,7 +197,7 @@ The SDK now sends `Crouter-Minimum-Runtime-Version: <SDK_VERSION>` on every requ
|
|
|
197
197
|
- `refusalOf` returns a `Refusal` only for an error the SDK raised while refreshing a stored connection, not for every directory-origin `AuthenticationError`.
|
|
198
198
|
- Concurrent refreshes in one process are shared per user and refresh token, so a client holding a newer token never joins an older refusal.
|
|
199
199
|
|
|
200
|
-
**Callers to update:**
|
|
200
|
+
**Callers to update:** Northlight's chat app (`first-party-apps/chat/src/directory-client.ts`, which builds `oauth.client(connection, store)`) and the context app (`first-party-apps/context/req-run.mjs`). Any app that called `refreshIdleConnections(store, …)`, read `RefreshFailure.reason`, or imported `refreshRefusal` must move to the shapes above.
|
|
201
201
|
|
|
202
202
|
### `RunWatcher`: learn when a background run ends (additive)
|
|
203
203
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@north-light/cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.471",
|
|
4
4
|
"description": "crtr — agent runtime with memory, plugins, and marketplaces",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
},
|
|
138
138
|
"license": "UNLICENSED",
|
|
139
139
|
"dependencies": {
|
|
140
|
-
"@north-light/identity": "0.3.
|
|
140
|
+
"@north-light/identity": "0.3.471",
|
|
141
141
|
"@earendil-works/pi-agent-core": "1.1.0",
|
|
142
142
|
"@earendil-works/pi-ai": "1.1.0",
|
|
143
143
|
"@earendil-works/pi-coding-agent": "1.1.0",
|
package/runtime.lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@north-light/cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.471",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@north-light/cli",
|
|
9
|
-
"version": "0.3.
|
|
9
|
+
"version": "0.3.471",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "UNLICENSED",
|
|
12
12
|
"workspaces": [
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"@earendil-works/pi-ai": "1.1.0",
|
|
19
19
|
"@earendil-works/pi-coding-agent": "1.1.0",
|
|
20
20
|
"@earendil-works/pi-tui": "1.1.0",
|
|
21
|
-
"@north-light/identity": "0.3.
|
|
21
|
+
"@north-light/identity": "0.3.471",
|
|
22
22
|
"cron-parser": "^5.6.0",
|
|
23
23
|
"esbuild": "^0.27.7",
|
|
24
24
|
"jose": "^6.2.12",
|
|
@@ -12095,17 +12095,17 @@
|
|
|
12095
12095
|
},
|
|
12096
12096
|
"packages/crouter-api": {
|
|
12097
12097
|
"name": "@north-light/api",
|
|
12098
|
-
"version": "0.3.
|
|
12098
|
+
"version": "0.3.471",
|
|
12099
12099
|
"license": "UNLICENSED"
|
|
12100
12100
|
},
|
|
12101
12101
|
"packages/crouter-env-docker": {
|
|
12102
12102
|
"name": "@north-light/env-docker",
|
|
12103
|
-
"version": "0.3.
|
|
12103
|
+
"version": "0.3.471",
|
|
12104
12104
|
"license": "UNLICENSED"
|
|
12105
12105
|
},
|
|
12106
12106
|
"packages/crouter-identity": {
|
|
12107
12107
|
"name": "@north-light/identity",
|
|
12108
|
-
"version": "0.3.
|
|
12108
|
+
"version": "0.3.471",
|
|
12109
12109
|
"license": "UNLICENSED",
|
|
12110
12110
|
"dependencies": {
|
|
12111
12111
|
"jose": "^6.2.1"
|
|
@@ -12113,20 +12113,20 @@
|
|
|
12113
12113
|
},
|
|
12114
12114
|
"packages/crouter-plugin": {
|
|
12115
12115
|
"name": "@north-light/plugin",
|
|
12116
|
-
"version": "0.3.
|
|
12116
|
+
"version": "0.3.471",
|
|
12117
12117
|
"license": "UNLICENSED",
|
|
12118
12118
|
"dependencies": {
|
|
12119
|
-
"@north-light/api": "0.3.
|
|
12120
|
-
"@north-light/identity": "0.3.
|
|
12119
|
+
"@north-light/api": "0.3.471",
|
|
12120
|
+
"@north-light/identity": "0.3.471"
|
|
12121
12121
|
}
|
|
12122
12122
|
},
|
|
12123
12123
|
"packages/crouter-sdk": {
|
|
12124
12124
|
"name": "@north-light/sdk",
|
|
12125
|
-
"version": "0.3.
|
|
12125
|
+
"version": "0.3.471",
|
|
12126
12126
|
"license": "UNLICENSED",
|
|
12127
12127
|
"dependencies": {
|
|
12128
|
-
"@north-light/api": "0.3.
|
|
12129
|
-
"@north-light/identity": "0.3.
|
|
12128
|
+
"@north-light/api": "0.3.471",
|
|
12129
|
+
"@north-light/identity": "0.3.471",
|
|
12130
12130
|
"jose": "^6.2.1"
|
|
12131
12131
|
},
|
|
12132
12132
|
"bin": {
|