From 53d2bca83e70eed1d4b973476b502e7b3892e2f6 Mon Sep 17 00:00:00 2001 From: os-zhuang Date: Tue, 16 Jun 2026 15:40:46 +0800 Subject: [PATCH] chore(deps): upgrade @objectstack to 9.7.0 and bump ObjectOS One to 9.7.0 Bump all @objectstack/* dependencies in @objectos/server from ^8.0.1 to ^9.7.0 and refresh the lockfile. 9.0 is a major, but the break is on the authoring surface (analytics single-form cutover + chart-taxonomy prune, ADR-0021), not the runtime: createStandaloneStack({ artifactPath, environmentId, databaseUrl }) is byte-for-byte the same contract across 9.x, so apps/objectos/objectstack.config.ts needs no migration. type-check passes; the smoke runtime boots clean on 9.7.0 (server ready, HTTP serving). Propagate the resolved cli version (9.7.0) to apps/objectos-one package.json, tauri.conf.json and Cargo.toml via sync-version, and the Cargo.lock objectos-one entry. Docs: scan the framework changelogs (8.0.1 -> 9.7.0) and the recent docs-vs-implementation sync, then update the official site to match the real surface. Changelog gains a 9.x highlights train (analytics datasets, stricter os compile validation, number-field formulas, REST apiEnabled/apiMethods, book navigation, os package install, approvals, webhook triggers, notification retention, bundled AI SDKs) and refreshed version/support tables. environment-variables gains an Observability section (OS_OBS_EXPORTER / OS_OTLP_ENDPOINT, replacing the wrong OTEL_EXPORTER_OTLP_ENDPOINT) and a settings-namespace OS__ override section. Confirmed factual fixes: observability OTLP vars, cel no-longer-silent failure, dead field-type names (attachment -> file, rollup -> summary, autoNumber -> autonumber), new secret type + trackHistory replacing pruned auditTrail/encryptionConfig/maskingRule, and object-level REST gating. English + all six translations (de/es/fr/ja/ko/zh-Hans); apps/docs type-check (fumadocs-mdx + tsc) passes. Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/objectos-one/package.json | 2 +- apps/objectos-one/src-tauri/Cargo.lock | 2 +- apps/objectos-one/src-tauri/Cargo.toml | 2 +- apps/objectos-one/src-tauri/tauri.conf.json | 2 +- apps/objectos/package.json | 16 +- content/docs/build/data-model.de.mdx | 8 +- content/docs/build/data-model.es.mdx | 8 +- content/docs/build/data-model.fr.mdx | 8 +- content/docs/build/data-model.ja.mdx | 8 +- content/docs/build/data-model.ko.mdx | 8 +- content/docs/build/data-model.mdx | 8 +- content/docs/build/data-model.zh-Hans.mdx | 8 +- content/docs/configure/api-access.de.mdx | 13 + content/docs/configure/api-access.es.mdx | 14 + content/docs/configure/api-access.fr.mdx | 14 + content/docs/configure/api-access.ja.mdx | 12 + content/docs/configure/api-access.ko.mdx | 13 + content/docs/configure/api-access.mdx | 12 + content/docs/configure/api-access.zh-Hans.mdx | 10 + content/docs/configure/storage.de.mdx | 2 +- content/docs/configure/storage.es.mdx | 2 +- content/docs/configure/storage.fr.mdx | 2 +- content/docs/configure/storage.ja.mdx | 2 +- content/docs/configure/storage.ko.mdx | 2 +- content/docs/configure/storage.mdx | 2 +- content/docs/configure/storage.zh-Hans.mdx | 2 +- content/docs/operate/observability.de.mdx | 9 +- content/docs/operate/observability.es.mdx | 9 +- content/docs/operate/observability.fr.mdx | 11 +- content/docs/operate/observability.ja.mdx | 9 +- content/docs/operate/observability.ko.mdx | 10 +- content/docs/operate/observability.mdx | 9 +- .../docs/operate/observability.zh-Hans.mdx | 8 +- content/docs/reference/cel.de.mdx | 11 +- content/docs/reference/cel.es.mdx | 11 +- content/docs/reference/cel.fr.mdx | 11 +- content/docs/reference/cel.ja.mdx | 7 +- content/docs/reference/cel.ko.mdx | 8 +- content/docs/reference/cel.mdx | 8 +- content/docs/reference/cel.zh-Hans.mdx | 2 +- .../reference/environment-variables.de.mdx | 37 +- .../reference/environment-variables.es.mdx | 38 +- .../reference/environment-variables.fr.mdx | 30 +- .../reference/environment-variables.ja.mdx | 32 +- .../reference/environment-variables.ko.mdx | 34 +- .../docs/reference/environment-variables.mdx | 35 +- .../environment-variables.zh-Hans.mdx | 21 +- content/docs/reference/field-types.de.mdx | 9 +- content/docs/reference/field-types.es.mdx | 9 +- content/docs/reference/field-types.fr.mdx | 9 +- content/docs/reference/field-types.ja.mdx | 9 +- content/docs/reference/field-types.ko.mdx | 9 +- content/docs/reference/field-types.mdx | 9 +- .../docs/reference/field-types.zh-Hans.mdx | 9 +- content/docs/reference/rest-api.de.mdx | 35 + content/docs/reference/rest-api.es.mdx | 34 + content/docs/reference/rest-api.fr.mdx | 35 + content/docs/reference/rest-api.ja.mdx | 32 + content/docs/reference/rest-api.ko.mdx | 32 + content/docs/reference/rest-api.mdx | 32 + content/docs/reference/rest-api.zh-Hans.mdx | 26 + content/docs/resources/changelog.de.mdx | 75 +- content/docs/resources/changelog.es.mdx | 78 +- content/docs/resources/changelog.fr.mdx | 79 +- content/docs/resources/changelog.ja.mdx | 69 +- content/docs/resources/changelog.ko.mdx | 68 +- content/docs/resources/changelog.mdx | 73 +- content/docs/resources/changelog.zh-Hans.mdx | 68 +- content/docs/resources/glossary.de.mdx | 4 +- content/docs/resources/glossary.es.mdx | 4 +- content/docs/resources/glossary.fr.mdx | 4 +- content/docs/resources/glossary.ja.mdx | 2 +- content/docs/resources/glossary.ko.mdx | 4 +- content/docs/resources/glossary.mdx | 4 +- content/docs/resources/glossary.zh-Hans.mdx | 4 +- pnpm-lock.yaml | 1329 +++++++++++------ 76 files changed, 1982 insertions(+), 704 deletions(-) diff --git a/apps/objectos-one/package.json b/apps/objectos-one/package.json index a0c2752..1d8222c 100644 --- a/apps/objectos-one/package.json +++ b/apps/objectos-one/package.json @@ -1,6 +1,6 @@ { "name": "@objectos/one", - "version": "8.0.1", + "version": "9.7.0", "private": true, "license": "Apache-2.0", "description": "ObjectOS One — all-in-one local distribution (Tauri shell + bundled Node runtime + DB).", diff --git a/apps/objectos-one/src-tauri/Cargo.lock b/apps/objectos-one/src-tauri/Cargo.lock index 823b581..a608805 100644 --- a/apps/objectos-one/src-tauri/Cargo.lock +++ b/apps/objectos-one/src-tauri/Cargo.lock @@ -2470,7 +2470,7 @@ dependencies = [ [[package]] name = "objectos-one" -version = "8.0.1" +version = "9.7.0" dependencies = [ "dirs 5.0.1", "libc", diff --git a/apps/objectos-one/src-tauri/Cargo.toml b/apps/objectos-one/src-tauri/Cargo.toml index 898aa94..fde480b 100644 --- a/apps/objectos-one/src-tauri/Cargo.toml +++ b/apps/objectos-one/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "objectos-one" -version = "8.0.1" +version = "9.7.0" description = "ObjectOS One shell" edition = "2021" rust-version = "1.77" diff --git a/apps/objectos-one/src-tauri/tauri.conf.json b/apps/objectos-one/src-tauri/tauri.conf.json index 57198a3..5e02e7e 100644 --- a/apps/objectos-one/src-tauri/tauri.conf.json +++ b/apps/objectos-one/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "ObjectOS", - "version": "8.0.1", + "version": "9.7.0", "identifier": "ai.objectstack.objectos", "build": { "frontendDist": "../src", diff --git a/apps/objectos/package.json b/apps/objectos/package.json index a1ae885..b4ee72f 100644 --- a/apps/objectos/package.json +++ b/apps/objectos/package.json @@ -13,14 +13,14 @@ "type-check": "tsc --noEmit" }, "dependencies": { - "@objectstack/cli": "^8.0.1", - "@objectstack/core": "^8.0.1", - "@objectstack/driver-memory": "^8.0.1", - "@objectstack/driver-sql": "^8.0.1", - "@objectstack/metadata": "^8.0.1", - "@objectstack/objectql": "^8.0.1", - "@objectstack/runtime": "^8.0.1", - "@objectstack/spec": "^8.0.1" + "@objectstack/cli": "^9.7.0", + "@objectstack/core": "^9.7.0", + "@objectstack/driver-memory": "^9.7.0", + "@objectstack/driver-sql": "^9.7.0", + "@objectstack/metadata": "^9.7.0", + "@objectstack/objectql": "^9.7.0", + "@objectstack/runtime": "^9.7.0", + "@objectstack/spec": "^9.7.0" }, "devDependencies": { "@types/node": "^25.9.1", diff --git a/content/docs/build/data-model.de.mdx b/content/docs/build/data-model.de.mdx index 1c34dd1..18be05c 100644 --- a/content/docs/build/data-model.de.mdx +++ b/content/docs/build/data-model.de.mdx @@ -119,16 +119,16 @@ ObjectStack liefert ~25 Feldtypen. Die am häufigsten verwendeten: | Typ | Was es speichert | |---|---| -| `attachment` | Eine Datei über den Speicherdienst | -| `image` | Bildanhang mit Vorschau | +| `file` | Eine Datei über den Speicherdienst | +| `image` | Bilddatei mit Vorschau | ### Berechnet / abgeleitet | Typ | Verhalten | |---|---| | `formula` | Beim Lesen aus einem CEL-Ausdruck berechnet | -| `rollup` | Aggregat verknüpfter Datensätze (Summe/Anzahl/Durchschnitt) | -| `autoNumber` | Sequenz (`INV-{000001}`) | +| `summary` | Aggregat verknüpfter Datensätze (Summe/Anzahl/Durchschnitt) | +| `autonumber` | Sequenz (`INV-{000001}`) | | `created`, `lastModified` | Systemgepflegte Zeitstempel | | `createdBy`, `lastModifiedBy` | Systemgepflegte Benutzerreferenzen | diff --git a/content/docs/build/data-model.es.mdx b/content/docs/build/data-model.es.mdx index c7032a9..6cfe869 100644 --- a/content/docs/build/data-model.es.mdx +++ b/content/docs/build/data-model.es.mdx @@ -118,16 +118,16 @@ ObjectStack incluye unos 25 tipos de campo. Los más usados: | Tipo | Qué almacena | |---|---| -| `attachment` | Un archivo mediante el servicio de almacenamiento | -| `image` | Adjunto de imagen con vista previa | +| `file` | Un archivo mediante el servicio de almacenamiento | +| `image` | Archivo de imagen con vista previa | ### Calculados / derivados | Tipo | Comportamiento | |---|---| | `formula` | Calculado en el momento de la lectura a partir de una expresión CEL | -| `rollup` | Agregado de registros relacionados (suma/recuento/promedio) | -| `autoNumber` | Secuencia (`INV-{000001}`) | +| `summary` | Agregado de registros relacionados (suma/recuento/promedio) | +| `autonumber` | Secuencia (`INV-{000001}`) | | `created`, `lastModified` | Marcas de tiempo mantenidas por el sistema | | `createdBy`, `lastModifiedBy` | Referencias de usuario mantenidas por el sistema | diff --git a/content/docs/build/data-model.fr.mdx b/content/docs/build/data-model.fr.mdx index ad7abb2..14be0a5 100644 --- a/content/docs/build/data-model.fr.mdx +++ b/content/docs/build/data-model.fr.mdx @@ -119,16 +119,16 @@ ObjectStack fournit environ 25 types de champs. Les plus utilisés : | Type | Ce qu'il stocke | |---|---| -| `attachment` | Un fichier via le service de stockage | -| `image` | Pièce jointe image avec aperçu | +| `file` | Un fichier via le service de stockage | +| `image` | Fichier image avec aperçu | ### Calculé / dérivé | Type | Comportement | |---|---| | `formula` | Calculé à la lecture à partir d'une expression CEL | -| `rollup` | Agrégat d'enregistrements liés (somme/nombre/moyenne) | -| `autoNumber` | Séquence (`INV-{000001}`) | +| `summary` | Agrégat d'enregistrements liés (somme/nombre/moyenne) | +| `autonumber` | Séquence (`INV-{000001}`) | | `created`, `lastModified` | Horodatages gérés par le système | | `createdBy`, `lastModifiedBy` | Références utilisateur gérées par le système | diff --git a/content/docs/build/data-model.ja.mdx b/content/docs/build/data-model.ja.mdx index 81d23cb..7bb5bc8 100644 --- a/content/docs/build/data-model.ja.mdx +++ b/content/docs/build/data-model.ja.mdx @@ -119,16 +119,16 @@ ObjectStack には約 25 種類のフィールドタイプが付属します。 | タイプ | 格納する内容 | |---|---| -| `attachment` | ストレージサービス経由の単一ファイル | -| `image` | プレビュー付きの画像添付 | +| `file` | ストレージサービス経由の単一ファイル | +| `image` | プレビュー付きの画像ファイル | ### 計算 / 派生 | タイプ | 動作 | |---|---| | `formula` | CEL 式から読み取り時に計算 | -| `rollup` | 関連レコードの集計(sum/count/avg) | -| `autoNumber` | シーケンス(`INV-{000001}`) | +| `summary` | 関連レコードの集計(sum/count/avg) | +| `autonumber` | シーケンス(`INV-{000001}`) | | `created`, `lastModified` | システムが保守するタイムスタンプ | | `createdBy`, `lastModifiedBy` | システムが保守するユーザー参照 | diff --git a/content/docs/build/data-model.ko.mdx b/content/docs/build/data-model.ko.mdx index fbeda65..d9cdcbd 100644 --- a/content/docs/build/data-model.ko.mdx +++ b/content/docs/build/data-model.ko.mdx @@ -117,16 +117,16 @@ ObjectStack은 약 25가지 필드 타입을 제공합니다. 가장 많이 사 | 타입 | 저장하는 것 | |---|---| -| `attachment` | 스토리지 서비스를 통한 단일 파일 | -| `image` | 미리보기가 있는 이미지 첨부 | +| `file` | 스토리지 서비스를 통한 단일 파일 | +| `image` | 미리보기가 있는 이미지 파일 | ### 계산 / 파생 | 타입 | 동작 | |---|---| | `formula` | CEL 표현식으로부터 읽기 시점에 계산됨 | -| `rollup` | 연관 레코드의 집계 (합계/개수/평균) | -| `autoNumber` | 시퀀스 (`INV-{000001}`) | +| `summary` | 연관 레코드의 집계 (합계/개수/평균) | +| `autonumber` | 시퀀스 (`INV-{000001}`) | | `created`, `lastModified` | 시스템이 관리하는 타임스탬프 | | `createdBy`, `lastModifiedBy` | 시스템이 관리하는 사용자 참조 | diff --git a/content/docs/build/data-model.mdx b/content/docs/build/data-model.mdx index c4b03d2..a256cbd 100644 --- a/content/docs/build/data-model.mdx +++ b/content/docs/build/data-model.mdx @@ -117,16 +117,16 @@ ObjectStack ships ~25 field types. The most-used ones: | Type | What it stores | |---|---| -| `attachment` | One file via the storage service | -| `image` | Image attachment with preview | +| `file` | One file via the storage service | +| `image` | Image file with preview | ### Computed / derived | Type | Behavior | |---|---| | `formula` | Computed at read time from a CEL expression | -| `rollup` | Aggregate of related records (sum/count/avg) | -| `autoNumber` | Sequence (`INV-{000001}`) | +| `summary` | Aggregate of related records (sum/count/avg) | +| `autonumber` | Sequence (`INV-{000001}`) | | `created`, `lastModified` | System-maintained timestamps | | `createdBy`, `lastModifiedBy` | System-maintained user refs | diff --git a/content/docs/build/data-model.zh-Hans.mdx b/content/docs/build/data-model.zh-Hans.mdx index be1ea48..79412e0 100644 --- a/content/docs/build/data-model.zh-Hans.mdx +++ b/content/docs/build/data-model.zh-Hans.mdx @@ -109,16 +109,16 @@ ObjectStack 自带约 25 种字段类型。最常用的: | 类型 | 存什么 | |---|---| -| `attachment` | 通过存储服务保存的一个文件 | -| `image` | 带预览的图片附件 | +| `file` | 通过存储服务保存的一个文件 | +| `image` | 带预览的图片文件 | ### 计算 / 派生 | 类型 | 行为 | |---|---| | `formula` | 读时按 CEL 表达式计算 | -| `rollup` | 关联记录的聚合(sum/count/avg) | -| `autoNumber` | 序列号(`INV-{000001}`) | +| `summary` | 关联记录的聚合(sum/count/avg) | +| `autonumber` | 序列号(`INV-{000001}`) | | `created`、`lastModified` | 系统维护的时间戳 | | `createdBy`、`lastModifiedBy` | 系统维护的用户引用 | diff --git a/content/docs/configure/api-access.de.mdx b/content/docs/configure/api-access.de.mdx index 40e4c12..bf9be7e 100644 --- a/content/docs/configure/api-access.de.mdx +++ b/content/docs/configure/api-access.de.mdx @@ -32,6 +32,19 @@ Wichtige Schnittstellen: Das Präfix lautet standardmäßig `/api/v1` (der API-`basePath` von `/api` plus die `version` `v1`) und ist im ObjectOS-Stack konfigurierbar. +## Steuern, was offengelegt wird + +Die API-Offenlegung wird pro Objekt im Artefakt gesteuert, nicht am Gateway: + +- Setzen Sie `apiEnabled: false` auf einem Objekt, um es vollständig von der + REST-Oberfläche fernzuhalten (seine Routen liefern 404). +- Setzen Sie eine `apiMethods`-Whitelist (z. B. `['get', 'list']`), um ein + Objekt schreibgeschützt zu machen oder anderweitig einzuschränken, welche + Operationen erreichbar sind. + +Beide werden auf der REST-Ebene durchgesetzt — siehe +[REST-API → API-Oberfläche einschränken](/docs/reference/rest-api#restricting-the-api-surface). + ## Authentifizierungsoptionen Aufrufer können sich auf drei Arten authentifizieren: diff --git a/content/docs/configure/api-access.es.mdx b/content/docs/configure/api-access.es.mdx index f0de6c0..b13ffc5 100644 --- a/content/docs/configure/api-access.es.mdx +++ b/content/docs/configure/api-access.es.mdx @@ -32,6 +32,20 @@ Superficies destacadas: El prefijo es `/api/v1` de forma predeterminada (el `basePath` de la API, `/api`, más la `version`, `v1`) y es configurable en el stack de ObjectOS. +## Controlar qué se expone + +La exposición de la API se gobierna por objeto en el artefacto, no en la puerta +de enlace: + +- Establece `apiEnabled: false` en un objeto para mantenerlo fuera de la + superficie REST por completo (sus rutas devuelven 404). +- Establece una lista blanca `apiMethods` (p. ej. `['get', 'list']`) para hacer + un objeto de solo lectura o restringir de otro modo qué operaciones son + accesibles. + +Ambos se aplican en la capa REST; consulta +[API REST → Restringir la superficie de la API](/docs/reference/rest-api#restricting-the-api-surface). + ## Opciones de autenticación Los clientes pueden autenticarse de tres maneras: diff --git a/content/docs/configure/api-access.fr.mdx b/content/docs/configure/api-access.fr.mdx index 6330229..241fbea 100644 --- a/content/docs/configure/api-access.fr.mdx +++ b/content/docs/configure/api-access.fr.mdx @@ -32,6 +32,20 @@ Surfaces notables : Le préfixe est `/api/v1` par défaut (le `basePath` de l'API `/api` plus la `version` `v1`) et il est configurable sur la stack ObjectOS. +## Contrôler ce qui est exposé + +L'exposition de l'API est gouvernée par objet dans l'artefact, et non au niveau +de la passerelle : + +- Définissez `apiEnabled: false` sur un objet pour le garder entièrement hors de + la surface REST (ses routes renvoient 404). +- Définissez une liste blanche `apiMethods` (par ex. `['get', 'list']`) pour + rendre un objet en lecture seule ou restreindre autrement les opérations + accessibles. + +Les deux sont appliqués au niveau de la couche REST — voir +[API REST → Restreindre la surface d'API](/docs/reference/rest-api#restricting-the-api-surface). + ## Options d'authentification Les appelants peuvent s'authentifier de trois façons : diff --git a/content/docs/configure/api-access.ja.mdx b/content/docs/configure/api-access.ja.mdx index 6ed5f05..541b4f0 100644 --- a/content/docs/configure/api-access.ja.mdx +++ b/content/docs/configure/api-access.ja.mdx @@ -31,6 +31,18 @@ https:///api/v1 プレフィックスのデフォルトは `/api/v1`(API の `basePath` である `/api` と `version` である `v1` の組み合わせ)で、ObjectOS スタック上で構成可能です。 +## 公開範囲の制御 + +API の公開はゲートウェイではなく、アーティファクト内のオブジェクト単位で制御されます: + +- オブジェクトに `apiEnabled: false` を設定すると、REST 表面から完全に外れます + (そのルートは 404 になります)。 +- `apiMethods` ホワイトリスト(例: `['get', 'list']`)を設定すると、オブジェクトを + 読み取り専用にしたり、到達可能な操作を制限したりできます。 + +どちらも REST レイヤーで強制適用されます。 +[REST API → API 表面の制限](/docs/reference/rest-api#restricting-the-api-surface) を参照してください。 + ## 認証オプション 呼び出し元は次の 3 つの方法で認証できます: diff --git a/content/docs/configure/api-access.ko.mdx b/content/docs/configure/api-access.ko.mdx index 525c209..503cda1 100644 --- a/content/docs/configure/api-access.ko.mdx +++ b/content/docs/configure/api-access.ko.mdx @@ -31,6 +31,19 @@ https:///api/v1 접두사는 기본적으로 `/api/v1`(API `basePath`인 `/api`에 `version`인 `v1`을 더한 값)이며 ObjectOS 스택에서 구성할 수 있습니다. +## 노출 대상 제어 + +API 노출은 게이트웨이가 아니라 아티팩트 안에서 객체 단위로 제어됩니다: + +- 객체에 `apiEnabled: false`를 설정하면 REST 표면에서 완전히 제외됩니다(해당 + 라우트는 404). +- `apiMethods` 화이트리스트(예: `['get', 'list']`)를 설정하면 객체를 읽기 전용으로 + 만들거나 도달 가능한 작업을 그 밖의 방식으로 제한할 수 있습니다. + +이 둘은 REST 계층에서 강제됩니다 — +[REST API → Restricting the API surface](/docs/reference/rest-api#restricting-the-api-surface)을 +참조하세요. + ## 인증 옵션 호출자는 세 가지 방식으로 인증할 수 있습니다. diff --git a/content/docs/configure/api-access.mdx b/content/docs/configure/api-access.mdx index 7dabb13..36528b0 100644 --- a/content/docs/configure/api-access.mdx +++ b/content/docs/configure/api-access.mdx @@ -31,6 +31,18 @@ Notable surfaces: The prefix defaults to `/api/v1` (the API `basePath` of `/api` plus the `version` of `v1`) and is configurable on the ObjectOS stack. +## Controlling what's exposed + +API exposure is governed per object in the artifact, not at the gateway: + +- Set `apiEnabled: false` on an object to keep it off the REST surface + entirely (its routes 404). +- Set an `apiMethods` whitelist (e.g. `['get', 'list']`) to make an object + read-only or otherwise restrict which operations are reachable. + +Both are enforced at the REST layer — see +[REST API → Restricting the API surface](/docs/reference/rest-api#restricting-the-api-surface). + ## Authentication options Callers can authenticate in three ways: diff --git a/content/docs/configure/api-access.zh-Hans.mdx b/content/docs/configure/api-access.zh-Hans.mdx index ff803e2..a7daa36 100644 --- a/content/docs/configure/api-access.zh-Hans.mdx +++ b/content/docs/configure/api-access.zh-Hans.mdx @@ -28,6 +28,16 @@ https:///api/v1 前缀默认为 `/api/v1`(即 API 的 `basePath` `/api` 加上 `version` `v1`),并且可在 ObjectOS stack 上配置。 +## 控制暴露的内容 + +API 暴露在 artifact 中按对象逐个治理,而不是在网关层: + +- 在对象上设置 `apiEnabled: false`,使其完全不出现在 REST 面上(其路由返回 404)。 +- 设置 `apiMethods` 白名单(例如 `['get', 'list']`),将对象设为只读或以其他方式限制哪些操作可达。 + +两者都在 REST 层强制执行 —— 参见 +[REST API → 限制 API 暴露面](/docs/reference/rest-api#restricting-the-api-surface)。 + ## 身份验证方式 调用方可以通过三种方式进行身份验证: diff --git a/content/docs/configure/storage.de.mdx b/content/docs/configure/storage.de.mdx index 5d6fdf3..7e4d1af 100644 --- a/content/docs/configure/storage.de.mdx +++ b/content/docs/configure/storage.de.mdx @@ -18,7 +18,7 @@ in Standalone- und Projekt-Boots standardmäßig aktiviert. |---|---| | Console Datei-/Bildfelder | Der Browser lädt über vorab signierte URLs direkt in den Speicher hoch | | REST `/api/v1/storage/*` | Programmatische Upload-/Download-Endpunkte | -| Objektfelder `attachment` / `image` | Werden als Upload-Widgets gerendert; Metadaten bleiben in `sys_file` erhalten | +| Objektfelder `file` / `image` | Werden als Upload-Widgets gerendert; Metadaten bleiben in `sys_file` erhalten | Dateien werden im Systemobjekt `sys_file` nachverfolgt — niemals als rohe Pfade in Ihren Datensätzen. Das entkoppelt Ihr Datenmodell vom diff --git a/content/docs/configure/storage.es.mdx b/content/docs/configure/storage.es.mdx index c52a81d..8d793c0 100644 --- a/content/docs/configure/storage.es.mdx +++ b/content/docs/configure/storage.es.mdx @@ -18,7 +18,7 @@ habilitado de forma predeterminada en los arranques standalone y de proyecto. |---|---| | Campos de archivo/imagen de Console | El navegador carga directamente al almacenamiento mediante URLs prefirmadas | | REST `/api/v1/storage/*` | Endpoints de carga/descarga programáticos | -| Campos `attachment` / `image` de objetos | Se renderizan como widgets de carga; los metadatos persisten en `sys_file` | +| Campos `file` / `image` de objetos | Se renderizan como widgets de carga; los metadatos persisten en `sys_file` | Los archivos se rastrean en el objeto de sistema `sys_file` — nunca como rutas sin procesar en tus registros. Eso desacopla tu modelo de datos del diff --git a/content/docs/configure/storage.fr.mdx b/content/docs/configure/storage.fr.mdx index 6a3ced4..2368b20 100644 --- a/content/docs/configure/storage.fr.mdx +++ b/content/docs/configure/storage.fr.mdx @@ -19,7 +19,7 @@ défaut lors des démarrages autonomes et de projet. |---|---| | Champs de fichier/image de la Console | Le navigateur téléverse directement vers le stockage via des URL présignées | | REST `/api/v1/storage/*` | Points de terminaison programmatiques de téléversement/téléchargement | -| Champs `attachment` / `image` d'objet | Rendus sous forme de widgets de téléversement ; les métadonnées sont conservées dans `sys_file` | +| Champs `file` / `image` d'objet | Rendus sous forme de widgets de téléversement ; les métadonnées sont conservées dans `sys_file` | Les fichiers sont suivis dans l'objet système `sys_file` — jamais sous forme de chemins bruts dans vos enregistrements. Cela découple votre modèle de diff --git a/content/docs/configure/storage.ja.mdx b/content/docs/configure/storage.ja.mdx index 42a15b7..2eff248 100644 --- a/content/docs/configure/storage.ja.mdx +++ b/content/docs/configure/storage.ja.mdx @@ -19,7 +19,7 @@ ObjectOS のファイル(添付ファイル、アップロード、生成さ |---|---| | Console のファイル / 画像フィールド | ブラウザが署名付き URL を介してストレージへ直接アップロード | | REST `/api/v1/storage/*` | プログラムによるアップロード / ダウンロードのエンドポイント | -| オブジェクトの `attachment` / `image` フィールド | アップロードウィジェットとして描画され、メタデータは `sys_file` に永続化される | +| オブジェクトの `file` / `image` フィールド | アップロードウィジェットとして描画され、メタデータは `sys_file` に永続化される | ファイルは `sys_file` システムオブジェクトで追跡されます。レコード内に 生のパスとして保存されることはありません。これにより、データモデルが diff --git a/content/docs/configure/storage.ko.mdx b/content/docs/configure/storage.ko.mdx index b736aed..df99dbf 100644 --- a/content/docs/configure/storage.ko.mdx +++ b/content/docs/configure/storage.ko.mdx @@ -18,7 +18,7 @@ standalone 및 프로젝트 부팅 시 기본적으로 활성화됩니다. |---|---| | Console 파일/이미지 필드 | 브라우저가 presigned URL을 통해 스토리지로 직접 업로드 | | REST `/api/v1/storage/*` | 프로그래밍 방식의 업로드/다운로드 엔드포인트 | -| 객체 `attachment` / `image` 필드 | 업로드 위젯으로 렌더링되며, 메타데이터는 `sys_file`에 유지됨 | +| 객체 `file` / `image` 필드 | 업로드 위젯으로 렌더링되며, 메타데이터는 `sys_file`에 유지됨 | 파일은 레코드에 원시 경로로 저장되는 것이 아니라 `sys_file` 시스템 객체에서 추적됩니다. 이를 통해 데이터 모델이 스토리지 백엔드로부터 분리됩니다. diff --git a/content/docs/configure/storage.mdx b/content/docs/configure/storage.mdx index d892eaf..71bc4f2 100644 --- a/content/docs/configure/storage.mdx +++ b/content/docs/configure/storage.mdx @@ -18,7 +18,7 @@ enabled by default in standalone and project boots. |---|---| | Console file/image fields | Browser uploads directly to storage via presigned URLs | | REST `/api/v1/storage/*` | Programmatic upload/download endpoints | -| Object `attachment` / `image` fields | Render as upload widgets; metadata persists in `sys_file` | +| Object `file` / `image` fields | Render as upload widgets; metadata persists in `sys_file` | Files are tracked in the `sys_file` system object — never as raw paths in your records. That decouples your data model from the storage diff --git a/content/docs/configure/storage.zh-Hans.mdx b/content/docs/configure/storage.zh-Hans.mdx index 5dd3cb4..ab62ea4 100644 --- a/content/docs/configure/storage.zh-Hans.mdx +++ b/content/docs/configure/storage.zh-Hans.mdx @@ -15,7 +15,7 @@ ObjectOS 的文件(附件、上传内容、生成的文档)会经过**存储 |---|---| | Console 文件/图片字段 | 浏览器通过预签名 URL 直接上传到存储 | | REST `/api/v1/storage/*` | 编程式上传/下载端点 | -| 对象 `attachment` / `image` 字段 | 渲染为上传控件;元数据持久化在 `sys_file` | +| 对象 `file` / `image` 字段 | 渲染为上传控件;元数据持久化在 `sys_file` | 文件以 `sys_file` 系统对象进行追踪,而非以原始路径出现在你的记录中。这让你的数据模型与存储后端解耦。 diff --git a/content/docs/operate/observability.de.mdx b/content/docs/operate/observability.de.mdx index b40ba16..bbd82cf 100644 --- a/content/docs/operate/observability.de.mdx +++ b/content/docs/operate/observability.de.mdx @@ -83,8 +83,13 @@ groups: summary: "Frequent project kernel cold starts — consider raising OS_KERNEL_CACHE_SIZE" ``` -Für OpenTelemetry setzen Sie `OTEL_EXPORTER_OTLP_ENDPOINT`, und ObjectOS gibt -Traces und Metriken im OTLP-Format aus. Die Struktur der Spans entspricht dem +Für OpenTelemetry setzen Sie `OS_OBS_EXPORTER=otlp` **und** `OS_OTLP_ENDPOINT` +(z. B. `https:///otlp`), und ObjectOS gibt Traces und Metriken im +OTLP-Format aus. Der Exporter ist standardmäßig `noop` (keine Laufzeitkosten), +also ist der OTLP-Export opt-in — wird ein Endpunkt ohne `OS_OBS_EXPORTER=otlp` +gesetzt, wird nichts ausgegeben. Verwenden Sie `OS_OBS_EXPORTER=console` oder +`json` für lokales Debugging und `OS_OBS_DEPLOYMENT_ENV`, um das Deployment zu +kennzeichnen (Standard `production`). Die Struktur der Spans entspricht dem [Request-Ablauf](/docs/architecture#how-a-request-is-served). ## Audit-Logs diff --git a/content/docs/operate/observability.es.mdx b/content/docs/operate/observability.es.mdx index 84d5054..5875891 100644 --- a/content/docs/operate/observability.es.mdx +++ b/content/docs/operate/observability.es.mdx @@ -83,8 +83,13 @@ groups: summary: "Frequent project kernel cold starts — consider raising OS_KERNEL_CACHE_SIZE" ``` -Para OpenTelemetry, establece `OTEL_EXPORTER_OTLP_ENDPOINT` y ObjectOS -emitirá trazas y métricas en formato OTLP. La forma de los spans coincide con el +Para OpenTelemetry, establece `OS_OBS_EXPORTER=otlp` **y** `OS_OTLP_ENDPOINT` +(p. ej. `https:///otlp`) y ObjectOS emitirá trazas y métricas en +formato OTLP. El exportador es `noop` por defecto (coste cero en tiempo de +ejecución), por lo que la exportación OTLP es opcional: establecer un endpoint +sin `OS_OBS_EXPORTER=otlp` no emite nada. Usa `OS_OBS_EXPORTER=console` o `json` +para depuración local, y `OS_OBS_DEPLOYMENT_ENV` para etiquetar el despliegue +(por defecto `production`). La forma de los spans coincide con el [flujo de la solicitud](/docs/architecture#how-a-request-is-served). ## Registros de auditoría diff --git a/content/docs/operate/observability.fr.mdx b/content/docs/operate/observability.fr.mdx index 7678a69..e6a5d20 100644 --- a/content/docs/operate/observability.fr.mdx +++ b/content/docs/operate/observability.fr.mdx @@ -84,9 +84,14 @@ groups: summary: "Frequent project kernel cold starts — consider raising OS_KERNEL_CACHE_SIZE" ``` -Pour OpenTelemetry, définissez `OTEL_EXPORTER_OTLP_ENDPOINT` et ObjectOS -émettra les traces et les métriques au format OTLP. La forme des spans -correspond au [flux de requête](/docs/architecture#how-a-request-is-served). +Pour OpenTelemetry, définissez `OS_OBS_EXPORTER=otlp` **et** `OS_OTLP_ENDPOINT` +(par ex. `https:///otlp`) et ObjectOS émettra les traces et les +métriques au format OTLP. L'exporteur a pour valeur par défaut `noop` (coût +d'exécution nul), de sorte que l'export OTLP est opt-in — définir un endpoint +sans `OS_OBS_EXPORTER=otlp` n'émet rien. Utilisez `OS_OBS_EXPORTER=console` ou +`json` pour le débogage local, et `OS_OBS_DEPLOYMENT_ENV` pour étiqueter le +déploiement (par défaut `production`). La forme des spans correspond au +[flux de requête](/docs/architecture#how-a-request-is-served). ## Journaux d'audit diff --git a/content/docs/operate/observability.ja.mdx b/content/docs/operate/observability.ja.mdx index 28edaff..f21a747 100644 --- a/content/docs/operate/observability.ja.mdx +++ b/content/docs/operate/observability.ja.mdx @@ -84,8 +84,13 @@ groups: summary: "Frequent project kernel cold starts — consider raising OS_KERNEL_CACHE_SIZE" ``` -OpenTelemetry の場合は `OTEL_EXPORTER_OTLP_ENDPOINT` を設定すると、ObjectOS は -OTLP 形式でトレースとメトリクスを送信します。スパンの形状は +OpenTelemetry の場合は `OS_OBS_EXPORTER=otlp` **と** `OS_OTLP_ENDPOINT` +(例: `https:///otlp`)を設定すると、ObjectOS は OTLP 形式でトレースと +メトリクスを送信します。エクスポーターのデフォルトは `noop`(ランタイムコストはゼロ)のため、 +OTLP エクスポートはオプトインです——`OS_OBS_EXPORTER=otlp` なしでエンドポイントだけを設定しても +何も出力されません。ローカルデバッグには `OS_OBS_EXPORTER=console` または `json` を使用し、 +デプロイメントにタグを付けるには `OS_OBS_DEPLOYMENT_ENV`(デフォルトは `production`)を使用します。 +スパンの形状は [リクエストフロー](/docs/architecture#how-a-request-is-served) に対応します。 ## 監査ログ diff --git a/content/docs/operate/observability.ko.mdx b/content/docs/operate/observability.ko.mdx index 60c4e5c..6012ac9 100644 --- a/content/docs/operate/observability.ko.mdx +++ b/content/docs/operate/observability.ko.mdx @@ -81,9 +81,13 @@ groups: summary: "Frequent project kernel cold starts — consider raising OS_KERNEL_CACHE_SIZE" ``` -OpenTelemetry의 경우 `OTEL_EXPORTER_OTLP_ENDPOINT`를 설정하면 ObjectOS가 OTLP -형식으로 트레이스와 메트릭을 내보냅니다. 스팬의 형태는 -[요청 흐름](/docs/architecture#how-a-request-is-served)과 일치합니다. +OpenTelemetry의 경우 `OS_OBS_EXPORTER=otlp`**와** `OS_OTLP_ENDPOINT` +(예: `https:///otlp`)를 설정하면 ObjectOS가 OTLP 형식으로 트레이스와 +메트릭을 내보냅니다. 익스포터의 기본값은 `noop`(런타임 비용 0)이므로 OTLP +내보내기는 옵트인입니다 — `OS_OBS_EXPORTER=otlp` 없이 엔드포인트만 설정하면 아무것도 +내보내지 않습니다. 로컬 디버깅에는 `OS_OBS_EXPORTER=console` 또는 `json`을, 배포에 +태그를 붙이려면 `OS_OBS_DEPLOYMENT_ENV`(기본값 `production`)를 사용하세요. 스팬의 +형태는 [요청 흐름](/docs/architecture#how-a-request-is-served)과 일치합니다. ## 감사 로그 diff --git a/content/docs/operate/observability.mdx b/content/docs/operate/observability.mdx index cb9e49a..d517a83 100644 --- a/content/docs/operate/observability.mdx +++ b/content/docs/operate/observability.mdx @@ -82,8 +82,13 @@ groups: summary: "Frequent project kernel cold starts — consider raising OS_KERNEL_CACHE_SIZE" ``` -For OpenTelemetry, set `OTEL_EXPORTER_OTLP_ENDPOINT` and ObjectOS will -emit traces and metrics in OTLP format. The shape of spans matches the +For OpenTelemetry, set `OS_OBS_EXPORTER=otlp` **and** `OS_OTLP_ENDPOINT` +(e.g. `https:///otlp`) and ObjectOS will emit traces and metrics +in OTLP format. The exporter defaults to `noop` (zero runtime cost), so OTLP +export is opt-in — setting an endpoint without `OS_OBS_EXPORTER=otlp` emits +nothing. Use `OS_OBS_EXPORTER=console` or `json` for local debugging, and +`OS_OBS_DEPLOYMENT_ENV` to tag the deployment (defaults to `production`). The +shape of spans matches the [request flow](/docs/architecture#how-a-request-is-served). ## Audit logs diff --git a/content/docs/operate/observability.zh-Hans.mdx b/content/docs/operate/observability.zh-Hans.mdx index 8e4d87c..5026aa6 100644 --- a/content/docs/operate/observability.zh-Hans.mdx +++ b/content/docs/operate/observability.zh-Hans.mdx @@ -80,8 +80,12 @@ groups: summary: "Frequent project kernel cold starts — consider raising OS_KERNEL_CACHE_SIZE" ``` -对于 OpenTelemetry,设置 `OTEL_EXPORTER_OTLP_ENDPOINT`,ObjectOS 会 -以 OTLP 格式发出 trace 与指标。span 的形状与 +对于 OpenTelemetry,设置 `OS_OBS_EXPORTER=otlp` **以及** `OS_OTLP_ENDPOINT` +(例如 `https:///otlp`),ObjectOS 会以 OTLP 格式发出 trace 与 +指标。导出器默认为 `noop`(运行时零成本),因此 OTLP 导出为按需启用 —— +仅设置端点而不设 `OS_OBS_EXPORTER=otlp` 不会发出任何数据。本地调试用 +`OS_OBS_EXPORTER=console` 或 `json`,用 `OS_OBS_DEPLOYMENT_ENV` 标记部署 +(默认 `production`)。span 的形状与 [请求流程](/docs/architecture#how-a-request-is-served)一致。 ## 审计日志 diff --git a/content/docs/reference/cel.de.mdx b/content/docs/reference/cel.de.mdx index 829cb96..69f7322 100644 --- a/content/docs/reference/cel.de.mdx +++ b/content/docs/reference/cel.de.mdx @@ -154,9 +154,14 @@ Ausdrücke werden zur Ladezeit kompiliert. Fehler erscheinen als { "code": "VALIDATION_ERROR", "message": "CEL: unknown field 'amout' on Record", "details": { "field": "subtotal", "expression": "record.amout * 0.1" } } ``` -Eine fehlgeschlagene Auswertung zur Laufzeit wird für Formelfelder als -`null` und für Prädikate als `false` behandelt, zusätzlich zu einem -Eintrag im Audit-Log. +Ungültige Ausdrücke **scheitern nicht stillschweigend**. Ein fehlerhafter +Ausdruck oder einer mit unbekanntem Feld lässt `os compile` mit der oben +gezeigten lokalisierten Meldung fehlschlagen (einschließlich eines +„Meinten Sie"-Hinweises bei einem falsch geschriebenen Feld). Zur Laufzeit +**wirft** ein fehlerhafter Ausdruck einen zugeordneten Fehler, anstatt +stillschweigend zu `null` oder `false` ausgewertet zu werden, sodass der +Fehler in den Logs und im Audit-Trail sichtbar ist, statt einen Formelwert +oder eine Guard-Entscheidung unbemerkt zu beschädigen. ## Siehe auch diff --git a/content/docs/reference/cel.es.mdx b/content/docs/reference/cel.es.mdx index 3c0c7fc..876394e 100644 --- a/content/docs/reference/cel.es.mdx +++ b/content/docs/reference/cel.es.mdx @@ -153,9 +153,14 @@ Las expresiones se compilan en el momento de la carga. Los fallos aparecen como { "code": "VALIDATION_ERROR", "message": "CEL: unknown field 'amout' on Record", "details": { "field": "subtotal", "expression": "record.amout * 0.1" } } ``` -Una evaluación fallida en tiempo de ejecución se trata como `null` para los -campos de fórmula y como `false` para los predicados, además de generar una -entrada en el registro de auditoría. +Las expresiones inválidas **no fallan en silencio**. Una expresión mal formada o +con un campo desconocido hace fallar `os compile` con el mensaje localizado de +arriba (incluida una sugerencia «quizás quisiste decir» para un campo mal +escrito). En tiempo de ejecución, una expresión incorrecta **lanza** un error +atribuido en lugar de evaluarse silenciosamente a `null` o `false`, de modo que +el fallo es visible en los logs y en el registro de auditoría en lugar de +corromper de forma silenciosa el valor de una fórmula o la decisión de una +guarda. ## Véase también diff --git a/content/docs/reference/cel.fr.mdx b/content/docs/reference/cel.fr.mdx index 9ec1d08..de701a9 100644 --- a/content/docs/reference/cel.fr.mdx +++ b/content/docs/reference/cel.fr.mdx @@ -156,9 +156,14 @@ apparaissent comme `VALIDATION_ERROR` avec l'emplacement source : { "code": "VALIDATION_ERROR", "message": "CEL: unknown field 'amout' on Record", "details": { "field": "subtotal", "expression": "record.amout * 0.1" } } ``` -Un échec d'évaluation au runtime est traité comme `null` pour les -champs de formule et `false` pour les prédicats, avec en plus une -entrée dans le journal d'audit. +Les expressions invalides **n'échouent pas silencieusement**. Une +expression mal formée ou comportant un champ inconnu fait échouer +`os compile` avec le message localisé ci-dessus (y compris une suggestion +« vouliez-vous dire » pour un champ mal orthographié). Au runtime, une +mauvaise expression **lève** une erreur attribuée plutôt que de s'évaluer +silencieusement à `null` ou `false`, de sorte que l'échec est visible dans +les journaux et la piste d'audit au lieu de corrompre discrètement la valeur +d'un formule ou la décision d'une garde. ## Voir aussi diff --git a/content/docs/reference/cel.ja.mdx b/content/docs/reference/cel.ja.mdx index 15b8645..6f207b6 100644 --- a/content/docs/reference/cel.ja.mdx +++ b/content/docs/reference/cel.ja.mdx @@ -145,8 +145,11 @@ CEL にはネイティブの `timestamp(...)`、`duration(...)`、 { "code": "VALIDATION_ERROR", "message": "CEL: unknown field 'amout' on Record", "details": { "field": "subtotal", "expression": "record.amout * 0.1" } } ``` -ランタイムでの評価失敗は、数式フィールドでは `null`、述語では `false` -として扱われ、あわせて監査ログにエントリが記録されます。 +無効な式は**暗黙的に失敗しません**。不正な式や未知のフィールドを参照する式は、 +上記の場所特定済みメッセージ(誤記したフィールドに対する did-you-mean ヒントを含む)とともに +`os compile` を失敗させます。ランタイムでは、不正な式は暗黙的に `null` や `false` に +評価されるのではなく、帰属情報付きのエラーを**スロー**します。そのため、数式の値や +ガードの判定を静かに破壊する代わりに、ログと監査証跡で失敗を確認できます。 ## 関連項目 diff --git a/content/docs/reference/cel.ko.mdx b/content/docs/reference/cel.ko.mdx index 4549657..a5ae3c2 100644 --- a/content/docs/reference/cel.ko.mdx +++ b/content/docs/reference/cel.ko.mdx @@ -150,8 +150,12 @@ CEL은 네이티브 `timestamp(...)`, `duration(...)`, { "code": "VALIDATION_ERROR", "message": "CEL: unknown field 'amout' on Record", "details": { "field": "subtotal", "expression": "record.amout * 0.1" } } ``` -런타임에서 평가가 실패하면 수식 필드의 경우 `null`로, 술어의 경우 -`false`로 처리되며, 감사 로그에 항목이 추가됩니다. +잘못된 표현식은 **조용히 실패하지 않습니다**. 형식이 잘못되었거나 알 수 없는 필드를 +참조하는 표현식은 위와 같이 위치가 표시된 메시지(철자가 틀린 필드에 대한 +did-you-mean 힌트 포함)와 함께 `os compile`에서 실패합니다. 런타임에서는 잘못된 +표현식이 조용히 `null` 또는 `false`로 평가되는 대신 출처가 명시된 오류를 **던지므로**, +수식 값이나 가드 결정이 조용히 손상되는 대신 로그와 감사 추적에서 실패를 확인할 수 +있습니다. ## 참고 diff --git a/content/docs/reference/cel.mdx b/content/docs/reference/cel.mdx index 0f4ce5e..5540f90 100644 --- a/content/docs/reference/cel.mdx +++ b/content/docs/reference/cel.mdx @@ -153,8 +153,12 @@ Expressions are compiled at load time. Failures show up as { "code": "VALIDATION_ERROR", "message": "CEL: unknown field 'amout' on Record", "details": { "field": "subtotal", "expression": "record.amout * 0.1" } } ``` -A failed evaluation at runtime is treated as `null` for formula fields -and `false` for predicates, plus an entry in the audit log. +Invalid expressions **do not fail silently**. A malformed or unknown-field +expression fails `os compile` with the located message above (including a +did-you-mean hint for a misspelled field). At runtime, a bad expression +**throws** an attributed error rather than silently evaluating to `null` or +`false`, so the failure is visible in logs and the audit trail instead of +quietly corrupting a formula value or a guard decision. ## See also diff --git a/content/docs/reference/cel.zh-Hans.mdx b/content/docs/reference/cel.zh-Hans.mdx index bd061d9..96c7ad0 100644 --- a/content/docs/reference/cel.zh-Hans.mdx +++ b/content/docs/reference/cel.zh-Hans.mdx @@ -139,7 +139,7 @@ CEL 还包含原生 `timestamp(...)`、`duration(...)`、`date.getDayOfWeek()` { "code": "VALIDATION_ERROR", "message": "CEL: unknown field 'amout' on Record", "details": { "field": "subtotal", "expression": "record.amout * 0.1" } } ``` -运行时求值失败:公式字段视为 `null`,谓词视为 `false`,并在审计日志中写入一条记录。 +无效表达式**不会静默失败**。畸形或引用未知字段的表达式会让 `os compile` 失败,并给出上面那条带定位的消息(对拼错的字段还包含 did-you-mean 提示)。运行时遇到坏表达式会**抛出**一个带归属信息的错误,而不是静默求值为 `null` 或 `false`,因此该失败会在日志和审计轨迹中可见,而不会悄悄污染一个公式值或一个守卫判定。 ## 参见 diff --git a/content/docs/reference/environment-variables.de.mdx b/content/docs/reference/environment-variables.de.mdx index e63e541..c801544 100644 --- a/content/docs/reference/environment-variables.de.mdx +++ b/content/docs/reference/environment-variables.de.mdx @@ -8,10 +8,11 @@ description: Referenz der ObjectOS-Laufzeitumgebungsvariablen. Verwenden Sie Umgebungsvariablen für Konfiguration und Geheimnisse auf Deployment-Ebene. Verwenden Sie Systemeinstellungen für anwendungsbezogene Konfiguration, die von Mandanten/Benutzern bearbeitet werden kann. -> **Benennung.** Ab dem nächsten Release verwenden alle ObjectStack-eigenen Variablen das -> Präfix `OS_`. Unpräfixierte Pre-1.0-Namen (`PORT`, `AUTH_SECRET`, `OS_MULTI_TENANT`, -> …) funktionieren weiterhin, geben aber eine einmalige Verwarnung zur Veralterung aus. Bevorzugen Sie die kanonischen -> `OS_*`-Namen in neuen Deployments; siehe [Veraltete Aliasse](#legacy-aliases). +> **Benennung.** Alle ObjectStack-eigenen Variablen verwenden das Präfix `OS_`. +> Unpräfixierte Pre-1.0-Namen (`PORT`, `AUTH_SECRET`, `OS_MULTI_TENANT`, …) +> funktionieren weiterhin, geben aber eine einmalige Verwarnung zur Veralterung aus. +> Bevorzugen Sie die kanonischen `OS_*`-Namen in neuen Deployments; siehe +> [Veraltete Aliasse](#legacy-aliases). ## Kern @@ -77,6 +78,34 @@ Bevorzugen Sie für ObjectOS-Kundendeployments eine explizite Laufzeitkonfigurat Steuerungsebene oder eine Artefakt-Datenquellenkonfiguration, anstatt sich auf container-lokale Standardwerte zu verlassen. +## Observability + +Der Export von Traces und Metriken ist opt-in. Der Exporter ist standardmäßig +`noop`, sodass ein Deployment nichts ausgibt, bis Sie einen auswählen — allein +einen Endpunkt zu setzen, bewirkt nichts. + +| Variable | Standard | Beschreibung | +|---|---:|---| +| `OS_OBS_EXPORTER` | `noop` | Telemetrie-Exporter: `noop` \| `console` \| `json` \| `otlp`. Verwenden Sie `console`/`json` für lokales Debugging, `otlp` für einen Collector. | +| `OS_OTLP_ENDPOINT` | — | OTLP/HTTP-Root-URL (z. B. `https://otlp.grafana.net/otlp`). Erforderlich, wenn `OS_OBS_EXPORTER=otlp`; ist sie leer, warnt die Laufzeit und fällt auf `noop` zurück. | +| `OS_OTLP_HEADERS` | — | Zusätzliche OTLP-Header (z. B. Auth) als kommagetrennte `key=value`-Paare. | +| `OS_OBS_SERVICE_NAME` | — | Ressourcenattribut `service.name` auf ausgegebenen Spans/Metriken. | +| `OS_OBS_DEPLOYMENT_ENV` | `production` | Ressourcenattribut `deployment.environment`. | +| `OS_OTLP_FLUSH_MS` | — | Flush-Intervall für den OTLP-Exporter, in Millisekunden. | + +## Überschreibungen von Einstellungs-Namespaces + +Systemeinstellungen (die von Mandanten/Benutzern bearbeitbaren Namespaces `ai`, +`email`, `feature_flags`, …) können auf Deployment-Ebene mit einer +Umgebungsvariablen namens `OS__` festgelegt werden — in +Großbuchstaben, wobei `.` und `-` durch `_` ersetzt werden. Zum Beispiel +`ai.openai_base_url` → `OS_AI_OPENAI_BASE_URL` und `feature_flags.ai_enabled` → +`OS_FEATURE_FLAGS_AI_ENABLED`. Ab 9.0 wurden die unpräfixierten Aliasse +entfernt — die `OS_`-präfixierte Form ist die einzige, die gelesen wird. + +Die Google-Anmeldung (konfigurierbar unter **Setup → Authentication**) liest +außerdem `GOOGLE_CLIENT_ID` und `GOOGLE_CLIENT_SECRET` auf Deployment-Ebene. + ## Veraltete Aliasse Diese Pre-1.0-Namen funktionieren in diesem Release noch, geben aber eine einmalige diff --git a/content/docs/reference/environment-variables.es.mdx b/content/docs/reference/environment-variables.es.mdx index 3c64c3b..c3f8198 100644 --- a/content/docs/reference/environment-variables.es.mdx +++ b/content/docs/reference/environment-variables.es.mdx @@ -8,10 +8,11 @@ description: Referencia de variables de entorno del entorno de ejecución de Obj Use variables de entorno para la configuración a nivel de despliegue y los secretos. Use la configuración del sistema para la configuración de la aplicación editable por inquilino/usuario. -> **Nomenclatura.** A partir de la próxima versión, todas las variables propiedad de ObjectStack usan el -> prefijo `OS_`. Los nombres sin prefijo anteriores a 1.0 (`PORT`, `AUTH_SECRET`, `OS_MULTI_TENANT`, -> …) siguen funcionando, pero emiten una advertencia de obsolescencia de una sola vez. Prefiera los nombres canónicos -> `OS_*` en los nuevos despliegues; consulte [Alias heredados](#legacy-aliases). +> **Nomenclatura.** Todas las variables propiedad de ObjectStack usan el prefijo +> `OS_`. Los nombres sin prefijo anteriores a 1.0 (`PORT`, `AUTH_SECRET`, +> `OS_MULTI_TENANT`, …) siguen funcionando, pero emiten una advertencia de +> obsolescencia de una sola vez. Prefiera los nombres canónicos `OS_*` en los +> nuevos despliegues; consulte [Alias heredados](#legacy-aliases). ## Núcleo @@ -77,6 +78,35 @@ Para los despliegues de clientes de ObjectOS, prefiera la configuración explíc del plano de control o la configuración de origen de datos del artefacto en lugar de depender de los valores por defecto locales del contenedor. +## Observabilidad + +La exportación de trazas y métricas es opcional. El exportador es `noop` por +defecto, por lo que un despliegue no emite nada hasta que seleccione uno: +establecer únicamente un endpoint no hace nada. + +| Variable | Por defecto | Descripción | +|---|---:|---| +| `OS_OBS_EXPORTER` | `noop` | Exportador de telemetría: `noop` \| `console` \| `json` \| `otlp`. Use `console`/`json` para depuración local y `otlp` para un collector. | +| `OS_OTLP_ENDPOINT` | — | URL raíz de OTLP/HTTP (p. ej. `https://otlp.grafana.net/otlp`). Obligatoria cuando `OS_OBS_EXPORTER=otlp`; si está vacía, el entorno de ejecución advierte y vuelve a `noop`. | +| `OS_OTLP_HEADERS` | — | Cabeceras OTLP adicionales (p. ej. autenticación) como pares `key=value` separados por comas. | +| `OS_OBS_SERVICE_NAME` | — | Atributo de recurso `service.name` en las trazas/métricas emitidas. | +| `OS_OBS_DEPLOYMENT_ENV` | `production` | Atributo de recurso `deployment.environment`. | +| `OS_OTLP_FLUSH_MS` | — | Intervalo de vaciado del exportador OTLP, en milisegundos. | + +## Anulaciones de espacios de nombres de configuración + +La configuración del sistema (los espacios de nombres `ai`, `email`, +`feature_flags`, … editables por inquilino/usuario) puede fijarse a nivel de +despliegue con una variable de entorno llamada `OS__` —en +mayúsculas, con `.` y `-` reemplazados por `_`. Por ejemplo, +`ai.openai_base_url` → `OS_AI_OPENAI_BASE_URL`, y +`feature_flags.ai_enabled` → `OS_FEATURE_FLAGS_AI_ENABLED`. A partir de 9.0 se +eliminaron los alias sin prefijo: la forma con prefijo `OS_` es la única que se +lee. + +El inicio de sesión con Google (configurable en **Setup → Authentication**) +también lee `GOOGLE_CLIENT_ID` y `GOOGLE_CLIENT_SECRET` a nivel de despliegue. + ## Alias heredados Estos nombres anteriores a 1.0 siguen funcionando en esta versión, pero emiten una advertencia de obsolescencia diff --git a/content/docs/reference/environment-variables.fr.mdx b/content/docs/reference/environment-variables.fr.mdx index 5b333ca..ad67314 100644 --- a/content/docs/reference/environment-variables.fr.mdx +++ b/content/docs/reference/environment-variables.fr.mdx @@ -8,7 +8,7 @@ description: Référence des variables d'environnement d'exécution d'ObjectOS. Utilisez les variables d'environnement pour la configuration au niveau du déploiement et les secrets. Utilisez les paramètres système pour la configuration applicative modifiable par le locataire ou l'utilisateur. -> **Nommage.** À partir de la prochaine version, toutes les variables appartenant à ObjectStack utilisent le +> **Nommage.** Toutes les variables appartenant à ObjectStack utilisent le > préfixe `OS_`. Les noms sans préfixe antérieurs à la version 1.0 (`PORT`, `AUTH_SECRET`, `OS_MULTI_TENANT`, > …) fonctionnent toujours mais émettent un avertissement de dépréciation unique. Préférez les noms canoniques > `OS_*` dans les nouveaux déploiements ; voir [Alias hérités](#legacy-aliases). @@ -77,6 +77,34 @@ Pour les déploiements clients ObjectOS, préférez une configuration d'exécuti explicite du plan de contrôle ou une configuration de source de données d'artefact plutôt que de vous appuyer sur les valeurs par défaut locales au conteneur. +## Observabilité + +L'export des traces et des métriques est opt-in. L'exporteur a pour valeur par +défaut `noop`, de sorte qu'un déploiement n'émet rien tant que vous n'en +sélectionnez pas un — définir un endpoint seul ne fait rien. + +| Variable | Par défaut | Description | +|---|---:|---| +| `OS_OBS_EXPORTER` | `noop` | Exporteur de télémétrie : `noop` \| `console` \| `json` \| `otlp`. Utilisez `console`/`json` pour le débogage local, `otlp` pour un collecteur. | +| `OS_OTLP_ENDPOINT` | — | URL racine OTLP/HTTP (par ex. `https://otlp.grafana.net/otlp`). Requise lorsque `OS_OBS_EXPORTER=otlp` ; si vide, le runtime avertit et retombe sur `noop`. | +| `OS_OTLP_HEADERS` | — | En-têtes OTLP supplémentaires (par ex. authentification) sous forme de paires `key=value` séparées par des virgules. | +| `OS_OBS_SERVICE_NAME` | — | Attribut de ressource `service.name` sur les spans/métriques émis. | +| `OS_OBS_DEPLOYMENT_ENV` | `production` | Attribut de ressource `deployment.environment`. | +| `OS_OTLP_FLUSH_MS` | — | Intervalle de vidage de l'exporteur OTLP, en millisecondes. | + +## Remplacements d'espace de noms des paramètres + +Les paramètres système (les espaces de noms `ai`, `email`, `feature_flags`, … +modifiables par le locataire ou l'utilisateur) peuvent être épinglés au niveau du +déploiement avec une variable d'environnement nommée `OS__` — en +majuscules, avec `.` et `-` remplacés par `_`. Par exemple `ai.openai_base_url` +→ `OS_AI_OPENAI_BASE_URL`, et `feature_flags.ai_enabled` +→ `OS_FEATURE_FLAGS_AI_ENABLED`. À partir de la 9.0, les alias sans préfixe ont +été supprimés — la forme préfixée par `OS_` est la seule lue. + +La connexion Google (configurable dans **Setup → Authentication**) lit également +`GOOGLE_CLIENT_ID` et `GOOGLE_CLIENT_SECRET` au niveau du déploiement. + ## Alias hérités Ces noms antérieurs à la version 1.0 fonctionnent toujours dans cette version mais émettent un avertissement diff --git a/content/docs/reference/environment-variables.ja.mdx b/content/docs/reference/environment-variables.ja.mdx index 74a9354..f145e17 100644 --- a/content/docs/reference/environment-variables.ja.mdx +++ b/content/docs/reference/environment-variables.ja.mdx @@ -8,9 +8,9 @@ description: ObjectOS ランタイムの環境変数リファレンス。 デプロイメントレベルの設定とシークレットには環境変数を使用します。 テナント/ユーザーが編集可能なアプリケーション設定にはシステム設定を使用します。 -> **命名規則。** 次のリリースから、ObjectStack が所有するすべての変数は -> `OS_` プレフィックスを使用します。1.0 以前のプレフィックスなしの名前(`PORT`、`AUTH_SECRET`、`OS_MULTI_TENANT`、 -> …)も引き続き動作しますが、一度限りの非推奨警告を出力します。新しいデプロイメントでは正規の +> **命名規則。** ObjectStack が所有するすべての変数は `OS_` プレフィックスを使用します。 +> 1.0 以前のプレフィックスなしの名前(`PORT`、`AUTH_SECRET`、`OS_MULTI_TENANT`、…)も引き続き +> 動作しますが、一度限りの非推奨警告を出力します。新しいデプロイメントでは正規の > `OS_*` 名を優先してください。[レガシーエイリアス](#legacy-aliases)を参照してください。 ## コア @@ -77,6 +77,32 @@ ObjectOS の顧客デプロイメントでは、コンテナローカルのデ 明示的なコントロールプレーンのランタイム設定またはアーティファクトのデータソース設定を 優先してください。 +## オブザーバビリティ + +トレースとメトリクスのエクスポートはオプトインです。エクスポーターのデフォルトは `noop` のため、 +いずれかを選択するまでデプロイメントは何も出力しません——エンドポイントを設定するだけでは +何も起こりません。 + +| 変数 | デフォルト | 説明 | +|---|---:|---| +| `OS_OBS_EXPORTER` | `noop` | テレメトリエクスポーター: `noop` \| `console` \| `json` \| `otlp`。ローカルデバッグには `console`/`json`、コレクターには `otlp` を使用します。 | +| `OS_OTLP_ENDPOINT` | — | OTLP/HTTP のルート URL(例: `https://otlp.grafana.net/otlp`)。`OS_OBS_EXPORTER=otlp` の場合に必須。空の場合、ランタイムは警告を出して `noop` にフォールバックします。 | +| `OS_OTLP_HEADERS` | — | 追加の OTLP ヘッダー(例: 認証)を、カンマ区切りの `key=value` ペアで指定します。 | +| `OS_OBS_SERVICE_NAME` | — | 出力されるスパン/メトリクスに付与する `service.name` リソース属性。 | +| `OS_OBS_DEPLOYMENT_ENV` | `production` | `deployment.environment` リソース属性。 | +| `OS_OTLP_FLUSH_MS` | — | OTLP エクスポーターのフラッシュ間隔(ミリ秒)。 | + +## 設定ネームスペースの上書き + +システム設定(テナント/ユーザーが編集可能な `ai`、`email`、`feature_flags`、… の各ネームスペース)は、 +`OS__` という名前の環境変数でデプロイメントレベルに固定できます——大文字化し、 +`.` と `-` を `_` に置き換えます。たとえば `ai.openai_base_url` → `OS_AI_OPENAI_BASE_URL`、 +`feature_flags.ai_enabled` → `OS_FEATURE_FLAGS_AI_ENABLED` です。9.0 以降、プレフィックスなしの +エイリアスは削除され、`OS_` プレフィックス付きの形式のみが読み取られます。 + +Google サインイン(**Setup → Authentication** で設定可能)も、デプロイメントレベルで +`GOOGLE_CLIENT_ID` と `GOOGLE_CLIENT_SECRET` を読み取ります。 + ## レガシーエイリアス これらの 1.0 以前の名前はこのリリースでは引き続き動作しますが、一度限りの非推奨 diff --git a/content/docs/reference/environment-variables.ko.mdx b/content/docs/reference/environment-variables.ko.mdx index 3de5e26..b67a62c 100644 --- a/content/docs/reference/environment-variables.ko.mdx +++ b/content/docs/reference/environment-variables.ko.mdx @@ -8,10 +8,10 @@ description: ObjectOS 런타임 환경 변수 참조. 배포 수준 구성 및 시크릿에는 환경 변수를 사용하세요. 테넌트/사용자가 편집 가능한 애플리케이션 구성에는 시스템 설정을 사용하세요. -> **명명 규칙.** 다음 릴리스부터 모든 ObjectStack 소유 변수는 -> `OS_` 접두사를 사용합니다. 1.0 이전의 접두사 없는 이름(`PORT`, `AUTH_SECRET`, `OS_MULTI_TENANT`, -> …)도 여전히 동작하지만 일회성 사용 중단 경고를 출력합니다. 새 배포에서는 표준 -> `OS_*` 이름을 사용하는 것이 좋습니다. [레거시 별칭](#legacy-aliases)을 참조하세요. +> **명명 규칙.** 모든 ObjectStack 소유 변수는 `OS_` 접두사를 사용합니다. 1.0 이전의 +> 접두사 없는 이름(`PORT`, `AUTH_SECRET`, `OS_MULTI_TENANT`, …)도 여전히 동작하지만 +> 일회성 사용 중단 경고를 출력합니다. 새 배포에서는 표준 `OS_*` 이름을 사용하는 것이 +> 좋습니다. [레거시 별칭](#legacy-aliases)을 참조하세요. ## 핵심 @@ -77,6 +77,32 @@ ObjectOS 고객 배포의 경우 컨테이너 로컬 기본값에 의존하기 명시적인 컨트롤 플레인 런타임 구성 또는 아티팩트 데이터소스 구성을 사용하는 것이 좋습니다. +## Observability + +추적 및 메트릭 내보내기는 옵트인입니다. 익스포터의 기본값은 `noop`이므로 배포는 +하나를 선택하기 전까지 아무것도 내보내지 않습니다 — 엔드포인트만 설정해서는 +아무 일도 일어나지 않습니다. + +| 변수 | 기본값 | 설명 | +|---|---:|---| +| `OS_OBS_EXPORTER` | `noop` | 텔레메트리 익스포터: `noop` \| `console` \| `json` \| `otlp`. 로컬 디버깅에는 `console`/`json`을, 컬렉터에는 `otlp`를 사용하세요. | +| `OS_OTLP_ENDPOINT` | — | OTLP/HTTP 루트 URL(예: `https://otlp.grafana.net/otlp`). `OS_OBS_EXPORTER=otlp`일 때 필수이며, 비어 있으면 런타임이 경고하고 `noop`으로 폴백합니다. | +| `OS_OTLP_HEADERS` | — | 추가 OTLP 헤더(예: 인증)를 쉼표로 구분된 `key=value` 쌍으로 지정합니다. | +| `OS_OBS_SERVICE_NAME` | — | 내보낸 스팬/메트릭의 `service.name` 리소스 속성. | +| `OS_OBS_DEPLOYMENT_ENV` | `production` | `deployment.environment` 리소스 속성. | +| `OS_OTLP_FLUSH_MS` | — | OTLP 익스포터의 플러시 간격(밀리초). | + +## Settings 네임스페이스 재정의 + +시스템 설정(테넌트/사용자 편집 가능한 `ai`, `email`, `feature_flags`, … 네임스페이스)은 +`OS__` 형식의 환경 변수로 배포 수준에서 고정할 수 있습니다 — 대문자로 +바꾸고 `.`과 `-`를 `_`로 치환합니다. 예를 들어 `ai.openai_base_url` → +`OS_AI_OPENAI_BASE_URL`, `feature_flags.ai_enabled` → `OS_FEATURE_FLAGS_AI_ENABLED`. +9.0부터 접두사 없는 별칭은 제거되었습니다 — `OS_` 접두사 형식만 읽습니다. + +Google 로그인(**Setup → Authentication**에서 구성)도 배포 수준에서 `GOOGLE_CLIENT_ID`와 +`GOOGLE_CLIENT_SECRET`을 읽습니다. + ## 레거시 별칭 이 1.0 이전 이름들은 이번 릴리스에서도 여전히 동작하지만 일회성 사용 중단 diff --git a/content/docs/reference/environment-variables.mdx b/content/docs/reference/environment-variables.mdx index c4c29e4..ecd6ee8 100644 --- a/content/docs/reference/environment-variables.mdx +++ b/content/docs/reference/environment-variables.mdx @@ -8,10 +8,10 @@ description: ObjectOS runtime environment variable reference. Use environment variables for deployment-level configuration and secrets. Use system settings for tenant/user-editable application configuration. -> **Naming.** As of the next release, all ObjectStack-owned variables use the -> `OS_` prefix. Pre-1.0 unprefixed names (`PORT`, `AUTH_SECRET`, `OS_MULTI_TENANT`, -> …) still work but emit a one-shot deprecation warning. Prefer the canonical -> `OS_*` names in new deployments; see [Legacy aliases](#legacy-aliases). +> **Naming.** All ObjectStack-owned variables use the `OS_` prefix. Pre-1.0 +> unprefixed names (`PORT`, `AUTH_SECRET`, `OS_MULTI_TENANT`, …) still work but +> emit a one-shot deprecation warning. Prefer the canonical `OS_*` names in new +> deployments; see [Legacy aliases](#legacy-aliases). ## Core @@ -77,6 +77,33 @@ For ObjectOS customer deployments, prefer explicit control-plane runtime configuration or artifact datasource configuration over relying on container-local defaults. +## Observability + +Tracing and metrics export is opt-in. The exporter defaults to `noop`, so a +deployment emits nothing until you select one — setting an endpoint alone does +nothing. + +| Variable | Default | Description | +|---|---:|---| +| `OS_OBS_EXPORTER` | `noop` | Telemetry exporter: `noop` \| `console` \| `json` \| `otlp`. Use `console`/`json` for local debugging, `otlp` for a collector. | +| `OS_OTLP_ENDPOINT` | — | OTLP/HTTP root URL (e.g. `https://otlp.grafana.net/otlp`). Required when `OS_OBS_EXPORTER=otlp`; if empty the runtime warns and falls back to `noop`. | +| `OS_OTLP_HEADERS` | — | Extra OTLP headers (e.g. auth) as comma-separated `key=value` pairs. | +| `OS_OBS_SERVICE_NAME` | — | `service.name` resource attribute on emitted spans/metrics. | +| `OS_OBS_DEPLOYMENT_ENV` | `production` | `deployment.environment` resource attribute. | +| `OS_OTLP_FLUSH_MS` | — | Flush interval for the OTLP exporter, in milliseconds. | + +## Settings namespace overrides + +System settings (the tenant/user-editable `ai`, `email`, `feature_flags`, … +namespaces) can be pinned at the deployment level with an environment variable +named `OS__` — uppercased, with `.` and `-` replaced by `_`. +For example `ai.openai_base_url` → `OS_AI_OPENAI_BASE_URL`, and +`feature_flags.ai_enabled` → `OS_FEATURE_FLAGS_AI_ENABLED`. As of 9.0 the +unprefixed aliases were removed — the `OS_`-prefixed form is the only one read. + +Google sign-in (configurable in **Setup → Authentication**) also reads +`GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET` at the deployment level. + ## Legacy aliases These pre-1.0 names still work this release but emit a one-shot deprecation diff --git a/content/docs/reference/environment-variables.zh-Hans.mdx b/content/docs/reference/environment-variables.zh-Hans.mdx index c97c366..db82b14 100644 --- a/content/docs/reference/environment-variables.zh-Hans.mdx +++ b/content/docs/reference/environment-variables.zh-Hans.mdx @@ -8,7 +8,7 @@ description: ObjectOS 运行时环境变量参考。 使用环境变量进行部署级配置和密钥管理。 使用系统设置进行租户/用户可编辑的应用配置。 -> **命名。** 自下一版本起,所有 ObjectStack 自有变量统一使用 `OS_` 前缀。1.0 之前的无前缀名称(`PORT`、`AUTH_SECRET`、`OS_MULTI_TENANT` 等)仍可使用,但会触发一次性弃用警告。新部署请优先使用规范的 `OS_*` 名称,参见[旧别名](#legacy-aliases)。 +> **命名。** 所有 ObjectStack 自有变量统一使用 `OS_` 前缀。1.0 之前的无前缀名称(`PORT`、`AUTH_SECRET`、`OS_MULTI_TENANT` 等)仍可使用,但会触发一次性弃用警告。新部署请优先使用规范的 `OS_*` 名称,参见[旧别名](#legacy-aliases)。 ## 核心 @@ -68,6 +68,25 @@ description: ObjectOS 运行时环境变量参考。 对 ObjectOS 客户部署,优先使用显式控制平面运行时配置或 artifact 数据源配置,而非依赖容器本地默认值。 +## 可观测性 + +追踪与指标导出为按需启用。导出器默认为 `noop`,因此在你选择之前部署不会发出任何数据 —— 仅设置端点不起作用。 + +| 变量 | 默认值 | 说明 | +|---|---:|---| +| `OS_OBS_EXPORTER` | `noop` | 遥测导出器:`noop` \| `console` \| `json` \| `otlp`。本地调试用 `console`/`json`,接入采集器用 `otlp`。 | +| `OS_OTLP_ENDPOINT` | — | OTLP/HTTP 根 URL(例如 `https://otlp.grafana.net/otlp`)。当 `OS_OBS_EXPORTER=otlp` 时必需;若为空,运行时会告警并回退到 `noop`。 | +| `OS_OTLP_HEADERS` | — | 额外的 OTLP 头(例如鉴权),以逗号分隔的 `key=value` 对表示。 | +| `OS_OBS_SERVICE_NAME` | — | 发出的 span/指标上的 `service.name` 资源属性。 | +| `OS_OBS_DEPLOYMENT_ENV` | `production` | `deployment.environment` 资源属性。 | +| `OS_OTLP_FLUSH_MS` | — | OTLP 导出器的刷新间隔,单位毫秒。 | + +## 设置命名空间覆盖 + +系统设置(租户/用户可编辑的 `ai`、`email`、`feature_flags` 等命名空间)可在部署级用一个名为 `OS__` 的环境变量固定 —— 全部大写,并将 `.` 与 `-` 替换为 `_`。例如 `ai.openai_base_url` → `OS_AI_OPENAI_BASE_URL`,`feature_flags.ai_enabled` → `OS_FEATURE_FLAGS_AI_ENABLED`。自 9.0 起,无前缀的别名已被移除 —— 只读取带 `OS_` 前缀的形式。 + +Google 登录(在 **Setup → Authentication** 中配置)也在部署级读取 `GOOGLE_CLIENT_ID` 与 `GOOGLE_CLIENT_SECRET`。 + ## 旧别名 [#legacy-aliases] 以下 1.0 之前的名称在本版本仍可使用,但会触发一次性弃用警告,并将在未来的主版本中移除。请优先使用规范名称。 diff --git a/content/docs/reference/field-types.de.mdx b/content/docs/reference/field-types.de.mdx index d9f493c..c84a862 100644 --- a/content/docs/reference/field-types.de.mdx +++ b/content/docs/reference/field-types.de.mdx @@ -28,9 +28,7 @@ description: Jeder Feldtyp, den du auf einem Objekt deklarieren kannst — was e | `externalId` | boolean | `false` | Für Upsert über externen Schlüssel geeignet | | `inlineHelpText` | string | — | Tooltip / Hilfetext | | `conditionalRequired` | `P`-Prädikat | — | Erforderlich, wenn CEL wahr ist | -| `auditTrail` | boolean | `false` | Jede Änderung im Audit-Log verfolgen | -| `encryptionConfig` | object | — | Verschlüsselung auf Feldebene (siehe [Security](./security)) | -| `maskingRule` | string | — | PII-Maskierungsmuster | +| `trackHistory` | boolean | `false` | Wertänderungen als menschenlesbare Einträge auf der Aktivitäts-Timeline des Datensatzes darstellen (ADR-0052) | ## Text-Familie @@ -41,7 +39,8 @@ description: Jeder Feldtyp, den du auf einem Objekt deklarieren kannst — was e | `email` | E-Mail | formatvalidiert; kleingeschrieben | | `url` | URL | formatvalidiert | | `phone` | Telefon | E.164 | -| `password` | Geheimnisse | gehasht; nie von GET zurückgegeben | +| `password` | einseitige Geheimnisse | vom Auth-Subsystem gehasht; nie von GET zurückgegeben | +| `secret` | umkehrbare Geheimnisse (API-Schlüssel, Token, DB-Passwörter) | im Ruhezustand über den Krypto-Provider verschlüsselt, als opake Referenz gespeichert, beim Lesen maskiert. Fail-closed — ohne konfigurierten Provider werfen Schreibvorgänge einen Fehler, statt Klartext zu speichern | | `markdown` | Markdown-Inhalt | in Console-Vorschau gerendert | | `html` | bereinigtes HTML | DOMPurify beim Schreiben | | `richtext` | WYSIWYG | Console-Editor + serialisiertes JSON | @@ -196,7 +195,7 @@ Diese deklarierst du nicht — deaktiviere sie pro Objekt mit ├─► REST: validated on POST/PATCH, exposed on GET ├─► Console: form widget + list column ├─► AI Builder: tool argument schema (so the AI knows what to ask) - └─► Audit: change-tracked if `auditTrail: true` + └─► Audit: change-tracked if `trackHistory: true` ``` ## Siehe auch diff --git a/content/docs/reference/field-types.es.mdx b/content/docs/reference/field-types.es.mdx index 6a5cfd1..ce31a27 100644 --- a/content/docs/reference/field-types.es.mdx +++ b/content/docs/reference/field-types.es.mdx @@ -28,9 +28,7 @@ description: Cada tipo de campo que puedes declarar en un objeto — qué almace | `externalId` | boolean | `false` | Apto para upsert mediante clave externa | | `inlineHelpText` | string | — | Texto de información sobre herramientas / ayuda | | `conditionalRequired` | predicado `P` | — | Obligatorio cuando el CEL es verdadero | -| `auditTrail` | boolean | `false` | Registra cada cambio en el log de auditoría | -| `encryptionConfig` | object | — | Cifrado a nivel de campo (consulta [Security](./security)) | -| `maskingRule` | string | — | Patrón de enmascaramiento de PII | +| `trackHistory` | boolean | `false` | Muestra los cambios de valor como entradas legibles en la línea de tiempo de actividad del registro (ADR-0052) | ## Familia de texto @@ -41,7 +39,8 @@ description: Cada tipo de campo que puedes declarar en un objeto — qué almace | `email` | correo electrónico | validado por formato; en minúsculas | | `url` | URL | validado por formato | | `phone` | teléfono | E.164 | -| `password` | secretos | con hash; nunca devuelto por GET | +| `password` | secretos de un solo sentido | con hash por el subsistema de autenticación; nunca devuelto por GET | +| `secret` | secretos reversibles (claves de API, tokens, contraseñas de BD) | cifrado en reposo mediante el proveedor de criptografía, almacenado como una referencia opaca, enmascarado al leer. Fail-closed: sin un proveedor configurado, las escrituras lanzan un error en lugar de persistir texto plano | | `markdown` | cuerpo markdown | renderizado en la vista previa de Console | | `html` | HTML saneado | DOMPurify al escribir | | `richtext` | WYSIWYG | editor de Console + JSON serializado | @@ -196,7 +195,7 @@ No declaras estos campos — desactívalos por objeto con ├─► REST: validated on POST/PATCH, exposed on GET ├─► Console: form widget + list column ├─► AI Builder: tool argument schema (so the AI knows what to ask) - └─► Audit: change-tracked if `auditTrail: true` + └─► Audit: change-tracked if `trackHistory: true` ``` ## Consulta también diff --git a/content/docs/reference/field-types.fr.mdx b/content/docs/reference/field-types.fr.mdx index cc9bdf2..7173627 100644 --- a/content/docs/reference/field-types.fr.mdx +++ b/content/docs/reference/field-types.fr.mdx @@ -28,9 +28,7 @@ description: Chaque type de champ que vous pouvez déclarer sur un objet — ce | `externalId` | boolean | `false` | Éligible à l'upsert via clé externe | | `inlineHelpText` | string | — | Infobulle / texte d'aide | | `conditionalRequired` | prédicat `P` | — | Requis lorsque le CEL est vrai | -| `auditTrail` | boolean | `false` | Suivre chaque modification dans le journal d'audit | -| `encryptionConfig` | object | — | Chiffrement au niveau du champ (voir [Sécurité](./security)) | -| `maskingRule` | string | — | Modèle de masquage des données personnelles | +| `trackHistory` | boolean | `false` | Affiche les changements de valeur sous forme d'entrées lisibles sur la timeline d'activité de l'enregistrement (ADR-0052) | ## Famille texte @@ -41,7 +39,8 @@ description: Chaque type de champ que vous pouvez déclarer sur un objet — ce | `email` | e-mail | format validé ; mis en minuscules | | `url` | URL | format validé | | `phone` | téléphone | E.164 | -| `password` | secrets | haché ; jamais renvoyé par GET | +| `password` | secrets à sens unique | haché par le sous-système d'authentification ; jamais renvoyé par GET | +| `secret` | secrets réversibles (clés d'API, jetons, mots de passe de base de données) | chiffré au repos via le fournisseur de cryptographie, stocké comme référence opaque, masqué à la lecture. Fail-closed — sans fournisseur configuré, les écritures lèvent une erreur plutôt que de persister du texte en clair | | `markdown` | corps en markdown | rendu dans l'aperçu de la Console | | `html` | HTML assaini | DOMPurify à l'écriture | | `richtext` | WYSIWYG | éditeur Console + JSON sérialisé | @@ -196,7 +195,7 @@ Vous ne déclarez pas ces champs — désactivez-les par objet avec ├─► REST: validated on POST/PATCH, exposed on GET ├─► Console: form widget + list column ├─► AI Builder: tool argument schema (so the AI knows what to ask) - └─► Audit: change-tracked if `auditTrail: true` + └─► Audit: change-tracked if `trackHistory: true` ``` ## Voir aussi diff --git a/content/docs/reference/field-types.ja.mdx b/content/docs/reference/field-types.ja.mdx index 009eede..a6dfb28 100644 --- a/content/docs/reference/field-types.ja.mdx +++ b/content/docs/reference/field-types.ja.mdx @@ -28,9 +28,7 @@ description: オブジェクトに宣言できるすべてのフィールドタ | `externalId` | boolean | `false` | 外部キーによる upsert の対象 | | `inlineHelpText` | string | — | ツールチップ / ヘルパーテキスト | | `conditionalRequired` | `P` 述語 | — | CEL が真のとき必須 | -| `auditTrail` | boolean | `false` | すべての変更を監査ログで追跡 | -| `encryptionConfig` | object | — | フィールドレベルの暗号化([Security](./security) を参照) | -| `maskingRule` | string | — | PII マスキングパターン | +| `trackHistory` | boolean | `false` | 値の変更を、レコードのアクティビティタイムラインに人間が読める形式のエントリとして表示(ADR-0052) | ## テキストファミリー @@ -41,7 +39,8 @@ description: オブジェクトに宣言できるすべてのフィールドタ | `email` | メールアドレス | フォーマット検証あり。小文字化される | | `url` | URL | フォーマット検証あり | | `phone` | 電話番号 | E.164 | -| `password` | シークレット | ハッシュ化され、GET では返されない | +| `password` | 一方向シークレット | 認証サブシステムによってハッシュ化され、GET では返されない | +| `secret` | 復号可能なシークレット(API キー、トークン、DB パスワード) | crypto プロバイダーによって保存時に暗号化され、不透明な参照として格納され、読み取り時にマスクされる。フェイルクローズ——プロバイダー未設定では、書き込みは平文を永続化せずにスローする | | `markdown` | markdown 本文 | Console プレビューでレンダリング | | `html` | サニタイズ済み HTML | 書き込み時に DOMPurify を適用 | | `richtext` | WYSIWYG | Console エディタ + シリアライズされた JSON | @@ -196,7 +195,7 @@ fileAttachmentConfig: { ├─► REST: validated on POST/PATCH, exposed on GET ├─► Console: form widget + list column ├─► AI Builder: tool argument schema (so the AI knows what to ask) - └─► Audit: change-tracked if `auditTrail: true` + └─► Audit: change-tracked if `trackHistory: true` ``` ## 関連項目 diff --git a/content/docs/reference/field-types.ko.mdx b/content/docs/reference/field-types.ko.mdx index 6889531..c68c789 100644 --- a/content/docs/reference/field-types.ko.mdx +++ b/content/docs/reference/field-types.ko.mdx @@ -28,9 +28,7 @@ description: 객체에 선언할 수 있는 모든 필드 타입 — 저장하 | `externalId` | boolean | `false` | 외부 키를 통한 upsert 대상 | | `inlineHelpText` | string | — | 툴팁 / 도움말 텍스트 | | `conditionalRequired` | `P` 술어 | — | CEL이 true일 때 필수 | -| `auditTrail` | boolean | `false` | 모든 변경을 감사 로그에 기록 | -| `encryptionConfig` | object | — | 필드 단위 암호화 ([Security](./security) 참조) | -| `maskingRule` | string | — | PII 마스킹 패턴 | +| `trackHistory` | boolean | `false` | 값 변경을 레코드 활동 타임라인에 사람이 읽을 수 있는 항목으로 렌더링 (ADR-0052) | ## 텍스트 패밀리 @@ -41,7 +39,8 @@ description: 객체에 선언할 수 있는 모든 필드 타입 — 저장하 | `email` | 이메일 | 형식 검증됨, 소문자로 변환 | | `url` | URL | 형식 검증됨 | | `phone` | 전화번호 | E.164 | -| `password` | 시크릿 | 해시 처리됨, GET으로 반환되지 않음 | +| `password` | 단방향 시크릿 | 인증 서브시스템이 해시 처리함, GET으로 반환되지 않음 | +| `secret` | 가역 시크릿 (API 키, 토큰, DB 비밀번호) | 크립토 제공자를 통해 저장 시 암호화되고, 불투명 참조로 저장되며, 읽기 시 마스킹됨. fail-closed — 제공자가 구성되지 않으면 쓰기가 평문을 저장하는 대신 예외를 던짐 | | `markdown` | 마크다운 본문 | Console 미리보기에서 렌더링 | | `html` | 새니타이즈된 HTML | 쓰기 시 DOMPurify 적용 | | `richtext` | WYSIWYG | Console 에디터 + 직렬화된 JSON | @@ -196,7 +195,7 @@ fileAttachmentConfig: { ├─► REST: validated on POST/PATCH, exposed on GET ├─► Console: form widget + list column ├─► AI Builder: tool argument schema (so the AI knows what to ask) - └─► Audit: change-tracked if `auditTrail: true` + └─► Audit: change-tracked if `trackHistory: true` ``` ## 함께 보기 diff --git a/content/docs/reference/field-types.mdx b/content/docs/reference/field-types.mdx index 11ec69d..7dd6f89 100644 --- a/content/docs/reference/field-types.mdx +++ b/content/docs/reference/field-types.mdx @@ -28,9 +28,7 @@ description: Every field type you can declare on an object — what it stores, w | `externalId` | boolean | `false` | Eligible for upsert via external key | | `inlineHelpText` | string | — | Tooltip / helper text | | `conditionalRequired` | `P` predicate | — | Required when CEL is true | -| `auditTrail` | boolean | `false` | Track every change in audit log | -| `encryptionConfig` | object | — | Field-level encryption (see [Security](./security)) | -| `maskingRule` | string | — | PII masking pattern | +| `trackHistory` | boolean | `false` | Render value changes as human-readable entries on the record activity timeline (ADR-0052) | ## Text family @@ -41,7 +39,8 @@ description: Every field type you can declare on an object — what it stores, w | `email` | email | format-validated; lowercased | | `url` | URL | format-validated | | `phone` | phone | E.164 | -| `password` | secrets | hashed; never returned by GET | +| `password` | one-way secrets | hashed by the auth subsystem; never returned by GET | +| `secret` | reversible secrets (API keys, tokens, DB passwords) | encrypted at rest via the crypto provider, stored as an opaque ref, masked on read. Fail-closed — with no provider configured, writes throw rather than persist cleartext | | `markdown` | markdown body | rendered in Console preview | | `html` | sanitised HTML | DOMPurify on write | | `richtext` | WYSIWYG | Console editor + serialised JSON | @@ -196,7 +195,7 @@ You don't declare these — opt out per object with ├─► REST: validated on POST/PATCH, exposed on GET ├─► Console: form widget + list column ├─► AI Builder: tool argument schema (so the AI knows what to ask) - └─► Audit: change-tracked if `auditTrail: true` + └─► Audit: change-tracked if `trackHistory: true` ``` ## See also diff --git a/content/docs/reference/field-types.zh-Hans.mdx b/content/docs/reference/field-types.zh-Hans.mdx index b30bcd7..901583f 100644 --- a/content/docs/reference/field-types.zh-Hans.mdx +++ b/content/docs/reference/field-types.zh-Hans.mdx @@ -28,9 +28,7 @@ description: 你可以在对象上声明的所有字段类型 —— 存储什 | `externalId` | boolean | `false` | 可用作外部键 upsert | | `inlineHelpText` | string | — | 提示/帮助文本 | | `conditionalRequired` | `P` 谓词 | — | CEL 为真时必填 | -| `auditTrail` | boolean | `false` | 在审计日志中追踪每次变更 | -| `encryptionConfig` | object | — | 字段级加密(见[安全](./security)) | -| `maskingRule` | string | — | PII 脱敏模式 | +| `trackHistory` | boolean | `false` | 将值变更渲染为记录活动时间线上可读的条目(ADR-0052) | ## 文本家族 @@ -41,7 +39,8 @@ description: 你可以在对象上声明的所有字段类型 —— 存储什 | `email` | 邮箱 | 格式校验;小写化 | | `url` | URL | 格式校验 | | `phone` | 电话 | E.164 | -| `password` | 密钥 | 哈希;GET 永不返回 | +| `password` | 单向密钥 | 由 auth 子系统哈希;GET 永不返回 | +| `secret` | 可逆密钥(API key、token、数据库密码) | 通过加密提供方在静态时加密,存为不透明引用,读取时脱敏。Fail-closed —— 未配置提供方时,写入会抛错而非以明文持久化 | | `markdown` | markdown 正文 | 在 Console 预览中渲染 | | `html` | 清洗后的 HTML | 写入时经 DOMPurify | | `richtext` | 所见即所得 | Console 编辑器 + 序列化 JSON | @@ -194,7 +193,7 @@ fileAttachmentConfig: { ├─► REST: validated on POST/PATCH, exposed on GET ├─► Console: form widget + list column ├─► AI Builder: tool argument schema (so the AI knows what to ask) - └─► Audit: change-tracked if `auditTrail: true` + └─► Audit: change-tracked if `trackHistory: true` ``` ## 参见 diff --git a/content/docs/reference/rest-api.de.mdx b/content/docs/reference/rest-api.de.mdx index e07e6e9..4811377 100644 --- a/content/docs/reference/rest-api.de.mdx +++ b/content/docs/reference/rest-api.de.mdx @@ -33,9 +33,44 @@ durchgesetzt. | Pfad | Methode | Zweck | |:--|:--|:--| | `/api/v1` | GET | Service Discovery — listet alle registrierten Routen, die Version und den Scoping-Modus auf | +| `/api/v1/discovery` | GET | Expliziter Alias für das obige Discovery-Dokument | | `/api/v1/openapi.json` | GET | OpenAPI-3.0-Spezifikation für jeden Endpunkt im laufenden Runtime | | `/api/v1/search` | GET | Volltextsuche über durchsuchbare Felder aller Objekte | +## API-Oberfläche einschränken + +Die automatisch generierten Endpunkte werden pro Objekt gesteuert, sodass du +ein Objekt von der API nehmen oder schreibgeschützt machen kannst, ohne +Routen-Code zu schreiben: + +- **`apiEnabled`** (boolean, **Standard `true`**) — auf `false` setzen, um das + Objekt vollständig von der REST-Oberfläche auszuschließen. Anfragen an seine + Routen liefern 404. +- **`apiMethods`** (optionale Whitelist) — wenn gesetzt, sind nur die + aufgeführten Operationen erreichbar; jede andere Operation wird auf der + REST-Ebene abgelehnt. Erlaubte Werte: `get`, `list`, `create`, `update`, + `delete`, `upsert`, `bulk`, `aggregate`, `history`, `search`, `restore`, + `purge`, `import`, `export`. + +```ts +// Ein schreibgeschütztes Referenzobjekt, niemals über die API beschreibbar: +defineObject({ + name: 'exchange_rate', + apiMethods: ['get', 'list'], + // ...fields +}) + +// Ein internes Objekt, das die API niemals offenlegt: +defineObject({ + name: 'sync_cursor', + apiEnabled: false, + // ...fields +}) +``` + +Beide werden jetzt auf der REST-Ebene durchgesetzt (ADR-0049) — frühere +Versionen parsten diese Eigenschaften, wendeten sie aber nicht an. + ## Data — `/api/v1/data/*` CRUD + erweiterte Abfragen für jedes Objekt, das du deklarierst. `:object` ist diff --git a/content/docs/reference/rest-api.es.mdx b/content/docs/reference/rest-api.es.mdx index 92326ab..a05383d 100644 --- a/content/docs/reference/rest-api.es.mdx +++ b/content/docs/reference/rest-api.es.mdx @@ -30,9 +30,43 @@ seguridad a nivel de fila + seguridad a nivel de campo dentro del motor de datos | Ruta | Método | Propósito | |:--|:--|:--| | `/api/v1` | GET | Descubrimiento de servicios — lista todas las rutas registradas, la versión y el modo de delimitación | +| `/api/v1/discovery` | GET | Alias explícito del documento de descubrimiento anterior | | `/api/v1/openapi.json` | GET | Especificación OpenAPI 3.0 de cada endpoint del runtime en ejecución | | `/api/v1/search` | GET | Búsqueda de texto completo en los campos indexables de todos los objetos | +## Restringir la superficie de la API + +Los endpoints autogenerados se gobiernan por objeto, de modo que puedes retirar +un objeto de la API o hacerlo de solo lectura sin escribir código de rutas: + +- **`apiEnabled`** (boolean, **por defecto `true`**): establécelo en `false` + para omitir el objeto de la superficie REST por completo. Las solicitudes a + sus rutas devuelven 404. +- **`apiMethods`** (lista blanca opcional): cuando se establece, solo son + accesibles las operaciones listadas; cualquier otra operación se rechaza en la + capa REST. Valores permitidos: `get`, `list`, `create`, `update`, `delete`, + `upsert`, `bulk`, `aggregate`, `history`, `search`, `restore`, `purge`, + `import`, `export`. + +```ts +// Un objeto de referencia de solo lectura, nunca escribible por la API: +defineObject({ + name: 'exchange_rate', + apiMethods: ['get', 'list'], + // ...fields +}) + +// Un objeto interno que la API nunca expone: +defineObject({ + name: 'sync_cursor', + apiEnabled: false, + // ...fields +}) +``` + +Ambos se aplican ahora en la capa REST (ADR-0049): las versiones anteriores +analizaban estas propiedades pero no las aplicaban. + ## Datos — `/api/v1/data/*` CRUD + consultas avanzadas para cada objeto que declaras. `:object` es el diff --git a/content/docs/reference/rest-api.fr.mdx b/content/docs/reference/rest-api.fr.mdx index badb4b1..5591146 100644 --- a/content/docs/reference/rest-api.fr.mdx +++ b/content/docs/reference/rest-api.fr.mdx @@ -30,9 +30,44 @@ sécurité au niveau des lignes + sécurité au niveau des champs au sein du mot | Chemin | Méthode | Objectif | |:--|:--|:--| | `/api/v1` | GET | Découverte de service — liste toutes les routes enregistrées, la version, le mode de cadrage | +| `/api/v1/discovery` | GET | Alias explicite du document de découverte ci-dessus | | `/api/v1/openapi.json` | GET | Spécification OpenAPI 3.0 pour chaque point de terminaison du runtime en cours d'exécution | | `/api/v1/search` | GET | Recherche plein texte sur les champs recherchables de tous les objets | +## Restreindre la surface d'API + +Les endpoints générés automatiquement sont gouvernés par objet, de sorte que +vous pouvez retirer un objet de l'API ou le rendre en lecture seule sans écrire +aucun code de route : + +- **`apiEnabled`** (booléen, **par défaut `true`**) — définissez `false` pour + retirer entièrement l'objet de la surface REST. Les requêtes vers ses routes + renvoient 404. +- **`apiMethods`** (liste blanche optionnelle) — lorsqu'elle est définie, seules + les opérations listées sont accessibles ; toute autre opération est rejetée au + niveau de la couche REST. Valeurs autorisées : `get`, `list`, `create`, + `update`, `delete`, `upsert`, `bulk`, `aggregate`, `history`, `search`, + `restore`, `purge`, `import`, `export`. + +```ts +// Un objet de référence en lecture seule, jamais inscriptible via l'API : +defineObject({ + name: 'exchange_rate', + apiMethods: ['get', 'list'], + // ...fields +}) + +// Un objet interne que l'API n'expose jamais : +defineObject({ + name: 'sync_cursor', + apiEnabled: false, + // ...fields +}) +``` + +Les deux sont désormais appliqués au niveau de la couche REST (ADR-0049) — les +versions antérieures analysaient ces propriétés mais ne les appliquaient pas. + ## Données — `/api/v1/data/*` CRUD + requêtes avancées pour chaque objet que vous déclarez. `:object` est le diff --git a/content/docs/reference/rest-api.ja.mdx b/content/docs/reference/rest-api.ja.mdx index 899a4ca..c2b4c23 100644 --- a/content/docs/reference/rest-api.ja.mdx +++ b/content/docs/reference/rest-api.ja.mdx @@ -30,9 +30,41 @@ RBAC + 行レベルセキュリティ + フィールドレベルセキュリテ | Path | Method | 目的 | |:--|:--|:--| | `/api/v1` | GET | サービスディスカバリ — 登録されたすべてのルート、バージョン、スコープモードを一覧表示 | +| `/api/v1/discovery` | GET | 上記のディスカバリドキュメントに対する明示的なエイリアス | | `/api/v1/openapi.json` | GET | 実行中のランタイムにあるすべてのエンドポイントの OpenAPI 3.0 仕様 | | `/api/v1/search` | GET | すべてのオブジェクトの検索可能フィールドにまたがる全文検索 | +## API 表面の制限 + +自動生成されるエンドポイントはオブジェクト単位で制御されるため、ルートコードを一切書かずに、 +オブジェクトを API から外したり読み取り専用にしたりできます: + +- **`apiEnabled`**(boolean、**デフォルト `true`**)— `false` に設定すると、オブジェクトを + REST 表面から完全に除外します。そのルートへのリクエストは 404 になります。 +- **`apiMethods`**(任意のホワイトリスト)— 設定すると、リストされた操作のみが到達可能になり、 + それ以外の操作は REST レイヤーで拒否されます。許可される値: `get`、`list`、`create`、 + `update`、`delete`、`upsert`、`bulk`、`aggregate`、`history`、`search`、`restore`、 + `purge`、`import`、`export`。 + +```ts +// 読み取り専用の参照オブジェクト。API 経由では書き込み不可: +defineObject({ + name: 'exchange_rate', + apiMethods: ['get', 'list'], + // ...fields +}) + +// API が決して公開しない内部オブジェクト: +defineObject({ + name: 'sync_cursor', + apiEnabled: false, + // ...fields +}) +``` + +どちらも現在は REST レイヤーで強制適用されます(ADR-0049)— 以前のバージョンではこれらの +プロパティをパースするだけで、適用していませんでした。 + ## Data — `/api/v1/data/*` 宣言したすべてのオブジェクトに対する CRUD + 高度なクエリ。`:object` は diff --git a/content/docs/reference/rest-api.ko.mdx b/content/docs/reference/rest-api.ko.mdx index 8ba449a..8b23e97 100644 --- a/content/docs/reference/rest-api.ko.mdx +++ b/content/docs/reference/rest-api.ko.mdx @@ -29,9 +29,41 @@ ObjectOS는 [Better Auth](https://www.better-auth.com/)를 사용합니다. `/ap | Path | Method | Purpose | |:--|:--|:--| | `/api/v1` | GET | 서비스 디스커버리 — 등록된 모든 라우트, 버전, 범위 지정 모드를 나열 | +| `/api/v1/discovery` | GET | 위 디스커버리 문서에 대한 명시적 별칭 | | `/api/v1/openapi.json` | GET | 실행 중인 런타임의 모든 엔드포인트에 대한 OpenAPI 3.0 사양 | | `/api/v1/search` | GET | 모든 객체의 검색 가능 필드에 대한 전문(full-text) 검색 | +## Restricting the API surface + +자동 생성된 엔드포인트는 객체 단위로 제어되므로, 라우트 코드를 작성하지 않고도 +객체를 API에서 제외하거나 읽기 전용으로 만들 수 있습니다: + +- **`apiEnabled`** (boolean, **기본값 `true`**) — `false`로 설정하면 객체가 REST + 표면에서 완전히 제외됩니다. 해당 라우트로의 요청은 404를 반환합니다. +- **`apiMethods`** (선택적 화이트리스트) — 설정하면 나열된 작업만 도달 가능하며, + 그 외 작업은 REST 계층에서 거부됩니다. 허용 값: `get`, `list`, `create`, + `update`, `delete`, `upsert`, `bulk`, `aggregate`, `history`, `search`, + `restore`, `purge`, `import`, `export`. + +```ts +// API로는 절대 쓸 수 없는 읽기 전용 참조 객체: +defineObject({ + name: 'exchange_rate', + apiMethods: ['get', 'list'], + // ...fields +}) + +// API가 절대 노출하지 않는 내부 객체: +defineObject({ + name: 'sync_cursor', + apiEnabled: false, + // ...fields +}) +``` + +이 둘은 이제 REST 계층에서 강제됩니다(ADR-0049) — 이전 버전은 이 속성들을 +파싱했지만 적용하지는 않았습니다. + ## Data — `/api/v1/data/*` 선언하는 모든 객체에 대한 CRUD + 고급 쿼리. `:object`는 객체의 diff --git a/content/docs/reference/rest-api.mdx b/content/docs/reference/rest-api.mdx index 12a09bc..dd07eab 100644 --- a/content/docs/reference/rest-api.mdx +++ b/content/docs/reference/rest-api.mdx @@ -30,9 +30,41 @@ row-level security + field-level security inside the data engine. | Path | Method | Purpose | |:--|:--|:--| | `/api/v1` | GET | Service discovery — lists all registered routes, version, scoping mode | +| `/api/v1/discovery` | GET | Explicit alias for the discovery document above | | `/api/v1/openapi.json` | GET | OpenAPI 3.0 spec for every endpoint in the running runtime | | `/api/v1/search` | GET | Full-text search across searchable fields on all objects | +## Restricting the API surface + +The auto-generated endpoints are governed per object, so you can take an +object off the API or make it read-only without writing any route code: + +- **`apiEnabled`** (boolean, **default `true`**) — set `false` to omit the + object from the REST surface entirely. Requests to its routes 404. +- **`apiMethods`** (optional whitelist) — when set, only the listed operations + are reachable; any other operation is rejected at the REST layer. Allowed + values: `get`, `list`, `create`, `update`, `delete`, `upsert`, `bulk`, + `aggregate`, `history`, `search`, `restore`, `purge`, `import`, `export`. + +```ts +// A read-only reference object, never writable over the API: +defineObject({ + name: 'exchange_rate', + apiMethods: ['get', 'list'], + // ...fields +}) + +// An internal object that the API never exposes: +defineObject({ + name: 'sync_cursor', + apiEnabled: false, + // ...fields +}) +``` + +Both are now enforced at the REST layer (ADR-0049) — earlier versions parsed +these properties but did not apply them. + ## Data — `/api/v1/data/*` CRUD + advanced query for every object you declare. `:object` is the diff --git a/content/docs/reference/rest-api.zh-Hans.mdx b/content/docs/reference/rest-api.zh-Hans.mdx index f63ffeb..e002d7a 100644 --- a/content/docs/reference/rest-api.zh-Hans.mdx +++ b/content/docs/reference/rest-api.zh-Hans.mdx @@ -21,9 +21,35 @@ ObjectOS 使用 [Better Auth](https://www.better-auth.com/)。`/api/v1` 下所 | 路径 | 方法 | 用途 | |:--|:--|:--| | `/api/v1` | GET | 服务发现 —— 列出所有已注册路由、版本、作用域模式 | +| `/api/v1/discovery` | GET | 上述发现文档的显式别名 | | `/api/v1/openapi.json` | GET | 运行时中每个端点的 OpenAPI 3.0 spec | | `/api/v1/search` | GET | 对所有对象上 searchable 字段的全文搜索 | +## 限制 API 暴露面 + +自动生成的端点按对象逐个治理,因此你无需编写任何路由代码就能将某个对象移出 API 或将其设为只读: + +- **`apiEnabled`**(boolean,**默认 `true`**)—— 设为 `false` 可将该对象完全从 REST 面移除。对其路由的请求返回 404。 +- **`apiMethods`**(可选白名单)—— 设置后,仅列出的操作可达;其他任何操作都在 REST 层被拒绝。允许的取值:`get`、`list`、`create`、`update`、`delete`、`upsert`、`bulk`、`aggregate`、`history`、`search`、`restore`、`purge`、`import`、`export`。 + +```ts +// 一个只读的参考对象,永远不可通过 API 写入: +defineObject({ + name: 'exchange_rate', + apiMethods: ['get', 'list'], + // ...fields +}) + +// 一个 API 永不暴露的内部对象: +defineObject({ + name: 'sync_cursor', + apiEnabled: false, + // ...fields +}) +``` + +两者现在都在 REST 层强制执行(ADR-0049)—— 早期版本会解析这些属性但并不应用它们。 + ## 数据 —— `/api/v1/data/*` 对你声明的每个对象提供 CRUD + 高级查询。`:object` 是对象的 `name`(snake_case)。 diff --git a/content/docs/resources/changelog.de.mdx b/content/docs/resources/changelog.de.mdx index b3940ad..059a829 100644 --- a/content/docs/resources/changelog.de.mdx +++ b/content/docs/resources/changelog.de.mdx @@ -11,9 +11,9 @@ ObjectOS folgt **[Semantic Versioning](https://semver.org/)**: `MAJOR.MINOR.PATC | Versionssprung | Was es bedeutet | Was zu tun ist | |---|---|---| -| **Patch** (`4.0.1 → 4.0.2`) | Fehlerbehebungen, keine Verhaltensänderung | Aktualisieren, keine App-Änderungen nötig | -| **Minor** (`4.0 → 4.1`) | Neue Funktionen, abwärtskompatibel | Aktualisieren, optional neue Funktionen übernehmen | -| **Major** (`4 → 5`) | Breaking Changes, in den Release Notes dokumentiert | Lesen Sie den Migrationsleitfaden vor dem Upgrade | +| **Patch** (`9.7.0 → 9.7.1`) | Fehlerbehebungen, keine Verhaltensänderung | Aktualisieren, keine App-Änderungen nötig | +| **Minor** (`9.6 → 9.7`) | Neue Funktionen, abwärtskompatibel | Aktualisieren, optional neue Funktionen übernehmen | +| **Major** (`8 → 9`) | Breaking Changes, in den Release Notes dokumentiert | Lesen Sie den Migrationsleitfaden vor dem Upgrade | Alle `@objectstack/*`-Pakete werden gemeinsam mit einer synchronisierten Versionsnummer veröffentlicht — sie werden als Matrix getestet, nicht einzeln. @@ -22,7 +22,7 @@ Versionsnummer veröffentlicht — sie werden als Matrix getestet, nicht einzeln | Komponente | Kompatibilitätsregel | |---|---| -| ObjectOS-Image ↔ kompiliertes Artefakt | Gleiche Minor-Version. Ein 4.0.x-Image führt ein 4.0.x-Artefakt aus; ein 4.1-Artefakt kann Funktionen nutzen, die in einem 4.0-Image nicht verfügbar sind. | +| ObjectOS-Image ↔ kompiliertes Artefakt | Gleiche Minor-Version. Ein 9.7.x-Image führt ein 9.7.x-Artefakt aus; ein 9.7-Artefakt kann Funktionen nutzen, die in einem 9.6-Image nicht verfügbar sind. | | ObjectOS ↔ CLI | Gleiche Minor-Version empfohlen. Die per `npm i -g` installierte CLI erzeugt Scaffolds, die auf ihre eigene Version gepinnt sind. | | ObjectOS ↔ Datenbanktreiber | Treiber durch den Image-Build gepinnt; prüfen Sie Postgres ≥ 13 / MongoDB ≥ 5 / Turso (jede aktuelle Version). | | Node.js | **20 LTS oder neuer**. 22 LTS empfohlen für neue Deployments. | @@ -31,9 +31,9 @@ Versionsnummer veröffentlicht — sie werden als Matrix getestet, nicht einzeln | Branch | Status | Bis | |---|---|---| -| **4.x** (aktuell) | Aktive Entwicklung; neue Funktionen und Fixes | Mindestens 12 Monate nach dem Erscheinen von 5.0 | -| **3.x** | Nur Sicherheitsfixes | EOL mit dem Release von 5.0 | -| **≤ 2.x** | Nicht unterstützt | Bereits EOL | +| **9.x** (aktuell) | Aktive Entwicklung; neue Funktionen und Fixes | Mindestens 12 Monate nach dem Erscheinen von 10.0 | +| **8.x** | Nur Sicherheitsfixes | EOL mit dem Release von 10.0 | +| **≤ 7.x** | Nicht unterstützt | Bereits EOL | Kritische Sicherheitsfixes werden auf den aktuellen und den vorherigen Major-Branch zurückportiert. Alles andere landet auf `main`. @@ -51,9 +51,64 @@ Abonnieren Sie Releases auf GitHub, um benachrichtigt zu werden. ## Aktuelle Highlights -### 8.0.x — aktueller Release-Zug - -ObjectOS One und der gebündelte Server laufen jetzt auf `@objectstack` **8.0.1**. +### 9.x — aktueller Release-Zug + +ObjectOS One und der gebündelte Server laufen jetzt auf `@objectstack` **9.7.0**. +Der Runtime-Boot-Vertrag ist gegenüber 8.0 unverändert — `createStandaloneStack` +nimmt weiterhin dieselben Artefakt-, Umgebungs- und Datenbankeinstellungen entgegen —, +sodass ein 8.0-Deployment ohne Konfigurationsänderungen weiterrollt. Was sich +bewegt hat, ist die autorenseitige Oberfläche: + +- **Analytics-Datasets sind die einzige Autorenoberfläche** (9.0, Breaking) — + Dashboard-Widgets, Berichte und Listen-Charts binden jetzt ein semantisches + `dataset` (`defineDataset(...)`) und wählen Dimensionen/Maße **per Name**. Die + alten Inline-Abfragefelder (`object`/`valueField`/`aggregate` an Widgets, + `objectName`/`columns`/`groupingsDown` an Berichten, `xAxisField`/`yAxisFields` + an Listen-Charts) wurden entfernt. Migration: Verschieben Sie die Inline-Abfrage + in ein `defineDataset` und referenzieren Sie es per Name. `ChartTypeSchema` hat + außerdem 8 Varianttypen verworfen, die nur als ihr Basistyp gerendert wurden + (`stacked-bar`→`bar`, `spline`→`line`, `bubble`→`scatter`, …). +- **Strengere Validierung zur Build-Zeit** (9.6–9.7) — `os compile` **scheitert** + jetzt an blanken Feldreferenzen (`amount` statt `record.amount`), unbekannten + CEL-Funktionen und falscher Interpolationssyntax für Flow-Werte, jeweils mit + einem „Meinten Sie"-Hinweis. Ein Stack, der zuvor „baute, aber stillschweigend + falsch war", scheitert jetzt lautstark — führen Sie `os compile` nach dem Upgrade + erneut aus und beheben Sie, was es bemängelt. +- **Zahlenfeld-Formeln berechnen gemischte Arithmetik** (9.7) — `record.amount / 100` + und `record.price * 2` werten jetzt aus, statt stillschweigend `null` zu liefern; + der `/ 100.0`-Float-Literal-Workaround ist nicht mehr nötig. +- **REST-Gating auf Objektebene, jetzt durchgesetzt** (ADR-0049) — `apiEnabled: false` + eines Objekts entfernt es aus der REST-Oberfläche, und eine `apiMethods`-Whitelist + schränkt ein, welche Operationen erreichbar sind. Zuvor geparst, aber nicht + durchgesetzt. +- **Paketdokumentation als Metadaten + `book`-Navigation** (9.3–9.6) — + `src/docs/*.md` registrieren sich als `doc`-Metadaten; das `book`-Element + (ADR-0046) deklariert eine Navigationsachse mit abgeleiteter Mitgliedschaft, + bereitgestellt unter `GET /api/v1/meta/book/:name/tree` mit Audience-Gating. +- **`os package install`** (9.3) — installiert ein Paket in eine laufende Runtime + aus einer Katalog-ID oder einem Inline-Artefakt für Air-Gap-Umgebungen, + authentifiziert mit `--email` / `--password`. +- **Genehmigungen** (9.3) — Zurücksenden zur Überarbeitung (`maxRevisions`, + Standard 3), jobs-gestützte SLA-Auto-Eskalation, Listensuche/Paginierung und + sitzungsfreie zweisprachige Bestätigungslinks zum Genehmigen/Ablehnen. +- **Eingehende Webhook-Flow-Trigger** (9.3) — ein `type: 'api'`-Flow stellt einen + HMAC-verifizierten `POST /api/v1/automation/hooks/:flowName/:hookId`-Endpunkt mit + idempotenter, queue-gestützter Aufnahme bereit. +- **Aufbewahrung von Benachrichtigungen standardmäßig aktiv** (9.5) — der + Benachrichtigungsverlauf wird automatisch nach **90 Tagen** bereinigt; setzen Sie + die Messaging-Einstellung `retentionDays: 0`, um den Verlauf dauerhaft zu behalten. +- **CLI bündelt AI-Provider-SDKs** (9.0) — OpenAI-kompatible Provider (DeepSeek, + DashScope, SiliconFlow, OpenRouter, Cloudflare) funktionieren auf einer global + installierten CLI sofort. + +Eine zu beachtende Verhaltensänderung beim Flow-Authoring: Der `outputVariable` +eines `create_record`-Knotens hält jetzt das **erstellte Datensatzobjekt** (zuvor +die blanke ID), aktualisieren Sie also `{var}`-Referenzen, die eine ID erwarteten, +auf `{var.id}`. + +### 8.0.x + +ObjectOS One und der gebündelte Server liefen auf `@objectstack` **8.0.1**. - **MCP über Streamable HTTP** — jede Bereitstellung kann als netzwerkerreichbarer [Model-Context-Protocol](https://modelcontextprotocol.io)-Server fungieren. diff --git a/content/docs/resources/changelog.es.mdx b/content/docs/resources/changelog.es.mdx index 87da6ee..d6b1259 100644 --- a/content/docs/resources/changelog.es.mdx +++ b/content/docs/resources/changelog.es.mdx @@ -11,9 +11,9 @@ ObjectOS sigue el **[Versionado semántico](https://semver.org/)**: `MAJOR.MINOR | Incremento de versión | Qué significa | Qué hacer | |---|---|---| -| **Parche** (`4.0.1 → 4.0.2`) | Corrección de errores, sin cambios de comportamiento | Actualiza, no se requieren cambios en la aplicación | -| **Menor** (`4.0 → 4.1`) | Nuevas funciones, compatible con versiones anteriores | Actualiza y, opcionalmente, adopta las nuevas funciones | -| **Mayor** (`4 → 5`) | Cambios incompatibles documentados en las notas de versión | Lee la guía de migración antes de actualizar | +| **Parche** (`9.7.0 → 9.7.1`) | Corrección de errores, sin cambios de comportamiento | Actualiza, no se requieren cambios en la aplicación | +| **Menor** (`9.6 → 9.7`) | Nuevas funciones, compatible con versiones anteriores | Actualiza y, opcionalmente, adopta las nuevas funciones | +| **Mayor** (`8 → 9`) | Cambios incompatibles documentados en las notas de versión | Lee la guía de migración antes de actualizar | Todos los paquetes `@objectstack/*` se publican juntos con un número de versión sincronizado: se prueban como una matriz, no de forma independiente. @@ -22,7 +22,7 @@ versión sincronizado: se prueban como una matriz, no de forma independiente. | Componente | Regla de compatibilidad | |---|---| -| Imagen de ObjectOS ↔ artefacto compilado | Misma versión menor. Una imagen 4.0.x ejecuta un artefacto 4.0.x; un artefacto 4.1 puede usar funciones no disponibles en una imagen 4.0. | +| Imagen de ObjectOS ↔ artefacto compilado | Misma versión menor. Una imagen 9.7.x ejecuta un artefacto 9.7.x; un artefacto 9.7 puede usar funciones no disponibles en una imagen 9.6. | | ObjectOS ↔ CLI | Se recomienda la misma versión menor. La CLI en `npm i -g` genera andamiajes fijados a su propia versión. | | ObjectOS ↔ controlador de base de datos | El controlador queda fijado por la compilación de la imagen; verifica Postgres ≥ 13 / MongoDB ≥ 5 / Turso (cualquiera actual). | | Node.js | **20 LTS o posterior**. Se recomienda 22 LTS para nuevos despliegues. | @@ -31,9 +31,9 @@ versión sincronizado: se prueban como una matriz, no de forma independiente. | Rama | Estado | Hasta | |---|---|---| -| **4.x** (actual) | Desarrollo activo; nuevas funciones y correcciones | Al menos 12 meses después del lanzamiento de 5.0 | -| **3.x** | Solo correcciones de seguridad | EOL en el lanzamiento de 5.0 | -| **≤ 2.x** | Sin soporte | Ya en EOL | +| **9.x** (actual) | Desarrollo activo; nuevas funciones y correcciones | Al menos 12 meses después del lanzamiento de 10.0 | +| **8.x** | Solo correcciones de seguridad | EOL en el lanzamiento de 10.0 | +| **≤ 7.x** | Sin soporte | Ya en EOL | Las correcciones de seguridad críticas se retroportan a la versión mayor actual y a la anterior. Todo lo demás se incorpora en `main`. @@ -51,9 +51,67 @@ Suscríbete a las versiones en GitHub para recibir notificaciones. ## Aspectos destacados recientes -### 8.0.x — tren de versiones actual - -ObjectOS One y el servidor incluido ahora se ejecutan sobre `@objectstack` **8.0.1**. +### 9.x — tren de versiones actual + +ObjectOS One y el servidor incluido ahora se ejecutan sobre `@objectstack` **9.7.0**. +El contrato de arranque del runtime no cambia respecto a 8.0 — +`createStandaloneStack` sigue tomando el mismo artefacto, entorno y ajustes de +base de datos—, por lo que un despliegue 8.0 actualiza sin cambios de +configuración. Lo que se movió es la superficie orientada al autor: + +- **Los datasets de analítica son la única superficie de autor** (9.0, cambio + incompatible): los widgets de panel, los informes y los gráficos de lista + ahora vinculan un `dataset` semántico (`defineDataset(...)`) y seleccionan + dimensiones/medidas **por nombre**. Se eliminaron los antiguos campos de + consulta en línea (`object`/`valueField`/`aggregate` en widgets, + `objectName`/`columns`/`groupingsDown` en informes, `xAxisField`/`yAxisFields` + en gráficos de lista). Migración: mueve la consulta en línea a un + `defineDataset` y refiérete a él por nombre. `ChartTypeSchema` también eliminó + 8 tipos de variante que solo se renderizaban como su base (`stacked-bar`→`bar`, + `spline`→`line`, `bubble`→`scatter`, …). +- **Validación más estricta en tiempo de compilación** (9.6–9.7): `os compile` + ahora **falla** ante referencias de campo sin prefijo (`amount` en lugar de + `record.amount`), funciones CEL desconocidas y sintaxis de interpolación de + valores de flujo incorrecta, cada una con una sugerencia «quizás quisiste + decir». Un stack que antes «compilaba pero estaba silenciosamente mal» ahora + falla de forma visible: vuelve a ejecutar `os compile` tras actualizar y + corrige lo que señale. +- **Las fórmulas de campos numéricos calculan aritmética mixta** (9.7): + `record.amount / 100` y `record.price * 2` ahora se evalúan en lugar de + producir silenciosamente `null`; ya no se necesita el truco del literal flotante + `/ 100.0`. +- **Control de REST a nivel de objeto, ahora aplicado** (ADR-0049): el + `apiEnabled: false` de un objeto lo retira de la superficie REST, y una lista + blanca `apiMethods` restringe qué operaciones son accesibles. Antes se + analizaba pero no se aplicaba. +- **Documentación de paquetes como metadatos + navegación `book`** (9.3–9.6): + los `src/docs/*.md` se registran como metadatos `doc`; el elemento `book` + (ADR-0046) declara una espina de navegación de pertenencia derivada, servida en + `GET /api/v1/meta/book/:name/tree` con control por audiencia. +- **`os package install`** (9.3): instala un paquete en un runtime en ejecución + desde un id de catálogo o un artefacto en línea aislado de la red, + autenticándose con `--email` / `--password`. +- **Aprobaciones** (9.3): devolución para revisión (`maxRevisions`, predeterminado + 3), autoescalada de SLA respaldada por jobs, búsqueda/paginación de listas y + enlaces de confirmación de aprobar/rechazar bilingües y sin sesión. +- **Disparadores de flujo por webhook entrante** (9.3): un flujo `type: 'api'` + monta un endpoint `POST /api/v1/automation/hooks/:flowName/:hookId` verificado + con HMAC, con ingesta idempotente y respaldada por cola. +- **Retención de notificaciones activada por defecto** (9.5): el historial de + notificaciones se poda automáticamente a los **90 días**; pon + `retentionDays: 0` en la mensajería para conservar el historial para siempre. +- **La CLI incluye los SDK de proveedores de IA** (9.0): los proveedores + compatibles con OpenAI (DeepSeek, DashScope, SiliconFlow, OpenRouter, + Cloudflare) funcionan de inmediato en una CLI instalada globalmente. + +Un cambio de comportamiento en la autoría de flujos a tener en cuenta: el +`outputVariable` de un nodo `create_record` ahora contiene el **objeto de +registro creado** (antes era el id sin más), así que actualiza las referencias +`{var}` que esperaban un id a `{var.id}`. + +### 8.0.x + +ObjectOS One y el servidor incluido se ejecutaban sobre `@objectstack` **8.0.1**. - **MCP sobre Streamable HTTP**: cada despliegue puede actuar como un servidor [Model Context Protocol](https://modelcontextprotocol.io) accesible por red. diff --git a/content/docs/resources/changelog.fr.mdx b/content/docs/resources/changelog.fr.mdx index fcadac0..f7145df 100644 --- a/content/docs/resources/changelog.fr.mdx +++ b/content/docs/resources/changelog.fr.mdx @@ -11,9 +11,9 @@ ObjectOS suit le **[versionnage sémantique](https://semver.org/)** : `MAJOR.MIN | Incrément de version | Signification | Que faire | |---|---|---| -| **Patch** (`4.0.1 → 4.0.2`) | Corrections de bogues, aucun changement de comportement | Mettre à jour, aucune modification de l'application nécessaire | -| **Mineur** (`4.0 → 4.1`) | Nouvelles fonctionnalités, rétrocompatibles | Mettre à jour, adopter éventuellement les nouvelles fonctionnalités | -| **Majeur** (`4 → 5`) | Changements incompatibles documentés dans les notes de version | Lire le guide de migration avant de mettre à niveau | +| **Patch** (`9.7.0 → 9.7.1`) | Corrections de bogues, aucun changement de comportement | Mettre à jour, aucune modification de l'application nécessaire | +| **Mineur** (`9.6 → 9.7`) | Nouvelles fonctionnalités, rétrocompatibles | Mettre à jour, adopter éventuellement les nouvelles fonctionnalités | +| **Majeur** (`8 → 9`) | Changements incompatibles documentés dans les notes de version | Lire le guide de migration avant de mettre à niveau | Tous les paquets `@objectstack/*` sont publiés ensemble avec un numéro de version synchronisé — ils sont testés en tant que matrice, et non @@ -23,7 +23,7 @@ indépendamment. | Composant | Règle de compatibilité | |---|---| -| Image ObjectOS ↔ artefact compilé | Même version mineure. Une image 4.0.x exécute un artefact 4.0.x ; un artefact 4.1 peut utiliser des fonctionnalités indisponibles dans une image 4.0. | +| Image ObjectOS ↔ artefact compilé | Même version mineure. Une image 9.7.x exécute un artefact 9.7.x ; un artefact 9.7 peut utiliser des fonctionnalités indisponibles dans une image 9.6. | | ObjectOS ↔ CLI | Même version mineure recommandée. Le CLI dans `npm i -g` écrit des squelettes épinglés à sa propre version. | | ObjectOS ↔ pilote de base de données | Pilote épinglé par la construction de l'image ; vérifier Postgres ≥ 13 / MongoDB ≥ 5 / Turso (toute version actuelle). | | Node.js | **20 LTS ou plus récent**. 22 LTS recommandé pour les nouveaux déploiements. | @@ -32,9 +32,9 @@ indépendamment. | Branche | Statut | Jusqu'à | |---|---|---| -| **4.x** (actuelle) | Développement actif ; nouvelles fonctionnalités et corrections | Au moins 12 mois après la sortie de la 5.0 | -| **3.x** | Corrections de sécurité uniquement | Fin de vie à la sortie de la 5.0 | -| **≤ 2.x** | Non prise en charge | Déjà en fin de vie | +| **9.x** (actuelle) | Développement actif ; nouvelles fonctionnalités et corrections | Au moins 12 mois après la sortie de la 10.0 | +| **8.x** | Corrections de sécurité uniquement | Fin de vie à la sortie de la 10.0 | +| **≤ 7.x** | Non prise en charge | Déjà en fin de vie | Les correctifs de sécurité critiques sont rétroportés vers la version majeure actuelle et la précédente. Tout le reste atterrit sur `main`. @@ -52,9 +52,68 @@ Abonnez-vous aux versions sur GitHub pour être notifié. ## Points marquants récents -### 8.0.x — train de versions actuel - -ObjectOS One et le serveur intégré tournent désormais sur `@objectstack` **8.0.1**. +### 9.x — train de versions actuel + +ObjectOS One et le serveur intégré tournent désormais sur `@objectstack` **9.7.0**. +Le contrat de démarrage du runtime est inchangé depuis la 8.0 — +`createStandaloneStack` prend toujours les mêmes paramètres d'artefact, +d'environnement et de base de données — de sorte qu'un déploiement 8.0 se met à +jour sans changement de configuration. C'est la surface destinée aux auteurs qui +a évolué : + +- **Les datasets d'analytique sont l'unique surface d'auteur** (9.0, incompatible) — + les widgets de tableau de bord, les rapports et les list-charts lient désormais + un `dataset` sémantique (`defineDataset(...)`) et sélectionnent les + dimensions/mesures **par nom**. Les anciens champs de requête en ligne + (`object`/`valueField`/`aggregate` sur les widgets, + `objectName`/`columns`/`groupingsDown` sur les rapports, `xAxisField`/`yAxisFields` + sur les list-charts) ont été supprimés. Migration : déplacez la requête en ligne + dans un `defineDataset` et référencez-le par nom. `ChartTypeSchema` a également + abandonné 8 types de variantes qui ne faisaient que rendre comme leur type de base + (`stacked-bar`→`bar`, `spline`→`line`, `bubble`→`scatter`, …). +- **Validation plus stricte au moment du build** (9.6–9.7) — `os compile` + **échoue** désormais sur les références de champ nues (`amount` au lieu de + `record.amount`), les fonctions CEL inconnues et la mauvaise syntaxe + d'interpolation de valeurs de flux, chacune avec une suggestion + « vouliez-vous dire ». Une stack qui auparavant « se construisait mais était + silencieusement erronée » échoue désormais bruyamment — relancez `os compile` + après la mise à niveau et corrigez ce qu'il signale. +- **Les formules de champ numérique calculent l'arithmétique mixte** (9.7) — + `record.amount / 100` et `record.price * 2` s'évaluent désormais au lieu de + produire silencieusement `null` ; le contournement par littéral flottant + `/ 100.0` n'est plus nécessaire. +- **Contrôle REST au niveau de l'objet, désormais appliqué** (ADR-0049) — un + `apiEnabled: false` sur un objet le retire de la surface REST, et une liste + blanche `apiMethods` restreint les opérations accessibles. Auparavant analysé + mais non appliqué. +- **Documentation de paquet sous forme de métadonnées + navigation `book`** (9.3–9.6) — + les `src/docs/*.md` s'enregistrent comme métadonnées `doc` ; l'élément `book` + (ADR-0046) déclare une colonne vertébrale de navigation à appartenance dérivée, + servie sur `GET /api/v1/meta/book/:name/tree` avec un contrôle par audience. +- **`os package install`** (9.3) — installe un paquet dans un runtime en cours + d'exécution à partir d'un identifiant de catalogue ou d'un artefact en ligne + isolé (air-gapped), en s'authentifiant avec `--email` / `--password`. +- **Approbations** (9.3) — renvoi pour révision (`maxRevisions`, par défaut 3), + auto-escalade de SLA adossée aux jobs, recherche/pagination de listes, et liens + de confirmation d'approbation/rejet bilingues et sans session. +- **Déclencheurs de flux par webhook entrant** (9.3) — un flux `type: 'api'` monte + un endpoint `POST /api/v1/automation/hooks/:flowName/:hookId` vérifié par HMAC, + avec une ingestion idempotente et adossée à une file d'attente. +- **Rétention des notifications activée par défaut** (9.5) — l'historique des + notifications est auto-purgé à **90 jours** ; définissez `retentionDays: 0` dans + la messagerie pour conserver l'historique indéfiniment. +- **Le CLI embarque les SDK des fournisseurs d'IA** (9.0) — les fournisseurs + compatibles OpenAI (DeepSeek, DashScope, SiliconFlow, OpenRouter, Cloudflare) + fonctionnent immédiatement sur un CLI installé globalement. + +Un changement de comportement à noter côté création de flux : l'`outputVariable` +d'un nœud `create_record` contient désormais l'**objet enregistrement créé** (et +non plus l'id nu), donc mettez à jour les références `{var}` qui attendaient un id +en `{var.id}`. + +### 8.0.x + +ObjectOS One et le serveur intégré tournaient sur `@objectstack` **8.0.1**. - **MCP via Streamable HTTP** — chaque déploiement peut agir comme un serveur [Model Context Protocol](https://modelcontextprotocol.io) accessible via le diff --git a/content/docs/resources/changelog.ja.mdx b/content/docs/resources/changelog.ja.mdx index 56b353f..a3dd464 100644 --- a/content/docs/resources/changelog.ja.mdx +++ b/content/docs/resources/changelog.ja.mdx @@ -11,9 +11,9 @@ ObjectOS は **[セマンティックバージョニング](https://semver.org/) | バージョンの更新 | 意味 | 対応 | |---|---|---| -| **パッチ** (`4.0.1 → 4.0.2`) | バグ修正、動作の変更なし | そのまま更新でき、アプリの変更は不要 | -| **マイナー** (`4.0 → 4.1`) | 新機能、後方互換あり | そのまま更新でき、必要に応じて新機能を採用 | -| **メジャー** (`4 → 5`) | リリースノートに記載された破壊的変更 | アップグレード前に移行ガイドを必読 | +| **パッチ** (`9.7.0 → 9.7.1`) | バグ修正、動作の変更なし | そのまま更新でき、アプリの変更は不要 | +| **マイナー** (`9.6 → 9.7`) | 新機能、後方互換あり | そのまま更新でき、必要に応じて新機能を採用 | +| **メジャー** (`8 → 9`) | リリースノートに記載された破壊的変更 | アップグレード前に移行ガイドを必読 | すべての `@objectstack/*` パッケージは、同期されたバージョン番号で一緒にリリースされます。これらは個別ではなく、マトリックスとしてテストされます。 @@ -21,7 +21,7 @@ ObjectOS は **[セマンティックバージョニング](https://semver.org/) | コンポーネント | 互換性ルール | |---|---| -| ObjectOS イメージ ↔ コンパイル済みアーティファクト | 同一のマイナーバージョン。4.0.x のイメージは 4.0.x のアーティファクトを実行します。4.1 のアーティファクトは 4.0 のイメージで利用できない機能を使用している場合があります。 | +| ObjectOS イメージ ↔ コンパイル済みアーティファクト | 同一のマイナーバージョン。9.7.x のイメージは 9.7.x のアーティファクトを実行します。9.7 のアーティファクトは 9.6 のイメージで利用できない機能を使用している場合があります。 | | ObjectOS ↔ CLI | 同一のマイナーバージョンを推奨。`npm i -g` の CLI は、自身のバージョンに固定されたスキャフォールドを書き出します。 | | ObjectOS ↔ データベースドライバー | ドライバーはイメージビルドで固定されます。Postgres ≥ 13 / MongoDB ≥ 5 / Turso(現行いずれか)を確認してください。 | | Node.js | **20 LTS 以降**。新規デプロイには 22 LTS を推奨。 | @@ -30,9 +30,9 @@ ObjectOS は **[セマンティックバージョニング](https://semver.org/) | ブランチ | ステータス | 期限 | |---|---|---| -| **4.x**(現行) | 活発に開発中。新機能と修正 | 5.0 リリース後、少なくとも 12 か月 | -| **3.x** | セキュリティ修正のみ | 5.0 リリースで EOL | -| **≤ 2.x** | サポート対象外 | すでに EOL | +| **9.x**(現行) | 活発に開発中。新機能と修正 | 10.0 リリース後、少なくとも 12 か月 | +| **8.x** | セキュリティ修正のみ | 10.0 リリースで EOL | +| **≤ 7.x** | サポート対象外 | すでに EOL | 重大なセキュリティ修正は、現行および 1 つ前のメジャーバージョンにバックポートされます。それ以外はすべて `main` に取り込まれます。 @@ -49,9 +49,58 @@ GitHub でリリースを購読すると、通知を受け取れます。 ## 最近のハイライト -### 8.0.x — 現行リリーストレイン - -ObjectOS One とバンドル版サーバーは `@objectstack` **8.0.1** 上で動作します。 +### 9.x — 現行リリーストレイン + +ObjectOS One とバンドル版サーバーは現在 `@objectstack` **9.7.0** 上で動作します。 +ランタイムの起動コントラクトは 8.0 から変更ありません。`createStandaloneStack` +は引き続き同じアーティファクト・環境・データベース設定を受け取るため、8.0 のデプロイは +設定変更なしでそのまま更新できます。変わったのはオーサリング向けの表面です: + +- **分析データセットが唯一のオーサリング表面に**(9.0、破壊的)— + ダッシュボードのウィジェット、レポート、リストチャートは、セマンティックな `dataset` + (`defineDataset(...)`)をバインドし、ディメンション/メジャーを**名前で**選択するようになりました。 + 従来のインラインクエリフィールド(ウィジェットの `object`/`valueField`/`aggregate`、 + レポートの `objectName`/`columns`/`groupingsDown`、リストチャートの + `xAxisField`/`yAxisFields`)は削除されました。移行方法: インラインクエリを + `defineDataset` に移し、名前で参照します。`ChartTypeSchema` も、ベースとしてしか + 描画されなかった 8 つのバリアントタイプを廃止しました(`stacked-bar`→`bar`、 + `spline`→`line`、`bubble`→`scatter`、…)。 +- **ビルド時の検証が厳格化**(9.6–9.7)— `os compile` は、裸のフィールド参照 + (`record.amount` ではなく `amount`)、未知の CEL 関数、誤ったフロー値の補間構文に対して、 + それぞれ did-you-mean ヒント付きで**失敗する**ようになりました。以前は「ビルドは通るが + 暗黙的に誤っていた」スタックが、明示的に失敗するようになります。アップグレード後に + `os compile` を再実行し、指摘された箇所を修正してください。 +- **数値フィールドの数式が混合演算を計算**(9.7)— `record.amount / 100` や + `record.price * 2` が、暗黙的に `null` を返すのではなく評価されるようになりました。 + `/ 100.0` という浮動小数点リテラルの回避策はもう不要です。 +- **オブジェクト単位の REST ゲーティングを強制適用**(ADR-0049)— オブジェクトの + `apiEnabled: false` は REST 表面からそのオブジェクトを除外し、`apiMethods` + ホワイトリストは到達可能な操作を制限します。以前はパースされるだけで強制されていませんでした。 +- **パッケージドキュメントをメタデータ化 + `book` ナビゲーション**(9.3–9.6)— + `src/docs/*.md` は `doc` メタデータとして登録されます。`book` 要素(ADR-0046)は + 派生メンバーシップのナビゲーション軸を宣言し、対象者ゲーティング付きで + `GET /api/v1/meta/book/:name/tree` から提供されます。 +- **`os package install`**(9.3)— カタログ ID またはインラインのエアギャップ用アーティファクトから、 + 稼働中のランタイムにパッケージをインストールします。`--email` / `--password` で認証します。 +- **承認(Approvals)**(9.3)— 差し戻し再提出(`maxRevisions`、デフォルト 3)、 + ジョブベースの SLA 自動エスカレーション、一覧の検索/ページネーション、 + セッションレスのバイリンガル承認/却下確認リンク。 +- **インバウンド Webhook のフロートリガー**(9.3)— `type: 'api'` のフローは、 + HMAC 検証付きの `POST /api/v1/automation/hooks/:flowName/:hookId` エンドポイントをマウントし、 + 冪等かつキューベースの取り込みを行います。 +- **通知の保持期間がデフォルトで有効に**(9.5)— 通知履歴は **90 日**で自動的に剪定されます。 + 履歴を永久に保持するには、メッセージングの `retentionDays: 0` を設定します。 +- **CLI が AI プロバイダーの SDK をバンドル**(9.0)— OpenAI 互換プロバイダー + (DeepSeek、DashScope、SiliconFlow、OpenRouter、Cloudflare)が、 + グローバルインストールした CLI でそのまま動作します。 + +フロー作成での動作変更として 1 点注意: `create_record` ノードの `outputVariable` は、 +裸の ID ではなく**作成されたレコードオブジェクト**を保持するようになりました。ID を期待していた +`{var}` 参照は `{var.id}` に更新してください。 + +### 8.0.x + +ObjectOS One とバンドル版サーバーは `@objectstack` **8.0.1** 上で動作していました。 - **MCP over Streamable HTTP** — すべてのデプロイがネットワーク到達可能な [Model Context Protocol](https://modelcontextprotocol.io) サーバーとして機能できます。 diff --git a/content/docs/resources/changelog.ko.mdx b/content/docs/resources/changelog.ko.mdx index 02d33c6..a7c784c 100644 --- a/content/docs/resources/changelog.ko.mdx +++ b/content/docs/resources/changelog.ko.mdx @@ -11,9 +11,9 @@ ObjectOS는 **[유의적 버전(Semantic Versioning)](https://semver.org/)**을 | 버전 증가 | 의미 | 해야 할 일 | |---|---|---| -| **패치** (`4.0.1 → 4.0.2`) | 버그 수정, 동작 변경 없음 | 그대로 업데이트, 앱 변경 불필요 | -| **마이너** (`4.0 → 4.1`) | 새 기능, 하위 호환 | 그대로 업데이트, 필요 시 새 기능 도입 | -| **메이저** (`4 → 5`) | 릴리스 노트에 문서화된 호환성 깨짐 변경 | 업그레이드 전에 마이그레이션 가이드를 읽으세요 | +| **패치** (`9.7.0 → 9.7.1`) | 버그 수정, 동작 변경 없음 | 그대로 업데이트, 앱 변경 불필요 | +| **마이너** (`9.6 → 9.7`) | 새 기능, 하위 호환 | 그대로 업데이트, 필요 시 새 기능 도입 | +| **메이저** (`8 → 9`) | 릴리스 노트에 문서화된 호환성 깨짐 변경 | 업그레이드 전에 마이그레이션 가이드를 읽으세요 | 모든 `@objectstack/*` 패키지는 동기화된 버전 번호로 함께 릴리스됩니다 — 개별적으로가 아니라 매트릭스로 테스트됩니다. @@ -22,7 +22,7 @@ ObjectOS는 **[유의적 버전(Semantic Versioning)](https://semver.org/)**을 | 구성 요소 | 호환성 규칙 | |---|---| -| ObjectOS 이미지 ↔ 컴파일된 아티팩트 | 동일한 마이너 버전. 4.0.x 이미지는 4.0.x 아티팩트를 실행하며, 4.1 아티팩트는 4.0 이미지에서 사용할 수 없는 기능을 사용할 수 있습니다. | +| ObjectOS 이미지 ↔ 컴파일된 아티팩트 | 동일한 마이너 버전. 9.7.x 이미지는 9.7.x 아티팩트를 실행하며, 9.7 아티팩트는 9.6 이미지에서 사용할 수 없는 기능을 사용할 수 있습니다. | | ObjectOS ↔ CLI | 동일한 마이너 버전 권장. `npm i -g`로 설치한 CLI는 자체 버전에 고정된 스캐폴드를 작성합니다. | | ObjectOS ↔ 데이터베이스 드라이버 | 드라이버는 이미지 빌드에 고정됨; Postgres ≥ 13 / MongoDB ≥ 5 / Turso(현재 버전) 확인. | | Node.js | **20 LTS 이상**. 새 배포에는 22 LTS 권장. | @@ -31,9 +31,9 @@ ObjectOS는 **[유의적 버전(Semantic Versioning)](https://semver.org/)**을 | 브랜치 | 상태 | 종료 시점 | |---|---|---| -| **4.x** (현재) | 활발한 개발; 새 기능 및 수정 | 5.0 출시 후 최소 12개월 | -| **3.x** | 보안 수정만 | 5.0 릴리스 시 EOL | -| **≤ 2.x** | 지원 종료 | 이미 EOL | +| **9.x** (현재) | 활발한 개발; 새 기능 및 수정 | 10.0 출시 후 최소 12개월 | +| **8.x** | 보안 수정만 | 10.0 릴리스 시 EOL | +| **≤ 7.x** | 지원 종료 | 이미 EOL | 중대한 보안 수정은 현재 및 이전 메이저 버전에 백포트됩니다. 그 외 모든 것은 `main`에 반영됩니다. @@ -51,9 +51,57 @@ ObjectOS는 **[유의적 버전(Semantic Versioning)](https://semver.org/)**을 ## 주요 변경 사항 -### 8.0.x — 현재 릴리스 트레인 - -ObjectOS One과 번들 서버는 이제 `@objectstack` **8.0.1** 기반으로 동작합니다. +### 9.x — 현재 릴리스 트레인 + +ObjectOS One과 번들 서버는 이제 `@objectstack` **9.7.0** 기반으로 동작합니다. +런타임 부트 계약은 8.0과 동일합니다 — `createStandaloneStack`은 여전히 동일한 +아티팩트, 환경, 데이터베이스 설정을 받으므로 8.0 배포는 구성 변경 없이 그대로 +업데이트됩니다. 바뀐 것은 작성자(author)가 마주하는 표면입니다: + +- **분석 데이터셋이 유일한 작성자 표면이 되었습니다** (9.0, 호환성 깨짐) — + 대시보드 위젯, 보고서, 리스트 차트는 이제 의미 기반 `dataset` + (`defineDataset(...)`)에 바인딩하고 차원/측정값을 **이름으로** 선택합니다. 기존의 + 인라인 쿼리 필드(위젯의 `object`/`valueField`/`aggregate`, 보고서의 + `objectName`/`columns`/`groupingsDown`, 리스트 차트의 `xAxisField`/`yAxisFields`)는 + 제거되었습니다. 마이그레이션: 인라인 쿼리를 `defineDataset`으로 옮기고 이름으로 + 참조하세요. `ChartTypeSchema`도 기본형으로만 렌더링되던 8개의 변형 타입을 + 삭제했습니다(`stacked-bar`→`bar`, `spline`→`line`, `bubble`→`scatter`, …). +- **더 엄격한 빌드 타임 검증** (9.6–9.7) — `os compile`은 이제 단독 필드 참조 + (`record.amount` 대신 `amount`), 알 수 없는 CEL 함수, 잘못된 플로우 값 보간 구문에 + 대해 각각 did-you-mean 힌트와 함께 **실패**합니다. 이전에는 "빌드는 되지만 조용히 + 잘못되던" 스택이 이제 큰 소리로 실패합니다 — 업그레이드 후 `os compile`을 다시 + 실행하고 플래그된 항목을 수정하세요. +- **숫자 필드 수식이 혼합 산술을 계산합니다** (9.7) — `record.amount / 100`과 + `record.price * 2`가 이제 조용히 `null`을 내놓는 대신 평가됩니다. `/ 100.0` 부동 + 소수점 리터럴 우회법은 더 이상 필요하지 않습니다. +- **객체 단위 REST 게이팅, 이제 강제됨** (ADR-0049) — 객체의 `apiEnabled: false`는 + 해당 객체를 REST 표면에서 제거하고, `apiMethods` 화이트리스트는 어떤 작업에 + 도달할 수 있는지를 제한합니다. 이전에는 파싱은 되었지만 강제되지 않았습니다. +- **패키지 문서를 메타데이터로 + `book` 내비게이션** (9.3–9.6) — `src/docs/*.md`가 + `doc` 메타데이터로 등록됩니다. `book` 요소(ADR-0046)는 파생 멤버십 내비게이션 + 척추를 선언하며, 청중 게이팅과 함께 `GET /api/v1/meta/book/:name/tree`에서 + 제공됩니다. +- **`os package install`** (9.3) — 카탈로그 id 또는 인라인 에어갭 아티팩트로부터 + 실행 중인 런타임에 패키지를 설치하며, `--email` / `--password`로 인증합니다. +- **승인(Approvals)** (9.3) — 수정 요청 반려(`maxRevisions`, 기본값 3), 잡 기반 SLA + 자동 에스컬레이션, 리스트 검색/페이지네이션, 세션 없는 이중 언어 승인/거부 확인 + 링크. +- **인바운드 웹훅 플로우 트리거** (9.3) — `type: 'api'` 플로우는 HMAC 검증된 + `POST /api/v1/automation/hooks/:flowName/:hookId` 엔드포인트를 멱등적이고 큐 + 기반인 수집과 함께 마운트합니다. +- **알림 보존 기본값 켜짐** (9.5) — 알림 기록이 **90일**에 자동으로 정리됩니다. + 기록을 영구 보관하려면 메시징 `retentionDays: 0`을 설정하세요. +- **CLI가 AI 제공자 SDK를 번들합니다** (9.0) — OpenAI 호환 제공자(DeepSeek, + DashScope, SiliconFlow, OpenRouter, Cloudflare)가 전역 설치된 CLI에서 별도 설정 + 없이 동작합니다. + +주목할 플로우 작성 동작 변경 하나: `create_record` 노드의 `outputVariable`는 이제 +(단순 id가 아니라) **생성된 레코드 객체**를 담으므로, id를 기대하던 `{var}` 참조를 +`{var.id}`로 업데이트하세요. + +### 8.0.x + +ObjectOS One과 번들 서버는 `@objectstack` **8.0.1** 기반으로 동작했습니다. - **MCP over Streamable HTTP** — 모든 배포가 네트워크로 접근 가능한 [Model Context Protocol](https://modelcontextprotocol.io) 서버로 동작할 수 있습니다. diff --git a/content/docs/resources/changelog.mdx b/content/docs/resources/changelog.mdx index 7574edc..7cd3d89 100644 --- a/content/docs/resources/changelog.mdx +++ b/content/docs/resources/changelog.mdx @@ -11,9 +11,9 @@ ObjectOS follows **[Semantic Versioning](https://semver.org/)**: `MAJOR.MINOR.PA | Version bump | What it means | What to do | |---|---|---| -| **Patch** (`4.0.1 → 4.0.2`) | Bug fixes, no behavior change | Roll forward, no app changes needed | -| **Minor** (`4.0 → 4.1`) | New features, backward-compatible | Roll forward, optionally adopt new features | -| **Major** (`4 → 5`) | Breaking changes documented in release notes | Read the migration guide before upgrading | +| **Patch** (`9.7.0 → 9.7.1`) | Bug fixes, no behavior change | Roll forward, no app changes needed | +| **Minor** (`9.6 → 9.7`) | New features, backward-compatible | Roll forward, optionally adopt new features | +| **Major** (`8 → 9`) | Breaking changes documented in release notes | Read the migration guide before upgrading | All `@objectstack/*` packages release together with a synchronized version number — they're tested as a matrix, not independently. @@ -22,7 +22,7 @@ version number — they're tested as a matrix, not independently. | Component | Compatibility rule | |---|---| -| ObjectOS image ↔ compiled artifact | Same minor version. A 4.0.x image runs a 4.0.x artifact; a 4.1 artifact may use features unavailable in a 4.0 image. | +| ObjectOS image ↔ compiled artifact | Same minor version. A 9.7.x image runs a 9.7.x artifact; a 9.7 artifact may use features unavailable in a 9.6 image. | | ObjectOS ↔ CLI | Same minor version recommended. The CLI in `npm i -g` writes scaffolds pinned to its own version. | | ObjectOS ↔ database driver | Driver pinned by image build; verify Postgres ≥ 13 / MongoDB ≥ 5 / Turso (any current). | | Node.js | **20 LTS or newer**. 22 LTS recommended for new deployments. | @@ -31,9 +31,9 @@ version number — they're tested as a matrix, not independently. | Branch | Status | Until | |---|---|---| -| **4.x** (current) | Active development; new features and fixes | At least 12 months after 5.0 ships | -| **3.x** | Security fixes only | EOL on 5.0 release | -| **≤ 2.x** | Unsupported | Already EOL | +| **9.x** (current) | Active development; new features and fixes | At least 12 months after 10.0 ships | +| **8.x** | Security fixes only | EOL on 10.0 release | +| **≤ 7.x** | Unsupported | Already EOL | Critical security fixes are backported to the current and previous major. Everything else lands on `main`. @@ -51,9 +51,62 @@ Subscribe to releases on GitHub to get notified. ## Recent highlights -### 8.0.x — current release train - -ObjectOS One and the bundled server now ship on `@objectstack` **8.0.1**. +### 9.x — current release train + +ObjectOS One and the bundled server now ship on `@objectstack` **9.7.0**. +The runtime boot contract is unchanged from 8.0 — `createStandaloneStack` +still takes the same artifact, environment, and database settings — so an +8.0 deployment rolls forward without config changes. The author-facing +surface is what moved: + +- **Analytics datasets are the single author surface** (9.0, breaking) — + dashboard widgets, reports, and list-charts now bind a semantic `dataset` + (`defineDataset(...)`) and select dimensions/measures **by name**. The old + inline query fields (`object`/`valueField`/`aggregate` on widgets, + `objectName`/`columns`/`groupingsDown` on reports, `xAxisField`/`yAxisFields` + on list-charts) were removed. Migration: move the inline query into a + `defineDataset` and reference it by name. `ChartTypeSchema` also dropped 8 + variant types that only rendered as their base (`stacked-bar`→`bar`, + `spline`→`line`, `bubble`→`scatter`, …). +- **Stricter build-time validation** (9.6–9.7) — `os compile` now **fails** + on bare field references (`amount` instead of `record.amount`), unknown CEL + functions, and wrong flow-value interpolation syntax, each with a + did-you-mean hint. A stack that previously "built but was silently wrong" + now fails loudly — re-run `os compile` after upgrading and fix what it flags. +- **Number-field formulas compute mixed arithmetic** (9.7) — `record.amount / 100` + and `record.price * 2` now evaluate instead of silently yielding `null`; the + `/ 100.0` float-literal workaround is no longer needed. +- **Object-level REST gating, now enforced** (ADR-0049) — an object's + `apiEnabled: false` removes it from the REST surface, and an `apiMethods` + whitelist restricts which operations are reachable. Previously parsed but + not enforced. +- **Package documentation as metadata + `book` navigation** (9.3–9.6) — + `src/docs/*.md` register as `doc` metadata; the `book` element (ADR-0046) + declares a derived-membership navigation spine, served at + `GET /api/v1/meta/book/:name/tree` with audience gating. +- **`os package install`** (9.3) — install a package into a running runtime + from a catalog id or an inline air-gapped artifact, authenticating with + `--email` / `--password`. +- **Approvals** (9.3) — send-back-for-revision (`maxRevisions`, default 3), + jobs-backed SLA auto-escalation, list search/pagination, and session-less + bilingual approve/reject confirm links. +- **Inbound webhook flow triggers** (9.3) — a `type: 'api'` flow mounts an + HMAC-verified `POST /api/v1/automation/hooks/:flowName/:hookId` endpoint + with idempotent, queue-backed ingestion. +- **Notification retention defaults on** (9.5) — notification history + auto-prunes at **90 days**; set the messaging `retentionDays: 0` to keep + history forever. +- **CLI bundles AI provider SDKs** (9.0) — OpenAI-compatible providers + (DeepSeek, DashScope, SiliconFlow, OpenRouter, Cloudflare) work out of the + box on a globally-installed CLI. + +One flow-authoring behavior change to note: a `create_record` node's +`outputVariable` now holds the **created record object** (was the bare id), so +update `{var}` references that expected an id to `{var.id}`. + +### 8.0.x + +ObjectOS One and the bundled server shipped on `@objectstack` **8.0.1**. - **MCP over Streamable HTTP** — every deployment can act as a network-reachable [Model Context Protocol](https://modelcontextprotocol.io) diff --git a/content/docs/resources/changelog.zh-Hans.mdx b/content/docs/resources/changelog.zh-Hans.mdx index 2d42297..e057010 100644 --- a/content/docs/resources/changelog.zh-Hans.mdx +++ b/content/docs/resources/changelog.zh-Hans.mdx @@ -11,9 +11,9 @@ ObjectOS 遵循 **[语义化版本](https://semver.org/)**:`MAJOR.MINOR.PATCH` | 版本号变化 | 含义 | 应对方式 | |---|---|---| -| **Patch**(`4.0.1 → 4.0.2`) | 修 bug,不改变行为 | 直接升级,无需改动应用 | -| **Minor**(`4.0 → 4.1`) | 新增功能,向后兼容 | 直接升级,可选采用新功能 | -| **Major**(`4 → 5`) | 破坏性变更,发版说明会列出 | 升级前阅读迁移指南 | +| **Patch**(`9.7.0 → 9.7.1`) | 修 bug,不改变行为 | 直接升级,无需改动应用 | +| **Minor**(`9.6 → 9.7`) | 新增功能,向后兼容 | 直接升级,可选采用新功能 | +| **Major**(`8 → 9`) | 破坏性变更,发版说明会列出 | 升级前阅读迁移指南 | 所有 `@objectstack/*` 包按同步的版本号一起发布 —— 作为矩阵一同测试, 而不是各自独立。 @@ -22,7 +22,7 @@ ObjectOS 遵循 **[语义化版本](https://semver.org/)**:`MAJOR.MINOR.PATCH` | 组件 | 兼容性规则 | |---|---| -| ObjectOS 镜像 ↔ 编译产物 | 同一 minor 版本。4.0.x 镜像运行 4.0.x 产物;4.1 产物可能使用 4.0 镜像不具备的功能。 | +| ObjectOS 镜像 ↔ 编译产物 | 同一 minor 版本。9.7.x 镜像运行 9.7.x 产物;9.7 产物可能使用 9.6 镜像不具备的功能。 | | ObjectOS ↔ CLI | 建议使用同一 minor 版本。`npm i -g` 安装的 CLI 生成的脚手架会固定为其自身版本。 | | ObjectOS ↔ 数据库驱动 | 驱动版本由镜像构建固定;请确认 Postgres ≥ 13 / MongoDB ≥ 5 / Turso(当前版本)。 | | Node.js | **20 LTS 或更新**。新部署推荐 22 LTS。 | @@ -31,9 +31,9 @@ ObjectOS 遵循 **[语义化版本](https://semver.org/)**:`MAJOR.MINOR.PATCH` | 分支 | 状态 | 截止 | |---|---|---| -| **4.x**(当前) | 活跃开发;新功能与修复 | 至少到 5.0 发布后 12 个月 | -| **3.x** | 仅安全修复 | 5.0 发布时 EOL | -| **≤ 2.x** | 不再支持 | 已 EOL | +| **9.x**(当前) | 活跃开发;新功能与修复 | 至少到 10.0 发布后 12 个月 | +| **8.x** | 仅安全修复 | 10.0 发布时 EOL | +| **≤ 7.x** | 不再支持 | 已 EOL | 关键安全修复会反向移植到当前 major 与上一个 major;其他变更只进 `main`。 @@ -51,9 +51,57 @@ ObjectOS 遵循 **[语义化版本](https://semver.org/)**:`MAJOR.MINOR.PATCH` ## 近期亮点 -### 8.0.x —— 当前发布列车 - -ObjectOS One 与捆绑的 server 现已基于 `@objectstack` **8.0.1**。 +### 9.x —— 当前发布列车 + +ObjectOS One 与捆绑的 server 现已基于 `@objectstack` **9.7.0**。运行时的 +启动契约相较 8.0 没有变化 —— `createStandaloneStack` 仍然接收同样的 +artifact、环境与数据库设置 —— 因此 8.0 部署可无配置改动直接升级。变动 +集中在面向作者的层面: + +- **分析数据集成为唯一的作者层面入口**(9.0,破坏性)—— 仪表盘组件、 + 报表与列表图表现在绑定一个语义化的 `dataset`(`defineDataset(...)`), + 并**按名称**选择维度/度量。旧的内联查询字段(组件上的 + `object`/`valueField`/`aggregate`、报表上的 + `objectName`/`columns`/`groupingsDown`、列表图表上的 + `xAxisField`/`yAxisFields`)已被移除。迁移方式:把内联查询移入一个 + `defineDataset` 并按名称引用它。`ChartTypeSchema` 也去掉了 8 个仅以其 + 基础类型渲染的变体类型(`stacked-bar`→`bar`、`spline`→`line`、 + `bubble`→`scatter`、…)。 +- **更严格的构建期校验**(9.6–9.7)—— `os compile` 现在会在遇到裸字段 + 引用(用 `amount` 而非 `record.amount`)、未知的 CEL 函数、以及错误的 + flow-value 插值语法时**失败**,并各自给出 did-you-mean 提示。一个以往 + 「能构建但默默出错」的栈现在会显式报错 —— 升级后请重新运行 + `os compile` 并修复它指出的问题。 +- **数字字段公式可计算混合算术**(9.7)—— `record.amount / 100` 和 + `record.price * 2` 现在会求值,而不再默默地得到 `null`;不再需要 + `/ 100.0` 这种浮点字面量的变通写法。 +- **对象级 REST 门控,现已强制执行**(ADR-0049)—— 对象的 + `apiEnabled: false` 会将其从 REST 面移除,`apiMethods` 白名单则限制 + 哪些操作可达。此前只解析而不强制执行。 +- **包文档作为元数据 + `book` 导航**(9.3–9.6)—— `src/docs/*.md` 注册为 + `doc` 元数据;`book` 元素(ADR-0046)声明一条派生成员关系的导航主线, + 通过 `GET /api/v1/meta/book/:name/tree` 提供,并带受众门控。 +- **`os package install`**(9.3)—— 从目录 id 或内联的隔离网(air-gapped) + artifact 将一个包安装进运行中的 runtime,使用 `--email` / `--password` + 进行认证。 +- **审批**(9.3)—— 退回修订(`maxRevisions`,默认 3)、由 jobs 支撑的 + SLA 自动升级、列表搜索/分页,以及无会话的双语批准/拒绝确认链接。 +- **入站 webhook 流程触发器**(9.3)—— 一个 `type: 'api'` 流程会挂载一个 + 经 HMAC 校验的 `POST /api/v1/automation/hooks/:flowName/:hookId` 端点, + 采用幂等、队列支撑的摄入。 +- **通知保留默认开启**(9.5)—— 通知历史在 **90 天**自动清理;将消息设置 + 的 `retentionDays: 0` 设为该值可永久保留历史。 +- **CLI 捆绑 AI 提供方 SDK**(9.0)—— 兼容 OpenAI 的提供方(DeepSeek、 + DashScope、SiliconFlow、OpenRouter、Cloudflare)在全局安装的 CLI 上 + 开箱即用。 + +有一项流程编写行为变化需要注意:`create_record` 节点的 `outputVariable` +现在保存**创建出的记录对象**(此前是裸 id),因此把原本期望得到 id 的 +`{var}` 引用改为 `{var.id}`。 + +### 8.0.x + +ObjectOS One 与捆绑的 server 此前基于 `@objectstack` **8.0.1**。 - **MCP over Streamable HTTP** —— 每个部署都可作为网络可达的 [Model Context Protocol](https://modelcontextprotocol.io) 服务器。 diff --git a/content/docs/resources/glossary.de.mdx b/content/docs/resources/glossary.de.mdx index d75edfe..6444004 100644 --- a/content/docs/resources/glossary.de.mdx +++ b/content/docs/resources/glossary.de.mdx @@ -85,8 +85,8 @@ gestützt wird. In v4.x manchmal *Project* genannt (Alias beibehalten). v5.0 sta ### Field -Eine typisierte Eigenschaft eines Objects. ~25 eingebaute Typen: `text`, `select`, -`lookup`, `markdown`, `attachment`, `formula`, `rollup` usw. Siehe +Eine typisierte Eigenschaft eines Objects. ~48 eingebaute Typen: `text`, `select`, +`lookup`, `markdown`, `file`, `formula`, `summary` usw. Siehe [Data Model](/docs/build/data-model). ### Flow diff --git a/content/docs/resources/glossary.es.mdx b/content/docs/resources/glossary.es.mdx index 4ad9630..72475b7 100644 --- a/content/docs/resources/glossary.es.mdx +++ b/content/docs/resources/glossary.es.mdx @@ -86,8 +86,8 @@ esquemas. ### Field -Una propiedad tipada en un Object. ~25 tipos integrados: `text`, `select`, -`lookup`, `markdown`, `attachment`, `formula`, `rollup`, etc. Consulta +Una propiedad tipada en un Object. ~48 tipos integrados: `text`, `select`, +`lookup`, `markdown`, `file`, `formula`, `summary`, etc. Consulta [Data Model](/docs/build/data-model). ### Flow diff --git a/content/docs/resources/glossary.fr.mdx b/content/docs/resources/glossary.fr.mdx index 9668765..39ee4dd 100644 --- a/content/docs/resources/glossary.fr.mdx +++ b/content/docs/resources/glossary.fr.mdx @@ -85,8 +85,8 @@ Sur la v4.x, parfois appelée *Project* (alias conservé). La v5.0 standardise s ### Field -Une propriété typée sur un Object. ~25 types intégrés : `text`, `select`, -`lookup`, `markdown`, `attachment`, `formula`, `rollup`, etc. Voir +Une propriété typée sur un Object. ~48 types intégrés : `text`, `select`, +`lookup`, `markdown`, `file`, `formula`, `summary`, etc. Voir [Data Model](/docs/build/data-model). ### Flow diff --git a/content/docs/resources/glossary.ja.mdx b/content/docs/resources/glossary.ja.mdx index 09fe4ac..30d7c13 100644 --- a/content/docs/resources/glossary.ja.mdx +++ b/content/docs/resources/glossary.ja.mdx @@ -57,7 +57,7 @@ RAG / セマンティック検索のためにテキストをベクトルに変 ### Field -Object 上の型付きプロパティ。約25種類の組み込み型: `text`、`select`、`lookup`、`markdown`、`attachment`、`formula`、`rollup` など。[Data Model](/docs/build/data-model) を参照してください。 +Object 上の型付きプロパティ。約48種類の組み込み型: `text`、`select`、`lookup`、`markdown`、`file`、`formula`、`summary` など。[Data Model](/docs/build/data-model) を参照してください。 ### Flow diff --git a/content/docs/resources/glossary.ko.mdx b/content/docs/resources/glossary.ko.mdx index ab807b0..8f52cf6 100644 --- a/content/docs/resources/glossary.ko.mdx +++ b/content/docs/resources/glossary.ko.mdx @@ -84,8 +84,8 @@ CLI, HTTP, 환경 변수, 스키마 전반에서 *Environment*로 표준화합 ### Field -Object의 형식 지정 속성입니다. 약 25개의 기본 제공 타입: `text`, `select`, -`lookup`, `markdown`, `attachment`, `formula`, `rollup` 등. 다음을 참조하세요: +Object의 형식 지정 속성입니다. 약 48개의 기본 제공 타입: `text`, `select`, +`lookup`, `markdown`, `file`, `formula`, `summary` 등. 다음을 참조하세요: [Data Model](/docs/build/data-model). ### Flow diff --git a/content/docs/resources/glossary.mdx b/content/docs/resources/glossary.mdx index 9b8c1d4..c7aeb9c 100644 --- a/content/docs/resources/glossary.mdx +++ b/content/docs/resources/glossary.mdx @@ -85,8 +85,8 @@ On v4.x sometimes called *Project* (alias kept). v5.0 standardizes on ### Field -A typed property on an Object. ~25 built-in types: `text`, `select`, -`lookup`, `markdown`, `attachment`, `formula`, `rollup`, etc. See +A typed property on an Object. ~48 built-in types: `text`, `select`, +`lookup`, `markdown`, `file`, `formula`, `summary`, etc. See [Data Model](/docs/build/data-model). ### Flow diff --git a/content/docs/resources/glossary.zh-Hans.mdx b/content/docs/resources/glossary.zh-Hans.mdx index 02cde3b..fb5e79b 100644 --- a/content/docs/resources/glossary.zh-Hans.mdx +++ b/content/docs/resources/glossary.zh-Hans.mdx @@ -77,8 +77,8 @@ schema 中统一为 *Environment*。 ### Field(字段) -对象上的有类型属性。约 25 种内置类型:`text`、`select`、`lookup`、 -`markdown`、`attachment`、`formula`、`rollup` 等。见 +对象上的有类型属性。约 48 种内置类型:`text`、`select`、`lookup`、 +`markdown`、`file`、`formula`、`summary` 等。见 [数据模型](/docs/build/data-model)。 ### Flow(流程) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 878ed3f..d9c9be5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,29 +85,29 @@ importers: apps/objectos: dependencies: '@objectstack/cli': - specifier: ^8.0.1 - version: 8.0.1(@aws-sdk/client-s3@3.984.0)(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(ai@6.0.193(zod@4.4.3))(better-call@1.3.5(zod@4.4.3))(better-sqlite3@12.10.0)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.2.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^9.7.0 + version: 9.7.0(@aws-sdk/client-s3@3.984.0)(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(ai@6.0.206(zod@4.4.3))(better-call@1.3.6(zod@4.4.3))(better-sqlite3@12.11.1)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.3.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@objectstack/core': - specifier: ^8.0.1 - version: 8.0.1(ai@6.0.193(zod@4.4.3)) + specifier: ^9.7.0 + version: 9.7.0(ai@6.0.206(zod@4.4.3)) '@objectstack/driver-memory': - specifier: ^8.0.1 - version: 8.0.1(ai@6.0.193(zod@4.4.3)) + specifier: ^9.7.0 + version: 9.7.0(ai@6.0.206(zod@4.4.3)) '@objectstack/driver-sql': - specifier: ^8.0.1 - version: 8.0.1(ai@6.0.193(zod@4.4.3)) + specifier: ^9.7.0 + version: 9.7.0(ai@6.0.206(zod@4.4.3)) '@objectstack/metadata': - specifier: ^8.0.1 - version: 8.0.1(ai@6.0.193(zod@4.4.3)) + specifier: ^9.7.0 + version: 9.7.0(ai@6.0.206(zod@4.4.3)) '@objectstack/objectql': - specifier: ^8.0.1 - version: 8.0.1(ai@6.0.193(zod@4.4.3)) + specifier: ^9.7.0 + version: 9.7.0(ai@6.0.206(zod@4.4.3)) '@objectstack/runtime': - specifier: ^8.0.1 - version: 8.0.1(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(ai@6.0.193(zod@4.4.3))(better-call@1.3.5(zod@4.4.3))(better-sqlite3@12.10.0)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.2.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^9.7.0 + version: 9.7.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(ai@6.0.206(zod@4.4.3))(better-call@1.3.6(zod@4.4.3))(better-sqlite3@12.11.1)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.3.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@objectstack/spec': - specifier: ^8.0.1 - version: 8.0.1(ai@6.0.193(zod@4.4.3)) + specifier: ^9.7.0 + version: 9.7.0(ai@6.0.206(zod@4.4.3)) devDependencies: '@types/node': specifier: ^25.9.1 @@ -124,14 +124,32 @@ importers: packages: - '@ai-sdk/gateway@3.0.121': - resolution: {integrity: sha512-uY248djJRxa5W68MHiyqO8WLdOeKQoRClGg7PVX/VPhVW8SJNM7/l5DcrA5WAM3YfQrLyNkgZa2VOu8T0t8LUw==} + '@ai-sdk/anthropic@3.0.84': + resolution: {integrity: sha512-BIDaHmCHs6Sr5VUsEkTbbVlAN4GWjg97X9x/IfXyviLtzsXvffui9XIcZugkAi1Ri6FnvI5T5qDGh5YLnSuzRg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@4.0.27': - resolution: {integrity: sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw==} + '@ai-sdk/gateway@3.0.132': + resolution: {integrity: sha512-sFZFGk6aVSNKmgDrb14efaAbvM71AB3UUvaTsU+bvhWP9jrkRrwix/jFX8IoOAJk0/X7Xf7p3m0J2O2G6ljZbA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/google@3.0.82': + resolution: {integrity: sha512-md+M92ZJuPIMU2p4v1rGLpJJWTmTh/vpJPkMnQbEdcLaPTZxRaroIKSnmL/9UGJV0BORJlHNDJegkcnhVpTmDA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai@3.0.71': + resolution: {integrity: sha512-j6eBAa5oHFZ4U5CxpIV3T4zXNM/BviodNCZCL1qHkA4aqkwK9iQ18TWYz2DZcXpw4BO5pikKzqpXORxb1EnZGA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/provider-utils@4.0.29': + resolution: {integrity: sha512-uhukHaCBvqkwBHkT8C2PrnqKTCoLn3pdHXqtcR9I8ErH+flbzgW4o7VHSNIup9LRu+WBvZIZDQLsx6rwl2tiOA==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -396,14 +414,14 @@ packages: resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} - '@better-auth/core@1.6.13': - resolution: {integrity: sha512-3YNjiLUmlNt5T9qQ/weu0tZgGgXDSYax4EE/uLUBIBBGtQI9Q3KdEnO6tfPgDedborcSE1bIspuAIaHpaHwxZQ==} + '@better-auth/core@1.6.19': + resolution: {integrity: sha512-ddE3Y9MoQ8t32QSO5Y8mV7pmnDAv5LdJjX1SPWUH6JUUmuOc7YEy3B5JfXZIJbRaXFdnAitN7pHPVa5u/dYAZA==} peerDependencies: - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 + '@better-auth/utils': 0.4.2 + '@better-fetch/fetch': 1.3.1 '@cloudflare/workers-types': '>=4' '@opentelemetry/api': ^1.9.0 - better-call: 1.3.5 + better-call: 1.3.6 jose: ^6.1.0 kysely: ^0.28.5 || ^0.29.0 nanostores: ^1.0.1 @@ -413,56 +431,56 @@ packages: '@opentelemetry/api': optional: true - '@better-auth/drizzle-adapter@1.6.13': - resolution: {integrity: sha512-0V6e+e7TnIZZDjhQP/tvAberSrdrf5yfbDSx5oDFsfI5MCh2ATvbuTPNxGWbLdbGnUYfbX4K9FZwzKMj8RpLmg==} + '@better-auth/drizzle-adapter@1.6.19': + resolution: {integrity: sha512-57C9ePorPmIEez6dHuQMz3hCTkYim0lfVRIoRtX7PiVfiRFB2bjXseQwrCJfQmkgMFlkp1s/c9nKgAjc2EvAIg==} peerDependencies: - '@better-auth/core': ^1.6.13 - '@better-auth/utils': 0.4.1 + '@better-auth/core': ^1.6.19 + '@better-auth/utils': 0.4.2 drizzle-orm: ^0.45.2 peerDependenciesMeta: drizzle-orm: optional: true - '@better-auth/kysely-adapter@1.6.13': - resolution: {integrity: sha512-r+TeBL9dJecuCaSMqL3106qwaXYL3GAkoJDfmtbZ2eZ/Ejr9xVj5msJnSULb0ZqyQ1g5SCbnM39WZaCOFirziQ==} + '@better-auth/kysely-adapter@1.6.19': + resolution: {integrity: sha512-DlmvllEd0nv8JL+plX3JB3WTmqDFnGFOmjmIiUDHo8R3PTAvC0ZaJq3Jk+LQLN5PyVQSUzXZKtvTQYaqRHzBaw==} peerDependencies: - '@better-auth/core': ^1.6.13 - '@better-auth/utils': 0.4.1 + '@better-auth/core': ^1.6.19 + '@better-auth/utils': 0.4.2 kysely: ^0.28.17 || ^0.29.0 peerDependenciesMeta: kysely: optional: true - '@better-auth/memory-adapter@1.6.13': - resolution: {integrity: sha512-upmNncEwm9Q0MpWLVOdx9Pe3fU/aqobO80zwI+WVCavxmL59SufW5Ud7194/J5ushw4Dd52XNn0XWPJT1ZUThg==} + '@better-auth/memory-adapter@1.6.19': + resolution: {integrity: sha512-cZ8iLRG/T8Oi/CqE9FTHj3z8pIOqRsINi50trWxPNwyY/Eyb7YCljrBi0PuqgIdyVs7BWfrrtEYTpO4ddfuwEw==} peerDependencies: - '@better-auth/core': ^1.6.13 - '@better-auth/utils': 0.4.1 + '@better-auth/core': ^1.6.19 + '@better-auth/utils': 0.4.2 - '@better-auth/mongo-adapter@1.6.13': - resolution: {integrity: sha512-u0g5KThZQInx4QxsaXDJ+Yg5A9z/ia/3EBwi+gI7+kSTKkeT9PZZ6J+erwJ5Sh4d0JUQsEX2DX2YRsg/mYnXWQ==} + '@better-auth/mongo-adapter@1.6.19': + resolution: {integrity: sha512-8AReXqhMGiGQIPEpGbmAhh+R4g70TsAVvzwdd6Aj4q+LTSwd3tqC89TFJ4eX8KSplxm9PFBZ6g6gsRmDd7urQg==} peerDependencies: - '@better-auth/core': ^1.6.13 - '@better-auth/utils': 0.4.1 + '@better-auth/core': ^1.6.19 + '@better-auth/utils': 0.4.2 mongodb: ^6.0.0 || ^7.0.0 peerDependenciesMeta: mongodb: optional: true - '@better-auth/oauth-provider@1.6.13': - resolution: {integrity: sha512-iT+Yax2T6MlKrWqoEMp9irmj6iG16adOBX0KJe4Ac8b/m66iU1yiLncIpWByEn8f7ZhZISWOz7H4NMw4hSZi1A==} + '@better-auth/oauth-provider@1.6.19': + resolution: {integrity: sha512-tGY9zvoActfrwlHBIOBN3Y6Sh/UtyzP4s2tBI3pjW0h7HptTbPvB8wyNMBMK7YT7ztsEPYY1OoY3WnMnxaqzxw==} peerDependencies: - '@better-auth/core': ^1.6.13 - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 - better-auth: ^1.6.13 - better-call: 1.3.5 - - '@better-auth/prisma-adapter@1.6.13': - resolution: {integrity: sha512-gjmUIdqmxWb4WoNEN5rTQYQli6A9fPopAaVDiLh/gwO3ET10/PuOEwfESePEwUbArlKLLK3hPEWWe0RBojyxgQ==} + '@better-auth/core': ^1.6.19 + '@better-auth/utils': 0.4.2 + '@better-fetch/fetch': 1.3.1 + better-auth: ^1.6.19 + better-call: 1.3.6 + + '@better-auth/prisma-adapter@1.6.19': + resolution: {integrity: sha512-pXZBhR7/bzJb48IUHlGMyz9SM9h1OCO5GIIuHEllJYt8MKgrjtsnXfUkwZh6pAUEIp3WxBEYMMK96bfkqHiWEg==} peerDependencies: - '@better-auth/core': ^1.6.13 - '@better-auth/utils': 0.4.1 + '@better-auth/core': ^1.6.19 + '@better-auth/utils': 0.4.2 '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 peerDependenciesMeta: @@ -471,18 +489,18 @@ packages: prisma: optional: true - '@better-auth/telemetry@1.6.13': - resolution: {integrity: sha512-CXfPPL55mZrGH1FUhZOw9REp2WRJoVjCh9egn+cIx3ReB/OnPz+eHSRft/IVLD2PQyP1FNr1Au89SXd2oPBUPg==} + '@better-auth/telemetry@1.6.19': + resolution: {integrity: sha512-bBaB6SMIsrD3WutDdm5YQ1bQyinANTimHD8RtpLWhNh/jIXvzgwVVCrDFqA256vcGC/ZRCydmtW8ZrUqNMW9Og==} peerDependencies: - '@better-auth/core': ^1.6.13 - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 + '@better-auth/core': ^1.6.19 + '@better-auth/utils': 0.4.2 + '@better-fetch/fetch': 1.3.1 - '@better-auth/utils@0.4.1': - resolution: {integrity: sha512-SZBPRPF3z0nBvE5ygOkxae35wnnXPRShmqFo78S+qslLeFoPu/pMgnXAuNKFMMybac3tiLaVg1e3MQW5MC+1iA==} + '@better-auth/utils@0.4.2': + resolution: {integrity: sha512-AUxrvu+HaaODsUyzDxFgwd/8RZ1yZaYo42LXKSrU2oGgR38pS1ij8nqQKNgtTWoYGpNevNXtCfgTy6loHveW9A==} - '@better-fetch/fetch@1.1.21': - resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} + '@better-fetch/fetch@1.3.1': + resolution: {integrity: sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g==} '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -617,6 +635,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.25.4': resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} @@ -635,6 +659,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.25.4': resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} @@ -653,6 +683,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.25.4': resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} @@ -671,6 +707,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.25.4': resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} @@ -689,6 +731,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.25.4': resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} @@ -707,6 +755,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.25.4': resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} @@ -725,6 +779,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.4': resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} @@ -743,6 +803,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.25.4': resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} @@ -761,6 +827,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.25.4': resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} @@ -779,6 +851,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.25.4': resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} @@ -797,6 +875,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.25.4': resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} @@ -815,6 +899,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.25.4': resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} @@ -833,6 +923,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.25.4': resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} @@ -851,6 +947,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.25.4': resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} @@ -869,6 +971,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.25.4': resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} @@ -887,6 +995,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.25.4': resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} @@ -905,6 +1019,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.25.4': resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} engines: {node: '>=18'} @@ -923,6 +1043,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.4': resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} @@ -941,6 +1067,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.25.4': resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} engines: {node: '>=18'} @@ -959,6 +1091,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.4': resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} @@ -977,6 +1115,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openharmony-arm64@0.27.3': resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} engines: {node: '>=18'} @@ -989,6 +1133,12 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.25.4': resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} @@ -1007,6 +1157,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.25.4': resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} @@ -1025,6 +1181,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.25.4': resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} @@ -1043,6 +1205,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.25.4': resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} @@ -1061,6 +1229,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@floating-ui/core@1.7.5': resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} @@ -1431,35 +1605,36 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@objectstack/account@8.0.1': - resolution: {integrity: sha512-hio0SB54+dZJDVkpjU1OZ6Sft3Y1/6gBw0XLZmTqpKxRD6L5Upc/WJ9iL0o55hLvlFKB1d+PotaAtPFK9V6YWg==} + '@objectstack/account@9.7.0': + resolution: {integrity: sha512-daHgivenATrvYifcWDqZmDgGuHMVsh3SHn6XoozqIEJd2N2SMqwiYIM2Va41AjHqjcjVJe5UdrTx/eIOutappg==} + engines: {node: '>=18.0.0'} - '@objectstack/cli@8.0.1': - resolution: {integrity: sha512-aMuZHCcLQ3ZB19utH8Rf5lMch9q1LfqMbpBwAawhl79P7QcDR+bX/xMprASM81m2kYhTT+La0dMadM6gkwgjnA==} + '@objectstack/cli@9.7.0': + resolution: {integrity: sha512-ouudf/jc80TMiSgtUKB//c2jBVS8nt/SgWR7btOIq4uRRI2F/pWYgQML1g07fEYQJXcKi8rLXlC0So2XH0eqzg==} engines: {node: '>=18.0.0'} hasBin: true - '@objectstack/client@8.0.1': - resolution: {integrity: sha512-fLObUYXfa6XmoutgLK5SRthROKM16PTbMyOntiIoGI76zOHbsbZNa8FyDnSV7kEnjWERjBlEedjgT9201Pvnyg==} + '@objectstack/client@9.7.0': + resolution: {integrity: sha512-WxmZrOIYhaBKZj1DtjX63Pws8H8wWsKjtvzMr90IR9YZxUXD2ZGBKStb4SpGeCEHOC91N2yWNNyswS2ucGwcXw==} engines: {node: '>=18.0.0'} - '@objectstack/console@8.0.1': - resolution: {integrity: sha512-d4I0hLRgJKV45MZanPWsCEyXxj7zzZMcjxdIBAc/g+CYWxS8i/dMgi5cuGnQxxPyopmElyadxoFav2tA3kScaA==} + '@objectstack/console@9.7.0': + resolution: {integrity: sha512-XpIMcDtepOoyp+tS4syiLZdGORj479CctT9vrzsJ2tbM0rwfp+MxtaNK4YMlyoy2fbO9gl+Ut1MGDCI4CiI1cw==} - '@objectstack/core@8.0.1': - resolution: {integrity: sha512-222khmv9KMBCI1dfjy2jknK9kpv/+RD9kcmNCrRApEzRQ5/TbE75UCM+T245yse61K7ez8CV0py/Yr5KJNj6FA==} + '@objectstack/core@9.7.0': + resolution: {integrity: sha512-pDLrGUsrhWmAqMeImT7TJj4QQcllpOTZKc+0Iuwf9rcdKsshDvab4Gk3M7HrkO6NO3OTn42NIguka1mLu5drvw==} engines: {node: '>=18.0.0'} - '@objectstack/driver-memory@8.0.1': - resolution: {integrity: sha512-rl3arNAOPotnlRi3PIkcN+597PBUXFdizfijjDOIMbi18KCCaMnFJY+rbk9ASfJv+kfN6L18S2EKSF6CnYoA6w==} + '@objectstack/driver-memory@9.7.0': + resolution: {integrity: sha512-QLCQYbtfwkP8U1t+3tRlo7rOK9MGNr43axaWnVT+KJ5UVdFPe7o5LcUh3aUS91hn8BkhhkFXxq4lMyx8wUHetg==} engines: {node: '>=18.0.0'} - '@objectstack/driver-mongodb@8.0.1': - resolution: {integrity: sha512-+qdeMt2gYT2NUO7WzoFYbZMvOLjy6n9N7Cs0QRGHFyNOAR9HRlGe/V97dpsmzDAiRDRXDsqdM3Z/shrEJykxZg==} + '@objectstack/driver-mongodb@9.7.0': + resolution: {integrity: sha512-oultw8Qx5P563dcr7LdPNDlAXjzugvNApWXmW93+DCMGfyEyLFFaj16LQQz78EChrsHZlv9kVDlkZtbSIa/Xig==} engines: {node: '>=18.0.0'} - '@objectstack/driver-sql@8.0.1': - resolution: {integrity: sha512-2kT8VSqDQK1P1hQ2P84FE38fLrD75O9VxZZdLr20IfJI/kUn+klx0KLiu7dGCog7nDic3iSIxamsfxxh3fbSAA==} + '@objectstack/driver-sql@9.7.0': + resolution: {integrity: sha512-bCJtSN6d2sO9D+UV67KN3XFVkICGJxZVkjsQxndNJ4MVtNQmA+SicWf/oGHSNAV/W3OmD4kN7v9u0xg664bqwg==} engines: {node: '>=18.0.0'} peerDependencies: mysql2: ^3.0.0 @@ -1476,19 +1651,19 @@ packages: tedious: optional: true - '@objectstack/driver-sqlite-wasm@8.0.1': - resolution: {integrity: sha512-C0bFYRRRyJJB5nJNCoreLWINf4qVEMaZivnioKFkex2Ycb3uwydFedyV7JwAertTjFXXoFaSI54KAXMV+4/Qfg==} + '@objectstack/driver-sqlite-wasm@9.7.0': + resolution: {integrity: sha512-EJwaZt03AUp26Cgel2pTYoDOWwRsVwIwe3OxGh8tRi19IW3GGHOV8S27wVag6Tr2HqA/puoYCKV0BzWnb7ZwgQ==} engines: {node: '>=18.0.0'} - '@objectstack/formula@8.0.1': - resolution: {integrity: sha512-e/CfchRGxnJW4JB1sDAaNKCAj0kbM83fSpzDmn3UMppG89aW9gSyMiB9TvaOnB35iOxsyhTeZ8R9E/rwEEfmfg==} + '@objectstack/formula@9.7.0': + resolution: {integrity: sha512-NEjpQ0SZ0R75Nc/JqwYsB1msrY7NRWyrrjLfU8GQvGe3xMQpgHQUvizCwtHYeBe2OB5GdkuOU4wL8BfJ8ymFow==} - '@objectstack/mcp@8.0.1': - resolution: {integrity: sha512-KjJftJySVYvC0E4545iCDXgQLAo0FoxEQbXrXNpy1Yp5DtAYsEZESQodkqy0EJppxmtnXAqLD31k1fgjJUESjQ==} + '@objectstack/mcp@9.7.0': + resolution: {integrity: sha512-gSklxFU9j7ZHGwdmqX/+p9LFiR/Fw628CVRrQYge/NkStU37oNMOYgq569QEKDTPg+s/3bN0yif83dsmJtVzVA==} engines: {node: '>=18.0.0'} - '@objectstack/metadata-core@8.0.1': - resolution: {integrity: sha512-VWrtvYm1pFoYXR2szmFXshNP6LSJ9sXiQPXtoOuKdZ6092Lt1wnSRrKR5RH5TpSaavXEdsidBffGI4NPp2Ej9A==} + '@objectstack/metadata-core@9.7.0': + resolution: {integrity: sha512-sakdtyYs6ZNU7ZcyGfwEw9mE4yif9+YEFYDbt1XpS9P8exj4TjnQ6Bf62XdR++0kZzNp/GwY+VA//4HjoVmoTQ==} engines: {node: '>=18.0.0'} peerDependencies: vitest: ^4.0.0 @@ -1496,79 +1671,71 @@ packages: vitest: optional: true - '@objectstack/metadata-fs@8.0.1': - resolution: {integrity: sha512-SdVofg5Bj21U5ZkCwSuHAAMjQqtto5SXZNnSrxzvJfh5Cq3AwG2d3RbWaJ+ev/dZeRJG5yuHiEhpdQJP+eOHGw==} + '@objectstack/metadata-fs@9.7.0': + resolution: {integrity: sha512-EgIlOtABjcNVuUmgUh9iTFLFoLaWfUF1Ul8ulZpiSW0Wdf2e6PKwHrMT5ySjz8xU+4SWHsX6LorYf962J94cYg==} engines: {node: '>=18.0.0'} - '@objectstack/metadata@8.0.1': - resolution: {integrity: sha512-wR6xSJbpSEDPRNMSBbLUyi+NtWsa0TVttgNJrZHqkb1+yLDGUc4K9NT0Et59nVqvVj5AjuC00Mk5uwzLxcxhPA==} + '@objectstack/metadata@9.7.0': + resolution: {integrity: sha512-k4djwIcE30PV8zkJ5LmS9qR31WW+eUzPAlT2f/XI/fouClTJiiyNiQJzwY+xbHmrhRYrTce9cVI+hCA1Fc1a5w==} engines: {node: '>=18.0.0'} - '@objectstack/objectql@8.0.1': - resolution: {integrity: sha512-c/n6OLYxC6rfipQjyVXy51u/N7wnWYp9hyllfv6kmujwK56yWKkY8iycAqboyCErgmPahuqW1LLdHjE1gmUiGw==} + '@objectstack/objectql@9.7.0': + resolution: {integrity: sha512-ofNSh/ms1bt46tVeWrPGR5hxWIVY537Rpal3m3B2HTBdqiY+0x0W8RT0bdCnIwEJrQhPdgMTwobOx2dE8vpbqQ==} engines: {node: '>=18.0.0'} - '@objectstack/observability@8.0.1': - resolution: {integrity: sha512-XwUu5ZzcbJ+AwQ9Nyw17KfIq+WWsIBgAfqrTaTlqEB4tGHXUHEwGIgYcLS9eGDwS9H92ZhrTOY4kh9n7CdLhDg==} + '@objectstack/observability@9.7.0': + resolution: {integrity: sha512-rvcEablfRKWYHbZYKvsz2h69UnSUrodkN99gU0X2CcCWtpfV5G/N6NVGqdMdaljyZXH71fumgqthXsI4h2z/UQ==} engines: {node: '>=18.0.0'} - '@objectstack/platform-objects@8.0.1': - resolution: {integrity: sha512-3qOTeedtN78oyA4Oe/G21Lrf/H8nKa0oGsb8VoscS0nwdKmqRG4vlKplv998voEqro1HwIjvf5KZvQ1HBomVKw==} + '@objectstack/platform-objects@9.7.0': + resolution: {integrity: sha512-Mu4E+9JEWkxiFJ3HvLgRZDvvG+kgJx7E3mrJipmNcHDc4rqUZsZcM1qEr/8bSqUoslYYRfLSMYEhzUgHA6gUgA==} engines: {node: '>=18.0.0'} - '@objectstack/plugin-approvals@8.0.1': - resolution: {integrity: sha512-PCrqaTeEgQK+kDfEx4PUsaba9u9Ry/HFPrsx1xWkNS1sglfJG+LFqQEPHxUCDXIlap7hcj6gQtXJl42vVgZnPg==} + '@objectstack/plugin-approvals@9.7.0': + resolution: {integrity: sha512-XS7+vYouxHbxxHCa3E5Na/6dw2NAK3hm66NmanfBtRf2Am+ljCy48lHcp3eNF4bnhYW0DLjHpkBgiZ6tPfWcFg==} - '@objectstack/plugin-audit@8.0.1': - resolution: {integrity: sha512-VqeC1xnLz1SPVo6+jOnPiWgJaiOPdXipyS6leS/wIVO6h+BcHR4e9XnQefYlB+ikVUeZwl6WM2iVHE48IatNuQ==} + '@objectstack/plugin-audit@9.7.0': + resolution: {integrity: sha512-7f71VKhmZG+x+YppoP7WPRyoTXmJLAzXgBtNi10dqAUWypB1u5JZOjBf9XajYXZ40vjEmkpfjsvLn5g6uOpGUw==} engines: {node: '>=18.0.0'} - '@objectstack/plugin-auth@8.0.1': - resolution: {integrity: sha512-nLk3/lentF5qZ72X0c/fC5b8Ne/COg6dgwgUUscN8QQIR3EvHPsSWAeLOsrBVqb74v/ShxE81GkbxC0pK81fOQ==} + '@objectstack/plugin-auth@9.7.0': + resolution: {integrity: sha512-AYBI2z0oQZbx17PhMT6n0Ps9vYVzp2GORxczm5jqZMt9fIy7pmKm9/flFlbBFq1b5uwBUcnEw7vjso1zvB/3uQ==} engines: {node: '>=18.0.0'} - '@objectstack/plugin-email@8.0.1': - resolution: {integrity: sha512-psYJmJDp3LCYWCOk8b1ygVbjcYfYw+BVDeXAEl0LvkMPrPa/ugxAIcDINPSmZluTdL1BjionOSb/ohboHr/g+Q==} + '@objectstack/plugin-email@9.7.0': + resolution: {integrity: sha512-XHA2b8qxukIJz/0BTmG5XgdoFmH8c9X31GQoxYy0HnmECekySFNX/CY127gt8xFIGvzUdnBtt7d3VQ0/oIeC2w==} - '@objectstack/plugin-hono-server@8.0.1': - resolution: {integrity: sha512-l2RKsunYIzxIU9emWxGVDOonoDDItiE/PDEA0qoBwUG2jUH4pkEahIaUKVgri9NZetKtp9ulKnHTHcDlzqpe7g==} + '@objectstack/plugin-hono-server@9.7.0': + resolution: {integrity: sha512-zJymm3RiEwhGniL2SwXmTKmFYJ/zNOeV2dQy6Ul0tswSctAjvCw698bjEkFzWzV3Jz1RcAg8YYJkZzVr8sT81w==} engines: {node: '>=18.0.0'} - '@objectstack/plugin-org-scoping@8.0.1': - resolution: {integrity: sha512-PrrOzZbwW61AiPvDylSsSduR8Fi19l1pRjKk4e4VMSoJUiM9H+mdYxVtiANT+rpdEUxmjCl4tA1uv5WrGbkksA==} + '@objectstack/plugin-org-scoping@9.7.0': + resolution: {integrity: sha512-PKcCzc6UuTy9YemRhWd6vtJw3oLQSJ4Kkf8LrHuBByVCL7XyNrM5upt6WZxjMuyOYVBni3xPRBFeFWDY3Y13lg==} engines: {node: '>=18.0.0'} - '@objectstack/plugin-reports@8.0.1': - resolution: {integrity: sha512-500DjcpmmjtmvOUsrfwK+faGshBfoRAaXdfxzEjwHoFZfXTBX1Uc12YoTySoxQyuXoXE3Lw9OBARAyYiELss8Q==} + '@objectstack/plugin-reports@9.7.0': + resolution: {integrity: sha512-onNGx9ZNv0k/ZLXDOdEr/2lWK0aLoF+J7aIR+I0XTJPbFhjBqDhpoYr1nsMiL7mZUto1oQXNcDSUR1qfD8QAkw==} - '@objectstack/plugin-security@8.0.1': - resolution: {integrity: sha512-NaEozXRvGH06UhFz2CVoKq8YoPc5OTTeoMk3IQ+kiUMz1w0Ky4dwTkXJzd9zW9aWL8cMQ9ezpC1oNQBVcaMo4Q==} + '@objectstack/plugin-security@9.7.0': + resolution: {integrity: sha512-+pRM6DfAh7ZB6ZqC5RJHUidXJOcds6BJx+YkTC1XlvuNCXj/ZP9Fq6+t4EP9k4utcU8dWUQPu/ApxpCg6gD5hQ==} engines: {node: '>=18.0.0'} - '@objectstack/plugin-sharing@8.0.1': - resolution: {integrity: sha512-7vpjAG1uV0cgcxhnEB05WyjGhwlYT7ezufo+83ya9kxJdORnyo8wPHsQ5bnuntOdz0aTtn5WTvS4nQVlZoxkaw==} - - '@objectstack/plugin-trigger-record-change@8.0.1': - resolution: {integrity: sha512-dvedWALQ78q6cqfwVskZmwcml4f7FsifgqYosNkQWVDW4yE+6em4Gro3ert8XmMBQomFl85SttHf6VdiOiZoYg==} - engines: {node: '>=18.0.0'} - - '@objectstack/plugin-trigger-schedule@8.0.1': - resolution: {integrity: sha512-xMiICt1+v/afoTZ8hy/e1Wyi2NEYFQkLxtqxMC72AtIYT6caHJFJLAvzn15Y1nQeMs4tQAJh8t23n1+6hZ8cxQ==} - engines: {node: '>=18.0.0'} + '@objectstack/plugin-sharing@9.7.0': + resolution: {integrity: sha512-NOPFn8xcfvkDEMI0RhHw8tbSJa9wOB0V+oTUVxFOU9Swh/bhfP3Zmvn5RTDdMqMmYUoJbDjARMUwvx9Wy3wA0Q==} - '@objectstack/plugin-webhooks@8.0.1': - resolution: {integrity: sha512-UMzvj2UDm2wJcKQ4yCdOnWxQj/rL/rni90ZkDFwJaVqdstRWmNE/gVUssPvPKTNuA2HxC4+rQdIUfXRQMZvmtQ==} + '@objectstack/plugin-webhooks@9.7.0': + resolution: {integrity: sha512-TnLLvrjyhDT8pyyNj+sXPmK4oa9VllIs9m00BnYa+nVmbo+Er3mRBWHHD5gm9SlNKfZtVRN/8u1n4POgDDxv1g==} - '@objectstack/rest@8.0.1': - resolution: {integrity: sha512-YA05taXQs3Rzz/DHlF5XBb9BKcmevDHhSA+YmXX8gTIwsuxWQgYG1YyrnWAPBNByyTwCHXqaT/bcBOE0IZ2Wlg==} + '@objectstack/rest@9.7.0': + resolution: {integrity: sha512-lfkw2TkJORGQo/BpSkyLMDROvJvJNPhqf771QgqSOVT6t1evks6BWa6JjDT4SRLEhgX6+MUIFVaRhlk9j/l8cQ==} engines: {node: '>=18.0.0'} - '@objectstack/runtime@8.0.1': - resolution: {integrity: sha512-fY5DtKCexgM5AjQnd363wamvLPS88SrDeK7mF84YDoVksD7JmCyeoMzeLQAGm3kOj3dX2F5uEE39m64pUeL+4w==} + '@objectstack/runtime@9.7.0': + resolution: {integrity: sha512-PrvNT7Hm9DcbWI03YBBWqig+6yBZbgtNJ41av+mFDOkcICbtwuSegQtTVg4UgihfuEkERg5t3WA3Ki3qU0MgFQ==} engines: {node: '>=18.0.0'} - '@objectstack/service-ai@8.0.1': - resolution: {integrity: sha512-i1dj3BV8O/C8ENFDmEzEgIQ7iVt7WPetmRUz5JRYFM+ubeErVwaJAm1JAn/HJ6SRQl7i7fO+fgjWSLvlUr6THA==} + '@objectstack/service-ai@9.7.0': + resolution: {integrity: sha512-S727jawyaGqCWy/acaSA52J5hhSGBPDw3/PnFlm9wN4yJsL6Ks+5Ix4TW91l+UC97ZPS3qhC8hWnb0AY4+VU9Q==} engines: {node: '>=18.0.0'} peerDependencies: '@ai-sdk/anthropic': ^3.0.0 @@ -1585,58 +1752,58 @@ packages: '@ai-sdk/openai': optional: true - '@objectstack/service-analytics@8.0.1': - resolution: {integrity: sha512-3DWT/kmeM/U4wOzrk2yO1vyrlkij8KLhQIuhbDCth+Xwwj94U4YaPs8JbdmfsSEfec+D5YGnfGaagdk0Q87ejw==} + '@objectstack/service-analytics@9.7.0': + resolution: {integrity: sha512-DxCeNpLHwvWscdjnaSuI2xZzYhBqY9ab5Nqu1n/hJr2GE9SI+hnu5C0K3XSOQP7JzErc+qTiMUFYaOeAc9uMVg==} engines: {node: '>=18.0.0'} - '@objectstack/service-automation@8.0.1': - resolution: {integrity: sha512-eiZQH/FGh5Mj1I5EYtn8FGRibWTusM9+SbiE90F02BJ4CSC56PlJ5lXJofyktme+EQf+yQsS/Ck30fAkMZpXYg==} + '@objectstack/service-automation@9.7.0': + resolution: {integrity: sha512-GzaEzaTX5SFa+NppKURXyNh7BJZpbkZ5xcQRlcogi5P1ALMxahn5RwQRFWRI1jlaMJ0Omag9uoliDODgqqTCHQ==} engines: {node: '>=18.0.0'} - '@objectstack/service-cache@8.0.1': - resolution: {integrity: sha512-ZZzseZzvflsa2NyC1JUvGUVbq/BYBdQpop3jqZ4W7lqquueiHkN3ffbHGnSf7HJL++/fkwMKKZiDahSecCg7kA==} + '@objectstack/service-cache@9.7.0': + resolution: {integrity: sha512-Y031qEul/SlHfhpN+rxUnmVaVX3ylkMUiUKJUqKkB7sOI8H9Sm+fupxeFeDgqEDQq5bh+hCZho5O5SCUfuGCdg==} engines: {node: '>=18.0.0'} - '@objectstack/service-cluster@8.0.1': - resolution: {integrity: sha512-FR8cHaM/45Ez9VICsp8B1KtwBNlyotqmuazgnT7vJ7FySMRyGKjcWw03Ua8pgYQFYwSpKOl73esgljBCeOuAXw==} + '@objectstack/service-cluster@9.7.0': + resolution: {integrity: sha512-bhV2NObP1cfwXFEiMH1ykQn4PKFO0714bEzEW2vwu4rAZMX0Dlz4nt9HcLF67OA1dea5z9yGwinGw1RD6sT6dQ==} - '@objectstack/service-datasource@8.0.1': - resolution: {integrity: sha512-kKR0m3YlUw9/Kk4YfjLWqixKYLg5an0G/yNIJxBSrTSAz/9c9XNzfyon5QWvhJg5EPoY/01VKvlGxbcqh1guVA==} + '@objectstack/service-datasource@9.7.0': + resolution: {integrity: sha512-i7Quo42qt2iIWxlOifZt8g0xFsa/A97bNwWTApGqFnhIxD2W9knsUzdJaCnMcU3lomK587rCMS+otsNAbmD1cg==} - '@objectstack/service-feed@8.0.1': - resolution: {integrity: sha512-nGIxnV5qXpp9dL7njuTXq/TA2dAZMFddAcRHhdH9q8qyVdO2DcOi8n4MSaaqdALUnNbwTCLImEuhVTxF+Yo15A==} + '@objectstack/service-feed@9.7.0': + resolution: {integrity: sha512-G/54qWzJnkUj3Kyy6VyZUwFzZhVhv1VbdnoBuCkY5T0K8ML38ZzlSy4P59ldIzwGiLitmxKwApuJW1aSLqVGUA==} engines: {node: '>=18.0.0'} - '@objectstack/service-i18n@8.0.1': - resolution: {integrity: sha512-h1YjPxHURiLyIc3Mf7dOJ1pgVtnkHxh3ppWuW650pXYo4F4Ys5gbsNNxUD1fuJhGQiQaycBPfADw/0BdK+wv+Q==} + '@objectstack/service-i18n@9.7.0': + resolution: {integrity: sha512-QGafWrnLdMkCMGJC1rJmRWj5REaGCK2bJknCOBA7GXoiVRA8SknGvwfV9r0mfQwZ7VEET2tN6ytMuh7Au6ZCvw==} engines: {node: '>=18.0.0'} - '@objectstack/service-job@8.0.1': - resolution: {integrity: sha512-KlTBzR/RL8yIMp4qxpkaoZYYsktAedq1GbgNxTDCWL9wbRGL7S0GNvvG1/dPbg71jgDNIzYUdFjfWCwj5upHkg==} + '@objectstack/service-job@9.7.0': + resolution: {integrity: sha512-RaYN7s7Grac3S0ZzDwrbvCVUBbA0aKLNbcExMDhd/c1e23pNpe7887Y++rilY3cRWtxG41FatxFnB2z/ZxerNw==} engines: {node: '>=18.0.0'} - '@objectstack/service-messaging@8.0.1': - resolution: {integrity: sha512-k3q4RyxOEy3U0NxYfVCGcQsi2cNXsvqjNrvUMrMh9Fuew6WHOeuUJ3ftChfOR8EzYHdT/OH/8VYzQjxmKVxNwQ==} + '@objectstack/service-messaging@9.7.0': + resolution: {integrity: sha512-PSynXoy/GZUiIEzCWsoGsXgWTNwsFdmBp2NnIwpdklWBwOY/X/ma832yBZ7xASNLF0Fhe468J5NMkAP2ku7nwg==} engines: {node: '>=18.0.0'} - '@objectstack/service-package@8.0.1': - resolution: {integrity: sha512-hTxON2MnrFAHDRNKXYudG0qoSOYbTvpYG7qeo19NnT+lWvvMGcL/9v02SQzjIWZEaV+wsubF0bArdaD2qI5vyQ==} + '@objectstack/service-package@9.7.0': + resolution: {integrity: sha512-HSisiksqEXpJYL8wcXTEUPE5iN6zBMBxKRAXTg8shXNKSjPFKTu7rnTI798VpTyr3kGFrV2TajDgGcWNvF2DcA==} engines: {node: '>=18.0.0'} - '@objectstack/service-queue@8.0.1': - resolution: {integrity: sha512-WoOvd+3IQODws99OIwIXQ4armhW0N7JiRQG8Vip6y6s+OFQkZgB5/IG7xtxPHQAAgfmdSDKsNvteeZd2MTK5kg==} + '@objectstack/service-queue@9.7.0': + resolution: {integrity: sha512-8BmiW34rMYIDplD/YxTcU89gOsqZKJCo9OXMqNPP3esz3PNRwYMjisGAQLtG/PPxsABTj3tDZblVBvaBM49XcA==} engines: {node: '>=18.0.0'} - '@objectstack/service-realtime@8.0.1': - resolution: {integrity: sha512-btZGq/ap0Gzl7Ftd886XgMbLclqTbIuAi4B1g1mpAQja8fHQahRiYo/5UW6UXiWlSf4mKOidRrWpmQpjACVR4A==} + '@objectstack/service-realtime@9.7.0': + resolution: {integrity: sha512-LJbMFqiiSOgbm+M6fSatfYWPKN0mecXoSz8O7C4jzOGrTIFmSDzanSfBVHAQUbg6Zr8jZDn4pXljTJSNJqM3JA==} engines: {node: '>=18.0.0'} - '@objectstack/service-settings@8.0.1': - resolution: {integrity: sha512-/Kco/IfvdeMzioPP7UrkqTTVHatrtoHDr2R0VTDvC7jMV2HZORqdFgBWGVmLdY9xUF59I1OP/FxgwtfoT6ixAg==} + '@objectstack/service-settings@9.7.0': + resolution: {integrity: sha512-H+bluyx1idRtJNpjnIIG6aoqkPS837vMQhPo6zH//ujwVGb1jLoZGnAEXQEl8vkv12K0kbxckHoCUBg9jcdUVw==} engines: {node: '>=18.0.0'} - '@objectstack/service-storage@8.0.1': - resolution: {integrity: sha512-SOnvpditPPf4AdaqKCXHPxqQXGw0k3UD67RDTHouk2N+JKoa+Sx0osS0TzhkhrVwha4Kxdvu0M+tyWh0DAGbcA==} + '@objectstack/service-storage@9.7.0': + resolution: {integrity: sha512-zZjCwcsuNh8m7tj2iKJdcQ1spiRGzLaQCtfUPcWCCNuiaDPQyJGfUZuCh8cd0nTzER+n8AdqmT19vJryLNONdA==} engines: {node: '>=18.0.0'} peerDependencies: '@aws-sdk/client-s3': ^3.0.0 @@ -1647,8 +1814,12 @@ packages: '@aws-sdk/s3-request-presigner': optional: true - '@objectstack/spec@8.0.1': - resolution: {integrity: sha512-ZTHxY0TJIGDGNNd+i5Jzl8KQEA4wxgm46WTICrrYEybdsUnSkuOEKSW3lH0IBB8vI9Dx8/yUtKw77Di9NDfkAw==} + '@objectstack/setup@9.7.0': + resolution: {integrity: sha512-ukLqYK5xf4EnmU3uBj90ThGdNoiaNWVGN4I5k+VbyXTMS71wAt5XKKLFFcY2yMM8AVqA6yUp0OOsp39XW8kMDQ==} + engines: {node: '>=18.0.0'} + + '@objectstack/spec@9.7.0': + resolution: {integrity: sha512-wCESixAqEu+jy+ZYw8m1VGYEVOJhI5YSBqiAnBwMl+hzFfovoXRYtu33C266g0GR2KWBRtp+An+FK1s4Q865Lg==} engines: {node: '>=18.0.0'} peerDependencies: ai: ^6.0.0 @@ -1656,8 +1827,23 @@ packages: ai: optional: true - '@objectstack/types@8.0.1': - resolution: {integrity: sha512-1oA7/z2k9UkdopRCmEHLVj5bpQJxBZt3qBI8TxN81LhDzTBibI4Bl5qBJiUPc7ClNQuCQHrUjRD/NTadSkq7Dw==} + '@objectstack/studio@9.7.0': + resolution: {integrity: sha512-6jnJ5EoWjMK1MD268zGLbM3msXkAmRcsxGrXToLfWCuQ91ZIXweKH/65w9xOhDM4a2KK1BSYcMWJsPfj6UkzxA==} + engines: {node: '>=18.0.0'} + + '@objectstack/trigger-api@9.7.0': + resolution: {integrity: sha512-DXQRpZSwBjvnxp3T4w86DgWlCyaQza67GgkL7T/5GCbYNclkGSa/0rlSCmjc2KKM6fEu10LkLtGwzZsHS7Q3Lw==} + + '@objectstack/trigger-record-change@9.7.0': + resolution: {integrity: sha512-bey5+kfKHP3u4AZWQ9pslY7MxJ4q7LsdGJGA6vzZ8BPD3jqberJBe+397N/2Mxci2ph0ngo91OCFoU7WxwioWA==} + engines: {node: '>=18.0.0'} + + '@objectstack/trigger-schedule@9.7.0': + resolution: {integrity: sha512-04XXl5MjbxcWZy+O7hqkCNi/V/HjkMDavLYlgn4u9oaH6NwuuOuaMQqPAow9TdtaZ1q2pB7wty7cfnpuJBSm2w==} + engines: {node: '>=18.0.0'} + + '@objectstack/types@9.7.0': + resolution: {integrity: sha512-rPc6khwpaiQuRNSX1MtI5oP1eV55mnecKv+/J9HgHltBvkKk8eo1pS6rphuJI8/2Drm/eftH1/V2Yjzu7D7xmg==} engines: {node: '>=18.0.0'} '@oclif/core@4.11.4': @@ -2572,8 +2758,8 @@ packages: resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} - ai@6.0.193: - resolution: {integrity: sha512-VQOTOse8+X8kMtg61DNSXlYJzwOW4NjMLDJNk/qxClWsFe4oiyFJDHGGG1oezfGcFzuYuQe/8Z7r4kwiZWh2YQ==} + ai@6.0.206: + resolution: {integrity: sha512-hVdB5PozMMxmkPBfbCxkFOn0eVeCMi/imkfPvk65cxL4O8oIrvjUxDUX8dGkdkWG1No+R7e7D9ti2DHO61Z4YQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -2665,8 +2851,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - better-auth@1.6.13: - resolution: {integrity: sha512-jn8ATnGWDzMwpO4a/3iyW1/RayOF/aoPQOfAeqyCVnQCdqkaONVas9CjbY6PovMsTMa/MG+GRABySfzqtj5J/g==} + better-auth@1.6.19: + resolution: {integrity: sha512-68eXWKj0sxa0xW4+n4tENd6Co94UCynPKe1fncmO6kIB3XhSXWgwDEpiUouJV2dmLBrHM1FPkoI6Q5597zCGpQ==} peerDependencies: '@lynx-js/react': '*' '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -2727,8 +2913,8 @@ packages: vue: optional: true - better-call@1.3.5: - resolution: {integrity: sha512-kOFJkBP7utAQLEYrobZm3vkTH8mXq5GNgvjc5/XEST1ilVHaxXUXfeDeFlqoETMtyqS4+3/h4ONX2i++ebZrvA==} + better-call@1.3.6: + resolution: {integrity: sha512-no1jI+h6Bkxs1NVBo4rONbVIzsPjZ8IUu7IHaJBiFwVX1XEQGN8KpHots5fSWmXe9nNyLuLIcgx6WEUcE6EDaA==} peerDependencies: zod: ^4.0.0 peerDependenciesMeta: @@ -2739,8 +2925,8 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - better-sqlite3@12.10.0: - resolution: {integrity: sha512-CyzaZRQKyHkB2ZInfTTl2nvT33EbDpjkLEbE8/Zck3Ll6O0qqvuGdrJ45HgtH+HykRg88ITY3AdreBGN70aBSQ==} + better-sqlite3@12.11.1: + resolution: {integrity: sha512-dq9AtApgg5PGFtBzPFSBl3HZQjHok5gaQCM6zh2Yk0aSmDCs1CbnVI8/HgASQkNKsWFpseIO9beg5xxpYhbIfA==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x || 26.x} bindings@1.5.0: @@ -3096,6 +3282,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -3521,6 +3712,10 @@ packages: resolution: {integrity: sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==} engines: {node: '>=16.9.0'} + hono@4.12.25: + resolution: {integrity: sha512-2NFaIyNVgJmBs/ecmtGzlmluTFs5cHEWGTdu0t1HBwYzoGXOL5nUQBRMXsXWla5i4KkG//QMzVP88m1+I3fdAQ==} + engines: {node: '>=16.9.0'} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -4091,8 +4286,8 @@ packages: resolution: {integrity: sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==} engines: {node: '>=20.19.0'} - mongodb@7.2.0: - resolution: {integrity: sha512-F/2+BMZtLVhY30ioZp0dAmZ+IRZMBqI+nrv6t5+9/1AIwCa8sMRC3jBf81lpxMhnZgqq8CoUD503Z1oZWq1/sw==} + mongodb@7.3.0: + resolution: {integrity: sha512-WpCqSx7JAU9vcyjm/SU7ydnHls2YrfU3Y3sx4Ml9D7sPe4mXPlaapndiurDXrQ7/VvJkB4/i7b7WovHb8bd8sg==} engines: {node: '>=20.19.0'} peerDependencies: '@aws-sdk/credential-providers': ^3.806.0 @@ -5055,14 +5250,32 @@ packages: snapshots: - '@ai-sdk/gateway@3.0.121(zod@4.4.3)': + '@ai-sdk/anthropic@3.0.84(zod@4.4.3)': dependencies: '@ai-sdk/provider': 3.0.10 - '@ai-sdk/provider-utils': 4.0.27(zod@4.4.3) + '@ai-sdk/provider-utils': 4.0.29(zod@4.4.3) + zod: 4.4.3 + + '@ai-sdk/gateway@3.0.132(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.29(zod@4.4.3) '@vercel/oidc': 3.2.0 zod: 4.4.3 - '@ai-sdk/provider-utils@4.0.27(zod@4.4.3)': + '@ai-sdk/google@3.0.82(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.29(zod@4.4.3) + zod: 4.4.3 + + '@ai-sdk/openai@3.0.71(zod@4.4.3)': + dependencies: + '@ai-sdk/provider': 3.0.10 + '@ai-sdk/provider-utils': 4.0.29(zod@4.4.3) + zod: 4.4.3 + + '@ai-sdk/provider-utils@4.0.29(zod@4.4.3)': dependencies: '@ai-sdk/provider': 3.0.10 '@standard-schema/spec': 1.1.0 @@ -5674,13 +5887,13 @@ snapshots: '@babel/runtime@7.29.2': {} - '@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0)': + '@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0)': dependencies: - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 + '@better-auth/utils': 0.4.2 + '@better-fetch/fetch': 1.3.1 '@opentelemetry/semantic-conventions': 1.41.1 '@standard-schema/spec': 1.1.0 - better-call: 1.3.5(zod@4.4.3) + better-call: 1.3.6(zod@4.4.3) jose: 6.2.3 kysely: 0.29.2 nanostores: 1.3.0 @@ -5688,56 +5901,56 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 - '@better-auth/drizzle-adapter@1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/drizzle-adapter@1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)': dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/utils': 0.4.1 + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/utils': 0.4.2 - '@better-auth/kysely-adapter@1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.29.2)': + '@better-auth/kysely-adapter@1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)(kysely@0.29.2)': dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/utils': 0.4.1 + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/utils': 0.4.2 optionalDependencies: kysely: 0.29.2 - '@better-auth/memory-adapter@1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/memory-adapter@1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)': dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/utils': 0.4.1 + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/utils': 0.4.2 - '@better-auth/mongo-adapter@1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(mongodb@7.2.0)': + '@better-auth/mongo-adapter@1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)(mongodb@7.3.0)': dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/utils': 0.4.1 + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/utils': 0.4.2 optionalDependencies: - mongodb: 7.2.0 + mongodb: 7.3.0 - '@better-auth/oauth-provider@1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-auth@1.6.13(@opentelemetry/api@1.9.1)(better-sqlite3@12.10.0)(mongodb@7.2.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(better-call@1.3.5(zod@4.4.3))': + '@better-auth/oauth-provider@1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.6.19(@opentelemetry/api@1.9.1)(better-sqlite3@12.11.1)(mongodb@7.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(better-call@1.3.6(zod@4.4.3))': dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 - better-auth: 1.6.13(@opentelemetry/api@1.9.1)(better-sqlite3@12.10.0)(mongodb@7.2.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - better-call: 1.3.5(zod@4.4.3) + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/utils': 0.4.2 + '@better-fetch/fetch': 1.3.1 + better-auth: 1.6.19(@opentelemetry/api@1.9.1)(better-sqlite3@12.11.1)(mongodb@7.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + better-call: 1.3.6(zod@4.4.3) jose: 6.2.3 zod: 4.4.3 - '@better-auth/prisma-adapter@1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + '@better-auth/prisma-adapter@1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)': dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/utils': 0.4.1 + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/utils': 0.4.2 - '@better-auth/telemetry@1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)': + '@better-auth/telemetry@1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)': dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/utils': 0.4.2 + '@better-fetch/fetch': 1.3.1 - '@better-auth/utils@0.4.1': + '@better-auth/utils@0.4.2': dependencies: '@noble/hashes': 2.2.0 - '@better-fetch/fetch@1.1.21': {} + '@better-fetch/fetch@1.3.1': {} '@changesets/apply-release-plan@7.1.1': dependencies: @@ -5939,6 +6152,9 @@ snapshots: '@esbuild/aix-ppc64@0.28.0': optional: true + '@esbuild/aix-ppc64@0.28.1': + optional: true + '@esbuild/android-arm64@0.25.4': optional: true @@ -5948,6 +6164,9 @@ snapshots: '@esbuild/android-arm64@0.28.0': optional: true + '@esbuild/android-arm64@0.28.1': + optional: true + '@esbuild/android-arm@0.25.4': optional: true @@ -5957,6 +6176,9 @@ snapshots: '@esbuild/android-arm@0.28.0': optional: true + '@esbuild/android-arm@0.28.1': + optional: true + '@esbuild/android-x64@0.25.4': optional: true @@ -5966,6 +6188,9 @@ snapshots: '@esbuild/android-x64@0.28.0': optional: true + '@esbuild/android-x64@0.28.1': + optional: true + '@esbuild/darwin-arm64@0.25.4': optional: true @@ -5975,6 +6200,9 @@ snapshots: '@esbuild/darwin-arm64@0.28.0': optional: true + '@esbuild/darwin-arm64@0.28.1': + optional: true + '@esbuild/darwin-x64@0.25.4': optional: true @@ -5984,6 +6212,9 @@ snapshots: '@esbuild/darwin-x64@0.28.0': optional: true + '@esbuild/darwin-x64@0.28.1': + optional: true + '@esbuild/freebsd-arm64@0.25.4': optional: true @@ -5993,6 +6224,9 @@ snapshots: '@esbuild/freebsd-arm64@0.28.0': optional: true + '@esbuild/freebsd-arm64@0.28.1': + optional: true + '@esbuild/freebsd-x64@0.25.4': optional: true @@ -6002,6 +6236,9 @@ snapshots: '@esbuild/freebsd-x64@0.28.0': optional: true + '@esbuild/freebsd-x64@0.28.1': + optional: true + '@esbuild/linux-arm64@0.25.4': optional: true @@ -6011,6 +6248,9 @@ snapshots: '@esbuild/linux-arm64@0.28.0': optional: true + '@esbuild/linux-arm64@0.28.1': + optional: true + '@esbuild/linux-arm@0.25.4': optional: true @@ -6020,6 +6260,9 @@ snapshots: '@esbuild/linux-arm@0.28.0': optional: true + '@esbuild/linux-arm@0.28.1': + optional: true + '@esbuild/linux-ia32@0.25.4': optional: true @@ -6029,6 +6272,9 @@ snapshots: '@esbuild/linux-ia32@0.28.0': optional: true + '@esbuild/linux-ia32@0.28.1': + optional: true + '@esbuild/linux-loong64@0.25.4': optional: true @@ -6038,6 +6284,9 @@ snapshots: '@esbuild/linux-loong64@0.28.0': optional: true + '@esbuild/linux-loong64@0.28.1': + optional: true + '@esbuild/linux-mips64el@0.25.4': optional: true @@ -6047,6 +6296,9 @@ snapshots: '@esbuild/linux-mips64el@0.28.0': optional: true + '@esbuild/linux-mips64el@0.28.1': + optional: true + '@esbuild/linux-ppc64@0.25.4': optional: true @@ -6056,6 +6308,9 @@ snapshots: '@esbuild/linux-ppc64@0.28.0': optional: true + '@esbuild/linux-ppc64@0.28.1': + optional: true + '@esbuild/linux-riscv64@0.25.4': optional: true @@ -6065,6 +6320,9 @@ snapshots: '@esbuild/linux-riscv64@0.28.0': optional: true + '@esbuild/linux-riscv64@0.28.1': + optional: true + '@esbuild/linux-s390x@0.25.4': optional: true @@ -6074,6 +6332,9 @@ snapshots: '@esbuild/linux-s390x@0.28.0': optional: true + '@esbuild/linux-s390x@0.28.1': + optional: true + '@esbuild/linux-x64@0.25.4': optional: true @@ -6083,6 +6344,9 @@ snapshots: '@esbuild/linux-x64@0.28.0': optional: true + '@esbuild/linux-x64@0.28.1': + optional: true + '@esbuild/netbsd-arm64@0.25.4': optional: true @@ -6092,6 +6356,9 @@ snapshots: '@esbuild/netbsd-arm64@0.28.0': optional: true + '@esbuild/netbsd-arm64@0.28.1': + optional: true + '@esbuild/netbsd-x64@0.25.4': optional: true @@ -6101,6 +6368,9 @@ snapshots: '@esbuild/netbsd-x64@0.28.0': optional: true + '@esbuild/netbsd-x64@0.28.1': + optional: true + '@esbuild/openbsd-arm64@0.25.4': optional: true @@ -6110,6 +6380,9 @@ snapshots: '@esbuild/openbsd-arm64@0.28.0': optional: true + '@esbuild/openbsd-arm64@0.28.1': + optional: true + '@esbuild/openbsd-x64@0.25.4': optional: true @@ -6119,12 +6392,18 @@ snapshots: '@esbuild/openbsd-x64@0.28.0': optional: true + '@esbuild/openbsd-x64@0.28.1': + optional: true + '@esbuild/openharmony-arm64@0.27.3': optional: true '@esbuild/openharmony-arm64@0.28.0': optional: true + '@esbuild/openharmony-arm64@0.28.1': + optional: true + '@esbuild/sunos-x64@0.25.4': optional: true @@ -6134,6 +6413,9 @@ snapshots: '@esbuild/sunos-x64@0.28.0': optional: true + '@esbuild/sunos-x64@0.28.1': + optional: true + '@esbuild/win32-arm64@0.25.4': optional: true @@ -6143,6 +6425,9 @@ snapshots: '@esbuild/win32-arm64@0.28.0': optional: true + '@esbuild/win32-arm64@0.28.1': + optional: true + '@esbuild/win32-ia32@0.25.4': optional: true @@ -6152,6 +6437,9 @@ snapshots: '@esbuild/win32-ia32@0.28.0': optional: true + '@esbuild/win32-ia32@0.28.1': + optional: true + '@esbuild/win32-x64@0.25.4': optional: true @@ -6161,6 +6449,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true + '@esbuild/win32-x64@0.28.1': + optional: true + '@floating-ui/core@1.7.5': dependencies: '@floating-ui/utils': 0.2.11 @@ -6187,9 +6478,9 @@ snapshots: dependencies: hono: 4.12.23 - '@hono/node-server@2.0.4(hono@4.12.23)': + '@hono/node-server@2.0.4(hono@4.12.25)': dependencies: - hono: 4.12.23 + hono: 4.12.25 '@img/colour@1.1.0': {} @@ -6484,67 +6775,76 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@objectstack/account@8.0.1': {} - - '@objectstack/cli@8.0.1(@aws-sdk/client-s3@3.984.0)(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(ai@6.0.193(zod@4.4.3))(better-call@1.3.5(zod@4.4.3))(better-sqlite3@12.10.0)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.2.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@ai-sdk/gateway': 3.0.121(zod@4.4.3) - '@objectstack/account': 8.0.1 - '@objectstack/client': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/console': 8.0.1 - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/driver-memory': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/driver-mongodb': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/driver-sql': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/driver-sqlite-wasm': 8.0.1(ai@6.0.193(zod@4.4.3))(better-sqlite3@12.10.0) - '@objectstack/formula': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/mcp': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/objectql': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/observability': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-approvals': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-audit': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-auth': 8.0.1(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(ai@6.0.193(zod@4.4.3))(better-call@1.3.5(zod@4.4.3))(better-sqlite3@12.10.0)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.2.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@objectstack/plugin-email': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-hono-server': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-org-scoping': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-reports': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-security': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-sharing': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-trigger-record-change': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-trigger-schedule': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-webhooks': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/rest': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/runtime': 8.0.1(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(ai@6.0.193(zod@4.4.3))(better-call@1.3.5(zod@4.4.3))(better-sqlite3@12.10.0)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.2.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@objectstack/service-ai': 8.0.1(@ai-sdk/gateway@3.0.121(zod@4.4.3)) - '@objectstack/service-analytics': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-automation': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-cache': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-datasource': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-feed': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-job': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-messaging': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-package': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-queue': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-realtime': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-settings': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-storage': 8.0.1(@aws-sdk/client-s3@3.984.0)(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/account@9.7.0(ai@6.0.206(zod@4.4.3))': + dependencies: + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + transitivePeerDependencies: + - ai + - vitest + + '@objectstack/cli@9.7.0(@aws-sdk/client-s3@3.984.0)(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(ai@6.0.206(zod@4.4.3))(better-call@1.3.6(zod@4.4.3))(better-sqlite3@12.11.1)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.3.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@ai-sdk/anthropic': 3.0.84(zod@4.4.3) + '@ai-sdk/gateway': 3.0.132(zod@4.4.3) + '@ai-sdk/google': 3.0.82(zod@4.4.3) + '@ai-sdk/openai': 3.0.71(zod@4.4.3) + '@objectstack/account': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/client': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/console': 9.7.0 + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/driver-memory': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/driver-mongodb': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/driver-sql': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/driver-sqlite-wasm': 9.7.0(ai@6.0.206(zod@4.4.3))(better-sqlite3@12.11.1) + '@objectstack/formula': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/mcp': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/objectql': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/observability': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-approvals': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-audit': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-auth': 9.7.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(ai@6.0.206(zod@4.4.3))(better-call@1.3.6(zod@4.4.3))(better-sqlite3@12.11.1)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.3.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@objectstack/plugin-email': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-hono-server': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-org-scoping': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-reports': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-security': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-sharing': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-webhooks': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/rest': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/runtime': 9.7.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(ai@6.0.206(zod@4.4.3))(better-call@1.3.6(zod@4.4.3))(better-sqlite3@12.11.1)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.3.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@objectstack/service-ai': 9.7.0(@ai-sdk/anthropic@3.0.84(zod@4.4.3))(@ai-sdk/gateway@3.0.132(zod@4.4.3))(@ai-sdk/google@3.0.82(zod@4.4.3))(@ai-sdk/openai@3.0.71(zod@4.4.3)) + '@objectstack/service-analytics': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-automation': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-cache': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-datasource': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-feed': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-job': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-messaging': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-package': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-queue': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-realtime': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-settings': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-storage': 9.7.0(@aws-sdk/client-s3@3.984.0)(ai@6.0.206(zod@4.4.3)) + '@objectstack/setup': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/studio': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/trigger-api': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/trigger-record-change': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/trigger-schedule': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) '@oclif/core': 4.11.4 - bundle-require: 5.1.0(esbuild@0.28.0) + bundle-require: 5.1.0(esbuild@0.28.1) chalk: 5.6.2 chokidar: 5.0.0 dotenv-flow: 4.1.0 - esbuild: 0.28.0 + esbuild: 0.28.1 ts-morph: 28.0.0 tsx: 4.22.4 yaml: 2.9.0 zod: 4.4.3 transitivePeerDependencies: - - '@ai-sdk/anthropic' - - '@ai-sdk/google' - - '@ai-sdk/openai' - '@aws-sdk/client-s3' - '@aws-sdk/credential-providers' - '@aws-sdk/s3-request-presigner' @@ -6590,35 +6890,35 @@ snapshots: - vitest - vue - '@objectstack/client@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/client@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/console@8.0.1': {} + '@objectstack/console@9.7.0': {} - '@objectstack/core@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/core@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) zod: 4.4.3 transitivePeerDependencies: - ai - '@objectstack/driver-memory@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/driver-memory@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) mingo: 7.2.1 transitivePeerDependencies: - ai - '@objectstack/driver-mongodb@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/driver-mongodb@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - mongodb: 7.2.0 + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + mongodb: 7.3.0 nanoid: 5.1.11 transitivePeerDependencies: - '@aws-sdk/credential-providers' @@ -6630,14 +6930,14 @@ snapshots: - snappy - socks - '@objectstack/driver-sql@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/driver-sql@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - knex: 3.2.10(better-sqlite3@12.10.0) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + knex: 3.2.10(better-sqlite3@12.11.1) nanoid: 5.1.11 optionalDependencies: - better-sqlite3: 12.10.0 + better-sqlite3: 12.11.1 transitivePeerDependencies: - ai - mysql @@ -6645,12 +6945,12 @@ snapshots: - pg-query-stream - supports-color - '@objectstack/driver-sqlite-wasm@8.0.1(ai@6.0.193(zod@4.4.3))(better-sqlite3@12.10.0)': + '@objectstack/driver-sqlite-wasm@9.7.0(ai@6.0.206(zod@4.4.3))(better-sqlite3@12.11.1)': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/driver-sql': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - knex: 3.2.10(better-sqlite3@12.10.0) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/driver-sql': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + knex: 3.2.10(better-sqlite3@12.11.1) nanoid: 5.1.11 sql.js: 1.14.1 transitivePeerDependencies: @@ -6665,48 +6965,48 @@ snapshots: - supports-color - tedious - '@objectstack/formula@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/formula@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: '@marcbachmann/cel-js': 7.6.1 - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/mcp@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/mcp@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) zod: 4.4.3 transitivePeerDependencies: - '@cfworker/json-schema' - ai - supports-color - '@objectstack/metadata-core@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/metadata-core@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) zod: 4.4.3 transitivePeerDependencies: - ai - '@objectstack/metadata-fs@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/metadata-fs@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/metadata-core': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/metadata-core': 9.7.0(ai@6.0.206(zod@4.4.3)) chokidar: 5.0.0 transitivePeerDependencies: - ai - vitest - '@objectstack/metadata@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/metadata@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/metadata-core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/metadata-fs': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/metadata-core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/metadata-fs': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) chokidar: 5.0.0 glob: 13.0.6 js-yaml: 4.2.0 @@ -6715,63 +7015,63 @@ snapshots: - ai - vitest - '@objectstack/objectql@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/objectql@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/formula': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/metadata-core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/formula': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/metadata-core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) ajv: 8.20.0 zod: 4.4.3 transitivePeerDependencies: - ai - vitest - '@objectstack/observability@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/observability@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/platform-objects@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/platform-objects@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/metadata-core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/metadata-core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-approvals@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-approvals@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/formula': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/metadata-core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/formula': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/metadata-core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-audit@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-audit@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-auth@8.0.1(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(ai@6.0.193(zod@4.4.3))(better-call@1.3.5(zod@4.4.3))(better-sqlite3@12.10.0)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.2.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@objectstack/plugin-auth@9.7.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(ai@6.0.206(zod@4.4.3))(better-call@1.3.6(zod@4.4.3))(better-sqlite3@12.11.1)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.3.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/oauth-provider': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-auth@1.6.13(@opentelemetry/api@1.9.1)(better-sqlite3@12.10.0)(mongodb@7.2.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(better-call@1.3.5(zod@4.4.3)) + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/oauth-provider': 1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.6.19(@opentelemetry/api@1.9.1)(better-sqlite3@12.11.1)(mongodb@7.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(better-call@1.3.6(zod@4.4.3)) '@noble/hashes': 2.2.0 - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) - better-auth: 1.6.13(@opentelemetry/api@1.9.1)(better-sqlite3@12.10.0)(mongodb@7.2.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) + better-auth: 1.6.19(@opentelemetry/api@1.9.1)(better-sqlite3@12.11.1)(mongodb@7.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) transitivePeerDependencies: - '@better-auth/utils' - '@better-fetch/fetch' @@ -6802,115 +7102,101 @@ snapshots: - vitest - vue - '@objectstack/plugin-email@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-email@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-hono-server@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-hono-server@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@hono/node-server': 2.0.4(hono@4.12.23) - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) - hono: 4.12.23 + '@hono/node-server': 2.0.4(hono@4.12.25) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) + hono: 4.12.25 transitivePeerDependencies: - ai - '@objectstack/plugin-org-scoping@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-org-scoping@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-reports@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-reports@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-security@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-security@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-sharing@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-sharing@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/objectql': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/objectql': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-trigger-record-change@8.0.1(ai@6.0.193(zod@4.4.3))': - dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - transitivePeerDependencies: - - ai - - '@objectstack/plugin-trigger-schedule@8.0.1(ai@6.0.193(zod@4.4.3))': - dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - transitivePeerDependencies: - - ai - - '@objectstack/plugin-webhooks@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/plugin-webhooks@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-messaging': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-messaging': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/rest@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/rest@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-package': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-package': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) zod: 4.4.3 transitivePeerDependencies: - ai - '@objectstack/runtime@8.0.1(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(ai@6.0.193(zod@4.4.3))(better-call@1.3.5(zod@4.4.3))(better-sqlite3@12.10.0)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.2.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': - dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/driver-memory': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/driver-sql': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/driver-sqlite-wasm': 8.0.1(ai@6.0.193(zod@4.4.3))(better-sqlite3@12.10.0) - '@objectstack/formula': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/metadata': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/objectql': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/observability': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-auth': 8.0.1(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(ai@6.0.193(zod@4.4.3))(better-call@1.3.5(zod@4.4.3))(better-sqlite3@12.10.0)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.2.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@objectstack/plugin-org-scoping': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/plugin-security': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/rest': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-cluster': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/service-i18n': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/runtime@9.7.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(ai@6.0.206(zod@4.4.3))(better-call@1.3.6(zod@4.4.3))(better-sqlite3@12.11.1)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.3.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/driver-memory': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/driver-sql': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/driver-sqlite-wasm': 9.7.0(ai@6.0.206(zod@4.4.3))(better-sqlite3@12.11.1) + '@objectstack/formula': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/metadata': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/objectql': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/observability': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-auth': 9.7.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(ai@6.0.206(zod@4.4.3))(better-call@1.3.6(zod@4.4.3))(better-sqlite3@12.11.1)(jose@6.2.3)(kysely@0.29.2)(mongodb@7.3.0)(nanostores@1.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@objectstack/plugin-org-scoping': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/plugin-security': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/rest': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-cluster': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/service-i18n': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) quickjs-emscripten: 0.32.0 zod: 4.4.3 optionalDependencies: - '@objectstack/driver-mongodb': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/driver-mongodb': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@better-auth/utils' @@ -6954,141 +7240,181 @@ snapshots: - vitest - vue - '@objectstack/service-ai@8.0.1(@ai-sdk/gateway@3.0.121(zod@4.4.3))': + '@objectstack/service-ai@9.7.0(@ai-sdk/anthropic@3.0.84(zod@4.4.3))(@ai-sdk/gateway@3.0.132(zod@4.4.3))(@ai-sdk/google@3.0.82(zod@4.4.3))(@ai-sdk/openai@3.0.71(zod@4.4.3))': dependencies: '@ai-sdk/provider': 3.0.10 - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/formula': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) - ai: 6.0.193(zod@4.4.3) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/formula': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) + ai: 6.0.206(zod@4.4.3) zod: 4.4.3 optionalDependencies: - '@ai-sdk/gateway': 3.0.121(zod@4.4.3) + '@ai-sdk/anthropic': 3.0.84(zod@4.4.3) + '@ai-sdk/gateway': 3.0.132(zod@4.4.3) + '@ai-sdk/google': 3.0.82(zod@4.4.3) + '@ai-sdk/openai': 3.0.71(zod@4.4.3) - '@objectstack/service-analytics@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-analytics@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-automation@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-automation@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/formula': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/formula': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-cache@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-cache@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/observability': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/observability': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-cluster@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-cluster@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-datasource@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-datasource@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-feed@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-feed@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-i18n@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-i18n@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-job@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-job@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) croner: 10.0.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-messaging@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-messaging@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-package@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-package@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - '@objectstack/service-queue@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-queue@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/service-realtime@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-realtime@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/service-settings@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-settings@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: '@noble/ciphers': 2.2.0 - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/platform-objects': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/types': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/types': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai - vitest - '@objectstack/service-storage@8.0.1(@aws-sdk/client-s3@3.984.0)(ai@6.0.193(zod@4.4.3))': + '@objectstack/service-storage@9.7.0(@aws-sdk/client-s3@3.984.0)(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/core': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/observability': 8.0.1(ai@6.0.193(zod@4.4.3)) - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/observability': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) optionalDependencies: '@aws-sdk/client-s3': 3.984.0 transitivePeerDependencies: - ai - '@objectstack/spec@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/setup@9.7.0(ai@6.0.206(zod@4.4.3))': + dependencies: + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + transitivePeerDependencies: + - ai + - vitest + + '@objectstack/spec@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: zod: 4.4.3 optionalDependencies: - ai: 6.0.193(zod@4.4.3) + ai: 6.0.206(zod@4.4.3) + + '@objectstack/studio@9.7.0(ai@6.0.206(zod@4.4.3))': + dependencies: + '@objectstack/platform-objects': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + transitivePeerDependencies: + - ai + - vitest + + '@objectstack/trigger-api@9.7.0(ai@6.0.206(zod@4.4.3))': + dependencies: + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + transitivePeerDependencies: + - ai + + '@objectstack/trigger-record-change@9.7.0(ai@6.0.206(zod@4.4.3))': + dependencies: + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + transitivePeerDependencies: + - ai - '@objectstack/types@8.0.1(ai@6.0.193(zod@4.4.3))': + '@objectstack/trigger-schedule@9.7.0(ai@6.0.206(zod@4.4.3))': dependencies: - '@objectstack/spec': 8.0.1(ai@6.0.193(zod@4.4.3)) + '@objectstack/core': 9.7.0(ai@6.0.206(zod@4.4.3)) + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) + transitivePeerDependencies: + - ai + + '@objectstack/types@9.7.0(ai@6.0.206(zod@4.4.3))': + dependencies: + '@objectstack/spec': 9.7.0(ai@6.0.206(zod@4.4.3)) transitivePeerDependencies: - ai @@ -8026,11 +8352,11 @@ snapshots: dependencies: humanize-ms: 1.2.1 - ai@6.0.193(zod@4.4.3): + ai@6.0.206(zod@4.4.3): dependencies: - '@ai-sdk/gateway': 3.0.121(zod@4.4.3) + '@ai-sdk/gateway': 3.0.132(zod@4.4.3) '@ai-sdk/provider': 3.0.10 - '@ai-sdk/provider-utils': 4.0.27(zod@4.4.3) + '@ai-sdk/provider-utils': 4.0.29(zod@4.4.3) '@opentelemetry/api': 1.9.1 zod: 4.4.3 @@ -8096,28 +8422,28 @@ snapshots: baseline-browser-mapping@2.10.32: {} - better-auth@1.6.13(@opentelemetry/api@1.9.1)(better-sqlite3@12.10.0)(mongodb@7.2.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6): - dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/kysely-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.29.2) - '@better-auth/memory-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/mongo-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(mongodb@7.2.0) - '@better-auth/prisma-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1) - '@better-auth/telemetry': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 + better-auth@1.6.19(@opentelemetry/api@1.9.1)(better-sqlite3@12.11.1)(mongodb@7.3.0)(next@16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + '@better-auth/core': 1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0) + '@better-auth/drizzle-adapter': 1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2) + '@better-auth/kysely-adapter': 1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)(kysely@0.29.2) + '@better-auth/memory-adapter': 1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2) + '@better-auth/mongo-adapter': 1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)(mongodb@7.3.0) + '@better-auth/prisma-adapter': 1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2) + '@better-auth/telemetry': 1.6.19(@better-auth/core@1.6.19(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@opentelemetry/api@1.9.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1) + '@better-auth/utils': 0.4.2 + '@better-fetch/fetch': 1.3.1 '@noble/ciphers': 2.2.0 '@noble/hashes': 2.2.0 - better-call: 1.3.5(zod@4.4.3) + better-call: 1.3.6(zod@4.4.3) defu: 6.1.7 jose: 6.2.3 kysely: 0.29.2 nanostores: 1.3.0 zod: 4.4.3 optionalDependencies: - better-sqlite3: 12.10.0 - mongodb: 7.2.0 + better-sqlite3: 12.11.1 + mongodb: 7.3.0 next: 16.2.6(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react: 19.2.6 react-dom: 19.2.6(react@19.2.6) @@ -8125,10 +8451,10 @@ snapshots: - '@cloudflare/workers-types' - '@opentelemetry/api' - better-call@1.3.5(zod@4.4.3): + better-call@1.3.6(zod@4.4.3): dependencies: - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 + '@better-auth/utils': 0.4.2 + '@better-fetch/fetch': 1.3.1 rou3: 0.7.12 set-cookie-parser: 3.1.0 optionalDependencies: @@ -8138,7 +8464,7 @@ snapshots: dependencies: is-windows: 1.0.2 - better-sqlite3@12.10.0: + better-sqlite3@12.11.1: dependencies: bindings: 1.5.0 prebuild-install: 7.1.3 @@ -8196,9 +8522,9 @@ snapshots: ieee754: 1.2.1 optional: true - bundle-require@5.1.0(esbuild@0.28.0): + bundle-require@5.1.0(esbuild@0.28.1): dependencies: - esbuild: 0.28.0 + esbuild: 0.28.1 load-tsconfig: 0.2.5 bytes@3.1.2: {} @@ -8542,6 +8868,35 @@ snapshots: '@esbuild/win32-ia32': 0.28.0 '@esbuild/win32-x64': 0.28.0 + esbuild@0.28.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -9074,6 +9429,8 @@ snapshots: hono@4.12.23: {} + hono@4.12.25: {} + html-void-elements@3.0.0: {} http-errors@2.0.1: @@ -9205,7 +9562,7 @@ snapshots: kleur@4.1.5: {} - knex@3.2.10(better-sqlite3@12.10.0): + knex@3.2.10(better-sqlite3@12.11.1): dependencies: colorette: 2.0.19 commander: 10.0.1 @@ -9222,7 +9579,7 @@ snapshots: tarn: 3.0.2 tildify: 2.0.0 optionalDependencies: - better-sqlite3: 12.10.0 + better-sqlite3: 12.11.1 transitivePeerDependencies: - supports-color @@ -9815,7 +10172,7 @@ snapshots: '@types/whatwg-url': 13.0.0 whatwg-url: 14.2.0 - mongodb@7.2.0: + mongodb@7.3.0: dependencies: '@mongodb-js/saslprep': 1.4.11 bson: 7.2.0 @@ -10588,7 +10945,7 @@ snapshots: tsx@4.22.4: dependencies: - esbuild: 0.28.0 + esbuild: 0.28.1 optionalDependencies: fsevents: 2.3.3