@north-light/cli 0.3.544 → 0.3.545
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/builtin-memory/crouter-sdk/release-notes.md +6 -0
- package/dist/builtin-memory/northlight-apps/guides/watchable-objects.md +74 -0
- package/dist/builtin-memory/northlight-apps/reach-people-by-text.md +1 -1
- package/docs/apps/guides/watchable-objects.md +71 -0
- package/docs/apps/reach-people-by-text.md +1 -1
- package/docs/release-local.md +2 -2
- package/docs/sdk/release-notes.md +6 -0
- package/package.json +3 -3
- package/packages/crouter-identity/package.json +1 -1
- package/runtime.lock.json +13 -12
|
@@ -9,6 +9,12 @@ when-and-why-to-read: When you need Release notes, this knowledge should be read
|
|
|
9
9
|
|
|
10
10
|
Changes to `@north-light/sdk` that can change what an existing app sees. Newest first.
|
|
11
11
|
|
|
12
|
+
## 0.3.545
|
|
13
|
+
|
|
14
|
+
`@north-light/sdk/stores/postgres` gains an object kit: `PostgresObjectStore` and `objectKitSchemaSql`. Additive: no existing export, request or response changes.
|
|
15
|
+
|
|
16
|
+
- `PostgresObjectStore` keeps per-person custom objects (`instance`), the nodes watching them (`watch`), and a PostgreSQL publish outbox written inside the caller's transaction (`enqueue`) and delivered at least once by `startPublisher`. `objectKitSchemaSql()` returns the DDL for its three tables. See [Watchable objects](/docs/guides/watchable-objects).
|
|
17
|
+
|
|
12
18
|
## 0.3.542
|
|
13
19
|
|
|
14
20
|
The directory's account page reads and removes individual AI subscription accounts. Additive: no app-facing request or response changes.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
kind: knowledge
|
|
3
|
+
when-and-why-to-read: When you need Watchable objects, this knowledge should be
|
|
4
|
+
read because Give each person a canvas object per thing in your app, let their
|
|
5
|
+
agents watch it, and publish events to it reliably with the PostgreSQL object
|
|
6
|
+
kit.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Watchable objects
|
|
10
|
+
|
|
11
|
+
`PostgresObjectStore` from `@north-light/sdk/stores/postgres` keeps one canvas object per person for each thing in your app (a problem, a ticket, a workspace), links the person's nodes to it, and delivers events to it from a database outbox. An agent that runs `crtr <your-plugin> thing watch T-12` then receives the events you publish for T-12.
|
|
12
|
+
|
|
13
|
+
Your app declares the object kinds and their events in its plugin with `definePlugin({objectKinds})` (see [Deploying a plugin](https://crouter.docs.northlight.ai/docs/plugin/deploying)). The store registers objects of those kinds. Install `pg` in your app.
|
|
14
|
+
|
|
15
|
+
## Create the tables
|
|
16
|
+
|
|
17
|
+
`objectKitSchemaSql()` returns the DDL. Put it in your migration; the store never creates tables.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import {objectKitSchemaSql} from '@north-light/sdk/stores/postgres';
|
|
21
|
+
|
|
22
|
+
console.log(objectKitSchemaSql()); // or objectKitSchemaSql({object: 'app.watch_object', watcher: '…', publish: '…'})
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
It creates three tables (names default to `watch_object`, `watch_watcher`, `watch_publish`):
|
|
26
|
+
|
|
27
|
+
| Table | Holds |
|
|
28
|
+
|---|---|
|
|
29
|
+
| object | `object_id` (the runtime's id), `sub`, `kind`, `target`, `name`, `created_at`; unique on (`sub`, `kind`, `target`) |
|
|
30
|
+
| watcher | `object_id`, `node`, `machine` (`''` for the person's hosted runtime); one row per linked node |
|
|
31
|
+
| publish | the outbox: `id`, `object_id`, `event`, `summary`, `state` (jsonb), `status` (`pending`, `done`, `dropped`), `attempts`, `last_error`, `next_attempt_at`, `created_at` |
|
|
32
|
+
|
|
33
|
+
Table names are lowercase identifiers, optionally schema-qualified.
|
|
34
|
+
|
|
35
|
+
## Use it
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import {Pool} from 'pg';
|
|
39
|
+
import {PostgresObjectStore} from '@north-light/sdk/stores/postgres';
|
|
40
|
+
|
|
41
|
+
const pool = new Pool({connectionString: process.env.DATABASE_URL});
|
|
42
|
+
const objects = new PostgresObjectStore(pool, {
|
|
43
|
+
providerId: process.env.CROUTER_CLIENT_ID!, // kinds register as `<providerId>.<kind>`
|
|
44
|
+
runtime: (sub) => oauth.appClient(sub), // the app's client on that person's runtime
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// In a command: find or create the person's object, then link the calling node to it.
|
|
48
|
+
const object = await objects.instance(sub, 'problem', 'P-12', {name: 'problem/P-12', description: 'Problem P-12'});
|
|
49
|
+
await objects.watch(object.objectId, ctx.caller.crtr.node, ctx.caller.crtr.machine);
|
|
50
|
+
|
|
51
|
+
// In the transaction of the write the event records:
|
|
52
|
+
await client.query('BEGIN');
|
|
53
|
+
// … your writes …
|
|
54
|
+
await objects.enqueue(client, object.objectId, {event: 'recovered', summary: 'P-12 recovered', state: {id: 'P-12'}});
|
|
55
|
+
await client.query('COMMIT');
|
|
56
|
+
|
|
57
|
+
// Once per process:
|
|
58
|
+
const publisher = objects.startPublisher(); // every 5 s, up to 100 rows
|
|
59
|
+
// on shutdown: await publisher.stop();
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
- `instance(sub, kind, target, {name, description})` returns the existing object for that (person, kind, target), or registers a private object on the person's runtime and stores it. Two calls racing to create the same object each register one; the row that committed first is kept and the other registration is unregistered. Use `''` as `target` for a kind with one object per person.
|
|
63
|
+
- `watch(objectId, node, machine?)` links the node on the person's runtime (`canvas.watch` with `watcher`, plus `watcher_machine` when `machine` is set) and records the link. It is safe to repeat. A node the runtime does not know rejects with `NotFoundError`.
|
|
64
|
+
- `enqueue(client, objectId, {event, summary, state?})` inserts an outbox row with the client you pass. Pass the client of your open transaction and the row exists exactly when your write committed. `summary` is cut to 500 characters. The object must already exist (the outbox references it).
|
|
65
|
+
- `startPublisher({tick?, batch?})` delivers pending rows oldest first, every `tick` ms (default 5000), at most `batch` per tick (default 100). A Postgres advisory lock lets one process at a time deliver, so every instance of your app can run it. Delivery is at least once.
|
|
66
|
+
|
|
67
|
+
## Delivery rules
|
|
68
|
+
|
|
69
|
+
- A transient failure (network, 5xx, 429, `unknown_event`) keeps the row pending and retries after `min(2^attempts × 10 s, 15 min)`.
|
|
70
|
+
- A refusal the runtime will never accept (HTTP 400, 404 or 422, other than `unknown_event`) marks the row `dropped` with `last_error` set.
|
|
71
|
+
- A row still undelivered 24 hours after it was enqueued is marked `dropped`.
|
|
72
|
+
- Rows are never deleted; delete `done` and `dropped` rows from your own cleanup job.
|
|
73
|
+
|
|
74
|
+
`PostgresObjectStore.tick()` runs one delivery pass and answers `false` when another process holds the lock; `startPublisher` calls it on a timer, logging a failed tick and carrying on. Pass `log: {warn, error}` to route those messages.
|
|
@@ -40,7 +40,7 @@ The [Comms guide for coding agents](https://comms.northlight.ai/llms.txt) is the
|
|
|
40
40
|
5. **Text it from your own phone, in test mode.** Add yourself as a tester (`crtr comms testers add --app-id <id> --phone <number> --label <name>`, or the site), then text `JOIN <code>` to the test number. Test mode is free; the [Comms guide](https://comms.northlight.ai/llms.txt) has the tester limit.
|
|
41
41
|
6. **Go to production** when you want your app's own number and anyone to text it. Production is paid: add a card on the billing account, and Comms gets your app its own number.
|
|
42
42
|
|
|
43
|
-
Comms is priced per person your app texts with in production each month; fake mode and testing are free. The SDK is [`@north-light/comms`](https://www.npmjs.com/package/@north-light/comms) on npm.
|
|
43
|
+
Comms is priced per person your app texts with in production each month; fake mode and testing are free. The SDK is [`@north-light/comms`](https://www.npmjs.com/package/@north-light/comms) on npm. Install it with `npm i @north-light/comms`.
|
|
44
44
|
|
|
45
45
|
## Rules
|
|
46
46
|
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Watchable objects
|
|
3
|
+
description: Give each person a canvas object per thing in your app, let their agents watch it, and publish events to it reliably with the PostgreSQL object kit.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Watchable objects
|
|
7
|
+
|
|
8
|
+
`PostgresObjectStore` from `@north-light/sdk/stores/postgres` keeps one canvas object per person for each thing in your app (a problem, a ticket, a workspace), links the person's nodes to it, and delivers events to it from a database outbox. An agent that runs `crtr <your-plugin> thing watch T-12` then receives the events you publish for T-12.
|
|
9
|
+
|
|
10
|
+
Your app declares the object kinds and their events in its plugin with `definePlugin({objectKinds})` (see [Deploying a plugin](https://crouter.docs.northlight.ai/docs/plugin/deploying)). The store registers objects of those kinds. Install `pg` in your app.
|
|
11
|
+
|
|
12
|
+
## Create the tables
|
|
13
|
+
|
|
14
|
+
`objectKitSchemaSql()` returns the DDL. Put it in your migration; the store never creates tables.
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import {objectKitSchemaSql} from '@north-light/sdk/stores/postgres';
|
|
18
|
+
|
|
19
|
+
console.log(objectKitSchemaSql()); // or objectKitSchemaSql({object: 'app.watch_object', watcher: '…', publish: '…'})
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
It creates three tables (names default to `watch_object`, `watch_watcher`, `watch_publish`):
|
|
23
|
+
|
|
24
|
+
| Table | Holds |
|
|
25
|
+
|---|---|
|
|
26
|
+
| object | `object_id` (the runtime's id), `sub`, `kind`, `target`, `name`, `created_at`; unique on (`sub`, `kind`, `target`) |
|
|
27
|
+
| watcher | `object_id`, `node`, `machine` (`''` for the person's hosted runtime); one row per linked node |
|
|
28
|
+
| publish | the outbox: `id`, `object_id`, `event`, `summary`, `state` (jsonb), `status` (`pending`, `done`, `dropped`), `attempts`, `last_error`, `next_attempt_at`, `created_at` |
|
|
29
|
+
|
|
30
|
+
Table names are lowercase identifiers, optionally schema-qualified.
|
|
31
|
+
|
|
32
|
+
## Use it
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
import {Pool} from 'pg';
|
|
36
|
+
import {PostgresObjectStore} from '@north-light/sdk/stores/postgres';
|
|
37
|
+
|
|
38
|
+
const pool = new Pool({connectionString: process.env.DATABASE_URL});
|
|
39
|
+
const objects = new PostgresObjectStore(pool, {
|
|
40
|
+
providerId: process.env.CROUTER_CLIENT_ID!, // kinds register as `<providerId>.<kind>`
|
|
41
|
+
runtime: (sub) => oauth.appClient(sub), // the app's client on that person's runtime
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// In a command: find or create the person's object, then link the calling node to it.
|
|
45
|
+
const object = await objects.instance(sub, 'problem', 'P-12', {name: 'problem/P-12', description: 'Problem P-12'});
|
|
46
|
+
await objects.watch(object.objectId, ctx.caller.crtr.node, ctx.caller.crtr.machine);
|
|
47
|
+
|
|
48
|
+
// In the transaction of the write the event records:
|
|
49
|
+
await client.query('BEGIN');
|
|
50
|
+
// … your writes …
|
|
51
|
+
await objects.enqueue(client, object.objectId, {event: 'recovered', summary: 'P-12 recovered', state: {id: 'P-12'}});
|
|
52
|
+
await client.query('COMMIT');
|
|
53
|
+
|
|
54
|
+
// Once per process:
|
|
55
|
+
const publisher = objects.startPublisher(); // every 5 s, up to 100 rows
|
|
56
|
+
// on shutdown: await publisher.stop();
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- `instance(sub, kind, target, {name, description})` returns the existing object for that (person, kind, target), or registers a private object on the person's runtime and stores it. Two calls racing to create the same object each register one; the row that committed first is kept and the other registration is unregistered. Use `''` as `target` for a kind with one object per person.
|
|
60
|
+
- `watch(objectId, node, machine?)` links the node on the person's runtime (`canvas.watch` with `watcher`, plus `watcher_machine` when `machine` is set) and records the link. It is safe to repeat. A node the runtime does not know rejects with `NotFoundError`.
|
|
61
|
+
- `enqueue(client, objectId, {event, summary, state?})` inserts an outbox row with the client you pass. Pass the client of your open transaction and the row exists exactly when your write committed. `summary` is cut to 500 characters. The object must already exist (the outbox references it).
|
|
62
|
+
- `startPublisher({tick?, batch?})` delivers pending rows oldest first, every `tick` ms (default 5000), at most `batch` per tick (default 100). A Postgres advisory lock lets one process at a time deliver, so every instance of your app can run it. Delivery is at least once.
|
|
63
|
+
|
|
64
|
+
## Delivery rules
|
|
65
|
+
|
|
66
|
+
- A transient failure (network, 5xx, 429, `unknown_event`) keeps the row pending and retries after `min(2^attempts × 10 s, 15 min)`.
|
|
67
|
+
- A refusal the runtime will never accept (HTTP 400, 404 or 422, other than `unknown_event`) marks the row `dropped` with `last_error` set.
|
|
68
|
+
- A row still undelivered 24 hours after it was enqueued is marked `dropped`.
|
|
69
|
+
- Rows are never deleted; delete `done` and `dropped` rows from your own cleanup job.
|
|
70
|
+
|
|
71
|
+
`PostgresObjectStore.tick()` runs one delivery pass and answers `false` when another process holds the lock; `startPublisher` calls it on a timer, logging a failed tick and carrying on. Pass `log: {warn, error}` to route those messages.
|
|
@@ -37,7 +37,7 @@ The [Comms guide for coding agents](https://comms.northlight.ai/llms.txt) is the
|
|
|
37
37
|
5. **Text it from your own phone, in test mode.** Add yourself as a tester (`crtr comms testers add --app-id <id> --phone <number> --label <name>`, or the site), then text `JOIN <code>` to the test number. Test mode is free; the [Comms guide](https://comms.northlight.ai/llms.txt) has the tester limit.
|
|
38
38
|
6. **Go to production** when you want your app's own number and anyone to text it. Production is paid: add a card on the billing account, and Comms gets your app its own number.
|
|
39
39
|
|
|
40
|
-
Comms is priced per person your app texts with in production each month; fake mode and testing are free. The SDK is [`@north-light/comms`](https://www.npmjs.com/package/@north-light/comms) on npm.
|
|
40
|
+
Comms is priced per person your app texts with in production each month; fake mode and testing are free. The SDK is [`@north-light/comms`](https://www.npmjs.com/package/@north-light/comms) on npm. Install it with `npm i @north-light/comms`.
|
|
41
41
|
|
|
42
42
|
## Rules
|
|
43
43
|
|
package/docs/release-local.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Use this only for a release explicitly authorized by Silas. `.github/workflows/publish.yml` is the source of truth; this is its manual path when Actions cannot run. Work on clean, current `main`, with `npm whoami` showing the publishing account. Verify the code first (`npm run build:api`, `npm run build`, `npx tsc --noEmit`, relevant `npm run test:isolated -- …`). Do not start a release while another agent owns uncommitted changes in this shared checkout.
|
|
4
4
|
|
|
5
5
|
1. Check the six latest registry versions with `npm view <name> version` for each of `@north-light/cli`, `@north-light/api`, `@north-light/env-docker`, `@north-light/identity`, `@north-light/sdk` and `@north-light/plugin`. Fetch `origin/main`, ensure the release commit is current, and choose a patch version greater than every published version. Do **not** use the workflow's `git reset --hard` in a shared checkout.
|
|
6
|
-
2. Run `node scripts/release-version.mjs "$VERSION"`. It sets all six manifests to `$VERSION`, pins every dependency between them (root → identity, SDK → api and
|
|
7
|
-
3. From the tagged release commit run `npm ci`. Publish in dependency order, checking `npm view "$PACKAGE@$VERSION" version` before each and skipping only on a positive sighting: `npm run build:identity` then `npm publish` in `packages/crouter-identity`; `npm run build` then `CRTR_PACK_MINIFY=1 npm publish` at root (Docker must be running: the pack cross-builds the Linux x64 and arm64 native addons into `dist/native/linux/<arch>/addon.node` and fails the release if it cannot); `npm run build:api` then publish in `packages/crouter-api`; `npm run build:env-docker` then publish in `packages/crouter-env-docker`; `npm run build:
|
|
6
|
+
2. Run `node scripts/release-version.mjs "$VERSION"`. It sets all six manifests to `$VERSION`, pins every dependency between them (root → identity, SDK → api, identity and plugin, plugin → api and identity) to exactly `$VERSION` with no `^`, writes `SDK_VERSION` in `packages/crouter-sdk/src/version.ts` (informational: compatibility is the contract level), and renames the `## Next release` section of `docs/sdk/release-notes.md` to `## $VERSION`. One release is one version set: an app pinning `@north-light/sdk@$VERSION` gets exactly this release's api and identity. Run `npm install --package-lock-only --ignore-scripts`, then `node scripts/contract.mjs release`: it fails on an unacknowledged breaking `/v1` change or an undeclared watched file (the same check CI runs), then writes `contract/surface.txt`, `CONTRACT_LEVEL` in `src/api/contract.ts` (a minor bump only when the surface changed or a declaration says `bump`), `crouterContract` in the SDK manifest, and resets `contract/next.json`. Run `node scripts/release-version.mjs --check` (prints `one version set`). Check `git diff` and commit only the six manifests, `packages/crouter-sdk/src/version.ts`, `docs/sdk/release-notes.md`, `package-lock.json`, `contract/surface.txt`, `contract/next.json` and `src/api/contract.ts` as `chore: release v$VERSION`. Create `git tag -a "v$VERSION" -m "chore: release v$VERSION"`, then `git push --atomic origin HEAD:main "refs/tags/v$VERSION"`. If rejected due to a concurrent push, remove the *local* release tag, integrate fresh main, then recheck versions and retry; never push a tag separately.
|
|
7
|
+
3. From the tagged release commit run `npm ci`. Publish in dependency order, checking `npm view "$PACKAGE@$VERSION" version` before each and skipping only on a positive sighting: `npm run build:identity` then `npm publish` in `packages/crouter-identity`; `npm run build` then `CRTR_PACK_MINIFY=1 npm publish` at root (Docker must be running: the pack cross-builds the Linux x64 and arm64 native addons into `dist/native/linux/<arch>/addon.node` and fails the release if it cannot); `npm run build:api` then publish in `packages/crouter-api`; `npm run build:env-docker` then publish in `packages/crouter-env-docker`; `npm run build:plugin` then `CRTR_PACK_MINIFY=1 npm publish` in `packages/crouter-plugin` (the SDK depends on it, so it goes first); then `npm run build:sdk` then `npm publish --tag next` in `packages/crouter-sdk` (its `prepublishOnly` guard refuses any other form, including `--tag latest`; every SDK release lands on `next`). Use npm's interactive authentication/2FA where required (see `personal-operations/npm-2fa-cli`); a read-only token cannot publish. Provenance remains off because the source repository is private. Do not build or publish the Docker image in this no-Actions path.
|
|
8
8
|
4. Confirm all six exact versions with `npm view`. In a fresh temporary directory, `npm init -y && npm install @north-light/sdk@$VERSION`, then prove both `@north-light/sdk/errors` (`errorCodes`) and `@north-light/sdk/stores/postgres` resolve via `node --input-type=module -e '…'`. Record any partial publish and finish it from the exact release tag rather than cutting another version: `gh workflow run publish.yml -f release_tag=v$VERSION` runs `recover-release`, which verifies the tag is a release commit on main, checks it out, and publishes only the packages and image the registry does not yet show (SDK to `next`; it never writes the image `:latest`, so if the recovered tag is the newest release, `:latest` follows the next normal release).
|
|
9
9
|
5. Promote `latest` last, through CI only: `gh workflow run publish.yml -f promote=true` runs the `promote-sdk` job, the one writer of `latest`. It shares the `sdk-dist-tag` concurrency group with the automatic runs (they queue, never overlap), reads the router's `/contract` itself, re-reads `latest` right before the write and moves it only if unchanged. It also runs after each SDK publish and hourly. `PROD_CONTRACT_URL=<the router's /contract URL> node scripts/promote-sdk.mjs` is a read-only dry run; its `--apply` refuses outside Actions. **Never `npm dist-tag add` the SDK by hand.** The one exception is Actions fully down: a person then runs the printed target by hand through the npm 2FA wrapper only after re-reading `npm view @north-light/sdk dist-tags` and confirming no `promote-sdk` run is active (`gh run list --workflow publish.yml`) and that the target is above the current `latest`.
|
|
@@ -7,6 +7,12 @@ description: Behavior changes in @north-light/sdk that an app must act on, newes
|
|
|
7
7
|
|
|
8
8
|
Changes to `@north-light/sdk` that can change what an existing app sees. Newest first.
|
|
9
9
|
|
|
10
|
+
## 0.3.545
|
|
11
|
+
|
|
12
|
+
`@north-light/sdk/stores/postgres` gains an object kit: `PostgresObjectStore` and `objectKitSchemaSql`. Additive: no existing export, request or response changes.
|
|
13
|
+
|
|
14
|
+
- `PostgresObjectStore` keeps per-person custom objects (`instance`), the nodes watching them (`watch`), and a PostgreSQL publish outbox written inside the caller's transaction (`enqueue`) and delivered at least once by `startPublisher`. `objectKitSchemaSql()` returns the DDL for its three tables. See [Watchable objects](/docs/guides/watchable-objects).
|
|
15
|
+
|
|
10
16
|
## 0.3.542
|
|
11
17
|
|
|
12
18
|
The directory's account page reads and removes individual AI subscription accounts. Additive: no app-facing request or response changes.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@north-light/cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.545",
|
|
4
4
|
"description": "crtr — agent runtime with memory, plugins, and marketplaces",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"activate:pull": "git pull && npm install && npm run activate",
|
|
94
94
|
"build:api": "npm run build:identity && tsc -p packages/crouter-api/tsconfig.json",
|
|
95
95
|
"build:env-docker": "tsc -p packages/crouter-env-docker/tsconfig.json",
|
|
96
|
-
"build:sdk": "npm run build:api && npm run build:identity && npm run build --workspace packages/crouter-sdk",
|
|
96
|
+
"build:sdk": "npm run build:api && npm run build:identity && npm run build:plugin && npm run build --workspace packages/crouter-sdk",
|
|
97
97
|
"build:plugin": "tsc -p packages/crouter-plugin/tsconfig.json",
|
|
98
98
|
"typecheck": "tsc --noEmit && tsc -p src/doc-editor/tsconfig.json",
|
|
99
99
|
"typecheck:pi-packages": "npx tsc -p src/builtin-pi-packages/pi-crtr-extensions/tsconfig.json",
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
},
|
|
141
141
|
"license": "UNLICENSED",
|
|
142
142
|
"dependencies": {
|
|
143
|
-
"@north-light/identity": "0.3.
|
|
143
|
+
"@north-light/identity": "0.3.545",
|
|
144
144
|
"@earendil-works/pi-agent-core": "1.1.0",
|
|
145
145
|
"@earendil-works/pi-ai": "1.1.0",
|
|
146
146
|
"@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.545",
|
|
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.545",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "UNLICENSED",
|
|
12
12
|
"workspaces": [
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@milkdown/preset-gfm": "^7.22.3",
|
|
25
25
|
"@milkdown/prose": "^7.22.3",
|
|
26
26
|
"@milkdown/utils": "^7.22.3",
|
|
27
|
-
"@north-light/identity": "0.3.
|
|
27
|
+
"@north-light/identity": "0.3.545",
|
|
28
28
|
"cron-parser": "^5.6.0",
|
|
29
29
|
"esbuild": "^0.27.7",
|
|
30
30
|
"jose": "^6.2.12",
|
|
@@ -12455,17 +12455,17 @@
|
|
|
12455
12455
|
},
|
|
12456
12456
|
"packages/crouter-api": {
|
|
12457
12457
|
"name": "@north-light/api",
|
|
12458
|
-
"version": "0.3.
|
|
12458
|
+
"version": "0.3.545",
|
|
12459
12459
|
"license": "UNLICENSED"
|
|
12460
12460
|
},
|
|
12461
12461
|
"packages/crouter-env-docker": {
|
|
12462
12462
|
"name": "@north-light/env-docker",
|
|
12463
|
-
"version": "0.3.
|
|
12463
|
+
"version": "0.3.545",
|
|
12464
12464
|
"license": "UNLICENSED"
|
|
12465
12465
|
},
|
|
12466
12466
|
"packages/crouter-identity": {
|
|
12467
12467
|
"name": "@north-light/identity",
|
|
12468
|
-
"version": "0.3.
|
|
12468
|
+
"version": "0.3.545",
|
|
12469
12469
|
"license": "UNLICENSED",
|
|
12470
12470
|
"dependencies": {
|
|
12471
12471
|
"jose": "^6.2.1"
|
|
@@ -12473,20 +12473,21 @@
|
|
|
12473
12473
|
},
|
|
12474
12474
|
"packages/crouter-plugin": {
|
|
12475
12475
|
"name": "@north-light/plugin",
|
|
12476
|
-
"version": "0.3.
|
|
12476
|
+
"version": "0.3.545",
|
|
12477
12477
|
"license": "UNLICENSED",
|
|
12478
12478
|
"dependencies": {
|
|
12479
|
-
"@north-light/api": "0.3.
|
|
12480
|
-
"@north-light/identity": "0.3.
|
|
12479
|
+
"@north-light/api": "0.3.545",
|
|
12480
|
+
"@north-light/identity": "0.3.545"
|
|
12481
12481
|
}
|
|
12482
12482
|
},
|
|
12483
12483
|
"packages/crouter-sdk": {
|
|
12484
12484
|
"name": "@north-light/sdk",
|
|
12485
|
-
"version": "0.3.
|
|
12485
|
+
"version": "0.3.545",
|
|
12486
12486
|
"license": "UNLICENSED",
|
|
12487
12487
|
"dependencies": {
|
|
12488
|
-
"@north-light/api": "0.3.
|
|
12489
|
-
"@north-light/identity": "0.3.
|
|
12488
|
+
"@north-light/api": "0.3.545",
|
|
12489
|
+
"@north-light/identity": "0.3.545",
|
|
12490
|
+
"@north-light/plugin": "0.3.545",
|
|
12490
12491
|
"jose": "^6.2.1"
|
|
12491
12492
|
},
|
|
12492
12493
|
"bin": {
|